summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Diedrich <ranma+coreboot@tdiedrich.de>2010-06-22 21:49:33 +0000
committerTobias Diedrich <ranma+coreboot@tdiedrich.de>2010-06-22 21:49:33 +0000
commit1396c335ac4d83701c9ed699156e0e78015c174b (patch)
tree5413172f8fad1b1ad0e11bd302fbb9bca94aab00
parent6e45f87e0f69619e721377a43eeb178c98b071bb (diff)
downloadrockbox-1396c335ac4d83701c9ed699156e0e78015c174b.tar.gz
rockbox-1396c335ac4d83701c9ed699156e0e78015c174b.zip
The mci_delay()s should be unnecessary if we properly tell the controller to wait for the response these commands send back to the host.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27066 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/target/arm/as3525/sd-as3525.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/firmware/target/arm/as3525/sd-as3525.c b/firmware/target/arm/as3525/sd-as3525.c
index 02b0d725f7..7e61fa509f 100644
--- a/firmware/target/arm/as3525/sd-as3525.c
+++ b/firmware/target/arm/as3525/sd-as3525.c
@@ -319,9 +319,8 @@ static int sd_init_card(const int drive)
319 if(sd_v2) 319 if(sd_v2)
320 { 320 {
321 /* CMD7 w/rca: Select card to put it in TRAN state */ 321 /* CMD7 w/rca: Select card to put it in TRAN state */
322 if(!send_cmd(drive, SD_SELECT_CARD, card_info[drive].rca, MCI_ARG, NULL)) 322 if(!send_cmd(drive, SD_SELECT_CARD, card_info[drive].rca, MCI_RESP|MCI_ARG, &response))
323 return -5; 323 return -5;
324 mci_delay();
325 324
326 if(sd_wait_for_tran_state(drive)) 325 if(sd_wait_for_tran_state(drive))
327 return -6; 326 return -6;
@@ -359,9 +358,8 @@ static int sd_init_card(const int drive)
359#endif 358#endif
360 359
361 /* CMD7 w/rca: Select card to put it in TRAN state */ 360 /* CMD7 w/rca: Select card to put it in TRAN state */
362 if(!send_cmd(drive, SD_SELECT_CARD, card_info[drive].rca, MCI_ARG, NULL)) 361 if(!send_cmd(drive, SD_SELECT_CARD, card_info[drive].rca, MCI_RESP|MCI_ARG, &response))
363 return -10; 362 return -10;
364 mci_delay();
365 363
366#ifndef BOOTLOADER 364#ifndef BOOTLOADER
367 /* Switch to to 4 bit widebus mode */ 365 /* Switch to to 4 bit widebus mode */
@@ -395,7 +393,7 @@ static int sd_init_card(const int drive)
395 if(ret < 0) 393 if(ret < 0)
396 return ret -16; 394 return ret -16;
397 395
398 /* CMD7 w/rca = 0: Select card to put it in STBY state */ 396 /* CMD7 w/rca = 0: Unselect card to put it in STBY state */
399 if(!send_cmd(drive, SD_SELECT_CARD, 0, MCI_ARG, NULL)) 397 if(!send_cmd(drive, SD_SELECT_CARD, 0, MCI_ARG, NULL))
400 return -17; 398 return -17;
401 mci_delay(); 399 mci_delay();
@@ -410,9 +408,8 @@ static int sd_init_card(const int drive)
410 card_info[INTERNAL_AS3525].numblocks -= AMS_OF_SIZE; 408 card_info[INTERNAL_AS3525].numblocks -= AMS_OF_SIZE;
411 409
412 /* CMD7 w/rca: Select card to put it in TRAN state */ 410 /* CMD7 w/rca: Select card to put it in TRAN state */
413 if(!send_cmd(drive, SD_SELECT_CARD, card_info[drive].rca, MCI_ARG, NULL)) 411 if(!send_cmd(drive, SD_SELECT_CARD, card_info[drive].rca, MCI_RESP|MCI_ARG, &response))
414 return -19; 412 return -19;
415 mci_delay();
416 } 413 }
417 414
418 card_info[drive].initialized = 1; 415 card_info[drive].initialized = 1;
@@ -729,6 +726,7 @@ static int sd_transfer_sectors(IF_MD2(int drive,) unsigned long start,
729 const int cmd = 726 const int cmd =
730 write ? SD_WRITE_MULTIPLE_BLOCK : SD_READ_MULTIPLE_BLOCK; 727 write ? SD_WRITE_MULTIPLE_BLOCK : SD_READ_MULTIPLE_BLOCK;
731 unsigned long bank_start = start; 728 unsigned long bank_start = start;
729 unsigned long status;
732 730
733 /* Only switch banks for internal storage */ 731 /* Only switch banks for internal storage */
734 if(drive == INTERNAL_AS3525) 732 if(drive == INTERNAL_AS3525)
@@ -816,7 +814,7 @@ static int sd_transfer_sectors(IF_MD2(int drive,) unsigned long start,
816 814
817 last_disk_activity = current_tick; 815 last_disk_activity = current_tick;
818 816
819 if(!send_cmd(drive, SD_STOP_TRANSMISSION, 0, MCI_NO_FLAGS, NULL)) 817 if(!send_cmd(drive, SD_STOP_TRANSMISSION, 0, MCI_RESP, &status))
820 { 818 {
821 ret = -4*20; 819 ret = -4*20;
822 goto sd_transfer_error; 820 goto sd_transfer_error;