Commit d7390430 authored by Komal Shah's avatar Komal Shah Committed by Tony Lindgren

[PATCH] ARM: OMAP: 24xx RNG

Added OMAP24xx RNG support
parent 4d527815
...@@ -659,15 +659,13 @@ config HW_RANDOM ...@@ -659,15 +659,13 @@ config HW_RANDOM
If unsure, say N. If unsure, say N.
config OMAP16XX_RNG config OMAP_RNG
tristate "OMAP16xx Random Number Generator support" tristate "OMAP Random Number Generator support"
depends on ARCH_OMAP16XX depends on ARCH_OMAP16XX || ARCH_OMAP24XX
---help--- ---help---
This driver provides kernel-side support for the Random Number This driver provides kernel-side support for the Random Number
Generator hardware found on OMAP16xx multimedia processors. Generator hardware found on OMAP16xx and OMAP24xx multimedia
processors.
To compile this driver as a module, choose M here: the
module will be called hw_random.
If unsure, say N. If unsure, say N.
......
...@@ -75,7 +75,7 @@ obj-$(CONFIG_TOSHIBA) += toshiba.o ...@@ -75,7 +75,7 @@ obj-$(CONFIG_TOSHIBA) += toshiba.o
obj-$(CONFIG_I8K) += i8k.o obj-$(CONFIG_I8K) += i8k.o
obj-$(CONFIG_DS1620) += ds1620.o obj-$(CONFIG_DS1620) += ds1620.o
obj-$(CONFIG_HW_RANDOM) += hw_random.o obj-$(CONFIG_HW_RANDOM) += hw_random.o
obj-$(CONFIG_OMAP16XX_RNG) += omap16xx-rng.o obj-$(CONFIG_OMAP_RNG) += omap-rng.o
obj-$(CONFIG_FTAPE) += ftape/ obj-$(CONFIG_FTAPE) += ftape/
obj-$(CONFIG_COBALT_LCD) += lcd.o obj-$(CONFIG_COBALT_LCD) += lcd.o
obj-$(CONFIG_PPDEV) += ppdev.o obj-$(CONFIG_PPDEV) += ppdev.o
......
/* /*
* drivers/char/omap16xx-rng.c * drivers/char/omap-rng.c
* *
* Copyright (C) 2005 Nokia Corporation * Copyright (C) 2005 Nokia Corporation
* Author: Juha Yrjl <juha.yrjola@nokia.com> * Author: Juha Yrjl <juha.yrjola@nokia.com>
* *
* OMAP16xx Random Number Generator driver * OMAP16xx and OMAP24xx Random Number Generator driver
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as * it under the terms of the GNU General Public License version 2 as
...@@ -15,9 +15,17 @@ ...@@ -15,9 +15,17 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/random.h> #include <linux/random.h>
#include <linux/err.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/hardware/clock.h>
#if defined (CONFIG_ARCH_OMAP16XX)
#define RNG_BASE 0xfffe5000 #define RNG_BASE 0xfffe5000
#endif
#if defined (CONFIG_ARCH_OMAP24XX)
#define RNG_BASE 0x480A0000
#endif
#define RNG_OUT_REG 0x00 #define RNG_OUT_REG 0x00
#define RNG_STAT_REG 0x04 #define RNG_STAT_REG 0x04
#define RNG_REV_REG 0x3c #define RNG_REV_REG 0x3c
...@@ -27,6 +35,8 @@ ...@@ -27,6 +35,8 @@
static u32 rng_base = io_p2v(RNG_BASE); static u32 rng_base = io_p2v(RNG_BASE);
static struct clk *rng_ick = NULL;
static u32 rng_read_reg(int reg) static u32 rng_read_reg(int reg)
{ {
return __raw_readl(rng_base + reg); return __raw_readl(rng_base + reg);
...@@ -50,10 +60,19 @@ static void rng_feed_entropy(int count) ...@@ -50,10 +60,19 @@ static void rng_feed_entropy(int count)
static int __init rng_init(void) static int __init rng_init(void)
{ {
if (!cpu_is_omap16xx()) if (!cpu_is_omap16xx() && !cpu_is_omap24xx())
return -ENODEV; return -ENODEV;
printk("OMAP16xx Random Number Generator ver. %02x\n", if (cpu_is_omap24xx()) {
rng_ick = clk_get(NULL, "rng_ick");
if (IS_ERR(rng_ick)) {
printk(KERN_ERR "omap-rng.c: Could not get rng_ick\n");
return PTR_ERR(rng_ick);
}
clk_use(rng_ick);
}
printk("OMAP Random Number Generator ver. %02x\n",
rng_read_reg(RNG_REV_REG)); rng_read_reg(RNG_REV_REG));
rng_write_reg(RNG_MASK_REG, 0x00000001); rng_write_reg(RNG_MASK_REG, 0x00000001);
rng_feed_entropy(ENTROPY_WORD_COUNT); rng_feed_entropy(ENTROPY_WORD_COUNT);
...@@ -62,14 +81,4 @@ static int __init rng_init(void) ...@@ -62,14 +81,4 @@ static int __init rng_init(void)
return 0; return 0;
} }
late_initcall(rng_init);
static void __exit rng_cleanup(void)
{
}
MODULE_AUTHOR("Juha Yrjl");
MODULE_DESCRIPTION("OMAP16xx H/W Random Number Generator (RNG) driver");
MODULE_LICENSE("GPL");
module_init(rng_init);
module_exit(rng_cleanup);
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment