U-Boot Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Christian Marangi <ansuelsmth@gmail.com>
To: "Tom Rini" <trini@konsulko.com>,
	"Lukasz Majewski" <lukma@denx.de>,
	"Sean Anderson" <seanga2@gmail.com>,
	"Ryder Lee" <ryder.lee@mediatek.com>,
	"Weijie Gao" <weijie.gao@mediatek.com>,
	"Chunfeng Yun" <chunfeng.yun@mediatek.com>,
	GSS_MTK_Uboot_upstream <GSS_MTK_Uboot_upstream@mediatek.com>,
	"Heiko Schocher" <hs@denx.de>, "Peng Fan" <peng.fan@nxp.com>,
	"Jaehoon Chung" <jh80.chung@samsung.com>,
	"Joe Hershberger" <joe.hershberger@ni.com>,
	"Ramon Fried" <rfried.dev@gmail.com>,
	"Jagan Teki" <jagan@amarulasolutions.com>,
	"Christian Marangi" <ansuelsmth@gmail.com>,
	"Sam Shih" <sam.shih@mediatek.com>,
	"Francois Berder" <fberder@outlook.fr>,
	"Simon Glass" <sjg@chromium.org>,
	"Julien Masson" <jmasson@baylibre.com>,
	"Peter Robinson" <pbrobinson@gmail.com>,
	"Marek Vasut" <marek.vasut+renesas@mailbox.org>,
	"Bo-Cun Chen" <bc-bocun.chen@mediatek.com>,
	"This contributor prefers not to receive mails"
	<noreply@example.com>, "Michal Simek" <michal.simek@amd.com>,
	"John Crispin" <john@phrozen.org>,
	"Heinrich Schuchardt" <xypron.glpk@gmx.de>,
	"Mason Huo" <mason.huo@starfivetech.com>,
	"Stefan Roese" <sr@denx.de>, "Sumit Garg" <sumit.garg@linaro.org>,
	"Mark Kettenis" <kettenis@openbsd.org>,
	"Sergei Antonov" <saproj@gmail.com>,
	"Mayuresh Chitale" <mchitale@ventanamicro.com>,
	"SkyLake.Huang" <skylake.huang@mediatek.com>,
	"Nicolò Veronese" <nicveronese@gmail.com>,
	u-boot@lists.denx.de
Subject: [PATCH 07/11] serial: mediatek: add special handling for highspeed and linux compat
Date: Wed,  5 Jun 2024 21:02:14 +0200	[thread overview]
Message-ID: <20240605190220.17616-8-ansuelsmth@gmail.com> (raw)
In-Reply-To: <20240605190220.17616-1-ansuelsmth@gmail.com>

Upstream linux serial driver use a different logic to setup serial regs.

They have 2 interval:
- < 115200 we use lowspeed regs and 16 * baud
- >= 115200 we use highspeed

We currently use force_highspeed property to force usage of highspeed
regs even with low baud rate.

Add special handling if the upstream compatible is used where we just
apply the same interval with anything >= 115200 in highspeed simulating
force_highspeed.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
---
 drivers/serial/serial_mtk.c | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/drivers/serial/serial_mtk.c b/drivers/serial/serial_mtk.c
index d34a31c9cf0..14be095653a 100644
--- a/drivers/serial/serial_mtk.c
+++ b/drivers/serial/serial_mtk.c
@@ -89,8 +89,8 @@ struct mtk_serial_priv {
 	bool force_highspeed;
 };
 
