On Tue, Aug 04, 2020 at 11:17:05AM -0000, RunaGuo-oc(a)zhaoxin.com wrote:
When binding AHCI controller to virtual machine, the
attached ATA device cannot be recognized for the following reason:
The first Identify PACKET CMD will be failed without dobut which will lead
PORT_IRQ_TF_ERR be set in PxIS due to ERR bit set to 1 in D2H Register
FIS(PxTFD.STS.ERR=1). In this case, the first CMD will be timeout for seabios only polling
PORT_IRQ_D2H_REG_FIS & PORT_IRQ_PIOS_FIS before triggering error handling which leads
AHCI controller is an error state, then the second IDENTIFY CMD cannot be issued by AHCI
controller, no ATA device will be detected.
In AHCI spec HBA Port State Machine section(188.8.131.52 and 184.108.40.206), we can see this
sequence: RegFIS:Entry --> ERR:FatalTaskfile (PxTFD.STS.ERR=1) --> ERR:WaitForClear,
no entry for PORT_IRQ_D2H_REG_FIS/PORT_IRQ_PIOS_FIS to be set at this time.
May be we can also add PORT_IRQ_TF_ERR bit check when polling command completion status?
Thanks. Gerd wrote the AHCI support. (As well as the XHCI support
referenced in your other report.) Hopefully he'll be able to comment.