summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack Halpin <jack.halpin@gmail.com>2010-03-22 02:29:53 +0000
committerJack Halpin <jack.halpin@gmail.com>2010-03-22 02:29:53 +0000
commit48b8080330cad231de9b02b48b631e02d3cb554a (patch)
tree503398289d32d98da0ebef64fc14d945465e0658
parent6357c5a085fe8959085db5a741e315e0a03c9824 (diff)
downloadrockbox-48b8080330cad231de9b02b48b631e02d3cb554a.tar.gz
rockbox-48b8080330cad231de9b02b48b631e02d3cb554a.zip
sd-as3525v2 Remove post transfer wait for state call and move pre transfer wait for state call inside the transfer loop.
We don't need the post transfer call this way. We check on TRAN state before each partial transfer. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25282 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/target/arm/as3525/sd-as3525v2.c34
1 files changed, 14 insertions, 20 deletions
diff --git a/firmware/target/arm/as3525/sd-as3525v2.c b/firmware/target/arm/as3525/sd-as3525v2.c
index 9698a149ed..4e550a96d4 100644
--- a/firmware/target/arm/as3525/sd-as3525v2.c
+++ b/firmware/target/arm/as3525/sd-as3525v2.c
@@ -744,19 +744,6 @@ static int sd_transfer_sectors(IF_MD2(int drive,) unsigned long start,
744#endif 744#endif
745 745
746 last_disk_activity = current_tick; 746 last_disk_activity = current_tick;
747 ret = sd_wait_for_state(drive, SD_TRAN);
748 if (ret < 0)
749 {
750 static const char *st[9] = {
751 "IDLE", "RDY", "IDENT", "STBY", "TRAN", "DATA", "RCV", "PRG", "DIS"
752 };
753 if(ret <= -10)
754 panicf("wait for state failed (%s) %d", st[(-ret / 10) % 9], drive);
755 else
756 panicf("wait for state failed");
757 goto sd_transfer_error;
758 }
759
760 dma_retain(); 747 dma_retain();
761 748
762 const int cmd = write ? SD_WRITE_MULTIPLE_BLOCK : SD_READ_MULTIPLE_BLOCK; 749 const int cmd = write ? SD_WRITE_MULTIPLE_BLOCK : SD_READ_MULTIPLE_BLOCK;
@@ -781,6 +768,20 @@ static int sd_transfer_sectors(IF_MD2(int drive,) unsigned long start,
781 while(MCI_CTRL & (FIFO_RESET|DMA_RESET)) 768 while(MCI_CTRL & (FIFO_RESET|DMA_RESET))
782 ; 769 ;
783 770
771 ret = sd_wait_for_state(drive, SD_TRAN);
772 if (ret < 0)
773 {
774 static const char *st[9] = {
775 "IDLE", "RDY", "IDENT", "STBY", "TRAN", "DATA", "RCV",
776 "PRG", "DIS"};
777 if(ret <= -10)
778 panicf("wait for TRAN state failed (%s) %d",
779 st[(-ret / 10) % 9], drive);
780 else
781 panicf("wait for state failed");
782 goto sd_transfer_error;
783 }
784
784 MCI_CTRL |= DMA_ENABLE; 785 MCI_CTRL |= DMA_ENABLE;
785 MCI_MASK = MCI_INT_CD|MCI_INT_DTO|MCI_INT_DCRC|MCI_INT_DRTO| \ 786 MCI_MASK = MCI_INT_CD|MCI_INT_DTO|MCI_INT_DCRC|MCI_INT_DRTO| \
786 MCI_INT_HTO|MCI_INT_FRUN|MCI_INT_HLE|MCI_INT_SBE|MCI_INT_EBE; 787 MCI_INT_HTO|MCI_INT_FRUN|MCI_INT_HLE|MCI_INT_SBE|MCI_INT_EBE;
@@ -816,13 +817,6 @@ static int sd_transfer_sectors(IF_MD2(int drive,) unsigned long start,
816 goto sd_transfer_error; 817 goto sd_transfer_error;
817 } 818 }
818 819
819 ret = sd_wait_for_state(drive, SD_TRAN);
820 if (ret < 0)
821 {
822 panicf(" wait for state TRAN failed (%d)", ret);
823 goto sd_transfer_error;
824 }
825
826 if(!retry) 820 if(!retry)
827 { 821 {
828 if(!write) 822 if(!write)