From: "Adrien Thierry" <athierry@redhat.com>
To: devel@edk2.groups.io
Cc: Adrien Thierry <athierry@redhat.com>,
Ard Biesheuvel <ardb+tianocore@kernel.org>,
Leif Lindholm <leif@nuviainc.com>, Pete Batard <pete@akeo.ie>
Subject: [edk2-platforms PATCH] Platform/RaspberryPi: Add 'clock-frequency' property for miniuart
Date: Fri, 28 Jan 2022 10:38:18 -0500 [thread overview]
Message-ID: <20220128153818.29890-1-athierry@redhat.com> (raw)
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.
Signed-off-by: Adrien Thierry <athierry@redhat.com>
---
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
--
2.17.1
next reply other threads:[~2022-01-28 15:40 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-28 15:38 Adrien Thierry [this message]
2022-01-29 15:19 ` [edk2-devel] [edk2-platforms PATCH] Platform/RaspberryPi: Add 'clock-frequency' property for miniuart Ard Biesheuvel
2022-01-31 12:34 ` Leif Lindholm
2022-01-31 16:12 ` [edk2-devel] " Jeremy Linton
2022-01-31 17:36 ` Ard Biesheuvel
2022-01-31 21:33 ` Adrien Thierry
2022-01-31 22:20 ` Ard Biesheuvel
2022-02-01 5:40 ` Jeremy Linton
2022-02-01 19:21 ` Adrien Thierry
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220128153818.29890-1-athierry@redhat.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox