wifi: ath11k: refactor CE remap & unmap

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
This commit is contained in:
Jeff Johnson 2024-05-03 13:34:37 +03:00 committed by Kalle Valo
parent acaa84009f
commit 8b9ea752a9

View 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);