19b45ba39SSomashekhar(Som) // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause 29b45ba39SSomashekhar(Som) /* 3*d8bc6f24SMiri Korenblit * Copyright (C) 2024-2025 Intel Corporation 49b45ba39SSomashekhar(Som) */ 59b45ba39SSomashekhar(Som) #include <linux/module.h> 69b45ba39SSomashekhar(Som) #include <linux/stringify.h> 79b45ba39SSomashekhar(Som) #include "iwl-config.h" 89b45ba39SSomashekhar(Som) #include "iwl-prph.h" 99b45ba39SSomashekhar(Som) #include "fw/api/txq.h" 109b45ba39SSomashekhar(Som) 119b45ba39SSomashekhar(Som) /* Highest firmware API version supported */ 12*d8bc6f24SMiri Korenblit #define IWL_DR_UCODE_API_MAX 98 139b45ba39SSomashekhar(Som) 149b45ba39SSomashekhar(Som) /* Lowest firmware API version supported */ 159b45ba39SSomashekhar(Som) #define IWL_DR_UCODE_API_MIN 96 169b45ba39SSomashekhar(Som) 179b45ba39SSomashekhar(Som) /* NVM versions */ 189b45ba39SSomashekhar(Som) #define IWL_DR_NVM_VERSION 0x0a1d 199b45ba39SSomashekhar(Som) 209b45ba39SSomashekhar(Som) /* Memory offsets and lengths */ 219b45ba39SSomashekhar(Som) #define IWL_DR_DCCM_OFFSET 0x800000 /* LMAC1 */ 229b45ba39SSomashekhar(Som) #define IWL_DR_DCCM_LEN 0x10000 /* LMAC1 */ 239b45ba39SSomashekhar(Som) #define IWL_DR_DCCM2_OFFSET 0x880000 249b45ba39SSomashekhar(Som) #define IWL_DR_DCCM2_LEN 0x8000 259b45ba39SSomashekhar(Som) #define IWL_DR_SMEM_OFFSET 0x400000 269b45ba39SSomashekhar(Som) #define IWL_DR_SMEM_LEN 0xD0000 279b45ba39SSomashekhar(Som) 289b45ba39SSomashekhar(Som) #define IWL_DR_A_PE_A_FW_PRE "iwlwifi-dr-a0-pe-a0" 299b45ba39SSomashekhar(Som) #define IWL_BR_A_PET_A_FW_PRE "iwlwifi-br-a0-petc-a0" 309b45ba39SSomashekhar(Som) #define IWL_BR_A_PE_A_FW_PRE "iwlwifi-br-a0-pe-a0" 319b45ba39SSomashekhar(Som) 329b45ba39SSomashekhar(Som) #define IWL_DR_A_PE_A_FW_MODULE_FIRMWARE(api) \ 339b45ba39SSomashekhar(Som) IWL_DR_A_PE_A_FW_PRE "-" __stringify(api) ".ucode" 349b45ba39SSomashekhar(Som) #define IWL_BR_A_PET_A_FW_MODULE_FIRMWARE(api) \ 359b45ba39SSomashekhar(Som) IWL_BR_A_PET_A_FW_PRE "-" __stringify(api) ".ucode" 369b45ba39SSomashekhar(Som) #define IWL_BR_A_PE_A_FW_MODULE_FIRMWARE(api) \ 379b45ba39SSomashekhar(Som) IWL_BR_A_PE_A_FW_PRE "-" __stringify(api) ".ucode" 389b45ba39SSomashekhar(Som) 399b45ba39SSomashekhar(Som) static const struct iwl_base_params iwl_dr_base_params = { 409b45ba39SSomashekhar(Som) .eeprom_size = OTP_LOW_IMAGE_SIZE_32K, 419b45ba39SSomashekhar(Som) .num_of_queues = 512, 429b45ba39SSomashekhar(Som) .max_tfd_queue_size = 65536, 439b45ba39SSomashekhar(Som) .shadow_ram_support = true, 449b45ba39SSomashekhar(Som) .led_compensation = 57, 459b45ba39SSomashekhar(Som) .wd_timeout = IWL_LONG_WD_TIMEOUT, 469b45ba39SSomashekhar(Som) .max_event_log_size = 512, 479b45ba39SSomashekhar(Som) .shadow_reg_enable = true, 489b45ba39SSomashekhar(Som) .pcie_l1_allowed = true, 499b45ba39SSomashekhar(Som) }; 509b45ba39SSomashekhar(Som) 519b45ba39SSomashekhar(Som) #define IWL_DEVICE_DR_COMMON \ 529b45ba39SSomashekhar(Som) .ucode_api_max = IWL_DR_UCODE_API_MAX, \ 539b45ba39SSomashekhar(Som) .ucode_api_min = IWL_DR_UCODE_API_MIN, \ 549b45ba39SSomashekhar(Som) .led_mode = IWL_LED_RF_STATE, \ 559b45ba39SSomashekhar(Som) .nvm_hw_section_num = 10, \ 569b45ba39SSomashekhar(Som) .non_shared_ant = ANT_B, \ 579b45ba39SSomashekhar(Som) .dccm_offset = IWL_DR_DCCM_OFFSET, \ 589b45ba39SSomashekhar(Som) .dccm_len = IWL_DR_DCCM_LEN, \ 599b45ba39SSomashekhar(Som) .dccm2_offset = IWL_DR_DCCM2_OFFSET, \ 609b45ba39SSomashekhar(Som) .dccm2_len = IWL_DR_DCCM2_LEN, \ 619b45ba39SSomashekhar(Som) .smem_offset = IWL_DR_SMEM_OFFSET, \ 629b45ba39SSomashekhar(Som) .smem_len = IWL_DR_SMEM_LEN, \ 639b45ba39SSomashekhar(Som) .apmg_not_supported = true, \ 649b45ba39SSomashekhar(Som) .trans.mq_rx_supported = true, \ 659b45ba39SSomashekhar(Som) .vht_mu_mimo_supported = true, \ 669b45ba39SSomashekhar(Som) .mac_addr_from_csr = 0x30, \ 679b45ba39SSomashekhar(Som) .nvm_ver = IWL_DR_NVM_VERSION, \ 689b45ba39SSomashekhar(Som) .trans.rf_id = true, \ 699b45ba39SSomashekhar(Som) .trans.gen2 = true, \ 709b45ba39SSomashekhar(Som) .nvm_type = IWL_NVM_EXT, \ 719b45ba39SSomashekhar(Som) .dbgc_supported = true, \ 729b45ba39SSomashekhar(Som) .min_umac_error_event_table = 0xD0000, \ 739b45ba39SSomashekhar(Som) .d3_debug_data_base_addr = 0x401000, \ 749b45ba39SSomashekhar(Som) .d3_debug_data_length = 60 * 1024, \ 759b45ba39SSomashekhar(Som) .mon_smem_regs = { \ 769b45ba39SSomashekhar(Som) .write_ptr = { \ 779b45ba39SSomashekhar(Som) .addr = LDBG_M2S_BUF_WPTR, \ 789b45ba39SSomashekhar(Som) .mask = LDBG_M2S_BUF_WPTR_VAL_MSK, \ 799b45ba39SSomashekhar(Som) }, \ 809b45ba39SSomashekhar(Som) .cycle_cnt = { \ 819b45ba39SSomashekhar(Som) .addr = LDBG_M2S_BUF_WRAP_CNT, \ 829b45ba39SSomashekhar(Som) .mask = LDBG_M2S_BUF_WRAP_CNT_VAL_MSK, \ 839b45ba39SSomashekhar(Som) }, \ 849b45ba39SSomashekhar(Som) }, \ 859b45ba39SSomashekhar(Som) .trans.umac_prph_offset = 0x300000, \ 869b45ba39SSomashekhar(Som) .trans.device_family = IWL_DEVICE_FAMILY_DR, \ 879b45ba39SSomashekhar(Som) .trans.base_params = &iwl_dr_base_params, \ 889b45ba39SSomashekhar(Som) .min_txq_size = 128, \ 899b45ba39SSomashekhar(Som) .gp2_reg_addr = 0xd02c68, \ 909b45ba39SSomashekhar(Som) .min_ba_txq_size = IWL_DEFAULT_QUEUE_SIZE_EHT, \ 919b45ba39SSomashekhar(Som) .mon_dram_regs = { \ 929b45ba39SSomashekhar(Som) .write_ptr = { \ 939b45ba39SSomashekhar(Som) .addr = DBGC_CUR_DBGBUF_STATUS, \ 949b45ba39SSomashekhar(Som) .mask = DBGC_CUR_DBGBUF_STATUS_OFFSET_MSK, \ 959b45ba39SSomashekhar(Som) }, \ 969b45ba39SSomashekhar(Som) .cycle_cnt = { \ 979b45ba39SSomashekhar(Som) .addr = DBGC_DBGBUF_WRAP_AROUND, \ 989b45ba39SSomashekhar(Som) .mask = 0xffffffff, \ 999b45ba39SSomashekhar(Som) }, \ 1009b45ba39SSomashekhar(Som) .cur_frag = { \ 1019b45ba39SSomashekhar(Som) .addr = DBGC_CUR_DBGBUF_STATUS, \ 1029b45ba39SSomashekhar(Som) .mask = DBGC_CUR_DBGBUF_STATUS_IDX_MSK, \ 1039b45ba39SSomashekhar(Som) }, \ 1049b45ba39SSomashekhar(Som) }, \ 1059b45ba39SSomashekhar(Som) .mon_dbgi_regs = { \ 1069b45ba39SSomashekhar(Som) .write_ptr = { \ 1079b45ba39SSomashekhar(Som) .addr = DBGI_SRAM_FIFO_POINTERS, \ 1089b45ba39SSomashekhar(Som) .mask = DBGI_SRAM_FIFO_POINTERS_WR_PTR_MSK, \ 1099b45ba39SSomashekhar(Som) }, \ 1109b45ba39SSomashekhar(Som) } 1119b45ba39SSomashekhar(Som) 1129b45ba39SSomashekhar(Som) #define IWL_DEVICE_DR \ 1139b45ba39SSomashekhar(Som) IWL_DEVICE_DR_COMMON, \ 1149b45ba39SSomashekhar(Som) .uhb_supported = true, \ 1159b45ba39SSomashekhar(Som) .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM, \ 1169b45ba39SSomashekhar(Som) .num_rbds = IWL_NUM_RBDS_DR_EHT, \ 1174cb46c1cSJohannes Berg .ht_params = &iwl_bz_ht_params 1189b45ba39SSomashekhar(Som) 1199b45ba39SSomashekhar(Som) /* 1209b45ba39SSomashekhar(Som) * This size was picked according to 8 MSDUs inside 512 A-MSDUs in an 1219b45ba39SSomashekhar(Som) * A-MPDU, with additional overhead to account for processing time. 1229b45ba39SSomashekhar(Som) */ 1239b45ba39SSomashekhar(Som) #define IWL_NUM_RBDS_DR_EHT (512 * 16) 1249b45ba39SSomashekhar(Som) 1259b45ba39SSomashekhar(Som) const struct iwl_cfg_trans_params iwl_dr_trans_cfg = { 1269b45ba39SSomashekhar(Som) .device_family = IWL_DEVICE_FAMILY_DR, 1279b45ba39SSomashekhar(Som) .base_params = &iwl_dr_base_params, 1289b45ba39SSomashekhar(Som) .mq_rx_supported = true, 1299b45ba39SSomashekhar(Som) .rf_id = true, 1309b45ba39SSomashekhar(Som) .gen2 = true, 1319b45ba39SSomashekhar(Som) .integrated = true, 1329b45ba39SSomashekhar(Som) .umac_prph_offset = 0x300000, 1339b45ba39SSomashekhar(Som) .xtal_latency = 12000, 1349b45ba39SSomashekhar(Som) .low_latency_xtal = true, 1359b45ba39SSomashekhar(Som) .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_2500US, 1369b45ba39SSomashekhar(Som) }; 1379b45ba39SSomashekhar(Som) 1389b45ba39SSomashekhar(Som) const char iwl_dr_name[] = "Intel(R) TBD Dr device"; 1399b45ba39SSomashekhar(Som) 1409b45ba39SSomashekhar(Som) const struct iwl_cfg iwl_cfg_dr = { 1419b45ba39SSomashekhar(Som) .fw_name_mac = "dr", 1429b45ba39SSomashekhar(Som) IWL_DEVICE_DR, 1439b45ba39SSomashekhar(Som) }; 1449b45ba39SSomashekhar(Som) 1459b45ba39SSomashekhar(Som) const struct iwl_cfg_trans_params iwl_br_trans_cfg = { 1469b45ba39SSomashekhar(Som) .device_family = IWL_DEVICE_FAMILY_DR, 1479b45ba39SSomashekhar(Som) .base_params = &iwl_dr_base_params, 1489b45ba39SSomashekhar(Som) .mq_rx_supported = true, 1499b45ba39SSomashekhar(Som) .rf_id = true, 1509b45ba39SSomashekhar(Som) .gen2 = true, 1519b45ba39SSomashekhar(Som) .umac_prph_offset = 0x300000, 1529b45ba39SSomashekhar(Som) .xtal_latency = 12000, 1539b45ba39SSomashekhar(Som) .low_latency_xtal = true, 1549b45ba39SSomashekhar(Som) }; 1559b45ba39SSomashekhar(Som) 1569b45ba39SSomashekhar(Som) const char iwl_br_name[] = "Intel(R) TBD Br device"; 1579b45ba39SSomashekhar(Som) 1589b45ba39SSomashekhar(Som) const struct iwl_cfg iwl_cfg_br = { 1599b45ba39SSomashekhar(Som) .fw_name_mac = "br", 1609b45ba39SSomashekhar(Som) IWL_DEVICE_DR, 1619b45ba39SSomashekhar(Som) }; 1629b45ba39SSomashekhar(Som) 1639b45ba39SSomashekhar(Som) MODULE_FIRMWARE(IWL_DR_A_PE_A_FW_MODULE_FIRMWARE(IWL_DR_UCODE_API_MAX)); 1649b45ba39SSomashekhar(Som) MODULE_FIRMWARE(IWL_BR_A_PET_A_FW_MODULE_FIRMWARE(IWL_DR_UCODE_API_MAX)); 1659b45ba39SSomashekhar(Som) MODULE_FIRMWARE(IWL_BR_A_PE_A_FW_MODULE_FIRMWARE(IWL_DR_UCODE_API_MAX)); 166