Lines Matching +full:riscv +full:- +full:sbi

1 // SPDX-License-Identifier: GPL-2.0-only
16 #include <asm/sbi.h>
26 * Returns the hart ID of the given device tree node, or -ENODEV if the node
27 * isn't an enabled and valid RISC-V hart node.
36 return -ENODEV; in riscv_of_processor_hartid()
44 return -ENODEV; in riscv_of_processor_hartid()
53 if (!of_device_is_compatible(node, "riscv")) { in riscv_early_of_processor_hartid()
55 return -ENODEV; in riscv_early_of_processor_hartid()
61 return -ENODEV; in riscv_early_of_processor_hartid()
66 return -ENODEV; in riscv_early_of_processor_hartid()
69 if (of_property_read_string(node, "riscv,isa-base", &isa)) in riscv_early_of_processor_hartid()
74 return -ENODEV; in riscv_early_of_processor_hartid()
79 return -ENODEV; in riscv_early_of_processor_hartid()
82 if (!of_property_present(node, "riscv,isa-extensions")) in riscv_early_of_processor_hartid()
83 return -ENODEV; in riscv_early_of_processor_hartid()
85 if (of_property_match_string(node, "riscv,isa-extensions", "i") < 0 || in riscv_early_of_processor_hartid()
86 of_property_match_string(node, "riscv,isa-extensions", "m") < 0 || in riscv_early_of_processor_hartid()
87 of_property_match_string(node, "riscv,isa-extensions", "a") < 0) { in riscv_early_of_processor_hartid()
89 return -ENODEV; in riscv_early_of_processor_hartid()
96 pr_warn("CPU with hartid=%lu is invalid: this kernel does not parse \"riscv,isa\"", in riscv_early_of_processor_hartid()
98 return -ENODEV; in riscv_early_of_processor_hartid()
101 if (of_property_read_string(node, "riscv,isa", &isa)) { in riscv_early_of_processor_hartid()
102 pr_warn("CPU with hartid=%lu has no \"riscv,isa-base\" or \"riscv,isa\" property\n", in riscv_early_of_processor_hartid()
104 return -ENODEV; in riscv_early_of_processor_hartid()
109 return -ENODEV; in riscv_early_of_processor_hartid()
114 return -ENODEV; in riscv_early_of_processor_hartid()
124 * RISC-V core (HART) node and extract the cpuid from it.
128 for (; node; node = node->parent) { in riscv_of_parent_hartid()
129 if (of_device_is_compatible(node, "riscv")) { in riscv_of_parent_hartid()
133 return -ENODEV; in riscv_of_parent_hartid()
139 return -1; in riscv_of_parent_hartid()
148 return ci->mvendorid; in riscv_cached_mvendorid()
156 return ci->marchid; in riscv_cached_marchid()
164 return ci->mimpid; in riscv_cached_mimpid()
173 ci->mvendorid = sbi_spec_is_0_1() ? 0 : sbi_get_mvendorid(); in riscv_cpuinfo_starting()
174 ci->marchid = sbi_spec_is_0_1() ? 0 : sbi_get_marchid(); in riscv_cpuinfo_starting()
175 ci->mimpid = sbi_spec_is_0_1() ? 0 : sbi_get_mimpid(); in riscv_cpuinfo_starting()
177 ci->mvendorid = csr_read(CSR_MVENDORID); in riscv_cpuinfo_starting()
178 ci->marchid = csr_read(CSR_MARCHID); in riscv_cpuinfo_starting()
179 ci->mimpid = csr_read(CSR_MIMPID); in riscv_cpuinfo_starting()
181 ci->mvendorid = 0; in riscv_cpuinfo_starting()
182 ci->marchid = 0; in riscv_cpuinfo_starting()
183 ci->mimpid = 0; in riscv_cpuinfo_starting()
193 ret = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "riscv/cpuinfo:starting", in riscv_cpuinfo_init()
218 /* Only multi-letter extensions are split by underscores */ in print_isa()
254 *pos = cpumask_next(*pos - 1, cpu_online_mask); in c_start()
272 unsigned long cpu_id = (unsigned long)v - 1; in c_show()
294 strcmp(compat, "riscv")) in c_show()
300 seq_printf(m, "mvendorid\t: 0x%lx\n", ci->mvendorid); in c_show()
301 seq_printf(m, "marchid\t\t: 0x%lx\n", ci->marchid); in c_show()
302 seq_printf(m, "mimpid\t\t: 0x%lx\n", ci->mimpid); in c_show()