lkml.org 
[lkml]   [2020]   [Jan]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 040/171] 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 08d587a342d3..9143b173935d 100644
    --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
    +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
    @@ -1348,6 +1348,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 02b8ddd98a95..f51ee88d692b 100644
    --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8723b.c
    +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8723b.c
    @@ -1673,6 +1673,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 e78545d4add3..6d34d442294a 100644
    --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
    +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
    @@ -3905,6 +3905,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: 2020-01-02 23:49    [W:2.152 / U:0.084 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site