summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
Diffstat (limited to 'firmware')
-rw-r--r--firmware/drivers/ata.c27
1 files changed, 8 insertions, 19 deletions
diff --git a/firmware/drivers/ata.c b/firmware/drivers/ata.c
index 95711c60ea..c632402483 100644
--- a/firmware/drivers/ata.c
+++ b/firmware/drivers/ata.c
@@ -197,15 +197,8 @@ int ata_write_sectors(unsigned long start,
197 197
198static int check_registers(void) 198static int check_registers(void)
199{ 199{
200 int ret = 0;
201
202 mutex_lock(&ata_mtx);
203
204 if ( ATA_STATUS & STATUS_BSY ) 200 if ( ATA_STATUS & STATUS_BSY )
205 { 201 return -1;
206 mutex_unlock(&ata_mtx);
207 return 0;
208 }
209 202
210 ATA_NSECTOR = 0xa5; 203 ATA_NSECTOR = 0xa5;
211 ATA_SECTOR = 0x5a; 204 ATA_SECTOR = 0x5a;
@@ -216,10 +209,9 @@ static int check_registers(void)
216 (ATA_SECTOR == 0x5a) && 209 (ATA_SECTOR == 0x5a) &&
217 (ATA_LCYL == 0xaa) && 210 (ATA_LCYL == 0xaa) &&
218 (ATA_HCYL == 0x55)) 211 (ATA_HCYL == 0x55))
219 ret = 1; 212 return 0;
220 213
221 mutex_unlock(&ata_mtx); 214 return -2;
222 return ret;
223} 215}
224 216
225static int freeze_lock(void) 217static int freeze_lock(void)
@@ -273,11 +265,11 @@ int ata_hard_reset(void)
273 265
274 mutex_lock(&ata_mtx); 266 mutex_lock(&ata_mtx);
275 267
276 PADR &= ~0x0002; 268 PADR &= ~0x0200;
277 269
278 sleep(2); 270 sleep(2);
279 271
280 PADR |= 0x0002; 272 PADR |= 0x0200;
281 273
282 ret = wait_for_rdy(); 274 ret = wait_for_rdy();
283 275
@@ -337,16 +329,13 @@ int ata_init(void)
337 if (master_slave()) 329 if (master_slave())
338 return -1; 330 return -1;
339 331
340 if (!ata_hard_reset()) 332 if (check_registers())
341 return -2;
342
343 if (!check_registers())
344 return -3; 333 return -3;
345 334
346 if (freeze_lock() < 0) 335 if (freeze_lock())
347 return -4; 336 return -4;
348 337
349 if (ata_spindown(1) < 0) 338 if (ata_spindown(1))
350 return -5; 339 return -5;
351 340
352 ATA_SELECT = SELECT_LBA; 341 ATA_SELECT = SELECT_LBA;