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

Jeff Johnson jeff.johnson at oss.qualcomm.com
Fri Aug 7 08:39:32 PDT 2026


On 8/7/2026 8:34 AM, Jeff Johnson wrote:
> 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: stable at vger.kernel.org
>> Cc: Manikanta Pubbisetty <quic_mpubbise at quicinc.com>
>> Signed-off-by: André Valentin <avalentin at marcant.net>
>> ---
>>  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

+ Mani's current e-mail address @oss.qualcomm.com



More information about the ath11k mailing list