wifi: ath12k: Add support to read EEPROM caldata
authorDinesh Karthikeyan <quic_dinek@quicinc.com>
Fri, 23 Dec 2022 05:06:46 +0000 (10:36 +0530)
committerKalle Valo <quic_kvalo@quicinc.com>
Wed, 18 Jan 2023 06:38:51 +0000 (08:38 +0200)
In current implementation, there is a overhead of maintaining caldata
in the filesystem manually. To eliminate this overhead, for pci based
chipsets, if calibration data is present in EEPROM, indicate firmware
to download and read caldata from EEPROM. If the caldata is present in
EEPROM, host is notified in the target capability.
Upon this, the download request for the type ATH12K_QMI_FILE_TYPE_EEPROM
is sent to firmware.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1

Signed-off-by: Dinesh Karthikeyan <quic_dinek@quicinc.com>
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
Link: https://lore.kernel.org/r/20221223050646.27785-4-quic_dinek@quicinc.com
drivers/net/wireless/ath/ath12k/qmi.c

index a69307bea596ec7de90a2f400bffe6ad4e2ecc59..979a63f2e2ab8c1f2f95dc4c11bb83df0cfbd101 100644 (file)
@@ -2371,12 +2371,16 @@ static int ath12k_qmi_load_file_target_mem(struct ath12k_base *ab,
                        goto out;
                }
 
-               remaining -= req->data_len;
-               temp += req->data_len;
-               req->seg_id++;
-               ath12k_dbg(ab, ATH12K_DBG_QMI,
-                          "qmi bdf download request remaining %i\n",
-                          remaining);
+               if (type == ATH12K_QMI_FILE_TYPE_EEPROM) {
+                       remaining = 0;
+               } else {
+                       remaining -= req->data_len;
+                       temp += req->data_len;
+                       req->seg_id++;
+                       ath12k_dbg(ab, ATH12K_DBG_QMI,
+                                  "qmi bdf download request remaining %i\n",
+                                  remaining);
+               }
        }
 
 out:
@@ -2422,7 +2426,7 @@ static int ath12k_qmi_load_bdf_qmi(struct ath12k_base *ab,
        case ATH12K_QMI_BDF_TYPE_CALIBRATION:
 
                if (ab->qmi.target.eeprom_caldata) {
-                       file_type = ATH12K_QMI_FILE_TYPE_CALDATA;
+                       file_type = ATH12K_QMI_FILE_TYPE_EEPROM;
                        tmp = filename;
                        fw_size = ATH12K_QMI_MAX_BDF_FILE_NAME_SIZE;
                } else {