All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
To: qemu-devel@nongnu.org, qemu-ppc@nongnu.org,
	david@gibson.dropbear.id.au, lvivier@redhat.com
Subject: [Qemu-devel] [PATCHv2 08/12] cuda: factor out timebase-derived counter value and load time
Date: Fri,  9 Feb 2018 18:51:38 +0000	[thread overview]
Message-ID: <20180209185142.17151-9-mark.cave-ayland@ilande.co.uk> (raw)
In-Reply-To: <20180209185142.17151-1-mark.cave-ayland@ilande.co.uk>

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 <mark.cave-ayland@ilande.co.uk>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 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.11.0

  parent reply	other threads:[~2018-02-09 18:52 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-09 18:51 [Qemu-devel] [PATCHv2 00/12] cuda: various fixes, tidy-ups, and move 6522 to separate device Mark Cave-Ayland
2018-02-09 18:51 ` [Qemu-devel] [PATCHv2 01/12] cuda: do not use old_mmio accesses Mark Cave-Ayland
2018-02-09 20:05   ` Philippe Mathieu-Daudé
2018-02-10  7:18     ` David Gibson
2018-02-10  7:22   ` David Gibson
2018-02-09 18:51 ` [Qemu-devel] [PATCHv2 02/12] cuda: don't allow writes to port output pins Mark Cave-Ayland
2018-02-10  7:23   ` David Gibson
2018-02-09 18:51 ` [Qemu-devel] [PATCHv2 03/12] cuda: don't call cuda_update() when writing to ACR register Mark Cave-Ayland
2018-02-10 22:35   ` David Gibson
2018-02-09 18:51 ` [Qemu-devel] [PATCHv2 04/12] cuda: introduce CUDAState parameter to get_counter() Mark Cave-Ayland
2018-02-10 22:31   ` David Gibson
2018-02-09 18:51 ` [Qemu-devel] [PATCHv2 05/12] cuda: rename frequency property to tb_frequency Mark Cave-Ayland
2018-02-10 22:32   ` David Gibson
2018-02-10 23:11     ` David Gibson
2018-02-11 10:59       ` Mark Cave-Ayland
2018-02-11 11:22         ` David Gibson
2018-02-09 18:51 ` [Qemu-devel] [PATCHv2 06/12] cuda: minor cosmetic tidy-ups to get_next_irq_time() Mark Cave-Ayland
2018-02-10 22:33   ` David Gibson
2018-02-09 18:51 ` [Qemu-devel] [PATCHv2 07/12] cuda: set timer 1 frequency property to CUDA_TIMER_FREQ Mark Cave-Ayland
2018-02-10 23:15   ` David Gibson
2018-02-09 18:51 ` Mark Cave-Ayland [this message]
2018-02-10 23:18   ` [Qemu-devel] [PATCHv2 08/12] cuda: factor out timebase-derived counter value and load time David Gibson
2018-02-09 18:51 ` [Qemu-devel] [PATCHv2 09/12] misc: introduce new mos6522 VIA device and enable it for ppc builds Mark Cave-Ayland
2018-02-10 23:20   ` David Gibson
2018-02-09 18:51 ` [Qemu-devel] [PATCHv2 10/12] cuda: convert to use the shared mos6522 device Mark Cave-Ayland
2018-02-12  7:49   ` David Gibson
2018-02-09 18:51 ` [Qemu-devel] [PATCHv2 11/12] ppc: move CUDAState and other CUDA-related definitions into separate cuda.h file Mark Cave-Ayland
2018-02-09 19:58   ` Philippe Mathieu-Daudé
2018-02-12  7:59   ` David Gibson
2018-02-09 18:51 ` [Qemu-devel] [PATCHv2 12/12] cuda: convert to trace-events Mark Cave-Ayland
2018-02-09 19:56   ` Philippe Mathieu-Daudé
2018-02-12  9:25   ` David Gibson
2018-02-09 19:12 ` [Qemu-devel] [PATCHv2 00/12] cuda: various fixes, tidy-ups, and move 6522 to separate device no-reply
2018-02-09 19:15   ` Mark Cave-Ayland

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180209185142.17151-9-mark.cave-ayland@ilande.co.uk \
    --to=mark.cave-ayland@ilande.co.uk \
    --cc=david@gibson.dropbear.id.au \
    --cc=lvivier@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.