From: Rin Okuyama <rokuyama...@gmail.com> Subject: Re: IDENTIFY failed Date: Thu, 4 Nov 2021 21:18:35 +0900
> Yeah. Patrick, Jun, experiment to adjust delays will be appreciated a > lot, > if you have time. But, dmesg should be helpful enough :) On my environment, 1. after that,back to the original kernel , boot fine. >>>>>>>>> NetBSD 9.99.92 (GENERIC) #0: Mon Oct 25 20:32:38 UTC 2021 Failed 8 times reboot,and cold boot after 15min system stop seems ok. 2. change deley time 500/250/125/60/30/15/7/0. boot fine. +#define AHCISATA_EXTRA_DELAY_TIME 250 --- ahcisata_core.c 2021/11/04 23:58:09 1.1 +++ ahcisata_core.c 2021/11/05 00:00:11 @@ -114,6 +114,7 @@ #define ATA_DELAY 10000 /* 10s for a drive I/O */ #define ATA_RESET_DELAY 31000 /* 31s for a drive reset */ #define AHCI_RST_WAIT (ATA_RESET_DELAY / 10) +#define AHCISATA_EXTRA_DELAY_TIME 250 const struct ata_bustype ahci_ata_bustype = { .bustype_type = SCSIPI_BUSTYPE_ATA, @@ -971,7 +972,7 @@ end: ahci_channel_stop(sc, chp, flags); #ifdef AHCISATA_EXTRA_DELAY - ata_delay(chp, 500, "ahcirst", flags); + ata_delay(chp, AHCISATA_EXTRA_DELAY_TIME, "ahcirst", flags); #endif /* clear port interrupt register */ AHCI_WRITE(sc, AHCI_P_IS(chp->ch_channel), 0xffffffff); @@ -997,7 +998,7 @@ } ata_kill_active(chp, KILL_RESET, flags); #ifdef AHCISATA_EXTRA_DELAY - ata_delay(chp, 500, "ahcirst", flags); + ata_delay(chp, AHCISATA_EXTRA_DELAY_TIME, "ahcirst", flags); #endif /* clear port interrupt register */ AHCI_WRITE(sc, AHCI_P_IS(chp->ch_channel), 0xffffffff); @@ -1069,7 +1070,7 @@ achp->ahcic_sstatus, AT_WAIT)) { case SStatus_DET_DEV: #ifdef AHCISATA_EXTRA_DELAY - ata_delay(chp, 500, "ahcidv", AT_WAIT); + ata_delay(chp, AHCISATA_EXTRA_DELAY_TIME, "ahcidv", AT_WAIT); #endif /* Initial value, used in case the soft reset fails */ @@ -1111,7 +1112,7 @@ AHCI_P_IX_PSS | AHCI_P_IX_DHRS | AHCI_P_IX_SDBS); #ifdef AHCISATA_EXTRA_DELAY /* wait 500ms before actually starting operations */ - ata_delay(chp, 500, "ahciprb", AT_WAIT); + ata_delay(chp, AHCISATA_EXTRA_DELAY_TIME, "ahciprb", AT_WAIT); #endif break;