qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] SPARC: Fix LEON3 power down instruction
@ 2013-11-25 14:22 Sebastian Huber
  2013-11-26 11:24 ` Fabien Chouteau
  2013-11-26 21:02 ` Peter Maydell
  0 siblings, 2 replies; 8+ messages in thread
From: Sebastian Huber @ 2013-11-25 14:22 UTC (permalink / raw)
  To: qemu-devel; +Cc: Ronald Hecht, Blue Swirl, Fabien Chouteau, Sebastian Huber

The env->pc is not necessarily up-to-date in the helper function.  Use
the program counter of the disassembly context instead.

Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
---
 target-sparc/helper.c    |    6 +++---
 target-sparc/helper.h    |    2 +-
 target-sparc/translate.c |    3 ++-
 3 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/target-sparc/helper.c b/target-sparc/helper.c
index e70d1bc..50912ff 100644
--- a/target-sparc/helper.c
+++ b/target-sparc/helper.c
@@ -314,14 +314,14 @@ target_ulong helper_tsubcctv(CPUSPARCState *env, target_ulong src1,
 }
 
 #ifndef TARGET_SPARC64
-void helper_power_down(CPUSPARCState *env)
+void helper_power_down(CPUSPARCState *env, uint32_t pc)
 {
     CPUState *cs = CPU(sparc_env_get_cpu(env));
 
     cs->halted = 1;
     env->exception_index = EXCP_HLT;
-    env->pc = env->npc;
-    env->npc = env->pc + 4;
+    env->pc = pc + 4;
+    env->npc = pc + 8;
     cpu_loop_exit(env);
 }
 #endif
diff --git a/target-sparc/helper.h b/target-sparc/helper.h
index fc49cd8..c4752c7 100644
--- a/target-sparc/helper.h
+++ b/target-sparc/helper.h
@@ -6,7 +6,7 @@ DEF_HELPER_2(trace_insn, void, env, i32)
 DEF_HELPER_1(rett, void, env)
 DEF_HELPER_2(wrpsr, void, env, tl)
 DEF_HELPER_1(rdpsr, tl, env)
-DEF_HELPER_1(power_down, void, env)
+DEF_HELPER_2(power_down, void, env, i32)
 #else
 DEF_HELPER_2(wrpil, void, env, tl)
 DEF_HELPER_2(wrpstate, void, env, tl)
diff --git a/target-sparc/translate.c b/target-sparc/translate.c
index 0588d23..d9ee90c 100644
--- a/target-sparc/translate.c
+++ b/target-sparc/translate.c
@@ -3631,7 +3631,8 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
                                 if ((rd == 0x13) && (dc->def->features &
                                                      CPU_FEATURE_POWERDOWN)) {
                                     /* LEON3 power-down */
-                                    gen_helper_power_down(cpu_env);
+                                    tcg_gen_movi_i32(cpu_tmp0, dc->pc);
+                                    gen_helper_power_down(cpu_env, cpu_tmp0);
                                 }
                                 break;
 #else
-- 
1.7.7

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH] SPARC: Fix LEON3 power down instruction
  2013-11-25 14:22 [Qemu-devel] [PATCH] SPARC: Fix LEON3 power down instruction Sebastian Huber
@ 2013-11-26 11:24 ` Fabien Chouteau
  2013-11-26 21:02 ` Peter Maydell
  1 sibling, 0 replies; 8+ messages in thread
From: Fabien Chouteau @ 2013-11-26 11:24 UTC (permalink / raw)
  To: Sebastian Huber, qemu-devel; +Cc: Ronald Hecht, Blue Swirl

On 11/25/2013 03:22 PM, Sebastian Huber wrote:
> The env->pc is not necessarily up-to-date in the helper function.  Use
> the program counter of the disassembly context instead.
> 

Looks good. Thanks Sebastian.

Reviewed-by: Fabien Chouteau <chouteau@adacore.com>

> Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
> ---
>  target-sparc/helper.c    |    6 +++---
>  target-sparc/helper.h    |    2 +-
>  target-sparc/translate.c |    3 ++-
>  3 files changed, 6 insertions(+), 5 deletions(-)
> 
> diff --git a/target-sparc/helper.c b/target-sparc/helper.c
> index e70d1bc..50912ff 100644
> --- a/target-sparc/helper.c
> +++ b/target-sparc/helper.c
> @@ -314,14 +314,14 @@ target_ulong helper_tsubcctv(CPUSPARCState *env, target_ulong src1,
>  }
>  
>  #ifndef TARGET_SPARC64
> -void helper_power_down(CPUSPARCState *env)
> +void helper_power_down(CPUSPARCState *env, uint32_t pc)
>  {
>      CPUState *cs = CPU(sparc_env_get_cpu(env));
>  
>      cs->halted = 1;
>      env->exception_index = EXCP_HLT;
> -    env->pc = env->npc;
> -    env->npc = env->pc + 4;
> +    env->pc = pc + 4;
> +    env->npc = pc + 8;
>      cpu_loop_exit(env);
>  }
>  #endif
> diff --git a/target-sparc/helper.h b/target-sparc/helper.h
> index fc49cd8..c4752c7 100644
> --- a/target-sparc/helper.h
> +++ b/target-sparc/helper.h
> @@ -6,7 +6,7 @@ DEF_HELPER_2(trace_insn, void, env, i32)
>  DEF_HELPER_1(rett, void, env)
>  DEF_HELPER_2(wrpsr, void, env, tl)
>  DEF_HELPER_1(rdpsr, tl, env)
> -DEF_HELPER_1(power_down, void, env)
> +DEF_HELPER_2(power_down, void, env, i32)
>  #else
>  DEF_HELPER_2(wrpil, void, env, tl)
>  DEF_HELPER_2(wrpstate, void, env, tl)
> diff --git a/target-sparc/translate.c b/target-sparc/translate.c
> index 0588d23..d9ee90c 100644
> --- a/target-sparc/translate.c
> +++ b/target-sparc/translate.c
> @@ -3631,7 +3631,8 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
>                                  if ((rd == 0x13) && (dc->def->features &
>                                                       CPU_FEATURE_POWERDOWN)) {
>                                      /* LEON3 power-down */
> -                                    gen_helper_power_down(cpu_env);
> +                                    tcg_gen_movi_i32(cpu_tmp0, dc->pc);
> +                                    gen_helper_power_down(cpu_env, cpu_tmp0);
>                                  }
>                                  break;
>  #else
> 

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH] SPARC: Fix LEON3 power down instruction
  2013-11-25 14:22 [Qemu-devel] [PATCH] SPARC: Fix LEON3 power down instruction Sebastian Huber
  2013-11-26 11:24 ` Fabien Chouteau
@ 2013-11-26 21:02 ` Peter Maydell
  2013-11-27  7:50   ` [Qemu-devel] [PATCH v2] " Sebastian Huber
  1 sibling, 1 reply; 8+ messages in thread
From: Peter Maydell @ 2013-11-26 21:02 UTC (permalink / raw)
  To: Sebastian Huber
  Cc: Ronald Hecht, Blue Swirl, QEMU Developers, Fabien Chouteau

On 25 November 2013 14:22, Sebastian Huber
<sebastian.huber@embedded-brains.de> wrote:
> The env->pc is not necessarily up-to-date in the helper function.  Use
> the program counter of the disassembly context instead.
>
> Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
> ---
>  target-sparc/helper.c    |    6 +++---
>  target-sparc/helper.h    |    2 +-
>  target-sparc/translate.c |    3 ++-
>  3 files changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/target-sparc/helper.c b/target-sparc/helper.c
> index e70d1bc..50912ff 100644
> --- a/target-sparc/helper.c
> +++ b/target-sparc/helper.c
> @@ -314,14 +314,14 @@ target_ulong helper_tsubcctv(CPUSPARCState *env, target_ulong src1,
>  }
>
>  #ifndef TARGET_SPARC64
> -void helper_power_down(CPUSPARCState *env)
> +void helper_power_down(CPUSPARCState *env, uint32_t pc)
>  {
>      CPUState *cs = CPU(sparc_env_get_cpu(env));
>
>      cs->halted = 1;
>      env->exception_index = EXCP_HLT;
> -    env->pc = env->npc;
> -    env->npc = env->pc + 4;
> +    env->pc = pc + 4;
> +    env->npc = pc + 8;
>      cpu_loop_exit(env);

This seems a bit of an odd way to do this. I think most of
the frontends have the generated code do a sync-up of the
PC before calling the helper.

-- PMM

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Qemu-devel] [PATCH v2] SPARC: Fix LEON3 power down instruction
  2013-11-26 21:02 ` Peter Maydell
@ 2013-11-27  7:50   ` Sebastian Huber
  2013-12-06 17:48     ` Richard Henderson
  0 siblings, 1 reply; 8+ messages in thread
