[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PULL 11/12] cuda: factor out timebase-derived counter value
From: |
David Gibson |
Subject: |
[Qemu-ppc] [PULL 11/12] cuda: factor out timebase-derived counter value and load time |
Date: |
Mon, 12 Feb 2018 14:40:53 +1100 |
From: Mark Cave-Ayland <address@hidden>
Commit b981289c49 "PPC: Cuda: Use cuda timer to expose tbfreq to guest" altered
the timer calculations from those based upon the hardware CUDA clock frequency
to those based upon the CPU timebase frequency.
In fact we can isolate the differences to 2 simple changes: one to the counter
read value and another to the counter load time. Move these changes into
separate functions so the implementation can be swapped later.
Signed-off-by: Mark Cave-Ayland <address@hidden>
Reviewed-by: Philippe Mathieu-Daudé <address@hidden>
Signed-off-by: David Gibson <address@hidden>
---
hw/misc/macio/cuda.c | 25 ++++++++++++++++---------
1 file changed, 16 insertions(+), 9 deletions(-)
diff --git a/hw/misc/macio/cuda.c b/hw/misc/macio/cuda.c
index e00df4a21a..a185252144 100644
--- a/hw/misc/macio/cuda.c
+++ b/hw/misc/macio/cuda.c
@@ -145,21 +145,29 @@ static void cuda_update_irq(CUDAState *s)
}
}
-static uint64_t get_tb(uint64_t time, uint64_t freq)
+static uint64_t get_counter_value(CUDAState *s, CUDATimer *ti)
{
- return muldiv64(time, freq, NANOSECONDS_PER_SECOND);
+ /* Reverse of the tb calculation algorithm that Mac OS X uses on bootup */
+ uint64_t tb_diff = muldiv64(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL),
+ s->tb_frequency, NANOSECONDS_PER_SECOND) -
+ ti->load_time;
+
+ return (tb_diff * 0xBF401675E5DULL) / (s->tb_frequency << 24);
+}
+
+static uint64_t get_counter_load_time(CUDAState *s, CUDATimer *ti)
+{
+ uint64_t load_time = muldiv64(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL),
+ s->tb_frequency, NANOSECONDS_PER_SECOND);
+ return load_time;
}
static unsigned int get_counter(CUDAState *s, CUDATimer *ti)
{
int64_t d;
unsigned int counter;
- uint64_t tb_diff;
- uint64_t current_time = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
- /* Reverse of the tb calculation algorithm that Mac OS X uses on bootup. */
- tb_diff = get_tb(current_time, s->tb_frequency) - ti->load_time;
- d = (tb_diff * 0xBF401675E5DULL) / (s->tb_frequency << 24);
+ d = get_counter_value(s, ti);
if (ti->index == 0) {
/* the timer goes down from latch to -1 (period of latch + 2) */
@@ -178,8 +186,7 @@ static unsigned int get_counter(CUDAState *s, CUDATimer *ti)
static void set_counter(CUDAState *s, CUDATimer *ti, unsigned int val)
{
CUDA_DPRINTF("T%d.counter=%d\n", 1 + ti->index, val);
- ti->load_time = get_tb(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL),
- s->tb_frequency);
+ ti->load_time = get_counter_load_time(s, ti);
ti->counter_value = val;
cuda_timer_update(s, ti, ti->load_time);
}
--
2.14.3
- [Qemu-ppc] [PULL 00/12] ppc-for-2.12 queue 20180212, David Gibson, 2018/02/11
- [Qemu-ppc] [PULL 02/12] hw/ppc: rename functions in comments, David Gibson, 2018/02/11
- [Qemu-ppc] [PULL 01/12] spapr: add missing break in h_get_cpu_characteristics(), David Gibson, 2018/02/11
- [Qemu-ppc] [PULL 05/12] spapr: set vsmt to MAX(8, smp_threads), David Gibson, 2018/02/11
- [Qemu-ppc] [PULL 08/12] cuda: minor cosmetic tidy-ups to get_next_irq_time(), David Gibson, 2018/02/11
- [Qemu-ppc] [PULL 03/12] cuda: do not use old_mmio accesses, David Gibson, 2018/02/11
- [Qemu-ppc] [PULL 09/12] cuda: don't call cuda_update() when writing to ACR register, David Gibson, 2018/02/11
- [Qemu-ppc] [PULL 11/12] cuda: factor out timebase-derived counter value and load time,
David Gibson <=
- [Qemu-ppc] [PULL 06/12] cuda: introduce CUDAState parameter to get_counter(), David Gibson, 2018/02/11
- [Qemu-ppc] [PULL 07/12] cuda: rename frequency property to tb_frequency, David Gibson, 2018/02/11
- [Qemu-ppc] [PULL 04/12] cuda: don't allow writes to port output pins, David Gibson, 2018/02/11
- [Qemu-ppc] [PULL 10/12] cuda: set timer 1 frequency property to CUDA_TIMER_FREQ, David Gibson, 2018/02/11
- [Qemu-ppc] [PULL 12/12] misc: introduce new mos6522 VIA device and enable it for ppc builds, David Gibson, 2018/02/11
- Re: [Qemu-ppc] [PULL 00/12] ppc-for-2.12 queue 20180212, Peter Maydell, 2018/02/12
- Re: [Qemu-ppc] [PULL 00/12] ppc-for-2.12 queue 20180212, Laurent Vivier, 2018/02/12