On 19. 07. 23, 7:15, Tony Lindgren wrote:
With the serial core controller related changes we can now start
addressing serial ports with dev_name:0.0 naming. The names are something
like 00:04.0:0.0 on qemu, and 2800000.serial.0:0.0 on ARM for example.
The dev_name is unique serial port hardware controller device name, also
known as port->dev, and 0.0 are the serial core controller id and port id.
Typically 0.0 are used for each controller and port instance unless the
serial port hardware controller has multiple controllers or ports.
Signed-off-by: Tony Lindgren <tony@xxxxxxxxxxx>
---
Note that this depends on fix for serial core port ids patch
"[PATCH] serial: core: Fix serial core port id to not use port->line"
---
drivers/tty/serial/serial_core.c | 47 ++++++++++++++++++++++++++++++++
1 file changed, 47 insertions(+)
diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
@@ -3322,6 +3322,49 @@ static int serial_core_port_device_add(struct serial_ctrl_device *ctrl_dev,
return 0;
}
+/*
+ * Add preferred console if configured on kernel command line with naming
+ * "console=dev_name:0.0".
+ */
+static int serial_core_add_preferred_console(struct uart_driver *drv,
+ struct uart_port *port)
+{
+ char *port_match, *opt, *name;
+ int len, ret = 0;
+
+ port_match = kasprintf(GFP_KERNEL, "console=%s:%i.%i",
+ dev_name(port->dev), port->ctrl_id,
+ port->port_id);
+ if (!port_match)
+ return -ENOMEM;
+
+ opt = strstr(saved_command_line, port_match);
+ if (!opt)
+ goto free_port_match;
+
+ len = strlen(port_match);
+
+ if (strlen(opt) > len + 1 && opt[len] == ',')
+ opt += len + 1;
+ else
+ opt = NULL;
+
+ name = kstrdup(drv->dev_name, GFP_KERNEL);
Why do you dup the name here?
+ if (!name) {
+ ret = -ENOMEM;
+ goto free_port_match;
+ }
+
+ add_preferred_console(name, port->line, opt);
+
+ kfree(name);
thanks,
--
js
suse labs