]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
wifi: ath11k: refactor CE remap & unmap
authorJeff Johnson <quic_jjohnson@quicinc.com>
Fri, 3 May 2024 10:34:37 +0000 (13:34 +0300)
committerKalle Valo <quic_kvalo@quicinc.com>
Fri, 3 May 2024 13:15:16 +0000 (16:15 +0300)
Currently the logic that handles hw_params->ce_remap is inline code,
both for doing the remap and the unmap. An upcoming change needs to do
the unmap in a second place, so refactor the unmap logic into a
separate function. And although it is only called from one place,
refactor the remap logic as well to have functional symmetry.

No functional changes, compile tested only.

Signed-off-by: Jeff Johnson <quic_jjohnson@quicinc.com>
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
Link: https://msgid.link/20240430-ce-unmap-v1-1-e468328f95d9@quicinc.com
drivers/net/wireless/ath/ath11k/ahb.c

index ca0f17ddebbaac749a4b04fa11d72f378ab0a027..88dfef71c2b598b11790d4c8a12cc5a67a9577c8 100644 (file)
@@ -954,6 +954,36 @@ static int ath11k_ahb_setup_msa_resources(struct ath11k_base *ab)
        return 0;
 }
 
+static int ath11k_ahb_ce_remap(struct ath11k_base *ab)
+{
+       const struct ce_remap *ce_remap = ab->hw_params.ce_remap;
+       struct platform_device *pdev = ab->pdev;
+
+       if (!ce_remap) {
+               /* no separate CE register space */
+               ab->mem_ce = ab->mem;
+               return 0;
+       }
+
+       /* ce register space is moved out of wcss unlike ipq8074 or ipq6018
+        * and the space is not contiguous, hence remapping the CE registers
+        * to a new space for accessing them.
+        */
+       ab->mem_ce = ioremap(ce_remap->base, ce_remap->size);
+       if (!ab->mem_ce) {
+               dev_err(&pdev->dev, "ce ioremap error\n");
+               return -ENOMEM;
+       }
+
+       return 0;
+}
+
+static void ath11k_ahb_ce_unmap(struct ath11k_base *ab)
+{
+       if (ab->hw_params.ce_remap)
+               iounmap(ab->mem_ce);
+}
+
 static int ath11k_ahb_fw_resources_init(struct ath11k_base *ab)
 {
        struct ath11k_ahb *ab_ahb = ath11k_ahb_priv(ab);
@@ -1146,21 +1176,9 @@ static int ath11k_ahb_probe(struct platform_device *pdev)
        if (ret)
                goto err_core_free;
 
-       ab->mem_ce = ab->mem;
-
-       if (ab->hw_params.ce_remap) {
-               const struct ce_remap *ce_remap = ab->hw_params.ce_remap;
-               /* ce register space is moved out of wcss unlike ipq8074 or ipq6018
-                * and the space is not contiguous, hence remapping the CE registers
-                * to a new space for accessing them.
-                */
-               ab->mem_ce = ioremap(ce_remap->base, ce_remap->size);
-               if (!ab->mem_ce) {
-                       dev_err(&pdev->dev, "ce ioremap error\n");
-                       ret = -ENOMEM;
-                       goto err_core_free;
-               }
-       }
+       ret = ath11k_ahb_ce_remap(ab);
+       if (ret)
+               goto err_core_free;
 
        ret = ath11k_ahb_fw_resources_init(ab);
        if (ret)
@@ -1248,9 +1266,7 @@ static void ath11k_ahb_free_resources(struct ath11k_base *ab)
        ath11k_ahb_release_smp2p_handle(ab);
        ath11k_ahb_fw_resource_deinit(ab);
        ath11k_ce_free_pipes(ab);
-
-       if (ab->hw_params.ce_remap)
-               iounmap(ab->mem_ce);
+       ath11k_ahb_ce_unmap(ab);
 
        ath11k_core_free(ab);
        platform_set_drvdata(pdev, NULL);