1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
diff --git a/firmware/target/arm/as3525/sd-as3525.c b/firmware/target/arm/as3525/sd-as3525.c
index 19914ab..97e8dd6 100644
--- a/firmware/target/arm/as3525/sd-as3525.c
+++ b/firmware/target/arm/as3525/sd-as3525.c
@@ -792,10 +792,21 @@ static int sd_transfer_sectors(IF_MD2(int drive,) unsigned long start,
                                 (9<<4) /* 2^9 = 512 */ ;

         /* Wakeup signal from NAND/MCIO isr on MCI_DATA_ERROR | MCI_DATA_END */
-        wakeup_wait(&transfer_completion_signal, TIMEOUT_BLOCK);
+        int ret = wakeup_wait(&transfer_completion_signal, HZ*5);
+        if(ret != OBJ_WAIT_SUCCEEDED)
+        {
+            panicf("wakeup wait timeout");
+            //if(!transfer_error[drive])
+        }

         /*  Wait for FIFO to empty, card may still be in PRG state for writes */
-        while(MCI_STATUS(drive) & MCI_TX_ACTIVE);
+        int txloops = 100000;
+        while(--txloops && MCI_STATUS(drive) & MCI_TX_ACTIVE)
+            ;
+        if(txloops == 0)
+        {
+            panicf("TX wait too long");
+        }

         last_disk_activity = current_tick;