diff options
author | Michael Sparmann <theseven@rockbox.org> | 2010-03-14 15:41:40 +0000 |
---|---|---|
committer | Michael Sparmann <theseven@rockbox.org> | 2010-03-14 15:41:40 +0000 |
commit | 5de615132dd634a3ee7a7bdfa2a06ca0515b2771 (patch) | |
tree | 29fca0cfd6b53562aeacc7751becd46271ef5d75 /firmware/target/arm/s5l8700 | |
parent | 183e9f152015c77259513567bbc3e8ad3e674dfd (diff) | |
download | rockbox-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
Diffstat (limited to 'firmware/target/arm/s5l8700')
-rw-r--r-- | firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c | 42 |
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]) |