From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id AD09EC11F64 for ; Mon, 28 Jun 2021 18:59:48 +0000 (UTC) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id AE0C761941 for ; Mon, 28 Jun 2021 18:59:47 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AE0C761941 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=gerhold.net Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 9B50382E06; Mon, 28 Jun 2021 20:59:45 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=gerhold.net Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gerhold.net header.i=@gerhold.net header.b="KIho2ax6"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 32B8082E07; Mon, 28 Jun 2021 20:59:44 +0200 (CEST) Received: from mo4-p00-ob.smtp.rzone.de (mo4-p00-ob.smtp.rzone.de [85.215.255.25]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 2A7B782DEF for ; Mon, 28 Jun 2021 20:59:41 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=gerhold.net Authentication-Results: phobos.denx.de; spf=none smtp.mailfrom=stephan@gerhold.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1624906780; s=strato-dkim-0002; d=gerhold.net; h=In-Reply-To:References:Message-ID:Subject:Cc:To:From:Date:Cc:Date: From:Subject:Sender; bh=ZrDvPDpND/R5zrsFQnRcTpLHf2MR75dyiRql/gVumis=; b=KIho2ax66jtFno/+Y7y+KtACDBCFge8XqrAg/Nq8DgBRd56HELXt/noDO1FrvV29Lg bESHm8jjLfKvKNKz1RaTgiUcf/J/5zcb29llzZzD7jXNsuLI0nNyMVJChmLbCX+CrrYI ZI/ffpFFzdUe607/f53G2STkhB4UFmmCeZ+7Hkvs2Fe+U3zwip6yQMEl3oOOCXyCyAKm m7MQxJfKYZVqXD2QV62AKtU0KiscAZQJCDitC/FjniSkIGuSUBlnca0zNRy4JOk90aqE 8/fNUIGSjcNYuDuD/Gzhw3FdPuk3CTO9glFB3njZusYrav/TRAVCJdO384ChU25sl27/ NLTg== Authentication-Results: strato.com; dkim=none X-RZG-AUTH: ":P3gBZUipdd93FF5ZZvYFPugejmSTVR2nRPhVOQ/OcYgojyw4j34+u26zEodhPgRDZ8f6IczEaIo=" X-RZG-CLASS-ID: mo00 Received: from gerhold.net by smtp.strato.de (RZmta 47.27.5 DYNA|AUTH) with ESMTPSA id m02a28x5SIxeV5s (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits)) (Client did not present a certificate); Mon, 28 Jun 2021 20:59:40 +0200 (CEST) Date: Mon, 28 Jun 2021 20:59:35 +0200 From: Stephan Gerhold To: Ramon Fried Cc: U-Boot Mailing List Subject: Re: [PATCH] serial: serial_msm: Ensure BAM/single character mode are disabled Message-ID: References: <20210628084009.3098-1-stephan@gerhold.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 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.2 at phobos.denx.de X-Virus-Status: Clean On Mon, Jun 28, 2021 at 08:15:28PM +0300, Ramon Fried wrote: > On Mon, Jun 28, 2021 at 11:40 AM Stephan Gerhold wrote: > > > > At the moment, the U-Boot serial_msm driver does not initialize the > > UART_DM_DMEN register with the required value. Usually this does not > > cause any problems, because there is Qualcomm's LK bootloader running > > before U-Boot which initializes the register with the correct value. > > > > It's important that this register is initialized correctly, because > > the U-Boot driver does not make use of the BAM/DMA or single character > > mode functionality of the UART controller. A different bootloader > > before U-Boot might initialize the register differently. > > > > For example, on DragonBoard 410c U-Boot can also be installed to the > > "aboot" partition (replacing LK entirely). In this case U-Boot is > > loaded directly by SBL, which seems to use the single-character mode > > for some reason. In single character mode there is always just one > > char in the FIFO, instead of the 4 characters expected by > > msm_serial_fetch(). It also causes issues with "earlycon" later in > > the Linux kernel, which tries to output 4 chars at once, > > but only the first char will be written. > > > > This causes early UART log in Linux to be corrupted like this: > > > > [ 00ano:ameoi .Q1B[ 00ac _idaM00080oo'ahani-lcle._20). 15NdNii 5 SPMSJ20:U2 > > [ 00rkoolmsamel > > [ 00Fw ]elamletopsioble > > [ 00ore > > > > instead of > > > > [ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd030] > > [ 0.000000] Machine model: Qualcomm Technologies, Inc. APQ 8016 SBC > > [ 0.000000] earlycon: msm_serial_dm0 at MMIO 0x00000000078b0000 (options '') > > [ 0.000000] printk: bootconsole [msm_serial_dm0] enabled > > > > Make sure to initialize UART_DM_DMEN correctly to fix this issue > > when loading U-Boot directly after SBL (instead of through LK). > > > > There is no functional difference when loading U-Boot through LK > > since LK also initializes UART_DM_DMEN to 0x0. [1] > > > > [1]: https://git.linaro.org/landing-teams/working/qualcomm/lk.git/tree/platform/msm_shared/uart_dm.c?h=dragonboard410c-LA.BR.1.2.7-03810-8x16.0-linaro3#n203 > > > > Cc: Ramon Fried > > Signed-off-by: Stephan Gerhold > > --- > > > > drivers/serial/serial_msm.c | 4 ++++ > > 1 file changed, 4 insertions(+) > > > > diff --git a/drivers/serial/serial_msm.c b/drivers/serial/serial_msm.c > > index d8c6c2f6b5..d8dd5c1104 100644 > > --- a/drivers/serial/serial_msm.c > > +++ b/drivers/serial/serial_msm.c > > @@ -23,6 +23,7 @@ > > /* Serial registers - this driver works in uartdm mode*/ > > > > #define UARTDM_DMRX 0x34 /* Max RX transfer length */ > > +#define UARTDM_DMEN 0x3C /* DMA/data-packing mode */ > > #define UARTDM_NCF_TX 0x40 /* Number of chars to TX */ > > > > #define UARTDM_RXFS 0x50 /* RX channel status register */ > > @@ -197,6 +198,9 @@ static void uart_dm_init(struct msm_serial_data *priv) > > writel(MSM_BOOT_UART_DM_8_N_1_MODE, priv->base + UARTDM_MR2); > > writel(MSM_BOOT_UART_DM_CMD_RESET_RX, priv->base + UARTDM_CR); > > writel(MSM_BOOT_UART_DM_CMD_RESET_TX, priv->base + UARTDM_CR); > > + > > + /* Make sure BAM/single character mode is disabled */ > > + writel(0x0, priv->base + UARTDM_DMEN); > > } > > static int msm_serial_probe(struct udevice *dev) > > { > > -- > > 2.32.0 > > > Hi. > This is strange, I never encountered the behaviour, and I did boot > Linux after U-boot without LK in the way. It happens for me if the boot flow is SBL -> U-Boot -> Linux instead of SBL -> LK -> U-Boot -> Linux (The latter is the suggested setup according to dragonboard410c_defconfig and the dragonboard410c readme.txt, but I wanted to eliminate LK entirely). If you tried the same, perhaps you didn't have earlycon enabled? It also happens only during early boot with earlycon enabled ("earlycon" in kernel parameters). It stops happening later on boot when the kernel fully re-initializes the UART controller. (The idea of earlycon is to reuse the existing UART configuration to report errors that occur very early during boot.) Thanks, Stephan