summaryrefslogtreecommitdiff
path: root/firmware/target/arm/s5l8700/ipodnano2g
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/s5l8700/ipodnano2g')
-rw-r--r--firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c b/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c
index 74d147cb78..ba10e4f9f2 100644
--- a/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c
+++ b/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c
@@ -186,6 +186,7 @@ uint32_t nand_reset(uint32_t bank)
186 if (nand_send_cmd(NAND_CMD_RESET)) return 1; 186 if (nand_send_cmd(NAND_CMD_RESET)) return 1;
187 if (nand_wait_chip_ready(bank)) return 1; 187 if (nand_wait_chip_ready(bank)) return 1;
188 FMCTRL1 = FMCTRL1_CLEARRFIFO | FMCTRL1_CLEARWFIFO; 188 FMCTRL1 = FMCTRL1_CLEARRFIFO | FMCTRL1_CLEARWFIFO;
189 sleep(HZ / 100); /* Some chips seem to need this */
189 return 0; 190 return 0;
190} 191}
191 192
@@ -344,11 +345,11 @@ uint32_t nand_read_page(uint32_t bank, uint32_t page, void* databuffer,
344 void* sparebuffer, uint32_t doecc, 345 void* sparebuffer, uint32_t doecc,
345 uint32_t checkempty) 346 uint32_t checkempty)
346{ 347{
347 uint8_t* data = nand_data; 348 uint8_t* data = nand_data;
348 uint8_t* spare = nand_spare; 349 uint8_t* spare = nand_spare;
349 if (databuffer && !((uint32_t)databuffer & 0xf)) 350 if (databuffer && !((uint32_t)databuffer & 0xf))
350 data = (uint8_t*)databuffer; 351 data = (uint8_t*)databuffer;
351 if (sparebuffer && !((uint32_t)sparebuffer & 0xf)) 352 if (sparebuffer && !((uint32_t)sparebuffer & 0xf))
352 spare = (uint8_t*)sparebuffer; 353 spare = (uint8_t*)sparebuffer;
353 mutex_lock(&nand_mtx); 354 mutex_lock(&nand_mtx);
354 led(true); 355 led(true);
@@ -371,7 +372,7 @@ uint32_t nand_read_page(uint32_t bank, uint32_t page, void* databuffer,
371 { 372 {
372 if (nand_transfer_data(bank, 0, spare, 0x40)) 373 if (nand_transfer_data(bank, 0, spare, 0x40))
373 return nand_unlock(1); 374 return nand_unlock(1);
374 if (sparebuffer && spare != sparebuffer) 375 if (sparebuffer && spare != sparebuffer)
375 memcpy(sparebuffer, spare, 0x800); 376 memcpy(sparebuffer, spare, 0x800);
376 if (checkempty) 377 if (checkempty)
377 rc = nand_check_empty((uint8_t*)sparebuffer) << 1; 378 rc = nand_check_empty((uint8_t*)sparebuffer) << 1;
@@ -401,19 +402,19 @@ uint32_t nand_read_page(uint32_t bank, uint32_t page, void* databuffer,
401uint32_t nand_write_page(uint32_t bank, uint32_t page, void* databuffer, 402uint32_t nand_write_page(uint32_t bank, uint32_t page, void* databuffer,
402 void* sparebuffer, uint32_t doecc) 403 void* sparebuffer, uint32_t doecc)
403{ 404{
404 uint8_t* data = nand_data; 405 uint8_t* data = nand_data;
405 uint8_t* spare = nand_spare; 406 uint8_t* spare = nand_spare;
406 if (databuffer && !((uint32_t)databuffer & 0xf)) 407 if (databuffer && !((uint32_t)databuffer & 0xf))
407 data = (uint8_t*)databuffer; 408 data = (uint8_t*)databuffer;
408 if (sparebuffer && !((uint32_t)sparebuffer & 0xf)) 409 if (sparebuffer && !((uint32_t)sparebuffer & 0xf))
409 spare = (uint8_t*)sparebuffer; 410 spare = (uint8_t*)sparebuffer;
410 mutex_lock(&nand_mtx); 411 mutex_lock(&nand_mtx);
411 led(true); 412 led(true);
412 if (!nand_powered) nand_power_up(); 413 if (!nand_powered) nand_power_up();
413 if (sparebuffer) 414 if (sparebuffer)
414 { 415 {
415 if (spare != sparebuffer) memcpy(spare, sparebuffer, 0x40); 416 if (spare != sparebuffer) memcpy(spare, sparebuffer, 0x40);
416 } 417 }
417 else memset(spare, 0xFF, 0x40); 418 else memset(spare, 0xFF, 0x40);
418 if (doecc) 419 if (doecc)
419 { 420 {