wifi: ath11k: Split coldboot calibration hw_param
authorSeevalamuthu Mariappan <quic_seevalam@quicinc.com>
Wed, 26 Jul 2023 14:10:30 +0000 (19:40 +0530)
committerKalle Valo <quic_kvalo@quicinc.com>
Wed, 2 Aug 2023 16:49:38 +0000 (19:49 +0300)
QCN9074 enables coldboot calibration only in Factory Test Mode (FTM).
Hence, split cold_boot_calib to two hw_params for mission and FTM
mode.

Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1

Signed-off-by: Seevalamuthu Mariappan <quic_seevalam@quicinc.com>
Signed-off-by: Raj Kumar Bhagat <quic_rajkbhag@quicinc.com>
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
Link: https://lore.kernel.org/r/20230726141032.3061-2-quic_rajkbhag@quicinc.com
drivers/net/wireless/ath/ath11k/ahb.c
drivers/net/wireless/ath/ath11k/core.c
drivers/net/wireless/ath/ath11k/core.h
drivers/net/wireless/ath/ath11k/hw.h
drivers/net/wireless/ath/ath11k/qmi.c

index 1cebba7889d78d40e055c5e1f34ae9fcfccfbc2a..56aea2bc978716ef342fc10ef792b2789238af41 100644 (file)
@@ -423,8 +423,7 @@ static int ath11k_ahb_fwreset_from_cold_boot(struct ath11k_base *ab)
 {
        int timeout;
 
-       if (ath11k_cold_boot_cal == 0 || ab->qmi.cal_done ||
-           ab->hw_params.cold_boot_calib == 0 ||
+       if (!ath11k_core_coldboot_cal_support(ab) || ab->qmi.cal_done ||
            ab->hw_params.cbcal_restart_fw == 0)
                return 0;
 
index bebfd342e28b2beaa0a0130a3a326a4762ef5509..d5bf2896d8c593323cc85c6d79c44dddcce01e08 100644 (file)
@@ -86,7 +86,8 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
                .supports_shadow_regs = false,
                .idle_ps = false,
                .supports_sta_ps = false,
-               .cold_boot_calib = true,
+               .coldboot_cal_mm = true,
+               .coldboot_cal_ftm = true,
                .cbcal_restart_fw = true,
                .fw_mem_mode = 0,
                .num_vdevs = 16 + 1,
@@ -167,7 +168,8 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
                .supports_shadow_regs = false,
                .idle_ps = false,
                .supports_sta_ps = false,
-               .cold_boot_calib = true,
+               .coldboot_cal_mm = true,
+               .coldboot_cal_ftm = true,
                .cbcal_restart_fw = true,
                .fw_mem_mode = 0,
                .num_vdevs = 16 + 1,
@@ -248,7 +250,8 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
                .supports_shadow_regs = true,
                .idle_ps = true,
                .supports_sta_ps = true,
-               .cold_boot_calib = false,
+               .coldboot_cal_mm = false,
+               .coldboot_cal_ftm = false,
                .cbcal_restart_fw = false,
                .fw_mem_mode = 0,
                .num_vdevs = 16 + 1,
@@ -332,7 +335,8 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
                .supports_shadow_regs = false,
                .idle_ps = false,
                .supports_sta_ps = false,
-               .cold_boot_calib = false,
+               .coldboot_cal_mm = false,
+               .coldboot_cal_ftm = false,
                .cbcal_restart_fw = false,
                .fw_mem_mode = 2,
                .num_vdevs = 8,
@@ -413,7 +417,8 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
                .supports_shadow_regs = true,
                .idle_ps = true,
                .supports_sta_ps = true,
-               .cold_boot_calib = false,
+               .coldboot_cal_mm = false,
+               .coldboot_cal_ftm = false,
                .cbcal_restart_fw = false,
                .fw_mem_mode = 0,
                .num_vdevs = 16 + 1,
@@ -495,7 +500,8 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
                .supports_shadow_regs = true,
                .idle_ps = true,
                .supports_sta_ps = true,
-               .cold_boot_calib = false,
+               .coldboot_cal_mm = false,
+               .coldboot_cal_ftm = false,
                .cbcal_restart_fw = false,
                .fw_mem_mode = 0,
                .num_vdevs = 16 + 1,
@@ -578,7 +584,8 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
                .supports_shadow_regs = true,
                .idle_ps = true,
                .supports_sta_ps = true,
-               .cold_boot_calib = true,
+               .coldboot_cal_mm = true,
+               .coldboot_cal_ftm = true,
                .cbcal_restart_fw = false,
                .fw_mem_mode = 0,
                .num_vdevs = 16 + 1,
@@ -667,7 +674,8 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
                .supports_suspend = false,
                .hal_params = &ath11k_hw_hal_params_ipq8074,
                .single_pdev_only = false,
-               .cold_boot_calib = true,
+               .coldboot_cal_mm = true,
+               .coldboot_cal_ftm = true,
                .cbcal_restart_fw = true,
                .fix_l1ss = true,
                .supports_dynamic_smps_6ghz = false,
@@ -749,6 +757,18 @@ void ath11k_fw_stats_free(struct ath11k_fw_stats *stats)
        ath11k_fw_stats_bcn_free(&stats->bcn);
 }
 
+bool ath11k_core_coldboot_cal_support(struct ath11k_base *ab)
+{
+       if (!ath11k_cold_boot_cal)
+               return false;
+
+       if (ath11k_ftm_mode)
+               return ab->hw_params.coldboot_cal_ftm;
+
+       else
+               return ab->hw_params.coldboot_cal_mm;
+}
+
 int ath11k_core_suspend(struct ath11k_base *ab)
 {
        int ret;
index 9d15b4390b9c88a335b61469483e51e0f5160a77..b04447762483767ace826fe2cb4f934bc82584ae 100644 (file)
@@ -1186,6 +1186,7 @@ void ath11k_core_halt(struct ath11k *ar);
 int ath11k_core_resume(struct ath11k_base *ab);
 int ath11k_core_suspend(struct ath11k_base *ab);
 void ath11k_core_pre_reconfigure_recovery(struct ath11k_base *ab);
+bool ath11k_core_coldboot_cal_support(struct ath11k_base *ab);
 
 const struct firmware *ath11k_core_firmware_request(struct ath11k_base *ab,
                                                    const char *filename);
index f5533630a7f9d3d03509b5f384ce4b8317bad651..d51a99669dd6eef4cc2bd74fc5dff75ff3fc8507 100644 (file)
@@ -187,7 +187,8 @@ struct ath11k_hw_params {
        bool supports_shadow_regs;
        bool idle_ps;
        bool supports_sta_ps;
-       bool cold_boot_calib;
+       bool coldboot_cal_mm;
+       bool coldboot_cal_ftm;
        bool cbcal_restart_fw;
        int fw_mem_mode;
        u32 num_vdevs;
index d4eaf7d2ba84170a0cd3ddd034bfc06e97c1601b..91a214caa8b504ce82dc8ea062733c2f634b6f10 100644 (file)
@@ -2079,7 +2079,7 @@ static int ath11k_qmi_assign_target_mem_chunk(struct ath11k_base *ab)
                                return -EINVAL;
                        }
 
-                       if (ath11k_cold_boot_cal && ab->hw_params.cold_boot_calib) {
+                       if (ath11k_core_coldboot_cal_support(ab)) {
                                if (hremote_node) {
                                        ab->qmi.target_mem[idx].paddr =
                                                        res.start + host_ddr_sz;
@@ -3209,8 +3209,8 @@ static void ath11k_qmi_driver_event_work(struct work_struct *work)
                                break;
                        }
 
-                       if (ath11k_cold_boot_cal && ab->qmi.cal_done == 0 &&
-                           ab->hw_params.cold_boot_calib) {
+                       if (ab->qmi.cal_done == 0 &&
+                           ath11k_core_coldboot_cal_support(ab)) {
                                ath11k_qmi_process_coldboot_calibration(ab);
                        } else {
                                clear_bit(ATH11K_FLAG_CRASH_FLUSH,