[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240220232328.1881707-1-andy.shevchenko@gmail.com>
Date: Wed, 21 Feb 2024 01:23:28 +0200
From: andy.shevchenko@...il.com
To: Andy Shevchenko <andy.shevchenko@...il.com>,
linux-gpio@...r.kernel.org,
linux-kernel@...r.kernel.org
Cc: Linus Walleij <linus.walleij@...aro.org>,
Bartosz Golaszewski <brgl@...ev.pl>
Subject: [PATCH v1 1/1] gpio: mmio: Support 64-bit BE access
Use ioread64be()/iowrite64be() for 64-bit BE access.
Signed-off-by: Andy Shevchenko <andy.shevchenko@...il.com>
---
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
Powered by blists - more mailing lists