summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Walleij <linus.walleij@linaro.org>2013-09-05 07:29:18 (GMT)
committerTony Lindgren <tony@atomide.com>2013-10-03 18:08:56 (GMT)
commitde26804b60d460a5ad13400d86c367ed16c6393d (patch)
tree0a832fd2a7e6b0df0eded4e7a65be7bd358f8203
parent15c03dd4859ab16f9212238f29dd315654aa94f6 (diff)
downloadlinux-fsl-qoriq-de26804b60d460a5ad13400d86c367ed16c6393d.tar.xz
ARM: OMAP2+: throw the die id into the entropy pool
At least eight bytes of this number are totally unique for the device it seems, so this is a perfect candidate for feeding the entropy pool. One byte more or less of constants does not matter so feed in the entire OID struct. This fixes the issue of similar devices initializing to the same state initially. Further registers could be added too, such as OMAP4 CONTROL_STD_FUSE_OPP* and CONTROL_DPLL_NWELL_TRIM* registers, but those vary based on the SoC generation. Cc: Theodore Ts'o <tytso@mit.edu> Cc: Paul Walmsley <paul@pwsan.com> Reviewed-by: Kevin Hilman <khilman@linaro.org> Reviewed-by: Paul Walmsley <paul@pwsan.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> [tony@atomide.com: updated comments per mailing list discussion] Signed-off-by: Tony Lindgren <tony@atomide.com>
-rw-r--r--arch/arm/mach-omap2/id.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c
index 0289adc..ef32d11 100644
--- a/arch/arm/mach-omap2/id.c
+++ b/arch/arm/mach-omap2/id.c
@@ -18,6 +18,7 @@
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/io.h>
+#include <linux/random.h>
#include <linux/slab.h>
#ifdef CONFIG_SOC_BUS
@@ -130,6 +131,17 @@ void omap_get_die_id(struct omap_die_id *odi)
odi->id_3 = read_tap_reg(OMAP_TAP_DIE_ID_3);
}
+static int __init omap_feed_randpool(void)
+{
+ struct omap_die_id odi;
+
+ /* Throw the die ID into the entropy pool at boot */
+ omap_get_die_id(&odi);
+ add_device_randomness(&odi, sizeof(odi));
+ return 0;
+}
+omap_device_initcall(omap_feed_randpool);
+
void __init omap2xxx_check_revision(void)
{
int i, j;