Changeset 36473


Ignore:
Timestamp:
2013-04-28T18:52:11+02:00 (5 years ago)
Author:
hauke
Message:

kernel: update bcma and ssb for kernel 3.8+ to version from wireless-testing master-2013-04-26.

Location:
trunk/target/linux
Files:
1 added
3 deleted
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/brcm47xx/patches-3.8/030-mtd-bcm47xxsflash-add-own-struct-for-abstrating-bus-.patch

    r36453 r36473  
    114114--- a/include/linux/bcma/bcma_driver_chipcommon.h 
    115115+++ b/include/linux/bcma/bcma_driver_chipcommon.h 
    116 @@ -529,6 +529,7 @@ struct bcma_sflash { 
    117         u32 size; 
     116@@ -544,6 +544,7 @@ struct bcma_nflash { 
     117        bool boot;              /* This is the flash the SoC boots from */ 
    118118  
    119119        struct mtd_info *mtd; 
  • trunk/target/linux/brcm47xx/patches-3.8/060-ssb-add-serial-flash-driver.patch

    r36453 r36473  
    297297--- a/drivers/ssb/main.c 
    298298+++ b/drivers/ssb/main.c 
    299 @@ -549,6 +549,15 @@ static int ssb_devices_register(struct s 
     299@@ -545,6 +545,15 @@ static int ssb_devices_register(struct s 
    300300                dev_idx++; 
    301301        } 
     
    315315--- a/drivers/ssb/ssb_private.h 
    316316+++ b/drivers/ssb/ssb_private.h 
    317 @@ -220,6 +220,7 @@ extern u32 ssb_chipco_watchdog_timer_set 
     317@@ -231,6 +231,7 @@ extern u32 ssb_chipco_watchdog_timer_set 
    318318 /* driver_chipcommon_sflash.c */ 
    319319 #ifdef CONFIG_SSB_SFLASH 
  • trunk/target/linux/brcm47xx/patches-3.8/070-bcma-add-functions-to-write-to-serial-flash.patch

    r36453 r36473  
    270270 /** ChipCommon core registers. **/ 
    271271 #define BCMA_CC_ID                     0x0000 
    272 @@ -520,19 +521,6 @@ struct bcma_pflash { 
     272@@ -523,19 +524,6 @@ struct bcma_pflash { 
    273273        u32 window_size; 
    274274 }; 
     
    290290 struct mtd_info; 
    291291  
    292 @@ -566,7 +554,7 @@ struct bcma_drv_cc { 
     292@@ -570,7 +558,7 @@ struct bcma_drv_cc { 
    293293 #ifdef CONFIG_BCMA_DRIVER_MIPS 
    294294        struct bcma_pflash pflash; 
  • trunk/target/linux/brcm47xx/patches-3.8/080-MIPS-BCM47XX-rewrite-nvram-probing.patch

    r35632 r36473  
    451451 #endif 
    452452        } 
    453 --- a/include/linux/ssb/ssb_driver_gige.h 
    454 +++ b/include/linux/ssb/ssb_driver_gige.h 
    455 @@ -98,14 +98,14 @@ static inline bool ssb_gige_must_flush_p 
    456  } 
    457   
    458  #ifdef CONFIG_BCM47XX 
    459 -#include <asm/mach-bcm47xx/nvram.h> 
    460 +#include <bcm47xx_nvram.h> 
    461  /* Get the device MAC address */ 
    462  static inline void ssb_gige_get_macaddr(struct pci_dev *pdev, u8 *macaddr) 
    463  { 
    464         char buf[20]; 
    465 -       if (nvram_getenv("et0macaddr", buf, sizeof(buf)) < 0) 
    466 +       if (bcm47xx_nvram_getenv("et0macaddr", buf, sizeof(buf)) < 0) 
    467                 return; 
    468 -       nvram_parse_macaddr(buf, macaddr); 
    469 +       bcm47xx_nvram_parse_macaddr(buf, macaddr); 
    470  } 
    471  #else 
    472  static inline void ssb_gige_get_macaddr(struct pci_dev *pdev, u8 *macaddr) 
  • trunk/target/linux/brcm47xx/patches-3.8/700-ssb-gigabit-ethernet-driver.patch

    r36453 r36473  
    344344 #define PCI_DEVICE_ID_TIGON3_5715      0x1678 
    345345 #define PCI_DEVICE_ID_TIGON3_5715S     0x1679 
    346 --- a/include/linux/ssb/ssb_driver_gige.h 
    347 +++ b/include/linux/ssb/ssb_driver_gige.h 
    348 @@ -97,21 +97,16 @@ static inline bool ssb_gige_must_flush_p 
    349         return 0; 
    350  } 
    351   
    352 -#ifdef CONFIG_BCM47XX 
    353 -#include <bcm47xx_nvram.h> 
    354  /* Get the device MAC address */ 
    355 -static inline void ssb_gige_get_macaddr(struct pci_dev *pdev, u8 *macaddr) 
    356 -{ 
    357 -       char buf[20]; 
    358 -       if (bcm47xx_nvram_getenv("et0macaddr", buf, sizeof(buf)) < 0) 
    359 -               return; 
    360 -       bcm47xx_nvram_parse_macaddr(buf, macaddr); 
    361 -} 
    362 -#else 
    363 -static inline void ssb_gige_get_macaddr(struct pci_dev *pdev, u8 *macaddr) 
    364 +static inline int ssb_gige_get_macaddr(struct pci_dev *pdev, u8 *macaddr) 
    365  { 
    366 +       struct ssb_gige *dev = pdev_to_ssb_gige(pdev); 
    367 +       if (!dev) 
    368 +               return -ENODEV; 
    369 + 
    370 +       memcpy(macaddr, dev->dev->bus->sprom.et0mac, 6); 
    371 +       return 0; 
    372  } 
    373 -#endif 
    374   
    375  extern int ssb_gige_pcibios_plat_dev_init(struct ssb_device *sdev, 
    376                                           struct pci_dev *pdev); 
    377 @@ -175,6 +170,10 @@ static inline bool ssb_gige_must_flush_p 
    378  { 
    379         return 0; 
    380  } 
    381 +static inline int ssb_gige_get_macaddr(struct pci_dev *pdev, u8 *macaddr) 
    382 +{ 
    383 +       return -ENODEV; 
    384 +} 
    385   
    386  #endif /* CONFIG_SSB_DRIVER_GIGE */ 
    387  #endif /* LINUX_SSB_DRIVER_GIGE_H_ */ 
  • trunk/target/linux/brcm47xx/patches-3.8/750-bgmac.patch

    r36453 r36473  
    4242 create mode 100644 drivers/net/ethernet/broadcom/bgmac.h 
    4343 
    44 --- a/drivers/bcma/driver_chipcommon_pmu.c 
    45 +++ b/drivers/bcma/driver_chipcommon_pmu.c 
    46 @@ -280,7 +280,7 @@ static u32 bcma_pmu_pll_clock_bcm4706(st 
    47  } 
    48   
    49  /* query bus clock frequency for PMU-enabled chipcommon */ 
    50 -static u32 bcma_pmu_get_bus_clock(struct bcma_drv_cc *cc) 
    51 +u32 bcma_pmu_get_bus_clock(struct bcma_drv_cc *cc) 
    52  { 
    53         struct bcma_bus *bus = cc->core->bus; 
    54   
    55 @@ -309,6 +309,7 @@ static u32 bcma_pmu_get_bus_clock(struct 
    56         } 
    57         return BCMA_CC_PMU_HT_CLOCK; 
    58  } 
    59 +EXPORT_SYMBOL_GPL(bcma_pmu_get_bus_clock); 
    60   
    61  /* query cpu clock frequency for PMU-enabled chipcommon */ 
    62  u32 bcma_pmu_get_cpu_clock(struct bcma_drv_cc *cc) 
    6344--- a/drivers/net/ethernet/broadcom/Kconfig 
    6445+++ b/drivers/net/ethernet/broadcom/Kconfig 
     
    19681949+ 
    19691950+#endif /* _BGMAC_H */ 
    1970 --- a/include/linux/bcma/bcma_driver_chipcommon.h 
    1971 +++ b/include/linux/bcma/bcma_driver_chipcommon.h 
    1972 @@ -626,4 +626,6 @@ extern void bcma_chipco_regctl_maskset(s 
    1973                                        u32 offset, u32 mask, u32 set); 
    1974  extern void bcma_pmu_spuravoid_pllupdate(struct bcma_drv_cc *cc, int spuravoid); 
    1975   
    1976 +extern u32 bcma_pmu_get_bus_clock(struct bcma_drv_cc *cc); 
    1977 + 
    1978  #endif /* LINUX_BCMA_DRIVER_CC_H_ */ 
  • trunk/target/linux/brcm47xx/patches-3.8/976-ssb_increase_pci_delay.patch

    r35632 r36473  
    11--- a/drivers/ssb/driver_pcicore.c 
    22+++ b/drivers/ssb/driver_pcicore.c 
    3 @@ -376,7 +376,7 @@ static void ssb_pcicore_init_hostmode(st 
     3@@ -375,7 +375,7 @@ static void ssb_pcicore_init_hostmode(st 
    44        set_io_port_base(ssb_pcicore_controller.io_map_base); 
    55        /* Give some time to the PCI controller to configure itself with the new 
  • trunk/target/linux/generic/patches-3.8/020-ssb_update.patch

    r36453 r36473  
    2323 ssb-$(CONFIG_SSB_DRIVER_EXTIF)         += driver_extif.o 
    2424 ssb-$(CONFIG_SSB_DRIVER_PCICORE)       += driver_pcicore.o 
     25--- a/drivers/ssb/driver_chipcommon.c 
     26+++ b/drivers/ssb/driver_chipcommon.c 
     27@@ -354,7 +354,7 @@ void ssb_chipcommon_init(struct ssb_chip 
     28  
     29        if (cc->dev->id.revision >= 11) 
     30                cc->status = chipco_read32(cc, SSB_CHIPCO_CHIPSTAT); 
     31-       ssb_dprintk(KERN_INFO PFX "chipcommon status is 0x%x\n", cc->status); 
     32+       ssb_dbg("chipcommon status is 0x%x\n", cc->status); 
     33  
     34        if (cc->dev->id.revision >= 20) { 
     35                chipco_write32(cc, SSB_CHIPCO_GPIOPULLUP, 0); 
     36--- a/drivers/ssb/driver_chipcommon_pmu.c 
     37+++ b/drivers/ssb/driver_chipcommon_pmu.c 
     38@@ -110,8 +110,8 @@ static void ssb_pmu0_pllinit_r0(struct s 
     39                return; 
     40        } 
     41  
     42-       ssb_printk(KERN_INFO PFX "Programming PLL to %u.%03u MHz\n", 
     43-                  (crystalfreq / 1000), (crystalfreq % 1000)); 
     44+       ssb_info("Programming PLL to %u.%03u MHz\n", 
     45+                crystalfreq / 1000, crystalfreq % 1000); 
     46  
     47        /* First turn the PLL off. */ 
     48        switch (bus->chip_id) { 
     49@@ -138,7 +138,7 @@ static void ssb_pmu0_pllinit_r0(struct s 
     50        } 
     51        tmp = chipco_read32(cc, SSB_CHIPCO_CLKCTLST); 
     52        if (tmp & SSB_CHIPCO_CLKCTLST_HAVEHT) 
     53-               ssb_printk(KERN_EMERG PFX "Failed to turn the PLL off!\n"); 
     54+               ssb_emerg("Failed to turn the PLL off!\n"); 
     55  
     56        /* Set PDIV in PLL control 0. */ 
     57        pllctl = ssb_chipco_pll_read(cc, SSB_PMU0_PLLCTL0); 
     58@@ -249,8 +249,8 @@ static void ssb_pmu1_pllinit_r0(struct s 
     59                return; 
     60        } 
     61  
     62-       ssb_printk(KERN_INFO PFX "Programming PLL to %u.%03u MHz\n", 
     63-                  (crystalfreq / 1000), (crystalfreq % 1000)); 
     64+       ssb_info("Programming PLL to %u.%03u MHz\n", 
     65+                crystalfreq / 1000, crystalfreq % 1000); 
     66  
     67        /* First turn the PLL off. */ 
     68        switch (bus->chip_id) { 
     69@@ -275,7 +275,7 @@ static void ssb_pmu1_pllinit_r0(struct s 
     70        } 
     71        tmp = chipco_read32(cc, SSB_CHIPCO_CLKCTLST); 
     72        if (tmp & SSB_CHIPCO_CLKCTLST_HAVEHT) 
     73-               ssb_printk(KERN_EMERG PFX "Failed to turn the PLL off!\n"); 
     74+               ssb_emerg("Failed to turn the PLL off!\n"); 
     75  
     76        /* Set p1div and p2div. */ 
     77        pllctl = ssb_chipco_pll_read(cc, SSB_PMU1_PLLCTL0); 
     78@@ -349,9 +349,8 @@ static void ssb_pmu_pll_init(struct ssb_ 
     79        case 43222: 
     80                break; 
     81        default: 
     82-               ssb_printk(KERN_ERR PFX 
     83-                          "ERROR: PLL init unknown for device %04X\n", 
     84-                          bus->chip_id); 
     85+               ssb_err("ERROR: PLL init unknown for device %04X\n", 
     86+                       bus->chip_id); 
     87        } 
     88 } 
     89  
     90@@ -472,9 +471,8 @@ static void ssb_pmu_resources_init(struc 
     91                max_msk = 0xFFFFF; 
     92                break; 
     93        default: 
     94-               ssb_printk(KERN_ERR PFX 
     95-                          "ERROR: PMU resource config unknown for device %04X\n", 
     96-                          bus->chip_id); 
     97+               ssb_err("ERROR: PMU resource config unknown for device %04X\n", 
     98+                       bus->chip_id); 
     99        } 
     100  
     101        if (updown_tab) { 
     102@@ -526,8 +524,8 @@ void ssb_pmu_init(struct ssb_chipcommon 
     103        pmucap = chipco_read32(cc, SSB_CHIPCO_PMU_CAP); 
     104        cc->pmu.rev = (pmucap & SSB_CHIPCO_PMU_CAP_REVISION); 
     105  
     106-       ssb_dprintk(KERN_DEBUG PFX "Found rev %u PMU (capabilities 0x%08X)\n", 
     107-                   cc->pmu.rev, pmucap); 
     108+       ssb_dbg("Found rev %u PMU (capabilities 0x%08X)\n", 
     109+               cc->pmu.rev, pmucap); 
     110  
     111        if (cc->pmu.rev == 1) 
     112                chipco_mask32(cc, SSB_CHIPCO_PMU_CTL, 
     113@@ -638,9 +636,8 @@ u32 ssb_pmu_get_alp_clock(struct ssb_chi 
     114        case 0x5354: 
     115                ssb_pmu_get_alp_clock_clk0(cc); 
     116        default: 
     117-               ssb_printk(KERN_ERR PFX 
     118-                          "ERROR: PMU alp clock unknown for device %04X\n", 
     119-                          bus->chip_id); 
     120+               ssb_err("ERROR: PMU alp clock unknown for device %04X\n", 
     121+                       bus->chip_id); 
     122                return 0; 
     123        } 
     124 } 
     125@@ -654,9 +651,8 @@ u32 ssb_pmu_get_cpu_clock(struct ssb_chi 
     126                /* 5354 chip uses a non programmable PLL of frequency 240MHz */ 
     127                return 240000000; 
     128        default: 
     129-               ssb_printk(KERN_ERR PFX 
     130-                          "ERROR: PMU cpu clock unknown for device %04X\n", 
     131-                          bus->chip_id); 
     132+               ssb_err("ERROR: PMU cpu clock unknown for device %04X\n", 
     133+                       bus->chip_id); 
     134                return 0; 
     135        } 
     136 } 
     137@@ -669,9 +665,8 @@ u32 ssb_pmu_get_controlclock(struct ssb_ 
     138        case 0x5354: 
     139                return 120000000; 
     140        default: 
     141-               ssb_printk(KERN_ERR PFX 
     142-                          "ERROR: PMU controlclock unknown for device %04X\n", 
     143-                          bus->chip_id); 
     144+               ssb_err("ERROR: PMU controlclock unknown for device %04X\n", 
     145+                       bus->chip_id); 
     146                return 0; 
     147        } 
     148 } 
     149@@ -692,8 +687,23 @@ void ssb_pmu_spuravoid_pllupdate(struct 
     150                pmu_ctl = SSB_CHIPCO_PMU_CTL_PLL_UPD; 
     151                break; 
     152        case 43222: 
     153-               /* TODO: BCM43222 requires updating PLLs too */ 
     154-               return; 
     155+               if (spuravoid == 1) { 
     156+                       ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL0, 0x11500008); 
     157+                       ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL1, 0x0C000C06); 
     158+                       ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL2, 0x0F600a08); 
     159+                       ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL3, 0x00000000); 
     160+                       ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL4, 0x2001E920); 
     161+                       ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL5, 0x88888815); 
     162+               } else { 
     163+                       ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL0, 0x11100008); 
     164+                       ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL1, 0x0c000c06); 
     165+                       ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL2, 0x03000a08); 
     166+                       ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL3, 0x00000000); 
     167+                       ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL4, 0x200005c0); 
     168+                       ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL5, 0x88888855); 
     169+               } 
     170+               pmu_ctl = SSB_CHIPCO_PMU_CTL_PLL_UPD; 
     171+               break; 
     172        default: 
     173                ssb_printk(KERN_ERR PFX 
     174                           "Unknown spuravoidance settings for chip 0x%04X, not changing PLL\n", 
    25175--- /dev/null 
    26176+++ b/drivers/ssb/driver_chipcommon_sflash.c 
     
    254404 static inline u32 mips_read32(struct ssb_mipscore *mcore, 
    255405                              u16 offset) 
    256 @@ -189,34 +209,43 @@ static void ssb_mips_serial_init(struct 
     406@@ -147,21 +167,22 @@ static void set_irq(struct ssb_device *d 
     407                irqflag |= (ipsflag & ~ipsflag_irq_mask[irq]); 
     408                ssb_write32(mdev, SSB_IPSFLAG, irqflag); 
     409        } 
     410-       ssb_dprintk(KERN_INFO PFX 
     411-                   "set_irq: core 0x%04x, irq %d => %d\n", 
     412-                   dev->id.coreid, oldirq+2, irq+2); 
     413+       ssb_dbg("set_irq: core 0x%04x, irq %d => %d\n", 
     414+               dev->id.coreid, oldirq+2, irq+2); 
     415 } 
     416  
     417 static void print_irq(struct ssb_device *dev, unsigned int irq) 
     418 { 
     419-       int i; 
     420        static const char *irq_name[] = {"2(S)", "3", "4", "5", "6", "D", "I"}; 
     421-       ssb_dprintk(KERN_INFO PFX 
     422-               "core 0x%04x, irq :", dev->id.coreid); 
     423-       for (i = 0; i <= 6; i++) { 
     424-               ssb_dprintk(" %s%s", irq_name[i], i==irq?"*":" "); 
     425-       } 
     426-       ssb_dprintk("\n"); 
     427+       ssb_dbg("core 0x%04x, irq : %s%s %s%s %s%s %s%s %s%s %s%s %s%s\n", 
     428+               dev->id.coreid, 
     429+               irq_name[0], irq == 0 ? "*" : " ", 
     430+               irq_name[1], irq == 1 ? "*" : " ", 
     431+               irq_name[2], irq == 2 ? "*" : " ", 
     432+               irq_name[3], irq == 3 ? "*" : " ", 
     433+               irq_name[4], irq == 4 ? "*" : " ", 
     434+               irq_name[5], irq == 5 ? "*" : " ", 
     435+               irq_name[6], irq == 6 ? "*" : " "); 
     436 } 
     437  
     438 static void dump_irq(struct ssb_bus *bus) 
     439@@ -189,34 +210,43 @@ static void ssb_mips_serial_init(struct 
    257440 static void ssb_mips_flash_detect(struct ssb_mipscore *mcore) 
    258441 { 
     
    309492  
    310493 u32 ssb_cpu_clock(struct ssb_mipscore *mcore) 
     494@@ -257,7 +287,7 @@ void ssb_mipscore_init(struct ssb_mipsco 
     495        if (!mcore->dev) 
     496                return; /* We don't have a MIPS core */ 
     497  
     498-       ssb_dprintk(KERN_INFO PFX "Initializing MIPS core...\n"); 
     499+       ssb_dbg("Initializing MIPS core...\n"); 
     500  
     501        bus = mcore->dev->bus; 
     502        hz = ssb_clockspeed(bus); 
     503@@ -305,7 +335,7 @@ void ssb_mipscore_init(struct ssb_mipsco 
     504                        break; 
     505                } 
     506        } 
     507-       ssb_dprintk(KERN_INFO PFX "after irq reconfiguration\n"); 
     508+       ssb_dbg("after irq reconfiguration\n"); 
     509        dump_irq(bus); 
     510  
     511        ssb_mips_serial_init(mcore); 
     512--- a/drivers/ssb/driver_pcicore.c 
     513+++ b/drivers/ssb/driver_pcicore.c 
     514@@ -263,8 +263,7 @@ int ssb_pcicore_plat_dev_init(struct pci 
     515                return -ENODEV; 
     516        } 
     517  
     518-       ssb_printk(KERN_INFO "PCI: Fixing up device %s\n", 
     519-                  pci_name(d)); 
     520+       ssb_info("PCI: Fixing up device %s\n", pci_name(d)); 
     521  
     522        /* Fix up interrupt lines */ 
     523        d->irq = ssb_mips_irq(extpci_core->dev) + 2; 
     524@@ -285,12 +284,12 @@ static void ssb_pcicore_fixup_pcibridge( 
     525        if (dev->bus->number != 0 || PCI_SLOT(dev->devfn) != 0) 
     526                return; 
     527  
     528-       ssb_printk(KERN_INFO "PCI: Fixing up bridge %s\n", pci_name(dev)); 
     529+       ssb_info("PCI: Fixing up bridge %s\n", pci_name(dev)); 
     530  
     531        /* Enable PCI bridge bus mastering and memory space */ 
     532        pci_set_master(dev); 
     533        if (pcibios_enable_device(dev, ~0) < 0) { 
     534-               ssb_printk(KERN_ERR "PCI: SSB bridge enable failed\n"); 
     535+               ssb_err("PCI: SSB bridge enable failed\n"); 
     536                return; 
     537        } 
     538  
     539@@ -299,8 +298,8 @@ static void ssb_pcicore_fixup_pcibridge( 
     540  
     541        /* Make sure our latency is high enough to handle the devices behind us */ 
     542        lat = 168; 
     543-       ssb_printk(KERN_INFO "PCI: Fixing latency timer of device %s to %u\n", 
     544-                  pci_name(dev), lat); 
     545+       ssb_info("PCI: Fixing latency timer of device %s to %u\n", 
     546+                pci_name(dev), lat); 
     547        pci_write_config_byte(dev, PCI_LATENCY_TIMER, lat); 
     548 } 
     549 DECLARE_PCI_FIXUP_EARLY(PCI_ANY_ID, PCI_ANY_ID, ssb_pcicore_fixup_pcibridge); 
     550@@ -323,7 +322,7 @@ static void ssb_pcicore_init_hostmode(st 
     551                return; 
     552        extpci_core = pc; 
     553  
     554-       ssb_dprintk(KERN_INFO PFX "PCIcore in host mode found\n"); 
     555+       ssb_dbg("PCIcore in host mode found\n"); 
     556        /* Reset devices on the external PCI bus */ 
     557        val = SSB_PCICORE_CTL_RST_OE; 
     558        val |= SSB_PCICORE_CTL_CLK_OE; 
     559@@ -338,7 +337,7 @@ static void ssb_pcicore_init_hostmode(st 
     560        udelay(1); /* Assertion time demanded by the PCI standard */ 
     561  
     562        if (pc->dev->bus->has_cardbus_slot) { 
     563-               ssb_dprintk(KERN_INFO PFX "CardBus slot detected\n"); 
     564+               ssb_dbg("CardBus slot detected\n"); 
     565                pc->cardbusmode = 1; 
     566                /* GPIO 1 resets the bridge */ 
     567                ssb_gpio_out(pc->dev->bus, 1, 1); 
     568--- a/drivers/ssb/embedded.c 
     569+++ b/drivers/ssb/embedded.c 
     570@@ -57,9 +57,8 @@ int ssb_watchdog_register(struct ssb_bus 
     571                                             bus->busnumber, &wdt, 
     572                                             sizeof(wdt)); 
     573        if (IS_ERR(pdev)) { 
     574-               ssb_dprintk(KERN_INFO PFX 
     575-                           "can not register watchdog device, err: %li\n", 
     576-                           PTR_ERR(pdev)); 
     577+               ssb_dbg("can not register watchdog device, err: %li\n", 
     578+                       PTR_ERR(pdev)); 
     579                return PTR_ERR(pdev); 
     580        } 
     581  
    311582--- a/drivers/ssb/main.c 
    312583+++ b/drivers/ssb/main.c 
    313 @@ -549,6 +549,14 @@ static int ssb_devices_register(struct s 
     584@@ -275,8 +275,8 @@ int ssb_devices_thaw(struct ssb_freeze_c 
     585  
     586                err = sdrv->probe(sdev, &sdev->id); 
     587                if (err) { 
     588-                       ssb_printk(KERN_ERR PFX "Failed to thaw device %s\n", 
     589-                                  dev_name(sdev->dev)); 
     590+                       ssb_err("Failed to thaw device %s\n", 
     591+                               dev_name(sdev->dev)); 
     592                        result = err; 
     593                } 
     594                ssb_device_put(sdev); 
     595@@ -447,10 +447,9 @@ void ssb_bus_unregister(struct ssb_bus * 
     596  
     597        err = ssb_gpio_unregister(bus); 
     598        if (err == -EBUSY) 
     599-               ssb_dprintk(KERN_ERR PFX "Some GPIOs are still in use.\n"); 
     600+               ssb_dbg("Some GPIOs are still in use\n"); 
     601        else if (err) 
     602-               ssb_dprintk(KERN_ERR PFX 
     603-                           "Can not unregister GPIO driver: %i\n", err); 
     604+               ssb_dbg("Can not unregister GPIO driver: %i\n", err); 
     605  
     606        ssb_buses_lock(); 
     607        ssb_devices_unregister(bus); 
     608@@ -497,8 +496,7 @@ static int ssb_devices_register(struct s 
     609  
     610                devwrap = kzalloc(sizeof(*devwrap), GFP_KERNEL); 
     611                if (!devwrap) { 
     612-                       ssb_printk(KERN_ERR PFX 
     613-                                  "Could not allocate device\n"); 
     614+                       ssb_err("Could not allocate device\n"); 
     615                        err = -ENOMEM; 
     616                        goto error; 
     617                } 
     618@@ -537,9 +535,7 @@ static int ssb_devices_register(struct s 
     619                sdev->dev = dev; 
     620                err = device_register(dev); 
     621                if (err) { 
     622-                       ssb_printk(KERN_ERR PFX 
     623-                                  "Could not register %s\n", 
     624-                                  dev_name(dev)); 
     625+                       ssb_err("Could not register %s\n", dev_name(dev)); 
     626                        /* Set dev to NULL to not unregister 
     627                         * dev on error unwinding. */ 
     628                        sdev->dev = NULL; 
     629@@ -549,6 +545,14 @@ static int ssb_devices_register(struct s 
    314630                dev_idx++; 
    315631        } 
     
    326642 error: 
    327643        /* Unwind the already registered devices. */ 
    328 --- a/drivers/ssb/ssb_private.h 
    329 +++ b/drivers/ssb/ssb_private.h 
    330 @@ -217,6 +217,21 @@ extern u32 ssb_chipco_watchdog_timer_set 
    331                                              u32 ticks); 
    332  extern u32 ssb_chipco_watchdog_timer_set_ms(struct bcm47xx_wdt *wdt, u32 ms); 
    333   
    334 +/* driver_chipcommon_sflash.c */ 
    335 +#ifdef CONFIG_SSB_SFLASH 
    336 +int ssb_sflash_init(struct ssb_chipcommon *cc); 
    337 +#else 
    338 +static inline int ssb_sflash_init(struct ssb_chipcommon *cc) 
    339 +{ 
    340 +       pr_err("Serial flash not supported\n"); 
    341 +       return 0; 
    342 +} 
    343 +#endif /* CONFIG_SSB_SFLASH */ 
    344 + 
    345 +#ifdef CONFIG_SSB_DRIVER_MIPS 
    346 +extern struct platform_device ssb_pflash_dev; 
    347 +#endif 
    348 + 
    349  #ifdef CONFIG_SSB_DRIVER_EXTIF 
    350  extern u32 ssb_extif_watchdog_timer_set_wdt(struct bcm47xx_wdt *wdt, u32 ticks); 
    351  extern u32 ssb_extif_watchdog_timer_set_ms(struct bcm47xx_wdt *wdt, u32 ms); 
    352 --- a/include/linux/ssb/ssb_driver_mips.h 
    353 +++ b/include/linux/ssb/ssb_driver_mips.h 
    354 @@ -45,6 +45,11 @@ void ssb_mipscore_init(struct ssb_mipsco 
    355  { 
    356  } 
    357   
    358 +static inline unsigned int ssb_mips_irq(struct ssb_device *dev) 
    359 +{ 
    360 +       return 0; 
    361 +} 
    362 + 
    363  #endif /* CONFIG_SSB_DRIVER_MIPS */ 
    364   
    365  #endif /* LINUX_SSB_MIPSCORE_H_ */ 
     644@@ -817,10 +821,9 @@ static int ssb_bus_register(struct ssb_b 
     645        ssb_mipscore_init(&bus->mipscore); 
     646        err = ssb_gpio_init(bus); 
     647        if (err == -ENOTSUPP) 
     648-               ssb_dprintk(KERN_DEBUG PFX "GPIO driver not activated\n"); 
     649+               ssb_dbg("GPIO driver not activated\n"); 
     650        else if (err) 
     651-               ssb_dprintk(KERN_ERR PFX 
     652-                          "Error registering GPIO driver: %i\n", err); 
     653+               ssb_dbg("Error registering GPIO driver: %i\n", err); 
     654        err = ssb_fetch_invariants(bus, get_invariants); 
     655        if (err) { 
     656                ssb_bus_may_powerdown(bus); 
     657@@ -870,11 +873,11 @@ int ssb_bus_pcibus_register(struct ssb_b 
     658  
     659        err = ssb_bus_register(bus, ssb_pci_get_invariants, 0); 
     660        if (!err) { 
     661-               ssb_printk(KERN_INFO PFX "Sonics Silicon Backplane found on " 
     662-                          "PCI device %s\n", dev_name(&host_pci->dev)); 
     663+               ssb_info("Sonics Silicon Backplane found on PCI device %s\n", 
     664+                        dev_name(&host_pci->dev)); 
     665        } else { 
     666-               ssb_printk(KERN_ERR PFX "Failed to register PCI version" 
     667-                          " of SSB with error %d\n", err); 
     668+               ssb_err("Failed to register PCI version of SSB with error %d\n", 
     669+                       err); 
     670        } 
     671  
     672        return err; 
     673@@ -895,8 +898,8 @@ int ssb_bus_pcmciabus_register(struct ss 
     674  
     675        err = ssb_bus_register(bus, ssb_pcmcia_get_invariants, baseaddr); 
     676        if (!err) { 
     677-               ssb_printk(KERN_INFO PFX "Sonics Silicon Backplane found on " 
     678-                          "PCMCIA device %s\n", pcmcia_dev->devname); 
     679+               ssb_info("Sonics Silicon Backplane found on PCMCIA device %s\n", 
     680+                        pcmcia_dev->devname); 
     681        } 
     682  
     683        return err; 
     684@@ -917,8 +920,8 @@ int ssb_bus_sdiobus_register(struct ssb_ 
     685  
     686        err = ssb_bus_register(bus, ssb_sdio_get_invariants, ~0); 
     687        if (!err) { 
     688-               ssb_printk(KERN_INFO PFX "Sonics Silicon Backplane found on " 
     689-                          "SDIO device %s\n", sdio_func_id(func)); 
     690+               ssb_info("Sonics Silicon Backplane found on SDIO device %s\n", 
     691+                        sdio_func_id(func)); 
     692        } 
     693  
     694        return err; 
     695@@ -936,8 +939,8 @@ int ssb_bus_ssbbus_register(struct ssb_b 
     696  
     697        err = ssb_bus_register(bus, get_invariants, baseaddr); 
     698        if (!err) { 
     699-               ssb_printk(KERN_INFO PFX "Sonics Silicon Backplane found at " 
     700-                          "address 0x%08lX\n", baseaddr); 
     701+               ssb_info("Sonics Silicon Backplane found at address 0x%08lX\n", 
     702+                        baseaddr); 
     703        } 
     704  
     705        return err; 
     706@@ -1331,7 +1334,7 @@ out: 
     707 #endif 
     708        return err; 
     709 error: 
     710-       ssb_printk(KERN_ERR PFX "Bus powerdown failed\n"); 
     711+       ssb_err("Bus powerdown failed\n"); 
     712        goto out; 
     713 } 
     714 EXPORT_SYMBOL(ssb_bus_may_powerdown); 
     715@@ -1354,7 +1357,7 @@ int ssb_bus_powerup(struct ssb_bus *bus, 
     716  
     717        return 0; 
     718 error: 
     719-       ssb_printk(KERN_ERR PFX "Bus powerup failed\n"); 
     720+       ssb_err("Bus powerup failed\n"); 
     721        return err; 
     722 } 
     723 EXPORT_SYMBOL(ssb_bus_powerup); 
     724@@ -1462,15 +1465,13 @@ static int __init ssb_modinit(void) 
     725  
     726        err = b43_pci_ssb_bridge_init(); 
     727        if (err) { 
     728-               ssb_printk(KERN_ERR "Broadcom 43xx PCI-SSB-bridge " 
     729-                          "initialization failed\n"); 
     730+               ssb_err("Broadcom 43xx PCI-SSB-bridge initialization failed\n"); 
     731                /* don't fail SSB init because of this */ 
     732                err = 0; 
     733        } 
     734        err = ssb_gige_init(); 
     735        if (err) { 
     736-               ssb_printk(KERN_ERR "SSB Broadcom Gigabit Ethernet " 
     737-                          "driver initialization failed\n"); 
     738+               ssb_err("SSB Broadcom Gigabit Ethernet driver initialization failed\n"); 
     739                /* don't fail SSB init because of this */ 
     740                err = 0; 
     741        } 
    366742--- a/drivers/ssb/pci.c 
    367743+++ b/drivers/ssb/pci.c 
    368 @@ -339,6 +339,21 @@ static s8 r123_extract_antgain(u8 sprom_ 
     744@@ -56,7 +56,7 @@ int ssb_pci_switch_coreidx(struct ssb_bu 
     745        } 
     746        return 0; 
     747 error: 
     748-       ssb_printk(KERN_ERR PFX "Failed to switch to core %u\n", coreidx); 
     749+       ssb_err("Failed to switch to core %u\n", coreidx); 
     750        return -ENODEV; 
     751 } 
     752  
     753@@ -67,10 +67,9 @@ int ssb_pci_switch_core(struct ssb_bus * 
     754        unsigned long flags; 
     755  
     756 #if SSB_VERBOSE_PCICORESWITCH_DEBUG 
     757-       ssb_printk(KERN_INFO PFX 
     758-                  "Switching to %s core, index %d\n", 
     759-                  ssb_core_name(dev->id.coreid), 
     760-                  dev->core_index); 
     761+       ssb_info("Switching to %s core, index %d\n", 
     762+                ssb_core_name(dev->id.coreid), 
     763+                dev->core_index); 
     764 #endif 
     765  
     766        spin_lock_irqsave(&bus->bar_lock, flags); 
     767@@ -231,6 +230,15 @@ static inline u8 ssb_crc8(u8 crc, u8 dat 
     768        return t[crc ^ data]; 
     769 } 
     770  
     771+static void sprom_get_mac(char *mac, const u16 *in) 
     772+{ 
     773+       int i; 
     774+       for (i = 0; i < 3; i++) { 
     775+               *mac++ = in[i] >> 8; 
     776+               *mac++ = in[i]; 
     777+       } 
     778+} 
     779+ 
     780 static u8 ssb_sprom_crc(const u16 *sprom, u16 size) 
     781 { 
     782        int word; 
     783@@ -278,7 +286,7 @@ static int sprom_do_write(struct ssb_bus 
     784        u32 spromctl; 
     785        u16 size = bus->sprom_size; 
     786  
     787-       ssb_printk(KERN_NOTICE PFX "Writing SPROM. Do NOT turn off the power! Please stand by...\n"); 
     788+       ssb_notice("Writing SPROM. Do NOT turn off the power! Please stand by...\n"); 
     789        err = pci_read_config_dword(pdev, SSB_SPROMCTL, &spromctl); 
     790        if (err) 
     791                goto err_ctlreg; 
     792@@ -286,17 +294,17 @@ static int sprom_do_write(struct ssb_bus 
     793        err = pci_write_config_dword(pdev, SSB_SPROMCTL, spromctl); 
     794        if (err) 
     795                goto err_ctlreg; 
     796-       ssb_printk(KERN_NOTICE PFX "[ 0%%"); 
     797+       ssb_notice("[ 0%%"); 
     798        msleep(500); 
     799        for (i = 0; i < size; i++) { 
     800                if (i == size / 4) 
     801-                       ssb_printk("25%%"); 
     802+                       ssb_cont("25%%"); 
     803                else if (i == size / 2) 
     804-                       ssb_printk("50%%"); 
     805+                       ssb_cont("50%%"); 
     806                else if (i == (size * 3) / 4) 
     807-                       ssb_printk("75%%"); 
     808+                       ssb_cont("75%%"); 
     809                else if (i % 2) 
     810-                       ssb_printk("."); 
     811+                       ssb_cont("."); 
     812                writew(sprom[i], bus->mmio + bus->sprom_offset + (i * 2)); 
     813                mmiowb(); 
     814                msleep(20); 
     815@@ -309,12 +317,12 @@ static int sprom_do_write(struct ssb_bus 
     816        if (err) 
     817                goto err_ctlreg; 
     818        msleep(500); 
     819-       ssb_printk("100%% ]\n"); 
     820-       ssb_printk(KERN_NOTICE PFX "SPROM written.\n"); 
     821+       ssb_cont("100%% ]\n"); 
     822+       ssb_notice("SPROM written\n"); 
     823  
     824        return 0; 
     825 err_ctlreg: 
     826-       ssb_printk(KERN_ERR PFX "Could not access SPROM control register.\n"); 
     827+       ssb_err("Could not access SPROM control register.\n"); 
     828        return err; 
     829 } 
     830  
     831@@ -339,10 +347,23 @@ static s8 r123_extract_antgain(u8 sprom_ 
    369832        return (s8)gain; 
    370833 } 
     
    387850 static void sprom_extract_r123(struct ssb_sprom *out, const u16 *in) 
    388851 { 
    389         int i; 
    390 @@ -398,8 +413,7 @@ static void sprom_extract_r123(struct ss 
     852-       int i; 
     853-       u16 v; 
     854        u16 loc[3]; 
     855  
     856        if (out->revision == 3)                 /* rev 3 moved MAC */ 
     857@@ -352,19 +373,10 @@ static void sprom_extract_r123(struct ss 
     858                loc[1] = SSB_SPROM1_ET0MAC; 
     859                loc[2] = SSB_SPROM1_ET1MAC; 
     860        } 
     861-       for (i = 0; i < 3; i++) { 
     862-               v = in[SPOFF(loc[0]) + i]; 
     863-               *(((__be16 *)out->il0mac) + i) = cpu_to_be16(v); 
     864-       } 
     865+       sprom_get_mac(out->il0mac, &in[SPOFF(loc[0])]); 
     866        if (out->revision < 3) {        /* only rev 1-2 have et0, et1 */ 
     867-               for (i = 0; i < 3; i++) { 
     868-                       v = in[SPOFF(loc[1]) + i]; 
     869-                       *(((__be16 *)out->et0mac) + i) = cpu_to_be16(v); 
     870-               } 
     871-               for (i = 0; i < 3; i++) { 
     872-                       v = in[SPOFF(loc[2]) + i]; 
     873-                       *(((__be16 *)out->et1mac) + i) = cpu_to_be16(v); 
     874-               } 
     875+               sprom_get_mac(out->et0mac, &in[SPOFF(loc[1])]); 
     876+               sprom_get_mac(out->et1mac, &in[SPOFF(loc[2])]); 
     877        } 
     878        SPEX(et0phyaddr, SSB_SPROM1_ETHPHY, SSB_SPROM1_ETHPHY_ET0A, 0); 
     879        SPEX(et1phyaddr, SSB_SPROM1_ETHPHY, SSB_SPROM1_ETHPHY_ET1A, 
     880@@ -372,6 +384,7 @@ static void sprom_extract_r123(struct ss 
     881        SPEX(et0mdcport, SSB_SPROM1_ETHPHY, SSB_SPROM1_ETHPHY_ET0M, 14); 
     882        SPEX(et1mdcport, SSB_SPROM1_ETHPHY, SSB_SPROM1_ETHPHY_ET1M, 15); 
     883        SPEX(board_rev, SSB_SPROM1_BINF, SSB_SPROM1_BINF_BREV, 0); 
     884+       SPEX(board_type, SSB_SPROM1_SPID, 0xFFFF, 0); 
     885        if (out->revision == 1) 
     886                SPEX(country_code, SSB_SPROM1_BINF, SSB_SPROM1_BINF_CCODE, 
     887                     SSB_SPROM1_BINF_CCODE_SHIFT); 
     888@@ -398,8 +411,7 @@ static void sprom_extract_r123(struct ss 
    391889             SSB_SPROM1_ITSSI_A_SHIFT); 
    392890        SPEX(itssi_bg, SSB_SPROM1_ITSSI, SSB_SPROM1_ITSSI_BG, 0); 
     
    398896        SPEX(alpha2[1], SSB_SPROM1_CCODE, 0x00ff, 0); 
    399897  
    400 @@ -410,6 +424,8 @@ static void sprom_extract_r123(struct ss 
     898@@ -410,6 +422,8 @@ static void sprom_extract_r123(struct ss 
    401899        out->antenna_gain.a1 = r123_extract_antgain(out->revision, in, 
    402900                                                    SSB_SPROM1_AGAIN_A, 
     
    407905  
    408906 /* Revs 4 5 and 8 have partially shared layout */ 
     907@@ -454,23 +468,20 @@ static void sprom_extract_r458(struct ss 
     908  
     909 static void sprom_extract_r45(struct ssb_sprom *out, const u16 *in) 
     910 { 
     911-       int i; 
     912-       u16 v; 
     913        u16 il0mac_offset; 
     914  
     915        if (out->revision == 4) 
     916                il0mac_offset = SSB_SPROM4_IL0MAC; 
     917        else 
     918                il0mac_offset = SSB_SPROM5_IL0MAC; 
     919-       /* extract the MAC address */ 
     920-       for (i = 0; i < 3; i++) { 
     921-               v = in[SPOFF(il0mac_offset) + i]; 
     922-               *(((__be16 *)out->il0mac) + i) = cpu_to_be16(v); 
     923-       } 
     924+ 
     925+       sprom_get_mac(out->il0mac, &in[SPOFF(il0mac_offset)]); 
     926+ 
     927        SPEX(et0phyaddr, SSB_SPROM4_ETHPHY, SSB_SPROM4_ETHPHY_ET0A, 0); 
     928        SPEX(et1phyaddr, SSB_SPROM4_ETHPHY, SSB_SPROM4_ETHPHY_ET1A, 
     929             SSB_SPROM4_ETHPHY_ET1A_SHIFT); 
     930        SPEX(board_rev, SSB_SPROM4_BOARDREV, 0xFFFF, 0); 
     931+       SPEX(board_type, SSB_SPROM1_SPID, 0xFFFF, 0); 
     932        if (out->revision == 4) { 
     933                SPEX(alpha2[0], SSB_SPROM4_CCODE, 0xff00, 8); 
     934                SPEX(alpha2[1], SSB_SPROM4_CCODE, 0x00ff, 0); 
     935@@ -530,7 +541,7 @@ static void sprom_extract_r45(struct ssb 
     936 static void sprom_extract_r8(struct ssb_sprom *out, const u16 *in) 
     937 { 
     938        int i; 
     939-       u16 v, o; 
     940+       u16 o; 
     941        u16 pwr_info_offset[] = { 
     942                SSB_SROM8_PWR_INFO_CORE0, SSB_SROM8_PWR_INFO_CORE1, 
     943                SSB_SROM8_PWR_INFO_CORE2, SSB_SROM8_PWR_INFO_CORE3 
     944@@ -539,11 +550,10 @@ static void sprom_extract_r8(struct ssb_ 
     945                        ARRAY_SIZE(out->core_pwr_info)); 
     946  
     947        /* extract the MAC address */ 
     948-       for (i = 0; i < 3; i++) { 
     949-               v = in[SPOFF(SSB_SPROM8_IL0MAC) + i]; 
     950-               *(((__be16 *)out->il0mac) + i) = cpu_to_be16(v); 
     951-       } 
     952+       sprom_get_mac(out->il0mac, &in[SPOFF(SSB_SPROM8_IL0MAC)]); 
     953+ 
     954        SPEX(board_rev, SSB_SPROM8_BOARDREV, 0xFFFF, 0); 
     955+       SPEX(board_type, SSB_SPROM1_SPID, 0xFFFF, 0); 
     956        SPEX(alpha2[0], SSB_SPROM8_CCODE, 0xff00, 8); 
     957        SPEX(alpha2[1], SSB_SPROM8_CCODE, 0x00ff, 0); 
     958        SPEX(boardflags_lo, SSB_SPROM8_BFLLO, 0xFFFF, 0); 
     959@@ -743,7 +753,7 @@ static int sprom_extract(struct ssb_bus 
     960        memset(out, 0, sizeof(*out)); 
     961  
     962        out->revision = in[size - 1] & 0x00FF; 
     963-       ssb_dprintk(KERN_DEBUG PFX "SPROM revision %d detected.\n", out->revision); 
     964+       ssb_dbg("SPROM revision %d detected\n", out->revision); 
     965        memset(out->et0mac, 0xFF, 6);           /* preset et0 and et1 mac */ 
     966        memset(out->et1mac, 0xFF, 6); 
     967  
     968@@ -752,7 +762,7 @@ static int sprom_extract(struct ssb_bus 
     969                 * number stored in the SPROM. 
     970                 * Always extract r1. */ 
     971                out->revision = 1; 
     972-               ssb_dprintk(KERN_DEBUG PFX "SPROM treated as revision %d\n", out->revision); 
     973+               ssb_dbg("SPROM treated as revision %d\n", out->revision); 
     974        } 
     975  
     976        switch (out->revision) { 
     977@@ -769,9 +779,8 @@ static int sprom_extract(struct ssb_bus 
     978                sprom_extract_r8(out, in); 
     979                break; 
     980        default: 
     981-               ssb_printk(KERN_WARNING PFX "Unsupported SPROM" 
     982-                          " revision %d detected. Will extract" 
     983-                          " v1\n", out->revision); 
     984+               ssb_warn("Unsupported SPROM revision %d detected. Will extract v1\n", 
     985+                        out->revision); 
     986                out->revision = 1; 
     987                sprom_extract_r123(out, in); 
     988        } 
     989@@ -791,7 +800,7 @@ static int ssb_pci_sprom_get(struct ssb_ 
     990        u16 *buf; 
     991  
     992        if (!ssb_is_sprom_available(bus)) { 
     993-               ssb_printk(KERN_ERR PFX "No SPROM available!\n"); 
     994+               ssb_err("No SPROM available!\n"); 
     995                return -ENODEV; 
     996        } 
     997        if (bus->chipco.dev) {  /* can be unavailable! */ 
     998@@ -810,7 +819,7 @@ static int ssb_pci_sprom_get(struct ssb_ 
     999        } else { 
     1000                bus->sprom_offset = SSB_SPROM_BASE1; 
     1001        } 
     1002-       ssb_dprintk(KERN_INFO PFX "SPROM offset is 0x%x\n", bus->sprom_offset); 
     1003+       ssb_dbg("SPROM offset is 0x%x\n", bus->sprom_offset); 
     1004  
     1005        buf = kcalloc(SSB_SPROMSIZE_WORDS_R123, sizeof(u16), GFP_KERNEL); 
     1006        if (!buf) 
     1007@@ -835,18 +844,15 @@ static int ssb_pci_sprom_get(struct ssb_ 
     1008                         * available for this device in some other storage */ 
     1009                        err = ssb_fill_sprom_with_fallback(bus, sprom); 
     1010                        if (err) { 
     1011-                               ssb_printk(KERN_WARNING PFX "WARNING: Using" 
     1012-                                          " fallback SPROM failed (err %d)\n", 
     1013-                                          err); 
     1014+                               ssb_warn("WARNING: Using fallback SPROM failed (err %d)\n", 
     1015+                                        err); 
     1016                        } else { 
     1017-                               ssb_dprintk(KERN_DEBUG PFX "Using SPROM" 
     1018-                                           " revision %d provided by" 
     1019-                                           " platform.\n", sprom->revision); 
     1020+                               ssb_dbg("Using SPROM revision %d provided by platform\n", 
     1021+                                       sprom->revision); 
     1022                                err = 0; 
     1023                                goto out_free; 
     1024                        } 
     1025-                       ssb_printk(KERN_WARNING PFX "WARNING: Invalid" 
     1026-                                  " SPROM CRC (corrupt SPROM)\n"); 
     1027+                       ssb_warn("WARNING: Invalid SPROM CRC (corrupt SPROM)\n"); 
     1028                } 
     1029        } 
     1030        err = sprom_extract(bus, sprom, buf, bus->sprom_size); 
     1031--- a/drivers/ssb/pcmcia.c 
     1032+++ b/drivers/ssb/pcmcia.c 
     1033@@ -143,7 +143,7 @@ int ssb_pcmcia_switch_coreidx(struct ssb 
     1034  
     1035        return 0; 
     1036 error: 
     1037-       ssb_printk(KERN_ERR PFX "Failed to switch to core %u\n", coreidx); 
     1038+       ssb_err("Failed to switch to core %u\n", coreidx); 
     1039        return err; 
     1040 } 
     1041  
     1042@@ -153,10 +153,9 @@ int ssb_pcmcia_switch_core(struct ssb_bu 
     1043        int err; 
     1044  
     1045 #if SSB_VERBOSE_PCMCIACORESWITCH_DEBUG 
     1046-       ssb_printk(KERN_INFO PFX 
     1047-                  "Switching to %s core, index %d\n", 
     1048-                  ssb_core_name(dev->id.coreid), 
     1049-                  dev->core_index); 
     1050+       ssb_info("Switching to %s core, index %d\n", 
     1051+                ssb_core_name(dev->id.coreid), 
     1052+                dev->core_index); 
     1053 #endif 
     1054  
     1055        err = ssb_pcmcia_switch_coreidx(bus, dev->core_index); 
     1056@@ -192,7 +191,7 @@ int ssb_pcmcia_switch_segment(struct ssb 
     1057  
     1058        return 0; 
     1059 error: 
     1060-       ssb_printk(KERN_ERR PFX "Failed to switch pcmcia segment\n"); 
     1061+       ssb_err("Failed to switch pcmcia segment\n"); 
     1062        return err; 
     1063 } 
     1064  
     1065@@ -549,44 +548,39 @@ static int ssb_pcmcia_sprom_write_all(st 
     1066        bool failed = 0; 
     1067        size_t size = SSB_PCMCIA_SPROM_SIZE; 
     1068  
     1069-       ssb_printk(KERN_NOTICE PFX 
     1070-                  "Writing SPROM. Do NOT turn off the power! " 
     1071-                  "Please stand by...\n"); 
     1072+       ssb_notice("Writing SPROM. Do NOT turn off the power! Please stand by...\n"); 
     1073        err = ssb_pcmcia_sprom_command(bus, SSB_PCMCIA_SPROMCTL_WRITEEN); 
     1074        if (err) { 
     1075-               ssb_printk(KERN_NOTICE PFX 
     1076-                          "Could not enable SPROM write access.\n"); 
     1077+               ssb_notice("Could not enable SPROM write access\n"); 
     1078                return -EBUSY; 
     1079        } 
     1080-       ssb_printk(KERN_NOTICE PFX "[ 0%%"); 
     1081+       ssb_notice("[ 0%%"); 
     1082        msleep(500); 
     1083        for (i = 0; i < size; i++) { 
     1084                if (i == size / 4) 
     1085-                       ssb_printk("25%%"); 
     1086+                       ssb_cont("25%%"); 
     1087                else if (i == size / 2) 
     1088-                       ssb_printk("50%%"); 
     1089+                       ssb_cont("50%%"); 
     1090                else if (i == (size * 3) / 4) 
     1091-                       ssb_printk("75%%"); 
     1092+                       ssb_cont("75%%"); 
     1093                else if (i % 2) 
     1094-                       ssb_printk("."); 
     1095+                       ssb_cont("."); 
     1096                err = ssb_pcmcia_sprom_write(bus, i, sprom[i]); 
     1097                if (err) { 
     1098-                       ssb_printk(KERN_NOTICE PFX 
     1099-                                  "Failed to write to SPROM.\n"); 
     1100+                       ssb_notice("Failed to write to SPROM\n"); 
     1101                        failed = 1; 
     1102                        break; 
     1103                } 
     1104        } 
     1105        err = ssb_pcmcia_sprom_command(bus, SSB_PCMCIA_SPROMCTL_WRITEDIS); 
     1106        if (err) { 
     1107-               ssb_printk(KERN_NOTICE PFX 
     1108-                          "Could not disable SPROM write access.\n"); 
     1109+               ssb_notice("Could not disable SPROM write access\n"); 
     1110                failed = 1; 
     1111        } 
     1112        msleep(500); 
     1113        if (!failed) { 
     1114-               ssb_printk("100%% ]\n"); 
     1115-               ssb_printk(KERN_NOTICE PFX "SPROM written.\n"); 
     1116+               ssb_cont("100%% ]\n"); 
     1117+               ssb_notice("SPROM written\n"); 
     1118        } 
     1119  
     1120        return failed ? -EBUSY : 0; 
     1121@@ -700,7 +694,7 @@ static int ssb_pcmcia_do_get_invariants( 
     1122        return -ENOSPC; /* continue with next entry */ 
     1123  
     1124 error: 
     1125-       ssb_printk(KERN_ERR PFX 
     1126+       ssb_err( 
     1127                   "PCMCIA: Failed to fetch device invariants: %s\n", 
     1128                   error_description); 
     1129        return -ENODEV; 
     1130@@ -722,7 +716,7 @@ int ssb_pcmcia_get_invariants(struct ssb 
     1131        res = pcmcia_loop_tuple(bus->host_pcmcia, CISTPL_FUNCE, 
     1132                                ssb_pcmcia_get_mac, sprom); 
     1133        if (res != 0) { 
     1134-               ssb_printk(KERN_ERR PFX 
     1135+               ssb_err( 
     1136                        "PCMCIA: Failed to fetch MAC address\n"); 
     1137                return -ENODEV; 
     1138        } 
     1139@@ -733,7 +727,7 @@ int ssb_pcmcia_get_invariants(struct ssb 
     1140        if ((res == 0) || (res == -ENOSPC)) 
     1141                return 0; 
     1142  
     1143-       ssb_printk(KERN_ERR PFX 
     1144+       ssb_err( 
     1145                        "PCMCIA: Failed to fetch device invariants\n"); 
     1146        return -ENODEV; 
     1147 } 
     1148@@ -843,6 +837,6 @@ int ssb_pcmcia_init(struct ssb_bus *bus) 
     1149  
     1150        return 0; 
     1151 error: 
     1152-       ssb_printk(KERN_ERR PFX "Failed to initialize PCMCIA host device\n"); 
     1153+       ssb_err("Failed to initialize PCMCIA host device\n"); 
     1154        return err; 
     1155 } 
     1156--- a/drivers/ssb/scan.c 
     1157+++ b/drivers/ssb/scan.c 
     1158@@ -125,8 +125,7 @@ static u16 pcidev_to_chipid(struct pci_d 
     1159                chipid_fallback = 0x4401; 
     1160                break; 
     1161        default: 
     1162-               ssb_printk(KERN_ERR PFX 
     1163-                          "PCI-ID not in fallback list\n"); 
     1164+               ssb_err("PCI-ID not in fallback list\n"); 
     1165        } 
     1166  
     1167        return chipid_fallback; 
     1168@@ -152,8 +151,7 @@ static u8 chipid_to_nrcores(u16 chipid) 
     1169        case 0x4704: 
     1170                return 9; 
     1171        default: 
     1172-               ssb_printk(KERN_ERR PFX 
     1173-                          "CHIPID not in nrcores fallback list\n"); 
     1174+               ssb_err("CHIPID not in nrcores fallback list\n"); 
     1175        } 
     1176  
     1177        return 1; 
     1178@@ -320,15 +318,13 @@ int ssb_bus_scan(struct ssb_bus *bus, 
     1179                        bus->chip_package = 0; 
     1180                } 
     1181        } 
     1182-       ssb_printk(KERN_INFO PFX "Found chip with id 0x%04X, rev 0x%02X and " 
     1183-                  "package 0x%02X\n", bus->chip_id, bus->chip_rev, 
     1184-                  bus->chip_package); 
     1185+       ssb_info("Found chip with id 0x%04X, rev 0x%02X and package 0x%02X\n", 
     1186+                bus->chip_id, bus->chip_rev, bus->chip_package); 
     1187        if (!bus->nr_devices) 
     1188                bus->nr_devices = chipid_to_nrcores(bus->chip_id); 
     1189        if (bus->nr_devices > ARRAY_SIZE(bus->devices)) { 
     1190-               ssb_printk(KERN_ERR PFX 
     1191-                          "More than %d ssb cores found (%d)\n", 
     1192-                          SSB_MAX_NR_CORES, bus->nr_devices); 
     1193+               ssb_err("More than %d ssb cores found (%d)\n", 
     1194+                       SSB_MAX_NR_CORES, bus->nr_devices); 
     1195                goto err_unmap; 
     1196        } 
     1197        if (bus->bustype == SSB_BUSTYPE_SSB) { 
     1198@@ -370,8 +366,7 @@ int ssb_bus_scan(struct ssb_bus *bus, 
     1199                        nr_80211_cores++; 
     1200                        if (nr_80211_cores > 1) { 
     1201                                if (!we_support_multiple_80211_cores(bus)) { 
     1202-                                       ssb_dprintk(KERN_INFO PFX "Ignoring additional " 
     1203-                                                   "802.11 core\n"); 
     1204+                                       ssb_dbg("Ignoring additional 802.11 core\n"); 
     1205                                        continue; 
     1206                                } 
     1207                        } 
     1208@@ -379,8 +374,7 @@ int ssb_bus_scan(struct ssb_bus *bus, 
     1209                case SSB_DEV_EXTIF: 
     1210 #ifdef CONFIG_SSB_DRIVER_EXTIF 
     1211                        if (bus->extif.dev) { 
     1212-                               ssb_printk(KERN_WARNING PFX 
     1213-                                          "WARNING: Multiple EXTIFs found\n"); 
     1214+                               ssb_warn("WARNING: Multiple EXTIFs found\n"); 
     1215                                break; 
     1216                        } 
     1217                        bus->extif.dev = dev; 
     1218@@ -388,8 +382,7 @@ int ssb_bus_scan(struct ssb_bus *bus, 
     1219                        break; 
     1220                case SSB_DEV_CHIPCOMMON: 
     1221                        if (bus->chipco.dev) { 
     1222-                               ssb_printk(KERN_WARNING PFX 
     1223-                                          "WARNING: Multiple ChipCommon found\n"); 
     1224+                               ssb_warn("WARNING: Multiple ChipCommon found\n"); 
     1225                                break; 
     1226                        } 
     1227                        bus->chipco.dev = dev; 
     1228@@ -398,8 +391,7 @@ int ssb_bus_scan(struct ssb_bus *bus, 
     1229                case SSB_DEV_MIPS_3302: 
     1230 #ifdef CONFIG_SSB_DRIVER_MIPS 
     1231                        if (bus->mipscore.dev) { 
     1232-                               ssb_printk(KERN_WARNING PFX 
     1233-                                          "WARNING: Multiple MIPS cores found\n"); 
     1234+                               ssb_warn("WARNING: Multiple MIPS cores found\n"); 
     1235                                break; 
     1236                        } 
     1237                        bus->mipscore.dev = dev; 
     1238@@ -420,8 +412,7 @@ int ssb_bus_scan(struct ssb_bus *bus, 
     1239                                } 
     1240                        } 
     1241                        if (bus->pcicore.dev) { 
     1242-                               ssb_printk(KERN_WARNING PFX 
     1243-                                          "WARNING: Multiple PCI(E) cores found\n"); 
     1244+                               ssb_warn("WARNING: Multiple PCI(E) cores found\n"); 
     1245                                break; 
     1246                        } 
     1247                        bus->pcicore.dev = dev; 
     1248--- a/drivers/ssb/sprom.c 
     1249+++ b/drivers/ssb/sprom.c 
     1250@@ -127,13 +127,13 @@ ssize_t ssb_attr_sprom_store(struct ssb_ 
     1251                goto out_kfree; 
     1252        err = ssb_devices_freeze(bus, &freeze); 
     1253        if (err) { 
     1254-               ssb_printk(KERN_ERR PFX "SPROM write: Could not freeze all devices\n"); 
     1255+               ssb_err("SPROM write: Could not freeze all devices\n"); 
     1256                goto out_unlock; 
     1257        } 
     1258        res = sprom_write(bus, sprom); 
     1259        err = ssb_devices_thaw(&freeze); 
     1260        if (err) 
     1261-               ssb_printk(KERN_ERR PFX "SPROM write: Could not thaw all devices\n"); 
     1262+               ssb_err("SPROM write: Could not thaw all devices\n"); 
     1263 out_unlock: 
     1264        mutex_unlock(&bus->sprom_mutex); 
     1265 out_kfree: 
     1266--- a/drivers/ssb/ssb_private.h 
     1267+++ b/drivers/ssb/ssb_private.h 
     1268@@ -9,16 +9,27 @@ 
     1269 #define PFX    "ssb: " 
     1270  
     1271 #ifdef CONFIG_SSB_SILENT 
     1272-# define ssb_printk(fmt, x...) do { /* nothing */ } while (0) 
     1273+# define ssb_printk(fmt, ...)                                  \ 
     1274+       do { if (0) printk(fmt, ##__VA_ARGS__); } while (0) 
     1275 #else 
     1276-# define ssb_printk            printk 
     1277+# define ssb_printk(fmt, ...)                                  \ 
     1278+       printk(fmt, ##__VA_ARGS__) 
     1279 #endif /* CONFIG_SSB_SILENT */ 
     1280  
     1281+#define ssb_emerg(fmt, ...)    ssb_printk(KERN_EMERG PFX fmt, ##__VA_ARGS__) 
     1282+#define ssb_err(fmt, ...)      ssb_printk(KERN_ERR PFX fmt, ##__VA_ARGS__) 
     1283+#define ssb_warn(fmt, ...)     ssb_printk(KERN_WARNING PFX fmt, ##__VA_ARGS__) 
     1284+#define ssb_notice(fmt, ...)   ssb_printk(KERN_NOTICE PFX fmt, ##__VA_ARGS__) 
     1285+#define ssb_info(fmt, ...)     ssb_printk(KERN_INFO PFX fmt, ##__VA_ARGS__) 
     1286+#define ssb_cont(fmt, ...)     ssb_printk(KERN_CONT fmt, ##__VA_ARGS__) 
     1287+ 
     1288 /* dprintk: Debugging printk; vanishes for non-debug compilation */ 
     1289 #ifdef CONFIG_SSB_DEBUG 
     1290-# define ssb_dprintk(fmt, x...)        ssb_printk(fmt , ##x) 
     1291+# define ssb_dbg(fmt, ...)                                     \ 
     1292+       ssb_printk(KERN_DEBUG PFX fmt, ##__VA_ARGS__) 
     1293 #else 
     1294-# define ssb_dprintk(fmt, x...)        do { /* nothing */ } while (0) 
     1295+# define ssb_dbg(fmt, ...)                                     \ 
     1296+       do { if (0) printk(KERN_DEBUG PFX fmt, ##__VA_ARGS__); } while (0) 
     1297 #endif 
     1298  
     1299 #ifdef CONFIG_SSB_DEBUG 
     1300@@ -217,6 +228,21 @@ extern u32 ssb_chipco_watchdog_timer_set 
     1301                                             u32 ticks); 
     1302 extern u32 ssb_chipco_watchdog_timer_set_ms(struct bcm47xx_wdt *wdt, u32 ms); 
     1303  
     1304+/* driver_chipcommon_sflash.c */ 
     1305+#ifdef CONFIG_SSB_SFLASH 
     1306+int ssb_sflash_init(struct ssb_chipcommon *cc); 
     1307+#else 
     1308+static inline int ssb_sflash_init(struct ssb_chipcommon *cc) 
     1309+{ 
     1310+       pr_err("Serial flash not supported\n"); 
     1311+       return 0; 
     1312+} 
     1313+#endif /* CONFIG_SSB_SFLASH */ 
     1314+ 
     1315+#ifdef CONFIG_SSB_DRIVER_MIPS 
     1316+extern struct platform_device ssb_pflash_dev; 
     1317+#endif 
     1318+ 
     1319 #ifdef CONFIG_SSB_DRIVER_EXTIF 
     1320 extern u32 ssb_extif_watchdog_timer_set_wdt(struct bcm47xx_wdt *wdt, u32 ticks); 
     1321 extern u32 ssb_extif_watchdog_timer_set_ms(struct bcm47xx_wdt *wdt, u32 ms); 
     1322--- a/include/linux/ssb/ssb.h 
     1323+++ b/include/linux/ssb/ssb.h 
     1324@@ -26,9 +26,9 @@ struct ssb_sprom_core_pwr_info { 
     1325  
     1326 struct ssb_sprom { 
     1327        u8 revision; 
     1328-       u8 il0mac[6];           /* MAC address for 802.11b/g */ 
     1329-       u8 et0mac[6];           /* MAC address for Ethernet */ 
     1330-       u8 et1mac[6];           /* MAC address for 802.11a */ 
     1331+       u8 il0mac[6] __aligned(sizeof(u16));    /* MAC address for 802.11b/g */ 
     1332+       u8 et0mac[6] __aligned(sizeof(u16));    /* MAC address for Ethernet */ 
     1333+       u8 et1mac[6] __aligned(sizeof(u16));    /* MAC address for 802.11a */ 
     1334        u8 et0phyaddr;          /* MII address for enet0 */ 
     1335        u8 et1phyaddr;          /* MII address for enet1 */ 
     1336        u8 et0mdcport;          /* MDIO for enet0 */ 
     1337@@ -340,13 +340,61 @@ enum ssb_bustype { 
     1338 #define SSB_BOARDVENDOR_DELL   0x1028  /* Dell */ 
     1339 #define SSB_BOARDVENDOR_HP     0x0E11  /* HP */ 
     1340 /* board_type */ 
     1341+#define SSB_BOARD_BCM94301CB   0x0406 
     1342+#define SSB_BOARD_BCM94301MP   0x0407 
     1343+#define SSB_BOARD_BU4309       0x040A 
     1344+#define SSB_BOARD_BCM94309CB   0x040B 
     1345+#define SSB_BOARD_BCM4309MP    0x040C 
     1346+#define SSB_BOARD_BU4306       0x0416 
     1347 #define SSB_BOARD_BCM94306MP   0x0418 
     1348 #define SSB_BOARD_BCM4309G     0x0421 
     1349 #define SSB_BOARD_BCM4306CB    0x0417 
     1350-#define SSB_BOARD_BCM4309MP    0x040C 
     1351+#define SSB_BOARD_BCM94306PC   0x0425  /* pcmcia 3.3v 4306 card */ 
     1352+#define SSB_BOARD_BCM94306CBSG 0x042B  /* with SiGe PA */ 
     1353+#define SSB_BOARD_PCSG94306    0x042D  /* with SiGe PA */ 
     1354+#define SSB_BOARD_BU4704SD     0x042E  /* with sdram */ 
     1355+#define SSB_BOARD_BCM94704AGR  0x042F  /* dual 11a/11g Router */ 
     1356+#define SSB_BOARD_BCM94308MP   0x0430  /* 11a-only minipci */ 
     1357+#define SSB_BOARD_BU4318       0x0447 
     1358+#define SSB_BOARD_CB4318       0x0448 
     1359+#define SSB_BOARD_MPG4318      0x0449 
     1360 #define SSB_BOARD_MP4318       0x044A 
     1361-#define SSB_BOARD_BU4306       0x0416 
     1362-#define SSB_BOARD_BU4309       0x040A 
     1363+#define SSB_BOARD_SD4318       0x044B 
     1364+#define SSB_BOARD_BCM94306P    0x044C  /* with SiGe */ 
     1365+#define SSB_BOARD_BCM94303MP   0x044E 
     1366+#define SSB_BOARD_BCM94306MPM  0x0450 
     1367+#define SSB_BOARD_BCM94306MPL  0x0453 
     1368+#define SSB_BOARD_PC4303       0x0454  /* pcmcia */ 
     1369+#define SSB_BOARD_BCM94306MPLNA        0x0457 
     1370+#define SSB_BOARD_BCM94306MPH  0x045B 
     1371+#define SSB_BOARD_BCM94306PCIV 0x045C 
     1372+#define SSB_BOARD_BCM94318MPGH 0x0463 
     1373+#define SSB_BOARD_BU4311       0x0464 
     1374+#define SSB_BOARD_BCM94311MC   0x0465 
     1375+#define SSB_BOARD_BCM94311MCAG 0x0466 
     1376+/* 4321 boards */ 
     1377+#define SSB_BOARD_BU4321       0x046B 
     1378+#define SSB_BOARD_BU4321E      0x047C 
     1379+#define SSB_BOARD_MP4321       0x046C 
     1380+#define SSB_BOARD_CB2_4321     0x046D 
     1381+#define SSB_BOARD_CB2_4321_AG  0x0066 
     1382+#define SSB_BOARD_MC4321       0x046E 
     1383+/* 4325 boards */ 
     1384+#define SSB_BOARD_BCM94325DEVBU        0x0490 
     1385+#define SSB_BOARD_BCM94325BGABU        0x0491 
     1386+#define SSB_BOARD_BCM94325SDGWB        0x0492 
     1387+#define SSB_BOARD_BCM94325SDGMDL       0x04AA 
     1388+#define SSB_BOARD_BCM94325SDGMDL2      0x04C6 
     1389+#define SSB_BOARD_BCM94325SDGMDL3      0x04C9 
     1390+#define SSB_BOARD_BCM94325SDABGWBA     0x04E1 
     1391+/* 4322 boards */ 
     1392+#define SSB_BOARD_BCM94322MC   0x04A4 
     1393+#define SSB_BOARD_BCM94322USB  0x04A8  /* dualband */ 
     1394+#define SSB_BOARD_BCM94322HM   0x04B0 
     1395+#define SSB_BOARD_BCM94322USB2D        0x04Bf  /* single band discrete front end */ 
     1396+/* 4312 boards */ 
     1397+#define SSB_BOARD_BU4312       0x048A 
     1398+#define SSB_BOARD_BCM4312MCGSG 0x04B5 
     1399 /* chip_package */ 
     1400 #define SSB_CHIPPACK_BCM4712S  1       /* Small 200pin 4712 */ 
     1401 #define SSB_CHIPPACK_BCM4712M  2       /* Medium 225pin 4712 */ 
     1402--- a/include/linux/ssb/ssb_driver_gige.h 
     1403+++ b/include/linux/ssb/ssb_driver_gige.h 
     1404@@ -97,21 +97,16 @@ static inline bool ssb_gige_must_flush_p 
     1405        return 0; 
     1406 } 
     1407  
     1408-#ifdef CONFIG_BCM47XX 
     1409-#include <asm/mach-bcm47xx/nvram.h> 
     1410 /* Get the device MAC address */ 
     1411-static inline void ssb_gige_get_macaddr(struct pci_dev *pdev, u8 *macaddr) 
     1412-{ 
     1413-       char buf[20]; 
     1414-       if (nvram_getenv("et0macaddr", buf, sizeof(buf)) < 0) 
     1415-               return; 
     1416-       nvram_parse_macaddr(buf, macaddr); 
     1417-} 
     1418-#else 
     1419-static inline void ssb_gige_get_macaddr(struct pci_dev *pdev, u8 *macaddr) 
     1420+static inline int ssb_gige_get_macaddr(struct pci_dev *pdev, u8 *macaddr) 
     1421 { 
     1422+       struct ssb_gige *dev = pdev_to_ssb_gige(pdev); 
     1423+       if (!dev) 
     1424+               return -ENODEV; 
     1425+ 
     1426+       memcpy(macaddr, dev->dev->bus->sprom.et0mac, 6); 
     1427+       return 0; 
     1428 } 
     1429-#endif 
     1430  
     1431 extern int ssb_gige_pcibios_plat_dev_init(struct ssb_device *sdev, 
     1432                                          struct pci_dev *pdev); 
     1433@@ -175,6 +170,10 @@ static inline bool ssb_gige_must_flush_p 
     1434 { 
     1435        return 0; 
     1436 } 
     1437+static inline int ssb_gige_get_macaddr(struct pci_dev *pdev, u8 *macaddr) 
     1438+{ 
     1439+       return -ENODEV; 
     1440+} 
     1441  
     1442 #endif /* CONFIG_SSB_DRIVER_GIGE */ 
     1443 #endif /* LINUX_SSB_DRIVER_GIGE_H_ */ 
     1444--- a/include/linux/ssb/ssb_driver_mips.h 
     1445+++ b/include/linux/ssb/ssb_driver_mips.h 
     1446@@ -45,6 +45,11 @@ void ssb_mipscore_init(struct ssb_mipsco 
     1447 { 
     1448 } 
     1449  
     1450+static inline unsigned int ssb_mips_irq(struct ssb_device *dev) 
     1451+{ 
     1452+       return 0; 
     1453+} 
     1454+ 
     1455 #endif /* CONFIG_SSB_DRIVER_MIPS */ 
     1456  
     1457 #endif /* LINUX_SSB_MIPSCORE_H_ */ 
    4091458--- a/include/linux/ssb/ssb_regs.h 
    4101459+++ b/include/linux/ssb/ssb_regs.h 
  • trunk/target/linux/generic/patches-3.8/025-bcma_backport.patch

    r36468 r36473  
    2929  
    3030 /* driver_chipcommon_pmu.c */ 
     31--- a/drivers/bcma/core.c 
     32+++ b/drivers/bcma/core.c 
     33@@ -104,7 +104,13 @@ void bcma_core_pll_ctl(struct bcma_devic 
     34                if (i) 
     35                        bcma_err(core->bus, "PLL enable timeout\n"); 
     36        } else { 
     37-               bcma_warn(core->bus, "Disabling PLL not supported yet!\n"); 
     38+               /* 
     39+                * Mask the PLL but don't wait for it to be disabled. PLL may be 
     40+                * shared between cores and will be still up if there is another 
     41+                * core using it. 
     42+                */ 
     43+               bcma_mask32(core, BCMA_CLKCTLST, ~req); 
     44+               bcma_read32(core, BCMA_CLKCTLST); 
     45        } 
     46 } 
     47 EXPORT_SYMBOL_GPL(bcma_core_pll_ctl); 
    3148--- a/drivers/bcma/driver_chipcommon.c 
    3249+++ b/drivers/bcma/driver_chipcommon.c 
     
    88105        .name           = "bcma_nflash", 
    89106        .num_resources  = 0, 
     107--- a/drivers/bcma/driver_chipcommon_pmu.c 
     108+++ b/drivers/bcma/driver_chipcommon_pmu.c 
     109@@ -174,19 +174,35 @@ u32 bcma_pmu_get_alp_clock(struct bcma_d 
     110        struct bcma_bus *bus = cc->core->bus; 
     111  
     112        switch (bus->chipinfo.id) { 
     113+       case BCMA_CHIP_ID_BCM4313: 
     114+       case BCMA_CHIP_ID_BCM43224: 
     115+       case BCMA_CHIP_ID_BCM43225: 
     116+       case BCMA_CHIP_ID_BCM43227: 
     117+       case BCMA_CHIP_ID_BCM43228: 
     118+       case BCMA_CHIP_ID_BCM4331: 
     119+       case BCMA_CHIP_ID_BCM43421: 
     120+       case BCMA_CHIP_ID_BCM43428: 
     121+       case BCMA_CHIP_ID_BCM43431: 
     122        case BCMA_CHIP_ID_BCM4716: 
     123-       case BCMA_CHIP_ID_BCM4748: 
     124        case BCMA_CHIP_ID_BCM47162: 
     125-       case BCMA_CHIP_ID_BCM4313: 
     126-       case BCMA_CHIP_ID_BCM5357: 
     127+       case BCMA_CHIP_ID_BCM4748: 
     128        case BCMA_CHIP_ID_BCM4749: 
     129+       case BCMA_CHIP_ID_BCM5357: 
     130        case BCMA_CHIP_ID_BCM53572: 
     131+       case BCMA_CHIP_ID_BCM6362: 
     132                /* always 20Mhz */ 
     133                return 20000 * 1000; 
     134-       case BCMA_CHIP_ID_BCM5356: 
     135        case BCMA_CHIP_ID_BCM4706: 
     136+       case BCMA_CHIP_ID_BCM5356: 
     137                /* always 25Mhz */ 
     138                return 25000 * 1000; 
     139+       case BCMA_CHIP_ID_BCM43460: 
     140+       case BCMA_CHIP_ID_BCM4352: 
     141+       case BCMA_CHIP_ID_BCM4360: 
     142+               if (cc->status & BCMA_CC_CHIPST_4360_XTAL_40MZ) 
     143+                       return 40000 * 1000; 
     144+               else 
     145+                       return 20000 * 1000; 
     146        default: 
     147                bcma_warn(bus, "No ALP clock specified for %04X device, pmu rev. %d, using default %d Hz\n", 
     148                          bus->chipinfo.id, cc->pmu.rev, BCMA_CC_PMU_ALP_CLOCK); 
     149@@ -264,7 +280,7 @@ static u32 bcma_pmu_pll_clock_bcm4706(st 
     150 } 
     151  
     152 /* query bus clock frequency for PMU-enabled chipcommon */ 
     153-static u32 bcma_pmu_get_bus_clock(struct bcma_drv_cc *cc) 
     154+u32 bcma_pmu_get_bus_clock(struct bcma_drv_cc *cc) 
     155 { 
     156        struct bcma_bus *bus = cc->core->bus; 
     157  
     158@@ -293,6 +309,7 @@ static u32 bcma_pmu_get_bus_clock(struct 
     159        } 
     160        return BCMA_CC_PMU_HT_CLOCK; 
     161 } 
     162+EXPORT_SYMBOL_GPL(bcma_pmu_get_bus_clock); 
     163  
     164 /* query cpu clock frequency for PMU-enabled chipcommon */ 
     165 u32 bcma_pmu_get_cpu_clock(struct bcma_drv_cc *cc) 
     166@@ -372,7 +389,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
     167                tmp |= (bcm5357_bcm43236_ndiv[spuravoid]) << BCMA_CC_PMU1_PLL0_PC2_NDIV_INT_SHIFT; 
     168                bcma_cc_write32(cc, BCMA_CC_PLLCTL_DATA, tmp); 
     169  
     170-               tmp = 1 << 10; 
     171+               tmp = BCMA_CC_PMU_CTL_PLL_UPD; 
     172                break; 
     173  
     174        case BCMA_CHIP_ID_BCM4331: 
     175@@ -393,7 +410,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
     176                        bcma_pmu_spuravoid_pll_write(cc, BCMA_CC_PMU_PLL_CTL2, 
     177                                                     0x03000a08); 
     178                } 
     179-               tmp = 1 << 10; 
     180+               tmp = BCMA_CC_PMU_CTL_PLL_UPD; 
     181                break; 
     182  
     183        case BCMA_CHIP_ID_BCM43224: 
     184@@ -426,7 +443,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
     185                        bcma_pmu_spuravoid_pll_write(cc, BCMA_CC_PMU_PLL_CTL5, 
     186                                                     0x88888815); 
     187                } 
     188-               tmp = 1 << 10; 
     189+               tmp = BCMA_CC_PMU_CTL_PLL_UPD; 
     190                break; 
     191  
     192        case BCMA_CHIP_ID_BCM4716: 
     193@@ -460,7 +477,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
     194                                                     0x88888815); 
     195                } 
     196  
     197-               tmp = 3 << 9; 
     198+               tmp = BCMA_CC_PMU_CTL_PLL_UPD | BCMA_CC_PMU_CTL_NOILPONW; 
     199                break; 
     200  
     201        case BCMA_CHIP_ID_BCM43227: 
     202@@ -496,7 +513,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
     203                        bcma_pmu_spuravoid_pll_write(cc, BCMA_CC_PMU_PLL_CTL5, 
     204                                                     0x88888815); 
     205                } 
     206-               tmp = 1 << 10; 
     207+               tmp = BCMA_CC_PMU_CTL_PLL_UPD; 
     208                break; 
     209        default: 
     210                bcma_err(bus, "Unknown spuravoidance settings for chip 0x%04X, not changing PLL\n", 
    90211--- a/drivers/bcma/driver_chipcommon_sflash.c 
    91212+++ b/drivers/bcma/driver_chipcommon_sflash.c 
     
    559680  
    560681        /* check if the capability pointer field exists */ 
    561 @@ -426,7 +429,7 @@ void bcma_core_pci_hostmode_init(struct 
     682@@ -401,6 +404,8 @@ void bcma_core_pci_hostmode_init(struct 
     683                return; 
     684        } 
     685  
     686+       spin_lock_init(&pc_host->cfgspace_lock); 
     687+ 
     688        pc->host_controller = pc_host; 
     689        pc_host->pci_controller.io_resource = &pc_host->io_resource; 
     690        pc_host->pci_controller.mem_resource = &pc_host->mem_resource; 
     691@@ -426,7 +431,7 @@ void bcma_core_pci_hostmode_init(struct 
    562692        /* Reset RC */ 
    563693        usleep_range(3000, 5000); 
     
    568698                        BCMA_CORE_PCI_CTL_RST_OE); 
    569699  
    570 @@ -488,6 +491,17 @@ void bcma_core_pci_hostmode_init(struct 
     700@@ -488,6 +493,17 @@ void bcma_core_pci_hostmode_init(struct 
    571701  
    572702        bcma_core_pci_enable_crs(pc); 
     
    586716        tmp = PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY; 
    587717        bcma_extpci_write_config(pc, 0, 0, PCI_COMMAND, &tmp, sizeof(tmp)); 
    588 @@ -576,7 +590,7 @@ int bcma_core_pci_plat_dev_init(struct p 
     718@@ -576,7 +592,7 @@ int bcma_core_pci_plat_dev_init(struct p 
    589719        pr_info("PCI: Fixing up device %s\n", pci_name(dev)); 
    590720  
     
    595725  
    596726        return 0; 
    597 @@ -595,6 +609,6 @@ int bcma_core_pci_pcibios_map_irq(const 
     727@@ -595,6 +611,6 @@ int bcma_core_pci_pcibios_map_irq(const 
    598728  
    599729        pc_host = container_of(dev->bus->ops, struct bcma_drv_pci_host, 
     
    616746        struct bcma_device *core; 
    617747  
    618 @@ -149,6 +149,14 @@ static int bcma_register_cores(struct bc 
     748@@ -120,6 +120,11 @@ static int bcma_register_cores(struct bc 
     749                        continue; 
     750                } 
     751  
     752+               /* Only first GMAC core on BCM4706 is connected and working */ 
     753+               if (core->id.id == BCMA_CORE_4706_MAC_GBIT && 
     754+                   core->core_unit > 0) 
     755+                       continue; 
     756+ 
     757                core->dev.release = bcma_release_core_dev; 
     758                core->dev.bus = &bcma_bus_type; 
     759                dev_set_name(&core->dev, "bcma%d:%d", bus->num, dev_id); 
     760@@ -149,6 +154,14 @@ static int bcma_register_cores(struct bc 
    619761                dev_id++; 
    620762        } 
     
    631773        if (bus->drv_cc.sflash.present) { 
    632774                err = platform_device_register(&bcma_sflash_dev); 
     775--- a/drivers/bcma/scan.c 
     776+++ b/drivers/bcma/scan.c 
     777@@ -137,19 +137,19 @@ static void bcma_scan_switch_core(struct 
     778                                       addr); 
     779 } 
     780  
     781-static u32 bcma_erom_get_ent(struct bcma_bus *bus, u32 **eromptr) 
     782+static u32 bcma_erom_get_ent(struct bcma_bus *bus, u32 __iomem **eromptr) 
     783 { 
     784        u32 ent = readl(*eromptr); 
     785        (*eromptr)++; 
     786        return ent; 
     787 } 
     788  
     789-static void bcma_erom_push_ent(u32 **eromptr) 
     790+static void bcma_erom_push_ent(u32 __iomem **eromptr) 
     791 { 
     792        (*eromptr)--; 
     793 } 
     794  
     795-static s32 bcma_erom_get_ci(struct bcma_bus *bus, u32 **eromptr) 
     796+static s32 bcma_erom_get_ci(struct bcma_bus *bus, u32 __iomem **eromptr) 
     797 { 
     798        u32 ent = bcma_erom_get_ent(bus, eromptr); 
     799        if (!(ent & SCAN_ER_VALID)) 
     800@@ -159,14 +159,14 @@ static s32 bcma_erom_get_ci(struct bcma_ 
     801        return ent; 
     802 } 
     803  
     804-static bool bcma_erom_is_end(struct bcma_bus *bus, u32 **eromptr) 
     805+static bool bcma_erom_is_end(struct bcma_bus *bus, u32 __iomem **eromptr) 
     806 { 
     807        u32 ent = bcma_erom_get_ent(bus, eromptr); 
     808        bcma_erom_push_ent(eromptr); 
     809        return (ent == (SCAN_ER_TAG_END | SCAN_ER_VALID)); 
     810 } 
     811  
     812-static bool bcma_erom_is_bridge(struct bcma_bus *bus, u32 **eromptr) 
     813+static bool bcma_erom_is_bridge(struct bcma_bus *bus, u32 __iomem **eromptr) 
     814 { 
     815        u32 ent = bcma_erom_get_ent(bus, eromptr); 
     816        bcma_erom_push_ent(eromptr); 
     817@@ -175,7 +175,7 @@ static bool bcma_erom_is_bridge(struct b 
     818                ((ent & SCAN_ADDR_TYPE) == SCAN_ADDR_TYPE_BRIDGE)); 
     819 } 
     820  
     821-static void bcma_erom_skip_component(struct bcma_bus *bus, u32 **eromptr) 
     822+static void bcma_erom_skip_component(struct bcma_bus *bus, u32 __iomem **eromptr) 
     823 { 
     824        u32 ent; 
     825        while (1) { 
     826@@ -189,7 +189,7 @@ static void bcma_erom_skip_component(str 
     827        bcma_erom_push_ent(eromptr); 
     828 } 
     829  
     830-static s32 bcma_erom_get_mst_port(struct bcma_bus *bus, u32 **eromptr) 
     831+static s32 bcma_erom_get_mst_port(struct bcma_bus *bus, u32 __iomem **eromptr) 
     832 { 
     833        u32 ent = bcma_erom_get_ent(bus, eromptr); 
     834        if (!(ent & SCAN_ER_VALID)) 
     835@@ -199,7 +199,7 @@ static s32 bcma_erom_get_mst_port(struct 
     836        return ent; 
     837 } 
     838  
     839-static s32 bcma_erom_get_addr_desc(struct bcma_bus *bus, u32 **eromptr, 
     840+static s32 bcma_erom_get_addr_desc(struct bcma_bus *bus, u32 __iomem **eromptr, 
     841                                  u32 type, u8 port) 
     842 { 
     843        u32 addrl, addrh, sizel, sizeh = 0; 
     844--- a/drivers/bcma/sprom.c 
     845+++ b/drivers/bcma/sprom.c 
     846@@ -217,6 +217,7 @@ static void bcma_sprom_extract_r8(struct 
     847        } 
     848  
     849        SPEX(board_rev, SSB_SPROM8_BOARDREV, ~0, 0); 
     850+       SPEX(board_type, SSB_SPROM1_SPID, ~0, 0); 
     851  
     852        SPEX(txpid2g[0], SSB_SPROM4_TXPID2G01, SSB_SPROM4_TXPID2G0, 
     853             SSB_SPROM4_TXPID2G0_SHIFT); 
     854--- a/include/linux/bcma/bcma.h 
     855+++ b/include/linux/bcma/bcma.h 
     856@@ -134,6 +134,7 @@ struct bcma_host_ops { 
     857 #define BCMA_CORE_I2S                  0x834 
     858 #define BCMA_CORE_SDR_DDR1_MEM_CTL     0x835   /* SDR/DDR1 memory controller core */ 
     859 #define BCMA_CORE_SHIM                 0x837   /* SHIM component in ubus/6362 */ 
     860+#define BCMA_CORE_ARM_CR4              0x83e 
     861 #define BCMA_CORE_DEFAULT              0xFFF 
     862  
     863 #define BCMA_MAX_NR_CORES              16 
     864@@ -173,6 +174,60 @@ struct bcma_host_ops { 
     865 #define BCMA_CHIP_ID_BCM53572  53572 
     866 #define  BCMA_PKG_ID_BCM47188  9 
     867  
     868+/* Board types (on PCI usually equals to the subsystem dev id) */ 
     869+/* BCM4313 */ 
     870+#define BCMA_BOARD_TYPE_BCM94313BU     0X050F 
     871+#define BCMA_BOARD_TYPE_BCM94313HM     0X0510 
     872+#define BCMA_BOARD_TYPE_BCM94313EPA    0X0511 
     873+#define BCMA_BOARD_TYPE_BCM94313HMG    0X051C 
     874+/* BCM4716 */ 
     875+#define BCMA_BOARD_TYPE_BCM94716NR2    0X04CD 
     876+/* BCM43224 */ 
     877+#define BCMA_BOARD_TYPE_BCM943224X21   0X056E 
     878+#define BCMA_BOARD_TYPE_BCM943224X21_FCC       0X00D1 
     879+#define BCMA_BOARD_TYPE_BCM943224X21B  0X00E9 
     880+#define BCMA_BOARD_TYPE_BCM943224M93   0X008B 
     881+#define BCMA_BOARD_TYPE_BCM943224M93A  0X0090 
     882+#define BCMA_BOARD_TYPE_BCM943224X16   0X0093 
     883+#define BCMA_BOARD_TYPE_BCM94322X9     0X008D 
     884+#define BCMA_BOARD_TYPE_BCM94322M35E   0X008E 
     885+/* BCM43228 */ 
     886+#define BCMA_BOARD_TYPE_BCM943228BU8   0X0540 
     887+#define BCMA_BOARD_TYPE_BCM943228BU9   0X0541 
     888+#define BCMA_BOARD_TYPE_BCM943228BU    0X0542 
     889+#define BCMA_BOARD_TYPE_BCM943227HM4L  0X0543 
     890+#define BCMA_BOARD_TYPE_BCM943227HMB   0X0544 
     891+#define BCMA_BOARD_TYPE_BCM943228HM4L  0X0545 
     892+#define BCMA_BOARD_TYPE_BCM943228SD    0X0573 
     893+/* BCM4331 */ 
     894+#define BCMA_BOARD_TYPE_BCM94331X19    0X00D6 
     895+#define BCMA_BOARD_TYPE_BCM94331X28    0X00E4 
     896+#define BCMA_BOARD_TYPE_BCM94331X28B   0X010E 
     897+#define BCMA_BOARD_TYPE_BCM94331PCIEBT3AX      0X00E4 
     898+#define BCMA_BOARD_TYPE_BCM94331X12_2G 0X00EC 
     899+#define BCMA_BOARD_TYPE_BCM94331X12_5G 0X00ED 
     900+#define BCMA_BOARD_TYPE_BCM94331X29B   0X00EF 
     901+#define BCMA_BOARD_TYPE_BCM94331CSAX   0X00EF 
     902+#define BCMA_BOARD_TYPE_BCM94331X19C   0X00F5 
     903+#define BCMA_BOARD_TYPE_BCM94331X33    0X00F4 
     904+#define BCMA_BOARD_TYPE_BCM94331BU     0X0523 
     905+#define BCMA_BOARD_TYPE_BCM94331S9BU   0X0524 
     906+#define BCMA_BOARD_TYPE_BCM94331MC     0X0525 
     907+#define BCMA_BOARD_TYPE_BCM94331MCI    0X0526 
     908+#define BCMA_BOARD_TYPE_BCM94331PCIEBT4        0X0527 
     909+#define BCMA_BOARD_TYPE_BCM94331HM     0X0574 
     910+#define BCMA_BOARD_TYPE_BCM94331PCIEDUAL       0X059B 
     911+#define BCMA_BOARD_TYPE_BCM94331MCH5   0X05A9 
     912+#define BCMA_BOARD_TYPE_BCM94331CS     0X05C6 
     913+#define BCMA_BOARD_TYPE_BCM94331CD     0X05DA 
     914+/* BCM53572 */ 
     915+#define BCMA_BOARD_TYPE_BCM953572BU    0X058D 
     916+#define BCMA_BOARD_TYPE_BCM953572NR2   0X058E 
     917+#define BCMA_BOARD_TYPE_BCM947188NR2   0X058F 
     918+#define BCMA_BOARD_TYPE_BCM953572SDRNR2        0X0590 
     919+/* BCM43142 */ 
     920+#define BCMA_BOARD_TYPE_BCM943142HM    0X05E0 
     921+ 
     922 struct bcma_device { 
     923        struct bcma_bus *bus; 
     924        struct bcma_device_id id; 
    633925--- a/include/linux/bcma/bcma_driver_chipcommon.h 
    634926+++ b/include/linux/bcma/bcma_driver_chipcommon.h 
     
    660952 #define  BCMA_CC_PMU_CTL_NOILPONW      0x00000200 /* No ILP on wait */ 
    661953 #define  BCMA_CC_PMU_CTL_HTREQEN       0x00000100 /* HT req enable */ 
    662 @@ -606,6 +610,8 @@ void bcma_chipco_bcm4331_ext_pa_lines_ct 
     954@@ -528,6 +532,7 @@ struct bcma_sflash { 
     955        u32 size; 
     956  
     957        struct mtd_info *mtd; 
     958+       void *priv; 
     959 }; 
     960 #endif 
     961  
     962@@ -606,6 +611,8 @@ void bcma_chipco_bcm4331_ext_pa_lines_ct 
    663963  
    664964 extern u32 bcma_chipco_watchdog_timer_set(struct bcma_drv_cc *cc, u32 ticks); 
     
    669969  
    670970 u32 bcma_chipco_irq_status(struct bcma_drv_cc *cc, u32 mask); 
     971@@ -634,4 +641,6 @@ extern void bcma_chipco_regctl_maskset(s 
     972                                       u32 offset, u32 mask, u32 set); 
     973 extern void bcma_pmu_spuravoid_pllupdate(struct bcma_drv_cc *cc, int spuravoid); 
     974  
     975+extern u32 bcma_pmu_get_bus_clock(struct bcma_drv_cc *cc); 
     976+ 
     977 #endif /* LINUX_BCMA_DRIVER_CC_H_ */ 
    671978--- a/include/linux/bcma/bcma_driver_mips.h 
    672979+++ b/include/linux/bcma/bcma_driver_mips.h 
     
    7171024 #define BCMA_CORE_PCI_RC_CRS_VISIBILITY                0x0001 
    7181025  
    719 --- a/drivers/bcma/driver_chipcommon_pmu.c 
    720 +++ b/drivers/bcma/driver_chipcommon_pmu.c 
    721 @@ -174,19 +174,35 @@ u32 bcma_pmu_get_alp_clock(struct bcma_d 
    722         struct bcma_bus *bus = cc->core->bus; 
    723   
    724         switch (bus->chipinfo.id) { 
    725 +       case BCMA_CHIP_ID_BCM4313: 
    726 +       case BCMA_CHIP_ID_BCM43224: 
    727 +       case BCMA_CHIP_ID_BCM43225: 
    728 +       case BCMA_CHIP_ID_BCM43227: 
    729 +       case BCMA_CHIP_ID_BCM43228: 
    730 +       case BCMA_CHIP_ID_BCM4331: 
    731 +       case BCMA_CHIP_ID_BCM43421: 
    732 +       case BCMA_CHIP_ID_BCM43428: 
    733 +       case BCMA_CHIP_ID_BCM43431: 
    734         case BCMA_CHIP_ID_BCM4716: 
    735 -       case BCMA_CHIP_ID_BCM4748: 
    736         case BCMA_CHIP_ID_BCM47162: 
    737 -       case BCMA_CHIP_ID_BCM4313: 
    738 -       case BCMA_CHIP_ID_BCM5357: 
    739 +       case BCMA_CHIP_ID_BCM4748: 
    740         case BCMA_CHIP_ID_BCM4749: 
    741 +       case BCMA_CHIP_ID_BCM5357: 
    742         case BCMA_CHIP_ID_BCM53572: 
    743 +       case BCMA_CHIP_ID_BCM6362: 
    744                 /* always 20Mhz */ 
    745                 return 20000 * 1000; 
    746 -       case BCMA_CHIP_ID_BCM5356: 
    747         case BCMA_CHIP_ID_BCM4706: 
    748 +       case BCMA_CHIP_ID_BCM5356: 
    749                 /* always 25Mhz */ 
    750                 return 25000 * 1000; 
    751 +       case BCMA_CHIP_ID_BCM43460: 
    752 +       case BCMA_CHIP_ID_BCM4352: 
    753 +       case BCMA_CHIP_ID_BCM4360: 
    754 +               if (cc->status & BCMA_CC_CHIPST_4360_XTAL_40MZ) 
    755 +                       return 40000 * 1000; 
    756 +               else 
    757 +                       return 20000 * 1000; 
    758         default: 
    759                 bcma_warn(bus, "No ALP clock specified for %04X device, pmu rev. %d, using default %d Hz\n", 
    760                           bus->chipinfo.id, cc->pmu.rev, BCMA_CC_PMU_ALP_CLOCK); 
    761 @@ -372,7 +388,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
    762                 tmp |= (bcm5357_bcm43236_ndiv[spuravoid]) << BCMA_CC_PMU1_PLL0_PC2_NDIV_INT_SHIFT; 
    763                 bcma_cc_write32(cc, BCMA_CC_PLLCTL_DATA, tmp); 
    764   
    765 -               tmp = 1 << 10; 
    766 +               tmp = BCMA_CC_PMU_CTL_PLL_UPD; 
    767                 break; 
    768   
    769         case BCMA_CHIP_ID_BCM4331: 
    770 @@ -393,7 +409,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
    771                         bcma_pmu_spuravoid_pll_write(cc, BCMA_CC_PMU_PLL_CTL2, 
    772                                                      0x03000a08); 
    773                 } 
    774 -               tmp = 1 << 10; 
    775 +               tmp = BCMA_CC_PMU_CTL_PLL_UPD; 
    776                 break; 
    777   
    778         case BCMA_CHIP_ID_BCM43224: 
    779 @@ -426,7 +442,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
    780                         bcma_pmu_spuravoid_pll_write(cc, BCMA_CC_PMU_PLL_CTL5, 
    781                                                      0x88888815); 
    782                 } 
    783 -               tmp = 1 << 10; 
    784 +               tmp = BCMA_CC_PMU_CTL_PLL_UPD; 
    785                 break; 
    786   
    787         case BCMA_CHIP_ID_BCM4716: 
    788 @@ -460,7 +476,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
    789                                                      0x88888815); 
    790                 } 
    791   
    792 -               tmp = 3 << 9; 
    793 +               tmp = BCMA_CC_PMU_CTL_PLL_UPD | BCMA_CC_PMU_CTL_NOILPONW; 
    794                 break; 
    795   
    796         case BCMA_CHIP_ID_BCM43227: 
    797 @@ -496,7 +512,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
    798                         bcma_pmu_spuravoid_pll_write(cc, BCMA_CC_PMU_PLL_CTL5, 
    799                                                      0x88888815); 
    800                 } 
    801 -               tmp = 1 << 10; 
    802 +               tmp = BCMA_CC_PMU_CTL_PLL_UPD; 
    803                 break; 
    804         default: 
    805                 bcma_err(bus, "Unknown spuravoidance settings for chip 0x%04X, not changing PLL\n", 
    806 --- a/include/linux/bcma/bcma.h 
    807 +++ b/include/linux/bcma/bcma.h 
    808 @@ -134,6 +134,7 @@ struct bcma_host_ops { 
    809  #define BCMA_CORE_I2S                  0x834 
    810  #define BCMA_CORE_SDR_DDR1_MEM_CTL     0x835   /* SDR/DDR1 memory controller core */ 
    811  #define BCMA_CORE_SHIM                 0x837   /* SHIM component in ubus/6362 */ 
    812 +#define BCMA_CORE_ARM_CR4              0x83e 
    813  #define BCMA_CORE_DEFAULT              0xFFF 
    814   
    815  #define BCMA_MAX_NR_CORES              16 
    8161026--- a/include/linux/bcma/bcma_regs.h 
    8171027+++ b/include/linux/bcma/bcma_regs.h 
  • trunk/target/linux/generic/patches-3.9/025-bcma_backport.patch

    r36468 r36473  
     1--- a/drivers/bcma/core.c 
     2+++ b/drivers/bcma/core.c 
     3@@ -104,7 +104,13 @@ void bcma_core_pll_ctl(struct bcma_devic 
     4                if (i) 
     5                        bcma_err(core->bus, "PLL enable timeout\n"); 
     6        } else { 
     7-               bcma_warn(core->bus, "Disabling PLL not supported yet!\n"); 
     8+               /* 
     9+                * Mask the PLL but don't wait for it to be disabled. PLL may be 
     10+                * shared between cores and will be still up if there is another 
     11+                * core using it. 
     12+                */ 
     13+               bcma_mask32(core, BCMA_CLKCTLST, ~req); 
     14+               bcma_read32(core, BCMA_CLKCTLST); 
     15        } 
     16 } 
     17 EXPORT_SYMBOL_GPL(bcma_core_pll_ctl); 
     18--- a/drivers/bcma/driver_chipcommon.c 
     19+++ b/drivers/bcma/driver_chipcommon.c 
     20@@ -25,13 +25,14 @@ static inline u32 bcma_cc_write32_masked 
     21        return value; 
     22 } 
     23  
     24-static u32 bcma_chipco_get_alp_clock(struct bcma_drv_cc *cc) 
     25+u32 bcma_chipco_get_alp_clock(struct bcma_drv_cc *cc) 
     26 { 
     27        if (cc->capabilities & BCMA_CC_CAP_PMU) 
     28                return bcma_pmu_get_alp_clock(cc); 
     29  
     30        return 20000000; 
     31 } 
     32+EXPORT_SYMBOL_GPL(bcma_chipco_get_alp_clock); 
     33  
     34 static u32 bcma_chipco_watchdog_get_max_timer(struct bcma_drv_cc *cc) 
     35 { 
     36@@ -213,6 +214,7 @@ u32 bcma_chipco_gpio_out(struct bcma_drv 
     37  
     38        return res; 
     39 } 
     40+EXPORT_SYMBOL_GPL(bcma_chipco_gpio_out); 
     41  
     42 u32 bcma_chipco_gpio_outen(struct bcma_drv_cc *cc, u32 mask, u32 value) 
     43 { 
     44@@ -225,6 +227,7 @@ u32 bcma_chipco_gpio_outen(struct bcma_d 
     45  
     46        return res; 
     47 } 
     48+EXPORT_SYMBOL_GPL(bcma_chipco_gpio_outen); 
     49  
     50 /* 
     51  * If the bit is set to 0, chipcommon controlls this GPIO, 
     52--- a/drivers/bcma/driver_chipcommon_pmu.c 
     53+++ b/drivers/bcma/driver_chipcommon_pmu.c 
     54@@ -174,19 +174,35 @@ u32 bcma_pmu_get_alp_clock(struct bcma_d 
     55        struct bcma_bus *bus = cc->core->bus; 
     56  
     57        switch (bus->chipinfo.id) { 
     58+       case BCMA_CHIP_ID_BCM4313: 
     59+       case BCMA_CHIP_ID_BCM43224: 
     60+       case BCMA_CHIP_ID_BCM43225: 
     61+       case BCMA_CHIP_ID_BCM43227: 
     62+       case BCMA_CHIP_ID_BCM43228: 
     63+       case BCMA_CHIP_ID_BCM4331: 
     64+       case BCMA_CHIP_ID_BCM43421: 
     65+       case BCMA_CHIP_ID_BCM43428: 
     66+       case BCMA_CHIP_ID_BCM43431: 
     67        case BCMA_CHIP_ID_BCM4716: 
     68-       case BCMA_CHIP_ID_BCM4748: 
     69        case BCMA_CHIP_ID_BCM47162: 
     70-       case BCMA_CHIP_ID_BCM4313: 
     71-       case BCMA_CHIP_ID_BCM5357: 
     72+       case BCMA_CHIP_ID_BCM4748: 
     73        case BCMA_CHIP_ID_BCM4749: 
     74+       case BCMA_CHIP_ID_BCM5357: 
     75        case BCMA_CHIP_ID_BCM53572: 
     76+       case BCMA_CHIP_ID_BCM6362: 
     77                /* always 20Mhz */ 
     78                return 20000 * 1000; 
     79-       case BCMA_CHIP_ID_BCM5356: 
     80        case BCMA_CHIP_ID_BCM4706: 
     81+       case BCMA_CHIP_ID_BCM5356: 
     82                /* always 25Mhz */ 
     83                return 25000 * 1000; 
     84+       case BCMA_CHIP_ID_BCM43460: 
     85+       case BCMA_CHIP_ID_BCM4352: 
     86+       case BCMA_CHIP_ID_BCM4360: 
     87+               if (cc->status & BCMA_CC_CHIPST_4360_XTAL_40MZ) 
     88+                       return 40000 * 1000; 
     89+               else 
     90+                       return 20000 * 1000; 
     91        default: 
     92                bcma_warn(bus, "No ALP clock specified for %04X device, pmu rev. %d, using default %d Hz\n", 
     93                          bus->chipinfo.id, cc->pmu.rev, BCMA_CC_PMU_ALP_CLOCK); 
     94@@ -373,7 +389,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
     95                tmp |= (bcm5357_bcm43236_ndiv[spuravoid]) << BCMA_CC_PMU1_PLL0_PC2_NDIV_INT_SHIFT; 
     96                bcma_cc_write32(cc, BCMA_CC_PLLCTL_DATA, tmp); 
     97  
     98-               tmp = 1 << 10; 
     99+               tmp = BCMA_CC_PMU_CTL_PLL_UPD; 
     100                break; 
     101  
     102        case BCMA_CHIP_ID_BCM4331: 
     103@@ -394,7 +410,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
     104                        bcma_pmu_spuravoid_pll_write(cc, BCMA_CC_PMU_PLL_CTL2, 
     105                                                     0x03000a08); 
     106                } 
     107-               tmp = 1 << 10; 
     108+               tmp = BCMA_CC_PMU_CTL_PLL_UPD; 
     109                break; 
     110  
     111        case BCMA_CHIP_ID_BCM43224: 
     112@@ -427,7 +443,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
     113                        bcma_pmu_spuravoid_pll_write(cc, BCMA_CC_PMU_PLL_CTL5, 
     114                                                     0x88888815); 
     115                } 
     116-               tmp = 1 << 10; 
     117+               tmp = BCMA_CC_PMU_CTL_PLL_UPD; 
     118                break; 
     119  
     120        case BCMA_CHIP_ID_BCM4716: 
     121@@ -461,7 +477,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
     122                                                     0x88888815); 
     123                } 
     124  
     125-               tmp = 3 << 9; 
     126+               tmp = BCMA_CC_PMU_CTL_PLL_UPD | BCMA_CC_PMU_CTL_NOILPONW; 
     127                break; 
     128  
     129        case BCMA_CHIP_ID_BCM43227: 
     130@@ -497,7 +513,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
     131                        bcma_pmu_spuravoid_pll_write(cc, BCMA_CC_PMU_PLL_CTL5, 
     132                                                     0x88888815); 
     133                } 
     134-               tmp = 1 << 10; 
     135+               tmp = BCMA_CC_PMU_CTL_PLL_UPD; 
     136                break; 
     137        default: 
     138                bcma_err(bus, "Unknown spuravoidance settings for chip 0x%04X, not changing PLL\n", 
     139--- a/drivers/bcma/main.c 
     140+++ b/drivers/bcma/main.c 
     141@@ -120,6 +120,11 @@ static int bcma_register_cores(struct bc 
     142                        continue; 
     143                } 
     144  
     145+               /* Only first GMAC core on BCM4706 is connected and working */ 
     146+               if (core->id.id == BCMA_CORE_4706_MAC_GBIT && 
     147+                   core->core_unit > 0) 
     148+                       continue; 
     149+ 
     150                core->dev.release = bcma_release_core_dev; 
     151                core->dev.bus = &bcma_bus_type; 
     152                dev_set_name(&core->dev, "bcma%d:%d", bus->num, dev_id); 
     153--- a/drivers/bcma/scan.c 
     154+++ b/drivers/bcma/scan.c 
     155@@ -137,19 +137,19 @@ static void bcma_scan_switch_core(struct 
     156                                       addr); 
     157 } 
     158  
     159-static u32 bcma_erom_get_ent(struct bcma_bus *bus, u32 **eromptr) 
     160+static u32 bcma_erom_get_ent(struct bcma_bus *bus, u32 __iomem **eromptr) 
     161 { 
     162        u32 ent = readl(*eromptr); 
     163        (*eromptr)++; 
     164        return ent; 
     165 } 
     166  
     167-static void bcma_erom_push_ent(u32 **eromptr) 
     168+static void bcma_erom_push_ent(u32 __iomem **eromptr) 
     169 { 
     170        (*eromptr)--; 
     171 } 
     172  
     173-static s32 bcma_erom_get_ci(struct bcma_bus *bus, u32 **eromptr) 
     174+static s32 bcma_erom_get_ci(struct bcma_bus *bus, u32 __iomem **eromptr) 
     175 { 
     176        u32 ent = bcma_erom_get_ent(bus, eromptr); 
     177        if (!(ent & SCAN_ER_VALID)) 
     178@@ -159,14 +159,14 @@ static s32 bcma_erom_get_ci(struct bcma_ 
     179        return ent; 
     180 } 
     181  
     182-static bool bcma_erom_is_end(struct bcma_bus *bus, u32 **eromptr) 
     183+static bool bcma_erom_is_end(struct bcma_bus *bus, u32 __iomem **eromptr) 
     184 { 
     185        u32 ent = bcma_erom_get_ent(bus, eromptr); 
     186        bcma_erom_push_ent(eromptr); 
     187        return (ent == (SCAN_ER_TAG_END | SCAN_ER_VALID)); 
     188 } 
     189  
     190-static bool bcma_erom_is_bridge(struct bcma_bus *bus, u32 **eromptr) 
     191+static bool bcma_erom_is_bridge(struct bcma_bus *bus, u32 __iomem **eromptr) 
     192 { 
     193        u32 ent = bcma_erom_get_ent(bus, eromptr); 
     194        bcma_erom_push_ent(eromptr); 
     195@@ -175,7 +175,7 @@ static bool bcma_erom_is_bridge(struct b 
     196                ((ent & SCAN_ADDR_TYPE) == SCAN_ADDR_TYPE_BRIDGE)); 
     197 } 
     198  
     199-static void bcma_erom_skip_component(struct bcma_bus *bus, u32 **eromptr) 
     200+static void bcma_erom_skip_component(struct bcma_bus *bus, u32 __iomem **eromptr) 
     201 { 
     202        u32 ent; 
     203        while (1) { 
     204@@ -189,7 +189,7 @@ static void bcma_erom_skip_component(str 
     205        bcma_erom_push_ent(eromptr); 
     206 } 
     207  
     208-static s32 bcma_erom_get_mst_port(struct bcma_bus *bus, u32 **eromptr) 
     209+static s32 bcma_erom_get_mst_port(struct bcma_bus *bus, u32 __iomem **eromptr) 
     210 { 
     211        u32 ent = bcma_erom_get_ent(bus, eromptr); 
     212        if (!(ent & SCAN_ER_VALID)) 
     213@@ -199,7 +199,7 @@ static s32 bcma_erom_get_mst_port(struct 
     214        return ent; 
     215 } 
     216  
     217-static s32 bcma_erom_get_addr_desc(struct bcma_bus *bus, u32 **eromptr, 
     218+static s32 bcma_erom_get_addr_desc(struct bcma_bus *bus, u32 __iomem **eromptr, 
     219                                  u32 type, u8 port) 
     220 { 
     221        u32 addrl, addrh, sizel, sizeh = 0; 
     222--- a/drivers/bcma/sprom.c 
     223+++ b/drivers/bcma/sprom.c 
     224@@ -217,6 +217,7 @@ static void bcma_sprom_extract_r8(struct 
     225        } 
     226  
     227        SPEX(board_rev, SSB_SPROM8_BOARDREV, ~0, 0); 
     228+       SPEX(board_type, SSB_SPROM1_SPID, ~0, 0); 
     229  
     230        SPEX(txpid2g[0], SSB_SPROM4_TXPID2G01, SSB_SPROM4_TXPID2G0, 
     231             SSB_SPROM4_TXPID2G0_SHIFT); 
    1232--- a/include/linux/bcma/bcma.h 
    2233+++ b/include/linux/bcma/bcma.h 
     
    9240  
    10241 #define BCMA_MAX_NR_CORES              16 
    11 --- a/include/linux/bcma/bcma_regs.h 
    12 +++ b/include/linux/bcma/bcma_regs.h 
    13 @@ -37,6 +37,7 @@ 
    14  #define  BCMA_IOST_BIST_DONE           0x8000 
    15  #define BCMA_RESET_CTL                 0x0800 
    16  #define  BCMA_RESET_CTL_RESET          0x0001 
    17 +#define BCMA_RESET_ST                  0x0804 
    18   
    19  /* BCMA PCI config space registers. */ 
    20  #define BCMA_PCI_PMCSR                 0x44 
     242@@ -173,6 +174,60 @@ struct bcma_host_ops { 
     243 #define BCMA_CHIP_ID_BCM53572  53572 
     244 #define  BCMA_PKG_ID_BCM47188  9 
     245  
     246+/* Board types (on PCI usually equals to the subsystem dev id) */ 
     247+/* BCM4313 */ 
     248+#define BCMA_BOARD_TYPE_BCM94313BU     0X050F 
     249+#define BCMA_BOARD_TYPE_BCM94313HM     0X0510 
     250+#define BCMA_BOARD_TYPE_BCM94313EPA    0X0511 
     251+#define BCMA_BOARD_TYPE_BCM94313HMG    0X051C 
     252+/* BCM4716 */ 
     253+#define BCMA_BOARD_TYPE_BCM94716NR2    0X04CD 
     254+/* BCM43224 */ 
     255+#define BCMA_BOARD_TYPE_BCM943224X21   0X056E 
     256+#define BCMA_BOARD_TYPE_BCM943224X21_FCC       0X00D1 
     257+#define BCMA_BOARD_TYPE_BCM943224X21B  0X00E9 
     258+#define BCMA_BOARD_TYPE_BCM943224M93   0X008B 
     259+#define BCMA_BOARD_TYPE_BCM943224M93A  0X0090 
     260+#define BCMA_BOARD_TYPE_BCM943224X16   0X0093 
     261+#define BCMA_BOARD_TYPE_BCM94322X9     0X008D 
     262+#define BCMA_BOARD_TYPE_BCM94322M35E   0X008E 
     263+/* BCM43228 */ 
     264+#define BCMA_BOARD_TYPE_BCM943228BU8   0X0540 
     265+#define BCMA_BOARD_TYPE_BCM943228BU9   0X0541 
     266+#define BCMA_BOARD_TYPE_BCM943228BU    0X0542 
     267+#define BCMA_BOARD_TYPE_BCM943227HM4L  0X0543 
     268+#define BCMA_BOARD_TYPE_BCM943227HMB   0X0544 
     269+#define BCMA_BOARD_TYPE_BCM943228HM4L  0X0545 
     270+#define BCMA_BOARD_TYPE_BCM943228SD    0X0573 
     271+/* BCM4331 */ 
     272+#define BCMA_BOARD_TYPE_BCM94331X19    0X00D6 
     273+#define BCMA_BOARD_TYPE_BCM94331X28    0X00E4 
     274+#define BCMA_BOARD_TYPE_BCM94331X28B   0X010E 
     275+#define BCMA_BOARD_TYPE_BCM94331PCIEBT3AX      0X00E4 
     276+#define BCMA_BOARD_TYPE_BCM94331X12_2G 0X00EC 
     277+#define BCMA_BOARD_TYPE_BCM94331X12_5G 0X00ED 
     278+#define BCMA_BOARD_TYPE_BCM94331X29B   0X00EF 
     279+#define BCMA_BOARD_TYPE_BCM94331CSAX   0X00EF 
     280+#define BCMA_BOARD_TYPE_BCM94331X19C   0X00F5 
     281+#define BCMA_BOARD_TYPE_BCM94331X33    0X00F4 
     282+#define BCMA_BOARD_TYPE_BCM94331BU     0X0523 
     283+#define BCMA_BOARD_TYPE_BCM94331S9BU   0X0524 
     284+#define BCMA_BOARD_TYPE_BCM94331MC     0X0525 
     285+#define BCMA_BOARD_TYPE_BCM94331MCI    0X0526 
     286+#define BCMA_BOARD_TYPE_BCM94331PCIEBT4        0X0527 
     287+#define BCMA_BOARD_TYPE_BCM94331HM     0X0574 
     288+#define BCMA_BOARD_TYPE_BCM94331PCIEDUAL       0X059B 
     289+#define BCMA_BOARD_TYPE_BCM94331MCH5   0X05A9 
     290+#define BCMA_BOARD_TYPE_BCM94331CS     0X05C6 
     291+#define BCMA_BOARD_TYPE_BCM94331CD     0X05DA 
     292+/* BCM53572 */ 
     293+#define BCMA_BOARD_TYPE_BCM953572BU    0X058D 
     294+#define BCMA_BOARD_TYPE_BCM953572NR2   0X058E 
     295+#define BCMA_BOARD_TYPE_BCM947188NR2   0X058F 
     296+#define BCMA_BOARD_TYPE_BCM953572SDRNR2        0X0590 
     297+/* BCM43142 */ 
     298+#define BCMA_BOARD_TYPE_BCM943142HM    0X05E0 
     299+ 
     300 struct bcma_device { 
     301        struct bcma_bus *bus; 
     302        struct bcma_device_id id; 
    21303--- a/include/linux/bcma/bcma_driver_chipcommon.h 
    22304+++ b/include/linux/bcma/bcma_driver_chipcommon.h 
    23 @@ -316,6 +316,9 @@ 
     305@@ -104,6 +104,7 @@ 
     306 #define  BCMA_CC_CHIPST_4706_MIPS_BENDIAN      BIT(3) /* 0: little, 1: big endian */ 
     307 #define  BCMA_CC_CHIPST_4706_PCIE1_DISABLE     BIT(5) /* PCIE1 enable strap pin */ 
     308 #define  BCMA_CC_CHIPST_5357_NAND_BOOT         BIT(4) /* NAND boot, valid for CC rev 38 and/or BCM5357 */ 
     309+#define  BCMA_CC_CHIPST_4360_XTAL_40MZ         0x00000001 
     310 #define BCMA_CC_JCMD                   0x0030          /* Rev >= 10 only */ 
     311 #define  BCMA_CC_JCMD_START            0x80000000 
     312 #define  BCMA_CC_JCMD_BUSY             0x80000000 
     313@@ -315,6 +316,9 @@ 
    24314 #define BCMA_CC_PMU_CTL                        0x0600 /* PMU control */ 
    25315 #define  BCMA_CC_PMU_CTL_ILP_DIV       0xFFFF0000 /* ILP div mask */ 
     
    31321 #define  BCMA_CC_PMU_CTL_NOILPONW      0x00000200 /* No ILP on wait */ 
    32322 #define  BCMA_CC_PMU_CTL_HTREQEN       0x00000100 /* HT req enable */ 
     323@@ -607,6 +611,8 @@ void bcma_chipco_bcm4331_ext_pa_lines_ct 
     324  
     325 extern u32 bcma_chipco_watchdog_timer_set(struct bcma_drv_cc *cc, u32 ticks); 
     326  
     327+extern u32 bcma_chipco_get_alp_clock(struct bcma_drv_cc *cc); 
     328+ 
     329 void bcma_chipco_irq_mask(struct bcma_drv_cc *cc, u32 mask, u32 value); 
     330  
     331 u32 bcma_chipco_irq_status(struct bcma_drv_cc *cc, u32 mask); 
     332--- a/include/linux/bcma/bcma_regs.h 
     333+++ b/include/linux/bcma/bcma_regs.h 
     334@@ -37,6 +37,7 @@ 
     335 #define  BCMA_IOST_BIST_DONE           0x8000 
     336 #define BCMA_RESET_CTL                 0x0800 
     337 #define  BCMA_RESET_CTL_RESET          0x0001 
     338+#define BCMA_RESET_ST                  0x0804 
     339  
     340 /* BCMA PCI config space registers. */ 
     341 #define BCMA_PCI_PMCSR                 0x44 
Note: See TracChangeset for help on using the changeset viewer.