- cpmac_get_mac(0, ar7_is_titan() ? cpmac_low_data_titan.dev_addr :
- cpmac_low_data.dev_addr);
- res = platform_device_register(ar7_is_titan() ? &cpmac_low_titan :
-Index: linux-2.6.32.26/arch/mips/include/asm/mach-ar7/ar7.h
-===================================================================
---- linux-2.6.32.26.orig/arch/mips/include/asm/mach-ar7/ar7.h 2010-11-24 13:16:31.387502677 -0800
-+++ linux-2.6.32.26/arch/mips/include/asm/mach-ar7/ar7.h 2010-11-24 13:16:37.117485679 -0800
+ res = fixed_phy_add(PHY_POLL, ar7_is_titan() ? cpmac_low_titan.id :
+ cpmac_low.id, &fixed_phy_status);
+ if (res && res != -ENODEV)
+@@ -748,6 +740,34 @@ static int __init ar7_register_devices(v
+ if (res)
+ return res;
+
++ if (ar7_has_high_cpmac()) {
++ res = fixed_phy_add(PHY_POLL, ar7_is_titan() ?
++ cpmac_high_titan.id : cpmac_high.id,
++ &fixed_phy_status);
++ if (res && res != -ENODEV)
++ return res;
++
++ cpmac_get_mac(1, ar7_is_titan() ?
++ cpmac_high_data_titan.dev_addr :
++ cpmac_high_data.dev_addr);
++ res = platform_device_register(ar7_is_titan() ?
++ &cpmac_high_titan : &cpmac_high);
++
++ if (res)
++ return res;
++ } else {
++ mii_reg = ioremap(AR7_REGS_MII, 4);
++ if (mii_reg) {
++ writel(readl(mii_reg) | 1, mii_reg);
++ iounmap(mii_reg);
++ }
++
++ ar7_gpio_disable(17);
++ mdelay(20);
++ ar7_gpio_enable(17);
++ auto_mdix_on();
++ }
++
+ detect_leds();
+ res = platform_device_register(&ar7_gpio_leds);
+ if (res)
+@@ -771,8 +791,10 @@ static int __init ar7_register_devices(v
+ ar7_wdt_res.end = ar7_wdt_res.start + 0x20;
+
+ bootcr = (u32 *)ioremap_nocache(AR7_REGS_DCL, 4);
+- val = *bootcr;
+- iounmap(bootcr);
++ if (bootcr) {
++ val = *bootcr;
++ iounmap(bootcr);
++ }
+
+ /* Register watchdog only if enabled in hardware */
+ if (val & AR7_WDT_HW_ENA)
+--- a/arch/mips/include/asm/mach-ar7/ar7.h
++++ b/arch/mips/include/asm/mach-ar7/ar7.h