All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 00/18] brcmsmac: update to get SoCs working
@ 2012-06-30 13:16 Hauke Mehrtens
  2012-06-30 13:16 ` [PATCH v2 01/18] brcmsmac: remove PCIE() macro Hauke Mehrtens
                   ` (19 more replies)
  0 siblings, 20 replies; 36+ messages in thread
From: Hauke Mehrtens @ 2012-06-30 13:16 UTC (permalink / raw)
  To: linville, arend; +Cc: brcm80211-dev-list, linux-wireless, Hauke Mehrtens

This series contains some patches needed to get brcmsmac working on 
SoCs like the BCM4718.
The last part which adds core rev 17 (used in the BCM4718) to the list 
of supported cores is missing, because we do not have a firmware 
supporting this core yet, but I extended the b43 fwcutter to generate 
a firmware which brcmsmac accepts. With this firmware my BCM4718 
works. I would appreciate an official firmware release from Broadcom 
adding support for this core.
The final patch adding support for the BCM43224 is missing because 
the PCIe host controller on the BCM4718 still causes problems and I 
have to add some more read after writes into the code, for now it uses 
an ugly hack and sometimes the problems still occur.

The wifi is not stable on the BCM4718, I had no problems connecting to 
my ath9k driven access point but I have problems connecting to my 
BCM47186 based AP running the vendor firmware with the Broadcom 
proprietary driver.
I get 12MBit/s max with the BCM4718 connected to ath9k on the 2.4 GHz 
band and 35 MBit/s max with the BCM43224 on the 5Ghz band connected to 
a Broadcom based AP running the proprietary driver. This seams to be 
CPU bounced as I have over 50% sirq in both cases.

brcmsmac starts on the BCM47186 (id: 0x5357), but it does not tx or rx 
any traffic.

One patch extends the xmtfifo_sz array for more core revs, I just toke 
the values from the other phy-n cores and hope this is correct.

These patches are depending on: "[PATCH v2 0/9] bcma misc updates" and 
based on wireless-testing.

I will send a patch for bcma which converts the warning message when it 
found a PCI and not a PCIe card into a WARN.

v2:
  - when something depends on a patch for bcma, which is not in 
    wireless-testing yet, I add that to the commit comment.
  - removed changes for BCM43421 and BCM6362 as I do not have a device
    to test this.
  - xmtfifo_sz now starts at core rev 17 and contains the correct values 
    for core rev 28
  - make brcms_c_chipmatch() also work for SoCs
  - typos and format changes

Hauke Mehrtens (18):
  brcmsmac: remove PCIE() macro
  brcmsmac: remove PCI_FORCEHT() macro
  brcmsmac: remove ai_get_buscore{type,rev}()
  brcmsmac: use container_of instead of cast
  brcmsmac: remove ai_findcore()
  brcmsmac: remove si_pmu_init() and si_pmu_res_init()
  brcmsmac: remove si_pmu_spuravoid_pllupdate()
  brcmsmac: remove some redundant chip common workarounds
  brcmsmac: use core id constants from bcma
  brcmsmac: use chip and package id constants from bcma
  brcmsmac: remove some unnessessacry casts and void pointer
  brcmsmac: add a conditions for core rev 17 again
  brcmsmac: add some workarounds for other chips again
  brcmsmac: extend xmtfifo_sz array
  brcmsmac: fix DMA on SoCs
  brcmsmac: extend brcms_c_chipmatch() to also handle non PCIe devices
  brcmsmac: fix read in write_phy_reg
  brcmsmac: handle non PCI devices in the phy code

 drivers/net/wireless/brcm80211/brcmsmac/aiutils.c  |  128 ++-------------
 drivers/net/wireless/brcm80211/brcmsmac/aiutils.h  |   16 --
 drivers/net/wireless/brcm80211/brcmsmac/dma.c      |   15 +-
 .../net/wireless/brcm80211/brcmsmac/mac80211_if.c  |    3 +-
 drivers/net/wireless/brcm80211/brcmsmac/main.c     |   91 ++++++++---
 .../net/wireless/brcm80211/brcmsmac/phy/phy_cmn.c  |   22 ++-
 .../net/wireless/brcm80211/brcmsmac/phy/phy_n.c    |  140 ++++++++++------
 drivers/net/wireless/brcm80211/brcmsmac/pmu.c      |  172 +-------------------
 drivers/net/wireless/brcm80211/brcmsmac/pmu.h      |    3 -
 drivers/net/wireless/brcm80211/brcmsmac/pub.h      |    2 +-
 drivers/net/wireless/brcm80211/include/soc.h       |   62 -------
 11 files changed, 213 insertions(+), 441 deletions(-)

-- 
1.7.9.5


^ permalink raw reply	[flat|nested] 36+ messages in thread

* [PATCH v2 01/18] brcmsmac: remove PCIE() macro
  2012-06-30 13:16 [PATCH v2 00/18] brcmsmac: update to get SoCs working Hauke Mehrtens
@ 2012-06-30 13:16 ` Hauke Mehrtens
  2012-07-03  7:07   ` Arend van Spriel
  2012-06-30 13:16 ` [PATCH v2 02/18] brcmsmac: remove PCI_FORCEHT() macro Hauke Mehrtens
                   ` (18 subsequent siblings)
  19 siblings, 1 reply; 36+ messages in thread
From: Hauke Mehrtens @ 2012-06-30 13:16 UTC (permalink / raw)
  To: linville, arend; +Cc: brcm80211-dev-list, linux-wireless, Hauke Mehrtens

Instead of checking if there is a PCIe core on the bus, better check if
hosttype is PCIe.

In the original submission to staging PCIE() checked, if the bustype is
PCI and the buscore is a PCIe core. Now we assume that all cores bcma
supports are PCIe based, so we just have to check if the bustype is PCI.

The old code bcmsmac currently uses searches for a PCIe core on the bus
and if there is one assumes that this is the buscore, which is wrong.
Some SoCs have a PCIe core operating in host mode and this is not the
bus core. The old code also caused a null pointer in
ai_get_buscoretype() and ai_get_buscorerev() if buscore was not set
because there was no PCIe core on the bus.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 drivers/net/wireless/brcm80211/brcmsmac/aiutils.c |    9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c
index 3c6f9b1..c942a88 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c
@@ -318,9 +318,8 @@
 #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__)
@@ -774,7 +773,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);
 }
 
@@ -792,7 +791,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);
 }
 
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v2 02/18] brcmsmac: remove PCI_FORCEHT() macro
  2012-06-30 13:16 [PATCH v2 00/18] brcmsmac: update to get SoCs working Hauke Mehrtens
  2012-06-30 13:16 ` [PATCH v2 01/18] brcmsmac: remove PCIE() macro Hauke Mehrtens
@ 2012-06-30 13:16 ` Hauke Mehrtens
  2012-06-30 13:16 ` [PATCH v2 03/18] brcmsmac: remove ai_get_buscore{type,rev}() Hauke Mehrtens
                   ` (17 subsequent siblings)
  19 siblings, 0 replies; 36+ messages in thread
From: Hauke Mehrtens @ 2012-06-30 13:16 UTC (permalink / raw)
  To: linville, arend; +Cc: brcm80211-dev-list, linux-wireless, Hauke Mehrtens

The BCM4716 is a SoC and does not have a PCI client interface, so this
condition is never true.

Acked-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 drivers/net/wireless/brcm80211/brcmsmac/aiutils.c |   19 -------------------
 1 file changed, 19 deletions(-)

diff --git a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c
index c942a88..c7ec9b7 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c
@@ -318,9 +318,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
@@ -753,9 +750,6 @@ bool ai_clkctl_cc(struct si_pub *sih, enum bcma_clkmode mode)
 
 	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;
@@ -764,15 +758,9 @@ bool ai_clkctl_cc(struct si_pub *sih, enum bcma_clkmode mode)
 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);
 }
@@ -781,16 +769,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);
 }
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v2 03/18] brcmsmac: remove ai_get_buscore{type,rev}()
  2012-06-30 13:16 [PATCH v2 00/18] brcmsmac: update to get SoCs working Hauke Mehrtens
  2012-06-30 13:16 ` [PATCH v2 01/18] brcmsmac: remove PCIE() macro Hauke Mehrtens
  2012-06-30 13:16 ` [PATCH v2 02/18] brcmsmac: remove PCI_FORCEHT() macro Hauke Mehrtens
@ 2012-06-30 13:16 ` Hauke Mehrtens
  2012-06-30 13:16 ` [PATCH v2 04/18] brcmsmac: use container_of instead of cast Hauke Mehrtens
                   ` (16 subsequent siblings)
  19 siblings, 0 replies; 36+ messages in thread
From: Hauke Mehrtens @ 2012-06-30 13:16 UTC (permalink / raw)
  To: linville, arend; +Cc: brcm80211-dev-list, linux-wireless, Hauke Mehrtens

These two functions are not used any more.

Acked-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 drivers/net/wireless/brcm80211/brcmsmac/aiutils.c |   15 ---------------
 drivers/net/wireless/brcm80211/brcmsmac/aiutils.h |    4 ----
 2 files changed, 19 deletions(-)

diff --git a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c
index c7ec9b7..339e533 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c
@@ -469,9 +469,6 @@ ai_buscore_setup(struct si_info *sii, struct bcma_device *cc)
 		sii->pub.pmurev = sii->pub.pmucaps & PCAP_REV_MASK;
 	}
 
-	/* figure out buscore */
-	sii->buscore = ai_findcore(&sii->pub, PCIE_CORE_ID, 0);
-
 	return true;
 }
 
@@ -804,15 +801,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;
-}
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.h b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.h
index d6fa982..fb7f439 100644
--- 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;
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v2 04/18] brcmsmac: use container_of instead of cast
  2012-06-30 13:16 [PATCH v2 00/18] brcmsmac: update to get SoCs working Hauke Mehrtens
                   ` (2 preceding siblings ...)
  2012-06-30 13:16 ` [PATCH v2 03/18] brcmsmac: remove ai_get_buscore{type,rev}() Hauke Mehrtens
@ 2012-06-30 13:16 ` Hauke Mehrtens
  2012-06-30 13:16 ` [PATCH v2 05/18] brcmsmac: remove ai_findcore() Hauke Mehrtens
                   ` (15 subsequent siblings)
  19 siblings, 0 replies; 36+ messages in thread
