From 914e88ee4e6f2c08ad37b4fb74b67cd5a94cbe9b Mon Sep 17 00:00:00 2001 From: Paul Zhang Date: Thu, 29 Apr 2021 15:55:10 +0800 Subject: [PATCH] cnss: clean interface per PCI driver update PCI RC driver is removing EP shadow support to restore EP's config space. So update cnss driver accordingly. Change-Id: I562de4b338dcf2204d73b9d5fafebf9e597c7b42 Signed-off-by: Paul Zhang --- drivers/net/wireless/cnss/cnss_pci.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/drivers/net/wireless/cnss/cnss_pci.c b/drivers/net/wireless/cnss/cnss_pci.c index bef8ef6ee5b0..16e290819962 100644 --- a/drivers/net/wireless/cnss/cnss_pci.c +++ b/drivers/net/wireless/cnss/cnss_pci.c @@ -79,9 +79,9 @@ #define WLAN_BOOTSTRAP_GPIO_NAME "wlan-bootstrap-gpio" #define PM_OPTIONS 0 #define PM_OPTIONS_SUSPEND_LINK_DOWN \ - (MSM_PCIE_CONFIG_NO_CFG_RESTORE | MSM_PCIE_CONFIG_LINKDOWN) + (PM_OPTIONS | MSM_PCIE_CONFIG_LINKDOWN) #define PM_OPTIONS_RESUME_LINK_DOWN \ - (MSM_PCIE_CONFIG_NO_CFG_RESTORE) + (PM_OPTIONS) #define SOC_SWREG_VOLT_MAX 1200000 #define SOC_SWREG_VOLT_MIN 1200000 @@ -231,6 +231,7 @@ static struct cnss_data { bool pci_register_again; bool notify_modem_status; struct pci_saved_state *saved_state; + struct pci_saved_state *default_state; u16 revision_id; bool recovery_in_progress; atomic_t fw_available; @@ -1518,7 +1519,7 @@ int cnss_pci_load_and_free_saved_state(struct pci_dev *dev, int cnss_msm_pcie_shadow_control(struct pci_dev *dev, bool enable) { - return msm_pcie_shadow_control(dev, enable); + return 0; } int cnss_msm_pcie_deregister_event(struct msm_pcie_register_event *reg) @@ -1528,7 +1529,12 @@ int cnss_msm_pcie_deregister_event(struct msm_pcie_register_event *reg) int cnss_msm_pcie_recover_config(struct pci_dev *dev) { - return msm_pcie_recover_config(dev); + if (penv->saved_state) + cnss_pci_load_and_free_saved_state(dev, &penv->saved_state); + else + pci_load_saved_state(dev, penv->default_state); + + pci_restore_state(dev); } int cnss_msm_pcie_register_event(struct msm_pcie_register_event *reg) @@ -1661,6 +1667,8 @@ static int cnss_wlan_pci_probe(struct pci_dev *pdev, if (penv->pcie_link_state) { pci_save_state(pdev); penv->saved_state = cnss_pci_store_saved_state(pdev); + /* Save default config space */ + penv->default_state = cnss_pci_store_saved_state(pdev); ret = cnss_msm_pcie_pm_control(MSM_PCIE_SUSPEND, cnss_get_pci_dev_bus_number(pdev), @@ -1734,6 +1742,9 @@ static void cnss_wlan_pci_remove(struct pci_dev *pdev) if (!penv) return; + if (penv->default_state) + pci_load_and_free_saved_state(penv->pdev, &penv->default_state); + dev = &penv->pldev->dev; cnss_pcie_reset_platform_ops(dev); device_remove_file(dev, &dev_attr_wlan_setup);