Patchwork [05/30] PPC: fix hreset_vector for 60x, 7x0, 7x5, G2, MPC8xx, MPC5xx, 7400 and 7450

login
register
mail settings
Submitter Alexander Graf
Date April 26, 2013, 6:21 p.m.
Message ID <1367000509-8833-6-git-send-email-agraf@suse.de>
Download mbox | patch
Permalink /patch/239910/
State New
Headers show

Comments

Alexander Graf - April 26, 2013, 6:21 p.m.
From: Fabien Chouteau <chouteau@adacore.com>

According to the different user's manuals, the vector offset for system
reset (both /HRESET and /SRESET) is 0x00100.

This patch may break support of some executables, as the power-on start
address may change. For a specific board, if the power-on start address
is different than HRESET vector (i.e. 0x00000100 or 0xfff00100), this
should be fixed in board's initialization code.

Signed-off-by: Fabien Chouteau <chouteau@adacore.com>
Signed-off-by: Alexander Graf <agraf@suse.de>
---
 target-ppc/translate_init.c |   22 +++++++++++-----------
 1 files changed, 11 insertions(+), 11 deletions(-)
Andreas Färber - April 28, 2013, 1:59 p.m.
Am 26.04.2013 20:21, schrieb Alexander Graf:
> From: Fabien Chouteau <chouteau@adacore.com>
> 
> According to the different user's manuals, the vector offset for system
> reset (both /HRESET and /SRESET) is 0x00100.
> 
> This patch may break support of some executables, as the power-on start
> address may change. For a specific board, if the power-on start address
> is different than HRESET vector (i.e. 0x00000100 or 0xfff00100), this
> should be fixed in board's initialization code.
> 
> Signed-off-by: Fabien Chouteau <chouteau@adacore.com>
> Signed-off-by: Alexander Graf <agraf@suse.de>

According to git-bisect, this commit broke the prep machine (602).
Symptoms are a black screen with no VGA output from OHW or kernel.

Please suggest a fix.

Thanks,
Andreas

> ---
>  target-ppc/translate_init.c |   22 +++++++++++-----------
>  1 files changed, 11 insertions(+), 11 deletions(-)
> 
> diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c
> index 402ad2a..f1d150a 100644
> --- a/target-ppc/translate_init.c
> +++ b/target-ppc/translate_init.c
> @@ -2645,7 +2645,7 @@ static void init_excp_MPC5xx (CPUPPCState *env)
>      env->ivor_mask = 0x0000FFF0UL;
>      env->ivpr_mask = 0xFFFF0000UL;
>      /* Hardware reset vector */
> -    env->hreset_vector = 0xFFFFFFFCUL;
> +    env->hreset_vector = 0x00000100UL;
>  #endif
>  }
>  
> @@ -2676,7 +2676,7 @@ static void init_excp_MPC8xx (CPUPPCState *env)
>      env->ivor_mask = 0x0000FFF0UL;
>      env->ivpr_mask = 0xFFFF0000UL;
>      /* Hardware reset vector */
> -    env->hreset_vector = 0xFFFFFFFCUL;
> +    env->hreset_vector = 0x00000100UL;
>  #endif
>  }
>  
> @@ -2701,7 +2701,7 @@ static void init_excp_G2 (CPUPPCState *env)
>      env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;
>      env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
>      /* Hardware reset vector */
> -    env->hreset_vector = 0xFFFFFFFCUL;
> +    env->hreset_vector = 0x00000100UL;
>  #endif
>  }
>  
> @@ -2804,7 +2804,7 @@ static void init_excp_602 (CPUPPCState *env)
>      env->excp_vectors[POWERPC_EXCP_WDT]      = 0x00001500;
>      env->excp_vectors[POWERPC_EXCP_EMUL]     = 0x00001600;
>      /* Hardware reset vector */
> -    env->hreset_vector = 0xFFFFFFFCUL;
> +    env->hreset_vector = 0x00000100UL;
>  #endif
>  }
>  
> @@ -2828,7 +2828,7 @@ static void init_excp_603 (CPUPPCState *env)
>      env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;
>      env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
>      /* Hardware reset vector */
> -    env->hreset_vector = 0xFFFFFFFCUL;
> +    env->hreset_vector = 0x00000100UL;
>  #endif
>  }
>  
> @@ -2873,7 +2873,7 @@ static void init_excp_7x0 (CPUPPCState *env)
>      env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
>      env->excp_vectors[POWERPC_EXCP_THERM]    = 0x00001700;
>      /* Hardware reset vector */
> -    env->hreset_vector = 0xFFFFFFFCUL;
> +    env->hreset_vector = 0x00000100UL;
>  #endif
>  }
>  
> @@ -2895,7 +2895,7 @@ static void init_excp_750cl (CPUPPCState *env)
>      env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;
>      env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
>      /* Hardware reset vector */
> -    env->hreset_vector = 0xFFFFFFFCUL;
> +    env->hreset_vector = 0x00000100UL;
>  #endif
>  }
>  
> @@ -2917,7 +2917,7 @@ static void init_excp_750cx (CPUPPCState *env)
>      env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;
>      env->excp_vectors[POWERPC_EXCP_THERM]    = 0x00001700;
>      /* Hardware reset vector */
> -    env->hreset_vector = 0xFFFFFFFCUL;
> +    env->hreset_vector = 0x00000100UL;
>  #endif
>  }
>  
> @@ -2944,7 +2944,7 @@ static void init_excp_7x5 (CPUPPCState *env)
>      env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
>      env->excp_vectors[POWERPC_EXCP_THERM]    = 0x00001700;
>      /* Hardware reset vector */
> -    env->hreset_vector = 0xFFFFFFFCUL;
> +    env->hreset_vector = 0x00000100UL;
>  #endif
>  }
>  
> @@ -2969,7 +2969,7 @@ static void init_excp_7400 (CPUPPCState *env)
>      env->excp_vectors[POWERPC_EXCP_VPUA]     = 0x00001600;
>      env->excp_vectors[POWERPC_EXCP_THERM]    = 0x00001700;
>      /* Hardware reset vector */
> -    env->hreset_vector = 0xFFFFFFFCUL;
> +    env->hreset_vector = 0x00000100UL;
>  #endif
>  }
>  
> @@ -2996,7 +2996,7 @@ static void init_excp_7450 (CPUPPCState *env)
>      env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
>      env->excp_vectors[POWERPC_EXCP_VPUA]     = 0x00001600;
>      /* Hardware reset vector */
> -    env->hreset_vector = 0xFFFFFFFCUL;
> +    env->hreset_vector = 0x00000100UL;
>  #endif
>  }
>  
>
Fabien Chouteau - April 29, 2013, 10:38 a.m.
On 04/28/2013 03:59 PM, Andreas Färber wrote:
> Am 26.04.2013 20:21, schrieb Alexander Graf:
>> From: Fabien Chouteau <chouteau@adacore.com>
>>
>> According to the different user's manuals, the vector offset for system
>> reset (both /HRESET and /SRESET) is 0x00100.
>>
>> This patch may break support of some executables, as the power-on start
>> address may change. For a specific board, if the power-on start address
>> is different than HRESET vector (i.e. 0x00000100 or 0xfff00100), this
>> should be fixed in board's initialization code.
>>
>> Signed-off-by: Fabien Chouteau <chouteau@adacore.com>
>> Signed-off-by: Alexander Graf <agraf@suse.de>
> 
> According to git-bisect, this commit broke the prep machine (602).
> Symptoms are a black screen with no VGA output from OHW or kernel.
> 
> Please suggest a fix.
> 