From: Sebastian Huber @ 2013-11-27  7:50 UTC (permalink / raw)
  To: qemu-devel; +Cc: Peter Meydell, Fabien Chouteau, Sebastian Huber

Synchronize the program counter before the power down helper call
otherwise interrupts will return to the wrong context.

Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
---
 target-sparc/translate.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/target-sparc/translate.c b/target-sparc/translate.c
index 05639ef..7481c85 100644
--- a/target-sparc/translate.c
+++ b/target-sparc/translate.c
@@ -3630,6 +3630,7 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
                                 if ((rd == 0x13) && (dc->def->features &
                                                      CPU_FEATURE_POWERDOWN)) {
                                     /* LEON3 power-down */
+                                    save_state(dc);
                                     gen_helper_power_down(cpu_env);
                                 }
                                 break;
-- 
1.7.7

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH v2] SPARC: Fix LEON3 power down instruction
  2013-11-27  7:50   ` [Qemu-devel] [PATCH v2] " Sebastian Huber
@ 2013-12-06 17:48     ` Richard Henderson
  2014-01-07 18:07       ` Sebastian Huber
  0 siblings, 1 reply; 8+ messages in thread
From: Richard Henderson @ 2013-12-06 17:48 UTC (permalink / raw)
  To: Sebastian Huber, qemu-devel; +Cc: Peter Meydell, Fabien Chouteau

On 11/27/2013 08:50 PM, Sebastian Huber wrote:
> Synchronize the program counter before the power down helper call
> otherwise interrupts will return to the wrong context.
> 
> Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
> ---
>  target-sparc/translate.c |    1 +
>  1 files changed, 1 insertions(+), 0 deletions(-)
> 
> diff --git a/target-sparc/translate.c b/target-sparc/translate.c
> index 05639ef..7481c85 100644
> --- a/target-sparc/translate.c
> +++ b/target-sparc/translate.c
> @@ -3630,6 +3630,7 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
>                                  if ((rd == 0x13) && (dc->def->features &
>                                                       CPU_FEATURE_POWERDOWN)) {
>                                      /* LEON3 power-down */
> +                                    save_state(dc);
>                                      gen_helper_power_down(cpu_env);
>                                  }
>                                  break;
> 

Reviewed-by: Richard Henderson <rth@twiddle.net>


r~

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH v2] SPARC: Fix LEON3 power down instruction
  2013-12-06 17:48     ` Richard Henderson
@ 2014-01-07 18:07       ` Sebastian Huber
  2014-01-14  7:04         ` Sebastian Huber
  0 siblings, 1 reply; 8+ messages in thread
From: Sebastian Huber @ 2014-01-07 18:07 UTC (permalink / raw)
  To: qemu-devel; +Cc: blauwirbel, Fabien Chouteau, Richard Henderson

Hello,

would somebody mind committing this.

On 12/06/2013 06:48 PM, Richard Henderson wrote:
> On 11/27/2013 08:50 PM, Sebastian Huber wrote:
>> Synchronize the program counter before the power down helper call
>> otherwise interrupts will return to the wrong context.
>>
>> Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
>> ---
>>   target-sparc/translate.c |    1 +
>>   1 files changed, 1 insertions(+), 0 deletions(-)
>>
>> diff --git a/target-sparc/translate.c b/target-sparc/translate.c
>> index 05639ef..7481c85 100644
>> --- a/target-sparc/translate.c
>> +++ b/target-sparc/translate.c
>> @@ -3630,6 +3630,7 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
>>                                   if ((rd == 0x13) && (dc->def->features &
>>                                                        CPU_FEATURE_POWERDOWN)) {
>>                                       /* LEON3 power-down */
>> +                                    save_state(dc);
>>                                       gen_helper_power_down(cpu_env);
>>                                   }
>>                                   break;
>>
> Reviewed-by: Richard Henderson <rth@twiddle.net>
>
>
> r~
>


