ioremap: remove ioremap_uc except on x86 and ia64

From: Christoph Hellwig
Date: Tue Nov 12 2019 - 05:52:25 EST


ioremap_uc is a special API to work around caching oddities on
Intel platforms. Remove it from all other architectures now that
only x86 and ia64-specific callers are left.

Signed-off-by: Christoph Hellwig <hch@xxxxxx>
---
arch/alpha/include/asm/io.h | 1 -
arch/m68k/include/asm/kmap.h | 1 -
arch/mips/include/asm/io.h | 1 -
arch/parisc/include/asm/io.h | 1 -
arch/powerpc/include/asm/io.h | 1 -
arch/sh/include/asm/io.h | 1 -
arch/sparc/include/asm/io_64.h | 1 -
include/asm-generic/io.h | 15 ---------------
include/linux/io.h | 2 ++
lib/devres.c | 4 ++++
10 files changed, 6 insertions(+), 22 deletions(-)

diff --git a/arch/alpha/include/asm/io.h b/arch/alpha/include/asm/io.h
index 1989b946a28d..11fdcade3c5c 100644
--- a/arch/alpha/include/asm/io.h
+++ b/arch/alpha/include/asm/io.h
@@ -290,7 +290,6 @@ static inline void __iomem * ioremap_nocache(unsigned long offset,
}

#define ioremap_wc ioremap_nocache
-#define ioremap_uc ioremap_nocache

static inline void iounmap(volatile void __iomem *addr)
{
diff --git a/arch/m68k/include/asm/kmap.h b/arch/m68k/include/asm/kmap.h
index 559cb91bede1..22b5ea4fc8b8 100644
--- a/arch/m68k/include/asm/kmap.h
+++ b/arch/m68k/include/asm/kmap.h
@@ -28,7 +28,6 @@ static inline void __iomem *ioremap(unsigned long physaddr, unsigned long size)
}

