public inbox for linux-m68k@lists.linux-m68k.org
 help / color / mirror / Atom feed
* [RFC PATCH] m68k: nommu: Fix behaviour of io macros on non-CF
@ 2026-04-04  2:46 Daniel Palmer
  2026-04-13 16:52 ` Arnd Bergmann
  0 siblings, 1 reply; 3+ messages in thread
From: Daniel Palmer @ 2026-04-04  2:46 UTC (permalink / raw)
  To: gerg
  Cc: geert, christoph.plattner, linux-m68k, linux-kernel, arnd,
	Daniel Palmer

Currently for 68000 readl() and friends are broken in that they
return the value from the bus as-is but should be reading a little
endian value and swapping it to big endian.

This was found using virtio-mmio on a 68000 virt machine. virtio-mmio
is little endian even if the emulated machine is big endian. This works
for MMU m68k because the io macros do what is expected there, but if
the kernel was built for nommu it breaks.

Potentially this will break some stuff for nommu non-CF m68k users
but since there are probably 2 or 3 of us in the world I think we
can work it out.

Suggested-by: Arnd Bergmann <arnd@kernel.org>
Link: https://lore.kernel.org/lkml/ada73dc9-edf5-458c-8849-9f9db23ff304@app.fastmail.com/
Signed-off-by: Daniel Palmer <daniel@0x0f.com>
---
 arch/m68k/include/asm/io_no.h | 9 ---------
 1 file changed, 9 deletions(-)

diff --git a/arch/m68k/include/asm/io_no.h b/arch/m68k/include/asm/io_no.h
index 516371d5587a..c39db8798ef2 100644
--- a/arch/m68k/include/asm/io_no.h
+++ b/arch/m68k/include/asm/io_no.h
@@ -96,15 +96,6 @@ static inline void writel(u32 value, volatile void __iomem *addr)
 		__raw_writel(swab32(value), addr);
 }
 
-#else
-
-#define readb __raw_readb
-#define readw __raw_readw
-#define readl __raw_readl
-#define writeb __raw_writeb
-#define writew __raw_writew
-#define writel __raw_writel
-
 #endif /* IOMEMBASE */
 
 #if defined(CONFIG_PCI)
-- 
2.51.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [RFC PATCH] m68k: nommu: Fix behaviour of io macros on non-CF
  2026-04-04  2:46 [RFC PATCH] m68k: nommu: Fix behaviour of io macros on non-CF Daniel Palmer
@ 2026-04-13 16:52 ` Arnd Bergmann
  2026-04-14  7:14   ` Geert Uytterhoeven
  0 siblings, 1 reply; 3+ messages in thread
From: Arnd Bergmann @ 2026-04-13 16:52 UTC (permalink / raw)
  To: Daniel Palmer, Greg Ungerer
  Cc: Geert Uytterhoeven, christoph.plattner, linux-m68k, linux-kernel

On Sat, Apr 4, 2026, at 04:46, Daniel Palmer wrote:
> Currently for 68000 readl() and friends are broken in that they
> return the value from the bus as-is but should be reading a little
> endian value and swapping it to big endian.
>
> This was found using virtio-mmio on a 68000 virt machine. virtio-mmio
> is little endian even if the emulated machine is big endian. This works
> for MMU m68k because the io macros do what is expected there, but if
> the kernel was built for nommu it breaks.
>
> Potentially this will break some stuff for nommu non-CF m68k users
> but since there are probably 2 or 3 of us in the world I think we
> can work it out.
>
> Suggested-by: Arnd Bergmann <arnd@kernel.org>
> Link: 
> https://lore.kernel.org/lkml/ada73dc9-edf5-458c-8849-9f9db23ff304@app.fastmail.com/
> Signed-off-by: Daniel Palmer <daniel@0x0f.com>

Reviewed-by: Arnd Bergmann <arnd@arndb.de>

It looks like the non-swapping readl() on nommu-m68k predates
the git history, but apparently the coldfire version was fixed
in 4d5303787627 ("m68k: fix read/write multi-byte IO for PCI
on ColdFire") to behave like everything else, and dragonball
appears does not support ISA or PCI buses, so it never used
them.

      Arnd

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [RFC PATCH] m68k: nommu: Fix behaviour of io macros on non-CF
  2026-04-13 16:52 ` Arnd Bergmann
@ 2026-04-14  7:14   ` Geert Uytterhoeven
  0 siblings, 0 replies; 3+ messages in thread
From: Geert Uytterhoeven @ 2026-04-14  7:14 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: Daniel Palmer, Greg Ungerer, christoph.plattner, linux-m68k,
	linux-kernel

Hi Arnd,

On Mon, 13 Apr 2026 at 18:52, Arnd Bergmann <arnd@kernel.org> wrote:
> On Sat, Apr 4, 2026, at 04:46, Daniel Palmer wrote:
> > Currently for 68000 readl() and friends are broken in that they
> > return the value from the bus as-is but should be reading a little
> > endian value and swapping it to big endian.
> >
> > This was found using virtio-mmio on a 68000 virt machine. virtio-mmio
> > is little endian even if the emulated machine is big endian. This works
> > for MMU m68k because the io macros do what is expected there, but if
> > the kernel was built for nommu it breaks.
> >
> > Potentially this will break some stuff for nommu non-CF m68k users
> > but since there are probably 2 or 3 of us in the world I think we
> > can work it out.
> >
> > Suggested-by: Arnd Bergmann <arnd@kernel.org>
> > Link:
> > https://lore.kernel.org/lkml/ada73dc9-edf5-458c-8849-9f9db23ff304@app.fastmail.com/
> > Signed-off-by: Daniel Palmer <daniel@0x0f.com>
>
> Reviewed-by: Arnd Bergmann <arnd@arndb.de>
>
> It looks like the non-swapping readl() on nommu-m68k predates
> the git history, but apparently the coldfire version was fixed
> in 4d5303787627 ("m68k: fix read/write multi-byte IO for PCI
> on ColdFire") to behave like everything else, and dragonball
> appears does not support ISA or PCI buses, so it never used
> them.

Correct.  readl() and friends were introduced when it was deemed better
to use accessor functions instead of dereferencing volatile pointers
directly (which is what several m68k drivers are still doing), but
before it was decided that readl() is little endian for PCI everywhere
(there was no PCI on m68k at that point in time). And of course that
was long before the introduction of ioread32be()...

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-04-14  7:15 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-04  2:46 [RFC PATCH] m68k: nommu: Fix behaviour of io macros on non-CF Daniel Palmer
2026-04-13 16:52 ` Arnd Bergmann
2026-04-14  7:14   ` Geert Uytterhoeven

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox