linux-imx/drivers/firmware/imx/ele_trng.c
Meenakshi Aggarwal 7fcf608527 LF-14837: Unregister ELE TRNG
Issue: ELE TRNG register with hwrng and open a kthread
which remains running after suspend also and results in
random interrupts from ELE.

Fix: unregister hwrng in suspend and re-register in resume

Signed-off-by: Meenakshi Aggarwal <meenakshi.aggarwal@nxp.com>
Reviewed-by: Pankaj Gupta <pankaj.gupta@nxp.com>
2025-06-11 08:05:04 +02:00

53 lines
1015 B
C

// SPDX-License-Identifier: GPL-2.0-or-later
/*
* ELE Random Number Generator Driver NXP's Platforms
*
* Copyright 2024-2025 NXP
*/
#include "ele_trng.h"
#include "ele_fw_api.h"
struct ele_trng {
struct hwrng rng;
struct se_if_priv *priv;
};
static struct ele_trng trng;
int ele_trng_init(struct se_if_priv *priv)
{
int ret;
trng.priv = priv;
trng.rng.name = "ele-trng";
trng.rng.read = ele_get_hwrng;
trng.rng.priv = (unsigned long)&trng;
trng.rng.quality = 1024;
dev_dbg(priv->dev, "registering ele-trng\n");
ret = hwrng_register(&trng.rng);
if (ret)
return ret;
dev_info(priv->dev, "Successfully registered ele-trng\n");
return 0;
}
int ele_trng_exit(struct se_if_priv *priv)
{
hwrng_unregister(&trng.rng);
dev_info(priv->dev, "Successfully unregistered ele-trng\n");
return 0;
}
int ele_get_hwrng(struct hwrng *rng,
void *data, size_t len, bool wait)
{
struct ele_trng *trng = (struct ele_trng *)rng->priv;
return ele_get_random(trng->priv, data, len);
}