linux-2.6.24内核对于S3C6410的支持貌似不是很好。单纯地从发送reboot命令重启系统来看,发送reboot后,内核并没有真正的去调用看门狗。只是执行了如下的一条语句(源码在"include/asm/arch/system.h"中):
__raw_writel(0x6400, S3C24XX_VA_SYSCON + S3C6400_SW_RESET_OFF);
该语句是对芯片内部system controller中的一个寄存器赋值,而这个寄存器却是个reserved寄存器,没有任何功能。
看门狗模块的基地址在linux中映射为0xc5872000。加入如下三句即可启动开门狗,来实现reboot功能。
__raw_writel(0x8000, 0xc5872000 + 8);
__raw_writel(0x8000, 0xc5872000 + 4);
__raw_writel(0x0221, 0xc5872000);