* [PATCH 1/2] hwrng: omap - Remove useless test before clk_disable_unprepare
2018-02-28 14:27 [PATCH 0/2] hwrng: omap: Fix clock resource for Armada 7K/8K Gregory CLEMENT
@ 2018-02-28 14:27 ` Gregory CLEMENT
2018-02-28 14:27 ` [PATCH 2/2] hwrng: omap - Fix clock resource by adding a register clock Gregory CLEMENT
2018-03-09 15:18 ` [PATCH 0/2] hwrng: omap: Fix clock resource for Armada 7K/8K Herbert Xu
2 siblings, 0 replies; 4+ messages in thread
From: Gregory CLEMENT @ 2018-02-28 14:27 UTC (permalink / raw)
To: Herbert Xu, Deepak Saxena, linux-crypto
Cc: Andrew Lunn, Jason Cooper, Antoine Tenart, Gregory CLEMENT,
Omri Itach, Nadav Haklai, Shadi Ammouri, Igal Liberman,
Thomas Petazzoni, Miquèl Raynal, Marcin Wojtas, Hanna Hawa,
linux-arm-kernel, Sebastian Hesselbarth
clk_disable_unprepare() already checks that the clock pointer is valid.
No need to test it before calling it.
Signed-off-by: Gregory CLEMENT <gregory.clement@bootlin.com>
---
drivers/char/hw_random/omap-rng.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/char/hw_random/omap-rng.c b/drivers/char/hw_random/omap-rng.c
index 74d11ae6abe9..159d4a1347b8 100644
--- a/drivers/char/hw_random/omap-rng.c
+++ b/drivers/char/hw_random/omap-rng.c
@@ -499,8 +499,7 @@ static int omap_rng_probe(struct platform_device *pdev)
pm_runtime_put_sync(&pdev->dev);
pm_runtime_disable(&pdev->dev);
- if (!IS_ERR(priv->clk))
- clk_disable_unprepare(priv->clk);
+ clk_disable_unprepare(priv->clk);
err_ioremap:
dev_err(dev, "initialization failed.\n");
return ret;
@@ -517,8 +516,7 @@ static int omap_rng_remove(struct platform_device *pdev)
pm_runtime_put_sync(&pdev->dev);
pm_runtime_disable(&pdev->dev);
- if (!IS_ERR(priv->clk))
- clk_disable_unprepare(priv->clk);
+ clk_disable_unprepare(priv->clk);
return 0;
}
--
2.16.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] hwrng: omap - Fix clock resource by adding a register clock
2018-02-28 14:27 [PATCH 0/2] hwrng: omap: Fix clock resource for Armada 7K/8K Gregory CLEMENT
2018-02-28 14:27 ` [PATCH 1/2] hwrng: omap - Remove useless test before clk_disable_unprepare Gregory CLEMENT
@ 2018-02-28 14:27 ` Gregory CLEMENT
2018-03-09 15:18 ` [PATCH 0/2] hwrng: omap: Fix clock resource for Armada 7K/8K Herbert Xu
2 siblings, 0 replies; 4+ messages in thread
From: Gregory CLEMENT @ 2018-02-28 14:27 UTC (permalink / raw)
To: Herbert Xu, Deepak Saxena, linux-crypto
Cc: Andrew Lunn, Jason Cooper, Antoine Tenart, Gregory CLEMENT,
Omri Itach, Nadav Haklai, Shadi Ammouri, Igal Liberman,
Thomas Petazzoni, Miquèl Raynal, Marcin Wojtas, Hanna Hawa,
linux-arm-kernel, Sebastian Hesselbarth
On Armada 7K/8K we need to explicitly enable the register clock. This
clock is optional because not all the SoCs using this IP need it but at
least for Armada 7K/8K it is actually mandatory.
The binding documentation is updating accordingly.
Signed-off-by: Gregory CLEMENT <gregory.clement@bootlin.com>
---
Documentation/devicetree/bindings/rng/omap_rng.txt | 7 ++++++-
drivers/char/hw_random/omap-rng.c | 16 ++++++++++++++++
2 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/rng/omap_rng.txt b/Documentation/devicetree/bindings/rng/omap_rng.txt
index 9cf7876ab434..ea434ce50f36 100644
--- a/Documentation/devicetree/bindings/rng/omap_rng.txt
+++ b/Documentation/devicetree/bindings/rng/omap_rng.txt
@@ -13,7 +13,12 @@ Required properties:
- interrupts : the interrupt number for the RNG module.
Used for "ti,omap4-rng" and "inside-secure,safexcel-eip76"
- clocks: the trng clock source. Only mandatory for the
- "inside-secure,safexcel-eip76" compatible.
+ "inside-secure,safexcel-eip76" compatible, the second clock is
+ needed for the Armada 7K/8K SoCs
+- clock-names: mandatory if there is a second clock, in this case the
+ name must be "core" for the first clock and "reg" for the second
+ one
+
Example:
/* AM335x */
diff --git a/drivers/char/hw_random/omap-rng.c b/drivers/char/hw_random/omap-rng.c
index 159d4a1347b8..b65ff6962899 100644
--- a/drivers/char/hw_random/omap-rng.c
+++ b/drivers/char/hw_random/omap-rng.c
@@ -150,6 +150,7 @@ struct omap_rng_dev {
const struct omap_rng_pdata *pdata;
struct hwrng rng;
struct clk *clk;
+ struct clk *clk_reg;
};
static inline u32 omap_rng_read(struct omap_rng_dev *priv, u16 reg)
@@ -480,6 +481,19 @@ static int omap_rng_probe(struct platform_device *pdev)
}
}
+ priv->clk_reg = devm_clk_get(&pdev->dev, "reg");
+ if (IS_ERR(priv->clk_reg) && PTR_ERR(priv->clk_reg) == -EPROBE_DEFER)
+ return -EPROBE_DEFER;
+ if (!IS_ERR(priv->clk_reg)) {
+ ret = clk_prepare_enable(priv->clk_reg);
+ if (ret) {
+ dev_err(&pdev->dev,
+ "Unable to enable the register clk: %d\n",
+ ret);
+ goto err_register;
+ }
+ }
+
ret = (dev->of_node) ? of_get_omap_rng_device_details(priv, pdev) :
get_omap_rng_device_details(priv);
if (ret)
@@ -499,6 +513,7 @@ static int omap_rng_probe(struct platform_device *pdev)
pm_runtime_put_sync(&pdev->dev);
pm_runtime_disable(&pdev->dev);
+ clk_disable_unprepare(priv->clk_reg);
clk_disable_unprepare(priv->clk);
err_ioremap:
dev_err(dev, "initialization failed.\n");
@@ -517,6 +532,7 @@ static int omap_rng_remove(struct platform_device *pdev)
pm_runtime_disable(&pdev->dev);
clk_disable_unprepare(priv->clk);
+ clk_disable_unprepare(priv->clk_reg);
return 0;
}
--
2.16.1
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH 0/2] hwrng: omap: Fix clock resource for Armada 7K/8K
2018-02-28 14:27 [PATCH 0/2] hwrng: omap: Fix clock resource for Armada 7K/8K Gregory CLEMENT
2018-02-28 14:27 ` [PATCH 1/2] hwrng: omap - Remove useless test before clk_disable_unprepare Gregory CLEMENT
2018-02-28 14:27 ` [PATCH 2/2] hwrng: omap - Fix clock resource by adding a register clock Gregory CLEMENT
@ 2018-03-09 15:18 ` Herbert Xu
2 siblings, 0 replies; 4+ messages in thread
From: Herbert Xu @ 2018-03-09 15:18 UTC (permalink / raw)
To: Gregory CLEMENT
Cc: Andrew Lunn, Deepak Saxena, Jason Cooper, Antoine Tenart,
Hanna Hawa, Omri Itach, Nadav Haklai, Igal Liberman,
Shadi Ammouri, linux-crypto, Thomas Petazzoni, Miquèl Raynal,
Marcin Wojtas, linux-arm-kernel, Sebastian Hesselbarth
On Wed, Feb 28, 2018 at 03:27:21PM +0100, Gregory CLEMENT wrote:
> Hi,
>
> This short series fixes the way the clocks are used for the SafeXcel
> IP-76 controller embedded in the Marvell Armada 7K/8K SoCs. On these
> SoCs a second one is needed in order to clock the registers. It was
> not noticed until now because we relied on the bootloader and also
> because the clock driver was wrong.
>
> Thanks to this fix, it would be possible to fix the clock driver
> without introducing a regression.
>
> The first patch is just a small cleanup found when I wrote the main
> patch.
>
> Gregory CLEMENT (2):
> hwrng: omap - Remove useless test before clk_disable_unprepare
> hwrng: omap - Fix clock resource by adding a register clock
>
> Documentation/devicetree/bindings/rng/omap_rng.txt | 7 ++++++-
> drivers/char/hw_random/omap-rng.c | 22 ++++++++++++++++++----
> 2 files changed, 24 insertions(+), 5 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] 4+ messages in thread