From 6a58106e972c8dd7c1034f13f1b4138ee604869c Mon Sep 17 00:00:00 2001 From: Björn Stenberg Date: Thu, 27 Feb 2003 13:26:09 +0000 Subject: An attempt to get rid of the "red freeze" problem: Perform a soft reset on read error. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@3351 a1c6a512-1295-4272-9138-f99709370657 --- firmware/drivers/ata.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'firmware') diff --git a/firmware/drivers/ata.c b/firmware/drivers/ata.c index e65200eea2..c2a02cb03c 100644 --- a/firmware/drivers/ata.c +++ b/firmware/drivers/ata.c @@ -191,6 +191,9 @@ int ata_read_sectors(unsigned long start, } } + timeout = current_tick + READ_TIMEOUT; + + retry: ATA_SELECT = ata_device; if (!wait_for_rdy()) { @@ -198,9 +201,6 @@ int ata_read_sectors(unsigned long start, return -2; } - timeout = current_tick + READ_TIMEOUT; - - retry: buf = inbuf; count = incount; while (TIME_BEFORE(current_tick, timeout)) { @@ -228,6 +228,8 @@ int ata_read_sectors(unsigned long start, if ( ATA_ALT_STATUS & (STATUS_ERR | STATUS_DF) ) { ret = -5; + if (perform_soft_reset()) + break; goto retry; } -- cgit v1.2.3