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'))
|
||||
elif cpu in ['x86', 'x86_64']
|
||||
util_ss.add(files('cpuinfo-i386.c'))
|
||||
elif cpu == 'loongarch64'
|
||||
util_ss.add(files('cpuinfo-loongarch.c'))
|
||||
elif cpu in ['ppc', 'ppc64']
|
||||
util_ss.add(files('cpuinfo-ppc.c'))
|
||||
endif
|
||||
|
Loading…
Reference in New Issue
Block a user