[U-Boot] [PATCH 0/21] Generic cross-architecture system restart support

Kyle Moffett Kyle.D.Moffett at boeing.com
Mon Mar 7 18:37:21 CET 2011


Hello everyone,

This patch series creates a generic set of functions available to generic
code which can be easily hooked per-architecture or per-board.  I have
tried to be very careful that U-Boot builds and runs on all architectures
for the entire duration of this patchset.

This patchset is designed to produce zero change in behavior *except* for
one particular scenario:  Platforms which perform a "restart" with a simple
jump to the "_start" entrypoint (or similar) will no longer try to do that
on panic().

The new functions to be called from generic code are:

  int system_restart(void)
  void emergency_restart(void)

The specific platform hooks available are:

  int __arch_restart(void)
  int __board_restart(void)
  void __arch_emergency_restart(void)
  void __board_emergency_restart(void)

The first few patches set up the generic functions and hooks with a default
fallback to the existing "do_reset()" function.  Most of the rest are then
architecture-specific modifications necessary to convert away from the old
do_reset() prototype.  The last patch finally does away with that function.

In my previous discussions with Wolfgang Denk about the __arch_restart()
hook he requested that it should be mandatory for all architectures to
implement.  Unfortunately the MIPS and MicroBlaze architectures have no
architectural system-reset code at all, and others have only very limited
"soft-reboot" (IE: Jump-to-"_start").

Specifically, the MIPS do_reset() function used to look like this:
  _machine_restart();
  printf("*** restart failed ***\n");

When those platforms are fixed then it should be safe to remove the weak
fallback __arch_restart() function.

Cheers,
Kyle Moffett



More information about the U-Boot mailing list