If the OOB size is not multiple of the cache line size, the ARMv7
cache operation still warns "Misaligned operation at range".

The real cache coherency problem was fixed by commit e3332e1a1a04
("Make kmalloc'ed memory really DMA-safe").  Now it is the matter
of the warning messages.

=> nand info

Device 0: nand0, sector size 256 KiB
  Page size       4096 b
  OOB size         224 b
  Erase size    262144 b
  subpagesize     4096 b
  options     0x00104200
  bbt options 0x00060000
=> nand dump 0
CACHE: Misaligned operation at range [9fb15280, 9fb16360]
CACHE: Misaligned operation at range [9fb15280, 9fb16360]
CACHE: Misaligned operation at range [9fb15280, 9fb16360]
CACHE: Misaligned operation at range [9fb15280, 9fb16360]
  ...

Reported-by: Marek Vasut <ma...@denx.de>
Signed-off-by: Masahiro Yamada <yamada.masah...@socionext.com>
---

 drivers/mtd/nand/denali.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/mtd/nand/denali.c b/drivers/mtd/nand/denali.c
index 7302c37..d1cac06 100644
--- a/drivers/mtd/nand/denali.c
+++ b/drivers/mtd/nand/denali.c
@@ -21,6 +21,8 @@ static dma_addr_t dma_map_single(void *dev, void *ptr, size_t 
size,
 {
        unsigned long addr = (unsigned long)ptr;
 
+       size = ALIGN(size, ARCH_DMA_MINALIGN);
+
        if (dir == DMA_FROM_DEVICE)
                invalidate_dcache_range(addr, addr + size);
        else
@@ -32,6 +34,8 @@ static dma_addr_t dma_map_single(void *dev, void *ptr, size_t 
size,
 static void dma_unmap_single(void *dev, dma_addr_t addr, size_t size,
                             enum dma_data_direction dir)
 {
+       size = ALIGN(size, ARCH_DMA_MINALIGN);
+
        if (dir != DMA_TO_DEVICE)
                invalidate_dcache_range(addr, addr + size);
 }
-- 
2.7.4

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to