summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Sparmann <theseven@rockbox.org>2010-03-14 15:41:40 +0000
committerMichael Sparmann <theseven@rockbox.org>2010-03-14 15:41:40 +0000
commit5de615132dd634a3ee7a7bdfa2a06ca0515b2771 (patch)
tree29fca0cfd6b53562aeacc7751becd46271ef5d75
parent183e9f152015c77259513567bbc3e8ad3e674dfd (diff)
downloadrockbox-5de615132dd634a3ee7a7bdfa2a06ca0515b2771.tar.gz
rockbox-5de615132dd634a3ee7a7bdfa2a06ca0515b2771.zip
Don't parallelize Nano2G NAND reads, just do pipelined ECC. (10% performance loss :-/ )
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25168 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c42
1 files changed, 23 insertions, 19 deletions
diff --git a/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c b/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c
index ba1f0df534..cd38ede315 100644
--- a/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c
+++ b/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c
@@ -528,28 +528,20 @@ uint32_t nand_read_page_fast(uint32_t page, void* databuffer,
528 nand_last_activity_value = current_tick; 528 nand_last_activity_value = current_tick;
529 led(true); 529 led(true);
530 if (!nand_powered) nand_power_up(); 530 if (!nand_powered) nand_power_up();
531 for (i = 0; i < 4; i++) 531 uint8_t status[4];
532 for (i = 0; i < 4; i++) status[i] = (nand_type[i] == 0xFFFFFFFF);
533 if (!status[0])
532 { 534 {
533 if (nand_type[i] == 0xFFFFFFFF) continue; 535 nand_set_fmctrl0(0, FMCTRL0_ENABLEDMA);
534 nand_set_fmctrl0(i, FMCTRL0_ENABLEDMA);
535 if (nand_send_cmd(NAND_CMD_READ)) 536 if (nand_send_cmd(NAND_CMD_READ))
536 { 537 status[0] = 1;
537 rc |= 1 << (i << 2);
538 continue;
539 }
540 if (nand_send_address(page, databuffer ? 0 : 0x800))
541 {
542 rc |= 1 << (i << 2);
543 continue;
544 }
545 if (nand_send_cmd(NAND_CMD_READ2))
546 {
547 rc |= 1 << (i << 2);
548 continue;
549 }
550 } 538 }
551 uint8_t status[4]; 539 if (!status[0])
552 for (i = 0; i < 4; i++) status[i] = (nand_type[i] == 0xFFFFFFFF); 540 if (nand_send_address(page, 0))
541 status[0] = 1;
542 if (!status[0])
543 if (nand_send_cmd(NAND_CMD_READ2))
544 status[0] = 1;
553 if (!status[0]) 545 if (!status[0])
554 if (nand_wait_status_ready(0)) 546 if (nand_wait_status_ready(0))
555 status[0] = 1; 547 status[0] = 1;
@@ -562,6 +554,18 @@ uint32_t nand_read_page_fast(uint32_t page, void* databuffer,
562 for (i = 1; i < 4; i++) 554 for (i = 1; i < 4; i++)
563 { 555 {
564 if (!status[i]) 556 if (!status[i])
557 {
558 nand_set_fmctrl0(i, FMCTRL0_ENABLEDMA);
559 if (nand_send_cmd(NAND_CMD_READ))
560 status[i] = 1;
561 }
562 if (!status[i])
563 if (nand_send_address(page, 0))
564 status[i] = 1;
565 if (!status[i])
566 if (nand_send_cmd(NAND_CMD_READ2))
567 status[i] = 1;
568 if (!status[i])
565 if (nand_wait_status_ready(i)) 569 if (nand_wait_status_ready(i))
566 status[i] = 1; 570 status[i] = 1;
567 if (!status[i]) 571 if (!status[i])