Patch "wlcore/wl12xx: Fix wl12xx get_mac error if device is in ELP" has been added to the 5.4-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    wlcore/wl12xx: Fix wl12xx get_mac error if device is in ELP

to the 5.4-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:
     wlcore-wl12xx-fix-wl12xx-get_mac-error-if-device-is-.patch
and it can be found in the queue-5.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit ff15d2bad8815a40906e1929d05179cf64183007
Author: Tony Lindgren <tony@xxxxxxxxxxx>
Date:   Thu Jun 3 09:28:14 2021 +0300

    wlcore/wl12xx: Fix wl12xx get_mac error if device is in ELP
    
    [ Upstream commit 11ef6bc846dcdce838f0b00c5f6a562c57e5d43b ]
    
    At least on wl12xx, reading the MAC after boot can fail with a warning
    at drivers/net/wireless/ti/wlcore/sdio.c:78 wl12xx_sdio_raw_read.
    The failed call comes from wl12xx_get_mac() that wlcore_nvs_cb() calls
    after request_firmware_work_func().
    
    After the error, no wireless interface is created. Reloading the wl12xx
    module makes the interface work.
    
    Turns out the wlan controller can be in a low-power ELP state after the
    boot from the bootloader or kexec, and needs to be woken up first.
    
    Let's wake the hardware and add a sleep after that similar to
    wl12xx_pre_boot() is already doing.
    
    Note that a similar issue could exist for wl18xx, but I have not seen it
    so far. And a search for wl18xx_get_mac and wl12xx_sdio_raw_read did not
    produce similar errors.
    
    Cc: Carl Philipp Klemm <philipp@xxxxxxxx>
    Signed-off-by: Tony Lindgren <tony@xxxxxxxxxxx>
    Signed-off-by: Kalle Valo <kvalo@xxxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20210603062814.19464-1-tony@xxxxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/wireless/ti/wl12xx/main.c b/drivers/net/wireless/ti/wl12xx/main.c
index 9d7dbfe7fe0c..c6da0cfb4afb 100644
--- a/drivers/net/wireless/ti/wl12xx/main.c
+++ b/drivers/net/wireless/ti/wl12xx/main.c
@@ -1503,6 +1503,13 @@ static int wl12xx_get_fuse_mac(struct wl1271 *wl)
 	u32 mac1, mac2;
 	int ret;
 
+	/* Device may be in ELP from the bootloader or kexec */
+	ret = wlcore_write32(wl, WL12XX_WELP_ARM_COMMAND, WELP_ARM_COMMAND_VAL);
+	if (ret < 0)
+		goto out;
+
+	usleep_range(500000, 700000);
+
 	ret = wlcore_set_partition(wl, &wl->ptable[PART_DRPW]);
 	if (ret < 0)
 		goto out;



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux