From 65ef5d885263dd9fc61c1d78bd5b951396058d88 Mon Sep 17 00:00:00 2001 From: Enrico Scholz Date: Fri, 12 Apr 2024 18:28:35 +0200 Subject: ARM64: let 'end' point after the range in cache functions v8_flush_dcache_range() and v8_inv_dcache_range() are implemented under the assumption that their 'end' parameter points *after* the range. Fix callers to use it in this way. This fixes e.g. spurious corruptions in the last octet when sending 129 bytes over ethernet. Signed-off-by: Enrico Scholz Link: https://lore.barebox.org/20240412162836.284671-1-enrico.scholz@sigma-chemnitz.de Signed-off-by: Sascha Hauer --- arch/arm/cpu/dma_64.c | 2 +- arch/arm/cpu/mmu_64.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/arm/cpu/dma_64.c b/arch/arm/cpu/dma_64.c index 74d7167860..b50572f5e6 100644 --- a/arch/arm/cpu/dma_64.c +++ b/arch/arm/cpu/dma_64.c @@ -6,7 +6,7 @@ void arch_sync_dma_for_device(void *vaddr, size_t size, enum dma_data_direction dir) { unsigned long start = (unsigned long)vaddr; - unsigned long end = start + size - 1; + unsigned long end = start + size; if (dir == DMA_FROM_DEVICE) v8_inv_dcache_range(start, end); diff --git a/arch/arm/cpu/mmu_64.c b/arch/arm/cpu/mmu_64.c index f907421da9..71c0d8930e 100644 --- a/arch/arm/cpu/mmu_64.c +++ b/arch/arm/cpu/mmu_64.c @@ -282,7 +282,7 @@ void mmu_disable(void) void dma_inv_range(void *ptr, size_t size) { unsigned long start = (unsigned long)ptr; - unsigned long end = start + size - 1; + unsigned long end = start + size; v8_inv_dcache_range(start, end); } @@ -290,7 +290,7 @@ void dma_inv_range(void *ptr, size_t size) void dma_flush_range(void *ptr, size_t size) { unsigned long start = (unsigned long)ptr; - unsigned long end = start + size - 1; + unsigned long end = start + size; v8_flush_dcache_range(start, end); } -- cgit v1.2.3