* [PATCH v2 0/7] hwrng: atmel - add runtime pm support
@ 2022-02-21 7:59 ` Claudiu Beznea
0 siblings, 0 replies; 20+ messages in thread
From: Claudiu Beznea @ 2022-02-21 7:59 UTC (permalink / raw)
To: mpm, herbert, nicolas.ferre, alexandre.belloni
Cc: linux-arm-kernel, linux-crypto, linux-kernel, Claudiu Beznea
Hi,
This series adds runtime PM support for atmel-rng driver. Along with
this some cleanup and fixes patches were added to the series.
Thank you,
Claudiu Beznea
Claudiu Beznea (7):
hwrng: atmel - add wait for ready support on read
hwrng: atmel - disable trng on failure path
hwrng: atmel - rename enable/disable functions to init/cleanup
hwrng: atmel - move set of TRNG_HALFR in atmel_trng_init()
hwrng: atmel - use __maybe_unused and pm_ptr() for pm ops
hwrng: atmel - add runtime pm support
hwrng: atmel - remove extra line
drivers/char/hw_random/atmel-rng.c | 148 ++++++++++++++++++-----------
1 file changed, 91 insertions(+), 57 deletions(-)
--
2.32.0
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH v2 0/7] hwrng: atmel - add runtime pm support
@ 2022-02-21 7:59 ` Claudiu Beznea
0 siblings, 0 replies; 20+ messages in thread
From: Claudiu Beznea @ 2022-02-21 7:59 UTC (permalink / raw)
To: mpm, herbert, nicolas.ferre, alexandre.belloni
Cc: linux-arm-kernel, linux-crypto, linux-kernel, Claudiu Beznea
Hi,
This series adds runtime PM support for atmel-rng driver. Along with
this some cleanup and fixes patches were added to the series.
Thank you,
Claudiu Beznea
Claudiu Beznea (7):
hwrng: atmel - add wait for ready support on read
hwrng: atmel - disable trng on failure path
hwrng: atmel - rename enable/disable functions to init/cleanup
hwrng: atmel - move set of TRNG_HALFR in atmel_trng_init()
hwrng: atmel - use __maybe_unused and pm_ptr() for pm ops
hwrng: atmel - add runtime pm support
hwrng: atmel - remove extra line
drivers/char/hw_random/atmel-rng.c | 148 ++++++++++++++++++-----------
1 file changed, 91 insertions(+), 57 deletions(-)
--
2.32.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH v2 1/7] hwrng: atmel - add wait for ready support on read
2022-02-21 7:59 ` Claudiu Beznea
@ 2022-02-21 7:59 ` Claudiu Beznea
-1 siblings, 0 replies; 20+ messages in thread
From: Claudiu Beznea @ 2022-02-21 7:59 UTC (permalink / raw)
To: mpm, herbert, nicolas.ferre, alexandre.belloni
Cc: linux-arm-kernel, linux-crypto, linux-kernel, Claudiu Beznea
Add wait for ready support on read.
Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
drivers/char/hw_random/atmel-rng.c | 43 +++++++++++++++++++++---------
1 file changed, 30 insertions(+), 13 deletions(-)
diff --git a/drivers/char/hw_random/atmel-rng.c b/drivers/char/hw_random/atmel-rng.c
index ecb71c4317a5..1a4874668c04 100644
--- a/drivers/char/hw_random/atmel-rng.c
+++ b/drivers/char/hw_random/atmel-rng.c
@@ -13,6 +13,7 @@
#include <linux/err.h>
#include <linux/clk.h>
#include <linux/io.h>
+#include <linux/iopoll.h>
#include <linux/hw_random.h>
#include <linux/of_device.h>
#include <linux/platform_device.h>
@@ -20,6 +21,7 @@
#define TRNG_CR 0x00
#define TRNG_MR 0x04
#define TRNG_ISR 0x1c
+#define TRNG_ISR_DATRDY BIT(0)
#define TRNG_ODATA 0x50
#define TRNG_KEY 0x524e4700 /* RNG */
@@ -36,25 +38,40 @@ struct atmel_trng {
struct hwrng rng;
};
+static bool atmel_trng_wait_ready(struct atmel_trng *trng, bool wait)
+{
+ int ready;
+
+ ready = readl(trng->base + TRNG_ISR) & TRNG_ISR_DATRDY;
+ if (!ready && wait)
+ readl_poll_timeout(trng->base + TRNG_ISR, ready,
+ ready & TRNG_ISR_DATRDY, 1000, 20000);
+
+ return !!ready;
+}
+
static int atmel_trng_read(struct hwrng *rng, void *buf, size_t max,
bool wait)
{
struct atmel_trng *trng = container_of(rng, struct atmel_trng, rng);
u32 *data = buf;
+ int ret;
+
+ ret = atmel_trng_wait_ready(trng, wait);
+ if (!ret)
+ goto out;
- /* data ready? */
- if (readl(trng->base + TRNG_ISR) & 1) {
- *data = readl(trng->base + TRNG_ODATA);
- /*
- ensure data ready is only set again AFTER the next data
- word is ready in case it got set between checking ISR
- and reading ODATA, so we don't risk re-reading the
- same word
- */
- readl(trng->base + TRNG_ISR);
- return 4;
- } else
- return 0;
+ *data = readl(trng->base + TRNG_ODATA);
+ /*
+ * ensure data ready is only set again AFTER the next data word is ready
+ * in case it got set between checking ISR and reading ODATA, so we
+ * don't risk re-reading the same word
+ */
+ readl(trng->base + TRNG_ISR);
+ ret = 4;
+
+out:
+ return ret;
}
static void atmel_trng_enable(struct atmel_trng *trng)
--
2.32.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v2 1/7] hwrng: atmel - add wait for ready support on read
@ 2022-02-21 7:59 ` Claudiu Beznea
0 siblings, 0 replies; 20+ messages in thread
From: Claudiu Beznea @ 2022-02-21 7:59 UTC (permalink / raw)
To: mpm, herbert, nicolas.ferre, alexandre.belloni
Cc: linux-arm-kernel, linux-crypto, linux-kernel, Claudiu Beznea
Add wait for ready support on read.
Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
drivers/char/hw_random/atmel-rng.c | 43 +++++++++++++++++++++---------
1 file changed, 30 insertions(+), 13 deletions(-)
diff --git a/drivers/char/hw_random/atmel-rng.c b/drivers/char/hw_random/atmel-rng.c
index ecb71c4317a5..1a4874668c04 100644
--- a/drivers/char/hw_random/atmel-rng.c
+++ b/drivers/char/hw_random/atmel-rng.c
@@ -13,6 +13,7 @@
#include <linux/err.h>
#include <linux/clk.h>
#include <linux/io.h>
+#include <linux/iopoll.h>
#include <linux/hw_random.h>
#include <linux/of_device.h>
#include <linux/platform_device.h>
@@ -20,6 +21,7 @@
#define TRNG_CR 0x00
#define TRNG_MR 0x04
#define TRNG_ISR 0x1c
+#define TRNG_ISR_DATRDY BIT(0)
#define TRNG_ODATA 0x50
#define TRNG_KEY 0x524e4700 /* RNG */
@@ -36,25 +38,40 @@ struct atmel_trng {
struct hwrng rng;
};
+static bool atmel_trng_wait_ready(struct atmel_trng *trng, bool wait)
+{
+ int ready;
+
+ ready = readl(trng->base + TRNG_ISR) & TRNG_ISR_DATRDY;
+ if (!ready && wait)
+ readl_poll_timeout(trng->base + TRNG_ISR, ready,
+ ready & TRNG_ISR_DATRDY, 1000, 20000);
+
+ return !!ready;
+}
+
static int atmel_trng_read(struct hwrng *rng, void *buf, size_t max,
bool wait)
{
struct atmel_trng *trng = container_of(rng, struct atmel_trng, rng);
u32 *data = buf;
+ int ret;
+
+ ret = atmel_trng_wait_ready(trng, wait);
+ if (!ret)
+ goto out;
- /* data ready? */
- if (readl(trng->base + TRNG_ISR) & 1) {
- *data = readl(trng->base + TRNG_ODATA);
- /*
- ensure data ready is only set again AFTER the next data
- word is ready in case it got set between checking ISR
- and reading ODATA, so we don't risk re-reading the
- same word
- */
- readl(trng->base + TRNG_ISR);
- return 4;
- } else
- return 0;
+ *data = readl(trng->base + TRNG_ODATA);
+ /*
+ * ensure data ready is only set again AFTER the next data word is ready
+ * in case it got set between checking ISR and reading ODATA, so we
+ * don't risk re-reading the same word
+ */
+ readl(trng->base + TRNG_ISR);
+ ret = 4;
+
+out:
+ return ret;
}
static void atmel_trng_enable(struct atmel_trng *trng)
--
2.32.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v2 2/7] hwrng: atmel - disable trng on failure path
2022-02-21 7:59 ` Claudiu Beznea
@ 2022-02-21 7:59 ` Claudiu Beznea
-1 siblings, 0 replies; 20+ messages in thread
From: Claudiu Beznea @ 2022-02-21 7:59 UTC (permalink / raw)
To: mpm, herbert, nicolas.ferre, alexandre.belloni
Cc: linux-arm-kernel, linux-crypto, linux-kernel, Claudiu Beznea
Call atmel_trng_disable() on failure path of probe.
Fixes: a1fa98d8116f ("hwrng: atmel - disable TRNG during suspend")
Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
drivers/char/hw_random/atmel-rng.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/char/hw_random/atmel-rng.c b/drivers/char/hw_random/atmel-rng.c
index 1a4874668c04..b7ef951927fb 100644
--- a/drivers/char/hw_random/atmel-rng.c
+++ b/drivers/char/hw_random/atmel-rng.c
@@ -131,6 +131,7 @@ static int atmel_trng_probe(struct platform_device *pdev)
err_register:
clk_disable_unprepare(trng->clk);
+ atmel_trng_disable(trng);
return ret;
}
--
2.32.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v2 2/7] hwrng: atmel - disable trng on failure path
@ 2022-02-21 7:59 ` Claudiu Beznea
0 siblings, 0 replies; 20+ messages in thread
From: Claudiu Beznea @ 2022-02-21 7:59 UTC (permalink / raw)
To: mpm, herbert, nicolas.ferre, alexandre.belloni
Cc: linux-arm-kernel, linux-crypto, linux-kernel, Claudiu Beznea
Call atmel_trng_disable() on failure path of probe.
Fixes: a1fa98d8116f ("hwrng: atmel - disable TRNG during suspend")
Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
drivers/char/hw_random/atmel-rng.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/char/hw_random/atmel-rng.c b/drivers/char/hw_random/atmel-rng.c
index 1a4874668c04..b7ef951927fb 100644
--- a/drivers/char/hw_random/atmel-rng.c
+++ b/drivers/char/hw_random/atmel-rng.c
@@ -131,6 +131,7 @@ static int atmel_trng_probe(struct platform_device *pdev)
err_register:
clk_disable_unprepare(trng->clk);
+ atmel_trng_disable(trng);
return ret;
}
--
2.32.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v2 3/7] hwrng: atmel - rename enable/disable functions to init/cleanup
2022-02-21 7:59 ` Claudiu Beznea
@ 2022-02-21 7:59 ` Claudiu Beznea
-1 siblings, 0 replies; 20+ messages in thread
From: Claudiu Beznea @ 2022-02-21 7:59 UTC (permalink / raw)
To: mpm, herbert, nicolas.ferre, alexandre.belloni
Cc: linux-arm-kernel, linux-crypto, linux-kernel, Claudiu Beznea
s/atmel_trng_disable/atmel_trng_cleanup/g and
s/atmel_trng_enable/atmel_trng_init/g to cope with
struct hwrng::{init, cleanup} members.
Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
drivers/char/hw_random/atmel-rng.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/drivers/char/hw_random/atmel-rng.c b/drivers/char/hw_random/atmel-rng.c
index b7ef951927fb..17f02049c112 100644
--- a/drivers/char/hw_random/atmel-rng.c
+++ b/drivers/char/hw_random/atmel-rng.c
@@ -74,12 +74,12 @@ static int atmel_trng_read(struct hwrng *rng, void *buf, size_t max,
return ret;
}
-static void atmel_trng_enable(struct atmel_trng *trng)
+static void atmel_trng_init(struct atmel_trng *trng)
{
writel(TRNG_KEY | 1, trng->base + TRNG_CR);
}
-static void atmel_trng_disable(struct atmel_trng *trng)
+static void atmel_trng_cleanup(struct atmel_trng *trng)
{
writel(TRNG_KEY, trng->base + TRNG_CR);
}
@@ -117,7 +117,7 @@ static int atmel_trng_probe(struct platform_device *pdev)
if (ret)
return ret;
- atmel_trng_enable(trng);
+ atmel_trng_init(trng);
trng->rng.name = pdev->name;
trng->rng.read = atmel_trng_read;
@@ -131,7 +131,7 @@ static int atmel_trng_probe(struct platform_device *pdev)
err_register:
clk_disable_unprepare(trng->clk);
- atmel_trng_disable(trng);
+ atmel_trng_cleanup(trng);
return ret;
}
@@ -140,7 +140,7 @@ static int atmel_trng_remove(struct platform_device *pdev)
struct atmel_trng *trng = platform_get_drvdata(pdev);
- atmel_trng_disable(trng);
+ atmel_trng_cleanup(trng);
clk_disable_unprepare(trng->clk);
return 0;
@@ -151,7 +151,7 @@ static int atmel_trng_suspend(struct device *dev)
{
struct atmel_trng *trng = dev_get_drvdata(dev);
- atmel_trng_disable(trng);
+ atmel_trng_cleanup(trng);
clk_disable_unprepare(trng->clk);
return 0;
@@ -166,7 +166,7 @@ static int atmel_trng_resume(struct device *dev)
if (ret)
return ret;
- atmel_trng_enable(trng);
+ atmel_trng_init(trng);
return 0;
}
--
2.32.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v2 3/7] hwrng: atmel - rename enable/disable functions to init/cleanup
@ 2022-02-21 7:59 ` Claudiu Beznea
0 siblings, 0 replies; 20+ messages in thread
From: Claudiu Beznea @ 2022-02-21 7:59 UTC (permalink / raw)
To: mpm, herbert, nicolas.ferre, alexandre.belloni
Cc: linux-arm-kernel, linux-crypto, linux-kernel, Claudiu Beznea
s/atmel_trng_disable/atmel_trng_cleanup/g and
s/atmel_trng_enable/atmel_trng_init/g to cope with
struct hwrng::{init, cleanup} members.
Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
drivers/char/hw_random/atmel-rng.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/drivers/char/hw_random/atmel-rng.c b/drivers/char/hw_random/atmel-rng.c
index b7ef951927fb..17f02049c112 100644
--- a/drivers/char/hw_random/atmel-rng.c
+++ b/drivers/char/hw_random/atmel-rng.c
@@ -74,12 +74,12 @@ static int atmel_trng_read(struct hwrng *rng, void *buf, size_t max,
return ret;
}
-static void atmel_trng_enable(struct atmel_trng *trng)
+static void atmel_trng_init(struct atmel_trng *trng)
{
writel(TRNG_KEY | 1, trng->base + TRNG_CR);
}
-static void atmel_trng_disable(struct atmel_trng *trng)
+static void atmel_trng_cleanup(struct atmel_trng *trng)
{
writel(TRNG_KEY, trng->base + TRNG_CR);
}
@@ -117,7 +117,7 @@ static int atmel_trng_probe(struct platform_device *pdev)
if (ret)
return ret;
- atmel_trng_enable(trng);
+ atmel_trng_init(trng);
trng->rng.name = pdev->name;
trng->rng.read = atmel_trng_read;
@@ -131,7 +131,7 @@ static int atmel_trng_probe(struct platform_device *pdev)
err_register:
clk_disable_unprepare(trng->clk);
- atmel_trng_disable(trng);
+ atmel_trng_cleanup(trng);
return ret;
}
@@ -140,7 +140,7 @@ static int atmel_trng_remove(struct platform_device *pdev)
struct atmel_trng *trng = platform_get_drvdata(pdev);
- atmel_trng_disable(trng);
+ atmel_trng_cleanup(trng);
clk_disable_unprepare(trng->clk);
return 0;
@@ -151,7 +151,7 @@ static int atmel_trng_suspend(struct device *dev)
{
struct atmel_trng *trng = dev_get_drvdata(dev);
- atmel_trng_disable(trng);
+ atmel_trng_cleanup(trng);
clk_disable_unprepare(trng->clk);
return 0;
@@ -166,7 +166,7 @@ static int atmel_trng_resume(struct device *dev)
if (ret)
return ret;
- atmel_trng_enable(trng);
+ atmel_trng_init(trng);
return 0;
}
--
2.32.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v2 4/7] hwrng: atmel - move set of TRNG_HALFR in atmel_trng_init()
2022-02-21 7:59 ` Claudiu Beznea
@ 2022-02-21 7:59 ` Claudiu Beznea
-1 siblings, 0 replies; 20+ messages in thread
From: Claudiu Beznea @ 2022-02-21 7:59 UTC (permalink / raw)
To: mpm, herbert, nicolas.ferre, alexandre.belloni
Cc: linux-arm-kernel, linux-crypto, linux-kernel, Claudiu Beznea
Move set of TRNG_HALFR in atmel_trng_init() as this function is
also called on resume path. In case of SAMA7G5 where backup and
self-refresh PM mode is available most of the SoC parts are
powered of (including TRNG) when entering suspend. In that case
on resuming path TRNG_HALFR should also be re-configured.
Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
drivers/char/hw_random/atmel-rng.c | 49 +++++++++++++++---------------
1 file changed, 25 insertions(+), 24 deletions(-)
diff --git a/drivers/char/hw_random/atmel-rng.c b/drivers/char/hw_random/atmel-rng.c
index 17f02049c112..ef49dbe681cf 100644
--- a/drivers/char/hw_random/atmel-rng.c
+++ b/drivers/char/hw_random/atmel-rng.c
@@ -36,6 +36,7 @@ struct atmel_trng {
struct clk *clk;
void __iomem *base;
struct hwrng rng;
+ bool has_half_rate;
};
static bool atmel_trng_wait_ready(struct atmel_trng *trng, bool wait)
@@ -74,14 +75,32 @@ static int atmel_trng_read(struct hwrng *rng, void *buf, size_t max,
return ret;
}
-static void atmel_trng_init(struct atmel_trng *trng)
+static int atmel_trng_init(struct atmel_trng *trng)
{
+ unsigned long rate;
+ int ret;
+
+ ret = clk_prepare_enable(trng->clk);
+ if (ret)
+ return ret;
+
+ if (trng->has_half_rate) {
+ rate = clk_get_rate(trng->clk);
+
+ /* if peripheral clk is above 100MHz, set HALFR */
+ if (rate > 100000000)
+ writel(TRNG_HALFR, trng->base + TRNG_MR);
+ }
+
writel(TRNG_KEY | 1, trng->base + TRNG_CR);
+
+ return 0;
}
static void atmel_trng_cleanup(struct atmel_trng *trng)
{
writel(TRNG_KEY, trng->base + TRNG_CR);
+ clk_disable_unprepare(trng->clk);
}
static int atmel_trng_probe(struct platform_device *pdev)
@@ -105,22 +124,14 @@ static int atmel_trng_probe(struct platform_device *pdev)
if (!data)
return -ENODEV;
- if (data->has_half_rate) {
- unsigned long rate = clk_get_rate(trng->clk);
-
- /* if peripheral clk is above 100MHz, set HALFR */
- if (rate > 100000000)
- writel(TRNG_HALFR, trng->base + TRNG_MR);
- }
+ trng->has_half_rate = data->has_half_rate;
+ trng->rng.name = pdev->name;
+ trng->rng.read = atmel_trng_read;
- ret = clk_prepare_enable(trng->clk);
+ ret = atmel_trng_init(trng);
if (ret)
return ret;
- atmel_trng_init(trng);
- trng->rng.name = pdev->name;
- trng->rng.read = atmel_trng_read;
-
ret = devm_hwrng_register(&pdev->dev, &trng->rng);
if (ret)
goto err_register;
@@ -130,7 +141,6 @@ static int atmel_trng_probe(struct platform_device *pdev)
return 0;
err_register:
- clk_disable_unprepare(trng->clk);
atmel_trng_cleanup(trng);
return ret;
}
@@ -141,7 +151,6 @@ static int atmel_trng_remove(struct platform_device *pdev)
atmel_trng_cleanup(trng);
- clk_disable_unprepare(trng->clk);
return 0;
}
@@ -152,7 +161,6 @@ static int atmel_trng_suspend(struct device *dev)
struct atmel_trng *trng = dev_get_drvdata(dev);
atmel_trng_cleanup(trng);
- clk_disable_unprepare(trng->clk);
return 0;
}
@@ -160,15 +168,8 @@ static int atmel_trng_suspend(struct device *dev)
static int atmel_trng_resume(struct device *dev)
{
struct atmel_trng *trng = dev_get_drvdata(dev);
- int ret;
- ret = clk_prepare_enable(trng->clk);
- if (ret)
- return ret;
-
- atmel_trng_init(trng);
-
- return 0;
+ return atmel_trng_init(trng);
}
static const struct dev_pm_ops atmel_trng_pm_ops = {
--
2.32.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v2 4/7] hwrng: atmel - move set of TRNG_HALFR in atmel_trng_init()
@ 2022-02-21 7:59 ` Claudiu Beznea
0 siblings, 0 replies; 20+ messages in thread
From: Claudiu Beznea @ 2022-02-21 7:59 UTC (permalink / raw)
To: mpm, herbert, nicolas.ferre, alexandre.belloni
Cc: linux-arm-kernel, linux-crypto, linux-kernel, Claudiu Beznea
Move set of TRNG_HALFR in atmel_trng_init() as this function is
also called on resume path. In case of SAMA7G5 where backup and
self-refresh PM mode is available most of the SoC parts are
powered of (including TRNG) when entering suspend. In that case
on resuming path TRNG_HALFR should also be re-configured.
Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
drivers/char/hw_random/atmel-rng.c | 49 +++++++++++++++---------------
1 file changed, 25 insertions(+), 24 deletions(-)
diff --git a/drivers/char/hw_random/atmel-rng.c b/drivers/char/hw_random/atmel-rng.c
index 17f02049c112..ef49dbe681cf 100644
--- a/drivers/char/hw_random/atmel-rng.c
+++ b/drivers/char/hw_random/atmel-rng.c
@@ -36,6 +36,7 @@ struct atmel_trng {
struct clk *clk;
void __iomem *base;
struct hwrng rng;
+ bool has_half_rate;
};
static bool atmel_trng_wait_ready(struct atmel_trng *trng, bool wait)
@@ -74,14 +75,32 @@ static int atmel_trng_read(struct hwrng *rng, void *buf, size_t max,
return ret;
}
-static void atmel_trng_init(struct atmel_trng *trng)
+static int atmel_trng_init(struct atmel_trng *trng)
{
+ unsigned long rate;
+ int ret;
+
+ ret = clk_prepare_enable(trng->clk);
+ if (ret)
+ return ret;
+
+ if (trng->has_half_rate) {
+ rate = clk_get_rate(trng->clk);
+
+ /* if peripheral clk is above 100MHz, set HALFR */
+ if (rate > 100000000)
+ writel(TRNG_HALFR, trng->base + TRNG_MR);
+ }
+
writel(TRNG_KEY | 1, trng->base + TRNG_CR);
+
+ return 0;
}
static void atmel_trng_cleanup(struct atmel_trng *trng)
{
writel(TRNG_KEY, trng->base + TRNG_CR);
+ clk_disable_unprepare(trng->clk);
}
static int atmel_trng_probe(struct platform_device *pdev)
@@ -105,22 +124,14 @@ static int atmel_trng_probe(struct platform_device *pdev)
if (!data)
return -ENODEV;
- if (data->has_half_rate) {
- unsigned long rate = clk_get_rate(trng->clk);
-
- /* if peripheral clk is above 100MHz, set HALFR */
- if (rate > 100000000)
- writel(TRNG_HALFR, trng->base + TRNG_MR);
- }
+ trng->has_half_rate = data->has_half_rate;
+ trng->rng.name = pdev->name;
+ trng->rng.read = atmel_trng_read;
- ret = clk_prepare_enable(trng->clk);
+ ret = atmel_trng_init(trng);
if (ret)
return ret;
- atmel_trng_init(trng);
- trng->rng.name = pdev->name;
- trng->rng.read = atmel_trng_read;
-
ret = devm_hwrng_register(&pdev->dev, &trng->rng);
if (ret)
goto err_register;
@@ -130,7 +141,6 @@ static int atmel_trng_probe(struct platform_device *pdev)
return 0;
err_register:
- clk_disable_unprepare(trng->clk);
atmel_trng_cleanup(trng);
return ret;
}
@@ -141,7 +151,6 @@ static int atmel_trng_remove(struct platform_device *pdev)
atmel_trng_cleanup(trng);
- clk_disable_unprepare(trng->clk);
return 0;
}
@@ -152,7 +161,6 @@ static int atmel_trng_suspend(struct device *dev)
struct atmel_trng *trng = dev_get_drvdata(dev);
atmel_trng_cleanup(trng);
- clk_disable_unprepare(trng->clk);
return 0;
}
@@ -160,15 +168,8 @@ static int atmel_trng_suspend(struct device *dev)
static int atmel_trng_resume(struct device *dev)
{
struct atmel_trng *trng = dev_get_drvdata(dev);
- int ret;
- ret = clk_prepare_enable(trng->clk);
- if (ret)
- return ret;
-
- atmel_trng_init(trng);
-
- return 0;
+ return atmel_trng_init(trng);
}
static const struct dev_pm_ops atmel_trng_pm_ops = {
--
2.32.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v2 5/7] hwrng: atmel - use __maybe_unused and pm_ptr() for pm ops
2022-02-21 7:59 ` Claudiu Beznea
@ 2022-02-21 7:59 ` Claudiu Beznea
-1 siblings, 0 replies; 20+ messages in thread
From: Claudiu Beznea @ 2022-02-21 7:59 UTC (permalink / raw)
To: mpm, herbert, nicolas.ferre, alexandre.belloni
Cc: linux-arm-kernel, linux-crypto, linux-kernel, Claudiu Beznea
Use __maybe_unused and pm_ptr() for pm ops.
Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
drivers/char/hw_random/atmel-rng.c | 12 ++++--------
1 file changed, 4 insertions(+), 8 deletions(-)
diff --git a/drivers/char/hw_random/atmel-rng.c b/drivers/char/hw_random/atmel-rng.c
index ef49dbe681cf..0fff74808472 100644
--- a/drivers/char/hw_random/atmel-rng.c
+++ b/drivers/char/hw_random/atmel-rng.c
@@ -155,8 +155,7 @@ static int atmel_trng_remove(struct platform_device *pdev)
return 0;
}
-#ifdef CONFIG_PM
-static int atmel_trng_suspend(struct device *dev)
+static int __maybe_unused atmel_trng_suspend(struct device *dev)
{
struct atmel_trng *trng = dev_get_drvdata(dev);
@@ -165,18 +164,17 @@ static int atmel_trng_suspend(struct device *dev)
return 0;
}
-static int atmel_trng_resume(struct device *dev)
+static int __maybe_unused atmel_trng_resume(struct device *dev)
{
struct atmel_trng *trng = dev_get_drvdata(dev);
return atmel_trng_init(trng);
}
-static const struct dev_pm_ops atmel_trng_pm_ops = {
+static const struct dev_pm_ops __maybe_unused atmel_trng_pm_ops = {
.suspend = atmel_trng_suspend,
.resume = atmel_trng_resume,
};
-#endif /* CONFIG_PM */
static const struct atmel_trng_data at91sam9g45_config = {
.has_half_rate = false,
@@ -204,9 +202,7 @@ static struct platform_driver atmel_trng_driver = {
.remove = atmel_trng_remove,
.driver = {
.name = "atmel-trng",
-#ifdef CONFIG_PM
- .pm = &atmel_trng_pm_ops,
-#endif /* CONFIG_PM */
+ .pm = pm_ptr(&atmel_trng_pm_ops),
.of_match_table = atmel_trng_dt_ids,
},
};
--
2.32.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v2 5/7] hwrng: atmel - use __maybe_unused and pm_ptr() for pm ops
@ 2022-02-21 7:59 ` Claudiu Beznea
0 siblings, 0 replies; 20+ messages in thread
From: Claudiu Beznea @ 2022-02-21 7:59 UTC (permalink / raw)
To: mpm, herbert, nicolas.ferre, alexandre.belloni
Cc: linux-arm-kernel, linux-crypto, linux-kernel, Claudiu Beznea
Use __maybe_unused and pm_ptr() for pm ops.
Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
drivers/char/hw_random/atmel-rng.c | 12 ++++--------
1 file changed, 4 insertions(+), 8 deletions(-)
diff --git a/drivers/char/hw_random/atmel-rng.c b/drivers/char/hw_random/atmel-rng.c
index ef49dbe681cf..0fff74808472 100644
--- a/drivers/char/hw_random/atmel-rng.c
+++ b/drivers/char/hw_random/atmel-rng.c
@@ -155,8 +155,7 @@ static int atmel_trng_remove(struct platform_device *pdev)
return 0;
}
-#ifdef CONFIG_PM
-static int atmel_trng_suspend(struct device *dev)
+static int __maybe_unused atmel_trng_suspend(struct device *dev)
{
struct atmel_trng *trng = dev_get_drvdata(dev);
@@ -165,18 +164,17 @@ static int atmel_trng_suspend(struct device *dev)
return 0;
}
-static int atmel_trng_resume(struct device *dev)
+static int __maybe_unused atmel_trng_resume(struct device *dev)
{
struct atmel_trng *trng = dev_get_drvdata(dev);
return atmel_trng_init(trng);
}
-static const struct dev_pm_ops atmel_trng_pm_ops = {
+static const struct dev_pm_ops __maybe_unused atmel_trng_pm_ops = {
.suspend = atmel_trng_suspend,
.resume = atmel_trng_resume,
};
-#endif /* CONFIG_PM */
static const struct atmel_trng_data at91sam9g45_config = {
.has_half_rate = false,
@@ -204,9 +202,7 @@ static struct platform_driver atmel_trng_driver = {
.remove = atmel_trng_remove,
.driver = {
.name = "atmel-trng",
-#ifdef CONFIG_PM
- .pm = &atmel_trng_pm_ops,
-#endif /* CONFIG_PM */
+ .pm = pm_ptr(&atmel_trng_pm_ops),
.of_match_table = atmel_trng_dt_ids,
},
};
--
2.32.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v2 6/7] hwrng: atmel - add runtime pm support
2022-02-21 7:59 ` Claudiu Beznea
@ 2022-02-21 7:59 ` Claudiu Beznea
-1 siblings, 0 replies; 20+ messages in thread
From: Claudiu Beznea @ 2022-02-21 7:59 UTC (permalink / raw)
To: mpm, herbert, nicolas.ferre, alexandre.belloni
Cc: linux-arm-kernel, linux-crypto, linux-kernel, Claudiu Beznea
Add runtime PM support.
Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
drivers/char/hw_random/atmel-rng.c | 44 ++++++++++++++++++++++--------
1 file changed, 32 insertions(+), 12 deletions(-)
diff --git a/drivers/char/hw_random/atmel-rng.c b/drivers/char/hw_random/atmel-rng.c
index 0fff74808472..b662d44a09a6 100644
--- a/drivers/char/hw_random/atmel-rng.c
+++ b/drivers/char/hw_random/atmel-rng.c
@@ -17,6 +17,7 @@
#include <linux/hw_random.h>
#include <linux/of_device.h>
#include <linux/platform_device.h>
+#include <linux/pm_runtime.h>
#define TRNG_CR 0x00
#define TRNG_MR 0x04
@@ -58,6 +59,12 @@ static int atmel_trng_read(struct hwrng *rng, void *buf, size_t max,
u32 *data = buf;
int ret;
+ ret = pm_runtime_get_sync((struct device *)trng->rng.priv);
+ if (ret < 0) {
+ pm_runtime_put_sync((struct device *)trng->rng.priv);
+ return ret;
+ }
+
ret = atmel_trng_wait_ready(trng, wait);
if (!ret)
goto out;
@@ -72,6 +79,8 @@ static int atmel_trng_read(struct hwrng *rng, void *buf, size_t max,
ret = 4;
out:
+ pm_runtime_mark_last_busy((struct device *)trng->rng.priv);
+ pm_runtime_put_sync_autosuspend((struct device *)trng->rng.priv);
return ret;
}
@@ -127,21 +136,28 @@ static int atmel_trng_probe(struct platform_device *pdev)
trng->has_half_rate = data->has_half_rate;
trng->rng.name = pdev->name;
trng->rng.read = atmel_trng_read;
+ trng->rng.priv = (unsigned long)&pdev->dev;
+ platform_set_drvdata(pdev, trng);
+#ifndef CONFIG_PM
ret = atmel_trng_init(trng);
if (ret)
return ret;
+#endif
- ret = devm_hwrng_register(&pdev->dev, &trng->rng);
- if (ret)
- goto err_register;
-
- platform_set_drvdata(pdev, trng);
+ pm_runtime_set_autosuspend_delay(&pdev->dev, 100);
+ pm_runtime_use_autosuspend(&pdev->dev);
+ pm_runtime_enable(&pdev->dev);
- return 0;
+ ret = devm_hwrng_register(&pdev->dev, &trng->rng);
+ if (ret) {
+ pm_runtime_disable(&pdev->dev);
+ pm_runtime_set_suspended(&pdev->dev);
+#ifndef CONFIG_PM
+ atmel_trng_cleanup(trng);
+#endif
+ }
-err_register:
- atmel_trng_cleanup(trng);
return ret;
}
@@ -151,11 +167,13 @@ static int atmel_trng_remove(struct platform_device *pdev)
atmel_trng_cleanup(trng);
+ pm_runtime_disable(&pdev->dev);
+ pm_runtime_set_suspended(&pdev->dev);
return 0;
}
-static int __maybe_unused atmel_trng_suspend(struct device *dev)
+static int __maybe_unused atmel_trng_runtime_suspend(struct device *dev)
{
struct atmel_trng *trng = dev_get_drvdata(dev);
@@ -164,7 +182,7 @@ static int __maybe_unused atmel_trng_suspend(struct device *dev)
return 0;
}
-static int __maybe_unused atmel_trng_resume(struct device *dev)
+static int __maybe_unused atmel_trng_runtime_resume(struct device *dev)
{
struct atmel_trng *trng = dev_get_drvdata(dev);
@@ -172,8 +190,10 @@ static int __maybe_unused atmel_trng_resume(struct device *dev)
}
static const struct dev_pm_ops __maybe_unused atmel_trng_pm_ops = {
- .suspend = atmel_trng_suspend,
- .resume = atmel_trng_resume,
+ SET_RUNTIME_PM_OPS(atmel_trng_runtime_suspend,
+ atmel_trng_runtime_resume, NULL)
+ SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
+ pm_runtime_force_resume)
};
static const struct atmel_trng_data at91sam9g45_config = {
--
2.32.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v2 6/7] hwrng: atmel - add runtime pm support
@ 2022-02-21 7:59 ` Claudiu Beznea
0 siblings, 0 replies; 20+ messages in thread
From: Claudiu Beznea @ 2022-02-21 7:59 UTC (permalink / raw)
To: mpm, herbert, nicolas.ferre, alexandre.belloni
Cc: linux-arm-kernel, linux-crypto, linux-kernel, Claudiu Beznea
Add runtime PM support.
Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
drivers/char/hw_random/atmel-rng.c | 44 ++++++++++++++++++++++--------
1 file changed, 32 insertions(+), 12 deletions(-)
diff --git a/drivers/char/hw_random/atmel-rng.c b/drivers/char/hw_random/atmel-rng.c
index 0fff74808472..b662d44a09a6 100644
--- a/drivers/char/hw_random/atmel-rng.c
+++ b/drivers/char/hw_random/atmel-rng.c
@@ -17,6 +17,7 @@
#include <linux/hw_random.h>
#include <linux/of_device.h>
#include <linux/platform_device.h>
+#include <linux/pm_runtime.h>
#define TRNG_CR 0x00
#define TRNG_MR 0x04
@@ -58,6 +59,12 @@ static int atmel_trng_read(struct hwrng *rng, void *buf, size_t max,
u32 *data = buf;
int ret;
+ ret = pm_runtime_get_sync((struct device *)trng->rng.priv);
+ if (ret < 0) {
+ pm_runtime_put_sync((struct device *)trng->rng.priv);
+ return ret;
+ }
+
ret = atmel_trng_wait_ready(trng, wait);
if (!ret)
goto out;
@@ -72,6 +79,8 @@ static int atmel_trng_read(struct hwrng *rng, void *buf, size_t max,
ret = 4;
out:
+ pm_runtime_mark_last_busy((struct device *)trng->rng.priv);
+ pm_runtime_put_sync_autosuspend((struct device *)trng->rng.priv);
return ret;
}
@@ -127,21 +136,28 @@ static int atmel_trng_probe(struct platform_device *pdev)
trng->has_half_rate = data->has_half_rate;
trng->rng.name = pdev->name;
trng->rng.read = atmel_trng_read;
+ trng->rng.priv = (unsigned long)&pdev->dev;
+ platform_set_drvdata(pdev, trng);
+#ifndef CONFIG_PM
ret = atmel_trng_init(trng);
if (ret)
return ret;
+#endif
- ret = devm_hwrng_register(&pdev->dev, &trng->rng);
- if (ret)
- goto err_register;
-
- platform_set_drvdata(pdev, trng);
+ pm_runtime_set_autosuspend_delay(&pdev->dev, 100);
+ pm_runtime_use_autosuspend(&pdev->dev);
+ pm_runtime_enable(&pdev->dev);
- return 0;
+ ret = devm_hwrng_register(&pdev->dev, &trng->rng);
+ if (ret) {
+ pm_runtime_disable(&pdev->dev);
+ pm_runtime_set_suspended(&pdev->dev);
+#ifndef CONFIG_PM
+ atmel_trng_cleanup(trng);
+#endif
+ }
-err_register:
- atmel_trng_cleanup(trng);
return ret;
}
@@ -151,11 +167,13 @@ static int atmel_trng_remove(struct platform_device *pdev)
atmel_trng_cleanup(trng);
+ pm_runtime_disable(&pdev->dev);
+ pm_runtime_set_suspended(&pdev->dev);
return 0;
}
-static int __maybe_unused atmel_trng_suspend(struct device *dev)
+static int __maybe_unused atmel_trng_runtime_suspend(struct device *dev)
{
struct atmel_trng *trng = dev_get_drvdata(dev);
@@ -164,7 +182,7 @@ static int __maybe_unused atmel_trng_suspend(struct device *dev)
return 0;
}
-static int __maybe_unused atmel_trng_resume(struct device *dev)
+static int __maybe_unused atmel_trng_runtime_resume(struct device *dev)
{
struct atmel_trng *trng = dev_get_drvdata(dev);
@@ -172,8 +190,10 @@ static int __maybe_unused atmel_trng_resume(struct device *dev)
}
static const struct dev_pm_ops __maybe_unused atmel_trng_pm_ops = {
- .suspend = atmel_trng_suspend,
- .resume = atmel_trng_resume,
+ SET_RUNTIME_PM_OPS(atmel_trng_runtime_suspend,
+ atmel_trng_runtime_resume, NULL)
+ SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
+ pm_runtime_force_resume)
};
static const struct atmel_trng_data at91sam9g45_config = {
--
2.32.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v2 7/7] hwrng: atmel - remove extra line
2022-02-21 7:59 ` Claudiu Beznea
@ 2022-02-21 7:59 ` Claudiu Beznea
-1 siblings, 0 replies; 20+ messages in thread
From: Claudiu Beznea @ 2022-02-21 7:59 UTC (permalink / raw)
To: mpm, herbert, nicolas.ferre, alexandre.belloni
Cc: linux-arm-kernel, linux-crypto, linux-kernel, Claudiu Beznea
Remove extra line.
Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
drivers/char/hw_random/atmel-rng.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/char/hw_random/atmel-rng.c b/drivers/char/hw_random/atmel-rng.c
index b662d44a09a6..b8effe77d80f 100644
--- a/drivers/char/hw_random/atmel-rng.c
+++ b/drivers/char/hw_random/atmel-rng.c
@@ -165,7 +165,6 @@ static int atmel_trng_remove(struct platform_device *pdev)
{
struct atmel_trng *trng = platform_get_drvdata(pdev);
-
atmel_trng_cleanup(trng);
pm_runtime_disable(&pdev->dev);
pm_runtime_set_suspended(&pdev->dev);
--
2.32.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v2 7/7] hwrng: atmel - remove extra line
@ 2022-02-21 7:59 ` Claudiu Beznea
0 siblings, 0 replies; 20+ messages in thread
From: Claudiu Beznea @ 2022-02-21 7:59 UTC (permalink / raw)
To: mpm, herbert, nicolas.ferre, alexandre.belloni
Cc: linux-arm-kernel, linux-crypto, linux-kernel, Claudiu Beznea
Remove extra line.
Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
drivers/char/hw_random/atmel-rng.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/char/hw_random/atmel-rng.c b/drivers/char/hw_random/atmel-rng.c
index b662d44a09a6..b8effe77d80f 100644
--- a/drivers/char/hw_random/atmel-rng.c
+++ b/drivers/char/hw_random/atmel-rng.c
@@ -165,7 +165,6 @@ static int atmel_trng_remove(struct platform_device *pdev)
{
struct atmel_trng *trng = platform_get_drvdata(pdev);
-
atmel_trng_cleanup(trng);
pm_runtime_disable(&pdev->dev);
pm_runtime_set_suspended(&pdev->dev);
--
2.32.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH v2 0/7] hwrng: atmel - add runtime pm support
2022-02-21 7:59 ` Claudiu Beznea
@ 2022-02-21 10:50 ` Claudiu.Beznea
-1 siblings, 0 replies; 20+ messages in thread
From: Claudiu.Beznea @ 2022-02-21 10:50 UTC (permalink / raw)
To: mpm, herbert, Nicolas.Ferre, alexandre.belloni
Cc: linux-arm-kernel, linux-crypto, linux-kernel
On 21.02.2022 09:59, Claudiu Beznea wrote:
> Hi,
>
> This series adds runtime PM support for atmel-rng driver. Along with
> this some cleanup and fixes patches were added to the series.
>
> Thank you,
> Claudiu Beznea
Forgot to mention here:
Changes in v2:
- s/hwrnd/hwrng in patch titles
>
> Claudiu Beznea (7):
> hwrng: atmel - add wait for ready support on read
> hwrng: atmel - disable trng on failure path
> hwrng: atmel - rename enable/disable functions to init/cleanup
> hwrng: atmel - move set of TRNG_HALFR in atmel_trng_init()
> hwrng: atmel - use __maybe_unused and pm_ptr() for pm ops
> hwrng: atmel - add runtime pm support
> hwrng: atmel - remove extra line
>
> drivers/char/hw_random/atmel-rng.c | 148 ++++++++++++++++++-----------
> 1 file changed, 91 insertions(+), 57 deletions(-)
>
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v2 0/7] hwrng: atmel - add runtime pm support
@ 2022-02-21 10:50 ` Claudiu.Beznea
0 siblings, 0 replies; 20+ messages in thread
From: Claudiu.Beznea @ 2022-02-21 10:50 UTC (permalink / raw)
To: mpm, herbert, Nicolas.Ferre, alexandre.belloni
Cc: linux-arm-kernel, linux-crypto, linux-kernel
On 21.02.2022 09:59, Claudiu Beznea wrote:
> Hi,
>
> This series adds runtime PM support for atmel-rng driver. Along with
> this some cleanup and fixes patches were added to the series.
>
> Thank you,
> Claudiu Beznea
Forgot to mention here:
Changes in v2:
- s/hwrnd/hwrng in patch titles
>
> Claudiu Beznea (7):
> hwrng: atmel - add wait for ready support on read
> hwrng: atmel - disable trng on failure path
> hwrng: atmel - rename enable/disable functions to init/cleanup
> hwrng: atmel - move set of TRNG_HALFR in atmel_trng_init()
> hwrng: atmel - use __maybe_unused and pm_ptr() for pm ops
> hwrng: atmel - add runtime pm support
> hwrng: atmel - remove extra line
>
> drivers/char/hw_random/atmel-rng.c | 148 ++++++++++++++++++-----------
> 1 file changed, 91 insertions(+), 57 deletions(-)
>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v2 0/7] hwrng: atmel - add runtime pm support
2022-02-21 7:59 ` Claudiu Beznea
@ 2022-03-02 22:57 ` Herbert Xu
-1 siblings, 0 replies; 20+ messages in thread
From: Herbert Xu @ 2022-03-02 22:57 UTC (permalink / raw)
To: Claudiu Beznea
Cc: alexandre.belloni, linux-kernel, linux-crypto, mpm, linux-arm-kernel
On Mon, Feb 21, 2022 at 09:59:21AM +0200, Claudiu Beznea wrote:
> Hi,
>
> This series adds runtime PM support for atmel-rng driver. Along with
> this some cleanup and fixes patches were added to the series.
>
> Thank you,
> Claudiu Beznea
>
> Claudiu Beznea (7):
> hwrng: atmel - add wait for ready support on read
> hwrng: atmel - disable trng on failure path
> hwrng: atmel - rename enable/disable functions to init/cleanup
> hwrng: atmel - move set of TRNG_HALFR in atmel_trng_init()
> hwrng: atmel - use __maybe_unused and pm_ptr() for pm ops
> hwrng: atmel - add runtime pm support
> hwrng: atmel - remove extra line
>
> drivers/char/hw_random/atmel-rng.c | 148 ++++++++++++++++++-----------
> 1 file changed, 91 insertions(+), 57 deletions(-)
All applied. Thanks.
--
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v2 0/7] hwrng: atmel - add runtime pm support
@ 2022-03-02 22:57 ` Herbert Xu
0 siblings, 0 replies; 20+ messages in thread
From: Herbert Xu @ 2022-03-02 22:57 UTC (permalink / raw)
To: Claudiu Beznea
Cc: mpm, nicolas.ferre, alexandre.belloni, linux-arm-kernel,
linux-crypto, linux-kernel
On Mon, Feb 21, 2022 at 09:59:21AM +0200, Claudiu Beznea wrote:
> Hi,
>
> This series adds runtime PM support for atmel-rng driver. Along with
> this some cleanup and fixes patches were added to the series.
>
> Thank you,
> Claudiu Beznea
>
> Claudiu Beznea (7):
> hwrng: atmel - add wait for ready support on read
> hwrng: atmel - disable trng on failure path
> hwrng: atmel - rename enable/disable functions to init/cleanup
> hwrng: atmel - move set of TRNG_HALFR in atmel_trng_init()
> hwrng: atmel - use __maybe_unused and pm_ptr() for pm ops
> hwrng: atmel - add runtime pm support
> hwrng: atmel - remove extra line
>
> drivers/char/hw_random/atmel-rng.c | 148 ++++++++++++++++++-----------
> 1 file changed, 91 insertions(+), 57 deletions(-)
All applied. Thanks.
--
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2022-03-02 23:59 UTC | newest]
Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-21 7:59 [PATCH v2 0/7] hwrng: atmel - add runtime pm support Claudiu Beznea
2022-02-21 7:59 ` Claudiu Beznea
2022-02-21 7:59 ` [PATCH v2 1/7] hwrng: atmel - add wait for ready support on read Claudiu Beznea
2022-02-21 7:59 ` Claudiu Beznea
2022-02-21 7:59 ` [PATCH v2 2/7] hwrng: atmel - disable trng on failure path Claudiu Beznea
2022-02-21 7:59 ` Claudiu Beznea
2022-02-21 7:59 ` [PATCH v2 3/7] hwrng: atmel - rename enable/disable functions to init/cleanup Claudiu Beznea
2022-02-21 7:59 ` Claudiu Beznea
2022-02-21 7:59 ` [PATCH v2 4/7] hwrng: atmel - move set of TRNG_HALFR in atmel_trng_init() Claudiu Beznea
2022-02-21 7:59 ` Claudiu Beznea
2022-02-21 7:59 ` [PATCH v2 5/7] hwrng: atmel - use __maybe_unused and pm_ptr() for pm ops Claudiu Beznea
2022-02-21 7:59 ` Claudiu Beznea
2022-02-21 7:59 ` [PATCH v2 6/7] hwrng: atmel - add runtime pm support Claudiu Beznea
2022-02-21 7:59 ` Claudiu Beznea
2022-02-21 7:59 ` [PATCH v2 7/7] hwrng: atmel - remove extra line Claudiu Beznea
2022-02-21 7:59 ` Claudiu Beznea
2022-02-21 10:50 ` [PATCH v2 0/7] hwrng: atmel - add runtime pm support Claudiu.Beznea
2022-02-21 10:50 ` Claudiu.Beznea
2022-03-02 22:57 ` Herbert Xu
2022-03-02 22:57 ` Herbert Xu
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.