From: Hauke Mehrtens @ 2012-06-30 13:16 UTC (permalink / raw)
  To: linville, arend; +Cc: brcm80211-dev-list, linux-wireless, Hauke Mehrtens

Now "struct si_pub pub" does not have to be the first member in struct
si_info any more, if it is the resulting code after compilation should
be the same.

Acked-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 drivers/net/wireless/brcm80211/brcmsmac/aiutils.c |   16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c
index 339e533..2a77698 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c
@@ -582,7 +582,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;
@@ -597,7 +597,7 @@ struct bcma_device *ai_findcore(struct si_pub *sih, u16 coreid, u16 coreunit)
 	struct si_info *sii;
 	uint found;
 
-	sii = (struct si_info *)sih;
+	sii = container_of(sih, struct si_info, pub);
 
 	found = 0;
 
@@ -620,7 +620,7 @@ uint ai_cc_reg(struct si_pub *sih, uint regoff, u32 mask, u32 val)
 	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 */
@@ -713,7 +713,7 @@ u16 ai_clkctl_fast_pwrup_delay(struct si_pub *sih)
 	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;
@@ -745,7 +745,7 @@ bool ai_clkctl_cc(struct si_pub *sih, enum bcma_clkmode mode)
 	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);
@@ -756,7 +756,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);
@@ -767,7 +767,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);
@@ -790,7 +790,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;
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v2 05/18] brcmsmac: remove ai_findcore()
  2012-06-30 13:16 [PATCH v2 00/18] brcmsmac: update to get SoCs working Hauke Mehrtens
                   ` (3 preceding siblings ...)
  2012-06-30 13:16 ` [PATCH v2 04/18] brcmsmac: use container_of instead of cast Hauke Mehrtens
@ 2012-06-30 13:16 ` Hauke Mehrtens
  2012-06-30 13:16 ` [PATCH v2 06/18] brcmsmac: remove si_pmu_init() and si_pmu_res_init() Hauke Mehrtens
                   ` (14 subsequent siblings)
  19 siblings, 0 replies; 36+ messages in thread
From: Hauke Mehrtens @ 2012-06-30 13:16 UTC (permalink / raw)
  To: linville, arend; +Cc: brcm80211-dev-list, linux-wireless, Hauke Mehrtens

bcma also stores a pointer to the chipcommon core in its struct,
brcmsmac should use it and not search for the core by its own.

Acked-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 drivers/net/wireless/brcm80211/brcmsmac/aiutils.c |   31 ++++-----------------
 drivers/net/wireless/brcm80211/brcmsmac/aiutils.h |    2 --
 drivers/net/wireless/brcm80211/brcmsmac/pmu.c     |   12 +++++---
 3 files changed, 14 insertions(+), 31 deletions(-)

diff --git a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c
index 2a77698..4abf9b6 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c
@@ -590,27 +590,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.
  */
@@ -686,12 +665,13 @@ ai_clkctl_setdelay(struct si_pub *sih, struct bcma_device *cc)
 /* 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;
 
@@ -723,7 +703,7 @@ u16 ai_clkctl_fast_pwrup_delay(struct si_pub *sih)
 		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)
@@ -747,7 +727,7 @@ bool ai_clkctl_cc(struct si_pub *sih, enum bcma_clkmode mode)
 
 	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;
 }
@@ -776,9 +756,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);
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.h b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.h
index fb7f439..3a5358c 100644
--- 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 === */
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/pmu.c b/drivers/net/wireless/brcm80211/brcmsmac/pmu.c
index 4931d29..0399a86 100644
--- 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_pub *sih, u32 * pmin, u32 * pmax)
 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 *sih)
 		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;
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v2 06/18] brcmsmac: remove si_pmu_init() and si_pmu_res_init()
  2012-06-30 13:16 [PATCH v2 00/18] brcmsmac: update to get SoCs working Hauke Mehrtens
                   ` (4 preceding siblings ...)
  2012-06-30 13:16 ` [PATCH v2 05/18] brcmsmac: remove ai_findcore() Hauke Mehrtens
@ 2012-06-30 13:16 ` Hauke Mehrtens
  2012-06-30 13:16 ` [PATCH v2 07/18] brcmsmac: remove si_pmu_spuravoid_pllupdate() Hauke Mehrtens
                   ` (13 subsequent siblings)
  19 siblings, 0 replies; 36+ messages in thread
From: Hauke Mehrtens @ 2012-06-30 13:16 UTC (permalink / raw)
  To: linville, arend; +Cc: brcm80211-dev-list, linux-wireless, Hauke Mehrtens

This is already done by bcma_pmu_init() and bcma_pmu_resources_init() in bcma.

Acked-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 drivers/net/wireless/brcm80211/brcmsmac/aiutils.c |    2 -
 drivers/net/wireless/brcm80211/brcmsmac/pmu.c     |   76 ---------------------
 drivers/net/wireless/brcm80211/brcmsmac/pmu.h     |    2 -
 3 files changed, 80 deletions(-)

diff --git a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c
index 4abf9b6..c15d9fc 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c
@@ -503,9 +503,7 @@ static struct si_info *ai_doattach(struct si_info *sii,
 
 	/* 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 */
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/pmu.c b/drivers/net/wireless/brcm80211/brcmsmac/pmu.c
index 0399a86..045f43a 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/pmu.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/pmu.c
@@ -108,37 +108,6 @@
 #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;
@@ -284,51 +253,6 @@ u32 si_pmu_alp_clock(struct si_pub *sih)
 	return clock;
 }
 
-/* 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 = sii->icbus->drv_cc.core;
-
-	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 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 = sii->icbus->drv_cc.core;
-
-	/* 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);
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/pmu.h b/drivers/net/wireless/brcm80211/brcmsmac/pmu.h
index 3e39c5e..2f0ad28 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/pmu.h
+++ b/drivers/net/wireless/brcm80211/brcmsmac/pmu.h
@@ -28,8 +28,6 @@ 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_ */
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v2 07/18] brcmsmac: remove si_pmu_spuravoid_pllupdate()
  2012-06-30 13:16 [PATCH v2 00/18] brcmsmac: update to get SoCs working Hauke Mehrtens
                   ` (5 preceding siblings ...)
  2012-06-30 13:16 ` [PATCH v2 06/18] brcmsmac: remove si_pmu_init() and si_pmu_res_init() Hauke Mehrtens
@ 2012-06-30 13:16 ` Hauke Mehrtens
  2012-06-30 13:16 ` [PATCH v2 08/18] brcmsmac: remove some redundant chip common workarounds Hauke Mehrtens
                   ` (12 subsequent siblings)
  19 siblings, 0 replies; 36+ messages in thread
From: Hauke Mehrtens @ 2012-06-30 13:16 UTC (permalink / raw)
  To: linville, arend; +Cc: brcm80211-dev-list, linux-wireless, Hauke Mehrtens

si_pmu_spuravoid_pllupdate() is now replaced by
bcma_pmu_spuravoid_pllupdate() which does the same thing, but supports
more chips.

This function is in my pending patch series for bcma.
Author: Hauke Mehrtens <hauke@hauke-m.de>
Date:   Mon Jun 4 01:31:32 2012 +0200

    bcma: add bcma_pmu_spuravoid_pllupdate()

Acked-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 .../net/wireless/brcm80211/brcmsmac/phy/phy_n.c    |    3 +-
 drivers/net/wireless/brcm80211/brcmsmac/pmu.c      |   84 --------------------
 drivers/net/wireless/brcm80211/brcmsmac/pmu.h      |    1 -
 3 files changed, 2 insertions(+), 86 deletions(-)

diff --git a/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_n.c b/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_n.c
index 3667181..a4ae93e 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_n.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_n.c
@@ -21106,6 +21106,7 @@ wlc_phy_chanspec_nphy_setup(struct brcms_phy *pi, u16 chanspec,
 			    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) {
@@ -21189,7 +21190,7 @@ wlc_phy_chanspec_nphy_setup(struct brcms_phy *pi, u16 chanspec,
 			spuravoid = 1;
 
 		wlapi_bmac_core_phypll_ctl(pi->sh->physhim, false);
-		si_pmu_spuravoid_pllupdate(pi->sh->sih, spuravoid);
+		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) ||
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/pmu.c b/drivers/net/wireless/brcm80211/brcmsmac/pmu.c
index 045f43a..6b4344f 100644
--- 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,80 +98,6 @@
 #define	RES4313_HT_AVAIL_RSRC		14
 #define	RES4313_MACPHY_CLK_AVAIL_RSRC	15
 
-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 = sii->icbus->drv_cc.core;
-
-	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;
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/pmu.h b/drivers/net/wireless/brcm80211/brcmsmac/pmu.h
index 2f0ad28..f7cff87 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/pmu.h
+++ b/drivers/net/wireless/brcm80211/brcmsmac/pmu.h
@@ -26,7 +26,6 @@ extern u32 si_pmu_chipcontrol(struct si_pub *sih, uint reg, u32 mask, u32 val);
 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 u32 si_pmu_measure_alpclk(struct si_pub *sih);
 
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v2 08/18] brcmsmac: remove some redundant chip common workarounds
  2012-06-30 13:16 [PATCH v2 00/18] brcmsmac: update to get SoCs working Hauke Mehrtens
                   ` (6 preceding siblings ...)
  2012-06-30 13:16 ` [PATCH v2 07/18] brcmsmac: remove si_pmu_spuravoid_pllupdate() Hauke Mehrtens
@ 2012-06-30 13:16 ` Hauke Mehrtens
  2012-06-30 13:16 ` [PATCH v2 09/18] brcmsmac: use core id constants from bcma Hauke Mehrtens
                   ` (11 subsequent siblings)
  19 siblings, 0 replies; 36+ messages in thread
