|
|
@@ -261,7 +261,7 @@ void ath10k_core_get_fw_features_str(struct ath10k *ar,
|
|
|
int i;
|
|
|
|
|
|
for (i = 0; i < ATH10K_FW_FEATURE_COUNT; i++) {
|
|
|
- if (test_bit(i, ar->fw_features)) {
|
|
|
+ if (test_bit(i, ar->normal_mode_fw.fw_file.fw_features)) {
|
|
|
if (len > 0)
|
|
|
len += scnprintf(buf + len, buf_len - len, ",");
|
|
|
|
|
|
@@ -627,7 +627,7 @@ static int ath10k_download_and_run_otp(struct ath10k *ar)
|
|
|
ath10k_dbg(ar, ATH10K_DBG_BOOT, "boot otp execute result %d\n", result);
|
|
|
|
|
|
if (!(skip_otp || test_bit(ATH10K_FW_FEATURE_IGNORE_OTP_RESULT,
|
|
|
- ar->fw_features)) &&
|
|
|
+ ar->running_fw->fw_file.fw_features)) &&
|
|
|
result != 0) {
|
|
|
ath10k_err(ar, "otp calibration failed: %d", result);
|
|
|
return -EINVAL;
|
|
|
@@ -1074,13 +1074,13 @@ static int ath10k_core_fetch_firmware_api_n(struct ath10k *ar, const char *name,
|
|
|
ath10k_dbg(ar, ATH10K_DBG_BOOT,
|
|
|
"Enabling feature bit: %i\n",
|
|
|
i);
|
|
|
- __set_bit(i, ar->fw_features);
|
|
|
+ __set_bit(i, fw_file->fw_features);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
ath10k_dbg_dump(ar, ATH10K_DBG_BOOT, "features", "",
|
|
|
- ar->fw_features,
|
|
|
- sizeof(ar->fw_features));
|
|
|
+ ar->running_fw->fw_file.fw_features,
|
|
|
+ sizeof(fw_file->fw_features));
|
|
|
break;
|
|
|
case ATH10K_FW_IE_FW_IMAGE:
|
|
|
ath10k_dbg(ar, ATH10K_DBG_BOOT,
|
|
|
@@ -1430,8 +1430,10 @@ static void ath10k_core_restart(struct work_struct *work)
|
|
|
|
|
|
static int ath10k_core_init_firmware_features(struct ath10k *ar)
|
|
|
{
|
|
|
- if (test_bit(ATH10K_FW_FEATURE_WMI_10_2, ar->fw_features) &&
|
|
|
- !test_bit(ATH10K_FW_FEATURE_WMI_10X, ar->fw_features)) {
|
|
|
+ struct ath10k_fw_file *fw_file = &ar->normal_mode_fw.fw_file;
|
|
|
+
|
|
|
+ if (test_bit(ATH10K_FW_FEATURE_WMI_10_2, fw_file->fw_features) &&
|
|
|
+ !test_bit(ATH10K_FW_FEATURE_WMI_10X, fw_file->fw_features)) {
|
|
|
ath10k_err(ar, "feature bits corrupted: 10.2 feature requires 10.x feature to be set as well");
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
@@ -1450,7 +1452,7 @@ static int ath10k_core_init_firmware_features(struct ath10k *ar)
|
|
|
break;
|
|
|
case ATH10K_CRYPT_MODE_SW:
|
|
|
if (!test_bit(ATH10K_FW_FEATURE_RAW_MODE_SUPPORT,
|
|
|
- ar->fw_features)) {
|
|
|
+ fw_file->fw_features)) {
|
|
|
ath10k_err(ar, "cryptmode > 0 requires raw mode support from firmware");
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
@@ -1469,7 +1471,7 @@ static int ath10k_core_init_firmware_features(struct ath10k *ar)
|
|
|
|
|
|
if (rawmode) {
|
|
|
if (!test_bit(ATH10K_FW_FEATURE_RAW_MODE_SUPPORT,
|
|
|
- ar->fw_features)) {
|
|
|
+ fw_file->fw_features)) {
|
|
|
ath10k_err(ar, "rawmode = 1 requires support from firmware");
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
@@ -1495,9 +1497,9 @@ static int ath10k_core_init_firmware_features(struct ath10k *ar)
|
|
|
* ATH10K_FW_IE_WMI_OP_VERSION.
|
|
|
*/
|
|
|
if (ar->wmi.op_version == ATH10K_FW_WMI_OP_VERSION_UNSET) {
|
|
|
- if (test_bit(ATH10K_FW_FEATURE_WMI_10X, ar->fw_features)) {
|
|
|
+ if (test_bit(ATH10K_FW_FEATURE_WMI_10X, fw_file->fw_features)) {
|
|
|
if (test_bit(ATH10K_FW_FEATURE_WMI_10_2,
|
|
|
- ar->fw_features))
|
|
|
+ fw_file->fw_features))
|
|
|
ar->wmi.op_version = ATH10K_FW_WMI_OP_VERSION_10_2;
|
|
|
else
|
|
|
ar->wmi.op_version = ATH10K_FW_WMI_OP_VERSION_10_1;
|
|
|
@@ -1553,7 +1555,7 @@ static int ath10k_core_init_firmware_features(struct ath10k *ar)
|
|
|
ar->max_spatial_stream = ar->hw_params.max_spatial_stream;
|
|
|
|
|
|
if (test_bit(ATH10K_FW_FEATURE_PEER_FLOW_CONTROL,
|
|
|
- ar->fw_features))
|
|
|
+ fw_file->fw_features))
|
|
|
ar->htt.max_num_pending_tx = TARGET_10_4_NUM_MSDU_DESC_PFC;
|
|
|
else
|
|
|
ar->htt.max_num_pending_tx = TARGET_10_4_NUM_MSDU_DESC;
|
|
|
@@ -1621,7 +1623,7 @@ int ath10k_core_start(struct ath10k *ar, enum ath10k_firmware_mode mode,
|
|
|
* to set the clock source once the target is initialized.
|
|
|
*/
|
|
|
if (test_bit(ATH10K_FW_FEATURE_SUPPORTS_SKIP_CLOCK_INIT,
|
|
|
- ar->fw_features)) {
|
|
|
+ ar->running_fw->fw_file.fw_features)) {
|
|
|
status = ath10k_bmi_write32(ar, hi_skip_clock_init, 1);
|
|
|
if (status) {
|
|
|
ath10k_err(ar, "could not write to skip_clock_init: %d\n",
|