From patchwork Mon Dec 18 07:09:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Lindgren X-Patchwork-Id: 180168 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:24d3:b0:fb:cd0c:d3e with SMTP id r19csp1075132dyi; Sun, 17 Dec 2023 23:12:45 -0800 (PST) X-Google-Smtp-Source: AGHT+IGX0l67Qc5TqbmiqXLMFMeC45iLM/PuSfC6U8GLXd2W5baAgwuB0HtUyRiIVBhwJ2Vw0aY/ X-Received: by 2002:a05:6a20:1b0a:b0:18f:c339:3fc9 with SMTP id ch10-20020a056a201b0a00b0018fc3393fc9mr17619708pzb.15.1702883565053; Sun, 17 Dec 2023 23:12:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702883565; cv=none; d=google.com; s=arc-20160816; b=Y8ATqkN+xFoZdC970dJfIssmdnu5yU6f+m+Q1RJYAFAHZs2rKY+q1VAU23Z5BQeb7w jKEv8eG+xoe7bYKhoXe0FTzMmCfi1/13IwkeT9o7AUoa5tGo+ihm0VxEjxsVCbby05ll rW3E0WdBpug1tXKWWx3vXUMKFg82hkRRm5Ps5ghsnA8QkvZgA6pAN+7lUvaSHzZiz+b4 TiKmvGW7U1MzBiWLGfLHX4z1jLBaVxW1jG1x61MecFvRu8YpxS24AxgCbxVAFRLzwljh s0vXoRDMjgHfGf7RMX3NMfrY//fM8fZyagm+KQxeI8vS9ymk07dV4uMWanz2cXvlgrtT pCww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=2kyoFM4J7TiYQeCNvH8NN/P93FCCgChMZlCFAEw8R+k=; fh=OQrZIrddo55Tm+afxTOsnGwFgD38y2NNd7tU+1OGSCE=; b=dnWU8cJjlrtdsqYhP9N5a3pK7p2IRCJH5y5aOOZHaBDlMS8fGvLPQwDXkZeki4WuNd rgajifGj5PjbVB4jqV2M/twQWOWKH/lXHexgEN9oHSoEdgNjWAPQbUDeLz0+OzJBBiCw XMuMxbYKzcYjyddFFEzgCzI2tCmLmg0NuwdFg6BSOaMVKchfzdorIzpNNktTfEXkfJhh 8y945S4rHTVlH7mJmu2+T1pW3BCuvcE4x9ltEqqQVy4OwB3ZLwNAnynXxwBkA6TwbdrU hU70aBk0mD5Oy4HihDHAbmbVZZGGb8rw3qBUfmzyOKDaBCZ51s2gYq7I7wFQ/Nsrdugx pLFQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@atomide.com header.s=25mailst header.b=oxKkY0+M; spf=pass (google.com: domain of linux-kernel+bounces-3082-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-3082-ouuuleilei=gmail.com@vger.kernel.org" Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id d18-20020a170903231200b001d07619e8cdsi17891060plh.449.2023.12.17.23.12.44 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 Dec 2023 23:12:45 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-3082-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@atomide.com header.s=25mailst header.b=oxKkY0+M; spf=pass (google.com: domain of linux-kernel+bounces-3082-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-3082-ouuuleilei=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id BEC7128476F for ; Mon, 18 Dec 2023 07:12:44 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id C4B22FBF4; Mon, 18 Dec 2023 07:12:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=atomide.com header.i=@atomide.com header.b="oxKkY0+M" X-Original-To: linux-kernel@vger.kernel.org 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 78FB3C8C6; Mon, 18 Dec 2023 07:11:56 +0000 (UTC) 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 Received: from localhost (91-158-86-216.elisa-laajakaista.fi [91.158.86.216]) by mail5.25mail.st (Postfix) with ESMTPSA id A9E75603E6; Mon, 18 Dec 2023 07:11:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=atomide.com; s=25mailst; t=1702883515; bh=jOLpz2FJl0aAMCoMAp+rbhi56IThjCRVMSGhGVcObYs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=oxKkY0+MwTgka89aRJ8DsdarUBoD4+oY1/UNu3uACPoeKt5jroeC7hhWiwXbX6VJV qEIJb4p4snvC/mq16Tx5C1RqK3BdbEcSpC+UjGTFRCYvW2zR57Pm/+Kjqewejt8Ap2 R6F/IKLKaVWpcIvCgDxKYwm8lQpt8oObl5FaC/CRtCC0A5Fc4uTxwmG6SsUSv8KDCx mIiUyyQVV+dcftQobAXXeW3D7I/CXKC322eiHlrE2OKhoCBXMs86trjzPmCe5pHhyp ZlS8U2jip2IMm1XdEj1vd8WL8qOA570b1ogDsJKDT52p5JhCy0Ab8kdeZOQ4KN4mRx +gjU3X7YXwAXA== From: Tony Lindgren To: Greg Kroah-Hartman , Jiri Slaby , Petr Mladek , Steven Rostedt , John Ogness , Sergey Senozhatsky Cc: "David S . Miller" , Andy Shevchenko , Dhruva Gole , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Johan Hovold , Sebastian Andrzej Siewior , Vignesh Raghavendra , linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org Subject: [RFC PATCH v5 1/6] printk: Save console options for add_preferred_console_match() Date: Mon, 18 Dec 2023 09:09:48 +0200 Message-ID: <20231218071020.21805-2-tony@atomide.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231218071020.21805-1-tony@atomide.com> References: <20231218071020.21805-1-tony@atomide.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785602836934680048 X-GMAIL-MSGID: 1785602836934680048 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=DEVNAME:0.0 style hardware based addressing in addition to the current console=ttyS0 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. Signed-off-by: Tony Lindgren --- include/linux/printk.h | 3 + kernel/printk/Makefile | 2 +- kernel/printk/conopt.c | 142 ++++++++++++++++++++++++++++++++ kernel/printk/console_cmdline.h | 6 ++ kernel/printk/printk.c | 14 +++- 5 files changed, 163 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 +int add_preferred_console_match(const char *match, const char *name, + const short idx); + extern int console_printk[]; #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 = printk.o +obj-y = printk.o conopt.o obj-$(CONFIG_PRINTK) += printk_safe.o nbcon.o obj-$(CONFIG_A11Y_BRAILLE_CONSOLE) += braille.o obj-$(CONFIG_PRINTK_INDEX) += 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,142 @@ +// 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 "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() only. + * + * 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; + const char *opt = NULL; + size_t namelen, optlen; + int i; + + namelen = strcspn(str, ","); + if (!namelen) + return -EINVAL; + + optlen = strlen(str) - namelen; + if (optlen > 1) + opt = str + namelen + 1; + + if (namelen >= CONSOLE_NAME_MAX || optlen >= CONSOLE_OPT_MAX) + return -EINVAL; + + for (i = 0; i < MAX_CMDLINECONSOLES; i++) { + con = &conopt[i]; + + if (con->name[0]) { + if (!strncmp(str, con->name, namelen)) + return 0; + continue; + } + + strscpy(con->name, str, namelen + 1); + if (opt) + strscpy(con->opt, opt, optlen + 1); + + /* See _braille_console_setup(), both empty and NULL are valid */ + if (brl_opt) { + strscpy(con->brl_opt, brl_opt, CONSOLE_BRL_OPT_MAX); + con->has_brl_opt = 1; + } + + return 0; + } + + return -ENOMEM; +} + +static struct console_option *console_opt_find(const char *name) +{ + struct console_option *con; + int i; + + for (i = 0; i < MAX_CMDLINECONSOLES; i++) { + con = &conopt[i]; + if (!strcmp(name, con->name)) + return con; + } + + return NULL; +} + +/** + * add_preferred_console_match - Adds a preferred console if a match is found + * @match: Expected console on kernel command line, such as console=DEVNAME: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 preferred + * 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 = NULL; + + if (!match || !strlen(match) || !name || !strlen(name) || + idx < 0) + return -EINVAL; + + con = 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 = 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_cmdline.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 +#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 @@ -360,9 +360,6 @@ static int console_locked; /* * Array of consoles built from command line options (console=) */ - -#define MAX_CMDLINECONSOLES 8 - static struct console_cmdline console_cmdline[MAX_CMDLINECONSOLES]; static int preferred_console = -1; @@ -2458,6 +2455,10 @@ static int __init console_setup(char *str) if (_braille_console_setup(&str, &brl_options)) return 1; + /* Save the console for driver subsystem use */ + if (console_opt_save(str, brl_options)) + return 1; + /* * Decode str into name, index, options. */ @@ -2488,6 +2489,13 @@ static int __init console_setup(char *str) } __setup("console=", console_setup); +/* 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 From patchwork Mon Dec 18 07:09:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Lindgren X-Patchwork-Id: 180169 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:24d3:b0:fb:cd0c:d3e with SMTP id r19csp1075311dyi; Sun, 17 Dec 2023 23:13:12 -0800 (PST) X-Google-Smtp-Source: AGHT+IGaddZL9l/DNRdXeJbLzRIKOOcFPy9mVdTsSsXUHDZc9buWGS0tparV8+CKZiuL+XTjuyx7 X-Received: by 2002:a17:903:41c1:b0:1d0:6ffd:611c with SMTP id u1-20020a17090341c100b001d06ffd611cmr21109344ple.62.1702883592129; Sun, 17 Dec 2023 23:13:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702883592; cv=none; d=google.com; s=arc-20160816; b=rK6pT4v9QhzYSIcIQvrBAP7LpYkCyTld3MWELtPttmjkzBjBIsY5OErluNv3Es+XcU /GYJuJSydU/oqElpQwmBLFnbaq7UV8Rn02dorq7NdVz2KuStfm12zalRHErmpHiT4FHT J0JhiC4u2klBlRkGycDOvJRE2gIalKEPmIzOR66hedsTkW0UV0jWdqHRQLAACV2EpJdT aOFQEl2jFtROcXP90ebDqnUftMiZyPJLwO2BfLNbRq1Vu3VnE7+U4HiGkOSblbkOydkj rXfjRMNmtvq77UuMEVsrNo37m0uRM761SeMlt//AdxdFHrUbVXFpL9nhxVa0n7PlrRr4 Zb7A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=MeB1NvmDdiB70lT/yoDqWxJ6t7D4mq2LkQI2TYfm8so=; fh=OQrZIrddo55Tm+afxTOsnGwFgD38y2NNd7tU+1OGSCE=; b=yKYwIjXWJzWVrNVWgIX+7nEzBSmCYpV+X9txKvdn25GSFGDVcU21fy74h5Ixxwe4pJ u12ItG3kAJ7o+/EgQ2jFq3D69Rh6Yhd+a65Pf0rF4VKBRN0xQEgBXDhAsQmVaiKm+aDo Vvv9GMTxm+UEYFZ900eSlSkMQJ4bR3JEAc5ZImHZiF+SGbUu4c90vMe5+MeAFCasQJJW 8Zy+Cr24AK6Qqz3GzpRTF20Rft6DgLPplcoyrK+wH7NMnMIeQ7JbuhJX3EtX6EyXpdry eDdfiAG7u/I4nZgT9qLdmcw6oE5RFDhYUUbrBFreFh4oUxbdfvOkRQV7252TQr8A9JMQ 5kYQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@atomide.com header.s=25mailst header.b=gqej+RJ6; spf=pass (google.com: domain of linux-kernel+bounces-3084-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-3084-ouuuleilei=gmail.com@vger.kernel.org" Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id h6-20020a170902704600b001d330f638easi11074330plt.514.2023.12.17.23.13.12 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 Dec 2023 23:13:12 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-3084-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@atomide.com header.s=25mailst header.b=gqej+RJ6; spf=pass (google.com: domain of linux-kernel+bounces-3084-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-3084-ouuuleilei=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id C3442284779 for ; Mon, 18 Dec 2023 07:13:11 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id E173BF51B; Mon, 18 Dec 2023 07:12:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=atomide.com header.i=@atomide.com header.b="gqej+RJ6" X-Original-To: linux-kernel@vger.kernel.org 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 A7E4879F8; Mon, 18 Dec 2023 07:12:32 +0000 (UTC) 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 Received: from localhost (91-158-86-216.elisa-laajakaista.fi [91.158.86.216]) by mail5.25mail.st (Postfix) with ESMTPSA id CF38B603E6; Mon, 18 Dec 2023 07:12:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=atomide.com; s=25mailst; t=1702883551; bh=kzAidhy8zpKe5tgeK43XUshUlfG4P+Tce1ryVoHcL6o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=gqej+RJ6aZ+I73/1JjzQbOu7RhV9WhSM6ZPoHEFtIR1m9bYLcXDlWiDRIp130+6sY q99S+LC8Vp+gjHKdsJHSVgs3s0pfsLRTf5X1/i2YJH6gPiPIxXJnziptSbd2Dzp1WX 0j7+8NTsHYYT4p91u+DFJBO7dBlfvC+zACZ26UA+DiVJgEc/eTcWJyeQhanKtTlJ5U X8wutJuK1Oh1nGtJXVZcSO0PMSTJsdHUWBTQvhu7Flee87P9YOkmjzE/OpCZOqCiyI YWB+UMOCW9aP1YP9AGrY1qw4HTDXQpeQfMY+ea13eI/SjxKwrhXMIodI0HgwM0J9og 1Ij2lzTk1ELKA== From: Tony Lindgren To: Greg Kroah-Hartman , Jiri Slaby , Petr Mladek , Steven Rostedt , John Ogness , Sergey Senozhatsky Cc: "David S . Miller" , Andy Shevchenko , Dhruva Gole , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Johan Hovold , Sebastian Andrzej Siewior , Vignesh Raghavendra , linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org Subject: [RFC PATCH v5 2/6] printk: Don't try to parse DEVNAME:0.0 console options Date: Mon, 18 Dec 2023 09:09:49 +0200 Message-ID: <20231218071020.21805-3-tony@atomide.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231218071020.21805-1-tony@atomide.com> References: <20231218071020.21805-1-tony@atomide.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785602865196641674 X-GMAIL-MSGID: 1785602865196641674 Trying to parse the console for a console=DEVNAME:0.0 style console does not work as 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. 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 @@ -2459,6 +2459,10 @@ static int __init console_setup(char *str) if (console_opt_save(str, brl_options)) return 1; + /* Don't attempt to parse a DEVNAME:0.0 style console */ + if (strchr(str, ':')) + return 1; + /* * Decode str into name, index, options. */ From patchwork Mon Dec 18 07:09:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Lindgren X-Patchwork-Id: 180170 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:24d3:b0:fb:cd0c:d3e with SMTP id r19csp1075390dyi; Sun, 17 Dec 2023 23:13:26 -0800 (PST) X-Google-Smtp-Source: AGHT+IGFUYx2r7qLDaCimB4FCNjlIuuxwt3V8+kqGnhg8oNrxV8xaFd6kVFO+eUgf53cOrllaxPK X-Received: by 2002:a05:6808:bc7:b0:3b8:b063:5048 with SMTP id o7-20020a0568080bc700b003b8b0635048mr19718469oik.73.1702883606122; Sun, 17 Dec 2023 23:13:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702883606; cv=none; d=google.com; s=arc-20160816; b=B1QRIyKxqksEAHa4krGJq2V3ZEn0ogyTeAuez+kiqN35JENapHR7y6vojHENQ+5I50 mIWI5xD8Do29kwbSsu2P6DFoV0MS24c42+CIh9L8EtwCXyTA19DJYppk0wS+MEL3a3+5 RCBhtqzonzNeOzRnW1ZolVhz4WcE4OGMaJa3BhQxhtnuOKemntDfefMjVlnIfZHRkgny Oejs+KoeA2aO0kbj3TPslu03JPbEgKxNrnVJ7TOz8OzWYVqapv57iM0k+r09ivdHTVmo tDxJpOhhtK61SXXecNla/dqFyK9zMsDT3/ZOs3Gi1XddGj8M4UdFJVwpnBdzBi1caylH RwGw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=H/MoLw5lmXSOQD44TfhotjzJldk5fxG1yVLpDlQEoks=; fh=OQrZIrddo55Tm+afxTOsnGwFgD38y2NNd7tU+1OGSCE=; b=kJHH8no6PCi5PGdTz0k7l/kuboZIMlrePnHCD/s7BYjA4+XeYmtp6s0/PXCuXw558F W25KB2tECvN1pLPQo65Z0x0gmXJEZtpbV8A9upLb6ba3Z/4NkCf5T/zfgLpXK0L9aS4O 2uryX3tDE4q28ZF4xvZWExLkHpTIQnd116/kXLgE+MA0O29GvhSlKAu+IPx6IVcOd77c 2bdAZCCBqAhnPnak9bCtFYFo5GI2Y0ALsHJCmxzVPEMM3ekXEclAjuBRrHb2Ir1P2p5c sa5YHJkCCR8uHtcpscmbxbK0j3IC/wNy17SCforGW05HlAhb6H8UxbrVagbw2OnJ4ClN Y0ug== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@atomide.com header.s=25mailst header.b=ZeewQB+j; spf=pass (google.com: domain of linux-kernel+bounces-3085-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-3085-ouuuleilei=gmail.com@vger.kernel.org" Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id kr5-20020a056a004b4500b006ce115d5514si17316994pfb.324.2023.12.17.23.13.25 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 Dec 2023 23:13:26 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-3085-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@atomide.com header.s=25mailst header.b=ZeewQB+j; spf=pass (google.com: domain of linux-kernel+bounces-3085-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-3085-ouuuleilei=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id DC0782846B6 for ; Mon, 18 Dec 2023 07:13:25 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 79FDED513; Mon, 18 Dec 2023 07:13:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=atomide.com header.i=@atomide.com header.b="ZeewQB+j" X-Original-To: linux-kernel@vger.kernel.org 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 3F7DE101CD; Mon, 18 Dec 2023 07:13:09 +0000 (UTC) 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 Received: from localhost (91-158-86-216.elisa-laajakaista.fi [91.158.86.216]) by mail5.25mail.st (Postfix) with ESMTPSA id 47712603E6; Mon, 18 Dec 2023 07:12:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=atomide.com; s=25mailst; t=1702883588; bh=W65hS9Wh08vuITZjnUiqgghOncGY2BRKMVeUT9vxU/U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZeewQB+jurbCkcW+rsOL1WOjOd7GgIAO+l6eQ+Rp7PO4wI0rfo7aRlTZHXk5jpC5f vCQ6GZZjCPfJL1S9tE9w7Urn9PG4h3ecvXg2rrT/usUSAIHVRB4JWPSWoD5lTC8wsD cRxMmFkWhfPvB5pEj8bz8VA/wRuegwPBSt5njkpVWwCbrBllJmCuSTs8gZrywZN7Pi D9aThgs+valqUI9WjQA3Iypgd/5a3YROZmc1CSKd2ESV7exlbH0jFoX2lBlCy+Hbg3 KYVyAYY7J8gyAQmlo5fCwEtg+Rf2uskKA2gDxWSOfhkE2BAvg/r+OlNvoeVP1JQYV6 qtP8JDEI2m+bQ== From: Tony Lindgren To: Greg Kroah-Hartman , Jiri Slaby , Petr Mladek , Steven Rostedt , John Ogness , Sergey Senozhatsky Cc: "David S . Miller" , Andy Shevchenko , Dhruva Gole , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Johan Hovold , Sebastian Andrzej Siewior , Vignesh Raghavendra , linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org Subject: [RFC PATCH v5 3/6] printk: Flag register_console() if console is set on command line Date: Mon, 18 Dec 2023 09:09:50 +0200 Message-ID: <20231218071020.21805-4-tony@atomide.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231218071020.21805-1-tony@atomide.com> References: <20231218071020.21805-1-tony@atomide.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785602880519259956 X-GMAIL-MSGID: 1785602880519259956 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 @@ -2459,6 +2459,9 @@ static int __init console_setup(char *str) if (console_opt_save(str, brl_options)) return 1; + /* Flag register_console() to not call try_enable_default_console() */ + console_set_on_cmdline = 1; + /* Don't attempt to parse a DEVNAME:0.0 style console */ if (strchr(str, ':')) return 1; @@ -3480,7 +3483,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); From patchwork Mon Dec 18 07:09:51 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Lindgren X-Patchwork-Id: 180172 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:24d3:b0:fb:cd0c:d3e with SMTP id r19csp1075990dyi; Sun, 17 Dec 2023 23:15:06 -0800 (PST) X-Google-Smtp-Source: AGHT+IF9kKW3AFq1VL1Wg2NhlqxnQx5CeQ3awDiu3SRFLPaqCKebe+PcsH+RdE2QSgFxMQbHiqQ5 X-Received: by 2002:a17:90a:b288:b0:28a:69fc:b585 with SMTP id c8-20020a17090ab28800b0028a69fcb585mr9338562pjr.20.1702883705782; Sun, 17 Dec 2023 23:15:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702883705; cv=none; d=google.com; s=arc-20160816; b=sBLaxOcGhyAFowCHt34AKtWm02Trfn6aHvXRnB6DHIU5hmhtZgsJCNring2pMuD+f1 1RZi9zpjlAT51C/4+uZcLGT1oGlJWR3wwfGihQ6WyuL/9L2otVveX6x8/oBW5TtG6YkK 2OPrUx+VcKzANrzljUdNRcVmz4EywWajXhWnA0JF5VzEwlmqt/nZChve3ylbobUMzg5l xOm+8GBQiSxs8M2tt+CcuhwfB3t/Pmau47o1aOeurRnwWGfGVUff+JeSVuLGqmX8iQJd UD/h2A6j2M4VXziE9FzqoKyeqzqZnfY9oBoYBfKSs7LlAYpdapDv1ybaPr3RafShJYEB Yyag== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=UXHXsWEpShdSPNkVJcx4mMEO58123+4cQQtbClbcnKQ=; fh=OQrZIrddo55Tm+afxTOsnGwFgD38y2NNd7tU+1OGSCE=; b=dDaOpjNhXJpfNpv7REhXqXXu9CotL4kdFIvZZjWMrYm11MXqZKIGNi41Z6zWb5qnQG CReItPFpQqcJcaXrqk8FwaRhBhAbwuDaGFsAFKO5B/e2KiC8YEKifa9EfXAztrQJn5GE oKSiX+ozpE9C8xFQ/T/Q8hXvx0xfKPDJqPt5bYEFw8KrKqwEXr5Mp2rcBA2YnT6Uuaoa RC5YTUWd1gg9//g3wN+SPcfKA3QHAxRssKiUXkdjUME8T2qnUuHZX/aJS0KiypkDzagR fCMsQja5NfTR/4PGIWzRJkIxAcX729FSmgiRTxM7c6HUpPwNmseyuZfV0lvOADk/8IgZ dKPw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@atomide.com header.s=25mailst header.b=IeO0O+dn; spf=pass (google.com: domain of linux-kernel+bounces-3086-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-3086-ouuuleilei=gmail.com@vger.kernel.org" Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id r2-20020a170902be0200b001d0cbef2eeesi17410306pls.71.2023.12.17.23.15.05 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 Dec 2023 23:15:05 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-3086-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@atomide.com header.s=25mailst header.b=IeO0O+dn; spf=pass (google.com: domain of linux-kernel+bounces-3086-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-3086-ouuuleilei=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 64C2C281B65 for ; Mon, 18 Dec 2023 07:14:02 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 60EA7C8D8; Mon, 18 Dec 2023 07:13:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=atomide.com header.i=@atomide.com header.b="IeO0O+dn" X-Original-To: linux-kernel@vger.kernel.org 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 5B89E101C6; Mon, 18 Dec 2023 07:13:45 +0000 (UTC) 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 Received: from localhost (91-158-86-216.elisa-laajakaista.fi [91.158.86.216]) by mail5.25mail.st (Postfix) with ESMTPSA id 71184603E6; Mon, 18 Dec 2023 07:13:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=atomide.com; s=25mailst; t=1702883624; bh=bSmbXIJ73bHNYUg5aFssz2mBLov16AXD7w083cyelF4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IeO0O+dnZdE8whIwAdpQZzbZ2n64X6V27A73sQvf+fQXEZPZMUegEKlHcPIDlxJs6 cb1d8XRPf2Hnj55YoLrMW/K0Fxs8KPTF49lZNzb7DV2g13sUzh8Bvz5Sk1SR2AqevS IhQ9fBlAUW2B/IMVs/MeskbWc37ybdQ5m/d2A7yQ0af1KyZ4B+Xl768GlXlxA0XQfD JLp5sjwylgg9zBYMVFR0BCBdPYYDusxKhKhorgfWtMhl/8MJjB/rzSmevJQCdVG2oB 1H0b0cDEd+YpKk50DTfnKY4SJogjDNKSfJsOsUoVE29PCZoj3GaPR3SJOQpAbRiVzu IJOqTEZLqCvTQ== From: Tony Lindgren To: Greg Kroah-Hartman , Jiri Slaby , Petr Mladek , Steven Rostedt , John Ogness , Sergey Senozhatsky Cc: "David S . Miller" , Andy Shevchenko , Dhruva Gole , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Johan Hovold , Sebastian Andrzej Siewior , Vignesh Raghavendra , linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org Subject: [RFC PATCH v5 4/6] serial: core: Add support for DEVNAME:0.0 style naming for kernel console Date: Mon, 18 Dec 2023 09:09:51 +0200 Message-ID: <20231218071020.21805-5-tony@atomide.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231218071020.21805-1-tony@atomide.com> References: <20231218071020.21805-1-tony@atomide.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785602984466685431 X-GMAIL-MSGID: 1785602984466685431 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=DEVNAME:0.0 style kernel command line, the 8250 serial console gets enabled later compared to using console=ttyS 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 --- 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_base.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 int serial_core_register_port(struct uart_driver *drv, struct uart_port *port); 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/serial_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. */ +#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); } +#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 = add_preferred_console_match(match, dev_name, port_id); + if (ret == -ENOENT) + return 0; + + return ret; +} + +static int serial_base_add_prefcon(const char *name, int idx) +{ + const char *char_match __free(kfree) = NULL; + + /* Handle the traditional character device name style console=ttyS0 */ + char_match = 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=ttyS0, and a hardware addressing based console=DEVNAME:0.0 + * style name. + * + * Translates the kernel command line option using a hardware based addressing + * console=DEVNAME: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); + int ret; + + ret = serial_base_add_prefcon(drv->dev_name, port->line); + if (ret) + return ret; + + port_match = 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=DEVNAME: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_core.c --- a/drivers/tty/serial/serial_core.c +++ b/drivers/tty/serial/serial_core.c @@ -3358,6 +3358,10 @@ int serial_core_register_port(struct uart_driver *drv, struct uart_port *port) if (ret) goto err_unregister_ctrl_dev; + ret = serial_base_add_preferred_console(drv, port); + if (ret) + goto err_unregister_port_dev; + ret = serial_core_add_one_port(drv, port); if (ret) goto err_unregister_port_dev; From patchwork Mon Dec 18 07:09:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Lindgren X-Patchwork-Id: 180171 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:24d3:b0:fb:cd0c:d3e with SMTP id r19csp1075830dyi; Sun, 17 Dec 2023 23:14:40 -0800 (PST) X-Google-Smtp-Source: AGHT+IGXFVzDsRYf13zwbTalfoLWtgPgyg0FvAovq/iWN4zpTDCDyQwrkYFXLU7xfYJzYcoMqQdF X-Received: by 2002:a05:6214:1312:b0:67f:24c7:a54 with SMTP id pn18-20020a056214131200b0067f24c70a54mr6193716qvb.51.1702883680003; Sun, 17 Dec 2023 23:14:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702883679; cv=none; d=google.com; s=arc-20160816; b=aGqIh2Ne/fUx2rPvkm2VdvSX5sKtze28NqaWFwbcCBXN3pwjwR2QowuGydDTs6RJc7 ge02rvTGavVLIWU7Ra/I9Uh9OGglyG9BTqjCmweLKwy2BWGx89S3UHQXqjGVz/VTVido N6COoZT6/FoQ3VVVudLUYCzfDkzFSKsnMUoSFleFUd7esCc34TU8RzahOVLmJc4JXzoV v6VmGWuqvQ38cN+xKE7KZV3XZs7yFooqbUHTlbCKeZoTwbZWCb+1BZAXwmi74EEdRGc2 o2zI/IZI3lHqDZEr4vT+1vVS0wo6bg50x+7lxs1HHTCDbx5J7scwKT1M8RWyP72XIW0B Ob8g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=k9V5DPVrF+flpx86Vnug/l3AAv2D1wWDjt6veLtJxoo=; fh=OQrZIrddo55Tm+afxTOsnGwFgD38y2NNd7tU+1OGSCE=; b=UREEMGp1iadmY9EO4zFS7AFgQtPXjF6UgEDEaqVSwpICJLL+/e9IId5yw1L5HrttF9 zLdfT5fqSICpvN8ouZLBQ6+zlLNufvPCJYneIZdFuKFXUOH3zHa5tUPmrfV8nLowxTj8 WTfiMQBLynD83lW/QQtjG2L7aWRKpido1/iJj3iEyPZrY0v07ILpawZMoHrIsbsu0GCo Cq9mNCPSdacQF6+x73KtcXq60ffstesirqLbJYsF/nO/jWSEqsKBZX3a3x464ZC++SKY FDpoOUZt12gtP+VMLFE7Kqjs+SUg7vk8lq6la5XquGlVMPEpS7gVZwN91EOGXC6n/oT0 g87Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@atomide.com header.s=25mailst header.b=oAZvLSH0; spf=pass (google.com: domain of linux-kernel+bounces-3087-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-3087-ouuuleilei=gmail.com@vger.kernel.org" Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id b1-20020a0ccd01000000b0067f2b2b7532si4541820qvm.357.2023.12.17.23.14.39 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 Dec 2023 23:14:39 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-3087-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@atomide.com header.s=25mailst header.b=oAZvLSH0; spf=pass (google.com: domain of linux-kernel+bounces-3087-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-3087-ouuuleilei=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 4CCD31C222A1 for ; Mon, 18 Dec 2023 07:14:37 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 42204848B; Mon, 18 Dec 2023 07:14:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=atomide.com header.i=@atomide.com header.b="oAZvLSH0" X-Original-To: linux-kernel@vger.kernel.org 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 68C22F519; Mon, 18 Dec 2023 07:14:21 +0000 (UTC) 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 Received: from localhost (91-158-86-216.elisa-laajakaista.fi [91.158.86.216]) by mail5.25mail.st (Postfix) with ESMTPSA id A32C2603E6; Mon, 18 Dec 2023 07:13:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=atomide.com; s=25mailst; t=1702883660; bh=4HBQW/GgIjvWli0+SMeQEsuVWaT3PJ2i4XEk11NeR2I=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=oAZvLSH03WJr8omtxTAFNR5axlxaIwiUYk7rcofP8YV91KcrpSfI0zudexZXWoCb2 rG/98zMYFsk94HO7SkUlJBrGn9kPpVMYFOD2foJJvqq5C5xEwBsRFT8HSnc///thHW T1iU4Nqkmv6Y22oYioNvg+d7scPEBr5/wqdCY4VdFUmVhbd7CaHacd2jzvY3KVPKd1 vj7jq5f1aLJemGrXWRAgmPza0kzA0ZWcqfRb8YvkfinxWl3r3oyK2bjdPqtRbtjCXF tm3ZjQ6X1jDnvFr/m4yBuZnpzJKqCidZ5l1xElaiRFbOOR9lQ4OQiSAVmbeFt7PSGw dsJz7i3nbMaBg== From: Tony Lindgren To: Greg Kroah-Hartman , Jiri Slaby , Petr Mladek , Steven Rostedt , John Ogness , Sergey Senozhatsky Cc: "David S . Miller" , Andy Shevchenko , Dhruva Gole , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Johan Hovold , Sebastian Andrzej Siewior , Vignesh Raghavendra , linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org Subject: [RFC PATCH v5 5/6] serial: core: Handle serial console options Date: Mon, 18 Dec 2023 09:09:52 +0200 Message-ID: <20231218071020.21805-6-tony@atomide.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231218071020.21805-1-tony@atomide.com> References: <20231218071020.21805-1-tony@atomide.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785602957507421305 X-GMAIL-MSGID: 1785602957507421305 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 add_preferred_console_match() 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/serial_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 *match, const char *dev_name, return ret; } +#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 = NULL; + + switch (idx) { + case 0: + name = "ttya"; + break; + case 1: + name = "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) = NULL; + const char *nmbr_match __free(kfree) = NULL; + int ret; + + /* Handle ttyS specific options */ + if (str_has_prefix(name, "ttyS")) { + /* No name, just a number */ + nmbr_match = kasprintf(GFP_KERNEL, "%i", idx); + if (!nmbr_match) + return -ENODEV; + + ret = serial_base_add_one_prefcon(nmbr_match, name, idx); + if (ret) + return ret; + + /* Sparc ttya and ttyb */ + ret = serial_base_add_sparc_console(name, idx); + if (ret) + return ret; + } /* Handle the traditional character device name style console=ttyS0 */ char_match = kasprintf(GFP_KERNEL, "%s%i", name, idx); From patchwork Mon Dec 18 07:09:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Lindgren X-Patchwork-Id: 180173 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:24d3:b0:fb:cd0c:d3e with SMTP id r19csp1076130dyi; Sun, 17 Dec 2023 23:15:28 -0800 (PST) X-Google-Smtp-Source: AGHT+IFn1u6VLdFaR9WckZQmVU65z4MoqoAl6q1dxzhd4MrERSxb0uw2Nhwr2JLUsLQVLpDhp+yS X-Received: by 2002:a17:90a:d253:b0:28b:460e:e532 with SMTP id o19-20020a17090ad25300b0028b460ee532mr612268pjw.40.1702883728039; Sun, 17 Dec 2023 23:15:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702883728; cv=none; d=google.com; s=arc-20160816; b=P8rkv4XMt0zwYJL7CWDHeLVw+qLsokYDJiQ+EoQX0G17i+M00dd7tXVwldQ/d94eX1 y/LaY42+kgXII4rDOZRiOkctbZGsGp4a5/J59ibQkFwKMAn1nNPyZJ53LNFOt0ZqDgJr btDOMD58KwBS6P56P83Mnp5cDkU7okpWOYnUHsSH2oPg+k0O6sqBWPixgS6uyHZyp9Ni 3/0BvAdeUgEmahMDhfmbrIjf/HWNUIThOSwuyjQ4pzk6fOz7Q87tiuD1+rnowKESJMSC apJtXyCA8DjHCifxaiuZhDukJPNnb2rzUyBvUngpBj+RaEHbKWcDnQ3+dpGzuhThfyA9 Bjxw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=JnXO/R0Qsx3ADz59naq/5Fh84jL7/qgZDH/6FO2+A+Q=; fh=OQrZIrddo55Tm+afxTOsnGwFgD38y2NNd7tU+1OGSCE=; b=BLBWTRg6ArlonO5U0kqGaj/86Drvo9AYSmYv6OHVAPhAUt01ET1cFtpTwGfrBQa+y6 dhB3LHtejd0gS8UBTY8FLTWcwanGxbHWYGLEOl0Fs+9mai87UeVRyDJK5exR73RjxgsH stEdCJp5tYNOdaCmKHBsfS81iQTD4YX2OOuAtuTEvMVOIoAazqF93C4HPQStpCIue1Tx N9lXHsJ+gABwtqHxyukzr7SlUXu3ugbJwBq+KqvXDPdp9rU45hzZN+3+LwYTXQ1yPYRE 54VCDjdGGaVX4ydJEEhuNnNiX7Lmuw6GIB6PVZhf3Lc2f09XVo+FvxMrKBVnBBY7BNE+ Kocw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@atomide.com header.s=25mailst header.b=ndXogUuI; spf=pass (google.com: domain of linux-kernel+bounces-3088-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-3088-ouuuleilei=gmail.com@vger.kernel.org" Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id i20-20020a17090ad35400b0028b158f2c52si6685657pjx.96.2023.12.17.23.15.27 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 Dec 2023 23:15:28 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-3088-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@atomide.com header.s=25mailst header.b=ndXogUuI; spf=pass (google.com: domain of linux-kernel+bounces-3088-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-3088-ouuuleilei=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 132F128211A for ; Mon, 18 Dec 2023 07:15:15 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 8623FC8F1; Mon, 18 Dec 2023 07:15:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=atomide.com header.i=@atomide.com header.b="ndXogUuI" X-Original-To: linux-kernel@vger.kernel.org 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 A5B3CF9C1; Mon, 18 Dec 2023 07:14:57 +0000 (UTC) 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 Received: from localhost (91-158-86-216.elisa-laajakaista.fi [91.158.86.216]) by mail5.25mail.st (Postfix) with ESMTPSA id D2F55603E6; Mon, 18 Dec 2023 07:14:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=atomide.com; s=25mailst; t=1702883696; bh=uFBmtVSwmPLt0wPwCU7cDBhUtKLWh7AsC+S0n1T9l/Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ndXogUuI9gQ7MSv6nnSm1nCRDOfn6//M3fDHZ9Es31/TLhdgyzB+yBP6CQCIZkIu+ XBth8x4UXUpkjKSP7L8cIqrasBtGg4Lq4j4sPBBeHkCb3v9QDJNQQcH4+0cUxAla0T roX1oaGQTsKMmAj684PhtrcVk6PyqNC0W7j0HEnvQVRS5axIPycRcev3wMw1W8CGVw q7/zLsBaAq8+fJ6o9vKHvVJDZxhnpO+HJoN/Bz+xpgRwmJOAnb9fnhUGk/avqMzrjb bCZtBNopPhwfWTqLwHvKOgtS6nomMifunZQLFHgT5Z6dJPPnMLGflp3Pu6NP2J7V24 3x8UttRCCFxFQ== From: Tony Lindgren To: Greg Kroah-Hartman , Jiri Slaby , Petr Mladek , Steven Rostedt , John Ogness , Sergey Senozhatsky Cc: "David S . Miller" , Andy Shevchenko , Dhruva Gole , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Johan Hovold , Sebastian Andrzej Siewior , Vignesh Raghavendra , linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org Subject: [RFC PATCH v5 6/6] serial: 8250: Add preferred console in serial8250_isa_init_ports() Date: Mon, 18 Dec 2023 09:09:53 +0200 Message-ID: <20231218071020.21805-7-tony@atomide.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231218071020.21805-1-tony@atomide.com> References: <20231218071020.21805-1-tony@atomide.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785603007946660453 X-GMAIL-MSGID: 1785603007946660453 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 @@ */ #include +#include #include #include #include @@ -41,6 +42,8 @@ #include +#include "../serial_base.h" /* For serial_base_add_isa_preferred_console() */ + #include "8250.h" /* @@ -563,6 +566,8 @@ static void __init serial8250_isa_init_ports(void) port->irqflags |= irqflag; if (serial8250_isa_config != NULL) serial8250_isa_config(i, &up->port, &up->capabilities); + + serial_base_add_isa_preferred_console(serial8250_reg.dev_name, i); } } diff --git a/drivers/tty/serial/serial_base.h b/drivers/tty/serial/serial_base.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); +int serial_base_add_isa_preferred_console(const char *name, int idx); + #else static inline @@ -60,4 +62,10 @@ int serial_base_add_preferred_console(struct uart_driver *drv, return 0; } +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/serial_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_driver *drv, return serial_base_add_one_prefcon(port_match, drv->dev_name, port->line); } +#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 static int serial_base_init(void)