Patchwork PPC: Add PIR register to POWER7 CPU

login
register
mail settings
Submitter Nathan Whitehorn
Date March 3, 2012, 4:36 p.m.
Message ID <4F524894.7060208@freebsd.org>
Download mbox | patch
Permalink /patch/144448/
State New
Headers show

Comments

Nathan Whitehorn - March 3, 2012, 4:36 p.m.
The POWER7 emulation is missing the Processor Identification Register, 
mandatory in recent POWER CPUs, that is required for SMP on at least 
some operating systems (e.g. FreeBSD) to function properly. This patch 
copies the existing PIR code from the other CPUs that implement it.

Signed-off-by: Nathan Whitehorn <nwhitehorn@freebsd.org>
---
  target-ppc/translate_init.c |    5 +++++
  1 files changed, 5 insertions(+), 0 deletions(-)

--
1.7.9
Andreas Färber - March 3, 2012, 6:06 p.m.
Am 03.03.2012 17:36, schrieb Nathan Whitehorn:
> The POWER7 emulation is missing the Processor Identification Register,
> mandatory in recent POWER CPUs, that is required for SMP on at least
> some operating systems (e.g. FreeBSD) to function properly. This patch
> copies the existing PIR code from the other CPUs that implement it.
> 
> Signed-off-by: Nathan Whitehorn <nwhitehorn@freebsd.org>

Please always cc the respective maintainers (and lists) according to
MAINTAINERS. CC'ing Alex and qemu-ppc.

> ---
>  target-ppc/translate_init.c |    5 +++++
>  1 files changed, 5 insertions(+), 0 deletions(-)
> 
> diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c
> index 8a7233f..01f4030 100644
> --- a/target-ppc/translate_init.c
> +++ b/target-ppc/translate_init.c
> @@ -6537,6 +6537,11 @@ static void init_proc_POWER7 (CPUPPCState *env)
>      /* Time base */
>      gen_tbl(env);
>  #if !defined(CONFIG_USER_ONLY)
> +    /* Processor identification */
> +    spr_register(env, SPR_PIR, "PIR",
> +                 SPR_NOACCESS, SPR_NOACCESS,
> + &spr_read_generic, &spr_write_pir,

Indentation looks weird here. Stray tab maybe?

Andreas

> +                 0x00000000);
>      /* PURR & SPURR: Hack - treat these as aliases for the TB for now */
>      spr_register(env, SPR_PURR,   "PURR",
> &spr_read_purr, SPR_NOACCESS,
> -- 
> 1.7.9
Alexander Graf - March 7, 2012, 3:41 p.m.
On 03/03/2012 07:06 PM, Andreas Färber wrote:
> Am 03.03.2012 17:36, schrieb Nathan Whitehorn:
>> The POWER7 emulation is missing the Processor Identification Register,
>> mandatory in recent POWER CPUs, that is required for SMP on at least
>> some operating systems (e.g. FreeBSD) to function properly. This patch
>> copies the existing PIR code from the other CPUs that implement it.
>>
>> Signed-off-by: Nathan Whitehorn<nwhitehorn@freebsd.org>
> Please always cc the respective maintainers (and lists) according to
> MAINTAINERS. CC'ing Alex and qemu-ppc.
>
>> ---
>>   target-ppc/translate_init.c |    5 +++++
>>   1 files changed, 5 insertions(+), 0 deletions(-)
>>
>> diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c
>> index 8a7233f..01f4030 100644
>> --- a/target-ppc/translate_init.c
>> +++ b/target-ppc/translate_init.c
>> @@ -6537,6 +6537,11 @@ static void init_proc_POWER7 (CPUPPCState *env)
>>       /* Time base */
>>       gen_tbl(env);
>>   #if !defined(CONFIG_USER_ONLY)
>> +    /* Processor identification */
>> +    spr_register(env, SPR_PIR, "PIR",
>> +                 SPR_NOACCESS, SPR_NOACCESS,
>> +&spr_read_generic,&spr_write_pir,
> Indentation looks weird here. Stray tab maybe?

No tab, just a broken patch. I fixed the whitespace and applied it to 
ppc-next.


Alex

Patch

diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c
index 8a7233f..01f4030 100644
--- a/target-ppc/translate_init.c
+++ b/target-ppc/translate_init.c
@@ -6537,6 +6537,11 @@  static void init_proc_POWER7 (CPUPPCState *env)
      /* Time base */
      gen_tbl(env);
  #if !defined(CONFIG_USER_ONLY)
+    /* Processor identification */
+    spr_register(env, SPR_PIR, "PIR",
+                 SPR_NOACCESS, SPR_NOACCESS,
+ &spr_read_generic, &spr_write_pir,
+                 0x00000000);
      /* PURR & SPURR: Hack - treat these as aliases for the TB for now */
      spr_register(env, SPR_PURR,   "PURR",
&spr_read_purr, SPR_NOACCESS,