mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
First batch of iwlwifi fixes for 4.20
* New FW debugging infrastructure; * Some more work on 802.11ax; * Improve support for multiple RF modules with 22000 devices; * Remove an unused FW parameter; * Other debugging improvements; -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEF3LNfgb2BPWm68smoUecoho8xfoFAlvt6ugACgkQoUecoho8 xfp0kA//RQHktR0zj83uMYFt7SZZvQJ6Z/5xoeiGcwVZQ/fdvM98jRtnJADBj8TY em7bu42iS1WfKN5dEhWygre7IfLqZFjfUgttpE9RHMh1LtRGRqF7xnNoCPxXnOYJ eVJPxinRz3r4GD5IayqwmkEFWLBpxeCxOAu1Xo3uilPl9hzrMjdOJj0YEAko7F+T g4+AmYcWnCrZN5jjiANKuTVnQ3GAmmF8qEouhfvv7iTm7bVRdyEI1psxd5U1IDTX MTSHY98Qf0i7+ybso0vFP7c40cLsg8TvCUPOXiPlu12oBeyCB+0Wjm5Onyksee+y 4FA/Gkh9QcBDECtEbpukpkvAVlU3JssED/pny3Cr1qAw6v0acTfSpvc4zMVtGdM0 jZcSP1wU/dyJ47vhSxY1M0QGaaQbmjglzKnJOBf9jYEvwjAUL8MzlDpnFggW2cBL a/7H39QfkBgE8/5tZSoOu4Vi56F94f7GvUlOlDs3qKcgC+S+eEaM3M2Z/QQ5FX5H n7b68TUCxsYnR/cXVKJEOf/JKo9fQzGs6+UBklMhE+Z4YVMbgWufbhyPQ2lhdm1+ TdW2z80IJPdvnusGEgKpRRL6v19bOgAP+G6TMrVHg0OKYSfud6QlyDdPmTGPjbMj vuGGDri3ASy4EaYpIOf+NRI6++8HI5zLjDo/g49yJ/eq21LvZiY= =GS6r -----END PGP SIGNATURE----- Merge tag 'iwlwifi-for-kalle-2018-11-15' of git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-next First batch of iwlwifi fixes for 4.20 * New FW debugging infrastructure; * Some more work on 802.11ax; * Improve support for multiple RF modules with 22000 devices; * Remove an unused FW parameter; * Other debugging improvements;
This commit is contained in:
commit
4ec321c146
@ -6,6 +6,7 @@
|
||||
* GPL LICENSE SUMMARY
|
||||
*
|
||||
* Copyright(c) 2017 Intel Deutschland GmbH
|
||||
* Copyright(c) 2018 Intel Corporation
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of version 2 of the GNU General Public License as
|
||||
@ -26,6 +27,7 @@
|
||||
* BSD LICENSE
|
||||
*
|
||||
* Copyright(c) 2017 Intel Deutschland GmbH
|
||||
* Copyright(c) 2018 Intel Corporation
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -81,7 +83,7 @@
|
||||
#define ACPI_WRDS_WIFI_DATA_SIZE (ACPI_SAR_TABLE_SIZE + 2)
|
||||
#define ACPI_EWRD_WIFI_DATA_SIZE ((ACPI_SAR_PROFILE_NUM - 1) * \
|
||||
ACPI_SAR_TABLE_SIZE + 3)
|
||||
#define ACPI_WGDS_WIFI_DATA_SIZE 18
|
||||
#define ACPI_WGDS_WIFI_DATA_SIZE 19
|
||||
#define ACPI_WRDD_WIFI_DATA_SIZE 2
|
||||
#define ACPI_SPLC_WIFI_DATA_SIZE 2
|
||||
|
||||
|
@ -154,7 +154,11 @@ void iwl_fw_runtime_init(struct iwl_fw_runtime *fwrt, struct iwl_trans *trans,
|
||||
const struct iwl_fw_runtime_ops *ops, void *ops_ctx,
|
||||
struct dentry *dbgfs_dir);
|
||||
|
||||
void iwl_fw_runtime_exit(struct iwl_fw_runtime *fwrt);
|
||||
static inline void iwl_fw_runtime_free(struct iwl_fw_runtime *fwrt)
|
||||
{
|
||||
kfree(fwrt->dump.d3_debug_data);
|
||||
fwrt->dump.d3_debug_data = NULL;
|
||||
}
|
||||
|
||||
void iwl_fw_runtime_suspend(struct iwl_fw_runtime *fwrt);
|
||||
|
||||
|
@ -893,7 +893,7 @@ static int iwl_mvm_sar_geo_init(struct iwl_mvm *mvm)
|
||||
IWL_DEBUG_RADIO(mvm, "Sending GEO_TX_POWER_LIMIT\n");
|
||||
|
||||
BUILD_BUG_ON(ACPI_NUM_GEO_PROFILES * ACPI_WGDS_NUM_BANDS *
|
||||
ACPI_WGDS_TABLE_SIZE != ACPI_WGDS_WIFI_DATA_SIZE);
|
||||
ACPI_WGDS_TABLE_SIZE + 1 != ACPI_WGDS_WIFI_DATA_SIZE);
|
||||
|
||||
BUILD_BUG_ON(ACPI_NUM_GEO_PROFILES > IWL_NUM_GEO_PROFILES);
|
||||
|
||||
@ -928,6 +928,11 @@ static int iwl_mvm_sar_get_ewrd_table(struct iwl_mvm *mvm)
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
static int iwl_mvm_sar_get_wgds_table(struct iwl_mvm *mvm)
|
||||
{
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
static int iwl_mvm_sar_geo_init(struct iwl_mvm *mvm)
|
||||
{
|
||||
return 0;
|
||||
@ -954,8 +959,11 @@ static int iwl_mvm_sar_init(struct iwl_mvm *mvm)
|
||||
IWL_DEBUG_RADIO(mvm,
|
||||
"WRDS SAR BIOS table invalid or unavailable. (%d)\n",
|
||||
ret);
|
||||
/* if not available, don't fail and don't bother with EWRD */
|
||||
return 0;
|
||||
/*
|
||||
* If not available, don't fail and don't bother with EWRD.
|
||||
* Return 1 to tell that we can't use WGDS either.
|
||||
*/
|
||||
return 1;
|
||||
}
|
||||
|
||||
ret = iwl_mvm_sar_get_ewrd_table(mvm);
|
||||
@ -968,9 +976,13 @@ static int iwl_mvm_sar_init(struct iwl_mvm *mvm)
|
||||
/* choose profile 1 (WRDS) as default for both chains */
|
||||
ret = iwl_mvm_sar_select_profile(mvm, 1, 1);
|
||||
|
||||
/* if we don't have profile 0 from BIOS, just skip it */
|
||||
/*
|
||||
* If we don't have profile 0 from BIOS, just skip it. This
|
||||
* means that SAR Geo will not be enabled either, even if we
|
||||
* have other valid profiles.
|
||||
*/
|
||||
if (ret == -ENOENT)
|
||||
return 0;
|
||||
return 1;
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -1168,11 +1180,19 @@ int iwl_mvm_up(struct iwl_mvm *mvm)
|
||||
iwl_mvm_unref(mvm, IWL_MVM_REF_UCODE_DOWN);
|
||||
|
||||
ret = iwl_mvm_sar_init(mvm);
|
||||
if (ret)
|
||||
goto error;
|
||||
if (ret == 0) {
|
||||
ret = iwl_mvm_sar_geo_init(mvm);
|
||||
} else if (ret > 0 && !iwl_mvm_sar_get_wgds_table(mvm)) {
|
||||
/*
|
||||
* If basic SAR is not available, we check for WGDS,
|
||||
* which should *not* be available either. If it is
|
||||
* available, issue an error, because we can't use SAR
|
||||
* Geo without basic SAR.
|
||||
*/
|
||||
IWL_ERR(mvm, "BIOS contains WGDS but no WRDS\n");
|
||||
}
|
||||
|
||||
ret = iwl_mvm_sar_geo_init(mvm);
|
||||
if (ret)
|
||||
if (ret < 0)
|
||||
goto error;
|
||||
|
||||
iwl_mvm_leds_sync(mvm);
|
||||
|
@ -301,8 +301,12 @@ struct ieee80211_regdomain *iwl_mvm_get_regdomain(struct wiphy *wiphy,
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (changed)
|
||||
*changed = (resp->status == MCC_RESP_NEW_CHAN_PROFILE);
|
||||
if (changed) {
|
||||
u32 status = le32_to_cpu(resp->status);
|
||||
|
||||
*changed = (status == MCC_RESP_NEW_CHAN_PROFILE ||
|
||||
status == MCC_RESP_ILLEGAL);
|
||||
}
|
||||
|
||||
regd = iwl_parse_nvm_mcc_info(mvm->trans->dev, mvm->cfg,
|
||||
__le32_to_cpu(resp->n_channels),
|
||||
@ -4444,10 +4448,6 @@ static void iwl_mvm_mac_sta_statistics(struct ieee80211_hw *hw,
|
||||
sinfo->filled |= BIT_ULL(NL80211_STA_INFO_SIGNAL_AVG);
|
||||
}
|
||||
|
||||
if (!fw_has_capa(&mvm->fw->ucode_capa,
|
||||
IWL_UCODE_TLV_CAPA_RADIO_BEACON_STATS))
|
||||
return;
|
||||
|
||||
/* if beacon filtering isn't on mac80211 does it anyway */
|
||||
if (!(vif->driver_flags & IEEE80211_VIF_BEACON_FILTER))
|
||||
return;
|
||||
|
@ -539,9 +539,8 @@ iwl_mvm_update_mcc(struct iwl_mvm *mvm, const char *alpha2,
|
||||
}
|
||||
|
||||
IWL_DEBUG_LAR(mvm,
|
||||
"MCC response status: 0x%x. new MCC: 0x%x ('%c%c') change: %d n_chans: %d\n",
|
||||
status, mcc, mcc >> 8, mcc & 0xff,
|
||||
!!(status == MCC_RESP_NEW_CHAN_PROFILE), n_channels);
|
||||
"MCC response status: 0x%x. new MCC: 0x%x ('%c%c') n_chans: %d\n",
|
||||
status, mcc, mcc >> 8, mcc & 0xff, n_channels);
|
||||
|
||||
exit:
|
||||
iwl_free_resp(&cmd);
|
||||
|
@ -858,6 +858,7 @@ iwl_op_mode_mvm_start(struct iwl_trans *trans, const struct iwl_cfg *cfg,
|
||||
iwl_mvm_thermal_exit(mvm);
|
||||
out_free:
|
||||
iwl_fw_flush_dump(&mvm->fwrt);
|
||||
iwl_fw_runtime_free(&mvm->fwrt);
|
||||
|
||||
if (iwlmvm_mod_params.init_dbg)
|
||||
return op_mode;
|
||||
@ -910,6 +911,7 @@ static void iwl_op_mode_mvm_stop(struct iwl_op_mode *op_mode)
|
||||
|
||||
iwl_mvm_tof_clean(mvm);
|
||||
|
||||
iwl_fw_runtime_free(&mvm->fwrt);
|
||||
mutex_destroy(&mvm->mutex);
|
||||
mutex_destroy(&mvm->d0i3_suspend_mutex);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user