| From foo@baz Mon Apr 9 17:09:24 CEST 2018 |
| From: Anilkumar Kolli <akolli@qti.qualcomm.com> |
| Date: Wed, 31 May 2017 14:21:27 +0300 |
| Subject: ath10k: add BMI parameters to fix calibration from DT/pre-cal |
| |
| From: Anilkumar Kolli <akolli@qti.qualcomm.com> |
| |
| |
| [ Upstream commit a9f5f287fa1d47d61dfa8b60f94831174b2ea4d0 ] |
| |
| 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> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/wireless/ath/ath10k/bmi.h | 2 ++ |
| drivers/net/wireless/ath/ath10k/core.c | 16 +++++++++++++--- |
| 2 files changed, 15 insertions(+), 3 deletions(-) |
| |
| --- 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 |
| @@ -652,7 +652,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; |
| |
| @@ -676,8 +676,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); |
| @@ -739,6 +744,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); |