Re: [edk2] [PATCH edk2-platforms] Silicon/Bcm2836: add random number generator driver
On Thu, 31 Jan 2019 at 19:35, Leif Lindholm wrote: > > On Thu, Jan 31, 2019 at 06:14:45PM +0100, Ard Biesheuvel wrote: > > On Thu, 31 Jan 2019 at 16:05, Leif Lindholm > > wrote: > > > > > > On Wed, Jan 30, 2019 at 08:39:43PM +0100, Ard Biesheuvel wrote: > > > > Expose the SoC's RNG peripheral via the EFI_RNG_PROTOCOL. > > > > This is used by Linux to seed the KASLR routines. > > > > > > > > Contributed-under: TianoCore Contribution Agreement 1.1 > > > > Signed-off-by: Ard Biesheuvel > > > > > > Not tested, but looks fine. Only question: could we add those few > > > #defines to IndustryStandard/Bcm2836.h (should that really be > > > #IndustryStandard, btw?) rather than creating a tiny standalone one? > > > (more below) > > > > > > > Sure. > > > > Re IndustryStandard/, I deliberately chose something idiomatic for > > EDK2, and this is the least inappropriate one. I could live with > > Chipset/ as well, but dumping headers under Include/ directly is not > > the solution IMO. > > I disagree. Dumping the main SoC header under the top-level SoC > directory (and same pattern for platform) is idiomatic. > Dumping all kinds of random files there isn't, I agree (although that > happens too). > > BeagleBoardPkg/Include/BeagleBoard.h > OvmfPkg/Include/OvmfPlatforms.h > Vlv2TbltDevicePkg/Include/Platform.h > > Silicon/Hisilicon/Hi6220/Include/Hi6220.h > > An alternative pattern is an include directory named after the > SoC/Platform. > > Omap35xxPkg/Include/Omap3530/ > > You used > > Silicon/Socionext/SynQuacer/Include/Platform/ > > which I also don't mind. > > If you'd prefer it, I'd be happy with Platform/ and Silicon/. > > But we'd better settle on something before Pete changes too much based > on my feedback. > Yeah. I'll park this until Pete's stuff is merged. ___ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
Re: [edk2] [PATCH edk2-platforms] Silicon/Bcm2836: add random number generator driver
On Thu, Jan 31, 2019 at 06:14:45PM +0100, Ard Biesheuvel wrote: > On Thu, 31 Jan 2019 at 16:05, Leif Lindholm wrote: > > > > On Wed, Jan 30, 2019 at 08:39:43PM +0100, Ard Biesheuvel wrote: > > > Expose the SoC's RNG peripheral via the EFI_RNG_PROTOCOL. > > > This is used by Linux to seed the KASLR routines. > > > > > > Contributed-under: TianoCore Contribution Agreement 1.1 > > > Signed-off-by: Ard Biesheuvel > > > > Not tested, but looks fine. Only question: could we add those few > > #defines to IndustryStandard/Bcm2836.h (should that really be > > #IndustryStandard, btw?) rather than creating a tiny standalone one? > > (more below) > > > > Sure. > > Re IndustryStandard/, I deliberately chose something idiomatic for > EDK2, and this is the least inappropriate one. I could live with > Chipset/ as well, but dumping headers under Include/ directly is not > the solution IMO. I disagree. Dumping the main SoC header under the top-level SoC directory (and same pattern for platform) is idiomatic. Dumping all kinds of random files there isn't, I agree (although that happens too). BeagleBoardPkg/Include/BeagleBoard.h OvmfPkg/Include/OvmfPlatforms.h Vlv2TbltDevicePkg/Include/Platform.h Silicon/Hisilicon/Hi6220/Include/Hi6220.h An alternative pattern is an include directory named after the SoC/Platform. Omap35xxPkg/Include/Omap3530/ You used Silicon/Socionext/SynQuacer/Include/Platform/ which I also don't mind. If you'd prefer it, I'd be happy with Platform/ and Silicon/. But we'd better settle on something before Pete changes too much based on my feedback. / Leif > > > --- > > > Silicon/Broadcom/Bcm283x/Drivers/RngDxe/RngDxe.c | 204 > > > > > > Silicon/Broadcom/Bcm283x/Drivers/RngDxe/RngDxe.inf | 45 > > > + > > > Silicon/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2836Rng.h | 26 +++ > > > 3 files changed, 275 insertions(+) > > > > > > > > diff --git > > > a/Silicon/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2836Rng.h > > > b/Silicon/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2836Rng.h > > > new file mode 100644 > > > index ..8274e2fe8f77 > > > --- /dev/null > > > +++ b/Silicon/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2836Rng.h > > > @@ -0,0 +1,26 @@ > > > + /** @file > > > + * > > > + * Copyright (c) 2019 Linaro, Ltd. All rights reserved. > > > + * > > > + * This program and the accompanying materials > > > + * are licensed and made available under the terms and conditions of > > > the BSD License > > > + * which accompanies this distribution. The full text of the license > > > may be found at > > > + * http://opensource.org/licenses/bsd-license.php > > > + * > > > + * THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > > > + * WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR > > > IMPLIED. > > > + * > > > + **/ > > > + > > > +#ifndef __BCM2836_RNG_H__ > > > +#define __BCM2836_RNG_H__ > > > + > > > +#define RNG_BASE_ADDRESS (BCM2836_SOC_REGISTERS + 0x00104000) > > > > If we can't, this file needs to pull in Bcm2836.h anyway. > > > > Yep. ___ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
Re: [edk2] [PATCH edk2-platforms] Silicon/Bcm2836: add random number generator driver
On Thu, 31 Jan 2019 at 16:05, Leif Lindholm wrote: > > On Wed, Jan 30, 2019 at 08:39:43PM +0100, Ard Biesheuvel wrote: > > Expose the SoC's RNG peripheral via the EFI_RNG_PROTOCOL. > > This is used by Linux to seed the KASLR routines. > > > > Contributed-under: TianoCore Contribution Agreement 1.1 > > Signed-off-by: Ard Biesheuvel > > Not tested, but looks fine. Only question: could we add those few > #defines to IndustryStandard/Bcm2836.h (should that really be > #IndustryStandard, btw?) rather than creating a tiny standalone one? > (more below) > Sure. Re IndustryStandard/, I deliberately chose something idiomatic for EDK2, and this is the least inappropriate one. I could live with Chipset/ as well, but dumping headers under Include/ directly is not the solution IMO. > > --- > > Silicon/Broadcom/Bcm283x/Drivers/RngDxe/RngDxe.c | 204 > > > > Silicon/Broadcom/Bcm283x/Drivers/RngDxe/RngDxe.inf | 45 + > > Silicon/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2836Rng.h | 26 +++ > > 3 files changed, 275 insertions(+) > > > > > diff --git a/Silicon/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2836Rng.h > > b/Silicon/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2836Rng.h > > new file mode 100644 > > index ..8274e2fe8f77 > > --- /dev/null > > +++ b/Silicon/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2836Rng.h > > @@ -0,0 +1,26 @@ > > + /** @file > > + * > > + * Copyright (c) 2019 Linaro, Ltd. All rights reserved. > > + * > > + * This program and the accompanying materials > > + * are licensed and made available under the terms and conditions of the > > BSD License > > + * which accompanies this distribution. The full text of the license may > > be found at > > + * http://opensource.org/licenses/bsd-license.php > > + * > > + * THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > > + * WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR > > IMPLIED. > > + * > > + **/ > > + > > +#ifndef __BCM2836_RNG_H__ > > +#define __BCM2836_RNG_H__ > > + > > +#define RNG_BASE_ADDRESS (BCM2836_SOC_REGISTERS + 0x00104000) > > If we can't, this file needs to pull in Bcm2836.h anyway. > Yep. ___ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
Re: [edk2] [PATCH edk2-platforms] Silicon/Bcm2836: add random number generator driver
On Wed, Jan 30, 2019 at 08:39:43PM +0100, Ard Biesheuvel wrote: > Expose the SoC's RNG peripheral via the EFI_RNG_PROTOCOL. > This is used by Linux to seed the KASLR routines. > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Ard Biesheuvel Not tested, but looks fine. Only question: could we add those few #defines to IndustryStandard/Bcm2836.h (should that really be #IndustryStandard, btw?) rather than creating a tiny standalone one? (more below) > --- > Silicon/Broadcom/Bcm283x/Drivers/RngDxe/RngDxe.c | 204 > > Silicon/Broadcom/Bcm283x/Drivers/RngDxe/RngDxe.inf | 45 + > Silicon/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2836Rng.h | 26 +++ > 3 files changed, 275 insertions(+) > > diff --git a/Silicon/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2836Rng.h > b/Silicon/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2836Rng.h > new file mode 100644 > index ..8274e2fe8f77 > --- /dev/null > +++ b/Silicon/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2836Rng.h > @@ -0,0 +1,26 @@ > + /** @file > + * > + * Copyright (c) 2019 Linaro, Ltd. All rights reserved. > + * > + * This program and the accompanying materials > + * are licensed and made available under the terms and conditions of the > BSD License > + * which accompanies this distribution. The full text of the license may > be found at > + * http://opensource.org/licenses/bsd-license.php > + * > + * THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > + * WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR > IMPLIED. > + * > + **/ > + > +#ifndef __BCM2836_RNG_H__ > +#define __BCM2836_RNG_H__ > + > +#define RNG_BASE_ADDRESS (BCM2836_SOC_REGISTERS + 0x00104000) If we can't, this file needs to pull in Bcm2836.h anyway. / Leif > + > +#define RNG_CTRL (RNG_BASE_ADDRESS + 0x0) > +#define RNG_STATUS (RNG_BASE_ADDRESS + 0x4) > +#define RNG_DATA (RNG_BASE_ADDRESS + 0x8) > + > +#define RNG_CTRL_ENABLE0x1 > + > +#endif /* __BCM2836_RNG_H__ */ > -- > 2.20.1 > ___ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
[edk2] [PATCH edk2-platforms] Silicon/Bcm2836: add random number generator driver
Expose the SoC's RNG peripheral via the EFI_RNG_PROTOCOL. This is used by Linux to seed the KASLR routines. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ard Biesheuvel --- Silicon/Broadcom/Bcm283x/Drivers/RngDxe/RngDxe.c | 204 Silicon/Broadcom/Bcm283x/Drivers/RngDxe/RngDxe.inf | 45 + Silicon/Broadcom/Bcm283x/Include/IndustryStandard/Bcm2836Rng.h | 26 +++ 3 files changed, 275 insertions(+) diff --git a/Silicon/Broadcom/Bcm283x/Drivers/RngDxe/RngDxe.c b/Silicon/Broadcom/Bcm283x/Drivers/RngDxe/RngDxe.c new file mode 100644 index ..b1bc93ce0381 --- /dev/null +++ b/Silicon/Broadcom/Bcm283x/Drivers/RngDxe/RngDxe.c @@ -0,0 +1,204 @@ +/** @file + + This driver produces an EFI_RNG_PROTOCOL instance for the Broadcom 2836 RNG + + Copyright (C) 2019, Linaro Ltd. All rights reserved. + + This program and the accompanying materials are licensed and made available + under the terms and conditions of the BSD License which accompanies this + distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT + WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#include +#include +#include +#include +#include + +#include +#include + +#include + +#define RNG_WARMUP_COUNT0x4 +#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] RNGAlgorithmListA caller-allocated memory buffer filled + by the driver with one EFI_RNG_ALGORITHM + element for each supported RNG algorithm. + The list must not change across multiple + 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_ERRORThe list of algorithms could not be + retrieved due to a hardware or firmware + error. + @retval EFI_INVALID_PARAMETER One or more of the parameters are + incorrect. + @retval EFI_BUFFER_TOO_SMALLThe buffer RNGAlgorithmList is too small + to hold the result. + +**/ +STATIC +EFI_STATUS +EFIAPI +Bcm2836RngGetInfo ( + IN EFI_RNG_PROTOCOL*This, + IN OUT UINTN *RNGAlgorithmListSize, + OUT EFI_RNG_ALGORITHM *RNGAlgorithmList + ) +{ + if (This == NULL || RNGAlgorithmListSize == NULL) { +return EFI_INVALID_PARAMETER; + } + + if (*RNGAlgorithmListSize < sizeof (EFI_RNG_ALGORITHM)) { +*RNGAlgorithmListSize = sizeof (EFI_RNG_ALGORITHM); +return EFI_BUFFER_TOO_SMALL; + } + + if (RNGAlgorithmList == NULL) { +return EFI_INVALID_PARAMETER; + } + + *RNGAlgorithmListSize = sizeof (EFI_RNG_ALGORITHM); + CopyGuid (RNGAlgorithmList, ); + + return EFI_SUCCESS; +} + +/** + Produces and returns an RNG value using either the default or specified RNG + algorithm. + + @param[in] ThisA pointer to the EFI_RNG_PROTOCOL + instance. + @param[in] RNGAlgorithmA pointer to the EFI_RNG_ALGORITHM that + identifies the RNG algorithm to use. May + be NULL in which case the function will + use its default RNG algorithm. + @param[in] RNGValueLength The length in bytes of the memory buffer + pointed to by RNGValue. The driver shall +