diff options
Diffstat (limited to 'drivers/net')
8 files changed, 166 insertions, 31 deletions
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index ff1e2a0..9e35d1b 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig @@ -90,10 +90,27 @@ config ASF_IPV6 This option compiles the ASF for IPV6 Firewall and IPsec. +config ASF_LINUX_QOS + default n + bool "ASF Linux QoS Integration" + depends on AS_FASTPATH + select NETFILTER_XT_TARGET_DSCP + select NET_SCHED + select NET_SCH_PRIO + select NET_SCH_TBF + select NET_SCH_DRR + select NET_CLS + select NET_CLS_BASIC + select NET_CLS_U32 + select NET_CLS_FLOW + select NET_SCH_FIFO + select IP_NF_MANGLE + select IP6_NF_MANGLE + config ASF_QOS - default y + default n bool "ASF QoS Support" - depends on AS_FASTPATH + depends on AS_FASTPATH && !ASF_LINUX_QOS && !FSL_DPAA_ETH select NETFILTER_XT_TARGET_DSCP select NET_SCHED select NET_SCH_PRIO @@ -114,23 +131,29 @@ config ASF_EGRESS_QOS config ASF_INGRESS_MARKER default y - bool "DSCP Marking Support" - depends on ASF_QOS && ASF_EGRESS_QOS + bool "ASF DSCP Marking Support" + depends on AS_FASTPATH + depends on ASF_QOS ---help--- - Choose this option if you wish to utilize ASF Marking support. - Currently only DSCP marking is supported. + Choose this option if you wish to utilize + ASF Marking support. + Currently only DSCP marking + is supported. config ASF_EGRESS_SCH default y - bool "S/W Scheduler Support" - depends on ASF_QOS && ASF_EGRESS_QOS && !DPA_ETH + bool "ASF S/W Scheduler Support" + depends on ASF_QOS && ASF_EGRESS_QOS && !FSL_DPAA_ETH ---help--- - Choose this option if you wish to utilize ASF S/W based Scheduler support. + Choose this option + if you wish to utilize + ASF S/W based + Scheduler support. config ASF_EGRESS_SHAPER default y - bool "S/W Shaper Support" - depends on ASF_QOS && ASF_EGRESS_QOS && ASF_EGRESS_SCH && !DPA_ETH + bool "ASF S/W Shaper Support" + depends on ASF_QOS && ASF_EGRESS_QOS && ASF_EGRESS_SCH && !FSL_DPAA_ETH ---help--- Choose this option if you wish to utilize ASF S/W based Shaping support. @@ -148,13 +171,15 @@ choice default ASF_SCH_PRIO config ASF_SCH_PRIO - bool "Strict Priority (PRIO)" + bool "ASF Strict Priority (PRIO)" ---help--- - This option compiles the ASF to utilize eTSEC(NON-DPAA) - H/W Scheduler with PRIORITY algorithm. + This option compiles the ASF + to utilize eTSEC(NON-DPAA) H/W + Scheduler with PRIORITY + algorithm. config ASF_SCH_MWRR - bool "Modified Weighted Round-Robin (MWRR)" + bool "ASF Modified Weighted Round-Robin (MWRR)" ---help--- This option compiles the ASF to utilize eTSEC(NON-DPAA) H/W Scheduler with Modified Weighted Round-Robin algorithm. diff --git a/drivers/net/ethernet/freescale/dpa/dpaa_eth_base.c b/drivers/net/ethernet/freescale/dpa/dpaa_eth_base.c index 9a0309d..9f55496 100644 --- a/drivers/net/ethernet/freescale/dpa/dpaa_eth_base.c +++ b/drivers/net/ethernet/freescale/dpa/dpaa_eth_base.c @@ -187,7 +187,7 @@ int dpa_bp_shared_port_seed(struct dpa_bp *bp) /* seed pool with buffers from that memory region */ if (bp->seed_pool) { int count = bp->target_count; - size_t addr = bp->paddr; + dma_addr_t addr = bp->paddr; while (count) { struct bm_buffer bufs[8]; diff --git a/drivers/net/ethernet/freescale/fman/Peripherals/FM/Pcd/fm_cc.c b/drivers/net/ethernet/freescale/fman/Peripherals/FM/Pcd/fm_cc.c index f439167..13a5c15 100644 --- a/drivers/net/ethernet/freescale/fman/Peripherals/FM/Pcd/fm_cc.c +++ b/drivers/net/ethernet/freescale/fman/Peripherals/FM/Pcd/fm_cc.c @@ -6615,7 +6615,6 @@ t_Error FM_PCD_MatchTableModifyKey(t_Handle h_CcNode, uint16_t keyIndex, { t_FmPcd *p_FmPcd; t_FmPcdCcNode *p_CcNode = (t_FmPcdCcNode *)h_CcNode; - t_List h_List; t_Error err = E_OK; SANITY_CHECK_RETURN_ERROR(p_CcNode, E_INVALID_HANDLE); @@ -6624,18 +6623,16 @@ t_Error FM_PCD_MatchTableModifyKey(t_Handle h_CcNode, uint16_t keyIndex, SANITY_CHECK_RETURN_ERROR(p_FmPcd, E_INVALID_HANDLE); SANITY_CHECK_RETURN_ERROR(p_FmPcd->h_Hc, E_INVALID_HANDLE); - INIT_LIST(&h_List); - err = FmPcdCcNodeTreeTryLock(p_FmPcd, p_CcNode, &h_List); - if (err) + if (!FmPcdLockTryLockAll(p_FmPcd)) { - DBG(TRACE, ("Node's trees lock failed")); + DBG(TRACE, ("FmPcdLockTryLockAll failed")); return ERROR_CODE(E_BUSY); } err = FmPcdCcModifyKey(p_FmPcd, p_CcNode, keyIndex, keySize, p_Key, p_Mask); - FmPcdCcNodeTreeReleaseLock(p_FmPcd, &h_List); + FmPcdLockUnlockAll(p_FmPcd); switch(GET_ERROR_TYPE(err) ) { diff --git a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm.c b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm.c index 9224703..caebc2e 100644 --- a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm.c +++ b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm.c @@ -1024,6 +1024,94 @@ Status: feature not supported } #if defined(CONFIG_COMPAT) + case FM_PCD_IOC_KG_SCHEME_GET_CNTR_COMPAT: +#endif + case FM_PCD_IOC_KG_SCHEME_GET_CNTR: + { + ioc_fm_pcd_kg_scheme_spc_t *param; + + param = (ioc_fm_pcd_kg_scheme_spc_t *) XX_Malloc(sizeof(ioc_fm_pcd_kg_scheme_spc_t)); + if (!param) + RETURN_ERROR(MINOR, E_NO_MEMORY, ("IOCTL FM PCD")); + + memset(param, 0, sizeof(ioc_fm_pcd_kg_scheme_spc_t)); + +#if defined(CONFIG_COMPAT) + if (compat) + { + ioc_compat_fm_pcd_kg_scheme_spc_t *compat_param = NULL; + + compat_param = (ioc_compat_fm_pcd_kg_scheme_spc_t *) XX_Malloc( + sizeof(ioc_compat_fm_pcd_kg_scheme_spc_t)); + if (!compat_param) + { + XX_Free(param); + RETURN_ERROR(MINOR, E_NO_MEMORY, ("IOCTL FM PCD")); + } + + memset(compat_param, 0, sizeof(ioc_compat_fm_pcd_kg_scheme_spc_t)); + + if (copy_from_user(compat_param, (ioc_compat_fm_pcd_kg_scheme_spc_t *) compat_ptr(arg), + sizeof(ioc_compat_fm_pcd_kg_scheme_spc_t))) + { + XX_Free(compat_param); + XX_Free(param); + RETURN_ERROR(MINOR, E_WRITE_FAILED, NO_MSG); + } + + compat_copy_fm_pcd_kg_scheme_spc(compat_param, param, COMPAT_US_TO_K); + + XX_Free(compat_param); + } + else +#endif + { + if (copy_from_user(param, (ioc_fm_pcd_kg_scheme_spc_t *)arg, + sizeof(ioc_fm_pcd_kg_scheme_spc_t))) + { + XX_Free(param); + RETURN_ERROR(MINOR, E_WRITE_FAILED, NO_MSG); + } + } + + param->val = FM_PCD_KgSchemeGetCounter((t_Handle)param->id); + +#if defined(CONFIG_COMPAT) + if (compat) + { + ioc_compat_fm_pcd_kg_scheme_spc_t *compat_param; + + compat_param = (ioc_compat_fm_pcd_kg_scheme_spc_t *) XX_Malloc( + sizeof(ioc_compat_fm_pcd_kg_scheme_spc_t)); + if (!compat_param) + { + XX_Free(param); + RETURN_ERROR(MINOR, E_NO_MEMORY, ("IOCTL FM PCD")); + } + + memset(compat_param, 0, sizeof(ioc_compat_fm_pcd_kg_scheme_spc_t)); + compat_copy_fm_pcd_kg_scheme_spc(compat_param, param, COMPAT_K_TO_US); + if (copy_to_user((ioc_compat_fm_pcd_kg_scheme_spc_t *)compat_ptr(arg), + compat_param, + sizeof(ioc_compat_fm_pcd_kg_scheme_spc_t))) + err = E_READ_FAILED; + + XX_Free(compat_param); + } + else +#endif + { + if (copy_to_user((ioc_fm_pcd_kg_scheme_spc_t *)arg, + param, + sizeof(ioc_fm_pcd_kg_scheme_spc_t))) + err = E_READ_FAILED; + } + + XX_Free(param); + break; + } + +#if defined(CONFIG_COMPAT) case FM_PCD_IOC_KG_SCHEME_DELETE_COMPAT: #endif case FM_PCD_IOC_KG_SCHEME_DELETE: diff --git a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm_compat.c b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm_compat.c index ea0885a..baf2a33 100644 --- a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm_compat.c +++ b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm_compat.c @@ -518,6 +518,7 @@ void compat_copy_fm_pcd_hash_table( param->hash_res_mask = compat_param->hash_res_mask; param->hash_shift = compat_param->hash_shift; param->match_key_size = compat_param->match_key_size; + param->aging_support = compat_param->aging_support; param->id = compat_pcd_id2ptr(compat_param->id); } else @@ -528,6 +529,7 @@ void compat_copy_fm_pcd_hash_table( compat_param->hash_res_mask = param->hash_res_mask; compat_param->hash_shift = param->hash_shift; compat_param->match_key_size = param->match_key_size; + compat_param->aging_support = param->aging_support; compat_param->id = compat_add_ptr2id(param->id, FM_MAP_TYPE_PCD_NODE); } @@ -733,6 +735,22 @@ void compat_copy_fm_pcd_kg_scheme( _fm_cpt_dbg(compat," ...->}\n"); } +void compat_copy_fm_pcd_kg_scheme_spc( + ioc_compat_fm_pcd_kg_scheme_spc_t *compat_param, + ioc_fm_pcd_kg_scheme_spc_t *param, + uint8_t compat) +{ + if (compat == COMPAT_US_TO_K) + { + param->id = compat_pcd_id2ptr(compat_param->id); + param->val = compat_param->val; + } else { + compat_param->id = compat_pcd_ptr2id(param->id); + compat_param->val = param->val; + } +} + + void compat_copy_fm_pcd_kg_scheme_select( ioc_compat_fm_pcd_kg_scheme_select_t *compat_param, ioc_fm_pcd_kg_scheme_select_t *param, diff --git a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm_compat.h b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm_compat.h index d89a64d..e2f779a 100644 --- a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm_compat.h +++ b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm_compat.h @@ -296,6 +296,7 @@ typedef struct ioc_compat_fm_pcd_hash_table_params_t { uint16_t hash_res_mask; uint8_t hash_shift; uint8_t match_key_size; + bool aging_support; ioc_compat_fm_pcd_cc_next_engine_params_t cc_next_engine_params_for_miss; compat_uptr_t id; } ioc_compat_fm_pcd_hash_table_params_t; @@ -537,6 +538,12 @@ typedef struct ioc_compat_fm_vsp_prs_result_params_t { compat_uptr_t p_fm_vsp; compat_uptr_t p_data; } ioc_compat_fm_vsp_prs_result_params_t; + +typedef struct ioc_compat_fm_pcd_kg_scheme_spc_t { + uint32_t val; + compat_uptr_t id; +} ioc_compat_fm_pcd_kg_scheme_spc_t; + #endif /* (DPAA_VERSION >= 11) */ typedef struct ioc_compat_fm_ctrl_mon_counters_params_t { @@ -710,6 +717,11 @@ void compat_copy_fm_vsp_prs_result_params( ioc_compat_fm_vsp_prs_result_params_t *compat_param, ioc_fm_vsp_prs_result_params_t *param, uint8_t compat); + +void compat_copy_fm_pcd_kg_scheme_spc( + ioc_compat_fm_pcd_kg_scheme_spc_t *compat_param, + ioc_fm_pcd_kg_scheme_spc_t *param, + uint8_t compat); #endif /* (DPAA_VERSION >= 11) */ /* } pcd compat functions */ #endif diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c index 406d0f0..a6f2d77 100644 --- a/drivers/net/ethernet/freescale/gianfar.c +++ b/drivers/net/ethernet/freescale/gianfar.c @@ -127,7 +127,11 @@ EXPORT_SYMBOL(devfp_tx_hook); #endif #endif +#ifdef CONFIG_PREEMPT_RT_FULL +#define TX_TIMEOUT (5*HZ) +#else #define TX_TIMEOUT (1*HZ) +#endif const char gfar_driver_version[] = "1.3"; @@ -975,9 +979,6 @@ static int gfar_of_init(struct platform_device *ofdev, struct net_device **pdev) /* Find the TBI PHY. If it's not there, we don't support SGMII */ priv->tbi_node = of_parse_phandle(np, "tbi-handle", 0); - - priv->dma_endian_le = of_property_read_bool(np, "fsl,dma-endian-le"); - #if defined CONFIG_FSL_GIANFAR_1588 /* Handle IEEE1588 node */ if (!gfar_ptp_init(np, priv)) @@ -2211,8 +2212,6 @@ void gfar_start(struct gfar_private *priv) /* Initialize DMACTRL to have WWR and WOP */ tempval = gfar_read(®s->dmactrl); tempval |= DMACTRL_INIT_SETTINGS; - if (priv->dma_endian_le) - tempval |= DMACTRL_LE; gfar_write(®s->dmactrl, tempval); /* Make sure we aren't stopped */ diff --git a/drivers/net/ethernet/freescale/gianfar.h b/drivers/net/ethernet/freescale/gianfar.h index 0f5bf84..0b0d7c9 100644 --- a/drivers/net/ethernet/freescale/gianfar.h +++ b/drivers/net/ethernet/freescale/gianfar.h @@ -328,7 +328,6 @@ extern const char gfar_driver_version[]; #define DMACTRL_INIT_SETTINGS 0x000000c3 #define DMACTRL_GRS 0x00000010 #define DMACTRL_GTS 0x00000008 -#define DMACTRL_LE 0x00008000 #define TSTAT_CLEAR_THALT_ALL 0xFF000000 #define TSTAT_CLEAR_THALT 0x80000000 @@ -1380,9 +1379,6 @@ struct gfar_private { /* L2 SRAM alloc of BDs */ bd_l2sram_en:1; - /* little endian dma buffer and descriptor host interface */ - unsigned int dma_endian_le; - /* The total tx and rx ring size for the enabled queues */ unsigned int total_tx_ring_size; unsigned int total_rx_ring_size; |