Message ID | 20240927095825.22317-1-quic_bpothuno@quicinc.com |
---|---|
State | New |
Headers | show |
Series | wifi: ath11k: Fix CE offset address calculation for WCN6750 in SSR | expand |
On 9/27/2024 2:58 AM, Balaji Pothunoori wrote: > Currently, mem_ce and mem iomem addresses are used to calculate the > CE offset address. mem_ce is initialized with mem address, and for > targets where ce_remap is needed, mem_ce is remapped to a new address > space during AHB probe. > > For targets such as WCN6750 in which CE address space is same as WCSS > address space (i.e. "ce_remap" hw_param is set to false), mem_ce and > mem iomem addresses are same. In the initial SRNG setup for such targets, > the CE offset address and hence CE register base addresses are > calculated correctly in ath11k_hal_srng_init() as both mem and mem_ce > are initialized with same iomem address. > > Later, after the firmware download, mem is initialized with BAR address > received in qmi_wlanfw_device_info_resp_msg_v01 QMI message, while mem_ce > is not updated. > > After initial setup success, during Subsystem Restart (SSR), as part > of reinitialization, ath11k_hal_srng_init() will be called again, > and CE offset address will be calculated incorrectly this time as mem_ce > address was not updated. Due to the incorrect CE offset address, > APPS accesses an invalid CE register address which leads to improper > behavior in firmware after SSR is triggered. > > To fix the above issue, update mem_ce to mem iomem address in > ath11k_qmi_request_device_info() for targets which do not support > ce_remap feature. > > Fixes: b42b3678c91f("wifi: ath11k: remap ce register space for IPQ5018") Not quite correct, missing space after the hash. Should be: Fixes: b42b3678c91f ("wifi: ath11k: remap ce register space for IPQ5018") hint: if you add the following to your git config file, you can issue the command "git fixes <hash>" and it will emit the correct Fixes: tag. [alias] fixes = show -q --format=fixes [pretty] fixes = Fixes: %h (\"%s\") [core] abbrev = 12 No need to resend to fix this -- I'll fix it in the pending branch > Signed-off-by: Balaji Pothunoori <quic_bpothuno@quicinc.com> > --- > drivers/net/wireless/ath/ath11k/qmi.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/net/wireless/ath/ath11k/qmi.c b/drivers/net/wireless/ath/ath11k/qmi.c > index f477afd325de..7a22483b35cd 100644 > --- a/drivers/net/wireless/ath/ath11k/qmi.c > +++ b/drivers/net/wireless/ath/ath11k/qmi.c > @@ -2180,6 +2180,9 @@ static int ath11k_qmi_request_device_info(struct ath11k_base *ab) > ab->mem = bar_addr_va; > ab->mem_len = resp.bar_size; > > + if (!ab->hw_params.ce_remap) > + ab->mem_ce = ab->mem; > + > return 0; > out: > return ret;
On Fri, 27 Sep 2024 15:28:25 +0530, Balaji Pothunoori wrote: > Currently, mem_ce and mem iomem addresses are used to calculate the > CE offset address. mem_ce is initialized with mem address, and for > targets where ce_remap is needed, mem_ce is remapped to a new address > space during AHB probe. > > For targets such as WCN6750 in which CE address space is same as WCSS > address space (i.e. "ce_remap" hw_param is set to false), mem_ce and > mem iomem addresses are same. In the initial SRNG setup for such targets, > the CE offset address and hence CE register base addresses are > calculated correctly in ath11k_hal_srng_init() as both mem and mem_ce > are initialized with same iomem address. > > [...] Applied, thanks! [1/1] wifi: ath11k: Fix CE offset address calculation for WCN6750 in SSR commit: b037edd0c3304908bcddbb9765ba266b6b803ff9 Best regards,
diff --git a/drivers/net/wireless/ath/ath11k/qmi.c b/drivers/net/wireless/ath/ath11k/qmi.c index f477afd325de..7a22483b35cd 100644 --- a/drivers/net/wireless/ath/ath11k/qmi.c +++ b/drivers/net/wireless/ath/ath11k/qmi.c @@ -2180,6 +2180,9 @@ static int ath11k_qmi_request_device_info(struct ath11k_base *ab) ab->mem = bar_addr_va; ab->mem_len = resp.bar_size; + if (!ab->hw_params.ce_remap) + ab->mem_ce = ab->mem; + return 0; out: return ret;
Currently, mem_ce and mem iomem addresses are used to calculate the CE offset address. mem_ce is initialized with mem address, and for targets where ce_remap is needed, mem_ce is remapped to a new address space during AHB probe. For targets such as WCN6750 in which CE address space is same as WCSS address space (i.e. "ce_remap" hw_param is set to false), mem_ce and mem iomem addresses are same. In the initial SRNG setup for such targets, the CE offset address and hence CE register base addresses are calculated correctly in ath11k_hal_srng_init() as both mem and mem_ce are initialized with same iomem address. Later, after the firmware download, mem is initialized with BAR address received in qmi_wlanfw_device_info_resp_msg_v01 QMI message, while mem_ce is not updated. After initial setup success, during Subsystem Restart (SSR), as part of reinitialization, ath11k_hal_srng_init() will be called again, and CE offset address will be calculated incorrectly this time as mem_ce address was not updated. Due to the incorrect CE offset address, APPS accesses an invalid CE register address which leads to improper behavior in firmware after SSR is triggered. To fix the above issue, update mem_ce to mem iomem address in ath11k_qmi_request_device_info() for targets which do not support ce_remap feature. Fixes: b42b3678c91f("wifi: ath11k: remap ce register space for IPQ5018") Signed-off-by: Balaji Pothunoori <quic_bpothuno@quicinc.com> --- drivers/net/wireless/ath/ath11k/qmi.c | 3 +++ 1 file changed, 3 insertions(+)