lkml.org 
[lkml]   [2021]   [Jul]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.13 156/189] rtw88: add quirks to disable pci capabilities
    Date
    From: Ping-Ke Shih <pkshih@realtek.com>

    [ Upstream commit 956c6d4f20c5446727e0c912dd8f527f2dc7b779 ]

    8821CE with ASPM cannot work properly on Protempo Ltd L116HTN6SPW. Add a
    quirk to disable the cap.

    The reporter describes the symptom is that this module (driver) causes
    frequent freezes, randomly but usually within a few minutes of running
    (thus very soon after boot): screen display remains frozen, no response
    to either keyboard or mouse input. All I can do is to hold the power
    button to power off, then reboot.

    Reported-by: Paul Szabo <psz2036@gmail.com>
    Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    Link: https://lore.kernel.org/r/20210607012254.6306-1-pkshih@realtek.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/wireless/realtek/rtw88/pci.c | 32 ++++++++++++++++++++++++
    1 file changed, 32 insertions(+)

    diff --git a/drivers/net/wireless/realtek/rtw88/pci.c b/drivers/net/wireless/realtek/rtw88/pci.c
    index f59a4c462e3b..e7d17ab8f113 100644
    --- a/drivers/net/wireless/realtek/rtw88/pci.c
    +++ b/drivers/net/wireless/realtek/rtw88/pci.c
    @@ -2,6 +2,7 @@
    /* Copyright(c) 2018-2019 Realtek Corporation
    */

    +#include <linux/dmi.h>
    #include <linux/module.h>
    #include <linux/pci.h>
    #include "main.h"
    @@ -1673,6 +1674,36 @@ static void rtw_pci_napi_deinit(struct rtw_dev *rtwdev)
    netif_napi_del(&rtwpci->napi);
    }

    +enum rtw88_quirk_dis_pci_caps {
    + QUIRK_DIS_PCI_CAP_MSI,
    + QUIRK_DIS_PCI_CAP_ASPM,
    +};
    +
    +static int disable_pci_caps(const struct dmi_system_id *dmi)
    +{
    + uintptr_t dis_caps = (uintptr_t)dmi->driver_data;
    +
    + if (dis_caps & BIT(QUIRK_DIS_PCI_CAP_MSI))
    + rtw_disable_msi = true;
    + if (dis_caps & BIT(QUIRK_DIS_PCI_CAP_ASPM))
    + rtw_pci_disable_aspm = true;
    +
    + return 1;
    +}
    +
    +static const struct dmi_system_id rtw88_pci_quirks[] = {
    + {
    + .callback = disable_pci_caps,
    + .ident = "Protempo Ltd L116HTN6SPW",
    + .matches = {
    + DMI_MATCH(DMI_SYS_VENDOR, "Protempo Ltd"),
    + DMI_MATCH(DMI_PRODUCT_NAME, "L116HTN6SPW"),
    + },
    + .driver_data = (void *)BIT(QUIRK_DIS_PCI_CAP_ASPM),
    + },
    + {}
    +};
    +
    int rtw_pci_probe(struct pci_dev *pdev,
    const struct pci_device_id *id)
    {
    @@ -1723,6 +1754,7 @@ int rtw_pci_probe(struct pci_dev *pdev,
    goto err_destroy_pci;
    }

    + dmi_check_system(rtw88_pci_quirks);
    rtw_pci_phy_cfg(rtwdev);

    ret = rtw_register_hw(rtwdev, hw);
    --
    2.30.2
    \
     
     \ /
      Last update: 2021-07-06 13:27    [W:2.978 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site