-- 
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.huber@embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH v2] SPARC: Fix LEON3 power down instruction
  2014-01-07 18:07       ` Sebastian Huber
@ 2014-01-14  7:04         ` Sebastian Huber
  2014-01-15  5:47           ` Edgar E. Iglesias
  0 siblings, 1 reply; 8+ messages in thread
From: Sebastian Huber @ 2014-01-14  7:04 UTC (permalink / raw)
  To: qemu-devel; +Cc: qemu-trivial

Hello,

maybe this patch can be qualified as trivial?

http://lists.nongnu.org/archive/html/qemu-devel/2013-11/msg03488.html

On 2014-01-07 19:07, Sebastian Huber wrote:
> Hello,
>
> would somebody mind committing this.
>
> On 12/06/2013 06:48 PM, Richard Henderson wrote:
>> On 11/27/2013 08:50 PM, Sebastian Huber wrote:
>>> Synchronize the program counter before the power down helper call
>>> otherwise interrupts will return to the wrong context.
>>>
>>> Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
>>> ---
>>>   target-sparc/translate.c |    1 +
>>>   1 files changed, 1 insertions(+), 0 deletions(-)
>>>
>>> diff --git a/target-sparc/translate.c b/target-sparc/translate.c
>>> index 05639ef..7481c85 100644
>>> --- a/target-sparc/translate.c
>>> +++ b/target-sparc/translate.c
>>> @@ -3630,6 +3630,7 @@ static void disas_sparc_insn(DisasContext * dc,
>>> unsigned int insn)
>>>                                   if ((rd == 0x13) && (dc->def->features &
>>>
>>> CPU_FEATURE_POWERDOWN)) {
>>>                                       /* LEON3 power-down */
>>> +                                    save_state(dc);
>>>                                       gen_helper_power_down(cpu_env);
>>>                                   }
>>>                                   break;
>>>
>> Reviewed-by: Richard Henderson <rth@twiddle.net>
>>
>>
>> r~
>>
>
>


-- 
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.huber@embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH v2] SPARC: Fix LEON3 power down instruction
  2014-01-14  7:04         ` Sebastian Huber
@ 2014-01-15  5:47           ` Edgar E. Iglesias
  0 siblings, 0 replies; 8+ messages in thread
From: Edgar E. Iglesias @ 2014-01-15  5:47 UTC (permalink / raw)
  To: Sebastian Huber; +Cc: qemu-trivial, qemu-devel

On Tue, Jan 14, 2014 at 08:04:40AM +0100, Sebastian Huber wrote:
> Hello,
> 
> maybe this patch can be qualified as trivial?

Hi,

I've applied it, thanks.

Cheers,
Edgar

> 
> http://lists.nongnu.org/archive/html/qemu-devel/2013-11/msg03488.html
> 
> On 2014-01-07 19:07, Sebastian Huber wrote:
> >Hello,
> >
> >would somebody mind committing this.
> >
> >On 12/06/2013 06:48 PM, Richard Henderson wrote:
> >>On 11/27/2013 08:50 PM, Sebastian Huber wrote:
> >>>Synchronize the program counter before the power down helper call
> >>>otherwise interrupts will return to the wrong context.
> >>>
> >>>Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
> >>>---
> >>>  target-sparc/translate.c |    1 +
> >>>  1 files changed, 1 insertions(+), 0 deletions(-)
> >>>
> >>>diff --git a/target-sparc/translate.c b/target-sparc/translate.c
> >>>index 05639ef..7481c85 100644
> >>>--- a/target-sparc/translate.c
> >>>+++ b/target-sparc/translate.c
> >>>@@ -3630,6 +3630,7 @@ static void disas_sparc_insn(DisasContext * dc,
> >>>unsigned int insn)
> >>>                                  if ((rd == 0x13) && (dc->def->features &
> >>>
> >>>CPU_FEATURE_POWERDOWN)) {
> >>>                                      /* LEON3 power-down */
> >>>+                                    save_state(dc);
> >>>                                      gen_helper_power_down(cpu_env);
> >>>                                  }
> >>>                                  break;
> >>>
> >>Reviewed-by: Richard Henderson <rth@twiddle.net>
> >>
> >>
> >>r~
> >>
> >
> >
> 
> 
> -- 
> Sebastian Huber, embedded brains GmbH
> 
> Address : Dornierstr. 4, D-82178 Puchheim, Germany
> Phone   : +49 89 189 47 41-16
> Fax     : +49 89 189 47 41-09
> E-Mail  : sebastian.huber@embedded-brains.de
> PGP     : Public key available on request.
> 
> Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
> 

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2014-01-15  5:48 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-11-25 14:22 [Qemu-devel] [PATCH] SPARC: Fix LEON3 power down instruction Sebastian Huber
2013-11-26 11:24 ` Fabien Chouteau
2013-11-26 21:02 ` Peter Maydell
2013-11-27  7:50   ` [Qemu-devel] [PATCH v2] " Sebastian Huber
2013-12-06 17:48     ` Richard Henderson
2014-01-07 18:07       ` Sebastian Huber
2014-01-14  7:04         ` Sebastian Huber
2014-01-15  5:47           ` Edgar E. Iglesias

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).