summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2002-06-18 12:53:02 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2002-06-18 12:53:02 +0000
commita422b8381bb511717cc01197cce3ff4933133049 (patch)
treea8d9dd957c38cb797d8f6f46dd6e02808d00685f
parent1a17d356f2c5d32fa0735f0dcad739b9745116b4 (diff)
downloadrockbox-a422b8381bb511717cc01197cce3ff4933133049.zip
rockbox-a422b8381bb511717cc01197cce3ff4933133049.tar.gz
rockbox-a422b8381bb511717cc01197cce3ff4933133049.tar.bz2
rockbox-a422b8381bb511717cc01197cce3ff4933133049.tar.xz
Better ATA I/O detection
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1065 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/drivers/ata.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/firmware/drivers/ata.c b/firmware/drivers/ata.c
index 477369b..41d74d3 100644
--- a/firmware/drivers/ata.c
+++ b/firmware/drivers/ata.c
@@ -23,6 +23,7 @@
#include "sh7034.h"
#include "system.h"
#include "debug.h"
+#include "panic.h"
#define SECTOR_SIZE 512
#define ATA_DATA (*((volatile unsigned short*)0x06104100))
@@ -328,7 +329,8 @@ static int master_slave_detect(void)
static int io_address_detect(void)
{
- unsigned char tmp = ATA_STATUS;
+ unsigned char tmp = ATA_STATUS & 0xf9; /* Mask the IDX and CORR bits */
+ unsigned char tmp2;
unsigned char dummy;
/* We compare the STATUS register with the ALT_STATUS register, which
@@ -340,8 +342,9 @@ static int io_address_detect(void)
to the ATA controller. We read a register that we know exists to make
sure that the data on the bus isn't identical to the STATUS register
contents. */
+ ATA_SECTOR = 0;
dummy = ATA_SECTOR;
- if(tmp == *ATA_CONTROL2)
+ if(tmp == (*ATA_CONTROL2) & 0xf9)
{
DEBUGF("CONTROL is at 0x306\n");
ata_control = ATA_CONTROL2;