-static void _mtk_serial_setbrg(struct mtk_serial_priv *priv, int baud,
-			       uint clk_rate)
+static void _mtk_serial_setbrg(struct udevice *dev, struct mtk_serial_priv *priv,
+			       int baud, uint clk_rate)
 {
 	u32 quot, realbaud, samplecount = 1;
 
@@ -113,7 +113,12 @@ static void _mtk_serial_setbrg(struct mtk_serial_priv *priv, int baud,
 		goto set_baud;
 	}
 
-	if (priv->force_highspeed)
+	/*
+	 * Upstream linux use highspeed for anything >= 115200 and lowspeed
+	 * for < 115200. Simulate this if we are using the upstream compatible.
+	 */
+	if (priv->force_highspeed ||
+	    (device_is_compatible(dev, "mediatek,mt6577-uart") && baud >= 115200))
 		goto use_hs3;
 
 	if (baud <= 115200) {
@@ -186,7 +191,7 @@ static int mtk_serial_setbrg(struct udevice *dev, int baudrate)
 	if (IS_ERR_VALUE(clk_rate) || clk_rate == 0)
 		clk_rate = priv->fixed_clk_rate;
 
-	_mtk_serial_setbrg(priv, baudrate, clk_rate);
+	_mtk_serial_setbrg(dev, priv, baudrate, clk_rate);
 
 	return 0;
 }
@@ -302,13 +307,13 @@ DECLARE_GLOBAL_DATA_PTR;
 		writel(0, &mtk_hsuart##port.regs->ier); \
 		writel(UART_MCRVAL, &mtk_hsuart##port.regs->mcr); \
 		writel(UART_FCRVAL, &mtk_hsuart##port.regs->fcr); \
-		_mtk_serial_setbrg(&mtk_hsuart##port, gd->baudrate, \
+		_mtk_serial_setbrg(NULL, &mtk_hsuart##port, gd->baudrate, \
 				   mtk_hsuart##port.fixed_clk_rate); \
 		return 0 ; \
 	} \
 	static void mtk_serial##port##_setbrg(void) \
 	{ \
-		_mtk_serial_setbrg(&mtk_hsuart##port, gd->baudrate, \
+		_mtk_serial_setbrg(NULL, &mtk_hsuart##port, gd->baudrate, \
 				   mtk_hsuart##port.fixed_clk_rate); \
 	} \
 	static int mtk_serial##port##_getc(void) \
@@ -456,7 +461,7 @@ static inline void _debug_uart_init(void)
 	writel(UART_MCRVAL, &priv.regs->mcr);
 	writel(UART_FCRVAL, &priv.regs->fcr);
 
-	_mtk_serial_setbrg(&priv, CONFIG_BAUDRATE, priv.fixed_clk_rate);
+	_mtk_serial_setbrg(NULL, &priv, CONFIG_BAUDRATE, priv.fixed_clk_rate);
 }
 
 static inline void _debug_uart_putc(int ch)
-- 
2.43.0


  parent reply	other threads:[~2024-06-05 19:39 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-05 19:02 [PATCH 00/11] mediatek: cumulative trivial fix for OF_UPSTREAM support Christian Marangi
2024-06-05 19:02 ` [PATCH 01/11] phy: phy-mtk-tphy: add support for phy type switch Christian Marangi
2024-06-05 19:02 ` [PATCH 02/11] pci: mediatek: add PCIe controller support for filogic silicon Christian Marangi
2024-06-05 19:02 ` [PATCH 03/11] spi: mtk_spim: add support for upstream mediatek, spi-ipm compatible Christian Marangi
2024-06-05 19:02 ` [PATCH 04/11] net: mediatek: handle alternative name for pn_swap property Christian Marangi
2024-06-05 19:02 ` [PATCH 05/11] i2c: mediatek: add support for optional arb and pmic clock Christian Marangi
2024-06-06  4:27   ` Heiko Schocher
2024-06-05 19:02 ` [PATCH 06/11] serial: mediatek: add support for bus clock and enable it Christian Marangi
2024-06-05 19:02 ` Christian Marangi [this message]
2024-06-05 19:02 ` [PATCH 08/11] mmc: mediatek: add support for upstream linux clock and property Christian Marangi
2024-06-05 19:02 ` [PATCH 09/11] clk: mediatek: mt7981: support alternative compatible for fixed-plls Christian Marangi
2024-06-05 19:02 ` [PATCH 10/11] pinctrl: mediatek: add support for gpio-controller property in root node Christian Marangi
2024-06-05 19:02 ` [PATCH 11/11] pinctrl: mediatek: mt7981: init device before relocation Christian Marangi

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=20240605190220.17616-8-ansuelsmth@gmail.com \
    --to=ansuelsmth@gmail.com \
    --cc=GSS_MTK_Uboot_upstream@mediatek.com \
    --cc=bc-bocun.chen@mediatek.com \
    --cc=chunfeng.yun@mediatek.com \
    --cc=fberder@outlook.fr \
    --cc=hs@denx.de \
    --cc=jagan@amarulasolutions.com \
    --cc=jh80.chung@samsung.com \
    --cc=jmasson@baylibre.com \
    --cc=joe.hershberger@ni.com \
    --cc=john@phrozen.org \
    --cc=kettenis@openbsd.org \
    --cc=lukma@denx.de \
    --cc=marek.vasut+renesas@mailbox.org \
    --cc=mason.huo@starfivetech.com \
    --cc=mchitale@ventanamicro.com \
    --cc=michal.simek@amd.com \
    --cc=nicveronese@gmail.com \
    --cc=noreply@example.com \
    --cc=pbrobinson@gmail.com \
    --cc=peng.fan@nxp.com \
    --cc=rfried.dev@gmail.com \
    --cc=ryder.lee@mediatek.com \
    --cc=sam.shih@mediatek.com \
    --cc=saproj@gmail.com \
    --cc=seanga2@gmail.com \
    --cc=sjg@chromium.org \
    --cc=skylake.huang@mediatek.com \
    --cc=sr@denx.de \
    --cc=sumit.garg@linaro.org \
    --cc=trini@konsulko.com \
    --cc=u-boot@lists.denx.de \
    --cc=weijie.gao@mediatek.com \
    --cc=xypron.glpk@gmx.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: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox