Message ID | 20230704135936.14697-4-ddrokosov@sberdevices.ru |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9f45:0:b0:3ea:f831:8777 with SMTP id v5csp1243594vqx; Tue, 4 Jul 2023 07:02:44 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5UHJHFLrSvWoTxstALvNHVrhyvQ8L2S2uQGy5HC1ys4HyEeyWjbQ/+dgb1oX9vgk0SzJSP X-Received: by 2002:a05:6808:1456:b0:39e:d59a:8275 with SMTP id x22-20020a056808145600b0039ed59a8275mr17870429oiv.25.1688479363832; Tue, 04 Jul 2023 07:02:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688479363; cv=none; d=google.com; s=arc-20160816; b=WBkeOXymMAbTOOKYlq3uizZ/jS60qh1abyvUPQ4ILByrI3tHZaW6+zPOcc151yd/Iv fEjDXu2NBeWCz8tQJ6AUPX/hp1vqKUka7XbrPddepfneHR2tjSMXnvitEeP0zIBySzwC E9IIXpn4R2u1CBYfvEKuD76nGLep45oU5jz5NpxbTZf9VvdHNCdR+6Z7XRpahyqWcwVT SoVEUHdhFPCFHuzoIJF+kBzlxA+jewMU/H+nnriTE4qnqmsJPt1lzhBFnK/Fw8pIU8An QBliwR5zszguTOpbGN8X69xhrEAWV26M3HmE8UvljMF2+I/7jNNSAQ9wby7QM/7J99DL gAGA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:dkim-filter; bh=GqJ6v9rct7JIpD7/9y+mD3WCzkd0bTZ9Ye0iVwHILeo=; fh=WJqZePI8VHr7PwehuKfE5Na7FLIpnW3ROa7as0MZyQE=; b=q2CUuuFzCPdnyfRCA4ieynlj0BQkJedhtSmM1UOSxdcuG+MUMNSovNJ9hSizg0cMP2 H8mxsYg7ETXT9CLgTN/1b/nke6fgpTIN/hzDxmtguerJHAjqq90NbldbagFow3pOumbJ 2C3sBm7m3MDlZuaPatWR4NLoTlwh6Pr5wo5KGxDWxfw4WpDR/OjIhrIyvztO7ULpU+FY xlbYERupz0TsSX255cV9do0TKvdQv/wgFJRr1D+fDNZlpB1Pm1kIK6uK1sm1nlQ34cHC 1afCpa6vv1y36ypvTI/IAGXTP5bh2iXgfEWn2tdcuRA1od98TfLoaF+ZSlcetnva6J+Q SdoA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sberdevices.ru header.s=mail header.b=N9VJ12ll; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=sberdevices.ru Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id k190-20020a6384c7000000b0052cbf501db2si21584506pgd.68.2023.07.04.07.02.29; Tue, 04 Jul 2023 07:02:43 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@sberdevices.ru header.s=mail header.b=N9VJ12ll; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=sberdevices.ru Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231695AbjGDN77 (ORCPT <rfc822;tebrre53rla2o@gmail.com> + 99 others); Tue, 4 Jul 2023 09:59:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33636 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230472AbjGDN7u (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Tue, 4 Jul 2023 09:59:50 -0400 Received: from mx1.sberdevices.ru (mx1.sberdevices.ru [37.18.73.165]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7811010D3; Tue, 4 Jul 2023 06:59:48 -0700 (PDT) Received: from p-infra-ksmg-sc-msk01 (localhost [127.0.0.1]) by mx1.sberdevices.ru (Postfix) with ESMTP id E3802100073; Tue, 4 Jul 2023 16:59:46 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.sberdevices.ru E3802100073 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sberdevices.ru; s=mail; t=1688479186; bh=GqJ6v9rct7JIpD7/9y+mD3WCzkd0bTZ9Ye0iVwHILeo=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:From; b=N9VJ12llQT5RpBSAc88lGVNKEk2wT1IkruyT6FVw6om14zJEWsAs6Vr/UlcLnrQMN YfzmQ5e7xOWTIwMsmfs1eAfC+9ZeCMkECYUOFDbxdOs50hsFkNb56RXU00PLOI5VF2 5WwaEkuY2f9FihDnwI/DpzJdwqColZOohyVhrZNRsNQmWX6YbsRhs678taYiZQoRFv VTyndBzDrF+II1feGs5G9ZvbKjeFfCRylj/ml1S72VzV78vVtDX+oowgKQPJtqRpPr CTiUB/gRRFLoH/pUnwtt/5jWHUmZp9/VOaMB524WO/NNKesqlsS7W369hoMcQMKLb4 kC6zVLWSjip8w== Received: from p-i-exch-sc-m01.sberdevices.ru (p-i-exch-sc-m01.sberdevices.ru [172.16.192.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.sberdevices.ru (Postfix) with ESMTPS; Tue, 4 Jul 2023 16:59:46 +0300 (MSK) Received: from localhost.localdomain (100.64.160.123) by p-i-exch-sc-m01.sberdevices.ru (172.16.192.107) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.30; Tue, 4 Jul 2023 16:59:36 +0300 From: Dmitry Rokosov <ddrokosov@sberdevices.ru> To: <gregkh@linuxfoundation.org>, <robh+dt@kernel.org>, <krzysztof.kozlowski+dt@linaro.org>, <conor+dt@kernel.org>, <neil.armstrong@linaro.org>, <jbrunet@baylibre.com>, <jirislaby@kernel.org>, <khilman@baylibre.com>, <martin.blumenstingl@googlemail.com> CC: <kelvin.zhang@amlogic.com>, <xianwei.zhao@amlogic.com>, <kernel@sberdevices.ru>, <rockosov@gmail.com>, <linux-amlogic@lists.infradead.org>, <linux-serial@vger.kernel.org>, <devicetree@vger.kernel.org>, <linux-kernel@vger.kernel.org>, <linux-arm-kernel@lists.infradead.org>, Dmitry Rokosov <ddrokosov@sberdevices.ru> Subject: [PATCH v1 3/5] tty: serial: meson: apply ttyS devname instead of ttyAML for new SoCs Date: Tue, 4 Jul 2023 16:59:34 +0300 Message-ID: <20230704135936.14697-4-ddrokosov@sberdevices.ru> X-Mailer: git-send-email 2.36.0 In-Reply-To: <20230704135936.14697-1-ddrokosov@sberdevices.ru> References: <20230704135936.14697-1-ddrokosov@sberdevices.ru> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [100.64.160.123] X-ClientProxiedBy: p-i-exch-sc-m02.sberdevices.ru (172.16.192.103) To p-i-exch-sc-m01.sberdevices.ru (172.16.192.107) X-KSMG-Rule-ID: 10 X-KSMG-Message-Action: clean X-KSMG-AntiSpam-Lua-Profiles: 178420 [Jul 04 2023] X-KSMG-AntiSpam-Version: 5.9.59.0 X-KSMG-AntiSpam-Envelope-From: DDRokosov@sberdevices.ru X-KSMG-AntiSpam-Rate: 0 X-KSMG-AntiSpam-Status: not_detected X-KSMG-AntiSpam-Method: none X-KSMG-AntiSpam-Auth: dkim=none X-KSMG-AntiSpam-Info: LuaCore: 520 520 ccb018a655251011855942a2571029252d3d69a2, {Tracking_uf_ne_domains}, {Tracking_from_domain_doesnt_match_to}, libera.irclog.whitequark.org:7.1.1;p-i-exch-sc-m01.sberdevices.ru:5.0.1,7.1.1;100.64.160.123:7.1.2;127.0.0.199:7.1.2;d41d8cd98f00b204e9800998ecf8427e.com:7.1.1;sberdevices.ru:5.0.1,7.1.1, FromAlignment: s, {Tracking_white_helo}, ApMailHostAddress: 100.64.160.123 X-MS-Exchange-Organization-SCL: -1 X-KSMG-AntiSpam-Interceptor-Info: scan successful X-KSMG-AntiPhishing: Clean, bases: 2023/07/04 08:48:00 X-KSMG-LinksScanning: Clean, bases: 2023/07/04 08:48:00 X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 2.0.1.6960, bases: 2023/07/04 05:54:00 #21559896 X-KSMG-AntiVirus-Status: Clean, skipped X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1770498937215491354?= X-GMAIL-MSGID: =?utf-8?q?1770498937215491354?= |
Series |
tty: serial: meson: support ttyS devname
|
|
Commit Message
Dmitry Rokosov
July 4, 2023, 1:59 p.m. UTC
It is worth noting that the devname ttyS is a widely recognized tty name
and is commonly used by many uart device drivers. Given the established
usage and compatibility concerns, it may not be feasible to change the
devname for older SoCs. However, for new definitions, it is acceptable
and even recommended to use a new devname to help ensure clarity and
avoid any potential conflicts on lower or upper software levels. In
addition, modify the meson_uart_dt match data for g12a, a1, and s4 to
their appropriate values to ensure proper devname values and
functionality.
For more information please refer to IRC discussion at [1].
Links:
[1]: https://libera.irclog.whitequark.org/linux-amlogic/2023-07-03
Signed-off-by: Dmitry Rokosov <ddrokosov@sberdevices.ru>
---
drivers/tty/serial/meson_uart.c | 33 +++++++++++++++++++++++++++++++--
1 file changed, 31 insertions(+), 2 deletions(-)
Comments
On 04/07/2023 15:59, Dmitry Rokosov wrote: > It is worth noting that the devname ttyS is a widely recognized tty name > and is commonly used by many uart device drivers. Given the established > usage and compatibility concerns, it may not be feasible to change the > devname for older SoCs. However, for new definitions, it is acceptable > and even recommended to use a new devname to help ensure clarity and > avoid any potential conflicts on lower or upper software levels. In > addition, modify the meson_uart_dt match data for g12a, a1, and s4 to > their appropriate values to ensure proper devname values and > functionality. I'm not confident about modifying a global struct from a probe, I think you should add a separate meson_uart_driver/meson_serial_console couple with ttyS instead of ttyAML, refer to the right uart_driver in meson_uart_data and in probe() register it and pass it to uart_add_one_port(). Neil > > For more information please refer to IRC discussion at [1]. > > Links: > [1]: https://libera.irclog.whitequark.org/linux-amlogic/2023-07-03 > > Signed-off-by: Dmitry Rokosov <ddrokosov@sberdevices.ru> > --- > drivers/tty/serial/meson_uart.c | 33 +++++++++++++++++++++++++++++++-- > 1 file changed, 31 insertions(+), 2 deletions(-) > > diff --git a/drivers/tty/serial/meson_uart.c b/drivers/tty/serial/meson_uart.c > index 87c0eb5f2dba..361f9326b527 100644 > --- a/drivers/tty/serial/meson_uart.c > +++ b/drivers/tty/serial/meson_uart.c > @@ -82,6 +82,7 @@ static struct uart_driver meson_uart_driver; > static struct uart_port *meson_ports[AML_UART_PORT_NUM]; > > struct meson_uart_data { > + const char *dev_name; > bool has_xtal_div2; > }; > > @@ -683,6 +684,7 @@ static int meson_uart_probe_clocks(struct platform_device *pdev, > > static int meson_uart_probe(struct platform_device *pdev) > { > + const struct meson_uart_data *priv_data; > struct resource *res_mem; > struct uart_port *port; > u32 fifosize = 64; /* Default is 64, 128 for EE UART_0 */ > @@ -729,6 +731,18 @@ static int meson_uart_probe(struct platform_device *pdev) > if (ret) > return ret; > > + priv_data = device_get_match_data(&pdev->dev); > + > + if (priv_data) { > + struct console *cons = meson_uart_driver.cons; > + > + meson_uart_driver.dev_name = priv_data->dev_name; > + > + if (cons) > + strscpy(cons->name, priv_data->dev_name, > + sizeof(cons->name)); > + } > + > if (!meson_uart_driver.state) { > ret = uart_register_driver(&meson_uart_driver); > if (ret) > @@ -748,7 +762,7 @@ static int meson_uart_probe(struct platform_device *pdev) > port->x_char = 0; > port->ops = &meson_uart_ops; > port->fifosize = fifosize; > - port->private_data = (void *)device_get_match_data(&pdev->dev); > + port->private_data = (void *)priv_data; > > meson_ports[pdev->id] = port; > platform_set_drvdata(pdev, port); > @@ -780,6 +794,17 @@ static int meson_uart_remove(struct platform_device *pdev) > } > > static struct meson_uart_data meson_g12a_uart_data = { > + .dev_name = "ttyAML", > + .has_xtal_div2 = true, > +}; > + > +static struct meson_uart_data meson_a1_uart_data = { > + .dev_name = "ttyS", > + .has_xtal_div2 = false, > +}; > + > +static struct meson_uart_data meson_s4_uart_data = { > + .dev_name = "ttyS", > .has_xtal_div2 = true, > }; > > @@ -794,7 +819,11 @@ static const struct of_device_id meson_uart_dt_match[] = { > }, > { > .compatible = "amlogic,meson-s4-uart", > - .data = (void *)&meson_g12a_uart_data, > + .data = (void *)&meson_s4_uart_data, > + }, > + { > + .compatible = "amlogic,meson-a1-uart", > + .data = (void *)&meson_a1_uart_data, > }, > { /* sentinel */ }, > };
Hello Neil, Thank you for quick feedback! On Tue, Jul 04, 2023 at 04:42:39PM +0200, neil.armstrong@linaro.org wrote: > On 04/07/2023 15:59, Dmitry Rokosov wrote: > > It is worth noting that the devname ttyS is a widely recognized tty name > > and is commonly used by many uart device drivers. Given the established > > usage and compatibility concerns, it may not be feasible to change the > > devname for older SoCs. However, for new definitions, it is acceptable > > and even recommended to use a new devname to help ensure clarity and > > avoid any potential conflicts on lower or upper software levels. In > > addition, modify the meson_uart_dt match data for g12a, a1, and s4 to > > their appropriate values to ensure proper devname values and > > functionality. > > I'm not confident about modifying a global struct from a probe, > I think you should add a separate meson_uart_driver/meson_serial_console couple > with ttyS instead of ttyAML, refer to the right uart_driver in meson_uart_data > and in probe() register it and pass it to uart_add_one_port(). Could you provide some insight into why you believe this solution may not be acceptable? It appears that the meson_uart_driver and meson_serial_console are not labeled with __init, which means it stay in memory forever. To clarify, are you suggesting a solution that involves segregating the meson_uart_driver and meson_serial_console objects for each scenario and subsequently declaring pointers to both objects within the meson_uart_data? I want to make sure that I have accurately grasped the essence of your proposed approach. > > > > For more information please refer to IRC discussion at [1]. > > > > Links: > > [1]: https://libera.irclog.whitequark.org/linux-amlogic/2023-07-03 > > > > Signed-off-by: Dmitry Rokosov <ddrokosov@sberdevices.ru> > > --- > > drivers/tty/serial/meson_uart.c | 33 +++++++++++++++++++++++++++++++-- > > 1 file changed, 31 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/tty/serial/meson_uart.c b/drivers/tty/serial/meson_uart.c > > index 87c0eb5f2dba..361f9326b527 100644 > > --- a/drivers/tty/serial/meson_uart.c > > +++ b/drivers/tty/serial/meson_uart.c > > @@ -82,6 +82,7 @@ static struct uart_driver meson_uart_driver; > > static struct uart_port *meson_ports[AML_UART_PORT_NUM]; > > struct meson_uart_data { > > + const char *dev_name; > > bool has_xtal_div2; > > }; > > @@ -683,6 +684,7 @@ static int meson_uart_probe_clocks(struct platform_device *pdev, > > static int meson_uart_probe(struct platform_device *pdev) > > { > > + const struct meson_uart_data *priv_data; > > struct resource *res_mem; > > struct uart_port *port; > > u32 fifosize = 64; /* Default is 64, 128 for EE UART_0 */ > > @@ -729,6 +731,18 @@ static int meson_uart_probe(struct platform_device *pdev) > > if (ret) > > return ret; > > + priv_data = device_get_match_data(&pdev->dev); > > + > > + if (priv_data) { > > + struct console *cons = meson_uart_driver.cons; > > + > > + meson_uart_driver.dev_name = priv_data->dev_name; > > + > > + if (cons) > > + strscpy(cons->name, priv_data->dev_name, > > + sizeof(cons->name)); > > + } > > + > > if (!meson_uart_driver.state) { > > ret = uart_register_driver(&meson_uart_driver); > > if (ret) > > @@ -748,7 +762,7 @@ static int meson_uart_probe(struct platform_device *pdev) > > port->x_char = 0; > > port->ops = &meson_uart_ops; > > port->fifosize = fifosize; > > - port->private_data = (void *)device_get_match_data(&pdev->dev); > > + port->private_data = (void *)priv_data; > > meson_ports[pdev->id] = port; > > platform_set_drvdata(pdev, port); > > @@ -780,6 +794,17 @@ static int meson_uart_remove(struct platform_device *pdev) > > } > > static struct meson_uart_data meson_g12a_uart_data = { > > + .dev_name = "ttyAML", > > + .has_xtal_div2 = true, > > +}; > > + > > +static struct meson_uart_data meson_a1_uart_data = { > > + .dev_name = "ttyS", > > + .has_xtal_div2 = false, > > +}; > > + > > +static struct meson_uart_data meson_s4_uart_data = { > > + .dev_name = "ttyS", > > .has_xtal_div2 = true, > > }; > > @@ -794,7 +819,11 @@ static const struct of_device_id meson_uart_dt_match[] = { > > }, > > { > > .compatible = "amlogic,meson-s4-uart", > > - .data = (void *)&meson_g12a_uart_data, > > + .data = (void *)&meson_s4_uart_data, > > + }, > > + { > > + .compatible = "amlogic,meson-a1-uart", > > + .data = (void *)&meson_a1_uart_data, > > }, > > { /* sentinel */ }, > > }; >
Hi. On 04/07/2023 16:59, Dmitry Rokosov wrote: > Hello Neil, > > Thank you for quick feedback! > > On Tue, Jul 04, 2023 at 04:42:39PM +0200, neil.armstrong@linaro.org wrote: >> On 04/07/2023 15:59, Dmitry Rokosov wrote: >>> It is worth noting that the devname ttyS is a widely recognized tty name >>> and is commonly used by many uart device drivers. Given the established >>> usage and compatibility concerns, it may not be feasible to change the >>> devname for older SoCs. However, for new definitions, it is acceptable >>> and even recommended to use a new devname to help ensure clarity and >>> avoid any potential conflicts on lower or upper software levels. In >>> addition, modify the meson_uart_dt match data for g12a, a1, and s4 to >>> their appropriate values to ensure proper devname values and >>> functionality. >> >> I'm not confident about modifying a global struct from a probe, >> I think you should add a separate meson_uart_driver/meson_serial_console couple >> with ttyS instead of ttyAML, refer to the right uart_driver in meson_uart_data >> and in probe() register it and pass it to uart_add_one_port(). > > Could you provide some insight into why you believe this solution may > not be acceptable? It appears that the meson_uart_driver and > meson_serial_console are not labeled with __init, which means it stay in > memory forever. Yes but nothing forbids registering a g12a and an a1 uart on the same system, but you modify the meson_uart_driver/meson_serial_console struct. This could cause some issues. In practice this will never happen, but since we don't control the DT passed to the system we must make sure we take in account any scenario. > > To clarify, are you suggesting a solution that involves segregating the > meson_uart_driver and meson_serial_console objects for each scenario and > subsequently declaring pointers to both objects within the > meson_uart_data? I want to make sure that I have accurately grasped the > essence of your proposed approach. Not both, only the appropriate one. So either we make sure ttyAML and ttyS at exclusive at runtime, in this case we can modify the global meson_uart_driver/meson_serial_console, or you add a second set of uart_driver/console structs to handle this improbable case. Neil > >>> >>> For more information please refer to IRC discussion at [1]. >>> >>> Links: >>> [1]: https://libera.irclog.whitequark.org/linux-amlogic/2023-07-03 >>> >>> Signed-off-by: Dmitry Rokosov <ddrokosov@sberdevices.ru> >>> --- >>> drivers/tty/serial/meson_uart.c | 33 +++++++++++++++++++++++++++++++-- >>> 1 file changed, 31 insertions(+), 2 deletions(-) >>> >>> diff --git a/drivers/tty/serial/meson_uart.c b/drivers/tty/serial/meson_uart.c >>> index 87c0eb5f2dba..361f9326b527 100644 >>> --- a/drivers/tty/serial/meson_uart.c >>> +++ b/drivers/tty/serial/meson_uart.c >>> @@ -82,6 +82,7 @@ static struct uart_driver meson_uart_driver; >>> static struct uart_port *meson_ports[AML_UART_PORT_NUM]; >>> struct meson_uart_data { >>> + const char *dev_name; >>> bool has_xtal_div2; >>> }; >>> @@ -683,6 +684,7 @@ static int meson_uart_probe_clocks(struct platform_device *pdev, >>> static int meson_uart_probe(struct platform_device *pdev) >>> { >>> + const struct meson_uart_data *priv_data; >>> struct resource *res_mem; >>> struct uart_port *port; >>> u32 fifosize = 64; /* Default is 64, 128 for EE UART_0 */ >>> @@ -729,6 +731,18 @@ static int meson_uart_probe(struct platform_device *pdev) >>> if (ret) >>> return ret; >>> + priv_data = device_get_match_data(&pdev->dev); >>> + >>> + if (priv_data) { >>> + struct console *cons = meson_uart_driver.cons; >>> + >>> + meson_uart_driver.dev_name = priv_data->dev_name; >>> + >>> + if (cons) >>> + strscpy(cons->name, priv_data->dev_name, >>> + sizeof(cons->name)); >>> + } >>> + >>> if (!meson_uart_driver.state) { >>> ret = uart_register_driver(&meson_uart_driver); >>> if (ret) >>> @@ -748,7 +762,7 @@ static int meson_uart_probe(struct platform_device *pdev) >>> port->x_char = 0; >>> port->ops = &meson_uart_ops; >>> port->fifosize = fifosize; >>> - port->private_data = (void *)device_get_match_data(&pdev->dev); >>> + port->private_data = (void *)priv_data; >>> meson_ports[pdev->id] = port; >>> platform_set_drvdata(pdev, port); >>> @@ -780,6 +794,17 @@ static int meson_uart_remove(struct platform_device *pdev) >>> } >>> static struct meson_uart_data meson_g12a_uart_data = { >>> + .dev_name = "ttyAML", >>> + .has_xtal_div2 = true, >>> +}; >>> + >>> +static struct meson_uart_data meson_a1_uart_data = { >>> + .dev_name = "ttyS", >>> + .has_xtal_div2 = false, >>> +}; >>> + >>> +static struct meson_uart_data meson_s4_uart_data = { >>> + .dev_name = "ttyS", >>> .has_xtal_div2 = true, >>> }; >>> @@ -794,7 +819,11 @@ static const struct of_device_id meson_uart_dt_match[] = { >>> }, >>> { >>> .compatible = "amlogic,meson-s4-uart", >>> - .data = (void *)&meson_g12a_uart_data, >>> + .data = (void *)&meson_s4_uart_data, >>> + }, >>> + { >>> + .compatible = "amlogic,meson-a1-uart", >>> + .data = (void *)&meson_a1_uart_data, >>> }, >>> { /* sentinel */ }, >>> }; >> >
On Tue, Jul 04, 2023 at 05:29:57PM +0200, neil.armstrong@linaro.org wrote: > Hi. > > On 04/07/2023 16:59, Dmitry Rokosov wrote: > > Hello Neil, > > > > Thank you for quick feedback! > > > > On Tue, Jul 04, 2023 at 04:42:39PM +0200, neil.armstrong@linaro.org wrote: > > > On 04/07/2023 15:59, Dmitry Rokosov wrote: > > > > It is worth noting that the devname ttyS is a widely recognized tty name > > > > and is commonly used by many uart device drivers. Given the established > > > > usage and compatibility concerns, it may not be feasible to change the > > > > devname for older SoCs. However, for new definitions, it is acceptable > > > > and even recommended to use a new devname to help ensure clarity and > > > > avoid any potential conflicts on lower or upper software levels. In > > > > addition, modify the meson_uart_dt match data for g12a, a1, and s4 to > > > > their appropriate values to ensure proper devname values and > > > > functionality. > > > > > > I'm not confident about modifying a global struct from a probe, > > > I think you should add a separate meson_uart_driver/meson_serial_console couple > > > with ttyS instead of ttyAML, refer to the right uart_driver in meson_uart_data > > > and in probe() register it and pass it to uart_add_one_port(). > > > > Could you provide some insight into why you believe this solution may > > not be acceptable? It appears that the meson_uart_driver and > > meson_serial_console are not labeled with __init, which means it stay in > > memory forever. > Yes but nothing forbids registering a g12a and an a1 uart on the same system, > but you modify the meson_uart_driver/meson_serial_console struct. > This could cause some issues. > > In practice this will never happen, but since we don't control the DT passed > to the system we must make sure we take in account any scenario. > Yep, agree, this will cause an issue. > > > > To clarify, are you suggesting a solution that involves segregating the > > meson_uart_driver and meson_serial_console objects for each scenario and > > subsequently declaring pointers to both objects within the > > meson_uart_data? I want to make sure that I have accurately grasped the > > essence of your proposed approach. > > Not both, only the appropriate one. > > So either we make sure ttyAML and ttyS at exclusive at runtime, in this case we can > modify the global meson_uart_driver/meson_serial_console, or you add > a second set of uart_driver/console structs to handle this improbable case. Got it, thank you for explanation! I will prepare the v2. > > > > > > > > > > For more information please refer to IRC discussion at [1]. > > > > > > > > Links: > > > > [1]: https://libera.irclog.whitequark.org/linux-amlogic/2023-07-03 > > > > > > > > Signed-off-by: Dmitry Rokosov <ddrokosov@sberdevices.ru> > > > > --- > > > > drivers/tty/serial/meson_uart.c | 33 +++++++++++++++++++++++++++++++-- > > > > 1 file changed, 31 insertions(+), 2 deletions(-) > > > > > > > > diff --git a/drivers/tty/serial/meson_uart.c b/drivers/tty/serial/meson_uart.c > > > > index 87c0eb5f2dba..361f9326b527 100644 > > > > --- a/drivers/tty/serial/meson_uart.c > > > > +++ b/drivers/tty/serial/meson_uart.c > > > > @@ -82,6 +82,7 @@ static struct uart_driver meson_uart_driver; > > > > static struct uart_port *meson_ports[AML_UART_PORT_NUM]; > > > > struct meson_uart_data { > > > > + const char *dev_name; > > > > bool has_xtal_div2; > > > > }; > > > > @@ -683,6 +684,7 @@ static int meson_uart_probe_clocks(struct platform_device *pdev, > > > > static int meson_uart_probe(struct platform_device *pdev) > > > > { > > > > + const struct meson_uart_data *priv_data; > > > > struct resource *res_mem; > > > > struct uart_port *port; > > > > u32 fifosize = 64; /* Default is 64, 128 for EE UART_0 */ > > > > @@ -729,6 +731,18 @@ static int meson_uart_probe(struct platform_device *pdev) > > > > if (ret) > > > > return ret; > > > > + priv_data = device_get_match_data(&pdev->dev); > > > > + > > > > + if (priv_data) { > > > > + struct console *cons = meson_uart_driver.cons; > > > > + > > > > + meson_uart_driver.dev_name = priv_data->dev_name; > > > > + > > > > + if (cons) > > > > + strscpy(cons->name, priv_data->dev_name, > > > > + sizeof(cons->name)); > > > > + } > > > > + > > > > if (!meson_uart_driver.state) { > > > > ret = uart_register_driver(&meson_uart_driver); > > > > if (ret) > > > > @@ -748,7 +762,7 @@ static int meson_uart_probe(struct platform_device *pdev) > > > > port->x_char = 0; > > > > port->ops = &meson_uart_ops; > > > > port->fifosize = fifosize; > > > > - port->private_data = (void *)device_get_match_data(&pdev->dev); > > > > + port->private_data = (void *)priv_data; > > > > meson_ports[pdev->id] = port; > > > > platform_set_drvdata(pdev, port); > > > > @@ -780,6 +794,17 @@ static int meson_uart_remove(struct platform_device *pdev) > > > > } > > > > static struct meson_uart_data meson_g12a_uart_data = { > > > > + .dev_name = "ttyAML", > > > > + .has_xtal_div2 = true, > > > > +}; > > > > + > > > > +static struct meson_uart_data meson_a1_uart_data = { > > > > + .dev_name = "ttyS", > > > > + .has_xtal_div2 = false, > > > > +}; > > > > + > > > > +static struct meson_uart_data meson_s4_uart_data = { > > > > + .dev_name = "ttyS", > > > > .has_xtal_div2 = true, > > > > }; > > > > @@ -794,7 +819,11 @@ static const struct of_device_id meson_uart_dt_match[] = { > > > > }, > > > > { > > > > .compatible = "amlogic,meson-s4-uart", > > > > - .data = (void *)&meson_g12a_uart_data, > > > > + .data = (void *)&meson_s4_uart_data, > > > > + }, > > > > + { > > > > + .compatible = "amlogic,meson-a1-uart", > > > > + .data = (void *)&meson_a1_uart_data, > > > > }, > > > > { /* sentinel */ }, > > > > }; > > > > > >
On Tue, Jul 04, 2023 at 04:59:34PM +0300, Dmitry Rokosov wrote: > It is worth noting that the devname ttyS is a widely recognized tty name > and is commonly used by many uart device drivers. Given the established > usage and compatibility concerns, it may not be feasible to change the > devname for older SoCs. However, for new definitions, it is acceptable > and even recommended to use a new devname to help ensure clarity and > avoid any potential conflicts on lower or upper software levels. > In > addition, modify the meson_uart_dt match data for g12a, a1, and s4 to > their appropriate values to ensure proper devname values and > functionality. IMO, this is a separate change that should be in another patch, had to go looking through a several of unrelated $subject patches to understand how the binding patch was going to work. Cheers, Conor. > For more information please refer to IRC discussion at [1]. > > Links: > [1]: https://libera.irclog.whitequark.org/linux-amlogic/2023-07-03 > > Signed-off-by: Dmitry Rokosov <ddrokosov@sberdevices.ru> > --- > drivers/tty/serial/meson_uart.c | 33 +++++++++++++++++++++++++++++++-- > 1 file changed, 31 insertions(+), 2 deletions(-) > > diff --git a/drivers/tty/serial/meson_uart.c b/drivers/tty/serial/meson_uart.c > index 87c0eb5f2dba..361f9326b527 100644 > --- a/drivers/tty/serial/meson_uart.c > +++ b/drivers/tty/serial/meson_uart.c > @@ -82,6 +82,7 @@ static struct uart_driver meson_uart_driver; > static struct uart_port *meson_ports[AML_UART_PORT_NUM]; > > struct meson_uart_data { > + const char *dev_name; > bool has_xtal_div2; > }; > > @@ -683,6 +684,7 @@ static int meson_uart_probe_clocks(struct platform_device *pdev, > > static int meson_uart_probe(struct platform_device *pdev) > { > + const struct meson_uart_data *priv_data; > struct resource *res_mem; > struct uart_port *port; > u32 fifosize = 64; /* Default is 64, 128 for EE UART_0 */ > @@ -729,6 +731,18 @@ static int meson_uart_probe(struct platform_device *pdev) > if (ret) > return ret; > > + priv_data = device_get_match_data(&pdev->dev); > + > + if (priv_data) { > + struct console *cons = meson_uart_driver.cons; > + > + meson_uart_driver.dev_name = priv_data->dev_name; > + > + if (cons) > + strscpy(cons->name, priv_data->dev_name, > + sizeof(cons->name)); > + } > + > if (!meson_uart_driver.state) { > ret = uart_register_driver(&meson_uart_driver); > if (ret) > @@ -748,7 +762,7 @@ static int meson_uart_probe(struct platform_device *pdev) > port->x_char = 0; > port->ops = &meson_uart_ops; > port->fifosize = fifosize; > - port->private_data = (void *)device_get_match_data(&pdev->dev); > + port->private_data = (void *)priv_data; > > meson_ports[pdev->id] = port; > platform_set_drvdata(pdev, port); > @@ -780,6 +794,17 @@ static int meson_uart_remove(struct platform_device *pdev) > } > > static struct meson_uart_data meson_g12a_uart_data = { > + .dev_name = "ttyAML", > + .has_xtal_div2 = true, > +}; > + > +static struct meson_uart_data meson_a1_uart_data = { > + .dev_name = "ttyS", > + .has_xtal_div2 = false, > +}; > + > +static struct meson_uart_data meson_s4_uart_data = { > + .dev_name = "ttyS", > .has_xtal_div2 = true, > }; > > @@ -794,7 +819,11 @@ static const struct of_device_id meson_uart_dt_match[] = { > }, > { > .compatible = "amlogic,meson-s4-uart", > - .data = (void *)&meson_g12a_uart_data, > + .data = (void *)&meson_s4_uart_data, > + }, > + { > + .compatible = "amlogic,meson-a1-uart", > + .data = (void *)&meson_a1_uart_data, > }, > { /* sentinel */ }, > }; > -- > 2.36.0 >
On Tue, Jul 04, 2023 at 05:57:15PM +0100, Conor Dooley wrote: > On Tue, Jul 04, 2023 at 04:59:34PM +0300, Dmitry Rokosov wrote: > > It is worth noting that the devname ttyS is a widely recognized tty name > > and is commonly used by many uart device drivers. Given the established > > usage and compatibility concerns, it may not be feasible to change the > > devname for older SoCs. However, for new definitions, it is acceptable > > and even recommended to use a new devname to help ensure clarity and > > avoid any potential conflicts on lower or upper software levels. > > > In > > addition, modify the meson_uart_dt match data for g12a, a1, and s4 to > > their appropriate values to ensure proper devname values and > > functionality. > > IMO, this is a separate change that should be in another patch, had to > go looking through a several of unrelated $subject patches to understand > how the binding patch was going to work. I apologize, but I'm having difficulty understanding your suggestion. Are you recommending that a distinct binding patch for meson-uart-a1 be sent as part of a separate patch series? From my perspective, isolating the binding patch may not provide all the necessary context as it is reliant on a separate 'compatible' declaration within the meson-uart driver. However, this declaration is interconnected with the devname support patchset. Therefore, it seems that all of these patches are linked together. > > For more information please refer to IRC discussion at [1]. > > > > Links: > > [1]: https://libera.irclog.whitequark.org/linux-amlogic/2023-07-03 > > > > Signed-off-by: Dmitry Rokosov <ddrokosov@sberdevices.ru> > > --- > > drivers/tty/serial/meson_uart.c | 33 +++++++++++++++++++++++++++++++-- > > 1 file changed, 31 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/tty/serial/meson_uart.c b/drivers/tty/serial/meson_uart.c > > index 87c0eb5f2dba..361f9326b527 100644 > > --- a/drivers/tty/serial/meson_uart.c > > +++ b/drivers/tty/serial/meson_uart.c > > @@ -82,6 +82,7 @@ static struct uart_driver meson_uart_driver; > > static struct uart_port *meson_ports[AML_UART_PORT_NUM]; > > > > struct meson_uart_data { > > + const char *dev_name; > > bool has_xtal_div2; > > }; > > > > @@ -683,6 +684,7 @@ static int meson_uart_probe_clocks(struct platform_device *pdev, > > > > static int meson_uart_probe(struct platform_device *pdev) > > { > > + const struct meson_uart_data *priv_data; > > struct resource *res_mem; > > struct uart_port *port; > > u32 fifosize = 64; /* Default is 64, 128 for EE UART_0 */ > > @@ -729,6 +731,18 @@ static int meson_uart_probe(struct platform_device *pdev) > > if (ret) > > return ret; > > > > + priv_data = device_get_match_data(&pdev->dev); > > + > > + if (priv_data) { > > + struct console *cons = meson_uart_driver.cons; > > + > > + meson_uart_driver.dev_name = priv_data->dev_name; > > + > > + if (cons) > > + strscpy(cons->name, priv_data->dev_name, > > + sizeof(cons->name)); > > + } > > + > > if (!meson_uart_driver.state) { > > ret = uart_register_driver(&meson_uart_driver); > > if (ret) > > @@ -748,7 +762,7 @@ static int meson_uart_probe(struct platform_device *pdev) > > port->x_char = 0; > > port->ops = &meson_uart_ops; > > port->fifosize = fifosize; > > - port->private_data = (void *)device_get_match_data(&pdev->dev); > > + port->private_data = (void *)priv_data; > > > > meson_ports[pdev->id] = port; > > platform_set_drvdata(pdev, port); > > @@ -780,6 +794,17 @@ static int meson_uart_remove(struct platform_device *pdev) > > } > > > > static struct meson_uart_data meson_g12a_uart_data = { > > + .dev_name = "ttyAML", > > + .has_xtal_div2 = true, > > +}; > > + > > +static struct meson_uart_data meson_a1_uart_data = { > > + .dev_name = "ttyS", > > + .has_xtal_div2 = false, > > +}; > > + > > +static struct meson_uart_data meson_s4_uart_data = { > > + .dev_name = "ttyS", > > .has_xtal_div2 = true, > > }; > > > > @@ -794,7 +819,11 @@ static const struct of_device_id meson_uart_dt_match[] = { > > }, > > { > > .compatible = "amlogic,meson-s4-uart", > > - .data = (void *)&meson_g12a_uart_data, > > + .data = (void *)&meson_s4_uart_data, > > + }, > > + { > > + .compatible = "amlogic,meson-a1-uart", > > + .data = (void *)&meson_a1_uart_data, > > }, > > { /* sentinel */ }, > > }; > > -- > > 2.36.0 > >
On Tue, Jul 04, 2023 at 08:13:26PM +0300, Dmitry Rokosov wrote: > On Tue, Jul 04, 2023 at 05:57:15PM +0100, Conor Dooley wrote: > > On Tue, Jul 04, 2023 at 04:59:34PM +0300, Dmitry Rokosov wrote: > > > It is worth noting that the devname ttyS is a widely recognized tty name > > > and is commonly used by many uart device drivers. Given the established > > > usage and compatibility concerns, it may not be feasible to change the > > > devname for older SoCs. However, for new definitions, it is acceptable > > > and even recommended to use a new devname to help ensure clarity and > > > avoid any potential conflicts on lower or upper software levels. > > > > > In > > > addition, modify the meson_uart_dt match data for g12a, a1, and s4 to > > > their appropriate values to ensure proper devname values and > > > functionality. > > > > IMO, this is a separate change that should be in another patch, had to > > go looking through a several of unrelated $subject patches to understand > > how the binding patch was going to work. > > I apologize, but I'm having difficulty understanding your suggestion. > Are you recommending that a distinct binding patch for meson-uart-a1 be > sent as part of a separate patch series? From my perspective, isolating > the binding patch may not provide all the necessary context as it is > reliant on a separate 'compatible' declaration within the meson-uart > driver. However, this declaration is interconnected with the devname > support patchset. Therefore, it seems that all of these patches are > linked together. Maybe it is just a case of how the commit message was written, where the SoCs responsible for the changes appear only "in addition". At the moment, it seemed like an unrelated addition that was sneaking into the commit to me, who was trying to find the code change that made the DT side of things valid, Re-phrasing the commit message to explain that the a1 is the reason for this change, rather than mentioning the SoCs as an apparent afterthought would make sense to me here. As would splitting reworking the code to support devname stuff in one commit & adding the new match for the a1 in another. Whatever works for you.
diff --git a/drivers/tty/serial/meson_uart.c b/drivers/tty/serial/meson_uart.c index 87c0eb5f2dba..361f9326b527 100644 --- a/drivers/tty/serial/meson_uart.c +++ b/drivers/tty/serial/meson_uart.c @@ -82,6 +82,7 @@ static struct uart_driver meson_uart_driver; static struct uart_port *meson_ports[AML_UART_PORT_NUM]; struct meson_uart_data { + const char *dev_name; bool has_xtal_div2; }; @@ -683,6 +684,7 @@ static int meson_uart_probe_clocks(struct platform_device *pdev, static int meson_uart_probe(struct platform_device *pdev) { + const struct meson_uart_data *priv_data; struct resource *res_mem; struct uart_port *port; u32 fifosize = 64; /* Default is 64, 128 for EE UART_0 */ @@ -729,6 +731,18 @@ static int meson_uart_probe(struct platform_device *pdev) if (ret) return ret; + priv_data = device_get_match_data(&pdev->dev); + + if (priv_data) { + struct console *cons = meson_uart_driver.cons; + + meson_uart_driver.dev_name = priv_data->dev_name; + + if (cons) + strscpy(cons->name, priv_data->dev_name, + sizeof(cons->name)); + } + if (!meson_uart_driver.state) { ret = uart_register_driver(&meson_uart_driver); if (ret) @@ -748,7 +762,7 @@ static int meson_uart_probe(struct platform_device *pdev) port->x_char = 0; port->ops = &meson_uart_ops; port->fifosize = fifosize; - port->private_data = (void *)device_get_match_data(&pdev->dev); + port->private_data = (void *)priv_data; meson_ports[pdev->id] = port; platform_set_drvdata(pdev, port); @@ -780,6 +794,17 @@ static int meson_uart_remove(struct platform_device *pdev) } static struct meson_uart_data meson_g12a_uart_data = { + .dev_name = "ttyAML", + .has_xtal_div2 = true, +}; + +static struct meson_uart_data meson_a1_uart_data = { + .dev_name = "ttyS", + .has_xtal_div2 = false, +}; + +static struct meson_uart_data meson_s4_uart_data = { + .dev_name = "ttyS", .has_xtal_div2 = true, }; @@ -794,7 +819,11 @@ static const struct of_device_id meson_uart_dt_match[] = { }, { .compatible = "amlogic,meson-s4-uart", - .data = (void *)&meson_g12a_uart_data, + .data = (void *)&meson_s4_uart_data, + }, + { + .compatible = "amlogic,meson-a1-uart", + .data = (void *)&meson_a1_uart_data, }, { /* sentinel */ }, };