Commit 85962d22 authored by Corentin LABBE's avatar Corentin LABBE Committed by Herbert Xu
Browse files

hwrng: amd - Convert to new hwrng read() API



This patch convert the hwrng interface used by amd768-rng to its new API
by replacing data_read()/data_present() by read().

Signed-off-by: default avatarLABBE Corentin <clabbe.montjoie@gmail.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 3c343a37
Loading
Loading
Loading
Loading
+28 −19
Original line number Diff line number Diff line
@@ -58,27 +58,37 @@ struct amd768_priv {
	u32 pmbase;
};

static int amd_rng_data_present(struct hwrng *rng, int wait)
static int amd_rng_read(struct hwrng *rng, void *buf, size_t max, bool wait)
{
	u32 *data = buf;
	struct amd768_priv *priv = (struct amd768_priv *)rng->priv;
	int data, i;
	size_t read = 0;
	/* We will wait at maximum one time per read */
	int timeout = max / 4 + 1;

	for (i = 0; i < 20; i++) {
		data = !!(ioread32(priv->iobase + RNGDONE) & 1);
		if (data || !wait)
			break;
		udelay(10);
	}
	return data;
	/*
	 * RNG data is available when RNGDONE is set to 1
	 * New random numbers are generated approximately 128 microseconds
	 * after RNGDATA is read
	 */
	while (read < max) {
		if (ioread32(priv->iobase + RNGDONE) == 0) {
			if (wait) {
				/* Delay given by datasheet */
				usleep_range(128, 196);
				if (timeout-- == 0)
					return read;
			} else {
				return 0;
			}

static int amd_rng_data_read(struct hwrng *rng, u32 *data)
{
	struct amd768_priv *priv = (struct amd768_priv *)rng->priv;

		} else {
			*data = ioread32(priv->iobase + RNGDATA);
			data++;
			read += 4;
		}
	}

	return 4;
	return read;
}

static int amd_rng_init(struct hwrng *rng)
@@ -111,8 +121,7 @@ static struct hwrng amd_rng = {
	.name		= "amd",
	.init		= amd_rng_init,
	.cleanup	= amd_rng_cleanup,
	.data_present	= amd_rng_data_present,
	.data_read	= amd_rng_data_read,
	.read		= amd_rng_read,
};

static int __init mod_init(void)