On Fri, 2024-11-22 at 09:07 -0800, Guenter Roeck wrote: > On 11/22/24 07:35, Niklas Schnelle wrote: > > On Fri, 2024-11-22 at 07:18 -0800, Guenter Roeck wrote: > > > On Fri, Apr 05, 2024 at 05:29:24PM +0200, Niklas Schnelle wrote: > > > > In a future patch HAS_IOPORT=n will disable inb()/outb() and > > > > friends at > > > > compile time. We thus need to add HAS_IOPORT as dependency for > > > > those > > > > drivers using them unconditionally. For 8250 based drivers some > > > > support > > > > MMIO only use so fence only the parts requiring I/O ports. > > > > > > > > Co-developed-by: Arnd Bergmann <arnd@xxxxxxxxxx> > > > > Signed-off-by: Arnd Bergmann <arnd@xxxxxxxxxx> > > > > Signed-off-by: Niklas Schnelle <schnelle@xxxxxxxxxxxxx> > > > ... > > > > @@ -422,10 +443,12 @@ static void set_io_from_upio(struct > > > > uart_port *p) > > > > up->dl_write = default_serial_dl_write; > > > > > > > > + default: > > > > + WARN(1, "Unsupported UART type %x\n", p- > > > > >iotype); > > > > > > So, according to this patch, the serial uart on microblaze, > > > nios2, > > > openrisc, xtensa, and possibly others is not or no longer > > > supported. > > > > > > WARNING: CPU: 0 PID: 0 at drivers/tty/serial/8250/8250_port.c:470 > > > serial8250_set_defaults+0x1a8/0x22c > > > Unsupported UART type 0 > > > > > > Any special reason ? > > > > > > Guenter > > > > So according to the warning the p->iotype is 0 which is UPIO_PORT. > > For UPIO_PORT the switch above the WARN would pick io_serial_in() > > and > > io_serial_out() as handlers. These use inb() respectively outb() to > > access the serial so I don't see how they would work with > > !HAS_IOPORT > > and it most definitely won't work for s390. > > > > Now for Microblaze Kconfig says to select HAS_IOPORT if PCI so I'd > > assume that it can use inb()/outb() and maybe the PCI requirement > > is > > not correct if this isn't a PCI device and it used to work with > > inb()/outb()? For nios2, openrisc, and xtensa they don't select > > HAS_IOPORT so either it really won't work anyway or they should > > select > > it. Can you tell us more about the devices involved where you saw > > this? > > > > This is seen when booting the affected architectures with qemu. > > Logs: > > https://kerneltests.org/builders/qemu-microblaze-master/builds/327/steps/qemubuildcommand/logs/stdio > https://kerneltests.org/builders/qemu-nios2-master/builds/314/steps/qemubuildcommand/logs/stdio > https://kerneltests.org/builders/qemu-openrisc-master/builds/301 > https://kerneltests.org/builders/qemu-xtensa-master/builds/311/steps/qemubuildcommand/logs/stdio > > Guenter > Am I seeing it right that despite the warning and the code setting no_serial_in / no_serial_out the console=ttyS0 in the above qemu boots still worked? Also for example in the nios2 case I see the warning 4 times. So this makes me wonder since the warning is new is it possible that set_io_from_upio() has been called with an invalid / all zero port before but it was invisible. The way I'm reading __serial8250_isa_init_ports() and in particular the first loop if nr_uarts is e.g. 5 in the nios case but only the first entry in serial8250_ports[] has the IOMEM 8250 it will still call serial8250_setup_port() on the 4 other unintalized/zero elements which would explain the iotype being 0. And as far as I can see nr_uarts is just set to the value of CONFIG_SERIAL_8250_RUNTIME_UARTS in 8250_platform.c. I may be totally off though this console_init() stuff has me a little confused and it's been a long day. Regards, Niklas