]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: ath12k: send peer meta data version to firmware
authorBaochen Qiang <baochen.qiang@oss.qualcomm.com>
Mon, 12 Jan 2026 07:36:36 +0000 (15:36 +0800)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Fri, 16 Jan 2026 01:19:42 +0000 (17:19 -0800)
Peer meta data version is currently not delivered to firmware, resulting
in QCC2072 data path issues.

Parse it from service ready ext2 event and send to firmware in WMI init
command.

Tested-on: QCC2072 hw1.0 PCI WLAN.COL.1.0-01560-QCACOLSWPL_V1_TO_SILICONZ-1
Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.1.c5-00302-QCAHMTSWPL_V1.0_V2.0_SILICONZ-1.115823.3

Signed-off-by: Baochen Qiang <baochen.qiang@oss.qualcomm.com>
Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com>
Link: https://patch.msgid.link/20260112-ath12k-support-qcc2072-v2-16-fc8ce1e43969@oss.qualcomm.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath12k/wifi7/wmi.c
drivers/net/wireless/ath/ath12k/wmi.c
drivers/net/wireless/ath/ath12k/wmi.h

index c575b44a33f3b7931eb7109ce18954a3e3382dc2..ed538d20d324a9a0a313438fb1f66aefd8682fb3 100644 (file)
@@ -102,4 +102,9 @@ void ath12k_wifi7_wmi_init_wcn7850(struct ath12k_base *ab,
        config->num_multicast_filter_entries = 0x20;
        config->num_wow_filters = 0x16;
        config->num_keep_alive_pattern = 0;
+
+       if (test_bit(WMI_TLV_SERVICE_PEER_METADATA_V1A_V1B_SUPPORT, ab->wmi_ab.svc_map))
+               config->peer_metadata_ver = ATH12K_PEER_METADATA_V1A;
+       else
+               config->peer_metadata_ver = ab->wmi_ab.dp_peer_meta_data_ver;
 }
index ed2374c4aac0cd775d7d226f879fecd3a1d67069..84c29e4896a41306cf9d2112fc115dfb3daf8df1 100644 (file)
@@ -5477,6 +5477,10 @@ static int ath12k_wmi_svc_rdy_ext2_parse(struct ath12k_base *ab,
                                    ret);
                        return ret;
                }
+
+               ab->wmi_ab.dp_peer_meta_data_ver =
+                       u32_get_bits(parse->arg.target_cap_flags,
+                                    WMI_TARGET_CAP_FLAGS_RX_PEER_METADATA_VERSION);
                break;
 
        case WMI_TAG_ARRAY_STRUCT:
index daee2787cdfd615440fb9cc1b024bfbc2f6525b3..fdc203fdba0a08eb21cfd904fbaa2810cae20358 100644 (file)
@@ -2783,6 +2783,8 @@ enum wmi_channel_width {
 #define WMI_EHT_MCS_NSS_10_11  GENMASK(11, 8)
 #define WMI_EHT_MCS_NSS_12_13  GENMASK(15, 12)
 
+#define WMI_TARGET_CAP_FLAGS_RX_PEER_METADATA_VERSION  GENMASK(1, 0)
+
 struct wmi_service_ready_ext2_event {
        __le32 reg_db_version;
        __le32 hw_min_max_tx_power_2ghz;
@@ -5230,6 +5232,8 @@ struct ath12k_wmi_base {
        struct ath12k_svc_ext_info svc_ext_info;
        u32 sbs_lower_band_end_freq;
        struct ath12k_hw_mode_info hw_mode_info;
+
+       u8 dp_peer_meta_data_ver;
 };
 
 struct wmi_pdev_set_bios_interface_cmd {