From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752683AbcFVMS3 (ORCPT ); Wed, 22 Jun 2016 08:18:29 -0400 Received: from mail-bn1bon0081.outbound.protection.outlook.com ([157.56.111.81]:2368 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752383AbcFVMSZ (ORCPT ); Wed, 22 Jun 2016 08:18:25 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Yuri.Norov@caviumnetworks.com; Date: Wed, 22 Jun 2016 15:18:13 +0300 From: Yury Norov To: Aleksey Makarov CC: "Rafael J . Wysocki" , Greg Kroah-Hartman , , , , , Russell King , Len Brown , Leif Lindholm , Graeme Gregory , Al Stone , Christopher Covington , Peter Hurley , Andy Shevchenko , "Zheng, Lv" , Mark Salter , Kefeng Wang , Russell King , Jiri Slaby Subject: Re: [PATCH v8 4/4] serial: pl011: add console matching function Message-ID: <20160622121813.GA20023@yury-N73SV> References: <1463749405-11640-1-git-send-email-aleksey.makarov@linaro.org> <1463749405-11640-5-git-send-email-aleksey.makarov@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <1463749405-11640-5-git-send-email-aleksey.makarov@linaro.org> User-Agent: Mutt/1.5.24 (2015-08-30) X-Originating-IP: [95.143.213.121] X-ClientProxiedBy: AM2PR03CA0008.eurprd03.prod.outlook.com (10.160.207.18) To SN1PR07MB2256.namprd07.prod.outlook.com (10.164.47.150) X-MS-Office365-Filtering-Correlation-Id: 75e0ceff-e6f4-477c-4d78-08d39a974d57 X-Microsoft-Exchange-Diagnostics: 1;SN1PR07MB2256;2:8BbwO/YsIiCpPECpidfnT7yuxT/P47mYUtVLpVeQzlN7V4yDm0zZwR2oUyazsctt8SrLjm9pA1avrsIoIyUeazVwZzUunTjzm7TrgZFVKeUcTq7gtX4iGjRwFDQdfY9o8qokIbZdO68EqHJsWuxqcRB2yhBfn38DYiYtoJHE29SzpcP+OSIK2VRCfm55qPv/;3:CWBNH0+mFn2Y5VP4TIlDvvtOLPA3ykbZojywVhPK6qXNYbdXBbtK8wVgAmmcN2vwY9mhuDYg4fIrWGFaOvK+r8SgqUtT2tmZ567xp2mmBIjy59NAmEveuXCP6shTjdmi X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:SN1PR07MB2256; X-Microsoft-Exchange-Diagnostics: 1;SN1PR07MB2256;25:ndm07hdlG6kbyAWCfIx7KnJ7wuClczpHFkciWqW+ndjEWxLaFzmr5doKsgb9aC4lNzKlLLFxtG34kEELmSia2etnUgOjNPbeiXC/sXGidmkGIeNBE4HtHt4v+DsH0pboPIOerG9Bn1BLY2hilrjRPrvIb4kJkCfH8iihQ06ivCIJlwYqH7vzCr7NWM6dTJlZZLwBocgXlWZnsntvfEMV0fiRiE/ZjrDe+3B6pebw0t1bP/06XhAZQ9TBmqLai8kUXvybcGErbJhYLm7NzZxYz8w9pYrR9SFjkqxjuqSdYBNfoNrxtfYONI5m1icyrZ2KNWabE7yh6J2G04zBKo90KfNx5bY5zJ3NRNfBEhWI0vRemPxtzsLzmHmFF0hVrkMtLmrWVtcBTsi0TIqvzdhiQ1mi0DpBi0EZ3/KuZfxcAjb/aor6OGFozzka6F4KMOhiPNWqQnRexrdKdiSbJ1RTx/W9aigtRSoTrJVTyxLNaImPxAvnCidovhwTyOwe3Dnp06wENErLpes3EjF7ugKAtb9APauapDTgk3zZ7o/39WA89yrhZhoSUJn6iVP0AgsXd2e725LX77+FLJTJzH2/tck9fRTc1bvUnn2MeW8xKAs2pa09xrl4U3Cct3O2vE+McYYaUXcNbVBPPQ0sO2ZRnjXeNGcBfn24M9BORdUWiW3+kxsaXlLTttzejJnuzmLw2BuuLtcB0UEP9kwFCSWraBWd5Hc+7RsEX1nI2y4zioYlEQnu+hv2RjpNsHnSD+u10iLQGIxzy0RfA5PRPLXygA== X-Microsoft-Exchange-Diagnostics: 1;SN1PR07MB2256;20:/zuF8gmKeVT/ZqE32Y2X2aoaUaGGOfbo9UZzZwXILdLOrGuqTWrRS6KFHfIkFxtEYf/rv43+8D7j7+KdEesHgLPMSzTaLjozavSGTR7spq5n+Ipmk9OLWiZQ0Qe3jUdeizdltr3UiYE7tTvjQZGyIacK6T2HL8Xx6XJ/cm+/iG9yKauiQped+FLt8kRcuCgqugHfE6iyRvA4amtnJ2wrlcPV4B/6fa7HYBSe85YGK2AYrw1QvQ97nENFwoLMNhY57k9U9q4Gowa8I5vFW6plAv5UqDGIktDTxjXilQm7KX2mWUpn26g0CW0WSF/1ytBQigCNRNgOoIWX5iL7RgClmtNAjs9YWY6Y/TMKJm6I3O+B4mJPyrbfZmGTcqGkcXIQEw8KSzj9OQOjqwA9eVa31rrR1X6SYZ+BKHk/T8jA+zjgHDTK6bdNzxlLTVgj3++9KLjcANwAVfGYdMu2yIT5VEwSXV5J4lMgYM8uadwN4fVjXIHF1KPrqVkB4sfkHszu9XoZX1dlpkhTUtERxPfjx94EKBmFRjruieczTkrVuZaCXJSwBOtCzj4XmAKpZ9asJehDXViO2Juo/XwGBc0yMjy2QftXe42P9nP3EKrIcrU= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(788757137089)(17755550239193); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046);SRVR:SN1PR07MB2256;BCL:0;PCL:0;RULEID:;SRVR:SN1PR07MB2256; X-Microsoft-Exchange-Diagnostics: 1;SN1PR07MB2256;4:5eEFTb3Pg22XzdtwZ4jDjNA4+lMrigZmB+j9akgghddRrmWqwMwL0xfNunn2mzu/vsafvSK2XyeXC1jPcDFMC+K06Y3noGrrfoB8/1gK4DyeOeuGrSYsEd10diVDYIy76L/Eae6iTMgOKW+RmFgA2I+6jXK7VK+pMS02a3gJ2tHNWV0BH2STmIHZemfbkSwZ/+/MPPfzDlGL/OLhn1w/KCZF04OyoTx6jobu0/q5lSgpt9bvQ0V+Z+UhUm1E3xLHdLzEPoHcTKTQfkVH4L83YW/4RKNqUB9A7l2Zx0q2NyAhEfOpZINYHDCNA8aoIf30a/UaW0guaurZW1YM6kunsg2IEemfbQunRDjqaElKLWOzDVFljPoV2PPZetQNtc8ydG3LMV8pmLvze6CiPFozIKSQWKQU84n9UWAinBQ2iKppB2j1txIcpDJOAJVEXs4z X-Forefront-PRVS: 0981815F2F X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6069001)(6009001)(7916002)(199003)(24454002)(189002)(76506005)(101416001)(33716001)(46406003)(8676002)(7846002)(50466002)(83506001)(106356001)(19580405001)(19580395003)(54356999)(2906002)(47776003)(586003)(23726003)(2950100001)(1076002)(3846002)(6116002)(76176999)(4001350100001)(4326007)(97736004)(92566002)(81156014)(81166006)(9686002)(33656002)(42186005)(66066001)(105586002)(97756001)(68736007)(110136002)(189998001)(7736002)(77096005)(50986999);DIR:OUT;SFP:1101;SCL:1;SRVR:SN1PR07MB2256;H:localhost;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;SN1PR07MB2256;23:FlMJGQt2a0a/ALAIfUdw9wbCvo/sSCWDYxZFVtKWr?= =?us-ascii?Q?FGXaDeYq6QDIEtJxQ5BcZ/+hlrq6kmmWAbBMwcSV/klZDxICKnkIqK74LqO+?= =?us-ascii?Q?TZ31dNVRmNpo81i9D6EcqxpI/sELZiUtEXMvGf4QjRzMbe9wpOYadMJVWIzj?= =?us-ascii?Q?lJryVnkfBO1DcfVYyaoLtRYpaj9cCdLQMroE8WGQhZDN92TeWb0Tt++5hydi?= =?us-ascii?Q?FSeR/coBHTz1lK0tozsLk75uKBXi5jUSUEoYN6KgXWPvRUbNhJFD6l2g+eG8?= =?us-ascii?Q?IverImxZqXx6Rmd9ejl0arxwY+sjyvfUd8SWAocmzqMhd3IdESs7a9o10NoD?= =?us-ascii?Q?pUE38/4d1BN484XGWjBsKxm06AFIgqplSDy7BpIBXm14CCyj0aTLMWHyIjN+?= =?us-ascii?Q?TgAagolkYO/OabnEWN2a+lr656ji8oFTPGVLXtNcapVQhRoDKHkpopccsdi+?= =?us-ascii?Q?Gnuc86jBD7t+q9XXDjqCCVWyKaLP2osJp+rspDNVzHnLi3drUi3L5+BoO3yt?= =?us-ascii?Q?Ss3k1JR+/tFXhTSa5Mx1LhwkftPEe4e2vxKtkTAFkoggZzi1an5atO2pcZsg?= =?us-ascii?Q?6tMkvEm8kOenttsL2fe+lUslTn6PYlrNyhRGnPye3OWgGXWgSOOF76L0NTKC?= =?us-ascii?Q?jhmh/TaIqJJ7UbvsgW+Me2R6A7Iz719XxeX7ugO6maOqGfGVY1x7EMXwsiCc?= =?us-ascii?Q?rIegIVf9NHjzQBUvItBXOjMbv4Syp6eIgVErzEt8avS1WMpRW/fc7WIxS2qn?= =?us-ascii?Q?NPypHsUklQMWccOSefaSPxZznldkJfUmtrE3vOEwMOKltwSWt13DVQbiErb9?= =?us-ascii?Q?Y49tW/IRcwHG1UtviSfWvMO5wWejB7YRj7gJmYsu57/N8m/zLTPaP3JFQuCd?= =?us-ascii?Q?tHuzybry8eYrjUVdtcBoDeaKdgSvBemfx/Ch47IHDYwh0BVmGhEVycfp1A7B?= =?us-ascii?Q?g7rssPkzf+G/AOqvlD24w+s5T0pfpyMeWBXh8zcfrKzNba9c34DEDgyUWSyJ?= =?us-ascii?Q?6sczorlqzySJEg6XwPMQh9GT495ODj0Xj0XoXrSO+DtwlQKAp2YvwUBB0Wb+?= =?us-ascii?Q?3xa8p2QQQGZpQYYUiU3Ungvp0m0IJRfPZjsrxpNGRP8FcdSjOlbLoVt2c5oO?= =?us-ascii?Q?gUYs8sQN3EYmLzOHbIrXzpoDPcKrvJJ?= X-Microsoft-Exchange-Diagnostics: 1;SN1PR07MB2256;6:Yi6mIVz4meTNj9lXrTZ89qKUAeed+q/byeDr8pOKkO5cbA6FUk/E3RUPuvTox4O83Q+a6CP3p0jFINF9HKi/yEt5SMiYJ1gfToTFCp84T3X2hyarMbecB5p4Xwa+/Gx0AQsTJ1wEhRRLpj7UMdeQ1TEX6i7ianH90pRBAWOKKofNny6rTSJ/tpGoqhCZ4syrohI1T6fpNIyPwB4B/7fx0cjJa4yVfJWlPl5TVRRQ2SYkDksEdwsgeM5NN07pao0+ZGfKfr4NFgOpOmQvFjZCdOLKZCeaZ+xhgv4lPdyjnMqliqSbEwix4VKlvg2lybZW;5:9FQLVSIp2HTgBoGgCKybtLUjEij7UbMZeArcyYJvSm0nFAbQEU4Mtb6z/t8qVYUboz3ojqDJBDxhnG3B/DAv+IylTybq16A+ZEVgg7rpqxr+8+tGE4iyAlNbf4OaTwsxD/fH2jBq355EWBbrPiciRQ==;24:tdfquHKxSiHgMB5jMkf4QoPFDFK6nRCbgCB33VH0QDdEsKwk9Fp1ybMDCOAhxhLiE6gouPxWUhHkQzj2SM+GdXrUhoydTMjxx/s6xhG8miM=;7:mX2YHglN2iw2ovTQxbb3lYfxi6Kr8ZcOawywZ3VEBmlA6/VWARk7+VGh9s1Dd8SijBbbe7knfK6hTySX8oNuyRdFrAq25L5CLYmTFgQ4fcSOFe5l1O/ChJjsuTNVmXmUP3atiBoo6ykiVu7YcNuIYJoxZUh3RmDd3ACCEmg8bbAJdPYWnhNSzKhJdsbfXrBVk04x7d/6sYnRAQUxj0R4Ex6vd87bXam/Y9zPIRJLCvffyZSd3OBQRupbhQb6elJPaRP2JVkMN4j4rkuFlB5/Lg== SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jun 2016 12:18:21.4505 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR07MB2256 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, May 20, 2016 at 04:03:23PM +0300, Aleksey Makarov wrote: > This patch adds function pl011_console_match() that implements > method match of struct console. It allows to match consoles against > data specified in a string, for example taken from command line or > compiled by ACPI SPCR table handler. > > Signed-off-by: Aleksey Makarov > Reviewed-by: Peter Hurley > --- > drivers/tty/serial/amba-pl011.c | 56 +++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 56 insertions(+) > > diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c > index a2aa655..388edc8 100644 > --- a/drivers/tty/serial/amba-pl011.c > +++ b/drivers/tty/serial/amba-pl011.c > @@ -2288,12 +2288,68 @@ static int __init pl011_console_setup(struct console *co, char *options) > return uart_set_options(&uap->port, co, baud, parity, bits, flow); > } > > +/** > + * pl011_console_match - non-standard console matching > + * @co: registering console > + * @name: name from console command line > + * @idx: index from console command line > + * @options: ptr to option string from console command line > + * > + * Only attempts to match console command lines of the form: > + * console=pl011,mmio|mmio32,[,] > + * console=pl011,0x[,] > + * This form is used to register an initial earlycon boot console and > + * replace it with the amba_console at pl011 driver init. > + * > + * Performs console setup for a match (as required by interface) > + * If no are specified, then assume the h/w is already setup. > + * > + * Returns 0 if console matches; otherwise non-zero to use default matching > + */ > +static int __init pl011_console_match(struct console *co, char *name, int idx, > + char *options) > +{ > + char match[] = "pl011"; /* pl011-specific earlycon name */ > + unsigned char iotype; > + unsigned long addr; > + int i; > + > + if (strncmp(name, match, 5) != 0) > + return -ENODEV; > + > + if (uart_parse_earlycon(options, &iotype, &addr, &options)) > + return -ENODEV; > + > + /* try to match the port specified on the command line */ > + for (i = 0; i < ARRAY_SIZE(amba_ports); i++) { > + struct uart_port *port; > + > + if (!amba_ports[i]) > + continue; > + > + port = &amba_ports[i]->port; > + > + if (iotype != UPIO_MEM && iotype != UPIO_MEM32) > + continue; So it looks like iotype is constant inside the loop, and UPIO_MEM and UPIO_MEM32 too, of course. It means you can move this check out of cycle and avoid ports traversing at all in specific case. Am I wrong? > + > + if (port->mapbase != addr) > + continue; > + > + co->index = i; > + port->cons = co; > + return pl011_console_setup(co, options); > + } > + > + return -ENODEV; > +} > + > static struct uart_driver amba_reg; > static struct console amba_console = { > .name = "ttyAMA", > .write = pl011_console_write, > .device = uart_console_device, > .setup = pl011_console_setup, > + .match = pl011_console_match, > .flags = CON_PRINTBUFFER, > .index = -1, > .data = &amba_reg, > -- > 2.8.2