summaryrefslogtreecommitdiff
path: root/firmware/target/arm/as3525/sd-as3525v2.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/as3525/sd-as3525v2.c')
-rw-r--r--firmware/target/arm/as3525/sd-as3525v2.c27
1 files changed, 7 insertions, 20 deletions
diff --git a/firmware/target/arm/as3525/sd-as3525v2.c b/firmware/target/arm/as3525/sd-as3525v2.c
index 96c615a2be..27c73720b6 100644
--- a/firmware/target/arm/as3525/sd-as3525v2.c
+++ b/firmware/target/arm/as3525/sd-as3525v2.c
@@ -651,25 +651,19 @@ static int sd_transfer_sectors(unsigned long start, int count, void* buf, bool w
651 651
652 dma_retain(); 652 dma_retain();
653 653
654 while(count) 654 const int cmd = write ? SD_WRITE_MULTIPLE_BLOCK : SD_READ_MULTIPLE_BLOCK;
655 {
656 /* Interrupt handler might set this to true during transfer */
657 retry = false;
658 /* 128 * 512 = 2^16, and doesn't fit in the 16 bits of DATA_LENGTH
659 * register, so we have to transfer maximum 127 sectors at a time. */
660 //unsigned int transfer = (count >= 128) ? 127 : count; /* sectors */
661 unsigned int transfer = count;
662
663 const int cmd =
664 write ? SD_WRITE_MULTIPLE_BLOCK : SD_READ_MULTIPLE_BLOCK;
665 655
656 /* Interrupt handler might set this to true during transfer */
657 retry = false;
666 658
659 do
660 {
667 MCI_CTRL |= FIFO_RESET; 661 MCI_CTRL |= FIFO_RESET;
668 while(MCI_CTRL & FIFO_RESET) 662 while(MCI_CTRL & FIFO_RESET)
669 ; 663 ;
670 664
671 //MCI_BLKSIZ = 512; 665 //MCI_BLKSIZ = 512;
672 MCI_BYTCNT = transfer * 512; 666 MCI_BYTCNT = count * 512;
673 667
674 MCI_CTRL |= FIFO_RESET; 668 MCI_CTRL |= FIFO_RESET;
675 while(MCI_CTRL & FIFO_RESET) 669 while(MCI_CTRL & FIFO_RESET)
@@ -708,13 +702,6 @@ static int sd_transfer_sectors(unsigned long start, int count, void* buf, bool w
708 printf("dma <-"); 702 printf("dma <-");
709 int delay = 0x1000000; while(delay--) ; 703 int delay = 0x1000000; while(delay--) ;
710 704
711 if(!retry)
712 {
713 buf += transfer * SECTOR_SIZE;
714 start += transfer;
715 count -= transfer;
716 }
717
718 last_disk_activity = current_tick; 705 last_disk_activity = current_tick;
719 706
720 if(!send_cmd(SD_STOP_TRANSMISSION, 0, MCI_NO_RESP, NULL)) 707 if(!send_cmd(SD_STOP_TRANSMISSION, 0, MCI_NO_RESP, NULL))
@@ -730,7 +717,7 @@ static int sd_transfer_sectors(unsigned long start, int count, void* buf, bool w
730 panicf(" wait for state TRAN failed (%d)", ret); 717 panicf(" wait for state TRAN failed (%d)", ret);
731 goto sd_transfer_error; 718 goto sd_transfer_error;
732 } 719 }
733 } 720 } while(retry);
734 721
735 dma_release(); 722 dma_release();
736 723