| From 51d89934c84d6e748676405f1b8e5828c1babbb1 Mon Sep 17 00:00:00 2001 |
| From: David Wang <davidwang@quantatw.com> |
| Date: Mon, 6 Nov 2023 10:53:57 +0800 |
| Subject: [PATCH 07/16] drivers: char: hwrng: npcm: sync npcm rng |
| |
| --- |
| drivers/char/hw_random/npcm-rng.c | 13 ++++++++++--- |
| 1 file changed, 10 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/char/hw_random/npcm-rng.c b/drivers/char/hw_random/npcm-rng.c |
| index 1ec5f267a656..3c7b632536fc 100644 |
| --- a/drivers/char/hw_random/npcm-rng.c |
| +++ b/drivers/char/hw_random/npcm-rng.c |
| @@ -19,6 +19,7 @@ |
| #define NPCM_RNGMODE_REG 0x08 /* Mode register */ |
| |
| #define NPCM_RNG_CLK_SET_25MHZ GENMASK(4, 3) /* 20-25 MHz */ |
| +#define NPCM_RNG_CLK_SET_62_5MHZ BIT(2) /* 60-80 MHz */ |
| #define NPCM_RNG_DATA_VALID BIT(1) |
| #define NPCM_RNG_ENABLE BIT(0) |
| #define NPCM_RNG_M1ROSEL BIT(1) |
| @@ -31,14 +32,14 @@ |
| struct npcm_rng { |
| void __iomem *base; |
| struct hwrng rng; |
| + u32 clkp; |
| }; |
| |
| static int npcm_rng_init(struct hwrng *rng) |
| { |
| struct npcm_rng *priv = to_npcm_rng(rng); |
| |
| - writel(NPCM_RNG_CLK_SET_25MHZ | NPCM_RNG_ENABLE, |
| - priv->base + NPCM_RNGCS_REG); |
| + writel(priv->clkp | NPCM_RNG_ENABLE, priv->base + NPCM_RNGCS_REG); |
| |
| return 0; |
| } |
| @@ -47,7 +48,7 @@ static void npcm_rng_cleanup(struct hwrng *rng) |
| { |
| struct npcm_rng *priv = to_npcm_rng(rng); |
| |
| - writel(NPCM_RNG_CLK_SET_25MHZ, priv->base + NPCM_RNGCS_REG); |
| + writel(priv->clkp, priv->base + NPCM_RNGCS_REG); |
| } |
| |
| static int npcm_rng_read(struct hwrng *rng, void *buf, size_t max, bool wait) |
| @@ -102,6 +103,11 @@ static int npcm_rng_probe(struct platform_device *pdev) |
| pm_runtime_use_autosuspend(&pdev->dev); |
| pm_runtime_enable(&pdev->dev); |
| |
| + if (of_device_is_compatible(pdev->dev.of_node, "nuvoton,npcm750-rng")) |
| + priv->clkp = NPCM_RNG_CLK_SET_25MHZ; |
| + if (of_device_is_compatible(pdev->dev.of_node, "nuvoton,npcm845-rng")) |
| + priv->clkp = NPCM_RNG_CLK_SET_62_5MHZ; |
| + |
| #ifndef CONFIG_PM |
| priv->rng.init = npcm_rng_init; |
| priv->rng.cleanup = npcm_rng_cleanup; |
| @@ -163,6 +169,7 @@ static const struct dev_pm_ops npcm_rng_pm_ops = { |
| |
| static const struct of_device_id rng_dt_id[] __maybe_unused = { |
| { .compatible = "nuvoton,npcm750-rng", }, |
| + { .compatible = "nuvoton,npcm845-rng", }, |
| {}, |
| }; |
| MODULE_DEVICE_TABLE(of, rng_dt_id); |
| -- |
| 2.25.1 |
| |