diff options
Diffstat (limited to 'drivers/net/arm/ixp4xx_eth.c')
| -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 5fe17d5eaa54..448487e22fa3 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); |
