summaryrefslogtreecommitdiff
path: root/firmware/target/arm/as3525/sd-as3525.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/as3525/sd-as3525.c')
-rw-r--r--firmware/target/arm/as3525/sd-as3525.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/firmware/target/arm/as3525/sd-as3525.c b/firmware/target/arm/as3525/sd-as3525.c
index 5a6e0df39a..a2d20c36fa 100644
--- a/firmware/target/arm/as3525/sd-as3525.c
+++ b/firmware/target/arm/as3525/sd-as3525.c
@@ -136,7 +136,7 @@ static bool hs_card = false;
136#define EXT_SD_BITS (1<<2) 136#define EXT_SD_BITS (1<<2)
137#endif 137#endif
138 138
139static struct wakeup transfer_completion_signal; 139static struct semaphore transfer_completion_signal;
140static volatile unsigned int transfer_error[NUM_VOLUMES]; 140static volatile unsigned int transfer_error[NUM_VOLUMES];
141#define PL180_MAX_TRANSFER_ERRORS 10 141#define PL180_MAX_TRANSFER_ERRORS 10
142 142
@@ -191,7 +191,7 @@ void INT_NAND(void)
191 191
192 transfer_error[INTERNAL_AS3525] = status & MCI_DATA_ERROR; 192 transfer_error[INTERNAL_AS3525] = status & MCI_DATA_ERROR;
193 193
194 wakeup_signal(&transfer_completion_signal); 194 semaphore_release(&transfer_completion_signal);
195 MCI_CLEAR(INTERNAL_AS3525) = status; 195 MCI_CLEAR(INTERNAL_AS3525) = status;
196} 196}
197 197
@@ -202,7 +202,7 @@ void INT_MCI0(void)
202 202
203 transfer_error[SD_SLOT_AS3525] = status & MCI_DATA_ERROR; 203 transfer_error[SD_SLOT_AS3525] = status & MCI_DATA_ERROR;
204 204
205 wakeup_signal(&transfer_completion_signal); 205 semaphore_release(&transfer_completion_signal);
206 MCI_CLEAR(SD_SLOT_AS3525) = status; 206 MCI_CLEAR(SD_SLOT_AS3525) = status;
207} 207}
208#endif 208#endif
@@ -568,7 +568,7 @@ int sd_init(void)
568 bitset32(&CCU_IO, 1<<2); 568 bitset32(&CCU_IO, 1<<2);
569#endif 569#endif
570 570
571 wakeup_init(&transfer_completion_signal); 571 semaphore_init(&transfer_completion_signal, 1, 0);
572 572
573 init_pl180_controller(INTERNAL_AS3525); 573 init_pl180_controller(INTERNAL_AS3525);
574 ret = sd_init_card(INTERNAL_AS3525); 574 ret = sd_init_card(INTERNAL_AS3525);
@@ -678,7 +678,7 @@ static int sd_select_bank(signed char bank)
678 (9<<4) /* 2^9 = 512 */ ; 678 (9<<4) /* 2^9 = 512 */ ;
679 679
680 /* Wakeup signal from NAND/MCIO isr on MCI_DATA_ERROR | MCI_DATA_END */ 680 /* Wakeup signal from NAND/MCIO isr on MCI_DATA_ERROR | MCI_DATA_END */
681 wakeup_wait(&transfer_completion_signal, TIMEOUT_BLOCK); 681 semaphore_wait(&transfer_completion_signal, TIMEOUT_BLOCK);
682 682
683 /* Wait for FIFO to empty, card may still be in PRG state */ 683 /* Wait for FIFO to empty, card may still be in PRG state */
684 while(MCI_STATUS(INTERNAL_AS3525) & MCI_TX_ACTIVE ); 684 while(MCI_STATUS(INTERNAL_AS3525) & MCI_TX_ACTIVE );
@@ -837,7 +837,7 @@ static int sd_transfer_sectors(IF_MD2(int drive,) unsigned long start,
837 (9<<4) /* 2^9 = 512 */ ; 837 (9<<4) /* 2^9 = 512 */ ;
838 838
839 /* Wakeup signal from NAND/MCIO isr on MCI_DATA_ERROR | MCI_DATA_END */ 839 /* Wakeup signal from NAND/MCIO isr on MCI_DATA_ERROR | MCI_DATA_END */
840 wakeup_wait(&transfer_completion_signal, TIMEOUT_BLOCK); 840 semaphore_wait(&transfer_completion_signal, TIMEOUT_BLOCK);
841 841
842 /* Wait for FIFO to empty, card may still be in PRG state for writes */ 842 /* Wait for FIFO to empty, card may still be in PRG state for writes */
843 while(MCI_STATUS(drive) & MCI_TX_ACTIVE); 843 while(MCI_STATUS(drive) & MCI_TX_ACTIVE);