diff options
13 files changed, 1213 insertions, 760 deletions
diff --git a/package/mac80211/patches/840-brcmsmac-backport.patch b/package/mac80211/patches/840-brcmsmac-backport.patch new file mode 100644 index 0000000000..8275033645 --- /dev/null +++ b/package/mac80211/patches/840-brcmsmac-backport.patch @@ -0,0 +1,1193 @@ +--- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c ++++ b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c +@@ -320,10 +320,6 @@ + #define IS_SIM(chippkg) \ + ((chippkg == HDLSIM_PKG_ID) || (chippkg == HWSIM_PKG_ID)) + +-#define PCIE(sih) (ai_get_buscoretype(sih) == PCIE_CORE_ID) +- +-#define PCI_FORCEHT(sih) (PCIE(sih) && (ai_get_chip_id(sih) == BCM4716_CHIP_ID)) +- + #ifdef DEBUG + #define SI_MSG(fmt, ...) pr_debug(fmt, ##__VA_ARGS__) + #else +@@ -475,9 +471,6 @@ ai_buscore_setup(struct si_info *sii, st + sii->pub.pmurev = sii->pub.pmucaps & PCAP_REV_MASK; + } + +- /* figure out buscore */ +- sii->buscore = ai_findcore(&sii->pub, PCIE_CORE_ID, 0); +- + return true; + } + +@@ -485,11 +478,7 @@ static struct si_info *ai_doattach(struc + struct bcma_bus *pbus) + { + struct si_pub *sih = &sii->pub; +- u32 w, savewin; + struct bcma_device *cc; +- struct ssb_sprom *sprom = &pbus->sprom; +- +- savewin = 0; + + sii->icbus = pbus; + sii->pcibus = pbus->host_pci; +@@ -512,47 +501,7 @@ static struct si_info *ai_doattach(struc + + /* PMU specific initializations */ + if (ai_get_cccaps(sih) & CC_CAP_PMU) { +- si_pmu_init(sih); + (void)si_pmu_measure_alpclk(sih); +- si_pmu_res_init(sih); +- } +- +- /* setup the GPIO based LED powersave register */ +- w = (sprom->leddc_on_time << BCMA_CC_GPIOTIMER_ONTIME_SHIFT) | +- (sprom->leddc_off_time << BCMA_CC_GPIOTIMER_OFFTIME_SHIFT); +- if (w == 0) +- w = DEFAULT_GPIOTIMERVAL; +- ai_cc_reg(sih, offsetof(struct chipcregs, gpiotimerval), +- ~0, w); +- +- if (ai_get_chip_id(sih) == BCM43224_CHIP_ID) { +- /* +- * enable 12 mA drive strenth for 43224 and +- * set chipControl register bit 15 +- */ +- if (ai_get_chiprev(sih) == 0) { +- SI_MSG("Applying 43224A0 WARs\n"); +- ai_cc_reg(sih, offsetof(struct chipcregs, chipcontrol), +- CCTRL43224_GPIO_TOGGLE, +- CCTRL43224_GPIO_TOGGLE); +- si_pmu_chipcontrol(sih, 0, CCTRL_43224A0_12MA_LED_DRIVE, +- CCTRL_43224A0_12MA_LED_DRIVE); +- } +- if (ai_get_chiprev(sih) >= 1) { +- SI_MSG("Applying 43224B0+ WARs\n"); +- si_pmu_chipcontrol(sih, 0, CCTRL_43224B0_12MA_LED_DRIVE, +- CCTRL_43224B0_12MA_LED_DRIVE); +- } +- } +- +- if (ai_get_chip_id(sih) == BCM4313_CHIP_ID) { +- /* +- * enable 12 mA drive strenth for 4313 and +- * set chipControl register bit 1 +- */ +- SI_MSG("Applying 4313 WARs\n"); +- si_pmu_chipcontrol(sih, 0, CCTRL_4313_12MA_LED_DRIVE, +- CCTRL_4313_12MA_LED_DRIVE); + } + + return sii; +@@ -591,7 +540,7 @@ void ai_detach(struct si_pub *sih) + struct si_pub *si_local = NULL; + memcpy(&si_local, &sih, sizeof(struct si_pub **)); + +- sii = (struct si_info *)sih; ++ sii = container_of(sih, struct si_info, pub); + + if (sii == NULL) + return; +@@ -599,27 +548,6 @@ void ai_detach(struct si_pub *sih) + kfree(sii); + } + +-/* return index of coreid or BADIDX if not found */ +-struct bcma_device *ai_findcore(struct si_pub *sih, u16 coreid, u16 coreunit) +-{ +- struct bcma_device *core; +- struct si_info *sii; +- uint found; +- +- sii = (struct si_info *)sih; +- +- found = 0; +- +- list_for_each_entry(core, &sii->icbus->cores, list) +- if (core->id.id == coreid) { +- if (found == coreunit) +- return core; +- found++; +- } +- +- return NULL; +-} +- + /* + * read/modify chipcommon core register. + */ +@@ -629,7 +557,7 @@ uint ai_cc_reg(struct si_pub *sih, uint + u32 w; + struct si_info *sii; + +- sii = (struct si_info *)sih; ++ sii = container_of(sih, struct si_info, pub); + cc = sii->icbus->drv_cc.core; + + /* mask and set */ +@@ -695,12 +623,13 @@ ai_clkctl_setdelay(struct si_pub *sih, s + /* initialize power control delay registers */ + void ai_clkctl_init(struct si_pub *sih) + { ++ struct si_info *sii = container_of(sih, struct si_info, pub); + struct bcma_device *cc; + + if (!(ai_get_cccaps(sih) & CC_CAP_PWR_CTL)) + return; + +- cc = ai_findcore(sih, BCMA_CORE_CHIPCOMMON, 0); ++ cc = sii->icbus->drv_cc.core; + if (cc == NULL) + return; + +@@ -722,7 +651,7 @@ u16 ai_clkctl_fast_pwrup_delay(struct si + uint slowminfreq; + u16 fpdelay; + +- sii = (struct si_info *)sih; ++ sii = container_of(sih, struct si_info, pub); + if (ai_get_cccaps(sih) & CC_CAP_PMU) { + fpdelay = si_pmu_fast_pwrup_delay(sih); + return fpdelay; +@@ -732,7 +661,7 @@ u16 ai_clkctl_fast_pwrup_delay(struct si + return 0; + + fpdelay = 0; +- cc = ai_findcore(sih, CC_CORE_ID, 0); ++ cc = sii->icbus->drv_cc.core; + if (cc) { + slowminfreq = ai_slowclk_freq(sih, false, cc); + fpdelay = (((bcma_read32(cc, CHIPCREGOFFS(pll_on_delay)) + 2) +@@ -754,12 +683,9 @@ bool ai_clkctl_cc(struct si_pub *sih, en + struct si_info *sii; + struct bcma_device *cc; + +- sii = (struct si_info *)sih; +- +- if (PCI_FORCEHT(sih)) +- return mode == BCMA_CLKMODE_FAST; ++ sii = container_of(sih, struct si_info, pub); + +- cc = ai_findcore(&sii->pub, BCMA_CORE_CHIPCOMMON, 0); ++ cc = sii->icbus->drv_cc.core; + bcma_core_set_clockmode(cc, mode); + return mode == BCMA_CLKMODE_FAST; + } +@@ -767,16 +693,10 @@ bool ai_clkctl_cc(struct si_pub *sih, en + void ai_pci_up(struct si_pub *sih) + { + struct si_info *sii; +- struct bcma_device *cc; + +- sii = (struct si_info *)sih; ++ sii = container_of(sih, struct si_info, pub); + +- if (PCI_FORCEHT(sih)) { +- cc = ai_findcore(&sii->pub, BCMA_CORE_CHIPCOMMON, 0); +- bcma_core_set_clockmode(cc, BCMA_CLKMODE_FAST); +- } +- +- if (PCIE(sih)) ++ if (sii->icbus->hosttype == BCMA_HOSTTYPE_PCI) + bcma_core_pci_extend_L1timer(&sii->icbus->drv_pci, true); + } + +@@ -784,26 +704,20 @@ void ai_pci_up(struct si_pub *sih) + void ai_pci_down(struct si_pub *sih) + { + struct si_info *sii; +- struct bcma_device *cc; + +- sii = (struct si_info *)sih; ++ sii = container_of(sih, struct si_info, pub); + +- /* release FORCEHT since chip is going to "down" state */ +- if (PCI_FORCEHT(sih)) { +- cc = ai_findcore(&sii->pub, BCMA_CORE_CHIPCOMMON, 0); +- bcma_core_set_clockmode(cc, BCMA_CLKMODE_DYNAMIC); +- } +- +- if (PCIE(sih)) ++ if (sii->icbus->hosttype == BCMA_HOSTTYPE_PCI) + bcma_core_pci_extend_L1timer(&sii->icbus->drv_pci, false); + } + + /* Enable BT-COEX & Ex-PA for 4313 */ + void ai_epa_4313war(struct si_pub *sih) + { ++ struct si_info *sii = container_of(sih, struct si_info, pub); + struct bcma_device *cc; + +- cc = ai_findcore(sih, CC_CORE_ID, 0); ++ cc = sii->icbus->drv_cc.core; + + /* EPA Fix */ + bcma_set32(cc, CHIPCREGOFFS(gpiocontrol), GPIO_CTRL_EPA_EN_MASK); +@@ -815,7 +729,7 @@ bool ai_deviceremoved(struct si_pub *sih + u32 w; + struct si_info *sii; + +- sii = (struct si_info *)sih; ++ sii = container_of(sih, struct si_info, pub); + + if (sii->icbus->hosttype != BCMA_HOSTTYPE_PCI) + return false; +@@ -826,15 +740,3 @@ bool ai_deviceremoved(struct si_pub *sih + + return false; + } +- +-uint ai_get_buscoretype(struct si_pub *sih) +-{ +- struct si_info *sii = (struct si_info *)sih; +- return sii->buscore->id.id; +-} +- +-uint ai_get_buscorerev(struct si_pub *sih) +-{ +- struct si_info *sii = (struct si_info *)sih; +- return sii->buscore->id.rev; +-} +--- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.h ++++ b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.h +@@ -88,16 +88,6 @@ + #define CLKD_OTP 0x000f0000 + #define CLKD_OTP_SHIFT 16 + +-/* Package IDs */ +-#define BCM4717_PKG_ID 9 /* 4717 package id */ +-#define BCM4718_PKG_ID 10 /* 4718 package id */ +-#define BCM43224_FAB_SMIC 0xa /* the chip is manufactured by SMIC */ +- +-/* these are router chips */ +-#define BCM4716_CHIP_ID 0x4716 /* 4716 chipcommon chipid */ +-#define BCM47162_CHIP_ID 47162 /* 47162 chipcommon chipid */ +-#define BCM4748_CHIP_ID 0x4748 /* 4716 chipcommon chipid (OTP, RBBU) */ +- + /* dynamic clock control defines */ + #define LPOMINFREQ 25000 /* low power oscillator min */ + #define LPOMAXFREQ 43000 /* low power oscillator max */ +@@ -168,7 +158,6 @@ struct si_info { + struct si_pub pub; /* back plane public state (must be first) */ + struct bcma_bus *icbus; /* handle to soc interconnect bus */ + struct pci_dev *pcibus; /* handle to pci bus */ +- struct bcma_device *buscore; + + u32 chipst; /* chip status */ + }; +@@ -183,8 +172,6 @@ struct si_info { + + + /* AMBA Interconnect exported externs */ +-extern struct bcma_device *ai_findcore(struct si_pub *sih, +- u16 coreid, u16 coreunit); + extern u32 ai_core_cflags(struct bcma_device *core, u32 mask, u32 val); + + /* === exported functions === */ +@@ -202,9 +189,6 @@ extern void ai_pci_up(struct si_pub *sih + /* Enable Ex-PA for 4313 */ + extern void ai_epa_4313war(struct si_pub *sih); + +-extern uint ai_get_buscoretype(struct si_pub *sih); +-extern uint ai_get_buscorerev(struct si_pub *sih); +- + static inline u32 ai_get_cccaps(struct si_pub *sih) + { + return sih->cccaps; +--- a/drivers/net/wireless/brcm80211/brcmsmac/dma.c ++++ b/drivers/net/wireless/brcm80211/brcmsmac/dma.c +@@ -574,6 +574,7 @@ struct dma_pub *dma_attach(char *name, s + struct dma_info *di; + u8 rev = core->id.rev; + uint size; ++ struct si_info *sii = container_of(sih, struct si_info, pub); + + /* allocate private info structure */ + di = kzalloc(sizeof(struct dma_info), GFP_ATOMIC); +@@ -634,16 +635,20 @@ struct dma_pub *dma_attach(char *name, s + */ + di->ddoffsetlow = 0; + di->dataoffsetlow = 0; +- /* add offset for pcie with DMA64 bus */ +- di->ddoffsetlow = 0; +- di->ddoffsethigh = SI_PCIE_DMA_H32; ++ /* for pci bus, add offset */ ++ if (sii->icbus->hosttype == BCMA_HOSTTYPE_PCI) { ++ /* add offset for pcie with DMA64 bus */ ++ di->ddoffsetlow = 0; ++ di->ddoffsethigh = SI_PCIE_DMA_H32; ++ } + di->dataoffsetlow = di->ddoffsetlow; + di->dataoffsethigh = di->ddoffsethigh; ++ + /* WAR64450 : DMACtl.Addr ext fields are not supported in SDIOD core. */ +- if ((core->id.id == SDIOD_CORE_ID) ++ if ((core->id.id == BCMA_CORE_SDIO_DEV) + && ((rev > 0) && (rev <= 2))) + di->addrext = false; +- else if ((core->id.id == I2S_CORE_ID) && ++ else if ((core->id.id == BCMA_CORE_I2S) && + ((rev == 0) || (rev == 1))) + di->addrext = false; + else +--- a/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c ++++ b/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c +@@ -321,8 +321,7 @@ static void brcms_ops_stop(struct ieee80 + return; + + spin_lock_bh(&wl->lock); +- status = brcms_c_chipmatch(wl->wlc->hw->vendorid, +- wl->wlc->hw->deviceid); ++ status = brcms_c_chipmatch(wl->wlc->hw->d11core); + spin_unlock_bh(&wl->lock); + if (!status) { + wiphy_err(wl->wiphy, +--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c ++++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c +@@ -271,7 +271,7 @@ struct brcms_c_bit_desc { + */ + + /* Starting corerev for the fifo size table */ +-#define XMTFIFOTBL_STARTREV 20 ++#define XMTFIFOTBL_STARTREV 17 + + struct d11init { + __le16 addr; +@@ -335,6 +335,12 @@ const u8 wlc_prio2prec_map[] = { + }; + + static const u16 xmtfifo_sz[][NFIFO] = { ++ /* corerev 17: 5120, 49152, 49152, 5376, 4352, 1280 */ ++ {20, 192, 192, 21, 17, 5}, ++ /* corerev 18: */ ++ {0, 0, 0, 0, 0, 0}, ++ /* corerev 19: */ ++ {0, 0, 0, 0, 0, 0}, + /* corerev 20: 5120, 49152, 49152, 5376, 4352, 1280 */ + {20, 192, 192, 21, 17, 5}, + /* corerev 21: 2304, 14848, 5632, 3584, 3584, 1280 */ +@@ -345,6 +351,14 @@ static const u16 xmtfifo_sz[][NFIFO] = { + {20, 192, 192, 21, 17, 5}, + /* corerev 24: 2304, 14848, 5632, 3584, 3584, 1280 */ + {9, 58, 22, 14, 14, 5}, ++ /* corerev 25: */ ++ {0, 0, 0, 0, 0, 0}, ++ /* corerev 26: */ ++ {0, 0, 0, 0, 0, 0}, ++ /* corerev 27: */ ++ {0, 0, 0, 0, 0, 0}, ++ /* corerev 28: 2304, 14848, 5632, 3584, 3584, 1280 */ ++ {9, 58, 22, 14, 14, 5}, + }; + + #ifdef DEBUG +@@ -1944,7 +1958,8 @@ static bool brcms_b_radio_read_hwdisable + * accesses phyreg throughput mac. This can be skipped since + * only mac reg is accessed below + */ +- flags |= SICF_PCLKE; ++ if (D11REV_GE(wlc_hw->corerev, 18)) ++ flags |= SICF_PCLKE; + + /* + * TODO: test suspend/resume +@@ -2025,7 +2040,8 @@ void brcms_b_corereset(struct brcms_hard + * phyreg throughput mac, AND phy_reset is skipped at early stage when + * band->pi is invalid. need to enable PHY CLK + */ +- flags |= SICF_PCLKE; ++ if (D11REV_GE(wlc_hw->corerev, 18)) ++ flags |= SICF_PCLKE; + + /* + * reset the core +@@ -2128,8 +2144,8 @@ void brcms_b_switch_macfreq(struct brcms + { + struct bcma_device *core = wlc_hw->d11core; + +- if ((ai_get_chip_id(wlc_hw->sih) == BCM43224_CHIP_ID) || +- (ai_get_chip_id(wlc_hw->sih) == BCM43225_CHIP_ID)) { ++ if ((ai_get_chip_id(wlc_hw->sih) == BCMA_CHIP_ID_BCM43224) || ++ (ai_get_chip_id(wlc_hw->sih) == BCMA_CHIP_ID_BCM43225)) { + if (spurmode == WL_SPURAVOID_ON2) { /* 126Mhz */ + bcma_write16(core, D11REGOFFS(tsf_clk_frac_l), 0x2082); + bcma_write16(core, D11REGOFFS(tsf_clk_frac_h), 0x8); +@@ -2793,7 +2809,7 @@ void brcms_b_core_phypll_ctl(struct brcm + tmp = 0; + + if (on) { +- if ((ai_get_chip_id(wlc_hw->sih) == BCM4313_CHIP_ID)) { ++ if ((ai_get_chip_id(wlc_hw->sih) == BCMA_CHIP_ID_BCM4313)) { + bcma_set32(core, D11REGOFFS(clk_ctl_st), + CCS_ERSRC_REQ_HT | + CCS_ERSRC_REQ_D11PLL | +@@ -4220,9 +4236,8 @@ static void brcms_c_radio_timer(void *ar + } + + /* common low-level watchdog code */ +-static void brcms_b_watchdog(void *arg) ++static void brcms_b_watchdog(struct brcms_c_info *wlc) + { +- struct brcms_c_info *wlc = (struct brcms_c_info *) arg; + struct brcms_hardware *wlc_hw = wlc->hw; + + BCMMSG(wlc->wiphy, "wl%d\n", wlc_hw->unit); +@@ -4243,10 +4258,8 @@ static void brcms_b_watchdog(void *arg) + } + + /* common watchdog code */ +-static void brcms_c_watchdog(void *arg) ++static void brcms_c_watchdog(struct brcms_c_info *wlc) + { +- struct brcms_c_info *wlc = (struct brcms_c_info *) arg; +- + BCMMSG(wlc->wiphy, "wl%d\n", wlc->pub->unit); + + if (!wlc->pub->up) +@@ -4286,7 +4299,9 @@ static void brcms_c_watchdog(void *arg) + + static void brcms_c_watchdog_by_timer(void *arg) + { +- brcms_c_watchdog(arg); ++ struct brcms_c_info *wlc = (struct brcms_c_info *) arg; ++ ++ brcms_c_watchdog(wlc); + } + + static bool brcms_c_timers_init(struct brcms_c_info *wlc, int unit) +@@ -4456,11 +4471,9 @@ static int brcms_b_attach(struct brcms_c + } + + /* verify again the device is supported */ +- if (core->bus->hosttype == BCMA_HOSTTYPE_PCI && +- !brcms_c_chipmatch(pcidev->vendor, pcidev->device)) { +- wiphy_err(wiphy, "wl%d: brcms_b_attach: Unsupported " +- "vendor/device (0x%x/0x%x)\n", +- unit, pcidev->vendor, pcidev->device); ++ if (!brcms_c_chipmatch(core)) { ++ wiphy_err(wiphy, "wl%d: brcms_b_attach: Unsupported device\n", ++ unit); + err = 12; + goto fail; + } +@@ -4530,7 +4543,7 @@ static int brcms_b_attach(struct brcms_c + else + wlc_hw->_nbands = 1; + +- if ((ai_get_chip_id(wlc_hw->sih) == BCM43225_CHIP_ID)) ++ if ((ai_get_chip_id(wlc_hw->sih) == BCMA_CHIP_ID_BCM43225)) + wlc_hw->_nbands = 1; + + /* BMAC_NOTE: remove init of pub values when brcms_c_attach() +@@ -4597,8 +4610,12 @@ static int brcms_b_attach(struct brcms_c + wlc_hw->machwcap_backup = wlc_hw->machwcap; + + /* init tx fifo size */ ++ WARN_ON((wlc_hw->corerev - XMTFIFOTBL_STARTREV) < 0 || ++ (wlc_hw->corerev - XMTFIFOTBL_STARTREV) > ++ ARRAY_SIZE(xmtfifo_sz)); + wlc_hw->xmtfifo_sz = + xmtfifo_sz[(wlc_hw->corerev - XMTFIFOTBL_STARTREV)]; ++ WARN_ON(!wlc_hw->xmtfifo_sz[0]); + + /* Get a phy for this band */ + wlc_hw->band->pi = +@@ -5038,7 +5055,7 @@ static void brcms_b_hw_up(struct brcms_h + wlc_hw->wlc->pub->hw_up = true; + + if ((wlc_hw->boardflags & BFL_FEM) +- && (ai_get_chip_id(wlc_hw->sih) == BCM4313_CHIP_ID)) { ++ && (ai_get_chip_id(wlc_hw->sih) == BCMA_CHIP_ID_BCM4313)) { + if (! + (wlc_hw->boardrev >= 0x1250 + && (wlc_hw->boardflags & BFL_FEM_BT))) +@@ -5132,7 +5149,7 @@ int brcms_c_up(struct brcms_c_info *wlc) + } + + if ((wlc->pub->boardflags & BFL_FEM) +- && (ai_get_chip_id(wlc->hw->sih) == BCM4313_CHIP_ID)) { ++ && (ai_get_chip_id(wlc->hw->sih) == BCMA_CHIP_ID_BCM4313)) { + if (wlc->pub->boardrev >= 0x1250 + && (wlc->pub->boardflags & BFL_FEM_BT)) + brcms_b_mhf(wlc->hw, MHF5, MHF5_4313_GPIOCTRL, +@@ -5769,8 +5786,12 @@ void brcms_c_print_txstatus(struct tx_st + (txs->ackphyrxsh & PRXS1_SQ_MASK) >> PRXS1_SQ_SHIFT); + } + +-bool brcms_c_chipmatch(u16 vendor, u16 device) ++static bool brcms_c_chipmatch_pci(struct bcma_device *core) + { ++ struct pci_dev *pcidev = core->bus->host_pci; ++ u16 vendor = pcidev->vendor; ++ u16 device = pcidev->device; ++ + if (vendor != PCI_VENDOR_ID_BROADCOM) { + pr_err("unknown vendor id %04x\n", vendor); + return false; +@@ -5789,6 +5810,30 @@ bool brcms_c_chipmatch(u16 vendor, u16 d + return false; + } + ++static bool brcms_c_chipmatch_soc(struct bcma_device *core) ++{ ++ struct bcma_chipinfo *chipinfo = &core->bus->chipinfo; ++ ++ if (chipinfo->id == BCMA_CHIP_ID_BCM4716) ++ return true; ++ ++ pr_err("unknown chip id %04x\n", chipinfo->id); ++ return false; ++} ++ ++bool brcms_c_chipmatch(struct bcma_device *core) ++{ ++ switch (core->bus->hosttype) { ++ case BCMA_HOSTTYPE_PCI: ++ return brcms_c_chipmatch_pci(core); ++ case BCMA_HOSTTYPE_SOC: ++ return brcms_c_chipmatch_soc(core); ++ default: ++ pr_err("unknown host type: %i\n", core->bus->hosttype); ++ return false; ++ } ++} ++ + #if defined(DEBUG) + void brcms_c_print_txdesc(struct d11txh *txh) + { +--- a/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_cmn.c ++++ b/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_cmn.c +@@ -198,6 +198,8 @@ u16 read_radio_reg(struct brcms_phy *pi, + + void write_radio_reg(struct brcms_phy *pi, u16 addr, u16 val) + { ++ struct si_info *sii = container_of(pi->sh->sih, struct si_info, pub); ++ + if ((D11REV_GE(pi->sh->corerev, 24)) || + (D11REV_IS(pi->sh->corerev, 22) + && (pi->pubpi.phy_type != PHY_TYPE_SSN))) { +@@ -209,7 +211,8 @@ void write_radio_reg(struct brcms_phy *p + bcma_write16(pi->d11core, D11REGOFFS(phy4wdatalo), val); + } + +- if (++pi->phy_wreg >= pi->phy_wreg_limit) { ++ if ((sii->icbus->hosttype == BCMA_HOSTTYPE_PCI) && ++ (++pi->phy_wreg >= pi->phy_wreg_limit)) { + (void)bcma_read32(pi->d11core, D11REGOFFS(maccontrol)); + pi->phy_wreg = 0; + } +@@ -292,10 +295,13 @@ void write_phy_reg(struct brcms_phy *pi, + bcma_wflush16(pi->d11core, D11REGOFFS(phyregaddr), addr); + bcma_write16(pi->d11core, D11REGOFFS(phyregdata), val); + if (addr == 0x72) +- (void)bcma_read16(pi->d11core, D11REGOFFS(phyversion)); ++ (void)bcma_read16(pi->d11core, D11REGOFFS(phyregdata)); + #else ++ struct si_info *sii = container_of(pi->sh->sih, struct si_info, pub); ++ + bcma_write32(pi->d11core, D11REGOFFS(phyregaddr), addr | (val << 16)); +- if (++pi->phy_wreg >= pi->phy_wreg_limit) { ++ if ((sii->icbus->hosttype == BCMA_HOSTTYPE_PCI) && ++ (++pi->phy_wreg >= pi->phy_wreg_limit)) { + pi->phy_wreg = 0; + (void)bcma_read16(pi->d11core, D11REGOFFS(phyversion)); + } +@@ -837,7 +843,7 @@ wlc_phy_table_addr(struct brcms_phy *pi, + pi->tbl_data_hi = tblDataHi; + pi->tbl_data_lo = tblDataLo; + +- if (pi->sh->chip == BCM43224_CHIP_ID && ++ if (pi->sh->chip == BCMA_CHIP_ID_BCM43224 && + pi->sh->chiprev == 1) { + pi->tbl_addr = tblAddr; + pi->tbl_save_id = tbl_id; +@@ -847,7 +853,7 @@ wlc_phy_table_addr(struct brcms_phy *pi, + + void wlc_phy_table_data_write(struct brcms_phy *pi, uint width, u32 val) + { +- if ((pi->sh->chip == BCM43224_CHIP_ID) && ++ if ((pi->sh->chip == BCMA_CHIP_ID_BCM43224) && + (pi->sh->chiprev == 1) && + (pi->tbl_save_id == NPHY_TBL_ID_ANTSWCTRLLUT)) { + read_phy_reg(pi, pi->tbl_data_lo); +@@ -881,7 +887,7 @@ wlc_phy_write_table(struct brcms_phy *pi + + for (idx = 0; idx < ptbl_info->tbl_len; idx++) { + +- if ((pi->sh->chip == BCM43224_CHIP_ID) && ++ if ((pi->sh->chip == BCMA_CHIP_ID_BCM43224) && + (pi->sh->chiprev == 1) && + (tbl_id == NPHY_TBL_ID_ANTSWCTRLLUT)) { + read_phy_reg(pi, tblDataLo); +@@ -918,7 +924,7 @@ wlc_phy_read_table(struct brcms_phy *pi, + + for (idx = 0; idx < ptbl_info->tbl_len; idx++) { + +- if ((pi->sh->chip == BCM43224_CHIP_ID) && ++ if ((pi->sh->chip == BCMA_CHIP_ID_BCM43224) && + (pi->sh->chiprev == 1)) { + (void)read_phy_reg(pi, tblDataLo); + +@@ -2894,7 +2900,7 @@ const u8 *wlc_phy_get_ofdm_rate_lookup(v + + void wlc_lcnphy_epa_switch(struct brcms_phy *pi, bool mode) + { +- if ((pi->sh->chip == BCM4313_CHIP_ID) && ++ if ((pi->sh->chip == BCMA_CHIP_ID_BCM4313) && + (pi->sh->boardflags & BFL_FEM)) { + if (mode) { + u16 txant = 0; +--- a/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_n.c ++++ b/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_n.c +@@ -17895,6 +17895,8 @@ static u32 *wlc_phy_get_ipa_gaintbl_nphy + nphy_tpc_txgain_ipa_2g_2057rev7; + } else if (NREV_IS(pi->pubpi.phy_rev, 6)) { + tx_pwrctrl_tbl = nphy_tpc_txgain_ipa_rev6; ++ if (pi->sh->chip == BCMA_CHIP_ID_BCM47162) ++ tx_pwrctrl_tbl = nphy_tpc_txgain_ipa_rev5; + } else if (NREV_IS(pi->pubpi.phy_rev, 5)) { + tx_pwrctrl_tbl = nphy_tpc_txgain_ipa_rev5; + } else { +@@ -19256,8 +19258,14 @@ static void wlc_phy_spurwar_nphy(struct + case 38: + case 102: + case 118: +- nphy_adj_tone_id_buf[0] = 0; +- nphy_adj_noise_var_buf[0] = 0x0; ++ if ((pi->sh->chip == BCMA_CHIP_ID_BCM4716) && ++ (pi->sh->chippkg == BCMA_PKG_ID_BCM4717)) { ++ nphy_adj_tone_id_buf[0] = 32; ++ nphy_adj_noise_var_buf[0] = 0x21f; ++ } else { ++ nphy_adj_tone_id_buf[0] = 0; ++ nphy_adj_noise_var_buf[0] = 0x0; ++ } + break; + case 134: + nphy_adj_tone_id_buf[0] = 32; +@@ -19311,8 +19319,8 @@ void wlc_phy_init_nphy(struct brcms_phy + pi->measure_hold |= PHY_HOLD_FOR_NOT_ASSOC; + + if ((ISNPHY(pi)) && (NREV_GE(pi->pubpi.phy_rev, 5)) && +- ((pi->sh->chippkg == BCM4717_PKG_ID) || +- (pi->sh->chippkg == BCM4718_PKG_ID))) { ++ ((pi->sh->chippkg == BCMA_PKG_ID_BCM4717) || ++ (pi->sh->chippkg == BCMA_PKG_ID_BCM4718))) { + if ((pi->sh->boardflags & BFL_EXTLNA) && + (CHSPEC_IS2G(pi->radio_chanspec))) + ai_cc_reg(pi->sh->sih, +@@ -19320,6 +19328,10 @@ void wlc_phy_init_nphy(struct brcms_phy + 0x40, 0x40); + } + ++ if ((!PHY_IPA(pi)) && (pi->sh->chip == BCMA_CHIP_ID_BCM5357)) ++ si_pmu_chipcontrol(pi->sh->sih, 1, CCTRL5357_EXTPA, ++ CCTRL5357_EXTPA); ++ + if ((pi->nphy_gband_spurwar2_en) && CHSPEC_IS2G(pi->radio_chanspec) && + CHSPEC_IS40(pi->radio_chanspec)) { + +@@ -20697,12 +20709,22 @@ wlc_phy_chanspec_radio2056_setup(struct + write_radio_reg(pi, RADIO_2056_SYN_PLL_LOOPFILTER2 | + RADIO_2056_SYN, 0x1f); + +- write_radio_reg(pi, +- RADIO_2056_SYN_PLL_LOOPFILTER4 | +- RADIO_2056_SYN, 0xb); +- write_radio_reg(pi, +- RADIO_2056_SYN_PLL_CP2 | +- RADIO_2056_SYN, 0x14); ++ if ((pi->sh->chip == BCMA_CHIP_ID_BCM4716) || ++ (pi->sh->chip == BCMA_CHIP_ID_BCM47162)) { ++ write_radio_reg(pi, ++ RADIO_2056_SYN_PLL_LOOPFILTER4 | ++ RADIO_2056_SYN, 0x14); ++ write_radio_reg(pi, ++ RADIO_2056_SYN_PLL_CP2 | ++ RADIO_2056_SYN, 0x00); ++ } else { ++ write_radio_reg(pi, ++ RADIO_2056_SYN_PLL_LOOPFILTER4 | ++ RADIO_2056_SYN, 0xb); ++ write_radio_reg(pi, ++ RADIO_2056_SYN_PLL_CP2 | ++ RADIO_2056_SYN, 0x14); ++ } + } + } + +@@ -20749,24 +20771,30 @@ wlc_phy_chanspec_radio2056_setup(struct + WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, + PADG_IDAC, 0xcc); + +- bias = 0x25; +- cascbias = 0x20; ++ if ((pi->sh->chip == BCMA_CHIP_ID_BCM4716) || ++ (pi->sh->chip == BCMA_CHIP_ID_BCM47162)) { ++ bias = 0x40; ++ cascbias = 0x45; ++ pag_boost_tune = 0x5; ++ pgag_boost_tune = 0x33; ++ padg_boost_tune = 0x77; ++ mixg_boost_tune = 0x55; ++ } else { ++ bias = 0x25; ++ cascbias = 0x20; + +- if ((pi->sh->chip == +- BCM43224_CHIP_ID) +- || (pi->sh->chip == +- BCM43225_CHIP_ID)) { +- if (pi->sh->chippkg == +- BCM43224_FAB_SMIC) { ++ if ((pi->sh->chip == BCMA_CHIP_ID_BCM43224 || ++ pi->sh->chip == BCMA_CHIP_ID_BCM43225) && ++ pi->sh->chippkg == BCMA_PKG_ID_BCM43224_FAB_SMIC) { + bias = 0x2a; + cascbias = 0x38; + } +- } + +- pag_boost_tune = 0x4; +- pgag_boost_tune = 0x03; +- padg_boost_tune = 0x77; +- mixg_boost_tune = 0x65; ++ pag_boost_tune = 0x4; ++ pgag_boost_tune = 0x03; ++ padg_boost_tune = 0x77; ++ mixg_boost_tune = 0x65; ++ } + + WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, + INTPAG_IMAIN_STAT, bias); +@@ -20865,11 +20893,10 @@ wlc_phy_chanspec_radio2056_setup(struct + + cascbias = 0x30; + +- if ((pi->sh->chip == BCM43224_CHIP_ID) || +- (pi->sh->chip == BCM43225_CHIP_ID)) { +- if (pi->sh->chippkg == BCM43224_FAB_SMIC) +- cascbias = 0x35; +- } ++ if ((pi->sh->chip == BCMA_CHIP_ID_BCM43224 || ++ pi->sh->chip == BCMA_CHIP_ID_BCM43225) && ++ pi->sh->chippkg == BCMA_PKG_ID_BCM43224_FAB_SMIC) ++ cascbias = 0x35; + + pabias = (pi->phy_pabias == 0) ? 0x30 : pi->phy_pabias; + +@@ -21108,6 +21135,7 @@ wlc_phy_chanspec_nphy_setup(struct brcms + const struct nphy_sfo_cfg *ci) + { + u16 val; ++ struct si_info *sii = container_of(pi->sh->sih, struct si_info, pub); + + val = read_phy_reg(pi, 0x09) & NPHY_BandControl_currentBand; + if (CHSPEC_IS5G(chanspec) && !val) { +@@ -21180,22 +21208,32 @@ wlc_phy_chanspec_nphy_setup(struct brcms + } else if (NREV_GE(pi->pubpi.phy_rev, 7)) { + if (val == 54) + spuravoid = 1; +- } else { +- if (pi->nphy_aband_spurwar_en && +- ((val == 38) || (val == 102) +- || (val == 118))) ++ } else if (pi->nphy_aband_spurwar_en && ++ ((val == 38) || (val == 102) || (val == 118))) { ++ if ((pi->sh->chip == BCMA_CHIP_ID_BCM4716) ++ && (pi->sh->chippkg == BCMA_PKG_ID_BCM4717)) { ++ spuravoid = 0; ++ } else { + spuravoid = 1; ++ } + } + + if (pi->phy_spuravoid == SPURAVOID_FORCEON) + spuravoid = 1; + +- wlapi_bmac_core_phypll_ctl(pi->sh->physhim, false); +- si_pmu_spuravoid_pllupdate(pi->sh->sih, spuravoid); +- wlapi_bmac_core_phypll_ctl(pi->sh->physhim, true); ++ if ((pi->sh->chip == BCMA_CHIP_ID_BCM4716) || ++ (pi->sh->chip == BCMA_CHIP_ID_BCM43225)) { ++ bcma_pmu_spuravoid_pllupdate(&sii->icbus->drv_cc, ++ spuravoid); ++ } else { ++ wlapi_bmac_core_phypll_ctl(pi->sh->physhim, false); ++ bcma_pmu_spuravoid_pllupdate(&sii->icbus->drv_cc, ++ spuravoid); ++ wlapi_bmac_core_phypll_ctl(pi->sh->physhim, true); ++ } + +- if ((pi->sh->chip == BCM43224_CHIP_ID) || +- (pi->sh->chip == BCM43225_CHIP_ID)) { ++ if ((pi->sh->chip == BCMA_CHIP_ID_BCM43224) || ++ (pi->sh->chip == BCMA_CHIP_ID_BCM43225)) { + if (spuravoid == 1) { + bcma_write16(pi->d11core, + D11REGOFFS(tsf_clk_frac_l), +@@ -21211,7 +21249,9 @@ wlc_phy_chanspec_nphy_setup(struct brcms + } + } + +- wlapi_bmac_core_phypll_reset(pi->sh->physhim); ++ if (!((pi->sh->chip == BCMA_CHIP_ID_BCM4716) || ++ (pi->sh->chip == BCMA_CHIP_ID_BCM47162))) ++ wlapi_bmac_core_phypll_reset(pi->sh->physhim); + + mod_phy_reg(pi, 0x01, (0x1 << 15), + ((spuravoid > 0) ? (0x1 << 15) : 0)); +@@ -22173,9 +22213,15 @@ s16 wlc_phy_tempsense_nphy(struct brcms_ + wlc_phy_table_write_nphy(pi, NPHY_TBL_ID_AFECTRL, 1, 0x03, 16, + &auxADC_rssi_ctrlH_save); + +- radio_temp[0] = (179 * (radio_temp[1] + radio_temp2[1]) +- + 82 * (auxADC_Vl) - 28861 + +- 128) / 256; ++ if (pi->sh->chip == BCMA_CHIP_ID_BCM5357) { ++ radio_temp[0] = (193 * (radio_temp[1] + radio_temp2[1]) ++ + 88 * (auxADC_Vl) - 27111 + ++ 128) / 256; ++ } else { ++ radio_temp[0] = (179 * (radio_temp[1] + radio_temp2[1]) ++ + 82 * (auxADC_Vl) - 28861 + ++ 128) / 256; ++ } + + offset = (s16) pi->phy_tempsense_offset; + +@@ -24925,14 +24971,16 @@ wlc_phy_a2_nphy(struct brcms_phy *pi, st + if (txgains->useindex) { + phy_a4 = 15 - ((txgains->index) >> 3); + if (CHSPEC_IS2G(pi->radio_chanspec)) { +- if (NREV_GE(pi->pubpi.phy_rev, 6)) ++ if (NREV_GE(pi->pubpi.phy_rev, 6) && ++ pi->sh->chip == BCMA_CHIP_ID_BCM47162) { ++ phy_a5 = 0x10f7 | (phy_a4 << 8); ++ } else if (NREV_GE(pi->pubpi.phy_rev, 6)) { + phy_a5 = 0x00f7 | (phy_a4 << 8); +- +- else +- if (NREV_IS(pi->pubpi.phy_rev, 5)) ++ } else if (NREV_IS(pi->pubpi.phy_rev, 5)) { + phy_a5 = 0x10f7 | (phy_a4 << 8); +- else ++ } else { + phy_a5 = 0x50f7 | (phy_a4 << 8); ++ } + } else { + phy_a5 = 0x70f7 | (phy_a4 << 8); + } +--- a/drivers/net/wireless/brcm80211/brcmsmac/pmu.c ++++ b/drivers/net/wireless/brcm80211/brcmsmac/pmu.c +@@ -74,16 +74,6 @@ + * PMU<rev>_PLL<num>_XX where <rev> is PMU corerev and <num> is an arbitrary + * number to differentiate different PLLs controlled by the same PMU rev. + */ +-/* pllcontrol registers: +- * ndiv_pwrdn, pwrdn_ch<x>, refcomp_pwrdn, dly_ch<x>, +- * p1div, p2div, _bypass_sdmod +- */ +-#define PMU1_PLL0_PLLCTL0 0 +-#define PMU1_PLL0_PLLCTL1 1 +-#define PMU1_PLL0_PLLCTL2 2 +-#define PMU1_PLL0_PLLCTL3 3 +-#define PMU1_PLL0_PLLCTL4 4 +-#define PMU1_PLL0_PLLCTL5 5 + + /* pmu XtalFreqRatio */ + #define PMU_XTALFREQ_REG_ILPCTR_MASK 0x00001FFF +@@ -108,118 +98,14 @@ + #define RES4313_HT_AVAIL_RSRC 14 + #define RES4313_MACPHY_CLK_AVAIL_RSRC 15 + +-/* Determine min/max rsrc masks. Value 0 leaves hardware at default. */ +-static void si_pmu_res_masks(struct si_pub *sih, u32 * pmin, u32 * pmax) +-{ +- u32 min_mask = 0, max_mask = 0; +- uint rsrcs; +- +- /* # resources */ +- rsrcs = (ai_get_pmucaps(sih) & PCAP_RC_MASK) >> PCAP_RC_SHIFT; +- +- /* determine min/max rsrc masks */ +- switch (ai_get_chip_id(sih)) { +- case BCM43224_CHIP_ID: +- case BCM43225_CHIP_ID: +- /* ??? */ +- break; +- +- case BCM4313_CHIP_ID: +- min_mask = PMURES_BIT(RES4313_BB_PU_RSRC) | +- PMURES_BIT(RES4313_XTAL_PU_RSRC) | +- PMURES_BIT(RES4313_ALP_AVAIL_RSRC) | +- PMURES_BIT(RES4313_BB_PLL_PWRSW_RSRC); +- max_mask = 0xffff; +- break; +- default: +- break; +- } +- +- *pmin = min_mask; +- *pmax = max_mask; +-} +- +-void si_pmu_spuravoid_pllupdate(struct si_pub *sih, u8 spuravoid) +-{ +- u32 tmp = 0; +- struct bcma_device *core; +- +- /* switch to chipc */ +- core = ai_findcore(sih, BCMA_CORE_CHIPCOMMON, 0); +- +- switch (ai_get_chip_id(sih)) { +- case BCM43224_CHIP_ID: +- case BCM43225_CHIP_ID: +- if (spuravoid == 1) { +- bcma_write32(core, CHIPCREGOFFS(pllcontrol_addr), +- PMU1_PLL0_PLLCTL0); +- bcma_write32(core, CHIPCREGOFFS(pllcontrol_data), +- 0x11500010); +- bcma_write32(core, CHIPCREGOFFS(pllcontrol_addr), +- PMU1_PLL0_PLLCTL1); +- bcma_write32(core, CHIPCREGOFFS(pllcontrol_data), +- 0x000C0C06); +- bcma_write32(core, CHIPCREGOFFS(pllcontrol_addr), +- PMU1_PLL0_PLLCTL2); +- bcma_write32(core, CHIPCREGOFFS(pllcontrol_data), +- 0x0F600a08); +- bcma_write32(core, CHIPCREGOFFS(pllcontrol_addr), +- PMU1_PLL0_PLLCTL3); +- bcma_write32(core, CHIPCREGOFFS(pllcontrol_data), +- 0x00000000); +- bcma_write32(core, CHIPCREGOFFS(pllcontrol_addr), +- PMU1_PLL0_PLLCTL4); +- bcma_write32(core, CHIPCREGOFFS(pllcontrol_data), +- 0x2001E920); +- bcma_write32(core, CHIPCREGOFFS(pllcontrol_addr), +- PMU1_PLL0_PLLCTL5); +- bcma_write32(core, CHIPCREGOFFS(pllcontrol_data), +- 0x88888815); +- } else { +- bcma_write32(core, CHIPCREGOFFS(pllcontrol_addr), +- PMU1_PLL0_PLLCTL0); +- bcma_write32(core, CHIPCREGOFFS(pllcontrol_data), +- 0x11100010); +- bcma_write32(core, CHIPCREGOFFS(pllcontrol_addr), +- PMU1_PLL0_PLLCTL1); +- bcma_write32(core, CHIPCREGOFFS(pllcontrol_data), +- 0x000c0c06); +- bcma_write32(core, CHIPCREGOFFS(pllcontrol_addr), +- PMU1_PLL0_PLLCTL2); +- bcma_write32(core, CHIPCREGOFFS(pllcontrol_data), +- 0x03000a08); +- bcma_write32(core, CHIPCREGOFFS(pllcontrol_addr), +- PMU1_PLL0_PLLCTL3); +- bcma_write32(core, CHIPCREGOFFS(pllcontrol_data), +- 0x00000000); +- bcma_write32(core, CHIPCREGOFFS(pllcontrol_addr), +- PMU1_PLL0_PLLCTL4); +- bcma_write32(core, CHIPCREGOFFS(pllcontrol_data), +- 0x200005c0); +- bcma_write32(core, CHIPCREGOFFS(pllcontrol_addr), +- PMU1_PLL0_PLLCTL5); +- bcma_write32(core, CHIPCREGOFFS(pllcontrol_data), +- 0x88888815); +- } +- tmp = 1 << 10; +- break; +- +- default: +- /* bail out */ +- return; +- } +- +- bcma_set32(core, CHIPCREGOFFS(pmucontrol), tmp); +-} +- + u16 si_pmu_fast_pwrup_delay(struct si_pub *sih) + { + uint delay = PMU_MAX_TRANSITION_DLY; + + switch (ai_get_chip_id(sih)) { +- case BCM43224_CHIP_ID: +- case BCM43225_CHIP_ID: +- case BCM4313_CHIP_ID: ++ case BCMA_CHIP_ID_BCM43224: ++ case BCMA_CHIP_ID_BCM43225: ++ case BCMA_CHIP_ID_BCM4313: + delay = 3700; + break; + default: +@@ -270,9 +156,9 @@ u32 si_pmu_alp_clock(struct si_pub *sih) + return clock; + + switch (ai_get_chip_id(sih)) { +- case BCM43224_CHIP_ID: +- case BCM43225_CHIP_ID: +- case BCM4313_CHIP_ID: ++ case BCMA_CHIP_ID_BCM43224: ++ case BCMA_CHIP_ID_BCM43225: ++ case BCMA_CHIP_ID_BCM4313: + /* always 20Mhz */ + clock = 20000 * 1000; + break; +@@ -283,51 +169,9 @@ u32 si_pmu_alp_clock(struct si_pub *sih) + return clock; + } + +-/* initialize PMU */ +-void si_pmu_init(struct si_pub *sih) +-{ +- struct bcma_device *core; +- +- /* select chipc */ +- core = ai_findcore(sih, BCMA_CORE_CHIPCOMMON, 0); +- +- if (ai_get_pmurev(sih) == 1) +- bcma_mask32(core, CHIPCREGOFFS(pmucontrol), +- ~PCTL_NOILP_ON_WAIT); +- else if (ai_get_pmurev(sih) >= 2) +- bcma_set32(core, CHIPCREGOFFS(pmucontrol), PCTL_NOILP_ON_WAIT); +-} +- +-/* initialize PMU resources */ +-void si_pmu_res_init(struct si_pub *sih) +-{ +- struct bcma_device *core; +- u32 min_mask = 0, max_mask = 0; +- +- /* select to chipc */ +- core = ai_findcore(sih, BCMA_CORE_CHIPCOMMON, 0); +- +- /* Determine min/max rsrc masks */ +- si_pmu_res_masks(sih, &min_mask, &max_mask); +- +- /* It is required to program max_mask first and then min_mask */ +- +- /* Program max resource mask */ +- +- if (max_mask) +- bcma_write32(core, CHIPCREGOFFS(max_res_mask), max_mask); +- +- /* Program min resource mask */ +- +- if (min_mask) +- bcma_write32(core, CHIPCREGOFFS(min_res_mask), min_mask); +- +- /* Add some delay; allow resources to come up and settle. */ +- mdelay(2); +-} +- + u32 si_pmu_measure_alpclk(struct si_pub *sih) + { ++ struct si_info *sii = container_of(sih, struct si_info, pub); + struct bcma_device *core; + u32 alp_khz; + +@@ -335,7 +179,7 @@ u32 si_pmu_measure_alpclk(struct si_pub + return 0; + + /* Remember original core before switch to chipc */ +- core = ai_findcore(sih, BCMA_CORE_CHIPCOMMON, 0); ++ core = sii->icbus->drv_cc.core; + + if (bcma_read32(core, CHIPCREGOFFS(pmustatus)) & PST_EXTLPOAVAIL) { + u32 ilp_ctr, alp_hz; +--- a/drivers/net/wireless/brcm80211/brcmsmac/pmu.h ++++ b/drivers/net/wireless/brcm80211/brcmsmac/pmu.h +@@ -26,10 +26,7 @@ extern u32 si_pmu_chipcontrol(struct si_ + extern u32 si_pmu_regcontrol(struct si_pub *sih, uint reg, u32 mask, u32 val); + extern u32 si_pmu_alp_clock(struct si_pub *sih); + extern void si_pmu_pllupd(struct si_pub *sih); +-extern void si_pmu_spuravoid_pllupdate(struct si_pub *sih, u8 spuravoid); + extern u32 si_pmu_pllcontrol(struct si_pub *sih, uint reg, u32 mask, u32 val); +-extern void si_pmu_init(struct si_pub *sih); +-extern void si_pmu_res_init(struct si_pub *sih); + extern u32 si_pmu_measure_alpclk(struct si_pub *sih); + + #endif /* _BRCM_PMU_H_ */ +--- a/drivers/net/wireless/brcm80211/brcmsmac/pub.h ++++ b/drivers/net/wireless/brcm80211/brcmsmac/pub.h +@@ -311,7 +311,7 @@ extern uint brcms_c_detach(struct brcms_ + extern int brcms_c_up(struct brcms_c_info *wlc); + extern uint brcms_c_down(struct brcms_c_info *wlc); + +-extern bool brcms_c_chipmatch(u16 vendor, u16 device); ++extern bool brcms_c_chipmatch(struct bcma_device *core); + extern void brcms_c_init(struct brcms_c_info *wlc, bool mute_tx); + extern void brcms_c_reset(struct brcms_c_info *wlc); + +--- a/drivers/net/wireless/brcm80211/include/soc.h ++++ b/drivers/net/wireless/brcm80211/include/soc.h +@@ -19,68 +19,6 @@ + + #define SI_ENUM_BASE 0x18000000 /* Enumeration space base */ + +-/* core codes */ +-#define NODEV_CORE_ID 0x700 /* Invalid coreid */ +-#define CC_CORE_ID 0x800 /* chipcommon core */ +-#define ILINE20_CORE_ID 0x801 /* iline20 core */ +-#define SRAM_CORE_ID 0x802 /* sram core */ +-#define SDRAM_CORE_ID 0x803 /* sdram core */ +-#define PCI_CORE_ID 0x804 /* pci core */ +-#define MIPS_CORE_ID 0x805 /* mips core */ +-#define ENET_CORE_ID 0x806 /* enet mac core */ +-#define CODEC_CORE_ID 0x807 /* v90 codec core */ +-#define USB_CORE_ID 0x808 /* usb 1.1 host/device core */ +-#define ADSL_CORE_ID 0x809 /* ADSL core */ +-#define ILINE100_CORE_ID 0x80a /* iline100 core */ +-#define IPSEC_CORE_ID 0x80b /* ipsec core */ +-#define UTOPIA_CORE_ID 0x80c /* utopia core */ +-#define PCMCIA_CORE_ID 0x80d /* pcmcia core */ +-#define SOCRAM_CORE_ID 0x80e /* internal memory core */ +-#define MEMC_CORE_ID 0x80f /* memc sdram core */ +-#define OFDM_CORE_ID 0x810 /* OFDM phy core */ +-#define EXTIF_CORE_ID 0x811 /* external interface core */ +-#define D11_CORE_ID 0x812 /* 802.11 MAC core */ +-#define APHY_CORE_ID 0x813 /* 802.11a phy core */ +-#define BPHY_CORE_ID 0x814 /* 802.11b phy core */ +-#define GPHY_CORE_ID 0x815 /* 802.11g phy core */ +-#define MIPS33_CORE_ID 0x816 /* mips3302 core */ +-#define USB11H_CORE_ID 0x817 /* usb 1.1 host core */ +-#define USB11D_CORE_ID 0x818 /* usb 1.1 device core */ +-#define USB20H_CORE_ID 0x819 /* usb 2.0 host core */ +-#define USB20D_CORE_ID 0x81a /* usb 2.0 device core */ +-#define SDIOH_CORE_ID 0x81b /* sdio host core */ +-#define ROBO_CORE_ID 0x81c /* roboswitch core */ +-#define ATA100_CORE_ID 0x81d /* parallel ATA core */ +-#define SATAXOR_CORE_ID 0x81e /* serial ATA & XOR DMA core */ +-#define GIGETH_CORE_ID 0x81f /* gigabit ethernet core */ +-#define PCIE_CORE_ID 0x820 /* pci express core */ +-#define NPHY_CORE_ID 0x821 /* 802.11n 2x2 phy core */ +-#define SRAMC_CORE_ID 0x822 /* SRAM controller core */ +-#define MINIMAC_CORE_ID 0x823 /* MINI MAC/phy core */ +-#define ARM11_CORE_ID 0x824 /* ARM 1176 core */ +-#define ARM7S_CORE_ID 0x825 /* ARM7tdmi-s core */ +-#define LPPHY_CORE_ID 0x826 /* 802.11a/b/g phy core */ +-#define PMU_CORE_ID 0x827 /* PMU core */ +-#define SSNPHY_CORE_ID 0x828 /* 802.11n single-stream phy core */ +-#define SDIOD_CORE_ID 0x829 /* SDIO device core */ +-#define ARMCM3_CORE_ID 0x82a /* ARM Cortex M3 core */ +-#define HTPHY_CORE_ID 0x82b /* 802.11n 4x4 phy core */ +-#define MIPS74K_CORE_ID 0x82c /* mips 74k core */ +-#define GMAC_CORE_ID 0x82d /* Gigabit MAC core */ +-#define DMEMC_CORE_ID 0x82e /* DDR1/2 memory controller core */ +-#define PCIERC_CORE_ID 0x82f /* PCIE Root Complex core */ +-#define OCP_CORE_ID 0x830 /* OCP2OCP bridge core */ +-#define SC_CORE_ID 0x831 /* shared common core */ +-#define AHB_CORE_ID 0x832 /* OCP2AHB bridge core */ +-#define SPIH_CORE_ID 0x833 /* SPI host core */ +-#define I2S_CORE_ID 0x834 /* I2S core */ +-#define DMEMS_CORE_ID 0x835 /* SDR/DDR1 memory controller core */ +-#define DEF_SHIM_COMP 0x837 /* SHIM component in ubus/6362 */ +-#define OOB_ROUTER_CORE_ID 0x367 /* OOB router core ID */ +-#define DEF_AI_COMP 0xfff /* Default component, in ai chips it +- * maps all unused address ranges +- */ +- + /* Common core control flags */ + #define SICF_BIST_EN 0x8000 + #define SICF_PME_EN 0x4000 diff --git a/package/mac80211/patches/840-brcmsmac-remove-PCIE.patch b/package/mac80211/patches/840-brcmsmac-remove-PCIE.patch deleted file mode 100644 index ccb6fd09b7..0000000000 --- a/package/mac80211/patches/840-brcmsmac-remove-PCIE.patch +++ /dev/null @@ -1,31 +0,0 @@ ---- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c -+++ b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c -@@ -320,9 +320,7 @@ - #define IS_SIM(chippkg) \ - ((chippkg == HDLSIM_PKG_ID) || (chippkg == HWSIM_PKG_ID)) - --#define PCIE(sih) (ai_get_buscoretype(sih) == PCIE_CORE_ID) -- --#define PCI_FORCEHT(sih) (PCIE(sih) && (ai_get_chip_id(sih) == BCM4716_CHIP_ID)) -+#define PCI_FORCEHT(sih) ((ai_get_buscoretype(sih) == PCIE_CORE_ID) && (ai_get_chip_id(sih) == BCM4716_CHIP_ID)) - - #ifdef DEBUG - #define SI_MSG(fmt, ...) pr_debug(fmt, ##__VA_ARGS__) -@@ -776,7 +774,7 @@ void ai_pci_up(struct si_pub *sih) - bcma_core_set_clockmode(cc, BCMA_CLKMODE_FAST); - } - -- if (PCIE(sih)) -+ if (sii->icbus->hosttype == BCMA_HOSTTYPE_PCI) - bcma_core_pci_extend_L1timer(&sii->icbus->drv_pci, true); - } - -@@ -794,7 +792,7 @@ void ai_pci_down(struct si_pub *sih) - bcma_core_set_clockmode(cc, BCMA_CLKMODE_DYNAMIC); - } - -- if (PCIE(sih)) -+ if (sii->icbus->hosttype == BCMA_HOSTTYPE_PCI) - bcma_core_pci_extend_L1timer(&sii->icbus->drv_pci, false); - } - diff --git a/package/mac80211/patches/841-brcmsmac-remove-PCI_FORCEHT.patch b/package/mac80211/patches/841-brcmsmac-remove-PCI_FORCEHT.patch deleted file mode 100644 index 0777a7822a..0000000000 --- a/package/mac80211/patches/841-brcmsmac-remove-PCI_FORCEHT.patch +++ /dev/null @@ -1,54 +0,0 @@ ---- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c -+++ b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c -@@ -320,8 +320,6 @@ - #define IS_SIM(chippkg) \ - ((chippkg == HDLSIM_PKG_ID) || (chippkg == HWSIM_PKG_ID)) - --#define PCI_FORCEHT(sih) ((ai_get_buscoretype(sih) == PCIE_CORE_ID) && (ai_get_chip_id(sih) == BCM4716_CHIP_ID)) -- - #ifdef DEBUG - #define SI_MSG(fmt, ...) pr_debug(fmt, ##__VA_ARGS__) - #else -@@ -754,9 +752,6 @@ bool ai_clkctl_cc(struct si_pub *sih, en - - sii = (struct si_info *)sih; - -- if (PCI_FORCEHT(sih)) -- return mode == BCMA_CLKMODE_FAST; -- - cc = ai_findcore(&sii->pub, BCMA_CORE_CHIPCOMMON, 0); - bcma_core_set_clockmode(cc, mode); - return mode == BCMA_CLKMODE_FAST; -@@ -765,15 +760,9 @@ bool ai_clkctl_cc(struct si_pub *sih, en - void ai_pci_up(struct si_pub *sih) - { - struct si_info *sii; -- struct bcma_device *cc; - - sii = (struct si_info *)sih; - -- if (PCI_FORCEHT(sih)) { -- cc = ai_findcore(&sii->pub, BCMA_CORE_CHIPCOMMON, 0); -- bcma_core_set_clockmode(cc, BCMA_CLKMODE_FAST); -- } -- - if (sii->icbus->hosttype == BCMA_HOSTTYPE_PCI) - bcma_core_pci_extend_L1timer(&sii->icbus->drv_pci, true); - } -@@ -782,16 +771,9 @@ void ai_pci_up(struct si_pub *sih) - void ai_pci_down(struct si_pub *sih) - { - struct si_info *sii; -- struct bcma_device *cc; - - sii = (struct si_info *)sih; - -- /* release FORCEHT since chip is going to "down" state */ -- if (PCI_FORCEHT(sih)) { -- cc = ai_findcore(&sii->pub, BCMA_CORE_CHIPCOMMON, 0); -- bcma_core_set_clockmode(cc, BCMA_CLKMODE_DYNAMIC); -- } -- - if (sii->icbus->hosttype == BCMA_HOSTTYPE_PCI) - bcma_core_pci_extend_L1timer(&sii->icbus->drv_pci, false); - } diff --git a/package/mac80211/patches/842-brcmsmac-remove-ai_get_buscoretype-and-ai_get_buscor.patch b/package/mac80211/patches/842-brcmsmac-remove-ai_get_buscoretype-and-ai_get_buscor.patch deleted file mode 100644 index 6d98defdde..0000000000 --- a/package/mac80211/patches/842-brcmsmac-remove-ai_get_buscoretype-and-ai_get_buscor.patch +++ /dev/null @@ -1,48 +0,0 @@ ---- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c -+++ b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c -@@ -471,9 +471,6 @@ ai_buscore_setup(struct si_info *sii, st - sii->pub.pmurev = sii->pub.pmucaps & PCAP_REV_MASK; - } - -- /* figure out buscore */ -- sii->buscore = ai_findcore(&sii->pub, PCIE_CORE_ID, 0); -- - return true; - } - -@@ -806,15 +803,3 @@ bool ai_deviceremoved(struct si_pub *sih - - return false; - } -- --uint ai_get_buscoretype(struct si_pub *sih) --{ -- struct si_info *sii = (struct si_info *)sih; -- return sii->buscore->id.id; --} -- --uint ai_get_buscorerev(struct si_pub *sih) --{ -- struct si_info *sii = (struct si_info *)sih; -- return sii->buscore->id.rev; --} ---- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.h -+++ b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.h -@@ -168,7 +168,6 @@ struct si_info { - struct si_pub pub; /* back plane public state (must be first) */ - struct bcma_bus *icbus; /* handle to soc interconnect bus */ - struct pci_dev *pcibus; /* handle to pci bus */ -- struct bcma_device *buscore; - - u32 chipst; /* chip status */ - }; -@@ -202,9 +201,6 @@ extern void ai_pci_up(struct si_pub *sih - /* Enable Ex-PA for 4313 */ - extern void ai_epa_4313war(struct si_pub *sih); - --extern uint ai_get_buscoretype(struct si_pub *sih); --extern uint ai_get_buscorerev(struct si_pub *sih); -- - static inline u32 ai_get_cccaps(struct si_pub *sih) - { - return sih->cccaps; diff --git a/package/mac80211/patches/843-brcmsmac-use-container_of-instead-of-cast.patch b/package/mac80211/patches/843-brcmsmac-use-container_of-instead-of-cast.patch deleted file mode 100644 index a90f7043b8..0000000000 --- a/package/mac80211/patches/843-brcmsmac-use-container_of-instead-of-cast.patch +++ /dev/null @@ -1,74 +0,0 @@ ---- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c -+++ b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c -@@ -584,7 +584,7 @@ void ai_detach(struct si_pub *sih) - struct si_pub *si_local = NULL; - memcpy(&si_local, &sih, sizeof(struct si_pub **)); - -- sii = (struct si_info *)sih; -+ sii = container_of(sih, struct si_info, pub); - - if (sii == NULL) - return; -@@ -599,7 +599,7 @@ struct bcma_device *ai_findcore(struct s - struct si_info *sii; - uint found; - -- sii = (struct si_info *)sih; -+ sii = container_of(sih, struct si_info, pub); - - found = 0; - -@@ -622,7 +622,7 @@ uint ai_cc_reg(struct si_pub *sih, uint - u32 w; - struct si_info *sii; - -- sii = (struct si_info *)sih; -+ sii = container_of(sih, struct si_info, pub); - cc = sii->icbus->drv_cc.core; - - /* mask and set */ -@@ -715,7 +715,7 @@ u16 ai_clkctl_fast_pwrup_delay(struct si - uint slowminfreq; - u16 fpdelay; - -- sii = (struct si_info *)sih; -+ sii = container_of(sih, struct si_info, pub); - if (ai_get_cccaps(sih) & CC_CAP_PMU) { - fpdelay = si_pmu_fast_pwrup_delay(sih); - return fpdelay; -@@ -747,7 +747,7 @@ bool ai_clkctl_cc(struct si_pub *sih, en - struct si_info *sii; - struct bcma_device *cc; - -- sii = (struct si_info *)sih; -+ sii = container_of(sih, struct si_info, pub); - - cc = ai_findcore(&sii->pub, BCMA_CORE_CHIPCOMMON, 0); - bcma_core_set_clockmode(cc, mode); -@@ -758,7 +758,7 @@ void ai_pci_up(struct si_pub *sih) - { - struct si_info *sii; - -- sii = (struct si_info *)sih; -+ sii = container_of(sih, struct si_info, pub); - - if (sii->icbus->hosttype == BCMA_HOSTTYPE_PCI) - bcma_core_pci_extend_L1timer(&sii->icbus->drv_pci, true); -@@ -769,7 +769,7 @@ void ai_pci_down(struct si_pub *sih) - { - struct si_info *sii; - -- sii = (struct si_info *)sih; -+ sii = container_of(sih, struct si_info, pub); - - if (sii->icbus->hosttype == BCMA_HOSTTYPE_PCI) - bcma_core_pci_extend_L1timer(&sii->icbus->drv_pci, false); -@@ -792,7 +792,7 @@ bool ai_deviceremoved(struct si_pub *sih - u32 w; - struct si_info *sii; - -- sii = (struct si_info *)sih; -+ sii = container_of(sih, struct si_info, pub); - - if (sii->icbus->hosttype != BCMA_HOSTTYPE_PCI) - return false; diff --git a/package/mac80211/patches/844-brcmsmac-remove-ai_findcore.patch b/package/mac80211/patches/844-brcmsmac-remove-ai_findcore.patch deleted file mode 100644 index 0e8750de47..0000000000 --- a/package/mac80211/patches/844-brcmsmac-remove-ai_findcore.patch +++ /dev/null @@ -1,145 +0,0 @@ ---- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c -+++ b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c -@@ -592,27 +592,6 @@ void ai_detach(struct si_pub *sih) - kfree(sii); - } - --/* return index of coreid or BADIDX if not found */ --struct bcma_device *ai_findcore(struct si_pub *sih, u16 coreid, u16 coreunit) --{ -- struct bcma_device *core; -- struct si_info *sii; -- uint found; -- -- sii = container_of(sih, struct si_info, pub); -- -- found = 0; -- -- list_for_each_entry(core, &sii->icbus->cores, list) -- if (core->id.id == coreid) { -- if (found == coreunit) -- return core; -- found++; -- } -- -- return NULL; --} -- - /* - * read/modify chipcommon core register. - */ -@@ -688,12 +667,13 @@ ai_clkctl_setdelay(struct si_pub *sih, s - /* initialize power control delay registers */ - void ai_clkctl_init(struct si_pub *sih) - { -+ struct si_info *sii = container_of(sih, struct si_info, pub); - struct bcma_device *cc; - - if (!(ai_get_cccaps(sih) & CC_CAP_PWR_CTL)) - return; - -- cc = ai_findcore(sih, BCMA_CORE_CHIPCOMMON, 0); -+ cc = sii->icbus->drv_cc.core;; - if (cc == NULL) - return; - -@@ -725,7 +705,7 @@ u16 ai_clkctl_fast_pwrup_delay(struct si - return 0; - - fpdelay = 0; -- cc = ai_findcore(sih, CC_CORE_ID, 0); -+ cc = sii->icbus->drv_cc.core;; - if (cc) { - slowminfreq = ai_slowclk_freq(sih, false, cc); - fpdelay = (((bcma_read32(cc, CHIPCREGOFFS(pll_on_delay)) + 2) -@@ -749,7 +729,7 @@ bool ai_clkctl_cc(struct si_pub *sih, en - - sii = container_of(sih, struct si_info, pub); - -- cc = ai_findcore(&sii->pub, BCMA_CORE_CHIPCOMMON, 0); -+ cc = sii->icbus->drv_cc.core;; - bcma_core_set_clockmode(cc, mode); - return mode == BCMA_CLKMODE_FAST; - } -@@ -778,9 +758,10 @@ void ai_pci_down(struct si_pub *sih) - /* Enable BT-COEX & Ex-PA for 4313 */ - void ai_epa_4313war(struct si_pub *sih) - { -+ struct si_info *sii =container_of(sih, struct si_info, pub); - struct bcma_device *cc; - -- cc = ai_findcore(sih, CC_CORE_ID, 0); -+ cc = sii->icbus->drv_cc.core; - - /* EPA Fix */ - bcma_set32(cc, CHIPCREGOFFS(gpiocontrol), GPIO_CTRL_EPA_EN_MASK); ---- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.h -+++ b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.h -@@ -182,8 +182,6 @@ struct si_info { - - - /* AMBA Interconnect exported externs */ --extern struct bcma_device *ai_findcore(struct si_pub *sih, -- u16 coreid, u16 coreunit); - extern u32 ai_core_cflags(struct bcma_device *core, u32 mask, u32 val); - - /* === exported functions === */ ---- a/drivers/net/wireless/brcm80211/brcmsmac/pmu.c -+++ b/drivers/net/wireless/brcm80211/brcmsmac/pmu.c -@@ -142,10 +142,11 @@ static void si_pmu_res_masks(struct si_p - void si_pmu_spuravoid_pllupdate(struct si_pub *sih, u8 spuravoid) - { - u32 tmp = 0; -+ struct si_info *sii = container_of(sih, struct si_info, pub); - struct bcma_device *core; - - /* switch to chipc */ -- core = ai_findcore(sih, BCMA_CORE_CHIPCOMMON, 0); -+ core = sii->icbus->drv_cc.core; - - switch (ai_get_chip_id(sih)) { - case BCM43224_CHIP_ID: -@@ -286,10 +287,11 @@ u32 si_pmu_alp_clock(struct si_pub *sih) - /* initialize PMU */ - void si_pmu_init(struct si_pub *sih) - { -+ struct si_info *sii = container_of(sih, struct si_info, pub); - struct bcma_device *core; - - /* select chipc */ -- core = ai_findcore(sih, BCMA_CORE_CHIPCOMMON, 0); -+ core = sii->icbus->drv_cc.core; - - if (ai_get_pmurev(sih) == 1) - bcma_mask32(core, CHIPCREGOFFS(pmucontrol), -@@ -301,11 +303,12 @@ void si_pmu_init(struct si_pub *sih) - /* initialize PMU resources */ - void si_pmu_res_init(struct si_pub *sih) - { -+ struct si_info *sii = container_of(sih, struct si_info, pub); - struct bcma_device *core; - u32 min_mask = 0, max_mask = 0; - - /* select to chipc */ -- core = ai_findcore(sih, BCMA_CORE_CHIPCOMMON, 0); -+ core = sii->icbus->drv_cc.core; - - /* Determine min/max rsrc masks */ - si_pmu_res_masks(sih, &min_mask, &max_mask); -@@ -328,6 +331,7 @@ void si_pmu_res_init(struct si_pub *sih) - - u32 si_pmu_measure_alpclk(struct si_pub *sih) - { -+ struct si_info *sii = container_of(sih, struct si_info, pub); - struct bcma_device *core; - u32 alp_khz; - -@@ -335,7 +339,7 @@ u32 si_pmu_measure_alpclk(struct si_pub - return 0; - - /* Remember original core before switch to chipc */ -- core = ai_findcore(sih, BCMA_CORE_CHIPCOMMON, 0); -+ core = sii->icbus->drv_cc.core; - - if (bcma_read32(core, CHIPCREGOFFS(pmustatus)) & PST_EXTLPOAVAIL) { - u32 ilp_ctr, alp_hz; diff --git a/package/mac80211/patches/845-brcmsmac-use-core-id-constants-from-bcma.patch b/package/mac80211/patches/845-brcmsmac-use-core-id-constants-from-bcma.patch deleted file mode 100644 index 167f373ab0..0000000000 --- a/package/mac80211/patches/845-brcmsmac-use-core-id-constants-from-bcma.patch +++ /dev/null @@ -1,86 +0,0 @@ ---- a/drivers/net/wireless/brcm80211/brcmsmac/dma.c -+++ b/drivers/net/wireless/brcm80211/brcmsmac/dma.c -@@ -640,10 +640,10 @@ struct dma_pub *dma_attach(char *name, s - di->dataoffsetlow = di->ddoffsetlow; - di->dataoffsethigh = di->ddoffsethigh; - /* WAR64450 : DMACtl.Addr ext fields are not supported in SDIOD core. */ -- if ((core->id.id == SDIOD_CORE_ID) -+ if ((core->id.id == BCMA_CORE_SDIO_DEV) - && ((rev > 0) && (rev <= 2))) - di->addrext = false; -- else if ((core->id.id == I2S_CORE_ID) && -+ else if ((core->id.id == BCMA_CORE_I2S) && - ((rev == 0) || (rev == 1))) - di->addrext = false; - else ---- a/drivers/net/wireless/brcm80211/include/soc.h -+++ b/drivers/net/wireless/brcm80211/include/soc.h -@@ -19,68 +19,6 @@ - - #define SI_ENUM_BASE 0x18000000 /* Enumeration space base */ - --/* core codes */ --#define NODEV_CORE_ID 0x700 /* Invalid coreid */ --#define CC_CORE_ID 0x800 /* chipcommon core */ --#define ILINE20_CORE_ID 0x801 /* iline20 core */ --#define SRAM_CORE_ID 0x802 /* sram core */ --#define SDRAM_CORE_ID 0x803 /* sdram core */ --#define PCI_CORE_ID 0x804 /* pci core */ --#define MIPS_CORE_ID 0x805 /* mips core */ --#define ENET_CORE_ID 0x806 /* enet mac core */ --#define CODEC_CORE_ID 0x807 /* v90 codec core */ --#define USB_CORE_ID 0x808 /* usb 1.1 host/device core */ --#define ADSL_CORE_ID 0x809 /* ADSL core */ --#define ILINE100_CORE_ID 0x80a /* iline100 core */ --#define IPSEC_CORE_ID 0x80b /* ipsec core */ --#define UTOPIA_CORE_ID 0x80c /* utopia core */ --#define PCMCIA_CORE_ID 0x80d /* pcmcia core */ --#define SOCRAM_CORE_ID 0x80e /* internal memory core */ --#define MEMC_CORE_ID 0x80f /* memc sdram core */ --#define OFDM_CORE_ID 0x810 /* OFDM phy core */ --#define EXTIF_CORE_ID 0x811 /* external interface core */ --#define D11_CORE_ID 0x812 /* 802.11 MAC core */ --#define APHY_CORE_ID 0x813 /* 802.11a phy core */ --#define BPHY_CORE_ID 0x814 /* 802.11b phy core */ --#define GPHY_CORE_ID 0x815 /* 802.11g phy core */ --#define MIPS33_CORE_ID 0x816 /* mips3302 core */ --#define USB11H_CORE_ID 0x817 /* usb 1.1 host core */ --#define USB11D_CORE_ID 0x818 /* usb 1.1 device core */ --#define USB20H_CORE_ID 0x819 /* usb 2.0 host core */ --#define USB20D_CORE_ID 0x81a /* usb 2.0 device core */ --#define SDIOH_CORE_ID 0x81b /* sdio host core */ --#define ROBO_CORE_ID 0x81c /* roboswitch core */ --#define ATA100_CORE_ID 0x81d /* parallel ATA core */ --#define SATAXOR_CORE_ID 0x81e /* serial ATA & XOR DMA core */ --#define GIGETH_CORE_ID 0x81f /* gigabit ethernet core */ --#define PCIE_CORE_ID 0x820 /* pci express core */ --#define NPHY_CORE_ID 0x821 /* 802.11n 2x2 phy core */ --#define SRAMC_CORE_ID 0x822 /* SRAM controller core */ --#define MINIMAC_CORE_ID 0x823 /* MINI MAC/phy core */ --#define ARM11_CORE_ID 0x824 /* ARM 1176 core */ --#define ARM7S_CORE_ID 0x825 /* ARM7tdmi-s core */ --#define LPPHY_CORE_ID 0x826 /* 802.11a/b/g phy core */ --#define PMU_CORE_ID 0x827 /* PMU core */ --#define SSNPHY_CORE_ID 0x828 /* 802.11n single-stream phy core */ --#define SDIOD_CORE_ID 0x829 /* SDIO device core */ --#define ARMCM3_CORE_ID 0x82a /* ARM Cortex M3 core */ --#define HTPHY_CORE_ID 0x82b /* 802.11n 4x4 phy core */ --#define MIPS74K_CORE_ID 0x82c /* mips 74k core */ --#define GMAC_CORE_ID 0x82d /* Gigabit MAC core */ --#define DMEMC_CORE_ID 0x82e /* DDR1/2 memory controller core */ --#define PCIERC_CORE_ID 0x82f /* PCIE Root Complex core */ --#define OCP_CORE_ID 0x830 /* OCP2OCP bridge core */ --#define SC_CORE_ID 0x831 /* shared common core */ --#define AHB_CORE_ID 0x832 /* OCP2AHB bridge core */ --#define SPIH_CORE_ID 0x833 /* SPI host core */ --#define I2S_CORE_ID 0x834 /* I2S core */ --#define DMEMS_CORE_ID 0x835 /* SDR/DDR1 memory controller core */ --#define DEF_SHIM_COMP 0x837 /* SHIM component in ubus/6362 */ --#define OOB_ROUTER_CORE_ID 0x367 /* OOB router core ID */ --#define DEF_AI_COMP 0xfff /* Default component, in ai chips it -- * maps all unused address ranges -- */ -- - /* Common core control flags */ - #define SICF_BIST_EN 0x8000 - #define SICF_PME_EN 0x4000 diff --git a/package/mac80211/patches/846-brcmsmac-remove-some-unnessessacry-casts-and-void-po.patch b/package/mac80211/patches/846-brcmsmac-remove-some-unnessessacry-casts-and-void-po.patch deleted file mode 100644 index dacc2d230d..0000000000 --- a/package/mac80211/patches/846-brcmsmac-remove-some-unnessessacry-casts-and-void-po.patch +++ /dev/null @@ -1,36 +0,0 @@ ---- a/drivers/net/wireless/brcm80211/brcmsmac/main.c -+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c -@@ -4220,9 +4220,8 @@ static void brcms_c_radio_timer(void *ar - } - - /* common low-level watchdog code */ --static void brcms_b_watchdog(void *arg) -+static void brcms_b_watchdog(struct brcms_c_info *wlc) - { -- struct brcms_c_info *wlc = (struct brcms_c_info *) arg; - struct brcms_hardware *wlc_hw = wlc->hw; - - BCMMSG(wlc->wiphy, "wl%d\n", wlc_hw->unit); -@@ -4243,10 +4242,8 @@ static void brcms_b_watchdog(void *arg) - } - - /* common watchdog code */ --static void brcms_c_watchdog(void *arg) -+static void brcms_c_watchdog(struct brcms_c_info *wlc) - { -- struct brcms_c_info *wlc = (struct brcms_c_info *) arg; -- - BCMMSG(wlc->wiphy, "wl%d\n", wlc->pub->unit); - - if (!wlc->pub->up) -@@ -4286,7 +4283,9 @@ static void brcms_c_watchdog(void *arg) - - static void brcms_c_watchdog_by_timer(void *arg) - { -- brcms_c_watchdog(arg); -+ struct brcms_c_info *wlc = (struct brcms_c_info *) arg; -+ -+ brcms_c_watchdog(wlc); - } - - static bool brcms_c_timers_init(struct brcms_c_info *wlc, int unit) diff --git a/package/mac80211/patches/847-brcmsmac-add-suome-conditions-for-the-bcm4716-again.patch b/package/mac80211/patches/847-brcmsmac-add-suome-conditions-for-the-bcm4716-again.patch deleted file mode 100644 index 9da7269110..0000000000 --- a/package/mac80211/patches/847-brcmsmac-add-suome-conditions-for-the-bcm4716-again.patch +++ /dev/null @@ -1,202 +0,0 @@ ---- a/drivers/net/wireless/brcm80211/brcmsmac/main.c -+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c -@@ -1944,7 +1944,8 @@ static bool brcms_b_radio_read_hwdisable - * accesses phyreg throughput mac. This can be skipped since - * only mac reg is accessed below - */ -- flags |= SICF_PCLKE; -+ if (D11REV_GE(wlc_hw->corerev, 18)) -+ flags |= SICF_PCLKE; - - /* - * TODO: test suspend/resume -@@ -2025,7 +2026,8 @@ void brcms_b_corereset(struct brcms_hard - * phyreg throughput mac, AND phy_reset is skipped at early stage when - * band->pi is invalid. need to enable PHY CLK - */ -- flags |= SICF_PCLKE; -+ if (D11REV_GE(wlc_hw->corerev, 18)) -+ flags |= SICF_PCLKE; - - /* - * reset the core ---- a/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_n.c -+++ b/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_n.c -@@ -17895,6 +17895,9 @@ static u32 *wlc_phy_get_ipa_gaintbl_nphy - nphy_tpc_txgain_ipa_2g_2057rev7; - } else if (NREV_IS(pi->pubpi.phy_rev, 6)) { - tx_pwrctrl_tbl = nphy_tpc_txgain_ipa_rev6; -+ if (pi->sh->chip == BCM47162_CHIP_ID) { -+ tx_pwrctrl_tbl = nphy_tpc_txgain_ipa_rev5; -+ } - } else if (NREV_IS(pi->pubpi.phy_rev, 5)) { - tx_pwrctrl_tbl = nphy_tpc_txgain_ipa_rev5; - } else { -@@ -19256,8 +19259,14 @@ static void wlc_phy_spurwar_nphy(struct - case 38: - case 102: - case 118: -- nphy_adj_tone_id_buf[0] = 0; -- nphy_adj_noise_var_buf[0] = 0x0; -+ if ((pi->sh->chip == BCM4716_CHIP_ID) && -+ (pi->sh->chippkg == BCM4717_PKG_ID)) { -+ nphy_adj_tone_id_buf[0] = 32; -+ nphy_adj_noise_var_buf[0] = 0x21f; -+ } else { -+ nphy_adj_tone_id_buf[0] = 0; -+ nphy_adj_noise_var_buf[0] = 0x0; -+ } - break; - case 134: - nphy_adj_tone_id_buf[0] = 32; -@@ -20697,12 +20706,22 @@ wlc_phy_chanspec_radio2056_setup(struct - write_radio_reg(pi, RADIO_2056_SYN_PLL_LOOPFILTER2 | - RADIO_2056_SYN, 0x1f); - -- write_radio_reg(pi, -- RADIO_2056_SYN_PLL_LOOPFILTER4 | -- RADIO_2056_SYN, 0xb); -- write_radio_reg(pi, -- RADIO_2056_SYN_PLL_CP2 | -- RADIO_2056_SYN, 0x14); -+ if ((pi->sh->chip == BCM4716_CHIP_ID) || -+ (pi->sh->chip == BCM47162_CHIP_ID)) { -+ write_radio_reg(pi, -+ RADIO_2056_SYN_PLL_LOOPFILTER4 | -+ RADIO_2056_SYN, 0x14); -+ write_radio_reg(pi, -+ RADIO_2056_SYN_PLL_CP2 | -+ RADIO_2056_SYN, 0x00); -+ } else { -+ write_radio_reg(pi, -+ RADIO_2056_SYN_PLL_LOOPFILTER4 | -+ RADIO_2056_SYN, 0xb); -+ write_radio_reg(pi, -+ RADIO_2056_SYN_PLL_CP2 | -+ RADIO_2056_SYN, 0x14); -+ } - } - } - -@@ -20749,24 +20768,33 @@ wlc_phy_chanspec_radio2056_setup(struct - WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, - PADG_IDAC, 0xcc); - -- bias = 0x25; -- cascbias = 0x20; -+ if ((pi->sh->chip == BCM4716_CHIP_ID) || -+ (pi->sh->chip == -+ BCM47162_CHIP_ID)) { -+ bias = 0x40; -+ cascbias = 0x45; -+ pag_boost_tune = 0x5; -+ pgag_boost_tune = 0x33; -+ padg_boost_tune = 0x77; -+ mixg_boost_tune = 0x55; -+ } else { -+ bias = 0x25; -+ cascbias = 0x20; - -- if ((pi->sh->chip == -- BCM43224_CHIP_ID) -- || (pi->sh->chip == -- BCM43225_CHIP_ID)) { -- if (pi->sh->chippkg == -- BCM43224_FAB_SMIC) { -- bias = 0x2a; -- cascbias = 0x38; -+ if ((pi->sh->chip == BCM43224_CHIP_ID) -+ || (pi->sh->chip == BCM43225_CHIP_ID)) { -+ if (pi->sh->chippkg == -+ BCM43224_FAB_SMIC) { -+ bias = 0x2a; -+ cascbias = 0x38; -+ } - } -- } - -- pag_boost_tune = 0x4; -- pgag_boost_tune = 0x03; -- padg_boost_tune = 0x77; -- mixg_boost_tune = 0x65; -+ pag_boost_tune = 0x4; -+ pgag_boost_tune = 0x03; -+ padg_boost_tune = 0x77; -+ mixg_boost_tune = 0x65; -+ } - - WRITE_RADIO_REG2(pi, RADIO_2056, TX, core, - INTPAG_IMAIN_STAT, bias); -@@ -21180,19 +21208,27 @@ wlc_phy_chanspec_nphy_setup(struct brcms - } else if (NREV_GE(pi->pubpi.phy_rev, 7)) { - if (val == 54) - spuravoid = 1; -- } else { -- if (pi->nphy_aband_spurwar_en && -- ((val == 38) || (val == 102) -- || (val == 118))) -+ } else if (pi->nphy_aband_spurwar_en && -+ ((val == 38) || (val == 102) || (val == 118))) { -+ if ((pi->sh->chip == BCM4716_CHIP_ID) -+ && (pi->sh->chippkg == BCM4717_PKG_ID)) { -+ spuravoid = 0; -+ } else { - spuravoid = 1; -+ } - } - - if (pi->phy_spuravoid == SPURAVOID_FORCEON) - spuravoid = 1; - -- wlapi_bmac_core_phypll_ctl(pi->sh->physhim, false); -- si_pmu_spuravoid_pllupdate(pi->sh->sih, spuravoid); -- wlapi_bmac_core_phypll_ctl(pi->sh->physhim, true); -+ if ((pi->sh->chip == BCM4716_CHIP_ID) || -+ (pi->sh->chip == BCM47162_CHIP_ID)) { -+ si_pmu_spuravoid_pllupdate(pi->sh->sih, spuravoid); -+ } else { -+ wlapi_bmac_core_phypll_ctl(pi->sh->physhim, false); -+ si_pmu_spuravoid_pllupdate(pi->sh->sih, spuravoid); -+ wlapi_bmac_core_phypll_ctl(pi->sh->physhim, true); -+ } - - if ((pi->sh->chip == BCM43224_CHIP_ID) || - (pi->sh->chip == BCM43225_CHIP_ID)) { -@@ -21211,7 +21247,10 @@ wlc_phy_chanspec_nphy_setup(struct brcms - } - } - -- wlapi_bmac_core_phypll_reset(pi->sh->physhim); -+ if (!((pi->sh->chip == BCM4716_CHIP_ID) || -+ (pi->sh->chip == BCM47162_CHIP_ID))) { -+ wlapi_bmac_core_phypll_reset(pi->sh->physhim); -+ } - - mod_phy_reg(pi, 0x01, (0x1 << 15), - ((spuravoid > 0) ? (0x1 << 15) : 0)); -@@ -24925,14 +24964,20 @@ wlc_phy_a2_nphy(struct brcms_phy *pi, st - if (txgains->useindex) { - phy_a4 = 15 - ((txgains->index) >> 3); - if (CHSPEC_IS2G(pi->radio_chanspec)) { -- if (NREV_GE(pi->pubpi.phy_rev, 6)) -+ if (NREV_GE(pi->pubpi.phy_rev, 6)) { - phy_a5 = 0x00f7 | (phy_a4 << 8); -- -- else -- if (NREV_IS(pi->pubpi.phy_rev, 5)) -+ if (pi->sh->chip == -+ BCM47162_CHIP_ID) { -+ phy_a5 = -+ 0x10f7 | (phy_a4 << -+ 8); -+ } -+ } else -+ if (NREV_IS(pi->pubpi.phy_rev, 5)) { - phy_a5 = 0x10f7 | (phy_a4 << 8); -- else -+ } else { - phy_a5 = 0x50f7 | (phy_a4 << 8); -+ } - } else { - phy_a5 = 0x70f7 | (phy_a4 << 8); - } diff --git a/package/mac80211/patches/848-brcmsmac-some-more-fixes-for-different-core-revs.patch b/package/mac80211/patches/848-brcmsmac-some-more-fixes-for-different-core-revs.patch deleted file mode 100644 index f6efb714bd..0000000000 --- a/package/mac80211/patches/848-brcmsmac-some-more-fixes-for-different-core-revs.patch +++ /dev/null @@ -1,73 +0,0 @@ ---- a/drivers/net/wireless/brcm80211/brcmsmac/main.c -+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c -@@ -271,7 +271,7 @@ struct brcms_c_bit_desc { - */ - - /* Starting corerev for the fifo size table */ --#define XMTFIFOTBL_STARTREV 20 -+#define XMTFIFOTBL_STARTREV 10 - - struct d11init { - __le16 addr; -@@ -335,6 +335,26 @@ const u8 wlc_prio2prec_map[] = { - }; - - static const u16 xmtfifo_sz[][NFIFO] = { -+ /* corerev 10: */ -+ {0, 0, 0, 0, 0, 0}, -+ /* corerev 11: */ -+ {0, 0, 0, 0, 0, 0}, -+ /* corerev 12: */ -+ {0, 0, 0, 0, 0, 0}, -+ /* corerev 13: */ -+ {0, 0, 0, 0, 0, 0}, -+ /* corerev 14: */ -+ {0, 0, 0, 0, 0, 0}, -+ /* corerev 15: */ -+ {0, 0, 0, 0, 0, 0}, -+ /* corerev 16: */ -+ {0, 0, 0, 0, 0, 0}, -+ /* corerev 17: 5120, 49152, 49152, 5376, 4352, 1280 */ -+ {20, 192, 192, 21, 17, 5}, -+ /* corerev 18: */ -+ {0, 0, 0, 0, 0, 0}, -+ /* corerev 19: */ -+ {0, 0, 0, 0, 0, 0}, - /* corerev 20: 5120, 49152, 49152, 5376, 4352, 1280 */ - {20, 192, 192, 21, 17, 5}, - /* corerev 21: 2304, 14848, 5632, 3584, 3584, 1280 */ -@@ -345,6 +365,18 @@ static const u16 xmtfifo_sz[][NFIFO] = { - {20, 192, 192, 21, 17, 5}, - /* corerev 24: 2304, 14848, 5632, 3584, 3584, 1280 */ - {9, 58, 22, 14, 14, 5}, -+ /* corerev 25: */ -+ {0, 0, 0, 0, 0, 0}, -+ /* corerev 26: */ -+ {0, 0, 0, 0, 0, 0}, -+ /* corerev 27: */ -+ {0, 0, 0, 0, 0, 0}, -+ /* corerev 28: 5120, 49152, 49152, 5376, 4352, 1280 */ -+ {20, 192, 192, 21, 17, 5}, -+ /* corerev 29: */ -+ {0, 0, 0, 0, 0, 0}, -+ /* corerev 30: */ -+ {0, 0, 0, 0, 0, 0}, - }; - - #ifdef DEBUG -@@ -4598,8 +4630,15 @@ static int brcms_b_attach(struct brcms_c - wlc_hw->machwcap_backup = wlc_hw->machwcap; - - /* init tx fifo size */ -+ WARN_ON((wlc_hw->corerev - XMTFIFOTBL_STARTREV) < 0 || -+ (wlc_hw->corerev - XMTFIFOTBL_STARTREV) > -+ ARRAY_SIZE(xmtfifo_sz)); - wlc_hw->xmtfifo_sz = - xmtfifo_sz[(wlc_hw->corerev - XMTFIFOTBL_STARTREV)]; -+ pr_err("use fifi: %i, %i, %i, %i, %i, %i\n", -+ wlc_hw->xmtfifo_sz[0], wlc_hw->xmtfifo_sz[1], -+ wlc_hw->xmtfifo_sz[2], wlc_hw->xmtfifo_sz[3], -+ wlc_hw->xmtfifo_sz[4], wlc_hw->xmtfifo_sz[5]); - - /* Get a phy for this band */ - wlc_hw->band->pi = diff --git a/package/mac80211/patches/849-brcmsmac-add-device-found-on-some-SoCs-like-the-bcm4.patch b/package/mac80211/patches/849-brcmsmac-add-device-found-on-some-SoCs-like-the-bcm4.patch index e7bf689ade..c94d2ecdae 100644 --- a/package/mac80211/patches/849-brcmsmac-add-device-found-on-some-SoCs-like-the-bcm4.patch +++ b/package/mac80211/patches/849-brcmsmac-add-device-found-on-some-SoCs-like-the-bcm4.patch @@ -10,7 +10,7 @@ BCMA_CORETABLE_END --- a/drivers/net/wireless/brcm80211/brcmsmac/main.c +++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c -@@ -752,7 +752,7 @@ static void brcms_c_ucode_bsinit(struct +@@ -734,7 +734,7 @@ static void brcms_c_ucode_bsinit(struct brcms_c_write_mhf(wlc_hw, wlc_hw->band->mhfs); /* do band-specific ucode IHR, SHM, and SCR inits */ @@ -19,7 +19,7 @@ if (BRCMS_ISNPHY(wlc_hw->band)) brcms_c_write_inits(wlc_hw, ucode->d11n0bsinitvals16); else -@@ -2277,7 +2277,7 @@ static void brcms_ucode_download(struct +@@ -2259,7 +2259,7 @@ static void brcms_ucode_download(struct if (wlc_hw->ucode_loaded) return; @@ -28,7 +28,7 @@ if (BRCMS_ISNPHY(wlc_hw->band)) { brcms_ucode_write(wlc_hw, ucode->bcm43xx_16_mimo, ucode->bcm43xx_16_mimosz); -@@ -3239,7 +3239,7 @@ static void brcms_b_coreinit(struct brcm +@@ -3221,7 +3221,7 @@ static void brcms_b_coreinit(struct brcm sflags = bcma_aread32(core, BCMA_IOST); diff --git a/package/mac80211/patches/850-brcmsmac-add-support-for-BCM43224.patch b/package/mac80211/patches/850-brcmsmac-add-support-for-BCM43224.patch index 161da8c6c5..b135c7d3ff 100644 --- a/package/mac80211/patches/850-brcmsmac-add-support-for-BCM43224.patch +++ b/package/mac80211/patches/850-brcmsmac-add-support-for-BCM43224.patch @@ -1,6 +1,6 @@ --- a/drivers/net/wireless/brcm80211/brcmsmac/main.c +++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c -@@ -4153,6 +4153,7 @@ void brcms_c_wme_setparams(struct brcms_ +@@ -4135,6 +4135,7 @@ void brcms_c_wme_setparams(struct brcms_ M_EDCF_QINFO + wme_ac2fifo[aci] * M_EDCF_QLEN + i, *shm_entry++); @@ -8,17 +8,17 @@ } if (suspend) { -@@ -4557,7 +4558,8 @@ static int brcms_b_attach(struct brcms_c +@@ -4537,7 +4538,8 @@ static int brcms_b_attach(struct brcms_c /* check device id(srom, nvram etc.) to set bands */ if (wlc_hw->deviceid == BCM43224_D11N_ID || - wlc_hw->deviceid == BCM43224_D11N_ID_VEN1) -+ wlc_hw->deviceid == BCM43224_D11N_ID_VEN1|| -+ wlc_hw->deviceid == BCM43224_CHIP_ID) ++ wlc_hw->deviceid == BCM43224_D11N_ID_VEN1 || ++ wlc_hw->deviceid == BCM43224_CHIP_ID) /* Dualband boards */ wlc_hw->_nbands = 2; else -@@ -5816,7 +5818,7 @@ bool brcms_c_chipmatch(u16 vendor, u16 d +@@ -5797,7 +5799,7 @@ static bool brcms_c_chipmatch_pci(struct return false; } diff --git a/package/mac80211/patches/851-brcmsmac-start-adding-support-for-core-rev-28.patch b/package/mac80211/patches/851-brcmsmac-start-adding-support-for-core-rev-28.patch index 4cb089a254..c364326758 100644 --- a/package/mac80211/patches/851-brcmsmac-start-adding-support-for-core-rev-28.patch +++ b/package/mac80211/patches/851-brcmsmac-start-adding-support-for-core-rev-28.patch @@ -10,7 +10,7 @@ MODULE_DEVICE_TABLE(bcma, brcms_coreid_table); --- a/drivers/net/wireless/brcm80211/brcmsmac/main.c +++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c -@@ -752,7 +752,7 @@ static void brcms_c_ucode_bsinit(struct +@@ -734,7 +734,7 @@ static void brcms_c_ucode_bsinit(struct brcms_c_write_mhf(wlc_hw, wlc_hw->band->mhfs); /* do band-specific ucode IHR, SHM, and SCR inits */ @@ -19,7 +19,7 @@ if (BRCMS_ISNPHY(wlc_hw->band)) brcms_c_write_inits(wlc_hw, ucode->d11n0bsinitvals16); else -@@ -2277,7 +2277,7 @@ static void brcms_ucode_download(struct +@@ -2259,7 +2259,7 @@ static void brcms_ucode_download(struct if (wlc_hw->ucode_loaded) return; @@ -28,7 +28,7 @@ if (BRCMS_ISNPHY(wlc_hw->band)) { brcms_ucode_write(wlc_hw, ucode->bcm43xx_16_mimo, ucode->bcm43xx_16_mimosz); -@@ -3239,7 +3239,7 @@ static void brcms_b_coreinit(struct brcm +@@ -3221,7 +3221,7 @@ static void brcms_b_coreinit(struct brcm sflags = bcma_aread32(core, BCMA_IOST); @@ -37,6 +37,15 @@ if (BRCMS_ISNPHY(wlc_hw->band)) brcms_c_write_inits(wlc_hw, ucode->d11n0initvals16); else +@@ -5818,6 +5818,8 @@ static bool brcms_c_chipmatch_soc(struct + + if (chipinfo->id == BCMA_CHIP_ID_BCM4716) + return true; ++ if (chipinfo->id == BCMA_CHIP_ID_BCM5357) ++ return true; + + pr_err("unknown chip id %04x\n", chipinfo->id); + return false; --- a/drivers/net/wireless/brcm80211/brcmsmac/main.h +++ b/drivers/net/wireless/brcm80211/brcmsmac/main.h @@ -65,7 +65,7 @@ |