Message ID | 20230719051613.46569-1-tony@atomide.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:c923:0:b0:3e4:2afc:c1 with SMTP id j3csp2212741vqt; Tue, 18 Jul 2023 22:34:36 -0700 (PDT) X-Google-Smtp-Source: APBJJlHz3cEHKVIbT6DcvontmyuGGFGGqqHXcz8rsbmdi+xfX60STEGCa453XtQwAxRB32urV1PK X-Received: by 2002:a05:6808:1b11:b0:3a1:de61:d414 with SMTP id bx17-20020a0568081b1100b003a1de61d414mr16578446oib.51.1689744875817; Tue, 18 Jul 2023 22:34:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689744875; cv=none; d=google.com; s=arc-20160816; b=ZBYGF9+lL8nh8bseDTgrfxHMfsFldSsWheEMD+F7NLv/8XYjnFAfZ9c3FkxgfS2Ny2 cn8KrPnyMF2gIEDibxqVDkwVkb3xVnHvuMXkoKrMkzK9cMBwmZJ4uwLSh3W68mwY2DZa kVpLq85EFnMl25zBatYicTBYbRf7TCFKUj+zDD4HplZRHz1l52BkWU5FmD8Wbn4joeFl JxcywhmVC9a1Vk1AiICY9deo60evp9lDJR2KqyPuIP2OnYT7RJwoo19T+cUvIrcQjEfn CZtvyDnqrZoIvb3SjArn8IJg+iw3cjIer+J44uUEB4FIHQ1JMq2ASrKTkjP+G7EIS4Lw jIWQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=SZdNLo6GH11iO9gGriivpsvm7RQGWBXRz0RZS3GhiAQ=; fh=hbHtIiydX37fSVKy1O1xs3IgAn++RRbMndzVd8WgtBU=; b=048G5yPe8ZSWzpAyjpz0705maIZeyAje2fDzBAkTNdcL7r8ZmREbGnyIbnW9PWAywo qeC7NVDrboVr2zQy3I7m5RIfNdJNhzeRBlxsh1abCZ1tOmeoiJYaaf+L191xbwsttfuV 5HsGUp8eZgfc8Q6+aV73DZZbiRYcmlgijd92bgBO/4zFrk3gW+a5kJtkbsCPu/E7nKaG CE9uvVqh++fuZCf8xg1tokoMgBvLGf0XOkD4dgOm6SLZx8fZJl+jPRJ+0QVeyl5nsHOP myNLZceERsdywKYq7X1ANqjPcarMarHIvkEs+PkVlponih2TYaZK+YkypOCMcSaU9b0o uBsg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id g16-20020a635210000000b005537d2a84f9si2697137pgb.400.2023.07.18.22.34.21; Tue, 18 Jul 2023 22:34:35 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230022AbjGSFQY (ORCPT <rfc822;chrisben.tianve@gmail.com> + 99 others); Wed, 19 Jul 2023 01:16:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50798 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229454AbjGSFQW (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Wed, 19 Jul 2023 01:16:22 -0400 Received: from muru.com (muru.com [72.249.23.125]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 7F0D01BF2; Tue, 18 Jul 2023 22:16:21 -0700 (PDT) Received: from hillo.muru.com (localhost [127.0.0.1]) by muru.com (Postfix) with ESMTP id 3501B80AA; Wed, 19 Jul 2023 05:16:19 +0000 (UTC) From: Tony Lindgren <tony@atomide.com> To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Jiri Slaby <jirislaby@kernel.org> Cc: Andy Shevchenko <andriy.shevchenko@intel.com>, Dhruva Gole <d-gole@ti.com>, =?utf-8?q?Ilpo_J=C3=A4rvinen?= <ilpo.jarvinen@linux.intel.com>, John Ogness <john.ogness@linutronix.de>, Johan Hovold <johan@kernel.org>, Sebastian Andrzej Siewior <bigeasy@linutronix.de>, Vignesh Raghavendra <vigneshr@ti.com>, linux-omap@vger.kernel.org, linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] serial: core: Add sysfs links for serial core port instances for ttys Date: Wed, 19 Jul 2023 08:16:11 +0300 Message-ID: <20230719051613.46569-1-tony@atomide.com> X-Mailer: git-send-email 2.41.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771825922879979864 X-GMAIL-MSGID: 1771825922879979864 |
Series |
serial: core: Add sysfs links for serial core port instances for ttys
|
|
Commit Message
Tony Lindgren
July 19, 2023, 5:16 a.m. UTC
Let's allow the userspace to find out the tty name for a serial core
controller id if a tty exists. This can be done with:
$ grep DEVNAME /sys/bus/serial-base/devices/port*/tty/uevent
/sys/bus/serial-base/devices/port.00:04.0/tty/uevent:DEVNAME=ttyS0
/sys/bus/serial-base/devices/port.serial8250.1/tty/uevent:DEVNAME=ttyS1
/sys/bus/serial-base/devices/port.serial8250.2/tty/uevent:DEVNAME=ttyS2
/sys/bus/serial-base/devices/port.serial8250.3/tty/uevent:DEVNAME=ttyS3
And with this, we can add /dev/serial/by-id symlinks to the serial port
device instances so we can start using serial core port addressing in
addition to the legacy ttyS naming.
The naming we can use is dev_name:0.0 where 0.0 are the serial core
controller id and port id, so for the ttyS0 example above the naming
would be 00:04.0:0.0.
Signed-off-by: Tony Lindgren <tony@atomide.com>
---
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 | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
Comments
On Wed, Jul 19, 2023 at 08:16:11AM +0300, Tony Lindgren wrote: > Let's allow the userspace to find out the tty name for a serial core > controller id if a tty exists. This can be done with: > > $ grep DEVNAME /sys/bus/serial-base/devices/port*/tty/uevent > /sys/bus/serial-base/devices/port.00:04.0/tty/uevent:DEVNAME=ttyS0 > /sys/bus/serial-base/devices/port.serial8250.1/tty/uevent:DEVNAME=ttyS1 > /sys/bus/serial-base/devices/port.serial8250.2/tty/uevent:DEVNAME=ttyS2 > /sys/bus/serial-base/devices/port.serial8250.3/tty/uevent:DEVNAME=ttyS3 What part is the controller ID here? We also have something in procfs (I don't remember what info exactly is there). > And with this, we can add /dev/serial/by-id symlinks to the serial port > device instances so we can start using serial core port addressing in > addition to the legacy ttyS naming. > > The naming we can use is dev_name:0.0 where 0.0 are the serial core > controller id and port id, so for the ttyS0 example above the naming > would be 00:04.0:0.0. This is interesting idea. But any hint why it can be useful?
* Andy Shevchenko <andriy.shevchenko@intel.com> [230719 05:34]: > On Wed, Jul 19, 2023 at 08:16:11AM +0300, Tony Lindgren wrote: > > Let's allow the userspace to find out the tty name for a serial core > > controller id if a tty exists. This can be done with: > > > > $ grep DEVNAME /sys/bus/serial-base/devices/port*/tty/uevent > > /sys/bus/serial-base/devices/port.00:04.0/tty/uevent:DEVNAME=ttyS0 > > /sys/bus/serial-base/devices/port.serial8250.1/tty/uevent:DEVNAME=ttyS1 > > /sys/bus/serial-base/devices/port.serial8250.2/tty/uevent:DEVNAME=ttyS2 > > /sys/bus/serial-base/devices/port.serial8250.3/tty/uevent:DEVNAME=ttyS3 > > What part is the controller ID here? Oh looks like controller id it's missing in the name, I'll send a fix for that. > We also have something in procfs (I don't remember what info exactly is there). Do you mean /proc/devices? > > And with this, we can add /dev/serial/by-id symlinks to the serial port > > device instances so we can start using serial core port addressing in > > addition to the legacy ttyS naming. > > > > The naming we can use is dev_name:0.0 where 0.0 are the serial core > > controller id and port id, so for the ttyS0 example above the naming > > would be 00:04.0:0.0. > > This is interesting idea. But any hint why it can be useful? If you have lots of serial ports and we are stuck with adding aliases for the ports in the dts files where the ttyS naming and ordering does not really help or may not necessarily make sense if the ports are on different buses or domains. With CONFIG_SERIAL_8250_RUNTIME_UARTS=4, the ttyS naming is only needed for the legacy ports really. Regards, Tony
On Wed, Jul 19, 2023 at 08:43:21AM +0300, Tony Lindgren wrote: > * Andy Shevchenko <andriy.shevchenko@intel.com> [230719 05:34]: > > On Wed, Jul 19, 2023 at 08:16:11AM +0300, Tony Lindgren wrote: > > > Let's allow the userspace to find out the tty name for a serial core > > > controller id if a tty exists. This can be done with: > > > > > > $ grep DEVNAME /sys/bus/serial-base/devices/port*/tty/uevent > > > /sys/bus/serial-base/devices/port.00:04.0/tty/uevent:DEVNAME=ttyS0 > > > /sys/bus/serial-base/devices/port.serial8250.1/tty/uevent:DEVNAME=ttyS1 > > > /sys/bus/serial-base/devices/port.serial8250.2/tty/uevent:DEVNAME=ttyS2 > > > /sys/bus/serial-base/devices/port.serial8250.3/tty/uevent:DEVNAME=ttyS3 > > > > What part is the controller ID here? > > Oh looks like controller id it's missing in the name, I'll send a fix > for that. > > > We also have something in procfs (I don't remember what info exactly is there). > > Do you mean /proc/devices? Something tty specific, /proc/tty/, but I had a look and it seems for another stuff. > > > And with this, we can add /dev/serial/by-id symlinks to the serial port > > > device instances so we can start using serial core port addressing in > > > addition to the legacy ttyS naming. > > > > > > The naming we can use is dev_name:0.0 where 0.0 are the serial core > > > controller id and port id, so for the ttyS0 example above the naming > > > would be 00:04.0:0.0. > > > > This is interesting idea. But any hint why it can be useful? > > If you have lots of serial ports and we are stuck with adding aliases > for the ports in the dts files where the ttyS naming and ordering does > not really help or may not necessarily make sense if the ports are on > different buses or domains. With CONFIG_SERIAL_8250_RUNTIME_UARTS=4, > the ttyS naming is only needed for the legacy ports really. I see. Does it fix the long standing issue with ttyS enumeration (on x86 at least) when depending on the presence of the legacy ports the HSUART (high speed) can preempt the legacy placeholders (ttyS0..ttyS3)? To me sounds like it may very well do fix it and I would be glad to see that in the commit message (as selling point) and in documentation.
* Andy Shevchenko <andriy.shevchenko@intel.com> [230719 13:59]: > On Wed, Jul 19, 2023 at 08:43:21AM +0300, Tony Lindgren wrote: > > * Andy Shevchenko <andriy.shevchenko@intel.com> [230719 05:34]: > > > On Wed, Jul 19, 2023 at 08:16:11AM +0300, Tony Lindgren wrote: > > > > Let's allow the userspace to find out the tty name for a serial core > > > > controller id if a tty exists. This can be done with: > > > > > > > > $ grep DEVNAME /sys/bus/serial-base/devices/port*/tty/uevent > > > > /sys/bus/serial-base/devices/port.00:04.0/tty/uevent:DEVNAME=ttyS0 > > > > /sys/bus/serial-base/devices/port.serial8250.1/tty/uevent:DEVNAME=ttyS1 > > > > /sys/bus/serial-base/devices/port.serial8250.2/tty/uevent:DEVNAME=ttyS2 > > > > /sys/bus/serial-base/devices/port.serial8250.3/tty/uevent:DEVNAME=ttyS3 > > > > > > What part is the controller ID here? > > > > Oh looks like controller id it's missing in the name, I'll send a fix > > for that. > > > > > We also have something in procfs (I don't remember what info exactly is there). > > > > Do you mean /proc/devices? > > Something tty specific, /proc/tty/, but I had a look and it seems for another > stuff. OK > > > > And with this, we can add /dev/serial/by-id symlinks to the serial port > > > > device instances so we can start using serial core port addressing in > > > > addition to the legacy ttyS naming. > > > > > > > > The naming we can use is dev_name:0.0 where 0.0 are the serial core > > > > controller id and port id, so for the ttyS0 example above the naming > > > > would be 00:04.0:0.0. > > > > > > This is interesting idea. But any hint why it can be useful? > > > > If you have lots of serial ports and we are stuck with adding aliases > > for the ports in the dts files where the ttyS naming and ordering does > > not really help or may not necessarily make sense if the ports are on > > different buses or domains. With CONFIG_SERIAL_8250_RUNTIME_UARTS=4, > > the ttyS naming is only needed for the legacy ports really. > > I see. Does it fix the long standing issue with ttyS enumeration (on x86 > at least) when depending on the presence of the legacy ports the HSUART > (high speed) can preempt the legacy placeholders (ttyS0..ttyS3)? > > To me sounds like it may very well do fix it and I would be glad to see that > in the commit message (as selling point) and in documentation. It won't affect how ttyS0..ttyS3 get assigned, but it helps finding your HSUART instance with DEVNAME:0.0 style addressing. So you don't need to care what ttyS number the port has. If you have such a test case maybe give it a try. Regards, Tony
On Thu, Jul 20, 2023 at 07:13:19AM +0300, Tony Lindgren wrote: > * Andy Shevchenko <andriy.shevchenko@intel.com> [230719 13:59]: > > On Wed, Jul 19, 2023 at 08:43:21AM +0300, Tony Lindgren wrote: > > > * Andy Shevchenko <andriy.shevchenko@intel.com> [230719 05:34]: > > > > On Wed, Jul 19, 2023 at 08:16:11AM +0300, Tony Lindgren wrote: ... > > > > > And with this, we can add /dev/serial/by-id symlinks to the serial port > > > > > device instances so we can start using serial core port addressing in > > > > > addition to the legacy ttyS naming. > > > > > > > > > > The naming we can use is dev_name:0.0 where 0.0 are the serial core > > > > > controller id and port id, so for the ttyS0 example above the naming > > > > > would be 00:04.0:0.0. > > > > > > > > This is interesting idea. But any hint why it can be useful? > > > > > > If you have lots of serial ports and we are stuck with adding aliases > > > for the ports in the dts files where the ttyS naming and ordering does > > > not really help or may not necessarily make sense if the ports are on > > > different buses or domains. With CONFIG_SERIAL_8250_RUNTIME_UARTS=4, > > > the ttyS naming is only needed for the legacy ports really. > > > > I see. Does it fix the long standing issue with ttyS enumeration (on x86 > > at least) when depending on the presence of the legacy ports the HSUART > > (high speed) can preempt the legacy placeholders (ttyS0..ttyS3)? > > > > To me sounds like it may very well do fix it and I would be glad to see that > > in the commit message (as selling point) and in documentation. > > It won't affect how ttyS0..ttyS3 get assigned, but it helps finding your > HSUART instance with DEVNAME:0.0 style addressing. So you don't need to > care what ttyS number the port has. If you have such a test case maybe give > it a try. Exactly, the problem (currently) is, that depending on the BIOS settings the kernel can't use the same command line and this is quite a PITA for our customers! As far as we can specify hardware (path) to the console, it will be so cool and hopefully solves this very long standing issue.
* Andy Shevchenko <andriy.shevchenko@intel.com> [230721 10:06]: > On Thu, Jul 20, 2023 at 07:13:19AM +0300, Tony Lindgren wrote: > > * Andy Shevchenko <andriy.shevchenko@intel.com> [230719 13:59]: > > > On Wed, Jul 19, 2023 at 08:43:21AM +0300, Tony Lindgren wrote: > > > > * Andy Shevchenko <andriy.shevchenko@intel.com> [230719 05:34]: > > > > > On Wed, Jul 19, 2023 at 08:16:11AM +0300, Tony Lindgren wrote: > > ... > > > > > > > And with this, we can add /dev/serial/by-id symlinks to the serial port > > > > > > device instances so we can start using serial core port addressing in > > > > > > addition to the legacy ttyS naming. > > > > > > > > > > > > The naming we can use is dev_name:0.0 where 0.0 are the serial core > > > > > > controller id and port id, so for the ttyS0 example above the naming > > > > > > would be 00:04.0:0.0. > > > > > > > > > > This is interesting idea. But any hint why it can be useful? > > > > > > > > If you have lots of serial ports and we are stuck with adding aliases > > > > for the ports in the dts files where the ttyS naming and ordering does > > > > not really help or may not necessarily make sense if the ports are on > > > > different buses or domains. With CONFIG_SERIAL_8250_RUNTIME_UARTS=4, > > > > the ttyS naming is only needed for the legacy ports really. > > > > > > I see. Does it fix the long standing issue with ttyS enumeration (on x86 > > > at least) when depending on the presence of the legacy ports the HSUART > > > (high speed) can preempt the legacy placeholders (ttyS0..ttyS3)? > > > > > > To me sounds like it may very well do fix it and I would be glad to see that > > > in the commit message (as selling point) and in documentation. > > > > It won't affect how ttyS0..ttyS3 get assigned, but it helps finding your > > HSUART instance with DEVNAME:0.0 style addressing. So you don't need to > > care what ttyS number the port has. If you have such a test case maybe give > > it a try. > > Exactly, the problem (currently) is, that depending on the BIOS settings > the kernel can't use the same command line and this is quite a PITA for > our customers! > > As far as we can specify hardware (path) to the console, it will be so > cool and hopefully solves this very long standing issue. OK great, I'll update the patch description for next revision. Regards, Tony
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 @@ -3371,6 +3371,8 @@ static int serial_core_add_preferred_console(struct uart_driver *drv, int serial_core_register_port(struct uart_driver *drv, struct uart_port *port) { struct serial_ctrl_device *ctrl_dev, *new_ctrl_dev = NULL; + struct uart_match match = {port, drv}; + struct device *tty_dev; int ret; mutex_lock(&port_mutex); @@ -3411,10 +3413,21 @@ int serial_core_register_port(struct uart_driver *drv, struct uart_port *port) port->flags &= ~UPF_DEAD; + tty_dev = device_find_child(port->dev, &match, serial_match_port); + if (tty_dev) { + ret = sysfs_create_link(&port->port_dev->dev.kobj, &tty_dev->kobj, + "tty"); + if (ret) + goto err_remove_port; + } + mutex_unlock(&port_mutex); return 0; +err_remove_port: + serial_core_remove_one_port(drv, port); + err_unregister_port_dev: serial_base_port_device_remove(port->port_dev); @@ -3436,12 +3449,18 @@ void serial_core_unregister_port(struct uart_driver *drv, struct uart_port *port struct device *phys_dev = port->dev; struct serial_port_device *port_dev = port->port_dev; struct serial_ctrl_device *ctrl_dev = serial_core_get_ctrl_dev(port_dev); + struct uart_match match = {port, drv}; int ctrl_id = port->ctrl_id; + struct device *tty_dev; mutex_lock(&port_mutex); port->flags |= UPF_DEAD; + tty_dev = device_find_child(port->dev, &match, serial_match_port); + if (tty_dev) + sysfs_remove_link(&port->port_dev->dev.kobj, "tty"); + serial_core_remove_one_port(drv, port); /* Note that struct uart_port *port is no longer valid at this point */