From 0d77d5e6655c53003fa10c45e332adabbb745bb2 Mon Sep 17 00:00:00 2001 From: Yue Ma Date: Fri, 12 Jun 2020 18:47:24 -0700 Subject: [PATCH] cnss2: Save default config space without BME enabled BME should be enabled after config space has been restored. Make sure that the default config space saved which is restored during PCIe link down recovery doesn't have BME enabled. Change-Id: I227d09620128cbb3232f63a026bc6eb789a0b70c Signed-off-by: Yue Ma --- drivers/net/wireless/cnss2/pci.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/drivers/net/wireless/cnss2/pci.c b/drivers/net/wireless/cnss2/pci.c index 1257b3ffe0ec..5efbba214790 100644 --- a/drivers/net/wireless/cnss2/pci.c +++ b/drivers/net/wireless/cnss2/pci.c @@ -3789,18 +3789,21 @@ static int cnss_pci_enable_bus(struct cnss_pci_data *pci_priv) goto release_region; } - pci_set_master(pci_dev); - pci_priv->bar = pci_iomap(pci_dev, PCI_BAR_NUM, 0); if (!pci_priv->bar) { cnss_pr_err("Failed to do PCI IO map!\n"); ret = -EIO; - goto clear_master; + goto release_region; } + + /* Save default config space without BME enabled */ + pci_save_state(pci_dev); + pci_priv->default_state = pci_store_saved_state(pci_dev); + + pci_set_master(pci_dev); + return 0; -clear_master: - pci_clear_master(pci_dev); release_region: pci_release_region(pci_dev, PCI_BAR_NUM); disable_device: @@ -3813,12 +3816,14 @@ static void cnss_pci_disable_bus(struct cnss_pci_data *pci_priv) { struct pci_dev *pci_dev = pci_priv->pci_dev; + pci_clear_master(pci_dev); + pci_load_and_free_saved_state(pci_dev, &pci_priv->saved_state); + if (pci_priv->bar) { pci_iounmap(pci_dev, pci_priv->bar); pci_priv->bar = NULL; } - pci_clear_master(pci_dev); pci_release_region(pci_dev, PCI_BAR_NUM); if (pci_is_enabled(pci_dev)) pci_disable_device(pci_dev); @@ -4620,9 +4625,6 @@ static int cnss_pci_probe(struct pci_dev *pci_dev, if (ret) goto dereg_pci_event; - pci_save_state(pci_dev); - pci_priv->default_state = pci_store_saved_state(pci_dev); - switch (pci_dev->device) { case QCA6174_DEVICE_ID: pci_read_config_word(pci_dev, QCA6174_REV_ID_OFFSET, @@ -4708,8 +4710,6 @@ static void cnss_pci_remove(struct pci_dev *pci_dev) break; } - pci_load_and_free_saved_state(pci_dev, &pci_priv->saved_state); - cnss_pci_disable_bus(pci_priv); cnss_dereg_pci_event(pci_priv); cnss_pci_deinit_smmu(pci_priv);