wifi: iwlwifi: add support for BZ_W
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Wed, 20 Mar 2024 21:26:30 +0000 (23:26 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 25 Mar 2024 14:39:54 +0000 (15:39 +0100)
BZ_W is another member of the BZ family.
Just like BZ_U, we also need to override the STEP.
While at it, add a few missing CNVi Chip ID values.

Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://msgid.link/20240320232419.40c315d51b22.I6b2b2083f8d5b4ec4119aa5b51c21b8428d96060@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/intel/iwlwifi/iwl-config.h
drivers/net/wireless/intel/iwlwifi/iwl-prph.h
drivers/net/wireless/intel/iwlwifi/pcie/drv.c

index a931277169a7ab59d471fb4af5d352ba74ab7239..732889f96ca27df6141a999d7ac40e8940cecfe2 100644 (file)
@@ -422,6 +422,7 @@ struct iwl_cfg {
 #define IWL_CFG_MAC_TYPE_SC            0x48
 #define IWL_CFG_MAC_TYPE_SC2           0x49
 #define IWL_CFG_MAC_TYPE_SC2F          0x4A
+#define IWL_CFG_MAC_TYPE_BZ_W          0x4B
 
 #define IWL_CFG_RF_TYPE_TH             0x105
 #define IWL_CFG_RF_TYPE_TH1            0x108
index 05b4001c82249bd386460547d955c2a47ae6fe44..898e22e0d1ab3cfaeda40205b2f72c10c1dc991b 100644 (file)
@@ -371,7 +371,10 @@ enum {
 #define CNVI_AUX_MISC_CHIP                     0xA200B0
 #define CNVI_AUX_MISC_CHIP_MAC_STEP(_val)      (((_val) & 0xf000000) >> 24)
 #define CNVI_AUX_MISC_CHIP_PROD_TYPE(_val)     ((_val) & 0xfff)
+#define CNVI_AUX_MISC_CHIP_PROD_TYPE_GL                0x910
 #define CNVI_AUX_MISC_CHIP_PROD_TYPE_BZ_U      0x930
+#define CNVI_AUX_MISC_CHIP_PROD_TYPE_BZ_I      0x900
+#define CNVI_AUX_MISC_CHIP_PROD_TYPE_BZ_W      0x901
 
 #define CNVR_AUX_MISC_CHIP                             0xA2B800
 #define CNVR_SCU_SD_REGS_SD_REG_DIG_DCDC_VTRIM         0xA29890
index a687c394cf07cece9b44a6734808c8247705a7b9..cd2183ccbdbdbcf324319e9cc6c3cc1816f94dd6 100644 (file)
@@ -1004,6 +1004,12 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = {
                      IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_ANY,
                      iwl_cfg_bz, iwl_fm_name),
 
+       _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
+                     IWL_CFG_MAC_TYPE_BZ_W, IWL_CFG_ANY,
+                     IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_ANY,
+                     IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_ANY,
+                     iwl_cfg_bz, iwl_fm_name),
+
 /* Ga (Gl) */
        _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
                      IWL_CFG_MAC_TYPE_GL, IWL_CFG_ANY,
@@ -1128,6 +1134,7 @@ static void get_crf_id(struct iwl_trans *iwl_trans)
 {
        u32 sd_reg_ver_addr;
        u32 val = 0;
+       u8 step;
 
        if (iwl_trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_AX210)
                sd_reg_ver_addr = SD_REG_VER_GEN2;
@@ -1146,16 +1153,23 @@ static void get_crf_id(struct iwl_trans *iwl_trans)
        iwl_trans->hw_cnv_id =
                iwl_read_prph_no_grab(iwl_trans, CNVI_AUX_MISC_CHIP);
 
+       /* For BZ-W, take B step also when A step is indicated */
+       if (CSR_HW_REV_TYPE(iwl_trans->hw_rev) == IWL_CFG_MAC_TYPE_BZ_W)
+               step = SILICON_B_STEP;
+
        /* In BZ, the MAC step must be read from the CNVI aux register */
        if (CSR_HW_REV_TYPE(iwl_trans->hw_rev) == IWL_CFG_MAC_TYPE_BZ) {
-               u8 step = CNVI_AUX_MISC_CHIP_MAC_STEP(iwl_trans->hw_cnv_id);
+               step = CNVI_AUX_MISC_CHIP_MAC_STEP(iwl_trans->hw_cnv_id);
 
                /* For BZ-U, take B step also when A step is indicated */
                if ((CNVI_AUX_MISC_CHIP_PROD_TYPE(iwl_trans->hw_cnv_id) ==
                    CNVI_AUX_MISC_CHIP_PROD_TYPE_BZ_U) &&
                    step == SILICON_A_STEP)
                        step = SILICON_B_STEP;
+       }
 
+       if (CSR_HW_REV_TYPE(iwl_trans->hw_rev) == IWL_CFG_MAC_TYPE_BZ ||
+           CSR_HW_REV_TYPE(iwl_trans->hw_rev) == IWL_CFG_MAC_TYPE_BZ_W) {
                iwl_trans->hw_rev_step = step;
                iwl_trans->hw_rev |= step;
        }