[PATCH v3] arm64: zynqmp: Enable rng-seed generation

Michal Simek michal.simek at amd.com
Mon Jul 7 10:45:03 CEST 2025



On 7/2/25 09:44, Michal Simek wrote:
> SOM has TPM with RNG in it that's why enable rng-seed generation.
> 
> Signed-off-by: Michal Simek <michal.simek at amd.com>
> ---
> 
> Changes in v3:
> - Move malloc allocation before rng_read
> 
> Changes in v2:
> - Free alloc area in case of error
> 
>   board/xilinx/common/board.c          | 33 +++++++++++++++++++++++++++-
>   configs/xilinx_zynqmp_kria_defconfig |  1 +
>   2 files changed, 33 insertions(+), 1 deletion(-)
> 
> diff --git a/board/xilinx/common/board.c b/board/xilinx/common/board.c
> index 8ffe74299016..ceb58da6d3cd 100644
> --- a/board/xilinx/common/board.c
> +++ b/board/xilinx/common/board.c
> @@ -1,7 +1,7 @@
>   // SPDX-License-Identifier: GPL-2.0+
>   /*
>    * (C) Copyright 2014 - 2022, Xilinx, Inc.
> - * (C) Copyright 2022 - 2023, Advanced Micro Devices, Inc.
> + * (C) Copyright 2022 - 2025, Advanced Micro Devices, Inc.
>    *
>    * Michal Simek <michal.simek at amd.com>
>    */
> @@ -712,3 +712,34 @@ phys_addr_t board_get_usable_ram_top(phys_size_t total_size)
>   }
>   
>   #endif
> +
> +#if IS_ENABLED(CONFIG_BOARD_RNG_SEED)
> +/* Use hardware rng to seed Linux random. */
> +__weak int board_rng_seed(struct abuf *buf)
> +{
> +	struct udevice *dev;
> +	ulong len = 64;
> +	u64 *data;
> +
> +	if (uclass_get_device(UCLASS_RNG, 0, &dev) || !dev) {
> +		printf("No RNG device\n");
> +		return -ENODEV;
> +	}
> +
> +	data = malloc(len);
> +	if (!data) {
> +		printf("Out of memory\n");
> +		return -ENOMEM;
> +	}
> +
> +	if (dm_rng_read(dev, data, len)) {
> +		printf("Reading RNG failed\n");
> +		free(data);
> +		return -EIO;
> +	}
> +
> +	abuf_init_set(buf, data, len);
> +
> +	return 0;
> +}
> +#endif
> diff --git a/configs/xilinx_zynqmp_kria_defconfig b/configs/xilinx_zynqmp_kria_defconfig
> index 22ba8a7cc158..3e2ac6144050 100644
> --- a/configs/xilinx_zynqmp_kria_defconfig
> +++ b/configs/xilinx_zynqmp_kria_defconfig
> @@ -46,6 +46,7 @@ CONFIG_USE_PREBOOT=y
>   CONFIG_SYS_PBSIZE=2073
>   CONFIG_BOARD_EARLY_INIT_R=y
>   CONFIG_CLOCKS=y
> +CONFIG_BOARD_RNG_SEED=y
>   CONFIG_SPL_MAX_SIZE=0x40000
>   # CONFIG_SPL_BINMAN_SYMBOLS is not set
>   # CONFIG_SPL_SHARES_INIT_SP_ADDR is not set

Applied.
M


More information about the U-Boot mailing list