summaryrefslogtreecommitdiff
path: root/firmware/target/arm/ata-nand-telechips.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/ata-nand-telechips.c')
-rw-r--r--firmware/target/arm/ata-nand-telechips.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/firmware/target/arm/ata-nand-telechips.c b/firmware/target/arm/ata-nand-telechips.c
index 5401f0d3ab..ceabf96169 100644
--- a/firmware/target/arm/ata-nand-telechips.c
+++ b/firmware/target/arm/ata-nand-telechips.c
@@ -40,6 +40,9 @@ long last_disk_activity = -1;
40/** static, private data **/ 40/** static, private data **/
41static bool initialized = false; 41static bool initialized = false;
42 42
43static long next_yield = 0;
44#define MIN_YIELD_PERIOD 1000
45
43static struct mutex ata_mtx SHAREDBSS_ATTR; 46static struct mutex ata_mtx SHAREDBSS_ATTR;
44 47
45#if defined(COWON_D2) || defined(IAUDIO_7) 48#if defined(COWON_D2) || defined(IAUDIO_7)
@@ -714,6 +717,14 @@ int nand_read_sectors(IF_MV2(int drive,) unsigned long start, int incount,
714 return -1; 717 return -1;
715 } 718 }
716 719
720#ifdef CPU_TCC780X /* 77x doesn't have USEC_TIMER yet */
721 if (TIME_AFTER(USEC_TIMER, next_yield))
722 {
723 next_yield = USEC_TIMER + MIN_YIELD_PERIOD;
724 yield();
725 }
726#endif
727
717 inbuf += SECTOR_SIZE; 728 inbuf += SECTOR_SIZE;
718 incount--; 729 incount--;
719 secmod++; 730 secmod++;