summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/freescale/fman/Peripherals/FM/MAC/fman_memac.c8
-rw-r--r--drivers/net/ethernet/freescale/fman/Peripherals/FM/MAC/memac.c9
-rw-r--r--drivers/net/ethernet/freescale/fman/inc/flib/fsl_fman_memac.h2
3 files changed, 15 insertions, 4 deletions
diff --git a/drivers/net/ethernet/freescale/fman/Peripherals/FM/MAC/fman_memac.c b/drivers/net/ethernet/freescale/fman/Peripherals/FM/MAC/fman_memac.c
index a79c208..00995a1 100644
--- a/drivers/net/ethernet/freescale/fman/Peripherals/FM/MAC/fman_memac.c
+++ b/drivers/net/ethernet/freescale/fman/Peripherals/FM/MAC/fman_memac.c
@@ -156,6 +156,7 @@ int fman_memac_init(struct memac_regs *regs,
struct memac_cfg *cfg,
enum enet_interface enet_interface,
enum enet_speed enet_speed,
+ bool slow_10g_if,
uint32_t exceptions)
{
uint32_t tmp;
@@ -216,8 +217,13 @@ int fman_memac_init(struct memac_regs *regs,
tmp = 0;
if (enet_interface == E_ENET_IF_XGMII ||
enet_interface == E_ENET_IF_XFI) {
- tmp |= (TX_FIFO_SECTIONS_TX_AVAIL_10G |
+ if(slow_10g_if) {
+ tmp |= (TX_FIFO_SECTIONS_TX_AVAIL_SLOW_10G |
TX_FIFO_SECTIONS_TX_EMPTY_DEFAULT_10G);
+ } else {
+ tmp |= (TX_FIFO_SECTIONS_TX_AVAIL_10G |
+ TX_FIFO_SECTIONS_TX_EMPTY_DEFAULT_10G);
+ }
} else {
tmp |= (TX_FIFO_SECTIONS_TX_AVAIL_1G |
TX_FIFO_SECTIONS_TX_EMPTY_DEFAULT_1G);
diff --git a/drivers/net/ethernet/freescale/fman/Peripherals/FM/MAC/memac.c b/drivers/net/ethernet/freescale/fman/Peripherals/FM/MAC/memac.c
index 24913de..8782ad2 100644
--- a/drivers/net/ethernet/freescale/fman/Peripherals/FM/MAC/memac.c
+++ b/drivers/net/ethernet/freescale/fman/Peripherals/FM/MAC/memac.c
@@ -885,7 +885,7 @@ static t_Error MemacInit(t_Handle h_Memac)
t_EnetAddr ethAddr;
e_FmMacType portType;
t_Error err;
-
+ bool slow_10g_if = FALSE;
if (p_Memac->macId == 3) /* This is a quick WA */
g_MemacRegs = p_Memac->p_MemMap;
@@ -893,8 +893,10 @@ static t_Error MemacInit(t_Handle h_Memac)
SANITY_CHECK_RETURN_ERROR(p_Memac->p_MemacDriverParam, E_INVALID_STATE);
SANITY_CHECK_RETURN_ERROR(p_Memac->fmMacControllerDriver.h_Fm, E_INVALID_HANDLE);
- /* not needed! */
- /*FM_GetRevision(p_Memac->fmMacControllerDriver.h_Fm, &p_Memac->fmMacControllerDriver.fmRevInfo);*/
+ FM_GetRevision(p_Memac->fmMacControllerDriver.h_Fm, &p_Memac->fmMacControllerDriver.fmRevInfo);
+ if (p_Memac->fmMacControllerDriver.fmRevInfo.majorRev == 6 &&
+ p_Memac->fmMacControllerDriver.fmRevInfo.minorRev == 4)
+ slow_10g_if = TRUE;
CHECK_INIT_PARAMETERS(p_Memac, CheckInitParameters);
@@ -918,6 +920,7 @@ static t_Error MemacInit(t_Handle h_Memac)
p_Memac->p_MemacDriverParam,
enet_interface,
enet_speed,
+ slow_10g_if,
p_Memac->exceptions);
#ifdef FM_RX_FIFO_CORRUPT_ERRATA_10GMAC_A006320
diff --git a/drivers/net/ethernet/freescale/fman/inc/flib/fsl_fman_memac.h b/drivers/net/ethernet/freescale/fman/inc/flib/fsl_fman_memac.h
index 2d2e795..0dd8286 100644
--- a/drivers/net/ethernet/freescale/fman/inc/flib/fsl_fman_memac.h
+++ b/drivers/net/ethernet/freescale/fman/inc/flib/fsl_fman_memac.h
@@ -71,6 +71,7 @@
#define TX_FIFO_SECTIONS_TX_EMPTY_PFC_1G 0x00040000
#define TX_FIFO_SECTIONS_TX_AVAIL_10G 0x00000019
#define TX_FIFO_SECTIONS_TX_AVAIL_1G 0x00000020
+#define TX_FIFO_SECTIONS_TX_AVAIL_SLOW_10G 0x00000060
#define GET_TX_EMPTY_DEFAULT_VALUE(_val) \
_val &= ~TX_FIFO_SECTIONS_TX_EMPTY_MASK; \
@@ -369,6 +370,7 @@ int fman_memac_init(struct memac_regs *regs,
struct memac_cfg *cfg,
enum enet_interface enet_interface,
enum enet_speed enet_speed,
+ bool slow_10g_if,
uint32_t exceptions);
void fman_memac_enable(struct memac_regs *regs, bool apply_rx, bool apply_tx);