TI中文支持网
TI专业的中文技术问题搜集分享网站

请教:读TCR寄存器卡死,可能是什么原因?

公司近期采购了一批OMAPL138EZWTD4的板子,大部分内核无法启动,少量可以启动。

定位发现,启动到clocksource.c的

Switching to clocksource timer0_1

后,

timekeeper_setup_internals函数的

clock->cycle_last = clock->read(clock);

卡住不能继续往下走。

进一步调试,在多个地方读timer0_1的寄存器。如下:

2.990000] after serial8250_register_ports[ 2.990000] after platform_driver_register[ 2.990000] tcr=800080
[ 2.990000] time34=448645f
[ 2.990000] regulator: core version 0.5
[ 2.990000] NET: Registered protocol family 16
[ 3.040000] before serial8250_probe:serial8250_register_port
[ 3.040000] in serial8250_register_port
[ 3.040000] serial8250.0: ttyS0 at MMIO 0x1c42000 (irq = 25) is a 16550A
[ 3.040000] in tty_register_device:ttyS0
[ 3.040000] before serial8250_probe:serial8250_register_port
[ 3.040000] in serial8250_register_port
[ 3.040000] serial8250.0: ttyS1 at MMIO 0x1d0c000 (irq = 53) is a 16550A
[ 3.050000] console [ttyS1] enabled
[ 3.060000] in tty_register_device:ttyS1
[ 3.060000] before serial8250_probe:serial8250_register_port
[ 3.070000] in serial8250_register_port
[ 3.070000] serial8250.0: ttyS2 at MMIO 0x1d0d000 (irq = 61) is a 16550A
[ 3.080000] in tty_register_device:ttyS2
[ 3.210000] init_bio

在init_bio里面试图读取TCR寄存器,同样会出现卡住不动的情况。

代码为:

static int __init init_bio(void)
{
bio_slab_max = 2;
bio_slab_nr = 0;
bio_slabs = kzalloc(bio_slab_max * sizeof(struct bio_slab), GFP_KERNEL);
if (!bio_slabs)
panic("bio: can't allocate bios\n");

printk("init_bio\n");
{
u32 temp = *((u32*)(0xfec20000 + 0x20));
printk("tcr=%x\n", temp);

temp = *((u32*)(0xfec20000 + 0x14));
printk("time34=%x\n", temp);
}

请教一下可能是什么原因呢?

Tony Tang:

这是uboot吗?

这种代码本身不会有问题,所谓的卡住不动,应该是芯片挂了。所以从系统稳定性的角度去考虑,比如电源,时钟,DDR等是否稳定。

你也可以将主频降下来试试结果有变化没有。

赞(0)
未经允许不得转载:TI中文支持网 » 请教:读TCR寄存器卡死,可能是什么原因?
分享到: 更多 (0)