Skip to content

Commit ac0f7ae

Browse files
committed
separate nand and sd init
1 parent 1072d38 commit ac0f7ae

File tree

4 files changed

+43
-8
lines changed

4 files changed

+43
-8
lines changed

include/nds/arm7/sdmmc.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ enum {
125125
MMC_DEVICE_NAND,
126126
};
127127

128-
void sdmmc_controller_init();
128+
void sdmmc_controller_init(bool force_init);
129129
void sdmmc_initirq();
130130
int sdmmc_cardinserted();
131131

source/arm7/sdmmc.twl.c

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -177,9 +177,15 @@ int sdmmc_cardinserted() {
177177
return 1; //sdmmc_cardready;
178178
}
179179

180+
181+
static bool sdmmc_controller_initialised = false;
182+
180183
//---------------------------------------------------------------------------------
181-
void sdmmc_controller_init() {
184+
void sdmmc_controller_init( bool force_init ) {
182185
//---------------------------------------------------------------------------------
186+
187+
if (!force_init && sdmmc_controller_initialised) return;
188+
183189
deviceSD.isSDHC = 0;
184190
deviceSD.SDOPT = 0;
185191
deviceSD.res = 0;
@@ -230,6 +236,8 @@ void sdmmc_controller_init() {
230236
*(vu16*)(SDMMC_BASE + REG_SDBLKLEN) = 512;
231237
*(vu16*)(SDMMC_BASE + REG_SDSTOP) = 0;
232238

239+
sdmmc_controller_initialised = true;
240+
233241
setTarget(&deviceSD);
234242
}
235243

@@ -486,11 +494,25 @@ void sdmmcMsgHandler(int bytes, void *user_data) {
486494
fifoSendValue32(FIFO_SDMMC, retval);
487495
}
488496

497+
//---------------------------------------------------------------------------------
498+
int sdmmc_nand_startup() {
499+
//---------------------------------------------------------------------------------
500+
sdmmc_controller_init(false);
501+
return sdmmc_nand_init();
502+
}
503+
504+
//---------------------------------------------------------------------------------
505+
int sdmmc_sd_startup() {
506+
//---------------------------------------------------------------------------------
507+
sdmmc_controller_init(false);
508+
return sdmmc_sdcard_init();
509+
}
510+
489511
//---------------------------------------------------------------------------------
490512
void sdmmcValueHandler(u32 value, void* user_data) {
491513
//---------------------------------------------------------------------------------
492514
int result = 0;
493-
515+
int sdflag = 0;
494516
int oldIME = enterCriticalSection();
495517

496518
switch(value) {
@@ -500,12 +522,13 @@ void sdmmcValueHandler(u32 value, void* user_data) {
500522
break;
501523

502524
case SDMMC_SD_START:
525+
sdflag = 1;
526+
/* Falls through. */
527+
case SDMMC_NAND_START:
503528
if (sdmmc_read16(REG_SDSTATUS0) == 0) {
504529
result = 1;
505530
} else {
506-
sdmmc_controller_init();
507-
sdmmc_nand_init();
508-
result = sdmmc_sdcard_init();
531+
result = (sdflag == 1 ) ? sdmmc_sd_startup() : sdmmc_nand_startup();
509532
}
510533
break;
511534

source/arm9/dldi/nand.twl.c

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,19 @@
99
//---------------------------------------------------------------------------------
1010
bool nand_Startup() {
1111
//---------------------------------------------------------------------------------
12-
return true;
12+
fifoSendValue32(FIFO_SDMMC,SDMMC_HAVE_SD);
13+
while(!fifoCheckValue32(FIFO_SDMMC));
14+
int result = fifoGetValue32(FIFO_SDMMC);
15+
16+
if(result==0) return false;
17+
18+
fifoSendValue32(FIFO_SDMMC,SDMMC_NAND_START);
19+
20+
fifoWaitValue32(FIFO_SDMMC);
21+
22+
result = fifoGetValue32(FIFO_SDMMC);
23+
24+
return result == 0;
1325
}
1426

1527
//---------------------------------------------------------------------------------

source/arm9/dldi/sd.twl.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ bool sdio_Startup() {
1818
fifoWaitValue32(FIFO_SDMMC);
1919

2020
result = fifoGetValue32(FIFO_SDMMC);
21-
21+
2222
return result == 0;
2323
}
2424

0 commit comments

Comments
 (0)