diff options
Diffstat (limited to 'package')
12 files changed, 626 insertions, 13 deletions
| diff --git a/package/mac80211/patches/840-brcmsmac-remove-PCIE.patch b/package/mac80211/patches/840-brcmsmac-remove-PCIE.patch new file mode 100644 index 000000000..de8b46c94 --- /dev/null +++ b/package/mac80211/patches/840-brcmsmac-remove-PCIE.patch @@ -0,0 +1,31 @@ +--- 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__) +@@ -777,7 +775,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); + } +  +@@ -795,7 +793,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 new file mode 100644 index 000000000..04d74d73f --- /dev/null +++ b/package/mac80211/patches/841-brcmsmac-remove-PCI_FORCEHT.patch @@ -0,0 +1,54 @@ +--- 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 +@@ -755,9 +753,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; +@@ -766,15 +761,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); + } +@@ -783,16 +772,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 new file mode 100644 index 000000000..80c6fc966 --- /dev/null +++ b/package/mac80211/patches/842-brcmsmac-remove-ai_get_buscoretype-and-ai_get_buscor.patch @@ -0,0 +1,48 @@ +--- 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; + } +  +@@ -807,15 +804,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 new file mode 100644 index 000000000..ba12eda12 --- /dev/null +++ b/package/mac80211/patches/843-brcmsmac-use-container_of-instead-of-cast.patch @@ -0,0 +1,74 @@ +--- 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 */ +@@ -716,7 +716,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; +@@ -748,7 +748,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); +@@ -759,7 +759,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); +@@ -770,7 +770,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); +@@ -793,7 +793,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 new file mode 100644 index 000000000..3fc914f90 --- /dev/null +++ b/package/mac80211/patches/844-brcmsmac-remove-ai_findcore.patch @@ -0,0 +1,145 @@ +--- 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. +  */ +@@ -689,12 +668,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; +  +@@ -726,7 +706,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) +@@ -750,7 +730,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; + } +@@ -779,9 +759,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 new file mode 100644 index 000000000..167f373ab --- /dev/null +++ b/package/mac80211/patches/845-brcmsmac-use-core-id-constants-from-bcma.patch @@ -0,0 +1,86 @@ +--- 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 new file mode 100644 index 000000000..24c3e2356 --- /dev/null +++ b/package/mac80211/patches/846-brcmsmac-remove-some-unnessessacry-casts-and-void-po.patch @@ -0,0 +1,36 @@ +--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c ++++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c +@@ -4233,9 +4233,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); +@@ -4256,10 +4255,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) +@@ -4299,7 +4296,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/842-brcmsmac-add-some-conditions-for-the-bcm4716-again.patch b/package/mac80211/patches/847-brcmsmac-add-suome-conditions-for-the-bcm4716-again.patch index 40ccde90b..ecf41b559 100644 --- a/package/mac80211/patches/842-brcmsmac-add-some-conditions-for-the-bcm4716-again.patch +++ b/package/mac80211/patches/847-brcmsmac-add-suome-conditions-for-the-bcm4716-again.patch @@ -32,7 +32,7 @@   		} 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  +@@ -19256,8 +19259,14 @@ static void wlc_phy_spurwar_nphy(struct   			case 38:   			case 102:   			case 118: @@ -49,7 +49,7 @@   				break;   			case 134:   				nphy_adj_tone_id_buf[0] = 32; -@@ -20697,12 +20706,22 @@ wlc_phy_chanspec_radio2056_setup(struct  +@@ -20697,12 +20706,22 @@ wlc_phy_chanspec_radio2056_setup(struct   			write_radio_reg(pi, RADIO_2056_SYN_PLL_LOOPFILTER2 |   					RADIO_2056_SYN, 0x1f); @@ -78,7 +78,7 @@   		}   	} -@@ -20749,24 +20768,33 @@ wlc_phy_chanspec_radio2056_setup(struct  +@@ -20749,24 +20768,33 @@ wlc_phy_chanspec_radio2056_setup(struct   				WRITE_RADIO_REG2(pi, RADIO_2056, TX, core,   						 PADG_IDAC, 0xcc); 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 new file mode 100644 index 000000000..c5cf2fd67 --- /dev/null +++ b/package/mac80211/patches/848-brcmsmac-some-more-fixes-for-different-core-revs.patch @@ -0,0 +1,73 @@ +--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c ++++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c +@@ -270,7 +270,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; +@@ -334,6 +334,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 */ +@@ -344,6 +364,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 +@@ -4611,8 +4643,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/840-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 df48e1e79..9cef6975a 100644 --- a/package/mac80211/patches/840-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 @@ -1,16 +1,16 @@  --- a/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c  +++ b/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c -@@ -94,6 +94,7 @@ MODULE_LICENSE("Dual BSD/GPL"); +@@ -92,6 +92,7 @@ MODULE_LICENSE("Dual BSD/GPL"); +  + /* recognized BCMA Core IDs */   static struct bcma_device_id brcms_coreid_table[] = { ++//	BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_80211, 17, BCMA_ANY_CLASS),   	BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_80211, 23, BCMA_ANY_CLASS),   	BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_80211, 24, BCMA_ANY_CLASS), -+//	BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_80211, 17, BCMA_ANY_CLASS),   	BCMA_CORETABLE_END - }; - MODULE_DEVICE_TABLE(bcma, brcms_coreid_table);  --- a/drivers/net/wireless/brcm80211/brcmsmac/main.c  +++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c -@@ -719,7 +719,7 @@ static void brcms_c_ucode_bsinit(struct  +@@ -751,7 +751,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 -@@ -2242,7 +2242,7 @@ static void brcms_ucode_download(struct  +@@ -2276,7 +2276,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); -@@ -3218,7 +3218,7 @@ static void brcms_b_coreinit(struct brcm +@@ -3252,7 +3252,7 @@ static void brcms_b_coreinit(struct brcm   	sflags = bcma_aread32(core, BCMA_IOST); diff --git a/package/mac80211/patches/841-brcmsmac-add-support-for-BCM43224.patch b/package/mac80211/patches/850-brcmsmac-add-support-for-BCM43224.patch index 56fd1ebf9..df53b00f4 100644 --- a/package/mac80211/patches/841-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 -@@ -4132,6 +4132,7 @@ void brcms_c_wme_setparams(struct brcms_ +@@ -4166,6 +4166,7 @@ void brcms_c_wme_setparams(struct brcms_   					  M_EDCF_QINFO +   					  wme_ac2fifo[aci] * M_EDCF_QLEN + i,   					  *shm_entry++); @@ -8,7 +8,7 @@   	}   	if (suspend) { -@@ -4537,7 +4538,8 @@ static int brcms_b_attach(struct brcms_c +@@ -4570,7 +4571,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 || @@ -18,7 +18,7 @@   		/* Dualband boards */   		wlc_hw->_nbands = 2;   	else -@@ -5791,7 +5793,7 @@ bool brcms_c_chipmatch(u16 vendor, u16 d +@@ -5831,7 +5833,7 @@ bool brcms_c_chipmatch(u16 vendor, u16 d   		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 new file mode 100644 index 000000000..1b64f56cc --- /dev/null +++ b/package/mac80211/patches/851-brcmsmac-start-adding-support-for-core-rev-28.patch @@ -0,0 +1,66 @@ +--- a/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c ++++ b/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c +@@ -95,6 +95,7 @@ static struct bcma_device_id brcms_corei + //	BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_80211, 17, BCMA_ANY_CLASS), + 	BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_80211, 23, BCMA_ANY_CLASS), + 	BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_80211, 24, BCMA_ANY_CLASS), ++//	BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_80211, 28, BCMA_ANY_CLASS), + 	BCMA_CORETABLE_END + }; + MODULE_DEVICE_TABLE(bcma, brcms_coreid_table); +--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c ++++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c +@@ -751,7 +751,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 */ +-	if (D11REV_IS(wlc_hw->corerev, 17) || D11REV_IS(wlc_hw->corerev, 23)) { ++	if (D11REV_IS(wlc_hw->corerev, 17) || D11REV_IS(wlc_hw->corerev, 23) || D11REV_IS(wlc_hw->corerev, 28)) { + 		if (BRCMS_ISNPHY(wlc_hw->band)) + 			brcms_c_write_inits(wlc_hw, ucode->d11n0bsinitvals16); + 		else +@@ -2276,7 +2276,7 @@ static void brcms_ucode_download(struct + 	if (wlc_hw->ucode_loaded) + 		return; +  +-	if (D11REV_IS(wlc_hw->corerev, 17) || D11REV_IS(wlc_hw->corerev, 23)) { ++	if (D11REV_IS(wlc_hw->corerev, 17) || D11REV_IS(wlc_hw->corerev, 23) || D11REV_IS(wlc_hw->corerev, 28)) { + 		if (BRCMS_ISNPHY(wlc_hw->band)) { + 			brcms_ucode_write(wlc_hw, ucode->bcm43xx_16_mimo, + 					  ucode->bcm43xx_16_mimosz); +@@ -3252,7 +3252,7 @@ static void brcms_b_coreinit(struct brcm +  + 	sflags = bcma_aread32(core, BCMA_IOST); +  +-	if (D11REV_IS(wlc_hw->corerev, 17) || D11REV_IS(wlc_hw->corerev, 23)) { ++	if (D11REV_IS(wlc_hw->corerev, 17) || D11REV_IS(wlc_hw->corerev, 23) || D11REV_IS(wlc_hw->corerev, 28)) { + 		if (BRCMS_ISNPHY(wlc_hw->band)) + 			brcms_c_write_inits(wlc_hw, ucode->d11n0initvals16); + 		else +--- a/drivers/net/wireless/brcm80211/brcmsmac/main.h ++++ b/drivers/net/wireless/brcm80211/brcmsmac/main.h +@@ -65,7 +65,7 @@ + #define	SW_TIMER_MAC_STAT_UPD		30	/* periodic MAC stats update */ +  + /* max # supported core revisions (0 .. MAXCOREREV - 1) */ +-#define	MAXCOREREV		28 ++#define	MAXCOREREV		29 +  + /* Double check that unsupported cores are not enabled */ + #if CONF_MSK(D11CONF, 0x4f) || CONF_GE(D11CONF, MAXCOREREV) +--- a/drivers/net/wireless/brcm80211/brcmsmac/types.h ++++ b/drivers/net/wireless/brcm80211/brcmsmac/types.h +@@ -93,11 +93,11 @@ + #define BOARD_GPIO_13		0x2000 +  + /* **** Core type/rev defaults **** */ +-#define D11CONF		0x0fffffb0	/* Supported  D11 revs: 4, 5, 7-27 ++#define D11CONF		0x1fffffb0	/* Supported  D11 revs: 4, 5, 7-27 + 					 * also need to update wlc.h MAXCOREREV + 					 */ +  +-#define NCONF		0x000001ff	/* Supported nphy revs: ++#define NCONF		0x000002ff	/* Supported nphy revs: + 					 *      0       4321a0 + 					 *      1       4321a1 + 					 *      2       4321b0/b1/c0/c1 | 
