Re: [PATCH v2 resend 4/5] arm64: mm: Convert to GENERIC_IOREMAP

From: Kefeng Wang
Date: Thu May 19 2022 - 02:31:17 EST



On 2022/5/19 13:34, Anshuman Khandual wrote:

On 5/2/22 08:57, Kefeng Wang wrote:
Add hook for arm64's special operation when ioremap() and iounmap(),
then ioremap_wc/np/cache is converted to use ioremap_prot()
from GENERIC_IOREMAP, update the Copyright and kill the unused
inclusions.

Signed-off-by: Kefeng Wang <wangkefeng.wang@xxxxxxxxxx>
---
v2 resend:
- use IOMEM_ERR_PTR to fix sparse warning found by lkp

arch/arm64/Kconfig | 1 +
arch/arm64/include/asm/io.h | 20 ++++++---
arch/arm64/kernel/acpi.c | 2 +-
arch/arm64/mm/ioremap.c | 85 +++++--------------------------------
4 files changed, 27 insertions(+), 81 deletions(-)

diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index 20ea89d9ac2f..56673209fdb9 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -123,6 +123,7 @@ config ARM64
select GENERIC_CPU_VULNERABILITIES
select GENERIC_EARLY_IOREMAP
select GENERIC_IDLE_POLL_SETUP
+ select GENERIC_IOREMAP
select GENERIC_IRQ_IPI
select GENERIC_IRQ_PROBE
select GENERIC_IRQ_SHOW
diff --git a/arch/arm64/include/asm/io.h b/arch/arm64/include/asm/io.h
index 7fd836bea7eb..042fa01940b8 100644
--- a/arch/arm64/include/asm/io.h
+++ b/arch/arm64/include/asm/io.h
@@ -163,13 +163,21 @@ extern void __memset_io(volatile void __iomem *, int, size_t);
/*
* I/O memory mapping functions.
*/
-extern void __iomem *__ioremap(phys_addr_t phys_addr, size_t size, pgprot_t prot);
-extern void iounmap(volatile void __iomem *addr);
-extern void __iomem *ioremap_cache(phys_addr_t phys_addr, size_t size);
-#define ioremap(addr, size) __ioremap((addr), (size), __pgprot(PROT_DEVICE_nGnRE))
-#define ioremap_wc(addr, size) __ioremap((addr), (size), __pgprot(PROT_NORMAL_NC))
-#define ioremap_np(addr, size) __ioremap((addr), (size), __pgprot(PROT_DEVICE_nGnRnE))
+void __iomem *arch_ioremap(phys_addr_t phys_addr, size_t size, unsigned long prot);
+#define arch_ioremap arch_ioremap
+
+int arch_iounmap(void __iomem *addr);
+#define arch_iounmap arch_iounmap
+
+#define _PAGE_IOREMAP PROT_DEVICE_nGnRE
Small nit, should we have a comment here for the above components i.e
PAGE_IOREMAP and callbacks arch_ioremap()/arch_iounmap() are required
because of enabling GENERIC_IOREMAP ?

There is a comment in  include/asm-generic/io.h:       /* _PAGE_IOREMAP needs to be supplied by the architecture */

so arch's callbacks could not add repeated comments.


Otherwise LGTM.

Reviewed-by: Anshuman Khandual <anshuman.khandual@xxxxxxx>
Thanks.
.