[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