On Tue, May 30, 2023 at 03:44:05PM +0200, Niklas Cassel via SeaBIOS wrote:
> According to AHCI 1.3.1, 5.3.8.1 RegFIS:Entry, if ERR_STAT is set in the
> received FIS, the HBA shall jump to state ERR:FatalTaskfile, which will
> raise a TFES IRQ.
> 
> This means that if ERR_STAT is set in the recevied FIS, PxIS.TFES will
> be set, without either PxIS.DHRS or PxIS.PSS being set.
> 
> SeaBIOS function ahci_port_setup() will try to identify an AHCI device
> by sending an ATAPI identify device command. However, such a command
> will be aborted with ERR_STAT set for a regular (non-ATAPI) device.
> 
> ahci_command() already performs the correct error recovery steps when
> status is correctly set, so simply modify ahci_command() to read the
> correct status when PxIS.TFES is set.
> 
> It is safe to read PxTFD when PxIS.TFES is set, even for systems with a
> port multiplier, see AHCI 1.3.1, 9.3.7 PxTFD Register Information:
> "When a taskfile error occurs (PxIS.TFES is set to '1'), the host may
> refer to the values in PxTFD. The values in PxTFD at this time are
> guaranteed to correspond to the device that reported the taskfile error
> condition."
> 
> Without this, each boot will be delayed by 32 seconds, waiting for the
> AHCI command to timeout.

Thanks.  I committed this change.

-Kevin
_______________________________________________
SeaBIOS mailing list -- seabios@seabios.org
To unsubscribe send an email to seabios-le...@seabios.org

Reply via email to