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:
parent
9e462ed058
commit
bb237e0c30
@ -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");
|
||||||
|
Loading…
Reference in New Issue
Block a user