mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
wifi: ath11k: Flush the posted write after writing to PCIE_SOC_GLOBAL_RESET
ath11k_pci_soc_global_reset() tries to reset the device by writing to the
PCIE_SOC_GLOBAL_RESET register. But it doesn't do a read-back to ensure
that the write gets flushed to the device before the delay.
This may lead to the delay on the host to be insufficient, if the posted
write doesn't reach the device before the delay.
So add a read-back after writing to the PCIE_SOC_GLOBAL_RESET register and
before the delay.
Compile tested only.
Fixes: f3c603d412 ("ath11k: reset MHI during power down and power up")
Reported-by: Alex Williamson <alex@shazbot.org>
Closes: https://lore.kernel.org/linux-pci/20260622160822.09350246@shazbot.org
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>
Reviewed-by: Baochen Qiang <baochen.qiang@oss.qualcomm.com>
Reviewed-by: Raj Kumar Bhagat <raj.bhagat@oss.qualcomm.com>
Link: https://patch.msgid.link/20260623141649.41087-1-manivannan.sadhasivam@oss.qualcomm.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
This commit is contained in:
parent
7f11e70629
commit
0fe8010fc5
|
|
@ -199,6 +199,8 @@ static void ath11k_pci_soc_global_reset(struct ath11k_base *ab)
|
|||
val |= PCIE_SOC_GLOBAL_RESET_V;
|
||||
|
||||
ath11k_pcic_write32(ab, PCIE_SOC_GLOBAL_RESET, val);
|
||||
/* Flush the posted write to the device */
|
||||
ath11k_pcic_read32(ab, PCIE_SOC_GLOBAL_RESET);
|
||||
|
||||
/* TODO: exact time to sleep is uncertain */
|
||||
delay = 10;
|
||||
|
|
@ -208,6 +210,8 @@ static void ath11k_pci_soc_global_reset(struct ath11k_base *ab)
|
|||
val &= ~PCIE_SOC_GLOBAL_RESET_V;
|
||||
|
||||
ath11k_pcic_write32(ab, PCIE_SOC_GLOBAL_RESET, val);
|
||||
/* Flush the posted write to the device */
|
||||
ath11k_pcic_read32(ab, PCIE_SOC_GLOBAL_RESET);
|
||||
|
||||
mdelay(delay);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user