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\n");
     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 里面的如下

    991711-20180620181828810-1611977650.png

  • 寄存器地址如下

    991711-20180620181906560-734864994.png

  • kernel 内怎么直接操作请参考上面的代码

    第一步, 申请: request_mem_region
    第二步: 映射 : ioremap 
    后面就是写,解除映射,释放申请
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值