免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1660 | 回复: 2
打印 上一主题 下一主题

[硬件及驱动] reboot 无法重启,求调试方法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-10-12 19:37 |只看该作者 |倒序浏览
目前用的是powerpc 8309, 现在遇到的问题软件无法复位,硬件的复位时可以用的,
在uboot执行reset ,停在Resetting the board ,跟进去发现
do_reset (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
197 {
198         ulong msr;
199 #ifndef MPC83xx_RESET
200         ulong addr;
201 #endif
202
203         volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR;
204
205         puts("Resetting the board.\n";
206
207 #ifdef MPC83xx_RESET
208         /* Interrupts and MMU off */
209         __asm__ __volatile__ ("mfmsr    %0":"=r" (msr);
210
211         msr &= ~( MSR_EE | MSR_IR | MSR_DR);
212         __asm__ __volatile__ ("mtmsr    %0"::"r" (msr));
213
214         /* enable Reset Control Reg */
215         immap->reset.rpr = 0x52535445;
216         __asm__ __volatile__ ("sync";
217         __asm__ __volatile__ ("isync";
218
219         /* confirm Reset Control Reg is enabled */
220         while(!((immap->reset.rcer) & RCER_CRE));
221         udelay(200);
这些都执行了   

系统起来后, 执行reboot ,出现Restarting system.  
跟进去void mpc83xx_restart(char *cmd)
34 {
35 #define RST_OFFSET      0x00000900
36 #define RST_PROT_REG    0x00000018
37 #define RST_CTRL_REG    0x0000001c
38 printk("yv  enter mpc83xx_restart\n";
39         local_irq_disable();
40
41         if (restart_reg_base) {
42                 /* enable software reset "RSTE" */
43                 printk("yv  enter mpc83xx_restart  1\n";
44                 out_be32(restart_reg_base + (RST_PROT_REG >> 2), 0x52535445);
45                 printk("yv  enter mpc83xx_restart  2\n";
46                 /* set software hard reset */
47                 out_be32(restart_reg_base + (RST_CTRL_REG >> 2), 0x2);
************************************************************************
48                 printk("yv  enter mpc83xx_restart 3\n";
49         } else {
50                 printk (KERN_EMERG "Error: Restart registers not mapped, spinning!\n";
51         }
52
53         for (; ;
54 }
四十七行之前都执行了。
不知道为什么都是给cpu复位的寄存器 赋值,它不能从启,求大神给点解决这种问题的思路,多谢!

论坛徽章:
0
2 [报告]
发表于 2015-11-05 16:22 |只看该作者
建议自己简单写个测试程序,直接操作这个复位寄存器看是否生效。如果没有生效,再去看看芯片datasheet,是否还有其他依赖。
按理说freescale这么老的片子,代码应该很成熟了

论坛徽章:
0
3 [报告]
发表于 2015-11-06 09:17 |只看该作者
这个问题找到了,是通过reset的一个信号量到的,复位电路有个多余的电容。回复 2# mysky0407


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP