From: Daniel Palmer <daniel@thingy.jp>
To: trini@konsulko.com
Cc: visitorckw@gmail.com, angelo@kernel-space.org,
bmeng.cn@gmail.com, sjg@chromium.org, u-boot@lists.denx.de,
Daniel Palmer <daniel@thingy.jp>
Subject: [PATCH v6 4/8] m68k: Fix writew(), writel(), readw(), readl() endianness for classic m68k
Date: Tue, 5 May 2026 16:49:37 +0900 [thread overview]
Message-ID: <20260505074948.2603870-5-daniel@thingy.jp> (raw)
In-Reply-To: <20260505074948.2603870-1-daniel@thingy.jp>
In Linux these are meant to read a little-endian value and swap
to the CPU endian.
In u-boot for m68k this is currently broken and prevents
virtio-mmio from functioning.
This change is only for classic m68k. Coldfire has read big-endian,
no swap for these in u-boot and Linux and existing drivers probably
depend on this.
Tested-by: Angelo Dureghello <angelo@kernel-space.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
Acked-by: Kuan-Wei Chiu <visitorckw@gmail.com>
Acked-by: Angelo Dureghello <angelo@kernel-space.org>
Signed-off-by: Daniel Palmer <daniel@thingy.jp>
---
arch/m68k/include/asm/io.h | 31 ++++++++++++++++++++-----------
1 file changed, 20 insertions(+), 11 deletions(-)
diff --git a/arch/m68k/include/asm/io.h b/arch/m68k/include/asm/io.h
index 35ad4a1c0444..2577081d8363 100644
--- a/arch/m68k/include/asm/io.h
+++ b/arch/m68k/include/asm/io.h
@@ -23,18 +23,27 @@
#define __raw_writew(w,addr) ((*(volatile u16 *) (addr)) = (w))
#define __raw_writel(l,addr) ((*(volatile u32 *) (addr)) = (l))
-#define readb(addr) in_8((volatile u8 *)(addr))
-#define writeb(b,addr) out_8((volatile u8 *)(addr), (b))
-#if !defined(__BIG_ENDIAN)
-#define readw(addr) (*(volatile u16 *) (addr))
-#define readl(addr) (*(volatile u32 *) (addr))
-#define writew(b,addr) ((*(volatile u16 *) (addr)) = (b))
-#define writel(b,addr) ((*(volatile u32 *) (addr)) = (b))
+#define readb(addr) in_8((volatile u8 *)(addr))
+#define writeb(b, addr) out_8((volatile u8 *)(addr), (b))
+#ifdef CONFIG_M680x0
+/*
+ * For classic m68k these work the same way as Linux:
+ * Read a little endian value, swap to the CPU endian.
+ */
+#define readw(addr) in_le16((volatile u16 *)(addr))
+#define readl(addr) in_le32((volatile u32 *)(addr))
+#define writew(b, addr) out_le16((volatile u16 *)(addr), (b))
+#define writel(b, addr) out_le32((volatile u32 *)(addr), (b))
#else
-#define readw(addr) in_be16((volatile u16 *)(addr))
-#define readl(addr) in_be32((volatile u32 *)(addr))
-#define writew(b,addr) out_be16((volatile u16 *)(addr),(b))
-#define writel(b,addr) out_be32((volatile u32 *)(addr),(b))
+/*
+ * For coldfire these read a big endian value and use it
+ * as-is. This means that for little endian devices on the
+ * bus like PCI device these won't work as expected currently.
+ */
+#define readw(addr) in_be16((volatile u16 *)(addr))
+#define readl(addr) in_be32((volatile u32 *)(addr))
+#define writew(b, addr) out_be16((volatile u16 *)(addr), (b))
+#define writel(b, addr) out_be32((volatile u32 *)(addr), (b))
#endif
/*
--
2.53.0
next prev parent reply other threads:[~2026-05-05 7:50 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-05 7:49 [PATCH v6 0/8] Add virtio-mmio support to m68k virt machine Daniel Palmer
2026-05-05 7:49 ` [PATCH v6 1/8] sysreset: qemu virt: Use __raw_writel() Daniel Palmer
2026-05-05 7:49 ` [PATCH v6 2/8] rtc: goldfish: Use __raw_readl() and __raw_writel() Daniel Palmer
2026-05-07 13:27 ` Simon Glass
2026-05-05 7:49 ` [PATCH v6 3/8] timer: goldfish: Use __raw_readl() Daniel Palmer
2026-05-07 13:27 ` Simon Glass
2026-05-05 7:49 ` Daniel Palmer [this message]
2026-05-05 7:49 ` [PATCH v6 5/8] virtio: mmio: Allow instantiation via platform data Daniel Palmer
2026-05-05 7:49 ` [PATCH v6 6/8] virtio: cmd: Depend on VIRTIO_BLK Daniel Palmer
2026-05-05 7:49 ` [PATCH v6 7/8] virtio: blk: Fix converting the vendor id to a string Daniel Palmer
2026-05-05 7:49 ` [PATCH v6 8/8] board: qemu: m68k: Create virtio mmio instances Daniel Palmer
2026-05-07 17:13 ` Kuan-Wei Chiu
2026-05-08 19:29 ` [PATCH v6 0/8] Add virtio-mmio support to m68k virt machine Tom Rini
2026-05-11 8:50 ` Daniel Palmer
2026-05-11 15:00 ` Tom Rini
2026-05-14 12:35 ` Daniel Palmer
2026-05-14 13:51 ` Tom Rini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260505074948.2603870-5-daniel@thingy.jp \
--to=daniel@thingy.jp \
--cc=angelo@kernel-space.org \
--cc=bmeng.cn@gmail.com \
--cc=sjg@chromium.org \
--cc=trini@konsulko.com \
--cc=u-boot@lists.denx.de \
--cc=visitorckw@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.