summaryrefslogtreecommitdiffstats
path: root/firmware/target/arm/s5l8700/ipodnano2g/ftl-nano2g.c
diff options
context:
space:
mode:
authorMichael Sparmann <theseven@rockbox.org>2010-03-14 20:25:58 +0000
committerMichael Sparmann <theseven@rockbox.org>2010-03-14 20:25:58 +0000
commitaf38e0960ba479af8f6cdbd1d27787037bff99cc (patch)
treede794ac38da2d3f63e01df270e1e438f63336daa /firmware/target/arm/s5l8700/ipodnano2g/ftl-nano2g.c
parent5cf262c95e3bc21849bff6cb3cd316e1b13e40cc (diff)
downloadrockbox-af38e0960ba479af8f6cdbd1d27787037bff99cc.tar.gz
rockbox-af38e0960ba479af8f6cdbd1d27787037bff99cc.zip
Finally fast Nano2G NAND reading, also works on remapped blocks this time.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25181 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/s5l8700/ipodnano2g/ftl-nano2g.c')
-rw-r--r--firmware/target/arm/s5l8700/ipodnano2g/ftl-nano2g.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/firmware/target/arm/s5l8700/ipodnano2g/ftl-nano2g.c b/firmware/target/arm/s5l8700/ipodnano2g/ftl-nano2g.c
index 9a06fbed86..56d148346c 100644
--- a/firmware/target/arm/s5l8700/ipodnano2g/ftl-nano2g.c
+++ b/firmware/target/arm/s5l8700/ipodnano2g/ftl-nano2g.c
@@ -864,7 +864,13 @@ uint32_t ftl_vfl_read_fast(uint32_t vpage, void* buffer, void* sparebuffer,
//return 4;
uint32_t bank = abspage % ftl_banks;
-// if (bank)
+ uint32_t block = abspage / ((*ftl_nand_type).pagesperblock * ftl_banks);
+ uint32_t page = (abspage / ftl_banks) % (*ftl_nand_type).pagesperblock;
+ uint32_t remapped = 0;
+ for (i = 0; i < ftl_banks; i++)
+ if (ftl_vfl_get_physical_block(i, block) != block)
+ remapped = 1;
+ if (bank || remapped)
{
for (i = 0; i < ftl_banks; i++)
{
@@ -880,10 +886,7 @@ uint32_t ftl_vfl_read_fast(uint32_t vpage, void* buffer, void* sparebuffer,
}
return rc;
}
- uint32_t block = abspage / ((*ftl_nand_type).pagesperblock * ftl_banks);
- uint32_t page = (abspage / ftl_banks) % (*ftl_nand_type).pagesperblock;
- uint32_t physblock = ftl_vfl_get_physical_block(bank, block);
- uint32_t physpage = physblock * (*ftl_nand_type).pagesperblock + page;
+ uint32_t physpage = block * (*ftl_nand_type).pagesperblock + page;
rc = nand_read_page_fast(physpage, buffer, sparebuffer, 1, checkempty);
if (!(rc & 0xdddd)) return rc;