lkml.org 
[lkml]   [2021]   [Dec]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 08/13] riscv: Use pgtable_l4_enabled to output mmu_type in cpuinfo
    Date
    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>
    ---
    arch/riscv/kernel/cpu.c | 23 ++++++++++++-----------
    1 file changed, 12 insertions(+), 11 deletions(-)

    diff --git a/arch/riscv/kernel/cpu.c b/arch/riscv/kernel/cpu.c
    index 6d59e6906fdd..dea9b1c31889 100644
    --- a/arch/riscv/kernel/cpu.c
    +++ b/arch/riscv/kernel/cpu.c
    @@ -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
    @@ -70,18 +71,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)
    {
    + char sv_type[16];
    +
    #if defined(CONFIG_32BIT)
    - if (strcmp(mmu_type, "riscv,sv32") != 0)
    - return;
    + strncpy(sv_type, "sv32", 5);
    #elif defined(CONFIG_64BIT)
    - if (strcmp(mmu_type, "riscv,sv39") != 0 &&
    - strcmp(mmu_type, "riscv,sv48") != 0)
    - return;
    + if (pgtable_l4_enabled)
    + strncpy(sv_type, "sv48", 5);
    + else
    + strncpy(sv_type, "sv39", 5);
    #endif
    -
    - seq_printf(f, "mmu\t\t: %s\n", mmu_type+6);
    + seq_printf(f, "mmu\t\t: %s\n", sv_type);
    }

    static void *c_start(struct seq_file *m, loff_t *pos)
    @@ -106,14 +108,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);
    --
    2.32.0
    \
     
     \ /
      Last update: 2021-12-06 11:55    [W:4.381 / U:0.404 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site