From: Hauke Mehrtens @ 2012-06-30 13:16 UTC (permalink / raw)
  To: linville, arend; +Cc: brcm80211-dev-list, linux-wireless, Hauke Mehrtens

The removed workarounds are already performed in bcma_pmu_workarounds()
and bcma_core_chipcommon_init()

This patch depends on the completion of the workarounds in bcma done in
this commit in my pending patch series for bcma.
Author: Hauke Mehrtens <hauke@hauke-m.de>
Date:   Mon Jun 4 00:20:26 2012 +0200

    bcma: complete workaround for BCMA43224 and BCM4313

Acked-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 drivers/net/wireless/brcm80211/brcmsmac/aiutils.c |   42 ---------------------
 1 file changed, 42 deletions(-)

diff --git a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c
index c15d9fc..8c9345d 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c
@@ -476,11 +476,7 @@ static struct si_info *ai_doattach(struct si_info *sii,
 				   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;
@@ -506,44 +502,6 @@ static struct si_info *ai_doattach(struct si_info *sii,
 		(void)si_pmu_measure_alpclk(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;
 
  exit:
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v2 09/18] brcmsmac: use core id constants from bcma
  2012-06-30 13:16 [PATCH v2 00/18] brcmsmac: update to get SoCs working Hauke Mehrtens
                   ` (7 preceding siblings ...)
  2012-06-30 13:16 ` [PATCH v2 08/18] brcmsmac: remove some redundant chip common workarounds Hauke Mehrtens
@ 2012-06-30 13:16 ` Hauke Mehrtens
  2012-06-30 13:16 ` [PATCH v2 10/18] brcmsmac: use chip and package " Hauke Mehrtens
                   ` (10 subsequent siblings)
  19 siblings, 0 replies; 36+ messages in thread
From: Hauke Mehrtens @ 2012-06-30 13:16 UTC (permalink / raw)
  To: linville, arend; +Cc: brcm80211-dev-list, linux-wireless, Hauke Mehrtens

This patch depends on adding the IDs to bcma done in
this commit in my pending patch series for bcma.
Author: Hauke Mehrtens <hauke@hauke-m.de>
Date:   Sun Jun 3 18:17:57 2012 +0200

    bcma: add constants for chip ids

Acked-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 drivers/net/wireless/brcm80211/brcmsmac/dma.c |    4 +-
 drivers/net/wireless/brcm80211/include/soc.h  |   62 -------------------------
 2 files changed, 2 insertions(+), 64 deletions(-)

diff --git a/drivers/net/wireless/brcm80211/brcmsmac/dma.c b/drivers/net/wireless/brcm80211/brcmsmac/dma.c
index 11054ae..b67b20c 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/dma.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/dma.c
@@ -639,10 +639,10 @@ struct dma_pub *dma_attach(char *name, struct si_pub *sih,
 	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
diff --git a/drivers/net/wireless/brcm80211/include/soc.h b/drivers/net/wireless/brcm80211/include/soc.h
index 4e9b7e4..123cfa8 100644
--- 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
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v2 10/18] brcmsmac: use chip and package id constants from bcma
  2012-06-30 13:16 [PATCH v2 00/18] brcmsmac: update to get SoCs working Hauke Mehrtens
                   ` (8 preceding siblings ...)
  2012-06-30 13:16 ` [PATCH v2 09/18] brcmsmac: use core id constants from bcma Hauke Mehrtens
@ 2012-06-30 13:16 ` Hauke Mehrtens
  2012-06-30 13:16 ` [PATCH v2 11/18] brcmsmac: remove some unnessessacry casts and void pointer Hauke Mehrtens
                   ` (9 subsequent siblings)
  19 siblings, 0 replies; 36+ messages in thread
From: Hauke Mehrtens @ 2012-06-30 13:16 UTC (permalink / raw)
  To: linville, arend; +Cc: brcm80211-dev-list, linux-wireless, Hauke Mehrtens

This patch depends on addin the chip IDs to bcma done in this commit in
my pending patch series for bcma.
Author: Hauke Mehrtens <hauke@hauke-m.de>
Date:   Sun Jun 3 18:17:57 2012 +0200

    bcma: add constants for chip ids

Acked-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 drivers/net/wireless/brcm80211/brcmsmac/aiutils.h  |   10 ----------
 drivers/net/wireless/brcm80211/brcmsmac/main.c     |   12 ++++++------
 .../net/wireless/brcm80211/brcmsmac/phy/phy_cmn.c  |   10 +++++-----
 .../net/wireless/brcm80211/brcmsmac/phy/phy_n.c    |   20 ++++++++++----------
 drivers/net/wireless/brcm80211/brcmsmac/pmu.c      |   12 ++++++------
 5 files changed, 27 insertions(+), 37 deletions(-)

diff --git a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.h b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.h
index 3a5358c..89562c1 100644
--- 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 */
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/main.c b/drivers/net/wireless/brcm80211/brcmsmac/main.c
index 8776fbc..478b374 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
@@ -2126,8 +2126,8 @@ void brcms_b_switch_macfreq(struct brcms_hardware *wlc_hw, u8 spurmode)
 {
 	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);
@@ -2791,7 +2791,7 @@ void brcms_b_core_phypll_ctl(struct brcms_hardware *wlc_hw, bool on)
 	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 |
@@ -4528,7 +4528,7 @@ static int brcms_b_attach(struct brcms_c_info *wlc, struct bcma_device *core,
 	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()
@@ -5036,7 +5036,7 @@ static void brcms_b_hw_up(struct brcms_hardware *wlc_hw)
 	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)))
