xref: /openbmc/u-boot/lib/rand.c (revision 83d290c56fab2d38cd1ab4c4cc7099559c1d5046)
1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
29acf1ca5SMichael Walle /*
39acf1ca5SMichael Walle  * Simple xorshift PRNG
49acf1ca5SMichael Walle  *   see http://www.jstatsoft.org/v08/i14/paper
59acf1ca5SMichael Walle  *
69acf1ca5SMichael Walle  * Copyright (c) 2012 Michael Walle
79acf1ca5SMichael Walle  * Michael Walle <michael@walle.cc>
89acf1ca5SMichael Walle  */
99acf1ca5SMichael Walle 
109acf1ca5SMichael Walle #include <common.h>
119acf1ca5SMichael Walle 
129acf1ca5SMichael Walle static unsigned int y = 1U;
139acf1ca5SMichael Walle 
rand_r(unsigned int * seedp)149acf1ca5SMichael Walle unsigned int rand_r(unsigned int *seedp)
159acf1ca5SMichael Walle {
169acf1ca5SMichael Walle 	*seedp ^= (*seedp << 13);
179acf1ca5SMichael Walle 	*seedp ^= (*seedp >> 17);
189acf1ca5SMichael Walle 	*seedp ^= (*seedp << 5);
199acf1ca5SMichael Walle 
209acf1ca5SMichael Walle 	return *seedp;
219acf1ca5SMichael Walle }
229acf1ca5SMichael Walle 
rand(void)239acf1ca5SMichael Walle unsigned int rand(void)
249acf1ca5SMichael Walle {
259acf1ca5SMichael Walle 	return rand_r(&y);
269acf1ca5SMichael Walle }
279acf1ca5SMichael Walle 
srand(unsigned int seed)289acf1ca5SMichael Walle void srand(unsigned int seed)
299acf1ca5SMichael Walle {
309acf1ca5SMichael Walle 	y = seed;
319acf1ca5SMichael Walle }
32