]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: ath11k: use union for vaddr and iaddr in target_mem_chunk
authorMiaoqing Pan <quic_miaoqing@quicinc.com>
Tue, 13 Aug 2024 01:30:27 +0000 (09:30 +0800)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Tue, 18 Feb 2025 17:53:34 +0000 (09:53 -0800)
The value of 'ab->hw_params.fixed_mem_region' determines that
only one variable 'vaddr' or 'iaddr' is used in target_mem_chunk.
So use an anonymous union instead, easy to check whether the
memory is set or not.

Tested-on: WCN6855 hw2.1 PCI WLAN.HSP.1.1-04358-QCAHSPSWPL_V1_V2_SILICONZ_LITE-1

Signed-off-by: Miaoqing Pan <quic_miaoqing@quicinc.com>
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
Link: https://patch.msgid.link/20240813013028.2708111-1-quic_miaoqing@quicinc.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath11k/qmi.c
drivers/net/wireless/ath/ath11k/qmi.h

index 5759fc52131623b29dd474154eab5dfc0c9783e4..4f8b08ed1bbc6ec426da83bd7ce49a73b3a93c0c 100644 (file)
@@ -1957,13 +1957,15 @@ static void ath11k_qmi_free_target_mem_chunk(struct ath11k_base *ab)
        int i;
 
        for (i = 0; i < ab->qmi.mem_seg_count; i++) {
-               if ((ab->hw_params.fixed_mem_region ||
-                    test_bit(ATH11K_FLAG_FIXED_MEM_RGN, &ab->dev_flags)) &&
-                    ab->qmi.target_mem[i].iaddr)
-                       iounmap(ab->qmi.target_mem[i].iaddr);
+               if (!ab->qmi.target_mem[i].anyaddr)
+                       continue;
 
-               if (!ab->qmi.target_mem[i].vaddr)
+               if (ab->hw_params.fixed_mem_region ||
+                   test_bit(ATH11K_FLAG_FIXED_MEM_RGN, &ab->dev_flags)) {
+                       iounmap(ab->qmi.target_mem[i].iaddr);
+                       ab->qmi.target_mem[i].iaddr = NULL;
                        continue;
+               }
 
                dma_free_coherent(ab->dev,
                                  ab->qmi.target_mem[i].prev_size,
@@ -2070,7 +2072,7 @@ static int ath11k_qmi_assign_target_mem_chunk(struct ath11k_base *ab)
                        break;
                case BDF_MEM_REGION_TYPE:
                        ab->qmi.target_mem[idx].paddr = ab->hw_params.bdf_addr;
-                       ab->qmi.target_mem[idx].vaddr = NULL;
+                       ab->qmi.target_mem[idx].iaddr = NULL;
                        ab->qmi.target_mem[idx].size = ab->qmi.target_mem[i].size;
                        ab->qmi.target_mem[idx].type = ab->qmi.target_mem[i].type;
                        idx++;
@@ -2093,10 +2095,11 @@ static int ath11k_qmi_assign_target_mem_chunk(struct ath11k_base *ab)
                                } else {
                                        ab->qmi.target_mem[idx].paddr =
                                                ATH11K_QMI_CALDB_ADDRESS;
+                                       ab->qmi.target_mem[idx].iaddr = NULL;
                                }
                        } else {
                                ab->qmi.target_mem[idx].paddr = 0;
-                               ab->qmi.target_mem[idx].vaddr = NULL;
+                               ab->qmi.target_mem[idx].iaddr = NULL;
                        }
                        ab->qmi.target_mem[idx].size = ab->qmi.target_mem[i].size;
                        ab->qmi.target_mem[idx].type = ab->qmi.target_mem[i].type;
index 7e06d100af57594970afa171923bba531ccd58f3..fdf9b5f8c19f17db9c4ea06e8f308abfc096ad7e 100644 (file)
@@ -1,7 +1,7 @@
 /* SPDX-License-Identifier: BSD-3-Clause-Clear */
 /*
  * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
  */
 
 #ifndef ATH11K_QMI_H
@@ -102,8 +102,11 @@ struct target_mem_chunk {
        u32 prev_size;
        u32 prev_type;
        dma_addr_t paddr;
-       u32 *vaddr;
-       void __iomem *iaddr;
+       union {
+               u32 *vaddr;
+               void __iomem *iaddr;
+               void *anyaddr;
+       };
 };
 
 struct target_info {