Can you hand me the binaries so I can try to fix this?
Andreas Färber - April 29, 2013, 11:37 a.m.
Am 29.04.2013 12:38, schrieb Fabien Chouteau:
> On 04/28/2013 03:59 PM, Andreas Färber wrote:
>> Am 26.04.2013 20:21, schrieb Alexander Graf:
>>> From: Fabien Chouteau <chouteau@adacore.com>
>>>
>>> According to the different user's manuals, the vector offset for system
>>> reset (both /HRESET and /SRESET) is 0x00100.
>>>
>>> This patch may break support of some executables, as the power-on start
>>> address may change. For a specific board, if the power-on start address
>>> is different than HRESET vector (i.e. 0x00000100 or 0xfff00100), this
>>> should be fixed in board's initialization code.
>>>
>>> Signed-off-by: Fabien Chouteau <chouteau@adacore.com>
>>> Signed-off-by: Alexander Graf <agraf@suse.de>
>>
>> According to git-bisect, this commit broke the prep machine (602).
>> Symptoms are a black screen with no VGA output from OHW or kernel.
>>
>> Please suggest a fix.
>>
> 
> Can you hand me the binaries so I can try to fix this?

The old ppc_rom.bin is still in qemu.git, so this should suffice:

./ppc-softmmu/qemu-system-ppc -M prep

Problem is, we can't really recompile that binary with changes - and to
switch to OpenBIOS after 1.5 to get rid of it, I need to test that my
incremental patches don't break anything. ;)

Andreas
Aurelien Jarno - April 29, 2013, 1:05 p.m.
On Mon, Apr 29, 2013 at 01:37:30PM +0200, Andreas Färber wrote:
> Am 29.04.2013 12:38, schrieb Fabien Chouteau:
> > On 04/28/2013 03:59 PM, Andreas Färber wrote:
> >> Am 26.04.2013 20:21, schrieb Alexander Graf:
> >>> From: Fabien Chouteau <chouteau@adacore.com>
> >>>
> >>> According to the different user's manuals, the vector offset for system
> >>> reset (both /HRESET and /SRESET) is 0x00100.
> >>>
> >>> This patch may break support of some executables, as the power-on start
> >>> address may change. For a specific board, if the power-on start address
> >>> is different than HRESET vector (i.e. 0x00000100 or 0xfff00100), this
> >>> should be fixed in board's initialization code.
> >>>
> >>> Signed-off-by: Fabien Chouteau <chouteau@adacore.com>
> >>> Signed-off-by: Alexander Graf <agraf@suse.de>
> >>
> >> According to git-bisect, this commit broke the prep machine (602).
> >> Symptoms are a black screen with no VGA output from OHW or kernel.
> >>
> >> Please suggest a fix.
> >>
> > 
> > Can you hand me the binaries so I can try to fix this?
> 
> The old ppc_rom.bin is still in qemu.git, so this should suffice:
> 
> ./ppc-softmmu/qemu-system-ppc -M prep
> 
> Problem is, we can't really recompile that binary with changes - and to
> switch to OpenBIOS after 1.5 to get rid of it, I need to test that my
> incremental patches don't break anything. ;)

