diff options
author | Krzysztof Hałasa <khc@pm.waw.pl> | 2009-03-13 14:09:00 -0400 |
---|---|---|
committer | Krzysztof Hałasa <khc@pm.waw.pl> | 2009-03-17 10:01:22 -0400 |
commit | 5ca328d24d25fa2c8d2aa33cb85116695be11070 (patch) | |
tree | 301b0df131e4aff33a7401cda851daf5bade6586 | |
parent | 0a07232ff62d1523c5fa7292180890f4de670b95 (diff) |
IXP4xx: add Ethernet and NPE support for IXP43x CPU.
Signed-off-by: Krzysztof Hałasa <khc@pm.waw.pl>
-rw-r--r-- | arch/arm/mach-ixp4xx/ixp4xx_npe.c | 6 | ||||
-rw-r--r-- | drivers/net/arm/ixp4xx_eth.c | 20 |
2 files changed, 16 insertions, 10 deletions
diff --git a/arch/arm/mach-ixp4xx/ixp4xx_npe.c b/arch/arm/mach-ixp4xx/ixp4xx_npe.c index c73a94d0ca2b..252310234903 100644 --- a/arch/arm/mach-ixp4xx/ixp4xx_npe.c +++ b/arch/arm/mach-ixp4xx/ixp4xx_npe.c | |||
@@ -575,8 +575,8 @@ int npe_load_firmware(struct npe *npe, const char *name, struct device *dev) | |||
575 | for (i = 0; i < image->size; i++) | 575 | for (i = 0; i < image->size; i++) |
576 | image->data[i] = swab32(image->data[i]); | 576 | image->data[i] = swab32(image->data[i]); |
577 | 577 | ||
578 | if (!cpu_is_ixp46x() && ((image->id >> 28) & 0xF /* device ID */)) { | 578 | if (cpu_is_ixp42x() && ((image->id >> 28) & 0xF /* device ID */)) { |
579 | print_npe(KERN_INFO, npe, "IXP46x firmware ignored on " | 579 | print_npe(KERN_INFO, npe, "IXP43x/IXP46x firmware ignored on " |
580 | "IXP42x\n"); | 580 | "IXP42x\n"); |
581 | goto err; | 581 | goto err; |
582 | } | 582 | } |
@@ -596,7 +596,7 @@ int npe_load_firmware(struct npe *npe, const char *name, struct device *dev) | |||
596 | "revision 0x%X:%X\n", (image->id >> 16) & 0xFF, | 596 | "revision 0x%X:%X\n", (image->id >> 16) & 0xFF, |
597 | (image->id >> 8) & 0xFF, image->id & 0xFF); | 597 | (image->id >> 8) & 0xFF, image->id & 0xFF); |
598 | 598 | ||
599 | if (!cpu_is_ixp46x()) { | 599 | if (cpu_is_ixp42x()) { |
600 | if (!npe->id) | 600 | if (!npe->id) |
601 | instr_size = NPE_A_42X_INSTR_SIZE; | 601 | instr_size = NPE_A_42X_INSTR_SIZE; |
602 | else | 602 | else |
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); |