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 000000000..827503364 --- /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 ccb6fd09b..000000000 --- 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 0777a7822..000000000 --- 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 6d98defdd..000000000 --- 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 a90f7043b..000000000 --- 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 0e8750de4..000000000 --- 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 167f373ab..000000000 --- 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 dacc2d230..000000000 --- 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 9da726911..000000000 --- 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 f6efb714b..000000000 --- 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 e7bf689ad..c94d2ecda 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 161da8c6c..b135c7d3f 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 4cb089a25..c36432675 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 @@ | 
