void identify_cpu(void) { u_int midr; u_int impl_id; u_int part_id; u_int cpu; uint64_t mpidr; size_t i; const struct cpu_parts *cpu_partsp = NULL; cpu = PCPU_GET(cpuid); midr = get_midr(); impl_id = CPU_IMPL(midr); for (i = 0; i < nitems(cpu_implementers); i++) { if (impl_id == cpu_implementers[i].impl_id || cpu_implementers[i].impl_id == 0) { cpu_desc[cpu].cpu_impl = impl_id; cpu_desc[cpu].cpu_impl_name = cpu_implementers[i].impl_name; cpu_partsp = cpu_implementers[i].cpu_parts; break; } } part_id = CPU_PART(midr); for (i = 0; &cpu_partsp[i] != NULL; i++) { if (part_id == cpu_partsp[i].part_id || cpu_partsp[i].part_id == 0) { cpu_desc[cpu].cpu_part_num = part_id; cpu_desc[cpu].cpu_part_name = cpu_partsp[i].part_name; break; } } printf("CPU: %s %s r%dp%d\n", cpu_desc[cpu].cpu_impl_name, cpu_desc[cpu].cpu_part_name, CPU_VAR(midr), CPU_REV(midr)); /* * Save affinity for the boot CPU. * (CPU0 in the internal system enumeration. */ mpidr = get_mpidr(); CPU_AFFINITY(0) = mpidr & CPU_AFF_MASK; if (bootverbose) printf("CPU%u affinity: %u.%u.%u.%u\n", 0, CPU_AFF0(mpidr), CPU_AFF1(mpidr), CPU_AFF2(mpidr), CPU_AFF3(mpidr)); }
void identify_cpu(void) { const struct cpu_parts *cpu_partsp; uint32_t part_id; uint32_t impl_id; uint64_t mimpid; uint64_t misa; u_int cpu; size_t i; cpu_partsp = NULL; mimpid = machine_command(ECALL_MIMPID_GET, 0); misa = machine_command(ECALL_MCPUID_GET, 0); cpu = PCPU_GET(cpuid); impl_id = CPU_IMPL(mimpid); for (i = 0; i < nitems(cpu_implementers); i++) { if (impl_id == cpu_implementers[i].impl_id || cpu_implementers[i].impl_id == 0) { cpu_desc[cpu].cpu_impl = impl_id; cpu_desc[cpu].cpu_impl_name = cpu_implementers[i].impl_name; cpu_partsp = cpu_parts_std; break; } } part_id = CPU_PART(misa); for (i = 0; &cpu_partsp[i] != NULL; i++) { if (part_id == cpu_partsp[i].part_id || cpu_partsp[i].part_id == -1) { cpu_desc[cpu].cpu_part_num = part_id; cpu_desc[cpu].cpu_part_name = cpu_partsp[i].part_name; break; } } /* Print details for boot CPU or if we want verbose output */ if (cpu == 0 || bootverbose) { printf("CPU(%d): %s %s\n", cpu, cpu_desc[cpu].cpu_impl_name, cpu_desc[cpu].cpu_part_name); } }