| 
 
| 想使用CPU内部自带的WDOG1开门狗,折腾了一下午,虽然调试通了,但有些疑问请大牛帮忙解答。 
 dts中配置的复位狗为WDOG2,而WDOG2是TZ专用的,不能用作系统复位。不明白为什么默认用WDOG2???
 此处需要修改为WDOG1
 &gpc {
 /* use ldo-bypass, u-boot will check it and configure */
 fsl,ldo-bypass = <1>;
 fsl,wdog-reset = <2>;
 };
 
 通过阅读内核看门狗源码,内核在注册watchdog设备时,只在/dev/watchdog下面注册一个设备。
 而dts文件中配置两个wdog设备时,每次都注册WDOG2,而WDOG1却注册不上。源码中只注册id为0的wdog,不知道内核怎么决定这个id的,导致每次都注册WDOG2.
 if (watchdog->id == 0) {
 old_wdd = watchdog;
 watchdog_miscdev.parent = watchdog->parent;
 err = misc_register(&watchdog_miscdev);
 if (err != 0) {
 pr_err("%s: cannot register miscdev on minor=%d (err=%d).\n",
 watchdog->info->identity, WATCHDOG_MINOR, err);
 if (err == -EBUSY)
 pr_err("%s: a legacy watchdog module is probably present.\n",
 watchdog->info->identity);
 old_wdd = NULL;
 return err;
 }
 }
 最后不得已,在内核的dtb中删掉了WDOG2,解决这个问题。
 | 
 |