Merge branch 'asm-generic-io.h-cleanup' into asm-generic

MIPS is the last architecture that is yet to start using asm-generic/io.h,
so Baoquan He converts it, which allows the other changes to remove code
duplication, and it will allow further cleanups in the future.

* asm-generic-io.h-cleanup:
  asm/io: remove unnecessary xlate_dev_mem_ptr() and unxlate_dev_mem_ptr()
  mips: io: remove duplicated codes
  arch/*/io.h: remove ioremap_uc in some architectures
  mips: add <asm-generic/io.h> including
This commit is contained in:
Arnd Bergmann 2023-11-23 10:39:13 +01:00
commit d67a308ac5
16 changed files with 81 additions and 128 deletions

View File

@ -408,11 +408,12 @@ functions for details on the CPU side of things.
ioremap_uc() ioremap_uc()
------------ ------------
ioremap_uc() behaves like ioremap() except that on the x86 architecture without ioremap_uc() is only meaningful on old x86-32 systems with the PAT extension,
'PAT' mode, it marks memory as uncached even when the MTRR has designated and on ia64 with its slightly unconventional ioremap() behavior, everywhere
it as cacheable, see Documentation/arch/x86/pat.rst. elss ioremap_uc() defaults to return NULL.
Portable drivers should avoid the use of ioremap_uc().
Portable drivers should avoid the use of ioremap_uc(), use ioremap() instead.
ioremap_cache() ioremap_cache()
--------------- ---------------

View File

@ -308,7 +308,6 @@ static inline void __iomem *ioremap(unsigned long port, unsigned long size)
} }
#define ioremap_wc ioremap #define ioremap_wc ioremap
#define ioremap_uc ioremap
static inline void iounmap(volatile void __iomem *addr) static inline void iounmap(volatile void __iomem *addr)
{ {
@ -651,12 +650,6 @@ extern void outsl (unsigned long port, const void *src, unsigned long count);
#endif #endif
#define RTC_ALWAYS_BCD 0 #define RTC_ALWAYS_BCD 0
/*
* Convert a physical pointer to a virtual kernel pointer for /dev/mem
* access
*/
#define xlate_dev_mem_ptr(p) __va(p)
/* /*
* These get provided from <asm-generic/iomap.h> since alpha does not * These get provided from <asm-generic/iomap.h> since alpha does not
* select GENERIC_IOMAP. * select GENERIC_IOMAP.

View File

@ -407,12 +407,6 @@ struct pci_dev;
#define pci_iounmap pci_iounmap #define pci_iounmap pci_iounmap
extern void pci_iounmap(struct pci_dev *dev, void __iomem *addr); extern void pci_iounmap(struct pci_dev *dev, void __iomem *addr);
/*
* Convert a physical pointer to a virtual kernel pointer for /dev/mem
* access
*/
#define xlate_dev_mem_ptr(p) __va(p)
#include <asm-generic/io.h> #include <asm-generic/io.h>
#ifdef CONFIG_MMU #ifdef CONFIG_MMU

View File

@ -58,12 +58,6 @@ static inline void *phys_to_virt(unsigned long address)
return __va(address); return __va(address);
} }
/*
* convert a physical pointer to a virtual kernel pointer for
* /dev/mem access.
*/
#define xlate_dev_mem_ptr(p) __va(p)
/* /*
* IO port access primitives. Hexagon doesn't have special IO access * IO port access primitives. Hexagon doesn't have special IO access
* instructions; all I/O is memory mapped. * instructions; all I/O is memory mapped.
@ -174,9 +168,6 @@ static inline void writel(u32 data, volatile void __iomem *addr)
#define _PAGE_IOREMAP (_PAGE_PRESENT | _PAGE_READ | _PAGE_WRITE | \ #define _PAGE_IOREMAP (_PAGE_PRESENT | _PAGE_READ | _PAGE_WRITE | \
(__HEXAGON_C_DEV << 6)) (__HEXAGON_C_DEV << 6))
#define ioremap_uc(addr, size) ioremap((addr), (size))
#define __raw_writel writel #define __raw_writel writel
static inline void memcpy_fromio(void *dst, const volatile void __iomem *src, static inline void memcpy_fromio(void *dst, const volatile void __iomem *src,

View File

@ -389,12 +389,6 @@ static inline void isa_delay(void)
#define __ARCH_HAS_NO_PAGE_ZERO_MAPPED 1 #define __ARCH_HAS_NO_PAGE_ZERO_MAPPED 1
/*
* Convert a physical pointer to a virtual kernel pointer for /dev/mem
* access
*/
#define xlate_dev_mem_ptr(p) __va(p)
#define readb_relaxed(addr) readb(addr) #define readb_relaxed(addr) readb(addr)
#define readw_relaxed(addr) readw(addr) #define readw_relaxed(addr) readw(addr)
#define readl_relaxed(addr) readl(addr) #define readl_relaxed(addr) readl(addr)

