1
0
mirror of git://projects.qi-hardware.com/openwrt-xburst.git synced 2025-02-17 19:44:43 +02:00
juhosg 4cc612872a ar71xx: fix occasional kernel hangs during boot on AR934x
The patch taken from the linux-mips mailing list.

The Kernel hangs occasionally during boot after
"Calibrating delay loop..". This is caused by the
c0_compare_int_usable() routine in cevt-r4k.c
returning false which causes the system to disable
the timer and hang later. The false return happens
because the routine is using a series of four calls
to irq_disable_hazard() as a delay while it waits
for the timer changes to propagate to the cp0 cause
register. On newer MIPS cores, like the 74K, the
series of irq_disable_hazard() calls turn into ehb
instructions and can take as little as a few clock
ticks for all 4 instructions. This is not enough of
a delay, so the routine thinks the timer is not
working.

This fix uses up to a max number of cycle counter
ticks for the delay and uses back_to_back_c0_hazard()
instead of irq_disable_hazard() to handle the hazard
condition between cp0 writes and cp0 reads.

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@29009 3c298f89-4303-0410-b956-a3cf2f4a3e73
2011-11-13 11:26:52 +00:00
..
2011-11-13 10:48:05 +00:00
2011-11-07 21:13:13 +00:00
2011-07-02 07:26:04 +00:00
2011-04-03 13:59:07 +00:00
2011-11-13 10:48:05 +00:00
2011-04-03 13:59:07 +00:00
2011-07-06 13:03:38 +00:00
2011-11-13 10:48:05 +00:00
2011-11-13 10:48:05 +00:00
2011-08-18 12:54:12 +00:00
2011-08-18 12:54:12 +00:00
2011-08-18 12:54:12 +00:00
2011-08-18 12:54:12 +00:00
2011-08-18 12:54:12 +00:00
2010-08-06 21:36:35 +00:00