mirror of
https://gitee.com/open-loongarch/linux-6.12.git
synced 2026-10-25 12:37:11 +08:00
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> Signed-off-by: maoxiaochuan <maoxiaochuan@loongson.cn>
This commit is contained in:
@@ -55,6 +55,27 @@ enum cpu_type_enum {
|
|||||||
CPU_LAST
|
CPU_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static inline char *id_to_core_name(unsigned int id)
|
||||||
|
{
|
||||||
|
if ((id & PRID_COMP_MASK) != PRID_COMP_LOONGSON)
|
||||||
|
return "Unknown";
|
||||||
|
|
||||||
|
switch (id & PRID_SERIES_MASK) {
|
||||||
|
case PRID_SERIES_LA132:
|
||||||
|
return "LA132";
|
||||||
|
case PRID_SERIES_LA264:
|
||||||
|
return "LA264";
|
||||||
|
case PRID_SERIES_LA364:
|
||||||
|
return "LA364";
|
||||||
|
case PRID_SERIES_LA464:
|
||||||
|
return "LA464";
|
||||||
|
case PRID_SERIES_LA664:
|
||||||
|
return "LA664";
|
||||||
|
default:
|
||||||
|
return "Unknown";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* !__ASSEMBLY */
|
#endif /* !__ASSEMBLY */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -277,7 +277,7 @@ static inline void cpu_probe_loongson(struct cpuinfo_loongarch *c, unsigned int
|
|||||||
uint32_t config;
|
uint32_t config;
|
||||||
uint64_t *vendor = (void *)(&cpu_full_name[VENDOR_OFFSET]);
|
uint64_t *vendor = (void *)(&cpu_full_name[VENDOR_OFFSET]);
|
||||||
uint64_t *cpuname = (void *)(&cpu_full_name[CPUNAME_OFFSET]);
|
uint64_t *cpuname = (void *)(&cpu_full_name[CPUNAME_OFFSET]);
|
||||||
const char *core_name = "Unknown";
|
const char *core_name = id_to_core_name(c->processor_id);
|
||||||
|
|
||||||
switch (BIT(fls(c->isa_level) - 1)) {
|
switch (BIT(fls(c->isa_level) - 1)) {
|
||||||
case LOONGARCH_CPU_ISA_LA32R:
|
case LOONGARCH_CPU_ISA_LA32R:
|
||||||
@@ -291,35 +291,23 @@ static inline void cpu_probe_loongson(struct cpuinfo_loongarch *c, unsigned int
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (c->processor_id & PRID_SERIES_MASK) {
|
|
||||||
case PRID_SERIES_LA132:
|
|
||||||
core_name = "LA132";
|
|
||||||
break;
|
|
||||||
case PRID_SERIES_LA264:
|
|
||||||
core_name = "LA264";
|
|
||||||
break;
|
|
||||||
case PRID_SERIES_LA364:
|
|
||||||
core_name = "LA364";
|
|
||||||
break;
|
|
||||||
case PRID_SERIES_LA464:
|
|
||||||
core_name = "LA464";
|
|
||||||
break;
|
|
||||||
case PRID_SERIES_LA664:
|
|
||||||
core_name = "LA664";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
pr_info("%s Processor probed (%s Core)\n", __cpu_family[cpu], core_name);
|
pr_info("%s Processor probed (%s Core)\n", __cpu_family[cpu], core_name);
|
||||||
|
|
||||||
if (!cpu_has_iocsr)
|
if (!cpu_has_iocsr) {
|
||||||
|
__cpu_full_name[cpu] = "Unknown";
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if (!__cpu_full_name[cpu])
|
|
||||||
__cpu_full_name[cpu] = cpu_full_name;
|
|
||||||
|
|
||||||
*vendor = iocsr_read64(LOONGARCH_IOCSR_VENDOR);
|
*vendor = iocsr_read64(LOONGARCH_IOCSR_VENDOR);
|
||||||
*cpuname = iocsr_read64(LOONGARCH_IOCSR_CPUNAME);
|
*cpuname = iocsr_read64(LOONGARCH_IOCSR_CPUNAME);
|
||||||
|
|
||||||
|
if (!__cpu_full_name[cpu]) {
|
||||||
|
if (((char *)vendor)[0] == 0)
|
||||||
|
__cpu_full_name[cpu] = "Unknown";
|
||||||
|
else
|
||||||
|
__cpu_full_name[cpu] = cpu_full_name;
|
||||||
|
}
|
||||||
|
|
||||||
config = iocsr_read32(LOONGARCH_IOCSR_FEATURES);
|
config = iocsr_read32(LOONGARCH_IOCSR_FEATURES);
|
||||||
if (config & IOCSRF_CSRIPI)
|
if (config & IOCSRF_CSRIPI)
|
||||||
c->options |= LOONGARCH_CPU_CSRIPI;
|
c->options |= LOONGARCH_CPU_CSRIPI;
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ static int show_cpuinfo(struct seq_file *m, void *v)
|
|||||||
{
|
{
|
||||||
unsigned long n = (unsigned long) v - 1;
|
unsigned long n = (unsigned long) v - 1;
|
||||||
unsigned int isa = cpu_data[n].isa_level;
|
unsigned int isa = cpu_data[n].isa_level;
|
||||||
|
unsigned int prid = cpu_data[n].processor_id;
|
||||||
unsigned int version = cpu_data[n].processor_id & 0xff;
|
unsigned int version = cpu_data[n].processor_id & 0xff;
|
||||||
unsigned int fp_version = cpu_data[n].fpu_vers;
|
unsigned int fp_version = cpu_data[n].fpu_vers;
|
||||||
|
|
||||||
@@ -37,6 +38,7 @@ static int show_cpuinfo(struct seq_file *m, void *v)
|
|||||||
seq_printf(m, "global_id\t\t: %d\n", cpu_data[n].global_id);
|
seq_printf(m, "global_id\t\t: %d\n", cpu_data[n].global_id);
|
||||||
seq_printf(m, "CPU Family\t\t: %s\n", __cpu_family[n]);
|
seq_printf(m, "CPU Family\t\t: %s\n", __cpu_family[n]);
|
||||||
seq_printf(m, "Model Name\t\t: %s\n", __cpu_full_name[n]);
|
seq_printf(m, "Model Name\t\t: %s\n", __cpu_full_name[n]);
|
||||||
|
seq_printf(m, "PRID\t\t\t: %s (%08x)\n", id_to_core_name(prid), prid);
|
||||||
seq_printf(m, "CPU Revision\t\t: 0x%02x\n", version);
|
seq_printf(m, "CPU Revision\t\t: 0x%02x\n", version);
|
||||||
seq_printf(m, "FPU Revision\t\t: 0x%02x\n", fp_version);
|
seq_printf(m, "FPU Revision\t\t: 0x%02x\n", fp_version);
|
||||||
seq_printf(m, "CPU MHz\t\t\t: %llu.%02llu\n",
|
seq_printf(m, "CPU MHz\t\t\t: %llu.%02llu\n",
|
||||||
|
|||||||
Reference in New Issue
Block a user