From adef8fb17e3990f9ee3d4d63374513108ec1a534 Mon Sep 17 00:00:00 2001 From: Jörg Hohensohn Date: Tue, 8 Jul 2003 06:33:30 +0000 Subject: better place and method for the spinup wait code, still I'd welcome comments on this git-svn-id: svn://svn.rockbox.org/rockbox/trunk@3815 a1c6a512-1295-4272-9138-f99709370657 --- firmware/drivers/ata.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) (limited to 'firmware/drivers') diff --git a/firmware/drivers/ata.c b/firmware/drivers/ata.c index f4e1da48c4..b665dc09fd 100644 --- a/firmware/drivers/ata.c +++ b/firmware/drivers/ata.c @@ -424,19 +424,9 @@ extern void ata_flush(void) static int check_registers(void) { - /* When starting from Flash, the disk is not yet ready when we get here. */ - /* Crude first fix is to block and poll here for a while, - can we do better? */ - int time = 0; - while ((ATA_STATUS & STATUS_BSY)) - { - if (time >= HZ*10) /* timeout, disk is not coming up */ + if ( ATA_STATUS & STATUS_BSY ) return -1; - sleep(HZ/10); - time += HZ/10; - }; - ATA_NSECTOR = 0xa5; ATA_SECTOR = 0x5a; ATA_LCYL = 0xaa; @@ -819,6 +809,19 @@ int ata_init(void) ata_enable(true); if ( !initialized ) { + /* When starting from Flash, the disk is not yet ready when we get here. */ + /* Crude first fix is to block and poll here for a while, + can we do better? */ + int time = 0; + while ((ATA_STATUS & STATUS_BSY)) + { + if (time >= HZ*10) /* timeout, disk is not coming up */ + return -6; + + sleep(HZ/10); + time += HZ/10; + }; + if (master_slave_detect()) return -1; -- cgit v1.2.3