UPSTREAM: dm: rng: Add random number generator(rng) uclass
Add a uclass for reading a random number seed from a random number generator device. Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org> Reviewed-by: Patrice Chotard <patrice.chotard@st.com> Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de> Reviewed-by: Simon Glass <sjg@chromium.org> (cherry picked from commit a2487684003b0bc380955e1a38cdd71da3ca4366) Change-Id: Ife2287132db695181d663653f2ceaab0e343b41f Signed-off-by: Lin Jinhan <troy.lin@rock-chips.com>
This commit is contained in:
parent
d0aa80fb69
commit
28507ac336
|
|
@ -18,6 +18,8 @@ source "drivers/cpu/Kconfig"
|
|||
|
||||
source "drivers/crypto/Kconfig"
|
||||
|
||||
source "drivers/rng/Kconfig"
|
||||
|
||||
source "drivers/ddr/Kconfig"
|
||||
|
||||
source "drivers/demo/Kconfig"
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
obj-$(CONFIG_$(SPL_TPL_)CLK) += clk/
|
||||
obj-$(CONFIG_$(SPL_TPL_)DM) += core/
|
||||
obj-$(CONFIG_$(SPL_TPL_)DM_CRYPTO) += crypto/
|
||||
obj-$(CONFIG_$(SPL_TPL_)DM_RNG) += rng/
|
||||
obj-$(CONFIG_$(SPL_TPL_)DRIVERS_MISC_SUPPORT) += misc/ sysreset/ firmware/
|
||||
obj-$(CONFIG_$(SPL_TPL_)I2C_SUPPORT) += i2c/
|
||||
obj-$(CONFIG_$(SPL_TPL_)LED) += led/
|
||||
|
|
|
|||
|
|
@ -0,0 +1,7 @@
|
|||
config DM_RNG
|
||||
bool "Driver support for Random Number Generator devices"
|
||||
depends on DM
|
||||
help
|
||||
Enable driver model for random number generator(rng) devices.
|
||||
This interface is used to initialise the rng device and to
|
||||
read the random seed from the device.
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
# Copyright (c) 2019, Linaro Limited
|
||||
#
|
||||
|
||||
obj-$(CONFIG_DM_RNG) += rng-uclass.o
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Copyright (c) 2019, Linaro Limited
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <dm.h>
|
||||
#include <rng.h>
|
||||
|
||||
int dm_rng_read(struct udevice *dev, void *buffer, size_t size)
|
||||
{
|
||||
const struct dm_rng_ops *ops = device_get_ops(dev);
|
||||
|
||||
if (!ops->read)
|
||||
return -ENOSYS;
|
||||
|
||||
return ops->read(dev, buffer, size);
|
||||
}
|
||||
|
||||
UCLASS_DRIVER(rng) = {
|
||||
.name = "rng",
|
||||
.id = UCLASS_RNG,
|
||||
};
|
||||
|
|
@ -109,6 +109,7 @@ enum uclass_id {
|
|||
UCLASS_MDIO, /* MDIO bus */
|
||||
UCLASS_EBC, /* EBC Controller for eink screen */
|
||||
UCLASS_EINK_DISPLAY, /* EINK screen display driver */
|
||||
UCLASS_RNG, /* Random Number Generator */
|
||||
UCLASS_COUNT,
|
||||
UCLASS_INVALID = -1,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -0,0 +1,33 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Copyright (c) 2019, Linaro Limited
|
||||
*/
|
||||
|
||||
#if !defined _RNG_H_
|
||||
#define _RNG_H_
|
||||
|
||||
struct udevice;
|
||||
|
||||
/**
|
||||
* dm_rng_read() - read a random number seed from the rng device
|
||||
* @buffer: input buffer to put the read random seed into
|
||||
* @size: number of bytes of random seed read
|
||||
*
|
||||
* Return: 0 if OK, -ve on error
|
||||
*/
|
||||
int dm_rng_read(struct udevice *dev, void *buffer, size_t size);
|
||||
|
||||
/* struct dm_rng_ops - Operations for the hwrng uclass */
|
||||
struct dm_rng_ops {
|
||||
/**
|
||||
* @read() - read a random number seed
|
||||
*
|
||||
* @data: input buffer to read the random seed
|
||||
* @max: total number of bytes to read
|
||||
*
|
||||
* Return: 0 if OK, -ve on error
|
||||
*/
|
||||
int (*read)(struct udevice *dev, void *data, size_t max);
|
||||
};
|
||||
|
||||
#endif /* _RNG_H_ */
|
||||
Loading…
Reference in New Issue