mirror of
https://github.com/torvalds/linux.git
synced 2026-06-04 20:46:48 +02:00
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:
parent
acaa84009f
commit
8b9ea752a9
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user