diff options
author | Michael Sparmann <theseven@rockbox.org> | 2010-03-13 21:45:23 +0000 |
---|---|---|
committer | Michael Sparmann <theseven@rockbox.org> | 2010-03-13 21:45:23 +0000 |
commit | a99f8fae7916bbc8888763d6b88caf6054477659 (patch) | |
tree | 9af662b3e7ee755be67f0ef64330081485b3dcf9 /firmware/target/arm/s5l8700/ipodnano2g/nand-nano2g.c | |
parent | 382b6dca08254e815a39db5fefbc2bf98142c812 (diff) | |
download | rockbox-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.c | 35 |
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 | ||
679 | uint32_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 | |||
679 | const struct nand_device_info_type* nand_get_device_type(uint32_t bank) | 714 | const 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) |