From patchwork Tue Jan 10 19:24:06 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Loic Poulain X-Patchwork-Id: 640892 Delivered-To: patch@linaro.org Received: by 2002:a17:522:f3c4:b0:4b4:3859:abed with SMTP id in4csp2879961pvb; Tue, 10 Jan 2023 11:24:17 -0800 (PST) X-Google-Smtp-Source: AMrXdXtjg3g0B6++dzVl71aCmc4I7aZ9TlQcpo+L+4fCNRBhy+8V14tZCFzESEPYaiyVHcwE94G7 X-Received: by 2002:a05:6830:1146:b0:670:5a27:e43b with SMTP id x6-20020a056830114600b006705a27e43bmr35869409otq.5.1673378657122; Tue, 10 Jan 2023 11:24:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673378657; cv=none; d=google.com; s=arc-20160816; b=N9rWf3QMOIf3JXg7CfUcGnC/+YraKC9v6zybQ+Qzyn6ubztHPGfFS1J/xbR7lWUSGW ZHYqO+3Kn1mZWp2wpzZd1lmTY+erSW6/N+LiIRplTwXExXtCvGzUPqJaV4hyaG+FD8Jq Us9/O25FVYqcxFIygQEn8Sfvlpos3IMCzgLo2h4dBebW57zeUjcOOevLskoNY9prMy2x IcsOs/h50f/hd+TyYtn1rnR90xy/fAK2HMZMzVNmWJTEf/OUuskUEdW+j7uJGgq/n8O5 hrFC+D0Hq1vTxamst91G1oZSkhAJ90JomiBnJy2vJJ6RWlwCmvknHkXD6TGg7vb69qPj jdqw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:message-id:date:subject:cc:to:from:dkim-signature; bh=/m4Vc0Vc6HXGlpYtA361Okpj7sgy7lL58ZqQ9bSgNn8=; b=A6eK1nkQx7IBCyhpTwTXX6qtzQ98ODl64R+3C93BaTmeydCj8ZDcyn94Atih7bJv5T Y2EM5fI7zxLlhRYoPJLEdqjzakw4s5OiOZtTbeNyys7oZPJCekcPNCTB3bsZIRlCjf4P ec5SntBCyNIECIrap9zVSOB1hQGTHEhy0YrCqQeouIFRihAKpuyMeris5JnbzK2HBRMq HSuf3kCsl5TTwqY1CJE74WVKDdlGnIOYLFncLMBzJmeFmMkDqHh0mq+hbX+TeSjygtpH rwWrsKq58a/0YHhM5wg1sK/uvqPyVC9PBiIa5VBxJKM3/kITCMVAm4N7dFZd5gj8gOSC emEg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=laSFA8Hf; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from phobos.denx.de (phobos.denx.de. [85.214.62.61]) by mx.google.com with ESMTPS id l19-20020a05683004b300b0066c2a4fce1bsi10691119otd.31.2023.01.10.11.24.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Jan 2023 11:24:17 -0800 (PST) Received-SPF: pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) client-ip=85.214.62.61; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=laSFA8Hf; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 80BDF855A8; Tue, 10 Jan 2023 20:24:14 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="laSFA8Hf"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 8DA1185695; Tue, 10 Jan 2023 20:24:12 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: 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_PASS autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-wm1-x329.google.com (mail-wm1-x329.google.com [IPv6:2a00:1450:4864:20::329]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 32F8485301 for ; Tue, 10 Jan 2023 20:24:10 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=loic.poulain@linaro.org Received: by mail-wm1-x329.google.com with SMTP id k22-20020a05600c1c9600b003d1ee3a6289so10912853wms.2 for ; Tue, 10 Jan 2023 11:24:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=/m4Vc0Vc6HXGlpYtA361Okpj7sgy7lL58ZqQ9bSgNn8=; b=laSFA8HfQrij1BwPOLcPqwoDGOOYTidmJ1opJcPk9uhL/QkGF2NAeBvZbmZHMoOtt3 RJ1gmgdYRmgAIo+QYEF7YAs1gZGlrq8/NCHdDKJBjnpJLDv8FxUuV+nmfWvSZOQVwpIH NnKKcxtMslvMyZeGaoUT/Mbcvv2ggO5h9JDZTHjtzFfXrIElGB1Hdzfusllg7+iflM0s lj8jzM82u9zlwXpO69ZDx7CPXVafyIHg1X99VrY4mR9VydRzqhXiKK8cGnwvDgyVRiRL B8kX5XCsj4Td25qHJd2sjqF8DoNg6LiX/whlMiMjo2vxpGRvfRLwERk6goYhr3jAxj1G Fp0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=/m4Vc0Vc6HXGlpYtA361Okpj7sgy7lL58ZqQ9bSgNn8=; b=awFIX+owU/rPvrB/54XsvwGWRkVxhRn6IxSyGtXh8mUXoTEoAFkix749pylaXe6D7H lvFgM3nOkGQb/sF3Xa1MmXeJkaDLRJQMcecLgNHmn7fQzt8mAM3LDdGA47VXsI6jbm8X EXwQUa6ooSbdQ5uP1QVneujZUwU/xJFPEHbumkLfN/fFoMBU5mcFAXNYzveHvKzj6waQ iRL8g1gz0mzTI0+FxvaZxAFsnkeQ5kF4Yklg562lnaAThGApRgKA1KuTq4W9Uj9RqC8P tlMPS5S2Lot9U/jJBqLClbpa8Afqg9JBKkA/yrzFSP7p6cl1L5OXl4yQcnlFkXN3+VY+ Fi6Q== X-Gm-Message-State: AFqh2kq84NOG32y4fqwxy8NXwgKvaNO4D3DYzJ4pwAlPnJ1I49tTFJtr CfiMc+sMA5kD7ZnhYCSyrrXEVA== X-Received: by 2002:a05:600c:a51:b0:3cf:6f4d:c259 with SMTP id c17-20020a05600c0a5100b003cf6f4dc259mr48921453wmq.39.1673378649686; Tue, 10 Jan 2023 11:24:09 -0800 (PST) Received: from loic-ThinkPad-T470p.. ([2a01:e0a:82c:5f0:a2ad:457f:18a:ffcb]) by smtp.gmail.com with ESMTPSA id l3-20020a05600c4f0300b003a6125562e1sm17155754wmq.46.2023.01.10.11.24.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Jan 2023 11:24:09 -0800 (PST) From: Loic Poulain To: sbabic@denx.de, festevam@gmail.com Cc: uboot-imx@nxp.com, u-boot@lists.denx.de, LW@karo-electronics.de, Loic Poulain , =?utf-8?q?Lothar_Wa=C3=9Fmann?= Subject: [PATCH v3 1/2] serial: mxc: Wait for TX completion before reset Date: Tue, 10 Jan 2023 20:24:06 +0100 Message-Id: <20230110192407.1874044-1-loic.poulain@linaro.org> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean The u-boot console may show some corrupted characters when printing in board_init() due to reset of the UART (probe) before the TX FIFO has been completely drained. To fix this issue, and in case UART is still running, we now try to flush the FIFO before proceeding to UART reinitialization. For this we're waiting for Transmitter Complete bit, indicating that the FIFO and the shift register are empty. flushing has a 4ms timeout guard, which is normally more than enough to consume the FIFO @ low baudrate (9600bps). Signed-off-by: Loic Poulain Tested-by: Lothar Waßmann Reviewed-by: Fabio Estevam ---  v2: Add this commit to the series v3: Fix typo & reordering commits for good bisectability drivers/serial/serial_mxc.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/drivers/serial/serial_mxc.c b/drivers/serial/serial_mxc.c index 82c0d84628..3c89781f2c 100644 --- a/drivers/serial/serial_mxc.c +++ b/drivers/serial/serial_mxc.c @@ -13,6 +13,7 @@ #include #include #include +#include /* UART Control Register Bit Fields.*/ #define URXD_CHARRDY (1<<15) @@ -144,8 +145,22 @@ struct mxc_uart { u32 ts; }; +static void _mxc_serial_flush(struct mxc_uart *base) +{ + unsigned int timeout = 4000; + + if (!(readl(&base->cr1) & UCR1_UARTEN) || + !(readl(&base->cr2) & UCR2_TXEN)) + return; + + while (!(readl(&base->sr2) & USR2_TXDC) && --timeout) + udelay(1); +} + static void _mxc_serial_init(struct mxc_uart *base, int use_dte) { + _mxc_serial_flush(base); + writel(0, &base->cr1); writel(0, &base->cr2); @@ -252,10 +267,17 @@ static int mxc_serial_init(void) return 0; } +static int mxc_serial_stop(void) +{ + _mxc_serial_flush(mxc_base); + + return 0; +} + static struct serial_device mxc_serial_drv = { .name = "mxc_serial", .start = mxc_serial_init, - .stop = NULL, + .stop = mxc_serial_stop, .setbrg = mxc_serial_setbrg, .putc = mxc_serial_putc, .puts = default_serial_puts,