libpayload: ahci: Increase timeout for signature reading
We can't read the drives signature before it's ready, i.e. spun up. So set the timeout to the standard 30s. Also put a notice on the console, so the user knows why the signature reading failed. Change-Id: I2148258f9b0eb950b71544dafd95776ae70afac8 Signed-off-by: Nico Huber <nico.huber@secunet.com> Reviewed-on: http://review.coreboot.org/3493 Tested-by: build bot (Jenkins) Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Reviewed-by: Dave Frodin <dave.frodin@se-eng.com> Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
This commit is contained in:
parent
cacc58a874
commit
354066e117
|
@ -406,11 +406,19 @@ static int ahci_dev_init(hba_ctrl_t *const ctrl,
|
||||||
dev->cmdtable = cmdtable;
|
dev->cmdtable = cmdtable;
|
||||||
dev->rcvd_fis = rcvd_fis;
|
dev->rcvd_fis = rcvd_fis;
|
||||||
|
|
||||||
/* Wait for D2H Register FIS with device' signature. */
|
/*
|
||||||
int timeout = 200; /* Time out after 200 * 10ms == 2s. */
|
* Wait for D2H Register FIS with device' signature.
|
||||||
|
* The drive has to spin up here, so wait up to 30s.
|
||||||
|
*/
|
||||||
|
const int timeout_s = 30; /* Time out after 30s. */
|
||||||
|
int timeout = timeout_s * 100;
|
||||||
while ((port->taskfile_data & HBA_PxTFD_BSY) && timeout--)
|
while ((port->taskfile_data & HBA_PxTFD_BSY) && timeout--)
|
||||||
mdelay(10);
|
mdelay(10);
|
||||||
|
|
||||||
|
if (port->taskfile_data & HBA_PxTFD_BSY)
|
||||||
|
printf("ahci: Timed out after %d seconds "
|
||||||
|
"of waiting for device to spin up.\n", timeout_s);
|
||||||
|
|
||||||
/* Initialize device or fall through to clean up. */
|
/* Initialize device or fall through to clean up. */
|
||||||
switch (port->signature) {
|
switch (port->signature) {
|
||||||
case HBA_PxSIG_ATA:
|
case HBA_PxSIG_ATA:
|
||||||
|
|
Loading…
Reference in New Issue