am335x Watchdog 生效导致 LAN8710A action 异常
Posted chenfulin5
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了am335x Watchdog 生效导致 LAN8710A action 异常相关的知识,希望对你有一定的参考价值。
原因是因为 watchdog 生效的时候,产生的 reset 信号,只有 2.5us 左右,太短了,导致 LAN8710a 未完全重启
在 kernel watchdog 里面增加下面的代码即可
86 static void omap_wdt_enable(struct omap_wdt_dev *wdev) 87 { 88 void __iomem *base = wdev->base; 89 static void *prm_reg_mem; 90 // 增加下面控制寄存器的代码,意思就是将 reset 下拉时间延长 91 #define PRM_REG_MEM 0x44E00F00 92 93 if (!request_mem_region(PRM_REG_MEM, 8, "prm_reg_mem")){ 94 printk("request mem error "); 95 goto JUMP; 96 } 97 prm_reg_mem = ioremap(PRM_REG_MEM, 8); 98 99 __raw_writel(0xff, prm_reg_mem + 4); 100 /* __raw_writel(0x1, prm_reg_mem); */ 101 /* reset code */ 102 103 iounmap(prm_reg_mem); 104 release_mem_region(PRM_REG_MEM, 8); 105 106 JUMP: 107 /* Sequence to enable the watchdog */ 108 __raw_writel(0xBBBB, base + OMAP_WATCHDOG_SPR); 109 while ((__raw_readl(base + OMAP_WATCHDOG_WPS)) & 0x10) // ...
参考335x datasheet 里面的如下
寄存器地址如下
kernel 内怎么直接操作请参考上面的代码
第一步, 申请: request_mem_region 第二步: 映射 : ioremap 后面就是写,解除映射,释放申请
以上是关于am335x Watchdog 生效导致 LAN8710A action 异常的主要内容,如果未能解决你的问题,请参考以下文章