Re: [REGRESSION] mipsel: no RTC CMOS on the Malta platform in QEMU

From: Arnd Bergmann
Date: Tue Jan 14 2025 - 12:06:16 EST


On Tue, Jan 14, 2025, at 17:11, Maciej W. Rozycki wrote:
> On Tue, 14 Jan 2025, Arnd Bergmann wrote:
>> >> A quick fix would be #undef PCI_IOBASE in arch/mips/include/asm/io.h
>> >> just after including #include <asm-generic/io.h>, with ralink and loongson64
>> >> as exception.
>> >
>> > Shouldn't arch/mips/include/asm/io.h do
>> >
>> > #define PCI_IOBASE mips_io_port_base
>> >
>> > unconditionally, _before_ including <asm-generic/io.h>?
>>
>> Yes, I think this would make the most sense, but the ordering
>> with the PCI initialization needs to be done carefully,
>> to ensure that PCI_IOBASE has its final value before the first
>> call to pci_remap_iospace().
>
> Is defining PCI_IOBASE going to do the right thing for non-PCI MIPS
> platforms, or should the definition be #ifdef CONFIG_PCI rather than
> unconditional? FWIW I think all PCI MIPS platforms support port I/O.

PCI_IOBASE should be defined whenever CONFIG_HAS_IOPORT is set.
Ideally that should allow using the generic inb/outb and
ioread/iowrite helpers from include/asm-generic/io.h, but
unfortunately those don't support the address swizzling required
on SGI and Octeon platforms.

These platforms look like they currently set a NULL pointer
as the I/O port base:

arch/mips/alchemy/common/setup.c: set_io_port_base(0);
arch/mips/ath79/setup.c: set_io_port_base(KSEG1);
arch/mips/bcm63xx/setup.c: set_io_port_base(0);
arch/mips/bmips/setup.c: set_io_port_base(0);
arch/mips/lantiq/prom.c: set_io_port_base((unsigned long) KSEG1);

At least some of these, possibly all, also have a PCI or PCMCIA
host controller driver that sets a different value later
when that bus is probed.

I don't see any I/O space getting set up for ath25, dec, ingenic,
loongson32, pic32, eyeq, nintendo64, and realtek-rtl. It looks to
me like any I/O port access on these turns into a misaligned NULL
pointer dereference, but there is a good chance I'm missing how
it gets set up there.

Arnd.