ARM926 Software reset problems

Russell King - ARM Linux linux at arm.linux.org.uk
Fri Nov 13 09:51:10 EST 2009


On Fri, Nov 13, 2009 at 03:41:17PM +0100, Ricardo Martínez wrote:
> I'm one step further. kernel_restart() uses arch_reset() which is hardware
> dependent.

kernel_restart() is not hardware dependent.  The backend of it (arch_reset)
is because platforms reboot in their own specific manner.  It is up to the
platform support implementer to make arch_reset() do the right thing on
their platform.

However, none of cpu_*reset nor arch_reset are intended to be called
directly.  You _MUST_ call kernel_restart() to initiate a restart.  No
other option will do - everything else is not supported and unreliable.

> Most ARM9 make arch_reset() through Watchdog peripheral. But the CPU I'm
> using does not have Watchdog timer.

So why are you trying to make arch_reset() work through a non-existent
watchdog?

Just point arch_reset() at cpu_reset() like this:

static void arch_reset(char mode, const char *cmd)
{
	cpu_reset(0);
}

as many other platforms do, and just call kernel_restart().




More information about the linux-arm-kernel mailing list