Oliver Neukum 00c246
From 66e839030fd698586734e017fd55c4f2a89dba0b Mon Sep 17 00:00:00 2001
Oliver Neukum 00c246
From: Matt Chen <matt.chen@intel.com>
Oliver Neukum 00c246
Date: Fri, 3 Aug 2018 14:29:20 +0800
Oliver Neukum 00c246
Subject: [PATCH] iwlwifi: fix wrong WGDS_WIFI_DATA_SIZE
Oliver Neukum 00c246
Git-commit: 66e839030fd698586734e017fd55c4f2a89dba0b
Oliver Neukum 00c246
Patch-mainline: v4.20
Oliver Neukum 00c246
References: bsc#1119086
Oliver Neukum 00c246
Oliver Neukum 00c246
From coreboot/BIOS:
Oliver Neukum 00c246
Name ("WGDS", Package() {
Oliver Neukum 00c246
 Revision,
Oliver Neukum 00c246
 Package() {
Oliver Neukum 00c246
     DomainType,                         // 0x7:WiFi ==> We miss this one.
Oliver Neukum 00c246
     WgdsWiFiSarDeltaGroup1PowerMax1,    // Group 1 FCC 2400 Max
Oliver Neukum 00c246
     WgdsWiFiSarDeltaGroup1PowerChainA1, // Group 1 FCC 2400 A Offset
Oliver Neukum 00c246
     WgdsWiFiSarDeltaGroup1PowerChainB1, // Group 1 FCC 2400 B Offset
Oliver Neukum 00c246
     WgdsWiFiSarDeltaGroup1PowerMax2,    // Group 1 FCC 5200 Max
Oliver Neukum 00c246
     WgdsWiFiSarDeltaGroup1PowerChainA2, // Group 1 FCC 5200 A Offset
Oliver Neukum 00c246
     WgdsWiFiSarDeltaGroup1PowerChainB2, // Group 1 FCC 5200 B Offset
Oliver Neukum 00c246
     WgdsWiFiSarDeltaGroup2PowerMax1,    // Group 2 EC Jap 2400 Max
Oliver Neukum 00c246
     WgdsWiFiSarDeltaGroup2PowerChainA1, // Group 2 EC Jap 2400 A Offset
Oliver Neukum 00c246
     WgdsWiFiSarDeltaGroup2PowerChainB1, // Group 2 EC Jap 2400 B Offset
Oliver Neukum 00c246
     WgdsWiFiSarDeltaGroup2PowerMax2,    // Group 2 EC Jap 5200 Max
Oliver Neukum 00c246
     WgdsWiFiSarDeltaGroup2PowerChainA2, // Group 2 EC Jap 5200 A Offset
Oliver Neukum 00c246
     WgdsWiFiSarDeltaGroup2PowerChainB2, // Group 2 EC Jap 5200 B Offset
Oliver Neukum 00c246
     WgdsWiFiSarDeltaGroup3PowerMax1,    // Group 3 ROW 2400 Max
Oliver Neukum 00c246
     WgdsWiFiSarDeltaGroup3PowerChainA1, // Group 3 ROW 2400 A Offset
Oliver Neukum 00c246
     WgdsWiFiSarDeltaGroup3PowerChainB1, // Group 3 ROW 2400 B Offset
Oliver Neukum 00c246
     WgdsWiFiSarDeltaGroup3PowerMax2,    // Group 3 ROW 5200 Max
Oliver Neukum 00c246
     WgdsWiFiSarDeltaGroup3PowerChainA2, // Group 3 ROW 5200 A Offset
Oliver Neukum 00c246
     WgdsWiFiSarDeltaGroup3PowerChainB2, // Group 3 ROW 5200 B Offset
Oliver Neukum 00c246
 }
Oliver Neukum 00c246
})
Oliver Neukum 00c246
Oliver Neukum 00c246
When read the ACPI data to find out the WGDS, the DATA_SIZE is never
Oliver Neukum 00c246
matched.
Oliver Neukum 00c246
From the above format, it gives 19 numbers, but our driver is hardcode
Oliver Neukum 00c246
as 18.
Oliver Neukum 00c246
Fix it to pass then can parse the data into our wgds table.
Oliver Neukum 00c246
Then we will see:
Oliver Neukum 00c246
iwlwifi 0000:01:00.0: U iwl_mvm_sar_geo_init Sending GEO_TX_POWER_LIMIT
Oliver Neukum 00c246
iwlwifi 0000:01:00.0: U iwl_mvm_sar_geo_init SAR geographic profile[0]
Oliver Neukum 00c246
Band[0]: chain A = 68 chain B = 69 max_tx_power = 54
Oliver Neukum 00c246
iwlwifi 0000:01:00.0: U iwl_mvm_sar_geo_init SAR geographic profile[0]
Oliver Neukum 00c246
Band[1]: chain A = 48 chain B = 49 max_tx_power = 70
Oliver Neukum 00c246
iwlwifi 0000:01:00.0: U iwl_mvm_sar_geo_init SAR geographic profile[1]
Oliver Neukum 00c246
Band[0]: chain A = 51 chain B = 67 max_tx_power = 50
Oliver Neukum 00c246
iwlwifi 0000:01:00.0: U iwl_mvm_sar_geo_init SAR geographic profile[1]
Oliver Neukum 00c246
Band[1]: chain A = 69 chain B = 70 max_tx_power = 68
Oliver Neukum 00c246
iwlwifi 0000:01:00.0: U iwl_mvm_sar_geo_init SAR geographic profile[2]
Oliver Neukum 00c246
Band[0]: chain A = 49 chain B = 50 max_tx_power = 48
Oliver Neukum 00c246
iwlwifi 0000:01:00.0: U iwl_mvm_sar_geo_init SAR geographic profile[2]
Oliver Neukum 00c246
Band[1]: chain A = 52 chain B = 53 max_tx_power = 51
Oliver Neukum 00c246
Oliver Neukum 00c246
Cc: stable@vger.kernel.org # 4.12+
Oliver Neukum 00c246
Fixes: a6bff3cb19b7 ("iwlwifi: mvm: add GEO_TX_POWER_LIMIT cmd for geographic tx power table")
Oliver Neukum 00c246
Signed-off-by: Matt Chen <matt.chen@intel.com>
Oliver Neukum 00c246
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Oliver Neukum 00c246
Signed-off-by: Oliver Neukum <oneukum@suse.com>
Oliver Neukum 00c246
---
Oliver Neukum 00c246
 drivers/net/wireless/intel/iwlwifi/mvm/fw.c |    4 ++--
