[PATCH v2 2/5] m68k: Fix writew(), writel(), readw(), readl() endianness
Kuan-Wei Chiu
visitorckw at gmail.com
Mon Apr 6 19:15:04 CEST 2026
Hi Daniel,
On Mon, Apr 06, 2026 at 11:24:08PM +0900, Daniel Palmer wrote:
> 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 borken and prevents
> virtio-mmio from functioning.
>
> Signed-off-by: Daniel Palmer <daniel at thingy.jp>
> ---
> arch/m68k/include/asm/io.h | 17 +++++------------
> 1 file changed, 5 insertions(+), 12 deletions(-)
>
> diff --git a/arch/m68k/include/asm/io.h b/arch/m68k/include/asm/io.h
> index 35ad4a1c0444..f4877b0446cf 100644
> --- a/arch/m68k/include/asm/io.h
> +++ b/arch/m68k/include/asm/io.h
> @@ -24,18 +24,11 @@
> #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))
> -#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))
> -#endif
> +#define writeb(b, addr) out_8((volatile u8 *)(addr), (b))
> +#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))
Just wondering could this global change break some drivers on coldfire?
I originally thought you were planning to split these IO macros between
coldfire and classic m68k.
Of course, if you've found that this doesn't actually break coldfire,
then this global approach is definitely ideal.
Regards,
Kuan-Wei
>
> /*
> * The insw/outsw/insl/outsl macros don't do byte-swapping.
> --
> 2.51.0
>
More information about the U-Boot
mailing list