mpc5200 timer3 Interrupts stopped working
bennett78
bennett78 at digis.net
Sat Feb 25 02:59:37 EST 2006
Help, how do I debug timer3 Interrupts? My driver was working and then
interrupts
stopped coming (most likely blocked). I have a driver that is very
similar to
linuxppc_2_4_devel/drivers/char/pp01_ad64.c
I have attached the complete driver (et.c)
/ # insmod et
ET Display Driver v0.1 loaded ET_TIN irq 16
et_init 00 intr->per_mask 1bfffc00
et_init 10 intr->ctrl 00c01001
et_init 14 intr->main_mask 00010e00
et_init 24 intr->enc_stat 00000001
et_init 28 intr->crit_stat 00000000
et_init 2c intr->main_stat 00002000
et_init 30 intr->per_stat 00000000
et_init 38 intr->per_error 00000000
/ # cat /proc/interrupts
CPU0
16: 0 MPC5xxx Edge et Trubine
23: 1049 MPC5xxx Edge eth_xmit
24: 2468 MPC5xxx Edge eth_recv
39: 51 MPC5xxx Edge serial
40: 0 MPC5xxx Edge serial
43: 69 MPC5xxx Edge eth_err
BAD: 0
with a pulse train on timer3 input "et_interrupt" no longer gets
called.
code snippets
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#define ET_TIN 3 // Turbine PULSE IN
static void et_interrupt (int irq, void *dev_id, struct pt_regs * regs)
{
int port = ET_IRQ_TO_PORT(irq);
unsigned long stat;
printk(KERN_INFO "et_interrupt IRQ %d port %d main_stat %x gpt.sr %x
\n",
irq, port, intr->main_status, gpt[port].sr );
if( port == ET_TIN ) {
// Clear pending interrupt
stat = in_be32(&gpt[port].sr) & 0xffff;
out_be32(&gpt[port].sr, MPC5xxx_GPT_SR_CAPT);
printk(KERN_INFO "et_int irq=%d port=%d stat %0lx \n", irq,
port, stat);
// wake_up_interruptible(&et_wait);
} else {
printk(KERN_ERR ET_MSG "Unexpected IRQ %d received", irq);
}
spin_lock (&et_lock);
turbine_per = in_be32(&gpt[port].sr) >> 16;
spin_unlock (&et_lock);
}
static int __init et_init (void)
....
if (request_irq(ET_PORT_TO_IRQ(ET_TIN), et_interrupt, 0, "et Trubine",
NULL)) {
printk(KERN_ERR ET_MSG "couldn't register interrupts\n");
goto abort_remove_proc;
}
out_be32(&gpt[ET_TIN].cir, ( 66<<16) | 1 ); /* prescale(16),
period(16) */
out_be32(&gpt[ET_TIN].emsr,
MPC5xxx_GPT_EMSR_INP_CAPTURE
| MPC5xxx_GPT_EMSR_ICT_FALLING
| MPC5xxx_GPT_EMSR_INT_ENABLE);
...
printk(KERN_INFO "ET Display Driver v%s loaded ET_TIN irq %d\n",
ET_VERSION, ET_PORT_TO_IRQ(ET_TIN) );
//broke with or without the following
intr->main_mask &= ~(0x000000ff); /* enable timer ints */
printk(KERN_INFO "et_init 00 intr->per_mask %08x\n", intr->per_mask);
printk(KERN_INFO "et_init 10 intr->ctrl %08x\n", intr->ctrl);
printk(KERN_INFO "et_init 14 intr->main_mask %08x\n", intr->main_mask);
printk(KERN_INFO "et_init 24 intr->enc_stat %08x\n", intr->enc_status);
printk(KERN_INFO "et_init 28 intr->crit_stat %08x\n",
intr->crit_status);
printk(KERN_INFO "et_init 2c intr->main_stat %08x\n",
intr->main_status);
printk(KERN_INFO "et_init 30 intr->per_stat %08x\n", intr->per_status);
printk(KERN_INFO "et_init 38 intr->per_error %08x\n", intr->per_error);
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
thanks in advance for any help,
Frank Bennett
*//*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://ozlabs.org/pipermail/linuxppc-embedded/attachments/20060224/c7c4bb99/attachment.htm
-------------- next part --------------
A non-text attachment was scrubbed...
Name: et.c
Type: text/x-c
Size: 11242 bytes
Desc: not available
Url : http://ozlabs.org/pipermail/linuxppc-embedded/attachments/20060224/c7c4bb99/attachment.bin
More information about the Linuxppc-embedded
mailing list