diff options
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); |