Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

LoongArch: Consolidate CPU names in /proc/cpuinfo

Some processors have no IOCSR.VENDOR and IOCSR.CPUNAME, some processors
have these registers but there is no valid information.

Consolidate CPU names in /proc/cpuinfo:
1. Add "PRID" to display the PRID & Core-Name;
2. Let "Model Name" display "Unknown" if no valid name.

Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>

+34 -23
+21
arch/loongarch/include/asm/cpu.h
··· 55 55 CPU_LAST 56 56 }; 57 57 58 + static inline char *id_to_core_name(unsigned int id) 59 + { 60 + if ((id & PRID_COMP_MASK) != PRID_COMP_LOONGSON) 61 + return "Unknown"; 62 + 63 + switch (id & PRID_SERIES_MASK) { 64 + case PRID_SERIES_LA132: 65 + return "LA132"; 66 + case PRID_SERIES_LA264: 67 + return "LA264"; 68 + case PRID_SERIES_LA364: 69 + return "LA364"; 70 + case PRID_SERIES_LA464: 71 + return "LA464"; 72 + case PRID_SERIES_LA664: 73 + return "LA664"; 74 + default: 75 + return "Unknown"; 76 + } 77 + } 78 + 58 79 #endif /* !__ASSEMBLER__ */ 59 80 60 81 /*
+11 -23
arch/loongarch/kernel/cpu-probe.c
··· 277 277 uint32_t config; 278 278 uint64_t *vendor = (void *)(&cpu_full_name[VENDOR_OFFSET]); 279 279 uint64_t *cpuname = (void *)(&cpu_full_name[CPUNAME_OFFSET]); 280 - const char *core_name = "Unknown"; 280 + const char *core_name = id_to_core_name(c->processor_id); 281 281 282 282 switch (BIT(fls(c->isa_level) - 1)) { 283 283 case LOONGARCH_CPU_ISA_LA32R: ··· 291 291 break; 292 292 } 293 293 294 - switch (c->processor_id & PRID_SERIES_MASK) { 295 - case PRID_SERIES_LA132: 296 - core_name = "LA132"; 297 - break; 298 - case PRID_SERIES_LA264: 299 - core_name = "LA264"; 300 - break; 301 - case PRID_SERIES_LA364: 302 - core_name = "LA364"; 303 - break; 304 - case PRID_SERIES_LA464: 305 - core_name = "LA464"; 306 - break; 307 - case PRID_SERIES_LA664: 308 - core_name = "LA664"; 309 - break; 310 - } 311 - 312 294 pr_info("%s Processor probed (%s Core)\n", __cpu_family[cpu], core_name); 313 295 314 - if (!cpu_has_iocsr) 296 + if (!cpu_has_iocsr) { 297 + __cpu_full_name[cpu] = "Unknown"; 315 298 return; 316 - 317 - if (!__cpu_full_name[cpu]) 318 - __cpu_full_name[cpu] = cpu_full_name; 299 + } 319 300 320 301 *vendor = iocsr_read64(LOONGARCH_IOCSR_VENDOR); 321 302 *cpuname = iocsr_read64(LOONGARCH_IOCSR_CPUNAME); 303 + 304 + if (!__cpu_full_name[cpu]) { 305 + if (((char *)vendor)[0] == 0) 306 + __cpu_full_name[cpu] = "Unknown"; 307 + else 308 + __cpu_full_name[cpu] = cpu_full_name; 309 + } 322 310 323 311 config = iocsr_read32(LOONGARCH_IOCSR_FEATURES); 324 312 if (config & IOCSRF_CSRIPI)
+2
arch/loongarch/kernel/proc.c
··· 17 17 { 18 18 unsigned long n = (unsigned long) v - 1; 19 19 unsigned int isa = cpu_data[n].isa_level; 20 + unsigned int prid = cpu_data[n].processor_id; 20 21 unsigned int version = cpu_data[n].processor_id & 0xff; 21 22 unsigned int fp_version = cpu_data[n].fpu_vers; 22 23 ··· 38 37 seq_printf(m, "global_id\t\t: %d\n", cpu_data[n].global_id); 39 38 seq_printf(m, "CPU Family\t\t: %s\n", __cpu_family[n]); 40 39 seq_printf(m, "Model Name\t\t: %s\n", __cpu_full_name[n]); 40 + seq_printf(m, "PRID\t\t\t: %s (%08x)\n", id_to_core_name(prid), prid); 41 41 seq_printf(m, "CPU Revision\t\t: 0x%02x\n", version); 42 42 seq_printf(m, "FPU Revision\t\t: 0x%02x\n", fp_version); 43 43 seq_printf(m, "CPU MHz\t\t\t: %llu.%02llu\n",