[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 37/56] target/sparc: implement asr17 feature for smp
From: |
Philippe Mathieu-Daudé |
Subject: |
[PULL 37/56] target/sparc: implement asr17 feature for smp |
Date: |
Thu, 15 Feb 2024 18:57:31 +0100 |
From: Clément Chigot <chigot@adacore.com>
This allows the guest program to know its cpu id.
Co-developed-by: Frederic Konrad <konrad.frederic@yahoo.fr>
Signed-off-by: Clément Chigot <chigot@adacore.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-ID: <20240131085047.18458-6-chigot@adacore.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
target/sparc/helper.h | 1 +
target/sparc/helper.c | 16 ++++++++++++++++
target/sparc/translate.c | 13 +++----------
3 files changed, 20 insertions(+), 10 deletions(-)
diff --git a/target/sparc/helper.h b/target/sparc/helper.h
index 6a42ba4e9e..e55fad5b8c 100644
--- a/target/sparc/helper.h
+++ b/target/sparc/helper.h
@@ -2,6 +2,7 @@
DEF_HELPER_1(rett, void, env)
DEF_HELPER_2(wrpsr, void, env, tl)
DEF_HELPER_1(rdpsr, tl, env)
+DEF_HELPER_1(rdasr17, tl, env)
DEF_HELPER_1(power_down, void, env)
#else
DEF_HELPER_FLAGS_2(wrpil, TCG_CALL_NO_RWG, void, env, tl)
diff --git a/target/sparc/helper.c b/target/sparc/helper.c
index bd10b60e4b..2247e243b5 100644
--- a/target/sparc/helper.c
+++ b/target/sparc/helper.c
@@ -212,4 +212,20 @@ void helper_power_down(CPUSPARCState *env)
env->npc = env->pc + 4;
cpu_loop_exit(cs);
}
+
+target_ulong helper_rdasr17(CPUSPARCState *env)
+{
+ CPUState *cs = env_cpu(env);
+ target_ulong val;
+
+ /*
+ * TODO: There are many more fields to be filled,
+ * some of which are writable.
+ */
+ val = env->def.nwindows - 1; /* [4:0] NWIN */
+ val |= 1 << 8; /* [8] V8 */
+ val |= (cs->cpu_index) << 28; /* [31:28] INDEX */
+
+ return val;
+}
#endif
diff --git a/target/sparc/translate.c b/target/sparc/translate.c
index d9304a5bc4..692ce0b010 100644
--- a/target/sparc/translate.c
+++ b/target/sparc/translate.c
@@ -37,6 +37,7 @@
#ifdef TARGET_SPARC64
# define gen_helper_rdpsr(D, E) qemu_build_not_reached()
+# define gen_helper_rdasr17(D, E) qemu_build_not_reached()
# define gen_helper_rett(E) qemu_build_not_reached()
# define gen_helper_power_down(E) qemu_build_not_reached()
# define gen_helper_wrpsr(E, S) qemu_build_not_reached()
@@ -2382,16 +2383,8 @@ static bool trans_RDY(DisasContext *dc, arg_RDY *a)
static TCGv do_rd_leon3_config(DisasContext *dc, TCGv dst)
{
- uint32_t val;
-
- /*
- * TODO: There are many more fields to be filled,
- * some of which are writable.
- */
- val = dc->def->nwindows - 1; /* [4:0] NWIN */
- val |= 1 << 8; /* [8] V8 */
-
- return tcg_constant_tl(val);
+ gen_helper_rdasr17(dst, tcg_env);
+ return dst;
}
TRANS(RDASR17, ASR17, do_rd_special, true, a->rd, do_rd_leon3_config)
--
2.41.0
- [PULL 27/56] hw/sparc/sun4m: Realize DMA controller before accessing it, (continued)
- [PULL 27/56] hw/sparc/sun4m: Realize DMA controller before accessing it, Philippe Mathieu-Daudé, 2024/02/15
- [PULL 28/56] hw/sparc64/cpu: Initialize GPIO before realizing CPU devices, Philippe Mathieu-Daudé, 2024/02/15
- [PULL 29/56] target/sparc: Provide hint about CPUSPARCState::irq_manager member, Philippe Mathieu-Daudé, 2024/02/15
- [PULL 30/56] hw/sparc/leon3: Remove duplicate code, Philippe Mathieu-Daudé, 2024/02/15
- [PULL 31/56] hw/sparc/leon3: Remove unused 'env' argument of write_bootloader(), Philippe Mathieu-Daudé, 2024/02/15
- [PULL 32/56] hw/sparc/leon3: Have write_bootloader() take a void pointer argument, Philippe Mathieu-Daudé, 2024/02/15
- [PULL 33/56] hw/sparc/grlib: split out the headers for each peripherals, Philippe Mathieu-Daudé, 2024/02/15
- [PULL 34/56] hw/intc/grlib_irqmp: add ncpus property, Philippe Mathieu-Daudé, 2024/02/15
- [PULL 36/56] hw/intc/grlib_irqmp: implements multicore irq, Philippe Mathieu-Daudé, 2024/02/15
- [PULL 35/56] hw/intc/grlib_irqmp: implements the multiprocessor status register, Philippe Mathieu-Daudé, 2024/02/15
- [PULL 37/56] target/sparc: implement asr17 feature for smp,
Philippe Mathieu-Daudé <=
- [PULL 38/56] hw/sparc/leon3: remove SP initialization, Philippe Mathieu-Daudé, 2024/02/15
- [PULL 39/56] hw/sparc/leon3: implement multiprocessor, Philippe Mathieu-Daudé, 2024/02/15
- [PULL 40/56] hw/sparc/leon3: check cpu_id in the tiny bootloader, Philippe Mathieu-Daudé, 2024/02/15
- [PULL 41/56] hw/sparc/leon3: Pass DeviceState opaque argument to leon3_set_pil_in(), Philippe Mathieu-Daudé, 2024/02/15
- [PULL 42/56] hw/sparc/leon3: Pass DeviceState opaque argument to leon3_start_cpu(), Philippe Mathieu-Daudé, 2024/02/15
- [PULL 43/56] hw/sparc/leon3: Initialize GPIO before realizing CPU devices, Philippe Mathieu-Daudé, 2024/02/15
- [PULL 46/56] hw/i386/q35: Simplify pc_q35_init() since PCI is always enabled, Philippe Mathieu-Daudé, 2024/02/15
- [PULL 45/56] MAINTAINERS: Add myself as reviewer for TCG Plugins, Philippe Mathieu-Daudé, 2024/02/15
- [PULL 44/56] MAINTAINERS: replace Fabien by myself as Leon3 maintainer, Philippe Mathieu-Daudé, 2024/02/15
- [PULL 47/56] hw/i386/q35: Use DEVICE() cast macro with PCIDevice object, Philippe Mathieu-Daudé, 2024/02/15