[U-Boot] [PATCH V2 2/3] lib: rand: add call to hw_rand() - hardware random number generator

Masahiro Yamada
2014-03-06T04:58:09Z

Hello Tom,

> > unsigned int rand_r(unsigned int *seedp)
> > {
> > +#ifdef CONFIG_RAND_HW_ACCEL
> > + return hw_rand();
> > +#endif
> > *seedp ^= (*seedp << 13);
> > *seedp ^= (*seedp >> 17);
> > *seedp ^= (*seedp << 5);
>
> This doesn't already generate warnings about unreachable code?
>
> I hate to say at but I think we should add lib/hw_rand.c which does:
> void srand(uint seed) {}
> unsigned int rand(void) { return hw_rand(); }
> unsigned int rand_r(unsigned int *seedp) { seedp = hw_rand(); return
> *seedp;}
>
> (please double check how hw_rand() returns and net/link_local.c if we
> can really avoid using the callers pointer...).
>
> And then in correct Kbuild fashion, something like
> randsrc-y ?= rand.o
> randsrc-$(CONFIG_RAND_HW_ACCEL) = hw_rand.o
>
> (The above is probably wrong, help please Masahiro :))

In the first place, I don't like the idea to add a new function
hw_rand() very much.

I think lib/rand.c is just one implementation among
some possible choices.
drivers/crypto/ace_sha.c is another implementation.

How about treating them in the same way?

I mean, srand(), rand(), rand_r()
should be defined in drivers/crypto/ace_sha.c
rather than adding lib/hw_rand.c.

drivers/crypto/ace_sha.c is like this:

void srand(uint seed) {}
unsigned int rand(void)
{
<your hardware rand implementation>
}
unsigned int rand_r(unsigned int *seedp)
{
return rand();
}

lib/Makefile will be changed like this:

--- a/lib/Makefile
+++ b/lib/Makefile
@@ -62,8 +62,6 @@ obj-y += time.o
obj-$(CONFIG_TRACE) += trace.o
obj-$(CONFIG_BOOTP_PXE) += uuid.o
obj-y += vsprintf.o
-obj-$(CONFIG_RANDOM_MACADDR) += rand.o
-obj-$(CONFIG_BOOTP_RANDOM_DELAY) += rand.o
-obj-$(CONFIG_CMD_LINK_LOCAL) += rand.o
+obj-$(CONFIG_SW_RAND) += rand.o

It looks like CONFIG_SW_RAND (or CONFIG_EXYNOS_ACE_SHA)
must be added to the following boards.

include/configs/lsxl.h (for CONFIG_RANDOM_MACADDR)
include/configs/MERGERBOX.h (for CONFIG_BOOTP_RAMDOM_DELAY)
include/configs/MVBC_P.h (for CONFIG_BOOTP_RAMDOM_DELAY)
include/configs/MVBLM7.h (for CONFIG_BOOTP_RAMDOM_DELAY)
include/configs/MVSMR.h (for CONFIG_BOOTP_RAMDOM_DELAY)
include/configs/bfin_adi_common.h (for CONFIG_BOOTP_RAMDOM_DELAY)
include/configs/sacsng.h (for CONFIG_BOOTP_RAMDOM_DELAY)
include/config_uncmd_spl.h (for CONFIG_CMD_LINK_LOCAL)
include/configs/a3m071.h (for CONFIG_CMD_LINK_LOCAL)

Best Regards
Masahiro Yamada