mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] ieee1394/ohci1394 : CycleTooLong interrupt management
@ 2006-03-17 13:37 Jean-Baptiste MUR
  2006-03-17 21:01 ` Stefan Richter
  0 siblings, 1 reply; 3+ messages in thread
From: Jean-Baptiste MUR @ 2006-03-17 13:37 UTC (permalink / raw)
  To: linux1394-devel; +Cc: linux-kernel


This patch modifies the ohci1394.c file to enable and manage the "cycle too 
long" interrupt. 
If this interrupt occurs, the "LinkControl.CycleMaster" bit of the host 
controller is reseted. This implies, that the host controller does not send 
"cycle start" packet anymore freezing then the isochronous communication. 
The management of the interrupt added by the patch is that when the interrupt 
occurs, the OHCI irq handler prints a kernel log warning and then sets the 
"LinkControl.CycleMaster" bit again resuming the isochronous communication.

Signed-off-by : Jean-Baptiste Mur <jeanbaptiste@maunakeatech.com>

---

Kernel version : 2.6.16-rc4

#############Patch begin
diff --git a/drivers/ieee1394/ohci1394.c b/drivers/ieee1394/ohci1394.c
index ab01a54..33850eb 100644
--- a/drivers/ieee1394/ohci1394.c
+++ b/drivers/ieee1394/ohci1394.c
@@ -580,6 +580,7 @@ static void ohci_initialize(struct ti_oh
                  OHCI1394_isochRx |
                  OHCI1394_isochTx |
                  OHCI1394_postedWriteErr |
+                  OHCI1394_cycleTooLong |
                  OHCI1394_cycleInconsistent);

        /* Enable link */
@@ -2386,6 +2387,15 @@ static irqreturn_t ohci_irq_handler(int
                PRINT(KERN_ERR, "physical posted write error");
                /* no recovery strategy yet, had to involve protocol drivers 
*/
        }
+        if (event & OHCI1394_cycleTooLong) {
+                if(printk_ratelimit())
+                        PRINT(KERN_WARNING, "isochronous cycle too long");
+                else
+                        DBGMSG("OHCI1394_cycleTooLong");
+                /* If this event occurs, we try to reactivate the "cycle 
master" bit. */
+                reg_write(ohci, OHCI1394_LinkControlSet, 
OHCI1394_LinkControl_CycleMaster);
+                event &= ~OHCI1394_cycleTooLong;
+        }
        if (event & OHCI1394_cycleInconsistent) {
                /* We subscribe to the cycleInconsistent event only to
                 * clear the corresponding event bit... otherwise,
#############Patch end

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2006-03-23  9:15 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-03-17 13:37 [PATCH] ieee1394/ohci1394 : CycleTooLong interrupt management Jean-Baptiste MUR
2006-03-17 21:01 ` Stefan Richter
2006-03-23  9:15   ` Jean-Baptiste MUR

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome