From patchwork Tue Jun 12 21:07:47 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: ARM: mxc-rnga: fix data_present API Date: Tue, 12 Jun 2012 11:07:47 -0000 From: =?utf-8?q?Beno=C3=AEt_Th=C3=A9baudeau?= X-Patchwork-Id: 164499 Message-Id: <1795608889.2533817.1339535267600.JavaMail.root@advansee.com> To: Matt Mackall , Herbert Xu , Sascha Hauer , linux-arm-kernel@lists.infradead.org Cc: Alan Carvalho de Assis Cc: Matt Mackall Cc: Herbert Xu Cc: Sascha Hauer Cc: Alan Carvalho de Assis Cc: Signed-off-by: Benoît Thébaudeau --- .../drivers/char/hw_random/mxc-rnga.c | 22 +++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git linux-next-HEAD-c90e5d2.orig/drivers/char/hw_random/mxc-rnga.c linux-next-HEAD-c90e5d2/drivers/char/hw_random/mxc-rnga.c index 187c6be..2924253 100644 --- linux-next-HEAD-c90e5d2.orig/drivers/char/hw_random/mxc-rnga.c +++ linux-next-HEAD-c90e5d2/drivers/char/hw_random/mxc-rnga.c @@ -24,6 +24,7 @@ #include #include #include +#include #include /* RNGA Registers */ @@ -60,16 +61,21 @@ static struct platform_device *rng_dev; -static int mxc_rnga_data_present(struct hwrng *rng) +static int mxc_rnga_data_present(struct hwrng *rng, int wait) { - int level; void __iomem *rng_base = (void __iomem *)rng->priv; - - /* how many random numbers is in FIFO? [0-16] */ - level = ((__raw_readl(rng_base + RNGA_STATUS) & - RNGA_STATUS_LEVEL_MASK) >> 8); - - return level > 0 ? 1 : 0; + int level, data, i; + + for (i = 0; i < 20; i++) { + /* how many random numbers is in FIFO? [0-16] */ + level = ((__raw_readl(rng_base + RNGA_STATUS) & + RNGA_STATUS_LEVEL_MASK) >> 8); + data = level > 0 ? 1 : 0; + if (data || !wait) + break; + udelay(10); + } + return data; } static int mxc_rnga_data_read(struct hwrng *rng, u32 * data)