diff options
author | Pavel Kubelun <be.dissent@gmail.com> | 2017-06-01 17:13:04 +0300 |
---|---|---|
committer | Felix Fietkau <nbd@nbd.name> | 2017-06-17 11:51:41 +0200 |
commit | 025cb640cdf27f7c68fc1d89d0698605daa06c43 (patch) | |
tree | e3925724a89e50d8f74cd76002325e26f3e983de /package/kernel/mac80211/patches/329-ath10k-add-BMI-parameters-to-fix-calibration-from-DT.patch | |
parent | d80d1b6c42aa663e6104f817daa5ea29d2e7073d (diff) | |
download | upstream-025cb640cdf27f7c68fc1d89d0698605daa06c43.tar.gz upstream-025cb640cdf27f7c68fc1d89d0698605daa06c43.tar.bz2 upstream-025cb640cdf27f7c68fc1d89d0698605daa06c43.zip |
ath10k: increase bmi timeout to fix OTP on qca99xx boards and add bmi identification through pre-cal file
Backporting upstream patches.
Signed-off-by: Pavel Kubelun <be.dissent@gmail.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name> [refresh, rename patches]
Diffstat (limited to 'package/kernel/mac80211/patches/329-ath10k-add-BMI-parameters-to-fix-calibration-from-DT.patch')
-rw-r--r-- | package/kernel/mac80211/patches/329-ath10k-add-BMI-parameters-to-fix-calibration-from-DT.patch | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/329-ath10k-add-BMI-parameters-to-fix-calibration-from-DT.patch b/package/kernel/mac80211/patches/329-ath10k-add-BMI-parameters-to-fix-calibration-from-DT.patch new file mode 100644 index 0000000000..3fcf505e15 --- /dev/null +++ b/package/kernel/mac80211/patches/329-ath10k-add-BMI-parameters-to-fix-calibration-from-DT.patch @@ -0,0 +1,80 @@ +From: Anilkumar Kolli <akolli@qti.qualcomm.com> +Date: Wed, 31 May 2017 14:21:27 +0300 +Subject: [PATCH] ath10k: add BMI parameters to fix calibration from + DT/pre-cal + +QCA99X0, QCA9888, QCA9984 supports calibration data in +either OTP or DT/pre-cal file. Current ath10k supports +Calibration data from OTP only. + +If caldata is loaded from DT/pre-cal file, fetching board id +and applying calibration parameters like tx power gets failed. + +error log: +[ 15.733663] ath10k_pci 0000:01:00.0: failed to fetch board file: -2 +[ 15.741474] ath10k_pci 0000:01:00.0: could not probe fw (-2) + +This patch adds calibration data support from DT/pre-cal +file. Below parameters are used to get board id and +applying calibration parameters from cal data. + + EEPROM[OTP] FLASH[DT/pre-cal file] +Cal param 0x700 0x10000 +Board id 0x10 0x8000 + +Tested on QCA9888 with pre-cal file. + +Signed-off-by: Anilkumar Kolli <akolli@qti.qualcomm.com> +Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com> +--- + +--- a/drivers/net/wireless/ath/ath10k/bmi.h ++++ b/drivers/net/wireless/ath/ath10k/bmi.h +@@ -83,6 +83,8 @@ enum bmi_cmd_id { + #define BMI_NVRAM_SEG_NAME_SZ 16 + + #define BMI_PARAM_GET_EEPROM_BOARD_ID 0x10 ++#define BMI_PARAM_GET_FLASH_BOARD_ID 0x8000 ++#define BMI_PARAM_FLASH_SECTION_ALL 0x10000 + + #define ATH10K_BMI_BOARD_ID_FROM_OTP_MASK 0x7c00 + #define ATH10K_BMI_BOARD_ID_FROM_OTP_LSB 10 +--- a/drivers/net/wireless/ath/ath10k/core.c ++++ b/drivers/net/wireless/ath/ath10k/core.c +@@ -657,7 +657,7 @@ static int ath10k_core_get_board_id_from + { + u32 result, address; + u8 board_id, chip_id; +- int ret; ++ int ret, bmi_board_id_param; + + address = ar->hw_params.patch_load_addr; + +@@ -681,8 +681,13 @@ static int ath10k_core_get_board_id_from + return ret; + } + +- ret = ath10k_bmi_execute(ar, address, BMI_PARAM_GET_EEPROM_BOARD_ID, +- &result); ++ if (ar->cal_mode == ATH10K_PRE_CAL_MODE_DT || ++ ar->cal_mode == ATH10K_PRE_CAL_MODE_FILE) ++ bmi_board_id_param = BMI_PARAM_GET_FLASH_BOARD_ID; ++ else ++ bmi_board_id_param = BMI_PARAM_GET_EEPROM_BOARD_ID; ++ ++ ret = ath10k_bmi_execute(ar, address, bmi_board_id_param, &result); + if (ret) { + ath10k_err(ar, "could not execute otp for board id check: %d\n", + ret); +@@ -810,6 +815,11 @@ static int ath10k_download_and_run_otp(s + return ret; + } + ++ /* As of now pre-cal is valid for 10_4 variants */ ++ if (ar->cal_mode == ATH10K_PRE_CAL_MODE_DT || ++ ar->cal_mode == ATH10K_PRE_CAL_MODE_FILE) ++ bmi_otp_exe_param = BMI_PARAM_FLASH_SECTION_ALL; ++ + ret = ath10k_bmi_execute(ar, address, bmi_otp_exe_param, &result); + if (ret) { + ath10k_err(ar, "could not execute otp (%d)\n", ret); |