nand: fix buffer alignment in new verification feature
authorStephen Warren <swarren@nvidia.com>
Tue, 14 Apr 2015 14:59:00 +0000 (08:59 -0600)
committerScott Wood <scottwood@freescale.com>
Thu, 21 May 2015 19:24:36 +0000 (14:24 -0500)
On systems with caches enabled, NAND I/O may need to flush/invalidate
the cache during read/write operations. For this to work correctly, all
buffers must be cache-aligned. Fix nand_verify*() to allocate aligned
buffers.

This prevents cache alignment warnings from being spewed when using
U-Boot to write an updated version of itself to flash on NVIDIA Tegra
Seaboard (after perturbation of stack/data layout in current
u-boot-dm/next branch).

I have validatd (executed) nand_verify(), but I don't think I've executed
nand_verify_page_oob(); testing of that would be useful.

Cc: Peter Tyser <ptyser@xes-inc.com>
Cc: Heiko Schocher <hs@denx.de>
Cc: Scott Wood <scottwood@freescale.com>
Fixes: 59b5a2ad83df ("nand: Add verification functions")
Signed-off-by: Stephen Warren <swarren@nvidia.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Acked-by: Scott Wood <scottwood@freescale.com>
drivers/mtd/nand/nand_util.c

index 12dd26a33fac3458d0fd89bcf2dcc91859f75895..ee2c24df3b852f47214e7e885bb6cbfa9f9d4a8b 100644 (file)
@@ -483,7 +483,7 @@ int nand_verify_page_oob(nand_info_t *nand, struct mtd_oob_ops *ops, loff_t ofs)
 
        memcpy(&vops, ops, sizeof(vops));
 
-       vops.datbuf = malloc(verlen);
+       vops.datbuf = memalign(ARCH_DMA_MINALIGN, verlen);
 
        if (!vops.datbuf)
                return -ENOMEM;
@@ -520,7 +520,7 @@ int nand_verify(nand_info_t *nand, loff_t ofs, size_t len, u_char *buf)
        int rval = 0;
        size_t verofs;
        size_t verlen = nand->writesize;
-       uint8_t *verbuf = malloc(verlen);
+       uint8_t *verbuf = memalign(ARCH_DMA_MINALIGN, verlen);
 
        if (!verbuf)
                return -ENOMEM;