summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Sparmann <theseven@rockbox.org>2010-03-14 20:55:43 +0000
committerMichael Sparmann <theseven@rockbox.org>2010-03-14 20:55:43 +0000
commit9b416c0652b29cac1b1b3ad1a8ce1a627076fadc (patch)
tree2d7bb411b5b346684a5851e9dff1b15af22733b2
parentaf38e0960ba479af8f6cdbd1d27787037bff99cc (diff)
downloadrockbox-9b416c0652b29cac1b1b3ad1a8ce1a627076fadc.tar.gz
rockbox-9b416c0652b29cac1b1b3ad1a8ce1a627076fadc.zip
Nano2G NAND: Don't continue reading on that bank if starting the read failed.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25182 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c29
1 files changed, 12 insertions, 17 deletions
diff --git a/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c b/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c
index 2b13b55edd..96951b51bc 100644
--- a/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c
+++ b/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c
@@ -530,28 +530,23 @@ 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();
+ uint8_t status[4];
+ for (i = 0; i < 4; i++) status[i] = (nand_type[i] == 0xFFFFFFFF);
for (i = 0; i < 4; i++)
{
- if (nand_type[i] == 0xFFFFFFFF) continue;
- nand_set_fmctrl0(i, 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))
+ if (!status[i])
{
- rc |= 1 << (i << 2);
- continue;
+ 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;
}
- uint8_t status[4];
- for (i = 0; i < 4; i++) status[i] = (nand_type[i] == 0xFFFFFFFF);
if (!status[0])
if (nand_wait_status_ready(0))
status[0] = 1;