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:
Sughosh Ganu 2019-12-28 23:58:27 +05:30 committed by Jianhong Chen
parent d0aa80fb69
commit 28507ac336
7 changed files with 73 additions and 0 deletions

View File

@ -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"

View File

@ -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/

7
drivers/rng/Kconfig Normal file
View File

@ -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.

6
drivers/rng/Makefile Normal file
View File

@ -0,0 +1,6 @@
# SPDX-License-Identifier: GPL-2.0+
#
# Copyright (c) 2019, Linaro Limited
#
obj-$(CONFIG_DM_RNG) += rng-uclass.o

23
drivers/rng/rng-uclass.c Normal file
View File

@ -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,
};

View File

@ -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,
}; };

33
include/rng.h Normal file
View File

@ -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_ */