All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Vivier <lvivier@redhat.com>
To: qemu-devel@nongnu.org, Jia Liu <proljc@gmail.com>
Subject: [Qemu-devel] [PATCH v3 5/9] openrisc: remove muldiv64()
Date: Thu, 27 Aug 2015 21:33:03 +0200	[thread overview]
Message-ID: <1440703987-29012-6-git-send-email-lvivier@redhat.com> (raw)
In-Reply-To: <1440703987-29012-1-git-send-email-lvivier@redhat.com>

Originally, timers were ticks based, and it made sense to
add ticks to current time to know when to trigger an alarm.

But since commit:

7447545 change all other clock references to use nanosecond resolution accessors

All timers use nanoseconds and we need to convert ticks to nanoseconds, by
doing something like:

    y = muldiv64(x, get_ticks_per_sec(), TIMER_FREQ)

where x is the number of device ticks and y the number of system ticks.

y is used as nanoseconds in timer functions,
it works because 1 tick is 1 nanosecond.
(get_ticks_per_sec() is 10^9)

But as openrisc timer frequency is 20 MHz, we can also do:

    y = x * 50; /* 20 MHz period is 50 ns */

Signed-off-by: Laurent Vivier <lvivier@redhat.com>
---
 hw/openrisc/cputimer.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/hw/openrisc/cputimer.c b/hw/openrisc/cputimer.c
index 9c54945..560cb91 100644
--- a/hw/openrisc/cputimer.c
+++ b/hw/openrisc/cputimer.c
@@ -22,7 +22,7 @@
 #include "hw/hw.h"
 #include "qemu/timer.h"
 
-#define TIMER_FREQ    (20 * 1000 * 1000)    /* 20MHz */
+#define TIMER_PERIOD 50 /* 50 ns period for 20 MHz timer */
 
 /* The time when TTCR changes */
 static uint64_t last_clk;
@@ -36,8 +36,7 @@ void cpu_openrisc_count_update(OpenRISCCPU *cpu)
         return;
     }
     now = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
-    cpu->env.ttcr += (uint32_t)muldiv64(now - last_clk, TIMER_FREQ,
-                                        get_ticks_per_sec());
+    cpu->env.ttcr += (uint32_t)((now - last_clk) / TIMER_PERIOD);
     last_clk = now;
 }
 
@@ -59,7 +58,7 @@ void cpu_openrisc_timer_update(OpenRISCCPU *cpu)
     } else {
         wait = (cpu->env.ttmr & TTMR_TP) - (cpu->env.ttcr & TTMR_TP);
     }
-    next = now + muldiv64(wait, get_ticks_per_sec(), TIMER_FREQ);
+    next = now + (uint64_t)wait * TIMER_PERIOD;
     timer_mod(cpu->env.timer, next);
 }
 
-- 
2.1.0

  parent reply	other threads:[~2015-08-27 19:33 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-27 19:32 [Qemu-devel] [PATCH v3 0/9] remove useless muldiv64() Laurent Vivier
2015-08-27 19:32 ` [Qemu-devel] [PATCH v3 1/9] i6300esb: remove muldiv64() Laurent Vivier
2015-09-14 13:31   ` [Qemu-devel] [PATCH v4 " Laurent Vivier
2015-08-27 19:33 ` [Qemu-devel] [PATCH v3 2/9] rtl8139: " Laurent Vivier
2015-08-28 14:12   ` Stefan Hajnoczi
2015-08-27 19:33 ` [Qemu-devel] [PATCH v3 3/9] pcnet: " Laurent Vivier
2015-08-28 14:12   ` Stefan Hajnoczi
2015-08-27 19:33 ` [Qemu-devel] [PATCH v3 4/9] mips: " Laurent Vivier
2015-09-08 12:54   ` Laurent Vivier
2015-09-08 13:42   ` Leon Alrae
2015-08-27 19:33 ` Laurent Vivier [this message]
2015-09-08 12:54   ` [Qemu-devel] [PATCH v3 5/9] openrisc: " Laurent Vivier
2015-08-27 19:33 ` [Qemu-devel] [PATCH v3 6/9] arm: clarify the use of muldiv64() Laurent Vivier
2015-08-27 20:23   ` Peter Crosthwaite
2015-09-01 11:17   ` Peter Maydell
2015-09-01 11:23     ` Laurent Vivier
2015-09-01 11:30       ` Peter Maydell
2015-08-27 19:33 ` [Qemu-devel] [PATCH v3 7/9] hpet: remove muldiv64() Laurent Vivier
2015-09-08 12:55   ` Laurent Vivier
2015-09-08 12:58     ` Paolo Bonzini
2015-08-27 19:33 ` [Qemu-devel] [PATCH v3 8/9] bt: " Laurent Vivier
2015-09-08 12:55   ` Laurent Vivier
2015-09-08 12:57     ` Paolo Bonzini
2015-08-27 19:33 ` [Qemu-devel] [PATCH v3 9/9] net: " Laurent Vivier
2015-08-28 14:12   ` Stefan Hajnoczi
2015-09-24 16:21 ` [Qemu-devel] [PATCH v3 0/9] remove useless muldiv64() Laurent Vivier
2015-09-25 10:31   ` Paolo Bonzini

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=1440703987-29012-6-git-send-email-lvivier@redhat.com \
    --to=lvivier@redhat.com \
    --cc=proljc@gmail.com \
    --cc=qemu-devel@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.