View File

@ -25,7 +25,6 @@ static inline void __iomem *ioremap(unsigned long physaddr, unsigned long size)
return __ioremap(physaddr, size, IOMAP_NOCACHE_SER); return __ioremap(physaddr, size, IOMAP_NOCACHE_SER);
} }
#define ioremap_uc ioremap
#define ioremap_wt ioremap_wt #define ioremap_wt ioremap_wt
static inline void __iomem *ioremap_wt(unsigned long physaddr, static inline void __iomem *ioremap_wt(unsigned long physaddr,
unsigned long size) unsigned long size)

View File

@ -13,7 +13,6 @@
#define _ASM_IO_H #define _ASM_IO_H
#include <linux/compiler.h> #include <linux/compiler.h>
#include <linux/kernel.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/irqflags.h> #include <linux/irqflags.h>
@ -25,7 +24,6 @@
#include <asm/cpu-features.h> #include <asm/cpu-features.h>
#include <asm/page.h> #include <asm/page.h>
#include <asm/pgtable-bits.h> #include <asm/pgtable-bits.h>
#include <asm/processor.h>
#include <asm/string.h> #include <asm/string.h>
#include <mangle-port.h> #include <mangle-port.h>
@ -41,6 +39,11 @@
# define __raw_ioswabq(a, x) (x) # define __raw_ioswabq(a, x) (x)
# define ____raw_ioswabq(a, x) (x) # define ____raw_ioswabq(a, x) (x)
# define _ioswabb ioswabb
# define _ioswabw ioswabw
# define _ioswabl ioswabl
# define _ioswabq ioswabq
# define __relaxed_ioswabb ioswabb # define __relaxed_ioswabb ioswabb
# define __relaxed_ioswabw ioswabw # define __relaxed_ioswabw ioswabw
# define __relaxed_ioswabl ioswabl # define __relaxed_ioswabl ioswabl
@ -114,23 +117,6 @@ static inline phys_addr_t virt_to_phys(const volatile void *x)
return __virt_to_phys(x); return __virt_to_phys(x);
} }
/*
* phys_to_virt - map physical address to virtual
* @address: address to remap
*
* The returned virtual address is a current CPU mapping for
* the memory address given. It is only valid to use this function on
* addresses that have a kernel mapping
*
* This function does not handle bus mappings for DMA transfers. In
* almost all conceivable cases a device driver should not be using
* this function
*/
static inline void * phys_to_virt(unsigned long address)
{
return __va(address);
}
/* /*
* ISA I/O bus memory addresses are 1:1 with the physical address. * ISA I/O bus memory addresses are 1:1 with the physical address.
*/ */
@ -139,11 +125,6 @@ static inline unsigned long isa_virt_to_bus(volatile void *address)
return virt_to_phys(address); return virt_to_phys(address);
} }
static inline void *isa_bus_to_virt(unsigned long address)
{
return phys_to_virt(address);
}
/* /*
* Change "struct page" to physical address. * Change "struct page" to physical address.
*/ */
@ -166,7 +147,6 @@ void iounmap(const volatile void __iomem *addr);
*/ */
#define ioremap(offset, size) \ #define ioremap(offset, size) \
ioremap_prot((offset), (size), _CACHE_UNCACHED) ioremap_prot((offset), (size), _CACHE_UNCACHED)
#define ioremap_uc ioremap
/* /*
* ioremap_cache - map bus memory into CPU space * ioremap_cache - map bus memory into CPU space
@ -296,9 +276,9 @@ static inline type pfx##read##bwlq(const volatile void __iomem *mem) \
return pfx##ioswab##bwlq(__mem, __val); \ return pfx##ioswab##bwlq(__mem, __val); \
} }
#define __BUILD_IOPORT_SINGLE(pfx, bwlq, type, barrier, relax, p) \ #define __BUILD_IOPORT_SINGLE(pfx, bwlq, type, barrier, relax) \
\ \
static inline void pfx##out##bwlq##p(type val, unsigned long port) \ static inline void pfx##out##bwlq(type val, unsigned long port) \
{ \ { \
volatile type *__addr; \ volatile type *__addr; \
type __val; \ type __val; \
@ -318,7 +298,7 @@ static inline void pfx##out##bwlq##p(type val, unsigned long port) \
*__addr = __val; \ *__addr = __val; \
} \ } \
\ \
static inline type pfx##in##bwlq##p(unsigned long port) \ static inline type pfx##in##bwlq(unsigned long port) \
{ \ { \
volatile type *__addr; \ volatile type *__addr; \
type __val; \ type __val; \
@ -360,11 +340,10 @@ __BUILD_MEMORY_PFX(__mem_, q, u64, 0)
#endif #endif
#define __BUILD_IOPORT_PFX(bus, bwlq, type) \ #define __BUILD_IOPORT_PFX(bus, bwlq, type) \
__BUILD_IOPORT_SINGLE(bus, bwlq, type, 1, 0,) \ __BUILD_IOPORT_SINGLE(bus, bwlq, type, 1, 0)
__BUILD_IOPORT_SINGLE(bus, bwlq, type, 1, 0, _p)
#define BUILDIO_IOPORT(bwlq, type) \ #define BUILDIO_IOPORT(bwlq, type) \
__BUILD_IOPORT_PFX(, bwlq, type) \ __BUILD_IOPORT_PFX(_, bwlq, type) \
__BUILD_IOPORT_PFX(__mem_, bwlq, type) __BUILD_IOPORT_PFX(__mem_, bwlq, type)
BUILDIO_IOPORT(b, u8) BUILDIO_IOPORT(b, u8)
@ -412,14 +391,6 @@ __BUILDIO(q, u64)
#define writeq_be(val, addr) \ #define writeq_be(val, addr) \
__raw_writeq(cpu_to_be64((val)), (__force unsigned *)(addr)) __raw_writeq(cpu_to_be64((val)), (__force unsigned *)(addr))
/*
* Some code tests for these symbols
*/
#ifdef CONFIG_64BIT
#define readq readq
#define writeq writeq
#endif
#define __BUILD_MEMORY_STRING(bwlq, type) \ #define __BUILD_MEMORY_STRING(bwlq, type) \
\ \
static inline void writes##bwlq(volatile void __iomem *mem, \ static inline void writes##bwlq(volatile void __iomem *mem, \
@ -480,18 +451,6 @@ BUILDSTRING(l, u32)
BUILDSTRING(q, u64) BUILDSTRING(q, u64)
#endif #endif
static inline void memset_io(volatile void __iomem *addr, unsigned char val, int count)
{
memset((void __force *) addr, val, count);
}
static inline void memcpy_fromio(void *dst, const volatile void __iomem *src, int count)
{
memcpy(dst, (void __force *) src, count);
}
static inline void memcpy_toio(volatile void __iomem *dst, const void *src, int count)
{
memcpy((void __force *) dst, src, count);
}
/* /*
* The caches on some architectures aren't dma-coherent and have need to * The caches on some architectures aren't dma-coherent and have need to
@ -548,13 +507,66 @@ extern void (*_dma_cache_inv)(unsigned long start, unsigned long size);
#define csr_out32(v, a) (*(volatile u32 *)((unsigned long)(a) + __CSR_32_ADJUST) = (v)) #define csr_out32(v, a) (*(volatile u32 *)((unsigned long)(a) + __CSR_32_ADJUST) = (v))
#define csr_in32(a) (*(volatile u32 *)((unsigned long)(a) + __CSR_32_ADJUST)) #define csr_in32(a) (*(volatile u32 *)((unsigned long)(a) + __CSR_32_ADJUST))
/* #define __raw_readb __raw_readb
* Convert a physical pointer to a virtual kernel pointer for /dev/mem #define __raw_readw __raw_readw
* access #define __raw_readl __raw_readl
*/ #ifdef CONFIG_64BIT
#define xlate_dev_mem_ptr(p) __va(p) #define __raw_readq __raw_readq
#define unxlate_dev_mem_ptr(p, v) do { } while (0) #endif
#define __raw_writeb __raw_writeb
#define __raw_writew __raw_writew
#define __raw_writel __raw_writel
#ifdef CONFIG_64BIT
#define __raw_writeq __raw_writeq
#endif
#define readb readb
#define readw readw
#define readl readl
#ifdef CONFIG_64BIT
#define readq readq
#endif
#define writeb writeb
#define writew writew
#define writel writel
#ifdef CONFIG_64BIT
#define writeq writeq
#endif
#define readsb readsb
#define readsw readsw
#define readsl readsl
#ifdef CONFIG_64BIT
#define readsq readsq
#endif
#define writesb writesb
#define writesw writesw
#define writesl writesl
#ifdef CONFIG_64BIT
#define writesq writesq
#endif
#define _inb _inb
#define _inw _inw
#define _inl _inl
#define insb insb
#define insw insw
#define insl insl
#define _outb _outb
#define _outw _outw
#define _outl _outl
#define outsb outsb
#define outsw outsw
#define outsl outsl
void __ioread64_copy(void *to, const void __iomem *from, size_t count); void __ioread64_copy(void *to, const void __iomem *from, size_t count);
#include <asm-generic/io.h>
static inline void *isa_bus_to_virt(unsigned long address)
{
return phys_to_virt(address);
}
#endif /* _ASM_IO_H */ #endif /* _ASM_IO_H */

