Commit 771c7faa authored by Marek Vasut's avatar Marek Vasut Committed by Herbert Xu
Browse files

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: default avatarGatien Chevallier <gatien.chevallier@foss.st.com>
Signed-off-by: default avatarMarek Vasut <marex@denx.de>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent f134d5dc
Loading
Loading
Loading
Loading
+13 −18
Original line number Diff line number Diff line
@@ -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);