@@ -5130,7 +5130,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,
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_cmn.c b/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_cmn.c
index 264f8c4..d16cbec 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_cmn.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_cmn.c
@@ -837,7 +837,7 @@ wlc_phy_table_addr(struct brcms_phy *pi, uint tbl_id, uint tbl_offset,
 	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 +847,7 @@ wlc_phy_table_addr(struct brcms_phy *pi, uint tbl_id, uint tbl_offset,
 
 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 +881,7 @@ wlc_phy_write_table(struct brcms_phy *pi, const struct phytbl_info *ptbl_info,
 
 	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 +918,7 @@ wlc_phy_read_table(struct brcms_phy *pi, const struct phytbl_info *ptbl_info,
 
 	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 +2894,7 @@ const u8 *wlc_phy_get_ofdm_rate_lookup(void)
 
 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;
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_n.c b/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_n.c
index a4ae93e..14da744 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_n.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_n.c
@@ -19309,8 +19309,8 @@ void wlc_phy_init_nphy(struct brcms_phy *pi)
 		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,
@@ -20751,11 +20751,11 @@ wlc_phy_chanspec_radio2056_setup(struct brcms_phy *pi,
 				cascbias = 0x20;
 
 				if ((pi->sh->chip ==
-				     BCM43224_CHIP_ID)
+				     BCMA_CHIP_ID_BCM43224)
 				    || (pi->sh->chip ==
-					BCM43225_CHIP_ID)) {
+					BCMA_CHIP_ID_BCM43225)) {
 					if (pi->sh->chippkg ==
-					    BCM43224_FAB_SMIC) {
+					    BCMA_PKG_ID_BCM43224_FAB_SMIC) {
 						bias = 0x2a;
 						cascbias = 0x38;
 					}
@@ -20863,9 +20863,9 @@ wlc_phy_chanspec_radio2056_setup(struct brcms_phy *pi,
 
 			cascbias = 0x30;
 
-			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)) {
+				if (pi->sh->chippkg == BCMA_PKG_ID_BCM43224_FAB_SMIC)
 					cascbias = 0x35;
 			}
 
@@ -21193,8 +21193,8 @@ wlc_phy_chanspec_nphy_setup(struct brcms_phy *pi, u16 chanspec,
 		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),
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/pmu.c b/drivers/net/wireless/brcm80211/brcmsmac/pmu.c
index 6b4344f..7e9df56 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/pmu.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/pmu.c
@@ -103,9 +103,9 @@ 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:
@@ -156,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;
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v2 11/18] brcmsmac: remove some unnessessacry casts and void pointer
  2012-06-30 13:16 [PATCH v2 00/18] brcmsmac: update to get SoCs working Hauke Mehrtens
                   ` (9 preceding siblings ...)
  2012-06-30 13:16 ` [PATCH v2 10/18] brcmsmac: use chip and package " Hauke Mehrtens
@ 2012-06-30 13:16 ` Hauke Mehrtens
  2012-07-01 23:59   ` Julian Calaby
  2012-06-30 13:16 ` [PATCH v2 12/18] brcmsmac: add a conditions for core rev 17 again Hauke Mehrtens
                   ` (8 subsequent siblings)
  19 siblings, 1 reply; 36+ messages in thread
From: Hauke Mehrtens @ 2012-06-30 13:16 UTC (permalink / raw)
  To: linville, arend; +Cc: brcm80211-dev-list, linux-wireless, Hauke Mehrtens

Acked-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 drivers/net/wireless/brcm80211/brcmsmac/main.c |   11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/drivers/net/wireless/brcm80211/brcmsmac/main.c b/drivers/net/wireless/brcm80211/brcmsmac/main.c
index 478b374..8bad8b6 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
@@ -4218,9 +4218,8 @@ static void brcms_c_radio_timer(void *arg)
 }
 
 /* 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);
@@ -4241,10 +4240,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)
@@ -4284,7 +4281,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)
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v2 12/18] brcmsmac: add a conditions for core rev 17 again
  2012-06-30 13:16 [PATCH v2 00/18] brcmsmac: update to get SoCs working Hauke Mehrtens
                   ` (10 preceding siblings ...)
  2012-06-30 13:16 ` [PATCH v2 11/18] brcmsmac: remove some unnessessacry casts and void pointer Hauke Mehrtens
@ 2012-06-30 13:16 ` Hauke Mehrtens
  2012-07-03  7:06   ` Arend van Spriel
  2012-06-30 13:16 ` [PATCH v2 13/18] brcmsmac: add some workarounds for other chips again Hauke Mehrtens
                   ` (7 subsequent siblings)
  19 siblings, 1 reply; 36+ messages in thread
From: Hauke Mehrtens @ 2012-06-30 13:16 UTC (permalink / raw)
  To: linville, arend; +Cc: brcm80211-dev-list, linux-wireless, Hauke Mehrtens

This reverts some changes made in this commit:
commit 7234592364e2efe8b4ac1040c99b1d7ef01cf502
Author: Roland Vossen <rvossen@broadcom.com>
Date:   Mon Feb 14 12:16:45 2011 +0100

    staging: brcm80211: removal of inactive d11 code

The bcm4716 has a rev 17 wireless core and this condition is needed.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 drivers/net/wireless/brcm80211/brcmsmac/main.c |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/brcm80211/brcmsmac/main.c b/drivers/net/wireless/brcm80211/brcmsmac/main.c
index 8bad8b6..547ae5b 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
@@ -1942,7 +1942,8 @@ static bool brcms_b_radio_read_hwdisabled(struct brcms_hardware *wlc_hw)
 		 * 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
@@ -2023,7 +2024,8 @@ void brcms_b_corereset(struct brcms_hardware *wlc_hw, u32 flags)
 	 * 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
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v2 13/18] brcmsmac: add some workarounds for other chips again
  2012-06-30 13:16 [PATCH v2 00/18] brcmsmac: update to get SoCs working Hauke Mehrtens
                   ` (11 preceding siblings ...)
  2012-06-30 13:16 ` [PATCH v2 12/18] brcmsmac: add a conditions for core rev 17 again Hauke Mehrtens
@ 2012-06-30 13:16 ` Hauke Mehrtens
  2012-07-03  7:08   ` Arend van Spriel
  2012-06-30 13:16 ` [PATCH v2 14/18] brcmsmac: extend xmtfifo_sz array Hauke Mehrtens
                   ` (6 subsequent siblings)
  19 siblings, 1 reply; 36+ messages in thread
From: Hauke Mehrtens @ 2012-06-30 13:16 UTC (permalink / raw)
  To: linville, arend; +Cc: brcm80211-dev-list, linux-wireless, Hauke Mehrtens

This adds some workarounds for the BCM4716, BCM47162, BCM5357 to the
phy code again. This patch reverts parts of the following patch.

commit c2c724977f95135f397fe0cb45f3c041d26b91e1
Author: Arend van Spriel <arend@broadcom.com>
Date:   Wed Jun 29 16:46:35 2011 -0700

    staging: brcm80211: remove unsupported chipset code from brcmsmac phy

The BCM4716 is working for me with an other firmware and I am working
on adding support for the other chips.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 .../net/wireless/brcm80211/brcmsmac/phy/phy_n.c    |  131 +++++++++++++-------
 1 file changed, 89 insertions(+), 42 deletions(-)

diff --git a/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_n.c b/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_n.c
index 14da744..65db9b7 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_n.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_n.c
@@ -17893,6 +17893,8 @@ static u32 *wlc_phy_get_ipa_gaintbl_nphy(struct brcms_phy *pi)
 					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 {
@@ -19254,8 +19256,14 @@ static void wlc_phy_spurwar_nphy(struct brcms_phy *pi)
 			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;
@@ -19318,6 +19326,10 @@ void wlc_phy_init_nphy(struct brcms_phy *pi)
 				  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)) {
 
@@ -20695,12 +20707,22 @@ wlc_phy_chanspec_radio2056_setup(struct brcms_phy *pi,
 			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);
+			}
 		}
 	}
 
@@ -20747,24 +20769,30 @@ wlc_phy_chanspec_radio2056_setup(struct brcms_phy *pi,
 				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 ==
-				     BCMA_CHIP_ID_BCM43224)
-				    || (pi->sh->chip ==
-					BCMA_CHIP_ID_BCM43225)) {
-					if (pi->sh->chippkg ==
-					    BCMA_PKG_ID_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);
@@ -20863,11 +20891,10 @@ wlc_phy_chanspec_radio2056_setup(struct brcms_phy *pi,
 
 			cascbias = 0x30;
 
-			if ((pi->sh->chip == BCMA_CHIP_ID_BCM43224) ||
-			    (pi->sh->chip == BCMA_CHIP_ID_BCM43225)) {
-				if (pi->sh->chippkg == BCMA_PKG_ID_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;
 
@@ -21179,19 +21206,29 @@ wlc_phy_chanspec_nphy_setup(struct brcms_phy *pi, u16 chanspec,
 		} 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);
-		bcma_pmu_spuravoid_pllupdate(&sii->icbus->drv_cc, 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 == BCMA_CHIP_ID_BCM43224) ||
 		    (pi->sh->chip == BCMA_CHIP_ID_BCM43225)) {
@@ -21210,7 +21247,9 @@ wlc_phy_chanspec_nphy_setup(struct brcms_phy *pi, u16 chanspec,
 			}
 		}
 
-		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));
@@ -22172,9 +22211,15 @@ s16 wlc_phy_tempsense_nphy(struct brcms_phy *pi)
 		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;
 
@@ -24924,14 +24969,16 @@ wlc_phy_a2_nphy(struct brcms_phy *pi, struct nphy_ipa_txcalgains *txgains,
 			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);
 				}
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v2 14/18] brcmsmac: extend xmtfifo_sz array
  2012-06-30 13:16 [PATCH v2 00/18] brcmsmac: update to get SoCs working Hauke Mehrtens
                   ` (12 preceding siblings ...)
  2012-06-30 13:16 ` [PATCH v2 13/18] brcmsmac: add some workarounds for other chips again Hauke Mehrtens
@ 2012-06-30 13:16 ` Hauke Mehrtens
  2012-07-02  0:01   ` Julian Calaby
  2012-07-03  7:08   ` [PATCH v2 " Arend van Spriel
  2012-06-30 13:16 ` [PATCH v2 15/18] brcmsmac: fix DMA on SoCs Hauke Mehrtens
                   ` (5 subsequent siblings)
  19 siblings, 2 replies; 36+ messages in thread
From: Hauke Mehrtens @ 2012-06-30 13:16 UTC (permalink / raw)
  To: linville, arend; +Cc: brcm80211-dev-list, linux-wireless, Hauke Mehrtens

The xmtfifo_sz array contains the queue sizes for the different core
revs. This array missed the sizes for the core rev 17 and 28. This
patch extends the array to also include these sizes and adds a warning
if no queue size is stored in the array for the given core rev.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 drivers/net/wireless/brcm80211/brcmsmac/main.c |   24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/brcm80211/brcmsmac/main.c b/drivers/net/wireless/brcm80211/brcmsmac/main.c
index 547ae5b..46d7646 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
@@ -269,7 +269,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;
@@ -333,6 +333,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 */
@@ -343,6 +349,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: 2304, 14848, 5632, 3584, 3584, 1280 */
+	{9, 58, 22, 14, 14, 5},
+	/* corerev 29: */
+	{0, 0, 0, 0, 0, 0},
+	/* corerev 30: */
+	{0, 0, 0, 0, 0, 0},
 };
 
 #ifdef DEBUG
@@ -4596,8 +4614,12 @@ static int brcms_b_attach(struct brcms_c_info *wlc, struct bcma_device *core,
 		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 =
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v2 15/18] brcmsmac: fix DMA on SoCs
  2012-06-30 13:16 [PATCH v2 00/18] brcmsmac: update to get SoCs working Hauke Mehrtens
                   ` (13 preceding siblings ...)
  2012-06-30 13:16 ` [PATCH v2 14/18] brcmsmac: extend xmtfifo_sz array Hauke Mehrtens
@ 2012-06-30 13:16 ` Hauke Mehrtens
  2012-07-03  7:10   ` Arend van Spriel
  2012-06-30 13:16 ` [PATCH v2 16/18] brcmsmac: extend brcms_c_chipmatch() to also handle non PCIe devices Hauke Mehrtens
                   ` (4 subsequent siblings)
  19 siblings, 1 reply; 36+ messages in thread
From: Hauke Mehrtens @ 2012-06-30 13:16 UTC (permalink / raw)
  To: linville, arend; +Cc: brcm80211-dev-list, linux-wireless, Hauke Mehrtens

These extra offsets are only needed by PCIe devices and not when
running on an SoC.

This partly reverts commit:
commit 821e4e93172e4f7d5ac1eade04665c3dc5049c4a
Author: Roland Vossen <rvossen@broadcom.com>
Date:   Mon Aug 8 15:58:58 2011 +0200

    staging: brcm80211: removed unused bus code from softmac

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 drivers/net/wireless/brcm80211/brcmsmac/dma.c |   11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/brcm80211/brcmsmac/dma.c b/drivers/net/wireless/brcm80211/brcmsmac/dma.c
index b67b20c..f64c5cf 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/dma.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/dma.c
@@ -573,6 +573,7 @@ struct dma_pub *dma_attach(char *name, struct si_pub *sih,
 	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);
@@ -633,11 +634,15 @@ struct dma_pub *dma_attach(char *name, struct si_pub *sih,
 	 */
 	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 == BCMA_CORE_SDIO_DEV)
 	    && ((rev > 0) && (rev <= 2)))
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v2 16/18] brcmsmac: extend brcms_c_chipmatch() to also handle non PCIe devices
  2012-06-30 13:16 [PATCH v2 00/18] brcmsmac: update to get SoCs working Hauke Mehrtens
                   ` (14 preceding siblings ...)
  2012-06-30 13:16 ` [PATCH v2 15/18] brcmsmac: fix DMA on SoCs Hauke Mehrtens
