Add patches for v5.8

Patches have been obtained by rebasing the patches in commit

    23d3bc55ce

onto v5.8.
This commit is contained in:
Maximilian Luz 2020-08-03 21:02:06 +02:00
parent 186f2b8031
commit bd7d22c24b
No known key found for this signature in database
GPG key ID: 70EC0937F6C26F02
6 changed files with 15095 additions and 0 deletions

View file

@ -0,0 +1,32 @@
#
# Surface Aggregator Module
#
CONFIG_GPIO_SYSFS=y # required for SURFACE_SAM_HPS
CONFIG_SURFACE_SAM=m
CONFIG_SURFACE_SAM_SSH=m
CONFIG_SURFACE_SAM_SSH_ERROR_INJECTION=n
CONFIG_SURFACE_SAM_DEBUGFS=m
CONFIG_SURFACE_SAM_SAN=m
CONFIG_SURFACE_SAM_VHF=m
CONFIG_SURFACE_SAM_DTX=m
CONFIG_SURFACE_SAM_HPS=m
CONFIG_SURFACE_SAM_SID=m
CONFIG_SURFACE_SAM_SID_GPELID=m
CONFIG_SURFACE_SAM_SID_PERFMODE=m
CONFIG_SURFACE_SAM_SID_VHF=m
CONFIG_SURFACE_SAM_SID_POWER=m
#
# IPTS touchscreen
#
CONFIG_TOUCHSCREEN_IPTS=m
#
# Other Drivers
#
CONFIG_INPUT_SOC_BUTTON_ARRAY=m
CONFIG_SURFACE_3_POWER_OPREGION=m
CONFIG_SURFACE_3_BUTTON=m
CONFIG_SURFACE_3_POWER_OPREGION=m
CONFIG_SURFACE_PRO3_BUTTON=m

View file

