Skip to content

Commit

Permalink
arm: clarify the use of muldiv64()
Browse files Browse the repository at this point in the history
muldiv64() is used to convert microseconds into CPU ticks.

But it is not clear and not commented. This patch uses macro
to clearly identify what is used: time, CPU frequency and ticks.
For an elapsed time and a given frequency, we compute how many ticks
 we have.

Signed-off-by: Laurent Vivier <lvivier@redhat.com>
Reviewed-by: Peter Crosthwaite <crosthwaite.peter@gmail.com>
Acked-by: Peter Maydell <peter.maydell@linaro.org>
  • Loading branch information
vivier committed Sep 25, 2015
1 parent ccaf174 commit 352c98e
Showing 1 changed file with 8 additions and 6 deletions.
14 changes: 8 additions & 6 deletions target-arm/helper.c
Expand Up @@ -12,6 +12,8 @@
#include <zlib.h> /* For crc32 */
#include "exec/semihost.h"

#define ARM_CPU_FREQ 1000000000 /* FIXME: 1 GHz, should be configurable */

#ifndef CONFIG_USER_ONLY
static inline bool get_phys_addr(CPUARMState *env, target_ulong address,
int access_type, ARMMMUIdx mmu_idx,
Expand Down Expand Up @@ -706,8 +708,8 @@ void pmccntr_sync(CPUARMState *env)
{
uint64_t temp_ticks;

temp_ticks = muldiv64(qemu_clock_get_us(QEMU_CLOCK_VIRTUAL),
get_ticks_per_sec(), 1000000);
temp_ticks = muldiv64(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL),
ARM_CPU_FREQ, NANOSECONDS_PER_SECOND);

if (env->cp15.c9_pmcr & PMCRD) {
/* Increment once every 64 processor clock cycles */
Expand Down Expand Up @@ -745,8 +747,8 @@ static uint64_t pmccntr_read(CPUARMState *env, const ARMCPRegInfo *ri)
return env->cp15.c15_ccnt;
}

total_ticks = muldiv64(qemu_clock_get_us(QEMU_CLOCK_VIRTUAL),
get_ticks_per_sec(), 1000000);
total_ticks = muldiv64(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL),
ARM_CPU_FREQ, NANOSECONDS_PER_SECOND);

if (env->cp15.c9_pmcr & PMCRD) {
/* Increment once every 64 processor clock cycles */
Expand All @@ -766,8 +768,8 @@ static void pmccntr_write(CPUARMState *env, const ARMCPRegInfo *ri,
return;
}

total_ticks = muldiv64(qemu_clock_get_us(QEMU_CLOCK_VIRTUAL),
get_ticks_per_sec(), 1000000);
total_ticks = muldiv64(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL),
ARM_CPU_FREQ, NANOSECONDS_PER_SECOND);

if (env->cp15.c9_pmcr & PMCRD) {
/* Increment once every 64 processor clock cycles */
Expand Down

0 comments on commit 352c98e

Please sign in to comment.