[prev in list] [next in list] [prev in thread] [next in thread]
List: linuxppc-embedded
Subject: Re: mpc5200 timer3 Interrupts stopped working
From: bennett78 <bennett78 () digis ! net>
Date: 2006-02-24 22:49:26
Message-ID: 43FF8D76.7030807 () digis ! net
[Download RAW message or body]
[Attachment #2 (multipart/alternative)]
bennett78 wrote:
> Help, how do I debug timer3 Interrupts? My driver was working and
> then interrupts
Never mind H/W problem...the J27 jumper on the 5200Lite was missing. I
did get a change to
review arch/ppc/kernel/mpc5xxx-pic.c & my interrupt masks settings!
Sorry for the thread interrupt!
Frank Bennett
> 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
>
[Attachment #5 (text/html)]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
<title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
bennett78 wrote:
<blockquote cite="mid43FF2D69.3030902@digis.net" type="cite">
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
<title></title>
<tt>Help, how do I debug timer3 Interrupts? My driver was working
and
then interrupts <br>
</tt></blockquote>
Never mind H/W problem...the J27 jumper on the 5200Lite was missing. I
did get a change to<br>
review arch/ppc/kernel/mpc5xxx-pic.c & my interrupt masks settings!<br>
<br>
Sorry for the thread interrupt!<br>
<br>
Frank Bennett<br>
<blockquote cite="mid43FF2D69.3030902@digis.net" type="cite"><tt>stopped
coming (m</tt><tt>ost likely blocked). I have a driver that is
very similar to<br>
linuxppc_2_4_devel/drivers/char/pp01_ad64.c <br>
I have attached the complete driver (et.c)<br>
</tt><tt><br>
/ # insmod et<br>
ET Display Driver v0.1 loaded ET_TIN irq 16<br>
<br>
et_init 00 intr->per_mask 1bfffc00<br>
et_init 10 intr->ctrl 00c01001<br>
et_init 14 intr->main_mask 00010e00<br>
et_init 24 intr->enc_stat 00000001<br>
et_init 28 intr->crit_stat 00000000<br>
et_init 2c intr->main_stat 00002000<br>
et_init 30 intr->per_stat 00000000<br>
et_init 38 intr->per_error 00000000<br>
<br>
/ # cat /proc/interrupts<br>
CPU0<br>
16: 0 MPC5xxx \
Edge et Trubine<br> \
23: 1049 MPC5xxx \
Edge eth_xmit<br> \
24: 2468 MPC5xxx \
Edge eth_recv<br> \
39: 51 MPC5xxx \
Edge serial<br> \
40: 0 MPC5xxx \
Edge serial<br> \
43: 69 MPC5xxx \
Edge eth_err<br> \
BAD: 0<br> <br>
with a pulse train on timer3 input "et_interrupt" no longer gets<br>
called.<br>
<br>
code snippets<br>
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=<br>
#define ET_TIN 3 // \
Turbine PULSE IN<br> <br>
static void et_interrupt (int irq, void *dev_id, struct pt_regs * regs)<br>
{<br>
int port = ET_IRQ_TO_PORT(irq);<br>
unsigned long stat;<br>
<br>
printk(KERN_INFO "et_interrupt IRQ %d port %d main_stat %x gpt.sr
%x \n",<br>
\
irq, port, intr->main_status, gpt[port].sr );<br> <br>
if( port == ET_TIN ) {<br>
// Clear pending interrupt<br>
stat = in_be32(&gpt[port].sr) & \
0xffff;<br> \
out_be32(&gpt[port].sr, MPC5xxx_GPT_SR_CAPT);<br> \
printk(KERN_INFO "et_int irq=%d port=%d \
stat %0lx \n", irq, port, stat);<br>
// \
wake_up_interruptible(&et_wait);<br> } else {<br>
printk(KERN_ERR ET_MSG "Unexpected IRQ %d \
received", irq);<br> }<br>
spin_lock (&et_lock);<br>
turbine_per = in_be32(&gpt[port].sr) >> 16;<br>
spin_unlock (&et_lock);<br>
}<br>
<br>
<br>
static int __init et_init (void)<br>
....<br>
if (request_irq(ET_PORT_TO_IRQ(ET_TIN), et_interrupt, 0, "et Trubine",
NULL)) {<br>
printk(KERN_ERR \
ET_MSG "couldn't register interrupts\n");<br> \
goto \
abort_remove_proc;<br> }<br>
out_be32(&gpt[ET_TIN].cir, ( 66<<16) | 1 ); /*
prescale(16), period(16) */<br>
out_be32(&gpt[ET_TIN].emsr,<br>
MPC5xxx_GPT_EMSR_INP_CAPTURE <br>
| MPC5xxx_GPT_EMSR_ICT_FALLING <br>
| MPC5xxx_GPT_EMSR_INT_ENABLE);<br>
...<br>
printk(KERN_INFO "ET Display Driver v%s loaded ET_TIN irq %d\n",<br>
ET_VERSION, ET_PORT_TO_IRQ(ET_TIN) );<br>
<br>
//broke with or without the following<br>
intr->main_mask &= ~(0x000000ff); /* enable \
timer ints */<br> <br>
printk(KERN_INFO "et_init 00 intr->per_mask %08x\n",
intr->per_mask);<br>
printk(KERN_INFO "et_init 10 \
intr->ctrl %08x\n", intr->ctrl);<br>
printk(KERN_INFO "et_init 14 intr->main_mask %08x\n",
intr->main_mask);<br>
printk(KERN_INFO "et_init 24 intr->enc_stat %08x\n",
intr->enc_status);<br>
printk(KERN_INFO "et_init 28 intr->crit_stat %08x\n",
intr->crit_status);<br>
printk(KERN_INFO "et_init 2c intr->main_stat %08x\n",
intr->main_status);<br>
printk(KERN_INFO "et_init 30 intr->per_stat %08x\n",
intr->per_status);<br>
printk(KERN_INFO "et_init 38 intr->per_error %08x\n",
intr->per_error);<br>
<br>
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=<br>
thanks in advance for any help,</tt><br>
<div class="moz-signature"><br>
<meta content="text/html;" http-equiv="Content-Type">
<title></title>
<span style="font-style: italic; font-weight: bold;">Frank Bennett</span><br>
<br>
</div>
</blockquote>
</body>
</html>
_______________________________________________
Linuxppc-embedded mailing list
Linuxppc-embedded@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-embedded
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic