Re: [PATCH v2 1/8] serial: txx9: Drop noop probe function and dangerous remove callback

Atsushi Nemoto <[email protected]>
Newsgroups gmane.linux.serial,gmane.linux.kernel
Message-ID <[email protected]>
On Tue,  4 Aug 2026 10:57:53 +0200, Uwe Kleine-König (The Capable Hub) <[email protected]> wrote:
> The only platform device that can be bound to the driver is allocated by
> the driver itself. That device doesn't have platdata, so the probe
> function only consists of a loop that is never run and thus can be
> dropped without loss of functionality.

The noop loop might came from old 8250 driver I referenced at that time.
Now I think it can be removed safely.
Thank you for this cleanup.

Reviewed-by: Atsushi Nemoto <[email protected]>

---
Atsushi Nemoto

On Tue,  4 Aug 2026 10:57:53 +0200, Uwe Kleine-König (The Capable Hub) <[email protected]> wrote:
> The only platform device that can be bound to the driver is allocated by
> the driver itself. That device doesn't have platdata, so the probe
> function only consists of a loop that is never run and thus can be
> dropped without loss of functionality.
> 
> The remove function then should better not undo things that were not
> done in the first place. That happens because serial_txx9_init() calls
> serial_txx9_register_ports() with the created platform device and so
> up->dev == &dev->dev evaluates to true and uart_remove_one_port() is
> called twice for each port.
> 
> So let serial_txx9_exit() undo exactly what serial_txx9_init() does and
> remove the useless respectively wrong functions.
> 
> Fixes: 0970769aceb9 ("[SERIAL] serial_txx9 driver update")
> Signed-off-by: Uwe Kleine-König (The Capable Hub) <[email protected]>
> ---
>  drivers/tty/serial/serial_txx9.c | 55 ++------------------------------
>  1 file changed, 3 insertions(+), 52 deletions(-)
> 
> diff --git a/drivers/tty/serial/serial_txx9.c b/drivers/tty/serial/serial_txx9.c
> index 4ae9a45c8e3a..ef56979321b9 100644
> --- a/drivers/tty/serial/serial_txx9.c
> +++ b/drivers/tty/serial/serial_txx9.c
> @@ -1009,7 +1009,8 @@ static void serial_txx9_unregister_port(int line)
>  	struct uart_port *uart = &serial_txx9_ports[line];
>  
>  	mutex_lock(&serial_txx9_mutex);
> -	uart_remove_one_port(&serial_txx9_reg, uart);
> +	if (uart->iobase || uart->mapbase)
> +		uart_remove_one_port(&serial_txx9_reg, uart);
>  	uart->flags = 0;
>  	uart->type = PORT_UNKNOWN;
>  	uart->iobase = 0;
> @@ -1019,52 +1020,6 @@ static void serial_txx9_unregister_port(int line)
>  	mutex_unlock(&serial_txx9_mutex);
>  }
>  
> -/*
> - * Register a set of serial devices attached to a platform device.
> - */
> -static int serial_txx9_probe(struct platform_device *dev)
> -{
> -	struct uart_port *p = dev_get_platdata(&dev->dev);
> -	struct uart_port port;
> -	int ret, i;
> -
> -	memset(&port, 0, sizeof(struct uart_port));
> -	for (i = 0; p && p->uartclk != 0; p++, i++) {
> -		port.iobase	= p->iobase;
> -		port.membase	= p->membase;
> -		port.irq	= p->irq;
> -		port.uartclk	= p->uartclk;
> -		port.iotype	= p->iotype;
> -		port.flags	= p->flags;
> -		port.mapbase	= p->mapbase;
> -		port.dev	= &dev->dev;
> -		port.has_sysrq	= IS_ENABLED(CONFIG_SERIAL_TXX9_CONSOLE);
> -		ret = serial_txx9_register_port(&port);
> -		if (ret < 0) {
> -			dev_err(&dev->dev, "unable to register port at index %d "
> -				"(IO%lx MEM%llx IRQ%d): %d\n", i,
> -				p->iobase, (unsigned long long)p->mapbase,
> -				p->irq, ret);
> -		}
> -	}
> -	return 0;
> -}
> -
> -/*
> - * Remove serial ports registered against a platform device.
> - */
> -static void serial_txx9_remove(struct platform_device *dev)
> -{
> -	int i;
> -
> -	for (i = 0; i < UART_NR; i++) {
> -		struct uart_port *up = &serial_txx9_ports[i];
> -
> -		if (up->dev == &dev->dev)
> -			serial_txx9_unregister_port(i);
> -	}
> -}
> -
>  #ifdef CONFIG_PM
>  static int serial_txx9_suspend(struct platform_device *dev, pm_message_t state)
>  {
> @@ -1096,8 +1051,6 @@ static int serial_txx9_resume(struct platform_device *dev)
>  #endif
>  
>  static struct platform_driver serial_txx9_plat_driver = {
> -	.probe		= serial_txx9_probe,
> -	.remove		= serial_txx9_remove,
>  #ifdef CONFIG_PM
>  	.suspend	= serial_txx9_suspend,
>  	.resume		= serial_txx9_resume,
> @@ -1251,9 +1204,7 @@ static void __exit serial_txx9_exit(void)
>  	platform_driver_unregister(&serial_txx9_plat_driver);
>  	platform_device_unregister(serial_txx9_plat_devs);
>  	for (i = 0; i < UART_NR; i++) {
> -		struct uart_port *up = &serial_txx9_ports[i];
> -		if (up->iobase || up->mapbase)
> -			uart_remove_one_port(&serial_txx9_reg, up);
> +		serial_txx9_unregister_port(i);
>  	}
>  
>  	uart_unregister_driver(&serial_txx9_reg);
> -- 
> 2.55.0.11.g153666a7d9bb
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.