2 * arch/s390/kernel/processor.c
4 * Copyright IBM Corp. 2008
5 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com)
8 #define KMSG_COMPONENT "cpu"
9 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
11 #include <linux/kernel.h>
12 #include <linux/init.h>
13 #include <linux/smp.h>
14 #include <linux/seq_file.h>
15 #include <linux/delay.h>
18 #include <asm/lowcore.h>
19 #include <asm/param.h>
21 void __cpuinit
print_cpu_info(struct cpuinfo_S390
*cpuinfo
)
23 pr_info("Processor %d started, address %d, identification %06X\n",
24 cpuinfo
->cpu_nr
, cpuinfo
->cpu_addr
, cpuinfo
->cpu_id
.ident
);
28 * show_cpuinfo - Get information on one CPU for use by procfs.
31 static int show_cpuinfo(struct seq_file
*m
, void *v
)
33 static const char *hwcap_str
[8] = {
34 "esan3", "zarch", "stfle", "msa", "ldisp", "eimm", "dfp",
37 struct cpuinfo_S390
*cpuinfo
;
38 unsigned long n
= (unsigned long) v
- 1;
41 s390_adjust_jiffies();
44 seq_printf(m
, "vendor_id : IBM/S390\n"
46 "bogomips per cpu: %lu.%02lu\n",
47 num_online_cpus(), loops_per_jiffy
/(500000/HZ
),
48 (loops_per_jiffy
/(5000/HZ
))%100);
49 seq_puts(m
, "features\t: ");
50 for (i
= 0; i
< 8; i
++)
51 if (hwcap_str
[i
] && (elf_hwcap
& (1UL << i
)))
52 seq_printf(m
, "%s ", hwcap_str
[i
]);
58 if (smp_processor_id() == n
)
59 cpuinfo
= &S390_lowcore
.cpu_data
;
61 cpuinfo
= &lowcore_ptr
[n
]->cpu_data
;
63 cpuinfo
= &S390_lowcore
.cpu_data
;
65 seq_printf(m
, "processor %li: "
67 "identification = %06X, "
69 n
, cpuinfo
->cpu_id
.version
,
70 cpuinfo
->cpu_id
.ident
,
71 cpuinfo
->cpu_id
.machine
);
77 static void *c_start(struct seq_file
*m
, loff_t
*pos
)
79 return *pos
< NR_CPUS
? (void *)((unsigned long) *pos
+ 1) : NULL
;
82 static void *c_next(struct seq_file
*m
, void *v
, loff_t
*pos
)
85 return c_start(m
, pos
);
88 static void c_stop(struct seq_file
*m
, void *v
)
92 const struct seq_operations cpuinfo_op
= {