From nobody Wed Dec 17 23:02:30 2025 Received: from mail5.25mail.st (mail5.25mail.st [74.50.62.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E82EE52F8D; Wed, 27 Mar 2024 11:01:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.50.62.9 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711537320; cv=none; b=JNX585dxn1/aPhaBmZKuLRtzdUt9L9UdmPh65niJe5grE8HBQLpaYjzEKILG1y31hp89mLZKftvNCMpSkeG/8OliVO+hnBFCftG2/fNx5d3yiexwfJCEamg95Cdwm6qL/T0wn1/IRsyAnGRtE2ke7CqmAX8PUk3Ql6ni1J7/ty0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711537320; c=relaxed/simple; bh=mvzC3zJ36JM//DA+DACooA2x2bGYxkLRQfyMbLITm/E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uBeD9R/b40L66ElScTZdzB9p4DUUSKEV/Y0XEo0txaGNIHtb1vwU+Rw0J85HbWGTgT9nR7vSDIrjGpw7b3Zz0SaLcSigLoF4/qJIrf6ieHXdTyymEHZc8EIJ2UXPeuyXKhwL1+Qhi7x1Y2oR4vAlbsR0E87ch/jrejjAlCQEuA4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomide.com; spf=fail smtp.mailfrom=atomide.com; dkim=pass (2048-bit key) header.d=atomide.com header.i=@atomide.com header.b=CA0dYUg3; arc=none smtp.client-ip=74.50.62.9 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomide.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=atomide.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=atomide.com header.i=@atomide.com header.b="CA0dYUg3" Received: from localhost (91-158-86-216.elisa-laajakaista.fi [91.158.86.216]) by mail5.25mail.st (Postfix) with ESMTPSA id 9776F6088D; Wed, 27 Mar 2024 11:01:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=atomide.com; s=25mailst; t=1711537315; bh=mvzC3zJ36JM//DA+DACooA2x2bGYxkLRQfyMbLITm/E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CA0dYUg3biS+q1OX6qK1hkWT+3mhtWw2cOyavcwJImJMRWYDTeZlTHtHEPtZNmq1v nNxbykDaufV+z+poE9/vLepveY3UMOYZHSJYMNyY1pQW1dCtt9Jw3As9nLWtT/BDvL x0hUvFYZOA44RocFU7LKdrmYl9upj60E85uvmSd7UIWKXRPZWIkz6NfgIhiIVNGHCG hDSpf9ax0jrBvwKM9aESAF6ek7t0LIYQE+fmD5w8Or7h8wjf6LunVsVDeSLu7G8DFf Dm0byh5HZVXFnEojkiVGYbLYWXCYW18gvq0VOFkBHop+Zv17OoodI3PdMNFYPVLm3i 5tqwOzv1jaaYA== From: Tony Lindgren To: Greg Kroah-Hartman , Jiri Slaby , Jonathan Corbet , Petr Mladek , Steven Rostedt , John Ogness , Sergey Senozhatsky Cc: "David S . Miller" , Andy Shevchenko , Dhruva Gole , =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , Johan Hovold , Sebastian Andrzej Siewior , Vignesh Raghavendra , linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org, Sebastian Reichel , linux-doc@vger.kernel.org Subject: [PATCH v7 1/7] printk: Save console options for add_preferred_console_match() Date: Wed, 27 Mar 2024 12:59:35 +0200 Message-ID: <20240327110021.59793-2-tony@atomide.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240327110021.59793-1-tony@atomide.com> References: <20240327110021.59793-1-tony@atomide.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Driver subsystems may need to translate the preferred console name to the character device name used. We already do some of this in console_setup() with a few hardcoded names, but that does not scale well. The console options are parsed early in console_setup(), and the consoles are added with __add_preferred_console(). At this point we don't know much about the character device names and device drivers getting probed. To allow driver subsystems to set up a preferred console, let's save the kernel command line console options. To add a preferred console from a driver subsystem with optional character device name translation, let's add a new function add_preferred_console_match(). This allows the serial core layer to support console=3DDEVNAME:0.0 style hardware based addressing in addition to the current console=3DttyS0 style naming. And we can start moving console_setup() character device parsing to the driver subsystem specific code. We use a separate array from the console_cmdline array as the character device name and index may be unknown at the console_setup() time. And eventually there's no need to call __add_preferred_console() until the subsystem is ready to handle the console. Adding the console name in addition to the character device name, and a flag for an added console, could be added to the struct console_cmdline. And the console_cmdline array handling could be modified accordingly. But that complicates things compared saving the console options, and then adding the consoles when the subsystems handling the consoles are ready. Co-developed-by: Andy Shevchenko Signed-off-by: Tony Lindgren --- include/linux/printk.h | 3 + kernel/printk/Makefile | 2 +- kernel/printk/conopt.c | 146 ++++++++++++++++++++++++++++++++ kernel/printk/console_cmdline.h | 6 ++ kernel/printk/printk.c | 14 ++- 5 files changed, 167 insertions(+), 4 deletions(-) create mode 100644 kernel/printk/conopt.c diff --git a/include/linux/printk.h b/include/linux/printk.h --- a/include/linux/printk.h +++ b/include/linux/printk.h @@ -60,6 +60,9 @@ static inline const char *printk_skip_headers(const char = *buffer) #define CONSOLE_LOGLEVEL_DEFAULT CONFIG_CONSOLE_LOGLEVEL_DEFAULT #define CONSOLE_LOGLEVEL_QUIET CONFIG_CONSOLE_LOGLEVEL_QUIET =20 +int add_preferred_console_match(const char *match, const char *name, + const short idx); + extern int console_printk[]; =20 #define console_loglevel (console_printk[0]) diff --git a/kernel/printk/Makefile b/kernel/printk/Makefile --- a/kernel/printk/Makefile +++ b/kernel/printk/Makefile @@ -1,5 +1,5 @@ # SPDX-License-Identifier: GPL-2.0-only -obj-y =3D printk.o +obj-y =3D printk.o conopt.o obj-$(CONFIG_PRINTK) +=3D printk_safe.o nbcon.o obj-$(CONFIG_A11Y_BRAILLE_CONSOLE) +=3D braille.o obj-$(CONFIG_PRINTK_INDEX) +=3D index.o diff --git a/kernel/printk/conopt.c b/kernel/printk/conopt.c new file mode 100644 --- /dev/null +++ b/kernel/printk/conopt.c @@ -0,0 +1,146 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Kernel command line console options for hardware based addressing + * + * Copyright (C) 2023 Texas Instruments Incorporated - https://www.ti.com/ + * Author: Tony Lindgren + */ + +#include +#include +#include +#include + +#include + +#include "console_cmdline.h" + +/* + * Allow longer DEVNAME:0.0 style console naming such as abcd0000.serial:0= .0 + * in addition to the legacy ttyS0 style naming. + */ +#define CONSOLE_NAME_MAX 32 + +#define CONSOLE_OPT_MAX 16 +#define CONSOLE_BRL_OPT_MAX 16 + +struct console_option { + char name[CONSOLE_NAME_MAX]; + char opt[CONSOLE_OPT_MAX]; + char brl_opt[CONSOLE_BRL_OPT_MAX]; + u8 has_brl_opt:1; +}; + +/* Updated only at console_setup() time, no locking needed */ +static struct console_option conopt[MAX_CMDLINECONSOLES]; + +/** + * console_opt_save - Saves kernel command line console option for driver = use + * @str: Kernel command line console name and option + * @brl_opt: Braille console options + * + * Saves a kernel command line console option for driver subsystems to use= for + * adding a preferred console during init. Called from console_setup() onl= y. + * + * Return: 0 on success, negative error code on failure. + */ +int __init console_opt_save(const char *str, const char *brl_opt) +{ + struct console_option *con; + size_t namelen, optlen; + const char *opt; + int i; + + namelen =3D strcspn(str, ","); + if (namelen =3D=3D 0 || namelen >=3D CONSOLE_NAME_MAX) + return -EINVAL; + + opt =3D str + namelen; + if (*opt =3D=3D ',') + opt++; + + optlen =3D strlen(opt); + if (optlen >=3D CONSOLE_OPT_MAX) + return -EINVAL; + + for (i =3D 0; i < MAX_CMDLINECONSOLES; i++) { + con =3D &conopt[i]; + + if (con->name[0]) { + if (!strncmp(str, con->name, namelen)) + return 0; + continue; + } + + /* + * The name isn't terminated, only opt is. Empty opt is fine, + * but brl_opt can be either empty or NULL. For more info, see + * _braille_console_setup(). + */ + strscpy(con->name, str, namelen + 1); + strscpy(con->opt, opt, CONSOLE_OPT_MAX); + if (brl_opt) { + strscpy(con->brl_opt, brl_opt, CONSOLE_BRL_OPT_MAX); + con->has_brl_opt =3D 1; + } + + return 0; + } + + return -ENOMEM; +} + +static struct console_option *console_opt_find(const char *name) +{ + struct console_option *con; + int i; + + for (i =3D 0; i < MAX_CMDLINECONSOLES; i++) { + con =3D &conopt[i]; + if (!strcmp(name, con->name)) + return con; + } + + return NULL; +} + +/** + * add_preferred_console_match - Adds a preferred console if a match is fo= und + * @match: Expected console on kernel command line, such as console=3DDEVN= AME:0.0 + * @name: Name of the console character device to add such as ttyS + * @idx: Index for the console + * + * Allows driver subsystems to add a console after translating the command + * line name to the character device name used for the console. Options are + * added automatically based on the kernel command line. Duplicate preferr= ed + * consoles are ignored by __add_preferred_console(). + * + * Return: 0 on success, negative error code on failure. + */ +int add_preferred_console_match(const char *match, const char *name, + const short idx) +{ + struct console_option *con; + char *brl_opt =3D NULL; + + if (!match || !strlen(match) || !name || !strlen(name) || + idx < 0) + return -EINVAL; + + con =3D console_opt_find(match); + if (!con) + return -ENOENT; + + /* + * See __add_preferred_console(). It checks for NULL brl_options to set + * the preferred_console flag. Empty brl_opt instead of NULL leads into + * the preferred_console flag not set, and CON_CONSDEV not being set, + * and the boot console won't get disabled at the end of console_setup(). + */ + if (con->has_brl_opt) + brl_opt =3D con->brl_opt; + + console_opt_add_preferred_console(name, idx, con->opt, brl_opt); + + return 0; +} diff --git a/kernel/printk/console_cmdline.h b/kernel/printk/console_cmdlin= e.h --- a/kernel/printk/console_cmdline.h +++ b/kernel/printk/console_cmdline.h @@ -2,6 +2,12 @@ #ifndef _CONSOLE_CMDLINE_H #define _CONSOLE_CMDLINE_H =20 +#define MAX_CMDLINECONSOLES 8 + +int console_opt_save(const char *str, const char *brl_opt); +int console_opt_add_preferred_console(const char *name, const short idx, + char *options, char *brl_options); + struct console_cmdline { char name[16]; /* Name of the driver */ diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -383,9 +383,6 @@ static int console_locked; /* * Array of consoles built from command line options (console=3D) */ - -#define MAX_CMDLINECONSOLES 8 - static struct console_cmdline console_cmdline[MAX_CMDLINECONSOLES]; =20 static int preferred_console =3D -1; @@ -2497,6 +2494,10 @@ static int __init console_setup(char *str) if (_braille_console_setup(&str, &brl_options)) return 1; =20 + /* Save the console for driver subsystem use */ + if (console_opt_save(str, brl_options)) + return 1; + /* * Decode str into name, index, options. */ @@ -2527,6 +2528,13 @@ static int __init console_setup(char *str) } __setup("console=3D", console_setup); =20 +/* Only called from add_preferred_console_match() */ +int console_opt_add_preferred_console(const char *name, const short idx, + char *options, char *brl_options) +{ + return __add_preferred_console(name, idx, options, brl_options, true); +} + /** * add_preferred_console - add a device to the list of preferred consoles. * @name: device name --=20 2.44.0 From nobody Wed Dec 17 23:02:30 2025 Received: from mail5.25mail.st (mail5.25mail.st [74.50.62.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 69E6138FA1; Wed, 27 Mar 2024 11:02:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.50.62.9 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711537361; cv=none; b=Wo6Jkdo5wDJtdcYDC4mJ9MBjKz5Qi14nNztgfB9n0BAr9UTI68HpDs3oFYC9LcVFxWwsMUY7bnoRfmsbtn7xbG+NUOW2w9ijkWMwkN9ooedvoncEU+3vNelA5VPViucXcj3zUDh9YdeFPh20RLdh1rxAeGd9V3xy+utTfC519kk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711537361; c=relaxed/simple; bh=G/4vgZPxWH/R6/+uOrquQYX/hYERIpcpxtIlcfA8+rw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Vr7FTfYVrQQzszXlg8j8bQsF1wqofR3APJ8QnpvYeYbE08ZclL2s3W6rUXfyBWi6Ld1STnGFqZ157vKakMSIpM/BwlM93bzeYd24dkJ+sHSPkZhuqbFKyH+3hBkRUz7rRVyeVlVXfiDf5MCcgKM1fG+JktTU9Pf+vhVDYiI4Kok= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomide.com; spf=fail smtp.mailfrom=atomide.com; dkim=pass (2048-bit key) header.d=atomide.com header.i=@atomide.com header.b=Q10j6g4b; arc=none smtp.client-ip=74.50.62.9 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomide.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=atomide.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=atomide.com header.i=@atomide.com header.b="Q10j6g4b" Received: from localhost (91-158-86-216.elisa-laajakaista.fi [91.158.86.216]) by mail5.25mail.st (Postfix) with ESMTPSA id 246DD60868; Wed, 27 Mar 2024 11:02:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=atomide.com; s=25mailst; t=1711537359; bh=G/4vgZPxWH/R6/+uOrquQYX/hYERIpcpxtIlcfA8+rw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Q10j6g4byFMzVt8WXX5cAgR7Ap0Nhzqd6ZjBYrGZJZwXr1vEfyXlRLoHu0LXBb5Ij uhiaw6lhkORt6+H8vHQ0Lt0CsIGY6MAwD8Ghvu0D0pRosshsE2CORQezS6SACgVh0/ 0pzFQW0mMqrfNsBO8v+bz8/f1hvS5ZfryvWEDeNpz3Uvt0GaD2mwVJk//d0fwPdFHG 76XQqBokH7EoC2Wfdzbe5DkDrGzz6/10xFWwU2yUdFzSwCX6FEXNyLyftz/4AbOsCN kGmJFRXNDnZNKGkgeLUkTLYtDaVtVwINz0mwACObM1Z3+1MJdYqkMPd4Yn/HYf25yc A9nP8itmf/cNg== From: Tony Lindgren To: Greg Kroah-Hartman , Jiri Slaby , Jonathan Corbet , Petr Mladek , Steven Rostedt , John Ogness , Sergey Senozhatsky Cc: "David S . Miller" , Andy Shevchenko , Dhruva Gole , =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , Johan Hovold , Sebastian Andrzej Siewior , Vignesh Raghavendra , linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org, Sebastian Reichel , linux-doc@vger.kernel.org Subject: [PATCH v7 2/7] printk: Don't try to parse DEVNAME:0.0 console options Date: Wed, 27 Mar 2024 12:59:36 +0200 Message-ID: <20240327110021.59793-3-tony@atomide.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240327110021.59793-1-tony@atomide.com> References: <20240327110021.59793-1-tony@atomide.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Currently console_setup() tries to make a console index out of any digits passed in the kernel command line for console. In the DEVNAME:0.0 case, the name can contain a device IO address, so bail out on console names with a ':'. Signed-off-by: Tony Lindgren --- kernel/printk/printk.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -2498,6 +2498,10 @@ static int __init console_setup(char *str) if (console_opt_save(str, brl_options)) return 1; =20 + /* Don't attempt to parse a DEVNAME:0.0 style console */ + if (strchr(str, ':')) + return 1; + /* * Decode str into name, index, options. */ --=20 2.44.0 From nobody Wed Dec 17 23:02:30 2025 Received: from mail5.25mail.st (mail5.25mail.st [74.50.62.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6D38454760; Wed, 27 Mar 2024 11:03:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.50.62.9 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711537404; cv=none; b=fLZRzo+h1qY6HL8X+9GN1OGOnc/iTzq3lxjTwkggfQrYzMGgQqlp4ha5LnqF0mweg8C34r6DVeNfi5L7GgB9e48iEoKQeP+LAxB+g9SGXXtEb27oZ4/sUhwFU1gMsElQh4zboD+uofQu//gGTc9GC6soZI4oh2T9/9xI+1GoPL0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711537404; c=relaxed/simple; bh=vUly8NV1gJ6HwWIMN43IuZorZ85oWvydp9mvQMeOnUs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YwbeGGBsgfGBJ8S8AgGzpWMVZ/6JwDKOzlKoxTkKEzswcHXQiyFAIy/Nn9277r9IKdGgZVJsTUeac2ZFcDOMi58L93u8Aj8lo+hb/vxfifIWalkKW085DTstnvTvbdSoWqmJHvfuADN30Th1wb0cedyNYjVnhQ6VmHhE3izqb9I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomide.com; spf=fail smtp.mailfrom=atomide.com; dkim=pass (2048-bit key) header.d=atomide.com header.i=@atomide.com header.b=bjPfJkNR; arc=none smtp.client-ip=74.50.62.9 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomide.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=atomide.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=atomide.com header.i=@atomide.com header.b="bjPfJkNR" Received: from localhost (91-158-86-216.elisa-laajakaista.fi [91.158.86.216]) by mail5.25mail.st (Postfix) with ESMTPSA id BF050604C8; Wed, 27 Mar 2024 11:02:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=atomide.com; s=25mailst; t=1711537402; bh=vUly8NV1gJ6HwWIMN43IuZorZ85oWvydp9mvQMeOnUs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=bjPfJkNRpv5ngZ2eGer1lsoLomOM7dTQfZAUJ8L6WksEX0Pzjoh2tIVyXQZ56QrLd BMBBV6TOSf1ouheIxqZp2smMRTkEXoezDnOd0lexQk4MxtK1gy3n0d4PoHffrdYl2p Lo2eX71v4VtFoOHwUGPpoQXp66UtzhNG7oeg84QVvfkBSKxAV/kZaWOdluIQjgKkUs ZpuVuk+gvVQpjV6gr+AlWGAYF77u42YTgzEHB3+vWFw1K36hg3Dfkuk+vSP+24sUNP XKurHZtVnH3K2FiyHqdw0k9urpYRaaLnELZmCJM5WCXtDG7N6nnch9OFdwdxIlzqz0 aAs0Mmem5STYA== From: Tony Lindgren To: Greg Kroah-Hartman , Jiri Slaby , Jonathan Corbet , Petr Mladek , Steven Rostedt , John Ogness , Sergey Senozhatsky Cc: "David S . Miller" , Andy Shevchenko , Dhruva Gole , =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , Johan Hovold , Sebastian Andrzej Siewior , Vignesh Raghavendra , linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org, Sebastian Reichel , linux-doc@vger.kernel.org Subject: [PATCH v7 3/7] printk: Flag register_console() if console is set on command line Date: Wed, 27 Mar 2024 12:59:37 +0200 Message-ID: <20240327110021.59793-4-tony@atomide.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240327110021.59793-1-tony@atomide.com> References: <20240327110021.59793-1-tony@atomide.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" If add_preferred_console() is not called early in setup_console(), we can end up having register_console() call try_enable_default_console() before a console device has called add_preferred_console(). Let's set console_set_on_cmdline flag in console_setup() to prevent this from happening. Signed-off-by: Tony Lindgren --- kernel/printk/printk.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -2498,6 +2498,9 @@ static int __init console_setup(char *str) if (console_opt_save(str, brl_options)) return 1; =20 + /* Flag register_console() to not call try_enable_default_console() */ + console_set_on_cmdline =3D 1; + /* Don't attempt to parse a DEVNAME:0.0 style console */ if (strchr(str, ':')) return 1; @@ -3501,7 +3504,7 @@ void register_console(struct console *newcon) * Note that a console with tty binding will have CON_CONSDEV * flag set and will be first in the list. */ - if (preferred_console < 0) { + if (preferred_console < 0 && !console_set_on_cmdline) { if (hlist_empty(&console_list) || !console_first()->device || console_first()->flags & CON_BOOT) { try_enable_default_console(newcon); --=20 2.44.0 From nobody Wed Dec 17 23:02:30 2025 Received: from mail5.25mail.st (mail5.25mail.st [74.50.62.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3E9B93A1DF; Wed, 27 Mar 2024 11:04:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.50.62.9 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711537448; cv=none; b=NbquMz/i6e8bxbqXuoA/JlfQvBNeARi0NZT1ki6jnroasFTEpBh3M3X+iOiMn3gWIPOId/HeKjn0A8MWlPX80II/MtFSjU6sG9ltFY3ASdABwsoTNkgNAfcS5JVh+hq4i2DXKhdZtSjetS33s6NlH214YMjC4YlhWxnCYGjcfPI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711537448; c=relaxed/simple; bh=Nq4W15qk5Qscu+9QrbTPKtZJVzvCRtdBGJRUbYT6ECg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kYNrSdUEfs2LHrTi4HO0BluDT64W4vpjsb3zkgw2e0U3LiHyJV8vgTYUbhTSBFkV3m+GemKO9aDkBqgF3DJ+zwWAb67pqOYrKY0mQgvZ1rieztRahiwlLgLjzF+Cj+lwQed75HT4Vo0wQfL5NMbEftLLaIgpIqwmt6w3nr3CKnc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomide.com; spf=fail smtp.mailfrom=atomide.com; dkim=pass (2048-bit key) header.d=atomide.com header.i=@atomide.com header.b=or3UZQaQ; arc=none smtp.client-ip=74.50.62.9 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomide.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=atomide.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=atomide.com header.i=@atomide.com header.b="or3UZQaQ" Received: from localhost (91-158-86-216.elisa-laajakaista.fi [91.158.86.216]) by mail5.25mail.st (Postfix) with ESMTPSA id 2EF22604C8; Wed, 27 Mar 2024 11:03:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=atomide.com; s=25mailst; t=1711537446; bh=Nq4W15qk5Qscu+9QrbTPKtZJVzvCRtdBGJRUbYT6ECg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=or3UZQaQXCTSAg6itVzTcpMshcMzB8BNvzp+ZmgWm79XL4ofyGmqIYS6bJN54lro+ McWe4f+Up+SXk5sPlHcHFyMgCEzGe8G7XJjsofCAz9eptD7YFoBIpevTAiuu5hP40F O+hO7NLcuCR+gMXxRGes+CLpy/0yOiemXB7LR90xDhxma9MCM9r6wb7yh2miK6pgbo claRmahXaoZ637jWpPHEdTaKU0fhQKc8QAB9K4c6lJwHBJqYskPCGfSgh+QPEwdeO/ YzINE8UylyoTRZRuTvwzQFN11aKO/YPgYz/vOFbP1gtTm6k4KI4rC42vubrBIB8N8n TXbYrhaHZS1HA== From: Tony Lindgren To: Greg Kroah-Hartman , Jiri Slaby , Jonathan Corbet , Petr Mladek , Steven Rostedt , John Ogness , Sergey Senozhatsky Cc: "David S . Miller" , Andy Shevchenko , Dhruva Gole , =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , Johan Hovold , Sebastian Andrzej Siewior , Vignesh Raghavendra , linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org, Sebastian Reichel , linux-doc@vger.kernel.org Subject: [PATCH v7 4/7] serial: core: Add support for DEVNAME:0.0 style naming for kernel console Date: Wed, 27 Mar 2024 12:59:38 +0200 Message-ID: <20240327110021.59793-5-tony@atomide.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240327110021.59793-1-tony@atomide.com> References: <20240327110021.59793-1-tony@atomide.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" We can now add hardware based addressing for serial ports. Starting with commit 84a9582fd203 ("serial: core: Start managing serial controllers to enable runtime PM"), and all the related fixes to this commit, the serial core now knows to which serial port controller the ports are connected. The serial ports can be addressed with DEVNAME:0.0 style naming. The names are something like 00:04:0.0 for a serial port on qemu, and something like 2800000.serial:0.0 on platform device using systems like ARM64 for example. The DEVNAME is the unique serial port hardware controller device name, AKA the name for port->dev. The 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. Using DEVNAME:0.0 style naming actually solves two long term issues for addressing the serial ports: 1. According to Andy Shevchenko, using DEVNAME:0.0 style naming fixes an issue where depending on the BIOS settings, the kernel serial port ttyS instance number may change if HSUART is enabled 2. Device tree using architectures no longer necessarily need to specify aliases to find a specific serial port, and we can just allocate the ttyS instance numbers dynamically in whatever probe order To do this, let's match the hardware addressing style console name to the character device name used, and add a preferred console using the character device name. Note that when using console=3DDEVNAME:0.0 style kernel command line, the 8250 serial console gets enabled later compared to using console=3DttyS naming for ISA ports. This is because the serial port DEVNAME to character device mapping is not known until the serial driver probe time. If used together with earlycon, this issue is avoided. Signed-off-by: Tony Lindgren Reviewed-by: Dhruva Gole --- drivers/tty/serial/serial_base.h | 16 +++++++ drivers/tty/serial/serial_base_bus.c | 66 ++++++++++++++++++++++++++++ drivers/tty/serial/serial_core.c | 4 ++ 3 files changed, 86 insertions(+) diff --git a/drivers/tty/serial/serial_base.h b/drivers/tty/serial/serial_b= ase.h --- a/drivers/tty/serial/serial_base.h +++ b/drivers/tty/serial/serial_base.h @@ -45,3 +45,19 @@ void serial_ctrl_unregister_port(struct uart_driver *drv= , struct uart_port *port =20 int serial_core_register_port(struct uart_driver *drv, struct uart_port *p= ort); void serial_core_unregister_port(struct uart_driver *drv, struct uart_port= *port); + +#ifdef CONFIG_SERIAL_CORE_CONSOLE + +int serial_base_add_preferred_console(struct uart_driver *drv, + struct uart_port *port); + +#else + +static inline +int serial_base_add_preferred_console(struct uart_driver *drv, + struct uart_port *port) +{ + return 0; +} + +#endif diff --git a/drivers/tty/serial/serial_base_bus.c b/drivers/tty/serial/seri= al_base_bus.c --- a/drivers/tty/serial/serial_base_bus.c +++ b/drivers/tty/serial/serial_base_bus.c @@ -8,6 +8,7 @@ * The serial core bus manages the serial core controller instances. */ =20 +#include #include #include #include @@ -204,6 +205,71 @@ void serial_base_port_device_remove(struct serial_port= _device *port_dev) put_device(&port_dev->dev); } =20 +#ifdef CONFIG_SERIAL_CORE_CONSOLE + +static int serial_base_add_one_prefcon(const char *match, const char *dev_= name, + int port_id) +{ + int ret; + + ret =3D add_preferred_console_match(match, dev_name, port_id); + if (ret =3D=3D -ENOENT) + return 0; + + return ret; +} + +static int serial_base_add_prefcon(const char *name, int idx) +{ + const char *char_match __free(kfree) =3D NULL; + + /* Handle the traditional character device name style console=3DttyS0 */ + char_match =3D kasprintf(GFP_KERNEL, "%s%i", name, idx); + if (!char_match) + return -ENOMEM; + + return serial_base_add_one_prefcon(char_match, name, idx); +} + +/** + * serial_base_add_preferred_console - Adds a preferred console + * @drv: Serial port device driver + * @port: Serial port instance + * + * Tries to add a preferred console for a serial port if specified in the + * kernel command line. Supports both the traditional character device such + * as console=3DttyS0, and a hardware addressing based console=3DDEVNAME:0= .0 + * style name. + * + * Translates the kernel command line option using a hardware based addres= sing + * console=3DDEVNAME:0.0 to the serial port character device such as ttyS0. + * Cannot be called early for ISA ports, depends on struct device. + * + * Note that duplicates are ignored by add_preferred_console(). + * + * Return: 0 on success, negative error code on failure. + */ +int serial_base_add_preferred_console(struct uart_driver *drv, + struct uart_port *port) +{ + const char *port_match __free(kfree) =3D NULL; + int ret; + + ret =3D serial_base_add_prefcon(drv->dev_name, port->line); + if (ret) + return ret; + + port_match =3D kasprintf(GFP_KERNEL, "%s:%i.%i", dev_name(port->dev), + port->ctrl_id, port->port_id); + if (!port_match) + return -ENOMEM; + + /* Translate a hardware addressing style console=3DDEVNAME:0.0 */ + return serial_base_add_one_prefcon(port_match, drv->dev_name, port->line); +} + +#endif + static int serial_base_init(void) { int ret; diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_c= ore.c --- a/drivers/tty/serial/serial_core.c +++ b/drivers/tty/serial/serial_core.c @@ -3407,6 +3407,10 @@ int serial_core_register_port(struct uart_driver *dr= v, struct uart_port *port) if (ret) goto err_unregister_ctrl_dev; =20 + ret =3D serial_base_add_preferred_console(drv, port); + if (ret) + goto err_unregister_port_dev; + ret =3D serial_core_add_one_port(drv, port); if (ret) goto err_unregister_port_dev; --=20 2.44.0 From nobody Wed Dec 17 23:02:30 2025 Received: from mail5.25mail.st (mail5.25mail.st [74.50.62.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1EDC71CA87; Wed, 27 Mar 2024 11:04:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.50.62.9 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711537494; cv=none; b=hVcGWJNZthfnvMjCZkN0b7oQsKhIo4fv0rA0ZxMhAvD8rJMRJHVRNpf5vIbW3Vw8XdGUpYw4Tn0prA8x36A6qGXNgA+TLUz+Br7Rveyy1keW7EkzFER4NOC+VetqDWNXKy1eUjZr2tEfbr/6R6Ssk2HhoyctFbqgS5xuHgZP2RY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711537494; c=relaxed/simple; bh=FVa5bi1yq0xqqzfDtP5OhrFMjnS0wCkQGnO4ANrGaIY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iZHRjgyQevlNF6Ot1//xbgw127Jw18oJe9ynZJkcgGAoQinSdxGGUyeuF8jmGOgifrS19+e2n8LqVxkTV5IuKhQOMpwNZKdCadJO2YLrGrPRPBEiYb2rsg0AuCjbtmPIW+0wYU35S61xXeOUtEpO/8IliabMkZHWxJlQXnXfvak= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomide.com; spf=fail smtp.mailfrom=atomide.com; dkim=pass (2048-bit key) header.d=atomide.com header.i=@atomide.com header.b=E78haD/l; arc=none smtp.client-ip=74.50.62.9 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomide.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=atomide.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=atomide.com header.i=@atomide.com header.b="E78haD/l" Received: from localhost (91-158-86-216.elisa-laajakaista.fi [91.158.86.216]) by mail5.25mail.st (Postfix) with ESMTPSA id DCA65604C8; Wed, 27 Mar 2024 11:04:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=atomide.com; s=25mailst; t=1711537490; bh=FVa5bi1yq0xqqzfDtP5OhrFMjnS0wCkQGnO4ANrGaIY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=E78haD/lP+5ZeHx6W02O895pt9KyLcJ1lCN5xn6RvQjXOJwhp8hoIVNSetyk8MbBs oOrHHm4BRTFP1EIPRAGzKQZRSWc9diEGPwn0pYcpcFKPx0HZLbzdVe3br1k1t9xMU/ aFViEEAxS0j4OGYa3bRFVVEbCj1ABYMS+580VDe6l8yC0jGtxhU2Te28uy9gLbXWcT gYQyiKY2l9/K27DuVuVHY0b6tCe6cYgcujqIW6ANcUui/Tsw/5f38SYhWdOFOw4Sk3 q7ye56PdUCalsZh9H04+ZKjacM6nGKfzlKpYagztTm6h23pOg7P4UhZBk+rr7tS+3P h7hqOgQKCFB7g== From: Tony Lindgren To: Greg Kroah-Hartman , Jiri Slaby , Jonathan Corbet , Petr Mladek , Steven Rostedt , John Ogness , Sergey Senozhatsky Cc: "David S . Miller" , Andy Shevchenko , Dhruva Gole , =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , Johan Hovold , Sebastian Andrzej Siewior , Vignesh Raghavendra , linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org, Sebastian Reichel , linux-doc@vger.kernel.org Subject: [PATCH v7 5/7] serial: core: Handle serial console options Date: Wed, 27 Mar 2024 12:59:39 +0200 Message-ID: <20240327110021.59793-6-tony@atomide.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240327110021.59793-1-tony@atomide.com> References: <20240327110021.59793-1-tony@atomide.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In order to start moving the serial console quirks out of console_setup(), let's add parsing for the quirks to the serial core layer. We can use serial_base_add_one_prefcon() to handle the quirks. Note that eventually we may want to set up driver specific console quirk handling for the serial port device drivers to use. But we need to figure out which driver(s) need to call the quirk. So for now, we just handle the sparc quirk directly. Signed-off-by: Tony Lindgren --- drivers/tty/serial/serial_base_bus.c | 49 ++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/drivers/tty/serial/serial_base_bus.c b/drivers/tty/serial/seri= al_base_bus.c --- a/drivers/tty/serial/serial_base_bus.c +++ b/drivers/tty/serial/serial_base_bus.c @@ -219,9 +219,58 @@ static int serial_base_add_one_prefcon(const char *mat= ch, const char *dev_name, return ret; } =20 +#ifdef __sparc__ + +/* Handle Sparc ttya and ttyb options as done in console_setup() */ +static int serial_base_add_sparc_console(const char *dev_name, int idx) +{ + const char *name; + + switch (idx) { + case 0: + name =3D "ttya"; + break; + case 1: + name =3D "ttyb"; + break; + default: + return 0; + } + + return serial_base_add_one_prefcon(name, dev_name, idx); +} + +#else + +static inline int serial_base_add_sparc_console(const char *dev_name, int = idx) +{ + return 0; +} + +#endif + static int serial_base_add_prefcon(const char *name, int idx) { const char *char_match __free(kfree) =3D NULL; + const char *nmbr_match __free(kfree) =3D NULL; + int ret; + + /* Handle ttyS specific options */ + if (strstarts(name, "ttyS")) { + /* No name, just a number */ + nmbr_match =3D kasprintf(GFP_KERNEL, "%i", idx); + if (!nmbr_match) + return -ENODEV; + + ret =3D serial_base_add_one_prefcon(nmbr_match, name, idx); + if (ret) + return ret; + + /* Sparc ttya and ttyb */ + ret =3D serial_base_add_sparc_console(name, idx); + if (ret) + return ret; + } =20 /* Handle the traditional character device name style console=3DttyS0 */ char_match =3D kasprintf(GFP_KERNEL, "%s%i", name, idx); --=20 2.44.0 From nobody Wed Dec 17 23:02:30 2025 Received: from mail5.25mail.st (mail5.25mail.st [74.50.62.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6E9795466A; Wed, 27 Mar 2024 11:05:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.50.62.9 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711537535; cv=none; b=ax8l+H/dCj/f74EYxe87lgQRPP/GSSXmKW60X9PO59uqYWHFW6kxWveSlYjARwXi70ZdRHQEiGPt54KpjKinjoo/7nIQCld6I8w4c7LEfBtBGZcriichex4x/NZIDSDgnz6ahEu3RfOVlYcsQCKVLEy8tLGT2E3A4Pszw+RYNy8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711537535; c=relaxed/simple; bh=IAiG7Iel/I/NB72gzfGSIwR3l5+5tuvxdr9L53z4X4g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Eodl3LMbJ7cbsG1A5cWQ769vPmt9alwCmP7l185j+vwGHsrKMcyLXjBjtpFs3AVq3ZgPjXjhORZNQaI9xxdWgUGMWu+nLgbh8md3gJltkEowCjI+ByuxkMVpsBAUAaJeGMtxPQ27bq4gsuw/lvUWyWIV0BSsI3prlxBn2iUTN3M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomide.com; spf=fail smtp.mailfrom=atomide.com; dkim=pass (2048-bit key) header.d=atomide.com header.i=@atomide.com header.b=obUAKFFT; arc=none smtp.client-ip=74.50.62.9 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomide.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=atomide.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=atomide.com header.i=@atomide.com header.b="obUAKFFT" Received: from localhost (91-158-86-216.elisa-laajakaista.fi [91.158.86.216]) by mail5.25mail.st (Postfix) with ESMTPSA id 94730604C8; Wed, 27 Mar 2024 11:04:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=atomide.com; s=25mailst; t=1711537533; bh=IAiG7Iel/I/NB72gzfGSIwR3l5+5tuvxdr9L53z4X4g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=obUAKFFT/XlFjk6L0ylNfMhGcQYe8HOghL+haCxCjjTrEqmtOLKnq2kj9hRpZkR66 EAYb0t3sw2bzccSGy8JH0HltMfDfEnQ3nokv+M2caTC3NUQd5CvcNqhiV+CV3VY7A7 pR7OXiibV6+LdnAIz1RlUIbmzG9pYsN+6V4DC1fiPV/e0cvW5Rt+4uYSGsHnVGTiaj IbtcoTXBQaxotftVnJXrfTv87X7AhGrPYcbgXSNS01DvzyN/0gLYwPfsOXlegPJEs9 Tsj0lDQ1mKVmGgJTOakfMAq4gw1XlLtMBp40qG/rLZ/w8wMNMqkf0rjI8GaqatGoWQ h/rXKzBSqhEAA== From: Tony Lindgren To: Greg Kroah-Hartman , Jiri Slaby , Jonathan Corbet , Petr Mladek , Steven Rostedt , John Ogness , Sergey Senozhatsky Cc: "David S . Miller" , Andy Shevchenko , Dhruva Gole , =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , Johan Hovold , Sebastian Andrzej Siewior , Vignesh Raghavendra , linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org, Sebastian Reichel , linux-doc@vger.kernel.org Subject: [PATCH v7 6/7] serial: 8250: Add preferred console in serial8250_isa_init_ports() Date: Wed, 27 Mar 2024 12:59:40 +0200 Message-ID: <20240327110021.59793-7-tony@atomide.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240327110021.59793-1-tony@atomide.com> References: <20240327110021.59793-1-tony@atomide.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Prepare 8250 ISA ports to drop kernel command line serial console handling from console_setup(). We need to set the preferred console in serial8250_isa_init_ports() to drop a dependency to setup_console() handling the ttyS related quirks. Otherwise when console_setup() handles the ttyS related options, console gets enabled only at driver probe time. Note that this mostly affects x86 as this happens based on define SERIAL_PORT_DFNS. Signed-off-by: Tony Lindgren --- drivers/tty/serial/8250/8250_core.c | 5 +++++ drivers/tty/serial/serial_base.h | 8 ++++++++ drivers/tty/serial/serial_base_bus.c | 21 +++++++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/= 8250_core.c --- a/drivers/tty/serial/8250/8250_core.c +++ b/drivers/tty/serial/8250/8250_core.c @@ -15,6 +15,7 @@ */ =20 #include +#include #include #include #include @@ -41,6 +42,8 @@ =20 #include =20 +#include "../serial_base.h" /* For serial_base_add_isa_preferred_console()= */ + #include "8250.h" =20 /* @@ -563,6 +566,8 @@ static void __init serial8250_isa_init_ports(void) port->irqflags |=3D irqflag; if (serial8250_isa_config !=3D NULL) serial8250_isa_config(i, &up->port, &up->capabilities); + + serial_base_add_isa_preferred_console(serial8250_reg.dev_name, i); } } =20 diff --git a/drivers/tty/serial/serial_base.h b/drivers/tty/serial/serial_b= ase.h --- a/drivers/tty/serial/serial_base.h +++ b/drivers/tty/serial/serial_base.h @@ -51,6 +51,8 @@ void serial_core_unregister_port(struct uart_driver *drv,= struct uart_port *port int serial_base_add_preferred_console(struct uart_driver *drv, struct uart_port *port); =20 +int serial_base_add_isa_preferred_console(const char *name, int idx); + #else =20 static inline @@ -60,4 +62,10 @@ int serial_base_add_preferred_console(struct uart_driver= *drv, return 0; } =20 +static inline +int serial_base_add_isa_preferred_console(const char *name, int idx) +{ + return 0; +} + #endif diff --git a/drivers/tty/serial/serial_base_bus.c b/drivers/tty/serial/seri= al_base_bus.c --- a/drivers/tty/serial/serial_base_bus.c +++ b/drivers/tty/serial/serial_base_bus.c @@ -317,6 +317,27 @@ int serial_base_add_preferred_console(struct uart_driv= er *drv, return serial_base_add_one_prefcon(port_match, drv->dev_name, port->line); } =20 +#ifdef CONFIG_SERIAL_8250_CONSOLE + +/* + * Early ISA ports initialize the console before there is no struct device. + * This should be only called from serial8250_isa_init_preferred_console(), + * other callers are likely wrong and should rely on earlycon instead. + */ +int serial_base_add_isa_preferred_console(const char *name, int idx) +{ + return serial_base_add_prefcon(name, idx); +} + +#else + +int serial_base_add_isa_preferred_console(const char *name, int idx) +{ + return 0; +} + +#endif + #endif =20 static int serial_base_init(void) --=20 2.44.0 From nobody Wed Dec 17 23:02:30 2025 Received: from mail5.25mail.st (mail5.25mail.st [74.50.62.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4B2CB1CA87; Wed, 27 Mar 2024 11:06:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.50.62.9 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711537580; cv=none; b=Ie/0EdTwjTlr+ZrKNiuEaLWHd0DHmtjC4DAzlCOccT1LHHnKSyggRHjAFBarO9/W2+Q8HLA2cFBTgCXEirtgkCeGpQtBAT+OeI2U4l4I7S3s8XVwhiDMqMOjckpa134XNBuoNt9I4n8xnTSoOhV5005mE7bUTl/3acXwJdnmvcg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711537580; c=relaxed/simple; bh=hZErjMhbMur3G6+yLs7/2PSHAumNUkNnSGgGasOMYD8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=n11SqeeqS1YKfXBJ+CCVb6kEEUxC/+n9z/csT82VZXttD0sG09kRDvcGF/eMX9tL6hRiMb+WwthHS5wE3UXsX602OnxJDJ5RH1YLNsna88KACGTCsMfAqvAlazdfpHSe4cZUodcR0jD9pzsPmCe8z0qWns8sRS+hEZFlACW6cDw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomide.com; spf=fail smtp.mailfrom=atomide.com; dkim=pass (2048-bit key) header.d=atomide.com header.i=@atomide.com header.b=r7A/g2cc; arc=none smtp.client-ip=74.50.62.9 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomide.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=atomide.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=atomide.com header.i=@atomide.com header.b="r7A/g2cc" Received: from localhost (91-158-86-216.elisa-laajakaista.fi [91.158.86.216]) by mail5.25mail.st (Postfix) with ESMTPSA id 5C986604C8; Wed, 27 Mar 2024 11:05:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=atomide.com; s=25mailst; t=1711537577; bh=hZErjMhbMur3G6+yLs7/2PSHAumNUkNnSGgGasOMYD8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=r7A/g2ccUWCSqiKzLQs+I7VY2TayELWt2El9JI+6jUY943RhaHZdMz02xhMAjihkJ ZVtTvGaTcJejjJfM+anyF4yeBOFC1OltUMv+bgbYpa0v2ynvX1kbk1gNIx4LEEWUWd QI4ceyB2ytp+AZBjdv4h+FlBV58ZbuLxPj6Z4e7W//nZHqeN1siNTGNO8fipPZO4D5 AkAgruKQWGmN0zQMhQJ0p2+eMd1J/30u2kOt00rLkoFqlKh8X6ZpciLbO20HuggUST wjrpshtGzhzCCEC6+5jAAOiSlKm+6L8mbJuqwbpfVq4EebtJBWTF+QW9KSnQhWEz0y GJe8AIIOQQDvA== From: Tony Lindgren To: Greg Kroah-Hartman , Jiri Slaby , Jonathan Corbet , Petr Mladek , Steven Rostedt , John Ogness , Sergey Senozhatsky Cc: "David S . Miller" , Andy Shevchenko , Dhruva Gole , =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , Johan Hovold , Sebastian Andrzej Siewior , Vignesh Raghavendra , linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org, Sebastian Reichel , linux-doc@vger.kernel.org Subject: [PATCH v7 7/7] Documentation: kernel-parameters: Add DEVNAME:0.0 format for serial ports Date: Wed, 27 Mar 2024 12:59:41 +0200 Message-ID: <20240327110021.59793-8-tony@atomide.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240327110021.59793-1-tony@atomide.com> References: <20240327110021.59793-1-tony@atomide.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Document the console option for DEVNAME:0.0 style addressing for serial ports. Suggested-by: Sebastian Reichel Signed-off-by: Tony Lindgren Reviewed-by: Dhruva Gole --- .../admin-guide/kernel-parameters.txt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentatio= n/admin-guide/kernel-parameters.txt --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -785,6 +785,25 @@ Documentation/networking/netconsole.rst for an alternative. =20 + :.[,options] + Use the specified serial port on the serial core bus. + The addressing uses DEVNAME of the physical serial port + device, followed by the serial core controller instance, + and the serial port instance. The options are the same + as documented for the ttyS addressing above. + + The mapping of the serial ports to the tty instances + can be viewed with: + + $ ls -d /sys/bus/serial-base/devices/*:*.*/tty/* + /sys/bus/serial-base/devices/00:04:0.0/tty/ttyS0 + + In the above example, the console can be addressed with + console=3D00:04:0.0. Note that a console addressed this + way will only get added when the related device driver + is ready. The use of an earlycon parameter in addition to + the console may be desired for console output early on. + uart[8250],io,[,options] uart[8250],mmio,[,options] uart[8250],mmio16,[,options] --=20 2.44.0