mirror of
https://github.com/AsahiLinux/u-boot
synced 2025-02-17 22:49:02 +00:00
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>
This commit is contained in:
parent
8391f95549
commit
a248768400
7 changed files with 73 additions and 0 deletions
|
@ -90,6 +90,8 @@ source "drivers/remoteproc/Kconfig"
|
|||
|
||||
source "drivers/reset/Kconfig"
|
||||
|
||||
source "drivers/rng/Kconfig"
|
||||
|
||||
source "drivers/rtc/Kconfig"
|
||||
|
||||
source "drivers/scsi/Kconfig"
|
||||
|
|
|
@ -116,4 +116,5 @@ obj-$(CONFIG_W1_EEPROM) += w1-eeprom/
|
|||
|
||||
obj-$(CONFIG_MACH_PIC32) += ddr/microchip/
|
||||
obj-$(CONFIG_DM_HWSPINLOCK) += hwspinlock/
|
||||
obj-$(CONFIG_DM_RNG) += rng/
|
||||
endif
|
||||
|
|
7
drivers/rng/Kconfig
Normal file
7
drivers/rng/Kconfig
Normal 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
6
drivers/rng/Makefile
Normal 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
23
drivers/rng/rng-uclass.c
Normal 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,
|
||||
};
|
|
@ -88,6 +88,7 @@ enum uclass_id {
|
|||
UCLASS_REGULATOR, /* Regulator device */
|
||||
UCLASS_REMOTEPROC, /* Remote Processor device */
|
||||
UCLASS_RESET, /* Reset controller device */
|
||||
UCLASS_RNG, /* Random Number Generator */
|
||||
UCLASS_RTC, /* Real time clock device */
|
||||
UCLASS_SCSI, /* SCSI device */
|
||||
UCLASS_SERIAL, /* Serial UART */
|
||||
|
|
33
include/rng.h
Normal file
33
include/rng.h
Normal 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_ */
|
Loading…
Add table
Reference in a new issue