|
@@ -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)
|
|
*/
|
|
*/
|
|
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);
|