You can't really recompile this exact version, but you can recompile a
slightly older version, the one which is in the Debian archive:

http://packages.debian.org/source/unstable/openhackware

I don't know what are the difference between this one and the one in
QEMU though.

Patch

diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c
index 402ad2a..f1d150a 100644
--- a/target-ppc/translate_init.c
+++ b/target-ppc/translate_init.c
@@ -2645,7 +2645,7 @@  static void init_excp_MPC5xx (CPUPPCState *env)
     env->ivor_mask = 0x0000FFF0UL;
     env->ivpr_mask = 0xFFFF0000UL;
     /* Hardware reset vector */
-    env->hreset_vector = 0xFFFFFFFCUL;
+    env->hreset_vector = 0x00000100UL;
 #endif
 }
 
@@ -2676,7 +2676,7 @@  static void init_excp_MPC8xx (CPUPPCState *env)
     env->ivor_mask = 0x0000FFF0UL;
     env->ivpr_mask = 0xFFFF0000UL;
     /* Hardware reset vector */
-    env->hreset_vector = 0xFFFFFFFCUL;
+    env->hreset_vector = 0x00000100UL;
 #endif
 }
 
@@ -2701,7 +2701,7 @@  static void init_excp_G2 (CPUPPCState *env)
     env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;
     env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
     /* Hardware reset vector */
-    env->hreset_vector = 0xFFFFFFFCUL;
+    env->hreset_vector = 0x00000100UL;
 #endif
 }
 
@@ -2804,7 +2804,7 @@  static void init_excp_602 (CPUPPCState *env)
     env->excp_vectors[POWERPC_EXCP_WDT]      = 0x00001500;
     env->excp_vectors[POWERPC_EXCP_EMUL]     = 0x00001600;
     /* Hardware reset vector */
-    env->hreset_vector = 0xFFFFFFFCUL;
+    env->hreset_vector = 0x00000100UL;
 #endif
 }
 
@@ -2828,7 +2828,7 @@  static void init_excp_603 (CPUPPCState *env)
     env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;
     env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
     /* Hardware reset vector */
-    env->hreset_vector = 0xFFFFFFFCUL;
+    env->hreset_vector = 0x00000100UL;
 #endif
 }
 
@@ -2873,7 +2873,7 @@  static void init_excp_7x0 (CPUPPCState *env)
     env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
     env->excp_vectors[POWERPC_EXCP_THERM]    = 0x00001700;
     /* Hardware reset vector */
-    env->hreset_vector = 0xFFFFFFFCUL;
+    env->hreset_vector = 0x00000100UL;
 #endif
 }
 
@@ -2895,7 +2895,7 @@  static void init_excp_750cl (CPUPPCState *env)
     env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;
     env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
     /* Hardware reset vector */
-    env->hreset_vector = 0xFFFFFFFCUL;
+    env->hreset_vector = 0x00000100UL;
 #endif
 }
 
@@ -2917,7 +2917,7 @@  static void init_excp_750cx (CPUPPCState *env)
     env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;
     env->excp_vectors[POWERPC_EXCP_THERM]    = 0x00001700;
     /* Hardware reset vector */
-    env->hreset_vector = 0xFFFFFFFCUL;
+    env->hreset_vector = 0x00000100UL;
 #endif
 }
 
@@ -2944,7 +2944,7 @@  static void init_excp_7x5 (CPUPPCState *env)
     env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
     env->excp_vectors[POWERPC_EXCP_THERM]    = 0x00001700;
     /* Hardware reset vector */
-    env->hreset_vector = 0xFFFFFFFCUL;
+    env->hreset_vector = 0x00000100UL;
 #endif
 }
 
@@ -2969,7 +2969,7 @@  static void init_excp_7400 (CPUPPCState *env)
     env->excp_vectors[POWERPC_EXCP_VPUA]     = 0x00001600;
     env->excp_vectors[POWERPC_EXCP_THERM]    = 0x00001700;
     /* Hardware reset vector */
-    env->hreset_vector = 0xFFFFFFFCUL;
+    env->hreset_vector = 0x00000100UL;
 #endif
 }
 
@@ -2996,7 +2996,7 @@  static void init_excp_7450 (CPUPPCState *env)
     env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
     env->excp_vectors[POWERPC_EXCP_VPUA]     = 0x00001600;
     /* Hardware reset vector */
-    env->hreset_vector = 0xFFFFFFFCUL;
+    env->hreset_vector = 0x00000100UL;
 #endif
 }