mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-07 23:20:32 -04:00
Merge tag 'iwlwifi-fixes-2025-08-28' of https://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-next
Miri Korenblit says: ==================== a few fixes, mainly of the cfg rework. ==================== Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
@@ -169,7 +169,7 @@ int iwl_acpi_get_dsm(struct iwl_fw_runtime *fwrt,
|
||||
|
||||
BUILD_BUG_ON(ARRAY_SIZE(acpi_dsm_size) != DSM_FUNC_NUM_FUNCS);
|
||||
|
||||
if (WARN_ON(func >= ARRAY_SIZE(acpi_dsm_size)))
|
||||
if (WARN_ON(func >= ARRAY_SIZE(acpi_dsm_size) || !func))
|
||||
return -EINVAL;
|
||||
|
||||
expected_size = acpi_dsm_size[func];
|
||||
@@ -178,6 +178,29 @@ int iwl_acpi_get_dsm(struct iwl_fw_runtime *fwrt,
|
||||
if (expected_size != sizeof(u8) && expected_size != sizeof(u32))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!fwrt->acpi_dsm_funcs_valid) {
|
||||
ret = iwl_acpi_get_dsm_integer(fwrt->dev, ACPI_DSM_REV,
|
||||
DSM_FUNC_QUERY,
|
||||
&iwl_guid, &tmp,
|
||||
acpi_dsm_size[DSM_FUNC_QUERY]);
|
||||
if (ret) {
|
||||
/* always indicate BIT(0) to avoid re-reading */
|
||||
fwrt->acpi_dsm_funcs_valid = BIT(0);
|
||||
return ret;
|
||||
}
|
||||
|
||||
IWL_DEBUG_RADIO(fwrt, "ACPI DSM validity bitmap 0x%x\n",
|
||||
(u32)tmp);
|
||||
/* always indicate BIT(0) to avoid re-reading */
|
||||
fwrt->acpi_dsm_funcs_valid = tmp | BIT(0);
|
||||
}
|
||||
|
||||
if (!(fwrt->acpi_dsm_funcs_valid & BIT(func))) {
|
||||
IWL_DEBUG_RADIO(fwrt, "ACPI DSM %d not indicated as valid\n",
|
||||
func);
|
||||
return -ENODATA;
|
||||
}
|
||||
|
||||
ret = iwl_acpi_get_dsm_integer(fwrt->dev, ACPI_DSM_REV, func,
|
||||
&iwl_guid, &tmp, expected_size);
|
||||
if (ret)
|
||||
|
||||
@@ -113,6 +113,10 @@ struct iwl_txf_iter_data {
|
||||
* @phy_filters: specific phy filters as read from WPFC BIOS table
|
||||
* @ppag_bios_rev: PPAG BIOS revision
|
||||
* @ppag_bios_source: see &enum bios_source
|
||||
* @acpi_dsm_funcs_valid: bitmap indicating which DSM values are valid,
|
||||
* zero (default initialization) means it hasn't been read yet,
|
||||
* and BIT(0) is set when it has since function 0 also has this
|
||||
* bitmap and is always supported
|
||||
*/
|
||||
struct iwl_fw_runtime {
|
||||
struct iwl_trans *trans;
|
||||
@@ -189,6 +193,10 @@ struct iwl_fw_runtime {
|
||||
bool uats_valid;
|
||||
u8 uefi_tables_lock_status;
|
||||
struct iwl_phy_specific_cfg phy_filters;
|
||||
|
||||
#ifdef CONFIG_ACPI
|
||||
u32 acpi_dsm_funcs_valid;
|
||||
#endif
|
||||
};
|
||||
|
||||
void iwl_fw_runtime_init(struct iwl_fw_runtime *fwrt, struct iwl_trans *trans,
|
||||
|
||||
@@ -747,6 +747,12 @@ int iwl_uefi_get_dsm(struct iwl_fw_runtime *fwrt, enum iwl_dsm_funcs func,
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (!(data->functions[DSM_FUNC_QUERY] & BIT(func))) {
|
||||
IWL_DEBUG_RADIO(fwrt, "DSM func %d not in 0x%x\n",
|
||||
func, data->functions[DSM_FUNC_QUERY]);
|
||||
goto out;
|
||||
}
|
||||
|
||||
*value = data->functions[func];
|
||||
|
||||
IWL_DEBUG_RADIO(fwrt,
|
||||
|
||||
@@ -673,6 +673,8 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = {
|
||||
|
||||
IWL_DEV_INFO(iwl6005_n_cfg, iwl6005_2agn_sff_name,
|
||||
DEVICE(0x0082), SUBDEV_MASKED(0xC000, 0xF000)),
|
||||
IWL_DEV_INFO(iwl6005_n_cfg, iwl6005_2agn_sff_name,
|
||||
DEVICE(0x0085), SUBDEV_MASKED(0xC000, 0xF000)),
|
||||
IWL_DEV_INFO(iwl6005_n_cfg, iwl6005_2agn_d_name,
|
||||
DEVICE(0x0082), SUBDEV(0x4820)),
|
||||
IWL_DEV_INFO(iwl6005_n_cfg, iwl6005_2agn_mow1_name,
|
||||
@@ -729,10 +731,10 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = {
|
||||
DEVICE(0x0083), SUBDEV_MASKED(0x5, 0xF)),
|
||||
IWL_DEV_INFO(iwl1000_bg_cfg, iwl1000_bg_name,
|
||||
DEVICE(0x0083), SUBDEV_MASKED(0x6, 0xF)),
|
||||
IWL_DEV_INFO(iwl1000_bgn_cfg, iwl1000_bgn_name,
|
||||
DEVICE(0x0084), SUBDEV_MASKED(0x5, 0xF)),
|
||||
IWL_DEV_INFO(iwl1000_bg_cfg, iwl1000_bg_name,
|
||||
DEVICE(0x0084), SUBDEV(0x1216)),
|
||||
IWL_DEV_INFO(iwl1000_bg_cfg, iwl1000_bg_name,
|
||||
DEVICE(0x0084), SUBDEV(0x1316)),
|
||||
DEVICE(0x0084), SUBDEV_MASKED(0x6, 0xF)),
|
||||
|
||||
/* 100 Series WiFi */
|
||||
IWL_DEV_INFO(iwl100_bgn_cfg, iwl100_bgn_name,
|
||||
@@ -964,6 +966,12 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = {
|
||||
DEVICE(0x24F3), SUBDEV(0x0004)),
|
||||
IWL_DEV_INFO(iwl8260_cfg, iwl8260_2n_name,
|
||||
DEVICE(0x24F3), SUBDEV(0x0044)),
|
||||
IWL_DEV_INFO(iwl8260_cfg, iwl8260_2ac_name,
|
||||
DEVICE(0x24F4)),
|
||||
IWL_DEV_INFO(iwl8260_cfg, iwl4165_2ac_name,
|
||||
DEVICE(0x24F5)),
|
||||
IWL_DEV_INFO(iwl8260_cfg, iwl4165_2ac_name,
|
||||
DEVICE(0x24F6)),
|
||||
IWL_DEV_INFO(iwl8265_cfg, iwl8265_2ac_name,
|
||||
DEVICE(0x24FD)),
|
||||
IWL_DEV_INFO(iwl8265_cfg, iwl8275_2ac_name,
|
||||
@@ -1222,11 +1230,15 @@ static int _iwl_pci_resume(struct device *device, bool restore)
|
||||
* Note: MAC (bits 0:7) will be cleared upon suspend even with wowlan,
|
||||
* but not bits [15:8]. So if we have bits set in lower word, assume
|
||||
* the device is alive.
|
||||
* Alternatively, if the scratch value is 0xFFFFFFFF, then we no longer
|
||||
* have access to the device and consider it powered off.
|
||||
* For older devices, just try silently to grab the NIC.
|
||||
*/
|
||||
if (trans->mac_cfg->device_family >= IWL_DEVICE_FAMILY_BZ) {
|
||||
if (!(iwl_read32(trans, CSR_FUNC_SCRATCH) &
|
||||
CSR_FUNC_SCRATCH_POWER_OFF_MASK))
|
||||
u32 scratch = iwl_read32(trans, CSR_FUNC_SCRATCH);
|
||||
|
||||
if (!(scratch & CSR_FUNC_SCRATCH_POWER_OFF_MASK) ||
|
||||
scratch == ~0U)
|
||||
device_was_powered_off = true;
|
||||
} else {
|
||||
/*
|
||||
|
||||
@@ -2092,7 +2092,8 @@ static void iwl_txq_gen1_update_byte_cnt_tbl(struct iwl_trans *trans,
|
||||
break;
|
||||
}
|
||||
|
||||
if (trans->mac_cfg->device_family < IWL_DEVICE_FAMILY_AX210)
|
||||
if (trans->mac_cfg->device_family >= IWL_DEVICE_FAMILY_9000 &&
|
||||
trans->mac_cfg->device_family < IWL_DEVICE_FAMILY_AX210)
|
||||
len = DIV_ROUND_UP(len, 4);
|
||||
|
||||
if (WARN_ON(len > 0xFFF || write_ptr >= TFD_QUEUE_SIZE_MAX))
|
||||
|
||||
Reference in New Issue
Block a user