* [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.