@ 2012-06-30 13:16 ` Hauke Mehrtens
  2012-07-03  7:11   ` Arend van Spriel
  2012-06-30 13:16 ` [PATCH v2 17/18] brcmsmac: fix read in write_phy_reg Hauke Mehrtens
                   ` (3 subsequent siblings)
  19 siblings, 1 reply; 36+ messages in thread
From: Hauke Mehrtens @ 2012-06-30 13:16 UTC (permalink / raw)
  To: linville, arend; +Cc: brcm80211-dev-list, linux-wireless, Hauke Mehrtens

Now brcms_c_chipmatch() is also able to handle non PCI devices and also
does some checking for SoC if they are supported by brcmsmac.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 .../net/wireless/brcm80211/brcmsmac/mac80211_if.c  |    3 +-
 drivers/net/wireless/brcm80211/brcmsmac/main.c     |   38 ++++++++++++++++----
 drivers/net/wireless/brcm80211/brcmsmac/pub.h      |    2 +-
 3 files changed, 34 insertions(+), 9 deletions(-)

diff --git a/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c b/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
index 2d5a404..2b57f57 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
@@ -319,8 +319,7 @@ static void brcms_ops_stop(struct ieee80211_hw *hw)
 		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,
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/main.c b/drivers/net/wireless/brcm80211/brcmsmac/main.c
index 46d7646..28988cb 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
@@ -4473,11 +4473,9 @@ static int brcms_b_attach(struct brcms_c_info *wlc, struct bcma_device *core,
 	}
 
 	/* 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;
 	}
@@ -5790,8 +5788,12 @@ void brcms_c_print_txstatus(struct tx_status *txs)
 		 (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;
@@ -5810,6 +5812,30 @@ bool brcms_c_chipmatch(u16 vendor, u16 device)
 	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)
 {
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/pub.h b/drivers/net/wireless/brcm80211/brcmsmac/pub.h
index aa5d67f..5855f4f 100644
--- 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_c_info *wlc);
 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);
 
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v2 17/18] brcmsmac: fix read in write_phy_reg
  2012-06-30 13:16 [PATCH v2 00/18] brcmsmac: update to get SoCs working Hauke Mehrtens
                   ` (15 preceding siblings ...)
  2012-06-30 13:16 ` [PATCH v2 16/18] brcmsmac: extend brcms_c_chipmatch() to also handle non PCIe devices Hauke Mehrtens
@ 2012-06-30 13:16 ` Hauke Mehrtens
  2012-06-30 13:16 ` [PATCH v2 18/18] brcmsmac: handle non PCI devices in the phy code Hauke Mehrtens
                   ` (2 subsequent siblings)
  19 siblings, 0 replies; 36+ messages in thread
From: Hauke Mehrtens @ 2012-06-30 13:16 UTC (permalink / raw)
  To: linville, arend; +Cc: brcm80211-dev-list, linux-wireless, Hauke Mehrtens

This reverts a unintended change mad in commit.
commit 4b006b11ca18995677c5f1cd03cc9c42fbe80693
Author: Arend van Spriel <arend@broadcom.com>
Date:   Thu Dec 8 15:06:54 2011 -0800

    brcm80211: smac: use bcma functions for register access in phy code

Acked-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 .../net/wireless/brcm80211/brcmsmac/phy/phy_cmn.c  |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_cmn.c b/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_cmn.c
index d16cbec..1703e7d 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_cmn.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_cmn.c
@@ -292,7 +292,7 @@ void write_phy_reg(struct brcms_phy *pi, u16 addr, u16 val)
 	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
 	bcma_write32(pi->d11core, D11REGOFFS(phyregaddr), addr | (val << 16));
 	if (++pi->phy_wreg >= pi->phy_wreg_limit) {
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v2 18/18] brcmsmac: handle non PCI devices in the phy code
  2012-06-30 13:16 [PATCH v2 00/18] brcmsmac: update to get SoCs working Hauke Mehrtens
                   ` (16 preceding siblings ...)
  2012-06-30 13:16 ` [PATCH v2 17/18] brcmsmac: fix read in write_phy_reg Hauke Mehrtens
@ 2012-06-30 13:16 ` Hauke Mehrtens
  2012-07-03  7:11   ` Arend van Spriel
  2012-07-02  0:04 ` [PATCH v2 00/18] brcmsmac: update to get SoCs working Julian Calaby
  2012-07-03  7:13 ` Arend van Spriel
  19 siblings, 1 reply; 36+ messages in thread
From: Hauke Mehrtens @ 2012-06-30 13:16 UTC (permalink / raw)
  To: linville, arend; +Cc: brcm80211-dev-list, linux-wireless, Hauke Mehrtens

Some code in write_{radio,radio}_reg() should just be run if this is a
pci based device. Add the condition again which was removed in commit:
commit 821e4e93172e4f7d5ac1eade04665c3dc5049c4a
Author: Roland Vossen <rvossen@broadcom.com>
Date:   Mon Aug 8 15:58:58 2011 +0200

    staging: brcm80211: removed unused bus code from softmac

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 .../net/wireless/brcm80211/brcmsmac/phy/phy_cmn.c  |   10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_cmn.c b/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_cmn.c
index 1703e7d..91937c5 100644
--- 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, u16 addr)
 
 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 *pi, u16 addr, u16 val)
 		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;
 	}
@@ -294,8 +297,11 @@ void write_phy_reg(struct brcms_phy *pi, u16 addr, u16 val)
 	if (addr == 0x72)
 		(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));
 	}
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* Re: [PATCH v2 11/18] brcmsmac: remove some unnessessacry casts and void pointer
  2012-06-30 13:16 ` [PATCH v2 11/18] brcmsmac: remove some unnessessacry casts and void pointer Hauke Mehrtens
@ 2012-07-01 23:59   ` Julian Calaby
  2012-07-02  7:54     ` Dominique Martinet
  0 siblings, 1 reply; 36+ messages in thread
From: Julian Calaby @ 2012-07-01 23:59 UTC (permalink / raw)
  To: Hauke Mehrtens; +Cc: linville, arend, brcm80211-dev-list, linux-wireless

Hi Hauke,

On Sat, Jun 30, 2012 at 11:16 PM, Hauke Mehrtens <hauke@hauke-m.de> wrote:
> Acked-by: Arend van Spriel <arend@broadcom.com>
> Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
> ---
>  drivers/net/wireless/brcm80211/brcmsmac/main.c |   11 +++++------
>  1 file changed, 5 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/net/wireless/brcm80211/brcmsmac/main.c b/drivers/net/wireless/brcm80211/brcmsmac/main.c
> index 478b374..8bad8b6 100644
> --- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
> +++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
> @@ -4241,10 +4240,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)
> @@ -4284,7 +4281,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);

You remove 2 cases of this pattern in your patch then add one. Why?

Thanks,

-- 
Julian Calaby

Email: julian.calaby@gmail.com
Profile: http://www.google.com/profiles/julian.calaby/
.Plan: http://sites.google.com/site/juliancalaby/

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH v2 14/18] brcmsmac: extend xmtfifo_sz array
  2012-06-30 13:16 ` [PATCH v2 14/18] brcmsmac: extend xmtfifo_sz array Hauke Mehrtens
@ 2012-07-02  0:01   ` Julian Calaby
  2012-07-02 18:15     ` [PATCH v3 " Hauke Mehrtens
  2012-07-03  7:08   ` [PATCH v2 " Arend van Spriel
  1 sibling, 1 reply; 36+ messages in thread
From: Julian Calaby @ 2012-07-02  0:01 UTC (permalink / raw)
  To: Hauke Mehrtens; +Cc: linville, arend, brcm80211-dev-list, linux-wireless

Hi Hauke,

On Sat, Jun 30, 2012 at 11:16 PM, Hauke Mehrtens <hauke@hauke-m.de> wrote:
> The xmtfifo_sz array contains the queue sizes for the different core
> revs. This array missed the sizes for the core rev 17 and 28. This
> patch extends the array to also include these sizes and adds a warning
> if no queue size is stored in the array for the given core rev.
>
> Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
> ---
>  drivers/net/wireless/brcm80211/brcmsmac/main.c |   24 +++++++++++++++++++++++-
>  1 file changed, 23 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/wireless/brcm80211/brcmsmac/main.c b/drivers/net/wireless/brcm80211/brcmsmac/main.c
> index 547ae5b..46d7646 100644
> --- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
> +++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
> @@ -343,6 +349,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: 2304, 14848, 5632, 3584, 3584, 1280 */
> +       {9, 58, 22, 14, 14, 5},
> +       /* corerev 29: */
> +       {0, 0, 0, 0, 0, 0},
> +       /* corerev 30: */
> +       {0, 0, 0, 0, 0, 0},

Why add data for 29 and 30?

Thanks,

-- 
Julian Calaby

Email: julian.calaby@gmail.com
Profile: http://www.google.com/profiles/julian.calaby/
.Plan: http://sites.google.com/site/juliancalaby/

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH v2 00/18] brcmsmac: update to get SoCs working
  2012-06-30 13:16 [PATCH v2 00/18] brcmsmac: update to get SoCs working Hauke Mehrtens
                   ` (17 preceding siblings ...)
  2012-06-30 13:16 ` [PATCH v2 18/18] brcmsmac: handle non PCI devices in the phy code Hauke Mehrtens
@ 2012-07-02  0:04 ` Julian Calaby
  2012-07-03  7:13 ` Arend van Spriel
  19 siblings, 0 replies; 36+ messages in thread
From: Julian Calaby @ 2012-07-02  0:04 UTC (permalink / raw)
  To: Hauke Mehrtens; +Cc: linville, arend, brcm80211-dev-list, linux-wireless

