util: Add cpuinfo for loongarch64
Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Jiajie Chen <c@jia.je> Message-Id: <20230916220151.526140-4-richard.henderson@linaro.org>
This commit is contained in:
parent
2b2ae0a42e
commit
0885f1221e
21
host/include/loongarch64/host/cpuinfo.h
Normal file
21
host/include/loongarch64/host/cpuinfo.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
* Host specific cpu identification for LoongArch
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef HOST_CPUINFO_H
|
||||||
|
#define HOST_CPUINFO_H
|
||||||
|
|
||||||
|
#define CPUINFO_ALWAYS (1u << 0) /* so cpuinfo is nonzero */
|
||||||
|
#define CPUINFO_LSX (1u << 1)
|
||||||
|
|
||||||
|
/* Initialized with a constructor. */
|
||||||
|
extern unsigned cpuinfo;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We cannot rely on constructor ordering, so other constructors must
|
||||||
|
* use the function interface rather than the variable above.
|
||||||
|
*/
|
||||||
|
unsigned cpuinfo_init(void);
|
||||||
|
|
||||||
|
#endif /* HOST_CPUINFO_H */
|
35
util/cpuinfo-loongarch.c
Normal file
35
util/cpuinfo-loongarch.c
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
* Host specific cpu identification for LoongArch.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "qemu/osdep.h"
|
||||||
|
#include "host/cpuinfo.h"
|
||||||
|
|
||||||
|
#ifdef CONFIG_GETAUXVAL
|
||||||
|
# include <sys/auxv.h>
|
||||||
|
#else
|
||||||
|
# include "elf.h"
|
||||||
|
#endif
|
||||||
|
#include <asm/hwcap.h>
|
||||||
|
|
||||||
|
unsigned cpuinfo;
|
||||||
|
|
||||||
|
/* Called both as constructor and (possibly) via other constructors. */
|
||||||
|
unsigned __attribute__((constructor)) cpuinfo_init(void)
|
||||||
|
{
|
||||||
|
unsigned info = cpuinfo;
|
||||||
|
unsigned long hwcap;
|
||||||
|
|
||||||
|
if (info) {
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
|
||||||
|
hwcap = qemu_getauxval(AT_HWCAP);
|
||||||
|
|
||||||
|
info = CPUINFO_ALWAYS;
|
||||||
|
info |= (hwcap & HWCAP_LOONGARCH_LSX ? CPUINFO_LSX : 0);
|
||||||
|
|
||||||
|
cpuinfo = info;
|
||||||
|
return info;
|
||||||
|
}
|
@ -113,6 +113,8 @@ if cpu == 'aarch64'
|
|||||||
util_ss.add(files('cpuinfo-aarch64.c'))
|
util_ss.add(files('cpuinfo-aarch64.c'))
|
||||||
elif cpu in ['x86', 'x86_64']
|
elif cpu in ['x86', 'x86_64']
|
||||||
util_ss.add(files('cpuinfo-i386.c'))
|
util_ss.add(files('cpuinfo-i386.c'))
|
||||||
|
elif cpu == 'loongarch64'
|
||||||
|
util_ss.add(files('cpuinfo-loongarch.c'))
|
||||||
elif cpu in ['ppc', 'ppc64']
|
elif cpu in ['ppc', 'ppc64']
|
||||||
util_ss.add(files('cpuinfo-ppc.c'))
|
util_ss.add(files('cpuinfo-ppc.c'))
|
||||||
endif
|
endif
|
||||||
|
Loading…
Reference in New Issue
Block a user