153 lines
4.3 KiB
Diff
153 lines
4.3 KiB
Diff
|
|
From 773ea71519da1413ca2e0e60857272164e156a47 Mon Sep 17 00:00:00 2001
|
||
|
|
From: Tianrui Zhao <zhaotianrui@loongson.cn>
|
||
|
|
Date: Wed, 10 Jan 2024 10:41:51 +0100
|
||
|
|
Subject: [PATCH] target/loongarch: Restrict TCG-specific code
|
||
|
|
MIME-Version: 1.0
|
||
|
|
Content-Type: text/plain; charset=UTF-8
|
||
|
|
Content-Transfer-Encoding: 8bit
|
||
|
|
|
||
|
|
In preparation of supporting KVM in the next commit.
|
||
|
|
|
||
|
|
Conflict:
|
||
|
|
|
||
|
|
diff --cc target/loongarch/cpu.c
|
||
|
|
index 275833eec8,70dd4622aa..0000000000
|
||
|
|
--- a/target/loongarch/cpu.c
|
||
|
|
+++ b/target/loongarch/cpu.c
|
||
|
|
@@@ -17,9 -17,14 +17,17 @@@
|
||
|
|
#include "internals.h"
|
||
|
|
#include "fpu/softfloat-helpers.h"
|
||
|
|
#include "cpu-csr.h"
|
||
|
|
-#ifndef CONFIG_USER_ONLY
|
||
|
|
#include "sysemu/reset.h"
|
||
|
|
++<<<<<<< HEAD
|
||
|
|
+#include "tcg/tcg.h"
|
||
|
|
++=======
|
||
|
|
+ #endif
|
||
|
|
++>>>>>>> target/loongarch: Restrict TCG-specific code
|
||
|
|
#include "vec.h"
|
||
|
|
+ #ifdef CONFIG_TCG
|
||
|
|
+ #include "exec/cpu_ldst.h"
|
||
|
|
+ #include "tcg/tcg.h"
|
||
|
|
+ #endif
|
||
|
|
|
||
|
|
Solve:
|
||
|
|
|
||
|
|
drop:
|
||
|
|
++<<<<<<< HEAD
|
||
|
|
+#include "tcg/tcg.h"
|
||
|
|
++=======
|
||
|
|
+ #endif
|
||
|
|
++>>>>>>> target/loongarch: Restrict TCG-specific code
|
||
|
|
|
||
|
|
Signed-off-by: Tianrui Zhao <zhaotianrui@loongson.cn>
|
||
|
|
Signed-off-by: xianglai li <lixianglai@loongson.cn>
|
||
|
|
Reviewed-by: Song Gao <gaosong@loongson.cn>
|
||
|
|
Message-ID: <20240105075804.1228596-9-zhaotianrui@loongson.cn>
|
||
|
|
[PMD: Split from bigger patch, part 1]
|
||
|
|
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
|
||
|
|
Message-Id: <20240110094152.52138-1-philmd@linaro.org>
|
||
|
|
Signed-off-by: Song Gao <gaosong@loongson.cn>
|
||
|
|
---
|
||
|
|
target/loongarch/cpu.c | 30 +++++++++++++++++++++---------
|
||
|
|
1 file changed, 21 insertions(+), 9 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/target/loongarch/cpu.c b/target/loongarch/cpu.c
|
||
|
|
index 275833eec8..60f2636b43 100644
|
||
|
|
--- a/target/loongarch/cpu.c
|
||
|
|
+++ b/target/loongarch/cpu.c
|
||
|
|
@@ -11,15 +11,18 @@
|
||
|
|
#include "qapi/error.h"
|
||
|
|
#include "qemu/module.h"
|
||
|
|
#include "sysemu/qtest.h"
|
||
|
|
-#include "exec/cpu_ldst.h"
|
||
|
|
+#include "sysemu/tcg.h"
|
||
|
|
#include "exec/exec-all.h"
|
||
|
|
#include "cpu.h"
|
||
|
|
#include "internals.h"
|
||
|
|
#include "fpu/softfloat-helpers.h"
|
||
|
|
#include "cpu-csr.h"
|
||
|
|
#include "sysemu/reset.h"
|
||
|
|
-#include "tcg/tcg.h"
|
||
|
|
#include "vec.h"
|
||
|
|
+#ifdef CONFIG_TCG
|
||
|
|
+#include "exec/cpu_ldst.h"
|
||
|
|
+#include "tcg/tcg.h"
|
||
|
|
+#endif
|
||
|
|
|
||
|
|
const char * const regnames[32] = {
|
||
|
|
"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
|
||
|
|
@@ -108,12 +111,13 @@ void loongarch_cpu_set_irq(void *opaque, int irq, int level)
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
- env->CSR_ESTAT = deposit64(env->CSR_ESTAT, irq, 1, level != 0);
|
||
|
|
-
|
||
|
|
- if (FIELD_EX64(env->CSR_ESTAT, CSR_ESTAT, IS)) {
|
||
|
|
- cpu_interrupt(cs, CPU_INTERRUPT_HARD);
|
||
|
|
- } else {
|
||
|
|
- cpu_reset_interrupt(cs, CPU_INTERRUPT_HARD);
|
||
|
|
+ if (tcg_enabled()) {
|
||
|
|
+ env->CSR_ESTAT = deposit64(env->CSR_ESTAT, irq, 1, level != 0);
|
||
|
|
+ if (FIELD_EX64(env->CSR_ESTAT, CSR_ESTAT, IS)) {
|
||
|
|
+ cpu_interrupt(cs, CPU_INTERRUPT_HARD);
|
||
|
|
+ } else {
|
||
|
|
+ cpu_reset_interrupt(cs, CPU_INTERRUPT_HARD);
|
||
|
|
+ }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
@@ -138,7 +142,10 @@ static inline bool cpu_loongarch_hw_interrupts_pending(CPULoongArchState *env)
|
||
|
|
|
||
|
|
return (pending & status) != 0;
|
||
|
|
}
|
||
|
|
+#endif
|
||
|
|
|
||
|
|
+#ifdef CONFIG_TCG
|
||
|
|
+#ifndef CONFIG_USER_ONLY
|
||
|
|
static void loongarch_cpu_do_interrupt(CPUState *cs)
|
||
|
|
{
|
||
|
|
LoongArchCPU *cpu = LOONGARCH_CPU(cs);
|
||
|
|
@@ -320,7 +327,6 @@ static bool loongarch_cpu_exec_interrupt(CPUState *cs, int interrupt_request)
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
|
||
|
|
-#ifdef CONFIG_TCG
|
||
|
|
static void loongarch_cpu_synchronize_from_tb(CPUState *cs,
|
||
|
|
const TranslationBlock *tb)
|
||
|
|
{
|
||
|
|
@@ -558,7 +564,9 @@ static void loongarch_cpu_reset_hold(Object *obj)
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
|
||
|
|
+#ifdef CONFIG_TCG
|
||
|
|
restore_fp_status(env);
|
||
|
|
+#endif
|
||
|
|
cs->exception_index = -1;
|
||
|
|
}
|
||
|
|
|
||
|
|
@@ -701,8 +709,10 @@ static void loongarch_cpu_init(Object *obj)
|
||
|
|
CPULoongArchState *env = &cpu->env;
|
||
|
|
|
||
|
|
qdev_init_gpio_in(DEVICE(cpu), loongarch_cpu_set_irq, N_IRQS);
|
||
|
|
+#ifdef CONFIG_TCG
|
||
|
|
timer_init_ns(&cpu->timer, QEMU_CLOCK_VIRTUAL,
|
||
|
|
&loongarch_constant_timer_cb, cpu);
|
||
|
|
+#endif
|
||
|
|
memory_region_init_io(&env->system_iocsr, OBJECT(cpu), NULL,
|
||
|
|
env, "iocsr", UINT64_MAX);
|
||
|
|
address_space_init(&env->address_space_iocsr, &env->system_iocsr, "IOCSR");
|
||
|
|
@@ -802,7 +812,9 @@ static struct TCGCPUOps loongarch_tcg_ops = {
|
||
|
|
#include "hw/core/sysemu-cpu-ops.h"
|
||
|
|
|
||
|
|
static const struct SysemuCPUOps loongarch_sysemu_ops = {
|
||
|
|
+#ifdef CONFIG_TCG
|
||
|
|
.get_phys_page_debug = loongarch_cpu_get_phys_page_debug,
|
||
|
|
+#endif
|
||
|
|
};
|
||
|
|
|
||
|
|
static int64_t loongarch_cpu_get_arch_id(CPUState *cs)
|
||
|
|
--
|
||
|
|
2.27.0
|
||
|
|
|