1
0
Fork 0
forked from len0rd/rockbox

Cold start fixes: master_slave_select() now checks for BSY as well as RDY (since disks are BSY during powerup). Also, wait_for_bsy() looks at ATA_STATUS instead of ATA_ALT_STATUS, since the address of ATA_ALT_STATUS is not determined until later.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@3822 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Björn Stenberg 2003-07-09 22:04:31 +00:00
parent efd2f356c7
commit 9f372f1f59

View file

@ -111,7 +111,7 @@ static int wait_for_bsy(void)
{
int timeout = current_tick + HZ*10;
last_disk_activity = timeout;
while (TIME_BEFORE(current_tick, timeout) && (ATA_ALT_STATUS & STATUS_BSY))
while (TIME_BEFORE(current_tick, timeout) && (ATA_STATUS & STATUS_BSY))
yield();
if (TIME_BEFORE(current_tick, timeout))
@ -676,14 +676,14 @@ static int master_slave_detect(void)
{
/* master? */
ATA_SELECT = 0;
if ( ATA_STATUS & STATUS_RDY ) {
if ( ATA_STATUS & (STATUS_RDY|STATUS_BSY) ) {
ata_device = 0;
DEBUGF("Found master harddisk\n");
}
else {
/* slave? */
ATA_SELECT = SELECT_DEVICE1;
if ( ATA_STATUS & STATUS_RDY ) {
if ( ATA_STATUS & (STATUS_RDY|STATUS_BSY) ) {
ata_device = SELECT_DEVICE1;
DEBUGF("Found slave harddisk\n");
}
@ -725,7 +725,7 @@ static int io_address_detect(void)
}
/* Let's check again, to be sure */
if(tmp != ATA_CONTROL)
if(tmp != (ATA_ALT_STATUS & 0xf9))
{
DEBUGF("ATA I/O address detection failed\n");
return -1;