source: trunk/target/linux/ar7/patches-2.6.32/940-cpmac-titan.patch @ 20037

Last change on this file since 20037 was 20037, checked in by florian, 7 years ago

[ar7] correct the MDIO base address and reset sequence for Titan (#6573)

File size: 3.8 KB
  • arch/mips/ar7/platform.c

    old new  
    716716        } 
    717717 
    718718        if (ar7_has_high_cpmac()) { 
    719                 res = fixed_phy_add(PHY_POLL, cpmac_high.id, &fixed_phy_status); 
     719                res = fixed_phy_add(PHY_POLL, ar7_is_titan() ? cpmac_high_titan.id : cpmac_high.id, 
     720                                                &fixed_phy_status); 
    720721                if (res && res != -ENODEV) 
    721722                        return res; 
    722                 cpmac_get_mac(1, cpmac_high_data.dev_addr); 
    723                 res = platform_device_register(&cpmac_high); 
     723 
     724                cpmac_get_mac(1, ar7_is_titan() ? cpmac_high_data_titan.dev_addr : 
     725                                                cpmac_high_data.dev_addr); 
     726                res = platform_device_register(ar7_is_titan() ? &cpmac_high_titan : 
     727                                                &cpmac_high); 
     728 
    724729                if (res) 
    725730                        return res; 
    726731        } else { 
    727                 cpmac_low_data.phy_mask = 0xffffffff; 
     732                if (ar7_is_titan()) 
     733                        cpmac_low_data_titan.phy_mask = 0xffffffff; 
     734                else 
     735                        cpmac_low_data.phy_mask = 0xffffffff; 
     736 
    728737        } 
    729738 
    730         res = fixed_phy_add(PHY_POLL, cpmac_low.id, &fixed_phy_status); 
     739        res = fixed_phy_add(PHY_POLL, ar7_is_titan() ? cpmac_low_titan.id : 
     740                        cpmac_low.id, &fixed_phy_status); 
    731741        if (res && res != -ENODEV) 
    732742                return res; 
    733743 
    734         cpmac_get_mac(0, cpmac_low_data.dev_addr); 
    735         res = platform_device_register(&cpmac_low); 
     744        cpmac_get_mac(0, ar7_is_titan() ? cpmac_low_data_titan.dev_addr : 
     745                        cpmac_low_data.dev_addr); 
     746        res = platform_device_register(ar7_is_titan() ? &cpmac_low_titan : 
     747                        &cpmac_low); 
    736748        if (res) 
    737749                return res; 
    738750 
  • drivers/net/cpmac.c

    old new  
    11531153                goto fail; 
    11541154        } 
    11551155 
     1156        ar7_device_reset(pdata->reset_bit); 
     1157 
    11561158        dev->irq = platform_get_irq_byname(pdev, "irq"); 
    11571159 
    11581160        dev->netdev_ops = &cpmac_netdev_ops; 
     
    12281230        cpmac_mii->reset = cpmac_mdio_reset; 
    12291231        cpmac_mii->irq = mii_irqs; 
    12301232 
    1231         cpmac_mii->priv = ioremap(AR7_REGS_MDIO, 256); 
     1233        cpmac_mii->priv = ioremap(ar7_is_titan() ? TITAN_REGS_MDIO : AR7_REGS_MDIO, 256); 
    12321234 
    12331235        if (!cpmac_mii->priv) { 
    12341236                printk(KERN_ERR "Can't ioremap mdio registers\n"); 
     
    12391241#warning FIXME: unhardcode gpio&reset bits 
    12401242        ar7_gpio_disable(26); 
    12411243        ar7_gpio_disable(27); 
    1242         ar7_device_reset(AR7_RESET_BIT_CPMAC_LO); 
    1243         ar7_device_reset(AR7_RESET_BIT_CPMAC_HI); 
     1244 
     1245        if (!ar7_is_titan()) { 
     1246                ar7_device_reset(AR7_RESET_BIT_CPMAC_LO); 
     1247                ar7_device_reset(AR7_RESET_BIT_CPMAC_HI); 
     1248        } 
    12441249        ar7_device_reset(AR7_RESET_BIT_EPHY); 
    12451250 
     1251        if (ar7_is_titan()) { 
     1252                ar7_device_reset(TITAN_RESET_BIT_EPHY1); 
     1253        } 
     1254 
    12461255        cpmac_mii->reset(cpmac_mii); 
    12471256 
    12481257        for (i = 0; i < 300; i++) 
     
    12571266                mask = 0; 
    12581267        } 
    12591268 
    1260         cpmac_mii->phy_mask = ~(mask | 0x80000000); 
     1269        cpmac_mii->phy_mask = ar7_is_titan()? ~(mask | 0x80000000 | 0x40000000): 
     1270                ~(mask | 0x80000000); 
    12611271        snprintf(cpmac_mii->id, MII_BUS_ID_SIZE, "1"); 
    12621272 
    12631273        res = mdiobus_register(cpmac_mii); 
  • arch/mips/include/asm/mach-ar7/ar7.h

    a b  
    4444#define UR8_REGS_WDT    (AR7_REGS_BASE + 0x0b00) 
    4545#define UR8_REGS_UART1  (AR7_REGS_BASE + 0x0f00) 
    4646 
    47 #define TITAN_REGS_MAC0         (0x08640000) 
    48 #define TITAN_REGS_MAC1         (TITAN_REGS_MAC0 + 0x0800) 
     47#define TITAN_REGS_ESWITCH_BASE (0x08640000) 
     48#define TITAN_REGS_MAC0                 (TITAN_REGS_ESWITCH_BASE + 0) 
     49#define TITAN_REGS_MAC1                 (TITAN_REGS_ESWITCH_BASE + 0x0800) 
     50#define TITAN_REGS_MDIO                 (TITAN_REGS_ESWITCH_BASE + 0x02000) 
    4951#define TITAN_REGS_VLYNQ0       (AR7_REGS_BASE + 0x1c00) 
    5052#define TITAN_REGS_VLYNQ1       (AR7_REGS_BASE + 0x1300) 
    5153 
Note: See TracBrowser for help on using the repository browser.