From: Emil Renner Berthing <kernel@esmil.dk> To: linux-riscv@lists.infradead.org, devicetree@vger.kernel.org, linux-clk@vger.kernel.org, linux-gpio@vger.kernel.org, linux-serial@vger.kernel.org Cc: Emil Renner Berthing <kernel@esmil.dk>, Palmer Dabbelt <palmer@dabbelt.com>, Paul Walmsley <paul.walmsley@sifive.com>, Rob Herring <robh+dt@kernel.org>, Michael Turquette <mturquette@baylibre.com>, Stephen Boyd <sboyd@kernel.org>, Thomas Gleixner <tglx@linutronix.de>, Marc Zyngier <maz@kernel.org>, Philipp Zabel <p.zabel@pengutronix.de>, Linus Walleij <linus.walleij@linaro.org>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Daniel Lezcano <daniel.lezcano@linaro.org>, Andy Shevchenko <andriy.shevchenko@linux.intel.com>, Jiri Slaby <jirislaby@kernel.org>, Maximilian Luz <luzmaximilian@gmail.com>, Sagar Kadam <sagar.kadam@sifive.com>, Drew Fustini <drew@beagleboard.org>, Geert Uytterhoeven <geert@linux-m68k.org>, Michael Zhu <michael.zhu@starfivetech.com>, Fu Wei <tekkamanninja@gmail.com>, Anup Patel <anup.patel@wdc.com>, Atish Patra <atish.patra@wdc.com>, Matteo Croce <mcroce@microsoft.com>, linux-kernel@vger.kernel.org Subject: [PATCH v2 14/16] serial: 8250_dw: Add skip_clk_set_rate quirk Date: Thu, 21 Oct 2021 19:42:21 +0200 [thread overview] Message-ID: <20211021174223.43310-15-kernel@esmil.dk> (raw) In-Reply-To: <20211021174223.43310-1-kernel@esmil.dk> On the StarFive JH7100 SoC the UART core clocks can't be set to exactly 16 * 115200Hz and many other common bitrates. Trying this will only result in a higher input clock, but low enough that the UART's internal divisor can't come close enough to the baud rate target. So rather than try to set the input clock it's better to rely solely on the UART's internal divisor. Signed-off-by: Emil Renner Berthing <kernel@esmil.dk> --- drivers/tty/serial/8250/8250_dw.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c index 5a2ff843ec5d..729b59b14ff1 100644 --- a/drivers/tty/serial/8250/8250_dw.c +++ b/drivers/tty/serial/8250/8250_dw.c @@ -50,6 +50,7 @@ struct dw8250_data { struct reset_control *rst; unsigned int skip_autocfg:1; + unsigned int skip_clk_set_rate:1; unsigned int uart_16550_compatible:1; }; @@ -326,14 +327,18 @@ dw8250_do_pm(struct uart_port *port, unsigned int state, unsigned int old) pm_runtime_put_sync_suspend(port->dev); } -static void dw8250_set_termios(struct uart_port *p, struct ktermios *termios, - struct ktermios *old) +static void dw8250_do_clk_set_rate(struct uart_port *p, struct ktermios *termios) { - unsigned long newrate = tty_termios_baud_rate(termios) * 16; struct dw8250_data *d = to_dw8250_data(p->private_data); + unsigned long newrate; long rate; int ret; + if (d->skip_clk_set_rate) + return; + + newrate = tty_termios_baud_rate(termios) * 16; + clk_disable_unprepare(d->clk); rate = clk_round_rate(d->clk, newrate); if (rate > 0) { @@ -349,7 +354,12 @@ static void dw8250_set_termios(struct uart_port *p, struct ktermios *termios, swap(p->uartclk, rate); } clk_prepare_enable(d->clk); +} +static void dw8250_set_termios(struct uart_port *p, struct ktermios *termios, + struct ktermios *old) +{ + dw8250_do_clk_set_rate(p, termios); dw8250_do_set_termios(p, termios, old); } @@ -417,6 +427,8 @@ static void dw8250_quirks(struct uart_port *p, struct dw8250_data *data) if (of_device_is_compatible(np, "marvell,armada-38x-uart")) p->serial_out = dw8250_serial_out38x; + if (of_device_is_compatible(np, "starfive,jh7100-uart")) + data->skip_clk_set_rate = true; } else if (acpi_dev_present("APMC0D08", NULL, -1)) { p->iotype = UPIO_MEM32; @@ -699,6 +711,7 @@ static const struct of_device_id dw8250_of_match[] = { { .compatible = "cavium,octeon-3860-uart" }, { .compatible = "marvell,armada-38x-uart" }, { .compatible = "renesas,rzn1-uart" }, + { .compatible = "starfive,jh7100-uart" }, { /* Sentinel */ } }; MODULE_DEVICE_TABLE(of, dw8250_of_match); -- 2.33.1 _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv
WARNING: multiple messages have this Message-ID (diff)
From: Emil Renner Berthing <kernel@esmil.dk> To: linux-riscv@lists.infradead.org, devicetree@vger.kernel.org, linux-clk@vger.kernel.org, linux-gpio@vger.kernel.org, linux-serial@vger.kernel.org Cc: Emil Renner Berthing <kernel@esmil.dk>, Palmer Dabbelt <palmer@dabbelt.com>, Paul Walmsley <paul.walmsley@sifive.com>, Rob Herring <robh+dt@kernel.org>, Michael Turquette <mturquette@baylibre.com>, Stephen Boyd <sboyd@kernel.org>, Thomas Gleixner <tglx@linutronix.de>, Marc Zyngier <maz@kernel.org>, Philipp Zabel <p.zabel@pengutronix.de>, Linus Walleij <linus.walleij@linaro.org>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Daniel Lezcano <daniel.lezcano@linaro.org>, Andy Shevchenko <andriy.shevchenko@linux.intel.com>, Jiri Slaby <jirislaby@kernel.org>, Maximilian Luz <luzmaximilian@gmail.com>, Sagar Kadam <sagar.kadam@sifive.com>, Drew Fustini <drew@beagleboard.org>, Geert Uytterhoeven <geert@linux-m68k.org>, Michael Zhu <michael.zhu@starfivetech.com>, Fu Wei <tekkamanninja@gmail.com>, Anup Patel <anup.patel@wdc.com>, Atish Patra <atish.patra@wdc.com>, Matteo Croce <mcroce@microsoft.com>, linux-kernel@vger.kernel.org Subject: [PATCH v2 14/16] serial: 8250_dw: Add skip_clk_set_rate quirk Date: Thu, 21 Oct 2021 19:42:21 +0200 [thread overview] Message-ID: <20211021174223.43310-15-kernel@esmil.dk> (raw) In-Reply-To: <20211021174223.43310-1-kernel@esmil.dk> On the StarFive JH7100 SoC the UART core clocks can't be set to exactly 16 * 115200Hz and many other common bitrates. Trying this will only result in a higher input clock, but low enough that the UART's internal divisor can't come close enough to the baud rate target. So rather than try to set the input clock it's better to rely solely on the UART's internal divisor. Signed-off-by: Emil Renner Berthing <kernel@esmil.dk> --- drivers/tty/serial/8250/8250_dw.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c index 5a2ff843ec5d..729b59b14ff1 100644 --- a/drivers/tty/serial/8250/8250_dw.c +++ b/drivers/tty/serial/8250/8250_dw.c @@ -50,6 +50,7 @@ struct dw8250_data { struct reset_control *rst; unsigned int skip_autocfg:1; + unsigned int skip_clk_set_rate:1; unsigned int uart_16550_compatible:1; }; @@ -326,14 +327,18 @@ dw8250_do_pm(struct uart_port *port, unsigned int state, unsigned int old) pm_runtime_put_sync_suspend(port->dev); } -static void dw8250_set_termios(struct uart_port *p, struct ktermios *termios, - struct ktermios *old) +static void dw8250_do_clk_set_rate(struct uart_port *p, struct ktermios *termios) { - unsigned long newrate = tty_termios_baud_rate(termios) * 16; struct dw8250_data *d = to_dw8250_data(p->private_data); + unsigned long newrate; long rate; int ret; + if (d->skip_clk_set_rate) + return; + + newrate = tty_termios_baud_rate(termios) * 16; + clk_disable_unprepare(d->clk); rate = clk_round_rate(d->clk, newrate); if (rate > 0) { @@ -349,7 +354,12 @@ static void dw8250_set_termios(struct uart_port *p, struct ktermios *termios, swap(p->uartclk, rate); } clk_prepare_enable(d->clk); +} +static void dw8250_set_termios(struct uart_port *p, struct ktermios *termios, + struct ktermios *old) +{ + dw8250_do_clk_set_rate(p, termios); dw8250_do_set_termios(p, termios, old); } @@ -417,6 +427,8 @@ static void dw8250_quirks(struct uart_port *p, struct dw8250_data *data) if (of_device_is_compatible(np, "marvell,armada-38x-uart")) p->serial_out = dw8250_serial_out38x; + if (of_device_is_compatible(np, "starfive,jh7100-uart")) + data->skip_clk_set_rate = true; } else if (acpi_dev_present("APMC0D08", NULL, -1)) { p->iotype = UPIO_MEM32; @@ -699,6 +711,7 @@ static const struct of_device_id dw8250_of_match[] = { { .compatible = "cavium,octeon-3860-uart" }, { .compatible = "marvell,armada-38x-uart" }, { .compatible = "renesas,rzn1-uart" }, + { .compatible = "starfive,jh7100-uart" }, { /* Sentinel */ } }; MODULE_DEVICE_TABLE(of, dw8250_of_match); -- 2.33.1
next prev parent reply other threads:[~2021-10-21 17:43 UTC|newest] Thread overview: 143+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-10-21 17:42 [PATCH v2 00/16] Basic StarFive JH7100 RISC-V SoC support Emil Renner Berthing 2021-10-21 17:42 ` Emil Renner Berthing 2021-10-21 17:42 ` [PATCH v2 01/16] RISC-V: Add StarFive SoC Kconfig option Emil Renner Berthing 2021-10-21 17:42 ` Emil Renner Berthing 2021-10-22 8:50 ` Andy Shevchenko 2021-10-22 8:50 ` Andy Shevchenko 2021-10-22 9:40 ` Emil Renner Berthing 2021-10-22 9:40 ` Emil Renner Berthing 2021-10-22 12:40 ` Andy Shevchenko 2021-10-22 12:40 ` Andy Shevchenko 2021-10-21 17:42 ` [PATCH v2 02/16] dt-bindings: timer: Add StarFive JH7100 clint Emil Renner Berthing 2021-10-21 17:42 ` Emil Renner Berthing 2021-10-21 17:42 ` [PATCH v2 03/16] dt-bindings: interrupt-controller: Add StarFive JH7100 plic Emil Renner Berthing 2021-10-21 17:42 ` Emil Renner Berthing 2021-10-29 1:37 ` Rob Herring 2021-10-29 1:37 ` Rob Herring 2021-10-21 17:42 ` [PATCH v2 04/16] dt-bindings: clock: starfive: Add JH7100 clock definitions Emil Renner Berthing 2021-10-21 17:42 ` Emil Renner Berthing 2021-10-29 1:42 ` Rob Herring 2021-10-29 1:42 ` Rob Herring 2021-10-21 17:42 ` [PATCH v2 05/16] dt-bindings: clock: starfive: Add JH7100 bindings Emil Renner Berthing 2021-10-21 17:42 ` Emil Renner Berthing 2021-10-29 1:42 ` Rob Herring 2021-10-29 1:42 ` Rob Herring 2021-10-29 13:05 ` Emil Renner Berthing 2021-10-29 13:05 ` Emil Renner Berthing 2021-10-21 17:42 ` [PATCH v2 06/16] clk: starfive: Add JH7100 clock generator driver Emil Renner Berthing 2021-10-21 17:42 ` Emil Renner Berthing 2021-10-22 12:33 ` Andy Shevchenko 2021-10-22 12:33 ` Andy Shevchenko 2021-10-22 12:44 ` Geert Uytterhoeven 2021-10-22 12:44 ` Geert Uytterhoeven 2021-10-22 13:13 ` Emil Renner Berthing 2021-10-22 13:13 ` Emil Renner Berthing 2021-10-22 13:35 ` Andy Shevchenko 2021-10-22 13:35 ` Andy Shevchenko 2021-10-26 20:19 ` Stephen Boyd 2021-10-26 20:19 ` Stephen Boyd 2021-10-26 22:35 ` Emil Renner Berthing 2021-10-26 22:35 ` Emil Renner Berthing 2021-10-27 0:54 ` Stephen Boyd 2021-10-27 0:54 ` Stephen Boyd 2021-10-27 9:30 ` Andy Shevchenko 2021-10-27 9:30 ` Andy Shevchenko 2021-10-27 10:24 ` Emil Renner Berthing 2021-10-27 10:24 ` Emil Renner Berthing 2021-10-27 10:32 ` Andy Shevchenko 2021-10-27 10:32 ` Andy Shevchenko 2021-10-27 11:22 ` Heiko Stübner 2021-10-27 11:22 ` Heiko Stübner 2021-10-21 17:42 ` [PATCH v2 07/16] dt-bindings: reset: Add StarFive JH7100 reset definitions Emil Renner Berthing 2021-10-21 17:42 ` Emil Renner Berthing 2021-10-29 1:42 ` Rob Herring 2021-10-29 1:42 ` Rob Herring 2021-10-21 17:42 ` [PATCH v2 08/16] dt-bindings: reset: Add Starfive JH7100 reset bindings Emil Renner Berthing 2021-10-21 17:42 ` Emil Renner Berthing 2021-10-29 1:43 ` Rob Herring 2021-10-29 1:43 ` Rob Herring 2021-10-21 17:42 ` [PATCH v2 09/16] reset: starfive-jh7100: Add StarFive JH7100 reset driver Emil Renner Berthing 2021-10-21 17:42 ` Emil Renner Berthing 2021-10-22 12:55 ` Andy Shevchenko 2021-10-22 12:55 ` Andy Shevchenko 2021-10-22 13:34 ` Emil Renner Berthing 2021-10-22 13:34 ` Emil Renner Berthing 2021-10-22 13:38 ` Andy Shevchenko 2021-10-22 13:38 ` Andy Shevchenko 2021-10-22 13:50 ` Emil Renner Berthing 2021-10-22 13:50 ` Emil Renner Berthing 2021-10-22 13:56 ` Andy Shevchenko 2021-10-22 13:56 ` Andy Shevchenko 2021-10-22 14:25 ` Emil Renner Berthing 2021-10-22 14:25 ` Emil Renner Berthing 2021-10-22 14:49 ` Andy Shevchenko 2021-10-22 14:49 ` Andy Shevchenko 2021-10-22 14:50 ` Andy Shevchenko 2021-10-22 14:50 ` Andy Shevchenko 2021-10-22 14:56 ` Emil Renner Berthing 2021-10-22 14:56 ` Emil Renner Berthing 2021-10-22 15:24 ` Andy Shevchenko 2021-10-22 15:24 ` Andy Shevchenko 2021-10-22 15:36 ` Emil Renner Berthing 2021-10-22 15:36 ` Emil Renner Berthing 2021-10-22 15:54 ` Andy Shevchenko 2021-10-22 15:54 ` Andy Shevchenko 2021-10-22 15:59 ` Emil Renner Berthing 2021-10-22 15:59 ` Emil Renner Berthing 2021-10-22 13:06 ` Andreas Schwab 2021-10-22 13:06 ` Andreas Schwab 2021-10-22 13:41 ` Emil Renner Berthing 2021-10-22 13:41 ` Emil Renner Berthing 2021-10-21 17:42 ` [PATCH v2 10/16] dt-bindings: pinctrl: Add StarFive pinctrl definitions Emil Renner Berthing 2021-10-21 17:42 ` Emil Renner Berthing 2021-10-29 1:44 ` Rob Herring 2021-10-29 1:44 ` Rob Herring 2021-10-21 17:42 ` [PATCH v2 11/16] dt-bindings: pinctrl: Add StarFive JH7100 bindings Emil Renner Berthing 2021-10-21 17:42 ` Emil Renner Berthing 2021-10-24 23:11 ` Linus Walleij 2021-10-24 23:11 ` Linus Walleij 2021-10-25 0:35 ` Emil Renner Berthing 2021-10-25 0:35 ` Emil Renner Berthing 2021-10-29 1:50 ` Rob Herring 2021-10-29 1:50 ` Rob Herring 2021-10-29 13:00 ` Emil Renner Berthing 2021-10-29 13:00 ` Emil Renner Berthing 2021-10-29 14:44 ` Rob Herring 2021-10-29 14:44 ` Rob Herring 2021-10-21 17:42 ` [PATCH v2 12/16] pinctrl: starfive: Add pinctrl driver for StarFive SoCs Emil Renner Berthing 2021-10-21 17:42 ` Emil Renner Berthing 2021-10-21 19:01 ` Drew Fustini 2021-10-21 19:01 ` Drew Fustini 2021-10-21 19:50 ` Emil Renner Berthing 2021-10-21 19:50 ` Emil Renner Berthing 2021-10-22 2:06 ` Drew Fustini 2021-10-22 2:06 ` Drew Fustini 2021-10-22 13:31 ` Andy Shevchenko 2021-10-22 13:31 ` Andy Shevchenko 2021-10-23 18:45 ` Emil Renner Berthing 2021-10-23 18:45 ` Emil Renner Berthing 2021-10-23 20:28 ` Andy Shevchenko 2021-10-23 20:28 ` Andy Shevchenko 2021-10-23 21:02 ` Emil Renner Berthing 2021-10-23 21:02 ` Emil Renner Berthing 2021-10-24 9:29 ` Emil Renner Berthing 2021-10-24 9:29 ` Emil Renner Berthing 2021-10-25 10:15 ` Andy Shevchenko 2021-10-25 10:15 ` Andy Shevchenko 2021-10-25 10:24 ` Emil Renner Berthing 2021-10-25 10:24 ` Emil Renner Berthing 2021-10-25 10:51 ` Andy Shevchenko 2021-10-25 10:51 ` Andy Shevchenko 2021-10-28 20:17 ` kernel test robot 2021-10-28 20:17 ` kernel test robot 2021-10-28 20:17 ` kernel test robot 2021-10-21 17:42 ` [PATCH v2 13/16] dt-bindings: serial: snps-dw-apb-uart: Add JH7100 uarts Emil Renner Berthing 2021-10-21 17:42 ` Emil Renner Berthing 2021-10-29 1:50 ` Rob Herring 2021-10-29 1:50 ` Rob Herring 2021-10-21 17:42 ` Emil Renner Berthing [this message] 2021-10-21 17:42 ` [PATCH v2 14/16] serial: 8250_dw: Add skip_clk_set_rate quirk Emil Renner Berthing 2021-10-21 17:42 ` [PATCH v2 15/16] RISC-V: Add initial StarFive JH7100 device tree Emil Renner Berthing 2021-10-21 17:42 ` Emil Renner Berthing 2021-10-21 17:42 ` [PATCH v2 16/16] RISC-V: Add BeagleV Starlight Beta " Emil Renner Berthing 2021-10-21 17:42 ` Emil Renner Berthing
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20211021174223.43310-15-kernel@esmil.dk \ --to=kernel@esmil.dk \ --cc=andriy.shevchenko@linux.intel.com \ --cc=anup.patel@wdc.com \ --cc=atish.patra@wdc.com \ --cc=daniel.lezcano@linaro.org \ --cc=devicetree@vger.kernel.org \ --cc=drew@beagleboard.org \ --cc=geert@linux-m68k.org \ --cc=gregkh@linuxfoundation.org \ --cc=jirislaby@kernel.org \ --cc=linus.walleij@linaro.org \ --cc=linux-clk@vger.kernel.org \ --cc=linux-gpio@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-riscv@lists.infradead.org \ --cc=linux-serial@vger.kernel.org \ --cc=luzmaximilian@gmail.com \ --cc=maz@kernel.org \ --cc=mcroce@microsoft.com \ --cc=michael.zhu@starfivetech.com \ --cc=mturquette@baylibre.com \ --cc=p.zabel@pengutronix.de \ --cc=palmer@dabbelt.com \ --cc=paul.walmsley@sifive.com \ --cc=robh+dt@kernel.org \ --cc=sagar.kadam@sifive.com \ --cc=sboyd@kernel.org \ --cc=tekkamanninja@gmail.com \ --cc=tglx@linutronix.de \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.