Re: [PATCH] wifi: ath11k: run ahb shutdown() teardown only on WCN6750

Jeff Johnson <[email protected]>
Newsgroups org.kernel.vger.linux-wireless,org.infradead.lists.ath11k,org.kernel.vger.stable
Message-ID <[email protected]>
On 8/7/2026 2:48 AM, André Valentin wrote:
> The AHB shutdown() callback was introduced solely for WCN6750, which has
> to stop DMA before the SMMU is torn down at system reboot/shutdown. It
> was registered unconditionally in the shared ath11k_ahb_driver, so it also
> runs on the IPQ AHB targets (IPQ8074/IPQ6018/IPQ5018), which never had a
> shutdown() handler before and have no such SMMU requirement.
> 
> On IPQ6018 the shutdown teardown stops the WCSS Q6 remote processor
> firmware. Stopping the Q6 firmware leaves shared WCSS state such that the
> boot ROM (SBL1) hangs during DDR training on the following warm reset;
> only a cold (power-on) reset recovers. A plain reboot therefore never
> comes back and needs a physical power cycle.
> 
> This was pinned by bisecting the teardown at reboot: skipping
> ath11k_qmi_firmware_stop() (i.e. not stopping the Q6) is what lets the
> warm reset train DDR and boot normally, whereas none of the q6v5 power,
> reset or clock steps reproduce it on their own.
> 
> Restrict the shutdown() teardown to WCN6750, restoring the pre-regression
> behaviour for the IPQ AHB targets. On reboot/shutdown the whole SoC is
> reset by the boot chain, which re-initializes the WCSS from scratch, so no
> teardown is needed there. Module removal (rmmod / remove()) is unchanged.
> 
> Verified on a MikroTik Chateau 5G R17 ax (IPQ6018): before, a plain reboot
> froze in SBL1 at "sbl1_ddr_set_params"; after, SBL1 reaches "SBL1, End",
> trains DDR and boots the kernel across repeated reboots.
> 
> Fixes: ac41c2b642b1 ("wifi: ath11k: Register shutdown handler for WCN6750")
> Cc: [email protected]
> Cc: Manikanta Pubbisetty <[email protected]>
> Signed-off-by: André Valentin <[email protected]>
> ---
>  drivers/net/wireless/ath/ath11k/ahb.c | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
> 
> diff --git a/drivers/net/wireless/ath/ath11k/ahb.c b/drivers/net/wireless/ath/ath11k/ahb.c
> index 1e1dea4..749d8bf 100644
> --- a/drivers/net/wireless/ath/ath11k/ahb.c
> +++ b/drivers/net/wireless/ath/ath11k/ahb.c
> @@ -1288,6 +1288,18 @@ static void ath11k_ahb_shutdown(struct platform_device *pdev)
>  	 * remove() is invoked during rmmod & shutdown() during
>  	 * system reboot/shutdown.
>  	 */
> +
> +	/* The shutdown() callback was added for WCN6750, which has to stop DMA
> +	 * before the SMMU is torn down. The other AHB targets (IPQ8074/IPQ6018/
> +	 * IPQ5018) have no such requirement, and running the teardown here stops
> +	 * the WCSS Q6 firmware, which leaves shared state that hangs the boot ROM
> +	 * (SBL1) during DDR training on the following warm reset -- only a cold
> +	 * (power-on) reset recovers. Skip it on those targets; the SoC reset
> +	 * re-initializes the WCSS from scratch.
> +	 */
> +	if (ab->hw_rev != ATH11K_HW_WCN6750_HW10)
> +		return;

this is not the correct approach per the driver architecture.
all hardware-specific operations should be driven via the hw_params structure.

/jeff
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.