diff options
| author | Pagadala Yesu Anjaneyulu <pagadala.yesu.anjaneyulu@intel.com> | 2026-03-20 10:09:14 +0200 |
|---|---|---|
| committer | Miri Korenblit <miriam.rachel.korenblit@intel.com> | 2026-03-25 11:31:57 +0200 |
| commit | 4aece67f1cb049b5f42e18d76979a558a5705890 (patch) | |
| tree | fd273f8b52fe52ca9432df08040a8a2d7b1320fe /drivers/net/wireless/intel | |
| parent | 6e6d8f344dbb00f232e73dbd0813cfabdd35b15f (diff) | |
wifi: iwlwifi: mld: add BIOS revision compatibility check for PPAG command
Prevent potential issues when newer BIOS revisions
are used with firmware that doesn't support them for
PER_PLATFORM_ANT_GAIN_CMD.
Without this check, the driver may attempt to use
BIOS configurations that are incompatible with the
current firmware version, leading to dropping of
command in firmware without any failure notification
to driver.
Signed-off-by: Pagadala Yesu Anjaneyulu <pagadala.yesu.anjaneyulu@intel.com>
Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Reviewed-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20260320100746.79bf2bf398d0.I8161dbe1a04af3738e00ab0fc13fe3dbfa9094ec@changeid
Diffstat (limited to 'drivers/net/wireless/intel')
| -rw-r--r-- | drivers/net/wireless/intel/iwlwifi/mld/regulatory.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/mld/regulatory.c b/drivers/net/wireless/intel/iwlwifi/mld/regulatory.c index f91f61ca9b2e..659243ada86c 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/regulatory.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/regulatory.c @@ -214,6 +214,7 @@ static int iwl_mld_ppag_send_cmd(struct iwl_mld *mld) u32 cmd_id = WIDE_ID(PHY_OPS_GROUP, PER_PLATFORM_ANT_GAIN_CMD); int cmd_ver = iwl_fw_lookup_cmd_ver(mld->fw, cmd_id, 1); int cmd_len = sizeof(cmd.v8); + u8 cmd_bios_rev; int ret; BUILD_BUG_ON(offsetof(typeof(cmd), v8.ppag_config_info.hdr) != @@ -249,6 +250,10 @@ static int iwl_mld_ppag_send_cmd(struct iwl_mld *mld) } } cmd_len = sizeof(cmd.v7); + cmd_bios_rev = + iwl_fw_lookup_cmd_bios_supported_revision(fwrt->fw, + fwrt->ppag_bios_source, + cmd_id, 4); } else if (cmd_ver == 8) { for (int chain = 0; chain < ARRAY_SIZE(cmd.v8.gain); chain++) { for (int subband = 0; @@ -262,12 +267,23 @@ static int iwl_mld_ppag_send_cmd(struct iwl_mld *mld) cmd.v8.gain[chain][subband]); } } + cmd_bios_rev = + iwl_fw_lookup_cmd_bios_supported_revision(fwrt->fw, + fwrt->ppag_bios_source, + cmd_id, 5); } else { WARN(1, "Bad version for PER_PLATFORM_ANT_GAIN_CMD %d\n", cmd_ver); return -EINVAL; } + if (cmd_bios_rev < fwrt->ppag_bios_rev) { + IWL_ERR(mld, + "BIOS revision compatibility check failed - Supported: %d, Current: %d\n", + cmd_bios_rev, fwrt->ppag_bios_rev); + return 0; + } + IWL_DEBUG_RADIO(mld, "Sending PER_PLATFORM_ANT_GAIN_CMD\n"); ret = iwl_mld_send_cmd_pdu(mld, cmd_id, &cmd, cmd_len); if (ret < 0) |
