diff options
Diffstat (limited to '0011-iwlwifi-dont-send-GEO_TX_POWER_LIMIT-if-no-wgds-table.patch')
-rw-r--r-- | 0011-iwlwifi-dont-send-GEO_TX_POWER_LIMIT-if-no-wgds-table.patch | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/0011-iwlwifi-dont-send-GEO_TX_POWER_LIMIT-if-no-wgds-table.patch b/0011-iwlwifi-dont-send-GEO_TX_POWER_LIMIT-if-no-wgds-table.patch new file mode 100644 index 0000000..af462ee --- /dev/null +++ b/0011-iwlwifi-dont-send-GEO_TX_POWER_LIMIT-if-no-wgds-table.patch @@ -0,0 +1,152 @@ +From ec701fa986108fae10bee7cfe269e12210521c5f Mon Sep 17 00:00:00 2001 +From: Golan Ben Ami <golan.ben.ami@intel.com> +Date: Wed, 18 Mar 2020 08:12:54 +0200 +Subject: iwlwifi: don't send GEO_TX_POWER_LIMIT if no wgds table + +The GEO_TX_POWER_LIMIT command was sent although +there is no wgds table, so the fw got wrong SAR values +from the driver. + +Fix this by avoiding sending the command if no wgds +tables are available. + +Signed-off-by: Golan Ben Ami <golan.ben.ami@intel.com> +Fixes: 39c1a9728f93 ("iwlwifi: refactor the SAR tables from mvm to acpi") +Signed-off-by: Luca Coelho <luciano.coelho@intel.com> +Tested-By: Jonathan McDowell <noodles@earth.li> +Tested-by: Len Brown <len.brown@intel.com> +--- + drivers/net/wireless/intel/iwlwifi/fw/acpi.c | 14 ++++++++------ + drivers/net/wireless/intel/iwlwifi/fw/acpi.h | 14 ++++++++------ + drivers/net/wireless/intel/iwlwifi/mvm/fw.c | 9 ++++++++- + 3 files changed, 24 insertions(+), 13 deletions(-) + +diff --git a/drivers/net/wireless/intel/iwlwifi/fw/acpi.c b/drivers/net/wireless/intel/iwlwifi/fw/acpi.c +index 48d375a86d86..ba2aff3af0fe 100644 +--- a/drivers/net/wireless/intel/iwlwifi/fw/acpi.c ++++ b/drivers/net/wireless/intel/iwlwifi/fw/acpi.c +@@ -6,7 +6,7 @@ + * GPL LICENSE SUMMARY + * + * Copyright(c) 2017 Intel Deutschland GmbH +- * Copyright (C) 2019 Intel Corporation ++ * Copyright (C) 2019 - 2020 Intel Corporation + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of version 2 of the GNU General Public License as +@@ -27,7 +27,7 @@ + * BSD LICENSE + * + * Copyright(c) 2017 Intel Deutschland GmbH +- * Copyright (C) 2019 Intel Corporation ++ * Copyright (C) 2019 - 2020 Intel Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without +@@ -491,13 +491,13 @@ int iwl_validate_sar_geo_profile(struct iwl_fw_runtime *fwrt, + } + IWL_EXPORT_SYMBOL(iwl_validate_sar_geo_profile); + +-void iwl_sar_geo_init(struct iwl_fw_runtime *fwrt, +- struct iwl_per_chain_offset_group *table) ++int iwl_sar_geo_init(struct iwl_fw_runtime *fwrt, ++ struct iwl_per_chain_offset_group *table) + { + int ret, i, j; + + if (!iwl_sar_geo_support(fwrt)) +- return; ++ return -EOPNOTSUPP; + + ret = iwl_sar_get_wgds_table(fwrt); + if (ret < 0) { +@@ -505,7 +505,7 @@ void iwl_sar_geo_init(struct iwl_fw_runtime *fwrt, + "Geo SAR BIOS table invalid or unavailable. (%d)\n", + ret); + /* we don't fail if the table is not available */ +- return; ++ return -ENOENT; + } + + BUILD_BUG_ON(ACPI_NUM_GEO_PROFILES * ACPI_WGDS_NUM_BANDS * +@@ -530,5 +530,7 @@ void iwl_sar_geo_init(struct iwl_fw_runtime *fwrt, + i, j, value[1], value[2], value[0]); + } + } ++ ++ return 0; + } + IWL_EXPORT_SYMBOL(iwl_sar_geo_init); +diff --git a/drivers/net/wireless/intel/iwlwifi/fw/acpi.h b/drivers/net/wireless/intel/iwlwifi/fw/acpi.h +index 4a6e8262974b..5590e5cc8fbb 100644 +--- a/drivers/net/wireless/intel/iwlwifi/fw/acpi.h ++++ b/drivers/net/wireless/intel/iwlwifi/fw/acpi.h +@@ -6,7 +6,7 @@ + * GPL LICENSE SUMMARY + * + * Copyright(c) 2017 Intel Deutschland GmbH +- * Copyright(c) 2018 - 2019 Intel Corporation ++ * Copyright(c) 2018 - 2020 Intel Corporation + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of version 2 of the GNU General Public License as +@@ -27,7 +27,7 @@ + * BSD LICENSE + * + * Copyright(c) 2017 Intel Deutschland GmbH +- * Copyright(c) 2018 - 2019 Intel Corporation ++ * Copyright(c) 2018 - 2020 Intel Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without +@@ -171,8 +171,9 @@ bool iwl_sar_geo_support(struct iwl_fw_runtime *fwrt); + int iwl_validate_sar_geo_profile(struct iwl_fw_runtime *fwrt, + struct iwl_host_cmd *cmd); + +-void iwl_sar_geo_init(struct iwl_fw_runtime *fwrt, +- struct iwl_per_chain_offset_group *table); ++int iwl_sar_geo_init(struct iwl_fw_runtime *fwrt, ++ struct iwl_per_chain_offset_group *table); ++ + #else /* CONFIG_ACPI */ + + static inline void *iwl_acpi_get_object(struct device *dev, acpi_string method) +@@ -243,9 +244,10 @@ static inline int iwl_validate_sar_geo_profile(struct iwl_fw_runtime *fwrt, + return -ENOENT; + } + +-static inline void iwl_sar_geo_init(struct iwl_fw_runtime *fwrt, +- struct iwl_per_chain_offset_group *table) ++static inline int iwl_sar_geo_init(struct iwl_fw_runtime *fwrt, ++ struct iwl_per_chain_offset_group *table) + { ++ return -ENOENT; + } + + #endif /* CONFIG_ACPI */ +diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c b/drivers/net/wireless/intel/iwlwifi/mvm/fw.c +index c09624d8d7ee..81b7da5815eb 100644 +--- a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c ++++ b/drivers/net/wireless/intel/iwlwifi/mvm/fw.c +@@ -749,10 +749,17 @@ static int iwl_mvm_sar_geo_init(struct iwl_mvm *mvm) + u16 cmd_wide_id = WIDE_ID(PHY_OPS_GROUP, GEO_TX_POWER_LIMIT); + union geo_tx_power_profiles_cmd cmd; + u16 len; ++ int ret; + + cmd.geo_cmd.ops = cpu_to_le32(IWL_PER_CHAIN_OFFSET_SET_TABLES); + +- iwl_sar_geo_init(&mvm->fwrt, cmd.geo_cmd.table); ++ ret = iwl_sar_geo_init(&mvm->fwrt, cmd.geo_cmd.table); ++ /* ++ * It is a valid scenario to not support SAR, or miss wgds table, ++ * but in that case there is no need to send the command. ++ */ ++ if (ret) ++ return 0; + + cmd.geo_cmd.table_revision = cpu_to_le32(mvm->fwrt.geo_rev); + +-- +cgit v1.2.2-1-gc45e + |