All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] brcmfmac: Fix brcmf_chip_ai_coredisable not applying reset bits to BCMA_IOCTL
@ 2014-06-06 21:54 Arend van Spriel
  2014-07-04 22:05 ` Greg KH
  0 siblings, 1 reply; 4+ messages in thread
From: Arend van Spriel @ 2014-06-06 21:54 UTC (permalink / raw)
  To: stable; +Cc: linux-wireless, Hans de Goede, John W. Linville, Arend van Spriel

From: Hans de Goede <hdegoede@redhat.com>

brcmfmac has been broken on my cubietruck with a BCM43362:

brcmfmac: brcmf_chip_recognition: found AXI chip: BCM43362, rev=1
brcmfmac: brcmf_c_preinit_dcmds: Firmware version = wl0:
        Apr 22 2013 14:50:00 version 5.90.195.89.6 FWID 01-b30a427d

since commit 53036261033: "brcmfmac: update core reset and disable routines".

The problem is that since this commit brcmf_chip_ai_resetcore no longer sets
BCMA_IOCTL itself before bringing the core out of reset, instead relying on
brcmf_chip_ai_coredisable to do so. But brcmf_chip_ai_coredisable is a nop
of the chip is already in reset. This patch modifies brcmf_chip_ai_coredisable
to always set BCMA_IOCTL even if the core is already in reset.

This fixes brcmfmac hanging in firmware loading on my board.

upstream: 75691d9e4f4e156f71f3eaee69a5bd27b7b10384

Cc: stable@vger.kernel.org # v3.14
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
[arend@broadcom.com: rebase patch on linux-3.14.y branch]
Signed-off-by: Arend van Spriel <arend@broadcom.com>
---
 drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c b/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c
index 82bf3c5..2de2736 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c
@@ -300,10 +300,10 @@ brcmf_sdio_ai_coredisable(struct brcmf_sdio_dev *sdiodev,
 
 	wrapbase = ci->c_inf[idx].wrapbase;
 
-	/* if core is already in reset, just return */
+	/* if core is already in reset, skip reset */
 	regdata = brcmf_sdiod_regrl(sdiodev, wrapbase + BCMA_RESET_CTL, NULL);
 	if ((regdata & BCMA_RESET_CTL_RESET) != 0)
-		return;
+		goto post_reset_config;
 
 	/* configure reset */
 	brcmf_sdiod_regwl(sdiodev, wrapbase + BCMA_IOCTL, pre_resetbits |
@@ -319,6 +319,7 @@ brcmf_sdio_ai_coredisable(struct brcmf_sdio_dev *sdiodev,
 	SPINWAIT(brcmf_sdiod_regrl(sdiodev, wrapbase + BCMA_RESET_CTL, NULL) !=
 		 BCMA_RESET_CTL_RESET, 300);
 
+post_reset_config:
 	/* post reset configure */
 	brcmf_sdiod_regwl(sdiodev, wrapbase + BCMA_IOCTL, pre_resetbits |
 			  BCMA_IOCTL_FGC | BCMA_IOCTL_CLK, NULL);
-- 
1.9.1


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

* Re: [PATCH] brcmfmac: Fix brcmf_chip_ai_coredisable not applying reset bits to BCMA_IOCTL
  2014-06-06 21:54 [PATCH] brcmfmac: Fix brcmf_chip_ai_coredisable not applying reset bits to BCMA_IOCTL Arend van Spriel
@ 2014-07-04 22:05 ` Greg KH
  2014-07-05  8:33   ` Arend van Spriel
  0 siblings, 1 reply; 4+ messages in thread
From: Greg KH @ 2014-07-04 22:05 UTC (permalink / raw)
  To: Arend van Spriel; +Cc: stable, linux-wireless, Hans de Goede, John W. Linville

On Fri, Jun 06, 2014 at 11:54:31PM +0200, Arend van Spriel wrote:
> From: Hans de Goede <hdegoede@redhat.com>
> 
> brcmfmac has been broken on my cubietruck with a BCM43362:
> 
> brcmfmac: brcmf_chip_recognition: found AXI chip: BCM43362, rev=1
> brcmfmac: brcmf_c_preinit_dcmds: Firmware version = wl0:
>         Apr 22 2013 14:50:00 version 5.90.195.89.6 FWID 01-b30a427d
> 
> since commit 53036261033: "brcmfmac: update core reset and disable routines".
> 
> The problem is that since this commit brcmf_chip_ai_resetcore no longer sets
> BCMA_IOCTL itself before bringing the core out of reset, instead relying on
> brcmf_chip_ai_coredisable to do so. But brcmf_chip_ai_coredisable is a nop
> of the chip is already in reset. This patch modifies brcmf_chip_ai_coredisable
> to always set BCMA_IOCTL even if the core is already in reset.
> 
> This fixes brcmfmac hanging in firmware loading on my board.
> 
> upstream: 75691d9e4f4e156f71f3eaee69a5bd27b7b10384

I see no such commit id in Linus's tree, are you sure this is the id you
need?

thanks,

greg k-h

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

* Re: [PATCH] brcmfmac: Fix brcmf_chip_ai_coredisable not applying reset bits to BCMA_IOCTL
  2014-07-04 22:05 ` Greg KH
