From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web08.44564.1643694056419486761 for ; Mon, 31 Jan 2022 21:40:56 -0800 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: arm.com, ip: 217.140.110.172, mailfrom: jeremy.linton@arm.com) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 543B2113E; Mon, 31 Jan 2022 21:40:55 -0800 (PST) Received: from [192.168.122.164] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 153A33F718; Mon, 31 Jan 2022 21:40:55 -0800 (PST) Message-ID: <5244e9cd-546c-43ee-26f6-434b8ed301c3@arm.com> Date: Mon, 31 Jan 2022 23:40:54 -0600 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.3.0 Subject: Re: [edk2-devel] [edk2-platforms PATCH] Platform/RaspberryPi: Add 'clock-frequency' property for miniuart To: Ard Biesheuvel Cc: edk2-devel-groups-io , Adrien Thierry , Ard Biesheuvel , Leif Lindholm , Pete Batard References: <20220128153818.29890-1-athierry@redhat.com> <977a518c-f2ab-ee70-e63a-f7f01846d80b@arm.com> From: "Jeremy Linton" In-Reply-To: Content-Language: en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 1/31/22 11:36, Ard Biesheuvel wrote: > On Mon, 31 Jan 2022 at 17:13, Jeremy Linton wrote: >> >> Hi, >> >> On 1/28/22 09:38, Adrien Thierry via groups.io wrote: >>> Describe the miniuart clock frequency in a _DSD property, so that it can >>> be read from the Linux driver. >>> >>> The miniuart clock frequency is the core clock frequency on the >>> Raspberry Pi. It can be modified by the user using the 'core_freq' >>> property in the config.txt file. So, we fetch it from the underlying >>> Raspberry Pi firmware. >> >> Sorry about the delay, I've been out a bit. >> >> So, this all looks good to me, and it passes the patch checker, the >> trick now will be landing the linux patch. >> >> >> Thanks, >> >> Reviewed-by: Jeremy Linton >> > > Thanks. Could this be resent without whitespace damage please? > Also, a link the to Linux patch would be helpful. Hmm, I've had that problem a couple times too with these postings, although it usually appeared to be something groups.io was doing because direct cc's to myself were correct. I've got a little script to remove the double lines, which is what I ran this through before git am'ing it. > > >> >> >>> >>> Signed-off-by: Adrien Thierry >>> --- >>> Platform/RaspberryPi/AcpiTables/Uart.asl | 14 ++++++++++++++ >>> Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.c | 9 +++++++++ >>> .../RaspberryPi/Drivers/ConfigDxe/ConfigDxe.inf | 1 + >>> Platform/RaspberryPi/RPi3/RPi3.dsc | 5 +++++ >>> Platform/RaspberryPi/RPi4/RPi4.dsc | 5 +++++ >>> Platform/RaspberryPi/RaspberryPi.dec | 1 + >>> 6 files changed, 35 insertions(+) >>> >>> diff --git a/Platform/RaspberryPi/AcpiTables/Uart.asl b/Platform/RaspberryPi/AcpiTables/Uart.asl >>> index 974f06d3bc..ef5165be98 100644 >>> --- a/Platform/RaspberryPi/AcpiTables/Uart.asl >>> +++ b/Platform/RaspberryPi/AcpiTables/Uart.asl >>> @@ -77,6 +77,20 @@ Device (URTM) >>> MEMORY32SETBASE (RBUF, RMEM, RBAS, BCM2836_MINI_UART_OFFSET) >>> >>> Return (^RBUF) >>> >>> } >>> >>> + >>> >>> + // >>> >>> + // Mini Uart Clock Rate will be dynamically updated during boot >>> >>> + // 0x4D 0x55 0x43 0x52 0xC 0x1000000 (Value must be > 16777215) >>> >>> + // >>> >>> + Name (MUCR, 0x1000000) >>> >>> + >>> >>> + Name (_DSD, Package () >>> >>> + { >>> >>> + ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), Package () >>> >>> + { >>> >>> + Package (2) { "clock-frequency", MUCR }, >>> >>> + } >>> >>> + }) >>> >>> } >>> >>> >>> >>> // >>> >>> diff --git a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.c b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.c >>> index 415d99fadb..3dcf2bac0d 100644 >>> --- a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.c >>> +++ b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.c >>> @@ -44,6 +44,7 @@ STATIC RASPBERRY_PI_FIRMWARE_PROTOCOL *mFwProtocol; >>> STATIC UINT32 mModelFamily = 0; >>> >>> STATIC UINT32 mModelInstalledMB = 0; >>> >>> STATIC UINT32 mModelRevision = 0; >>> >>> +STATIC UINT32 mCoreClockRate = 0; >>> >>> >>> >>> STATIC EFI_MAC_ADDRESS mMacAddress; >>> >>> >>> >>> @@ -798,6 +799,7 @@ STATIC CONST AML_NAME_OP_REPLACE SsdtEmmcNameOpReplace[] = { >>> >>> >>> STATIC CONST AML_NAME_OP_REPLACE DsdtNameOpReplace[] = { >>> >>> { "URIU", PcdToken (PcdUartInUse) }, >>> >>> + { "MUCR", PcdToken (PcdMiniUartClockRate) }, >>> >>> { } >>> >>> }; >>> >>> >>> >>> @@ -944,6 +946,13 @@ ConfigInitialize ( >>> DEBUG ((DEBUG_INFO, "Current Raspberry Pi revision %x\n", mModelRevision)); >>> >>> } >>> >>> >>> >>> + Status = mFwProtocol->GetClockRate (RPI_MBOX_CLOCK_RATE_CORE, &mCoreClockRate); >>> >>> + if (Status != EFI_SUCCESS) { >>> >>> + DEBUG ((DEBUG_ERROR, "Couldn't get the Raspberry Pi core clock rate: %r\n", Status)); >>> >>> + } else { >>> >>> + PcdSet32S (PcdMiniUartClockRate, mCoreClockRate); >>> >>> + } >>> >>> + >>> >>> Status = SetupVariables (); >>> >>> if (Status != EFI_SUCCESS) { >>> >>> DEBUG ((DEBUG_ERROR, "Couldn't not setup NV vars: %r\n", Status)); >>> >>> diff --git a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.inf b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.inf >>> index e6e22ad82e..6f6e8f42ac 100644 >>> --- a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.inf >>> +++ b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.inf >>> @@ -95,6 +95,7 @@ >>> gRaspberryPiTokenSpaceGuid.PcdFanTemp >>> >>> gRaspberryPiTokenSpaceGuid.PcdUartInUse >>> >>> gRaspberryPiTokenSpaceGuid.PcdXhciPci >>> >>> + gRaspberryPiTokenSpaceGuid.PcdMiniUartClockRate >>> >>> >>> >>> [Depex] >>> >>> gPcdProtocolGuid AND gRaspberryPiFirmwareProtocolGuid >>> >>> diff --git a/Platform/RaspberryPi/RPi3/RPi3.dsc b/Platform/RaspberryPi/RPi3/RPi3.dsc >>> index 6ab5d1ae6d..6dc48dc233 100644 >>> --- a/Platform/RaspberryPi/RPi3/RPi3.dsc >>> +++ b/Platform/RaspberryPi/RPi3/RPi3.dsc >>> @@ -561,6 +561,11 @@ >>> # >>> >>> gRaspberryPiTokenSpaceGuid.PcdUartInUse|1 >>> >>> >>> >>> + # >>> >>> + # Mini-UART clock rate >>> >>> + # >>> >>> + gRaspberryPiTokenSpaceGuid.PcdMiniUartClockRate|250000000 >>> >>> + >>> >>> ################################################################################ >>> >>> # >>> >>> # Components Section - list of all EDK II Modules needed by this Platform >>> >>> diff --git a/Platform/RaspberryPi/RPi4/RPi4.dsc b/Platform/RaspberryPi/RPi4/RPi4.dsc >>> index 44ed60ab2f..a9c0c36bb1 100644 >>> --- a/Platform/RaspberryPi/RPi4/RPi4.dsc >>> +++ b/Platform/RaspberryPi/RPi4/RPi4.dsc >>> @@ -580,6 +580,11 @@ >>> # >>> >>> gRaspberryPiTokenSpaceGuid.PcdUartInUse|0 >>> >>> >>> >>> + # >>> >>> + # Mini-UART clock rate >>> >>> + # >>> >>> + gRaspberryPiTokenSpaceGuid.PcdMiniUartClockRate|500000000 >>> >>> + >>> >>> ################################################################################ >>> >>> # >>> >>> # Components Section - list of all EDK II Modules needed by this Platform >>> >>> diff --git a/Platform/RaspberryPi/RaspberryPi.dec b/Platform/RaspberryPi/RaspberryPi.dec >>> index 797be59274..17b6061a05 100644 >>> --- a/Platform/RaspberryPi/RaspberryPi.dec >>> +++ b/Platform/RaspberryPi/RaspberryPi.dec >>> @@ -72,3 +72,4 @@ >>> gRaspberryPiTokenSpaceGuid.PcdMmcEnableDma|0|UINT32|0x0000001F >>> >>> gRaspberryPiTokenSpaceGuid.PcdUartInUse|1|UINT32|0x00000021 >>> >>> gRaspberryPiTokenSpaceGuid.PcdXhciPci|0|UINT32|0x00000022 >>> >>> + gRaspberryPiTokenSpaceGuid.PcdMiniUartClockRate|0|UINT32|0x00000023 >>> >>