diff options
Diffstat (limited to 'drivers/net/arm')
-rw-r--r-- | drivers/net/arm/am79c961a.c | 2 | ||||
-rw-r--r-- | drivers/net/arm/ixp4xx_eth.c | 20 |
2 files changed, 14 insertions, 8 deletions
diff --git a/drivers/net/arm/am79c961a.c b/drivers/net/arm/am79c961a.c index c2d012fcc29b..4bc6901b3819 100644 --- a/drivers/net/arm/am79c961a.c +++ b/drivers/net/arm/am79c961a.c | |||
@@ -27,9 +27,9 @@ | |||
27 | #include <linux/crc32.h> | 27 | #include <linux/crc32.h> |
28 | #include <linux/bitops.h> | 28 | #include <linux/bitops.h> |
29 | #include <linux/platform_device.h> | 29 | #include <linux/platform_device.h> |
30 | #include <linux/io.h> | ||
30 | 31 | ||
31 | #include <mach/hardware.h> | 32 | #include <mach/hardware.h> |
32 | #include <asm/io.h> | ||
33 | #include <asm/system.h> | 33 | #include <asm/system.h> |
34 | 34 | ||
35 | #define TX_BUFFERS 15 | 35 | #define TX_BUFFERS 15 |
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); |