Commit 73c7c8f6 authored by Alexandre Ghiti's avatar Alexandre Ghiti Committed by Palmer Dabbelt

riscv: Use pgtable_l4_enabled to output mmu_type in cpuinfo

Now that the mmu type is determined at runtime using SATP
characteristic, use the global variable pgtable_l4_enabled to output
mmu type of the processor through /proc/cpuinfo instead of relying on
device tree infos.
Signed-off-by: default avatarAlexandre Ghiti <alexandre.ghiti@canonical.com>
Reviewed-by: default avatarAnup Patel <anup@brainfault.org>
Reviewed-by: default avatarPalmer Dabbelt <palmerdabbelt@google.com>
Signed-off-by: default avatarPalmer Dabbelt <palmer@rivosinc.com>
parent e8a62cc2
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/of.h> #include <linux/of.h>
#include <asm/smp.h> #include <asm/smp.h>
#include <asm/pgtable.h>
/* /*
* Returns the hart ID of the given device tree node, or -ENODEV if the node * Returns the hart ID of the given device tree node, or -ENODEV if the node
...@@ -71,18 +72,19 @@ static void print_isa(struct seq_file *f, const char *isa) ...@@ -71,18 +72,19 @@ static void print_isa(struct seq_file *f, const char *isa)
seq_puts(f, "\n"); seq_puts(f, "\n");
} }
static void print_mmu(struct seq_file *f, const char *mmu_type) static void print_mmu(struct seq_file *f)
{ {
char sv_type[16];
#if defined(CONFIG_32BIT) #if defined(CONFIG_32BIT)
if (strcmp(mmu_type, "riscv,sv32") != 0) strncpy(sv_type, "sv32", 5);
return;
#elif defined(CONFIG_64BIT) #elif defined(CONFIG_64BIT)
if (strcmp(mmu_type, "riscv,sv39") != 0 && if (pgtable_l4_enabled)
strcmp(mmu_type, "riscv,sv48") != 0) strncpy(sv_type, "sv48", 5);
return; else
strncpy(sv_type, "sv39", 5);
#endif #endif
seq_printf(f, "mmu\t\t: %s\n", sv_type);
seq_printf(f, "mmu\t\t: %s\n", mmu_type+6);
} }
static void *c_start(struct seq_file *m, loff_t *pos) static void *c_start(struct seq_file *m, loff_t *pos)
...@@ -107,14 +109,13 @@ static int c_show(struct seq_file *m, void *v) ...@@ -107,14 +109,13 @@ static int c_show(struct seq_file *m, void *v)
{ {
unsigned long cpu_id = (unsigned long)v - 1; unsigned long cpu_id = (unsigned long)v - 1;
struct device_node *node = of_get_cpu_node(cpu_id, NULL); struct device_node *node = of_get_cpu_node(cpu_id, NULL);
const char *compat, *isa, *mmu; const char *compat, *isa;
seq_printf(m, "processor\t: %lu\n", cpu_id); seq_printf(m, "processor\t: %lu\n", cpu_id);
seq_printf(m, "hart\t\t: %lu\n", cpuid_to_hartid_map(cpu_id)); seq_printf(m, "hart\t\t: %lu\n", cpuid_to_hartid_map(cpu_id));
if (!of_property_read_string(node, "riscv,isa", &isa)) if (!of_property_read_string(node, "riscv,isa", &isa))
print_isa(m, isa); print_isa(m, isa);
if (!of_property_read_string(node, "mmu-type", &mmu)) print_mmu(m);
print_mmu(m, mmu);
if (!of_property_read_string(node, "compatible", &compat) if (!of_property_read_string(node, "compatible", &compat)
&& strcmp(compat, "riscv")) && strcmp(compat, "riscv"))
seq_printf(m, "uarch\t\t: %s\n", compat); seq_printf(m, "uarch\t\t: %s\n", compat);
......
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