target/loongarch: Define function loongarch_cpu_post_init as static
Function loongarch_cpu_post_init() is implemented and used in the same file target/loongarch/cpu.c, it can be defined as static function. This patch moves implementation about function loongarch_cpu_post_init() before it is referenced. And it is only code movement, no function change. Signed-off-by: Bibo Mao <maobibo@loongson.cn> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
de3c9f552d
commit
982d7674ff
2 changed files with 90 additions and 92 deletions
|
|
@ -422,6 +422,96 @@ static void loongarch_la464_init_csr(Object *obj)
|
|||
#endif
|
||||
}
|
||||
|
||||
static bool loongarch_get_lsx(Object *obj, Error **errp)
|
||||
{
|
||||
return LOONGARCH_CPU(obj)->lsx != ON_OFF_AUTO_OFF;
|
||||
}
|
||||
|
||||
static void loongarch_set_lsx(Object *obj, bool value, Error **errp)
|
||||
{
|
||||
LoongArchCPU *cpu = LOONGARCH_CPU(obj);
|
||||
uint32_t val;
|
||||
|
||||
cpu->lsx = value ? ON_OFF_AUTO_ON : ON_OFF_AUTO_OFF;
|
||||
if (cpu->lsx == ON_OFF_AUTO_OFF) {
|
||||
cpu->lasx = ON_OFF_AUTO_OFF;
|
||||
if (cpu->lasx == ON_OFF_AUTO_ON) {
|
||||
error_setg(errp, "Failed to disable LSX since LASX is enabled");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (kvm_enabled()) {
|
||||
/* kvm feature detection in function kvm_arch_init_vcpu */
|
||||
return;
|
||||
}
|
||||
|
||||
/* LSX feature detection in TCG mode */
|
||||
val = cpu->env.cpucfg[2];
|
||||
if (cpu->lsx == ON_OFF_AUTO_ON) {
|
||||
if (FIELD_EX32(val, CPUCFG2, LSX) == 0) {
|
||||
error_setg(errp, "Failed to enable LSX in TCG mode");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
cpu->env.cpucfg[2] = FIELD_DP32(val, CPUCFG2, LASX, 0);
|
||||
val = cpu->env.cpucfg[2];
|
||||
}
|
||||
|
||||
cpu->env.cpucfg[2] = FIELD_DP32(val, CPUCFG2, LSX, value);
|
||||
}
|
||||
|
||||
static bool loongarch_get_lasx(Object *obj, Error **errp)
|
||||
{
|
||||
return LOONGARCH_CPU(obj)->lasx != ON_OFF_AUTO_OFF;
|
||||
}
|
||||
|
||||
static void loongarch_set_lasx(Object *obj, bool value, Error **errp)
|
||||
{
|
||||
LoongArchCPU *cpu = LOONGARCH_CPU(obj);
|
||||
uint32_t val;
|
||||
|
||||
cpu->lasx = value ? ON_OFF_AUTO_ON : ON_OFF_AUTO_OFF;
|
||||
if ((cpu->lsx == ON_OFF_AUTO_OFF) && (cpu->lasx == ON_OFF_AUTO_ON)) {
|
||||
error_setg(errp, "Failed to enable LASX since lSX is disabled");
|
||||
return;
|
||||
}
|
||||
|
||||
if (kvm_enabled()) {
|
||||
/* kvm feature detection in function kvm_arch_init_vcpu */
|
||||
return;
|
||||
}
|
||||
|
||||
/* LASX feature detection in TCG mode */
|
||||
val = cpu->env.cpucfg[2];
|
||||
if (cpu->lasx == ON_OFF_AUTO_ON) {
|
||||
if (FIELD_EX32(val, CPUCFG2, LASX) == 0) {
|
||||
error_setg(errp, "Failed to enable LASX in TCG mode");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
cpu->env.cpucfg[2] = FIELD_DP32(val, CPUCFG2, LASX, value);
|
||||
}
|
||||
|
||||
static void loongarch_cpu_post_init(Object *obj)
|
||||
{
|
||||
LoongArchCPU *cpu = LOONGARCH_CPU(obj);
|
||||
|
||||
cpu->lbt = ON_OFF_AUTO_OFF;
|
||||
cpu->pmu = ON_OFF_AUTO_OFF;
|
||||
cpu->lsx = ON_OFF_AUTO_AUTO;
|
||||
cpu->lasx = ON_OFF_AUTO_AUTO;
|
||||
object_property_add_bool(obj, "lsx", loongarch_get_lsx,
|
||||
loongarch_set_lsx);
|
||||
object_property_add_bool(obj, "lasx", loongarch_get_lasx,
|
||||
loongarch_set_lasx);
|
||||
/* lbt is enabled only in kvm mode, not supported in tcg mode */
|
||||
if (kvm_enabled()) {
|
||||
kvm_loongarch_cpu_post_init(cpu);
|
||||
}
|
||||
}
|
||||
|
||||
static void loongarch_la464_initfn(Object *obj)
|
||||
{
|
||||
LoongArchCPU *cpu = LOONGARCH_CPU(obj);
|
||||
|
|
@ -683,96 +773,6 @@ static void loongarch_cpu_unrealizefn(DeviceState *dev)
|
|||
lacc->parent_unrealize(dev);
|
||||
}
|
||||
|
||||
static bool loongarch_get_lsx(Object *obj, Error **errp)
|
||||
{
|
||||
return LOONGARCH_CPU(obj)->lsx != ON_OFF_AUTO_OFF;
|
||||
}
|
||||
|
||||
static void loongarch_set_lsx(Object *obj, bool value, Error **errp)
|
||||
{
|
||||
LoongArchCPU *cpu = LOONGARCH_CPU(obj);
|
||||
uint32_t val;
|
||||
|
||||
cpu->lsx = value ? ON_OFF_AUTO_ON : ON_OFF_AUTO_OFF;
|
||||
if (cpu->lsx == ON_OFF_AUTO_OFF) {
|
||||
cpu->lasx = ON_OFF_AUTO_OFF;
|
||||
if (cpu->lasx == ON_OFF_AUTO_ON) {
|
||||
error_setg(errp, "Failed to disable LSX since LASX is enabled");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (kvm_enabled()) {
|
||||
/* kvm feature detection in function kvm_arch_init_vcpu */
|
||||
return;
|
||||
}
|
||||
|
||||
/* LSX feature detection in TCG mode */
|
||||
val = cpu->env.cpucfg[2];
|
||||
if (cpu->lsx == ON_OFF_AUTO_ON) {
|
||||
if (FIELD_EX32(val, CPUCFG2, LSX) == 0) {
|
||||
error_setg(errp, "Failed to enable LSX in TCG mode");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
cpu->env.cpucfg[2] = FIELD_DP32(val, CPUCFG2, LASX, 0);
|
||||
val = cpu->env.cpucfg[2];
|
||||
}
|
||||
|
||||
cpu->env.cpucfg[2] = FIELD_DP32(val, CPUCFG2, LSX, value);
|
||||
}
|
||||
|
||||
static bool loongarch_get_lasx(Object *obj, Error **errp)
|
||||
{
|
||||
return LOONGARCH_CPU(obj)->lasx != ON_OFF_AUTO_OFF;
|
||||
}
|
||||
|
||||
static void loongarch_set_lasx(Object *obj, bool value, Error **errp)
|
||||
{
|
||||
LoongArchCPU *cpu = LOONGARCH_CPU(obj);
|
||||
uint32_t val;
|
||||
|
||||
cpu->lasx = value ? ON_OFF_AUTO_ON : ON_OFF_AUTO_OFF;
|
||||
if ((cpu->lsx == ON_OFF_AUTO_OFF) && (cpu->lasx == ON_OFF_AUTO_ON)) {
|
||||
error_setg(errp, "Failed to enable LASX since lSX is disabled");
|
||||
return;
|
||||
}
|
||||
|
||||
if (kvm_enabled()) {
|
||||
/* kvm feature detection in function kvm_arch_init_vcpu */
|
||||
return;
|
||||
}
|
||||
|
||||
/* LASX feature detection in TCG mode */
|
||||
val = cpu->env.cpucfg[2];
|
||||
if (cpu->lasx == ON_OFF_AUTO_ON) {
|
||||
if (FIELD_EX32(val, CPUCFG2, LASX) == 0) {
|
||||
error_setg(errp, "Failed to enable LASX in TCG mode");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
cpu->env.cpucfg[2] = FIELD_DP32(val, CPUCFG2, LASX, value);
|
||||
}
|
||||
|
||||
void loongarch_cpu_post_init(Object *obj)
|
||||
{
|
||||
LoongArchCPU *cpu = LOONGARCH_CPU(obj);
|
||||
|
||||
cpu->lbt = ON_OFF_AUTO_OFF;
|
||||
cpu->pmu = ON_OFF_AUTO_OFF;
|
||||
cpu->lsx = ON_OFF_AUTO_AUTO;
|
||||
cpu->lasx = ON_OFF_AUTO_AUTO;
|
||||
object_property_add_bool(obj, "lsx", loongarch_get_lsx,
|
||||
loongarch_set_lsx);
|
||||
object_property_add_bool(obj, "lasx", loongarch_get_lasx,
|
||||
loongarch_set_lasx);
|
||||
/* lbt is enabled only in kvm mode, not supported in tcg mode */
|
||||
if (kvm_enabled()) {
|
||||
kvm_loongarch_cpu_post_init(cpu);
|
||||
}
|
||||
}
|
||||
|
||||
static void loongarch_cpu_init(Object *obj)
|
||||
{
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
|
|
|
|||
|
|
@ -494,6 +494,4 @@ static inline void set_pc(CPULoongArchState *env, uint64_t value)
|
|||
|
||||
#define CPU_RESOLVING_TYPE TYPE_LOONGARCH_CPU
|
||||
|
||||
void loongarch_cpu_post_init(Object *obj);
|
||||
|
||||
#endif /* LOONGARCH_CPU_H */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue