Re: [PATCH 21/21] dma-mapping: replace custom code with generic implementation

From: Geert Uytterhoeven
Date: Tue Jun 27 2023 - 12:52:45 EST


On Thu, Apr 13, 2023 at 2:52 PM Arnd Bergmann <arnd@xxxxxxxx> wrote:
> On Thu, Apr 13, 2023, at 14:13, Biju Das wrote:
> > FYI, this patch breaks on RZ/G2L SMARC EVK board and Arnd will send V2
> > for fixing this issue.
> >
> > [10:53] <biju> [ 3.384408] Unable to handle kernel paging request at
> > virtual address 000000004afb0080
>
> Right, sorry about this, I accidentally removed the 'phys_to_virt()'
> conversion on arm64.

Meh, I missed that, so I ended up bisecting this same failure...

This patch is now commit 801f1883c4bb70cc ("dma-mapping: replace
custom code with generic implementation") in esmil/jh7100-dmapool,
and broke booting on R-Car Gen3.

The following gmail-whitespace-damaged patch fixes that:

diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c
index 97b7cea5eb23aedd..77e0b68b43e5849a 100644
--- a/arch/arm64/mm/dma-mapping.c
+++ b/arch/arm64/mm/dma-mapping.c
@@ -15,17 +15,23 @@

static inline void arch_dma_cache_wback(phys_addr_t paddr, size_t size)
{
- dcache_clean_poc(paddr, paddr + size);
+ unsigned long start = (unsigned long)phys_to_virt(paddr);
+
+ dcache_clean_poc(start, start + size);
}

static inline void arch_dma_cache_inv(phys_addr_t paddr, size_t size)
{
- dcache_inval_poc(paddr, paddr + size);
+ unsigned long start = (unsigned long)phys_to_virt(paddr);
+
+ dcache_inval_poc(start, start + size);
}

static inline void arch_dma_cache_wback_inv(phys_addr_t paddr, size_t size)
{
- dcache_clean_inval_poc(paddr, paddr + size);
+ unsigned long start = (unsigned long)phys_to_virt(paddr);
+
+ dcache_clean_inval_poc(start, start + size);
}

static inline bool arch_sync_dma_clean_before_fromdevice(void)

Gr{oetje,eeting}s,

Geert


--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds