diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/arm/ixp4xx_eth.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/drivers/net/arm/ixp4xx_eth.c b/drivers/net/arm/ixp4xx_eth.c index 5fce1d5c1a1a..9cc43476bfa6 100644 --- a/drivers/net/arm/ixp4xx_eth.c +++ b/drivers/net/arm/ixp4xx_eth.c | |||
@@ -335,11 +335,20 @@ static int ixp4xx_mdio_register(void) | |||
335 | if (!(mdio_bus = mdiobus_alloc())) | 335 | if (!(mdio_bus = mdiobus_alloc())) |
336 | return -ENOMEM; | 336 | return -ENOMEM; |
337 | 337 | ||
338 | /* All MII PHY accesses use NPE-B Ethernet registers */ | 338 | if (cpu_is_ixp43x()) { |
339 | spin_lock_init(&mdio_lock); | 339 | /* IXP43x lacks NPE-B and uses NPE-C for MII PHY access */ |
340 | mdio_regs = (struct eth_regs __iomem *)IXP4XX_EthB_BASE_VIRT; | 340 | if (!(ixp4xx_read_feature_bits() & IXP4XX_FEATURE_NPEC_ETH)) |
341 | __raw_writel(DEFAULT_CORE_CNTRL, &mdio_regs->core_control); | 341 | return -ENOSYS; |
342 | mdio_regs = (struct eth_regs __iomem *)IXP4XX_EthC_BASE_VIRT; | ||
343 | } else { | ||
344 | /* All MII PHY accesses use NPE-B Ethernet registers */ | ||
345 | if (!(ixp4xx_read_feature_bits() & IXP4XX_FEATURE_NPEB_ETH0)) | ||
346 | return -ENOSYS; | ||
347 | mdio_regs = (struct eth_regs __iomem *)IXP4XX_EthB_BASE_VIRT; | ||
348 | } | ||
342 | 349 | ||
350 | __raw_writel(DEFAULT_CORE_CNTRL, &mdio_regs->core_control); | ||
351 | spin_lock_init(&mdio_lock); | ||
343 | mdio_bus->name = "IXP4xx MII Bus"; | 352 | mdio_bus->name = "IXP4xx MII Bus"; |
344 | mdio_bus->read = &ixp4xx_mdio_read; | 353 | mdio_bus->read = &ixp4xx_mdio_read; |
345 | mdio_bus->write = &ixp4xx_mdio_write; | 354 | mdio_bus->write = &ixp4xx_mdio_write; |
@@ -1250,9 +1259,6 @@ static struct platform_driver ixp4xx_eth_driver = { | |||
1250 | static int __init eth_init_module(void) | 1259 | static int __init eth_init_module(void) |
1251 | { | 1260 | { |
1252 | int err; | 1261 | int err; |
1253 | if (!(ixp4xx_read_feature_bits() & IXP4XX_FEATURE_NPEB_ETH0)) | ||
1254 | return -ENOSYS; | ||
1255 | |||
1256 | if ((err = ixp4xx_mdio_register())) | 1262 | if ((err = ixp4xx_mdio_register())) |
1257 | return err; | 1263 | return err; |
1258 | return platform_driver_register(&ixp4xx_eth_driver); | 1264 | return platform_driver_register(&ixp4xx_eth_driver); |