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