mirror of
https://github.com/openwrt/openwrt.git
synced 2025-01-13 08:20:07 +00:00
80 lines
3.1 KiB
Diff
80 lines
3.1 KiB
Diff
|
From 5a78ac33e3cb8822da64dd1af196e83664b332b0 Mon Sep 17 00:00:00 2001
|
||
|
From: Aditya Kumar Singh <quic_adisi@quicinc.com>
|
||
|
Date: Thu, 9 Mar 2023 15:23:08 +0530
|
||
|
Subject: [PATCH] wifi: ath11k: fix deinitialization of firmware resources
|
||
|
|
||
|
Currently, in ath11k_ahb_fw_resources_init(), iommu domain
|
||
|
mapping is done only for the chipsets having fixed firmware
|
||
|
memory. Also, for such chipsets, mapping is done only if it
|
||
|
does not have TrustZone support.
|
||
|
|
||
|
During deinitialization, only if TrustZone support is not there,
|
||
|
iommu is unmapped back. However, for non fixed firmware memory
|
||
|
chipsets, TrustZone support is not there and this makes the
|
||
|
condition check to true and it tries to unmap the memory which
|
||
|
was not mapped during initialization.
|
||
|
|
||
|
This leads to the following trace -
|
||
|
|
||
|
[ 83.198790] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000008
|
||
|
[ 83.259537] Modules linked in: ath11k_ahb ath11k qmi_helpers
|
||
|
.. snip ..
|
||
|
[ 83.280286] pstate: 20000005 (nzCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
|
||
|
[ 83.287228] pc : __iommu_unmap+0x30/0x140
|
||
|
[ 83.293907] lr : iommu_unmap+0x5c/0xa4
|
||
|
[ 83.298072] sp : ffff80000b3abad0
|
||
|
.. snip ..
|
||
|
[ 83.369175] Call trace:
|
||
|
[ 83.376282] __iommu_unmap+0x30/0x140
|
||
|
[ 83.378541] iommu_unmap+0x5c/0xa4
|
||
|
[ 83.382360] ath11k_ahb_fw_resource_deinit.part.12+0x2c/0xac [ath11k_ahb]
|
||
|
[ 83.385666] ath11k_ahb_free_resources+0x140/0x17c [ath11k_ahb]
|
||
|
[ 83.392521] ath11k_ahb_shutdown+0x34/0x40 [ath11k_ahb]
|
||
|
[ 83.398248] platform_shutdown+0x20/0x2c
|
||
|
[ 83.403455] device_shutdown+0x16c/0x1c4
|
||
|
[ 83.407621] kernel_restart_prepare+0x34/0x3c
|
||
|
[ 83.411529] kernel_restart+0x14/0x74
|
||
|
[ 83.415781] __do_sys_reboot+0x1c4/0x22c
|
||
|
[ 83.419427] __arm64_sys_reboot+0x1c/0x24
|
||
|
[ 83.423420] invoke_syscall+0x44/0xfc
|
||
|
[ 83.427326] el0_svc_common.constprop.3+0xac/0xe8
|
||
|
[ 83.430974] do_el0_svc+0xa0/0xa8
|
||
|
[ 83.435659] el0_svc+0x1c/0x44
|
||
|
[ 83.438957] el0t_64_sync_handler+0x60/0x144
|
||
|
[ 83.441910] el0t_64_sync+0x15c/0x160
|
||
|
[ 83.446343] Code: aa0103f4 f9400001 f90027a1 d2800001 (f94006a0)
|
||
|
[ 83.449903] ---[ end trace 0000000000000000 ]---
|
||
|
|
||
|
This can be reproduced by probing an AHB chipset which is not
|
||
|
having a fixed memory region. During reboot (or rmmod) trace
|
||
|
can be seen.
|
||
|
|
||
|
Fix this issue by adding a condition check on firmware fixed memory
|
||
|
hw_param as done in the counter initialization function.
|
||
|
|
||
|
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
|
||
|
|
||
|
Fixes: f9eec4947add ("ath11k: Add support for targets without trustzone")
|
||
|
Signed-off-by: Aditya Kumar Singh <quic_adisi@quicinc.com>
|
||
|
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||
|
Link: https://lore.kernel.org/r/20230309095308.24937-1-quic_adisi@quicinc.com
|
||
|
---
|
||
|
drivers/net/wireless/ath/ath11k/ahb.c | 6 ++++++
|
||
|
1 file changed, 6 insertions(+)
|
||
|
|
||
|
--- a/drivers/net/wireless/ath/ath11k/ahb.c
|
||
|
+++ b/drivers/net/wireless/ath/ath11k/ahb.c
|
||
|
@@ -1078,6 +1078,12 @@ static int ath11k_ahb_fw_resource_deinit
|
||
|
struct iommu_domain *iommu;
|
||
|
size_t unmapped_size;
|
||
|
|
||
|
+ /* Chipsets not requiring MSA would have not initialized
|
||
|
+ * MSA resources, return success in such cases.
|
||
|
+ */
|
||
|
+ if (!ab->hw_params.fixed_fw_mem)
|
||
|
+ return 0;
|
||
|
+
|
||
|
if (ab_ahb->fw.use_tz)
|
||
|
return 0;
|
||
|
|