From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by mx.groups.io with SMTP id smtpd.web10.7043.1643469602360067812 for ; Sat, 29 Jan 2022 07:20:02 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=mKkW8HfL; spf=pass (domain: kernel.org, ip: 145.40.68.75, mailfrom: ardb@kernel.org) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 4F2A0B827CD for ; Sat, 29 Jan 2022 15:19:59 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 03E96C340E5 for ; Sat, 29 Jan 2022 15:19:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1643469598; bh=9E+b5ctxo6q9K1UsMqfp6xF+CrVAljKZFlQC3Lm7xA0=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=mKkW8HfLWgrkyJ3yQda2lMqlQIllOdwERd3MUu2ufnnB7lRwxDbj16n1t/q5/aYZD ilaNmYal1Yas/5X/GTVBgAxhb1Hj8EPR548stQNzbA1ta8Z6jYdYGALCIrel5D5nJt Pt8hiR4pyZW9IyDrAlRTvZ1Y/13zWYfxs1iRHCSPVrB3uCxKFAKe+VI+5+bbQczvgV uaWuBbLMqMOmgyH5vmGxWGG+ChbAf5Lo47Z45o05AgGL34Ao7FYLW2b1GCFWfsT2Qo yP8M+JAEaVRLhWZvW+N9dkcdkZ39sQlin4vGUmyIr9XzgyCMY2pgKeJJ9n4wTOmuv4 OYrHJZ/YBYqYA== Received: by mail-wm1-f48.google.com with SMTP id f202-20020a1c1fd3000000b0034dd403f4fbso6160865wmf.1 for ; Sat, 29 Jan 2022 07:19:57 -0800 (PST) X-Gm-Message-State: AOAM531VhgztD3vt27vsYP1HDTNlYIxbR/v1r+JAxcX/7wwSr98GwVPL BmTW/yJHI5320OzfnmA8Gl+udHZv5OBV1Orqkto= X-Google-Smtp-Source: ABdhPJzJdVY/QhBqCXK2sMTZQU/IPKSt0UgXnAWkMMF5A8idmqzJHmkNt5mf4n/nXe9bC/WG5a0SGUgwz4RWmxf9POQ= X-Received: by 2002:a1c:a90d:: with SMTP id s13mr11466844wme.32.1643469596320; Sat, 29 Jan 2022 07:19:56 -0800 (PST) MIME-Version: 1.0 References: <20220128153818.29890-1-athierry@redhat.com> In-Reply-To: <20220128153818.29890-1-athierry@redhat.com> From: "Ard Biesheuvel" Date: Sat, 29 Jan 2022 16:19:44 +0100 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [edk2-devel] [edk2-platforms PATCH] Platform/RaspberryPi: Add 'clock-frequency' property for miniuart To: edk2-devel-groups-io , Adrien Thierry , Jeremy Linton Cc: Ard Biesheuvel , Leif Lindholm , Pete Batard Content-Type: text/plain; charset="UTF-8" (+ Jeremy) On Fri, 28 Jan 2022 at 16:40, Adrien Thierry 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. > > 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 > > -- > 2.17.1 > > > > > >