source: trunk/target/linux/ar7/patches-2.6.32/972-cpmac_multi_probe.patch @ 24181

Last change on this file since 24181 was 24181, checked in by florian, 6 years ago

[ar7] refresh patches and remove trailing whitespaces

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

    a b struct plat_vlynq_data { 
    4646        int reset_bit; 
    4747}; 
    4848 
    49  
    5049static int vlynq_on(struct vlynq_device *dev) 
    5150{ 
    5251        int result; 
    static int vlynq_on(struct vlynq_device 
    7271 
    7372        msleep(50); 
    7473 
    75         gpio_set_value(pdata->gpio_bit, 1); 
     74        gpio_set_value(pdata->gpio_bit, 
     75                        __vlynq_rev_reg(dev->local) < 0x00010205); 
    7676        msleep(50); 
    7777 
    7878        return 0; 
    static inline unsigned char char2hex(cha 
    601601        } 
    602602} 
    603603 
     604static void auto_mdix_on(void) 
     605{ 
     606        ar7_gpio_enable(28); 
     607        ar7_gpio_disable(30); 
     608} 
     609 
     610/*static void auto_mdix_off(void) 
     611{ 
     612        ar7_gpio_disable(28); 
     613        ar7_gpio_disable(30); 
     614}*/ 
     615 
    604616static void cpmac_get_mac(int instance, unsigned char *dev_addr) 
    605617{ 
    606618        int i; 
    static int __init ar7_register_devices(v 
    662674        u16 chip_id; 
    663675        int res; 
    664676        u32 *bootcr, val; 
     677        void __iomem *mii_reg; 
    665678#ifdef CONFIG_SERIAL_8250 
    666679        static struct uart_port uart_port[2]; 
    667680 
    static int __init ar7_register_devices(v 
    715728                        return res; 
    716729        } 
    717730 
    718         if (ar7_has_high_cpmac()) { 
    719                 res = fixed_phy_add(PHY_POLL, ar7_is_titan() ? cpmac_high_titan.id : cpmac_high.id, 
    720                                                 &fixed_phy_status); 
    721                 if (res && res != -ENODEV) 
    722                         return res; 
    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  
    729                 if (res) 
    730                         return res; 
    731         } else { 
    732                 if (ar7_is_titan()) 
    733                         cpmac_low_data_titan.phy_mask = 0xffffffff; 
    734                 else 
    735                         cpmac_low_data.phy_mask = 0xffffffff; 
    736  
    737         } 
    738  
    739731        res = fixed_phy_add(PHY_POLL, ar7_is_titan() ? cpmac_low_titan.id : 
    740732                        cpmac_low.id, &fixed_phy_status); 
    741733        if (res && res != -ENODEV) 
    static int __init ar7_register_devices(v 
    748740        if (res) 
    749741                return res; 
    750742 
     743        if (ar7_has_high_cpmac()) { 
     744                res = fixed_phy_add(PHY_POLL, ar7_is_titan() ? 
     745                                cpmac_high_titan.id : cpmac_high.id, 
     746                                &fixed_phy_status); 
     747                if (res && res != -ENODEV) 
     748                        return res; 
     749 
     750                cpmac_get_mac(1, ar7_is_titan() ? 
     751                                cpmac_high_data_titan.dev_addr : 
     752                                cpmac_high_data.dev_addr); 
     753                res = platform_device_register(ar7_is_titan() ? 
     754                                &cpmac_high_titan : &cpmac_high); 
     755 
     756                if (res) 
     757                        return res; 
     758        } else { 
     759                mii_reg = ioremap(AR7_REGS_MII, 4); 
     760                if (mii_reg) { 
     761                        writel(readl(mii_reg) | 1, mii_reg); 
     762                        iounmap(mii_reg); 
     763                } 
     764 
     765                ar7_gpio_disable(17); 
     766                mdelay(20); 
     767                ar7_gpio_enable(17); 
     768                auto_mdix_on(); 
     769        } 
     770 
    751771        detect_leds(); 
    752772        res = platform_device_register(&ar7_gpio_leds); 
    753773        if (res) 
    static int __init ar7_register_devices(v 
    771791        ar7_wdt_res.end = ar7_wdt_res.start + 0x20; 
    772792 
    773793        bootcr = (u32 *)ioremap_nocache(AR7_REGS_DCL, 4); 
    774         val = *bootcr; 
    775         iounmap(bootcr); 
     794        if (bootcr) { 
     795                val = *bootcr; 
     796                iounmap(bootcr); 
     797        } 
    776798 
    777799        /* Register watchdog only if enabled in hardware */ 
    778800        if (val & AR7_WDT_HW_ENA) 
  • arch/mips/include/asm/mach-ar7/ar7.h

    a b  
    4141#define AR7_REGS_RESET  (AR7_REGS_BASE + 0x1600) 
    4242#define AR7_REGS_VLYNQ0 (AR7_REGS_BASE + 0x1800) 
    4343#define AR7_REGS_DCL    (AR7_REGS_BASE + 0x1a00) 
     44#define AR7_REGS_MII    (AR7_REGS_BASE + 0x1a08) 
    4445#define AR7_REGS_VLYNQ1 (AR7_REGS_BASE + 0x1c00) 
    4546#define AR7_REGS_MDIO   (AR7_REGS_BASE + 0x1e00) 
    4647#define AR7_REGS_IRQ    (AR7_REGS_BASE + 0x2400) 
  • drivers/net/cpmac.c

    a b static void cpmac_hw_start(struct net_de 
    668668        for (i = 0; i < 8; i++) 
    669669                cpmac_write(priv->regs, CPMAC_MAC_ADDR_LO(i), dev->dev_addr[5]); 
    670670        cpmac_write(priv->regs, CPMAC_MAC_ADDR_MID, dev->dev_addr[4]); 
    671         cpmac_write(priv->regs, CPMAC_MAC_ADDR_HI, dev->dev_addr[0] | 
    672                     (dev->dev_addr[1] << 8) | (dev->dev_addr[2] << 16) | 
    673                     (dev->dev_addr[3] << 24)); 
     671        cpmac_write(priv->regs, CPMAC_MAC_ADDR_HI, be32_to_cpu(*(u32 *) 
     672                        dev->dev_addr)); 
    674673        cpmac_write(priv->regs, CPMAC_MAX_LENGTH, CPMAC_SKB_SIZE); 
    675674        cpmac_write(priv->regs, CPMAC_UNICAST_CLEAR, 0xff); 
    676675        cpmac_write(priv->regs, CPMAC_RX_INT_CLEAR, 0xff); 
    static const struct net_device_ops cpmac 
    11041103        .ndo_set_mac_address    = eth_mac_addr, 
    11051104}; 
    11061105 
    1107 static int external_switch; 
    1108  
    11091106static int __devinit cpmac_probe(struct platform_device *pdev) 
    11101107{ 
    11111108        int rc, phy_id; 
    static int __devinit cpmac_probe(struct 
    11171114 
    11181115        pdata = pdev->dev.platform_data; 
    11191116 
    1120         if (external_switch || dumb_switch) { 
    1121                 strncpy(mdio_bus_id, "0", MII_BUS_ID_SIZE); /* fixed phys bus */ 
    1122                 phy_id = pdev->id; 
    1123         } else { 
    1124                 for (phy_id = 0; phy_id < PHY_MAX_ADDR; phy_id++) { 
    1125                         if (!(pdata->phy_mask & (1 << phy_id))) 
    1126                                 continue; 
    1127                         if (!cpmac_mii->phy_map[phy_id]) 
    1128                                 continue; 
    1129                         strncpy(mdio_bus_id, cpmac_mii->id, MII_BUS_ID_SIZE); 
    1130                         break; 
    1131                 } 
     1117        if (dumb_switch) 
     1118                phy_id = PHY_MAX_ADDR; 
     1119        else for (phy_id = 0; phy_id < PHY_MAX_ADDR; phy_id++) { 
     1120                if (!((pdata->phy_mask | cpmac_mii->phy_mask) & 
     1121                                (1 << phy_id))) 
     1122                        continue; 
     1123                if (cpmac_mii->phy_map[phy_id]) 
     1124                        continue; 
     1125                strncpy(mdio_bus_id, cpmac_mii->id, MII_BUS_ID_SIZE); 
     1126                break; 
    11321127        } 
    11331128 
    11341129        if (phy_id == PHY_MAX_ADDR) { 
    11351130                dev_err(&pdev->dev, "no PHY present, falling back to switch mode\n"); 
    11361131                strncpy(mdio_bus_id, "0", MII_BUS_ID_SIZE); /* fixed phys bus */ 
    11371132                phy_id = pdev->id; 
     1133        } else { 
     1134                /* Now disable EPHY and enable MII */ 
     1135                dev_info(&pdev->dev, "trying external MII\n"); 
     1136                ar7_device_disable(AR7_RESET_BIT_EPHY); 
    11381137        } 
    11391138 
    11401139        dev = alloc_etherdev_mq(sizeof(*priv), CPMAC_QUEUES); 
    static int __devinit cpmac_probe(struct 
    11681167        priv->dev = dev; 
    11691168        priv->ring_size = 64; 
    11701169        priv->msg_enable = netif_msg_init(debug_level, 0xff); 
    1171         memcpy(dev->dev_addr, pdata->dev_addr, sizeof(dev->dev_addr)); 
     1170        memcpy(dev->dev_addr, pdata->dev_addr, sizeof(pdata->dev_addr)); 
    11721171 
    11731172        snprintf(priv->phy_name, MII_BUS_ID_SIZE, PHY_ID_FMT, mdio_bus_id, phy_id); 
    11741173 
    int __devinit cpmac_init(void) 
    12441243        ar7_gpio_disable(26); 
    12451244        ar7_gpio_disable(27); 
    12461245 
    1247         if (!ar7_is_titan()) { 
     1246        if (ar7_is_titan()) { 
     1247                ar7_device_reset(AR7_RESET_BIT_EPHY); 
     1248                ar7_device_reset(TITAN_RESET_BIT_EPHY1); 
     1249        } else { 
    12481250                ar7_device_reset(AR7_RESET_BIT_CPMAC_LO); 
    12491251                ar7_device_reset(AR7_RESET_BIT_CPMAC_HI); 
    1250         } 
    1251         ar7_device_reset(AR7_RESET_BIT_EPHY); 
    12521252 
    1253         if (ar7_is_titan()) { 
    1254                 ar7_device_reset(TITAN_RESET_BIT_EPHY1); 
     1253                ar7_device_reset(AR7_RESET_BIT_EPHY); 
    12551254        } 
    12561255 
    12571256        cpmac_mii->reset(cpmac_mii); 
    int __devinit cpmac_init(void) 
    12621261                else 
    12631262                        msleep(10); 
    12641263 
    1265         mask &= 0x7fffffff; 
    1266         if (mask & (mask - 1)) { 
    1267                 external_switch = 1; 
    1268                 mask = 0; 
    1269         } 
    1270  
    1271         cpmac_mii->phy_mask = ar7_is_titan()? ~(mask | 0x80000000 | 0x40000000): 
    1272                 ~(mask | 0x80000000); 
     1264        cpmac_mii->phy_mask = ~mask; 
    12731265        snprintf(cpmac_mii->id, MII_BUS_ID_SIZE, "1"); 
    12741266 
    12751267        res = mdiobus_register(cpmac_mii); 
Note: See TracBrowser for help on using the repository browser.