diff options
author | Tomasz Malesinski <tomal@rockbox.org> | 2007-09-22 22:53:29 +0000 |
---|---|---|
committer | Tomasz Malesinski <tomal@rockbox.org> | 2007-09-22 22:53:29 +0000 |
commit | 7d1eeddf93bc1ba23c348b6f64742b3fce85420f (patch) | |
tree | 0a3f35a46bcf08c38957f704eb68ec14ce0b83b5 | |
parent | 8f8dbf47426e59328dda394b15db6fac2442e8e1 (diff) | |
download | rockbox-7d1eeddf93bc1ba23c348b6f64742b3fce85420f.tar.gz rockbox-7d1eeddf93bc1ba23c348b6f64742b3fce85420f.zip |
ata_flash.c: write 32 bits to the buffer at a time when reading a sector.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14822 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | firmware/drivers/ata_flash.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/firmware/drivers/ata_flash.c b/firmware/drivers/ata_flash.c index ccdc8c2443..078cc6b494 100644 --- a/firmware/drivers/ata_flash.c +++ b/firmware/drivers/ata_flash.c | |||
@@ -149,6 +149,7 @@ int flash_read_id(int no) { | |||
149 | int flash_read_sector(int sector, unsigned char* buf, | 149 | int flash_read_sector(int sector, unsigned char* buf, |
150 | unsigned char* oob) | 150 | unsigned char* oob) |
151 | { | 151 | { |
152 | unsigned long *bufl = (unsigned long *)buf; | ||
152 | int chip, chip_sector; | 153 | int chip, chip_sector; |
153 | int i; | 154 | int i; |
154 | 155 | ||
@@ -167,8 +168,29 @@ int flash_read_sector(int sector, unsigned char* buf, | |||
167 | 168 | ||
168 | flash_wait_ready(); | 169 | flash_wait_ready(); |
169 | 170 | ||
170 | for (i = 0; i < 512; i++) | 171 | if ((unsigned long)buf & 3) |
171 | buf[i] = flash_read_data(); | 172 | { |
173 | for (i = 0; i < 512; i++) | ||
174 | buf[i] = flash_read_data(); | ||
175 | } | ||
176 | else | ||
177 | { | ||
178 | for (i = 0; i < 512 / 4; i++) { | ||
179 | unsigned long v; | ||
180 | #ifdef ROCKBOX_LITTLE_ENDIAN | ||
181 | v = flash_read_data(); | ||
182 | v |= (unsigned long)flash_read_data() << 8; | ||
183 | v |= (unsigned long)flash_read_data() << 16; | ||
184 | v |= (unsigned long)flash_read_data() << 24; | ||
185 | #else | ||
186 | v = (unsigned long)flash_read_data() << 24; | ||
187 | v |= (unsigned long)flash_read_data() << 16; | ||
188 | v |= (unsigned long)flash_read_data() << 8; | ||
189 | v |= flash_read_data(); | ||
190 | #endif | ||
191 | bufl[i] = v; | ||
192 | } | ||
193 | } | ||
172 | 194 | ||
173 | flash_write_cmd(0x05); | 195 | flash_write_cmd(0x05); |
174 | flash_write_addr((chip_sector & 3) * 0x10); | 196 | flash_write_addr((chip_sector & 3) * 0x10); |