xref: /openbmc/qemu/util/cpuinfo-loongarch.c (revision 0885f122)
1*0885f122SRichard Henderson /*
2*0885f122SRichard Henderson  * SPDX-License-Identifier: GPL-2.0-or-later
3*0885f122SRichard Henderson  * Host specific cpu identification for LoongArch.
4*0885f122SRichard Henderson  */
5*0885f122SRichard Henderson 
6*0885f122SRichard Henderson #include "qemu/osdep.h"
7*0885f122SRichard Henderson #include "host/cpuinfo.h"
8*0885f122SRichard Henderson 
9*0885f122SRichard Henderson #ifdef CONFIG_GETAUXVAL
10*0885f122SRichard Henderson # include <sys/auxv.h>
11*0885f122SRichard Henderson #else
12*0885f122SRichard Henderson # include "elf.h"
13*0885f122SRichard Henderson #endif
14*0885f122SRichard Henderson #include <asm/hwcap.h>
15*0885f122SRichard Henderson 
16*0885f122SRichard Henderson unsigned cpuinfo;
17*0885f122SRichard Henderson 
18*0885f122SRichard Henderson /* Called both as constructor and (possibly) via other constructors. */
cpuinfo_init(void)19*0885f122SRichard Henderson unsigned __attribute__((constructor)) cpuinfo_init(void)
20*0885f122SRichard Henderson {
21*0885f122SRichard Henderson     unsigned info = cpuinfo;
22*0885f122SRichard Henderson     unsigned long hwcap;
23*0885f122SRichard Henderson 
24*0885f122SRichard Henderson     if (info) {
25*0885f122SRichard Henderson         return info;
26*0885f122SRichard Henderson     }
27*0885f122SRichard Henderson 
28*0885f122SRichard Henderson     hwcap = qemu_getauxval(AT_HWCAP);
29*0885f122SRichard Henderson 
30*0885f122SRichard Henderson     info = CPUINFO_ALWAYS;
31*0885f122SRichard Henderson     info |= (hwcap & HWCAP_LOONGARCH_LSX ? CPUINFO_LSX : 0);
32*0885f122SRichard Henderson 
33*0885f122SRichard Henderson     cpuinfo = info;
34*0885f122SRichard Henderson     return info;
35*0885f122SRichard Henderson }
36