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 | |
| parent | 183e9f152015c77259513567bbc3e8ad3e674dfd (diff) | |
| download | rockbox-5de615132dd634a3ee7a7bdfa2a06ca0515b2771.zip rockbox-5de615132dd634a3ee7a7bdfa2a06ca0515b2771.tar.gz rockbox-5de615132dd634a3ee7a7bdfa2a06ca0515b2771.tar.bz2 rockbox-5de615132dd634a3ee7a7bdfa2a06ca0515b2771.tar.xz | |
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.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 ba1f0df..cd38ede 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, nand_last_activity_value = current_tick; led(true); if (!nand_powered) nand_power_up(); - for (i = 0; i < 4; i++) + uint8_t status[4]; + for (i = 0; i < 4; i++) status[i] = (nand_type[i] == 0xFFFFFFFF); + if (!status[0]) { - if (nand_type[i] == 0xFFFFFFFF) continue; - nand_set_fmctrl0(i, FMCTRL0_ENABLEDMA); + nand_set_fmctrl0(0, FMCTRL0_ENABLEDMA); if (nand_send_cmd(NAND_CMD_READ)) - { - rc |= 1 << (i << 2); - continue; - } - if (nand_send_address(page, databuffer ? 0 : 0x800)) - { - rc |= 1 << (i << 2); - continue; - } - if (nand_send_cmd(NAND_CMD_READ2)) - { - rc |= 1 << (i << 2); - continue; - } + status[0] = 1; } - uint8_t status[4]; - for (i = 0; i < 4; i++) status[i] = (nand_type[i] == 0xFFFFFFFF); + if (!status[0]) + if (nand_send_address(page, 0)) + status[0] = 1; + if (!status[0]) + if (nand_send_cmd(NAND_CMD_READ2)) + status[0] = 1; if (!status[0]) if (nand_wait_status_ready(0)) status[0] = 1; @@ -562,6 +554,18 @@ uint32_t nand_read_page_fast(uint32_t page, void* databuffer, for (i = 1; i < 4; i++) { if (!status[i]) + { + nand_set_fmctrl0(i, FMCTRL0_ENABLEDMA); + if (nand_send_cmd(NAND_CMD_READ)) + status[i] = 1; + } + if (!status[i]) + if (nand_send_address(page, 0)) + status[i] = 1; + if (!status[i]) + if (nand_send_cmd(NAND_CMD_READ2)) + status[i] = 1; + if (!status[i]) if (nand_wait_status_ready(i)) status[i] = 1; if (!status[i]) |