From mboxrd@z Thu Jan 1 00:00:00 1970 From: Masahiro Yamada Date: Thu, 06 Mar 2014 13:58:09 +0900 Subject: [U-Boot] [PATCH V2 2/3] lib: rand: add call to hw_rand() - hardware random number generator In-Reply-To: <20140305212206.GA16805@bill-the-cat> References: <216028592db390f90b2c9583c08f83978ee183a0.1394038415.git.p.marczak@samsung.com> <20140305212206.GA16805@bill-the-cat> Message-ID: <20140306135808.6EB2.AA925319@jp.panasonic.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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) { } 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