lkml.org 
[lkml]   [2018]   [Apr]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 176/310] ath10k: add BMI parameters to fix calibration from DT/pre-cal
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    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);

    \
     
     \ /
      Last update: 2018-04-11 21:37    [W:4.118 / U:0.192 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site