Hi Hauke,

On Sat, Jun 30, 2012 at 11:16 PM, Hauke Mehrtens <hauke@hauke-m.de> wrote:
> This series contains some patches needed to get brcmsmac working on
> SoCs like the BCM4718.

I've replied to a couple of patches with some minor nits. I'm sorry I
didn't notice these when you sent these patches the first time.

I don't think any of my comments are significant enough to require
another round of patches.

Thanks,

-- 
Julian Calaby

Email: julian.calaby@gmail.com
Profile: http://www.google.com/profiles/julian.calaby/
.Plan: http://sites.google.com/site/juliancalaby/

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH v2 11/18] brcmsmac: remove some unnessessacry casts and void pointer
  2012-07-01 23:59   ` Julian Calaby
@ 2012-07-02  7:54     ` Dominique Martinet
  2012-07-02 17:44       ` Hauke Mehrtens
  0 siblings, 1 reply; 36+ messages in thread
From: Dominique Martinet @ 2012-07-02  7:54 UTC (permalink / raw)
  To: Julian Calaby
  Cc: Hauke Mehrtens, linville, arend, brcm80211-dev-list, linux-wireless

Julian Calaby wrote on Mon, Jul 02, 2012 :
> On Sat, Jun 30, 2012 at 11:16 PM, Hauke Mehrtens <hauke@hauke-m.de> wrote:
> > diff --git a/drivers/net/wireless/brcm80211/brcmsmac/main.c b/drivers/net/wireless/brcm80211/brcmsmac/main.c
> > index 478b374..8bad8b6 100644
> > --- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
> > +++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
> > @@ -4241,10 +4240,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)
> > @@ -4284,7 +4281,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);
> 
> You remove 2 cases of this pattern in your patch then add one. Why?

I'm not Hauke :) but as far as I understand, brcms_c_watchdog_by_timer
is used by brcms_init_timer which expects a void (*fn) (void *); and
which is also used with brcms_c_radio_timer
Admitedly, brcms_c_radio_timer also uses a struct brcms_c_info* as
argument, so everything could be change this way, but I think it's not
completely insane to keep callbacks as void* :)

I also see the point of removing this "pattern" since it makes it easier
to understand with the proper type information.

Regards,
-- 
Asmadeus | Dominique Martinet

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH v2 11/18] brcmsmac: remove some unnessessacry casts and void pointer
  2012-07-02  7:54     ` Dominique Martinet
@ 2012-07-02 17:44       ` Hauke Mehrtens
  2012-07-02 23:01         ` Julian Calaby
  0 siblings, 1 reply; 36+ messages in thread
From: Hauke Mehrtens @ 2012-07-02 17:44 UTC (permalink / raw)
  To: Dominique Martinet
  Cc: Julian Calaby, linville, arend, brcm80211-dev-list, linux-wireless

On 07/02/2012 09:54 AM, Dominique Martinet wrote:
> Julian Calaby wrote on Mon, Jul 02, 2012 :
>> On Sat, Jun 30, 2012 at 11:16 PM, Hauke Mehrtens <hauke@hauke-m.de> wrote:
>>> diff --git a/drivers/net/wireless/brcm80211/brcmsmac/main.c b/drivers/net/wireless/brcm80211/brcmsmac/main.c
>>> index 478b374..8bad8b6 100644
>>> --- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
>>> +++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
>>> @@ -4241,10 +4240,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)
>>> @@ -4284,7 +4281,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);
>>
>> You remove 2 cases of this pattern in your patch then add one. Why?
> 
> I'm not Hauke :) but as far as I understand, brcms_c_watchdog_by_timer
> is used by brcms_init_timer which expects a void (*fn) (void *); and
> which is also used with brcms_c_radio_timer
> Admitedly, brcms_c_radio_timer also uses a struct brcms_c_info* as
> argument, so everything could be change this way, but I think it's not
> completely insane to keep callbacks as void* :)
> 
> I also see the point of removing this "pattern" since it makes it easier
> to understand with the proper type information.
> 
> Regards,
> 
Yes Dominique is right, that's the reason. I wanted to eliminate some of
the void *args. I left the void *args when it was called by a callback
function.

Hauke

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [PATCH v3 14/18] brcmsmac: extend xmtfifo_sz array
  2012-07-02  0:01   ` Julian Calaby
@ 2012-07-02 18:15     ` Hauke Mehrtens
  0 siblings, 0 replies; 36+ messages in thread
From: Hauke Mehrtens @ 2012-07-02 18:15 UTC (permalink / raw)
  To: linville, arend
  Cc: julian.calaby, brcm80211-dev-list, linux-wireless, Hauke Mehrtens

The xmtfifo_sz array contains the queue sizes for the different core
revs. This array missed the sizes for the core rev 17 and 28. This
patch extends the array to also include these sizes and adds a warning
if no queue size is stored in the array for the given core rev.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 drivers/net/wireless/brcm80211/brcmsmac/main.c |   20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/brcm80211/brcmsmac/main.c b/drivers/net/wireless/brcm80211/brcmsmac/main.c
index 547ae5b..942ef99 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
@@ -269,7 +269,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;
@@ -333,6 +333,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 */
@@ -343,6 +349,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
@@ -4596,8 +4610,12 @@ static int brcms_b_attach(struct brcms_c_info *wlc, struct bcma_device *core,
 		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 =
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* Re: [PATCH v2 11/18] brcmsmac: remove some unnessessacry casts and void pointer
  2012-07-02 17:44       ` Hauke Mehrtens
@ 2012-07-02 23:01         ` Julian Calaby
  0 siblings, 0 replies; 36+ messages in thread
From: Julian Calaby @ 2012-07-02 23:01 UTC (permalink / raw)
  To: Hauke Mehrtens
  Cc: Dominique Martinet, linville, arend, brcm80211-dev-list, linux-wireless

Hi Hauke,

On Tue, Jul 3, 2012 at 3:44 AM, Hauke Mehrtens <hauke@hauke-m.de> wrote:
> On 07/02/2012 09:54 AM, Dominique Martinet wrote:
>> Julian Calaby wrote on Mon, Jul 02, 2012 :
>>> On Sat, Jun 30, 2012 at 11:16 PM, Hauke Mehrtens <hauke@hauke-m.de> wrote:
>>>> diff --git a/drivers/net/wireless/brcm80211/brcmsmac/main.c b/drivers/net/wireless/brcm80211/brcmsmac/main.c
>>>> index 478b374..8bad8b6 100644
>>>> --- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
>>>> +++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
>>>> @@ -4241,10 +4240,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)
>>>> @@ -4284,7 +4281,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);
>>>
>>> You remove 2 cases of this pattern in your patch then add one. Why?
>>
>> I'm not Hauke :) but as far as I understand, brcms_c_watchdog_by_timer
>> is used by brcms_init_timer which expects a void (*fn) (void *); and
>> which is also used with brcms_c_radio_timer
>> Admitedly, brcms_c_radio_timer also uses a struct brcms_c_info* as
>> argument, so everything could be change this way, but I think it's not
>> completely insane to keep callbacks as void* :)
>>
>> I also see the point of removing this "pattern" since it makes it easier
>> to understand with the proper type information.
>>
>> Regards,
>>
> Yes Dominique is right, that's the reason. I wanted to eliminate some of
> the void *args. I left the void *args when it was called by a callback
> function.

Fair enough then, it just looked odd next to all the other changes.

Thanks,

-- 
Julian Calaby

Email: julian.calaby@gmail.com
Profile: http://www.google.com/profiles/julian.calaby/
.Plan: http://sites.google.com/site/juliancalaby/

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH v2 12/18] brcmsmac: add a conditions for core rev 17 again
  2012-06-30 13:16 ` [PATCH v2 12/18] brcmsmac: add a conditions for core rev 17 again Hauke Mehrtens
@ 2012-07-03  7:06   ` Arend van Spriel
  0 siblings, 0 replies; 36+ messages in thread
From: Arend van Spriel @ 2012-07-03  7:06 UTC (permalink / raw)
  To: Hauke Mehrtens; +Cc: linville, brcm80211-dev-list, linux-wireless

On 06/30/2012 03:16 PM, Hauke Mehrtens wrote:
> This reverts some changes made in this commit:
> commit 7234592364e2efe8b4ac1040c99b1d7ef01cf502
> Author: Roland Vossen <rvossen@broadcom.com>
> Date:   Mon Feb 14 12:16:45 2011 +0100
> 
>     staging: brcm80211: removal of inactive d11 code
> 
> The bcm4716 has a rev 17 wireless core and this condition is needed.
> 
Acked-by: Arend van Spriel <arend@broadcom.com>
> Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
> ---
>  drivers/net/wireless/brcm80211/brcmsmac/main.c |    6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)

Gr. AvS




^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH v2 01/18] brcmsmac: remove PCIE() macro
  2012-06-30 13:16 ` [PATCH v2 01/18] brcmsmac: remove PCIE() macro Hauke Mehrtens
@ 2012-07-03  7:07   ` Arend van Spriel
  0 siblings, 0 replies; 36+ messages in thread
From: Arend van Spriel @ 2012-07-03  7:07 UTC (permalink / raw)
  To: Hauke Mehrtens; +Cc: linville, brcm80211-dev-list, linux-wireless

On 06/30/2012 03:16 PM, Hauke Mehrtens wrote:
> Instead of checking if there is a PCIe core on the bus, better check if
> hosttype is PCIe.
> 
> In the original submission to staging PCIE() checked, if the bustype is
> PCI and the buscore is a PCIe core. Now we assume that all cores bcma
> supports are PCIe based, so we just have to check if the bustype is PCI.
> 
> The old code bcmsmac currently uses searches for a PCIe core on the bus
> and if there is one assumes that this is the buscore, which is wrong.
> Some SoCs have a PCIe core operating in host mode and this is not the
> bus core. The old code also caused a null pointer in
> ai_get_buscoretype() and ai_get_buscorerev() if buscore was not set
> because there was no PCIe core on the bus.
> 
Acked-by: Arend van Spriel <arend@broadcom.com>
> Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
> ---
>  drivers/net/wireless/brcm80211/brcmsmac/aiutils.c |    9 ++++-----
>  1 file changed, 4 insertions(+), 5 deletions(-)

