diff options
Diffstat (limited to 'firmware/target/arm')
-rw-r--r-- | firmware/target/arm/s5l8700/ipodnano2g/ftl-nano2g.c | 15 | ||||
-rw-r--r-- | firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c | 8 |
2 files changed, 17 insertions, 6 deletions
diff --git a/firmware/target/arm/s5l8700/ipodnano2g/ftl-nano2g.c b/firmware/target/arm/s5l8700/ipodnano2g/ftl-nano2g.c index e4abcafba8..15c97ccb0d 100644 --- a/firmware/target/arm/s5l8700/ipodnano2g/ftl-nano2g.c +++ b/firmware/target/arm/s5l8700/ipodnano2g/ftl-nano2g.c | |||
@@ -1778,6 +1778,8 @@ uint32_t ftl_sync(void) | |||
1778 | uint32_t ppb = (*ftl_nand_type).pagesperblock * ftl_banks; | 1778 | uint32_t ppb = (*ftl_nand_type).pagesperblock * ftl_banks; |
1779 | if (ftl_cxt.clean_flag == 1) return 0; | 1779 | if (ftl_cxt.clean_flag == 1) return 0; |
1780 | 1780 | ||
1781 | mutex_lock(&ftl_mtx); | ||
1782 | |||
1781 | if (ftl_cxt.swapcounter >= 20) | 1783 | if (ftl_cxt.swapcounter >= 20) |
1782 | for (i = 0; i < 4; i++) | 1784 | for (i = 0; i < 4; i++) |
1783 | if (ftl_swap_blocks() == 0) | 1785 | if (ftl_swap_blocks() == 0) |
@@ -1793,10 +1795,19 @@ uint32_t ftl_sync(void) | |||
1793 | rc |= ftl_commit_sequential(&ftl_log[i]); | 1795 | rc |= ftl_commit_sequential(&ftl_log[i]); |
1794 | else rc |= ftl_commit_scattered(&ftl_log[i]); | 1796 | else rc |= ftl_commit_scattered(&ftl_log[i]); |
1795 | } | 1797 | } |
1796 | if (rc != 0) return 1; | 1798 | if (rc != 0) |
1799 | { | ||
1800 | mutex_unlock(&ftl_mtx); | ||
1801 | return 1; | ||
1802 | } | ||
1797 | for (i = 0; i < 5; i++) | 1803 | for (i = 0; i < 5; i++) |
1798 | if (ftl_commit_cxt() == 0) return 0; | 1804 | if (ftl_commit_cxt() == 0) |
1805 | { | ||
1806 | mutex_unlock(&ftl_mtx); | ||
1807 | return 0; | ||
1808 | } | ||
1799 | else ftl_cxt.ftlctrlpage |= ppb - 1; | 1809 | else ftl_cxt.ftlctrlpage |= ppb - 1; |
1810 | mutex_unlock(&ftl_mtx); | ||
1800 | return 1; | 1811 | return 1; |
1801 | } | 1812 | } |
1802 | #endif | 1813 | #endif |
diff --git a/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c b/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c index 302ffdee21..795e489258 100644 --- a/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c +++ b/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c | |||
@@ -312,6 +312,7 @@ uint32_t nand_read_page(uint32_t bank, uint32_t page, void* databuffer, | |||
312 | if (databuffer != 0) | 312 | if (databuffer != 0) |
313 | if (nand_transfer_data(bank, 0, nand_uncached_data, 0x800) != 0) | 313 | if (nand_transfer_data(bank, 0, nand_uncached_data, 0x800) != 0) |
314 | return nand_unlock(1); | 314 | return nand_unlock(1); |
315 | rc = 0; | ||
315 | if (doecc == 0) | 316 | if (doecc == 0) |
316 | { | 317 | { |
317 | memcpy(databuffer, nand_uncached_data, 0x800); | 318 | memcpy(databuffer, nand_uncached_data, 0x800); |
@@ -321,11 +322,10 @@ uint32_t nand_read_page(uint32_t bank, uint32_t page, void* databuffer, | |||
321 | return nand_unlock(1); | 322 | return nand_unlock(1); |
322 | memcpy(sparebuffer, nand_uncached_spare, 0x800); | 323 | memcpy(sparebuffer, nand_uncached_spare, 0x800); |
323 | if (checkempty != 0) | 324 | if (checkempty != 0) |
324 | return nand_check_empty((uint8_t*)sparebuffer) << 1; | 325 | rc = nand_check_empty((uint8_t*)sparebuffer) << 1; |
325 | } | 326 | } |
326 | return nand_unlock(0); | 327 | return nand_unlock(rc); |
327 | } | 328 | } |
328 | rc = 0; | ||
329 | if (nand_transfer_data(bank, 0, nand_uncached_spare, 0x40) != 0) | 329 | if (nand_transfer_data(bank, 0, nand_uncached_spare, 0x40) != 0) |
330 | return nand_unlock(1); | 330 | return nand_unlock(1); |
331 | memcpy(nand_uncached_ecc, &nand_uncached_spare[0xC], 0x28); | 331 | memcpy(nand_uncached_ecc, &nand_uncached_spare[0xC], 0x28); |
@@ -377,7 +377,7 @@ uint32_t nand_write_page(uint32_t bank, uint32_t page, void* databuffer, | |||
377 | if (nand_transfer_data(bank, 1, nand_uncached_spare, 0x40) != 0) | 377 | if (nand_transfer_data(bank, 1, nand_uncached_spare, 0x40) != 0) |
378 | return nand_unlock(1); | 378 | return nand_unlock(1); |
379 | if (nand_send_cmd(NAND_CMD_PROGCNFRM) != 0) return nand_unlock(1); | 379 | if (nand_send_cmd(NAND_CMD_PROGCNFRM) != 0) return nand_unlock(1); |
380 | return nand_wait_status_ready(bank); | 380 | return nand_unlock(nand_wait_status_ready(bank)); |
381 | } | 381 | } |
382 | 382 | ||
383 | uint32_t nand_block_erase(uint32_t bank, uint32_t page) | 383 | uint32_t nand_block_erase(uint32_t bank, uint32_t page) |