]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ath10k: add BMI parameters to fix calibration from DT/pre-cal
authorAnilkumar Kolli <akolli@qti.qualcomm.com>
Wed, 31 May 2017 11:21:27 +0000 (14:21 +0300)
committerKalle Valo <kvalo@qca.qualcomm.com>
Thu, 1 Jun 2017 12:58:09 +0000 (15:58 +0300)
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>
drivers/net/wireless/ath/ath10k/bmi.h
drivers/net/wireless/ath/ath10k/core.c

index ff97e0e73c4e31c7ebb5d5657265763a0f173be3..9c0839b2ca8f86a6121249b269b11c45157831a3 100644 (file)
@@ -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
index eea111d704c5dbd6f3c0b18fa18bce03b0d69334..ce79a2e070bd3bf942fe93d0fc7379d621df7fe8 100644 (file)
@@ -691,7 +691,7 @@ static int ath10k_core_get_board_id_from_otp(struct ath10k *ar)
 {
        u32 result, address;
        u8 board_id, chip_id;
-       int ret;
+       int ret, bmi_board_id_param;
 
        address = ar->hw_params.patch_load_addr;
 
@@ -715,8 +715,13 @@ static int ath10k_core_get_board_id_from_otp(struct ath10k *ar)
                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);
@@ -845,6 +850,11 @@ static int ath10k_download_and_run_otp(struct ath10k *ar)
                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);