wifi: ath12k: add qmi_cnss_feature_bitmap field to hardware parameters
authorCarl Huang <quic_cjhuang@quicinc.com>
Fri, 21 Apr 2023 09:44:56 +0000 (12:44 +0300)
committerKalle Valo <quic_kvalo@quicinc.com>
Wed, 26 Apr 2023 14:30:07 +0000 (17:30 +0300)
Currently the CNSS (Connectivity Subsystem) QMI feature is assigned to
qmi_wlanfw_host_cap_req_msg_v01 request directly, this prevents chip-specific
CNSS features from being added easily.

Solve this by adding a new field qmi_cnss_feature_bitmap to hw_params so
chip-specific CNSS features can be assigned to this field and later assigned to
qmi_wlanfw_host_cap_req_msg_v01 request.

Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0-03427-QCAHMTSWPL_V1.0_V2.0_SILICONZ-1.15378.4

Signed-off-by: Carl Huang <quic_cjhuang@quicinc.com>
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
Link: https://lore.kernel.org/r/20230404032057.3236122-2-quic_cjhuang@quicinc.com
drivers/net/wireless/ath/ath12k/hw.c
drivers/net/wireless/ath/ath12k/hw.h
drivers/net/wireless/ath/ath12k/qmi.c

index 1ffac7e..cc47cbf 100644 (file)
@@ -906,6 +906,7 @@ static const struct ath12k_hw_params ath12k_hw_params[] = {
 
                .hal_ops = &hal_qcn9274_ops,
 
+               .qmi_cnss_feature_bitmap = BIT(CNSS_QDSS_CFG_MISS_V01),
        },
        {
                .name = "wcn7850 hw2.0",
@@ -960,6 +961,8 @@ static const struct ath12k_hw_params ath12k_hw_params[] = {
                .wmi_init = ath12k_wmi_init_wcn7850,
 
                .hal_ops = &hal_wcn7850_ops,
+
+               .qmi_cnss_feature_bitmap = BIT(CNSS_QDSS_CFG_MISS_V01),
        },
        {
                .name = "qcn9274 hw2.0",
@@ -1013,6 +1016,8 @@ static const struct ath12k_hw_params ath12k_hw_params[] = {
                .wmi_init = ath12k_wmi_init_qcn9274,
 
                .hal_ops = &hal_qcn9274_ops,
+
+               .qmi_cnss_feature_bitmap = BIT(CNSS_QDSS_CFG_MISS_V01),
        },
 };
 
index e346100..e6c4223 100644 (file)
@@ -184,6 +184,8 @@ struct ath12k_hw_params {
                         struct ath12k_wmi_resource_config_arg *config);
 
        const struct hal_ops *hal_ops;
+
+       u64 qmi_cnss_feature_bitmap;
 };
 
 struct ath12k_hw_ops {
index 03ba245..4afba76 100644 (file)
@@ -1942,8 +1942,10 @@ static int ath12k_qmi_host_cap_send(struct ath12k_base *ab)
        req.cal_done_valid = 1;
        req.cal_done = ab->qmi.cal_done;
 
-       req.feature_list_valid = 1;
-       req.feature_list = BIT(CNSS_QDSS_CFG_MISS_V01);
+       if (ab->hw_params->qmi_cnss_feature_bitmap) {
+               req.feature_list_valid = 1;
+               req.feature_list = ab->hw_params->qmi_cnss_feature_bitmap;
+       }
 
        /* BRINGUP: here we are piggybacking a lot of stuff using
         * internal_sleep_clock, should it be split?