Changeset 26801


Ignore:
Timestamp:
2011-05-01T22:28:35+02:00 (5 years ago)
Author:
hauke
Message:

brcm47xx: add fallback sprom for pci devices without an own sprom.

If there is no sprom on an ssb based pci device on the brcm47xx
architecture ssb now asks the architecture code to look into the nvram
to get some sprom data for this device. Now we are able to read out
pci/1/1/ foo or pci/1/3/ foo config options.

This will fix some problems where the wireless devices does not got an
mac address and the following message was show:
ssb: WARNING: Invalid SPROM CRC (corrupt SPROM)

Location:
trunk
Files:
11 added
2 deleted
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/broadcom-wl/patches/003-compat-2.6.35.patch

    r23899 r26801  
    11--- a/driver/wl_linux.c 
    22+++ b/driver/wl_linux.c 
    3 @@ -2082,8 +2082,12 @@ static void 
     3@@ -2082,7 +2082,11 @@ static void 
    44 _wl_set_multicast_list(struct net_device *dev) 
    55 { 
     
    77+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,34) 
    88        struct dev_mc_list *mclist; 
    9 -       int i; 
    109+#else 
    1110+       struct netdev_hw_addr *ha; 
    1211+#endif 
    13 +       int i = 0; 
     12        int i; 
    1413  
    1514        if (!dev) 
    16                 return; 
    1715@@ -2098,14 +2102,23 @@ _wl_set_multicast_list(struct net_device 
    1816                wl->pub->allmulti = (dev->flags & IFF_ALLMULTI)? TRUE: FALSE; 
  • trunk/package/broadcom-wl/patches/910-fallback-sprom.patch

    r22173 r26801  
    11--- a/driver/bcmsrom.c 
    22+++ b/driver/bcmsrom.c 
    3 @@ -39,6 +39,10 @@ 
     3@@ -39,6 +39,11 @@ 
    44 #include <sbsdpcmdev.h> 
    55 #endif  
    66  
    7 +#ifdef CONFIG_SSB 
     7+#if defined(CONFIG_SSB_PCIHOST) && defined(CONFIG_BOARD_BCM963XX) 
    88+#include <linux/ssb/ssb.h> 
     9+extern struct ssb_sprom bcm63xx_sprom; 
    910+#endif 
    1011+ 
     
    1213 #include <sbsprom.h> 
    1314 #endif /* WLTEST */ 
    14 @@ -2058,6 +2062,11 @@ BCMATTACHFN(initvars_srom_pci)(si_t *sih 
     15@@ -2058,6 +2063,10 @@ BCMATTACHFN(initvars_srom_pci)(si_t *sih 
    1516        bool flash = FALSE; 
    1617        int err = 0; 
    1718  
    18 +#ifdef CONFIG_SSB 
    19 +       struct ssb_sprom *fbrom; 
     19+#if defined(CONFIG_SSB_PCIHOST) && defined(CONFIG_BOARD_BCM963XX) 
    2020+       char eabuf[18]; 
    2121+#endif 
     
    2424         * Apply CRC over SROM content regardless SROM is present or not, 
    2525         * and use variable <devpath>sromrev's existance in flash to decide 
    26 @@ -2120,6 +2129,62 @@ BCMATTACHFN(initvars_srom_pci)(si_t *sih 
     26@@ -2120,6 +2130,58 @@ BCMATTACHFN(initvars_srom_pci)(si_t *sih 
    2727                        goto varscont; 
    2828                } 
    2929  
    30 +#ifdef CONFIG_SSB 
     30+#if defined(CONFIG_SSB_PCIHOST) && defined(CONFIG_BOARD_BCM963XX) 
    3131+               base = vp = MALLOC(osh, MAXSZ_NVRAM_VARS); 
    3232+ 
     
    3535+                       varbuf_init(&b, base, MAXSZ_NVRAM_VARS); 
    3636+ 
    37 +                       /* Try to load ssb fallback sprom */ 
    38 +                       if ((fbrom = ssb_get_fallback_sprom()) != NULL) 
    39 +                       { 
    40 +                               printk("Got version %i SPROM from SSB\n", fbrom->revision); 
     37+                       printk("Got version %i SPROM from SSB\n", bcm63xx_sprom.revision); 
    4138+ 
    42 +                               varbuf_append(&b, vstr_sromrev, fbrom->revision); 
    43 +                               varbuf_append(&b, vstr_boardrev, fbrom->board_rev); 
     39+                       varbuf_append(&b, vstr_sromrev, bcm63xx_sprom.revision); 
     40+                       varbuf_append(&b, vstr_boardrev, bcm63xx_sprom.board_rev); 
    4441+ 
    45 +                               /* ToDo: map fbrom->country_code */ 
    46 +                               varbuf_append(&b, vstr_noccode); 
     42+                       /* ToDo: map bcm63xx_sprom.country_code */ 
     43+                       varbuf_append(&b, vstr_noccode); 
    4744+ 
    48 +                               varbuf_append(&b, vstr_aa2g, fbrom->ant_available_bg); 
     45+                       varbuf_append(&b, vstr_aa2g, bcm63xx_sprom.ant_available_bg); 
    4946+ 
    50 +                               varbuf_append(&b, vstr_pa0b[0], fbrom->pa0b0); 
    51 +                               varbuf_append(&b, vstr_pa1b[0], fbrom->pa1b0); 
    52 +                               varbuf_append(&b, vstr_pa0b[1], fbrom->pa0b1); 
    53 +                               varbuf_append(&b, vstr_pa1b[1], fbrom->pa1b1); 
    54 +                               varbuf_append(&b, vstr_pa0b[2], fbrom->pa0b2); 
    55 +                               varbuf_append(&b, vstr_pa1b[2], fbrom->pa1b2); 
     47+                       varbuf_append(&b, vstr_pa0b[0], bcm63xx_sprom.pa0b0); 
     48+                       varbuf_append(&b, vstr_pa1b[0], bcm63xx_sprom.pa1b0); 
     49+                       varbuf_append(&b, vstr_pa0b[1], bcm63xx_sprom.pa0b1); 
     50+                       varbuf_append(&b, vstr_pa1b[1], bcm63xx_sprom.pa1b1); 
     51+                       varbuf_append(&b, vstr_pa0b[2], bcm63xx_sprom.pa0b2); 
     52+                       varbuf_append(&b, vstr_pa1b[2], bcm63xx_sprom.pa1b2); 
    5653+ 
    57 +                               varbuf_append(&b, vstr_pa0maxpwr, fbrom->maxpwr_bg); 
    58 +                               varbuf_append(&b, vstr_pa0itssit, fbrom->itssi_bg); 
     54+                       varbuf_append(&b, vstr_pa0maxpwr, bcm63xx_sprom.maxpwr_bg); 
     55+                       varbuf_append(&b, vstr_pa0itssit, bcm63xx_sprom.itssi_bg); 
    5956+ 
    60 +                               varbuf_append(&b, vstr_boardflags, (fbrom->boardflags_hi << 16) | fbrom->boardflags_lo); 
    61 +                               varbuf_append(&b, vstr_boardflags2, (fbrom->boardflags2_hi << 16) | fbrom->boardflags2_lo); 
     57+                       varbuf_append(&b, vstr_boardflags, (bcm63xx_sprom.boardflags_hi << 16) | bcm63xx_sprom.boardflags_lo); 
     58+                       varbuf_append(&b, vstr_boardflags2, (bcm63xx_sprom.boardflags2_hi << 16) | bcm63xx_sprom.boardflags2_lo); 
    6259+ 
    63 +                               snprintf(eabuf, sizeof(eabuf), "%02x:%02x:%02x:%02x:%02x:%02x", 
    64 +                                       fbrom->il0mac[0], fbrom->il0mac[1], fbrom->il0mac[2], 
    65 +                                       fbrom->il0mac[3], fbrom->il0mac[4], fbrom->il0mac[5] 
    66 +                               ); 
     60+                       snprintf(eabuf, sizeof(eabuf), "%02x:%02x:%02x:%02x:%02x:%02x", 
     61+                               bcm63xx_sprom.il0mac[0], bcm63xx_sprom.il0mac[1], bcm63xx_sprom.il0mac[2], 
     62+                               bcm63xx_sprom.il0mac[3], bcm63xx_sprom.il0mac[4], bcm63xx_sprom.il0mac[5] 
     63+                       ); 
    6764+ 
    68 +                               varbuf_append(&b, vstr_macaddr, eabuf); 
    69 +                       } 
     65+                       varbuf_append(&b, vstr_macaddr, eabuf); 
    7066+ 
    7167+                       /* final nullbyte terminator */ 
  • trunk/target/linux/brcm47xx/patches-2.6.37/400-arch-bcm47xx.patch

    r24885 r26801  
    3434--- a/arch/mips/bcm47xx/setup.c 
    3535+++ b/arch/mips/bcm47xx/setup.c 
    36 @@ -226,3 +226,20 @@ void __init plat_mem_setup(void) 
     36@@ -311,3 +311,20 @@ void __init plat_mem_setup(void) 
    3737        _machine_halt = bcm47xx_machine_halt; 
    3838        pm_power_off = bcm47xx_machine_halt; 
  • trunk/target/linux/brcm47xx/patches-2.6.37/820-wgt634u-nvram-fix.patch

    r23911 r26801  
    254254  
    255255 /* Probe for NVRAM header */ 
    256  static void __init early_nvram_init(void) 
    257 @@ -33,6 +35,25 @@ static void __init early_nvram_init(void 
     256 static void early_nvram_init(void) 
     257@@ -33,6 +35,25 @@ static void early_nvram_init(void) 
    258258  
    259259        base = mcore->flash_window; 
  • trunk/target/linux/brcm47xx/patches-2.6.38/400-arch-bcm47xx.patch

    r24885 r26801  
    3434--- a/arch/mips/bcm47xx/setup.c 
    3535+++ b/arch/mips/bcm47xx/setup.c 
    36 @@ -226,3 +226,20 @@ void __init plat_mem_setup(void) 
     36@@ -311,3 +311,20 @@ void __init plat_mem_setup(void) 
    3737        _machine_halt = bcm47xx_machine_halt; 
    3838        pm_power_off = bcm47xx_machine_halt; 
  • trunk/target/linux/brcm47xx/patches-2.6.38/820-wgt634u-nvram-fix.patch

    r23911 r26801  
    254254  
    255255 /* Probe for NVRAM header */ 
    256  static void __init early_nvram_init(void) 
    257 @@ -33,6 +35,25 @@ static void __init early_nvram_init(void 
     256 static void early_nvram_init(void) 
     257@@ -33,6 +35,25 @@ static void early_nvram_init(void) 
    258258  
    259259        base = mcore->flash_window; 
  • trunk/target/linux/brcm63xx/patches-2.6.37/110-gpiodev.patch

    r25629 r26801  
    11--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c 
    22+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c 
    3 @@ -852,6 +852,10 @@ static struct platform_device mtd_dev =  
     3@@ -852,6 +852,10 @@ static struct platform_device mtd_dev = 
    44        .num_resources          = ARRAY_SIZE(mtd_resources), 
    55 }; 
  • trunk/target/linux/brcm63xx/patches-2.6.37/180-udc_preliminary_support.patch

    r25629 r26801  
    1818  
    1919 static struct board_info __initdata board_rta1025w_16 = { 
    20 @@ -1001,6 +1004,9 @@ int __init board_register_devices(void) 
     20@@ -1002,6 +1005,9 @@ int __init board_register_devices(void) 
    2121        if (board.has_dsp) 
    2222                bcm63xx_dsp_register(&board.dsp); 
     
    215215  */ 
    216216 static void spi_set(struct clk *clk, int enable) 
    217 @@ -208,6 +232,8 @@ struct clk *clk_get(struct device *dev,  
     217@@ -208,6 +232,8 @@ struct clk *clk_get(struct device *dev, 
    218218                return &clk_ephy; 
    219219        if (!strcmp(id, "usbh")) 
  • trunk/target/linux/brcm63xx/patches-2.6.37/200-extended-platform-devices.patch

    r25629 r26801  
    11--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c 
    22+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c 
    3 @@ -1007,6 +1007,9 @@ int __init board_register_devices(void) 
     3@@ -1008,6 +1008,9 @@ int __init board_register_devices(void) 
    44        if (board.has_udc0) 
    55                bcm63xx_udc_register(); 
  • trunk/target/linux/brcm63xx/patches-2.6.37/200-spi-board-info.patch

    r25629 r26801  
    11--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c 
    22+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c 
    3 @@ -1010,6 +1010,9 @@ int __init board_register_devices(void) 
     3@@ -1011,6 +1011,9 @@ int __init board_register_devices(void) 
    44        if (board.num_devs) 
    55                platform_add_devices(board.devs, board.num_devs); 
  • trunk/target/linux/brcm63xx/patches-2.6.37/240-spi.patch

    r25629 r26801  
    991991  
    992992 #define PFX    "board_bcm963xx: " 
    993 @@ -1586,6 +1587,9 @@ int __init board_register_devices(void) 
     993@@ -1587,6 +1588,9 @@ int __init board_register_devices(void) 
    994994        if (board.num_spis) 
    995995                spi_register_board_info(board.spis, board.num_spis); 
  • trunk/target/linux/brcm63xx/patches-2.6.37/260-no_ehci_over_current_check.patch

    r25629 r26801  
    11--- a/drivers/usb/host/ehci-hub.c 
    22+++ b/drivers/usb/host/ehci-hub.c 
    3 @@ -861,11 +861,13 @@ static int ehci_hub_control ( 
     3@@ -882,11 +882,13 @@ static int ehci_hub_control ( 
    44                         * power switching; they're allowed to just limit the 
    55                         * current.  khubd will turn the power back on. 
  • trunk/target/linux/brcm63xx/patches-2.6.37/977-ssb_export_fallback_sprom.patch

    r25629 r26801  
    1 --- a/drivers/ssb/sprom.c 
    2 +++ b/drivers/ssb/sprom.c 
    3 @@ -176,6 +176,7 @@ const struct ssb_sprom *ssb_get_fallback 
     1--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c 
     2+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c 
     3@@ -1907,7 +1907,7 @@ static void __init nb4_nvram_fixup(void) 
     4  * bcm4318 WLAN work 
     5  */ 
     6 #ifdef CONFIG_SSB_PCIHOST 
     7-static struct ssb_sprom bcm63xx_sprom = { 
     8+struct ssb_sprom bcm63xx_sprom = { 
     9        .revision               = 0x02, 
     10        .board_rev              = 0x17, 
     11        .country_code           = 0x0, 
     12@@ -1927,6 +1927,7 @@ static struct ssb_sprom bcm63xx_sprom = 
     13        .boardflags_lo          = 0x2848, 
     14        .boardflags_hi          = 0x0000, 
     15 }; 
     16+EXPORT_SYMBOL(bcm63xx_sprom); 
     17  
     18 int bcm63xx_get_fallback_sprom(struct ssb_bus *bus) 
    419 { 
    5         return fallback_sprom; 
    6  } 
    7 +EXPORT_SYMBOL(ssb_get_fallback_sprom); 
    8   
    9  /* http://bcm-v4.sipsolutions.net/802.11/IsSpromAvailable */ 
    10  bool ssb_is_sprom_available(struct ssb_bus *bus) 
    11 --- a/include/linux/ssb/ssb.h 
    12 +++ b/include/linux/ssb/ssb.h 
    13 @@ -401,6 +401,7 @@ extern bool ssb_is_sprom_available(struc 
    14  /* Set a fallback SPROM. 
    15   * See kdoc at the function definition for complete documentation. */ 
    16  extern int ssb_arch_set_fallback_sprom(const struct ssb_sprom *sprom); 
    17 +extern const struct ssb_sprom *ssb_get_fallback_sprom(void); 
    18   
    19  /* Suspend a SSB bus. 
    20   * Call this from the parent bus suspend routine. */ 
Note: See TracChangeset for help on using the changeset viewer.