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/crypto/Kconfig"
|
||||||
|
|
||||||
|
source "drivers/rng/Kconfig"
|
||||||
|
|
||||||
source "drivers/ddr/Kconfig"
|
source "drivers/ddr/Kconfig"
|
||||||
|
|
||||||
source "drivers/demo/Kconfig"
|
source "drivers/demo/Kconfig"
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@
|
||||||
obj-$(CONFIG_$(SPL_TPL_)CLK) += clk/
|
obj-$(CONFIG_$(SPL_TPL_)CLK) += clk/
|
||||||
obj-$(CONFIG_$(SPL_TPL_)DM) += core/
|
obj-$(CONFIG_$(SPL_TPL_)DM) += core/
|
||||||
obj-$(CONFIG_$(SPL_TPL_)DM_CRYPTO) += crypto/
|
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_)DRIVERS_MISC_SUPPORT) += misc/ sysreset/ firmware/
|
||||||
obj-$(CONFIG_$(SPL_TPL_)I2C_SUPPORT) += i2c/
|
obj-$(CONFIG_$(SPL_TPL_)I2C_SUPPORT) += i2c/
|
||||||
obj-$(CONFIG_$(SPL_TPL_)LED) += led/
|
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_MDIO, /* MDIO bus */
|
||||||
UCLASS_EBC, /* EBC Controller for eink screen */
|
UCLASS_EBC, /* EBC Controller for eink screen */
|
||||||
UCLASS_EINK_DISPLAY, /* EINK screen display driver */
|
UCLASS_EINK_DISPLAY, /* EINK screen display driver */
|
||||||
|
UCLASS_RNG, /* Random Number Generator */
|
||||||
UCLASS_COUNT,
|
UCLASS_COUNT,
|
||||||
UCLASS_INVALID = -1,
|
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