[AT91SAM9260] kernel hang in at91sam926x_pit_reset()

Vitja Makarov vitja.makarov at gmail.com
Thu Nov 11 06:41:48 EST 2010


Hi!

I've recently found that our new AT91SAM9260 boards does not work with
linux out of the box.
The only thing changed is CPU revision now it is "Rev. B' (old boards
used "Rev. A" CPUs)


So after uncompressing kernel it writes. "Booting kernel..." that's
all. Kernel hangs.

I found that it hangs in  at91sam926x_time.c:at91sam926x_pit_reset():

Bit in AT91_PIT_PIVR register never clears... so I add timeout for
this loop and kernel boots as expected.

static void at91sam926x_pit_reset(void)
{
<------>/* Disable timer and irqs */
<------>at91_sys_write(AT91_PIT_MR, 0);

<------>/* Clear any pending interrupts, wait for PIT to stop counting */
<------>while (PIT_CPIV(at91_sys_read(AT91_PIT_PIVR)) != 0)
<------><------>cpu_relax();

<------>/* Start PIT but don't enable IRQ */
<------>at91_sys_write(AT91_PIT_MR, (pit_cycle - 1) | AT91_PIT_PITEN);
}


Thanks,
vitja.



More information about the linux-arm-kernel mailing list