summaryrefslogtreecommitdiff
path: root/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c
diff options
context:
space:
mode:
authorMichael Sparmann <theseven@rockbox.org>2010-03-13 21:45:23 +0000
committerMichael Sparmann <theseven@rockbox.org>2010-03-13 21:45:23 +0000
commita99f8fae7916bbc8888763d6b88caf6054477659 (patch)
tree9af662b3e7ee755be67f0ef64330081485b3dcf9 /firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c
parent382b6dca08254e815a39db5fefbc2bf98142c812 (diff)
downloadrockbox-a99f8fae7916bbc8888763d6b88caf6054477659.tar.gz
rockbox-a99f8fae7916bbc8888763d6b88caf6054477659.zip
Nano2G NAND interleaved erase support
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25155 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c')
-rw-r--r--firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c b/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c
index e9eab73df9..ba1f0df534 100644
--- a/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c
+++ b/firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c
@@ -676,6 +676,41 @@ uint32_t nand_write_page_collect(uint32_t bank)
676 return nand_wait_status_ready(bank); 676 return nand_wait_status_ready(bank);
677} 677}
678 678
679uint32_t nand_block_erase_fast(uint32_t page)
680{
681 uint32_t i, rc = 0;
682 mutex_lock(&nand_mtx);
683 nand_last_activity_value = current_tick;
684 led(true);
685 if (!nand_powered) nand_power_up();
686 for (i = 0; i < 4; i++)
687 {
688 if (nand_type[i] == 0xFFFFFFFF) continue;
689 nand_set_fmctrl0(i, 0);
690 if (nand_send_cmd(NAND_CMD_BLOCKERASE))
691 {
692 rc |= 1 << i;
693 continue;
694 }
695 FMANUM = 2;
696 FMADDR0 = page;
697 FMCTRL1 = FMCTRL1_DOTRANSADDR;
698 if (nand_wait_cmddone())
699 {
700 rc |= 1 << i;
701 continue;
702 }
703 if (nand_send_cmd(NAND_CMD_ERASECNFRM)) rc |= 1 << i;
704 }
705 for (i = 0; i < 4; i++)
706 {
707 if (nand_type[i] == 0xFFFFFFFF) continue;
708 if (rc & (1 << i)) continue;
709 if (nand_wait_status_ready(i)) rc |= 1 << i;
710 }
711 return nand_unlock(rc);
712}
713
679const struct nand_device_info_type* nand_get_device_type(uint32_t bank) 714const struct nand_device_info_type* nand_get_device_type(uint32_t bank)
680{ 715{
681 if (nand_type[bank] == 0xFFFFFFFF) 716 if (nand_type[bank] == 0xFFFFFFFF)