it ended up being cleaner and more efficient to have *some* hooks in
platform specific timer code. It was there for Malta in the
kernel.org
mainline once upon a time, and I *thought* we'd propagated working
code
for the initial PMC-Sierra 34K-based SoC's at least as far as
[Anoop P.A.]
I was able to boot 2.6.24-7 git sources with a change in cevt-r4k.c (
c0_compare_int_pending changed as following "return (read_c0_cause()>>
cp0_compare_irq_shift)& (1ul<< CAUSEB_IP)"
linux-mips.org, but the source tree has been considerably reorganized
-
there was a time when some of the hooks were under
arch/mips/mips-boards/generic, which no longer exists - and I'm not
sure
where to point you. Git and grep are your friends.
[Anoop P.A.]malta code has been moved to arch/mips/mti-malta/
Can you recollect the version of l-m-o kernel with a known working SMTC
support ?.
The first order of business is to break into that hung timer
calibration
loop and dump the CP0 registers for the VPE and the TCs, in particular
checking the interrupt enable mask in Status against the pending
interrupts in the Cause register. If you're seeing the timer
interrupt's bit set in Cause, but clear in Status, you need to fix the
SMTC interrupt mask hook for your platform timer.
[Anoop P.A.]
I tried dumping registers from calibration while loop.
It looks like the timer interrupt bit stay high on both cause and status
register ( in my case timer interrupt is connected to Cascaded CIC
interrupt which is connected to irq -6 ( C_IRQ4)). Detailed log pasted
below
check to see if you're building for "tickless" operation. Tickless
ends
up being really important for SMTC, and I did get it working properly
back in 2008, but I the SMTC-specific cevt-smtc.c code uses common
functions in cevt-r4k.c, and I've seen some patches to cevt-r4k.c
going
by that I rather doubt were ever tested against an SMTC
build/platform.
There might have been breakage there, and configuring to use a fixed
interval timer (say, 100Hz) would be a way to test that hypothesis.
[Anoop P.A.] I have tried both tickles and fixed interval timer.
Regards,
Kevin K.
[Anoop P.A.] Thanks much for your and Ralf's detailed response.
[Anoop P.A.]
[ 0.000000] Writing ErrCtl register=00000000
[ 0.000000] Readback ErrCtl register=00000000
[ 0.000000] Memory: 254384k/257912k available (3062k kernel code,
3528k reserved, 648k data, 200k init, 0k highmem)
[ 0.000000] Preemptable hierarchical RCU implementation.
[ 0.000000] NR_IRQS:128
[ 0.000000] console [ttyS0] enabled
[ 0.000000] Clock rate set to 600000000
[ 0.000000] Calibrating delay loop... === MIPS MT State Dump ===
[ 0.000000] -- Global State --
[ 0.000000] MVPControl Passed: 00000000
[ 0.000000] MVPControl Read: 00000000
[ 0.000000] MVPConf0 : a8008406
[ 0.000000] -- per-VPE State --
[ 0.000000] VPE 0
[ 0.000000] VPEControl : 00000000
[ 0.000000] VPEConf0 : 800f0003
[ 0.000000] VPE0.Status : 11004001
[ 0.000000] VPE0.EPC : 80100000 _stext+0x0/0x10
[ 0.000000] VPE0.Cause : 40804000
[ 0.000000] VPE0.Config7 : 00010000
[ 0.000000] VPE 1
[ 0.000000] VPEControl : 00060000
[ 0.000000] VPEConf0 : 800f0000
[ 0.000000] VPE1.Status : 00408305
[ 0.000000] VPE1.EPC : 801024e0 except_vec_vi+0x0/0x84
[ 0.000000] VPE1.Cause : 40000200
[ 0.000000] VPE1.Config7 : 00010000
[ 0.000000] -- per-TC State --
[ 0.000000] TC 0 (current TC with VPE EPC above)
[ 0.000000] TCStatus : 00000000
[ 0.000000] TCBind : 00000000
[ 0.000000] TCRestart : 8010d860 mips_mt_regdump+0x2f0/0x3c4
[ 0.000000] TCHalt : 00000000
[ 0.000000] TCContext : 00000000
[ 0.000000] TC 1
[ 0.000000] TCStatus : 00000000
[ 0.000000] TCBind : 00200001
[ 0.000000] TCRestart : 80104b64 copy_thread+0x2ac/0x2b4
[ 0.000000] TCHalt : 00000001
[ 0.000000] TCContext : 00180000
[ 0.000000] TC 2
[ 0.000000] TCStatus : 00000000
[ 0.000000] TCBind : 00400001
[ 0.000000] TCRestart : 7ffffffc 0x7ffffffc
[ 0.000000] TCHalt : 00000001
[ 0.000000] TCContext : 00300000
[ 0.000000] TC 3
[ 0.000000] TCStatus : 00000000
[ 0.000000] TCBind : 00600001
[ 0.000000] TCRestart : fff7ffae 0xfff7ffae
[ 0.000000] TCHalt : 00000001
[ 0.000000] TCContext : 00480000
[ 0.000000] TC 4
[ 0.000000] TCStatus : 00000000
[ 0.000000] TCBind : 00800001
[ 0.000000] TCRestart : f3fff7fe 0xf3fff7fe
[ 0.000000] TCHalt : 00000001
[ 0.000000] TCContext : 00600000
[ 0.000000] TC 5
[ 0.000000] TCStatus : 00000000
[ 0.000000] TCBind : 00a00001
[ 0.000000] TCRestart : 7ffffbfe 0x7ffffbfe
[ 0.000000] TCHalt : 00000001
[ 0.000000] TCContext : 00780000
[ 0.000000] TC 6
[ 0.000000] TCStatus : 00000000
[ 0.000000] TCBind : 00c00001
[ 0.000000] TCRestart : ffff7ffe 0xffff7ffe
[ 0.000000] TCHalt : 00000001
[ 0.000000] TCContext : 00900000
[ 0.000000] Counter Interrupts taken per CPU (TC)
[ 0.000000] 0: 0
[ 0.000000] 1: 0
[ 0.000000] 2: 0
[ 0.000000] 3: 0
[ 0.000000] 4: 0
[ 0.000000] 5: 0
[ 0.000000] 6: 0
[ 0.000000] 7: 0
[ 0.000000] Self-IPI invocations:
[ 0.000000] 0: 0
[ 0.000000] 1: 0
[ 0.000000] 2: 0
[ 0.000000] 3: 0
[ 0.000000] 4: 0
[ 0.000000] 5: 0
[ 0.000000] 6: 0
[ 0.000000] 7: 0
[ 0.000000] IPIQ[0]: head = 0x0, tail = 0x0, depth = 0
[ 0.000000] IPIQ[1]: head = 0x0, tail = 0x0, depth = 0
[ 0.000000] IPIQ[2]: head = 0x0, tail = 0x0, depth = 0
[ 0.000000] IPIQ[3]: head = 0x0, tail = 0x0, depth = 0
[ 0.000000] IPIQ[4]: head = 0x0, tail = 0x0, depth = 0
[ 0.000000] IPIQ[5]: head = 0x0, tail = 0x0, depth = 0
[ 0.000000] IPIQ[6]: head = 0x0, tail = 0x0, depth = 0
[ 0.000000] IPIQ[7]: head = 0x0, tail = 0x0, depth = 0
[ 0.000000] 0 Recoveries of "stolen" FPU
[ 0.000000] ===========================
[ 0.000000] In platform cic dispatch cic_mask=0x22000 stat=0x2402000f
pend=0x20000
[ 0.010000] === MIPS MT State Dump ===
[ 0.010000] -- Global State --
[ 0.010000] MVPControl Passed: 00000000
[ 0.010000] MVPControl Read: 00000000
[ 0.010000] MVPConf0 : a8008406
[ 0.010000] -- per-VPE State --
[ 0.010000] VPE 0
[ 0.010000] VPEControl : 00000000
[ 0.010000] VPEConf0 : 800f0003
[ 0.010000] VPE0.Status : 18004000
[ 0.010000] VPE0.EPC : 8010d900 mips_mt_regdump+0x390/0x3c4
[ 0.010000] VPE0.Cause : 40804000
[ 0.010000] VPE0.Config7 : 00010000
[ 0.010000] VPE 1
[ 0.010000] VPEControl : 00060000
[ 0.010000] VPEConf0 : 800f0000
[ 0.010000] VPE1.Status : 00408305
[ 0.010000] VPE1.EPC : 801024e0 except_vec_vi+0x0/0x84
[ 0.010000] VPE1.Cause : 40000200
[ 0.010000] VPE1.Config7 : 00010000
[ 0.010000] -- per-TC State --
[ 0.010000] TC 0 (current TC with VPE EPC above)
[ 0.010000] TCStatus : 00000000
[ 0.010000] TCBind : 00000000
[ 0.010000] TCRestart : 803f791c printk+0xc/0x30
[ 0.010000] TCHalt : 00000000
[ 0.010000] TCContext : 00000000
[ 0.010000] TC 1
[ 0.010000] TCStatus : 00000000
[ 0.010000] TCBind : 00200001
[ 0.010000] TCRestart : 80104b64 copy_thread+0x2ac/0x2b4
[ 0.010000] TCHalt : 00000001
[ 0.010000] TCContext : 00180000
[ 0.010000] TC 2
[ 0.010000] TCStatus : 00000000
[ 0.010000] TCBind : 00400001
[ 0.010000] TCRestart : 7ffffffc 0x7ffffffc
[ 0.010000] TCHalt : 00000001
[ 0.010000] TCContext : 00300000
[ 0.010000] TC 3
[ 0.010000] TCStatus : 00000000
[ 0.010000] TCBind : 00600001
[ 0.010000] TCRestart : fff7ffae 0xfff7ffae
[ 0.010000] TCHalt : 00000001
[ 0.010000] TCContext : 00480000
[ 0.010000] TC 4
[ 0.010000] TCStatus : 00000000
[ 0.010000] TCBind : 00800001
[ 0.010000] TCRestart : f3fff7fe 0xf3fff7fe
[ 0.010000] TCHalt : 00000001
[ 0.010000] TCContext : 00600000
[ 0.010000] TC 5
[ 0.010000] TCStatus : 00000000
[ 0.010000] TCBind : 00a00001
[ 0.010000] TCRestart : 7ffffbfe 0x7ffffbfe
[ 0.010000] TCHalt : 00000001
[ 0.010000] TCContext : 00780000
[ 0.010000] TC 6
[ 0.010000] TCStatus : 00000000
[ 0.010000] TCBind : 00c00001
[ 0.010000] TCRestart : ffff7ffe 0xffff7ffe
[ 0.010000] TCHalt : 00000001
[ 0.010000] TCContext : 00900000
[ 0.010000] Counter Interrupts taken per CPU (TC)
[ 0.010000] 0: 0
[ 0.010000] 1: 0
[ 0.010000] 2: 0
[ 0.010000] 3: 0
[ 0.010000] 4: 0
[ 0.010000] 5: 0
[ 0.010000] 6: 0
[ 0.010000] 7: 0
[ 0.010000] Self-IPI invocations:
[ 0.010000] 0: 0
[ 0.010000] 1: 0
[ 0.010000] 2: 0
[ 0.010000] 3: 0
[ 0.010000] 4: 0
[ 0.010000] 5: 0
[ 0.010000] 6: 0
[ 0.010000] 7: 0
[ 0.010000] IPIQ[0]: head = 0x0, tail = 0x0, depth = 0
[ 0.010000] IPIQ[1]: head = 0x0, tail = 0x0, depth = 0
[ 0.010000] IPIQ[2]: head = 0x0, tail = 0x0, depth = 0
[ 0.010000] IPIQ[3]: head = 0x0, tail = 0x0, depth = 0
[ 0.010000] IPIQ[4]: head = 0x0, tail = 0x0, depth = 0
[ 0.010000] IPIQ[5]: head = 0x0, tail = 0x0, depth = 0
[ 0.010000] IPIQ[6]: head = 0x0, tail = 0x0, depth = 0
[ 0.010000] IPIQ[7]: head = 0x0, tail = 0x0, depth = 0
[ 0.010000] 0 Recoveries of "stolen" FPU
[ 0.010000] ===========================
[ 0.010000] === MIPS MT State Dump ===
[ 0.010000] -- Global State --
[ 0.010000] MVPControl Passed: 00000000
[ 0.010000] MVPControl Read: 00000000
[ 0.010000] MVPConf0 : a8008406
[ 0.010000] -- per-VPE State --
[ 0.010000] VPE 0
[ 0.010000] VPEControl : 00000000
[ 0.010000] VPEConf0 : 800f0003
[ 0.010000] VPE0.Status : 18004000
[ 0.010000] VPE0.EPC : 8010d900 mips_mt_regdump+0x390/0x3c4
[ 0.010000] VPE0.Cause : 40804000
[ 0.010000] VPE0.Config7 : 00010000
[ 0.010000] VPE 1
[ 0.010000] VPEControl : 00060000
[ 0.010000] VPEConf0 : 800f0000
[ 0.010000] VPE1.Status : 00408305
[ 0.010000] VPE1.EPC : 801024e0 except_vec_vi+0x0/0x84
[ 0.010000] VPE1.Cause : 40000200
[ 0.010000] VPE1.Config7 : 00010000
[ 0.010000] -- per-TC State --
[ 0.010000] TC 0 (current TC with VPE EPC above)
[ 0.010000] TCStatus : 00000000
[ 0.010000] TCBind : 00000000
[ 0.010000] TCRestart : 803f791c printk+0xc/0x30
[ 0.010000] TCHalt : 00000000
[ 0.010000] TCContext : 00000000
[ 0.010000] TC 1
[ 0.010000] TCStatus : 00000000
[ 0.010000] TCBind : 00200001
[ 0.010000] TCRestart : 80104b64 copy_thread+0x2ac/0x2b4
[ 0.010000] TCHalt : 00000001
[ 0.010000] TCContext : 00180000
[ 0.010000] TC 2
[ 0.010000] TCStatus : 00000000
[ 0.010000] TCBind : 00400001
[ 0.010000] TCRestart : 7ffffffc 0x7ffffffc
[ 0.010000] TCHalt : 00000001
[ 0.010000] TCContext : 00300000
[ 0.010000] TC 3
[ 0.010000] TCStatus : 00000000
[ 0.010000] TCBind : 00600001
[ 0.010000] TCRestart : fff7ffae 0xfff7ffae
[ 0.010000] TCHalt : 00000001
[ 0.010000] TCContext : 00480000
[ 0.010000] TC 4
[ 0.010000] TCStatus : 00000000
[ 0.010000] TCBind : 00800001
[ 0.010000] TCRestart : f3fff7fe 0xf3fff7fe
[ 0.010000] TCHalt : 00000001
[ 0.010000] TCContext : 00600000
[ 0.010000] TC 5
[ 0.010000] TCStatus : 00000000
[ 0.010000] TCBind : 00a00001
[ 0.010000] TCRestart : 7ffffbfe 0x7ffffbfe
[ 0.010000] TCHalt : 00000001
[ 0.010000] TCContext : 00780000
[ 0.010000] TC 6
[ 0.010000] TCStatus : 00000000
[ 0.010000] TCBind : 00c00001
[ 0.010000] TCRestart : ffff7ffe 0xffff7ffe
[ 0.010000] TCHalt : 00000001
[ 0.010000] TCContext : 00900000
[ 0.010000] Counter Interrupts taken per CPU (TC)
[ 0.010000] 0: 0
[ 0.010000] 1: 0
[ 0.010000] 2: 0
[ 0.010000] 3: 0
[ 0.010000] 4: 0
[ 0.010000] 5: 0
[ 0.010000] 6: 0
[ 0.010000] 7: 0
[ 0.010000] Self-IPI invocations:
[ 0.010000] 0: 0
[ 0.010000] 1: 0
[ 0.010000] 2: 0
[ 0.010000] 3: 0
[ 0.010000] 4: 0
[ 0.010000] 5: 0
[ 0.010000] 6: 0
[ 0.010000] 7: 0
[ 0.010000] IPIQ[0]: head = 0x0, tail = 0x0, depth = 0
[ 0.010000] IPIQ[1]: head = 0x0, tail = 0x0, depth = 0
[ 0.010000] IPIQ[2]: head = 0x0, tail = 0x0, depth = 0
[ 0.010000] IPIQ[3]: head = 0x0, tail = 0x0, depth = 0
[ 0.010000] IPIQ[4]: head = 0x0, tail = 0x0, depth = 0
[ 0.010000] IPIQ[5]: head = 0x0, tail = 0x0, depth = 0
[ 0.010000] IPIQ[6]: head = 0x0, tail = 0x0, depth = 0
[ 0.010000] IPIQ[7]: head = 0x0, tail = 0x0, depth = 0
[ 0.010000] 0 Recoveries of "stolen" FPU
[ 0.010000] ===========================
[ 0.010000] === MIPS MT State Dump ===
[ 0.010000] -- Global State --
[ 0.010000] MVPControl Passed: 00000000
[ 0.010000] MVPControl Read: 00000000
[ 0.010000] MVPConf0 : a8008406
[ 0.010000] -- per-VPE State --
[ 0.010000] VPE 0
[ 0.010000] VPEControl : 00000000
[ 0.010000] VPEConf0 : 800f0003
[ 0.010000] VPE0.Status : 18004000
[ 0.010000] VPE0.EPC : 8010d900 mips_mt_regdump+0x390/0x3c4
[ 0.010000] VPE0.Cause : 40804000
[ 0.010000] VPE0.Config7 : 00010000
[ 0.010000] VPE 1
[ 0.010000] VPEControl : 00060000
[ 0.010000] VPEConf0 : 800f0000
[ 0.010000] VPE1.Status : 00408305
[ 0.010000] VPE1.EPC : 801024e0 except_vec_vi+0x0/0x84
[ 0.010000] VPE1.Cause : 40000200
[ 0.010000] VPE1.Config7 : 00010000
[ 0.010000] -- per-TC State --
[ 0.010000] TC 0 (current TC with VPE EPC above)
[ 0.010000] TCStatus : 00000000
[ 0.010000] TCBind : 00000000
[ 0.010000] TCRestart : 803f791c printk+0xc/0x30
[ 0.010000] TCHalt : 00000000
[ 0.010000] TCContext : 00000000
[ 0.010000] TC 1
[ 0.010000] TCStatus : 00000000
[ 0.010000] TCBind : 00200001
[ 0.010000] TCRestart : 80104b64 copy_thread+0x2ac/0x2b4
[ 0.010000] TCHalt : 00000001
[ 0.010000] TCContext : 00180000
[ 0.010000] TC 2
[ 0.010000] TCStatus : 00000000
[ 0.010000] TCBind : 00400001
[ 0.010000] TCRestart : 7ffffffc 0x7ffffffc
[ 0.010000] TCHalt : 00000001
[ 0.010000] TCContext : 00300000
[ 0.010000] TC 3
[ 0.010000] TCStatus : 00000000
[ 0.010000] TCBind : 00600001
[ 0.010000] TCRestart : fff7ffae 0xfff7ffae
[ 0.010000] TCHalt : 00000001
[ 0.010000] TCContext : 00480000
[ 0.010000] TC 4
[ 0.010000] TCStatus : 00000000
[ 0.010000] TCBind : 00800001
[ 0.010000] TCRestart : f3fff7fe 0xf3fff7fe
[ 0.010000] TCHalt : 00000001
[ 0.010000] TCContext : 00600000
[ 0.010000] TC 5
[ 0.010000] TCStatus : 00000000
[ 0.010000] TCBind : 00a00001
[ 0.010000] TCRestart : 7ffffbfe 0x7ffffbfe
[ 0.010000] TCHalt : 00000001
[ 0.010000] TCContext : 00780000
[ 0.010000] TC 6
[ 0.010000] TCStatus : 00000000
[ 0.010000] TCBind : 00c00001
[ 0.010000] TCRestart : ffff7ffe 0xffff7ffe
[ 0.010000] TCHalt : 00000001
[ 0.010000] TCContext : 00900000
[ 0.010000] Counter Interrupts taken per CPU (TC)
[ 0.010000] 0: 0
[ 0.010000] 1: 0
[ 0.010000] 2: 0
[ 0.010000] 3: 0
[ 0.010000] 4: 0
[ 0.010000] 5: 0
[ 0.010000] 6: 0
[ 0.010000] 7: 0
[ 0.010000] Self-IPI invocations:
[ 0.010000] 0: 0
[ 0.010000] 1: 0
[ 0.010000] 2: 0
[ 0.010000] 3: 0
[ 0.010000] 4: 0
[ 0.010000] 5: 0
[ 0.010000] 6: 0
[ 0.010000] 7: 0
[ 0.010000] IPIQ[0]: head = 0x0, tail = 0x0, depth = 0
[ 0.010000] IPIQ[1]: head = 0x0, tail = 0x0, depth = 0
[ 0.010000] IPIQ[2]: head = 0x0, tail = 0x0, depth = 0
[ 0.010000] IPIQ[3]: head = 0x0, tail = 0x0, depth = 0
[ 0.010000] IPIQ[4]: head = 0x0, tail = 0x0, depth = 0
[ 0.010000] IPIQ[5]: head = 0x0, tail = 0x0, depth = 0
[ 0.010000] IPIQ[6]: head = 0x0, tail = 0x0, depth = 0
[ 0.010000] IPIQ[7]: head = 0x0, tail = 0x0, depth = 0
[ 0.010000] 0 Recoveries of "stolen" FPU