summaryrefslogtreecommitdiff
path: root/drivers/net
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/Kconfig55
-rw-r--r--drivers/net/ethernet/freescale/dpa/dpaa_eth_base.c2
-rw-r--r--drivers/net/ethernet/freescale/fman/Peripherals/FM/Pcd/fm_cc.c9
-rw-r--r--drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm.c88
-rw-r--r--drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm_compat.c18
-rw-r--r--drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm_compat.h12
-rw-r--r--drivers/net/ethernet/freescale/gianfar.c9
-rw-r--r--drivers/net/ethernet/freescale/gianfar.h4
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(&regs->dmactrl);
tempval |= DMACTRL_INIT_SETTINGS;
- if (priv->dma_endian_le)
- tempval |= DMACTRL_LE;
gfar_write(&regs->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;