RE: [PATCH] serial: fsl_lpuart: Skip the reset for the early console port

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> -----Original Message-----
> From: Xiaolei Wang <xiaolei.wang@xxxxxxxxxxxxx>
> Sent: 2022年10月24日 17:12
> To: gregkh@xxxxxxxxxxxxxxxxxxx; jirislaby@xxxxxxxxxx; lukas@xxxxxxxxx
> Cc: fugang.duan@xxxxxxx; Sherry Sun <sherry.sun@xxxxxxx>;
> ilpo.jarvinen@xxxxxxxxxxxxxxx; linux-serial@xxxxxxxxxxxxxxx; linux-
> kernel@xxxxxxxxxxxxxxx
> Subject: [PATCH] serial: fsl_lpuart: Skip the reset for the early console port
> 
> The commit 60f361722ad2 ("serial: fsl_lpuart: Reset prior to
> registration") has moved the reset before the port registration, this change
> makes the uart_console() in lpuart_global_reset() no sense since the port is
> not registered to the system yet. So drop it.
> But we sill need to check if the port is used as an early console before
> performing the port reset, otherwise the reset will hang the system.
> 
> Fixes: 60f361722ad2 ("serial: fsl_lpuart: Reset prior to registration")
> Signed-off-by: Xiaolei Wang <xiaolei.wang@xxxxxxxxxxxxx>
> ---
>  drivers/tty/serial/fsl_lpuart.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c
> index 67fa113f77d4..d0efeba5c695 100644
> --- a/drivers/tty/serial/fsl_lpuart.c
> +++ b/drivers/tty/serial/fsl_lpuart.c
> @@ -239,6 +239,8 @@
>  /* IMX lpuart has four extra unused regs located at the beginning */
>  #define IMX_REG_OFF	0x10
> 
> +static resource_size_t lpuart_earlycon_mapbase;
> +
>  enum lpuart_type {
>  	VF610_LPUART,
>  	LS1021A_LPUART,
> @@ -410,7 +412,7 @@ static int lpuart_global_reset(struct lpuart_port
> *sport)
>  	void __iomem *global_addr;
>  	int ret;
> 
> -	if (uart_console(port))
> +	if ((port->mapbase - 0x10) == lpuart_earlycon_mapbase)
>  		return 0;
> 
>  	ret = clk_prepare_enable(sport->ipg_clk);
> @@ -2604,6 +2606,7 @@ static int __init
> lpuart32_imx_early_console_setup(struct earlycon_device *devic
>  	device->port.iotype = UPIO_MEM32;
>  	device->port.membase += IMX_REG_OFF;
>  	device->con->write = lpuart32_early_write;
> +	lpuart_earlycon_mapbase = device->port.mapbase;
> 

Hi, thanks for the fix for lpuart driver, but this looks more like a workaround patch.
Per my understanding, the root cause for this issue is that lpuart_global_reset() break the on-going transfer, such as the earlycon here.
I have sent a patch to fix the lpuart console hang issue, please check https://lore.kernel.org/lkml/20221024085844.22786-1-sherry.sun@xxxxxxx/

Best Regards
Sherry





[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux PPP]     [Linux FS]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Linmodem]     [Device Mapper]     [Linux Kernel for ARM]

  Powered by Linux