Gr. AvS


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH v2 13/18] brcmsmac: add some workarounds for other chips again
  2012-06-30 13:16 ` [PATCH v2 13/18] brcmsmac: add some workarounds for other chips again Hauke Mehrtens
@ 2012-07-03  7:08   ` Arend van Spriel
  0 siblings, 0 replies; 36+ messages in thread
From: Arend van Spriel @ 2012-07-03  7:08 UTC (permalink / raw)
  To: Hauke Mehrtens; +Cc: linville, brcm80211-dev-list, linux-wireless

On 06/30/2012 03:16 PM, Hauke Mehrtens wrote:
> This adds some workarounds for the BCM4716, BCM47162, BCM5357 to the
> phy code again. This patch reverts parts of the following patch.
> 
> commit c2c724977f95135f397fe0cb45f3c041d26b91e1
> Author: Arend van Spriel <arend@broadcom.com>
> Date:   Wed Jun 29 16:46:35 2011 -0700
> 
>     staging: brcm80211: remove unsupported chipset code from brcmsmac phy
> 
> The BCM4716 is working for me with an other firmware and I am working
> on adding support for the other chips.
> 
Acked-by: Arend van Spriel <arend@broadcom.com>
> Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
> ---
>  .../net/wireless/brcm80211/brcmsmac/phy/phy_n.c    |  131 +++++++++++++-------
>  1 file changed, 89 insertions(+), 42 deletions(-)

Gr. AvS




^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH v2 14/18] brcmsmac: extend xmtfifo_sz array
  2012-06-30 13:16 ` [PATCH v2 14/18] brcmsmac: extend xmtfifo_sz array Hauke Mehrtens
  2012-07-02  0:01   ` Julian Calaby
@ 2012-07-03  7:08   ` Arend van Spriel
  1 sibling, 0 replies; 36+ messages in thread
From: Arend van Spriel @ 2012-07-03  7:08 UTC (permalink / raw)
  To: Hauke Mehrtens; +Cc: linville, brcm80211-dev-list, linux-wireless

On 06/30/2012 03:16 PM, Hauke Mehrtens wrote:
> The xmtfifo_sz array contains the queue sizes for the different core
> revs. This array missed the sizes for the core rev 17 and 28. This
> patch extends the array to also include these sizes and adds a warning
> if no queue size is stored in the array for the given core rev.
> 
Acked-by: Arend van Spriel <arend@broadcom.com>
> Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
> ---
>  drivers/net/wireless/brcm80211/brcmsmac/main.c |   24 +++++++++++++++++++++++-
>  1 file changed, 23 insertions(+), 1 deletion(-)

Gr. AvS




^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH v2 15/18] brcmsmac: fix DMA on SoCs
  2012-06-30 13:16 ` [PATCH v2 15/18] brcmsmac: fix DMA on SoCs Hauke Mehrtens
@ 2012-07-03  7:10   ` Arend van Spriel
  0 siblings, 0 replies; 36+ messages in thread
From: Arend van Spriel @ 2012-07-03  7:10 UTC (permalink / raw)
  To: Hauke Mehrtens; +Cc: linville, brcm80211-dev-list, linux-wireless

On 06/30/2012 03:16 PM, Hauke Mehrtens wrote:
> These extra offsets are only needed by PCIe devices and not when
> running on an SoC.
> 
> This partly reverts commit:
> commit 821e4e93172e4f7d5ac1eade04665c3dc5049c4a
> Author: Roland Vossen <rvossen@broadcom.com>
> Date:   Mon Aug 8 15:58:58 2011 +0200
> 
>     staging: brcm80211: removed unused bus code from softmac
> 
Acked-by: Arend van Spriel <arend@broadcom.com>
> Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
> ---
>  drivers/net/wireless/brcm80211/brcmsmac/dma.c |   11 ++++++++---
>  1 file changed, 8 insertions(+), 3 deletions(-)

Gr. AvS




^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH v2 16/18] brcmsmac: extend brcms_c_chipmatch() to also handle non PCIe devices
  2012-06-30 13:16 ` [PATCH v2 16/18] brcmsmac: extend brcms_c_chipmatch() to also handle non PCIe devices Hauke Mehrtens
@ 2012-07-03  7:11   ` Arend van Spriel
  0 siblings, 0 replies; 36+ messages in thread
From: Arend van Spriel @ 2012-07-03  7:11 UTC (permalink / raw)
  To: Hauke Mehrtens; +Cc: linville, brcm80211-dev-list, linux-wireless

On 06/30/2012 03:16 PM, Hauke Mehrtens wrote:
> Now brcms_c_chipmatch() is also able to handle non PCI devices and also
> does some checking for SoC if they are supported by brcmsmac.
> 
Acked-by: Arend van Spriel <arend@broadcom.com>
> Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
> ---
>  .../net/wireless/brcm80211/brcmsmac/mac80211_if.c  |    3 +-
>  drivers/net/wireless/brcm80211/brcmsmac/main.c     |   38 ++++++++++++++++----
>  drivers/net/wireless/brcm80211/brcmsmac/pub.h      |    2 +-
>  3 files changed, 34 insertions(+), 9 deletions(-)

Gr. AvS




^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH v2 18/18] brcmsmac: handle non PCI devices in the phy code
  2012-06-30 13:16 ` [PATCH v2 18/18] brcmsmac: handle non PCI devices in the phy code Hauke Mehrtens
@ 2012-07-03  7:11   ` Arend van Spriel
  0 siblings, 0 replies; 36+ messages in thread
From: Arend van Spriel @ 2012-07-03  7:11 UTC (permalink / raw)
  To: Hauke Mehrtens; +Cc: linville, brcm80211-dev-list, linux-wireless

On 06/30/2012 03:16 PM, Hauke Mehrtens wrote:
> Some code in write_{radio,radio}_reg() should just be run if this is a
> pci based device. Add the condition again which was removed in commit:
> commit 821e4e93172e4f7d5ac1eade04665c3dc5049c4a
> Author: Roland Vossen <rvossen@broadcom.com>
> Date:   Mon Aug 8 15:58:58 2011 +0200
> 
>     staging: brcm80211: removed unused bus code from softmac
> 
Acked-by: Arend van Spriel <arend@broadcom.com>
> Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
> ---
>  .../net/wireless/brcm80211/brcmsmac/phy/phy_cmn.c  |   10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)

Gr. AvS




^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH v2 00/18] brcmsmac: update to get SoCs working
  2012-06-30 13:16 [PATCH v2 00/18] brcmsmac: update to get SoCs working Hauke Mehrtens
                   ` (18 preceding siblings ...)
  2012-07-02  0:04 ` [PATCH v2 00/18] brcmsmac: update to get SoCs working Julian Calaby
@ 2012-07-03  7:13 ` Arend van Spriel
  2012-07-06 18:35   ` John W. Linville
  19 siblings, 1 reply; 36+ messages in thread
From: Arend van Spriel @ 2012-07-03  7:13 UTC (permalink / raw)
  To: Hauke Mehrtens; +Cc: linville, brcm80211-dev-list, linux-wireless

On 06/30/2012 03:16 PM, Hauke Mehrtens wrote:
> This series contains some patches needed to get brcmsmac working on 
> SoCs like the BCM4718.
> The last part which adds core rev 17 (used in the BCM4718) to the list 
> of supported cores is missing, because we do not have a firmware 
> supporting this core yet, but I extended the b43 fwcutter to generate 
> a firmware which brcmsmac accepts. With this firmware my BCM4718 
> works. I would appreciate an official firmware release from Broadcom 
> adding support for this core.
> The final patch adding support for the BCM43224 is missing because 
> the PCIe host controller on the BCM4718 still causes problems and I 
> have to add some more read after writes into the code, for now it uses 
> an ugly hack and sometimes the problems still occur.
> 
> The wifi is not stable on the BCM4718, I had no problems connecting to 
> my ath9k driven access point but I have problems connecting to my 
> BCM47186 based AP running the vendor firmware with the Broadcom 
> proprietary driver.
> I get 12MBit/s max with the BCM4718 connected to ath9k on the 2.4 GHz 
> band and 35 MBit/s max with the BCM43224 on the 5Ghz band connected to 
> a Broadcom based AP running the proprietary driver. This seams to be 
> CPU bounced as I have over 50% sirq in both cases.
> 
> brcmsmac starts on the BCM47186 (id: 0x5357), but it does not tx or rx 
> any traffic.
> 
> One patch extends the xmtfifo_sz array for more core revs, I just toke 
> the values from the other phy-n cores and hope this is correct.
> 
> These patches are depending on: "[PATCH v2 0/9] bcma misc updates" and 
> based on wireless-testing.
> 
> I will send a patch for bcma which converts the warning message when it 
> found a PCI and not a PCIe card into a WARN.
> 
> v2:
>   - when something depends on a patch for bcma, which is not in 
>     wireless-testing yet, I add that to the commit comment.
>   - removed changes for BCM43421 and BCM6362 as I do not have a device
>     to test this.
>   - xmtfifo_sz now starts at core rev 17 and contains the correct values 
>     for core rev 28
>   - make brcms_c_chipmatch() also work for SoCs
>   - typos and format changes
> 

I have acked all patches, but would like to do some sanity testing today.

Gr. AvS




^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH v2 00/18] brcmsmac: update to get SoCs working
  2012-07-03  7:13 ` Arend van Spriel
@ 2012-07-06 18:35   ` John W. Linville
  2012-07-08 19:10     ` Arend van Spriel
  0 siblings, 1 reply; 36+ messages in thread
