public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] serial: 8250: add option to disable registration of legacy ISA ports
@ 2021-01-28 17:22 Mans Rullgard
       [not found] ` <CAHp75VenDC0R3uX4_=Yzii-q5Z-YWcfT2_OO0yJkYehYAHDCew@mail.gmail.com>
       [not found] ` <YBam2m2VMowH5Yth@kroah.com>
  0 siblings, 2 replies; 6+ messages in thread
From: Mans Rullgard @ 2021-01-28 17:22 UTC (permalink / raw)
  To: Greg Kroah-Hartman; +Cc: Jiri Slaby, linux-serial, linux-kernel

On systems that do not have the traditional PC ISA serial ports, the
8250 driver still creates non-functional device nodes.  This change
makes only ports that actually exist (PCI, DT, ...) get device nodes.

Signed-off-by: Mans Rullgard <mans@mansr.com>
---
 drivers/tty/serial/8250/8250_core.c | 26 ++++++++++++++++++++------
 drivers/tty/serial/8250/Kconfig     |  5 +++++
 2 files changed, 25 insertions(+), 6 deletions(-)

diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c
index cae61d1ebec5..49695dd3677c 100644
--- a/drivers/tty/serial/8250/8250_core.c
+++ b/drivers/tty/serial/8250/8250_core.c
@@ -555,6 +555,7 @@ static void __init serial8250_isa_init_ports(void)
 	}
 }
 
+#ifdef CONFIG_SERIAL_8250_ISA
 static void __init
 serial8250_register_ports(struct uart_driver *drv, struct device *dev)
 {
@@ -575,6 +576,7 @@ serial8250_register_ports(struct uart_driver *drv, struct device *dev)
 		uart_add_one_port(drv, &up->port);
 	}
 }
+#endif
 
 #ifdef CONFIG_SERIAL_8250_CONSOLE
 
@@ -797,6 +799,7 @@ void serial8250_resume_port(int line)
 }
 EXPORT_SYMBOL(serial8250_resume_port);
 
+#ifdef CONFIG_SERIAL_8250_ISA
 /*
  * Register a set of serial devices attached to a platform device.  The
  * list is terminated with a zero flags entry, which means we expect
@@ -907,6 +910,7 @@ static struct platform_driver serial8250_isa_driver = {
  * in the table in include/asm/serial.h
  */
 static struct platform_device *serial8250_isa_devs;
+#endif
 
 /*
  * serial8250_register_8250_port and serial8250_unregister_port allows for
@@ -1149,6 +1153,8 @@ void serial8250_unregister_port(int line)
 	}
 
 	uart_remove_one_port(&serial8250_reg, &uart->port);
+	uart->port.dev = NULL;
+#ifdef CONFIG_SERIAL_8250_ISA
 	if (serial8250_isa_devs) {
 		uart->port.flags &= ~UPF_BOOT_AUTOCONF;
 		uart->port.type = PORT_UNKNOWN;
@@ -1156,9 +1162,8 @@ void serial8250_unregister_port(int line)
 		uart->capabilities = 0;
 		serial8250_apply_quirks(uart);
 		uart_add_one_port(&serial8250_reg, &uart->port);
-	} else {
-		uart->port.dev = NULL;
 	}
+#endif
 	mutex_unlock(&serial_mutex);
 }
 EXPORT_SYMBOL(serial8250_unregister_port);
@@ -1188,6 +1193,7 @@ static int __init serial8250_init(void)
 	if (ret)
 		goto unreg_uart_drv;
 
+#ifdef CONFIG_SERIAL_8250_ISA
 	serial8250_isa_devs = platform_device_alloc("serial8250",
 						    PLAT8250_DEV_LEGACY);
 	if (!serial8250_isa_devs) {
@@ -1202,26 +1208,33 @@ static int __init serial8250_init(void)
 	serial8250_register_ports(&serial8250_reg, &serial8250_isa_devs->dev);
 
 	ret = platform_driver_register(&serial8250_isa_driver);
-	if (ret == 0)
-		goto out;
+	if (ret)
+		goto del_dev;
+#endif
 
+out:
+	return ret;
+
+#ifdef CONFIG_SERIAL_8250_ISA
+del_dev:
 	platform_device_del(serial8250_isa_devs);
 put_dev:
 	platform_device_put(serial8250_isa_devs);
 unreg_pnp:
 	serial8250_pnp_exit();
+#endif
 unreg_uart_drv:
 #ifdef CONFIG_SPARC
 	sunserial_unregister_minors(&serial8250_reg, UART_NR);
 #else
 	uart_unregister_driver(&serial8250_reg);
 #endif
-out:
-	return ret;
+	goto out;
 }
 
 static void __exit serial8250_exit(void)
 {
+#ifdef CONFIG_SERIAL_8250_ISA
 	struct platform_device *isa_dev = serial8250_isa_devs;
 
 	/*
@@ -1233,6 +1246,7 @@ static void __exit serial8250_exit(void)
 
 	platform_driver_unregister(&serial8250_isa_driver);
 	platform_device_unregister(isa_dev);
+#endif
 
 	serial8250_pnp_exit();
 
diff --git a/drivers/tty/serial/8250/Kconfig b/drivers/tty/serial/8250/Kconfig
index 603137da4736..683f81675a77 100644
--- a/drivers/tty/serial/8250/Kconfig
+++ b/drivers/tty/serial/8250/Kconfig
@@ -52,6 +52,11 @@ config SERIAL_8250_DEPRECATED_OPTIONS
 	  If you did not notice yet and/or you have userspace from pre-3.7, it
 	  is safe (and recommended) to say N here.
 
+config SERIAL_8250_ISA
+	bool "8250/16550 ISA device support" if EXPERT
+	depends on SERIAL_8250
+	default y
+
 config SERIAL_8250_PNP
 	bool "8250/16550 PNP device support" if EXPERT
 	depends on SERIAL_8250 && PNP
-- 
2.30.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2021-02-18 13:53 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-01-28 17:22 [PATCH] serial: 8250: add option to disable registration of legacy ISA ports Mans Rullgard
     [not found] ` <CAHp75VenDC0R3uX4_=Yzii-q5Z-YWcfT2_OO0yJkYehYAHDCew@mail.gmail.com>
2021-01-31 19:47   ` Måns Rullgård
2021-02-01  7:38   ` Greg Kroah-Hartman
     [not found] ` <YBam2m2VMowH5Yth@kroah.com>
     [not found]   ` <yw1xwnvtcki0.fsf@mansr.com>
     [not found]     ` <YBa0J82FrD6mdP/v@kroah.com>
2021-01-31 15:47       ` Måns Rullgård
2021-01-31 15:53         ` Greg Kroah-Hartman
2021-02-18 10:49     ` Maarten Brock

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox