diff options
author | Linus Nielsen Feltzing <linus@haxx.se> | 2002-05-07 22:59:03 +0000 |
---|---|---|
committer | Linus Nielsen Feltzing <linus@haxx.se> | 2002-05-07 22:59:03 +0000 |
commit | dc4977d98cf3460a5928984612a8cb22a1987b30 (patch) | |
tree | c13d2aeda4cf164b2f43596e49b75f8f4ad960d3 | |
parent | 4674e870173ec46bfd2eb6b552aadc04669fd830 (diff) | |
download | rockbox-dc4977d98cf3460a5928984612a8cb22a1987b30.tar.gz rockbox-dc4977d98cf3460a5928984612a8cb22a1987b30.zip |
Killed a few bugs. Tested in target. Works fairly good.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@501 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | firmware/drivers/ata.c | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/firmware/drivers/ata.c b/firmware/drivers/ata.c index fa51259d99..d75544ef3a 100644 --- a/firmware/drivers/ata.c +++ b/firmware/drivers/ata.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include "led.h" | 21 | #include "led.h" |
22 | #include "sh7034.h" | 22 | #include "sh7034.h" |
23 | #include "system.h" | 23 | #include "system.h" |
24 | #include "debug.h" | ||
24 | 25 | ||
25 | #define ATA_DATA (*((volatile unsigned short*)0x06104100)) | 26 | #define ATA_DATA (*((volatile unsigned short*)0x06104100)) |
26 | #define ATA_ERROR (*((volatile unsigned char*)0x06100101)) | 27 | #define ATA_ERROR (*((volatile unsigned char*)0x06100101)) |
@@ -32,7 +33,7 @@ | |||
32 | #define ATA_SELECT (*((volatile unsigned char*)0x06100106)) | 33 | #define ATA_SELECT (*((volatile unsigned char*)0x06100106)) |
33 | #define ATA_COMMAND (*((volatile unsigned char*)0x06100107)) | 34 | #define ATA_COMMAND (*((volatile unsigned char*)0x06100107)) |
34 | #define ATA_STATUS ATA_COMMAND | 35 | #define ATA_STATUS ATA_COMMAND |
35 | #define ATA_CONTROL (*((volatile unsigned char*)0x06100306)) | 36 | #define ATA_CONTROL (*((volatile unsigned char*)0x06200306)) |
36 | #define ATA_ALT_STATUS ATA_CONTROL | 37 | #define ATA_ALT_STATUS ATA_CONTROL |
37 | 38 | ||
38 | #define SELECT_LBA 0x40 | 39 | #define SELECT_LBA 0x40 |
@@ -59,9 +60,13 @@ static int wait_for_bsy(void) | |||
59 | yield(); | 60 | yield(); |
60 | 61 | ||
61 | if (TIME_BEFORE(current_tick, timeout)) | 62 | if (TIME_BEFORE(current_tick, timeout)) |
63 | { | ||
62 | return 1; | 64 | return 1; |
65 | } | ||
63 | else | 66 | else |
67 | { | ||
64 | return 0; /* timeout */ | 68 | return 0; /* timeout */ |
69 | } | ||
65 | } | 70 | } |
66 | 71 | ||
67 | static int wait_for_rdy(void) | 72 | static int wait_for_rdy(void) |
@@ -210,7 +215,7 @@ static int freeze_lock(void) | |||
210 | 215 | ||
211 | int ata_spindown(int time) | 216 | int ata_spindown(int time) |
212 | { | 217 | { |
213 | if (!wait_for_rdy()) | 218 | if(!wait_for_rdy()) |
214 | return -1; | 219 | return -1; |
215 | 220 | ||
216 | if ( time == -1 ) { | 221 | if ( time == -1 ) { |
@@ -231,11 +236,11 @@ int ata_spindown(int time) | |||
231 | 236 | ||
232 | int ata_hard_reset(void) | 237 | int ata_hard_reset(void) |
233 | { | 238 | { |
234 | clear_bit(1,PADR); | 239 | PADR &= ~0x0002; |
235 | sleep(HZ/500); | ||
236 | 240 | ||
237 | set_bit(1,PADR); | 241 | sleep(2); |
238 | sleep(HZ/500); | 242 | |
243 | PADR |= 0x0002; | ||
239 | 244 | ||
240 | return wait_for_rdy(); | 245 | return wait_for_rdy(); |
241 | } | 246 | } |
@@ -257,7 +262,7 @@ int ata_init(void) | |||
257 | led(FALSE); | 262 | led(FALSE); |
258 | 263 | ||
259 | /* activate ATA */ | 264 | /* activate ATA */ |
260 | PADR |= 0x80; | 265 | PADR &= ~0x80; |
261 | 266 | ||
262 | if (!ata_hard_reset()) | 267 | if (!ata_hard_reset()) |
263 | return -1; | 268 | return -1; |
@@ -265,12 +270,15 @@ int ata_init(void) | |||
265 | if (!check_registers()) | 270 | if (!check_registers()) |
266 | return -2; | 271 | return -2; |
267 | 272 | ||
268 | if (!check_harddisk()) | 273 | // if (!check_harddisk()) |
269 | return -3; | 274 | // return -3; |
270 | 275 | ||
271 | if (!freeze_lock()) | 276 | if (freeze_lock() < 0) |
272 | return -4; | 277 | return -4; |
273 | 278 | ||
279 | // if(ata_spindown(-1) < 0) | ||
280 | // return -5; | ||
281 | |||
274 | ATA_SELECT = SELECT_LBA; | 282 | ATA_SELECT = SELECT_LBA; |
275 | ATA_CONTROL = CONTROL_nIEN; | 283 | ATA_CONTROL = CONTROL_nIEN; |
276 | 284 | ||