Changeset 37957


Ignore:
Timestamp:
2013-09-13T00:03:45+02:00 (4 years ago)
Author:
hauke
Message:

kernel: update bcma and ssb to wireless-testing master-2013-09-09

Location:
trunk/target/linux
Files:
10 deleted
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/brcm47xx/patches-3.10/280-activate_ssb_support_in_usb.patch

    r37432 r37957  
    88@@ -38,6 +38,7 @@ config BCMA_DRIVER_PCI_HOSTMODE 
    99 config BCMA_HOST_SOC 
    10         bool 
    11         depends on BCMA_DRIVER_MIPS 
     10        bool "Support for BCMA in a SoC" 
     11        depends on BCMA 
    1212+       select USB_HCD_BCMA if USB_EHCI_HCD || USB_OHCI_HCD 
    13   
    14  config BCMA_DRIVER_MIPS 
    15         bool "BCMA Broadcom MIPS core driver" 
     13        help 
     14          Host interface for a Broadcom AIX bus directly mapped into 
     15          the memory. This only works with the Broadcom SoCs from the 
    1616--- a/drivers/ssb/Kconfig 
    1717+++ b/drivers/ssb/Kconfig 
  • trunk/target/linux/generic/patches-3.10/020-ssb_update.patch

    r37502 r37957  
    11--- a/drivers/ssb/Kconfig 
    22+++ b/drivers/ssb/Kconfig 
    3 @@ -144,7 +144,7 @@ config SSB_SFLASH 
     3@@ -138,13 +138,13 @@ config SSB_DRIVER_MIPS 
     4  
     5 config SSB_SFLASH 
     6        bool "SSB serial flash support" 
     7-       depends on SSB_DRIVER_MIPS && BROKEN 
     8+       depends on SSB_DRIVER_MIPS 
     9        default y 
     10  
    411 # Assumption: We are on embedded, if we compile the MIPS core. 
    512 config SSB_EMBEDDED 
     
    6976  
    7077        switch (cc->capabilities & SSB_CHIPCO_CAP_FLASHT) { 
    71 @@ -131,9 +145,21 @@ int ssb_sflash_init(struct ssb_chipcommo 
     78@@ -131,10 +145,20 @@ int ssb_sflash_init(struct ssb_chipcommo 
    7279                return -ENOTSUPP; 
    7380        } 
    7481  
     82-       pr_info("Found %s serial flash (blocksize: 0x%X, blocks: %d)\n", 
     83-               e->name, e->blocksize, e->numblocks); 
     84- 
     85-       pr_err("Serial flash support is not implemented yet!\n"); 
    7586+       sflash->window = SSB_FLASH2; 
    7687+       sflash->blocksize = e->blocksize; 
     
    7990+       sflash->present = true; 
    8091+ 
    81         pr_info("Found %s serial flash (blocksize: 0x%X, blocks: %d)\n", 
    82                 e->name, e->blocksize, e->numblocks); 
    83   
     92+       pr_info("Found %s serial flash (size: %dKiB, blocksize: 0x%X, blocks: %d)\n", 
     93+               e->name, sflash->size / 1024, e->blocksize, e->numblocks); 
     94+ 
    8495+       /* Prepare platform device, but don't register it yet. It's too early, 
    8596+        * malloc (required by device_private_init) is not available yet. */ 
     
    8798+                                        sflash->size; 
    8899+       ssb_sflash_dev.dev.platform_data = sflash; 
    89 + 
    90         pr_err("Serial flash support is not implemented yet!\n"); 
    91100  
    92         return -ENOTSUPP; 
     101-       return -ENOTSUPP; 
     102+       return 0; 
     103 } 
    93104--- a/drivers/ssb/main.c 
    94105+++ b/drivers/ssb/main.c 
  • trunk/target/linux/generic/patches-3.10/025-bcma_backport.patch

    r37832 r37957  
    99 config BCMA_DRIVER_PCI_HOSTMODE 
    1010        bool "Driver for PCI core working in hostmode" 
     11@@ -34,8 +35,14 @@ config BCMA_DRIVER_PCI_HOSTMODE 
     12          PCI core hostmode operation (external PCI bus). 
     13  
     14 config BCMA_HOST_SOC 
     15-       bool 
     16-       depends on BCMA_DRIVER_MIPS 
     17+       bool "Support for BCMA in a SoC" 
     18+       depends on BCMA 
     19+       help 
     20+         Host interface for a Broadcom AIX bus directly mapped into 
     21+         the memory. This only works with the Broadcom SoCs from the 
     22+         BCM47XX line. 
     23+ 
     24+         If unsure, say N 
     25  
     26 config BCMA_DRIVER_MIPS 
     27        bool "BCMA Broadcom MIPS core driver" 
    1128--- a/drivers/bcma/bcma_private.h 
    1229+++ b/drivers/bcma/bcma_private.h 
     
    317334 { 
    318335        struct bcma_device *core = container_of(dev, struct bcma_device, dev); 
     336@@ -218,7 +237,7 @@ int bcma_bus_register(struct bcma_bus *b 
     337        err = bcma_bus_scan(bus); 
     338        if (err) { 
     339                bcma_err(bus, "Failed to scan: %d\n", err); 
     340-               return -1; 
     341+               return err; 
     342        } 
     343  
     344        /* Early init CC core */ 
    319345--- a/drivers/bcma/sprom.c 
    320346+++ b/drivers/bcma/sprom.c 
     
    485511--- a/include/linux/bcma/bcma.h 
    486512+++ b/include/linux/bcma/bcma.h 
    487 @@ -144,6 +144,7 @@ struct bcma_host_ops { 
     513@@ -72,7 +72,19 @@ struct bcma_host_ops { 
     514 /* Core-ID values. */ 
     515 #define BCMA_CORE_OOB_ROUTER           0x367   /* Out of band */ 
     516 #define BCMA_CORE_4706_CHIPCOMMON      0x500 
     517+#define BCMA_CORE_PCIEG2               0x501 
     518+#define BCMA_CORE_DMA                  0x502 
     519+#define BCMA_CORE_SDIO3                        0x503 
     520+#define BCMA_CORE_USB20                        0x504 
     521+#define BCMA_CORE_USB30                        0x505 
     522+#define BCMA_CORE_A9JTAG               0x506 
     523+#define BCMA_CORE_DDR23                        0x507 
     524+#define BCMA_CORE_ROM                  0x508 
     525+#define BCMA_CORE_NAND                 0x509 
     526+#define BCMA_CORE_QSPI                 0x50A 
     527+#define BCMA_CORE_CHIPCOMMON_B         0x50B 
     528 #define BCMA_CORE_4706_SOC_RAM         0x50E 
     529+#define BCMA_CORE_ARMCA9               0x510 
     530 #define BCMA_CORE_4706_MAC_GBIT                0x52D 
     531 #define BCMA_CORE_AMEMC                        0x52E   /* DDR1/2 memory controller core */ 
     532 #define BCMA_CORE_ALTA                 0x534   /* I2S core */ 
     533@@ -144,6 +156,7 @@ struct bcma_host_ops { 
    488534  
    489535 /* Chip IDs of PCIe devices */ 
     
    493539 #define  BCMA_PKG_ID_BCM43224_FAB_CSM  0x8 
    494540 #define  BCMA_PKG_ID_BCM43224_FAB_SMIC 0xa 
     541@@ -176,6 +189,11 @@ struct bcma_host_ops { 
     542 #define  BCMA_PKG_ID_BCM5357   11 
     543 #define BCMA_CHIP_ID_BCM53572  53572 
     544 #define  BCMA_PKG_ID_BCM47188  9 
     545+#define BCMA_CHIP_ID_BCM4707   53010 
     546+#define  BCMA_PKG_ID_BCM4707   1 
     547+#define  BCMA_PKG_ID_BCM4708   2 
     548+#define  BCMA_PKG_ID_BCM4709   0 
     549+#define BCMA_CHIP_ID_BCM53018  53018 
     550  
     551 /* Board types (on PCI usually equals to the subsystem dev id) */ 
     552 /* BCM4313 */ 
    495553--- a/include/linux/bcma/bcma_driver_chipcommon.h 
    496554+++ b/include/linux/bcma/bcma_driver_chipcommon.h 
     
    578636  * Check availability with ((struct bcma_chipcommon)->capabilities & BCMA_CC_CAP_PMU) 
    579637  */ 
     638--- a/drivers/bcma/driver_pci.c 
     639+++ b/drivers/bcma/driver_pci.c 
     640@@ -31,7 +31,7 @@ static void bcma_pcie_write(struct bcma_ 
     641        pcicore_write32(pc, BCMA_CORE_PCI_PCIEIND_DATA, data); 
     642 } 
     643  
     644-static void bcma_pcie_mdio_set_phy(struct bcma_drv_pci *pc, u8 phy) 
     645+static void bcma_pcie_mdio_set_phy(struct bcma_drv_pci *pc, u16 phy) 
     646 { 
     647        u32 v; 
     648        int i; 
     649@@ -55,7 +55,7 @@ static void bcma_pcie_mdio_set_phy(struc 
     650        } 
     651 } 
     652  
     653-static u16 bcma_pcie_mdio_read(struct bcma_drv_pci *pc, u8 device, u8 address) 
     654+static u16 bcma_pcie_mdio_read(struct bcma_drv_pci *pc, u16 device, u8 address) 
     655 { 
     656        int max_retries = 10; 
     657        u16 ret = 0; 
     658@@ -98,7 +98,7 @@ static u16 bcma_pcie_mdio_read(struct bc 
     659        return ret; 
     660 } 
     661  
     662-static void bcma_pcie_mdio_write(struct bcma_drv_pci *pc, u8 device, 
     663+static void bcma_pcie_mdio_write(struct bcma_drv_pci *pc, u16 device, 
     664                                u8 address, u16 data) 
     665 { 
     666        int max_retries = 10; 
     667@@ -137,6 +137,13 @@ static void bcma_pcie_mdio_write(struct 
     668        pcicore_write32(pc, BCMA_CORE_PCI_MDIO_CONTROL, 0); 
     669 } 
     670  
     671+static u16 bcma_pcie_mdio_writeread(struct bcma_drv_pci *pc, u16 device, 
     672+                                   u8 address, u16 data) 
     673+{ 
     674+       bcma_pcie_mdio_write(pc, device, address, data); 
     675+       return bcma_pcie_mdio_read(pc, device, address); 
     676+} 
     677+ 
     678 /************************************************** 
     679  * Workarounds. 
     680  **************************************************/ 
     681@@ -203,6 +210,25 @@ static void bcma_core_pci_config_fixup(s 
     682        } 
     683 } 
     684  
     685+static void bcma_core_pci_power_save(struct bcma_drv_pci *pc, bool up) 
     686+{ 
     687+       u16 data; 
     688+ 
     689+       if (pc->core->id.rev >= 15 && pc->core->id.rev <= 20) { 
     690+               data = up ? 0x74 : 0x7C; 
     691+               bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1, 
     692+                                        BCMA_CORE_PCI_MDIO_BLK1_MGMT1, 0x7F64); 
     693+               bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1, 
     694+                                        BCMA_CORE_PCI_MDIO_BLK1_MGMT3, data); 
     695+       } else if (pc->core->id.rev >= 21 && pc->core->id.rev <= 22) { 
     696+               data = up ? 0x75 : 0x7D; 
     697+               bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1, 
     698+                                        BCMA_CORE_PCI_MDIO_BLK1_MGMT1, 0x7E65); 
     699+               bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1, 
     700+                                        BCMA_CORE_PCI_MDIO_BLK1_MGMT3, data); 
     701+       } 
     702+} 
     703+ 
     704 /************************************************** 
     705  * Init. 
     706  **************************************************/ 
     707@@ -262,7 +288,7 @@ out: 
     708 } 
     709 EXPORT_SYMBOL_GPL(bcma_core_pci_irq_ctl); 
     710  
     711-void bcma_core_pci_extend_L1timer(struct bcma_drv_pci *pc, bool extend) 
     712+static void bcma_core_pci_extend_L1timer(struct bcma_drv_pci *pc, bool extend) 
     713 { 
     714        u32 w; 
     715  
     716@@ -274,4 +300,33 @@ void bcma_core_pci_extend_L1timer(struct 
     717        bcma_pcie_write(pc, BCMA_CORE_PCI_DLLP_PMTHRESHREG, w); 
     718        bcma_pcie_read(pc, BCMA_CORE_PCI_DLLP_PMTHRESHREG); 
     719 } 
     720-EXPORT_SYMBOL_GPL(bcma_core_pci_extend_L1timer); 
     721+ 
     722+void bcma_core_pci_up(struct bcma_bus *bus) 
     723+{ 
     724+       struct bcma_drv_pci *pc; 
     725+ 
     726+       if (bus->hosttype != BCMA_HOSTTYPE_PCI) 
     727+               return; 
     728+ 
     729+       pc = &bus->drv_pci[0]; 
     730+ 
     731+       bcma_core_pci_power_save(pc, true); 
     732+ 
     733+       bcma_core_pci_extend_L1timer(pc, true); 
     734+} 
     735+EXPORT_SYMBOL_GPL(bcma_core_pci_up); 
     736+ 
     737+void bcma_core_pci_down(struct bcma_bus *bus) 
     738+{ 
     739+       struct bcma_drv_pci *pc; 
     740+ 
     741+       if (bus->hosttype != BCMA_HOSTTYPE_PCI) 
     742+               return; 
     743+ 
     744+       pc = &bus->drv_pci[0]; 
     745+ 
     746+       bcma_core_pci_extend_L1timer(pc, false); 
     747+ 
     748+       bcma_core_pci_power_save(pc, false); 
     749+} 
     750+EXPORT_SYMBOL_GPL(bcma_core_pci_down); 
     751--- a/drivers/bcma/driver_pci_host.c 
     752+++ b/drivers/bcma/driver_pci_host.c 
     753@@ -581,6 +581,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI 
     754 int bcma_core_pci_plat_dev_init(struct pci_dev *dev) 
     755 { 
     756        struct bcma_drv_pci_host *pc_host; 
     757+       int readrq; 
     758  
     759        if (dev->bus->ops->read != bcma_core_pci_hostmode_read_config) { 
     760                /* This is not a device on the PCI-core bridge. */ 
     761@@ -595,6 +596,11 @@ int bcma_core_pci_plat_dev_init(struct p 
     762        dev->irq = bcma_core_irq(pc_host->pdev->core); 
     763        pci_write_config_byte(dev, PCI_INTERRUPT_LINE, dev->irq); 
     764  
     765+       readrq = pcie_get_readrq(dev); 
     766+       if (readrq > 128) { 
     767+               pr_info("change PCIe max read request size from %i to 128\n", readrq); 
     768+               pcie_set_readrq(dev, 128); 
     769+       } 
     770        return 0; 
     771 } 
     772 EXPORT_SYMBOL(bcma_core_pci_plat_dev_init); 
     773--- a/drivers/bcma/scan.c 
     774+++ b/drivers/bcma/scan.c 
     775@@ -32,6 +32,18 @@ static const struct bcma_device_id_name 
     776        { BCMA_CORE_4706_CHIPCOMMON, "BCM4706 ChipCommon" }, 
     777        { BCMA_CORE_4706_SOC_RAM, "BCM4706 SOC RAM" }, 
     778        { BCMA_CORE_4706_MAC_GBIT, "BCM4706 GBit MAC" }, 
     779+       { BCMA_CORE_PCIEG2, "PCIe Gen 2" }, 
     780+       { BCMA_CORE_DMA, "DMA" }, 
     781+       { BCMA_CORE_SDIO3, "SDIO3" }, 
     782+       { BCMA_CORE_USB20, "USB 2.0" }, 
     783+       { BCMA_CORE_USB30, "USB 3.0" }, 
     784+       { BCMA_CORE_A9JTAG, "ARM Cortex A9 JTAG" }, 
     785+       { BCMA_CORE_DDR23, "Denali DDR2/DDR3 memory controller" }, 
     786+       { BCMA_CORE_ROM, "ROM" }, 
     787+       { BCMA_CORE_NAND, "NAND flash controller" }, 
     788+       { BCMA_CORE_QSPI, "SPI flash controller" }, 
     789+       { BCMA_CORE_CHIPCOMMON_B, "Chipcommon B" }, 
     790+       { BCMA_CORE_ARMCA9, "ARM Cortex A9 core (ihost)" }, 
     791        { BCMA_CORE_AMEMC, "AMEMC (DDR)" }, 
     792        { BCMA_CORE_ALTA, "ALTA (I2S)" }, 
     793        { BCMA_CORE_INVALID, "Invalid" }, 
     794@@ -201,7 +213,7 @@ static s32 bcma_erom_get_mst_port(struct 
     795        return ent; 
     796 } 
     797  
     798-static s32 bcma_erom_get_addr_desc(struct bcma_bus *bus, u32 __iomem **eromptr, 
     799+static u32 bcma_erom_get_addr_desc(struct bcma_bus *bus, u32 __iomem **eromptr, 
     800                                  u32 type, u8 port) 
     801 { 
     802        u32 addrl, addrh, sizel, sizeh = 0; 
     803@@ -213,7 +225,7 @@ static s32 bcma_erom_get_addr_desc(struc 
     804            ((ent & SCAN_ADDR_TYPE) != type) || 
     805            (((ent & SCAN_ADDR_PORT) >> SCAN_ADDR_PORT_SHIFT) != port)) { 
     806                bcma_erom_push_ent(eromptr); 
     807-               return -EINVAL; 
     808+               return (u32)-EINVAL; 
     809        } 
     810  
     811        addrl = ent & SCAN_ADDR_ADDR; 
     812@@ -257,11 +269,13 @@ static struct bcma_device *bcma_find_cor 
     813        return NULL; 
     814 } 
     815  
     816+#define IS_ERR_VALUE_U32(x) ((x) >= (u32)-MAX_ERRNO) 
     817+ 
     818 static int bcma_get_next_core(struct bcma_bus *bus, u32 __iomem **eromptr, 
     819                              struct bcma_device_id *match, int core_num, 
     820                              struct bcma_device *core) 
     821 { 
     822-       s32 tmp; 
     823+       u32 tmp; 
     824        u8 i, j; 
     825        s32 cia, cib; 
     826        u8 ports[2], wrappers[2]; 
     827@@ -339,11 +353,11 @@ static int bcma_get_next_core(struct bcm 
     828         * the main register space for the core 
     829         */ 
     830        tmp = bcma_erom_get_addr_desc(bus, eromptr, SCAN_ADDR_TYPE_SLAVE, 0); 
     831-       if (tmp <= 0) { 
     832+       if (tmp == 0 || IS_ERR_VALUE_U32(tmp)) { 
     833                /* Try again to see if it is a bridge */ 
     834                tmp = bcma_erom_get_addr_desc(bus, eromptr, 
     835                                              SCAN_ADDR_TYPE_BRIDGE, 0); 
     836-               if (tmp <= 0) { 
     837+               if (tmp == 0 || IS_ERR_VALUE_U32(tmp)) { 
     838                        return -EILSEQ; 
     839                } else { 
     840                        bcma_info(bus, "Bridge found\n"); 
     841@@ -357,7 +371,7 @@ static int bcma_get_next_core(struct bcm 
     842                for (j = 0; ; j++) { 
     843                        tmp = bcma_erom_get_addr_desc(bus, eromptr, 
     844                                SCAN_ADDR_TYPE_SLAVE, i); 
     845-                       if (tmp < 0) { 
     846+                       if (IS_ERR_VALUE_U32(tmp)) { 
     847                                /* no more entries for port _i_ */ 
     848                                /* pr_debug("erom: slave port %d " 
     849                                 * "has %d descriptors\n", i, j); */ 
     850@@ -374,7 +388,7 @@ static int bcma_get_next_core(struct bcm 
     851                for (j = 0; ; j++) { 
     852                        tmp = bcma_erom_get_addr_desc(bus, eromptr, 
     853                                SCAN_ADDR_TYPE_MWRAP, i); 
     854-                       if (tmp < 0) { 
     855+                       if (IS_ERR_VALUE_U32(tmp)) { 
     856                                /* no more entries for port _i_ */ 
     857                                /* pr_debug("erom: master wrapper %d " 
     858                                 * "has %d descriptors\n", i, j); */ 
     859@@ -392,7 +406,7 @@ static int bcma_get_next_core(struct bcm 
     860                for (j = 0; ; j++) { 
     861                        tmp = bcma_erom_get_addr_desc(bus, eromptr, 
     862                                SCAN_ADDR_TYPE_SWRAP, i + hack); 
     863-                       if (tmp < 0) { 
     864+                       if (IS_ERR_VALUE_U32(tmp)) { 
     865                                /* no more entries for port _i_ */ 
     866                                /* pr_debug("erom: master wrapper %d " 
     867                                 * has %d descriptors\n", i, j); */ 
     868--- a/include/linux/bcma/bcma_driver_pci.h 
     869+++ b/include/linux/bcma/bcma_driver_pci.h 
     870@@ -181,10 +181,31 @@ struct pci_dev; 
     871  
     872 #define BCMA_CORE_PCI_CFG_DEVCTRL              0xd8 
     873  
     874+#define BCMA_CORE_PCI_ 
     875+ 
     876+/* MDIO devices (SERDES modules) */ 
     877+#define BCMA_CORE_PCI_MDIO_IEEE0               0x000 
     878+#define BCMA_CORE_PCI_MDIO_IEEE1               0x001 
     879+#define BCMA_CORE_PCI_MDIO_BLK0                        0x800 
     880+#define BCMA_CORE_PCI_MDIO_BLK1                        0x801 
     881+#define  BCMA_CORE_PCI_MDIO_BLK1_MGMT0         0x16 
     882+#define  BCMA_CORE_PCI_MDIO_BLK1_MGMT1         0x17 
     883+#define  BCMA_CORE_PCI_MDIO_BLK1_MGMT2         0x18 
     884+#define  BCMA_CORE_PCI_MDIO_BLK1_MGMT3         0x19 
     885+#define  BCMA_CORE_PCI_MDIO_BLK1_MGMT4         0x1A 
     886+#define BCMA_CORE_PCI_MDIO_BLK2                        0x802 
     887+#define BCMA_CORE_PCI_MDIO_BLK3                        0x803 
     888+#define BCMA_CORE_PCI_MDIO_BLK4                        0x804 
     889+#define BCMA_CORE_PCI_MDIO_TXPLL               0x808   /* TXPLL register block idx */ 
     890+#define BCMA_CORE_PCI_MDIO_TXCTRL0             0x820 
     891+#define BCMA_CORE_PCI_MDIO_SERDESID            0x831 
     892+#define BCMA_CORE_PCI_MDIO_RXCTRL0             0x840 
     893+ 
     894 /* PCIE Root Capability Register bits (Host mode only) */ 
     895 #define BCMA_CORE_PCI_RC_CRS_VISIBILITY                0x0001 
     896  
     897 struct bcma_drv_pci; 
     898+struct bcma_bus; 
     899  
     900 #ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE 
     901 struct bcma_drv_pci_host { 
     902@@ -219,7 +240,8 @@ struct bcma_drv_pci { 
     903 extern void bcma_core_pci_init(struct bcma_drv_pci *pc); 
     904 extern int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc, 
     905                                 struct bcma_device *core, bool enable); 
     906-extern void bcma_core_pci_extend_L1timer(struct bcma_drv_pci *pc, bool extend); 
     907+extern void bcma_core_pci_up(struct bcma_bus *bus); 
     908+extern void bcma_core_pci_down(struct bcma_bus *bus); 
     909  
     910 extern int bcma_core_pci_pcibios_map_irq(const struct pci_dev *dev); 
     911 extern int bcma_core_pci_plat_dev_init(struct pci_dev *dev); 
     912--- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c 
     913+++ b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c 
     914@@ -679,27 +679,6 @@ bool ai_clkctl_cc(struct si_pub *sih, en 
     915        return mode == BCMA_CLKMODE_FAST; 
     916 } 
     917  
     918-void ai_pci_up(struct si_pub *sih) 
     919-{ 
     920-       struct si_info *sii; 
     921- 
     922-       sii = container_of(sih, struct si_info, pub); 
     923- 
     924-       if (sii->icbus->hosttype == BCMA_HOSTTYPE_PCI) 
     925-               bcma_core_pci_extend_L1timer(&sii->icbus->drv_pci[0], true); 
     926-} 
     927- 
     928-/* Unconfigure and/or apply various WARs when going down */ 
     929-void ai_pci_down(struct si_pub *sih) 
     930-{ 
     931-       struct si_info *sii; 
     932- 
     933-       sii = container_of(sih, struct si_info, pub); 
     934- 
     935-       if (sii->icbus->hosttype == BCMA_HOSTTYPE_PCI) 
     936-               bcma_core_pci_extend_L1timer(&sii->icbus->drv_pci[0], false); 
     937-} 
     938- 
     939 /* Enable BT-COEX & Ex-PA for 4313 */ 
     940 void ai_epa_4313war(struct si_pub *sih) 
     941 { 
     942--- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.h 
     943+++ b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.h 
     944@@ -183,9 +183,6 @@ extern u16 ai_clkctl_fast_pwrup_delay(st 
     945 extern bool ai_clkctl_cc(struct si_pub *sih, enum bcma_clkmode mode); 
     946 extern bool ai_deviceremoved(struct si_pub *sih); 
     947  
     948-extern void ai_pci_down(struct si_pub *sih); 
     949-extern void ai_pci_up(struct si_pub *sih); 
     950- 
     951 /* Enable Ex-PA for 4313 */ 
     952 extern void ai_epa_4313war(struct si_pub *sih); 
     953  
     954--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c 
     955+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c 
     956@@ -4667,7 +4667,7 @@ static int brcms_b_attach(struct brcms_c 
     957        brcms_c_coredisable(wlc_hw); 
     958  
     959        /* Match driver "down" state */ 
     960-       ai_pci_down(wlc_hw->sih); 
     961+       bcma_core_pci_down(wlc_hw->d11core->bus); 
     962  
     963        /* turn off pll and xtal to match driver "down" state */ 
     964        brcms_b_xtal(wlc_hw, OFF); 
     965@@ -5010,12 +5010,12 @@ static int brcms_b_up_prep(struct brcms_ 
     966         */ 
     967        if (brcms_b_radio_read_hwdisabled(wlc_hw)) { 
     968                /* put SB PCI in down state again */ 
     969-               ai_pci_down(wlc_hw->sih); 
     970+               bcma_core_pci_down(wlc_hw->d11core->bus); 
     971                brcms_b_xtal(wlc_hw, OFF); 
     972                return -ENOMEDIUM; 
     973        } 
     974  
     975-       ai_pci_up(wlc_hw->sih); 
     976+       bcma_core_pci_up(wlc_hw->d11core->bus); 
     977  
     978        /* reset the d11 core */ 
     979        brcms_b_corereset(wlc_hw, BRCMS_USE_COREFLAGS); 
     980@@ -5212,7 +5212,7 @@ static int brcms_b_down_finish(struct br 
     981  
     982                /* turn off primary xtal and pll */ 
     983                if (!wlc_hw->noreset) { 
     984-                       ai_pci_down(wlc_hw->sih); 
     985+                       bcma_core_pci_down(wlc_hw->d11core->bus); 
     986                        brcms_b_xtal(wlc_hw, OFF); 
     987                } 
     988        } 
  • trunk/target/linux/generic/patches-3.3/020-ssb_update.patch

    r37432 r37957  
    3737+config SSB_SFLASH 
    3838+       bool "SSB serial flash support" 
    39 +       depends on SSB_DRIVER_MIPS && BROKEN 
     39+       depends on SSB_DRIVER_MIPS 
    4040+       default y 
    4141+ 
     
    588588--- /dev/null 
    589589+++ b/drivers/ssb/driver_chipcommon_sflash.c 
    590 @@ -0,0 +1,166 @@ 
     590@@ -0,0 +1,164 @@ 
    591591+/* 
    592592+ * Sonics Silicon Backplane 
     
    742742+       sflash->present = true; 
    743743+ 
    744 +       pr_info("Found %s serial flash (blocksize: 0x%X, blocks: %d)\n", 
    745 +               e->name, e->blocksize, e->numblocks); 
     744+       pr_info("Found %s serial flash (size: %dKiB, blocksize: 0x%X, blocks: %d)\n", 
     745+               e->name, sflash->size / 1024, e->blocksize, e->numblocks); 
    746746+ 
    747747+       /* Prepare platform device, but don't register it yet. It's too early, 
     
    751751+       ssb_sflash_dev.dev.platform_data = sflash; 
    752752+ 
    753 +       pr_err("Serial flash support is not implemented yet!\n"); 
    754 + 
    755 +       return -ENOTSUPP; 
     753+       return 0; 
    756754+} 
    757755--- a/drivers/ssb/driver_extif.c 
  • trunk/target/linux/generic/patches-3.3/025-bcma_backport.patch

    r37432 r37957  
    1212--- a/drivers/bcma/Kconfig 
    1313+++ b/drivers/bcma/Kconfig 
    14 @@ -26,10 +26,11 @@ config BCMA_HOST_PCI_POSSIBLE 
     14@@ -26,16 +26,23 @@ config BCMA_HOST_PCI_POSSIBLE 
    1515 config BCMA_HOST_PCI 
    1616        bool "Support for BCMA on PCI-host bus" 
     
    2525          PCI core hostmode operation (external PCI bus). 
    2626  
    27 @@ -46,6 +47,33 @@ config BCMA_DRIVER_MIPS 
     27 config BCMA_HOST_SOC 
     28-       bool 
     29-       depends on BCMA_DRIVER_MIPS 
     30+       bool "Support for BCMA in a SoC" 
     31+       depends on BCMA 
     32+       help 
     33+         Host interface for a Broadcom AIX bus directly mapped into 
     34+         the memory. This only works with the Broadcom SoCs from the 
     35+         BCM47XX line. 
     36+ 
     37+         If unsure, say N 
     38  
     39 config BCMA_DRIVER_MIPS 
     40        bool "BCMA Broadcom MIPS core driver" 
     41@@ -46,6 +53,33 @@ config BCMA_DRIVER_MIPS 
    2842  
    2943          If unsure, say N 
     
    20482062  * Licensed under the GNU/GPL. See COPYING for details. 
    20492063  */ 
    2050 @@ -16,120 +17,124 @@ 
     2064@@ -16,120 +17,131 @@ 
    20512065  * R/W ops. 
    20522066  **************************************************/ 
     
    20752089-#endif 
    20762090  
    2077  static void bcma_pcie_mdio_set_phy(struct bcma_drv_pci *pc, u8 phy) 
     2091-static void bcma_pcie_mdio_set_phy(struct bcma_drv_pci *pc, u8 phy) 
     2092+static void bcma_pcie_mdio_set_phy(struct bcma_drv_pci *pc, u16 phy) 
    20782093 { 
    20792094-       const u16 mdio_control = 0x128; 
     
    21092124 } 
    21102125  
    2111  static u16 bcma_pcie_mdio_read(struct bcma_drv_pci *pc, u8 device, u8 address) 
     2126-static u16 bcma_pcie_mdio_read(struct bcma_drv_pci *pc, u8 device, u8 address) 
     2127+static u16 bcma_pcie_mdio_read(struct bcma_drv_pci *pc, u16 device, u8 address) 
    21122128 { 
    21132129-       const u16 mdio_control = 0x128; 
     
    21692185 } 
    21702186  
    2171  static void bcma_pcie_mdio_write(struct bcma_drv_pci *pc, u8 device, 
     2187-static void bcma_pcie_mdio_write(struct bcma_drv_pci *pc, u8 device, 
     2188+static void bcma_pcie_mdio_write(struct bcma_drv_pci *pc, u16 device, 
    21722189                                u8 address, u16 data) 
    21732190 { 
     
    22222239-       pcicore_write32(pc, mdio_control, 0); 
    22232240+       pcicore_write32(pc, BCMA_CORE_PCI_MDIO_CONTROL, 0); 
     2241+} 
     2242+ 
     2243+static u16 bcma_pcie_mdio_writeread(struct bcma_drv_pci *pc, u16 device, 
     2244+                                   u8 address, u16 data) 
     2245+{ 
     2246+       bcma_pcie_mdio_write(pc, device, address, data); 
     2247+       return bcma_pcie_mdio_read(pc, device, address); 
    22242248 } 
    22252249  
    22262250 /************************************************** 
    2227 @@ -138,88 +143,108 @@ static void bcma_pcie_mdio_write(struct 
     2251@@ -138,88 +150,127 @@ static void bcma_pcie_mdio_write(struct 
    22282252  
    22292253 static u8 bcma_pcicore_polarity_workaround(struct bcma_drv_pci *pc) 
     
    22782302+               pcicore_write16(pc, regoff, val16); 
    22792303+       } 
    2280 +} 
    2281 + 
     2304 } 
     2305  
     2306-/************************************************** 
     2307- * Init. 
     2308- **************************************************/ 
     2309- 
     2310-static void bcma_core_pci_clientmode_init(struct bcma_drv_pci *pc) 
    22822311+/* Fix MISC config to allow coming out of L2/L3-Ready state w/o PRST */ 
    22832312+/* Needs to happen when coming out of 'standby'/'hibernate' */ 
    22842313+static void bcma_core_pci_config_fixup(struct bcma_drv_pci *pc) 
    2285 +{ 
     2314 { 
     2315-       bcma_pcicore_serdes_workaround(pc); 
    22862316+       u16 val16; 
    22872317+       uint regoff; 
     
    22972327 } 
    22982328  
    2299  /************************************************** 
    2300   * Init. 
    2301   **************************************************/ 
    2302   
    2303 -static void bcma_core_pci_clientmode_init(struct bcma_drv_pci *pc) 
    2304 +static void __devinit bcma_core_pci_clientmode_init(struct bcma_drv_pci *pc) 
    2305  { 
    2306 +       bcma_core_pci_fixcfg(pc); 
    2307         bcma_pcicore_serdes_workaround(pc); 
    2308 +       bcma_core_pci_config_fixup(pc); 
    2309  } 
    2310   
    23112329-static bool bcma_core_pci_is_in_hostmode(struct bcma_drv_pci *pc) 
    2312 -{ 
     2330+static void bcma_core_pci_power_save(struct bcma_drv_pci *pc, bool up) 
     2331 { 
    23132332-       struct bcma_bus *bus = pc->core->bus; 
    23142333-       u16 chipid_top; 
    2315 - 
     2334+       u16 data; 
     2335  
    23162336-       chipid_top = (bus->chipinfo.id & 0xFF00); 
    23172337-       if (chipid_top != 0x4700 && 
     
    23232343-               return false; 
    23242344-#endif /* CONFIG_SSB_DRIVER_PCICORE */ 
    2325 - 
     2345+       if (pc->core->id.rev >= 15 && pc->core->id.rev <= 20) { 
     2346+               data = up ? 0x74 : 0x7C; 
     2347+               bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1, 
     2348+                                        BCMA_CORE_PCI_MDIO_BLK1_MGMT1, 0x7F64); 
     2349+               bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1, 
     2350+                                        BCMA_CORE_PCI_MDIO_BLK1_MGMT3, data); 
     2351+       } else if (pc->core->id.rev >= 21 && pc->core->id.rev <= 22) { 
     2352+               data = up ? 0x75 : 0x7D; 
     2353+               bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1, 
     2354+                                        BCMA_CORE_PCI_MDIO_BLK1_MGMT1, 0x7E65); 
     2355+               bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1, 
     2356+                                        BCMA_CORE_PCI_MDIO_BLK1_MGMT3, data); 
     2357+       } 
     2358+} 
     2359  
    23262360-#if 0 
    23272361-       /* TODO: on BCMA we use address from EROM instead of magic formula */ 
     
    23302364-               (pc->core->core_index * BCMA_CORE_SIZE))); 
    23312365-#endif 
    2332 - 
     2366+/************************************************** 
     2367+ * Init. 
     2368+ **************************************************/ 
     2369  
    23332370-       return true; 
    2334 -} 
    2335 - 
     2371+static void __devinit bcma_core_pci_clientmode_init(struct bcma_drv_pci *pc) 
     2372+{ 
     2373+       bcma_core_pci_fixcfg(pc); 
     2374+       bcma_pcicore_serdes_workaround(pc); 
     2375+       bcma_core_pci_config_fixup(pc); 
     2376 } 
     2377  
    23362378-void bcma_core_pci_init(struct bcma_drv_pci *pc) 
    23372379+void __devinit bcma_core_pci_init(struct bcma_drv_pci *pc) 
     
    23782420        if (err) 
    23792421                goto out; 
    2380 @@ -236,3 +261,17 @@ out: 
     2422@@ -236,3 +287,46 @@ out: 
    23812423        return err; 
    23822424 } 
    23832425 EXPORT_SYMBOL_GPL(bcma_core_pci_irq_ctl); 
    23842426+ 
    2385 +void bcma_core_pci_extend_L1timer(struct bcma_drv_pci *pc, bool extend) 
     2427+static void bcma_core_pci_extend_L1timer(struct bcma_drv_pci *pc, bool extend) 
    23862428+{ 
    23872429+       u32 w; 
     
    23952437+       bcma_pcie_read(pc, BCMA_CORE_PCI_DLLP_PMTHRESHREG); 
    23962438+} 
    2397 +EXPORT_SYMBOL_GPL(bcma_core_pci_extend_L1timer); 
     2439+ 
     2440+void bcma_core_pci_up(struct bcma_bus *bus) 
     2441+{ 
     2442+       struct bcma_drv_pci *pc; 
     2443+ 
     2444+       if (bus->hosttype != BCMA_HOSTTYPE_PCI) 
     2445+               return; 
     2446+ 
     2447+       pc = &bus->drv_pci[0]; 
     2448+ 
     2449+       bcma_core_pci_power_save(pc, true); 
     2450+ 
     2451+       bcma_core_pci_extend_L1timer(pc, true); 
     2452+} 
     2453+EXPORT_SYMBOL_GPL(bcma_core_pci_up); 
     2454+ 
     2455+void bcma_core_pci_down(struct bcma_bus *bus) 
     2456+{ 
     2457+       struct bcma_drv_pci *pc; 
     2458+ 
     2459+       if (bus->hosttype != BCMA_HOSTTYPE_PCI) 
     2460+               return; 
     2461+ 
     2462+       pc = &bus->drv_pci[0]; 
     2463+ 
     2464+       bcma_core_pci_extend_L1timer(pc, false); 
     2465+ 
     2466+       bcma_core_pci_power_save(pc, false); 
     2467+} 
     2468+EXPORT_SYMBOL_GPL(bcma_core_pci_down); 
    23982469--- a/drivers/bcma/driver_pci_host.c 
    23992470+++ b/drivers/bcma/driver_pci_host.c 
    2400 @@ -2,13 +2,616 @@ 
     2471@@ -2,13 +2,622 @@ 
    24012472  * Broadcom specific AMBA 
    24022473  * PCI Core in hostmode 
     
    29843055+{ 
    29853056+       struct bcma_drv_pci_host *pc_host; 
     3057+       int readrq; 
    29863058+ 
    29873059+       if (dev->bus->ops->read != bcma_core_pci_hostmode_read_config) { 
     
    29983070+       pci_write_config_byte(dev, PCI_INTERRUPT_LINE, dev->irq); 
    29993071+ 
     3072+       readrq = pcie_get_readrq(dev); 
     3073+       if (readrq > 128) { 
     3074+               pr_info("change PCIe max read request size from %i to 128\n", readrq); 
     3075+               pcie_set_readrq(dev, 128); 
     3076+       } 
    30003077+       return 0; 
    30013078+} 
     
    33363413        if (err) { 
    33373414-               pr_err("Failed to scan: %d\n", err); 
     3415-               return -1; 
    33383416+               bcma_err(bus, "Failed to scan: %d\n", err); 
    3339                 return -1; 
     3417+               return err; 
    33403418        } 
    33413419  
     
    34873565--- a/drivers/bcma/scan.c 
    34883566+++ b/drivers/bcma/scan.c 
    3489 @@ -19,15 +19,27 @@ struct bcma_device_id_name { 
     3567@@ -19,15 +19,39 @@ struct bcma_device_id_name { 
    34903568        u16 id; 
    34913569        const char *name; 
     
    35053583+       { BCMA_CORE_4706_SOC_RAM, "BCM4706 SOC RAM" }, 
    35063584+       { BCMA_CORE_4706_MAC_GBIT, "BCM4706 GBit MAC" }, 
     3585+       { BCMA_CORE_PCIEG2, "PCIe Gen 2" }, 
     3586+       { BCMA_CORE_DMA, "DMA" }, 
     3587+       { BCMA_CORE_SDIO3, "SDIO3" }, 
     3588+       { BCMA_CORE_USB20, "USB 2.0" }, 
     3589+       { BCMA_CORE_USB30, "USB 3.0" }, 
     3590+       { BCMA_CORE_A9JTAG, "ARM Cortex A9 JTAG" }, 
     3591+       { BCMA_CORE_DDR23, "Denali DDR2/DDR3 memory controller" }, 
     3592+       { BCMA_CORE_ROM, "ROM" }, 
     3593+       { BCMA_CORE_NAND, "NAND flash controller" }, 
     3594+       { BCMA_CORE_QSPI, "SPI flash controller" }, 
     3595+       { BCMA_CORE_CHIPCOMMON_B, "Chipcommon B" }, 
     3596+       { BCMA_CORE_ARMCA9, "ARM Cortex A9 core (ihost)" }, 
    35073597+       { BCMA_CORE_AMEMC, "AMEMC (DDR)" }, 
    35083598+       { BCMA_CORE_ALTA, "ALTA (I2S)" }, 
     
    35173607        { BCMA_CORE_V90, "V90" }, 
    35183608        { BCMA_CORE_USB11_HOSTDEV, "USB 1.1 Hostdev" }, 
    3519 @@ -44,7 +56,6 @@ struct bcma_device_id_name bcma_device_n 
     3609@@ -44,7 +68,6 @@ struct bcma_device_id_name bcma_device_n 
    35203610        { BCMA_CORE_PHY_A, "PHY A" }, 
    35213611        { BCMA_CORE_PHY_B, "PHY B" }, 
     
    35253615        { BCMA_CORE_USB11_DEV, "USB 1.1 Device" }, 
    35263616        { BCMA_CORE_USB20_HOST, "USB 2.0 Host" }, 
    3527 @@ -58,15 +69,11 @@ struct bcma_device_id_name bcma_device_n 
     3617@@ -58,15 +81,11 @@ struct bcma_device_id_name bcma_device_n 
    35283618        { BCMA_CORE_PHY_N, "PHY N" }, 
    35293619        { BCMA_CORE_SRAM_CTL, "SRAM Controller" }, 
     
    35413631        { BCMA_CORE_DDR12_MEM_CTL, "DDR1/DDR2 Memory Controller" }, 
    35423632        { BCMA_CORE_PCIE_RC, "PCIe Root Complex" }, 
    3543 @@ -77,18 +84,45 @@ struct bcma_device_id_name bcma_device_n 
     3633@@ -77,18 +96,45 @@ struct bcma_device_id_name bcma_device_n 
    35443634        { BCMA_CORE_I2S, "I2S" }, 
    35453635        { BCMA_CORE_SDR_DDR1_MEM_CTL, "SDR/DDR1 Memory Controller" }, 
     
    35843674+       default: 
    35853675+               return "UNKNOWN"; 
    3586         } 
     3676+       } 
    35873677+ 
    35883678+       for (i = 0; i < size; i++) { 
    35893679+               if (names[i].id == id->id) 
    35903680+                       return names[i].name; 
    3591 +       } 
     3681        } 
    35923682+ 
    35933683        return "UNKNOWN"; 
    35943684 } 
    35953685  
    3596 @@ -105,19 +139,19 @@ static void bcma_scan_switch_core(struct 
     3686@@ -105,19 +151,19 @@ static void bcma_scan_switch_core(struct 
    35973687                                       addr); 
    35983688 } 
     
    36173707        u32 ent = bcma_erom_get_ent(bus, eromptr); 
    36183708        if (!(ent & SCAN_ER_VALID)) 
    3619 @@ -127,14 +161,14 @@ static s32 bcma_erom_get_ci(struct bcma_ 
     3709@@ -127,14 +173,14 @@ static s32 bcma_erom_get_ci(struct bcma_ 
    36203710        return ent; 
    36213711 } 
     
    36343724        u32 ent = bcma_erom_get_ent(bus, eromptr); 
    36353725        bcma_erom_push_ent(eromptr); 
    3636 @@ -143,7 +177,7 @@ static bool bcma_erom_is_bridge(struct b 
     3726@@ -143,7 +189,7 @@ static bool bcma_erom_is_bridge(struct b 
    36373727                ((ent & SCAN_ADDR_TYPE) == SCAN_ADDR_TYPE_BRIDGE)); 
    36383728 } 
     
    36433733        u32 ent; 
    36443734        while (1) { 
    3645 @@ -157,7 +191,7 @@ static void bcma_erom_skip_component(str 
     3735@@ -157,7 +203,7 @@ static void bcma_erom_skip_component(str 
    36463736        bcma_erom_push_ent(eromptr); 
    36473737 } 
     
    36523742        u32 ent = bcma_erom_get_ent(bus, eromptr); 
    36533743        if (!(ent & SCAN_ER_VALID)) 
    3654 @@ -167,7 +201,7 @@ static s32 bcma_erom_get_mst_port(struct 
     3744@@ -167,7 +213,7 @@ static s32 bcma_erom_get_mst_port(struct 
    36553745        return ent; 
    36563746 } 
    36573747  
    36583748-static s32 bcma_erom_get_addr_desc(struct bcma_bus *bus, u32 **eromptr, 
    3659 +static s32 bcma_erom_get_addr_desc(struct bcma_bus *bus, u32 __iomem **eromptr, 
     3749+static u32 bcma_erom_get_addr_desc(struct bcma_bus *bus, u32 __iomem **eromptr, 
    36603750                                  u32 type, u8 port) 
    36613751 { 
    36623752        u32 addrl, addrh, sizel, sizeh = 0; 
    3663 @@ -212,6 +246,17 @@ static struct bcma_device *bcma_find_cor 
     3753@@ -179,7 +225,7 @@ static s32 bcma_erom_get_addr_desc(struc 
     3754            ((ent & SCAN_ADDR_TYPE) != type) || 
     3755            (((ent & SCAN_ADDR_PORT) >> SCAN_ADDR_PORT_SHIFT) != port)) { 
     3756                bcma_erom_push_ent(eromptr); 
     3757-               return -EINVAL; 
     3758+               return (u32)-EINVAL; 
     3759        } 
     3760  
     3761        addrl = ent & SCAN_ADDR_ADDR; 
     3762@@ -212,11 +258,24 @@ static struct bcma_device *bcma_find_cor 
    36643763        return NULL; 
    36653764 } 
     
    36763775+} 
    36773776+ 
     3777+#define IS_ERR_VALUE_U32(x) ((x) >= (u32)-MAX_ERRNO) 
     3778+ 
    36783779 static int bcma_get_next_core(struct bcma_bus *bus, u32 __iomem **eromptr, 
    36793780                              struct bcma_device_id *match, int core_num, 
    36803781                              struct bcma_device *core) 
    3681 @@ -252,11 +297,15 @@ static int bcma_get_next_core(struct bcm 
     3782 { 
     3783-       s32 tmp; 
     3784+       u32 tmp; 
     3785        u8 i, j; 
     3786        s32 cia, cib; 
     3787        u8 ports[2], wrappers[2]; 
     3788@@ -252,11 +311,15 @@ static int bcma_get_next_core(struct bcm 
    36823789  
    36833790        /* check if component is a core at all */ 
     
    37003807  
    37013808        if (bcma_erom_is_bridge(bus, eromptr)) { 
    3702 @@ -286,6 +335,23 @@ static int bcma_get_next_core(struct bcm 
     3809@@ -286,19 +349,36 @@ static int bcma_get_next_core(struct bcm 
    37033810                        return -EILSEQ; 
    37043811        } 
     
    37083815+        */ 
    37093816+       tmp = bcma_erom_get_addr_desc(bus, eromptr, SCAN_ADDR_TYPE_SLAVE, 0); 
    3710 +       if (tmp <= 0) { 
     3817+       if (tmp == 0 || IS_ERR_VALUE_U32(tmp)) { 
    37113818+               /* Try again to see if it is a bridge */ 
    37123819+               tmp = bcma_erom_get_addr_desc(bus, eromptr, 
    37133820+                                             SCAN_ADDR_TYPE_BRIDGE, 0); 
    3714 +               if (tmp <= 0) { 
     3821+               if (tmp == 0 || IS_ERR_VALUE_U32(tmp)) { 
    37153822+                       return -EILSEQ; 
    37163823+               } else { 
     
    37243831        for (i = 0; i < ports[1]; i++) { 
    37253832                for (j = 0; ; j++) { 
    3726 @@ -298,7 +364,7 @@ static int bcma_get_next_core(struct bcm 
     3833                        tmp = bcma_erom_get_addr_desc(bus, eromptr, 
     3834                                SCAN_ADDR_TYPE_SLAVE, i); 
     3835-                       if (tmp < 0) { 
     3836+                       if (IS_ERR_VALUE_U32(tmp)) { 
     3837                                /* no more entries for port _i_ */ 
     3838                                /* pr_debug("erom: slave port %d " 
     3839                                 * "has %d descriptors\n", i, j); */ 
    37273840                                break; 
    37283841                        } else { 
     
    37333846                } 
    37343847        } 
    3735 @@ -353,6 +419,7 @@ static int bcma_get_next_core(struct bcm 
     3848@@ -308,7 +388,7 @@ static int bcma_get_next_core(struct bcm 
     3849                for (j = 0; ; j++) { 
     3850                        tmp = bcma_erom_get_addr_desc(bus, eromptr, 
     3851                                SCAN_ADDR_TYPE_MWRAP, i); 
     3852-                       if (tmp < 0) { 
     3853+                       if (IS_ERR_VALUE_U32(tmp)) { 
     3854                                /* no more entries for port _i_ */ 
     3855                                /* pr_debug("erom: master wrapper %d " 
     3856                                 * "has %d descriptors\n", i, j); */ 
     3857@@ -326,7 +406,7 @@ static int bcma_get_next_core(struct bcm 
     3858                for (j = 0; ; j++) { 
     3859                        tmp = bcma_erom_get_addr_desc(bus, eromptr, 
     3860                                SCAN_ADDR_TYPE_SWRAP, i + hack); 
     3861-                       if (tmp < 0) { 
     3862+                       if (IS_ERR_VALUE_U32(tmp)) { 
     3863                                /* no more entries for port _i_ */ 
     3864                                /* pr_debug("erom: master wrapper %d " 
     3865                                 * has %d descriptors\n", i, j); */ 
     3866@@ -353,6 +433,7 @@ static int bcma_get_next_core(struct bcm 
    37363867 void bcma_init_bus(struct bcma_bus *bus) 
    37373868 { 
     
    37413872        if (bus->init_done) 
    37423873                return; 
    3743 @@ -363,9 +430,12 @@ void bcma_init_bus(struct bcma_bus *bus) 
     3874@@ -363,9 +444,12 @@ void bcma_init_bus(struct bcma_bus *bus) 
    37443875        bcma_scan_switch_core(bus, BCMA_ADDR_BASE); 
    37453876  
     
    37573888 } 
    37583889  
    3759 @@ -392,9 +462,12 @@ int bcma_bus_scan(struct bcma_bus *bus) 
     3890@@ -392,9 +476,12 @@ int bcma_bus_scan(struct bcma_bus *bus) 
    37603891        bcma_scan_switch_core(bus, erombase); 
    37613892  
     
    37723903                core->bus = bus; 
    37733904  
    3774 @@ -409,25 +482,28 @@ int bcma_bus_scan(struct bcma_bus *bus) 
     3905@@ -409,25 +496,28 @@ int bcma_bus_scan(struct bcma_bus *bus) 
    37753906                        } else if (err == -ESPIPE) { 
    37763907                                break; 
     
    38093940  
    38103941 int __init bcma_bus_scan_early(struct bcma_bus *bus, 
    3811 @@ -467,21 +543,21 @@ int __init bcma_bus_scan_early(struct bc 
     3942@@ -467,21 +557,21 @@ int __init bcma_bus_scan_early(struct bc 
    38123943                else if (err == -ESPIPE) 
    38133944                        break; 
     
    45584689        BCMA_CLKMODE_FAST, 
    45594690        BCMA_CLKMODE_DYNAMIC, 
    4560 @@ -65,6 +71,13 @@ struct bcma_host_ops { 
     4691@@ -65,6 +71,25 @@ struct bcma_host_ops { 
    45614692  
    45624693 /* Core-ID values. */ 
    45634694 #define BCMA_CORE_OOB_ROUTER           0x367   /* Out of band */ 
    45644695+#define BCMA_CORE_4706_CHIPCOMMON      0x500 
     4696+#define BCMA_CORE_PCIEG2               0x501 
     4697+#define BCMA_CORE_DMA                  0x502 
     4698+#define BCMA_CORE_SDIO3                        0x503 
     4699+#define BCMA_CORE_USB20                        0x504 
     4700+#define BCMA_CORE_USB30                        0x505 
     4701+#define BCMA_CORE_A9JTAG               0x506 
     4702+#define BCMA_CORE_DDR23                        0x507 
     4703+#define BCMA_CORE_ROM                  0x508 
     4704+#define BCMA_CORE_NAND                 0x509 
     4705+#define BCMA_CORE_QSPI                 0x50A 
     4706+#define BCMA_CORE_CHIPCOMMON_B         0x50B 
    45654707+#define BCMA_CORE_4706_SOC_RAM         0x50E 
     4708+#define BCMA_CORE_ARMCA9               0x510 
    45664709+#define BCMA_CORE_4706_MAC_GBIT                0x52D 
    45674710+#define BCMA_CORE_AMEMC                        0x52E   /* DDR1/2 memory controller core */ 
     
    45724715 #define BCMA_CORE_CHIPCOMMON           0x800 
    45734716 #define BCMA_CORE_ILINE20              0x801 
    4574 @@ -121,10 +134,104 @@ struct bcma_host_ops { 
     4717@@ -121,10 +146,109 @@ struct bcma_host_ops { 
    45754718 #define BCMA_CORE_I2S                  0x834 
    45764719 #define BCMA_CORE_SDR_DDR1_MEM_CTL     0x835   /* SDR/DDR1 memory controller core */ 
     
    46194762+#define BCMA_CHIP_ID_BCM53572  53572 
    46204763+#define  BCMA_PKG_ID_BCM47188  9 
     4764+#define BCMA_CHIP_ID_BCM4707   53010 
     4765+#define  BCMA_PKG_ID_BCM4707   1 
     4766+#define  BCMA_PKG_ID_BCM4708   2 
     4767+#define  BCMA_PKG_ID_BCM4709   0 
     4768+#define BCMA_CHIP_ID_BCM53018  53018 
    46214769+ 
    46224770+/* Board types (on PCI usually equals to the subsystem dev id) */ 
     
    46774825        struct bcma_bus *bus; 
    46784826        struct bcma_device_id id; 
    4679 @@ -136,8 +243,10 @@ struct bcma_device { 
     4827@@ -136,8 +260,10 @@ struct bcma_device { 
    46804828        bool dev_registered; 
    46814829  
     
    46884836  
    46894837        void __iomem *io_addr; 
    4690 @@ -175,6 +284,12 @@ int __bcma_driver_register(struct bcma_d 
     4838@@ -175,6 +301,12 @@ int __bcma_driver_register(struct bcma_d 
    46914839  
    46924840 extern void bcma_driver_unregister(struct bcma_driver *drv); 
     
    47014849        /* The MMIO area. */ 
    47024850        void __iomem *mmio; 
    4703 @@ -191,14 +306,18 @@ struct bcma_bus { 
     4851@@ -191,14 +323,18 @@ struct bcma_bus { 
    47044852  
    47054853        struct bcma_chipinfo chipinfo; 
     
    47214869        /* We decided to share SPROM struct with SSB as long as we do not need 
    47224870         * any hacks for BCMA. This simplifies drivers code. */ 
    4723 @@ -282,6 +401,7 @@ static inline void bcma_maskset16(struct 
     4871@@ -282,6 +418,7 @@ static inline void bcma_maskset16(struct 
    47244872        bcma_write16(cc, offset, (bcma_read16(cc, offset) & mask) | set); 
    47254873 } 
     
    47294877 extern void bcma_core_disable(struct bcma_device *core, u32 flags); 
    47304878 extern int bcma_core_enable(struct bcma_device *core, u32 flags); 
    4731 @@ -289,6 +409,7 @@ extern void bcma_core_set_clockmode(stru 
     4879@@ -289,6 +426,7 @@ extern void bcma_core_set_clockmode(stru 
    47324880                                    enum bcma_clkmode clkmode); 
    47334881 extern void bcma_core_pll_ctl(struct bcma_device *core, u32 req, u32 status, 
     
    54115559 /* SBtoPCIx */ 
    54125560 #define BCMA_CORE_PCI_SBTOPCI_MEM              0x00000000 
    5413 @@ -72,20 +108,120 @@ struct pci_dev; 
     5561@@ -72,20 +108,142 @@ struct pci_dev; 
    54145562 #define  BCMA_CORE_PCI_SBTOPCI_RC_READL                0x00000010 /* Memory read line */ 
    54155563 #define  BCMA_CORE_PCI_SBTOPCI_RC_READM                0x00000020 /* Memory read multiple */ 
     
    54885636+#define BCMA_CORE_PCI_CFG_DEVCTRL              0xd8 
    54895637+ 
     5638+#define BCMA_CORE_PCI_ 
     5639+ 
     5640+/* MDIO devices (SERDES modules) */ 
     5641+#define BCMA_CORE_PCI_MDIO_IEEE0               0x000 
     5642+#define BCMA_CORE_PCI_MDIO_IEEE1               0x001 
     5643+#define BCMA_CORE_PCI_MDIO_BLK0                        0x800 
     5644+#define BCMA_CORE_PCI_MDIO_BLK1                        0x801 
     5645+#define  BCMA_CORE_PCI_MDIO_BLK1_MGMT0         0x16 
     5646+#define  BCMA_CORE_PCI_MDIO_BLK1_MGMT1         0x17 
     5647+#define  BCMA_CORE_PCI_MDIO_BLK1_MGMT2         0x18 
     5648+#define  BCMA_CORE_PCI_MDIO_BLK1_MGMT3         0x19 
     5649+#define  BCMA_CORE_PCI_MDIO_BLK1_MGMT4         0x1A 
     5650+#define BCMA_CORE_PCI_MDIO_BLK2                        0x802 
     5651+#define BCMA_CORE_PCI_MDIO_BLK3                        0x803 
     5652+#define BCMA_CORE_PCI_MDIO_BLK4                        0x804 
     5653+#define BCMA_CORE_PCI_MDIO_TXPLL               0x808   /* TXPLL register block idx */ 
     5654+#define BCMA_CORE_PCI_MDIO_TXCTRL0             0x820 
     5655+#define BCMA_CORE_PCI_MDIO_SERDESID            0x831 
     5656+#define BCMA_CORE_PCI_MDIO_RXCTRL0             0x840 
     5657+ 
    54905658+/* PCIE Root Capability Register bits (Host mode only) */ 
    54915659+#define BCMA_CORE_PCI_RC_CRS_VISIBILITY                0x0001 
    54925660+ 
    54935661+struct bcma_drv_pci; 
     5662+struct bcma_bus; 
    54945663+ 
    54955664+#ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE 
     
    55275696 extern int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc, 
    55285697                                 struct bcma_device *core, bool enable); 
    5529 +extern void bcma_core_pci_extend_L1timer(struct bcma_drv_pci *pc, bool extend); 
     5698+extern void bcma_core_pci_up(struct bcma_bus *bus); 
     5699+extern void bcma_core_pci_down(struct bcma_bus *bus); 
    55305700+ 
    55315701+extern int bcma_core_pci_pcibios_map_irq(const struct pci_dev *dev); 
  • trunk/target/linux/generic/patches-3.6/020-ssb_update.patch

    r37432 r37957  
    3737+config SSB_SFLASH 
    3838+       bool "SSB serial flash support" 
    39 +       depends on SSB_DRIVER_MIPS && BROKEN 
     39+       depends on SSB_DRIVER_MIPS 
    4040+       default y 
    4141+ 
     
    532532--- /dev/null 
    533533+++ b/drivers/ssb/driver_chipcommon_sflash.c 
    534 @@ -0,0 +1,166 @@ 
     534@@ -0,0 +1,164 @@ 
    535535+/* 
    536536+ * Sonics Silicon Backplane 
     
    686686+       sflash->present = true; 
    687687+ 
    688 +       pr_info("Found %s serial flash (blocksize: 0x%X, blocks: %d)\n", 
    689 +               e->name, e->blocksize, e->numblocks); 
     688+       pr_info("Found %s serial flash (size: %dKiB, blocksize: 0x%X, blocks: %d)\n", 
     689+               e->name, sflash->size / 1024, e->blocksize, e->numblocks); 
    690690+ 
    691691+       /* Prepare platform device, but don't register it yet. It's too early, 
     
    695695+       ssb_sflash_dev.dev.platform_data = sflash; 
    696696+ 
    697 +       pr_err("Serial flash support is not implemented yet!\n"); 
    698 + 
    699 +       return -ENOTSUPP; 
     697+       return 0; 
    700698+} 
    701699--- a/drivers/ssb/driver_extif.c 
  • trunk/target/linux/generic/patches-3.6/025-bcma_backport.patch

    r37432 r37957  
    2020 config BCMA_DRIVER_PCI_HOSTMODE 
    2121        bool "Driver for PCI core working in hostmode" 
    22 @@ -48,12 +49,12 @@ config BCMA_DRIVER_MIPS 
     22@@ -34,8 +35,14 @@ config BCMA_DRIVER_PCI_HOSTMODE 
     23          PCI core hostmode operation (external PCI bus). 
     24  
     25 config BCMA_HOST_SOC 
     26-       bool 
     27-       depends on BCMA_DRIVER_MIPS 
     28+       bool "Support for BCMA in a SoC" 
     29+       depends on BCMA 
     30+       help 
     31+         Host interface for a Broadcom AIX bus directly mapped into 
     32+         the memory. This only works with the Broadcom SoCs from the 
     33+         BCM47XX line. 
     34+ 
     35+         If unsure, say N 
     36  
     37 config BCMA_DRIVER_MIPS 
     38        bool "BCMA Broadcom MIPS core driver" 
     39@@ -48,12 +55,12 @@ config BCMA_DRIVER_MIPS 
    2340  
    2441 config BCMA_SFLASH 
     
    3552  
    3653 config BCMA_DRIVER_GMAC_CMN 
    37 @@ -65,6 +66,14 @@ config BCMA_DRIVER_GMAC_CMN 
     54@@ -65,6 +72,14 @@ config BCMA_DRIVER_GMAC_CMN 
    3855  
    3956          If unsure, say N 
     
    16091626--- a/drivers/bcma/driver_pci.c 
    16101627+++ b/drivers/bcma/driver_pci.c 
    1611 @@ -51,7 +51,7 @@ static void bcma_pcie_mdio_set_phy(struc 
     1628@@ -31,7 +31,7 @@ static void bcma_pcie_write(struct bcma_ 
     1629        pcicore_write32(pc, BCMA_CORE_PCI_PCIEIND_DATA, data); 
     1630 } 
     1631  
     1632-static void bcma_pcie_mdio_set_phy(struct bcma_drv_pci *pc, u8 phy) 
     1633+static void bcma_pcie_mdio_set_phy(struct bcma_drv_pci *pc, u16 phy) 
     1634 { 
     1635        u32 v; 
     1636        int i; 
     1637@@ -51,11 +51,11 @@ static void bcma_pcie_mdio_set_phy(struc 
    16121638                v = pcicore_read32(pc, BCMA_CORE_PCI_MDIO_CONTROL); 
    16131639                if (v & BCMA_CORE_PCI_MDIOCTL_ACCESS_DONE) 
     
    16181644 } 
    16191645  
    1620 @@ -92,7 +92,7 @@ static u16 bcma_pcie_mdio_read(struct bc 
     1646-static u16 bcma_pcie_mdio_read(struct bcma_drv_pci *pc, u8 device, u8 address) 
     1647+static u16 bcma_pcie_mdio_read(struct bcma_drv_pci *pc, u16 device, u8 address) 
     1648 { 
     1649        int max_retries = 10; 
     1650        u16 ret = 0; 
     1651@@ -92,13 +92,13 @@ static u16 bcma_pcie_mdio_read(struct bc 
    16211652                        ret = pcicore_read32(pc, BCMA_CORE_PCI_MDIO_DATA); 
    16221653                        break; 
     
    16271658        pcicore_write32(pc, BCMA_CORE_PCI_MDIO_CONTROL, 0); 
    16281659        return ret; 
    1629 @@ -132,7 +132,7 @@ static void bcma_pcie_mdio_write(struct 
     1660 } 
     1661  
     1662-static void bcma_pcie_mdio_write(struct bcma_drv_pci *pc, u8 device, 
     1663+static void bcma_pcie_mdio_write(struct bcma_drv_pci *pc, u16 device, 
     1664                                u8 address, u16 data) 
     1665 { 
     1666        int max_retries = 10; 
     1667@@ -132,11 +132,18 @@ static void bcma_pcie_mdio_write(struct 
    16301668                v = pcicore_read32(pc, BCMA_CORE_PCI_MDIO_CONTROL); 
    16311669                if (v & BCMA_CORE_PCI_MDIOCTL_ACCESS_DONE) 
     
    16361674        pcicore_write32(pc, BCMA_CORE_PCI_MDIO_CONTROL, 0); 
    16371675 } 
     1676  
     1677+static u16 bcma_pcie_mdio_writeread(struct bcma_drv_pci *pc, u16 device, 
     1678+                                   u8 address, u16 data) 
     1679+{ 
     1680+       bcma_pcie_mdio_write(pc, device, address, data); 
     1681+       return bcma_pcie_mdio_read(pc, device, address); 
     1682+} 
     1683+ 
     1684 /************************************************** 
     1685  * Workarounds. 
     1686  **************************************************/ 
     1687@@ -203,6 +210,25 @@ static void bcma_core_pci_config_fixup(s 
     1688        } 
     1689 } 
     1690  
     1691+static void bcma_core_pci_power_save(struct bcma_drv_pci *pc, bool up) 
     1692+{ 
     1693+       u16 data; 
     1694+ 
     1695+       if (pc->core->id.rev >= 15 && pc->core->id.rev <= 20) { 
     1696+               data = up ? 0x74 : 0x7C; 
     1697+               bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1, 
     1698+                                        BCMA_CORE_PCI_MDIO_BLK1_MGMT1, 0x7F64); 
     1699+               bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1, 
     1700+                                        BCMA_CORE_PCI_MDIO_BLK1_MGMT3, data); 
     1701+       } else if (pc->core->id.rev >= 21 && pc->core->id.rev <= 22) { 
     1702+               data = up ? 0x75 : 0x7D; 
     1703+               bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1, 
     1704+                                        BCMA_CORE_PCI_MDIO_BLK1_MGMT1, 0x7E65); 
     1705+               bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1, 
     1706+                                        BCMA_CORE_PCI_MDIO_BLK1_MGMT3, data); 
     1707+       } 
     1708+} 
     1709+ 
     1710 /************************************************** 
     1711  * Init. 
     1712  **************************************************/ 
     1713@@ -262,7 +288,7 @@ out: 
     1714 } 
     1715 EXPORT_SYMBOL_GPL(bcma_core_pci_irq_ctl); 
     1716  
     1717-void bcma_core_pci_extend_L1timer(struct bcma_drv_pci *pc, bool extend) 
     1718+static void bcma_core_pci_extend_L1timer(struct bcma_drv_pci *pc, bool extend) 
     1719 { 
     1720        u32 w; 
     1721  
     1722@@ -274,4 +300,33 @@ void bcma_core_pci_extend_L1timer(struct 
     1723        bcma_pcie_write(pc, BCMA_CORE_PCI_DLLP_PMTHRESHREG, w); 
     1724        bcma_pcie_read(pc, BCMA_CORE_PCI_DLLP_PMTHRESHREG); 
     1725 } 
     1726-EXPORT_SYMBOL_GPL(bcma_core_pci_extend_L1timer); 
     1727+ 
     1728+void bcma_core_pci_up(struct bcma_bus *bus) 
     1729+{ 
     1730+       struct bcma_drv_pci *pc; 
     1731+ 
     1732+       if (bus->hosttype != BCMA_HOSTTYPE_PCI) 
     1733+               return; 
     1734+ 
     1735+       pc = &bus->drv_pci[0]; 
     1736+ 
     1737+       bcma_core_pci_power_save(pc, true); 
     1738+ 
     1739+       bcma_core_pci_extend_L1timer(pc, true); 
     1740+} 
     1741+EXPORT_SYMBOL_GPL(bcma_core_pci_up); 
     1742+ 
     1743+void bcma_core_pci_down(struct bcma_bus *bus) 
     1744+{ 
     1745+       struct bcma_drv_pci *pc; 
     1746+ 
     1747+       if (bus->hosttype != BCMA_HOSTTYPE_PCI) 
     1748+               return; 
     1749+ 
     1750+       pc = &bus->drv_pci[0]; 
     1751+ 
     1752+       bcma_core_pci_extend_L1timer(pc, false); 
     1753+ 
     1754+       bcma_core_pci_power_save(pc, false); 
     1755+} 
     1756+EXPORT_SYMBOL_GPL(bcma_core_pci_down); 
    16381757--- a/drivers/bcma/driver_pci_host.c 
    16391758+++ b/drivers/bcma/driver_pci_host.c 
     
    18791998 } 
    18801999 DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, bcma_core_pci_fixup_addresses); 
    1881 @@ -569,7 +593,7 @@ int bcma_core_pci_plat_dev_init(struct p 
     2000@@ -558,6 +582,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI 
     2001 int bcma_core_pci_plat_dev_init(struct pci_dev *dev) 
     2002 { 
     2003        struct bcma_drv_pci_host *pc_host; 
     2004+       int readrq; 
     2005  
     2006        if (dev->bus->ops->read != bcma_core_pci_hostmode_read_config) { 
     2007                /* This is not a device on the PCI-core bridge. */ 
     2008@@ -569,9 +594,14 @@ int bcma_core_pci_plat_dev_init(struct p 
    18822009        pr_info("PCI: Fixing up device %s\n", pci_name(dev)); 
    18832010  
     
    18872014        pci_write_config_byte(dev, PCI_INTERRUPT_LINE, dev->irq); 
    18882015  
     2016+       readrq = pcie_get_readrq(dev); 
     2017+       if (readrq > 128) { 
     2018+               pr_info("change PCIe max read request size from %i to 128\n", readrq); 
     2019+               pcie_set_readrq(dev, 128); 
     2020+       } 
    18892021        return 0; 
    1890 @@ -588,6 +612,6 @@ int bcma_core_pci_pcibios_map_irq(const 
     2022 } 
     2023 EXPORT_SYMBOL(bcma_core_pci_plat_dev_init); 
     2024@@ -588,6 +618,6 @@ int bcma_core_pci_pcibios_map_irq(const 
    18912025  
    18922026        pc_host = container_of(dev->bus->ops, struct bcma_drv_pci_host, 
     
    20852219  
    20862220 int __devinit bcma_bus_register(struct bcma_bus *bus) 
    2087 @@ -166,6 +240,20 @@ int __devinit bcma_bus_register(struct b 
    2088                 return -1; 
     2221@@ -163,9 +237,23 @@ int __devinit bcma_bus_register(struct b 
     2222        err = bcma_bus_scan(bus); 
     2223        if (err) { 
     2224                bcma_err(bus, "Failed to scan: %d\n", err); 
     2225-               return -1; 
     2226+               return err; 
    20892227        } 
    20902228  
     
    21912329--- a/drivers/bcma/scan.c 
    21922330+++ b/drivers/bcma/scan.c 
    2193 @@ -84,6 +84,8 @@ static const struct bcma_device_id_name 
     2331@@ -32,6 +32,18 @@ static const struct bcma_device_id_name 
     2332        { BCMA_CORE_4706_CHIPCOMMON, "BCM4706 ChipCommon" }, 
     2333        { BCMA_CORE_4706_SOC_RAM, "BCM4706 SOC RAM" }, 
     2334        { BCMA_CORE_4706_MAC_GBIT, "BCM4706 GBit MAC" }, 
     2335+       { BCMA_CORE_PCIEG2, "PCIe Gen 2" }, 
     2336+       { BCMA_CORE_DMA, "DMA" }, 
     2337+       { BCMA_CORE_SDIO3, "SDIO3" }, 
     2338+       { BCMA_CORE_USB20, "USB 2.0" }, 
     2339+       { BCMA_CORE_USB30, "USB 3.0" }, 
     2340+       { BCMA_CORE_A9JTAG, "ARM Cortex A9 JTAG" }, 
     2341+       { BCMA_CORE_DDR23, "Denali DDR2/DDR3 memory controller" }, 
     2342+       { BCMA_CORE_ROM, "ROM" }, 
     2343+       { BCMA_CORE_NAND, "NAND flash controller" }, 
     2344+       { BCMA_CORE_QSPI, "SPI flash controller" }, 
     2345+       { BCMA_CORE_CHIPCOMMON_B, "Chipcommon B" }, 
     2346+       { BCMA_CORE_ARMCA9, "ARM Cortex A9 core (ihost)" }, 
     2347        { BCMA_CORE_AMEMC, "AMEMC (DDR)" }, 
     2348        { BCMA_CORE_ALTA, "ALTA (I2S)" }, 
     2349        { BCMA_CORE_INVALID, "Invalid" }, 
     2350@@ -84,6 +96,8 @@ static const struct bcma_device_id_name 
    21942351        { BCMA_CORE_I2S, "I2S" }, 
    21952352        { BCMA_CORE_SDR_DDR1_MEM_CTL, "SDR/DDR1 Memory Controller" }, 
     
    22002357 }; 
    22012358  
    2202 @@ -137,19 +139,19 @@ static void bcma_scan_switch_core(struct 
     2359@@ -137,19 +151,19 @@ static void bcma_scan_switch_core(struct 
    22032360                                       addr); 
    22042361 } 
     
    22232380        u32 ent = bcma_erom_get_ent(bus, eromptr); 
    22242381        if (!(ent & SCAN_ER_VALID)) 
    2225 @@ -159,14 +161,14 @@ static s32 bcma_erom_get_ci(struct bcma_ 
     2382@@ -159,14 +173,14 @@ static s32 bcma_erom_get_ci(struct bcma_ 
    22262383        return ent; 
    22272384 } 
     
    22402397        u32 ent = bcma_erom_get_ent(bus, eromptr); 
    22412398        bcma_erom_push_ent(eromptr); 
    2242 @@ -175,7 +177,7 @@ static bool bcma_erom_is_bridge(struct b 
     2399@@ -175,7 +189,7 @@ static bool bcma_erom_is_bridge(struct b 
    22432400                ((ent & SCAN_ADDR_TYPE) == SCAN_ADDR_TYPE_BRIDGE)); 
    22442401 } 
     
    22492406        u32 ent; 
    22502407        while (1) { 
    2251 @@ -189,7 +191,7 @@ static void bcma_erom_skip_component(str 
     2408@@ -189,7 +203,7 @@ static void bcma_erom_skip_component(str 
    22522409        bcma_erom_push_ent(eromptr); 
    22532410 } 
     
    22582415        u32 ent = bcma_erom_get_ent(bus, eromptr); 
    22592416        if (!(ent & SCAN_ER_VALID)) 
    2260 @@ -199,7 +201,7 @@ static s32 bcma_erom_get_mst_port(struct 
     2417@@ -199,7 +213,7 @@ static s32 bcma_erom_get_mst_port(struct 
    22612418        return ent; 
    22622419 } 
    22632420  
    22642421-static s32 bcma_erom_get_addr_desc(struct bcma_bus *bus, u32 **eromptr, 
    2265 +static s32 bcma_erom_get_addr_desc(struct bcma_bus *bus, u32 __iomem **eromptr, 
     2422+static u32 bcma_erom_get_addr_desc(struct bcma_bus *bus, u32 __iomem **eromptr, 
    22662423                                  u32 type, u8 port) 
    22672424 { 
    22682425        u32 addrl, addrh, sizel, sizeh = 0; 
     2426@@ -211,7 +225,7 @@ static s32 bcma_erom_get_addr_desc(struc 
     2427            ((ent & SCAN_ADDR_TYPE) != type) || 
     2428            (((ent & SCAN_ADDR_PORT) >> SCAN_ADDR_PORT_SHIFT) != port)) { 
     2429                bcma_erom_push_ent(eromptr); 
     2430-               return -EINVAL; 
     2431+               return (u32)-EINVAL; 
     2432        } 
     2433  
     2434        addrl = ent & SCAN_ADDR_ADDR; 
     2435@@ -255,11 +269,13 @@ static struct bcma_device *bcma_find_cor 
     2436        return NULL; 
     2437 } 
     2438  
     2439+#define IS_ERR_VALUE_U32(x) ((x) >= (u32)-MAX_ERRNO) 
     2440+ 
     2441 static int bcma_get_next_core(struct bcma_bus *bus, u32 __iomem **eromptr, 
     2442                              struct bcma_device_id *match, int core_num, 
     2443                              struct bcma_device *core) 
     2444 { 
     2445-       s32 tmp; 
     2446+       u32 tmp; 
     2447        u8 i, j; 
     2448        s32 cia, cib; 
     2449        u8 ports[2], wrappers[2]; 
     2450@@ -337,11 +353,11 @@ static int bcma_get_next_core(struct bcm 
     2451         * the main register space for the core 
     2452         */ 
     2453        tmp = bcma_erom_get_addr_desc(bus, eromptr, SCAN_ADDR_TYPE_SLAVE, 0); 
     2454-       if (tmp <= 0) { 
     2455+       if (tmp == 0 || IS_ERR_VALUE_U32(tmp)) { 
     2456                /* Try again to see if it is a bridge */ 
     2457                tmp = bcma_erom_get_addr_desc(bus, eromptr, 
     2458                                              SCAN_ADDR_TYPE_BRIDGE, 0); 
     2459-               if (tmp <= 0) { 
     2460+               if (tmp == 0 || IS_ERR_VALUE_U32(tmp)) { 
     2461                        return -EILSEQ; 
     2462                } else { 
     2463                        bcma_info(bus, "Bridge found\n"); 
     2464@@ -355,7 +371,7 @@ static int bcma_get_next_core(struct bcm 
     2465                for (j = 0; ; j++) { 
     2466                        tmp = bcma_erom_get_addr_desc(bus, eromptr, 
     2467                                SCAN_ADDR_TYPE_SLAVE, i); 
     2468-                       if (tmp < 0) { 
     2469+                       if (IS_ERR_VALUE_U32(tmp)) { 
     2470                                /* no more entries for port _i_ */ 
     2471                                /* pr_debug("erom: slave port %d " 
     2472                                 * "has %d descriptors\n", i, j); */ 
     2473@@ -372,7 +388,7 @@ static int bcma_get_next_core(struct bcm 
     2474                for (j = 0; ; j++) { 
     2475                        tmp = bcma_erom_get_addr_desc(bus, eromptr, 
     2476                                SCAN_ADDR_TYPE_MWRAP, i); 
     2477-                       if (tmp < 0) { 
     2478+                       if (IS_ERR_VALUE_U32(tmp)) { 
     2479                                /* no more entries for port _i_ */ 
     2480                                /* pr_debug("erom: master wrapper %d " 
     2481                                 * "has %d descriptors\n", i, j); */ 
     2482@@ -390,7 +406,7 @@ static int bcma_get_next_core(struct bcm 
     2483                for (j = 0; ; j++) { 
     2484                        tmp = bcma_erom_get_addr_desc(bus, eromptr, 
     2485                                SCAN_ADDR_TYPE_SWRAP, i + hack); 
     2486-                       if (tmp < 0) { 
     2487+                       if (IS_ERR_VALUE_U32(tmp)) { 
     2488                                /* no more entries for port _i_ */ 
     2489                                /* pr_debug("erom: master wrapper %d " 
     2490                                 * has %d descriptors\n", i, j); */ 
    22692491--- a/drivers/bcma/sprom.c 
    22702492+++ b/drivers/bcma/sprom.c 
     
    24592681 struct bcma_device; 
    24602682 struct bcma_bus; 
    2461 @@ -134,12 +134,17 @@ struct bcma_host_ops { 
     2683@@ -72,7 +72,19 @@ struct bcma_host_ops { 
     2684 /* Core-ID values. */ 
     2685 #define BCMA_CORE_OOB_ROUTER           0x367   /* Out of band */ 
     2686 #define BCMA_CORE_4706_CHIPCOMMON      0x500 
     2687+#define BCMA_CORE_PCIEG2               0x501 
     2688+#define BCMA_CORE_DMA                  0x502 
     2689+#define BCMA_CORE_SDIO3                        0x503 
     2690+#define BCMA_CORE_USB20                        0x504 
     2691+#define BCMA_CORE_USB30                        0x505 
     2692+#define BCMA_CORE_A9JTAG               0x506 
     2693+#define BCMA_CORE_DDR23                        0x507 
     2694+#define BCMA_CORE_ROM                  0x508 
     2695+#define BCMA_CORE_NAND                 0x509 
     2696+#define BCMA_CORE_QSPI                 0x50A 
     2697+#define BCMA_CORE_CHIPCOMMON_B         0x50B 
     2698 #define BCMA_CORE_4706_SOC_RAM         0x50E 
     2699+#define BCMA_CORE_ARMCA9               0x510 
     2700 #define BCMA_CORE_4706_MAC_GBIT                0x52D 
     2701 #define BCMA_CORE_AMEMC                        0x52E   /* DDR1/2 memory controller core */ 
     2702 #define BCMA_CORE_ALTA                 0x534   /* I2S core */ 
     2703@@ -134,12 +146,17 @@ struct bcma_host_ops { 
    24622704 #define BCMA_CORE_I2S                  0x834 
    24632705 #define BCMA_CORE_SDR_DDR1_MEM_CTL     0x835   /* SDR/DDR1 memory controller core */ 
     
    24772719 #define  BCMA_PKG_ID_BCM43224_FAB_CSM  0x8 
    24782720 #define  BCMA_PKG_ID_BCM43224_FAB_SMIC 0xa 
    2479 @@ -157,6 +162,7 @@ struct bcma_host_ops { 
     2721@@ -157,6 +174,7 @@ struct bcma_host_ops { 
    24802722  
    24812723 /* Chip IDs of SoCs */ 
     
    24852727 #define  BCMA_PKG_ID_BCM4716   8 
    24862728 #define  BCMA_PKG_ID_BCM4717   9 
    2487 @@ -166,7 +172,65 @@ struct bcma_host_ops { 
     2729@@ -166,7 +184,70 @@ struct bcma_host_ops { 
    24882730 #define BCMA_CHIP_ID_BCM4749   0x4749 
    24892731 #define BCMA_CHIP_ID_BCM5356   0x5356 
     
    24942736 #define BCMA_CHIP_ID_BCM53572  53572 
    24952737+#define  BCMA_PKG_ID_BCM47188  9 
     2738+#define BCMA_CHIP_ID_BCM4707   53010 
     2739+#define  BCMA_PKG_ID_BCM4707   1 
     2740+#define  BCMA_PKG_ID_BCM4708   2 
     2741+#define  BCMA_PKG_ID_BCM4709   0 
     2742+#define BCMA_CHIP_ID_BCM53018  53018 
    24962743+ 
    24972744+/* Board types (on PCI usually equals to the subsystem dev id) */ 
     
    25512798 struct bcma_device { 
    25522799        struct bcma_bus *bus; 
    2553 @@ -251,7 +315,7 @@ struct bcma_bus { 
     2800@@ -251,7 +332,7 @@ struct bcma_bus { 
    25542801        u8 num; 
    25552802  
     
    25602807        struct bcma_drv_gmac_cmn drv_gmac_cmn; 
    25612808  
    2562 @@ -345,6 +409,7 @@ extern void bcma_core_set_clockmode(stru 
     2809@@ -345,6 +426,7 @@ extern void bcma_core_set_clockmode(stru 
    25632810                                    enum bcma_clkmode clkmode); 
    25642811 extern void bcma_core_pll_ctl(struct bcma_device *core, u32 req, u32 status, 
     
    29303177--- a/include/linux/bcma/bcma_driver_pci.h 
    29313178+++ b/include/linux/bcma/bcma_driver_pci.h 
    2932 @@ -179,6 +179,8 @@ struct pci_dev; 
     3179@@ -179,10 +179,33 @@ struct pci_dev; 
    29333180 #define BCMA_CORE_PCI_CFG_FUN_MASK             7       /* Function mask */ 
    29343181 #define BCMA_CORE_PCI_CFG_OFF_MASK             0xfff   /* Register mask */ 
     
    29363183+#define BCMA_CORE_PCI_CFG_DEVCTRL              0xd8 
    29373184+ 
     3185+#define BCMA_CORE_PCI_ 
     3186+ 
     3187+/* MDIO devices (SERDES modules) */ 
     3188+#define BCMA_CORE_PCI_MDIO_IEEE0               0x000 
     3189+#define BCMA_CORE_PCI_MDIO_IEEE1               0x001 
     3190+#define BCMA_CORE_PCI_MDIO_BLK0                        0x800 
     3191+#define BCMA_CORE_PCI_MDIO_BLK1                        0x801 
     3192+#define  BCMA_CORE_PCI_MDIO_BLK1_MGMT0         0x16 
     3193+#define  BCMA_CORE_PCI_MDIO_BLK1_MGMT1         0x17 
     3194+#define  BCMA_CORE_PCI_MDIO_BLK1_MGMT2         0x18 
     3195+#define  BCMA_CORE_PCI_MDIO_BLK1_MGMT3         0x19 
     3196+#define  BCMA_CORE_PCI_MDIO_BLK1_MGMT4         0x1A 
     3197+#define BCMA_CORE_PCI_MDIO_BLK2                        0x802 
     3198+#define BCMA_CORE_PCI_MDIO_BLK3                        0x803 
     3199+#define BCMA_CORE_PCI_MDIO_BLK4                        0x804 
     3200+#define BCMA_CORE_PCI_MDIO_TXPLL               0x808   /* TXPLL register block idx */ 
     3201+#define BCMA_CORE_PCI_MDIO_TXCTRL0             0x820 
     3202+#define BCMA_CORE_PCI_MDIO_SERDESID            0x831 
     3203+#define BCMA_CORE_PCI_MDIO_RXCTRL0             0x840 
     3204+ 
    29383205 /* PCIE Root Capability Register bits (Host mode only) */ 
    29393206 #define BCMA_CORE_PCI_RC_CRS_VISIBILITY                0x0001 
    29403207  
     3208 struct bcma_drv_pci; 
     3209+struct bcma_bus; 
     3210  
     3211 #ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE 
     3212 struct bcma_drv_pci_host { 
     3213@@ -217,7 +240,8 @@ struct bcma_drv_pci { 
     3214 extern void __devinit bcma_core_pci_init(struct bcma_drv_pci *pc); 
     3215 extern int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc, 
     3216                                 struct bcma_device *core, bool enable); 
     3217-extern void bcma_core_pci_extend_L1timer(struct bcma_drv_pci *pc, bool extend); 
     3218+extern void bcma_core_pci_up(struct bcma_bus *bus); 
     3219+extern void bcma_core_pci_down(struct bcma_bus *bus); 
     3220  
     3221 extern int bcma_core_pci_pcibios_map_irq(const struct pci_dev *dev); 
     3222 extern int bcma_core_pci_plat_dev_init(struct pci_dev *dev); 
    29413223--- a/include/linux/bcma/bcma_regs.h 
    29423224+++ b/include/linux/bcma/bcma_regs.h 
     
    29863268--- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c 
    29873269+++ b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c 
    2988 @@ -695,7 +695,7 @@ void ai_pci_up(struct si_pub *sih) 
    2989         sii = container_of(sih, struct si_info, pub); 
    2990   
    2991         if (sii->icbus->hosttype == BCMA_HOSTTYPE_PCI) 
     3270@@ -688,27 +688,6 @@ bool ai_clkctl_cc(struct si_pub *sih, en 
     3271        return mode == BCMA_CLKMODE_FAST; 
     3272 } 
     3273  
     3274-void ai_pci_up(struct si_pub *sih) 
     3275-{ 
     3276-       struct si_info *sii; 
     3277- 
     3278-       sii = container_of(sih, struct si_info, pub); 
     3279- 
     3280-       if (sii->icbus->hosttype == BCMA_HOSTTYPE_PCI) 
    29923281-               bcma_core_pci_extend_L1timer(&sii->icbus->drv_pci, true); 
    2993 +               bcma_core_pci_extend_L1timer(&sii->icbus->drv_pci[0], true); 
    2994  } 
    2995   
    2996  /* Unconfigure and/or apply various WARs when going down */ 
    2997 @@ -706,7 +706,7 @@ void ai_pci_down(struct si_pub *sih) 
    2998         sii = container_of(sih, struct si_info, pub); 
    2999   
    3000         if (sii->icbus->hosttype == BCMA_HOSTTYPE_PCI) 
     3282-} 
     3283- 
     3284-/* Unconfigure and/or apply various WARs when going down */ 
     3285-void ai_pci_down(struct si_pub *sih) 
     3286-{ 
     3287-       struct si_info *sii; 
     3288- 
     3289-       sii = container_of(sih, struct si_info, pub); 
     3290- 
     3291-       if (sii->icbus->hosttype == BCMA_HOSTTYPE_PCI) 
    30013292-               bcma_core_pci_extend_L1timer(&sii->icbus->drv_pci, false); 
    3002 +               bcma_core_pci_extend_L1timer(&sii->icbus->drv_pci[0], false); 
    3003  } 
    3004   
     3293-} 
     3294- 
    30053295 /* Enable BT-COEX & Ex-PA for 4313 */ 
     3296 void ai_epa_4313war(struct si_pub *sih) 
     3297 { 
    30063298--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c 
    30073299+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c 
     3300@@ -4689,7 +4689,7 @@ static int brcms_b_attach(struct brcms_c 
     3301        brcms_c_coredisable(wlc_hw); 
     3302  
     3303        /* Match driver "down" state */ 
     3304-       ai_pci_down(wlc_hw->sih); 
     3305+       bcma_core_pci_down(wlc_hw->d11core->bus); 
     3306  
     3307        /* turn off pll and xtal to match driver "down" state */ 
     3308        brcms_b_xtal(wlc_hw, OFF); 
    30083309@@ -5077,7 +5077,7 @@ static int brcms_b_up_prep(struct brcms_ 
    30093310         * Configure pci/pcmcia here instead of in brcms_c_attach() 
     
    30153316  
    30163317        /* 
     3318@@ -5087,12 +5087,12 @@ static int brcms_b_up_prep(struct brcms_ 
     3319         */ 
     3320        if (brcms_b_radio_read_hwdisabled(wlc_hw)) { 
     3321                /* put SB PCI in down state again */ 
     3322-               ai_pci_down(wlc_hw->sih); 
     3323+               bcma_core_pci_down(wlc_hw->d11core->bus); 
     3324                brcms_b_xtal(wlc_hw, OFF); 
     3325                return -ENOMEDIUM; 
     3326        } 
     3327  
     3328-       ai_pci_up(wlc_hw->sih); 
     3329+       bcma_core_pci_up(wlc_hw->d11core->bus); 
     3330  
     3331        /* reset the d11 core */ 
     3332        brcms_b_corereset(wlc_hw, BRCMS_USE_COREFLAGS); 
     3333@@ -5295,7 +5295,7 @@ static int brcms_b_down_finish(struct br 
     3334  
     3335                /* turn off primary xtal and pll */ 
     3336                if (!wlc_hw->noreset) { 
     3337-                       ai_pci_down(wlc_hw->sih); 
     3338+                       bcma_core_pci_down(wlc_hw->d11core->bus); 
     3339                        brcms_b_xtal(wlc_hw, OFF); 
     3340                } 
     3341        } 
     3342--- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.h 
     3343+++ b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.h 
     3344@@ -183,9 +183,6 @@ extern u16 ai_clkctl_fast_pwrup_delay(st 
     3345 extern bool ai_clkctl_cc(struct si_pub *sih, enum bcma_clkmode mode); 
     3346 extern bool ai_deviceremoved(struct si_pub *sih); 
     3347  
     3348-extern void ai_pci_down(struct si_pub *sih); 
     3349-extern void ai_pci_up(struct si_pub *sih); 
     3350- 
     3351 /* Enable Ex-PA for 4313 */ 
     3352 extern void ai_epa_4313war(struct si_pub *sih); 
     3353  
  • trunk/target/linux/generic/patches-3.8/020-ssb_update.patch

    r37432 r37957  
    77+config SSB_SFLASH 
    88+       bool "SSB serial flash support" 
    9 +       depends on SSB_DRIVER_MIPS && BROKEN 
     9+       depends on SSB_DRIVER_MIPS 
    1010+       default y 
    1111+ 
     
    180180--- /dev/null 
    181181+++ b/drivers/ssb/driver_chipcommon_sflash.c 
    182 @@ -0,0 +1,166 @@ 
     182@@ -0,0 +1,164 @@ 
    183183+/* 
    184184+ * Sonics Silicon Backplane 
     
    334334+       sflash->present = true; 
    335335+ 
    336 +       pr_info("Found %s serial flash (blocksize: 0x%X, blocks: %d)\n", 
    337 +               e->name, e->blocksize, e->numblocks); 
     336+       pr_info("Found %s serial flash (size: %dKiB, blocksize: 0x%X, blocks: %d)\n", 
     337+               e->name, sflash->size / 1024, e->blocksize, e->numblocks); 
    338338+ 
    339339+       /* Prepare platform device, but don't register it yet. It's too early, 
     
    343343+       ssb_sflash_dev.dev.platform_data = sflash; 
    344344+ 
    345 +       pr_err("Serial flash support is not implemented yet!\n"); 
    346 + 
    347 +       return -ENOTSUPP; 
     345+       return 0; 
    348346+} 
    349347--- a/drivers/ssb/driver_gpio.c 
  • trunk/target/linux/generic/patches-3.8/025-bcma_backport.patch

    r37432 r37957  
    2020 config BCMA_DRIVER_PCI_HOSTMODE 
    2121        bool "Driver for PCI core working in hostmode" 
     22@@ -34,8 +35,14 @@ config BCMA_DRIVER_PCI_HOSTMODE 
     23          PCI core hostmode operation (external PCI bus). 
     24  
     25 config BCMA_HOST_SOC 
     26-       bool 
     27-       depends on BCMA_DRIVER_MIPS 
     28+       bool "Support for BCMA in a SoC" 
     29+       depends on BCMA 
     30+       help 
     31+         Host interface for a Broadcom AIX bus directly mapped into 
     32+         the memory. This only works with the Broadcom SoCs from the 
     33+         BCM47XX line. 
     34+ 
     35+         If unsure, say N 
     36  
     37 config BCMA_DRIVER_MIPS 
     38        bool "BCMA Broadcom MIPS core driver" 
    2239--- a/drivers/bcma/bcma_private.h 
    2340+++ b/drivers/bcma/bcma_private.h 
     
    9861003        tmp = PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY; 
    9871004        bcma_extpci_write_config(pc, 0, 0, PCI_COMMAND, &tmp, sizeof(tmp)); 
    988 @@ -576,7 +592,7 @@ int bcma_core_pci_plat_dev_init(struct p 
     1005@@ -565,6 +581,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI 
     1006 int bcma_core_pci_plat_dev_init(struct pci_dev *dev) 
     1007 { 
     1008        struct bcma_drv_pci_host *pc_host; 
     1009+       int readrq; 
     1010  
     1011        if (dev->bus->ops->read != bcma_core_pci_hostmode_read_config) { 
     1012                /* This is not a device on the PCI-core bridge. */ 
     1013@@ -576,9 +593,14 @@ int bcma_core_pci_plat_dev_init(struct p 
    9891014        pr_info("PCI: Fixing up device %s\n", pci_name(dev)); 
    9901015  
     
    9941019        pci_write_config_byte(dev, PCI_INTERRUPT_LINE, dev->irq); 
    9951020  
     1021+       readrq = pcie_get_readrq(dev); 
     1022+       if (readrq > 128) { 
     1023+               pr_info("change PCIe max read request size from %i to 128\n", readrq); 
     1024+               pcie_set_readrq(dev, 128); 
     1025+       } 
    9961026        return 0; 
    997 @@ -595,6 +611,6 @@ int bcma_core_pci_pcibios_map_irq(const 
     1027 } 
     1028 EXPORT_SYMBOL(bcma_core_pci_plat_dev_init); 
     1029@@ -595,6 +617,6 @@ int bcma_core_pci_pcibios_map_irq(const 
    9981030  
    9991031        pc_host = container_of(dev->bus->ops, struct bcma_drv_pci_host, 
     
    10791111        if (bus->drv_cc.sflash.present) { 
    10801112                err = platform_device_register(&bcma_sflash_dev); 
     1113@@ -205,7 +237,7 @@ int bcma_bus_register(struct bcma_bus *b 
     1114        err = bcma_bus_scan(bus); 
     1115        if (err) { 
     1116                bcma_err(bus, "Failed to scan: %d\n", err); 
     1117-               return -1; 
     1118+               return err; 
     1119        } 
     1120  
     1121        /* Early init CC core */ 
    10811122--- a/drivers/bcma/scan.c 
    10821123+++ b/drivers/bcma/scan.c 
    1083 @@ -84,6 +84,8 @@ static const struct bcma_device_id_name 
     1124@@ -32,6 +32,18 @@ static const struct bcma_device_id_name 
     1125        { BCMA_CORE_4706_CHIPCOMMON, "BCM4706 ChipCommon" }, 
     1126        { BCMA_CORE_4706_SOC_RAM, "BCM4706 SOC RAM" }, 
     1127        { BCMA_CORE_4706_MAC_GBIT, "BCM4706 GBit MAC" }, 
     1128+       { BCMA_CORE_PCIEG2, "PCIe Gen 2" }, 
     1129+       { BCMA_CORE_DMA, "DMA" }, 
     1130+       { BCMA_CORE_SDIO3, "SDIO3" }, 
     1131+       { BCMA_CORE_USB20, "USB 2.0" }, 
     1132+       { BCMA_CORE_USB30, "USB 3.0" }, 
     1133+       { BCMA_CORE_A9JTAG, "ARM Cortex A9 JTAG" }, 
     1134+       { BCMA_CORE_DDR23, "Denali DDR2/DDR3 memory controller" }, 
     1135+       { BCMA_CORE_ROM, "ROM" }, 
     1136+       { BCMA_CORE_NAND, "NAND flash controller" }, 
     1137+       { BCMA_CORE_QSPI, "SPI flash controller" }, 
     1138+       { BCMA_CORE_CHIPCOMMON_B, "Chipcommon B" }, 
     1139+       { BCMA_CORE_ARMCA9, "ARM Cortex A9 core (ihost)" }, 
     1140        { BCMA_CORE_AMEMC, "AMEMC (DDR)" }, 
     1141        { BCMA_CORE_ALTA, "ALTA (I2S)" }, 
     1142        { BCMA_CORE_INVALID, "Invalid" }, 
     1143@@ -84,6 +96,8 @@ static const struct bcma_device_id_name 
    10841144        { BCMA_CORE_I2S, "I2S" }, 
    10851145        { BCMA_CORE_SDR_DDR1_MEM_CTL, "SDR/DDR1 Memory Controller" }, 
     
    10901150 }; 
    10911151  
    1092 @@ -137,19 +139,19 @@ static void bcma_scan_switch_core(struct 
     1152@@ -137,19 +151,19 @@ static void bcma_scan_switch_core(struct 
    10931153                                       addr); 
    10941154 } 
     
    11131173        u32 ent = bcma_erom_get_ent(bus, eromptr); 
    11141174        if (!(ent & SCAN_ER_VALID)) 
    1115 @@ -159,14 +161,14 @@ static s32 bcma_erom_get_ci(struct bcma_ 
     1175@@ -159,14 +173,14 @@ static s32 bcma_erom_get_ci(struct bcma_ 
    11161176        return ent; 
    11171177 } 
     
    11301190        u32 ent = bcma_erom_get_ent(bus, eromptr); 
    11311191        bcma_erom_push_ent(eromptr); 
    1132 @@ -175,7 +177,7 @@ static bool bcma_erom_is_bridge(struct b 
     1192@@ -175,7 +189,7 @@ static bool bcma_erom_is_bridge(struct b 
    11331193                ((ent & SCAN_ADDR_TYPE) == SCAN_ADDR_TYPE_BRIDGE)); 
    11341194 } 
     
    11391199        u32 ent; 
    11401200        while (1) { 
    1141 @@ -189,7 +191,7 @@ static void bcma_erom_skip_component(str 
     1201@@ -189,7 +203,7 @@ static void bcma_erom_skip_component(str 
    11421202        bcma_erom_push_ent(eromptr); 
    11431203 } 
     
    11481208        u32 ent = bcma_erom_get_ent(bus, eromptr); 
    11491209        if (!(ent & SCAN_ER_VALID)) 
    1150 @@ -199,7 +201,7 @@ static s32 bcma_erom_get_mst_port(struct 
     1210@@ -199,7 +213,7 @@ static s32 bcma_erom_get_mst_port(struct 
    11511211        return ent; 
    11521212 } 
    11531213  
    11541214-static s32 bcma_erom_get_addr_desc(struct bcma_bus *bus, u32 **eromptr, 
    1155 +static s32 bcma_erom_get_addr_desc(struct bcma_bus *bus, u32 __iomem **eromptr, 
     1215+static u32 bcma_erom_get_addr_desc(struct bcma_bus *bus, u32 __iomem **eromptr, 
    11561216                                  u32 type, u8 port) 
    11571217 { 
    11581218        u32 addrl, addrh, sizel, sizeh = 0; 
     1219@@ -211,7 +225,7 @@ static s32 bcma_erom_get_addr_desc(struc 
     1220            ((ent & SCAN_ADDR_TYPE) != type) || 
     1221            (((ent & SCAN_ADDR_PORT) >> SCAN_ADDR_PORT_SHIFT) != port)) { 
     1222                bcma_erom_push_ent(eromptr); 
     1223-               return -EINVAL; 
     1224+               return (u32)-EINVAL; 
     1225        } 
     1226  
     1227        addrl = ent & SCAN_ADDR_ADDR; 
     1228@@ -255,11 +269,13 @@ static struct bcma_device *bcma_find_cor 
     1229        return NULL; 
     1230 } 
     1231  
     1232+#define IS_ERR_VALUE_U32(x) ((x) >= (u32)-MAX_ERRNO) 
     1233+ 
     1234 static int bcma_get_next_core(struct bcma_bus *bus, u32 __iomem **eromptr, 
     1235                              struct bcma_device_id *match, int core_num, 
     1236                              struct bcma_device *core) 
     1237 { 
     1238-       s32 tmp; 
     1239+       u32 tmp; 
     1240        u8 i, j; 
     1241        s32 cia, cib; 
     1242        u8 ports[2], wrappers[2]; 
     1243@@ -337,11 +353,11 @@ static int bcma_get_next_core(struct bcm 
     1244         * the main register space for the core 
     1245         */ 
     1246        tmp = bcma_erom_get_addr_desc(bus, eromptr, SCAN_ADDR_TYPE_SLAVE, 0); 
     1247-       if (tmp <= 0) { 
     1248+       if (tmp == 0 || IS_ERR_VALUE_U32(tmp)) { 
     1249                /* Try again to see if it is a bridge */ 
     1250                tmp = bcma_erom_get_addr_desc(bus, eromptr, 
     1251                                              SCAN_ADDR_TYPE_BRIDGE, 0); 
     1252-               if (tmp <= 0) { 
     1253+               if (tmp == 0 || IS_ERR_VALUE_U32(tmp)) { 
     1254                        return -EILSEQ; 
     1255                } else { 
     1256                        bcma_info(bus, "Bridge found\n"); 
     1257@@ -355,7 +371,7 @@ static int bcma_get_next_core(struct bcm 
     1258                for (j = 0; ; j++) { 
     1259                        tmp = bcma_erom_get_addr_desc(bus, eromptr, 
     1260                                SCAN_ADDR_TYPE_SLAVE, i); 
     1261-                       if (tmp < 0) { 
     1262+                       if (IS_ERR_VALUE_U32(tmp)) { 
     1263                                /* no more entries for port _i_ */ 
     1264                                /* pr_debug("erom: slave port %d " 
     1265                                 * "has %d descriptors\n", i, j); */ 
     1266@@ -372,7 +388,7 @@ static int bcma_get_next_core(struct bcm 
     1267                for (j = 0; ; j++) { 
     1268                        tmp = bcma_erom_get_addr_desc(bus, eromptr, 
     1269                                SCAN_ADDR_TYPE_MWRAP, i); 
     1270-                       if (tmp < 0) { 
     1271+                       if (IS_ERR_VALUE_U32(tmp)) { 
     1272                                /* no more entries for port _i_ */ 
     1273                                /* pr_debug("erom: master wrapper %d " 
     1274                                 * "has %d descriptors\n", i, j); */ 
     1275@@ -390,7 +406,7 @@ static int bcma_get_next_core(struct bcm 
     1276                for (j = 0; ; j++) { 
     1277                        tmp = bcma_erom_get_addr_desc(bus, eromptr, 
     1278                                SCAN_ADDR_TYPE_SWRAP, i + hack); 
     1279-                       if (tmp < 0) { 
     1280+                       if (IS_ERR_VALUE_U32(tmp)) { 
     1281                                /* no more entries for port _i_ */ 
     1282                                /* pr_debug("erom: master wrapper %d " 
     1283                                 * has %d descriptors\n", i, j); */ 
    11591284--- a/drivers/bcma/sprom.c 
    11601285+++ b/drivers/bcma/sprom.c 
     
    13321457--- a/include/linux/bcma/bcma.h 
    13331458+++ b/include/linux/bcma/bcma.h 
    1334 @@ -134,12 +134,17 @@ struct bcma_host_ops { 
     1459@@ -72,7 +72,19 @@ struct bcma_host_ops { 
     1460 /* Core-ID values. */ 
     1461 #define BCMA_CORE_OOB_ROUTER           0x367   /* Out of band */ 
     1462 #define BCMA_CORE_4706_CHIPCOMMON      0x500 
     1463+#define BCMA_CORE_PCIEG2               0x501 
     1464+#define BCMA_CORE_DMA                  0x502 
     1465+#define BCMA_CORE_SDIO3                        0x503 
     1466+#define BCMA_CORE_USB20                        0x504 
     1467+#define BCMA_CORE_USB30                        0x505 
     1468+#define BCMA_CORE_A9JTAG               0x506 
     1469+#define BCMA_CORE_DDR23                        0x507 
     1470+#define BCMA_CORE_ROM                  0x508 
     1471+#define BCMA_CORE_NAND                 0x509 
     1472+#define BCMA_CORE_QSPI                 0x50A 
     1473+#define BCMA_CORE_CHIPCOMMON_B         0x50B 
     1474 #define BCMA_CORE_4706_SOC_RAM         0x50E 
     1475+#define BCMA_CORE_ARMCA9               0x510 
     1476 #define BCMA_CORE_4706_MAC_GBIT                0x52D 
     1477 #define BCMA_CORE_AMEMC                        0x52E   /* DDR1/2 memory controller core */ 
     1478 #define BCMA_CORE_ALTA                 0x534   /* I2S core */ 
     1479@@ -134,12 +146,17 @@ struct bcma_host_ops { 
    13351480 #define BCMA_CORE_I2S                  0x834 
    13361481 #define BCMA_CORE_SDR_DDR1_MEM_CTL     0x835   /* SDR/DDR1 memory controller core */ 
     
    13501495 #define  BCMA_PKG_ID_BCM43224_FAB_CSM  0x8 
    13511496 #define  BCMA_PKG_ID_BCM43224_FAB_SMIC 0xa 
    1352 @@ -173,6 +178,60 @@ struct bcma_host_ops { 
     1497@@ -172,6 +189,65 @@ struct bcma_host_ops { 
     1498 #define  BCMA_PKG_ID_BCM5357   11 
    13531499 #define BCMA_CHIP_ID_BCM53572  53572 
    13541500 #define  BCMA_PKG_ID_BCM47188  9 
    1355   
     1501+#define BCMA_CHIP_ID_BCM4707   53010 
     1502+#define  BCMA_PKG_ID_BCM4707   1 
     1503+#define  BCMA_PKG_ID_BCM4708   2 
     1504+#define  BCMA_PKG_ID_BCM4709   0 
     1505+#define BCMA_CHIP_ID_BCM53018  53018 
     1506+ 
    13561507+/* Board types (on PCI usually equals to the subsystem dev id) */ 
    13571508+/* BCM4313 */ 
     
    14071558+/* BCM43142 */ 
    14081559+#define BCMA_BOARD_TYPE_BCM943142HM    0X05E0 
    1409 + 
     1560  
    14101561 struct bcma_device { 
    14111562        struct bcma_bus *bus; 
    1412         struct bcma_device_id id; 
    14131563--- a/include/linux/bcma/bcma_driver_chipcommon.h 
    14141564+++ b/include/linux/bcma/bcma_driver_chipcommon.h 
     
    15861736--- a/include/linux/bcma/bcma_driver_pci.h 
    15871737+++ b/include/linux/bcma/bcma_driver_pci.h 
    1588 @@ -179,6 +179,8 @@ struct pci_dev; 
     1738@@ -179,10 +179,33 @@ struct pci_dev; 
    15891739 #define BCMA_CORE_PCI_CFG_FUN_MASK             7       /* Function mask */ 
    15901740 #define BCMA_CORE_PCI_CFG_OFF_MASK             0xfff   /* Register mask */ 
     
    15921742+#define BCMA_CORE_PCI_CFG_DEVCTRL              0xd8 
    15931743+ 
     1744+#define BCMA_CORE_PCI_ 
     1745+ 
     1746+/* MDIO devices (SERDES modules) */ 
     1747+#define BCMA_CORE_PCI_MDIO_IEEE0               0x000 
     1748+#define BCMA_CORE_PCI_MDIO_IEEE1               0x001 
     1749+#define BCMA_CORE_PCI_MDIO_BLK0                        0x800 
     1750+#define BCMA_CORE_PCI_MDIO_BLK1                        0x801 
     1751+#define  BCMA_CORE_PCI_MDIO_BLK1_MGMT0         0x16 
     1752+#define  BCMA_CORE_PCI_MDIO_BLK1_MGMT1         0x17 
     1753+#define  BCMA_CORE_PCI_MDIO_BLK1_MGMT2         0x18 
     1754+#define  BCMA_CORE_PCI_MDIO_BLK1_MGMT3         0x19 
     1755+#define  BCMA_CORE_PCI_MDIO_BLK1_MGMT4         0x1A 
     1756+#define BCMA_CORE_PCI_MDIO_BLK2                        0x802 
     1757+#define BCMA_CORE_PCI_MDIO_BLK3                        0x803 
     1758+#define BCMA_CORE_PCI_MDIO_BLK4                        0x804 
     1759+#define BCMA_CORE_PCI_MDIO_TXPLL               0x808   /* TXPLL register block idx */ 
     1760+#define BCMA_CORE_PCI_MDIO_TXCTRL0             0x820 
     1761+#define BCMA_CORE_PCI_MDIO_SERDESID            0x831 
     1762+#define BCMA_CORE_PCI_MDIO_RXCTRL0             0x840 
     1763+ 
    15941764 /* PCIE Root Capability Register bits (Host mode only) */ 
    15951765 #define BCMA_CORE_PCI_RC_CRS_VISIBILITY                0x0001 
    15961766  
     1767 struct bcma_drv_pci; 
     1768+struct bcma_bus; 
     1769  
     1770 #ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE 
     1771 struct bcma_drv_pci_host { 
     1772@@ -217,7 +240,8 @@ struct bcma_drv_pci { 
     1773 extern void bcma_core_pci_init(struct bcma_drv_pci *pc); 
     1774 extern int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc, 
     1775                                 struct bcma_device *core, bool enable); 
     1776-extern void bcma_core_pci_extend_L1timer(struct bcma_drv_pci *pc, bool extend); 
     1777+extern void bcma_core_pci_up(struct bcma_bus *bus); 
     1778+extern void bcma_core_pci_down(struct bcma_bus *bus); 
     1779  
     1780 extern int bcma_core_pci_pcibios_map_irq(const struct pci_dev *dev); 
     1781 extern int bcma_core_pci_plat_dev_init(struct pci_dev *dev); 
    15971782--- a/include/linux/bcma/bcma_regs.h 
    15981783+++ b/include/linux/bcma/bcma_regs.h 
     
    16051790 /* BCMA PCI config space registers. */ 
    16061791 #define BCMA_PCI_PMCSR                 0x44 
     1792--- a/drivers/bcma/driver_pci.c 
     1793+++ b/drivers/bcma/driver_pci.c 
     1794@@ -31,7 +31,7 @@ static void bcma_pcie_write(struct bcma_ 
     1795        pcicore_write32(pc, BCMA_CORE_PCI_PCIEIND_DATA, data); 
     1796 } 
     1797  
     1798-static void bcma_pcie_mdio_set_phy(struct bcma_drv_pci *pc, u8 phy) 
     1799+static void bcma_pcie_mdio_set_phy(struct bcma_drv_pci *pc, u16 phy) 
     1800 { 
     1801        u32 v; 
     1802        int i; 
     1803@@ -55,7 +55,7 @@ static void bcma_pcie_mdio_set_phy(struc 
     1804        } 
     1805 } 
     1806  
     1807-static u16 bcma_pcie_mdio_read(struct bcma_drv_pci *pc, u8 device, u8 address) 
     1808+static u16 bcma_pcie_mdio_read(struct bcma_drv_pci *pc, u16 device, u8 address) 
     1809 { 
     1810        int max_retries = 10; 
     1811        u16 ret = 0; 
     1812@@ -98,7 +98,7 @@ static u16 bcma_pcie_mdio_read(struct bc 
     1813        return ret; 
     1814 } 
     1815  
     1816-static void bcma_pcie_mdio_write(struct bcma_drv_pci *pc, u8 device, 
     1817+static void bcma_pcie_mdio_write(struct bcma_drv_pci *pc, u16 device, 
     1818                                u8 address, u16 data) 
     1819 { 
     1820        int max_retries = 10; 
     1821@@ -137,6 +137,13 @@ static void bcma_pcie_mdio_write(struct 
     1822        pcicore_write32(pc, BCMA_CORE_PCI_MDIO_CONTROL, 0); 
     1823 } 
     1824  
     1825+static u16 bcma_pcie_mdio_writeread(struct bcma_drv_pci *pc, u16 device, 
     1826+                                   u8 address, u16 data) 
     1827+{ 
     1828+       bcma_pcie_mdio_write(pc, device, address, data); 
     1829+       return bcma_pcie_mdio_read(pc, device, address); 
     1830+} 
     1831+ 
     1832 /************************************************** 
     1833  * Workarounds. 
     1834  **************************************************/ 
     1835@@ -203,6 +210,25 @@ static void bcma_core_pci_config_fixup(s 
     1836        } 
     1837 } 
     1838  
     1839+static void bcma_core_pci_power_save(struct bcma_drv_pci *pc, bool up) 
     1840+{ 
     1841+       u16 data; 
     1842+ 
     1843+       if (pc->core->id.rev >= 15 && pc->core->id.rev <= 20) { 
     1844+               data = up ? 0x74 : 0x7C; 
     1845+               bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1, 
     1846+                                        BCMA_CORE_PCI_MDIO_BLK1_MGMT1, 0x7F64); 
     1847+               bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1, 
     1848+                                        BCMA_CORE_PCI_MDIO_BLK1_MGMT3, data); 
     1849+       } else if (pc->core->id.rev >= 21 && pc->core->id.rev <= 22) { 
     1850+               data = up ? 0x75 : 0x7D; 
     1851+               bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1, 
     1852+                                        BCMA_CORE_PCI_MDIO_BLK1_MGMT1, 0x7E65); 
     1853+               bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1, 
     1854+                                        BCMA_CORE_PCI_MDIO_BLK1_MGMT3, data); 
     1855+       } 
     1856+} 
     1857+ 
     1858 /************************************************** 
     1859  * Init. 
     1860  **************************************************/ 
     1861@@ -262,7 +288,7 @@ out: 
     1862 } 
     1863 EXPORT_SYMBOL_GPL(bcma_core_pci_irq_ctl); 
     1864  
     1865-void bcma_core_pci_extend_L1timer(struct bcma_drv_pci *pc, bool extend) 
     1866+static void bcma_core_pci_extend_L1timer(struct bcma_drv_pci *pc, bool extend) 
     1867 { 
     1868        u32 w; 
     1869  
     1870@@ -274,4 +300,33 @@ void bcma_core_pci_extend_L1timer(struct 
     1871        bcma_pcie_write(pc, BCMA_CORE_PCI_DLLP_PMTHRESHREG, w); 
     1872        bcma_pcie_read(pc, BCMA_CORE_PCI_DLLP_PMTHRESHREG); 
     1873 } 
     1874-EXPORT_SYMBOL_GPL(bcma_core_pci_extend_L1timer); 
     1875+ 
     1876+void bcma_core_pci_up(struct bcma_bus *bus) 
     1877+{ 
     1878+       struct bcma_drv_pci *pc; 
     1879+ 
     1880+       if (bus->hosttype != BCMA_HOSTTYPE_PCI) 
     1881+               return; 
     1882+ 
     1883+       pc = &bus->drv_pci[0]; 
     1884+ 
     1885+       bcma_core_pci_power_save(pc, true); 
     1886+ 
     1887+       bcma_core_pci_extend_L1timer(pc, true); 
     1888+} 
     1889+EXPORT_SYMBOL_GPL(bcma_core_pci_up); 
     1890+ 
     1891+void bcma_core_pci_down(struct bcma_bus *bus) 
     1892+{ 
     1893+       struct bcma_drv_pci *pc; 
     1894+ 
     1895+       if (bus->hosttype != BCMA_HOSTTYPE_PCI) 
     1896+               return; 
     1897+ 
     1898+       pc = &bus->drv_pci[0]; 
     1899+ 
     1900+       bcma_core_pci_extend_L1timer(pc, false); 
     1901+ 
     1902+       bcma_core_pci_power_save(pc, false); 
     1903+} 
     1904+EXPORT_SYMBOL_GPL(bcma_core_pci_down); 
     1905--- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c 
     1906+++ b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c 
     1907@@ -685,27 +685,6 @@ bool ai_clkctl_cc(struct si_pub *sih, en 
     1908        return mode == BCMA_CLKMODE_FAST; 
     1909 } 
     1910  
     1911-void ai_pci_up(struct si_pub *sih) 
     1912-{ 
     1913-       struct si_info *sii; 
     1914- 
     1915-       sii = container_of(sih, struct si_info, pub); 
     1916- 
     1917-       if (sii->icbus->hosttype == BCMA_HOSTTYPE_PCI) 
     1918-               bcma_core_pci_extend_L1timer(&sii->icbus->drv_pci[0], true); 
     1919-} 
     1920- 
     1921-/* Unconfigure and/or apply various WARs when going down */ 
     1922-void ai_pci_down(struct si_pub *sih) 
     1923-{ 
     1924-       struct si_info *sii; 
     1925- 
     1926-       sii = container_of(sih, struct si_info, pub); 
     1927- 
     1928-       if (sii->icbus->hosttype == BCMA_HOSTTYPE_PCI) 
     1929-               bcma_core_pci_extend_L1timer(&sii->icbus->drv_pci[0], false); 
     1930-} 
     1931- 
     1932 /* Enable BT-COEX & Ex-PA for 4313 */ 
     1933 void ai_epa_4313war(struct si_pub *sih) 
     1934 { 
     1935--- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.h 
     1936+++ b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.h 
     1937@@ -183,9 +183,6 @@ extern u16 ai_clkctl_fast_pwrup_delay(st 
     1938 extern bool ai_clkctl_cc(struct si_pub *sih, enum bcma_clkmode mode); 
     1939 extern bool ai_deviceremoved(struct si_pub *sih); 
     1940  
     1941-extern void ai_pci_down(struct si_pub *sih); 
     1942-extern void ai_pci_up(struct si_pub *sih); 
     1943- 
     1944 /* Enable Ex-PA for 4313 */ 
     1945 extern void ai_epa_4313war(struct si_pub *sih); 
     1946  
     1947--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c 
     1948+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c 
     1949@@ -4648,7 +4648,7 @@ static int brcms_b_attach(struct brcms_c 
     1950        brcms_c_coredisable(wlc_hw); 
     1951  
     1952        /* Match driver "down" state */ 
     1953-       ai_pci_down(wlc_hw->sih); 
     1954+       bcma_core_pci_down(wlc_hw->d11core->bus); 
     1955  
     1956        /* turn off pll and xtal to match driver "down" state */ 
     1957        brcms_b_xtal(wlc_hw, OFF); 
     1958@@ -4991,12 +4991,12 @@ static int brcms_b_up_prep(struct brcms_ 
     1959         */ 
     1960        if (brcms_b_radio_read_hwdisabled(wlc_hw)) { 
     1961                /* put SB PCI in down state again */ 
     1962-               ai_pci_down(wlc_hw->sih); 
     1963+               bcma_core_pci_down(wlc_hw->d11core->bus); 
     1964                brcms_b_xtal(wlc_hw, OFF); 
     1965                return -ENOMEDIUM; 
     1966        } 
     1967  
     1968-       ai_pci_up(wlc_hw->sih); 
     1969+       bcma_core_pci_up(wlc_hw->d11core->bus); 
     1970  
     1971        /* reset the d11 core */ 
     1972        brcms_b_corereset(wlc_hw, BRCMS_USE_COREFLAGS); 
     1973@@ -5193,7 +5193,7 @@ static int brcms_b_down_finish(struct br 
     1974  
     1975                /* turn off primary xtal and pll */ 
     1976                if (!wlc_hw->noreset) { 
     1977-                       ai_pci_down(wlc_hw->sih); 
     1978+                       bcma_core_pci_down(wlc_hw->d11core->bus); 
     1979                        brcms_b_xtal(wlc_hw, OFF); 
     1980                } 
     1981        } 
  • trunk/target/linux/generic/patches-3.9/020-ssb_update.patch

    r37432 r37957  
    11--- a/drivers/ssb/Kconfig 
    22+++ b/drivers/ssb/Kconfig 
    3 @@ -144,7 +144,7 @@ config SSB_SFLASH 
     3@@ -138,13 +138,13 @@ config SSB_DRIVER_MIPS 
     4  
     5 config SSB_SFLASH 
     6        bool "SSB serial flash support" 
     7-       depends on SSB_DRIVER_MIPS && BROKEN 
     8+       depends on SSB_DRIVER_MIPS 
     9        default y 
     10  
    411 # Assumption: We are on embedded, if we compile the MIPS core. 
    512 config SSB_EMBEDDED 
     
    219226  
    220227        switch (cc->capabilities & SSB_CHIPCO_CAP_FLASHT) { 
    221 @@ -131,9 +145,21 @@ int ssb_sflash_init(struct ssb_chipcommo 
     228@@ -131,10 +145,20 @@ int ssb_sflash_init(struct ssb_chipcommo 
    222229                return -ENOTSUPP; 
    223230        } 
    224231  
     232-       pr_info("Found %s serial flash (blocksize: 0x%X, blocks: %d)\n", 
     233-               e->name, e->blocksize, e->numblocks); 
     234- 
     235-       pr_err("Serial flash support is not implemented yet!\n"); 
    225236+       sflash->window = SSB_FLASH2; 
    226237+       sflash->blocksize = e->blocksize; 
     
    229240+       sflash->present = true; 
    230241+ 
    231         pr_info("Found %s serial flash (blocksize: 0x%X, blocks: %d)\n", 
    232                 e->name, e->blocksize, e->numblocks); 
    233   
     242+       pr_info("Found %s serial flash (size: %dKiB, blocksize: 0x%X, blocks: %d)\n", 
     243+               e->name, sflash->size / 1024, e->blocksize, e->numblocks); 
     244+ 
    234245+       /* Prepare platform device, but don't register it yet. It's too early, 
    235246+        * malloc (required by device_private_init) is not available yet. */ 
     
    237248+                                        sflash->size; 
    238249+       ssb_sflash_dev.dev.platform_data = sflash; 
    239 + 
    240         pr_err("Serial flash support is not implemented yet!\n"); 
    241   
    242         return -ENOTSUPP; 
     250  
     251-       return -ENOTSUPP; 
     252+       return 0; 
     253 } 
    243254--- a/drivers/ssb/driver_mipscore.c 
    244255+++ b/drivers/ssb/driver_mipscore.c 
  • trunk/target/linux/generic/patches-3.9/025-bcma_backport.patch

    r37432 r37957  
    99 config BCMA_DRIVER_PCI_HOSTMODE 
    1010        bool "Driver for PCI core working in hostmode" 
     11@@ -34,8 +35,14 @@ config BCMA_DRIVER_PCI_HOSTMODE 
     12          PCI core hostmode operation (external PCI bus). 
     13  
     14 config BCMA_HOST_SOC 
     15-       bool 
     16-       depends on BCMA_DRIVER_MIPS 
     17+       bool "Support for BCMA in a SoC" 
     18+       depends on BCMA 
     19+       help 
     20+         Host interface for a Broadcom AIX bus directly mapped into 
     21+         the memory. This only works with the Broadcom SoCs from the 
     22+         BCM47XX line. 
     23+ 
     24+         If unsure, say N 
     25  
     26 config BCMA_DRIVER_MIPS 
     27        bool "BCMA Broadcom MIPS core driver" 
    1128--- a/drivers/bcma/bcma_private.h 
    1229+++ b/drivers/bcma/bcma_private.h 
     
    461478                core->dev.bus = &bcma_bus_type; 
    462479                dev_set_name(&core->dev, "bcma%d:%d", bus->num, dev_id); 
     480@@ -213,7 +237,7 @@ int bcma_bus_register(struct bcma_bus *b 
     481        err = bcma_bus_scan(bus); 
     482        if (err) { 
     483                bcma_err(bus, "Failed to scan: %d\n", err); 
     484-               return -1; 
     485+               return err; 
     486        } 
     487  
     488        /* Early init CC core */ 
    463489--- a/drivers/bcma/scan.c 
    464490+++ b/drivers/bcma/scan.c 
    465 @@ -84,6 +84,8 @@ static const struct bcma_device_id_name 
     491@@ -32,6 +32,18 @@ static const struct bcma_device_id_name 
     492        { BCMA_CORE_4706_CHIPCOMMON, "BCM4706 ChipCommon" }, 
     493        { BCMA_CORE_4706_SOC_RAM, "BCM4706 SOC RAM" }, 
     494        { BCMA_CORE_4706_MAC_GBIT, "BCM4706 GBit MAC" }, 
     495+       { BCMA_CORE_PCIEG2, "PCIe Gen 2" }, 
     496+       { BCMA_CORE_DMA, "DMA" }, 
     497+       { BCMA_CORE_SDIO3, "SDIO3" }, 
     498+       { BCMA_CORE_USB20, "USB 2.0" }, 
     499+       { BCMA_CORE_USB30, "USB 3.0" }, 
     500+       { BCMA_CORE_A9JTAG, "ARM Cortex A9 JTAG" }, 
     501+       { BCMA_CORE_DDR23, "Denali DDR2/DDR3 memory controller" }, 
     502+       { BCMA_CORE_ROM, "ROM" }, 
     503+       { BCMA_CORE_NAND, "NAND flash controller" }, 
     504+       { BCMA_CORE_QSPI, "SPI flash controller" }, 
     505+       { BCMA_CORE_CHIPCOMMON_B, "Chipcommon B" }, 
     506+       { BCMA_CORE_ARMCA9, "ARM Cortex A9 core (ihost)" }, 
     507        { BCMA_CORE_AMEMC, "AMEMC (DDR)" }, 
     508        { BCMA_CORE_ALTA, "ALTA (I2S)" }, 
     509        { BCMA_CORE_INVALID, "Invalid" }, 
     510@@ -84,6 +96,8 @@ static const struct bcma_device_id_name 
    466511        { BCMA_CORE_I2S, "I2S" }, 
    467512        { BCMA_CORE_SDR_DDR1_MEM_CTL, "SDR/DDR1 Memory Controller" }, 
     
    472517 }; 
    473518  
    474 @@ -137,19 +139,19 @@ static void bcma_scan_switch_core(struct 
     519@@ -137,19 +151,19 @@ static void bcma_scan_switch_core(struct 
    475520                                       addr); 
    476521 } 
     
    495540        u32 ent = bcma_erom_get_ent(bus, eromptr); 
    496541        if (!(ent & SCAN_ER_VALID)) 
    497 @@ -159,14 +161,14 @@ static s32 bcma_erom_get_ci(struct bcma_ 
     542@@ -159,14 +173,14 @@ static s32 bcma_erom_get_ci(struct bcma_ 
    498543        return ent; 
    499544 } 
     
    512557        u32 ent = bcma_erom_get_ent(bus, eromptr); 
    513558        bcma_erom_push_ent(eromptr); 
    514 @@ -175,7 +177,7 @@ static bool bcma_erom_is_bridge(struct b 
     559@@ -175,7 +189,7 @@ static bool bcma_erom_is_bridge(struct b 
    515560                ((ent & SCAN_ADDR_TYPE) == SCAN_ADDR_TYPE_BRIDGE)); 
    516561 } 
     
    521566        u32 ent; 
    522567        while (1) { 
    523 @@ -189,7 +191,7 @@ static void bcma_erom_skip_component(str 
     568@@ -189,7 +203,7 @@ static void bcma_erom_skip_component(str 
    524569        bcma_erom_push_ent(eromptr); 
    525570 } 
     
    530575        u32 ent = bcma_erom_get_ent(bus, eromptr); 
    531576        if (!(ent & SCAN_ER_VALID)) 
    532 @@ -199,7 +201,7 @@ static s32 bcma_erom_get_mst_port(struct 
     577@@ -199,7 +213,7 @@ static s32 bcma_erom_get_mst_port(struct 
    533578        return ent; 
    534579 } 
    535580  
    536581-static s32 bcma_erom_get_addr_desc(struct bcma_bus *bus, u32 **eromptr, 
    537 +static s32 bcma_erom_get_addr_desc(struct bcma_bus *bus, u32 __iomem **eromptr, 
     582+static u32 bcma_erom_get_addr_desc(struct bcma_bus *bus, u32 __iomem **eromptr, 
    538583                                  u32 type, u8 port) 
    539584 { 
    540585        u32 addrl, addrh, sizel, sizeh = 0; 
     586@@ -211,7 +225,7 @@ static s32 bcma_erom_get_addr_desc(struc 
     587            ((ent & SCAN_ADDR_TYPE) != type) || 
     588            (((ent & SCAN_ADDR_PORT) >> SCAN_ADDR_PORT_SHIFT) != port)) { 
     589                bcma_erom_push_ent(eromptr); 
     590-               return -EINVAL; 
     591+               return (u32)-EINVAL; 
     592        } 
     593  
     594        addrl = ent & SCAN_ADDR_ADDR; 
     595@@ -255,11 +269,13 @@ static struct bcma_device *bcma_find_cor 
     596        return NULL; 
     597 } 
     598  
     599+#define IS_ERR_VALUE_U32(x) ((x) >= (u32)-MAX_ERRNO) 
     600+ 
     601 static int bcma_get_next_core(struct bcma_bus *bus, u32 __iomem **eromptr, 
     602                              struct bcma_device_id *match, int core_num, 
     603                              struct bcma_device *core) 
     604 { 
     605-       s32 tmp; 
     606+       u32 tmp; 
     607        u8 i, j; 
     608        s32 cia, cib; 
     609        u8 ports[2], wrappers[2]; 
     610@@ -337,11 +353,11 @@ static int bcma_get_next_core(struct bcm 
     611         * the main register space for the core 
     612         */ 
     613        tmp = bcma_erom_get_addr_desc(bus, eromptr, SCAN_ADDR_TYPE_SLAVE, 0); 
     614-       if (tmp <= 0) { 
     615+       if (tmp == 0 || IS_ERR_VALUE_U32(tmp)) { 
     616                /* Try again to see if it is a bridge */ 
     617                tmp = bcma_erom_get_addr_desc(bus, eromptr, 
     618                                              SCAN_ADDR_TYPE_BRIDGE, 0); 
     619-               if (tmp <= 0) { 
     620+               if (tmp == 0 || IS_ERR_VALUE_U32(tmp)) { 
     621                        return -EILSEQ; 
     622                } else { 
     623                        bcma_info(bus, "Bridge found\n"); 
     624@@ -355,7 +371,7 @@ static int bcma_get_next_core(struct bcm 
     625                for (j = 0; ; j++) { 
     626                        tmp = bcma_erom_get_addr_desc(bus, eromptr, 
     627                                SCAN_ADDR_TYPE_SLAVE, i); 
     628-                       if (tmp < 0) { 
     629+                       if (IS_ERR_VALUE_U32(tmp)) { 
     630                                /* no more entries for port _i_ */ 
     631                                /* pr_debug("erom: slave port %d " 
     632                                 * "has %d descriptors\n", i, j); */ 
     633@@ -372,7 +388,7 @@ static int bcma_get_next_core(struct bcm 
     634                for (j = 0; ; j++) { 
     635                        tmp = bcma_erom_get_addr_desc(bus, eromptr, 
     636                                SCAN_ADDR_TYPE_MWRAP, i); 
     637-                       if (tmp < 0) { 
     638+                       if (IS_ERR_VALUE_U32(tmp)) { 
     639                                /* no more entries for port _i_ */ 
     640                                /* pr_debug("erom: master wrapper %d " 
     641                                 * "has %d descriptors\n", i, j); */ 
     642@@ -390,7 +406,7 @@ static int bcma_get_next_core(struct bcm 
     643                for (j = 0; ; j++) { 
     644                        tmp = bcma_erom_get_addr_desc(bus, eromptr, 
     645                                SCAN_ADDR_TYPE_SWRAP, i + hack); 
     646-                       if (tmp < 0) { 
     647+                       if (IS_ERR_VALUE_U32(tmp)) { 
     648                                /* no more entries for port _i_ */ 
     649                                /* pr_debug("erom: master wrapper %d " 
     650                                 * has %d descriptors\n", i, j); */ 
    541651--- a/drivers/bcma/sprom.c 
    542652+++ b/drivers/bcma/sprom.c 
     
    714824--- a/include/linux/bcma/bcma.h 
    715825+++ b/include/linux/bcma/bcma.h 
    716 @@ -134,12 +134,17 @@ struct bcma_host_ops { 
     826@@ -72,7 +72,19 @@ struct bcma_host_ops { 
     827 /* Core-ID values. */ 
     828 #define BCMA_CORE_OOB_ROUTER           0x367   /* Out of band */ 
     829 #define BCMA_CORE_4706_CHIPCOMMON      0x500 
     830+#define BCMA_CORE_PCIEG2               0x501 
     831+#define BCMA_CORE_DMA                  0x502 
     832+#define BCMA_CORE_SDIO3                        0x503 
     833+#define BCMA_CORE_USB20                        0x504 
     834+#define BCMA_CORE_USB30                        0x505 
     835+#define BCMA_CORE_A9JTAG               0x506 
     836+#define BCMA_CORE_DDR23                        0x507 
     837+#define BCMA_CORE_ROM                  0x508 
     838+#define BCMA_CORE_NAND                 0x509 
     839+#define BCMA_CORE_QSPI                 0x50A 
     840+#define BCMA_CORE_CHIPCOMMON_B         0x50B 
     841 #define BCMA_CORE_4706_SOC_RAM         0x50E 
     842+#define BCMA_CORE_ARMCA9               0x510 
     843 #define BCMA_CORE_4706_MAC_GBIT                0x52D 
     844 #define BCMA_CORE_AMEMC                        0x52E   /* DDR1/2 memory controller core */ 
     845 #define BCMA_CORE_ALTA                 0x534   /* I2S core */ 
     846@@ -134,12 +146,17 @@ struct bcma_host_ops { 
    717847 #define BCMA_CORE_I2S                  0x834 
    718848 #define BCMA_CORE_SDR_DDR1_MEM_CTL     0x835   /* SDR/DDR1 memory controller core */ 
     
    732862 #define  BCMA_PKG_ID_BCM43224_FAB_CSM  0x8 
    733863 #define  BCMA_PKG_ID_BCM43224_FAB_SMIC 0xa 
    734 @@ -173,6 +178,60 @@ struct bcma_host_ops { 
     864@@ -172,6 +189,65 @@ struct bcma_host_ops { 
     865 #define  BCMA_PKG_ID_BCM5357   11 
    735866 #define BCMA_CHIP_ID_BCM53572  53572 
    736867 #define  BCMA_PKG_ID_BCM47188  9 
    737   
     868+#define BCMA_CHIP_ID_BCM4707   53010 
     869+#define  BCMA_PKG_ID_BCM4707   1 
     870+#define  BCMA_PKG_ID_BCM4708   2 
     871+#define  BCMA_PKG_ID_BCM4709   0 
     872+#define BCMA_CHIP_ID_BCM53018  53018 
     873+ 
    738874+/* Board types (on PCI usually equals to the subsystem dev id) */ 
    739875+/* BCM4313 */ 
     
    789925+/* BCM43142 */ 
    790926+#define BCMA_BOARD_TYPE_BCM943142HM    0X05E0 
    791 + 
     927  
    792928 struct bcma_device { 
    793929        struct bcma_bus *bus; 
    794         struct bcma_device_id id; 
    795930--- a/include/linux/bcma/bcma_driver_chipcommon.h 
    796931+++ b/include/linux/bcma/bcma_driver_chipcommon.h 
     
    9151050 /* BCMA PCI config space registers. */ 
    9161051 #define BCMA_PCI_PMCSR                 0x44 
     1052--- a/drivers/bcma/driver_pci.c 
     1053+++ b/drivers/bcma/driver_pci.c 
     1054@@ -31,7 +31,7 @@ static void bcma_pcie_write(struct bcma_ 
     1055        pcicore_write32(pc, BCMA_CORE_PCI_PCIEIND_DATA, data); 
     1056 } 
     1057  
     1058-static void bcma_pcie_mdio_set_phy(struct bcma_drv_pci *pc, u8 phy) 
     1059+static void bcma_pcie_mdio_set_phy(struct bcma_drv_pci *pc, u16 phy) 
     1060 { 
     1061        u32 v; 
     1062        int i; 
     1063@@ -55,7 +55,7 @@ static void bcma_pcie_mdio_set_phy(struc 
     1064        } 
     1065 } 
     1066  
     1067-static u16 bcma_pcie_mdio_read(struct bcma_drv_pci *pc, u8 device, u8 address) 
     1068+static u16 bcma_pcie_mdio_read(struct bcma_drv_pci *pc, u16 device, u8 address) 
     1069 { 
     1070        int max_retries = 10; 
     1071        u16 ret = 0; 
     1072@@ -98,7 +98,7 @@ static u16 bcma_pcie_mdio_read(struct bc 
     1073        return ret; 
     1074 } 
     1075  
     1076-static void bcma_pcie_mdio_write(struct bcma_drv_pci *pc, u8 device, 
     1077+static void bcma_pcie_mdio_write(struct bcma_drv_pci *pc, u16 device, 
     1078                                u8 address, u16 data) 
     1079 { 
     1080        int max_retries = 10; 
     1081@@ -137,6 +137,13 @@ static void bcma_pcie_mdio_write(struct 
     1082        pcicore_write32(pc, BCMA_CORE_PCI_MDIO_CONTROL, 0); 
     1083 } 
     1084  
     1085+static u16 bcma_pcie_mdio_writeread(struct bcma_drv_pci *pc, u16 device, 
     1086+                                   u8 address, u16 data) 
     1087+{ 
     1088+       bcma_pcie_mdio_write(pc, device, address, data); 
     1089+       return bcma_pcie_mdio_read(pc, device, address); 
     1090+} 
     1091+ 
     1092 /************************************************** 
     1093  * Workarounds. 
     1094  **************************************************/ 
     1095@@ -203,6 +210,25 @@ static void bcma_core_pci_config_fixup(s 
     1096        } 
     1097 } 
     1098  
     1099+static void bcma_core_pci_power_save(struct bcma_drv_pci *pc, bool up) 
     1100+{ 
     1101+       u16 data; 
     1102+ 
     1103+       if (pc->core->id.rev >= 15 && pc->core->id.rev <= 20) { 
     1104+               data = up ? 0x74 : 0x7C; 
     1105+               bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1, 
     1106+                                        BCMA_CORE_PCI_MDIO_BLK1_MGMT1, 0x7F64); 
     1107+               bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1, 
     1108+                                        BCMA_CORE_PCI_MDIO_BLK1_MGMT3, data); 
     1109+       } else if (pc->core->id.rev >= 21 && pc->core->id.rev <= 22) { 
     1110+               data = up ? 0x75 : 0x7D; 
     1111+               bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1, 
     1112+                                        BCMA_CORE_PCI_MDIO_BLK1_MGMT1, 0x7E65); 
     1113+               bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1, 
     1114+                                        BCMA_CORE_PCI_MDIO_BLK1_MGMT3, data); 
     1115+       } 
     1116+} 
     1117+ 
     1118 /************************************************** 
     1119  * Init. 
     1120  **************************************************/ 
     1121@@ -262,7 +288,7 @@ out: 
     1122 } 
     1123 EXPORT_SYMBOL_GPL(bcma_core_pci_irq_ctl); 
     1124  
     1125-void bcma_core_pci_extend_L1timer(struct bcma_drv_pci *pc, bool extend) 
     1126+static void bcma_core_pci_extend_L1timer(struct bcma_drv_pci *pc, bool extend) 
     1127 { 
     1128        u32 w; 
     1129  
     1130@@ -274,4 +300,33 @@ void bcma_core_pci_extend_L1timer(struct 
     1131        bcma_pcie_write(pc, BCMA_CORE_PCI_DLLP_PMTHRESHREG, w); 
     1132        bcma_pcie_read(pc, BCMA_CORE_PCI_DLLP_PMTHRESHREG); 
     1133 } 
     1134-EXPORT_SYMBOL_GPL(bcma_core_pci_extend_L1timer); 
     1135+ 
     1136+void bcma_core_pci_up(struct bcma_bus *bus) 
     1137+{ 
     1138+       struct bcma_drv_pci *pc; 
     1139+ 
     1140+       if (bus->hosttype != BCMA_HOSTTYPE_PCI) 
     1141+               return; 
     1142+ 
     1143+       pc = &bus->drv_pci[0]; 
     1144+ 
     1145+       bcma_core_pci_power_save(pc, true); 
     1146+ 
     1147+       bcma_core_pci_extend_L1timer(pc, true); 
     1148+} 
     1149+EXPORT_SYMBOL_GPL(bcma_core_pci_up); 
     1150+ 
     1151+void bcma_core_pci_down(struct bcma_bus *bus) 
     1152+{ 
     1153+       struct bcma_drv_pci *pc; 
     1154+ 
     1155+       if (bus->hosttype != BCMA_HOSTTYPE_PCI) 
     1156+               return; 
     1157+ 
     1158+       pc = &bus->drv_pci[0]; 
     1159+ 
     1160+       bcma_core_pci_extend_L1timer(pc, false); 
     1161+ 
     1162+       bcma_core_pci_power_save(pc, false); 
     1163+} 
     1164+EXPORT_SYMBOL_GPL(bcma_core_pci_down); 
     1165--- a/drivers/bcma/driver_pci_host.c 
     1166+++ b/drivers/bcma/driver_pci_host.c 
     1167@@ -581,6 +581,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI 
     1168 int bcma_core_pci_plat_dev_init(struct pci_dev *dev) 
     1169 { 
     1170        struct bcma_drv_pci_host *pc_host; 
     1171+       int readrq; 
     1172  
     1173        if (dev->bus->ops->read != bcma_core_pci_hostmode_read_config) { 
     1174                /* This is not a device on the PCI-core bridge. */ 
     1175@@ -595,6 +596,11 @@ int bcma_core_pci_plat_dev_init(struct p 
     1176        dev->irq = bcma_core_irq(pc_host->pdev->core); 
     1177        pci_write_config_byte(dev, PCI_INTERRUPT_LINE, dev->irq); 
     1178  
     1179+       readrq = pcie_get_readrq(dev); 
     1180+       if (readrq > 128) { 
     1181+               pr_info("change PCIe max read request size from %i to 128\n", readrq); 
     1182+               pcie_set_readrq(dev, 128); 
     1183+       } 
     1184        return 0; 
     1185 } 
     1186 EXPORT_SYMBOL(bcma_core_pci_plat_dev_init); 
     1187--- a/include/linux/bcma/bcma_driver_pci.h 
     1188+++ b/include/linux/bcma/bcma_driver_pci.h 
     1189@@ -181,10 +181,31 @@ struct pci_dev; 
     1190  
     1191 #define BCMA_CORE_PCI_CFG_DEVCTRL              0xd8 
     1192  
     1193+#define BCMA_CORE_PCI_ 
     1194+ 
     1195+/* MDIO devices (SERDES modules) */ 
     1196+#define BCMA_CORE_PCI_MDIO_IEEE0               0x000 
     1197+#define BCMA_CORE_PCI_MDIO_IEEE1               0x001 
     1198+#define BCMA_CORE_PCI_MDIO_BLK0                        0x800 
     1199+#define BCMA_CORE_PCI_MDIO_BLK1                        0x801 
     1200+#define  BCMA_CORE_PCI_MDIO_BLK1_MGMT0         0x16 
     1201+#define  BCMA_CORE_PCI_MDIO_BLK1_MGMT1         0x17 
     1202+#define  BCMA_CORE_PCI_MDIO_BLK1_MGMT2         0x18 
     1203+#define  BCMA_CORE_PCI_MDIO_BLK1_MGMT3         0x19 
     1204+#define  BCMA_CORE_PCI_MDIO_BLK1_MGMT4         0x1A 
     1205+#define BCMA_CORE_PCI_MDIO_BLK2                        0x802 
     1206+#define BCMA_CORE_PCI_MDIO_BLK3                        0x803 
     1207+#define BCMA_CORE_PCI_MDIO_BLK4                        0x804 
     1208+#define BCMA_CORE_PCI_MDIO_TXPLL               0x808   /* TXPLL register block idx */ 
     1209+#define BCMA_CORE_PCI_MDIO_TXCTRL0             0x820 
     1210+#define BCMA_CORE_PCI_MDIO_SERDESID            0x831 
     1211+#define BCMA_CORE_PCI_MDIO_RXCTRL0             0x840 
     1212+ 
     1213 /* PCIE Root Capability Register bits (Host mode only) */ 
     1214 #define BCMA_CORE_PCI_RC_CRS_VISIBILITY                0x0001 
     1215  
     1216 struct bcma_drv_pci; 
     1217+struct bcma_bus; 
     1218  
     1219 #ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE 
     1220 struct bcma_drv_pci_host { 
     1221@@ -219,7 +240,8 @@ struct bcma_drv_pci { 
     1222 extern void bcma_core_pci_init(struct bcma_drv_pci *pc); 
     1223 extern int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc, 
     1224                                 struct bcma_device *core, bool enable); 
     1225-extern void bcma_core_pci_extend_L1timer(struct bcma_drv_pci *pc, bool extend); 
     1226+extern void bcma_core_pci_up(struct bcma_bus *bus); 
     1227+extern void bcma_core_pci_down(struct bcma_bus *bus); 
     1228  
     1229 extern int bcma_core_pci_pcibios_map_irq(const struct pci_dev *dev); 
     1230 extern int bcma_core_pci_plat_dev_init(struct pci_dev *dev); 
     1231--- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c 
     1232+++ b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c 
     1233@@ -685,27 +685,6 @@ bool ai_clkctl_cc(struct si_pub *sih, en 
     1234        return mode == BCMA_CLKMODE_FAST; 
     1235 } 
     1236  
     1237-void ai_pci_up(struct si_pub *sih) 
     1238-{ 
     1239-       struct si_info *sii; 
     1240- 
     1241-       sii = container_of(sih, struct si_info, pub); 
     1242- 
     1243-       if (sii->icbus->hosttype == BCMA_HOSTTYPE_PCI) 
     1244-               bcma_core_pci_extend_L1timer(&sii->icbus->drv_pci[0], true); 
     1245-} 
     1246- 
     1247-/* Unconfigure and/or apply various WARs when going down */ 
     1248-void ai_pci_down(struct si_pub *sih) 
     1249-{ 
     1250-       struct si_info *sii; 
     1251- 
     1252-       sii = container_of(sih, struct si_info, pub); 
     1253- 
     1254-       if (sii->icbus->hosttype == BCMA_HOSTTYPE_PCI) 
     1255-               bcma_core_pci_extend_L1timer(&sii->icbus->drv_pci[0], false); 
     1256-} 
     1257- 
     1258 /* Enable BT-COEX & Ex-PA for 4313 */ 
     1259 void ai_epa_4313war(struct si_pub *sih) 
     1260 { 
     1261--- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.h 
     1262+++ b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.h 
     1263@@ -183,9 +183,6 @@ extern u16 ai_clkctl_fast_pwrup_delay(st 
     1264 extern bool ai_clkctl_cc(struct si_pub *sih, enum bcma_clkmode mode); 
     1265 extern bool ai_deviceremoved(struct si_pub *sih); 
     1266  
     1267-extern void ai_pci_down(struct si_pub *sih); 
     1268-extern void ai_pci_up(struct si_pub *sih); 
     1269- 
     1270 /* Enable Ex-PA for 4313 */ 
     1271 extern void ai_epa_4313war(struct si_pub *sih); 
     1272  
     1273--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c 
     1274+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c 
     1275@@ -4644,7 +4644,7 @@ static int brcms_b_attach(struct brcms_c 
     1276        brcms_c_coredisable(wlc_hw); 
     1277  
     1278        /* Match driver "down" state */ 
     1279-       ai_pci_down(wlc_hw->sih); 
     1280+       bcma_core_pci_down(wlc_hw->d11core->bus); 
     1281  
     1282        /* turn off pll and xtal to match driver "down" state */ 
     1283        brcms_b_xtal(wlc_hw, OFF); 
     1284@@ -4987,12 +4987,12 @@ static int brcms_b_up_prep(struct brcms_ 
     1285         */ 
     1286        if (brcms_b_radio_read_hwdisabled(wlc_hw)) { 
     1287                /* put SB PCI in down state again */ 
     1288-               ai_pci_down(wlc_hw->sih); 
     1289+               bcma_core_pci_down(wlc_hw->d11core->bus); 
     1290                brcms_b_xtal(wlc_hw, OFF); 
     1291                return -ENOMEDIUM; 
     1292        } 
     1293  
     1294-       ai_pci_up(wlc_hw->sih); 
     1295+       bcma_core_pci_up(wlc_hw->d11core->bus); 
     1296  
     1297        /* reset the d11 core */ 
     1298        brcms_b_corereset(wlc_hw, BRCMS_USE_COREFLAGS); 
     1299@@ -5189,7 +5189,7 @@ static int brcms_b_down_finish(struct br 
     1300  
     1301                /* turn off primary xtal and pll */ 
     1302                if (!wlc_hw->noreset) { 
     1303-                       ai_pci_down(wlc_hw->sih); 
     1304+                       bcma_core_pci_down(wlc_hw->d11core->bus); 
     1305                        brcms_b_xtal(wlc_hw, OFF); 
     1306                } 
     1307        } 
Note: See TracChangeset for help on using the changeset viewer.