Commit 1ed4714f authored by Helge Deller's avatar Helge Deller

parisc/random: Add machine specific randomness

Add some machine-specific information like values of cr16 cycle counter,
machine-specific software ID and machine model to the random generator.
Signed-off-by: default avatarHelge Deller <deller@gmx.de>
parent d2883fa1
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/random.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/cpu.h> #include <linux/cpu.h>
#include <asm/param.h> #include <asm/param.h>
...@@ -237,28 +238,45 @@ static int processor_probe(struct parisc_device *dev) ...@@ -237,28 +238,45 @@ static int processor_probe(struct parisc_device *dev)
*/ */
void __init collect_boot_cpu_data(void) void __init collect_boot_cpu_data(void)
{ {
unsigned long cr16_seed;
memset(&boot_cpu_data, 0, sizeof(boot_cpu_data)); memset(&boot_cpu_data, 0, sizeof(boot_cpu_data));
cr16_seed = get_cycles();
add_device_randomness(&cr16_seed, sizeof(cr16_seed));
boot_cpu_data.cpu_hz = 100 * PAGE0->mem_10msec; /* Hz of this PARISC */ boot_cpu_data.cpu_hz = 100 * PAGE0->mem_10msec; /* Hz of this PARISC */
/* get CPU-Model Information... */ /* get CPU-Model Information... */
#define p ((unsigned long *)&boot_cpu_data.pdc.model) #define p ((unsigned long *)&boot_cpu_data.pdc.model)
if (pdc_model_info(&boot_cpu_data.pdc.model) == PDC_OK) if (pdc_model_info(&boot_cpu_data.pdc.model) == PDC_OK) {
printk(KERN_INFO printk(KERN_INFO
"model %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n", "model %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8]); p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8]);
add_device_randomness(&boot_cpu_data.pdc.model,
sizeof(boot_cpu_data.pdc.model));
}
#undef p #undef p
if (pdc_model_versions(&boot_cpu_data.pdc.versions, 0) == PDC_OK) if (pdc_model_versions(&boot_cpu_data.pdc.versions, 0) == PDC_OK) {
printk(KERN_INFO "vers %08lx\n", printk(KERN_INFO "vers %08lx\n",
boot_cpu_data.pdc.versions); boot_cpu_data.pdc.versions);
if (pdc_model_cpuid(&boot_cpu_data.pdc.cpuid) == PDC_OK) add_device_randomness(&boot_cpu_data.pdc.versions,
sizeof(boot_cpu_data.pdc.versions));
}
if (pdc_model_cpuid(&boot_cpu_data.pdc.cpuid) == PDC_OK) {
printk(KERN_INFO "CPUID vers %ld rev %ld (0x%08lx)\n", printk(KERN_INFO "CPUID vers %ld rev %ld (0x%08lx)\n",
(boot_cpu_data.pdc.cpuid >> 5) & 127, (boot_cpu_data.pdc.cpuid >> 5) & 127,
boot_cpu_data.pdc.cpuid & 31, boot_cpu_data.pdc.cpuid & 31,
boot_cpu_data.pdc.cpuid); boot_cpu_data.pdc.cpuid);
add_device_randomness(&boot_cpu_data.pdc.cpuid,
sizeof(boot_cpu_data.pdc.cpuid));
}
if (pdc_model_capabilities(&boot_cpu_data.pdc.capabilities) == PDC_OK) if (pdc_model_capabilities(&boot_cpu_data.pdc.capabilities) == PDC_OK)
printk(KERN_INFO "capabilities 0x%lx\n", printk(KERN_INFO "capabilities 0x%lx\n",
boot_cpu_data.pdc.capabilities); boot_cpu_data.pdc.capabilities);
......
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