Skip to content

Commit

Permalink
riscv: Add vendor extensions to /proc/cpuinfo
Browse files Browse the repository at this point in the history
All of the supported vendor extensions that have been listed in
riscv_isa_vendor_ext_list can be exported through /proc/cpuinfo.

Signed-off-by: Charlie Jenkins <[email protected]>
Reviewed-by: Evan Green <[email protected]>
Reviewed-by: Conor Dooley <[email protected]>
Link: https://lore.kernel.org/r/20240719-support_vendor_extensions-v3-2-0af7587bbec0@rivosinc.com
Signed-off-by: Palmer Dabbelt <[email protected]>
  • Loading branch information
charlie-rivos authored and palmer-dabbelt committed Jul 22, 2024
1 parent 23c996f commit 9448d9a
Showing 1 changed file with 32 additions and 3 deletions.
35 changes: 32 additions & 3 deletions arch/riscv/kernel/cpu.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#include <asm/sbi.h>
#include <asm/smp.h>
#include <asm/pgtable.h>
#include <asm/vendor_extensions.h>

bool arch_match_cpu_phys_id(int cpu, u64 phys_id)
{
Expand Down Expand Up @@ -235,7 +236,33 @@ arch_initcall(riscv_cpuinfo_init);

#ifdef CONFIG_PROC_FS

static void print_isa(struct seq_file *f, const unsigned long *isa_bitmap)
#define ALL_CPUS -1

static void print_vendor_isa(struct seq_file *f, int cpu)
{
struct riscv_isavendorinfo *vendor_bitmap;
struct riscv_isa_vendor_ext_data_list *ext_list;
const struct riscv_isa_ext_data *ext_data;

for (int i = 0; i < riscv_isa_vendor_ext_list_size; i++) {
ext_list = riscv_isa_vendor_ext_list[i];
ext_data = riscv_isa_vendor_ext_list[i]->ext_data;

if (cpu == ALL_CPUS)
vendor_bitmap = &ext_list->all_harts_isa_bitmap;
else
vendor_bitmap = &ext_list->per_hart_isa_bitmap[cpu];

for (int j = 0; j < ext_list->ext_data_count; j++) {
if (!__riscv_isa_extension_available(vendor_bitmap->isa, ext_data[j].id))
continue;

seq_printf(f, "_%s", ext_data[j].name);
}
}
}

static void print_isa(struct seq_file *f, const unsigned long *isa_bitmap, int cpu)
{

if (IS_ENABLED(CONFIG_32BIT))
Expand All @@ -254,6 +281,8 @@ static void print_isa(struct seq_file *f, const unsigned long *isa_bitmap)
seq_printf(f, "%s", riscv_isa_ext[i].name);
}

print_vendor_isa(f, cpu);

seq_puts(f, "\n");
}

Expand Down Expand Up @@ -316,7 +345,7 @@ static int c_show(struct seq_file *m, void *v)
* line.
*/
seq_puts(m, "isa\t\t: ");
print_isa(m, NULL);
print_isa(m, NULL, ALL_CPUS);
print_mmu(m);

if (acpi_disabled) {
Expand All @@ -338,7 +367,7 @@ static int c_show(struct seq_file *m, void *v)
* additional extensions not present across all harts.
*/
seq_puts(m, "hart isa\t: ");
print_isa(m, hart_isa[cpu_id].isa);
print_isa(m, hart_isa[cpu_id].isa, cpu_id);
seq_puts(m, "\n");

return 0;
Expand Down

0 comments on commit 9448d9a

Please sign in to comment.