lkml.org 
[lkml]   [2019]   [Dec]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 169/434] rtl8xxxu: fix RTL8723BU connection failure issue after warm reboot
    Date
    From: Chris Chiu <chiu@endlessm.com>

    [ Upstream commit 0eeb91ade90ce06d2fa1e2fcb55e3316b64c203c ]

    The RTL8723BU has problems connecting to AP after each warm reboot.
    Sometimes it returns no scan result, and in most cases, it fails
    the authentication for unknown reason. However, it works totally
    fine after cold reboot.

    Compare the value of register SYS_CR and SYS_CLK_MAC_CLK_ENABLE
    for cold reboot and warm reboot, the registers imply that the MAC
    is already powered and thus some procedures are skipped during
    driver initialization. Double checked the vendor driver, it reads
    the SYS_CR and SYS_CLK_MAC_CLK_ENABLE also but doesn't skip any
    during initialization based on them. This commit only tells the
    RTL8723BU to do full initialization without checking MAC status.

    Signed-off-by: Chris Chiu <chiu@endlessm.com>
    Signed-off-by: Jes Sorensen <Jes.Sorensen@gmail.com>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h | 1 +
    drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8723b.c | 1 +
    drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 3 +++
    3 files changed, 5 insertions(+)

    diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
    index ade057d868f7..5e9ce03067de 100644
    --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
    +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
    @@ -1341,6 +1341,7 @@ struct rtl8xxxu_fileops {
    u8 has_s0s1:1;
    u8 has_tx_report:1;
    u8 gen2_thermal_meter:1;
    + u8 needs_full_init:1;
    u32 adda_1t_init;
    u32 adda_1t_path_on;
    u32 adda_2t_path_on_a;
    diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8723b.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8723b.c
    index ceffe05bd65b..f3cd314d1a9c 100644
    --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8723b.c
    +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8723b.c
    @@ -1670,6 +1670,7 @@ struct rtl8xxxu_fileops rtl8723bu_fops = {
    .has_s0s1 = 1,
    .has_tx_report = 1,
    .gen2_thermal_meter = 1,
    + .needs_full_init = 1,
    .adda_1t_init = 0x01c00014,
    .adda_1t_path_on = 0x01c00014,
    .adda_2t_path_on_a = 0x01c00014,
    diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
    index c6c41fb962ff..361248e97568 100644
    --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
    +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
    @@ -3902,6 +3902,9 @@ static int rtl8xxxu_init_device(struct ieee80211_hw *hw)
    else
    macpower = true;

    + if (fops->needs_full_init)
    + macpower = false;
    +
    ret = fops->power_on(priv);
    if (ret < 0) {
    dev_warn(dev, "%s: Failed power on\n", __func__);
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-12-29 18:48    [W:2.751 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site