#define ioremap_nocache ioremap
-#define ioremap_uc ioremap
#define ioremap_wt ioremap_wt
static inline void __iomem *ioremap_wt(unsigned long physaddr,
unsigned long size)
diff --git a/arch/mips/include/asm/io.h b/arch/mips/include/asm/io.h
index 3f6ce74335b4..9195ded1d6a7 100644
--- a/arch/mips/include/asm/io.h
+++ b/arch/mips/include/asm/io.h
@@ -249,7 +249,6 @@ static inline void __iomem *ioremap_prot(phys_addr_t offset,
*/
#define ioremap_nocache(offset, size) \
__ioremap_mode((offset), (size), _CACHE_UNCACHED)
-#define ioremap_uc ioremap_nocache

/*
* ioremap_cache - map bus memory into CPU space
diff --git a/arch/parisc/include/asm/io.h b/arch/parisc/include/asm/io.h
index 46212b52c23e..0674f5cd3045 100644
--- a/arch/parisc/include/asm/io.h
+++ b/arch/parisc/include/asm/io.h
@@ -130,7 +130,6 @@ static inline void gsc_writeq(unsigned long long val, unsigned long addr)
void __iomem *ioremap(unsigned long offset, unsigned long size);
#define ioremap_nocache(off, sz) ioremap((off), (sz))
#define ioremap_wc ioremap_nocache
-#define ioremap_uc ioremap_nocache

extern void iounmap(const volatile void __iomem *addr);

diff --git a/arch/powerpc/include/asm/io.h b/arch/powerpc/include/asm/io.h
index a63ec938636d..119bcbe3e328 100644
--- a/arch/powerpc/include/asm/io.h
+++ b/arch/powerpc/include/asm/io.h
@@ -716,7 +716,6 @@ extern void __iomem *ioremap_wc(phys_addr_t address, unsigned long size);
void __iomem *ioremap_wt(phys_addr_t address, unsigned long size);
void __iomem *ioremap_coherent(phys_addr_t address, unsigned long size);
#define ioremap_nocache(addr, size) ioremap((addr), (size))
-#define ioremap_uc(addr, size) ioremap((addr), (size))
#define ioremap_cache(addr, size) \
ioremap_prot((addr), (size), pgprot_val(PAGE_KERNEL))

diff --git a/arch/sh/include/asm/io.h b/arch/sh/include/asm/io.h
index 1495489225ac..30bbe787f1ef 100644
--- a/arch/sh/include/asm/io.h
+++ b/arch/sh/include/asm/io.h
@@ -368,7 +368,6 @@ static inline int iounmap_fixed(void __iomem *addr) { return -EINVAL; }
#endif

#define ioremap_nocache ioremap
-#define ioremap_uc ioremap

/*
* Convert a physical pointer to a virtual kernel pointer for /dev/mem
diff --git a/arch/sparc/include/asm/io_64.h b/arch/sparc/include/asm/io_64.h
index f4afa301954a..688911051b44 100644
--- a/arch/sparc/include/asm/io_64.h
+++ b/arch/sparc/include/asm/io_64.h
@@ -407,7 +407,6 @@ static inline void __iomem *ioremap(unsigned long offset, unsigned long size)
}

#define ioremap_nocache(X,Y) ioremap((X),(Y))
-#define ioremap_uc(X,Y) ioremap((X),(Y))
#define ioremap_wc(X,Y) ioremap((X),(Y))
#define ioremap_wt(X,Y) ioremap((X),(Y))

diff --git a/include/asm-generic/io.h b/include/asm-generic/io.h
index 325fc98cc9ff..357e8638040c 100644
--- a/include/asm-generic/io.h
+++ b/include/asm-generic/io.h
@@ -972,21 +972,6 @@ static inline void __iomem *ioremap(phys_addr_t addr, size_t size)
#define ioremap_wt ioremap
#endif

-/*
- * ioremap_uc is special in that we do require an explicit architecture
- * implementation. In general you do not want to use this function in a
- * driver and use plain ioremap, which is uncached by default. Similarly
- * architectures should not implement it unless they have a very good
- * reason.
- */
-#ifndef ioremap_uc
-#define ioremap_uc ioremap_uc
-static inline void __iomem *ioremap_uc(phys_addr_t offset, size_t size)
-{
- return NULL;
-}
-#endif
-
#ifdef CONFIG_HAS_IOPORT_MAP
#ifndef CONFIG_GENERIC_IOMAP
#ifndef ioport_map
diff --git a/include/linux/io.h b/include/linux/io.h
index a59834bc0a11..6574bb0f28e6 100644
--- a/include/linux/io.h
+++ b/include/linux/io.h
@@ -64,8 +64,10 @@ static inline void devm_ioport_unmap(struct device *dev, void __iomem *addr)

void __iomem *devm_ioremap(struct device *dev, resource_size_t offset,
resource_size_t size);
+#ifdef ioremap_uc
void __iomem *devm_ioremap_uc(struct device *dev, resource_size_t offset,
resource_size_t size);
+#endif
void __iomem *devm_ioremap_nocache(struct device *dev, resource_size_t offset,
resource_size_t size);
void __iomem *devm_ioremap_wc(struct device *dev, resource_size_t offset,
diff --git a/lib/devres.c b/lib/devres.c
index f56070cf970b..0299279ddf02 100644
--- a/lib/devres.c
+++ b/lib/devres.c
@@ -40,9 +40,11 @@ static void __iomem *__devm_ioremap(struct device *dev, resource_size_t offset,
case DEVM_IOREMAP_NC:
addr = ioremap_nocache(offset, size);
break;
+#ifdef ioremap_uc
case DEVM_IOREMAP_UC:
addr = ioremap_uc(offset, size);
break;
+#endif
case DEVM_IOREMAP_WC:
addr = ioremap_wc(offset, size);
break;
@@ -72,6 +74,7 @@ void __iomem *devm_ioremap(struct device *dev, resource_size_t offset,
}
EXPORT_SYMBOL(devm_ioremap);

+#ifdef ioremap_uc
/**
* devm_ioremap_uc - Managed ioremap_uc()
* @dev: Generic device to remap IO address for
@@ -86,6 +89,7 @@ void __iomem *devm_ioremap_uc(struct device *dev, resource_size_t offset,
return __devm_ioremap(dev, offset, size, DEVM_IOREMAP_UC);
}
EXPORT_SYMBOL_GPL(devm_ioremap_uc);
+#endif /* ioremap_uc */

/**
* devm_ioremap_nocache - Managed ioremap_nocache()
--
2.20.1