Changeset 42537


Ignore:
Timestamp:
2014-09-14T19:31:13+02:00 (3 years ago)
Author:
rmilecki
Message:

kernel: update bcma to the tag master-2014-09-11 (wireless-next)

Signed-off-by: Rafał Miłecki <zajec5@…>

Location:
trunk/target/linux
Files:
2 deleted
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/generic/patches-3.10/025-bcma_backport.patch

    r42535 r42537  
    3636--- a/drivers/bcma/Makefile 
    3737+++ b/drivers/bcma/Makefile 
    38 @@ -3,6 +3,7 @@ bcma-y                                  += driver_chipcommon.o driver 
     38@@ -1,8 +1,10 @@ 
     39 bcma-y                                 += main.o scan.o core.o sprom.o 
     40 bcma-y                                 += driver_chipcommon.o driver_chipcommon_pmu.o 
     41+bcma-y                                 += driver_chipcommon_b.o 
    3942 bcma-$(CONFIG_BCMA_SFLASH)             += driver_chipcommon_sflash.o 
    4043 bcma-$(CONFIG_BCMA_NFLASH)             += driver_chipcommon_nflash.o 
     
    6467 /* scan.c */ 
    6568 int bcma_bus_scan(struct bcma_bus *bus); 
     69@@ -50,6 +50,10 @@ void bcma_chipco_serial_init(struct bcma 
     70 extern struct platform_device bcma_pflash_dev; 
     71 #endif /* CONFIG_BCMA_DRIVER_MIPS */ 
     72  
     73+/* driver_chipcommon_b.c */ 
     74+int bcma_core_chipcommon_b_init(struct bcma_drv_cc_b *ccb); 
     75+void bcma_core_chipcommon_b_free(struct bcma_drv_cc_b *ccb); 
     76+ 
     77 /* driver_chipcommon_pmu.c */ 
     78 u32 bcma_pmu_get_alp_clock(struct bcma_drv_cc *cc); 
     79 u32 bcma_pmu_get_cpu_clock(struct bcma_drv_cc *cc); 
    6680--- a/drivers/bcma/core.c 
    6781+++ b/drivers/bcma/core.c 
     
    964978  
    965979 static void bcma_release_core_dev(struct device *dev) 
    966 @@ -103,10 +111,53 @@ static void bcma_release_core_dev(struct 
     980@@ -103,55 +111,78 @@ static void bcma_release_core_dev(struct 
    967981        kfree(core); 
    968982 } 
     
    10201034        list_for_each_entry(core, &bus->cores, list) { 
    10211035                /* We support that cores ourself */ 
    1022 @@ -115,43 +166,22 @@ static int bcma_register_cores(struct bc 
     1036                switch (core->id.id) { 
     1037                case BCMA_CORE_4706_CHIPCOMMON: 
    10231038                case BCMA_CORE_CHIPCOMMON: 
     1039+               case BCMA_CORE_NS_CHIPCOMMON_B: 
    10241040                case BCMA_CORE_PCI: 
    10251041                case BCMA_CORE_PCIE: 
     
    10701086  
    10711087 #ifdef CONFIG_BCMA_DRIVER_MIPS 
    1072 @@ -218,7 +248,7 @@ int bcma_bus_register(struct bcma_bus *b 
     1088@@ -218,7 +249,7 @@ int bcma_bus_register(struct bcma_bus *b 
    10731089        err = bcma_bus_scan(bus); 
    10741090        if (err) { 
     
    10791095  
    10801096        /* Early init CC core */ 
    1081 @@ -228,6 +258,12 @@ int bcma_bus_register(struct bcma_bus *b 
     1097@@ -228,6 +259,12 @@ int bcma_bus_register(struct bcma_bus *b 
    10821098                bcma_core_chipcommon_early_init(&bus->drv_cc); 
    10831099        } 
     
    10921108        err = bcma_sprom_get(bus); 
    10931109        if (err == -ENOENT) { 
    1094 @@ -263,6 +299,13 @@ int bcma_bus_register(struct bcma_bus *b 
     1110@@ -242,6 +279,13 @@ int bcma_bus_register(struct bcma_bus *b 
     1111                bcma_core_chipcommon_init(&bus->drv_cc); 
     1112        } 
     1113  
     1114+       /* Init CC core */ 
     1115+       core = bcma_find_core(bus, BCMA_CORE_NS_CHIPCOMMON_B); 
     1116+       if (core) { 
     1117+               bus->drv_cc_b.core = core; 
     1118+               bcma_core_chipcommon_b_init(&bus->drv_cc_b); 
     1119+       } 
     1120+ 
     1121        /* Init MIPS core */ 
     1122        core = bcma_find_core(bus, BCMA_CORE_MIPS_74K); 
     1123        if (core) { 
     1124@@ -263,6 +307,13 @@ int bcma_bus_register(struct bcma_bus *b 
    10951125                bcma_core_pci_init(&bus->drv_pci[1]); 
    10961126        } 
     
    11061136        core = bcma_find_core(bus, BCMA_CORE_4706_MAC_GBIT_COMMON); 
    11071137        if (core) { 
    1108 @@ -271,7 +314,7 @@ int bcma_bus_register(struct bcma_bus *b 
     1138@@ -271,7 +322,7 @@ int bcma_bus_register(struct bcma_bus *b 
    11091139        } 
    11101140  
     
    11151145        bcma_info(bus, "Bus registered\n"); 
    11161146  
    1117 @@ -308,8 +351,6 @@ int __init bcma_bus_early_register(struc 
     1147@@ -289,6 +340,8 @@ void bcma_bus_unregister(struct bcma_bus 
     1148        else if (err) 
     1149                bcma_err(bus, "Can not unregister GPIO driver: %i\n", err); 
     1150  
     1151+       bcma_core_chipcommon_b_free(&bus->drv_cc_b); 
     1152+ 
     1153        cores[0] = bcma_find_core(bus, BCMA_CORE_MIPS_74K); 
     1154        cores[1] = bcma_find_core(bus, BCMA_CORE_PCIE); 
     1155        cores[2] = bcma_find_core(bus, BCMA_CORE_4706_MAC_GBIT_COMMON); 
     1156@@ -308,8 +361,6 @@ int __init bcma_bus_early_register(struc 
    11181157        struct bcma_device *core; 
    11191158        struct bcma_device_id match; 
     
    11631202  
    11641203        addrl = ent & SCAN_ADDR_ADDR; 
    1165 @@ -257,11 +269,13 @@ static struct bcma_device *bcma_find_cor 
     1204@@ -257,12 +269,14 @@ static struct bcma_device *bcma_find_cor 
    11661205        return NULL; 
    11671206 } 
     
    11741213 { 
    11751214-       s32 tmp; 
     1215-       u8 i, j; 
    11761216+       u32 tmp; 
    1177         u8 i, j; 
     1217+       u8 i, j, k; 
    11781218        s32 cia, cib; 
    11791219        u8 ports[2], wrappers[2]; 
    1180 @@ -339,11 +353,11 @@ static int bcma_get_next_core(struct bcm 
     1220  
     1221@@ -300,6 +314,7 @@ static int bcma_get_next_core(struct bcm 
     1222                /* Some specific cores don't need wrappers */ 
     1223                switch (core->id.id) { 
     1224                case BCMA_CORE_4706_MAC_GBIT_COMMON: 
     1225+               case BCMA_CORE_NS_CHIPCOMMON_B: 
     1226                /* Not used yet: case BCMA_CORE_OOB_ROUTER: */ 
     1227                        break; 
     1228                default: 
     1229@@ -339,11 +354,11 @@ static int bcma_get_next_core(struct bcm 
    11811230         * the main register space for the core 
    11821231         */ 
     
    11921241                } else { 
    11931242                        bcma_info(bus, "Bridge found\n"); 
    1194 @@ -357,7 +371,7 @@ static int bcma_get_next_core(struct bcm 
     1243@@ -353,18 +368,19 @@ static int bcma_get_next_core(struct bcm 
     1244        core->addr = tmp; 
     1245  
     1246        /* get & parse slave ports */ 
     1247+       k = 0; 
     1248        for (i = 0; i < ports[1]; i++) { 
    11951249                for (j = 0; ; j++) { 
    11961250                        tmp = bcma_erom_get_addr_desc(bus, eromptr, 
     
    12011255                                /* pr_debug("erom: slave port %d " 
    12021256                                 * "has %d descriptors\n", i, j); */ 
    1203 @@ -374,7 +388,7 @@ static int bcma_get_next_core(struct bcm 
     1257                                break; 
     1258-                       } else { 
     1259-                               if (i == 0 && j == 0) 
     1260-                                       core->addr1 = tmp; 
     1261+                       } else if (k < ARRAY_SIZE(core->addr_s)) { 
     1262+                               core->addr_s[k] = tmp; 
     1263+                               k++; 
     1264                        } 
     1265                } 
     1266        } 
     1267@@ -374,7 +390,7 @@ static int bcma_get_next_core(struct bcm 
    12041268                for (j = 0; ; j++) { 
    12051269                        tmp = bcma_erom_get_addr_desc(bus, eromptr, 
     
    12101274                                /* pr_debug("erom: master wrapper %d " 
    12111275                                 * "has %d descriptors\n", i, j); */ 
    1212 @@ -392,7 +406,7 @@ static int bcma_get_next_core(struct bcm 
     1276@@ -392,7 +408,7 @@ static int bcma_get_next_core(struct bcm 
    12131277                for (j = 0; ; j++) { 
    12141278                        tmp = bcma_erom_get_addr_desc(bus, eromptr, 
     
    12191283                                /* pr_debug("erom: master wrapper %d " 
    12201284                                 * has %d descriptors\n", i, j); */ 
    1221 @@ -407,10 +421,13 @@ static int bcma_get_next_core(struct bcm 
     1285@@ -407,10 +423,13 @@ static int bcma_get_next_core(struct bcm 
    12221286                core->io_addr = ioremap_nocache(core->addr, BCMA_CORE_SIZE); 
    12231287                if (!core->io_addr) 
     
    12371301        } 
    12381302        return 0; 
    1239 @@ -421,9 +438,6 @@ void bcma_init_bus(struct bcma_bus *bus) 
     1303@@ -421,9 +440,6 @@ void bcma_init_bus(struct bcma_bus *bus) 
    12401304        s32 tmp; 
    12411305        struct bcma_chipinfo *chipinfo = &(bus->chipinfo); 
     
    12471311        bus->nr_cores = 0; 
    12481312  
    1249 @@ -435,8 +449,6 @@ void bcma_init_bus(struct bcma_bus *bus) 
     1313@@ -435,8 +451,6 @@ void bcma_init_bus(struct bcma_bus *bus) 
    12501314        chipinfo->pkg = (tmp & BCMA_CC_ID_PKG) >> BCMA_CC_ID_PKG_SHIFT; 
    12511315        bcma_info(bus, "Found chip with id 0x%04X, rev 0x%02X and package 0x%02X\n", 
     
    12561320  
    12571321 int bcma_bus_scan(struct bcma_bus *bus) 
    1258 @@ -446,8 +458,6 @@ int bcma_bus_scan(struct bcma_bus *bus) 
     1322@@ -446,8 +460,6 @@ int bcma_bus_scan(struct bcma_bus *bus) 
    12591323  
    12601324        int err, core_num = 0; 
     
    15461610 /* Board types (on PCI usually equals to the subsystem dev id) */ 
    15471611 /* BCM4313 */ 
    1548 @@ -310,11 +332,11 @@ struct bcma_bus { 
     1612@@ -245,7 +267,7 @@ struct bcma_device { 
     1613        u8 core_unit; 
     1614  
     1615        u32 addr; 
     1616-       u32 addr1; 
     1617+       u32 addr_s[8]; 
     1618        u32 wrap; 
     1619  
     1620        void __iomem *io_addr; 
     1621@@ -310,11 +332,12 @@ struct bcma_bus { 
    15491622        struct bcma_device *mapped_core; 
    15501623        struct list_head cores; 
     
    15541627  
    15551628        struct bcma_drv_cc drv_cc; 
     1629+       struct bcma_drv_cc_b drv_cc_b; 
    15561630        struct bcma_drv_pci drv_pci[2]; 
    15571631+       struct bcma_drv_pcie2 drv_pcie2; 
     
    15591633        struct bcma_drv_gmac_cmn drv_gmac_cmn; 
    15601634  
    1561 @@ -400,7 +422,14 @@ static inline void bcma_maskset16(struct 
     1635@@ -400,7 +423,14 @@ static inline void bcma_maskset16(struct 
    15621636        bcma_write16(cc, offset, (bcma_read16(cc, offset) & mask) | set); 
    15631637 } 
     
    16601734  * Check availability with ((struct bcma_chipcommon)->capabilities & BCMA_CC_CAP_PMU) 
    16611735  */ 
    1662 @@ -585,6 +640,7 @@ struct bcma_drv_cc { 
     1736@@ -585,9 +640,16 @@ struct bcma_drv_cc { 
    16631737        spinlock_t gpio_lock; 
    16641738 #ifdef CONFIG_BCMA_DRIVER_GPIO 
     
    16681742 }; 
    16691743  
     1744+struct bcma_drv_cc_b { 
     1745+       struct bcma_device *core; 
     1746+       u8 setup_done:1; 
     1747+       void __iomem *mii; 
     1748+}; 
     1749+ 
     1750 /* Register access */ 
     1751 #define bcma_cc_read32(cc, offset) \ 
     1752        bcma_read32((cc)->core, offset) 
     1753@@ -643,4 +705,6 @@ extern void bcma_pmu_spuravoid_pllupdate 
     1754  
     1755 extern u32 bcma_pmu_get_bus_clock(struct bcma_drv_cc *cc); 
     1756  
     1757+void bcma_chipco_b_mii_write(struct bcma_drv_cc_b *ccb, u32 offset, u32 value); 
     1758+ 
     1759 #endif /* LINUX_BCMA_DRIVER_CC_H_ */ 
    16701760--- a/include/linux/bcma/bcma_driver_pci.h 
    16711761+++ b/include/linux/bcma/bcma_driver_pci.h 
     
    21022192 #define BCMA_PCI_PMCSR                 0x44 
    21032193 #define  BCMA_PCI_PE                   0x100 
     2194--- a/drivers/usb/host/bcma-hcd.c 
     2195+++ b/drivers/usb/host/bcma-hcd.c 
     2196@@ -238,7 +238,7 @@ static int bcma_hcd_probe(struct bcma_de 
     2197        bcma_hcd_init_chip(dev); 
     2198  
     2199        /* In AI chips EHCI is addrspace 0, OHCI is 1 */ 
     2200-       ohci_addr = dev->addr1; 
     2201+       ohci_addr = dev->addr_s[0]; 
     2202        if ((chipinfo->id == 0x5357 || chipinfo->id == 0x4749) 
     2203            && chipinfo->rev == 0) 
     2204                ohci_addr = 0x18009000; 
     2205--- /dev/null 
     2206+++ b/drivers/bcma/driver_chipcommon_b.c 
     2207@@ -0,0 +1,61 @@ 
     2208+/* 
     2209+ * Broadcom specific AMBA 
     2210+ * ChipCommon B Unit driver 
     2211+ * 
     2212+ * Copyright 2014, Hauke Mehrtens <hauke@hauke-m.de> 
     2213+ * 
     2214+ * Licensed under the GNU/GPL. See COPYING for details. 
     2215+ */ 
     2216+ 
     2217+#include "bcma_private.h" 
     2218+#include <linux/export.h> 
     2219+#include <linux/bcma/bcma.h> 
     2220+ 
     2221+static bool bcma_wait_reg(struct bcma_bus *bus, void __iomem *addr, u32 mask, 
     2222+                         u32 value, int timeout) 
     2223+{ 
     2224+       unsigned long deadline = jiffies + timeout; 
     2225+       u32 val; 
     2226+ 
     2227+       do { 
     2228+               val = readl(addr); 
     2229+               if ((val & mask) == value) 
     2230+                       return true; 
     2231+               cpu_relax(); 
     2232+               udelay(10); 
     2233+       } while (!time_after_eq(jiffies, deadline)); 
     2234+ 
     2235+       bcma_err(bus, "Timeout waiting for register %p\n", addr); 
     2236+ 
     2237+       return false; 
     2238+} 
     2239+ 
     2240+void bcma_chipco_b_mii_write(struct bcma_drv_cc_b *ccb, u32 offset, u32 value) 
     2241+{ 
     2242+       struct bcma_bus *bus = ccb->core->bus; 
     2243+ 
     2244+       writel(offset, ccb->mii + 0x00); 
     2245+       bcma_wait_reg(bus, ccb->mii + 0x00, 0x0100, 0x0000, 100); 
     2246+       writel(value, ccb->mii + 0x04); 
     2247+       bcma_wait_reg(bus, ccb->mii + 0x00, 0x0100, 0x0000, 100); 
     2248+} 
     2249+EXPORT_SYMBOL_GPL(bcma_chipco_b_mii_write); 
     2250+ 
     2251+int bcma_core_chipcommon_b_init(struct bcma_drv_cc_b *ccb) 
     2252+{ 
     2253+       if (ccb->setup_done) 
     2254+               return 0; 
     2255+ 
     2256+       ccb->setup_done = 1; 
     2257+       ccb->mii = ioremap_nocache(ccb->core->addr_s[1], BCMA_CORE_SIZE); 
     2258+       if (!ccb->mii) 
     2259+               return -ENOMEM; 
     2260+ 
     2261+       return 0; 
     2262+} 
     2263+ 
     2264+void bcma_core_chipcommon_b_free(struct bcma_drv_cc_b *ccb) 
     2265+{ 
     2266+       if (ccb->mii) 
     2267+               iounmap(ccb->mii); 
     2268+} 
  • trunk/target/linux/generic/patches-3.14/025-bcma_backport.patch

    r42535 r42537  
    11--- a/drivers/bcma/Makefile 
    22+++ b/drivers/bcma/Makefile 
    3 @@ -3,6 +3,7 @@ bcma-y                                  += driver_chipcommon.o driver 
     3@@ -1,8 +1,10 @@ 
     4 bcma-y                                 += main.o scan.o core.o sprom.o 
     5 bcma-y                                 += driver_chipcommon.o driver_chipcommon_pmu.o 
     6+bcma-y                                 += driver_chipcommon_b.o 
    47 bcma-$(CONFIG_BCMA_SFLASH)             += driver_chipcommon_sflash.o 
    58 bcma-$(CONFIG_BCMA_NFLASH)             += driver_chipcommon_nflash.o 
     
    242245--- a/drivers/bcma/main.c 
    243246+++ b/drivers/bcma/main.c 
    244 @@ -120,10 +120,53 @@ static void bcma_release_core_dev(struct 
     247@@ -120,56 +120,78 @@ static void bcma_release_core_dev(struct 
    245248        kfree(core); 
    246249 } 
     
    298301        list_for_each_entry(core, &bus->cores, list) { 
    299302                /* We support that cores ourself */ 
    300 @@ -132,44 +175,22 @@ static int bcma_register_cores(struct bc 
     303                switch (core->id.id) { 
     304                case BCMA_CORE_4706_CHIPCOMMON: 
    301305                case BCMA_CORE_CHIPCOMMON: 
     306+               case BCMA_CORE_NS_CHIPCOMMON_B: 
    302307                case BCMA_CORE_PCI: 
    303308                case BCMA_CORE_PCIE: 
     
    349354  
    350355 #ifdef CONFIG_BCMA_DRIVER_MIPS 
    351 @@ -246,6 +267,12 @@ int bcma_bus_register(struct bcma_bus *b 
     356@@ -246,6 +268,12 @@ int bcma_bus_register(struct bcma_bus *b 
    352357                bcma_core_chipcommon_early_init(&bus->drv_cc); 
    353358        } 
     
    362367        err = bcma_sprom_get(bus); 
    363368        if (err == -ENOENT) { 
    364 @@ -281,6 +308,13 @@ int bcma_bus_register(struct bcma_bus *b 
     369@@ -260,6 +288,13 @@ int bcma_bus_register(struct bcma_bus *b 
     370                bcma_core_chipcommon_init(&bus->drv_cc); 
     371        } 
     372  
     373+       /* Init CC core */ 
     374+       core = bcma_find_core(bus, BCMA_CORE_NS_CHIPCOMMON_B); 
     375+       if (core) { 
     376+               bus->drv_cc_b.core = core; 
     377+               bcma_core_chipcommon_b_init(&bus->drv_cc_b); 
     378+       } 
     379+ 
     380        /* Init MIPS core */ 
     381        core = bcma_find_core(bus, BCMA_CORE_MIPS_74K); 
     382        if (core) { 
     383@@ -281,6 +316,13 @@ int bcma_bus_register(struct bcma_bus *b 
    365384                bcma_core_pci_init(&bus->drv_pci[1]); 
    366385        } 
     
    376395        core = bcma_find_core(bus, BCMA_CORE_4706_MAC_GBIT_COMMON); 
    377396        if (core) { 
    378 @@ -289,7 +323,7 @@ int bcma_bus_register(struct bcma_bus *b 
     397@@ -289,7 +331,7 @@ int bcma_bus_register(struct bcma_bus *b 
    379398        } 
    380399  
     
    385404        bcma_info(bus, "Bus registered\n"); 
    386405  
    387 @@ -326,8 +360,6 @@ int __init bcma_bus_early_register(struc 
     406@@ -307,6 +349,8 @@ void bcma_bus_unregister(struct bcma_bus 
     407        else if (err) 
     408                bcma_err(bus, "Can not unregister GPIO driver: %i\n", err); 
     409  
     410+       bcma_core_chipcommon_b_free(&bus->drv_cc_b); 
     411+ 
     412        cores[0] = bcma_find_core(bus, BCMA_CORE_MIPS_74K); 
     413        cores[1] = bcma_find_core(bus, BCMA_CORE_PCIE); 
     414        cores[2] = bcma_find_core(bus, BCMA_CORE_4706_MAC_GBIT_COMMON); 
     415@@ -326,8 +370,6 @@ int __init bcma_bus_early_register(struc 
    388416        struct bcma_device *core; 
    389417        struct bcma_device_id match; 
     
    509537 #define  BCMA_PKG_ID_BCM43224_FAB_CSM  0x8 
    510538 #define  BCMA_PKG_ID_BCM43224_FAB_SMIC 0xa 
    511 @@ -328,11 +332,11 @@ struct bcma_bus { 
     539@@ -263,7 +267,7 @@ struct bcma_device { 
     540        u8 core_unit; 
     541  
     542        u32 addr; 
     543-       u32 addr1; 
     544+       u32 addr_s[8]; 
     545        u32 wrap; 
     546  
     547        void __iomem *io_addr; 
     548@@ -328,11 +332,12 @@ struct bcma_bus { 
    512549        struct bcma_device *mapped_core; 
    513550        struct list_head cores; 
     
    517554  
    518555        struct bcma_drv_cc drv_cc; 
     556+       struct bcma_drv_cc_b drv_cc_b; 
    519557        struct bcma_drv_pci drv_pci[2]; 
    520558+       struct bcma_drv_pcie2 drv_pcie2; 
     
    714752        { BCMA_CORE_AMEMC, "AMEMC (DDR)" }, 
    715753        { BCMA_CORE_ALTA, "ALTA (I2S)" }, 
    716 @@ -421,10 +421,13 @@ static int bcma_get_next_core(struct bcm 
     754@@ -276,7 +276,7 @@ static int bcma_get_next_core(struct bcm 
     755                              struct bcma_device *core) 
     756 { 
     757        u32 tmp; 
     758-       u8 i, j; 
     759+       u8 i, j, k; 
     760        s32 cia, cib; 
     761        u8 ports[2], wrappers[2]; 
     762  
     763@@ -314,6 +314,7 @@ static int bcma_get_next_core(struct bcm 
     764                /* Some specific cores don't need wrappers */ 
     765                switch (core->id.id) { 
     766                case BCMA_CORE_4706_MAC_GBIT_COMMON: 
     767+               case BCMA_CORE_NS_CHIPCOMMON_B: 
     768                /* Not used yet: case BCMA_CORE_OOB_ROUTER: */ 
     769                        break; 
     770                default: 
     771@@ -367,6 +368,7 @@ static int bcma_get_next_core(struct bcm 
     772        core->addr = tmp; 
     773  
     774        /* get & parse slave ports */ 
     775+       k = 0; 
     776        for (i = 0; i < ports[1]; i++) { 
     777                for (j = 0; ; j++) { 
     778                        tmp = bcma_erom_get_addr_desc(bus, eromptr, 
     779@@ -376,9 +378,9 @@ static int bcma_get_next_core(struct bcm 
     780                                /* pr_debug("erom: slave port %d " 
     781                                 * "has %d descriptors\n", i, j); */ 
     782                                break; 
     783-                       } else { 
     784-                               if (i == 0 && j == 0) 
     785-                                       core->addr1 = tmp; 
     786+                       } else if (k < ARRAY_SIZE(core->addr_s)) { 
     787+                               core->addr_s[k] = tmp; 
     788+                               k++; 
     789                        } 
     790                } 
     791        } 
     792@@ -421,10 +423,13 @@ static int bcma_get_next_core(struct bcm 
    717793                core->io_addr = ioremap_nocache(core->addr, BCMA_CORE_SIZE); 
    718794                if (!core->io_addr) 
     
    732808        } 
    733809        return 0; 
    734 @@ -435,9 +438,6 @@ void bcma_init_bus(struct bcma_bus *bus) 
     810@@ -435,9 +440,6 @@ void bcma_init_bus(struct bcma_bus *bus) 
    735811        s32 tmp; 
    736812        struct bcma_chipinfo *chipinfo = &(bus->chipinfo); 
     
    742818        bus->nr_cores = 0; 
    743819  
    744 @@ -449,8 +449,6 @@ void bcma_init_bus(struct bcma_bus *bus) 
     820@@ -449,8 +451,6 @@ void bcma_init_bus(struct bcma_bus *bus) 
    745821        chipinfo->pkg = (tmp & BCMA_CC_ID_PKG) >> BCMA_CC_ID_PKG_SHIFT; 
    746822        bcma_info(bus, "Found chip with id 0x%04X, rev 0x%02X and package 0x%02X\n", 
     
    751827  
    752828 int bcma_bus_scan(struct bcma_bus *bus) 
    753 @@ -460,8 +458,6 @@ int bcma_bus_scan(struct bcma_bus *bus) 
     829@@ -460,8 +460,6 @@ int bcma_bus_scan(struct bcma_bus *bus) 
    754830  
    755831        int err, core_num = 0; 
     
    911987 #define BCMA_PCI_PMCSR                 0x44 
    912988 #define  BCMA_PCI_PE                   0x100 
     989--- a/drivers/usb/host/bcma-hcd.c 
     990+++ b/drivers/usb/host/bcma-hcd.c 
     991@@ -237,7 +237,7 @@ static int bcma_hcd_probe(struct bcma_de 
     992        bcma_hcd_init_chip(dev); 
     993  
     994        /* In AI chips EHCI is addrspace 0, OHCI is 1 */ 
     995-       ohci_addr = dev->addr1; 
     996+       ohci_addr = dev->addr_s[0]; 
     997        if ((chipinfo->id == 0x5357 || chipinfo->id == 0x4749) 
     998            && chipinfo->rev == 0) 
     999                ohci_addr = 0x18009000; 
     1000--- a/drivers/bcma/bcma_private.h 
     1001+++ b/drivers/bcma/bcma_private.h 
     1002@@ -50,6 +50,10 @@ void bcma_chipco_serial_init(struct bcma 
     1003 extern struct platform_device bcma_pflash_dev; 
     1004 #endif /* CONFIG_BCMA_DRIVER_MIPS */ 
     1005  
     1006+/* driver_chipcommon_b.c */ 
     1007+int bcma_core_chipcommon_b_init(struct bcma_drv_cc_b *ccb); 
     1008+void bcma_core_chipcommon_b_free(struct bcma_drv_cc_b *ccb); 
     1009+ 
     1010 /* driver_chipcommon_pmu.c */ 
     1011 u32 bcma_pmu_get_alp_clock(struct bcma_drv_cc *cc); 
     1012 u32 bcma_pmu_get_cpu_clock(struct bcma_drv_cc *cc); 
     1013--- /dev/null 
     1014+++ b/drivers/bcma/driver_chipcommon_b.c 
     1015@@ -0,0 +1,61 @@ 
     1016+/* 
     1017+ * Broadcom specific AMBA 
     1018+ * ChipCommon B Unit driver 
     1019+ * 
     1020+ * Copyright 2014, Hauke Mehrtens <hauke@hauke-m.de> 
     1021+ * 
     1022+ * Licensed under the GNU/GPL. See COPYING for details. 
     1023+ */ 
     1024+ 
     1025+#include "bcma_private.h" 
     1026+#include <linux/export.h> 
     1027+#include <linux/bcma/bcma.h> 
     1028+ 
     1029+static bool bcma_wait_reg(struct bcma_bus *bus, void __iomem *addr, u32 mask, 
     1030+                         u32 value, int timeout) 
     1031+{ 
     1032+       unsigned long deadline = jiffies + timeout; 
     1033+       u32 val; 
     1034+ 
     1035+       do { 
     1036+               val = readl(addr); 
     1037+               if ((val & mask) == value) 
     1038+                       return true; 
     1039+               cpu_relax(); 
     1040+               udelay(10); 
     1041+       } while (!time_after_eq(jiffies, deadline)); 
     1042+ 
     1043+       bcma_err(bus, "Timeout waiting for register %p\n", addr); 
     1044+ 
     1045+       return false; 
     1046+} 
     1047+ 
     1048+void bcma_chipco_b_mii_write(struct bcma_drv_cc_b *ccb, u32 offset, u32 value) 
     1049+{ 
     1050+       struct bcma_bus *bus = ccb->core->bus; 
     1051+ 
     1052+       writel(offset, ccb->mii + 0x00); 
     1053+       bcma_wait_reg(bus, ccb->mii + 0x00, 0x0100, 0x0000, 100); 
     1054+       writel(value, ccb->mii + 0x04); 
     1055+       bcma_wait_reg(bus, ccb->mii + 0x00, 0x0100, 0x0000, 100); 
     1056+} 
     1057+EXPORT_SYMBOL_GPL(bcma_chipco_b_mii_write); 
     1058+ 
     1059+int bcma_core_chipcommon_b_init(struct bcma_drv_cc_b *ccb) 
     1060+{ 
     1061+       if (ccb->setup_done) 
     1062+               return 0; 
     1063+ 
     1064+       ccb->setup_done = 1; 
     1065+       ccb->mii = ioremap_nocache(ccb->core->addr_s[1], BCMA_CORE_SIZE); 
     1066+       if (!ccb->mii) 
     1067+               return -ENOMEM; 
     1068+ 
     1069+       return 0; 
     1070+} 
     1071+ 
     1072+void bcma_core_chipcommon_b_free(struct bcma_drv_cc_b *ccb) 
     1073+{ 
     1074+       if (ccb->mii) 
     1075+               iounmap(ccb->mii); 
     1076+} 
     1077--- a/include/linux/bcma/bcma_driver_chipcommon.h 
     1078+++ b/include/linux/bcma/bcma_driver_chipcommon.h 
     1079@@ -644,6 +644,12 @@ struct bcma_drv_cc { 
     1080 #endif 
     1081 }; 
     1082  
     1083+struct bcma_drv_cc_b { 
     1084+       struct bcma_device *core; 
     1085+       u8 setup_done:1; 
     1086+       void __iomem *mii; 
     1087+}; 
     1088+ 
     1089 /* Register access */ 
     1090 #define bcma_cc_read32(cc, offset) \ 
     1091        bcma_read32((cc)->core, offset) 
     1092@@ -699,4 +705,6 @@ extern void bcma_pmu_spuravoid_pllupdate 
     1093  
     1094 extern u32 bcma_pmu_get_bus_clock(struct bcma_drv_cc *cc); 
     1095  
     1096+void bcma_chipco_b_mii_write(struct bcma_drv_cc_b *ccb, u32 offset, u32 value); 
     1097+ 
     1098 #endif /* LINUX_BCMA_DRIVER_CC_H_ */ 
Note: See TracChangeset for help on using the changeset viewer.