wifi: ath11k: Include STA_KEEPALIVE_ARP_RESPONSE TLV header by default
authorBaochen Qiang <quic_bqiang@quicinc.com>
Tue, 13 Sep 2022 04:43:58 +0000 (12:43 +0800)
committerKalle Valo <quic_kvalo@quicinc.com>
Mon, 19 Sep 2022 12:43:26 +0000 (15:43 +0300)
In current code STA_KEEPALIVE_ARP_RESPONSE TLV header is included only
when ARP method is used, this causes firmware always to crash when wowlan
is enabled because firmware needs it to be present no matter ARP method
is used or not.

Fix this issue by including STA_KEEPALIVE_ARP_RESPONSE TLV header by
default.

Also fix below typo:
  s/WMI_TAG_STA_KEEPALVE_ARP_RESPONSE/WMI_TAG_STA_KEEPALIVE_ARP_RESPONSE/

Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3

Fixes: 0f84a156aa3b ("ath11k: Handle keepalive during WoWLAN suspend and resume")
Signed-off-by: Baochen Qiang <quic_bqiang@quicinc.com>
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
Link: https://lore.kernel.org/r/20220913044358.2037-1-quic_bqiang@quicinc.com
drivers/net/wireless/ath/ath11k/wmi.c
drivers/net/wireless/ath/ath11k/wmi.h

index c2e1fc49170348c95f6050a8ec209eb220026b00..ea6f3efd745c8198caae77d24104188ae87eedeb 100644 (file)
@@ -8997,12 +8997,13 @@ int ath11k_wmi_sta_keepalive(struct ath11k *ar,
        cmd->interval = arg->interval;
        cmd->method = arg->method;
 
+       arp = (struct wmi_sta_keepalive_arp_resp *)(cmd + 1);
+       arp->tlv_header = FIELD_PREP(WMI_TLV_TAG,
+                                    WMI_TAG_STA_KEEPALIVE_ARP_RESPONSE) |
+                        FIELD_PREP(WMI_TLV_LEN, sizeof(*arp) - TLV_HDR_SIZE);
+
        if (arg->method == WMI_STA_KEEPALIVE_METHOD_UNSOLICITED_ARP_RESPONSE ||
            arg->method == WMI_STA_KEEPALIVE_METHOD_GRATUITOUS_ARP_REQUEST) {
-               arp = (struct wmi_sta_keepalive_arp_resp *)(cmd + 1);
-               arp->tlv_header = FIELD_PREP(WMI_TLV_TAG,
-                                            WMI_TAG_STA_KEEPALVE_ARP_RESPONSE) |
-                                FIELD_PREP(WMI_TLV_LEN, sizeof(*arp) - TLV_HDR_SIZE);
                arp->src_ip4_addr = arg->src_ip4_addr;
                arp->dest_ip4_addr = arg->dest_ip4_addr;
                ether_addr_copy(arp->dest_mac_addr.addr, arg->dest_mac_addr);
index cc92f608b2132bbd0d692c54339b0727f684e11d..c3105504bcb6553aacfb63a5055112e2b4db5404 100644 (file)
@@ -1214,7 +1214,7 @@ enum wmi_tlv_tag {
        WMI_TAG_NS_OFFLOAD_TUPLE,
        WMI_TAG_FTM_INTG_CMD,
        WMI_TAG_STA_KEEPALIVE_CMD,
-       WMI_TAG_STA_KEEPALVE_ARP_RESPONSE,
+       WMI_TAG_STA_KEEPALIVE_ARP_RESPONSE,
        WMI_TAG_P2P_SET_VENDOR_IE_DATA_CMD,
        WMI_TAG_AP_PS_PEER_CMD,
        WMI_TAG_PEER_RATE_RETRY_SCHED_CMD,