[PATCH] rng: tpm_rng: start TPM before reading random numbers
Padmarao Begari
padmarao.begari at amd.com
Tue Jun 9 12:10:11 CEST 2026
The tpm-rng driver calls tpm_get_random() without first ensuring the
TPM device is opened and started. When systemd-boot or fdt_fixup_kaslr
triggers an RNG read early in boot, the TPM2 device hasn't been
initialized yet, causing the command to fail:
tpm-rng tpm-rng: dm_rng_read failed: -1
Fix this by calling tpm_auto_start() on the parent TPM device before
tpm_get_random(). This ensures the TPM is initialized before use.
Fixes: e67ffb5aa5ab ("tpm: rng: Add driver model interface for TPM RNG device")
Signed-off-by: Padmarao Begari <padmarao.begari at amd.com>
---
drivers/rng/tpm_rng.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/drivers/rng/tpm_rng.c b/drivers/rng/tpm_rng.c
index 1a5e9e2e4b4..374e0ac1ff8 100644
--- a/drivers/rng/tpm_rng.c
+++ b/drivers/rng/tpm_rng.c
@@ -4,12 +4,20 @@
*/
#include <dm.h>
+#include <log.h>
#include <rng.h>
#include <tpm_api.h>
static int rng_tpm_random_read(struct udevice *dev, void *data, size_t count)
{
- return tpm_get_random(dev_get_parent(dev), data, count);
+ struct udevice *tpm_dev = dev_get_parent(dev);
+ u32 rc;
+
+ rc = tpm_auto_start(tpm_dev);
+ if (rc)
+ return log_msg_ret("start", -EIO);
+
+ return tpm_get_random(tpm_dev, data, count);
}
static const struct dm_rng_ops tpm_rng_ops = {
--
2.34.1
More information about the U-Boot
mailing list