On 2/16/2026 10:16 PM, Frank Li wrote:
> On Mon, Feb 16, 2026 at 04:01:53PM +0100, Larisa Grigore wrote:
>> From: Radu Pirea <radu-nicolae.pirea@nxp.com>
>>
>> Take the port->lock when set_termios is called, otherwise if characters
>> are sent while IP is in init mode, the IP will hang in an uncertain
>> state.
>
> According to patch, you move it before read(UARTCR). can explain why hang?
>
> Frank
Hello Frank,
Thanks for the review! This change was made to not let anyone send
characters (for example calling `linflex_console_putchar`) while
LINFlexD is entering INIT mode. The INIT mode is entered when setting
LINFLEXD_LINCR1_INIT in LINCR1. UARTCR should also be protected with a
lock since it can be modified from different other places.
I will update the commit description.
Regards,
Larisa
>>
>> Fixes: 09864c1cdf5c ("tty: serial: Add linflexuart driver for S32V234")
>> Signed-off-by: Radu Pirea <radu-nicolae.pirea@nxp.com>
>> Signed-off-by: Larisa Grigore <larisa.grigore@oss.nxp.com>
>> ---
>> drivers/tty/serial/fsl_linflexuart.c | 4 ++--
>> 1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/tty/serial/fsl_linflexuart.c b/drivers/tty/serial/fsl_linflexuart.c
>> index e70a56de1fce..5a410e2d56ac 100644
>> --- a/drivers/tty/serial/fsl_linflexuart.c
>> +++ b/drivers/tty/serial/fsl_linflexuart.c
>> @@ -407,6 +407,8 @@ linflex_set_termios(struct uart_port *port, struct ktermios *termios,
>> unsigned long cr, old_cr, cr1;
>> unsigned int old_csize = old ? old->c_cflag & CSIZE : CS8;
>>
>> + uart_port_lock_irqsave(port, &flags);
>> +
>> cr = readl(port->membase + UARTCR);
>> old_cr = cr;
>>
>> @@ -475,8 +477,6 @@ linflex_set_termios(struct uart_port *port, struct ktermios *termios,
>> cr &= ~LINFLEXD_UARTCR_PCE;
>> }
>>
>> - uart_port_lock_irqsave(port, &flags);
>> -
>> port->read_status_mask = 0;
>>
>> if (termios->c_iflag & INPCK)
>> --
>> 2.47.0
>>