On Thu, Jul 09, 2020 at 09:48:53AM +0200, Helmut Grohne wrote: > The problems started with the revert (18cc7ac8a28e28). The > cdns_uart_console.index is statically assigned -1. When the port is > registered, Linux assigns consecutive numbers to it. It turned out that > when using ttyPS1 as console, the index is not updated as we are reusing > the same cdns_uart_console instance for multiple ports. When registering > ttyPS0, it gets updated from -1 to 0, but when registering ttyPS1, it > already is 0 and not updated. > > That led to 2ae11c46d5fdc4. It assigns the index prior to registering > the uart_driver once. Unfortunately, that ended up breaking the > situation where the probe order does not match the id order. When using > the same device tree for both uboot and linux, it is important that the > serial0 alias points to the console. So some boards reverse those > aliases. This was reported by Jan Kiszka. The proposed fix was reverting > the index assignment and going back to the previous iteration. > > However such a reversed assignement (serial0 -> uart1, serial1 -> uart0) > was already partially broken by the revert (18cc7ac8a28e28). While the > ttyPS device works, the kmsg connection is already broken and kernel > messages go missing. Reverting the id assignment does not fix this. > > >From the xilinx_uartps driver pov (after reverting the refactoring > commits), there can be only one console. This manifests in static > variables console_pprt and cdns_uart_console. These variables are not > properly linked and can go out of sync. The cdns_uart_console.index is > important for uart_add_one_port. We call that function for each port - > one of which hopefully is the console. If it isn't, the CON_ENABLED flag > is not set and console_port is cleared. The next cdns_uart_probe call > then tries to register the next port using that same cdns_uart_console. > > It is important that console_port and cdns_uart_console (and its index > in particular) stay in sync. The index assignment implemented by > Shubhrajyoti Datta is correct in principle. It just may have to happen a > second time if the first cdns_uart_probe call didn't encounter the > console device. And we shouldn't change the index once the console uart > is registered. > > Reported-by: Shubhrajyoti Datta <shubhrajyoti.datta@xxxxxxxxxx> > Reported-by: Jan Kiszka <jan.kiszka@xxxxxx> > Link: https://lore.kernel.org/linux-serial/f4092727-d8f5-5f91-2c9f-76643aace993@xxxxxxxxxxx/ > Fixes: 18cc7ac8a28e28 ("Revert "serial: uartps: Register own uart console and driver structures"") > Fixes: 2ae11c46d5fdc4 ("tty: xilinx_uartps: Fix missing id assignment to the console") > Signed-off-by: Helmut Grohne <helmut.grohne@xxxxxxxxxx> > --- > drivers/tty/serial/xilinx_uartps.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) What tree/branch is this against? It doesn't seem to apply to my tty-linus branch which is where I would think it should go to, right? thanks, greg k-h