View File

@ -2,9 +2,9 @@
#ifndef _ASM_MMIOWB_H #ifndef _ASM_MMIOWB_H
#define _ASM_MMIOWB_H #define _ASM_MMIOWB_H
#include <asm/io.h> #include <asm/barrier.h>
#define mmiowb() iobarrier_w() #define mmiowb() wmb()
#include <asm-generic/mmiowb.h> #include <asm-generic/mmiowb.h>

View File

@ -13,8 +13,6 @@
#include <linux/errno.h> #include <linux/errno.h>
#include <asm/mips-cps.h>
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
#include <linux/cpumask.h> #include <linux/cpumask.h>

View File

@ -11,13 +11,11 @@
#ifndef __ASM_SMP_H #ifndef __ASM_SMP_H
#define __ASM_SMP_H #define __ASM_SMP_H
#include <linux/bitops.h> #include <linux/compiler.h>
#include <linux/linkage.h> #include <linux/linkage.h>
#include <linux/smp.h>
#include <linux/threads.h> #include <linux/threads.h>
#include <linux/cpumask.h> #include <linux/cpumask.h>
#include <linux/atomic.h>
#include <asm/smp-ops.h> #include <asm/smp-ops.h>
extern int smp_num_siblings; extern int smp_num_siblings;

View File

