for (i = 0; i < image->size; i++)
                        image->data[i] = swab32(image->data[i]);
 
-       if (!cpu_is_ixp46x() && ((image->id >> 28) & 0xF /* device ID */)) {
-               print_npe(KERN_INFO, npe, "IXP46x firmware ignored on "
+       if (cpu_is_ixp42x() && ((image->id >> 28) & 0xF /* device ID */)) {
+               print_npe(KERN_INFO, npe, "IXP43x/IXP46x firmware ignored on "
                          "IXP42x\n");
                goto err;
        }
                  "revision 0x%X:%X\n", (image->id >> 16) & 0xFF,
                  (image->id >> 8) & 0xFF, image->id & 0xFF);
 
-       if (!cpu_is_ixp46x()) {
+       if (cpu_is_ixp42x()) {
                if (!npe->id)
                        instr_size = NPE_A_42X_INSTR_SIZE;
                else
 
        if (!(mdio_bus = mdiobus_alloc()))
                return -ENOMEM;
 
-       /* All MII PHY accesses use NPE-B Ethernet registers */
-       spin_lock_init(&mdio_lock);
-       mdio_regs = (struct eth_regs __iomem *)IXP4XX_EthB_BASE_VIRT;
-       __raw_writel(DEFAULT_CORE_CNTRL, &mdio_regs->core_control);
+       if (cpu_is_ixp43x()) {
+               /* IXP43x lacks NPE-B and uses NPE-C for MII PHY access */
+               if (!(ixp4xx_read_feature_bits() & IXP4XX_FEATURE_NPEC_ETH))
+                       return -ENOSYS;
+               mdio_regs = (struct eth_regs __iomem *)IXP4XX_EthC_BASE_VIRT;
+       } else {
+               /* All MII PHY accesses use NPE-B Ethernet registers */
+               if (!(ixp4xx_read_feature_bits() & IXP4XX_FEATURE_NPEB_ETH0))
+                       return -ENOSYS;
+               mdio_regs = (struct eth_regs __iomem *)IXP4XX_EthB_BASE_VIRT;
+       }
 
+       __raw_writel(DEFAULT_CORE_CNTRL, &mdio_regs->core_control);
+       spin_lock_init(&mdio_lock);
        mdio_bus->name = "IXP4xx MII Bus";
        mdio_bus->read = &ixp4xx_mdio_read;
        mdio_bus->write = &ixp4xx_mdio_write;
 static int __init eth_init_module(void)
 {
        int err;
-       if (!(ixp4xx_read_feature_bits() & IXP4XX_FEATURE_NPEB_ETH0))
-               return -ENOSYS;
-
        if ((err = ixp4xx_mdio_register()))
                return err;
        return platform_driver_register(&ixp4xx_eth_driver);