diff options
-rw-r--r-- | drivers/net/ethernet/freescale/fec.h | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/freescale/fec_main.c | 16 |
2 files changed, 16 insertions, 4 deletions
diff --git a/drivers/net/ethernet/freescale/fec.h b/drivers/net/ethernet/freescale/fec.h index 4778b663653e..bf80855dd0dd 100644 --- a/drivers/net/ethernet/freescale/fec.h +++ b/drivers/net/ethernet/freescale/fec.h | |||
@@ -452,6 +452,10 @@ struct bufdesc_ex { | |||
452 | * initialisation. | 452 | * initialisation. |
453 | */ | 453 | */ |
454 | #define FEC_QUIRK_MIB_CLEAR (1 << 15) | 454 | #define FEC_QUIRK_MIB_CLEAR (1 << 15) |
455 | /* Only i.MX25/i.MX27/i.MX28 controller supports FRBR,FRSR registers, | ||
456 | * those FIFO receive registers are resolved in other platforms. | ||
457 | */ | ||
458 | #define FEC_QUIRK_HAS_FRREG (1 << 16) | ||
455 | 459 | ||
456 | struct bufdesc_prop { | 460 | struct bufdesc_prop { |
457 | int qid; | 461 | int qid; |
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c index bf9b9fd6d2a0..7b98bb75ba8a 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c | |||
@@ -91,14 +91,16 @@ static struct platform_device_id fec_devtype[] = { | |||
91 | .driver_data = 0, | 91 | .driver_data = 0, |
92 | }, { | 92 | }, { |
93 | .name = "imx25-fec", | 93 | .name = "imx25-fec", |
94 | .driver_data = FEC_QUIRK_USE_GASKET | FEC_QUIRK_MIB_CLEAR, | 94 | .driver_data = FEC_QUIRK_USE_GASKET | FEC_QUIRK_MIB_CLEAR | |
95 | FEC_QUIRK_HAS_FRREG, | ||
95 | }, { | 96 | }, { |
96 | .name = "imx27-fec", | 97 | .name = "imx27-fec", |
97 | .driver_data = FEC_QUIRK_MIB_CLEAR, | 98 | .driver_data = FEC_QUIRK_MIB_CLEAR | FEC_QUIRK_HAS_FRREG, |
98 | }, { | 99 | }, { |
99 | .name = "imx28-fec", | 100 | .name = "imx28-fec", |
100 | .driver_data = FEC_QUIRK_ENET_MAC | FEC_QUIRK_SWAP_FRAME | | 101 | .driver_data = FEC_QUIRK_ENET_MAC | FEC_QUIRK_SWAP_FRAME | |
101 | FEC_QUIRK_SINGLE_MDIO | FEC_QUIRK_HAS_RACC, | 102 | FEC_QUIRK_SINGLE_MDIO | FEC_QUIRK_HAS_RACC | |
103 | FEC_QUIRK_HAS_FRREG, | ||
102 | }, { | 104 | }, { |
103 | .name = "imx6q-fec", | 105 | .name = "imx6q-fec", |
104 | .driver_data = FEC_QUIRK_ENET_MAC | FEC_QUIRK_HAS_GBIT | | 106 | .driver_data = FEC_QUIRK_ENET_MAC | FEC_QUIRK_HAS_GBIT | |
@@ -2164,7 +2166,13 @@ static void fec_enet_get_regs(struct net_device *ndev, | |||
2164 | memset(buf, 0, regs->len); | 2166 | memset(buf, 0, regs->len); |
2165 | 2167 | ||
2166 | for (i = 0; i < ARRAY_SIZE(fec_enet_register_offset); i++) { | 2168 | for (i = 0; i < ARRAY_SIZE(fec_enet_register_offset); i++) { |
2167 | off = fec_enet_register_offset[i] / 4; | 2169 | off = fec_enet_register_offset[i]; |
2170 | |||
2171 | if ((off == FEC_R_BOUND || off == FEC_R_FSTART) && | ||
2172 | !(fep->quirks & FEC_QUIRK_HAS_FRREG)) | ||
2173 | continue; | ||
2174 | |||
2175 | off >>= 2; | ||
2168 | buf[off] = readl(&theregs[off]); | 2176 | buf[off] = readl(&theregs[off]); |
2169 | } | 2177 | } |
2170 | } | 2178 | } |