1947c2d2a0 introduces cache line flushes for the bootcounter, but if
the start address is not aligned then the flush causes warnings of
the form:

  CACHE: Misaligned operation at range [4030b7fc, 4030b83c]

Align both the start and end of the buffer (possibly crossing multiple
lines).

Fixes: 1947c2d2a0 ("bootcount: flush after storing the bootcounter")
Signed-off-by: Alex Kiernan <alex.kier...@gmail.com>
---

 drivers/bootcount/bootcount.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/drivers/bootcount/bootcount.c b/drivers/bootcount/bootcount.c
index a3162c97ed..646c563f8a 100644
--- a/drivers/bootcount/bootcount.c
+++ b/drivers/bootcount/bootcount.c
@@ -11,16 +11,23 @@
 __weak void bootcount_store(ulong a)
 {
        void *reg = (void *)CONFIG_SYS_BOOTCOUNT_ADDR;
+       uintptr_t flush_start = rounddown(CONFIG_SYS_BOOTCOUNT_ADDR,
+                                         CONFIG_SYS_CACHELINE_SIZE);
+       uintptr_t flush_end;
 
 #if defined(CONFIG_SYS_BOOTCOUNT_SINGLEWORD)
        raw_bootcount_store(reg, (BOOTCOUNT_MAGIC & 0xffff0000) | a);
+
+       flush_end = roundup(CONFIG_SYS_BOOTCOUNT_ADDR + 4,
+                           CONFIG_SYS_CACHELINE_SIZE);
 #else
        raw_bootcount_store(reg, a);
        raw_bootcount_store(reg + 4, BOOTCOUNT_MAGIC);
+
+       flush_end = roundup(CONFIG_SYS_BOOTCOUNT_ADDR + 8,
+                           CONFIG_SYS_CACHELINE_SIZE);
 #endif /* defined(CONFIG_SYS_BOOTCOUNT_SINGLEWORD */
-       flush_dcache_range(CONFIG_SYS_BOOTCOUNT_ADDR,
-                               CONFIG_SYS_BOOTCOUNT_ADDR +
-                               CONFIG_SYS_CACHELINE_SIZE);
+       flush_dcache_range(flush_start, flush_end);
 }
 
 __weak ulong bootcount_load(void)
-- 
2.17.1

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

Reply via email to