@ -42,6 +42,7 @@
#include <asm/sections.h> #include <asm/sections.h>
#include <asm/setup.h> #include <asm/setup.h>
#include <asm/smp-ops.h> #include <asm/smp-ops.h>
#include <asm/mips-cps.h>
#include <asm/prom.h> #include <asm/prom.h>
#include <asm/fw/fw.h> #include <asm/fw/fw.h>

View File

@ -7,6 +7,9 @@
* Copyright (C) 1999, 2000, 04 Ralf Baechle (ralf@linux-mips.org) * Copyright (C) 1999, 2000, 04 Ralf Baechle (ralf@linux-mips.org)
* Copyright (C) 1999, 2000 Silicon Graphics, Inc. * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
*/ */
#include <linux/io.h>
#include <asm/sn/addrs.h> #include <asm/sn/addrs.h>
#include <asm/sn/types.h> #include <asm/sn/types.h>
#include <asm/sn/klconfig.h> #include <asm/sn/klconfig.h>

View File

@ -132,8 +132,6 @@ static inline void gsc_writeq(unsigned long long val, unsigned long addr)
#define ioremap_wc(addr, size) \ #define ioremap_wc(addr, size) \
ioremap_prot((addr), (size), _PAGE_IOREMAP) ioremap_prot((addr), (size), _PAGE_IOREMAP)
#define ioremap_uc(addr, size) \
ioremap_prot((addr), (size), _PAGE_IOREMAP)
#define pci_iounmap pci_iounmap #define pci_iounmap pci_iounmap
@ -267,12 +265,6 @@ extern void iowrite64be(u64 val, void __iomem *addr);
#define iowrite16_rep iowrite16_rep #define iowrite16_rep iowrite16_rep
#define iowrite32_rep iowrite32_rep #define iowrite32_rep iowrite32_rep
/*
* Convert a physical pointer to a virtual kernel pointer for /dev/mem
* access
*/
#define xlate_dev_mem_ptr(p) __va(p)
extern int devmem_is_allowed(unsigned long pfn); extern int devmem_is_allowed(unsigned long pfn);
#include <asm-generic/io.h> #include <asm-generic/io.h>

