[PATCH 1/1] drivers/rng: add Amlogic hardware RNG driver
Heinrich Schuchardt
xypron.glpk at gmx.de
Wed Feb 26 21:18:08 CET 2020
On 2/26/20 8:32 PM, Sughosh Ganu wrote:
>
>
> On Wed, 26 Feb 2020 at 23:34, Heinrich Schuchardt <xypron.glpk at gmx.de
> <mailto:xypron.glpk at gmx.de>> wrote:
>
> On 2/26/20 11:51 AM, Sughosh Ganu wrote:
> >
> > On Tue, 25 Feb 2020 at 03:56, Heinrich Schuchardt
> <xypron.glpk at gmx.de <mailto:xypron.glpk at gmx.de>
> > <mailto:xypron.glpk at gmx.de <mailto:xypron.glpk at gmx.de>>> wrote:
> >
> > Add support for the hardware random number generator of
> Amlogic SOCs.
> >
> > Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de
> <mailto:xypron.glpk at gmx.de>
> > <mailto:xypron.glpk at gmx.de <mailto:xypron.glpk at gmx.de>>>
> > ---
> > drivers/rng/Kconfig | 8 +++
> > drivers/rng/Makefile | 1 +
> > drivers/rng/meson-rng.c | 120
> ++++++++++++++++++++++++++++++++++++++++
> > 3 files changed, 129 insertions(+)
> > create mode 100644 drivers/rng/meson-rng.c
> >
> > diff --git a/drivers/rng/Kconfig b/drivers/rng/Kconfig
> > index c1aa43b823..edb6152bb9 100644
> > --- a/drivers/rng/Kconfig
> > +++ b/drivers/rng/Kconfig
> > @@ -8,6 +8,14 @@ config DM_RNG
> >
> > if DM_RNG
> >
> > +config RNG_MESON
> > + bool "Amlogic Meson Random Number Generator support"
> > + depends on ARCH_MESON
> > + default y
> > + help
> > + Enable support for hardware random number generator
> > + of Amlogic Meson SoCs.
> > +
> > config RNG_SANDBOX
> > bool "Sandbox random number generator"
> > depends on SANDBOX
> > diff --git a/drivers/rng/Makefile b/drivers/rng/Makefile
> > index 3517005541..6a8a66779b 100644
> > --- a/drivers/rng/Makefile
> > +++ b/drivers/rng/Makefile
> > @@ -4,5 +4,6 @@
> > #
> >
> > obj-$(CONFIG_DM_RNG) += rng-uclass.o
> > +obj-$(CONFIG_RNG_MESON) += meson-rng.o
> > obj-$(CONFIG_RNG_SANDBOX) += sandbox_rng.o
> > obj-$(CONFIG_RNG_STM32MP1) += stm32mp1_rng.o
> > diff --git a/drivers/rng/meson-rng.c b/drivers/rng/meson-rng.c
> > new file mode 100644
> > index 0000000000..4b81a62353
> > --- /dev/null
> > +++ b/drivers/rng/meson-rng.c
> > @@ -0,0 +1,120 @@
> > +// SPDX-License-Identifier: GPL-2.0-or-later
> > +/*
> > + * Copyright 2020, Heinrich Schuchardt <xypron.glpk at gmx.de
> <mailto:xypron.glpk at gmx.de>
> > <mailto:xypron.glpk at gmx.de <mailto:xypron.glpk at gmx.de>>>
> > + *
> > + * Driver for Amlogic hardware random number generator
> > + */
> > +
> > +#include <common.h>
> > +#include <clk.h>
> > +#include <dm.h>
> > +#include <rng.h>
> > +#include <asm/io.h>
> > +
> > +struct meson_rng_platdata {
> > + fdt_addr_t base;
> > + struct clk clk;
> > +};
> > +
> > +/**
> > + * meson_rng_read() - fill buffer with random bytes
> > + *
> > + * @buffer: buffer to receive data
> > + * @size: size of buffer
> > + *
> > + * Return: 0
> > + */
> > +static int meson_rng_read(struct udevice *dev, void *data,
> size_t len)
> > +{
> > + struct meson_rng_platdata *pdata = dev_get_platdata(dev);
> > + char *buffer = (char *)data;
> > +
> > + while (len) {
> > + u32 rand = readl(pdata->base);
> > + size_t step;
> >
> >
> > I believe declaration of variables in the middle of the function is
> > frowned upon. Can be moved to the start of the function.
>
> rand is defined at the top of the smallest possible code block
> delineated by braces.
>
> C compilers before C99 required you to put definitions at the top of
> functions. This led to the unsafe coding practice to reuse the same
> variable for different purposes in the same function. Currently we are
> using -std=gnu11.
>
> U-Boot uses cppcheck in Gitlab CI. Cppcheck gives you a warning if you
> could reduce the scope of a variable.
>
> Neither the U-Boot coding style guide
> https://www.denx.de/wiki/U-Boot/CodingStyle
> nor the Linux kernel coding style guide
> https://www.kernel.org/doc/html/v4.10/process/coding-style.html
> recommend such unsafe practice.
>
>
> Yes, I had checked that this is not mentioned in the coding style
> guides. But i have seen Wolfgang mention this on multiple occasions as
> part of his review comments earlier, one example being [1].
https://lists.denx.de/pipermail/u-boot/2020-January/397651.html
has a variable definition which is not at the start of code block
delineated by {} but in the middle of the code block. I agree with
Wolfgang that this is not advisable.
Best regards
Heinrich
>
>
> If you look at other parts of the U-Boot code, you will find that in
> lots of places variables are defined in the smallest possible code block
> (e.g. fs/fat/fat.c, fs/ext4/ext4_common.c). Due to our legacy we still
> carry a lot of code lines not following this rule.
>
> But anyway if you still want it in a different way, I will resubmit.
>
>
> I don't have a strong opinion on this. I was simply stating what I
> thought to be a coding style in u-boot based on some earlier review
> comments that I have seen.
>
> -sughosh
>
> [1] - https://lists.denx.de/pipermail/u-boot/2020-January/397651.html
More information about the U-Boot
mailing list