arch/loongarch/kernel/cpu-probe.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
Reading vendor and cpuname IOCSRs yields 0x258000fff00 instead of
human-readable model strings on Loongson 2K0300 SoC, which messes up
format of /proc/cpuinfo since it represents as an empty string.
Let's consider IOCSR-based model probing fails if the result model is an
empty string. A fallback model name is set in such cases.
Signed-off-by: Yao Zi <ziyao@disroot.org>
---
arch/loongarch/kernel/cpu-probe.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/arch/loongarch/kernel/cpu-probe.c b/arch/loongarch/kernel/cpu-probe.c
index fedaa67cde41..785513d43696 100644
--- a/arch/loongarch/kernel/cpu-probe.c
+++ b/arch/loongarch/kernel/cpu-probe.c
@@ -270,12 +270,13 @@ static inline void cpu_probe_loongson(struct cpuinfo_loongarch *c, unsigned int
if (!cpu_has_iocsr)
return;
- if (!__cpu_full_name[cpu])
- __cpu_full_name[cpu] = cpu_full_name;
-
*vendor = iocsr_read64(LOONGARCH_IOCSR_VENDOR);
*cpuname = iocsr_read64(LOONGARCH_IOCSR_CPUNAME);
+ if (!__cpu_full_name[cpu])
+ __cpu_full_name[cpu] = cpu_full_name[0] ? cpu_full_name :
+ "Loongson-Unknown";
+
config = iocsr_read32(LOONGARCH_IOCSR_FEATURES);
if (config & IOCSRF_CSRIPI)
c->options |= LOONGARCH_CPU_CSRIPI;
--
2.49.0
Hi, Yao Zi, On Wed, Apr 30, 2025 at 1:41 PM Yao Zi <ziyao@disroot.org> wrote: > > Reading vendor and cpuname IOCSRs yields 0x258000fff00 instead of > human-readable model strings on Loongson 2K0300 SoC, which messes up > format of /proc/cpuinfo since it represents as an empty string. CPUNAME IOCSR is filled by firmware and readed by kernel. If you read some garbage, that means you need to modify your firmware. And if there is completely no CPUNAME register, you need to fill it by FDT, see init_cpu_fullname() in arch/loongarch/kernel/env.c. Huacai > > Let's consider IOCSR-based model probing fails if the result model is an > empty string. A fallback model name is set in such cases. > > Signed-off-by: Yao Zi <ziyao@disroot.org> > --- > arch/loongarch/kernel/cpu-probe.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/arch/loongarch/kernel/cpu-probe.c b/arch/loongarch/kernel/cpu-probe.c > index fedaa67cde41..785513d43696 100644 > --- a/arch/loongarch/kernel/cpu-probe.c > +++ b/arch/loongarch/kernel/cpu-probe.c > @@ -270,12 +270,13 @@ static inline void cpu_probe_loongson(struct cpuinfo_loongarch *c, unsigned int > if (!cpu_has_iocsr) > return; > > - if (!__cpu_full_name[cpu]) > - __cpu_full_name[cpu] = cpu_full_name; > - > *vendor = iocsr_read64(LOONGARCH_IOCSR_VENDOR); > *cpuname = iocsr_read64(LOONGARCH_IOCSR_CPUNAME); > > + if (!__cpu_full_name[cpu]) > + __cpu_full_name[cpu] = cpu_full_name[0] ? cpu_full_name : > + "Loongson-Unknown"; > + > config = iocsr_read32(LOONGARCH_IOCSR_FEATURES); > if (config & IOCSRF_CSRIPI) > c->options |= LOONGARCH_CPU_CSRIPI; > -- > 2.49.0 > >
On Wed, Apr 30, 2025 at 03:48:25PM +0800, Huacai Chen wrote: > Hi, Yao Zi, > > On Wed, Apr 30, 2025 at 1:41 PM Yao Zi <ziyao@disroot.org> wrote: > > > > Reading vendor and cpuname IOCSRs yields 0x258000fff00 instead of > > human-readable model strings on Loongson 2K0300 SoC, which messes up > > format of /proc/cpuinfo since it represents as an empty string. > CPUNAME IOCSR is filled by firmware and readed by kernel. If you read > some garbage, that means you need to modify your firmware. Thanks for the hint, I'll take a look in my firmware instead. > And if there is completely no CPUNAME register, you need to fill it by > FDT, see init_cpu_fullname() in arch/loongarch/kernel/env.c. > > Huacai Best regards, Yao Zi > > > > Let's consider IOCSR-based model probing fails if the result model is an > > empty string. A fallback model name is set in such cases. > > > > Signed-off-by: Yao Zi <ziyao@disroot.org> > > --- > > arch/loongarch/kernel/cpu-probe.c | 7 ++++--- > > 1 file changed, 4 insertions(+), 3 deletions(-) > > > > diff --git a/arch/loongarch/kernel/cpu-probe.c b/arch/loongarch/kernel/cpu-probe.c > > index fedaa67cde41..785513d43696 100644 > > --- a/arch/loongarch/kernel/cpu-probe.c > > +++ b/arch/loongarch/kernel/cpu-probe.c > > @@ -270,12 +270,13 @@ static inline void cpu_probe_loongson(struct cpuinfo_loongarch *c, unsigned int > > if (!cpu_has_iocsr) > > return; > > > > - if (!__cpu_full_name[cpu]) > > - __cpu_full_name[cpu] = cpu_full_name; > > - > > *vendor = iocsr_read64(LOONGARCH_IOCSR_VENDOR); > > *cpuname = iocsr_read64(LOONGARCH_IOCSR_CPUNAME); > > > > + if (!__cpu_full_name[cpu]) > > + __cpu_full_name[cpu] = cpu_full_name[0] ? cpu_full_name : > > + "Loongson-Unknown"; > > + > > config = iocsr_read32(LOONGARCH_IOCSR_FEATURES); > > if (config & IOCSRF_CSRIPI) > > c->options |= LOONGARCH_CPU_CSRIPI; > > -- > > 2.49.0 > > > >
© 2016 - 2026 Red Hat, Inc.