Re: [RFC PATCH] m68k: nommu: Fix behaviour of io macros on non-CF
Greg Ungerer <[email protected]>
| Newsgroups | org.kernel.vger.linux-m68k,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
Hi Daniel, On 4/4/26 12: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 <[email protected]> > Link: https://lore.kernel.org/lkml/[email protected]/ > Signed-off-by: Daniel Palmer <[email protected]> > --- > 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) This change, in this form at least, breaks most of the non-MMU ColdFire targets. Try compiling any of m5208evb, m5249evb, m5272c3, m5275evb, m5307c3 or m5407c3 defconfigs and you get build failures. Targets that do not have a PCI bus and so do not define IOMEMBASE will fail, which is most of them. Maybe something like this might be better. I think this ends up giving you the same result for 68000 nommu targets. diff --git a/arch/m68k/include/asm/io_no.h b/arch/m68k/include/asm/io_no.h index 516371d5587a..b335fd4a18e9 100644 --- a/arch/m68k/include/asm/io_no.h +++ b/arch/m68k/include/asm/io_no.h @@ -33,7 +33,6 @@ #include <asm/byteorder.h> #include <asm/coldfire.h> #include <asm/mcfsim.h> -#endif /* CONFIG_COLDFIRE */ #if defined(IOMEMBASE) /* @@ -126,6 +125,7 @@ static inline void writel(u32 value, volatile void __iomem *addr) #define PCI_IOBASE ((void __iomem *) PCI_IO_PA) #define PCI_SPACE_LIMIT PCI_IO_MASK #endif /* CONFIG_PCI */ +#endif /* CONFIG_COLDFIRE */ #include <asm/kmap.h> #include <asm/virtconvert.h> Regards Greg