xref: /openbmc/linux/drivers/net/wireless/intel/iwlwifi/cfg/8000.c (revision 2612e3bbc0386368a850140a6c9b990cd496a5ec)
18e99ea8dSJohannes Berg // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
28e99ea8dSJohannes Berg /*
3*31aeae24SJohannes Berg  * Copyright (C) 2014, 2018-2020, 2023 Intel Corporation
48e99ea8dSJohannes Berg  * Copyright (C) 2014-2015 Intel Mobile Communications GmbH
58e99ea8dSJohannes Berg  * Copyright (C) 2016 Intel Deutschland GmbH
68e99ea8dSJohannes Berg  */
7650aaed3SJohannes Berg #include <linux/module.h>
8650aaed3SJohannes Berg #include <linux/stringify.h>
9650aaed3SJohannes Berg #include "iwl-config.h"
10650aaed3SJohannes Berg 
11650aaed3SJohannes Berg /* Highest firmware API version supported */
12a8707dddSLuca Coelho #define IWL8000_UCODE_API_MAX	36
13a8707dddSLuca Coelho #define IWL8265_UCODE_API_MAX	36
14650aaed3SJohannes Berg 
15650aaed3SJohannes Berg /* Lowest firmware API version supported */
16650aaed3SJohannes Berg #define IWL8000_UCODE_API_MIN	22
17650aaed3SJohannes Berg #define IWL8265_UCODE_API_MIN	22
18650aaed3SJohannes Berg 
19650aaed3SJohannes Berg /* NVM versions */
20650aaed3SJohannes Berg #define IWL8000_NVM_VERSION		0x0a1d
21650aaed3SJohannes Berg 
22650aaed3SJohannes Berg /* Memory offsets and lengths */
23650aaed3SJohannes Berg #define IWL8260_DCCM_OFFSET		0x800000
24650aaed3SJohannes Berg #define IWL8260_DCCM_LEN		0x18000
25650aaed3SJohannes Berg #define IWL8260_DCCM2_OFFSET		0x880000
26650aaed3SJohannes Berg #define IWL8260_DCCM2_LEN		0x8000
27650aaed3SJohannes Berg #define IWL8260_SMEM_OFFSET		0x400000
28650aaed3SJohannes Berg #define IWL8260_SMEM_LEN		0x68000
29650aaed3SJohannes Berg 
30*31aeae24SJohannes Berg #define IWL8000_FW_PRE "iwlwifi-8000C"
31650aaed3SJohannes Berg #define IWL8000_MODULE_FIRMWARE(api) \
32*31aeae24SJohannes Berg 	IWL8000_FW_PRE "-" __stringify(api) ".ucode"
33650aaed3SJohannes Berg 
34*31aeae24SJohannes Berg #define IWL8265_FW_PRE "iwlwifi-8265"
35650aaed3SJohannes Berg #define IWL8265_MODULE_FIRMWARE(api) \
36*31aeae24SJohannes Berg 	IWL8265_FW_PRE "-" __stringify(api) ".ucode"
37650aaed3SJohannes Berg 
38650aaed3SJohannes Berg #define DEFAULT_NVM_FILE_FAMILY_8000C		"nvmData-8000C"
39650aaed3SJohannes Berg 
40650aaed3SJohannes Berg static const struct iwl_base_params iwl8000_base_params = {
413e2b49d6SLuca Coelho 	.eeprom_size = OTP_LOW_IMAGE_SIZE_32K,
42650aaed3SJohannes Berg 	.num_of_queues = 31,
437b3e42eaSGolan Ben Ami 	.max_tfd_queue_size = 256,
44650aaed3SJohannes Berg 	.shadow_ram_support = true,
45650aaed3SJohannes Berg 	.led_compensation = 57,
46650aaed3SJohannes Berg 	.wd_timeout = IWL_LONG_WD_TIMEOUT,
47650aaed3SJohannes Berg 	.max_event_log_size = 512,
48650aaed3SJohannes Berg 	.shadow_reg_enable = true,
49650aaed3SJohannes Berg 	.pcie_l1_allowed = true,
50650aaed3SJohannes Berg };
51650aaed3SJohannes Berg 
52650aaed3SJohannes Berg static const struct iwl_ht_params iwl8000_ht_params = {
53650aaed3SJohannes Berg 	.stbc = true,
54650aaed3SJohannes Berg 	.ldpc = true,
55650aaed3SJohannes Berg 	.ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ),
56650aaed3SJohannes Berg };
57650aaed3SJohannes Berg 
58650aaed3SJohannes Berg static const struct iwl_tt_params iwl8000_tt_params = {
59650aaed3SJohannes Berg 	.ct_kill_entry = 115,
60650aaed3SJohannes Berg 	.ct_kill_exit = 93,
61650aaed3SJohannes Berg 	.ct_kill_duration = 5,
62650aaed3SJohannes Berg 	.dynamic_smps_entry = 111,
63650aaed3SJohannes Berg 	.dynamic_smps_exit = 107,
64650aaed3SJohannes Berg 	.tx_protection_entry = 112,
65650aaed3SJohannes Berg 	.tx_protection_exit = 105,
66650aaed3SJohannes Berg 	.tx_backoff = {
67650aaed3SJohannes Berg 		{.temperature = 110, .backoff = 200},
68650aaed3SJohannes Berg 		{.temperature = 111, .backoff = 600},
69650aaed3SJohannes Berg 		{.temperature = 112, .backoff = 1200},
70650aaed3SJohannes Berg 		{.temperature = 113, .backoff = 2000},
71650aaed3SJohannes Berg 		{.temperature = 114, .backoff = 4000},
72650aaed3SJohannes Berg 	},
73650aaed3SJohannes Berg 	.support_ct_kill = true,
74650aaed3SJohannes Berg 	.support_dynamic_smps = true,
75650aaed3SJohannes Berg 	.support_tx_protection = true,
76650aaed3SJohannes Berg 	.support_tx_backoff = true,
77650aaed3SJohannes Berg };
78650aaed3SJohannes Berg 
79650aaed3SJohannes Berg #define IWL_DEVICE_8000_COMMON						\
8079b6c8feSLuca Coelho 	.trans.device_family = IWL_DEVICE_FAMILY_8000,			\
8179b6c8feSLuca Coelho 	.trans.base_params = &iwl8000_base_params,			\
82650aaed3SJohannes Berg 	.led_mode = IWL_LED_RF_STATE,					\
834aeaccd6SLuca Coelho 	.nvm_hw_section_num = 10,					\
84650aaed3SJohannes Berg 	.features = NETIF_F_RXCSUM,					\
85650aaed3SJohannes Berg 	.non_shared_ant = ANT_A,					\
86650aaed3SJohannes Berg 	.dccm_offset = IWL8260_DCCM_OFFSET,				\
87650aaed3SJohannes Berg 	.dccm_len = IWL8260_DCCM_LEN,					\
88650aaed3SJohannes Berg 	.dccm2_offset = IWL8260_DCCM2_OFFSET,				\
89650aaed3SJohannes Berg 	.dccm2_len = IWL8260_DCCM2_LEN,					\
90650aaed3SJohannes Berg 	.smem_offset = IWL8260_SMEM_OFFSET,				\
91650aaed3SJohannes Berg 	.smem_len = IWL8260_SMEM_LEN,					\
92650aaed3SJohannes Berg 	.default_nvm_file_C_step = DEFAULT_NVM_FILE_FAMILY_8000C,	\
93650aaed3SJohannes Berg 	.thermal_params = &iwl8000_tt_params,				\
94650aaed3SJohannes Berg 	.apmg_not_supported = true,					\
9544fd09daSChaya Rachel Ivgi 	.nvm_type = IWL_NVM_EXT,					\
963485e76eSLuca Coelho 	.dbgc_supported = true,						\
976dece0e9SLuca Coelho 	.min_umac_error_event_table = 0x800000
98650aaed3SJohannes Berg 
99650aaed3SJohannes Berg #define IWL_DEVICE_8000							\
100650aaed3SJohannes Berg 	IWL_DEVICE_8000_COMMON,						\
101650aaed3SJohannes Berg 	.ucode_api_max = IWL8000_UCODE_API_MAX,				\
102650aaed3SJohannes Berg 	.ucode_api_min = IWL8000_UCODE_API_MIN				\
103650aaed3SJohannes Berg 
104650aaed3SJohannes Berg #define IWL_DEVICE_8260							\
105650aaed3SJohannes Berg 	IWL_DEVICE_8000_COMMON,						\
106650aaed3SJohannes Berg 	.ucode_api_max = IWL8000_UCODE_API_MAX,				\
107650aaed3SJohannes Berg 	.ucode_api_min = IWL8000_UCODE_API_MIN				\
108650aaed3SJohannes Berg 
109650aaed3SJohannes Berg #define IWL_DEVICE_8265							\
110650aaed3SJohannes Berg 	IWL_DEVICE_8000_COMMON,						\
111650aaed3SJohannes Berg 	.ucode_api_max = IWL8265_UCODE_API_MAX,				\
112650aaed3SJohannes Berg 	.ucode_api_min = IWL8265_UCODE_API_MIN				\
113650aaed3SJohannes Berg 
114650aaed3SJohannes Berg const struct iwl_cfg iwl8260_2n_cfg = {
115650aaed3SJohannes Berg 	.name = "Intel(R) Dual Band Wireless N 8260",
116650aaed3SJohannes Berg 	.fw_name_pre = IWL8000_FW_PRE,
117650aaed3SJohannes Berg 	IWL_DEVICE_8260,
118650aaed3SJohannes Berg 	.ht_params = &iwl8000_ht_params,
119650aaed3SJohannes Berg 	.nvm_ver = IWL8000_NVM_VERSION,
120650aaed3SJohannes Berg };
121650aaed3SJohannes Berg 
122650aaed3SJohannes Berg const struct iwl_cfg iwl8260_2ac_cfg = {
123650aaed3SJohannes Berg 	.name = "Intel(R) Dual Band Wireless AC 8260",
124650aaed3SJohannes Berg 	.fw_name_pre = IWL8000_FW_PRE,
125650aaed3SJohannes Berg 	IWL_DEVICE_8260,
126650aaed3SJohannes Berg 	.ht_params = &iwl8000_ht_params,
127650aaed3SJohannes Berg 	.nvm_ver = IWL8000_NVM_VERSION,
128650aaed3SJohannes Berg };
129650aaed3SJohannes Berg 
130650aaed3SJohannes Berg const struct iwl_cfg iwl8265_2ac_cfg = {
131650aaed3SJohannes Berg 	.name = "Intel(R) Dual Band Wireless AC 8265",
132650aaed3SJohannes Berg 	.fw_name_pre = IWL8265_FW_PRE,
133650aaed3SJohannes Berg 	IWL_DEVICE_8265,
134650aaed3SJohannes Berg 	.ht_params = &iwl8000_ht_params,
135650aaed3SJohannes Berg 	.nvm_ver = IWL8000_NVM_VERSION,
136650aaed3SJohannes Berg 	.vht_mu_mimo_supported = true,
137650aaed3SJohannes Berg };
138650aaed3SJohannes Berg 
139650aaed3SJohannes Berg const struct iwl_cfg iwl8275_2ac_cfg = {
140650aaed3SJohannes Berg 	.name = "Intel(R) Dual Band Wireless AC 8275",
141650aaed3SJohannes Berg 	.fw_name_pre = IWL8265_FW_PRE,
142650aaed3SJohannes Berg 	IWL_DEVICE_8265,
143650aaed3SJohannes Berg 	.ht_params = &iwl8000_ht_params,
144650aaed3SJohannes Berg 	.nvm_ver = IWL8000_NVM_VERSION,
145650aaed3SJohannes Berg 	.vht_mu_mimo_supported = true,
146650aaed3SJohannes Berg };
147650aaed3SJohannes Berg 
148650aaed3SJohannes Berg const struct iwl_cfg iwl4165_2ac_cfg = {
149650aaed3SJohannes Berg 	.name = "Intel(R) Dual Band Wireless AC 4165",
150650aaed3SJohannes Berg 	.fw_name_pre = IWL8000_FW_PRE,
151650aaed3SJohannes Berg 	IWL_DEVICE_8000,
152650aaed3SJohannes Berg 	.ht_params = &iwl8000_ht_params,
153650aaed3SJohannes Berg 	.nvm_ver = IWL8000_NVM_VERSION,
154650aaed3SJohannes Berg };
155650aaed3SJohannes Berg 
156650aaed3SJohannes Berg MODULE_FIRMWARE(IWL8000_MODULE_FIRMWARE(IWL8000_UCODE_API_MAX));
157650aaed3SJohannes Berg MODULE_FIRMWARE(IWL8265_MODULE_FIRMWARE(IWL8265_UCODE_API_MAX));
158