diff options
author | Hauke Mehrtens <hauke@openwrt.org> | 2012-06-01 21:17:04 +0000 |
---|---|---|
committer | Hauke Mehrtens <hauke@openwrt.org> | 2012-06-01 21:17:04 +0000 |
commit | 06abd0b735f3d84124b4a724019a92b2e8d9b1f0 (patch) | |
tree | fcdf28ad41c8ced448eed59014aa1fff616587c1 /package/mac80211 | |
parent | e458213eab954e93885ec317e840d1efad981173 (diff) | |
download | master-187ad058-06abd0b735f3d84124b4a724019a92b2e8d9b1f0.tar.gz master-187ad058-06abd0b735f3d84124b4a724019a92b2e8d9b1f0.tar.bz2 master-187ad058-06abd0b735f3d84124b4a724019a92b2e8d9b1f0.zip |
mac80211: brcmsmac: add some patches starting to add support for some more chips
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@32020 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/mac80211')
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 0000000000..de8b46c942 --- /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 0000000000..04d74d73f0 --- /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 0000000000..80c6fc966b --- /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 0000000000..ba12eda125 --- /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 0000000000..3fc914f90e --- /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 0000000000..167f373ab0 --- /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 0000000000..24c3e2356f --- /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 40ccde90b5..ecf41b5598 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 0000000000..c5cf2fd67f --- /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 df48e1e79e..9cef6975a5 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 56fd1ebf9b..df53b00f49 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 0000000000..1b64f56ccc --- /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 |