This is a note to let you know that I've just added the patch titled brcmfmac: Fix brcmf_chip_ai_coredisable not applying reset to the 3.14-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: brcmfmac-fix-brcmf_chip_ai_coredisable-not-applying-reset.patch and it can be found in the queue-3.14 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From ffa216bb5eecfce0f01b0b2a95d5c320dde90005 Mon Sep 17 00:00:00 2001 From: Hans de Goede <hdegoede@xxxxxxxxxx> Date: Wed, 23 Apr 2014 12:20:55 +0200 Subject: brcmfmac: Fix brcmf_chip_ai_coredisable not applying reset bits to BCMA_IOCTL From: Hans de Goede <hdegoede@xxxxxxxxxx> commit ffa216bb5eecfce0f01b0b2a95d5c320dde90005 upstream. 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@xxxxxxxxxxxxxxx # v3.14 Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx> Acked-by: Arend van Spriel <arend@xxxxxxxxxxxx> Signed-off-by: John W. Linville <linville@xxxxxxxxxxxxx> [arend@xxxxxxxxxxxx: rebase patch on linux-3.14.y branch] Signed-off-by: Arend van Spriel <arend@xxxxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) --- 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_s 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_s 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); Patches currently in stable-queue which might be from hdegoede@xxxxxxxxxx are queue-3.14/brcmfmac-fix-brcmf_chip_ai_coredisable-not-applying-reset.patch -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html