From bb237e0c30d5540031498ddd9357486ee79dba6e Mon Sep 17 00:00:00 2001 From: Alexander Motin Date: Sun, 1 Mar 2009 22:50:14 +0000 Subject: [PATCH] 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. --- sys/dev/ata/chipsets/ata-ahci.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sys/dev/ata/chipsets/ata-ahci.c b/sys/dev/ata/chipsets/ata-ahci.c index 956a85d3e3e..2dc38370cca 100644 --- a/sys/dev/ata/chipsets/ata-ahci.c +++ b/sys/dev/ata/chipsets/ata-ahci.c @@ -683,8 +683,7 @@ ata_ahci_softreset(device_t dev, int port) ctp->cfis[1] = port & 0x0f; //ctp->cfis[7] = ATA_D_LBA | ATA_D_IBM; ctp->cfis[15] = ATA_A_4BIT; - if (ata_ahci_issue_cmd(dev, 0, 0)) - return -1; + ata_ahci_issue_cmd(dev, 0, 1000); if (ata_ahci_wait_ready(dev, 1000)) { device_printf(dev, "software reset clear timeout\n");