diff mbox

[v2,5/7] target-arm: Remove old code and replace with new functions

Message ID a2eb12bf4edf83ef6fbfef75e1766619071dd278.1403757527.git.alistair.francis@xilinx.com
State New
Headers show

Commit Message

Alistair Francis June 26, 2014, 5:02 a.m. UTC
Remove the old PMCCNTR code and replace it with calls to the new
pmccntr_sync() function and the CCNT_ENABLED macro

Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
---

 target-arm/helper.c |   27 ++++-----------------------
 1 files changed, 4 insertions(+), 23 deletions(-)

Comments

Peter Crosthwaite June 26, 2014, 11:38 a.m. UTC | #1
On Thu, Jun 26, 2014 at 3:02 PM, Alistair Francis
<alistair.francis@xilinx.com> wrote:
> Remove the old PMCCNTR code and replace it with calls to the new
> pmccntr_sync() function and the CCNT_ENABLED macro

arm_ccnt_enabled() function.

>
> Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
> ---
>
>  target-arm/helper.c |   27 ++++-----------------------
>  1 files changed, 4 insertions(+), 23 deletions(-)
>
> diff --git a/target-arm/helper.c b/target-arm/helper.c
> index 016fe47..0bd00cb 100644
> --- a/target-arm/helper.c
> +++ b/target-arm/helper.c
> @@ -609,20 +609,7 @@ void pmccntr_sync(CPUARMState *env)
>  static void pmcr_write(CPUARMState *env, const ARMCPRegInfo *ri,
>                         uint64_t value)
>  {
> -    uint64_t temp_ticks;
> -
> -    temp_ticks = muldiv64(qemu_clock_get_us(QEMU_CLOCK_VIRTUAL),
> -                          get_ticks_per_sec(), 1000000);
> -
> -    if (env->cp15.c9_pmcr & PMCRE) {
> -        /* If the counter is enabled */
> -        if (env->cp15.c9_pmcr & PMCRD) {
> -            /* Increment once every 64 processor clock cycles */
> -            env->cp15.c15_ccnt = (temp_ticks/64) - env->cp15.c15_ccnt;
> -        } else {
> -            env->cp15.c15_ccnt = temp_ticks - env->cp15.c15_ccnt;
> -        }
> -    }
> +    pmccntr_sync(env);
>
>      if (value & PMCRC) {
>          /* The counter has been reset */
> @@ -633,20 +620,14 @@ static void pmcr_write(CPUARMState *env, const ARMCPRegInfo *ri,
>      env->cp15.c9_pmcr &= ~0x39;
>      env->cp15.c9_pmcr |= (value & 0x39);
>
> -    if (env->cp15.c9_pmcr & PMCRE) {
> -        if (env->cp15.c9_pmcr & PMCRD) {
> -            /* Increment once every 64 processor clock cycles */
> -            temp_ticks /= 64;
> -        }
> -        env->cp15.c15_ccnt = temp_ticks - env->cp15.c15_ccnt;
> -    }
> +    pmccntr_sync(env);
>  }
>
>  static uint64_t pmccntr_read(CPUARMState *env, const ARMCPRegInfo *ri)
>  {
>      uint64_t total_ticks;
>
> -    if (!(env->cp15.c9_pmcr & PMCRE)) {
> +    if (!arm_ccnt_enabled(env)) {
>          /* Counter is disabled, do not change value */
>          return env->cp15.c15_ccnt;
>      }
> @@ -666,7 +647,7 @@ static void pmccntr_write(CPUARMState *env, const ARMCPRegInfo *ri,
>  {
>      uint64_t total_ticks;
>
> -    if (!(env->cp15.c9_pmcr & PMCRE)) {
> +    if (!arm_ccnt_enabled(env)) {

Is it valid to write to the running counter?

If so you can sync(), update sync() to implement easily now and drop the if.

Regards,
Peter

>          /* Counter is disabled, set the absolute value */
>          env->cp15.c15_ccnt = value;
>          return;
> --
> 1.7.1
>
>
Alistair Francis June 27, 2014, 12:22 a.m. UTC | #2
On Thu, Jun 26, 2014 at 9:38 PM, Peter Crosthwaite
<peter.crosthwaite@xilinx.com> wrote:
> On Thu, Jun 26, 2014 at 3:02 PM, Alistair Francis
> <alistair.francis@xilinx.com> wrote:
>> Remove the old PMCCNTR code and replace it with calls to the new
>> pmccntr_sync() function and the CCNT_ENABLED macro
>
> arm_ccnt_enabled() function.
>
>>
>> Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
>> ---
>>
>>  target-arm/helper.c |   27 ++++-----------------------
>>  1 files changed, 4 insertions(+), 23 deletions(-)
>>
>> diff --git a/target-arm/helper.c b/target-arm/helper.c
>> index 016fe47..0bd00cb 100644
>> --- a/target-arm/helper.c
>> +++ b/target-arm/helper.c
>> @@ -609,20 +609,7 @@ void pmccntr_sync(CPUARMState *env)
>>  static void pmcr_write(CPUARMState *env, const ARMCPRegInfo *ri,
>>                         uint64_t value)
>>  {
>> -    uint64_t temp_ticks;
>> -
>> -    temp_ticks = muldiv64(qemu_clock_get_us(QEMU_CLOCK_VIRTUAL),
>> -                          get_ticks_per_sec(), 1000000);
>> -
>> -    if (env->cp15.c9_pmcr & PMCRE) {
>> -        /* If the counter is enabled */
>> -        if (env->cp15.c9_pmcr & PMCRD) {
>> -            /* Increment once every 64 processor clock cycles */
>> -            env->cp15.c15_ccnt = (temp_ticks/64) - env->cp15.c15_ccnt;
>> -        } else {
>> -            env->cp15.c15_ccnt = temp_ticks - env->cp15.c15_ccnt;
>> -        }
>> -    }
>> +    pmccntr_sync(env);
>>
>>      if (value & PMCRC) {
>>          /* The counter has been reset */
>> @@ -633,20 +620,14 @@ static void pmcr_write(CPUARMState *env, const ARMCPRegInfo *ri,
>>      env->cp15.c9_pmcr &= ~0x39;
>>      env->cp15.c9_pmcr |= (value & 0x39);
>>
>> -    if (env->cp15.c9_pmcr & PMCRE) {
>> -        if (env->cp15.c9_pmcr & PMCRD) {
>> -            /* Increment once every 64 processor clock cycles */
>> -            temp_ticks /= 64;
>> -        }
>> -        env->cp15.c15_ccnt = temp_ticks - env->cp15.c15_ccnt;
>> -    }
>> +    pmccntr_sync(env);
>>  }
>>
>>  static uint64_t pmccntr_read(CPUARMState *env, const ARMCPRegInfo *ri)
>>  {
>>      uint64_t total_ticks;
>>
>> -    if (!(env->cp15.c9_pmcr & PMCRE)) {
>> +    if (!arm_ccnt_enabled(env)) {
>>          /* Counter is disabled, do not change value */
>>          return env->cp15.c15_ccnt;
>>      }
>> @@ -666,7 +647,7 @@ static void pmccntr_write(CPUARMState *env, const ARMCPRegInfo *ri,
>>  {
>>      uint64_t total_ticks;
>>
>> -    if (!(env->cp15.c9_pmcr & PMCRE)) {
>> +    if (!arm_ccnt_enabled(env)) {
>
> Is it valid to write to the running counter?

It is a RW register, so I'm assuming it can be set

>
> If so you can sync(), update sync() to implement easily now and drop the if.

It's not the same process as the other syncs. This logic includes the value that
is being written, which the sync function doesn't. It would require
changes to the
sync function, with values to be passed in. It doesn't seem like it's
worth doing

>
> Regards,
> Peter
>
>>          /* Counter is disabled, set the absolute value */
>>          env->cp15.c15_ccnt = value;
>>          return;
>> --
>> 1.7.1
>>
>>
>
diff mbox

Patch

diff --git a/target-arm/helper.c b/target-arm/helper.c
index 016fe47..0bd00cb 100644
--- a/target-arm/helper.c
+++ b/target-arm/helper.c
@@ -609,20 +609,7 @@  void pmccntr_sync(CPUARMState *env)
 static void pmcr_write(CPUARMState *env, const ARMCPRegInfo *ri,
                        uint64_t value)
 {
-    uint64_t temp_ticks;
-
-    temp_ticks = muldiv64(qemu_clock_get_us(QEMU_CLOCK_VIRTUAL),
-                          get_ticks_per_sec(), 1000000);
-
-    if (env->cp15.c9_pmcr & PMCRE) {
-        /* If the counter is enabled */
-        if (env->cp15.c9_pmcr & PMCRD) {
-            /* Increment once every 64 processor clock cycles */
-            env->cp15.c15_ccnt = (temp_ticks/64) - env->cp15.c15_ccnt;
-        } else {
-            env->cp15.c15_ccnt = temp_ticks - env->cp15.c15_ccnt;
-        }
-    }
+    pmccntr_sync(env);
 
     if (value & PMCRC) {
         /* The counter has been reset */
@@ -633,20 +620,14 @@  static void pmcr_write(CPUARMState *env, const ARMCPRegInfo *ri,
     env->cp15.c9_pmcr &= ~0x39;
     env->cp15.c9_pmcr |= (value & 0x39);
 
-    if (env->cp15.c9_pmcr & PMCRE) {
-        if (env->cp15.c9_pmcr & PMCRD) {
-            /* Increment once every 64 processor clock cycles */
-            temp_ticks /= 64;
-        }
-        env->cp15.c15_ccnt = temp_ticks - env->cp15.c15_ccnt;
-    }
+    pmccntr_sync(env);
 }
 
 static uint64_t pmccntr_read(CPUARMState *env, const ARMCPRegInfo *ri)
 {
     uint64_t total_ticks;
 
-    if (!(env->cp15.c9_pmcr & PMCRE)) {
+    if (!arm_ccnt_enabled(env)) {
         /* Counter is disabled, do not change value */
         return env->cp15.c15_ccnt;
     }
@@ -666,7 +647,7 @@  static void pmccntr_write(CPUARMState *env, const ARMCPRegInfo *ri,
 {
     uint64_t total_ticks;
 
-    if (!(env->cp15.c9_pmcr & PMCRE)) {
+    if (!arm_ccnt_enabled(env)) {
         /* Counter is disabled, set the absolute value */
         env->cp15.c15_ccnt = value;
         return;