View File

@ -709,12 +709,6 @@ static inline void name at \
#define memcpy_fromio memcpy_fromio #define memcpy_fromio memcpy_fromio
#define memcpy_toio memcpy_toio #define memcpy_toio memcpy_toio
/*
* Convert a physical pointer to a virtual kernel pointer for /dev/mem
* access
*/
#define xlate_dev_mem_ptr(p) __va(p)
/* /*
* We don't do relaxed operations yet, at least not with this semantic * We don't do relaxed operations yet, at least not with this semantic
*/ */
@ -900,7 +894,6 @@ void __iomem *ioremap_wt(phys_addr_t address, unsigned long size);
#endif #endif
void __iomem *ioremap_coherent(phys_addr_t address, unsigned long size); void __iomem *ioremap_coherent(phys_addr_t address, unsigned long size);
#define ioremap_uc(addr, size) ioremap((addr), (size))
#define ioremap_cache(addr, size) \ #define ioremap_cache(addr, size) \
ioremap_prot((addr), (size), pgprot_val(PAGE_KERNEL)) ioremap_prot((addr), (size), pgprot_val(PAGE_KERNEL))

View File

@ -302,15 +302,6 @@ unsigned long long poke_real_address_q(unsigned long long addr,
ioremap_prot((addr), (size), pgprot_val(PAGE_KERNEL)) ioremap_prot((addr), (size), pgprot_val(PAGE_KERNEL))
#endif /* CONFIG_MMU */ #endif /* CONFIG_MMU */
#define ioremap_uc ioremap
/*
* Convert a physical pointer to a virtual kernel pointer for /dev/mem
* access
*/
#define xlate_dev_mem_ptr(p) __va(p)
#define unxlate_dev_mem_ptr(p, v) do { } while (0)
#include <asm-generic/io.h> #include <asm-generic/io.h>
#define ARCH_HAS_VALID_PHYS_ADDR_RANGE #define ARCH_HAS_VALID_PHYS_ADDR_RANGE

View File

@ -423,7 +423,6 @@ static inline void __iomem *ioremap(unsigned long offset, unsigned long size)
return (void __iomem *)offset; return (void __iomem *)offset;
} }
#define ioremap_uc(X,Y) ioremap((X),(Y))
#define ioremap_wc(X,Y) ioremap((X),(Y)) #define ioremap_wc(X,Y) ioremap((X),(Y))
#define ioremap_wt(X,Y) ioremap((X),(Y)) #define ioremap_wt(X,Y) ioremap((X),(Y))
static inline void __iomem *ioremap_np(unsigned long offset, unsigned long size) static inline void __iomem *ioremap_np(unsigned long offset, unsigned long size)
@ -470,12 +469,6 @@ static inline int sbus_can_burst64(void)
struct device; struct device;
void sbus_set_sbus64(struct device *, int); void sbus_set_sbus64(struct device *, int);
/*
* Convert a physical pointer to a virtual kernel pointer for /dev/mem
* access
*/
#define xlate_dev_mem_ptr(p) __va(p)
#endif #endif
#endif /* !(__SPARC64_IO_H) */ #endif /* !(__SPARC64_IO_H) */