[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 3/9] ppc: allow the hdecr timer to be created/destroyed
From: |
Nicholas Piggin |
Subject: |
[PATCH v2 3/9] ppc: allow the hdecr timer to be created/destroyed |
Date: |
Wed, 16 Feb 2022 20:25:39 +1000 |
Machines which don't emulate the HDEC facility are able to use the
timer for something else. Provide functions to start and stop the
hdecr timer.
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
hw/ppc/ppc.c | 21 +++++++++++++++++++++
include/hw/ppc/ppc.h | 3 +++
2 files changed, 24 insertions(+)
diff --git a/hw/ppc/ppc.c b/hw/ppc/ppc.c
index c6dfc5975f..ad64015551 100644
--- a/hw/ppc/ppc.c
+++ b/hw/ppc/ppc.c
@@ -1083,6 +1083,27 @@ clk_setup_cb cpu_ppc_tb_init (CPUPPCState *env, uint32_t
freq)
return &cpu_ppc_set_tb_clk;
}
+/* cpu_ppc_hdecr_init may be used if the timer is not used by HDEC emulation */
+void cpu_ppc_hdecr_init(CPUPPCState *env)
+{
+ PowerPCCPU *cpu = env_archcpu(env);
+
+ assert(env->tb_env->hdecr_timer == NULL);
+
+ env->tb_env->hdecr_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL,
&cpu_ppc_hdecr_cb,
+ cpu);
+}
+
+void cpu_ppc_hdecr_exit(CPUPPCState *env)
+{
+ PowerPCCPU *cpu = env_archcpu(env);
+
+ timer_free(env->tb_env->hdecr_timer);
+ env->tb_env->hdecr_timer = NULL;
+
+ cpu_ppc_hdecr_lower(cpu);
+}
+
/*****************************************************************************/
/* PowerPC 40x timers */
diff --git a/include/hw/ppc/ppc.h b/include/hw/ppc/ppc.h
index 93e614cffd..b0ba4bd6b9 100644
--- a/include/hw/ppc/ppc.h
+++ b/include/hw/ppc/ppc.h
@@ -54,6 +54,9 @@ struct ppc_tb_t {
uint64_t cpu_ppc_get_tb(ppc_tb_t *tb_env, uint64_t vmclk, int64_t tb_offset);
clk_setup_cb cpu_ppc_tb_init (CPUPPCState *env, uint32_t freq);
+void cpu_ppc_hdecr_init(CPUPPCState *env);
+void cpu_ppc_hdecr_exit(CPUPPCState *env);
+
/* Embedded PowerPC DCR management */
typedef uint32_t (*dcr_read_cb)(void *opaque, int dcrn);
typedef void (*dcr_write_cb)(void *opaque, int dcrn, uint32_t val);
--
2.23.0
- [PATCH v2 0/9] ppc: nested KVM HV for spapr virtual hypervisor, Nicholas Piggin, 2022/02/16
- [PATCH v2 1/9] target/ppc: raise HV interrupts for partition table entry problems, Nicholas Piggin, 2022/02/16
- [PATCH v2 2/9] spapr: prevent hdec timer being set up under virtual hypervisor, Nicholas Piggin, 2022/02/16
- [PATCH v2 3/9] ppc: allow the hdecr timer to be created/destroyed,
Nicholas Piggin <=
- [PATCH v2 5/9] target/ppc: make vhyp get_pate method take lpid and return success, Nicholas Piggin, 2022/02/16
- [PATCH v2 4/9] target/ppc: add vhyp addressing mode helper for radix MMU, Nicholas Piggin, 2022/02/16
- [PATCH v2 6/9] target/ppc: add helper for books vhyp hypercall handler, Nicholas Piggin, 2022/02/16
- [PATCH v2 7/9] target/ppc: Add powerpc_reset_excp_state helper, Nicholas Piggin, 2022/02/16
- [PATCH v2 8/9] target/ppc: Introduce a vhyp framework for nested HV support, Nicholas Piggin, 2022/02/16
- [PATCH v2 9/9] spapr: implement nested-hv capability for the virtual hypervisor, Nicholas Piggin, 2022/02/16