@ -0,0 +1,71 @@
From 0ea332f8971bbe537bbc43bb76ef790981ce001d Mon Sep 17 00:00:00 2001
From: Chih-Wei Huang <cwhuang@linux.org.tw>
Date: Tue, 18 Sep 2018 11:01:37 +0800
Subject: [PATCH 1/5] surface3-oemb
---
drivers/platform/x86/surface3-wmi.c | 7 +++++++
sound/soc/codecs/rt5645.c | 9 +++++++++
sound/soc/intel/common/soc-acpi-intel-cht-match.c | 8 ++++++++
3 files changed, 24 insertions(+)
diff --git a/drivers/platform/x86/surface3-wmi.c b/drivers/platform/x86/surface3-wmi.c
index 130b6f52a6001..801083aa56d6d 100644
--- a/drivers/platform/x86/surface3-wmi.c
+++ b/drivers/platform/x86/surface3-wmi.c
@@ -37,6 +37,13 @@ static const struct dmi_system_id surface3_dmi_table[] = {
DMI_MATCH(DMI_PRODUCT_NAME, "Surface 3"),
},
},
+ {
+ .matches = {
+ DMI_MATCH(DMI_BIOS_VENDOR, "American Megatrends Inc."),
+ DMI_MATCH(DMI_SYS_VENDOR, "OEMB"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "OEMB"),
+ },
+ },
#endif
{ }
};
diff --git a/sound/soc/codecs/rt5645.c b/sound/soc/codecs/rt5645.c
index e2e1d5b03b381..5ff38592ba6db 100644
--- a/sound/soc/codecs/rt5645.c
+++ b/sound/soc/codecs/rt5645.c
@@ -3687,6 +3687,15 @@ static const struct dmi_system_id dmi_platform_data[] = {
},
.driver_data = (void *)&intel_braswell_platform_data,
},
+ {
+ .ident = "Microsoft Surface 3",
+ .matches = {
+ DMI_MATCH(DMI_BIOS_VENDOR, "American Megatrends Inc."),
+ DMI_MATCH(DMI_SYS_VENDOR, "OEMB"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "OEMB"),
+ },
+ .driver_data = (void *)&intel_braswell_platform_data,
+ },
{
/*
* Match for the GPDwin which unfortunately uses somewhat
diff --git a/sound/soc/intel/common/soc-acpi-intel-cht-match.c b/sound/soc/intel/common/soc-acpi-intel-cht-match.c
index 2752dc9557334..ef36a316e2ed6 100644
--- a/sound/soc/intel/common/soc-acpi-intel-cht-match.c
+++ b/sound/soc/intel/common/soc-acpi-intel-cht-match.c
@@ -27,6 +27,14 @@ static const struct dmi_system_id cht_table[] = {
DMI_MATCH(DMI_PRODUCT_NAME, "Surface 3"),
},
},
+ {
+ .callback = cht_surface_quirk_cb,
+ .matches = {
+ DMI_MATCH(DMI_BIOS_VENDOR, "American Megatrends Inc."),
+ DMI_MATCH(DMI_SYS_VENDOR, "OEMB"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "OEMB"),
+ },
+ },
{ }
};
--
2.28.0

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,65 @@
From 4d82adb6c864e715ea5236dd0a8c971cf63e2dc1 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Sat, 25 Jul 2020 17:19:53 +0200
Subject: [PATCH 3/5] surface-sam-over-hid
---
drivers/i2c/i2c-core-acpi.c | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/drivers/i2c/i2c-core-acpi.c b/drivers/i2c/i2c-core-acpi.c
index 2ade99b105b91..60b9cb51d5f7e 100644
--- a/drivers/i2c/i2c-core-acpi.c
+++ b/drivers/i2c/i2c-core-acpi.c
@@ -574,6 +574,28 @@ static int acpi_gsb_i2c_write_bytes(struct i2c_client *client,
return (ret == 1) ? 0 : -EIO;
}
+static int acpi_gsb_i2c_write_raw_bytes(struct i2c_client *client,
+ u8 *data, u8 data_len)
+{
+ struct i2c_msg msgs[1];
+ int ret = AE_OK;
+
+ msgs[0].addr = client->addr;
+ msgs[0].flags = client->flags;
+ msgs[0].len = data_len + 1;
+ msgs[0].buf = data;
+
+ ret = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs));
+
+ if (ret < 0) {
+ dev_err(&client->adapter->dev, "i2c write failed: %d\n", ret);
+ return ret;
+ }
+
+ /* 1 transfer must have completed successfully */
+ return (ret == 1) ? 0 : -EIO;
+}
+
static acpi_status
i2c_acpi_space_handler(u32 function, acpi_physical_address command,
u32 bits, u64 *value64,
@@ -675,6 +697,19 @@ i2c_acpi_space_handler(u32 function, acpi_physical_address command,
}
break;
+ case ACPI_GSB_ACCESS_ATTRIB_RAW_BYTES:
+ if (action == ACPI_READ) {
+ dev_warn(&adapter->dev,
+ "protocol 0x%02x not supported for client 0x%02x\n",
+ accessor_type, client->addr);
+ ret = AE_BAD_PARAMETER;
+ goto err;
+ } else {
+ status = acpi_gsb_i2c_write_raw_bytes(client,
+ gsb->data, info->access_length);
+ }
+ break;
+
default:
dev_warn(&adapter->dev, "protocol 0x%02x not supported for client 0x%02x\n",
accessor_type, client->addr);
--
2.28.0

255
patches/5.8/0004-wifi.patch Normal file
View file

@ -0,0 +1,255 @@
From e20265c4b4f99cc46dfb5e481dff4a2be2ed3fd5 Mon Sep 17 00:00:00 2001
From: kitakar5525 <34676735+kitakar5525@users.noreply.github.com>
Date: Thu, 20 Feb 2020 16:51:11 +0900
Subject: [PATCH 4/5] wifi
---
.../net/wireless/marvell/mwifiex/cfg80211.c | 26 ++++++
drivers/net/wireless/marvell/mwifiex/pcie.c | 84 +++++++++++--------
.../net/wireless/marvell/mwifiex/sta_cmd.c | 31 ++-----
3 files changed, 84 insertions(+), 57 deletions(-)
diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
index 4e4f59c17ded3..528eedfbf41c9 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) |
@@ -434,6 +439,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 87b4ccca4b9a2..3bdad5e80ecbb 100644
--- a/drivers/net/wireless/marvell/mwifiex/pcie.c
+++ b/drivers/net/wireless/marvell/mwifiex/pcie.c
@@ -146,38 +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 pci_dev *pdev = to_pci_dev(dev);
+ struct pcie_service_card *card = pci_get_drvdata(pdev);
struct mwifiex_adapter *adapter;
- struct pcie_service_card *card = dev_get_drvdata(dev);
-
+ 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);
+
+ mwifiex_disable_auto_ds(priv);
- /* Indicate device suspended */
- set_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags);
- clear_bit(MWIFIEX_IS_HS_ENABLING, &adapter->work_flags);
+ mwifiex_init_shutdown_fw(priv, MWIFIEX_FUNC_SHUTDOWN);
+ }
+
+ mwifiex_remove_card(adapter);
return 0;
}
@@ -189,31 +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 = dev_get_drvdata(dev);
+ struct pci_dev *pdev = to_pci_dev(dev);
+ struct pcie_service_card *card = pci_get_drvdata(pdev);
+ int ret;
+ 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;
}
@@ -229,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 8bd355d7974e9..256c8c38deee3 100644
--- a/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
+++ b/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
@@ -2247,7 +2247,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
@@ -2260,7 +2259,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;
@@ -2332,16 +2330,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;
@@ -2388,17 +2380,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.28.0

2061
patches/5.8/0005-ipts.patch Normal file

File diff suppressed because it is too large Load diff