From 7e2a6777ce96032dc6c37bfadc42b11078b401f1 Mon Sep 17 00:00:00 2001 From: Maximilian Luz Date: Fri, 3 Jul 2020 00:10:02 +0200 Subject: [PATCH] fixup! Update v4.19 patches --- patches/4.19/0009-ioremap_uc.patch | 24 --- patches/4.19/0010-wifi.patch | 258 ----------------------------- 2 files changed, 282 deletions(-) delete mode 100644 patches/4.19/0009-ioremap_uc.patch delete mode 100644 patches/4.19/0010-wifi.patch diff --git a/patches/4.19/0009-ioremap_uc.patch b/patches/4.19/0009-ioremap_uc.patch deleted file mode 100644 index 5ff5b4141..000000000 --- a/patches/4.19/0009-ioremap_uc.patch +++ /dev/null @@ -1,24 +0,0 @@ -From 6d8ed96cfeb08b584fd429eb603e0d5d00e476a6 Mon Sep 17 00:00:00 2001 -From: Tuowen Zhao -Date: Wed, 16 Oct 2019 15:06:28 -0600 -Subject: [PATCH 09/10] ioremap_uc - ---- - Documentation/driver-model/devres.txt | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/Documentation/driver-model/devres.txt b/Documentation/driver-model/devres.txt -index 43681ca0837f..7b1ee4190208 100644 ---- a/Documentation/driver-model/devres.txt -+++ b/Documentation/driver-model/devres.txt -@@ -294,6 +294,7 @@ IOMAP - devm_ioport_unmap() - devm_ioremap() - devm_ioremap_nocache() -+ devm_ioremap_uc() - devm_ioremap_wc() - devm_ioremap_resource() : checks resource, requests memory region, ioremaps - devm_iounmap() --- -2.26.2 - diff --git a/patches/4.19/0010-wifi.patch b/patches/4.19/0010-wifi.patch deleted file mode 100644 index 41c48cc1a..000000000 --- a/patches/4.19/0010-wifi.patch +++ /dev/null @@ -1,258 +0,0 @@ -From 9bb4c5b00ce73302b1321f7b51bfbe7bcf7386fb Mon Sep 17 00:00:00 2001 -From: sebanc <22224731+sebanc@users.noreply.github.com> -Date: Mon, 4 Nov 2019 09:30:57 +0100 -Subject: [PATCH 10/10] wifi - ---- - .../net/wireless/marvell/mwifiex/cfg80211.c | 26 ++++++ - drivers/net/wireless/marvell/mwifiex/pcie.c | 86 +++++++++++-------- - .../net/wireless/marvell/mwifiex/sta_cmd.c | 31 ++----- - 3 files changed, 83 insertions(+), 60 deletions(-) - -diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c -index 7b74ef71bef1..d8e65b733cb3 100644 ---- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c -+++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c -@@ -25,6 +25,11 @@ - static char *reg_alpha2; - module_param(reg_alpha2, charp, 0); - -+static bool allow_ps_mode; -+module_param(allow_ps_mode, bool, 0444); -+MODULE_PARM_DESC(allow_ps_mode, -+ "allow WiFi power management to be enabled. (default: disallowed)"); -+ - static const struct ieee80211_iface_limit mwifiex_ap_sta_limits[] = { - { - .max = 3, .types = BIT(NL80211_IFTYPE_STATION) | -@@ -439,6 +444,27 @@ mwifiex_cfg80211_set_power_mgmt(struct wiphy *wiphy, - - ps_mode = enabled; - -+ /* Allow ps_mode to be enabled only when allow_ps_mode is set -+ * (but always allow ps_mode to be disabled in case it gets enabled -+ * for unknown reason and you want to disable it) */ -+ if (ps_mode && !allow_ps_mode) { -+ dev_info(priv->adapter->dev, -+ "Request to enable ps_mode received but it's disallowed " -+ "by module parameter. Rejecting the request.\n"); -+ -+ /* Return negative value to inform userspace tools that setting -+ * power_save to be enabled is not permitted. */ -+ return -1; -+ } -+ -+ if (ps_mode) -+ dev_warn(priv->adapter->dev, -+ "WARN: Request to enable ps_mode received. Enabling it. " -+ "Disable it if you encounter connection instability.\n"); -+ else -+ dev_info(priv->adapter->dev, -+ "Request to disable ps_mode received. Disabling it.\n"); -+ - return mwifiex_drv_set_power(priv, &ps_mode); - } - -diff --git a/drivers/net/wireless/marvell/mwifiex/pcie.c b/drivers/net/wireless/marvell/mwifiex/pcie.c -index 991b9cc18000..2464f536192c 100644 ---- a/drivers/net/wireless/marvell/mwifiex/pcie.c -+++ b/drivers/net/wireless/marvell/mwifiex/pcie.c -@@ -146,40 +146,45 @@ static bool mwifiex_pcie_ok_to_access_hw(struct mwifiex_adapter *adapter) - * - * If already not suspended, this function allocates and sends a host - * sleep activate request to the firmware and turns off the traffic. -+ * -+ * XXX: ignoring all the above comment and just removes the card to -+ * fix S0ix and "AP scanning (sometimes) not working after suspend". -+ * Required code is extracted from mwifiex_pcie_remove(). - */ - static int mwifiex_pcie_suspend(struct device *dev) - { -- struct mwifiex_adapter *adapter; -- struct pcie_service_card *card; - struct pci_dev *pdev = to_pci_dev(dev); -- -- card = pci_get_drvdata(pdev); -+ struct pcie_service_card *card = pci_get_drvdata(pdev); -+ struct mwifiex_adapter *adapter; -+ struct mwifiex_private *priv; -+ const struct mwifiex_pcie_card_reg *reg; -+ u32 fw_status; -+ int ret; - - /* Might still be loading firmware */ - wait_for_completion(&card->fw_done); - - adapter = card->adapter; -- if (!adapter) { -- dev_err(dev, "adapter is not valid\n"); -+ if (!adapter || !adapter->priv_num) - return 0; -- } - -- mwifiex_enable_wake(adapter); -+ reg = card->pcie.reg; -+ if (reg) -+ ret = mwifiex_read_reg(adapter, reg->fw_status, &fw_status); -+ else -+ fw_status = -1; - -- /* Enable the Host Sleep */ -- if (!mwifiex_enable_hs(adapter)) { -- mwifiex_dbg(adapter, ERROR, -- "cmd: failed to suspend\n"); -- clear_bit(MWIFIEX_IS_HS_ENABLING, &adapter->work_flags); -- mwifiex_disable_wake(adapter); -- return -EFAULT; -- } -+ if (fw_status == FIRMWARE_READY_PCIE && !adapter->mfg_mode) { -+ mwifiex_deauthenticate_all(adapter); - -- flush_workqueue(adapter->workqueue); -+ priv = mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY); - -- /* Indicate device suspended */ -- set_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags); -- clear_bit(MWIFIEX_IS_HS_ENABLING, &adapter->work_flags); -+ mwifiex_disable_auto_ds(priv); -+ -+ mwifiex_init_shutdown_fw(priv, MWIFIEX_FUNC_SHUTDOWN); -+ } -+ -+ mwifiex_remove_card(adapter); - - return 0; - } -@@ -191,33 +196,35 @@ static int mwifiex_pcie_suspend(struct device *dev) - * - * If already not resumed, this function turns on the traffic and - * sends a host sleep cancel request to the firmware. -+ * -+ * XXX: ignoring all the above comment and probes the card that was -+ * removed on suspend. Required code is extracted from mwifiex_pcie_probe(). - */ - static int mwifiex_pcie_resume(struct device *dev) - { -- struct mwifiex_adapter *adapter; -- struct pcie_service_card *card; - struct pci_dev *pdev = to_pci_dev(dev); -+ struct pcie_service_card *card = pci_get_drvdata(pdev); -+ int ret; - -- card = pci_get_drvdata(pdev); -+ pr_debug("info: vendor=0x%4.04X device=0x%4.04X rev=%d\n", -+ pdev->vendor, pdev->device, pdev->revision); - -- if (!card->adapter) { -- dev_err(dev, "adapter structure is not valid\n"); -- return 0; -- } -+ init_completion(&card->fw_done); - -- adapter = card->adapter; -+ card->dev = pdev; - -- if (!test_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags)) { -- mwifiex_dbg(adapter, WARN, -- "Device already resumed\n"); -- return 0; -+ /* device tree node parsing and platform specific configuration */ -+ if (pdev->dev.of_node) { -+ ret = mwifiex_pcie_probe_of(&pdev->dev); -+ if (ret) -+ return ret; - } - -- clear_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags); -- -- mwifiex_cancel_hs(mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_STA), -- MWIFIEX_ASYNC_CMD); -- mwifiex_disable_wake(adapter); -+ if (mwifiex_add_card(card, &card->fw_done, &pcie_ops, -+ MWIFIEX_PCIE, &pdev->dev)) { -+ pr_err("%s failed\n", __func__); -+ return -1; -+ } - - return 0; - } -@@ -233,8 +240,13 @@ static int mwifiex_pcie_probe(struct pci_dev *pdev, - const struct pci_device_id *ent) - { - struct pcie_service_card *card; -+ struct pci_dev *parent_pdev = pci_upstream_bridge(pdev); - int ret; - -+ /* disable bridge_d3 to fix driver crashing after suspend on gen4+ -+ * Surface devices */ -+ parent_pdev->bridge_d3 = false; -+ - pr_debug("info: vendor=0x%4.04X device=0x%4.04X rev=%d\n", - pdev->vendor, pdev->device, pdev->revision); - -diff --git a/drivers/net/wireless/marvell/mwifiex/sta_cmd.c b/drivers/net/wireless/marvell/mwifiex/sta_cmd.c -index 4ed10cf82f9a..410bef3d6a6e 100644 ---- a/drivers/net/wireless/marvell/mwifiex/sta_cmd.c -+++ b/drivers/net/wireless/marvell/mwifiex/sta_cmd.c -@@ -2254,7 +2254,6 @@ int mwifiex_sta_prepare_cmd(struct mwifiex_private *priv, uint16_t cmd_no, - * - Function init (for first interface only) - * - Read MAC address (for first interface only) - * - Reconfigure Tx buffer size (for first interface only) -- * - Enable auto deep sleep (for first interface only) - * - Get Tx rate - * - Get Tx power - * - Set IBSS coalescing status -@@ -2267,7 +2266,6 @@ int mwifiex_sta_init_cmd(struct mwifiex_private *priv, u8 first_sta, bool init) - struct mwifiex_adapter *adapter = priv->adapter; - int ret; - struct mwifiex_ds_11n_amsdu_aggr_ctrl amsdu_aggr_ctrl; -- struct mwifiex_ds_auto_ds auto_ds; - enum state_11d_t state_11d; - struct mwifiex_ds_11n_tx_cfg tx_cfg; - u8 sdio_sp_rx_aggr_enable; -@@ -2339,16 +2337,10 @@ int mwifiex_sta_init_cmd(struct mwifiex_private *priv, u8 first_sta, bool init) - if (ret) - return -1; - -- if (priv->bss_type != MWIFIEX_BSS_TYPE_UAP) { -- /* Enable IEEE PS by default */ -- priv->adapter->ps_mode = MWIFIEX_802_11_POWER_MODE_PSP; -- ret = mwifiex_send_cmd(priv, -- HostCmd_CMD_802_11_PS_MODE_ENH, -- EN_AUTO_PS, BITMAP_STA_PS, NULL, -- true); -- if (ret) -- return -1; -- } -+ /* Not enabling ps_mode (IEEE power_save) by default. Enabling -+ * this causes connection instability, especially on 5GHz APs -+ * and eventually causes "firmware wakeup failed". Therefore, -+ * the relevant code was removed from here. */ - - if (drcs) { - adapter->drcs_enabled = true; -@@ -2395,17 +2387,10 @@ int mwifiex_sta_init_cmd(struct mwifiex_private *priv, u8 first_sta, bool init) - if (ret) - return -1; - -- if (!disable_auto_ds && first_sta && -- priv->bss_type != MWIFIEX_BSS_TYPE_UAP) { -- /* Enable auto deep sleep */ -- auto_ds.auto_ds = DEEP_SLEEP_ON; -- auto_ds.idle_time = DEEP_SLEEP_IDLE_TIME; -- ret = mwifiex_send_cmd(priv, HostCmd_CMD_802_11_PS_MODE_ENH, -- EN_AUTO_PS, BITMAP_AUTO_DS, -- &auto_ds, true); -- if (ret) -- return -1; -- } -+ /* Not enabling auto deep sleep (auto_ds) by default. Enabling -+ * this reportedly causes "suspend/resume fails when not connected -+ * to an Access Point." Therefore, the relevant code was removed -+ * from here. */ - - if (priv->bss_type != MWIFIEX_BSS_TYPE_UAP) { - /* Send cmd to FW to enable/disable 11D function */ --- -2.26.2 -