[U-Boot-Users] [PATCH] mpc83xx: Add support for the display of reset status

Joakim Tjernlund joakim.tjernlund at transmode.se
Mon Jun 25 11:45:44 CEST 2007


On Mon, 2007-06-25 at 10:41 +0800, Dave Liu wrote:
> From: Dave Liu <daveliu at freescale.com>
> 
> 83xx processor family has many reset sources, such as
> power on reset, software hard reset, software soft reset,
> JTAG, bus monitor, software watchdog, check stop reset,
> external hard reset, external software reset.
> sometimes, to figure out the fault of system, we need to
> know the cause of reset early before the prompt of
> u-boot present.

How do you detect power on reset? I have looked for that but
the rsr reg does not seem to support that and I really
want to detect this.

> 
> Signed-off-by: Dave Liu <daveliu at freescale.com>
> ---
>  cpu/mpc83xx/cpu_init.c |   36 ++++++++++++++++++++++++++++++++++++
>  include/common.h       |    2 ++
>  lib_ppc/board.c        |    6 ++++--
>  3 files changed, 42 insertions(+), 2 deletions(-)
> 
> diff --git a/cpu/mpc83xx/cpu_init.c b/cpu/mpc83xx/cpu_init.c
> index 3ac9161..46a6300 100644
> --- a/cpu/mpc83xx/cpu_init.c
> +++ b/cpu/mpc83xx/cpu_init.c
> @@ -247,3 +247,39 @@ int cpu_init_r (void)
>  #endif
>  	return 0;
>  }
> +
> +/*
> + * Figure out the cause of the reset
> + */
> +int prt_83xx_rsr(void)
> +{
> +	static struct {
> +		ulong mask;
> +		char *desc;
> +	} bits[] = {
> +		{
> +		RSR_SWSR, "Software Soft"}, {
> +		RSR_SWHR, "Software Hard"}, {
> +		RSR_JSRS, "JTAG Soft"}, {
> +		RSR_CSHR, "Check Stop"}, {
> +		RSR_SWRS, "Software Watchdog"}, {
> +		RSR_BMRS, "Bus Monitor"}, {
> +		RSR_SRS,  "External/Internal Soft"}, {
> +		RSR_HRS,  "External/Internal Hard"}
> +	};
> +	static int n = sizeof bits / sizeof bits[0];
> +	ulong rsr = gd->reset_status;
> +	int i;
> +	char *sep;
> +	
> +	puts("Reset Status:");
> +
> +	sep = " ";
> +	for (i = 0; i < n; i++)
> +		if (rsr & bits[i].mask) {
> +			printf("%s%s", sep, bits[i].desc);
> +			sep = ", ";
> +		}
> +	puts("\n\n");
> +	return 0;
> +}
> diff --git a/include/common.h b/include/common.h
> index 3c4b37b..a710d38 100644
> --- a/include/common.h
> +++ b/include/common.h
> @@ -511,6 +511,8 @@ void	cpu_init_f    (void);
>  int	cpu_init_r    (void);
>  #if defined(CONFIG_8260)
>  int	prt_8260_rsr  (void);
> +#elif defined(CONFIG_MPC83XX)
> +int	prt_83xx_rsr  (void);
>  #endif
>  
>  /* $(CPU)/interrupts.c */
> diff --git a/lib_ppc/board.c b/lib_ppc/board.c
> index c4fc580..fea9bf8 100644
> --- a/lib_ppc/board.c
> +++ b/lib_ppc/board.c
> @@ -309,7 +309,9 @@ init_fnc_t *init_sequence[] = {
>  	prt_8260_rsr,
>  	prt_8260_clks,
>  #endif /* CONFIG_8260 */
> -
> +#if defined(CONFIG_MPC83XX)
> +	prt_83xx_rsr,
> +#endif
>  	checkcpu,
>  #if defined(CONFIG_MPC5xxx)
>  	prt_mpc5xxx_clks,
> @@ -376,7 +378,7 @@ void board_init_f (ulong bootflag)
>  	/* compiler optimization barrier needed for GCC >= 3.4 */
>  	__asm__ __volatile__("": : :"memory");
>  
> -#if !defined(CONFIG_CPM2)
> +#if !defined(CONFIG_CPM2) && !defined(CONFIG_MPC83XX)
>  	/* Clear initial global data */
>  	memset ((void *) gd, 0, sizeof (gd_t));
>  #endif




More information about the U-Boot mailing list