Message ID | 20220109173009.25522-5-andre.przywara@arm.com |
---|---|
State | Superseded |
Delegated to: | Tom Rini |
Headers | show |
Series | armv8: fixes and cleanups | expand |
On Sun, 9 Jan 2022 17:30:07 +0000 Andre Przywara <andre.przywara@arm.com> wrote: Hi Rick, Leo: > asm/io.h is the header file containing the central MMIO accessor macros. > Judging by the header and the comments, it was apparently once copied > from the Linux kernel, but has deviated since then *heavily*. There is > absolutely no point in staying close to the original Linux code anymore, > so just remove the old cruft, by: > - removing pointless Linux history > - removing commented code > - removing outdated comments > - removing unused definitions (for mem_isa) > > This massively improves the readability of the file. it looks like arch/risc-v/include/asm/io.h is a copy of the ARM version, and includes the same pointless legacy. You might want to remove those parts there as well. Cheers, Andre > Signed-off-by: Andre Przywara <andre.przywara@arm.com> > --- > arch/arm/include/asm/io.h | 98 +-------------------------------------- > 1 file changed, 2 insertions(+), 96 deletions(-) > > diff --git a/arch/arm/include/asm/io.h b/arch/arm/include/asm/io.h > index 36b840378a9..89b1015bc4d 100644 > --- a/arch/arm/include/asm/io.h > +++ b/arch/arm/include/asm/io.h > @@ -1,45 +1,26 @@ > /* > - * linux/include/asm-arm/io.h > + * I/O device access primitives. Based on early versions from the Linux kernel. > * > * Copyright (C) 1996-2000 Russell King > * > * This program is free software; you can redistribute it and/or modify > * it under the terms of the GNU General Public License version 2 as > * published by the Free Software Foundation. > - * > - * Modifications: > - * 16-Sep-1996 RMK Inlined the inx/outx functions & optimised for both > - * constant addresses and variable addresses. > - * 04-Dec-1997 RMK Moved a lot of this stuff to the new architecture > - * specific IO header files. > - * 27-Mar-1999 PJB Second parameter of memcpy_toio is const.. > - * 04-Apr-1999 PJB Added check_signature. > - * 12-Dec-1999 RMK More cleanups > - * 18-Jun-2000 RMK Removed virt_to_* and friends definitions > */ > #ifndef __ASM_ARM_IO_H > #define __ASM_ARM_IO_H > > -#ifdef __KERNEL__ > - > #include <linux/types.h> > #include <linux/kernel.h> > #include <asm/byteorder.h> > #include <asm/memory.h> > #include <asm/barriers.h> > -#if 0 /* XXX###XXX */ > -#include <asm/arch/hardware.h> > -#endif /* XXX###XXX */ > > static inline void sync(void) > { > } > > -/* > - * Generic virtual read/write. Note that we don't support half-word > - * read/writes. We define __arch_*[bl] here, and leave __arch_*w > - * to the architecture specific code. > - */ > +/* Generic virtual read/write. */ > #define __arch_getb(a) (*(volatile unsigned char *)(a)) > #define __arch_getw(a) (*(volatile unsigned short *)(a)) > #define __arch_getl(a) (*(volatile unsigned int *)(a)) > @@ -247,13 +228,6 @@ static inline void __raw_readsl(unsigned long addr, void *data, int longlen) > #define setbits_64(addr, set) setbits(64, addr, set) > #define clrsetbits_64(addr, clear, set) clrsetbits(64, addr, clear, set) > > -/* > - * Now, pick up the machine-defined IO definitions > - */ > -#if 0 /* XXX###XXX */ > -#include <asm/arch/io.h> > -#endif /* XXX###XXX */ > - > /* > * IO port access primitives > * ------------------------- > @@ -317,16 +291,6 @@ static inline void __raw_readsl(unsigned long addr, void *data, int longlen) > #define writesb(a, d, s) __raw_writesb((unsigned long)a, d, s) > #define readsb(a, d, s) __raw_readsb((unsigned long)a, d, s) > > -/* > - * DMA-consistent mapping functions. These allocate/free a region of > - * uncached, unwrite-buffered mapped memory space for use with DMA > - * devices. This is the "generic" version. The PCI specific version > - * is in pci.h > - */ > -extern void *consistent_alloc(int gfp, size_t size, dma_addr_t *handle); > -extern void consistent_free(void *vaddr, size_t size, dma_addr_t handle); > -extern void consistent_sync(void *vaddr, size_t size, int rw); > - > /* > * String version of IO memory access ops: > */ > @@ -334,8 +298,6 @@ extern void _memcpy_fromio(void *, unsigned long, size_t); > extern void _memcpy_toio(unsigned long, const void *, size_t); > extern void _memset_io(unsigned long, int, size_t); > > -extern void __readwrite_bug(const char *fn); > - > /* Optimized copy functions to read from/write to IO sapce */ > #ifdef CONFIG_ARM64 > #include <cpu_func.h> > @@ -441,62 +403,6 @@ void __memset_io(volatile void __iomem *dst, int c, size_t count) > #define memcpy_toio(a, b, c) memcpy((void *)(a), (b), (c)) > #endif > > -/* > - * If this architecture has ISA IO, then define the isa_read/isa_write > - * macros. > - */ > -#ifdef __mem_isa > - > -#define isa_readb(addr) __raw_readb(__mem_isa(addr)) > -#define isa_readw(addr) __raw_readw(__mem_isa(addr)) > -#define isa_readl(addr) __raw_readl(__mem_isa(addr)) > -#define isa_writeb(val,addr) __raw_writeb(val,__mem_isa(addr)) > -#define isa_writew(val,addr) __raw_writew(val,__mem_isa(addr)) > -#define isa_writel(val,addr) __raw_writel(val,__mem_isa(addr)) > -#define isa_memset_io(a,b,c) _memset_io(__mem_isa(a),(b),(c)) > -#define isa_memcpy_fromio(a,b,c) _memcpy_fromio((a),__mem_isa(b),(c)) > -#define isa_memcpy_toio(a,b,c) _memcpy_toio(__mem_isa((a)),(b),(c)) > - > -#define isa_eth_io_copy_and_sum(a,b,c,d) \ > - eth_copy_and_sum((a),__mem_isa(b),(c),(d)) > - > -static inline int > -isa_check_signature(unsigned long io_addr, const unsigned char *signature, > - int length) > -{ > - int retval = 0; > - do { > - if (isa_readb(io_addr) != *signature) > - goto out; > - io_addr++; > - signature++; > - length--; > - } while (length); > - retval = 1; > -out: > - return retval; > -} > - > -#else /* __mem_isa */ > - > -#define isa_readb(addr) (__readwrite_bug("isa_readb"),0) > -#define isa_readw(addr) (__readwrite_bug("isa_readw"),0) > -#define isa_readl(addr) (__readwrite_bug("isa_readl"),0) > -#define isa_writeb(val,addr) __readwrite_bug("isa_writeb") > -#define isa_writew(val,addr) __readwrite_bug("isa_writew") > -#define isa_writel(val,addr) __readwrite_bug("isa_writel") > -#define isa_memset_io(a,b,c) __readwrite_bug("isa_memset_io") > -#define isa_memcpy_fromio(a,b,c) __readwrite_bug("isa_memcpy_fromio") > -#define isa_memcpy_toio(a,b,c) __readwrite_bug("isa_memcpy_toio") > - > -#define isa_eth_io_copy_and_sum(a,b,c,d) \ > - __readwrite_bug("isa_eth_io_copy_and_sum") > - > -#define isa_check_signature(io,sig,len) (0) > - > -#endif /* __mem_isa */ > -#endif /* __KERNEL__ */ > - > #include <asm-generic/io.h> > #include <iotrace.h> >
On Sun, Jan 09, 2022 at 09:39:03PM +0000, Andre Przywara wrote: > On Sun, 9 Jan 2022 17:30:07 +0000 > Andre Przywara <andre.przywara@arm.com> wrote: > > Hi Rick, Leo: > > > asm/io.h is the header file containing the central MMIO accessor macros. > > Judging by the header and the comments, it was apparently once copied > > from the Linux kernel, but has deviated since then *heavily*. There is > > absolutely no point in staying close to the original Linux code anymore, > > so just remove the old cruft, by: > > - removing pointless Linux history > > - removing commented code > > - removing outdated comments > > - removing unused definitions (for mem_isa) > > > > This massively improves the readability of the file. > > it looks like arch/risc-v/include/asm/io.h is a copy of the ARM > version, and includes the same pointless legacy. You might want to > remove those parts there as well. > > Cheers, > Andre > > > Signed-off-by: Andre Przywara <andre.przywara@arm.com> > > --- > > arch/arm/include/asm/io.h | 98 +-------------------------------------- > > 1 file changed, 2 insertions(+), 96 deletions(-) Hi Andre, Thanks for the reminder! Will do ASAP! Best regards, Leo
diff --git a/arch/arm/include/asm/io.h b/arch/arm/include/asm/io.h index 36b840378a9..89b1015bc4d 100644 --- a/arch/arm/include/asm/io.h +++ b/arch/arm/include/asm/io.h @@ -1,45 +1,26 @@ /* - * linux/include/asm-arm/io.h + * I/O device access primitives. Based on early versions from the Linux kernel. * * Copyright (C) 1996-2000 Russell King * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. - * - * Modifications: - * 16-Sep-1996 RMK Inlined the inx/outx functions & optimised for both - * constant addresses and variable addresses. - * 04-Dec-1997 RMK Moved a lot of this stuff to the new architecture - * specific IO header files. - * 27-Mar-1999 PJB Second parameter of memcpy_toio is const.. - * 04-Apr-1999 PJB Added check_signature. - * 12-Dec-1999 RMK More cleanups - * 18-Jun-2000 RMK Removed virt_to_* and friends definitions */ #ifndef __ASM_ARM_IO_H #define __ASM_ARM_IO_H -#ifdef __KERNEL__ - #include <linux/types.h> #include <linux/kernel.h> #include <asm/byteorder.h> #include <asm/memory.h> #include <asm/barriers.h> -#if 0 /* XXX###XXX */ -#include <asm/arch/hardware.h> -#endif /* XXX###XXX */ static inline void sync(void) { } -/* - * Generic virtual read/write. Note that we don't support half-word - * read/writes. We define __arch_*[bl] here, and leave __arch_*w - * to the architecture specific code. - */ +/* Generic virtual read/write. */ #define __arch_getb(a) (*(volatile unsigned char *)(a)) #define __arch_getw(a) (*(volatile unsigned short *)(a)) #define __arch_getl(a) (*(volatile unsigned int *)(a)) @@ -247,13 +228,6 @@ static inline void __raw_readsl(unsigned long addr, void *data, int longlen) #define setbits_64(addr, set) setbits(64, addr, set) #define clrsetbits_64(addr, clear, set) clrsetbits(64, addr, clear, set) -/* - * Now, pick up the machine-defined IO definitions - */ -#if 0 /* XXX###XXX */ -#include <asm/arch/io.h> -#endif /* XXX###XXX */ - /* * IO port access primitives * ------------------------- @@ -317,16 +291,6 @@ static inline void __raw_readsl(unsigned long addr, void *data, int longlen) #define writesb(a, d, s) __raw_writesb((unsigned long)a, d, s) #define readsb(a, d, s) __raw_readsb((unsigned long)a, d, s) -/* - * DMA-consistent mapping functions. These allocate/free a region of - * uncached, unwrite-buffered mapped memory space for use with DMA - * devices. This is the "generic" version. The PCI specific version - * is in pci.h - */ -extern void *consistent_alloc(int gfp, size_t size, dma_addr_t *handle); -extern void consistent_free(void *vaddr, size_t size, dma_addr_t handle); -extern void consistent_sync(void *vaddr, size_t size, int rw); - /* * String version of IO memory access ops: */ @@ -334,8 +298,6 @@ extern void _memcpy_fromio(void *, unsigned long, size_t); extern void _memcpy_toio(unsigned long, const void *, size_t); extern void _memset_io(unsigned long, int, size_t); -extern void __readwrite_bug(const char *fn); - /* Optimized copy functions to read from/write to IO sapce */ #ifdef CONFIG_ARM64 #include <cpu_func.h> @@ -441,62 +403,6 @@ void __memset_io(volatile void __iomem *dst, int c, size_t count) #define memcpy_toio(a, b, c) memcpy((void *)(a), (b), (c)) #endif -/* - * If this architecture has ISA IO, then define the isa_read/isa_write - * macros. - */ -#ifdef __mem_isa - -#define isa_readb(addr) __raw_readb(__mem_isa(addr)) -#define isa_readw(addr) __raw_readw(__mem_isa(addr)) -#define isa_readl(addr) __raw_readl(__mem_isa(addr)) -#define isa_writeb(val,addr) __raw_writeb(val,__mem_isa(addr)) -#define isa_writew(val,addr) __raw_writew(val,__mem_isa(addr)) -#define isa_writel(val,addr) __raw_writel(val,__mem_isa(addr)) -#define isa_memset_io(a,b,c) _memset_io(__mem_isa(a),(b),(c)) -#define isa_memcpy_fromio(a,b,c) _memcpy_fromio((a),__mem_isa(b),(c)) -#define isa_memcpy_toio(a,b,c) _memcpy_toio(__mem_isa((a)),(b),(c)) - -#define isa_eth_io_copy_and_sum(a,b,c,d) \ - eth_copy_and_sum((a),__mem_isa(b),(c),(d)) - -static inline int -isa_check_signature(unsigned long io_addr, const unsigned char *signature, - int length) -{ - int retval = 0; - do { - if (isa_readb(io_addr) != *signature) - goto out; - io_addr++; - signature++; - length--; - } while (length); - retval = 1; -out: - return retval; -} - -#else /* __mem_isa */ - -#define isa_readb(addr) (__readwrite_bug("isa_readb"),0) -#define isa_readw(addr) (__readwrite_bug("isa_readw"),0) -#define isa_readl(addr) (__readwrite_bug("isa_readl"),0) -#define isa_writeb(val,addr) __readwrite_bug("isa_writeb") -#define isa_writew(val,addr) __readwrite_bug("isa_writew") -#define isa_writel(val,addr) __readwrite_bug("isa_writel") -#define isa_memset_io(a,b,c) __readwrite_bug("isa_memset_io") -#define isa_memcpy_fromio(a,b,c) __readwrite_bug("isa_memcpy_fromio") -#define isa_memcpy_toio(a,b,c) __readwrite_bug("isa_memcpy_toio") - -#define isa_eth_io_copy_and_sum(a,b,c,d) \ - __readwrite_bug("isa_eth_io_copy_and_sum") - -#define isa_check_signature(io,sig,len) (0) - -#endif /* __mem_isa */ -#endif /* __KERNEL__ */ - #include <asm-generic/io.h> #include <iotrace.h>
asm/io.h is the header file containing the central MMIO accessor macros. Judging by the header and the comments, it was apparently once copied from the Linux kernel, but has deviated since then *heavily*. There is absolutely no point in staying close to the original Linux code anymore, so just remove the old cruft, by: - removing pointless Linux history - removing commented code - removing outdated comments - removing unused definitions (for mem_isa) This massively improves the readability of the file. Signed-off-by: Andre Przywara <andre.przywara@arm.com> --- arch/arm/include/asm/io.h | 98 +-------------------------------------- 1 file changed, 2 insertions(+), 96 deletions(-)