mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	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: Alexandre Ghiti <alexandre.ghiti@canonical.com> Reviewed-by: Anup Patel <anup@brainfault.org> Reviewed-by: Palmer Dabbelt <palmerdabbelt@google.com> Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
This commit is contained in:
		
							parent
							
								
									e8a62cc26d
								
							
						
					
					
						commit
						73c7c8f68e
					
				
					 1 changed files with 14 additions and 13 deletions
				
			
		| 
						 | 
				
			
			@ -7,6 +7,7 @@
 | 
			
		|||
#include <linux/seq_file.h>
 | 
			
		||||
#include <linux/of.h>
 | 
			
		||||
#include <asm/smp.h>
 | 
			
		||||
#include <asm/pgtable.h>
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * 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)
 | 
			
		|||
	seq_puts(f, "\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void print_mmu(struct seq_file *f, const char *mmu_type)
 | 
			
		||||
static void print_mmu(struct seq_file *f)
 | 
			
		||||
{
 | 
			
		||||
#if defined(CONFIG_32BIT)
 | 
			
		||||
	if (strcmp(mmu_type, "riscv,sv32") != 0)
 | 
			
		||||
		return;
 | 
			
		||||
#elif defined(CONFIG_64BIT)
 | 
			
		||||
	if (strcmp(mmu_type, "riscv,sv39") != 0 &&
 | 
			
		||||
	    strcmp(mmu_type, "riscv,sv48") != 0)
 | 
			
		||||
		return;
 | 
			
		||||
#endif
 | 
			
		||||
	char sv_type[16];
 | 
			
		||||
 | 
			
		||||
	seq_printf(f, "mmu\t\t: %s\n", mmu_type+6);
 | 
			
		||||
#if defined(CONFIG_32BIT)
 | 
			
		||||
	strncpy(sv_type, "sv32", 5);
 | 
			
		||||
#elif defined(CONFIG_64BIT)
 | 
			
		||||
	if (pgtable_l4_enabled)
 | 
			
		||||
		strncpy(sv_type, "sv48", 5);
 | 
			
		||||
	else
 | 
			
		||||
		strncpy(sv_type, "sv39", 5);
 | 
			
		||||
#endif
 | 
			
		||||
	seq_printf(f, "mmu\t\t: %s\n", sv_type);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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)
 | 
			
		|||
{
 | 
			
		||||
	unsigned long cpu_id = (unsigned long)v - 1;
 | 
			
		||||
	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, "hart\t\t: %lu\n", cpuid_to_hartid_map(cpu_id));
 | 
			
		||||
	if (!of_property_read_string(node, "riscv,isa", &isa))
 | 
			
		||||
		print_isa(m, isa);
 | 
			
		||||
	if (!of_property_read_string(node, "mmu-type", &mmu))
 | 
			
		||||
		print_mmu(m, mmu);
 | 
			
		||||
	print_mmu(m);
 | 
			
		||||
	if (!of_property_read_string(node, "compatible", &compat)
 | 
			
		||||
	    && strcmp(compat, "riscv"))
 | 
			
		||||
		seq_printf(m, "uarch\t\t: %s\n", compat);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue