[PATCH v9] PCI: Add device-specific reset for Qualcomm devices
Jose Ignacio Tornos Martinez
jtornosm at redhat.com
Wed Jun 17 23:33:08 PDT 2026
Hi Mani,
Let me clarify the exact scenario and where the reset is necessary:
* For the commented WiFi devices (WCN6855/WCN7850):
Standard VFIO passthrough flow (this works fine):
1. Unbind native driver (ath11k/ath12k/MHI)
2. Bind vfio-pci driver
3. Assign device to VM
4. VM boots, loads its own driver → device works perfectly
5. VM shuts down cleanly → device can be reassigned → works fine
The problem occurs with unclean VM termination:
1. VM crashes or is force-terminated
2. VFIO tries to reset the device before reassignment
3. Without a working PCI reset method, reset fails
4. Device stuck in undefined state → cannot be reassigned to another VM
Unbinding the driver again doesn't help because the device hardware
itself is in a bad state. From hypervisor:
$ lspci -vvv -s 0000:03:00.0
03:00.0 Network controller: Qualcomm Technologies, Inc (rev ff) (prog-if ff)
!!! Unknown header type 7f
And a full host power-cycle is necessary to recover.
* For the commented modem devices (SDX62/SDX65):
Even worse because it fails during the first VM boot without proper reset
capability, standard VFIO passthrough flow:
1. Unbind native driver (MHI)
2. Bind vfio-pci driver
3. Assign device to VM
4. VM boots, loads its own driver and crashes:
[ 24.024165] mhi mhi0: Device failed to enter MHI Ready
[ 24.024168] mhi mhi0: MHI did not enter READY state
Unbind/rebind attempts fail:
[ 352.643601] mhi mhi0: Requested to power ON
[ 352.643611] mhi mhi0: Power on setup success
[ 373.442954] mhi mhi0: Device failed to clear MHI Reset
[ 373.442970] mhi mhi0: MHI did not enter READY state
And requires a full host power cycle to recover,
even outside of VFIO scenarios.
* MHI Host driver's remove callback may handle clean software state
teardown, but it doesn't provide a PCI reset capability that VFIO can
invoke. VFIO needs a reset method registered in the PCI reset hierarchy
(device_specific, pm, flr, bus, etc.). VFIO invokes this reset both during
initial device binding (before the VM starts) and when reassigning the
device between VMs - without a working reset method, the device cannot
reach a clean state for initialization.
I hope this clarifies the scenario better. Please let me know if I can
provide more information or run any specific tests to help investigate this
further.
Thanks
Best regards
José Ignacio
More information about the ath12k
mailing list