summaryrefslogtreecommitdiffstats
path: root/arch/alpha/kernel/io.c
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2022-10-03 13:12:54 +0200
committerArnd Bergmann <arnd@arndb.de>2022-10-04 11:23:29 +0200
commite19d4ebc536dadb607fe305fdaf48218d3e32d7c (patch)
tree5d645d629d6675015352a1a00d560f55efc6272d /arch/alpha/kernel/io.c
parent28a679ea60d0d16c3556f687bb2040559e92e932 (diff)
downloadlinux-stable-e19d4ebc536dadb607fe305fdaf48218d3e32d7c.tar.gz
linux-stable-e19d4ebc536dadb607fe305fdaf48218d3e32d7c.tar.bz2
linux-stable-e19d4ebc536dadb607fe305fdaf48218d3e32d7c.zip
alpha: add full ioread64/iowrite64 implementation
The previous patch introduced ioread64/iowrite64 declarations, but this means we no longer get the io-64-nonatomic variant, and run into a long error when someone actually wants to use these: ERROR: modpost: "ioread64" [drivers/net/ethernet/freescale/enetc/fsl-enetc.ko] undefined! Add the (hopefully) correct implementation for each machine type, based on the 32-bit accessor. Since the 32-bit return type does not work for ioread64(), change the internal implementation to use the correct width consistently, but leave the external interface to match the asm-generic/iomap.h header that uses 32-bit or 64-bit return values. Reported-by: Guenter Roeck <linux@roeck-us.net> Tested-by: Guenter Roeck <linux@roeck-us.net> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Fixes: 7e772dad9913 ("alpha: Use generic <asm-generic/io.h>") Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'arch/alpha/kernel/io.c')
-rw-r--r--arch/alpha/kernel/io.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/arch/alpha/kernel/io.c b/arch/alpha/kernel/io.c
index 838586abb1e0..eda09778268f 100644
--- a/arch/alpha/kernel/io.c
+++ b/arch/alpha/kernel/io.c
@@ -41,6 +41,15 @@ unsigned int ioread32(const void __iomem *addr)
return ret;
}
+u64 ioread64(const void __iomem *addr)
+{
+ unsigned int ret;
+ mb();
+ ret = IO_CONCAT(__IO_PREFIX,ioread64)(addr);
+ mb();
+ return ret;
+}
+
void iowrite8(u8 b, void __iomem *addr)
{
mb();
@@ -59,12 +68,20 @@ void iowrite32(u32 b, void __iomem *addr)
IO_CONCAT(__IO_PREFIX,iowrite32)(b, addr);
}
+void iowrite64(u64 b, void __iomem *addr)
+{
+ mb();
+ IO_CONCAT(__IO_PREFIX,iowrite64)(b, addr);
+}
+
EXPORT_SYMBOL(ioread8);
EXPORT_SYMBOL(ioread16);
EXPORT_SYMBOL(ioread32);
+EXPORT_SYMBOL(ioread64);
EXPORT_SYMBOL(iowrite8);
EXPORT_SYMBOL(iowrite16);
EXPORT_SYMBOL(iowrite32);
+EXPORT_SYMBOL(iowrite64);
u8 inb(unsigned long port)
{