Commit 654f57bf authored by David Daney's avatar David Daney Committed by Ralf Baechle

MIPS: Probe watch registers and report configuration.

Probe for watch register characteristics, and report them in /proc/cpuinfo.
Signed-off-by: default avatarDavid Daney <ddaney@avtrex.com>
Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 6aa3524c
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include <asm/fpu.h> #include <asm/fpu.h>
#include <asm/mipsregs.h> #include <asm/mipsregs.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/watch.h>
/* /*
* Not all of the MIPS CPUs have the "wait" instruction available. Moreover, * Not all of the MIPS CPUs have the "wait" instruction available. Moreover,
...@@ -677,6 +678,7 @@ static inline void spram_config(void) {} ...@@ -677,6 +678,7 @@ static inline void spram_config(void) {}
static inline void cpu_probe_mips(struct cpuinfo_mips *c) static inline void cpu_probe_mips(struct cpuinfo_mips *c)
{ {
decode_configs(c); decode_configs(c);
mips_probe_watch_registers(c);
switch (c->processor_id & 0xff00) { switch (c->processor_id & 0xff00) {
case PRID_IMP_4KC: case PRID_IMP_4KC:
c->cputype = CPU_4KC; c->cputype = CPU_4KC;
......
...@@ -23,6 +23,7 @@ static int show_cpuinfo(struct seq_file *m, void *v) ...@@ -23,6 +23,7 @@ static int show_cpuinfo(struct seq_file *m, void *v)
unsigned int version = cpu_data[n].processor_id; unsigned int version = cpu_data[n].processor_id;
unsigned int fp_vers = cpu_data[n].fpu_id; unsigned int fp_vers = cpu_data[n].fpu_id;
char fmt [64]; char fmt [64];
int i;
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
if (!cpu_isset(n, cpu_online_map)) if (!cpu_isset(n, cpu_online_map))
...@@ -50,8 +51,16 @@ static int show_cpuinfo(struct seq_file *m, void *v) ...@@ -50,8 +51,16 @@ static int show_cpuinfo(struct seq_file *m, void *v)
seq_printf(m, "tlb_entries\t\t: %d\n", cpu_data[n].tlbsize); seq_printf(m, "tlb_entries\t\t: %d\n", cpu_data[n].tlbsize);
seq_printf(m, "extra interrupt vector\t: %s\n", seq_printf(m, "extra interrupt vector\t: %s\n",
cpu_has_divec ? "yes" : "no"); cpu_has_divec ? "yes" : "no");
seq_printf(m, "hardware watchpoint\t: %s\n", seq_printf(m, "hardware watchpoint\t: %s",
cpu_has_watch ? "yes" : "no"); cpu_has_watch ? "yes, " : "no\n");
if (cpu_has_watch) {
seq_printf(m, "count: %d, address/irw mask: [",
cpu_data[n].watch_reg_count);
for (i = 0; i < cpu_data[n].watch_reg_count; i++)
seq_printf(m, "%s0x%04x", i ? ", " : "" ,
cpu_data[n].watch_reg_masks[i]);
seq_printf(m, "]\n");
}
seq_printf(m, "ASEs implemented\t:%s%s%s%s%s%s\n", seq_printf(m, "ASEs implemented\t:%s%s%s%s%s%s\n",
cpu_has_mips16 ? " mips16" : "", cpu_has_mips16 ? " mips16" : "",
cpu_has_mdmx ? " mdmx" : "", cpu_has_mdmx ? " mdmx" : "",
......
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