@ 2014-07-05  8:33   ` Arend van Spriel
  0 siblings, 0 replies; 4+ messages in thread
From: Arend van Spriel @ 2014-07-05  8:33 UTC (permalink / raw)
  To: Greg KH; +Cc: stable, linux-wireless, Hans de Goede, John W. Linville

On 07/05/14 00:05, Greg KH wrote:
> On Fri, Jun 06, 2014 at 11:54:31PM +0200, Arend van Spriel wrote:
>> From: Hans de Goede<hdegoede@redhat.com>
>>
>> brcmfmac has been broken on my cubietruck with a BCM43362:
>>
>> brcmfmac: brcmf_chip_recognition: found AXI chip: BCM43362, rev=1
>> brcmfmac: brcmf_c_preinit_dcmds: Firmware version = wl0:
>>          Apr 22 2013 14:50:00 version 5.90.195.89.6 FWID 01-b30a427d
>>
>> since commit 53036261033: "brcmfmac: update core reset and disable routines".
>>
>> The problem is that since this commit brcmf_chip_ai_resetcore no longer sets
>> BCMA_IOCTL itself before bringing the core out of reset, instead relying on
>> brcmf_chip_ai_coredisable to do so. But brcmf_chip_ai_coredisable is a nop
>> of the chip is already in reset. This patch modifies brcmf_chip_ai_coredisable
>> to always set BCMA_IOCTL even if the core is already in reset.
>>
>> This fixes brcmfmac hanging in firmware loading on my board.
>>
>> upstream: 75691d9e4f4e156f71f3eaee69a5bd27b7b10384

Hi Greg,

I guess I did not swim far enough upstream ;-) Below the commit id as 
found in Linus's tree:

commit ffa216bb5eecfce0f01b0b2a95d5c320dde90005
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Wed Apr 23 12:20:55 2014 +0200

     brcmfmac: Fix brcmf_chip_ai_coredisable not applying reset bits to 
BCMA_IOCT

Thanks for checking.

Regards,
Arend

> I see no such commit id in Linus's tree, are you sure this is the id you
> need?
>
> thanks,
>
> greg k-h


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

* [PATCH] brcmfmac: Fix brcmf_chip_ai_coredisable not applying reset bits to BCMA_IOCTL
@ 2014-04-23 10:20 Hans de Goede
  0 siblings, 0 replies; 4+ messages in thread
From: Hans de Goede @ 2014-04-23 10:20 UTC (permalink / raw)
  To: John W. Linville
  Cc: Arend van Spriel, Chen-Yu Tsai, linux-wireless, linux-sunxi,
	Hans de Goede, stable

brcmfmac has been broken on my cubietruck with a BCM43362:

brcmfmac: brcmf_chip_recognition: found AXI chip: BCM43362, rev=1
brcmfmac: brcmf_c_preinit_dcmds: Firmware version = wl0:
        Apr 22 2013 14:50:00 version 5.90.195.89.6 FWID 01-b30a427d

since commit 53036261033: "brcmfmac: update core reset and disable routines".

The problem is that since this commit brcmf_chip_ai_resetcore no longer sets
BCMA_IOCTL itself before bringing the core out of reset, instead relying on
brcmf_chip_ai_coredisable to do so. But brcmf_chip_ai_coredisable is a nop
of the chip is already in reset. This patch modifies brcmf_chip_ai_coredisable
to always set BCMA_IOCTL even if the core is already in reset.

This fixes brcmfmac hanging in firmware loading on my board.

Cc: stable@vger.kernel.org # v3.14
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Arend van Spriel <arend@broadcom.com>
---
 drivers/net/wireless/brcm80211/brcmfmac/chip.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/brcm80211/brcmfmac/chip.c b/drivers/net/wireless/brcm80211/brcmfmac/chip.c
index df130ef..c7c9f15 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/chip.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/chip.c
@@ -303,10 +303,10 @@ static void brcmf_chip_ai_coredisable(struct brcmf_core_priv *core,
 
 	ci = core->chip;
 
-	/* if core is already in reset, just return */
+	/* if core is already in reset, skip reset */
 	regdata = ci->ops->read32(ci->ctx, core->wrapbase + BCMA_RESET_CTL);
 	if ((regdata & BCMA_RESET_CTL_RESET) != 0)
-		return;
+		goto in_reset_configure;
 
 	/* configure reset */
 	ci->ops->write32(ci->ctx, core->wrapbase + BCMA_IOCTL,
@@ -322,6 +322,7 @@ static void brcmf_chip_ai_coredisable(struct brcmf_core_priv *core,
 	SPINWAIT(ci->ops->read32(ci->ctx, core->wrapbase + BCMA_RESET_CTL) !=
 		 BCMA_RESET_CTL_RESET, 300);
 
+in_reset_configure:
 	/* in-reset configure */
 	ci->ops->write32(ci->ctx, core->wrapbase + BCMA_IOCTL,
 			 reset | BCMA_IOCTL_FGC | BCMA_IOCTL_CLK);
-- 
1.9.0


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

end of thread, other threads:[~2014-07-05  8:33 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-06-06 21:54 [PATCH] brcmfmac: Fix brcmf_chip_ai_coredisable not applying reset bits to BCMA_IOCTL Arend van Spriel
2014-07-04 22:05 ` Greg KH
2014-07-05  8:33   ` Arend van Spriel
  -- strict thread matches above, loose matches on Subject: below --
2014-04-23 10:20 Hans de Goede

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.