Use ioread64be()/iowrite64be() for 64-bit BE access. Signed-off-by: Andy Shevchenko <andy.shevchenko@xxxxxxxxx> --- drivers/gpio/gpio-mmio.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/drivers/gpio/gpio-mmio.c b/drivers/gpio/gpio-mmio.c index 71e1af7c2184..cd5ef9233152 100644 --- a/drivers/gpio/gpio-mmio.c +++ b/drivers/gpio/gpio-mmio.c @@ -92,12 +92,12 @@ static unsigned long bgpio_read32(void __iomem *reg) #if BITS_PER_LONG >= 64 static void bgpio_write64(void __iomem *reg, unsigned long data) { - writeq(data, reg); + iowrite64(data, reg); } static unsigned long bgpio_read64(void __iomem *reg) { - return readq(reg); + return ioread64(reg); } #endif /* BITS_PER_LONG >= 64 */ @@ -121,6 +121,18 @@ static unsigned long bgpio_read32be(void __iomem *reg) return ioread32be(reg); } +#if BITS_PER_LONG >= 64 +static void bgpio_write64be(void __iomem *reg, unsigned long data) +{ + iowrite64be(data, reg); +} + +static unsigned long bgpio_read64be(void __iomem *reg) +{ + return ioread64be(reg); +} +#endif /* BITS_PER_LONG >= 64 */ + static unsigned long bgpio_line2mask(struct gpio_chip *gc, unsigned int line) { if (gc->be_bits) @@ -445,9 +457,8 @@ static int bgpio_setup_accessors(struct device *dev, #if BITS_PER_LONG >= 64 case 64: if (byte_be) { - dev_err(dev, - "64 bit big endian byte order unsupported\n"); - return -EINVAL; + gc->read_reg = bgpio_read64be; + gc->write_reg = bgpio_write64be; } else { gc->read_reg = bgpio_read64; gc->write_reg = bgpio_write64; -- 2.43.2