Give controller a chance to issue Soft Reset clear command before checking

ready status. Most of controllers managed to issue coommand and set BUSY
bit almost simultaneously, before we will read it, but at least JMicron JMB363
don't. Ignore timeout errors to keep old behavior when error there was
impossible.

For me this fixes timeout errors on the first command after channel attach
or reinit. Boot in my case is not affected, as there is much time passing
between reset and next command giving reset time to complete.
This commit is contained in:
Alexander Motin 2009-03-01 22:50:14 +00:00
parent 9e462ed058
commit bb237e0c30

View File

@ -683,8 +683,7 @@ ata_ahci_softreset(device_t dev, int port)
ctp->cfis[1] = port & 0x0f; ctp->cfis[1] = port & 0x0f;
//ctp->cfis[7] = ATA_D_LBA | ATA_D_IBM; //ctp->cfis[7] = ATA_D_LBA | ATA_D_IBM;
ctp->cfis[15] = ATA_A_4BIT; ctp->cfis[15] = ATA_A_4BIT;
if (ata_ahci_issue_cmd(dev, 0, 0)) ata_ahci_issue_cmd(dev, 0, 1000);
return -1;
if (ata_ahci_wait_ready(dev, 1000)) { if (ata_ahci_wait_ready(dev, 1000)) {
device_printf(dev, "software reset clear timeout\n"); device_printf(dev, "software reset clear timeout\n");