[U-Boot] [PATCH u-boot sunxi 01/12] sunxi: Implement reset_cpu

Hans de Goede hdegoede at redhat.com
Sat Mar 22 17:16:34 CET 2014


Hi,

On 03/18/2014 11:25 AM, Ian Campbell wrote:
> On Tue, 2014-03-18 at 00:00 +0100, Hans de Goede wrote:
>> There is no way to reset the cpu, so use the watchdog for this.
> 
> Did you see
> https://www.mail-archive.com/u-boot@lists.denx.de/msg134259.html ?

Ah no, but I've read it now.

I think it would be better to focus on all the other more important bits
for now, and then we can look into adding some sort of generic watchdog
support later.

In the mean time I would like to carry this patch, since having "reset"
work can be quite useful, and it is just 3 lines (not counting the lines
which we would still need with the generic watchdog support).

Regards,

Hans


> 
>>
>> Signed-off-by: Hans de Goede <hdegoede at redhat.com>
>> ---
>>  arch/arm/cpu/armv7/sunxi/board.c        | 7 +++++++
>>  arch/arm/include/asm/arch-sunxi/timer.h | 4 ++++
>>  2 files changed, 11 insertions(+)
>>
>> diff --git a/arch/arm/cpu/armv7/sunxi/board.c b/arch/arm/cpu/armv7/sunxi/board.c
>> index e95f4e5..4fd5bcc 100644
>> --- a/arch/arm/cpu/armv7/sunxi/board.c
>> +++ b/arch/arm/cpu/armv7/sunxi/board.c
>> @@ -54,6 +54,13 @@ int gpio_init(void)
>>  
>>  void reset_cpu(ulong addr)
>>  {
>> +	static const struct sunxi_wdog *wdog =
>> +		 &((struct sunxi_timer_reg *)SUNXI_TIMER_BASE)->wdog;
>> +
>> +	/* Set the watchdog for its shortest interval (.5s) and wait */
>> +	writel(WDT_MODE_RESET_EN | WDT_MODE_EN, &wdog->mode);
>> +	writel(WDT_CTRL_RESTART, &wdog->ctl);
>> +	while (1);
>>  }
>>  
>>  /* do some early init */
>> diff --git a/arch/arm/include/asm/arch-sunxi/timer.h b/arch/arm/include/asm/arch-sunxi/timer.h
>> index 6aacfd7..c29d3a0 100644
>> --- a/arch/arm/include/asm/arch-sunxi/timer.h
>> +++ b/arch/arm/include/asm/arch-sunxi/timer.h
>> @@ -11,6 +11,10 @@
>>  #ifndef _SUNXI_TIMER_H_
>>  #define _SUNXI_TIMER_H_
>>  
>> +#define WDT_CTRL_RESTART        (0x1 << 0)
>> +#define WDT_MODE_EN             (0x1 << 0)
>> +#define WDT_MODE_RESET_EN       (0x1 << 1)
>> +
>>  #ifndef __ASSEMBLY__
>>  
>>  #include <linux/types.h>
> 
> 


More information about the U-Boot mailing list