hwrng: stm32 - cache device pointer in struct stm32_rng_private
Place device pointer in struct stm32_rng_private and use it all over the place to get rid of the horrible type casts throughout the driver. No functional change. Acked-by: Gatien Chevallier <gatien.chevallier@foss.st.com> Signed-off-by: Marek Vasut <marex@denx.de> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
@@ -70,6 +70,7 @@ struct stm32_rng_config {
|
||||
|
||||
struct stm32_rng_private {
|
||||
struct hwrng rng;
|
||||
struct device *dev;
|
||||
void __iomem *base;
|
||||
struct clk *clk;
|
||||
struct reset_control *rst;
|
||||
@@ -99,7 +100,7 @@ struct stm32_rng_private {
|
||||
*/
|
||||
static int stm32_rng_conceal_seed_error_cond_reset(struct stm32_rng_private *priv)
|
||||
{
|
||||
struct device *dev = (struct device *)priv->rng.priv;
|
||||
struct device *dev = priv->dev;
|
||||
u32 sr = readl_relaxed(priv->base + RNG_SR);
|
||||
u32 cr = readl_relaxed(priv->base + RNG_CR);
|
||||
int err;
|
||||
@@ -171,7 +172,7 @@ static int stm32_rng_conceal_seed_error(struct hwrng *rng)
|
||||
{
|
||||
struct stm32_rng_private *priv = container_of(rng, struct stm32_rng_private, rng);
|
||||
|
||||
dev_dbg((struct device *)priv->rng.priv, "Concealing seed error\n");
|
||||
dev_dbg(priv->dev, "Concealing seed error\n");
|
||||
|
||||
if (priv->data->has_cond_reset)
|
||||
return stm32_rng_conceal_seed_error_cond_reset(priv);
|
||||
@@ -187,7 +188,7 @@ static int stm32_rng_read(struct hwrng *rng, void *data, size_t max, bool wait)
|
||||
int retval = 0, err = 0;
|
||||
u32 sr;
|
||||
|
||||
retval = pm_runtime_resume_and_get((struct device *)priv->rng.priv);
|
||||
retval = pm_runtime_resume_and_get(priv->dev);
|
||||
if (retval)
|
||||
return retval;
|
||||
|
||||
@@ -206,8 +207,7 @@ static int stm32_rng_read(struct hwrng *rng, void *data, size_t max, bool wait)
|
||||
sr, sr,
|
||||
10, 50000);
|
||||
if (err) {
|
||||
dev_err((struct device *)priv->rng.priv,
|
||||
"%s: timeout %x!\n", __func__, sr);
|
||||
dev_err(priv->dev, "%s: timeout %x!\n", __func__, sr);
|
||||
break;
|
||||
}
|
||||
} else if (!sr) {
|
||||
@@ -220,8 +220,7 @@ static int stm32_rng_read(struct hwrng *rng, void *data, size_t max, bool wait)
|
||||
err = stm32_rng_conceal_seed_error(rng);
|
||||
i++;
|
||||
if (err && i > RNG_NB_RECOVER_TRIES) {
|
||||
dev_err((struct device *)priv->rng.priv,
|
||||
"Couldn't recover from seed error\n");
|
||||
dev_err(priv->dev, "Couldn't recover from seed error\n");
|
||||
retval = -ENOTRECOVERABLE;
|
||||
goto exit_rpm;
|
||||
}
|
||||
@@ -239,8 +238,7 @@ static int stm32_rng_read(struct hwrng *rng, void *data, size_t max, bool wait)
|
||||
err = stm32_rng_conceal_seed_error(rng);
|
||||
i++;
|
||||
if (err && i > RNG_NB_RECOVER_TRIES) {
|
||||
dev_err((struct device *)priv->rng.priv,
|
||||
"Couldn't recover from seed error");
|
||||
dev_err(priv->dev, "Couldn't recover from seed error");
|
||||
retval = -ENOTRECOVERABLE;
|
||||
goto exit_rpm;
|
||||
}
|
||||
@@ -255,8 +253,8 @@ static int stm32_rng_read(struct hwrng *rng, void *data, size_t max, bool wait)
|
||||
}
|
||||
|
||||
exit_rpm:
|
||||
pm_runtime_mark_last_busy((struct device *) priv->rng.priv);
|
||||
pm_runtime_put_sync_autosuspend((struct device *) priv->rng.priv);
|
||||
pm_runtime_mark_last_busy(priv->dev);
|
||||
pm_runtime_put_sync_autosuspend(priv->dev);
|
||||
|
||||
return retval || !wait ? retval : -EIO;
|
||||
}
|
||||
@@ -331,8 +329,7 @@ static int stm32_rng_init(struct hwrng *rng)
|
||||
10, 50000);
|
||||
if (err) {
|
||||
clk_disable_unprepare(priv->clk);
|
||||
dev_err((struct device *)priv->rng.priv,
|
||||
"%s: timeout %x!\n", __func__, reg);
|
||||
dev_err(priv->dev, "%s: timeout %x!\n", __func__, reg);
|
||||
return -EINVAL;
|
||||
}
|
||||
} else {
|
||||
@@ -360,8 +357,7 @@ static int stm32_rng_init(struct hwrng *rng)
|
||||
10, 100000);
|
||||
if (err || (reg & ~RNG_SR_DRDY)) {
|
||||
clk_disable_unprepare(priv->clk);
|
||||
dev_err((struct device *)priv->rng.priv,
|
||||
"%s: timeout:%x SR: %x!\n", __func__, err, reg);
|
||||
dev_err(priv->dev, "%s: timeout:%x SR: %x!\n", __func__, err, reg);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -467,8 +463,7 @@ static int __maybe_unused stm32_rng_resume(struct device *dev)
|
||||
|
||||
if (err) {
|
||||
clk_disable_unprepare(priv->clk);
|
||||
dev_err((struct device *)priv->rng.priv,
|
||||
"%s: timeout:%x CR: %x!\n", __func__, err, reg);
|
||||
dev_err(priv->dev, "%s: timeout:%x CR: %x!\n", __func__, err, reg);
|
||||
return -EINVAL;
|
||||
}
|
||||
} else {
|
||||
@@ -543,6 +538,7 @@ static int stm32_rng_probe(struct platform_device *ofdev)
|
||||
|
||||
priv->ced = of_property_read_bool(np, "clock-error-detect");
|
||||
priv->lock_conf = of_property_read_bool(np, "st,rng-lock-conf");
|
||||
priv->dev = dev;
|
||||
|
||||
priv->data = of_device_get_match_data(dev);
|
||||
if (!priv->data)
|
||||
@@ -553,7 +549,6 @@ static int stm32_rng_probe(struct platform_device *ofdev)
|
||||
priv->rng.name = dev_driver_string(dev);
|
||||
priv->rng.init = stm32_rng_init;
|
||||
priv->rng.read = stm32_rng_read;
|
||||
priv->rng.priv = (unsigned long) dev;
|
||||
priv->rng.quality = 900;
|
||||
|
||||
pm_runtime_set_autosuspend_delay(dev, 100);
|
||||
|
||||
Reference in New Issue
Block a user