summaryrefslogtreecommitdiff
path: root/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c')
-rw-r--r--firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c b/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c
index 7961b94f7f..3b5f88d3c2 100644
--- a/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c
+++ b/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c
@@ -406,9 +406,12 @@ uint32_t nand_read_page(uint32_t bank, uint32_t page, void* databuffer,
406 return nand_unlock(rc); 406 return nand_unlock(rc);
407 } 407 }
408 if (nand_transfer_data(bank, 0, spare, 0x40)) return nand_unlock(1); 408 if (nand_transfer_data(bank, 0, spare, 0x40)) return nand_unlock(1);
409 memcpy(nand_ecc, &spare[0xC], 0x28); 409 if (databuffer)
410 rc |= (ecc_decode(3, data, nand_ecc) & 0xF) << 4; 410 {
411 if (databuffer && data != databuffer) memcpy(databuffer, data, 0x800); 411 memcpy(nand_ecc, &spare[0xC], 0x28);
412 rc |= (ecc_decode(3, data, nand_ecc) & 0xF) << 4;
413 if (data != databuffer) memcpy(databuffer, data, 0x800);
414 }
412 memset(nand_ctrl, 0xFF, 0x200); 415 memset(nand_ctrl, 0xFF, 0x200);
413 memcpy(nand_ctrl, spare, 0xC); 416 memcpy(nand_ctrl, spare, 0xC);
414 memcpy(nand_ecc, &spare[0x34], 0xC); 417 memcpy(nand_ecc, &spare[0x34], 0xC);