Current-Users archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: IDENTIFY failed
From: Rin Okuyama <rokuyama.rk%gmail.com@localhost>
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;
Home |
Main Index |
Thread Index |
Old Index