Message ID | 20240706082928.2238-1-jszhang@kernel.org |
---|---|
State | New |
Headers | show |
Series | serial: 8250: don't lost port's default capabilities | expand |
On Sat, Jul 06, 2024 at 04:29:28PM +0800, Jisheng Zhang wrote: > Commit b0b8c84cf58d ("serial: of_serial: Handle auto-flow-control > property") added support for fifo-size and hw-flow-control properties > to avoid adding new types to 8250.c for UARTs that are compatible with > the standard types but that have different size fifo or support 16750 > compatible auto flow control. We avoided many new 8250 port types with > this nice feature, but there's a problem, if the code detects fifo-size > or auto-flow-control property, up->capabilities will be set > accordingly, then serial8250_set_defaults() will ignore the default > port's capabilities: > > |if (!up->capabilities) > | up->capabilities = uart_config[type].flags; > > If the port's default capabilities contains other bits such as > UART_CAP_SLEEP, UART_CAP_EFR and so on, they are lost. > > Fixes: b0b8c84cf58d ("serial: of_serial: Handle auto-flow-control property") > Signed-off-by: Jisheng Zhang <jszhang@kernel.org> > --- > drivers/tty/serial/8250/8250_port.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > Hi, This is the friendly patch-bot of Greg Kroah-Hartman. You have sent him a patch that has triggered this response. He used to manually respond to these common problems, but in order to save his sanity (he kept writing the same thing over and over, yet to different people), I was created. Hopefully you will not take offence and will fix the problem in your patch and resubmit it so that it can be accepted into the Linux kernel tree. You are receiving this message because of the following common error(s) as indicated below: - You have marked a patch with a "Fixes:" tag for a commit that is in an older released kernel, yet you do not have a cc: stable line in the signed-off-by area at all, which means that the patch will not be applied to any older kernel releases. To properly fix this, please follow the documented rules in the Documentation/process/stable-kernel-rules.rst file for how to resolve this. If you wish to discuss this problem further, or you have questions about how to resolve this issue, please feel free to respond to this email and Greg will reply once he has dug out from the pending patches received from other developers. thanks, greg k-h's patch email bot
Hi On 16:29 Sat 06 Jul , Jisheng Zhang wrote: > Commit b0b8c84cf58d ("serial: of_serial: Handle auto-flow-control > property") added support for fifo-size and hw-flow-control properties > to avoid adding new types to 8250.c for UARTs that are compatible with > the standard types but that have different size fifo or support 16750 > compatible auto flow control. We avoided many new 8250 port types with > this nice feature, but there's a problem, if the code detects fifo-size > or auto-flow-control property, up->capabilities will be set > accordingly, then serial8250_set_defaults() will ignore the default > port's capabilities: > > |if (!up->capabilities) > | up->capabilities = uart_config[type].flags; > so the previous old logic is trying to override the config of 'type' uart, while this patch try to extend capabilities with default config of 'type' uart as base I tend to agree this is right direction (but wasn't 100% sure..) btw, Jisheng, can you also check serial8250_do_startup()? which has similar logic > If the port's default capabilities contains other bits such as > UART_CAP_SLEEP, UART_CAP_EFR and so on, they are lost. > > Fixes: b0b8c84cf58d ("serial: of_serial: Handle auto-flow-control property") I believe the commit just reveal the problem, make it more visible, but not the root cause, 'git blame' lead to b6830f6df8914f ("serial: 8250: Split base port operations from universal driver") as the original commit introduce this logic which seems exist long time ago.. > Signed-off-by: Jisheng Zhang <jszhang@kernel.org> > --- > drivers/tty/serial/8250/8250_port.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c > index 893bc493f662..e20614241229 100644 > --- a/drivers/tty/serial/8250/8250_port.c > +++ b/drivers/tty/serial/8250/8250_port.c > @@ -3245,8 +3245,7 @@ void serial8250_set_defaults(struct uart_8250_port *up) > up->port.fifosize = uart_config[type].fifo_size; > if (!up->tx_loadsz) > up->tx_loadsz = uart_config[type].tx_loadsz; > - if (!up->capabilities) > - up->capabilities = uart_config[type].flags; > + up->capabilities |= uart_config[type].flags; > } > > set_io_from_upio(port); > -- > 2.43.0 >
diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c index 893bc493f662..e20614241229 100644 --- a/drivers/tty/serial/8250/8250_port.c +++ b/drivers/tty/serial/8250/8250_port.c @@ -3245,8 +3245,7 @@ void serial8250_set_defaults(struct uart_8250_port *up) up->port.fifosize = uart_config[type].fifo_size; if (!up->tx_loadsz) up->tx_loadsz = uart_config[type].tx_loadsz; - if (!up->capabilities) - up->capabilities = uart_config[type].flags; + up->capabilities |= uart_config[type].flags; } set_io_from_upio(port);
Commit b0b8c84cf58d ("serial: of_serial: Handle auto-flow-control property") added support for fifo-size and hw-flow-control properties to avoid adding new types to 8250.c for UARTs that are compatible with the standard types but that have different size fifo or support 16750 compatible auto flow control. We avoided many new 8250 port types with this nice feature, but there's a problem, if the code detects fifo-size or auto-flow-control property, up->capabilities will be set accordingly, then serial8250_set_defaults() will ignore the default port's capabilities: |if (!up->capabilities) | up->capabilities = uart_config[type].flags; If the port's default capabilities contains other bits such as UART_CAP_SLEEP, UART_CAP_EFR and so on, they are lost. Fixes: b0b8c84cf58d ("serial: of_serial: Handle auto-flow-control property") Signed-off-by: Jisheng Zhang <jszhang@kernel.org> --- drivers/tty/serial/8250/8250_port.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)