From: John W. Linville @ 2012-07-06 18:35 UTC (permalink / raw)
  To: Arend van Spriel; +Cc: Hauke Mehrtens, brcm80211-dev-list, linux-wireless

On Tue, Jul 03, 2012 at 09:13:13AM +0200, Arend van Spriel wrote:
> On 06/30/2012 03:16 PM, Hauke Mehrtens wrote:
> > This series contains some patches needed to get brcmsmac working on 
> > SoCs like the BCM4718.
> > The last part which adds core rev 17 (used in the BCM4718) to the list 
> > of supported cores is missing, because we do not have a firmware 
> > supporting this core yet, but I extended the b43 fwcutter to generate 
> > a firmware which brcmsmac accepts. With this firmware my BCM4718 
> > works. I would appreciate an official firmware release from Broadcom 
> > adding support for this core.
> > The final patch adding support for the BCM43224 is missing because 
> > the PCIe host controller on the BCM4718 still causes problems and I 
> > have to add some more read after writes into the code, for now it uses 
> > an ugly hack and sometimes the problems still occur.
> > 
> > The wifi is not stable on the BCM4718, I had no problems connecting to 
> > my ath9k driven access point but I have problems connecting to my 
> > BCM47186 based AP running the vendor firmware with the Broadcom 
> > proprietary driver.
> > I get 12MBit/s max with the BCM4718 connected to ath9k on the 2.4 GHz 
> > band and 35 MBit/s max with the BCM43224 on the 5Ghz band connected to 
> > a Broadcom based AP running the proprietary driver. This seams to be 
> > CPU bounced as I have over 50% sirq in both cases.
> > 
> > brcmsmac starts on the BCM47186 (id: 0x5357), but it does not tx or rx 
> > any traffic.
> > 
> > One patch extends the xmtfifo_sz array for more core revs, I just toke 
> > the values from the other phy-n cores and hope this is correct.
> > 
> > These patches are depending on: "[PATCH v2 0/9] bcma misc updates" and 
> > based on wireless-testing.
> > 
> > I will send a patch for bcma which converts the warning message when it 
> > found a PCI and not a PCIe card into a WARN.
> > 
> > v2:
> >   - when something depends on a patch for bcma, which is not in 
> >     wireless-testing yet, I add that to the commit comment.
> >   - removed changes for BCM43421 and BCM6362 as I do not have a device
> >     to test this.
> >   - xmtfifo_sz now starts at core rev 17 and contains the correct values 
> >     for core rev 28
> >   - make brcms_c_chipmatch() also work for SoCs
> >   - typos and format changes
> > 
> 
> I have acked all patches, but would like to do some sanity testing today.

Have you had a chance to do this testing?  Are you OK with this series?

John
-- 
John W. Linville		Someday the world will need a hero, and you
linville@tuxdriver.com			might be all we have.  Be ready.

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH v2 00/18] brcmsmac: update to get SoCs working
  2012-07-06 18:35   ` John W. Linville
@ 2012-07-08 19:10     ` Arend van Spriel
  0 siblings, 0 replies; 36+ messages in thread
From: Arend van Spriel @ 2012-07-08 19:10 UTC (permalink / raw)
  To: John W. Linville; +Cc: Hauke Mehrtens, brcm80211-dev-list, linux-wireless

On 07/06/2012 08:35 PM, John W. Linville wrote:
> On Tue, Jul 03, 2012 at 09:13:13AM +0200, Arend van Spriel wrote:
>> On 06/30/2012 03:16 PM, Hauke Mehrtens wrote:
>>> This series contains some patches needed to get brcmsmac working on 
>>> SoCs like the BCM4718.
>>> The last part which adds core rev 17 (used in the BCM4718) to the list 
>>> of supported cores is missing, because we do not have a firmware 
>>> supporting this core yet, but I extended the b43 fwcutter to generate 
>>> a firmware which brcmsmac accepts. With this firmware my BCM4718 
>>> works. I would appreciate an official firmware release from Broadcom 
>>> adding support for this core.
>>> The final patch adding support for the BCM43224 is missing because 
>>> the PCIe host controller on the BCM4718 still causes problems and I 
>>> have to add some more read after writes into the code, for now it uses 
>>> an ugly hack and sometimes the problems still occur.
>>>
>>> The wifi is not stable on the BCM4718, I had no problems connecting to 
>>> my ath9k driven access point but I have problems connecting to my 
>>> BCM47186 based AP running the vendor firmware with the Broadcom 
>>> proprietary driver.
>>> I get 12MBit/s max with the BCM4718 connected to ath9k on the 2.4 GHz 
>>> band and 35 MBit/s max with the BCM43224 on the 5Ghz band connected to 
>>> a Broadcom based AP running the proprietary driver. This seams to be 
>>> CPU bounced as I have over 50% sirq in both cases.
>>>
>>> brcmsmac starts on the BCM47186 (id: 0x5357), but it does not tx or rx 
>>> any traffic.
>>>
>>> One patch extends the xmtfifo_sz array for more core revs, I just toke 
>>> the values from the other phy-n cores and hope this is correct.
>>>
>>> These patches are depending on: "[PATCH v2 0/9] bcma misc updates" and 
>>> based on wireless-testing.
>>>
>>> I will send a patch for bcma which converts the warning message when it 
>>> found a PCI and not a PCIe card into a WARN.
>>>
>>> v2:
>>>   - when something depends on a patch for bcma, which is not in 
>>>     wireless-testing yet, I add that to the commit comment.
>>>   - removed changes for BCM43421 and BCM6362 as I do not have a device
>>>     to test this.
>>>   - xmtfifo_sz now starts at core rev 17 and contains the correct values 
>>>     for core rev 28
>>>   - make brcms_c_chipmatch() also work for SoCs
>>>   - typos and format changes
>>>
>>
>> I have acked all patches, but would like to do some sanity testing today.
> 
> Have you had a chance to do this testing?  Are you OK with this series?
> 
> John
> 

Yes, I am. Sorry for not getting back on that earlier.

Gr. AvS



^ permalink raw reply	[flat|nested] 36+ messages in thread

end of thread, other threads:[~2012-07-08 19:10 UTC | newest]

Thread overview: 36+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-06-30 13:16 [PATCH v2 00/18] brcmsmac: update to get SoCs working Hauke Mehrtens
2012-06-30 13:16 ` [PATCH v2 01/18] brcmsmac: remove PCIE() macro Hauke Mehrtens
2012-07-03  7:07   ` Arend van Spriel
2012-06-30 13:16 ` [PATCH v2 02/18] brcmsmac: remove PCI_FORCEHT() macro Hauke Mehrtens
2012-06-30 13:16 ` [PATCH v2 03/18] brcmsmac: remove ai_get_buscore{type,rev}() Hauke Mehrtens
2012-06-30 13:16 ` [PATCH v2 04/18] brcmsmac: use container_of instead of cast Hauke Mehrtens
2012-06-30 13:16 ` [PATCH v2 05/18] brcmsmac: remove ai_findcore() Hauke Mehrtens
2012-06-30 13:16 ` [PATCH v2 06/18] brcmsmac: remove si_pmu_init() and si_pmu_res_init() Hauke Mehrtens
2012-06-30 13:16 ` [PATCH v2 07/18] brcmsmac: remove si_pmu_spuravoid_pllupdate() Hauke Mehrtens
2012-06-30 13:16 ` [PATCH v2 08/18] brcmsmac: remove some redundant chip common workarounds Hauke Mehrtens
2012-06-30 13:16 ` [PATCH v2 09/18] brcmsmac: use core id constants from bcma Hauke Mehrtens
2012-06-30 13:16 ` [PATCH v2 10/18] brcmsmac: use chip and package " Hauke Mehrtens
2012-06-30 13:16 ` [PATCH v2 11/18] brcmsmac: remove some unnessessacry casts and void pointer Hauke Mehrtens
2012-07-01 23:59   ` Julian Calaby
2012-07-02  7:54     ` Dominique Martinet
2012-07-02 17:44       ` Hauke Mehrtens
2012-07-02 23:01         ` Julian Calaby
2012-06-30 13:16 ` [PATCH v2 12/18] brcmsmac: add a conditions for core rev 17 again Hauke Mehrtens
2012-07-03  7:06   ` Arend van Spriel
2012-06-30 13:16 ` [PATCH v2 13/18] brcmsmac: add some workarounds for other chips again Hauke Mehrtens
2012-07-03  7:08   ` Arend van Spriel
2012-06-30 13:16 ` [PATCH v2 14/18] brcmsmac: extend xmtfifo_sz array Hauke Mehrtens
2012-07-02  0:01   ` Julian Calaby
2012-07-02 18:15     ` [PATCH v3 " Hauke Mehrtens
2012-07-03  7:08   ` [PATCH v2 " Arend van Spriel
2012-06-30 13:16 ` [PATCH v2 15/18] brcmsmac: fix DMA on SoCs Hauke Mehrtens
2012-07-03  7:10   ` Arend van Spriel
2012-06-30 13:16 ` [PATCH v2 16/18] brcmsmac: extend brcms_c_chipmatch() to also handle non PCIe devices Hauke Mehrtens
2012-07-03  7:11   ` Arend van Spriel
2012-06-30 13:16 ` [PATCH v2 17/18] brcmsmac: fix read in write_phy_reg Hauke Mehrtens
2012-06-30 13:16 ` [PATCH v2 18/18] brcmsmac: handle non PCI devices in the phy code Hauke Mehrtens
2012-07-03  7:11   ` Arend van Spriel
2012-07-02  0:04 ` [PATCH v2 00/18] brcmsmac: update to get SoCs working Julian Calaby
2012-07-03  7:13 ` Arend van Spriel
2012-07-06 18:35   ` John W. Linville
2012-07-08 19:10     ` Arend van Spriel

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.