diff options
author | Mandy Lavi <mandy.lavi@freescale.com> | 2015-02-22 17:17:32 (GMT) |
---|---|---|
committer | Honghua Yin <Hong-Hua.Yin@freescale.com> | 2015-03-23 02:57:42 (GMT) |
commit | c3a52d1e1ef3484c0ecc1c937abd19262a859049 (patch) | |
tree | 9fd35391aab5ea82074c22276d60e5e1c1ed775b /drivers/net/ethernet/freescale | |
parent | ec7f1bf74013559bae9fd7740f990a563c7b09b0 (diff) | |
download | linux-fsl-qoriq-c3a52d1e1ef3484c0ecc1c937abd19262a859049.tar.xz |
fmd: memac: distinguish TX_FIFO_SECTIONS for t1024
t1024 requires for its 10g "best effort" port a different
value for TX_FIFO_SECTIONS[TX_AVAIL] than other 10g ports
in other devices:
0x60 instead of 0x19
Change-Id: I06fa4166fdff7ef39c02ebe4d97807230ae01f3d
Signed-off-by: Mandy Lavi <mandy.lavi@freescale.com>
Reviewed-on: http://git.am.freescale.net:8181/31540
Tested-by: Review Code-CDREVIEW <CDREVIEW@freescale.com>
Reviewed-by: Igal Liberman <Igal.Liberman@freescale.com>
Reviewed-by: Honghua Yin <Hong-Hua.Yin@freescale.com>
Diffstat (limited to 'drivers/net/ethernet/freescale')
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); |