1*9b45ba39SSomashekhar(Som) // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause 2*9b45ba39SSomashekhar(Som) /* 3*9b45ba39SSomashekhar(Som) * Copyright (C) 2024 Intel Corporation 4*9b45ba39SSomashekhar(Som) */ 5*9b45ba39SSomashekhar(Som) #include <linux/module.h> 6*9b45ba39SSomashekhar(Som) #include <linux/stringify.h> 7*9b45ba39SSomashekhar(Som) #include "iwl-config.h" 8*9b45ba39SSomashekhar(Som) #include "iwl-prph.h" 9*9b45ba39SSomashekhar(Som) #include "fw/api/txq.h" 10*9b45ba39SSomashekhar(Som) 11*9b45ba39SSomashekhar(Som) /* Highest firmware API version supported */ 12*9b45ba39SSomashekhar(Som) #define IWL_DR_UCODE_API_MAX 96 13*9b45ba39SSomashekhar(Som) 14*9b45ba39SSomashekhar(Som) /* Lowest firmware API version supported */ 15*9b45ba39SSomashekhar(Som) #define IWL_DR_UCODE_API_MIN 96 16*9b45ba39SSomashekhar(Som) 17*9b45ba39SSomashekhar(Som) /* NVM versions */ 18*9b45ba39SSomashekhar(Som) #define IWL_DR_NVM_VERSION 0x0a1d 19*9b45ba39SSomashekhar(Som) 20*9b45ba39SSomashekhar(Som) /* Memory offsets and lengths */ 21*9b45ba39SSomashekhar(Som) #define IWL_DR_DCCM_OFFSET 0x800000 /* LMAC1 */ 22*9b45ba39SSomashekhar(Som) #define IWL_DR_DCCM_LEN 0x10000 /* LMAC1 */ 23*9b45ba39SSomashekhar(Som) #define IWL_DR_DCCM2_OFFSET 0x880000 24*9b45ba39SSomashekhar(Som) #define IWL_DR_DCCM2_LEN 0x8000 25*9b45ba39SSomashekhar(Som) #define IWL_DR_SMEM_OFFSET 0x400000 26*9b45ba39SSomashekhar(Som) #define IWL_DR_SMEM_LEN 0xD0000 27*9b45ba39SSomashekhar(Som) 28*9b45ba39SSomashekhar(Som) #define IWL_DR_A_PE_A_FW_PRE "iwlwifi-dr-a0-pe-a0" 29*9b45ba39SSomashekhar(Som) #define IWL_BR_A_PET_A_FW_PRE "iwlwifi-br-a0-petc-a0" 30*9b45ba39SSomashekhar(Som) #define IWL_BR_A_PE_A_FW_PRE "iwlwifi-br-a0-pe-a0" 31*9b45ba39SSomashekhar(Som) 32*9b45ba39SSomashekhar(Som) #define IWL_DR_A_PE_A_FW_MODULE_FIRMWARE(api) \ 33*9b45ba39SSomashekhar(Som) IWL_DR_A_PE_A_FW_PRE "-" __stringify(api) ".ucode" 34*9b45ba39SSomashekhar(Som) #define IWL_BR_A_PET_A_FW_MODULE_FIRMWARE(api) \ 35*9b45ba39SSomashekhar(Som) IWL_BR_A_PET_A_FW_PRE "-" __stringify(api) ".ucode" 36*9b45ba39SSomashekhar(Som) #define IWL_BR_A_PE_A_FW_MODULE_FIRMWARE(api) \ 37*9b45ba39SSomashekhar(Som) IWL_BR_A_PE_A_FW_PRE "-" __stringify(api) ".ucode" 38*9b45ba39SSomashekhar(Som) 39*9b45ba39SSomashekhar(Som) static const struct iwl_base_params iwl_dr_base_params = { 40*9b45ba39SSomashekhar(Som) .eeprom_size = OTP_LOW_IMAGE_SIZE_32K, 41*9b45ba39SSomashekhar(Som) .num_of_queues = 512, 42*9b45ba39SSomashekhar(Som) .max_tfd_queue_size = 65536, 43*9b45ba39SSomashekhar(Som) .shadow_ram_support = true, 44*9b45ba39SSomashekhar(Som) .led_compensation = 57, 45*9b45ba39SSomashekhar(Som) .wd_timeout = IWL_LONG_WD_TIMEOUT, 46*9b45ba39SSomashekhar(Som) .max_event_log_size = 512, 47*9b45ba39SSomashekhar(Som) .shadow_reg_enable = true, 48*9b45ba39SSomashekhar(Som) .pcie_l1_allowed = true, 49*9b45ba39SSomashekhar(Som) }; 50*9b45ba39SSomashekhar(Som) 51*9b45ba39SSomashekhar(Som) #define IWL_DEVICE_DR_COMMON \ 52*9b45ba39SSomashekhar(Som) .ucode_api_max = IWL_DR_UCODE_API_MAX, \ 53*9b45ba39SSomashekhar(Som) .ucode_api_min = IWL_DR_UCODE_API_MIN, \ 54*9b45ba39SSomashekhar(Som) .led_mode = IWL_LED_RF_STATE, \ 55*9b45ba39SSomashekhar(Som) .nvm_hw_section_num = 10, \ 56*9b45ba39SSomashekhar(Som) .non_shared_ant = ANT_B, \ 57*9b45ba39SSomashekhar(Som) .dccm_offset = IWL_DR_DCCM_OFFSET, \ 58*9b45ba39SSomashekhar(Som) .dccm_len = IWL_DR_DCCM_LEN, \ 59*9b45ba39SSomashekhar(Som) .dccm2_offset = IWL_DR_DCCM2_OFFSET, \ 60*9b45ba39SSomashekhar(Som) .dccm2_len = IWL_DR_DCCM2_LEN, \ 61*9b45ba39SSomashekhar(Som) .smem_offset = IWL_DR_SMEM_OFFSET, \ 62*9b45ba39SSomashekhar(Som) .smem_len = IWL_DR_SMEM_LEN, \ 63*9b45ba39SSomashekhar(Som) .apmg_not_supported = true, \ 64*9b45ba39SSomashekhar(Som) .trans.mq_rx_supported = true, \ 65*9b45ba39SSomashekhar(Som) .vht_mu_mimo_supported = true, \ 66*9b45ba39SSomashekhar(Som) .mac_addr_from_csr = 0x30, \ 67*9b45ba39SSomashekhar(Som) .nvm_ver = IWL_DR_NVM_VERSION, \ 68*9b45ba39SSomashekhar(Som) .trans.rf_id = true, \ 69*9b45ba39SSomashekhar(Som) .trans.gen2 = true, \ 70*9b45ba39SSomashekhar(Som) .nvm_type = IWL_NVM_EXT, \ 71*9b45ba39SSomashekhar(Som) .dbgc_supported = true, \ 72*9b45ba39SSomashekhar(Som) .min_umac_error_event_table = 0xD0000, \ 73*9b45ba39SSomashekhar(Som) .d3_debug_data_base_addr = 0x401000, \ 74*9b45ba39SSomashekhar(Som) .d3_debug_data_length = 60 * 1024, \ 75*9b45ba39SSomashekhar(Som) .mon_smem_regs = { \ 76*9b45ba39SSomashekhar(Som) .write_ptr = { \ 77*9b45ba39SSomashekhar(Som) .addr = LDBG_M2S_BUF_WPTR, \ 78*9b45ba39SSomashekhar(Som) .mask = LDBG_M2S_BUF_WPTR_VAL_MSK, \ 79*9b45ba39SSomashekhar(Som) }, \ 80*9b45ba39SSomashekhar(Som) .cycle_cnt = { \ 81*9b45ba39SSomashekhar(Som) .addr = LDBG_M2S_BUF_WRAP_CNT, \ 82*9b45ba39SSomashekhar(Som) .mask = LDBG_M2S_BUF_WRAP_CNT_VAL_MSK, \ 83*9b45ba39SSomashekhar(Som) }, \ 84*9b45ba39SSomashekhar(Som) }, \ 85*9b45ba39SSomashekhar(Som) .trans.umac_prph_offset = 0x300000, \ 86*9b45ba39SSomashekhar(Som) .trans.device_family = IWL_DEVICE_FAMILY_DR, \ 87*9b45ba39SSomashekhar(Som) .trans.base_params = &iwl_dr_base_params, \ 88*9b45ba39SSomashekhar(Som) .min_txq_size = 128, \ 89*9b45ba39SSomashekhar(Som) .gp2_reg_addr = 0xd02c68, \ 90*9b45ba39SSomashekhar(Som) .min_ba_txq_size = IWL_DEFAULT_QUEUE_SIZE_EHT, \ 91*9b45ba39SSomashekhar(Som) .mon_dram_regs = { \ 92*9b45ba39SSomashekhar(Som) .write_ptr = { \ 93*9b45ba39SSomashekhar(Som) .addr = DBGC_CUR_DBGBUF_STATUS, \ 94*9b45ba39SSomashekhar(Som) .mask = DBGC_CUR_DBGBUF_STATUS_OFFSET_MSK, \ 95*9b45ba39SSomashekhar(Som) }, \ 96*9b45ba39SSomashekhar(Som) .cycle_cnt = { \ 97*9b45ba39SSomashekhar(Som) .addr = DBGC_DBGBUF_WRAP_AROUND, \ 98*9b45ba39SSomashekhar(Som) .mask = 0xffffffff, \ 99*9b45ba39SSomashekhar(Som) }, \ 100*9b45ba39SSomashekhar(Som) .cur_frag = { \ 101*9b45ba39SSomashekhar(Som) .addr = DBGC_CUR_DBGBUF_STATUS, \ 102*9b45ba39SSomashekhar(Som) .mask = DBGC_CUR_DBGBUF_STATUS_IDX_MSK, \ 103*9b45ba39SSomashekhar(Som) }, \ 104*9b45ba39SSomashekhar(Som) }, \ 105*9b45ba39SSomashekhar(Som) .mon_dbgi_regs = { \ 106*9b45ba39SSomashekhar(Som) .write_ptr = { \ 107*9b45ba39SSomashekhar(Som) .addr = DBGI_SRAM_FIFO_POINTERS, \ 108*9b45ba39SSomashekhar(Som) .mask = DBGI_SRAM_FIFO_POINTERS_WR_PTR_MSK, \ 109*9b45ba39SSomashekhar(Som) }, \ 110*9b45ba39SSomashekhar(Som) } 111*9b45ba39SSomashekhar(Som) 112*9b45ba39SSomashekhar(Som) #define IWL_DEVICE_DR \ 113*9b45ba39SSomashekhar(Som) IWL_DEVICE_DR_COMMON, \ 114*9b45ba39SSomashekhar(Som) .uhb_supported = true, \ 115*9b45ba39SSomashekhar(Som) .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM, \ 116*9b45ba39SSomashekhar(Som) .num_rbds = IWL_NUM_RBDS_DR_EHT, \ 117*9b45ba39SSomashekhar(Som) .ht_params = &iwl_22000_ht_params 118*9b45ba39SSomashekhar(Som) 119*9b45ba39SSomashekhar(Som) /* 120*9b45ba39SSomashekhar(Som) * This size was picked according to 8 MSDUs inside 512 A-MSDUs in an 121*9b45ba39SSomashekhar(Som) * A-MPDU, with additional overhead to account for processing time. 122*9b45ba39SSomashekhar(Som) */ 123*9b45ba39SSomashekhar(Som) #define IWL_NUM_RBDS_DR_EHT (512 * 16) 124*9b45ba39SSomashekhar(Som) 125*9b45ba39SSomashekhar(Som) const struct iwl_cfg_trans_params iwl_dr_trans_cfg = { 126*9b45ba39SSomashekhar(Som) .device_family = IWL_DEVICE_FAMILY_DR, 127*9b45ba39SSomashekhar(Som) .base_params = &iwl_dr_base_params, 128*9b45ba39SSomashekhar(Som) .mq_rx_supported = true, 129*9b45ba39SSomashekhar(Som) .rf_id = true, 130*9b45ba39SSomashekhar(Som) .gen2 = true, 131*9b45ba39SSomashekhar(Som) .integrated = true, 132*9b45ba39SSomashekhar(Som) .umac_prph_offset = 0x300000, 133*9b45ba39SSomashekhar(Som) .xtal_latency = 12000, 134*9b45ba39SSomashekhar(Som) .low_latency_xtal = true, 135*9b45ba39SSomashekhar(Som) .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_2500US, 136*9b45ba39SSomashekhar(Som) }; 137*9b45ba39SSomashekhar(Som) 138*9b45ba39SSomashekhar(Som) const char iwl_dr_name[] = "Intel(R) TBD Dr device"; 139*9b45ba39SSomashekhar(Som) 140*9b45ba39SSomashekhar(Som) const struct iwl_cfg iwl_cfg_dr = { 141*9b45ba39SSomashekhar(Som) .fw_name_mac = "dr", 142*9b45ba39SSomashekhar(Som) IWL_DEVICE_DR, 143*9b45ba39SSomashekhar(Som) }; 144*9b45ba39SSomashekhar(Som) 145*9b45ba39SSomashekhar(Som) const struct iwl_cfg_trans_params iwl_br_trans_cfg = { 146*9b45ba39SSomashekhar(Som) .device_family = IWL_DEVICE_FAMILY_DR, 147*9b45ba39SSomashekhar(Som) .base_params = &iwl_dr_base_params, 148*9b45ba39SSomashekhar(Som) .mq_rx_supported = true, 149*9b45ba39SSomashekhar(Som) .rf_id = true, 150*9b45ba39SSomashekhar(Som) .gen2 = true, 151*9b45ba39SSomashekhar(Som) .integrated = true, 152*9b45ba39SSomashekhar(Som) .umac_prph_offset = 0x300000, 153*9b45ba39SSomashekhar(Som) .xtal_latency = 12000, 154*9b45ba39SSomashekhar(Som) .low_latency_xtal = true, 155*9b45ba39SSomashekhar(Som) .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_2500US, 156*9b45ba39SSomashekhar(Som) }; 157*9b45ba39SSomashekhar(Som) 158*9b45ba39SSomashekhar(Som) const char iwl_br_name[] = "Intel(R) TBD Br device"; 159*9b45ba39SSomashekhar(Som) 160*9b45ba39SSomashekhar(Som) const struct iwl_cfg iwl_cfg_br = { 161*9b45ba39SSomashekhar(Som) .fw_name_mac = "br", 162*9b45ba39SSomashekhar(Som) IWL_DEVICE_DR, 163*9b45ba39SSomashekhar(Som) }; 164*9b45ba39SSomashekhar(Som) 165*9b45ba39SSomashekhar(Som) MODULE_FIRMWARE(IWL_DR_A_PE_A_FW_MODULE_FIRMWARE(IWL_DR_UCODE_API_MAX)); 166*9b45ba39SSomashekhar(Som) MODULE_FIRMWARE(IWL_BR_A_PET_A_FW_MODULE_FIRMWARE(IWL_DR_UCODE_API_MAX)); 167*9b45ba39SSomashekhar(Som) MODULE_FIRMWARE(IWL_BR_A_PE_A_FW_MODULE_FIRMWARE(IWL_DR_UCODE_API_MAX)); 168