From: Greg Kroah-Hartman Date: Tue, 28 Nov 2017 09:12:09 +0000 (+0100) Subject: 4.14-stable patches X-Git-Tag: v3.18.85~9 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f6e1b0c9e11ef58600cd0553461b71e2aae043ba;p=thirdparty%2Fkernel%2Fstable-queue.git 4.14-stable patches added patches: iwlwifi-add-a-new-a000-device.patch iwlwifi-add-new-cards-for-8260-series.patch iwlwifi-add-new-cards-for-8265-series.patch iwlwifi-add-new-cards-for-a000-series.patch iwlwifi-fix-pci-ids-and-configuration-mapping-for-9000-series.patch iwlwifi-fix-wrong-struct-for-a000-device.patch iwlwifi-mvm-support-version-7-of-the-scan_req_umac-fw-command.patch iwlwifi-pcie-sort-ids-for-the-9000-series-for-easier-comparisons.patch --- diff --git a/queue-4.14/iwlwifi-add-a-new-a000-device.patch b/queue-4.14/iwlwifi-add-a-new-a000-device.patch new file mode 100644 index 00000000000..b4cafa66fbd --- /dev/null +++ b/queue-4.14/iwlwifi-add-a-new-a000-device.patch @@ -0,0 +1,30 @@ +From d048b36b9654c4e0cf0d3576be2d1ed2a3084c6f Mon Sep 17 00:00:00 2001 +From: Oren Givon +Date: Thu, 31 Aug 2017 13:15:09 +0300 +Subject: iwlwifi: add a new a000 device + +From: Oren Givon + +commit d048b36b9654c4e0cf0d3576be2d1ed2a3084c6f upstream. + +Add a new a000 device with PCI ID (0x2720, 0x0030). + +Signed-off-by: Oren Givon +Signed-off-by: Luca Coelho +Cc: Thomas Backlund +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c ++++ b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c +@@ -577,6 +577,7 @@ static const struct pci_device_id iwl_hw + {IWL_PCI_DEVICE(0x34F0, 0x0070, iwla000_2ax_cfg_hr)}, + {IWL_PCI_DEVICE(0x2720, 0x0078, iwla000_2ax_cfg_hr)}, + {IWL_PCI_DEVICE(0x2720, 0x0070, iwla000_2ac_cfg_hr_cdb)}, ++ {IWL_PCI_DEVICE(0x2720, 0x0030, iwla000_2ac_cfg_hr_cdb)}, + {IWL_PCI_DEVICE(0x2720, 0x1080, iwla000_2ax_cfg_hr)}, + #endif /* CONFIG_IWLMVM */ + diff --git a/queue-4.14/iwlwifi-add-new-cards-for-8260-series.patch b/queue-4.14/iwlwifi-add-new-cards-for-8260-series.patch new file mode 100644 index 00000000000..65637cd4f31 --- /dev/null +++ b/queue-4.14/iwlwifi-add-new-cards-for-8260-series.patch @@ -0,0 +1,39 @@ +From d669fc2d42a43ee0abcf2396df6e9c5a124aa984 Mon Sep 17 00:00:00 2001 +From: Ihab Zhaika +Date: Tue, 24 Oct 2017 17:36:43 +0300 +Subject: iwlwifi: add new cards for 8260 series + +From: Ihab Zhaika + +commit d669fc2d42a43ee0abcf2396df6e9c5a124aa984 upstream. + +add three new PCI ID'S for 8260 series + +Signed-off-by: Ihab Zhaika +Signed-off-by: Luca Coelho +Cc: Thomas Backlund +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c ++++ b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c +@@ -465,6 +465,8 @@ static const struct pci_device_id iwl_hw + {IWL_PCI_DEVICE(0x24F3, 0x9110, iwl8260_2ac_cfg)}, + {IWL_PCI_DEVICE(0x24F4, 0x8030, iwl8260_2ac_cfg)}, + {IWL_PCI_DEVICE(0x24F4, 0x9030, iwl8260_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x24F4, 0xC030, iwl8260_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x24F4, 0xD030, iwl8260_2ac_cfg)}, + {IWL_PCI_DEVICE(0x24F3, 0x8130, iwl8260_2ac_cfg)}, + {IWL_PCI_DEVICE(0x24F3, 0x9130, iwl8260_2ac_cfg)}, + {IWL_PCI_DEVICE(0x24F3, 0x8132, iwl8260_2ac_cfg)}, +@@ -483,6 +485,7 @@ static const struct pci_device_id iwl_hw + {IWL_PCI_DEVICE(0x24F3, 0x0950, iwl8260_2ac_cfg)}, + {IWL_PCI_DEVICE(0x24F3, 0x0930, iwl8260_2ac_cfg)}, + {IWL_PCI_DEVICE(0x24F3, 0x0000, iwl8265_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x24F3, 0x4010, iwl8260_2ac_cfg)}, + {IWL_PCI_DEVICE(0x24FD, 0x0010, iwl8265_2ac_cfg)}, + {IWL_PCI_DEVICE(0x24FD, 0x0110, iwl8265_2ac_cfg)}, + {IWL_PCI_DEVICE(0x24FD, 0x1110, iwl8265_2ac_cfg)}, diff --git a/queue-4.14/iwlwifi-add-new-cards-for-8265-series.patch b/queue-4.14/iwlwifi-add-new-cards-for-8265-series.patch new file mode 100644 index 00000000000..7a333662ff4 --- /dev/null +++ b/queue-4.14/iwlwifi-add-new-cards-for-8265-series.patch @@ -0,0 +1,31 @@ +From 7cddbef445631109bd530ce7cdacaa04ff0a62d1 Mon Sep 17 00:00:00 2001 +From: Ihab Zhaika +Date: Tue, 24 Oct 2017 17:38:12 +0300 +Subject: iwlwifi: add new cards for 8265 series + +From: Ihab Zhaika + +commit 7cddbef445631109bd530ce7cdacaa04ff0a62d1 upstream. + +add two new PCI ID'S for 8265 series + +Signed-off-by: Ihab Zhaika +Signed-off-by: Luca Coelho +Cc: Thomas Backlund +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c ++++ b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c +@@ -508,6 +508,8 @@ static const struct pci_device_id iwl_hw + {IWL_PCI_DEVICE(0x24FD, 0x3E01, iwl8275_2ac_cfg)}, + {IWL_PCI_DEVICE(0x24FD, 0x1012, iwl8275_2ac_cfg)}, + {IWL_PCI_DEVICE(0x24FD, 0x0012, iwl8275_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x24FD, 0x0014, iwl8265_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x24FD, 0x9074, iwl8265_2ac_cfg)}, + + /* 9000 Series */ + {IWL_PCI_DEVICE(0x2526, 0x0000, iwl9260_2ac_cfg)}, diff --git a/queue-4.14/iwlwifi-add-new-cards-for-a000-series.patch b/queue-4.14/iwlwifi-add-new-cards-for-a000-series.patch new file mode 100644 index 00000000000..0cdc205b44d --- /dev/null +++ b/queue-4.14/iwlwifi-add-new-cards-for-a000-series.patch @@ -0,0 +1,34 @@ +From 57b36f7fcb39c5eae8c1f463699f747af69643ba Mon Sep 17 00:00:00 2001 +From: Ihab Zhaika +Date: Tue, 24 Oct 2017 17:04:24 +0300 +Subject: iwlwifi: add new cards for a000 series + +From: Ihab Zhaika + +commit 57b36f7fcb39c5eae8c1f463699f747af69643ba upstream. + +add four new PCI ID'S for a000 series + +Signed-off-by: Ihab Zhaika +Signed-off-by: Luca Coelho +Cc: Thomas Backlund +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 5 +++++ + 1 file changed, 5 insertions(+) + +--- a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c ++++ b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c +@@ -579,6 +579,11 @@ static const struct pci_device_id iwl_hw + {IWL_PCI_DEVICE(0x2720, 0x0070, iwla000_2ac_cfg_hr_cdb)}, + {IWL_PCI_DEVICE(0x2720, 0x0030, iwla000_2ac_cfg_hr_cdb)}, + {IWL_PCI_DEVICE(0x2720, 0x1080, iwla000_2ax_cfg_hr)}, ++ {IWL_PCI_DEVICE(0x2720, 0x0090, iwla000_2ac_cfg_hr_cdb)}, ++ {IWL_PCI_DEVICE(0x2720, 0x0310, iwla000_2ac_cfg_hr_cdb)}, ++ {IWL_PCI_DEVICE(0x40C0, 0x0000, iwla000_2ax_cfg_hr)}, ++ {IWL_PCI_DEVICE(0x40C0, 0x0A10, iwla000_2ax_cfg_hr)}, ++ + #endif /* CONFIG_IWLMVM */ + + {0} diff --git a/queue-4.14/iwlwifi-fix-pci-ids-and-configuration-mapping-for-9000-series.patch b/queue-4.14/iwlwifi-fix-pci-ids-and-configuration-mapping-for-9000-series.patch new file mode 100644 index 00000000000..8deb8ae34e5 --- /dev/null +++ b/queue-4.14/iwlwifi-fix-pci-ids-and-configuration-mapping-for-9000-series.patch @@ -0,0 +1,299 @@ +From dbc89253a7e15f8f031fb1eeb956de91204655e3 Mon Sep 17 00:00:00 2001 +From: Luca Coelho +Date: Wed, 15 Nov 2017 18:28:04 +0200 +Subject: iwlwifi: fix PCI IDs and configuration mapping for 9000 series + +From: Luca Coelho + +commit dbc89253a7e15f8f031fb1eeb956de91204655e3 upstream. + +A lot of PCI IDs were missing and there were some problems with the +configuration and firmware selection for devices on the 9000 series. +Fix the firmware selection by adding files for the B-steps; add +configuration for some integrated devices; and add a bunch of PCI IDs +(mostly for integrated devices) that were missing from the driver's +list. + +Without this patch, a lot of devices will not be recognized or will +try to load the wrong firmware file. + +Signed-off-by: Luca Coelho +Cc: Thomas Backlund +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/intel/iwlwifi/cfg/9000.c | 67 +++++++++++- + drivers/net/wireless/intel/iwlwifi/iwl-config.h | 5 + drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 132 ++++++++++++++++++------ + 3 files changed, 170 insertions(+), 34 deletions(-) + +--- a/drivers/net/wireless/intel/iwlwifi/cfg/9000.c ++++ b/drivers/net/wireless/intel/iwlwifi/cfg/9000.c +@@ -72,12 +72,15 @@ + #define IWL9000_SMEM_OFFSET 0x400000 + #define IWL9000_SMEM_LEN 0x68000 + +-#define IWL9000_FW_PRE "iwlwifi-9000-pu-a0-jf-a0-" ++#define IWL9000A_FW_PRE "iwlwifi-9000-pu-a0-jf-a0-" ++#define IWL9000B_FW_PRE "iwlwifi-9000-pu-b0-jf-b0-" + #define IWL9000RFB_FW_PRE "iwlwifi-9000-pu-a0-jf-b0-" + #define IWL9260A_FW_PRE "iwlwifi-9260-th-a0-jf-a0-" + #define IWL9260B_FW_PRE "iwlwifi-9260-th-b0-jf-b0-" +-#define IWL9000_MODULE_FIRMWARE(api) \ +- IWL9000_FW_PRE "-" __stringify(api) ".ucode" ++#define IWL9000A_MODULE_FIRMWARE(api) \ ++ IWL9000A_FW_PRE __stringify(api) ".ucode" ++#define IWL9000B_MODULE_FIRMWARE(api) \ ++ IWL9000B_FW_PRE __stringify(api) ".ucode" + #define IWL9000RFB_MODULE_FIRMWARE(api) \ + IWL9000RFB_FW_PRE __stringify(api) ".ucode" + #define IWL9260A_MODULE_FIRMWARE(api) \ +@@ -193,7 +196,48 @@ const struct iwl_cfg iwl9460_2ac_cfg = { + .nvm_ver = IWL9000_NVM_VERSION, + .nvm_calib_ver = IWL9000_TX_POWER_VERSION, + .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K, ++}; ++ ++const struct iwl_cfg iwl9460_2ac_cfg_soc = { ++ .name = "Intel(R) Dual Band Wireless AC 9460", ++ .fw_name_pre = IWL9000A_FW_PRE, ++ .fw_name_pre_b_or_c_step = IWL9000B_FW_PRE, ++ .fw_name_pre_rf_next_step = IWL9000RFB_FW_PRE, ++ IWL_DEVICE_9000, ++ .ht_params = &iwl9000_ht_params, ++ .nvm_ver = IWL9000_NVM_VERSION, ++ .nvm_calib_ver = IWL9000_TX_POWER_VERSION, ++ .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K, + .integrated = true, ++ .soc_latency = 5000, ++}; ++ ++const struct iwl_cfg iwl9461_2ac_cfg_soc = { ++ .name = "Intel(R) Dual Band Wireless AC 9461", ++ .fw_name_pre = IWL9000A_FW_PRE, ++ .fw_name_pre_b_or_c_step = IWL9000B_FW_PRE, ++ .fw_name_pre_rf_next_step = IWL9000RFB_FW_PRE, ++ IWL_DEVICE_9000, ++ .ht_params = &iwl9000_ht_params, ++ .nvm_ver = IWL9000_NVM_VERSION, ++ .nvm_calib_ver = IWL9000_TX_POWER_VERSION, ++ .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K, ++ .integrated = true, ++ .soc_latency = 5000, ++}; ++ ++const struct iwl_cfg iwl9462_2ac_cfg_soc = { ++ .name = "Intel(R) Dual Band Wireless AC 9462", ++ .fw_name_pre = IWL9000A_FW_PRE, ++ .fw_name_pre_b_or_c_step = IWL9000B_FW_PRE, ++ .fw_name_pre_rf_next_step = IWL9000RFB_FW_PRE, ++ IWL_DEVICE_9000, ++ .ht_params = &iwl9000_ht_params, ++ .nvm_ver = IWL9000_NVM_VERSION, ++ .nvm_calib_ver = IWL9000_TX_POWER_VERSION, ++ .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K, ++ .integrated = true, ++ .soc_latency = 5000, + }; + + const struct iwl_cfg iwl9560_2ac_cfg = { +@@ -205,10 +249,23 @@ const struct iwl_cfg iwl9560_2ac_cfg = { + .nvm_ver = IWL9000_NVM_VERSION, + .nvm_calib_ver = IWL9000_TX_POWER_VERSION, + .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K, +- .integrated = true, + }; + +-MODULE_FIRMWARE(IWL9000_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX)); ++const struct iwl_cfg iwl9560_2ac_cfg_soc = { ++ .name = "Intel(R) Dual Band Wireless AC 9560", ++ .fw_name_pre = IWL9000A_FW_PRE, ++ .fw_name_pre_b_or_c_step = IWL9000B_FW_PRE, ++ .fw_name_pre_rf_next_step = IWL9000RFB_FW_PRE, ++ IWL_DEVICE_9000, ++ .ht_params = &iwl9000_ht_params, ++ .nvm_ver = IWL9000_NVM_VERSION, ++ .nvm_calib_ver = IWL9000_TX_POWER_VERSION, ++ .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K, ++ .integrated = true, ++ .soc_latency = 5000, ++}; ++MODULE_FIRMWARE(IWL9000A_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX)); ++MODULE_FIRMWARE(IWL9000B_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX)); + MODULE_FIRMWARE(IWL9000RFB_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX)); + MODULE_FIRMWARE(IWL9260A_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX)); + MODULE_FIRMWARE(IWL9260B_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX)); +--- a/drivers/net/wireless/intel/iwlwifi/iwl-config.h ++++ b/drivers/net/wireless/intel/iwlwifi/iwl-config.h +@@ -364,6 +364,7 @@ struct iwl_cfg { + u32 dccm2_len; + u32 smem_offset; + u32 smem_len; ++ u32 soc_latency; + u16 nvm_ver; + u16 nvm_calib_ver; + u16 rx_with_siso_diversity:1, +@@ -471,6 +472,10 @@ extern const struct iwl_cfg iwl9260_2ac_ + extern const struct iwl_cfg iwl9270_2ac_cfg; + extern const struct iwl_cfg iwl9460_2ac_cfg; + extern const struct iwl_cfg iwl9560_2ac_cfg; ++extern const struct iwl_cfg iwl9460_2ac_cfg_soc; ++extern const struct iwl_cfg iwl9461_2ac_cfg_soc; ++extern const struct iwl_cfg iwl9462_2ac_cfg_soc; ++extern const struct iwl_cfg iwl9560_2ac_cfg_soc; + extern const struct iwl_cfg iwla000_2ac_cfg_hr; + extern const struct iwl_cfg iwla000_2ac_cfg_hr_cdb; + extern const struct iwl_cfg iwla000_2ac_cfg_jf; +--- a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c ++++ b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c +@@ -533,47 +533,121 @@ static const struct pci_device_id iwl_hw + {IWL_PCI_DEVICE(0x2526, 0x0238, iwl9560_2ac_cfg)}, + {IWL_PCI_DEVICE(0x2526, 0x023C, iwl9560_2ac_cfg)}, + {IWL_PCI_DEVICE(0x2526, 0x0260, iwl9460_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2526, 0x0264, iwl9461_2ac_cfg_soc)}, + {IWL_PCI_DEVICE(0x2526, 0x02A0, iwl9460_2ac_cfg)}, + {IWL_PCI_DEVICE(0x2526, 0x02A4, iwl9460_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2526, 0x1010, iwl9260_2ac_cfg)}, + {IWL_PCI_DEVICE(0x2526, 0x1030, iwl9560_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2526, 0x1210, iwl9260_2ac_cfg)}, + {IWL_PCI_DEVICE(0x2526, 0x1410, iwl9270_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x2526, 0x1420, iwl9460_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2526, 0x1420, iwl9460_2ac_cfg_soc)}, + {IWL_PCI_DEVICE(0x2526, 0x1610, iwl9270_2ac_cfg)}, + {IWL_PCI_DEVICE(0x2526, 0x4010, iwl9260_2ac_cfg)}, + {IWL_PCI_DEVICE(0x2526, 0x4030, iwl9560_2ac_cfg)}, + {IWL_PCI_DEVICE(0x2526, 0x40A4, iwl9460_2ac_cfg)}, + {IWL_PCI_DEVICE(0x2526, 0xA014, iwl9260_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2526, 0x42A4, iwl9462_2ac_cfg_soc)}, + {IWL_PCI_DEVICE(0x271B, 0x0010, iwl9160_2ac_cfg)}, + {IWL_PCI_DEVICE(0x271B, 0x0014, iwl9160_2ac_cfg)}, + {IWL_PCI_DEVICE(0x271B, 0x0210, iwl9160_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x30DC, 0x0060, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x31DC, 0x0030, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x31DC, 0x0034, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x31DC, 0x0038, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x31DC, 0x003C, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x31DC, 0x0060, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x9DF0, 0x0000, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x9DF0, 0x0010, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x9DF0, 0x0030, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x9DF0, 0x0034, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x9DF0, 0x0038, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x9DF0, 0x003C, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x9DF0, 0x0060, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x9DF0, 0x0210, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x9DF0, 0x0310, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x9DF0, 0x0410, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x9DF0, 0x0510, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x9DF0, 0x0610, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x9DF0, 0x0710, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x9DF0, 0x0A10, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x9DF0, 0x2010, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x9DF0, 0x2A10, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0xA370, 0x0030, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0xA370, 0x0034, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0xA370, 0x0038, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0xA370, 0x003C, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0xA370, 0x0060, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0xA370, 0x1030, iwl9560_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x271B, 0x0214, iwl9260_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2720, 0x0034, iwl9560_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2720, 0x0038, iwl9560_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2720, 0x003C, iwl9560_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2720, 0x0060, iwl9461_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x2720, 0x0064, iwl9461_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x2720, 0x00A0, iwl9462_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x2720, 0x00A4, iwl9462_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x2720, 0x0230, iwl9560_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2720, 0x0234, iwl9560_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2720, 0x0238, iwl9560_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2720, 0x023C, iwl9560_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2720, 0x0260, iwl9461_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x2720, 0x0264, iwl9461_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x2720, 0x02A0, iwl9462_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x2720, 0x02A4, iwl9462_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x2720, 0x4030, iwl9560_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2720, 0x40A4, iwl9462_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x30DC, 0x0060, iwl9460_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x30DC, 0x0064, iwl9461_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x30DC, 0x00A0, iwl9462_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x30DC, 0x00A4, iwl9462_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x30DC, 0x0260, iwl9461_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x30DC, 0x0264, iwl9461_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x30DC, 0x02A0, iwl9462_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x30DC, 0x02A4, iwl9462_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x31DC, 0x0030, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x31DC, 0x0034, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x31DC, 0x0038, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x31DC, 0x003C, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x31DC, 0x0060, iwl9460_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x31DC, 0x0064, iwl9461_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x31DC, 0x00A0, iwl9462_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x31DC, 0x00A4, iwl9462_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x31DC, 0x0230, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x31DC, 0x0234, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x31DC, 0x0238, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x31DC, 0x023C, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x31DC, 0x0260, iwl9461_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x31DC, 0x0264, iwl9461_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x31DC, 0x02A0, iwl9462_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x31DC, 0x02A4, iwl9462_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x31DC, 0x4030, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x31DC, 0x4034, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x31DC, 0x40A4, iwl9462_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x34F0, 0x0030, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x34F0, 0x0034, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x34F0, 0x02A4, iwl9462_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x0000, iwl9460_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x0010, iwl9460_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x0030, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x0034, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x0038, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x003C, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x0060, iwl9460_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x0064, iwl9461_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x00A0, iwl9462_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x00A4, iwl9462_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x0210, iwl9460_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x0230, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x0234, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x0238, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x023C, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x0260, iwl9461_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x0264, iwl9461_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x02A0, iwl9462_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x02A4, iwl9462_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x0310, iwl9460_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x0410, iwl9460_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x0510, iwl9460_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x0610, iwl9460_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x0710, iwl9460_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x0A10, iwl9460_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x2010, iwl9460_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x2A10, iwl9460_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x4030, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x4034, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x40A4, iwl9462_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0xA370, 0x0030, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0xA370, 0x0034, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0xA370, 0x0038, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0xA370, 0x003C, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0xA370, 0x0060, iwl9460_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0xA370, 0x0064, iwl9461_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0xA370, 0x00A0, iwl9462_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0xA370, 0x00A4, iwl9462_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0xA370, 0x0230, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0xA370, 0x0234, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0xA370, 0x0238, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0xA370, 0x023C, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0xA370, 0x0260, iwl9461_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0xA370, 0x0264, iwl9461_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0xA370, 0x02A0, iwl9462_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0xA370, 0x02A4, iwl9462_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0xA370, 0x1030, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0xA370, 0x4030, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0xA370, 0x4034, iwl9560_2ac_cfg_soc)}, ++ {IWL_PCI_DEVICE(0xA370, 0x40A4, iwl9462_2ac_cfg_soc)}, + + /* a000 Series */ + {IWL_PCI_DEVICE(0x2720, 0x0A10, iwla000_2ac_cfg_hr_cdb)}, diff --git a/queue-4.14/iwlwifi-fix-wrong-struct-for-a000-device.patch b/queue-4.14/iwlwifi-fix-wrong-struct-for-a000-device.patch new file mode 100644 index 00000000000..1452305e990 --- /dev/null +++ b/queue-4.14/iwlwifi-fix-wrong-struct-for-a000-device.patch @@ -0,0 +1,33 @@ +From f7f5873bbd45a67d3097dfb55237ade2ad520184 Mon Sep 17 00:00:00 2001 +From: Oren Givon +Date: Mon, 28 Aug 2017 10:33:38 +0300 +Subject: iwlwifi: fix wrong struct for a000 device + +From: Oren Givon + +commit f7f5873bbd45a67d3097dfb55237ade2ad520184 upstream. + +The PCI ID (0x2720, 0x0070) was set with the config struct +iwla000_2ax_cfg_hr instead of iwla000_2ac_cfg_hr_cdb. + +Fixes: 175b87c69253 ("iwlwifi: add the new a000_2ax series") +Signed-off-by: Oren Givon +Signed-off-by: Luca Coelho +Cc: Thomas Backlund +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c ++++ b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c +@@ -576,7 +576,7 @@ static const struct pci_device_id iwl_hw + {IWL_PCI_DEVICE(0x2720, 0x0000, iwla000_2ax_cfg_hr)}, + {IWL_PCI_DEVICE(0x34F0, 0x0070, iwla000_2ax_cfg_hr)}, + {IWL_PCI_DEVICE(0x2720, 0x0078, iwla000_2ax_cfg_hr)}, +- {IWL_PCI_DEVICE(0x2720, 0x0070, iwla000_2ax_cfg_hr)}, ++ {IWL_PCI_DEVICE(0x2720, 0x0070, iwla000_2ac_cfg_hr_cdb)}, + {IWL_PCI_DEVICE(0x2720, 0x1080, iwla000_2ax_cfg_hr)}, + #endif /* CONFIG_IWLMVM */ + diff --git a/queue-4.14/iwlwifi-mvm-support-version-7-of-the-scan_req_umac-fw-command.patch b/queue-4.14/iwlwifi-mvm-support-version-7-of-the-scan_req_umac-fw-command.patch new file mode 100644 index 00000000000..e15e2ec9613 --- /dev/null +++ b/queue-4.14/iwlwifi-mvm-support-version-7-of-the-scan_req_umac-fw-command.patch @@ -0,0 +1,319 @@ +From dac4df1c5f2c34903f61b1bc4fc722e31b4199e7 Mon Sep 17 00:00:00 2001 +From: Luca Coelho +Date: Fri, 10 Nov 2017 14:03:36 +0200 +Subject: iwlwifi: mvm: support version 7 of the SCAN_REQ_UMAC FW command + +From: Luca Coelho + +commit dac4df1c5f2c34903f61b1bc4fc722e31b4199e7 upstream. + +Newer firmware versions (such as iwlwifi-8000C-34.ucode) have +introduced an API change in the SCAN_REQ_UMAC command that is not +backwards compatible. The driver needs to detect and use the new API +format when the firmware reports it, otherwise the scan command will +not work properly, causing a command timeout. + +Fix this by adding a TLV that tells the driver that the new API is in +use and use the correct structures for it. + +This fixes https://bugzilla.kernel.org/show_bug.cgi?id=197591 + +Fixes: d7a5b3e9e42e ("iwlwifi: mvm: bump API to 34 for 8000 and up") +Signed-off-by: Luca Coelho +Cc: Thomas Backlund +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/intel/iwlwifi/fw/api/scan.h | 59 ++++++++++++--- + drivers/net/wireless/intel/iwlwifi/fw/file.h | 1 + drivers/net/wireless/intel/iwlwifi/mvm/mvm.h | 6 + + drivers/net/wireless/intel/iwlwifi/mvm/scan.c | 86 +++++++++++++++++------ + 4 files changed, 118 insertions(+), 34 deletions(-) + +--- a/drivers/net/wireless/intel/iwlwifi/fw/api/scan.h ++++ b/drivers/net/wireless/intel/iwlwifi/fw/api/scan.h +@@ -531,6 +531,8 @@ struct iwl_scan_config_v1 { + } __packed; /* SCAN_CONFIG_DB_CMD_API_S */ + + #define SCAN_TWO_LMACS 2 ++#define SCAN_LB_LMAC_IDX 0 ++#define SCAN_HB_LMAC_IDX 1 + + struct iwl_scan_config { + __le32 flags; +@@ -578,6 +580,7 @@ enum iwl_umac_scan_general_flags { + IWL_UMAC_SCAN_GEN_FLAGS_MATCH = BIT(9), + IWL_UMAC_SCAN_GEN_FLAGS_EXTENDED_DWELL = BIT(10), + IWL_UMAC_SCAN_GEN_FLAGS_LMAC2_FRAGMENTED = BIT(11), ++ IWL_UMAC_SCAN_GEN_FLAGS_ADAPTIVE_DWELL = BIT(13), + }; + + /** +@@ -631,12 +634,17 @@ struct iwl_scan_req_umac_tail { + * @uid: scan id, &enum iwl_umac_scan_uid_offsets + * @ooc_priority: out of channel priority - &enum iwl_scan_priority + * @general_flags: &enum iwl_umac_scan_general_flags +- * @reserved2: for future use and alignment + * @scan_start_mac_id: report the scan start TSF time according to this mac TSF + * @extended_dwell: dwell time for channels 1, 6 and 11 + * @active_dwell: dwell time for active scan + * @passive_dwell: dwell time for passive scan + * @fragmented_dwell: dwell time for fragmented passive scan ++ * @adwell_default_n_aps: for adaptive dwell the default number of APs ++ * per channel ++ * @adwell_default_n_aps_social: for adaptive dwell the default ++ * number of APs per social (1,6,11) channel ++ * @adwell_max_budget: for adaptive dwell the maximal budget of TU to be added ++ * to total scan time + * @max_out_time: max out of serving channel time, per LMAC - for CDB there + * are 2 LMACs + * @suspend_time: max suspend time, per LMAC - for CDB there are 2 LMACs +@@ -644,6 +652,8 @@ struct iwl_scan_req_umac_tail { + * @channel_flags: &enum iwl_scan_channel_flags + * @n_channels: num of channels in scan request + * @reserved: for future use and alignment ++ * @reserved2: for future use and alignment ++ * @reserved3: for future use and alignment + * @data: &struct iwl_scan_channel_cfg_umac and + * &struct iwl_scan_req_umac_tail + */ +@@ -651,41 +661,64 @@ struct iwl_scan_req_umac { + __le32 flags; + __le32 uid; + __le32 ooc_priority; +- /* SCAN_GENERAL_PARAMS_API_S_VER_4 */ + __le16 general_flags; +- u8 reserved2; ++ u8 reserved; + u8 scan_start_mac_id; +- u8 extended_dwell; +- u8 active_dwell; +- u8 passive_dwell; +- u8 fragmented_dwell; + union { + struct { ++ u8 extended_dwell; ++ u8 active_dwell; ++ u8 passive_dwell; ++ u8 fragmented_dwell; + __le32 max_out_time; + __le32 suspend_time; + __le32 scan_priority; +- /* SCAN_CHANNEL_PARAMS_API_S_VER_4 */ ++ /* SCAN_CHANNEL_PARAMS_API_S_VER_1 */ + u8 channel_flags; + u8 n_channels; +- __le16 reserved; ++ __le16 reserved2; + u8 data[]; + } v1; /* SCAN_REQUEST_CMD_UMAC_API_S_VER_1 */ + struct { ++ u8 extended_dwell; ++ u8 active_dwell; ++ u8 passive_dwell; ++ u8 fragmented_dwell; + __le32 max_out_time[SCAN_TWO_LMACS]; + __le32 suspend_time[SCAN_TWO_LMACS]; + __le32 scan_priority; +- /* SCAN_CHANNEL_PARAMS_API_S_VER_4 */ ++ /* SCAN_CHANNEL_PARAMS_API_S_VER_1 */ + u8 channel_flags; + u8 n_channels; +- __le16 reserved; ++ __le16 reserved2; + u8 data[]; + } v6; /* SCAN_REQUEST_CMD_UMAC_API_S_VER_6 */ ++ struct { ++ u8 active_dwell; ++ u8 passive_dwell; ++ u8 fragmented_dwell; ++ u8 adwell_default_n_aps; ++ u8 adwell_default_n_aps_social; ++ u8 reserved3; ++ __le16 adwell_max_budget; ++ __le32 max_out_time[SCAN_TWO_LMACS]; ++ __le32 suspend_time[SCAN_TWO_LMACS]; ++ __le32 scan_priority; ++ /* SCAN_CHANNEL_PARAMS_API_S_VER_1 */ ++ u8 channel_flags; ++ u8 n_channels; ++ __le16 reserved2; ++ u8 data[]; ++ } v7; /* SCAN_REQUEST_CMD_UMAC_API_S_VER_7 */ + }; + } __packed; + +-#define IWL_SCAN_REQ_UMAC_SIZE sizeof(struct iwl_scan_req_umac) ++#define IWL_SCAN_REQ_UMAC_SIZE_V7 sizeof(struct iwl_scan_req_umac) ++#define IWL_SCAN_REQ_UMAC_SIZE_V6 (sizeof(struct iwl_scan_req_umac) - \ ++ 2 * sizeof(u8) - sizeof(__le16)) + #define IWL_SCAN_REQ_UMAC_SIZE_V1 (sizeof(struct iwl_scan_req_umac) - \ +- 2 * sizeof(__le32)) ++ 2 * sizeof(__le32) - 2 * sizeof(u8) - \ ++ sizeof(__le16)) + + /** + * struct iwl_umac_scan_abort +--- a/drivers/net/wireless/intel/iwlwifi/fw/file.h ++++ b/drivers/net/wireless/intel/iwlwifi/fw/file.h +@@ -262,6 +262,7 @@ enum iwl_ucode_tlv_api { + IWL_UCODE_TLV_API_STA_TYPE = (__force iwl_ucode_tlv_api_t)30, + IWL_UCODE_TLV_API_NAN2_VER2 = (__force iwl_ucode_tlv_api_t)31, + /* API Set 1 */ ++ IWL_UCODE_TLV_API_ADAPTIVE_DWELL = (__force iwl_ucode_tlv_api_t)32, + IWL_UCODE_TLV_API_NEW_BEACON_TEMPLATE = (__force iwl_ucode_tlv_api_t)34, + IWL_UCODE_TLV_API_NEW_RX_STATS = (__force iwl_ucode_tlv_api_t)35, + IWL_UCODE_TLV_API_COEX_ATS_EXTERNAL = (__force iwl_ucode_tlv_api_t)37, +--- a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h ++++ b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h +@@ -1124,6 +1124,12 @@ static inline bool iwl_mvm_is_d0i3_suppo + IWL_UCODE_TLV_CAPA_D0I3_SUPPORT); + } + ++static inline bool iwl_mvm_is_adaptive_dwell_supported(struct iwl_mvm *mvm) ++{ ++ return fw_has_api(&mvm->fw->ucode_capa, ++ IWL_UCODE_TLV_API_ADAPTIVE_DWELL); ++} ++ + static inline bool iwl_mvm_enter_d0i3_on_suspend(struct iwl_mvm *mvm) + { + /* For now we only use this mode to differentiate between +--- a/drivers/net/wireless/intel/iwlwifi/mvm/scan.c ++++ b/drivers/net/wireless/intel/iwlwifi/mvm/scan.c +@@ -130,6 +130,19 @@ struct iwl_mvm_scan_params { + u32 measurement_dwell; + }; + ++static inline void *iwl_mvm_get_scan_req_umac_data(struct iwl_mvm *mvm) ++{ ++ struct iwl_scan_req_umac *cmd = mvm->scan_cmd; ++ ++ if (iwl_mvm_is_adaptive_dwell_supported(mvm)) ++ return (void *)&cmd->v7.data; ++ ++ if (iwl_mvm_has_new_tx_api(mvm)) ++ return (void *)&cmd->v6.data; ++ ++ return (void *)&cmd->v1.data; ++} ++ + static u8 iwl_mvm_scan_rx_ant(struct iwl_mvm *mvm) + { + if (mvm->scan_rx_ant != ANT_NONE) +@@ -1075,25 +1088,57 @@ static void iwl_mvm_scan_umac_dwell(stru + { + struct iwl_mvm_scan_timing_params *timing = &scan_timing[params->type]; + ++ if (iwl_mvm_is_regular_scan(params)) ++ cmd->ooc_priority = cpu_to_le32(IWL_SCAN_PRIORITY_EXT_6); ++ else ++ cmd->ooc_priority = cpu_to_le32(IWL_SCAN_PRIORITY_EXT_2); ++ ++ if (iwl_mvm_is_adaptive_dwell_supported(mvm)) { ++ if (params->measurement_dwell) { ++ cmd->v7.active_dwell = params->measurement_dwell; ++ cmd->v7.passive_dwell = params->measurement_dwell; ++ } else { ++ cmd->v7.active_dwell = IWL_SCAN_DWELL_ACTIVE; ++ cmd->v7.passive_dwell = IWL_SCAN_DWELL_PASSIVE; ++ } ++ cmd->v7.fragmented_dwell = IWL_SCAN_DWELL_FRAGMENTED; ++ ++ cmd->v7.scan_priority = cpu_to_le32(IWL_SCAN_PRIORITY_EXT_6); ++ cmd->v7.max_out_time[SCAN_LB_LMAC_IDX] = ++ cpu_to_le32(timing->max_out_time); ++ cmd->v7.suspend_time[SCAN_LB_LMAC_IDX] = ++ cpu_to_le32(timing->suspend_time); ++ if (iwl_mvm_is_cdb_supported(mvm)) { ++ cmd->v7.max_out_time[SCAN_HB_LMAC_IDX] = ++ cpu_to_le32(timing->max_out_time); ++ cmd->v7.suspend_time[SCAN_HB_LMAC_IDX] = ++ cpu_to_le32(timing->suspend_time); ++ } ++ ++ return; ++ } ++ + if (params->measurement_dwell) { +- cmd->active_dwell = params->measurement_dwell; +- cmd->passive_dwell = params->measurement_dwell; +- cmd->extended_dwell = params->measurement_dwell; ++ cmd->v1.active_dwell = params->measurement_dwell; ++ cmd->v1.passive_dwell = params->measurement_dwell; ++ cmd->v1.extended_dwell = params->measurement_dwell; + } else { +- cmd->active_dwell = IWL_SCAN_DWELL_ACTIVE; +- cmd->passive_dwell = IWL_SCAN_DWELL_PASSIVE; +- cmd->extended_dwell = IWL_SCAN_DWELL_EXTENDED; ++ cmd->v1.active_dwell = IWL_SCAN_DWELL_ACTIVE; ++ cmd->v1.passive_dwell = IWL_SCAN_DWELL_PASSIVE; ++ cmd->v1.extended_dwell = IWL_SCAN_DWELL_EXTENDED; + } +- cmd->fragmented_dwell = IWL_SCAN_DWELL_FRAGMENTED; ++ cmd->v1.fragmented_dwell = IWL_SCAN_DWELL_FRAGMENTED; + + if (iwl_mvm_has_new_tx_api(mvm)) { + cmd->v6.scan_priority = cpu_to_le32(IWL_SCAN_PRIORITY_EXT_6); +- cmd->v6.max_out_time[0] = cpu_to_le32(timing->max_out_time); +- cmd->v6.suspend_time[0] = cpu_to_le32(timing->suspend_time); ++ cmd->v6.max_out_time[SCAN_LB_LMAC_IDX] = ++ cpu_to_le32(timing->max_out_time); ++ cmd->v6.suspend_time[SCAN_LB_LMAC_IDX] = ++ cpu_to_le32(timing->suspend_time); + if (iwl_mvm_is_cdb_supported(mvm)) { +- cmd->v6.max_out_time[1] = ++ cmd->v6.max_out_time[SCAN_HB_LMAC_IDX] = + cpu_to_le32(timing->max_out_time); +- cmd->v6.suspend_time[1] = ++ cmd->v6.suspend_time[SCAN_HB_LMAC_IDX] = + cpu_to_le32(timing->suspend_time); + } + } else { +@@ -1102,11 +1147,6 @@ static void iwl_mvm_scan_umac_dwell(stru + cmd->v1.scan_priority = + cpu_to_le32(IWL_SCAN_PRIORITY_EXT_6); + } +- +- if (iwl_mvm_is_regular_scan(params)) +- cmd->ooc_priority = cpu_to_le32(IWL_SCAN_PRIORITY_EXT_6); +- else +- cmd->ooc_priority = cpu_to_le32(IWL_SCAN_PRIORITY_EXT_2); + } + + static void +@@ -1178,8 +1218,7 @@ static int iwl_mvm_scan_umac(struct iwl_ + int type) + { + struct iwl_scan_req_umac *cmd = mvm->scan_cmd; +- void *cmd_data = iwl_mvm_has_new_tx_api(mvm) ? +- (void *)&cmd->v6.data : (void *)&cmd->v1.data; ++ void *cmd_data = iwl_mvm_get_scan_req_umac_data(mvm); + struct iwl_scan_req_umac_tail *sec_part = cmd_data + + sizeof(struct iwl_scan_channel_cfg_umac) * + mvm->fw->ucode_capa.n_scan_channels; +@@ -1216,7 +1255,10 @@ static int iwl_mvm_scan_umac(struct iwl_ + IWL_SCAN_CHANNEL_FLAG_EBS_ACCURATE | + IWL_SCAN_CHANNEL_FLAG_CACHE_ADD; + +- if (iwl_mvm_has_new_tx_api(mvm)) { ++ if (iwl_mvm_is_adaptive_dwell_supported(mvm)) { ++ cmd->v7.channel_flags = channel_flags; ++ cmd->v7.n_channels = params->n_channels; ++ } else if (iwl_mvm_has_new_tx_api(mvm)) { + cmd->v6.channel_flags = channel_flags; + cmd->v6.n_channels = params->n_channels; + } else { +@@ -1661,8 +1703,10 @@ int iwl_mvm_scan_size(struct iwl_mvm *mv + { + int base_size = IWL_SCAN_REQ_UMAC_SIZE_V1; + +- if (iwl_mvm_has_new_tx_api(mvm)) +- base_size = IWL_SCAN_REQ_UMAC_SIZE; ++ if (iwl_mvm_is_adaptive_dwell_supported(mvm)) ++ base_size = IWL_SCAN_REQ_UMAC_SIZE_V7; ++ else if (iwl_mvm_has_new_tx_api(mvm)) ++ base_size = IWL_SCAN_REQ_UMAC_SIZE_V6; + + if (fw_has_capa(&mvm->fw->ucode_capa, IWL_UCODE_TLV_CAPA_UMAC_SCAN)) + return base_size + diff --git a/queue-4.14/iwlwifi-pcie-sort-ids-for-the-9000-series-for-easier-comparisons.patch b/queue-4.14/iwlwifi-pcie-sort-ids-for-the-9000-series-for-easier-comparisons.patch new file mode 100644 index 00000000000..dc2d8d00e98 --- /dev/null +++ b/queue-4.14/iwlwifi-pcie-sort-ids-for-the-9000-series-for-easier-comparisons.patch @@ -0,0 +1,131 @@ +From 1105a337375258515ed09b92a83fd7bfd6775958 Mon Sep 17 00:00:00 2001 +From: Luca Coelho +Date: Thu, 12 Oct 2017 11:20:50 +0300 +Subject: iwlwifi: pcie: sort IDs for the 9000 series for easier comparisons + +From: Luca Coelho + +commit 1105a337375258515ed09b92a83fd7bfd6775958 upstream. + +It's hard to find values that are missing in the list, so sorting the +values and comparing them makes it much easier. To simplify this +task, sort the devices in the list. + +Signed-off-by: Luca Coelho +Cc: Thomas Backlund +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 84 +++++++++++++------------- + 1 file changed, 42 insertions(+), 42 deletions(-) + +--- a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c ++++ b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c +@@ -510,65 +510,65 @@ static const struct pci_device_id iwl_hw + {IWL_PCI_DEVICE(0x24FD, 0x0012, iwl8275_2ac_cfg)}, + + /* 9000 Series */ +- {IWL_PCI_DEVICE(0x271B, 0x0010, iwl9160_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x271B, 0x0014, iwl9160_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x271B, 0x0210, iwl9160_2ac_cfg)}, + {IWL_PCI_DEVICE(0x2526, 0x0000, iwl9260_2ac_cfg)}, + {IWL_PCI_DEVICE(0x2526, 0x0010, iwl9260_2ac_cfg)}, + {IWL_PCI_DEVICE(0x2526, 0x0014, iwl9260_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x2526, 0xA014, iwl9260_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x2526, 0x4010, iwl9260_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2526, 0x0030, iwl9560_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2526, 0x0034, iwl9560_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2526, 0x0038, iwl9560_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2526, 0x003C, iwl9560_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2526, 0x0060, iwl9460_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2526, 0x0064, iwl9460_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2526, 0x00A0, iwl9460_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2526, 0x00A4, iwl9460_2ac_cfg)}, + {IWL_PCI_DEVICE(0x2526, 0x0210, iwl9260_2ac_cfg)}, + {IWL_PCI_DEVICE(0x2526, 0x0214, iwl9260_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2526, 0x0230, iwl9560_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2526, 0x0234, iwl9560_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2526, 0x0238, iwl9560_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2526, 0x023C, iwl9560_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2526, 0x0260, iwl9460_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2526, 0x02A0, iwl9460_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2526, 0x02A4, iwl9460_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2526, 0x1030, iwl9560_2ac_cfg)}, + {IWL_PCI_DEVICE(0x2526, 0x1410, iwl9270_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2526, 0x1420, iwl9460_2ac_cfg)}, + {IWL_PCI_DEVICE(0x2526, 0x1610, iwl9270_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x9DF0, 0x0A10, iwl9460_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2526, 0x4010, iwl9260_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2526, 0x4030, iwl9560_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2526, 0x40A4, iwl9460_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x2526, 0xA014, iwl9260_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x271B, 0x0010, iwl9160_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x271B, 0x0014, iwl9160_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x271B, 0x0210, iwl9160_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x30DC, 0x0060, iwl9460_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x31DC, 0x0030, iwl9560_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x31DC, 0x0034, iwl9560_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x31DC, 0x0038, iwl9560_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x31DC, 0x003C, iwl9560_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x31DC, 0x0060, iwl9460_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x0000, iwl9460_2ac_cfg)}, + {IWL_PCI_DEVICE(0x9DF0, 0x0010, iwl9460_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x0030, iwl9560_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x0034, iwl9560_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x0038, iwl9560_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x003C, iwl9560_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x0060, iwl9460_2ac_cfg)}, + {IWL_PCI_DEVICE(0x9DF0, 0x0210, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x9DF0, 0x0410, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x9DF0, 0x0610, iwl9460_2ac_cfg)}, + {IWL_PCI_DEVICE(0x9DF0, 0x0310, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x9DF0, 0x0000, iwl9460_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x0410, iwl9460_2ac_cfg)}, + {IWL_PCI_DEVICE(0x9DF0, 0x0510, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x9DF0, 0x2010, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x2526, 0x1420, iwl9460_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x0610, iwl9460_2ac_cfg)}, + {IWL_PCI_DEVICE(0x9DF0, 0x0710, iwl9460_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x0A10, iwl9460_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0x9DF0, 0x2010, iwl9460_2ac_cfg)}, + {IWL_PCI_DEVICE(0x9DF0, 0x2A10, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x30DC, 0x0060, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x2526, 0x0060, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x2526, 0x0260, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x2526, 0x0064, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x2526, 0x00A4, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x2526, 0x40A4, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x2526, 0x02A4, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x2526, 0x00A0, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x2526, 0x02A0, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x9DF0, 0x0060, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0xA370, 0x0060, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x31DC, 0x0060, iwl9460_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x2526, 0x0030, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x2526, 0x4030, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x2526, 0x0230, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x2526, 0x0234, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x2526, 0x0238, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x2526, 0x023C, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x9DF0, 0x0030, iwl9560_2ac_cfg)}, + {IWL_PCI_DEVICE(0xA370, 0x0030, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x31DC, 0x0030, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x2526, 0x1030, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0xA370, 0x1030, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x9DF0, 0x0034, iwl9560_2ac_cfg)}, + {IWL_PCI_DEVICE(0xA370, 0x0034, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x31DC, 0x0034, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x2526, 0x0038, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x2526, 0x003C, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x9DF0, 0x0038, iwl9560_2ac_cfg)}, + {IWL_PCI_DEVICE(0xA370, 0x0038, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x31DC, 0x0038, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x9DF0, 0x003C, iwl9560_2ac_cfg)}, + {IWL_PCI_DEVICE(0xA370, 0x003C, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x31DC, 0x003C, iwl9560_2ac_cfg)}, +- {IWL_PCI_DEVICE(0x2526, 0x0034, iwl9560_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0xA370, 0x0060, iwl9460_2ac_cfg)}, ++ {IWL_PCI_DEVICE(0xA370, 0x1030, iwl9560_2ac_cfg)}, + + /* a000 Series */ + {IWL_PCI_DEVICE(0x2720, 0x0A10, iwla000_2ac_cfg_hr_cdb)}, diff --git a/queue-4.14/series b/queue-4.14/series index 8619b1390bb..d8c401f02b1 100644 --- a/queue-4.14/series +++ b/queue-4.14/series @@ -178,3 +178,11 @@ media-venus-fix-wrong-size-on-dma_free.patch media-venus-venc-fix-bytesused-v4l2_plane-field.patch media-venus-reimplement-decoder-stop-command.patch arm64-dts-meson-gxl-add-alternate-arm-trusted-firmware-reserved-memory-zone.patch +iwlwifi-fix-wrong-struct-for-a000-device.patch +iwlwifi-add-a-new-a000-device.patch +iwlwifi-pcie-sort-ids-for-the-9000-series-for-easier-comparisons.patch +iwlwifi-add-new-cards-for-a000-series.patch +iwlwifi-add-new-cards-for-8265-series.patch +iwlwifi-add-new-cards-for-8260-series.patch +iwlwifi-fix-pci-ids-and-configuration-mapping-for-9000-series.patch +iwlwifi-mvm-support-version-7-of-the-scan_req_umac-fw-command.patch