Hi Doug On Tue, Dec 12, 2023 at 9:54 AM Michael Nazzareno Trimarchi <michael@xxxxxxxxxxxxxxxxxxxx> wrote: > > Hi Doug > > On Mon, Dec 11, 2023 at 11:00 PM Doug Anderson <dianders@xxxxxxxxxxxx> wrote: > > > > Hi, > > > > On Mon, Dec 11, 2023 at 1:42 PM Michael Nazzareno Trimarchi > > <michael@xxxxxxxxxxxxxxxxxxxx> wrote: > > > > > > > 1. init_kgdboc() runs and registers the singleton kgdb "platform driver". > > > > > > > > 2. The platform driver's probe function, kgdboc_probe(), runs and > > > > checks to see if the console is ready by looking at the return value > > > > of configure_kgdboc(). If it's ready then we're good to go. If it's > > > > not ready then we defer. > > > > > > > > So I think the bug here is that somehow the console looks "ready" > > > > (because tty_find_polling_driver() can find it) but it isn't actually > > > > ready yet (because it crashes). That's what you need to fix. > > > > > > > > > > The polling driver look for uart and uart8250_core is registered and 4 fake uart > > > are there but there are not still replaced by platform driver that can > > > come later. > > > The try_polling find it but it's the isa-8250 driver. It means that > > > add_uart 8250 is > > > not still happen > > > > The 8250 driver is always a maze, so you might need to do a bunch of > > digging. ...but it sure sounds like the console shouldn't be > > registered until the correct ops are in place. That either means > > getting the ops put in place earlier or deferring when the console is > > registered... > > > > Your point is pretty clear and my initial idea was to find a real fix. > This come to avoid > breaking existing setup but anyway I will dig in it more > > Michael What about this? --- a/drivers/tty/tty_io.c +++ b/drivers/tty/tty_io.c @@ -385,6 +385,7 @@ struct tty_driver *tty_find_polling_driver(char *name, int *line) int tty_line = 0; int len; char *str, *stp; + int index; for (str = name; *str; str++) if ((*str >= '0' && *str <= '9') || *str == ',') @@ -406,7 +407,7 @@ struct tty_driver *tty_find_polling_driver(char *name, int *line) if (*stp == '\0') stp = NULL; - if (tty_line >= 0 && tty_line < p->num && p->ops && + if (tty_line >= 0 && tty_line < p->num && p->ops && console_device(&index) == p && p->ops->poll_init && !p->ops->poll_init(p, tty_line, stp)) { res = tty_driver_kref_get(p); *line = tty_line; I will send proper patch [ 18.885348] printk: legacy console [ttyS2] disabled [ 18.890821] 2800000.serial: ttyS2 at MMIO 0x2800000 (irq = 283, base_baud = 3000000) is a 8250 [ 18.899727] printk: legacy console [ttyS2] enabled [ 18.909440] printk: legacy bootconsole [ns16550a0] disabled [ 18.923263] omap8250_probe: register uart 2800000.serial Michael > > > -Doug > > > > -- > Michael Nazzareno Trimarchi > Co-Founder & Chief Executive Officer > M. +39 347 913 2170 > michael@xxxxxxxxxxxxxxxxxxxx > __________________________________ > > Amarula Solutions BV > Joop Geesinkweg 125, 1114 AB, Amsterdam, NL > T. +31 (0)85 111 9172 > info@xxxxxxxxxxxxxxxxxxxx > www.amarulasolutions.com -- Michael Nazzareno Trimarchi Co-Founder & Chief Executive Officer M. +39 347 913 2170 michael@xxxxxxxxxxxxxxxxxxxx __________________________________ Amarula Solutions BV Joop Geesinkweg 125, 1114 AB, Amsterdam, NL T. +31 (0)85 111 9172 info@xxxxxxxxxxxxxxxxxxxx www.amarulasolutions.com