Oliver Neukum 00c246
 1 file changed, 2 insertions(+), 2 deletions(-)
Oliver Neukum 00c246
Oliver Neukum 00c246
--- a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c
Oliver Neukum 00c246
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/fw.c
Oliver Neukum 00c246
@@ -590,7 +590,7 @@ static int iwl_mvm_config_ltr(struct iwl
Oliver Neukum 00c246
 #define ACPI_WRDS_WIFI_DATA_SIZE	(IWL_MVM_SAR_TABLE_SIZE + 2)
Oliver Neukum 00c246
 #define ACPI_EWRD_WIFI_DATA_SIZE	((IWL_MVM_SAR_PROFILE_NUM - 1) * \
Oliver Neukum 00c246
 					 IWL_MVM_SAR_TABLE_SIZE + 3)
Oliver Neukum 00c246
-#define ACPI_WGDS_WIFI_DATA_SIZE	18
Oliver Neukum 00c246
+#define ACPI_WGDS_WIFI_DATA_SIZE	19
Oliver Neukum 00c246
 #define ACPI_WGDS_NUM_BANDS		2
Oliver Neukum 00c246
 #define ACPI_WGDS_TABLE_SIZE		3
Oliver Neukum 00c246
 
Oliver Neukum 00c246
@@ -968,7 +968,7 @@ static int iwl_mvm_sar_geo_init(struct i
Oliver Neukum 00c246
 	IWL_DEBUG_RADIO(mvm, "Sending GEO_TX_POWER_LIMIT\n");
Oliver Neukum 00c246
 
Oliver Neukum 00c246
 	BUILD_BUG_ON(IWL_NUM_GEO_PROFILES * ACPI_WGDS_NUM_BANDS *
Oliver Neukum 00c246
-		     ACPI_WGDS_TABLE_SIZE !=  ACPI_WGDS_WIFI_DATA_SIZE);
Oliver Neukum 00c246
+		     ACPI_WGDS_TABLE_SIZE + 1 !=  ACPI_WGDS_WIFI_DATA_SIZE);
Oliver Neukum 00c246
 
Oliver Neukum 00c246
 	for (i = 0; i < IWL_NUM_GEO_PROFILES; i++) {
Oliver Neukum 00c246
 		struct iwl_per_chain_offset *chain =