From nobody Fri Mar 29 11:26:03 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+51525+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+51525+1787277+3901457@groups.io ARC-Seal: i=1; a=rsa-sha256; t=1575287725; cv=none; d=zohomail.com; s=zohoarc; b=P1g8ph6c+A4Zf+ejNsCCAfwUlxuiLt9Zak7+4Dk3VTQ1nprStwpETIuNRuW8wwUOtsbAURFsf8LaYNlwiXys1WAvW9Khav3tGrlJAzRZVHx12cwGeVmm6TsDxbGG4F1Mu0+T35aPJ9NBiXbx9NBGKYxQzv6sshwm4gsVHTqjt8U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1575287725; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=sCEHASP56HyySVrbiSC80GswJ9Ce5DGgkoTqPbgXJUY=; b=cai3ZgnCqMUOr9FdzcOk/zBnyorR7IxYDcVIKN6B1XJTBHfGrcu6/XGBm7qVbdc5vqcItZ+Ok0ISxn7aZdTnp+jh51A3AdrDfAUsM4VlTop/REVih9HT1bGgQ9cxLw+GdD3Bp/JxrVEaSxnupA9ec0N8zWrGu4GVqoDPOgzR/mo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+51525+1787277+3901457@groups.io Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1575287725409378.3043105022373; Mon, 2 Dec 2019 03:55:25 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id CzC0YY1788612xwIdloKDimn; Mon, 02 Dec 2019 03:55:24 -0800 X-Received: from mail-wm1-f68.google.com (mail-wm1-f68.google.com [209.85.128.68]) by mx.groups.io with SMTP id smtpd.web11.47.1575287724049865400 for ; Mon, 02 Dec 2019 03:55:24 -0800 X-Received: by mail-wm1-f68.google.com with SMTP id p9so6474580wmc.2 for ; Mon, 02 Dec 2019 03:55:23 -0800 (PST) X-Gm-Message-State: 5OZmE4BEMr758g1vCLZw6gDox1787277AA= X-Google-Smtp-Source: APXvYqxeNpO1RHSI9wc7LZuC6g7XMAF0s9beGFP8vH9tJpn4Y+yKn93ECHDlRMRQEEEag1op+4mWkw== X-Received: by 2002:a05:600c:214f:: with SMTP id v15mr16733346wml.110.1575287721986; Mon, 02 Dec 2019 03:55:21 -0800 (PST) X-Received: from localhost.localdomain ([84.203.45.230]) by smtp.gmail.com with ESMTPSA id p10sm8500291wmi.15.2019.12.02.03.55.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 02 Dec 2019 03:55:21 -0800 (PST) From: "Pete Batard" To: devel@edk2.groups.io Cc: ard.biesheuvel@linaro.org, leif.lindholm@linaro.org, philmd@redhat.com Subject: [edk2-devel] [edk2-platforms][PATCH 1/3] Silicon/Broadcom/Bcm283x: Rename Bcm2835 RNG driver Date: Mon, 2 Dec 2019 11:55:04 +0000 Message-Id: <20191202115506.4068-2-pete@akeo.ie> In-Reply-To: <20191202115506.4068-1-pete@akeo.ie> References: <20191202115506.4068-1-pete@akeo.ie> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,pete@akeo.ie Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1575287724; bh=Xs8MffRTHyWD6duIf/o2qEA15ZPNNG52NIAgFb79DjE=; h=Cc:Date:From:Reply-To:Subject:To; b=N0nWkMgHaNW0hM8zNfph0hX2OthlLh/zErdByxfdIth390hsKMfDV09ipoYNZWbd43q WuklHDurlpyHNRTg2FvE0eTlYTwNX3ozLWwvYGq68vpcX0riMmUkIN9Ye0fXs8qJw6CtC KKmSDF1FkezeiL9RESIj2WoGgPdJ1GxFYXc= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" The Bcm283x architecture provides multiple implementations of the Random Number Generator, that have incompatibilities with one another. Because we will need to add a new driver for the Bcm2838 RNG we rename the existing Bcm2835-compatible driver to Bcm2835RngDxe and update the one platform that depends on this driver (RPi3). We also rename the internal function calls from Bcm2836 to Bcm2835 since, if we ever add platform support for Pi models that use this SoC (original Pi, Pi Zero, etc), it may look confusing to reference a feature that seems to belongs to the next SoC iteration. Signed-off-by: Pete Batard Reviewed-by: Ard Biesheuvel Reviewed-by: Philippe Mathieu-Daude --- Platform/RaspberryPi/RPi3/RPi3.dsc = | 2 +- Platform/RaspberryPi/RPi3/RPi3.fdf = | 2 +- Silicon/Broadcom/Bcm283x/Drivers/{RngDxe/RngDxe.c =3D> Bcm2835RngDxe/Bcm28= 35RngDxe.c} | 16 ++++++++-------- Silicon/Broadcom/Bcm283x/Drivers/{RngDxe/RngDxe.inf =3D> Bcm2835RngDxe/Bcm= 2835RngDxe.inf} | 6 +++--- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Platform/RaspberryPi/RPi3/RPi3.dsc b/Platform/RaspberryPi/RPi3= /RPi3.dsc index 6a808b287ea9..945baa5021f8 100644 --- a/Platform/RaspberryPi/RPi3/RPi3.dsc +++ b/Platform/RaspberryPi/RPi3/RPi3.dsc @@ -602,7 +602,7 @@ [Components.common] # # RNG # - Silicon/Broadcom/Bcm283x/Drivers/RngDxe/RngDxe.inf + Silicon/Broadcom/Bcm283x/Drivers/Bcm2835RngDxe/Bcm2835RngDxe.inf =20 # # UEFI application (Shell Embedded Boot Loader) diff --git a/Platform/RaspberryPi/RPi3/RPi3.fdf b/Platform/RaspberryPi/RPi3= /RPi3.fdf index fd4e490fdcdf..31730865601f 100644 --- a/Platform/RaspberryPi/RPi3/RPi3.fdf +++ b/Platform/RaspberryPi/RPi3/RPi3.fdf @@ -273,7 +273,7 @@ [FV.FvMain] # # RNG # - INF Silicon/Broadcom/Bcm283x/Drivers/RngDxe/RngDxe.inf + INF Silicon/Broadcom/Bcm283x/Drivers/Bcm2835RngDxe/Bcm2835RngDxe.inf =20 # # SCSI Bus and Disk Driver diff --git a/Silicon/Broadcom/Bcm283x/Drivers/RngDxe/RngDxe.c b/Silicon/Bro= adcom/Bcm283x/Drivers/Bcm2835RngDxe/Bcm2835RngDxe.c similarity index 93% rename from Silicon/Broadcom/Bcm283x/Drivers/RngDxe/RngDxe.c rename to Silicon/Broadcom/Bcm283x/Drivers/Bcm2835RngDxe/Bcm2835RngDxe.c index 722815d32f06..ea86f9b3877e 100644 --- a/Silicon/Broadcom/Bcm283x/Drivers/RngDxe/RngDxe.c +++ b/Silicon/Broadcom/Bcm283x/Drivers/Bcm2835RngDxe/Bcm2835RngDxe.c @@ -1,6 +1,6 @@ /** @file =20 - This driver produces an EFI_RNG_PROTOCOL instance for the Broadcom 2836 = RNG + This driver produces an EFI_RNG_PROTOCOL instance for the Broadcom 2835 = RNG =20 Copyright (C) 2019, Linaro Ltd. All rights reserved.
=20 @@ -59,7 +59,7 @@ STATIC EFI_STATUS EFIAPI -Bcm2836RngGetInfo ( +Bcm2835RngGetInfo ( IN EFI_RNG_PROTOCOL *This, IN OUT UINTN *RNGAlgorithmListSize, OUT EFI_RNG_ALGORITHM *RNGAlgorithmList @@ -116,7 +116,7 @@ Bcm2836RngGetInfo ( STATIC EFI_STATUS EFIAPI -Bcm2836RngGetRNG ( +Bcm2835RngGetRNG ( IN EFI_RNG_PROTOCOL *This, IN EFI_RNG_ALGORITHM *RNGAlgorithm, OPTIONAL IN UINTN RNGValueLength, @@ -168,9 +168,9 @@ Bcm2836RngGetRNG ( return EFI_SUCCESS; } =20 -STATIC EFI_RNG_PROTOCOL mBcm2836RngProtocol =3D { - Bcm2836RngGetInfo, - Bcm2836RngGetRNG +STATIC EFI_RNG_PROTOCOL mBcm2835RngProtocol =3D { + Bcm2835RngGetInfo, + Bcm2835RngGetRNG }; =20 // @@ -178,7 +178,7 @@ STATIC EFI_RNG_PROTOCOL mBcm2836RngProtocol =3D { // EFI_STATUS EFIAPI -Bcm2836RngEntryPoint ( +Bcm2835RngEntryPoint ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) @@ -186,7 +186,7 @@ Bcm2836RngEntryPoint ( EFI_STATUS Status; =20 Status =3D gBS->InstallMultipleProtocolInterfaces (&ImageHandle, - &gEfiRngProtocolGuid, &mBcm2836RngProtocol, + &gEfiRngProtocolGuid, &mBcm2835RngProtocol, NULL); ASSERT_EFI_ERROR (Status); =20 diff --git a/Silicon/Broadcom/Bcm283x/Drivers/RngDxe/RngDxe.inf b/Silicon/B= roadcom/Bcm283x/Drivers/Bcm2835RngDxe/Bcm2835RngDxe.inf similarity index 82% rename from Silicon/Broadcom/Bcm283x/Drivers/RngDxe/RngDxe.inf rename to Silicon/Broadcom/Bcm283x/Drivers/Bcm2835RngDxe/Bcm2835RngDxe.inf index 8eb90de85cfd..dc91c1a9ba7b 100644 --- a/Silicon/Broadcom/Bcm283x/Drivers/RngDxe/RngDxe.inf +++ b/Silicon/Broadcom/Bcm283x/Drivers/Bcm2835RngDxe/Bcm2835RngDxe.inf @@ -9,14 +9,14 @@ =20 [Defines] INF_VERSION =3D 0x0001001B - BASE_NAME =3D RngDxe + BASE_NAME =3D Bcm2835RngDxe FILE_GUID =3D 9743084e-c82a-4714-b2ba-f571f81cb021 MODULE_TYPE =3D DXE_DRIVER VERSION_STRING =3D 1.0 - ENTRY_POINT =3D Bcm2836RngEntryPoint + ENTRY_POINT =3D Bcm2835RngEntryPoint =20 [Sources] - RngDxe.c + Bcm2835RngDxe.c =20 [Packages] MdePkg/MdePkg.dec --=20 2.21.0.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#51525): https://edk2.groups.io/g/devel/message/51525 Mute This Topic: https://groups.io/mt/64721524/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Fri Mar 29 11:26:03 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+51526+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+51526+1787277+3901457@groups.io ARC-Seal: i=1; a=rsa-sha256; t=1575287727; cv=none; d=zohomail.com; s=zohoarc; b=ZXSoR40KZs1j1de1aHD9TAqOk1KzbsMMhUArwkc2RdA5/iIP0vURW/Mw6XGa25fU9YXdzFYVqikaZUIQsp5ZDmjEmW3AcSteEYNhfRVmWwq1qxRTdVlJ145Kw/rvSE4uIYkMfXbvud/UggmKLDlmQh01ooknSlLfypWPMipMvLU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1575287727; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=IvcA8kVqoiO2zCD+wHMcm/MLDUTjaiUbcMvRrxfHCSY=; b=J3OKA2pUOyTJKt2JG3Q8uGg5LwlRevLg5mfiNa9zxjbKlBW2ua7DnU6D9dyLMi18STi5ZPkI3RPfLw1e8bWe7ObxQr1xI7FpF7srUOG3JcLBaxD/2HwVpgq2O9/gTC1/HclAuxq8v/1NySP7UAv8bj03aJL4rw//Nhs1w+AHurE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+51526+1787277+3901457@groups.io Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1575287727392568.7141579956442; Mon, 2 Dec 2019 03:55:27 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id gJo5YY1788612x3eBCgfd3tJ; Mon, 02 Dec 2019 03:55:26 -0800 X-Received: from mail-wr1-f67.google.com (mail-wr1-f67.google.com [209.85.221.67]) by mx.groups.io with SMTP id smtpd.web09.29.1575287725545926280 for ; Mon, 02 Dec 2019 03:55:25 -0800 X-Received: by mail-wr1-f67.google.com with SMTP id q10so7706493wrm.11 for ; Mon, 02 Dec 2019 03:55:25 -0800 (PST) X-Gm-Message-State: h0qlzXMJIJIzxQILvUznjy03x1787277AA= X-Google-Smtp-Source: APXvYqx15XswcQ7oLKw8N2+bi376dmxVbqT4nQePK5qR77kV7kTw2DIOf72zcLXbjWkxYqRkubqCqQ== X-Received: by 2002:adf:b193:: with SMTP id q19mr21173111wra.78.1575287723684; Mon, 02 Dec 2019 03:55:23 -0800 (PST) X-Received: from localhost.localdomain ([84.203.45.230]) by smtp.gmail.com with ESMTPSA id p10sm8500291wmi.15.2019.12.02.03.55.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 02 Dec 2019 03:55:22 -0800 (PST) From: "Pete Batard" To: devel@edk2.groups.io Cc: ard.biesheuvel@linaro.org, leif.lindholm@linaro.org, philmd@redhat.com Subject: [edk2-devel] [edk2-platforms][PATCH 2/3] Silicon/Broadcom/Bcm283x: Move Bcm2835 RNG defines to their own header Date: Mon, 2 Dec 2019 11:55:05 +0000 Message-Id: <20191202115506.4068-3-pete@akeo.ie> In-Reply-To: <20191202115506.4068-1-pete@akeo.ie> References: <20191202115506.4068-1-pete@akeo.ie> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,pete@akeo.ie Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1575287726; bh=REFZbANNsUQBJfrz7mftAH0kdM5j0C86o07O/jihpkU=; h=Cc:Date:From:Reply-To:Subject:To; b=KaZIUUCXN1d9aUovvqmCFCMMdAhWawVO3wklQSMx5xC+zXgl8P7nlrZdO3Bt2P7G0nH k4888qAGkVm2f71gbs2GkkqV/+1mpSsVt71FUl/sciX1059BkPAEft+mR5X8TSNPKRLDA AXnybW3xK/r/P9BwVWLiO9yl+k+mKi+cKo4= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" While the Bcm2835 and Bcm2838 RNG appear to share the same register layout, we prefer moving the RNG specific defines into their own header in case this assertion doesn't hold true with future RNG drivers. Also, this should make it clearer to see which specific elements apply to which SoC implementation. Signed-off-by: Pete Batard Reviewed-by: Ard Biesheuvel Reviewed-by: Philippe Mathieu-Daude --- Silicon/Broadcom/Bcm283x/Drivers/Bcm2835RngDxe/Bcm2835RngDxe.c | 2 +- Silicon/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2835Rng.h | 22 ++++++= ++++++++++++++ Silicon/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2836.h | 9 ------= -- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/Silicon/Broadcom/Bcm283x/Drivers/Bcm2835RngDxe/Bcm2835RngDxe.c= b/Silicon/Broadcom/Bcm283x/Drivers/Bcm2835RngDxe/Bcm2835RngDxe.c index ea86f9b3877e..84d194ea8472 100644 --- a/Silicon/Broadcom/Bcm283x/Drivers/Bcm2835RngDxe/Bcm2835RngDxe.c +++ b/Silicon/Broadcom/Bcm283x/Drivers/Bcm2835RngDxe/Bcm2835RngDxe.c @@ -14,7 +14,7 @@ #include #include =20 -#include +#include =20 #include =20 diff --git a/Silicon/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2835Rng.h= b/Silicon/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2835Rng.h new file mode 100644 index 000000000000..817c91cb24c1 --- /dev/null +++ b/Silicon/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2835Rng.h @@ -0,0 +1,22 @@ +/** @file + * + * Copyright (c) 2019, Pete Batard . + * + * SPDX-License-Identifier: BSD-2-Clause-Patent + * + **/ + +#ifndef BCM2835_RNG_H__ +#define BCM2835_RNG_H__ + +#define BCM2835_RNG_OFFSET 0x00104000 +#define RNG_BASE_ADDRESS ((FixedPcdGet64 (PcdBcm283xReg= istersAddress)) \ + + BCM2835_RNG_OFFSET) + +#define RNG_CTRL (RNG_BASE_ADDRESS + 0x0) +#define RNG_STATUS (RNG_BASE_ADDRESS + 0x4) +#define RNG_DATA (RNG_BASE_ADDRESS + 0x8) + +#define RNG_CTRL_ENABLE 0x1 + +#endif /* BCM2835_RNG_H__ */ diff --git a/Silicon/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2836.h b/= Silicon/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2836.h index 72c8e9dc4b14..02107086d439 100644 --- a/Silicon/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2836.h +++ b/Silicon/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2836.h @@ -50,13 +50,4 @@ #define BCM2836_INTC_TIMER_CONTROL_OFFSET 0x00000040 #define BCM2836_INTC_TIMER_PENDING_OFFSET 0x00000060 =20 -/* random number generator */ -#define RNG_BASE_ADDRESS (BCM2836_SOC_REGISTERS + 0x00104000) - -#define RNG_CTRL (RNG_BASE_ADDRESS + 0x0) -#define RNG_STATUS (RNG_BASE_ADDRESS + 0x4) -#define RNG_DATA (RNG_BASE_ADDRESS + 0x8) - -#define RNG_CTRL_ENABLE 0x1 - #endif /*__BCM2836_H__ */ --=20 2.21.0.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#51526): https://edk2.groups.io/g/devel/message/51526 Mute This Topic: https://groups.io/mt/64721567/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Fri Mar 29 11:26:03 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+51527+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+51527+1787277+3901457@groups.io ARC-Seal: i=1; a=rsa-sha256; t=1575287730; cv=none; d=zohomail.com; s=zohoarc; b=BwtNhRg8dFH3/4WWo0UBSS13qJAghzOUYpOeu3HDxsqO9Lebj8Kw/Vtn5LtiOU5Ozur6cx2EJSZ/FvvzACiSUeHk/BFRFVsyhYgUnlnT6GL044uS8djpu9ptJ41ulgHT1FyijusshF5wpbw47dcsYlOQx6T4IUeXO7FzWSaHQSU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1575287730; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=OJF6xfLHkWV5A4EOrg44d5Ik3Ws1tsnX+/Wtfbs9A2I=; b=hE5y7nBUcolbiExcGUiWg3U0rsz23F0rN8eFkos7xUP9Ccio8Z8D0LhJN8Nk3mCsJuDUDItoTZ+75SP/BuAl35RX0IzH3BF7GNDYyLzHu2Mx1PH33bj7zLyyAutyrKhftq7TTyqRPgSEN+5k7EZOUYIir88Xx3znNKlXU88OAFw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+51527+1787277+3901457@groups.io Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1575287730075116.1889908433269; Mon, 2 Dec 2019 03:55:30 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id YPwZYY1788612xGim9I18gnd; Mon, 02 Dec 2019 03:55:29 -0800 X-Received: from mail-wm1-f67.google.com (mail-wm1-f67.google.com [209.85.128.67]) by mx.groups.io with SMTP id smtpd.web10.50.1575287727948378392 for ; Mon, 02 Dec 2019 03:55:28 -0800 X-Received: by mail-wm1-f67.google.com with SMTP id f129so22950353wmf.2 for ; Mon, 02 Dec 2019 03:55:27 -0800 (PST) X-Gm-Message-State: rxdYPT5FlLTVcdNNqQNONJBMx1787277AA= X-Google-Smtp-Source: APXvYqyc50yWUYJxMaP+/DC+HaC2L3pcSyiJRFuuR8FdzYM30fjW5s70UWaO4Kf7eDb2cAgLhYO/hQ== X-Received: by 2002:a7b:c318:: with SMTP id k24mr15322457wmj.54.1575287725673; Mon, 02 Dec 2019 03:55:25 -0800 (PST) X-Received: from localhost.localdomain ([84.203.45.230]) by smtp.gmail.com with ESMTPSA id p10sm8500291wmi.15.2019.12.02.03.55.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 02 Dec 2019 03:55:24 -0800 (PST) From: "Pete Batard" To: devel@edk2.groups.io Cc: ard.biesheuvel@linaro.org, leif.lindholm@linaro.org, philmd@redhat.com Subject: [edk2-devel] [edk2-platforms][PATCH 3/3] Silicon/Broadcom/Bcm283x: Add Bcm2838 RNG driver Date: Mon, 2 Dec 2019 11:55:06 +0000 Message-Id: <20191202115506.4068-4-pete@akeo.ie> In-Reply-To: <20191202115506.4068-1-pete@akeo.ie> References: <20191202115506.4068-1-pete@akeo.ie> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,pete@akeo.ie Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1575287729; bh=qVwu+m9VDivJvbfwZi/Tw1sIelZXrTWleZ0l7B+2StA=; h=Cc:Date:From:Reply-To:Subject:To; b=UZhvb7Z7GNmg0cri7HhaV7YzWe9Ay7J+Y/nlH6xZgxIWHooj8K7wgJBmH+3BwVD7rlo zuafEea20qVqypwTnNvweDcWfGvL+t8pF2j9J7GaEo/OPZwHAffzZHQdco/Vr8k9dl2Pm 2tZfsOxbFAfb7K0QtGbvrYQZww5/0Aid87s= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" This adds the Bcm2838 Random Number Generator Driver, which is also the type of RNG that the Bmc2711-based Raspberry Pi 4 uses. Signed-off-by: Pete Batard Reviewed-by: Ard Biesheuvel --- Silicon/Broadcom/Bcm283x/Drivers/Bcm2838RngDxe/Bcm2838RngDxe.c | 285 +++= +++++++++++++++++ Silicon/Broadcom/Bcm283x/Drivers/Bcm2838RngDxe/Bcm2838RngDxe.inf | 46 ++++ Silicon/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2838Rng.h | 30 +++ 3 files changed, 361 insertions(+) diff --git a/Silicon/Broadcom/Bcm283x/Drivers/Bcm2838RngDxe/Bcm2838RngDxe.c= b/Silicon/Broadcom/Bcm283x/Drivers/Bcm2838RngDxe/Bcm2838RngDxe.c new file mode 100644 index 000000000000..5737876e52c6 --- /dev/null +++ b/Silicon/Broadcom/Bcm283x/Drivers/Bcm2838RngDxe/Bcm2838RngDxe.c @@ -0,0 +1,285 @@ +/** @file + + This driver produces an EFI_RNG_PROTOCOL instance for the Broadcom 2838 = RNG + + Copyright (C) 2019, Pete Batard + Copyright (C) 2019, Linaro Ltd. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +#define RNG_WARMUP_COUNT 0x40000 +#define RNG_MAX_RETRIES 0x100 // arbitrary upper bound + +/** + Returns information about the random number generation implementation. + + @param[in] This A pointer to the EFI_RNG_PROTOCOL + instance. + @param[in,out] RNGAlgorithmListSize On input, the size in bytes of + RNGAlgorithmList. + On output with a return code of + EFI_SUCCESS, the size in bytes of the + data returned in RNGAlgorithmList. On + output with a return code of + EFI_BUFFER_TOO_SMALL, the size of + RNGAlgorithmList required to obtain = the + list. + @param[out] RNGAlgorithmList A caller-allocated memory buffer fil= led + by the driver with one EFI_RNG_ALGOR= ITHM + element for each supported RNG algor= ithm. + The list must not change across mult= iple + calls to the same driver. The first + algorithm in the list is the default + algorithm for the driver. + + @retval EFI_SUCCESS The RNG algorithm list was returned + successfully. + @retval EFI_UNSUPPORTED The services is not supported by this + driver. + @retval EFI_DEVICE_ERROR The list of algorithms could not be + retrieved due to a hardware or firmw= are + error. + @retval EFI_INVALID_PARAMETER One or more of the parameters are + incorrect. + @retval EFI_BUFFER_TOO_SMALL The buffer RNGAlgorithmList is too s= mall + to hold the result. + +**/ +STATIC +EFI_STATUS +EFIAPI +Bcm2838RngGetInfo ( + IN EFI_RNG_PROTOCOL *This, + IN OUT UINTN *RNGAlgorithmListSize, + OUT EFI_RNG_ALGORITHM *RNGAlgorithmList + ) +{ + if (This =3D=3D NULL || RNGAlgorithmListSize =3D=3D NULL) { + return EFI_INVALID_PARAMETER; + } + + if (*RNGAlgorithmListSize < sizeof (EFI_RNG_ALGORITHM)) { + *RNGAlgorithmListSize =3D sizeof (EFI_RNG_ALGORITHM); + return EFI_BUFFER_TOO_SMALL; + } + + if (RNGAlgorithmList =3D=3D NULL) { + return EFI_INVALID_PARAMETER; + } + + *RNGAlgorithmListSize =3D sizeof (EFI_RNG_ALGORITHM); + CopyGuid (RNGAlgorithmList, &gEfiRngAlgorithmRaw); + + return EFI_SUCCESS; +} + +/** + Read a single random value, in either FIFO or regular mode. + + @param[in] Val A pointer to the 32-bit word that is= to + be filled with a random value. + + @retval EFI_SUCCESS A random value was successfully read. + @retval EFI_NOT_READY The number of retries elapsed before= a + random value was generated. + +**/ +STATIC +EFI_STATUS +EFIAPI +Bcm2838RngReadValue ( + IN OUT UINT32 *Val +) +{ + UINT32 Avail; + UINT32 i; + + ASSERT (Val !=3D NULL); + + Avail =3D MmioRead32 (RNG_FIFO_COUNT) & RNG_FIFO_DATA_AVAIL_MASK; + + // + // If we don't have a value ready, wait 1 us and retry. + // + // Empirical testing on the platform this driver is designed to be used + // with shows that, unless you set a large divisor for the sample rate, + // random bits should be generated around the MHz frequency. + // Therefore a retry that doesn't expire until at least RNG_MAX_RETRIES + // microseconds should give us ample time to obtain a value. Besides, + // even outside of calling MicroSecondDelay (), we expect MMIO reads to + // be slow anyway... + // + // On the other hand, we may run into a timeout here if the warmup period + // has not been completed since the RNG locks RNG_FIFO_COUNT to zero + // until then. However, with the values we use for the target platform, + // (RPi4) you'd need to start requesting random data within the first + // 250 to 500 ms after driver instantiation for this to happen. + // + for (i =3D 0; Avail < 1 && i < RNG_MAX_RETRIES; i++) { + MicroSecondDelay (1); + Avail =3D MmioRead32 (RNG_FIFO_COUNT) & RNG_FIFO_DATA_AVAIL_MASK; + } + if (Avail < 1) { + return EFI_NOT_READY; + } + + *Val =3D MmioRead32 (RNG_FIFO_DATA); + + return EFI_SUCCESS; +} + +/** + Produces and returns an RNG value using either the default or specified = RNG + algorithm. + + @param[in] This A pointer to the EFI_RNG_PROTOCOL + instance. + @param[in] RNGAlgorithm A pointer to the EFI_RNG_ALGORITHM t= hat + identifies the RNG algorithm to use.= May + be NULL in which case the function w= ill + use its default RNG algorithm. + @param[in] RNGValueLength The length in bytes of the memory bu= ffer + pointed to by RNGValue. The driver s= hall + return exactly this numbers of bytes. + @param[out] RNGValue A caller-allocated memory buffer fil= led + by the driver with the resulting RNG + value. + + @retval EFI_SUCCESS The RNG value was returned successfu= lly. + @retval EFI_UNSUPPORTED The algorithm specified by RNGAlgori= thm + is not supported by this driver. + @retval EFI_DEVICE_ERROR An RNG value could not be retrieved = due + to a hardware or firmware error. + @retval EFI_NOT_READY There is not enough random data avai= lable + to satisfy the length requested by + RNGValueLength. + @retval EFI_INVALID_PARAMETER RNGValue is NULL or RNGValueLength is + zero. + +**/ +STATIC +EFI_STATUS +EFIAPI +Bcm2838RngGetRNG ( + IN EFI_RNG_PROTOCOL *This, + IN EFI_RNG_ALGORITHM *RNGAlgorithm, OPTIONAL + IN UINTN RNGValueLength, + OUT UINT8 *RNGValue + ) +{ + EFI_STATUS Status; + UINT32 Val; + + if (This =3D=3D NULL || RNGValueLength =3D=3D 0 || RNGValue =3D=3D NULL)= { + return EFI_INVALID_PARAMETER; + } + + // + // We only support the raw algorithm, so reject requests for anything el= se + // + if (RNGAlgorithm !=3D NULL && + !CompareGuid (RNGAlgorithm, &gEfiRngAlgorithmRaw)) { + return EFI_UNSUPPORTED; + } + + // + // The Linux driver from Broadcom checks RNG_BIT_COUNT here to ensure th= at + // the warmup threshold has been reached, but our testing shows that thi= s is + // pointless as RNG_BIT_COUNT is increased even during warmup and, as lo= ng + // as warmup isn't complete, the FIFO reports that no values are availab= le. + // + // Also note that RNG_BIT_COUNT doesn't roll over. Once it reaches 0xFFF= FFFFF + // it just stays there... + // + + while (RNGValueLength >=3D sizeof (UINT32)) { + Status =3D Bcm2838RngReadValue (&Val); + if (EFI_ERROR (Status)) { + return Status; + } + WriteUnaligned32 ((VOID *)RNGValue, Val); + RNGValue +=3D sizeof (UINT32); + RNGValueLength -=3D sizeof (UINT32); + } + + if (RNGValueLength > 0) { + Status =3D Bcm2838RngReadValue (&Val); + if (EFI_ERROR (Status)) { + return Status; + } + while (RNGValueLength--) { + *RNGValue++ =3D (UINT8)Val; + Val >>=3D 8; + } + } + return EFI_SUCCESS; +} + +STATIC EFI_RNG_PROTOCOL mBcm2838RngProtocol =3D { + Bcm2838RngGetInfo, + Bcm2838RngGetRNG +}; + +// +// Entry point of this driver. +// +EFI_STATUS +EFIAPI +Bcm2838RngEntryPoint ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status; + + Status =3D gBS->InstallMultipleProtocolInterfaces (&ImageHandle, + &gEfiRngProtocolGuid, &mBcm2838RngProtocol, + NULL); + ASSERT_EFI_ERROR (Status); + + // + // Set the warm up bit count. + // + // This results in the RNG holding off from populating any value into the + // FIFO until the value below has been reached in RNG_BIT_COUNT. + // + MmioWrite32 (RNG_BIT_COUNT_THRESHOLD, RNG_WARMUP_COUNT); + + // + // We would disable RNG interrupts here... if we had access to the datas= heet. + // + + // + // Enable the RNG with a sample rate divisor of 3. + // + // For a Bcm2711 running at 1.5 GHz, this should generate random bits at= a + // rate of about 1 every microsecond (1 MHz). + // + // Note that The divisor is a power of two index, meaning that each + // consecutive divisor halves the frequency at which bits are being + // produced. Zero is a special value that seems to set the rate somewhere + // between divisors 1 and 2. + // + // Also note that Broadcom set the whole ENABLE_MASK in the Linux driver, + // instead of single bits, which may be unintended. But since we don't h= ave + // any public documentation on what each of these bits do, we follow sui= t. + // + MmioWrite32 (RNG_CTRL, + RNG_CTRL_ENABLE_MASK | (3 << RNG_CTRL_SAMPLE_RATE_DIVISOR_SHIFT)); + + return EFI_SUCCESS; +} diff --git a/Silicon/Broadcom/Bcm283x/Drivers/Bcm2838RngDxe/Bcm2838RngDxe.i= nf b/Silicon/Broadcom/Bcm283x/Drivers/Bcm2838RngDxe/Bcm2838RngDxe.inf new file mode 100644 index 000000000000..fdc1b25743cf --- /dev/null +++ b/Silicon/Broadcom/Bcm283x/Drivers/Bcm2838RngDxe/Bcm2838RngDxe.inf @@ -0,0 +1,46 @@ +#/** @file +# +# Copyright (c) 2019, Pete Batard +# Copyright (c) 2019, ARM Limited. All rights reserved. +# Copyright (c) 2019, Linaro, Ltd. All rights reserved. +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +#**/ + +[Defines] + INF_VERSION =3D 0x0001001B + BASE_NAME =3D Bcm2838RngDxe + FILE_GUID =3D 5ec564ce-b656-435c-a652-5cb719784542 + MODULE_TYPE =3D DXE_DRIVER + VERSION_STRING =3D 1.0 + ENTRY_POINT =3D Bcm2838RngEntryPoint + +[Sources] + Bcm2838RngDxe.c + +[Packages] + MdePkg/MdePkg.dec + Silicon/Broadcom/Bcm283x/Bcm283x.dec + +[LibraryClasses] + BaseLib + BaseMemoryLib + DebugLib + IoLib + PcdLib + TimerLib + UefiBootServicesTableLib + UefiDriverEntryPoint + +[Protocols] + gEfiRngProtocolGuid ## PRODUCES + +[Guids] + gEfiRngAlgorithmRaw + +[FixedPcd] + gBcm283xTokenSpaceGuid.PcdBcm283xRegistersAddress + +[Depex] + TRUE diff --git a/Silicon/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2838Rng.h= b/Silicon/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2838Rng.h new file mode 100644 index 000000000000..003866fa866e --- /dev/null +++ b/Silicon/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2838Rng.h @@ -0,0 +1,30 @@ +/** @file + * + * Copyright (c) 2019, Pete Batard + * + * SPDX-License-Identifier: BSD-2-Clause-Patent + * + **/ + +#ifndef BCM2838_RNG_H__ +#define BCM2838_RNG_H__ + +#define BCM2838_RNG_OFFSET 0x00104000 +#define RNG_BASE_ADDRESS ((FixedPcdGet64 (PcdBcm283xReg= istersAddress)) \ + + BCM2838_RNG_OFFSET) + +#define RNG_CTRL (RNG_BASE_ADDRESS + 0x0) +#define RNG_STATUS (RNG_BASE_ADDRESS + 0x4) +#define RNG_DATA (RNG_BASE_ADDRESS + 0x8) +#define RNG_BIT_COUNT (RNG_BASE_ADDRESS + 0xc) +#define RNG_BIT_COUNT_THRESHOLD (RNG_BASE_ADDRESS + 0x10) +#define RNG_INT_STATUS (RNG_BASE_ADDRESS + 0x18) +#define RNG_INT_ENABLE (RNG_BASE_ADDRESS + 0x1c) +#define RNG_FIFO_DATA (RNG_BASE_ADDRESS + 0x20) +#define RNG_FIFO_COUNT (RNG_BASE_ADDRESS + 0x24) + +#define RNG_CTRL_ENABLE_MASK 0x1fff +#define RNG_CTRL_SAMPLE_RATE_DIVISOR_SHIFT 13 // Unmasked bits from = above +#define RNG_FIFO_DATA_AVAIL_MASK 0xff + +#endif /* BCM2838_RNG_H__ */ --=20 2.21.0.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#51527): https://edk2.groups.io/g/devel/message/51527 Mute This Topic: https://groups.io/mt/64721638/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-