Re: [PATCH v13] PCI: Add device-specific reset for Qualcomm devices
Jose Ignacio Tornos Martinez <[email protected]> Wed, 22 Jul 2026 13:28:13 +0200
| Newsgroups | dev.linux.lists.mhi,dev.linux.lists.sashiko-reviews,org.infradead.lists.ath11k,org.infradead.lists.ath12k,org.kernel.vger.linux-kernel,org.kernel.vger.linux-pci,org.kernel.vger.linux-wireless |
|---|---|
| Message-ID | <[email protected]> |
> [Severity: High] > Will this sequence of ioread32 flush reads and > read_poll_timeout trigger Master Aborts on architectures > with strict error handling? > > The SoC global reset explicitly drops the device PCIe link. > Performing ioread32 flush reads immediately after asserting > the reset, and then actively polling the disconnected MMIO > space with read_poll_timeout while the link recovers, can > result in Unsupported Request errors. > > On strict platforms like ARM64 or x86 servers with APEI/GHES > Firmware First error handling, these can escalate to fatal > Uncorrectable Errors and cause a host kernel panic when a > guest VM exits. > > Should this avoid MMIO flush reads during these reset > sequences and instead use fixed delays to safely bridge the > link-down period? The SoC global reset at 0x3008 does not immediately drop the PCIe link. The flush reads execute while the device is still responsive - the actual reset takes effect during the subsequent msleep. The ath11k/ath12k drivers perform the same register accesses during this reset sequence, including on ARM64 Qualcomm platforms, without issues. The read_poll_timeout polling for link recovery follows the same pattern used elsewhere in the PCI subsystem for waiting on device responses after reset. Tested over 100+ VM crash/reset cycles on x86 with VFIO passthrough without errors. > [Severity: High] > Could this immediate ioread32 flush read also trigger a > fatal Master Abort if the link drops instantly after writing > the MHI SoC reset request? Same as above - the MHI SoC reset does not instantly drop the PCIe link. The flush read completes before the reset takes effect, and the 2-second delay covers the actual reset period. This replicates the MHI driver behavior (mhi_pci_reset_prepare()).