summaryrefslogtreecommitdiff
path: root/fs/ext4/dev.c
diff options
context:
space:
mode:
authorStephen Warren <swarren@nvidia.com>2012-09-18 08:05:28 +0000
committerTom Rini <trini@ti.com>2012-09-20 11:07:26 -0700
commit55b523b7d4ab885142f77d388007eb5490ba6bf4 (patch)
tree52860da4203f49ccc80bed7e1703d41b96c7fdd7 /fs/ext4/dev.c
parented34f34dbaf206dfe223f4bc2147d600fe1b0f58 (diff)
downloadu-boot-55b523b7d4ab885142f77d388007eb5490ba6bf4.tar.gz
u-boot-55b523b7d4ab885142f77d388007eb5490ba6bf4.tar.bz2
u-boot-55b523b7d4ab885142f77d388007eb5490ba6bf4.zip
ext4: cache-align buffers so the invalidation works
DMA buffer cache invalidation requires that buffers have cache-aligned buffer locations and sizes. Use memalign() and ALLOC_CACHE_ALIGN_BUFFER() to ensure this. On Tegra at least, without this fix, the following fail commands fail in u-boot-master/ext4, but succeeded at the branch's branch point in u-boot/master. With this fix, the commands work again: ext2ls mmc 0:1 / ext2load mmc 0:1 /boot/zImage Cc: Uma Shankar <uma.shankar@samsung.com> Cc: Manjunatha C Achar <a.manjunatha@samsung.com> Cc: Iqbal Shareef <iqbal.ams@samsung.com> Cc: Hakgoo Lee <goodguy.lee@samsung.com> Cc: Wolfgang Denk <wd@denx.de> Cc: Tom Rini <trini@ti.com> Signed-off-by: Stephen Warren <swarren@nvidia.com>
Diffstat (limited to 'fs/ext4/dev.c')
-rw-r--r--fs/ext4/dev.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/ext4/dev.c b/fs/ext4/dev.c
index fb62f241e4..9e85228eda 100644
--- a/fs/ext4/dev.c
+++ b/fs/ext4/dev.c
@@ -62,7 +62,7 @@ int ext4fs_set_blk_dev(block_dev_desc_t *rbdd, int part)
int ext4fs_devread(int sector, int byte_offset, int byte_len, char *buf)
{
- char sec_buf[SECTOR_SIZE];
+ ALLOC_CACHE_ALIGN_BUFFER(char, sec_buf, SECTOR_SIZE);
unsigned block_len;
/* Check partition boundaries */
@@ -107,7 +107,7 @@ int ext4fs_devread(int sector, int byte_offset, int byte_len, char *buf)
block_len = byte_len & ~(SECTOR_SIZE - 1);
if (block_len == 0) {
- u8 p[SECTOR_SIZE];
+ ALLOC_CACHE_ALIGN_BUFFER(u8, p, SECTOR_SIZE);
block_len = SECTOR_SIZE;
ext4fs_block_dev_desc->block_read(ext4fs_block_dev_desc->dev,