From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) by mx.groups.io with SMTP id smtpd.web11.5823.1617875272323038341 for ; Thu, 08 Apr 2021 02:47:52 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@akeo-ie.20150623.gappssmtp.com header.s=20150623 header.b=yM88Yu+n; spf=pass (domain: akeo.ie, ip: 209.85.128.50, mailfrom: pete@akeo.ie) Received: by mail-wm1-f50.google.com with SMTP id 5-20020a05600c0245b029011a8273f85eso894134wmj.1 for ; Thu, 08 Apr 2021 02:47:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=akeo-ie.20150623.gappssmtp.com; s=20150623; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=SlOAokkVvUpqmyT9iHWaZZDCQMngP+sCIwatpRiCkxw=; b=yM88Yu+n3wXOru5BWkRwXPtpcgfvoEmti9JmHJZGzfw1hIwwALy9u0G3xNDt1jNXww 1tfMth3NIu97bcCjSSnV8B/3MOqLi9QAALxZVG10AN2i4NfjrXWJmERHIPKBYitP5+uH mPjnMhC+ooRP+YggjHu4cEZO8abaPshYLnFIEUvabI3DC4V+8TRQe10iY1oMrnLT9BBn PPYPFbv0GtaZHbpjjNtijXJUh5tX5ZD0Lp8QpQnccfnIPzerFmVFBmpfoIY8D/EQfPoT jFJNZeE+i8rFw4xdTplbINAobFpvX1K3RbYm/EDzUv3iQud2u1ExZ/c/QoUihFD9d1Oz oPnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=SlOAokkVvUpqmyT9iHWaZZDCQMngP+sCIwatpRiCkxw=; b=PHfa7JMa8TRydYzBa9PBwWZcfZbySlk+jNEbTm2ZTafzbTfgIVK6HFRMmnYQiGQMC4 65ArVDOPXiSutp6GRQegr/k6uoYjM7kDksOgxIYtm3sVjgF/Ir7SOFBi65YmwRUpLRlC NxgCt5BdCIH4dK2KjJJTCaQwVkHxo2MCe/t9DrRCO9U1osxuUlcuYO6xKDOudD9YnsFF JALQPwLK1Y1M2KW8doC7fH8Pd8IytQ5HL+vii1sK1Ey1CVWPDcrZFJ8WDidgspUeOOyb ddfIts8ul37m/DptFnADnvwuvdUfzZPokesCOZDokMQSHEtr0JjRTBAuMjiT9QGwQHHb Lw/A== X-Gm-Message-State: AOAM533Ne2W2QJKl2l6uohLDU30mV0NOh3js4ggKXmc0wxE98bq1OtsU BuWZH9CKNDVt+y+Tzwba+W8NTg== X-Google-Smtp-Source: ABdhPJwKuK2lZItNM3d7vt3yowZMzGs/+0K1bKimYPS4DtALAuV3lAHbUTmKsYyocnpo2ztXNSBMXA== X-Received: by 2002:a05:600c:35c8:: with SMTP id r8mr7575717wmq.130.1617875270638; Thu, 08 Apr 2021 02:47:50 -0700 (PDT) Return-Path: Received: from [10.0.0.122] ([84.203.65.130]) by smtp.googlemail.com with ESMTPSA id s5sm29769294wrw.2.2021.04.08.02.47.49 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 08 Apr 2021 02:47:50 -0700 (PDT) Subject: Re: [edk2-platforms][PATCH v2 1/1] Platform/RaspberryPi: Fix mini UART clock divisor calculation To: =?UTF-8?B?TWFyaW8gQsSDbMSDbmljxIM=?= , devel@edk2.groups.io Cc: ardb+tianocore@kernel.org, leif@nuviainc.com References: <20210406140411.901-1-mariobalanica02@gmail.com> From: "Pete Batard" Message-ID: <45e921e6-edd7-a365-71c2-00383e76d5ea@akeo.ie> Date: Thu, 8 Apr 2021 10:47:48 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.9.0 MIME-Version: 1.0 In-Reply-To: <20210406140411.901-1-mariobalanica02@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-GB Content-Transfer-Encoding: 8bit On 2021.04.06 15:04, Mario Bălănică wrote: > The VPU clock divisor has changed in this commit: > https://github.com/raspberrypi/firmware/commit/1e5456a, > thus breaking the mini UART clock divisor calculation on the Pi 4. > > Fix this by reading the core clock from the mailbox instead. > > Signed-off-by: Mario Bălănică > --- > Platform/RaspberryPi/Library/DualSerialPortLib/DualSerialPortLib.c | 15 +++------------ > Platform/RaspberryPi/Library/PlatformLib/AArch64/RaspberryPiHelper.S | 4 ---- > Platform/RaspberryPi/RPi4/RPi4.dsc | 6 ++++-- > 3 files changed, 7 insertions(+), 18 deletions(-) > > diff --git a/Platform/RaspberryPi/Library/DualSerialPortLib/DualSerialPortLib.c b/Platform/RaspberryPi/Library/DualSerialPortLib/DualSerialPortLib.c > index 5e83bbf022eb..d2f983bf0a9f 100644 > --- a/Platform/RaspberryPi/Library/DualSerialPortLib/DualSerialPortLib.c > +++ b/Platform/RaspberryPi/Library/DualSerialPortLib/DualSerialPortLib.c > @@ -34,25 +34,16 @@ SerialPortGetDivisor ( > UINT32 SerialBaudRate > > ) > > { > > - UINT64 BaseClockRate; > > + UINT32 BaseClockRate; > > UINT32 Divisor; > > > > - // > > - // On the Raspberry Pi, the clock to use for the 16650-compatible UART > > - // is the base clock divided by the 12.12 fixed point VPU clock divisor. > > - // > > - BaseClockRate = (UINT64)PcdGet32 (PcdSerialClockRate); > > -#if (RPI_MODEL == 4) > > - Divisor = MmioRead32(BCM2836_CM_BASE + BCM2836_CM_VPU_CLOCK_DIVISOR) & 0xFFFFFF; > > - if (Divisor != 0) > > - BaseClockRate = (BaseClockRate << 12) / Divisor; > > -#endif > > + BaseClockRate = PcdGet32 (PcdSerialClockRate); > > > > // > > // As per the BCM2xxx datasheets: > > // baudrate = system_clock_freq / (8 * (divisor + 1)). > > // > > - Divisor = (UINT32)BaseClockRate / (SerialBaudRate * 8); > > + Divisor = BaseClockRate / (SerialBaudRate * 8); > > if (Divisor != 0) { > > Divisor--; > > } > > diff --git a/Platform/RaspberryPi/Library/PlatformLib/AArch64/RaspberryPiHelper.S b/Platform/RaspberryPi/Library/PlatformLib/AArch64/RaspberryPiHelper.S > index 58351e4fb8cc..7008aaf8aa4c 100644 > --- a/Platform/RaspberryPi/Library/PlatformLib/AArch64/RaspberryPiHelper.S > +++ b/Platform/RaspberryPi/Library/PlatformLib/AArch64/RaspberryPiHelper.S > @@ -85,13 +85,11 @@ ASM_FUNC (ArmPlatformPeiBootAction) > adr x2, mBoardRevision > > str w0, [x2] > > > > -#if (RPI_MODEL == 3) > > run .Lclkinfo_buffer > > > > ldr w0, .Lfrequency > > adr x2, _gPcd_BinaryPatch_PcdSerialClockRate > > str w0, [x2] > > -#endif > > > > ret > > > > @@ -135,7 +133,6 @@ ASM_FUNC (ArmPlatformPeiBootAction) > .long 0 // end tag > > .set .Lrevinfo_size, . - .Lrevinfo_buffer > > > > -#if (RPI_MODEL == 3) > > .align 4 > > .Lclkinfo_buffer: > > .long .Lclkinfo_size > > @@ -148,7 +145,6 @@ ASM_FUNC (ArmPlatformPeiBootAction) > .long 0 // frequency > > .long 0 // end tag > > .set .Lclkinfo_size, . - .Lclkinfo_buffer > > -#endif > > > > //UINTN > > //ArmPlatformGetPrimaryCoreMpId ( > > diff --git a/Platform/RaspberryPi/RPi4/RPi4.dsc b/Platform/RaspberryPi/RPi4/RPi4.dsc > index 2c05c31118d2..ff802d8347ea 100644 > --- a/Platform/RaspberryPi/RPi4/RPi4.dsc > +++ b/Platform/RaspberryPi/RPi4/RPi4.dsc > @@ -429,7 +429,6 @@ [PcdsFixedAtBuild.common] > gArmPlatformTokenSpaceGuid.PL011UartClkInHz|48000000 > > gEfiMdeModulePkgTokenSpaceGuid.PcdSerialUseMmio|TRUE > > gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterStride|4 > > - gEfiMdeModulePkgTokenSpaceGuid.PcdSerialClockRate|1000000000 > > gEfiMdeModulePkgTokenSpaceGuid.PcdSerialFifoControl|0x27 > > gEfiMdeModulePkgTokenSpaceGuid.PcdSerialExtendedTxFifoSize|8 > > gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate|115200 > > @@ -465,6 +464,9 @@ [PcdsFixedAtBuild.common] > gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVendor|L"EDK2" > > gEfiMdeModulePkgTokenSpaceGuid.PcdSetNxForStack|TRUE > > > > +[PcdsPatchableInModule] > > + gEfiMdeModulePkgTokenSpaceGuid.PcdSerialClockRate|500000000 > > + > > [PcdsDynamicHii.common.DEFAULT] > > > > # > > @@ -621,7 +623,7 @@ [Components.common] > MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf > > MdeModulePkg/Universal/SerialDxe/SerialDxe.inf { > > > > - SerialPortLib|Platform/RaspberryPi/Library/DualSerialPortLib/DualSerialPortLib.inf > > + SerialPortLib|Platform/RaspberryPi/Library/DualSerialPortLib/DualSerialPortDxeLib.inf > > } > > Platform/RaspberryPi/Drivers/DisplayDxe/DisplayDxe.inf > > EmbeddedPkg/Drivers/ConsolePrefDxe/ConsolePrefDxe.inf > Reviewed-by: Pete Batard Tested-by: Pete Batard