summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/freescale/fec.h4
-rw-r--r--drivers/net/ethernet/freescale/fec_main.c16
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
456struct bufdesc_prop { 460struct 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}