From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ed1-f49.google.com (mail-ed1-f49.google.com [209.85.208.49]) by mx.groups.io with SMTP id smtpd.web10.12396.1617717864742651283 for ; Tue, 06 Apr 2021 07:04:25 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Hs+SGWF5; spf=pass (domain: gmail.com, ip: 209.85.208.49, mailfrom: mariobalanica02@gmail.com) Received: by mail-ed1-f49.google.com with SMTP id z1so16725220edb.8 for ; Tue, 06 Apr 2021 07:04:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=4nDliRJ/e+VAY1x/IXOmsh0VChUVosFrV2+O8HBgSEw=; b=Hs+SGWF579Cey6lUkz2jAFTxjURiJGPX47QqHi5IZZS3+8AhIM54lqpUdjJ9SYne3Y Tws9x/Q6M/W9PYkHsCY8F/PaQE9ocQBfohjUvZg/btLbL0IjzykZnFOD22X4Aok5+N8H A1Btjxxot6Tl9F8ej4VqFNaqG+L7T8R41MQFT71NQMGBUnJWoPpzdyfC/vtcd9xybWih pd3EEscQancFHgLNSeZFg+rFQnEwrQa/izNE9VlGFLtuyHdPCU632gN6yHaxvQP1BwAI QwEP1FTTVNfEGb37Z6v6pOtUX8CVOqCwJfu+trCwHg1vmuswytLTghhaL8hmWUC91vPD 3spQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=4nDliRJ/e+VAY1x/IXOmsh0VChUVosFrV2+O8HBgSEw=; b=Wj5Ehsjoo8s1lYhSv0BHG/F0nFUi+So2uw9ZZr8yXmC+HNmigpQHWMJKRAp0b+Y9Xl 2IzbAHXoGV826fAFWBauGNHSi9lOfhQ+GxctdoIrAbaxyoZPl57LryZt1j8+y1mBm4Aw gxiRyHUMvTHFTAy+L+Cy6y2/ZElUFC4wNJ9DJgB6Fl8rt8HeLkZnEUZBLbT0zAxA6gxs 68Vho9OZSP4R7j5EjHZSWGWxElplOHcHqYKRf7+1UECSKARtVq3WUe2rUf/FzMyVCzRG b9VpjyEv0FnjK4cs11nbQcFm7LTsWwS0fOAF/YThgyLptTZFBNkatUdXfmB0WnYUidnP PwpA== X-Gm-Message-State: AOAM532iH0N3EOjtpJn7ymJ0ZUs9NkJPdq53RsYw4SQ/j+Dyo6/7dvlP 2SdMQBzPMFUTatjkz4kl8LmxUEpOgA2hvg== X-Google-Smtp-Source: ABdhPJy1BkoBjqMCnQFu97u4rnVzcEYjNHMUKvz33xI0snqHLsN65KoAoqlhE66CXBTLOmaSfIAmuw== X-Received: by 2002:a05:6402:438f:: with SMTP id o15mr38186043edc.123.1617717863325; Tue, 06 Apr 2021 07:04:23 -0700 (PDT) Return-Path: Received: from localhost.localdomain ([2a02:2f0e:c50c:8400:3539:7935:359b:c9ca]) by smtp.gmail.com with ESMTPSA id y6sm503687ejw.83.2021.04.06.07.04.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 06 Apr 2021 07:04:22 -0700 (PDT) From: =?UTF-8?B?TWFyaW8gQsSDbMSDbmljxIM=?= To: devel@edk2.groups.io Cc: ardb+tianocore@kernel.org, leif@nuviainc.com, pete@akeo.ie Subject: [edk2-platforms][PATCH v2 1/1] Platform/RaspberryPi: Fix mini UART clock divisor calculation Date: Tue, 6 Apr 2021 17:04:11 +0300 Message-Id: <20210406140411.901-1-mariobalanica02@gmail.com> X-Mailer: git-send-email 2.29.2.windows.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable 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=C4=83l=C4=83nic=C4=83 --- 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/DualSerialPortL= ib.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=0D )=0D {=0D - UINT64 BaseClockRate;=0D + UINT32 BaseClockRate;=0D UINT32 Divisor;=0D =0D - //=0D - // On the Raspberry Pi, the clock to use for the 16650-compatible UART=0D - // is the base clock divided by the 12.12 fixed point VPU clock divisor.= =0D - //=0D - BaseClockRate =3D (UINT64)PcdGet32 (PcdSerialClockRate);=0D -#if (RPI_MODEL =3D=3D 4)=0D - Divisor =3D MmioRead32(BCM2836_CM_BASE + BCM2836_CM_VPU_CLOCK_DIVISOR) &= 0xFFFFFF;=0D - if (Divisor !=3D 0)=0D - BaseClockRate =3D (BaseClockRate << 12) / Divisor;=0D -#endif=0D + BaseClockRate =3D PcdGet32 (PcdSerialClockRate);=0D =0D //=0D // As per the BCM2xxx datasheets:=0D // baudrate =3D system_clock_freq / (8 * (divisor + 1)).=0D //=0D - Divisor =3D (UINT32)BaseClockRate / (SerialBaudRate * 8);=0D + Divisor =3D BaseClockRate / (SerialBaudRate * 8);=0D if (Divisor !=3D 0) {=0D Divisor--;=0D }=0D diff --git a/Platform/RaspberryPi/Library/PlatformLib/AArch64/RaspberryPiHe= lper.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=0D str w0, [x2]=0D =0D -#if (RPI_MODEL =3D=3D 3)=0D run .Lclkinfo_buffer=0D =0D ldr w0, .Lfrequency=0D adr x2, _gPcd_BinaryPatch_PcdSerialClockRate=0D str w0, [x2]=0D -#endif=0D =0D ret=0D =0D @@ -135,7 +133,6 @@ ASM_FUNC (ArmPlatformPeiBootAction) .long 0 // end tag=0D .set .Lrevinfo_size, . - .Lrevinfo_buffer=0D =0D -#if (RPI_MODEL =3D=3D 3)=0D .align 4=0D .Lclkinfo_buffer:=0D .long .Lclkinfo_size=0D @@ -148,7 +145,6 @@ ASM_FUNC (ArmPlatformPeiBootAction) .long 0 // frequency=0D .long 0 // end tag=0D .set .Lclkinfo_size, . - .Lclkinfo_buffer=0D -#endif=0D =0D //UINTN=0D //ArmPlatformGetPrimaryCoreMpId (=0D 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=0D gEfiMdeModulePkgTokenSpaceGuid.PcdSerialUseMmio|TRUE=0D gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterStride|4=0D - gEfiMdeModulePkgTokenSpaceGuid.PcdSerialClockRate|1000000000=0D gEfiMdeModulePkgTokenSpaceGuid.PcdSerialFifoControl|0x27=0D gEfiMdeModulePkgTokenSpaceGuid.PcdSerialExtendedTxFifoSize|8=0D gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate|115200=0D @@ -465,6 +464,9 @@ [PcdsFixedAtBuild.common] gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVendor|L"EDK2"=0D gEfiMdeModulePkgTokenSpaceGuid.PcdSetNxForStack|TRUE=0D =0D +[PcdsPatchableInModule]=0D + gEfiMdeModulePkgTokenSpaceGuid.PcdSerialClockRate|500000000=0D +=0D [PcdsDynamicHii.common.DEFAULT]=0D =0D #=0D @@ -621,7 +623,7 @@ [Components.common] MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf=0D MdeModulePkg/Universal/SerialDxe/SerialDxe.inf {=0D =0D - SerialPortLib|Platform/RaspberryPi/Library/DualSerialPortLib/DualSer= ialPortLib.inf=0D + SerialPortLib|Platform/RaspberryPi/Library/DualSerialPortLib/DualSer= ialPortDxeLib.inf=0D }=0D Platform/RaspberryPi/Drivers/DisplayDxe/DisplayDxe.inf=0D EmbeddedPkg/Drivers/ConsolePrefDxe/ConsolePrefDxe.inf=0D --=20 2.29.2.windows.2