From nobody Sun May 10 21:55:56 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 14A71C433FE for ; Fri, 22 Apr 2022 11:14:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1447050AbiDVLRk (ORCPT ); Fri, 22 Apr 2022 07:17:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36104 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1447036AbiDVLRf (ORCPT ); Fri, 22 Apr 2022 07:17:35 -0400 Received: from mail-sh.amlogic.com (mail-sh.amlogic.com [58.32.228.43]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2448C53A77; Fri, 22 Apr 2022 04:14:42 -0700 (PDT) Received: from droid06.amlogic.com (10.18.11.248) by mail-sh.amlogic.com (10.18.11.5) with Microsoft SMTP Server id 15.1.2176.14; Fri, 22 Apr 2022 19:14:39 +0800 From: Yu Tu To: , , , , Greg Kroah-Hartman , Neil Armstrong , Kevin Hilman , Jerome Brunet CC: Jiri Slaby , Martin Blumenstingl , Yu Tu Subject: [PATCH V3 1/2] tty: serial: meson: Add a 12MHz internal clock rate to calculate baud rate in order to meet the baud rate requirements of special BT modules Date: Fri, 22 Apr 2022 19:13:19 +0800 Message-ID: <20220422111320.19234-2-yu.tu@amlogic.com> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20220422111320.19234-1-yu.tu@amlogic.com> References: <20220422111320.19234-1-yu.tu@amlogic.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.18.11.248] Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" A /2 divider over XTAL was introduced since G12A, and is preferred to be used over the still present /3 divider since it provides much closer frequencies vs the request baudrate. Especially the BT module uses 3Mhz baud rate. 8Mhz calculations can lead to baud rate bias, causing some problems. Signed-off-by: Yu Tu Reviewed-by: Neil Armstrong --- drivers/tty/serial/meson_uart.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/drivers/tty/serial/meson_uart.c b/drivers/tty/serial/meson_uar= t.c index 8e59624935af..58bd2723c004 100644 --- a/drivers/tty/serial/meson_uart.c +++ b/drivers/tty/serial/meson_uart.c @@ -68,6 +68,7 @@ #define AML_UART_BAUD_MASK 0x7fffff #define AML_UART_BAUD_USE BIT(23) #define AML_UART_BAUD_XTAL BIT(24) +#define AML_UART_BAUD_XTAL_DIV2 BIT(27) =20 #define AML_UART_PORT_NUM 12 #define AML_UART_PORT_OFFSET 6 @@ -80,6 +81,10 @@ static struct uart_driver meson_uart_driver; =20 static struct uart_port *meson_ports[AML_UART_PORT_NUM]; =20 +struct meson_uart_data { + bool has_xtal_div2; +}; + static void meson_uart_set_mctrl(struct uart_port *port, unsigned int mctr= l) { } @@ -293,13 +298,20 @@ static int meson_uart_startup(struct uart_port *port) =20 static void meson_uart_change_speed(struct uart_port *port, unsigned long = baud) { - u32 val; + const struct meson_uart_data *private_data =3D port->private_data; + u32 val =3D 0; =20 while (!meson_uart_tx_empty(port)) cpu_relax(); =20 if (port->uartclk =3D=3D 24000000) { - val =3D DIV_ROUND_CLOSEST(port->uartclk / 3, baud) - 1; + unsigned int xtal_div =3D 3; + + if (private_data && private_data->has_xtal_div2) { + xtal_div =3D 2; + val |=3D AML_UART_BAUD_XTAL_DIV2; + } + val |=3D DIV_ROUND_CLOSEST(port->uartclk / xtal_div, baud) - 1; val |=3D AML_UART_BAUD_XTAL; } else { val =3D DIV_ROUND_CLOSEST(port->uartclk / 4, baud) - 1; @@ -749,6 +761,7 @@ static int meson_uart_probe(struct platform_device *pde= v) port->x_char =3D 0; port->ops =3D &meson_uart_ops; port->fifosize =3D fifosize; + port->private_data =3D (void *)device_get_match_data(&pdev->dev); =20 meson_ports[pdev->id] =3D port; platform_set_drvdata(pdev, port); --=20 2.33.1 From nobody Sun May 10 21:55:56 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C4C42C433F5 for ; Fri, 22 Apr 2022 11:14:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1447038AbiDVLRt (ORCPT ); Fri, 22 Apr 2022 07:17:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36152 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1447052AbiDVLRl (ORCPT ); Fri, 22 Apr 2022 07:17:41 -0400 Received: from mail-sh.amlogic.com (mail-sh.amlogic.com [58.32.228.43]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5C1275523B; Fri, 22 Apr 2022 04:14:47 -0700 (PDT) Received: from droid06.amlogic.com (10.18.11.248) by mail-sh.amlogic.com (10.18.11.5) with Microsoft SMTP Server id 15.1.2176.14; Fri, 22 Apr 2022 19:14:42 +0800 From: Yu Tu To: , , , , Greg Kroah-Hartman , Neil Armstrong , Kevin Hilman , Jerome Brunet CC: Jiri Slaby , Martin Blumenstingl , Yu Tu Subject: [PATCH V3 2/2] tty: serial: meson: Added S4 SOC compatibility Date: Fri, 22 Apr 2022 19:13:20 +0800 Message-ID: <20220422111320.19234-3-yu.tu@amlogic.com> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20220422111320.19234-1-yu.tu@amlogic.com> References: <20220422111320.19234-1-yu.tu@amlogic.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.18.11.248] Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Make UART driver compatible with S4 SOC UART. Meanwhile, the S4 SOC UART uses 12MHz as the clock source for baud rate calculations. Signed-off-by: Yu Tu Reviewed-by: Neil Armstrong --- drivers/tty/serial/meson_uart.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/tty/serial/meson_uart.c b/drivers/tty/serial/meson_uar= t.c index 58bd2723c004..c748e5dd5348 100644 --- a/drivers/tty/serial/meson_uart.c +++ b/drivers/tty/serial/meson_uart.c @@ -790,11 +790,19 @@ static int meson_uart_remove(struct platform_device *= pdev) return 0; } =20 +static struct meson_uart_data s4_uart_data =3D { + .has_xtal_div2 =3D true, +}; + static const struct of_device_id meson_uart_dt_match[] =3D { { .compatible =3D "amlogic,meson6-uart" }, { .compatible =3D "amlogic,meson8-uart" }, { .compatible =3D "amlogic,meson8b-uart" }, { .compatible =3D "amlogic,meson-gx-uart" }, + { + .compatible =3D "amlogic,meson-s4-uart", + .data =3D (void *)&s4_uart_data, + }, { /* sentinel */ }, }; MODULE_DEVICE_TABLE(of, meson_uart_dt_match); --=20 2.33.1