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

* Re: [PATCH] ieee1394/ohci1394 : CycleTooLong interrupt management
  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
  0 siblings, 1 reply; 3+ messages in thread
From: Stefan Richter @ 2006-03-17 21:01 UTC (permalink / raw)
  To: Jean-Baptiste Mur; +Cc: linux1394-devel, linux-kernel

Jean-Baptiste MUR wrote:
...
> Kernel version : 2.6.16-rc4

(actually plus an ohci1394 patch from the linux1394 development tree)

...
> +                /* If this event occurs, we try to reactivate the "cycle 
> master" bit. */
> +                reg_write(ohci, OHCI1394_LinkControlSet, 
> OHCI1394_LinkControl_CycleMaster);
...

Three minor nits:

There are tabs replaced by spaces and superfluous line breaks inserted
in your posting. Take care that the mailer does not mangle whitespace.
If you cannot prevent this nor switch the mailer, send the patch as
attachment without recoding (i.e. 7bit encoding, not base64 or the
like).

Take care of a maximum line length of 80 characters. For example:

		/* Try to reactivate the "cycle master" bit. */
		reg_write(ohci, OHCI1394_LinkControlSet,
			  OHCI1394_LinkControl_CycleMaster);

The comment is unnecessary since the actual code is clear enough, at
least IMO.

Anyway, thanks again for identifying this problem.
-- 
Stefan Richter
-=====-=-==- --== =---=
http://arcgraph.de/sr/


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

* Re: [PATCH] ieee1394/ohci1394 : CycleTooLong interrupt management
  2006-03-17 21:01 ` Stefan Richter
@ 2006-03-23  9:15   ` Jean-Baptiste MUR
  0 siblings, 0 replies; 3+ messages in thread
From: Jean-Baptiste MUR @ 2006-03-23  9:15 UTC (permalink / raw)
  To: Stefan Richter; +Cc: linux1394-devel, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 1353 bytes --]

Sorry for pollution. I have updated the patch accordingly to your comments.
It seems my mailer don't like tab very much so I send it as an attachment.
I hope this will be ok.

Jean-Baptiste

On Friday 17 March 2006 22:01, Stefan Richter wrote:
> Jean-Baptiste MUR wrote:
> ...
> > Kernel version : 2.6.16-rc4
> 
> (actually plus an ohci1394 patch from the linux1394 development tree)
> 
> ...
> > +                /* If this event occurs, we try to reactivate the "cycle 
> > master" bit. */
> > +                reg_write(ohci, OHCI1394_LinkControlSet, 
> > OHCI1394_LinkControl_CycleMaster);
> ...
> 
> Three minor nits:
> 
> There are tabs replaced by spaces and superfluous line breaks inserted
> in your posting. Take care that the mailer does not mangle whitespace.
> If you cannot prevent this nor switch the mailer, send the patch as
> attachment without recoding (i.e. 7bit encoding, not base64 or the
> like).
> 
> Take care of a maximum line length of 80 characters. For example:
> 
> 		/* Try to reactivate the "cycle master" bit. */
> 		reg_write(ohci, OHCI1394_LinkControlSet,
> 			  OHCI1394_LinkControl_CycleMaster);
> 
> The comment is unnecessary since the actual code is clear enough, at
> least IMO.
> 
> Anyway, thanks again for identifying this problem.
> -- 
> Stefan Richter
> -=====-=-==- --== =---=
> http://arcgraph.de/sr/
> 

[-- Attachment #2: CycleTooLong.patch --]
[-- Type: text/x-diff, Size: 1027 bytes --]

diff --git a/drivers/ieee1394/ohci1394.c b/drivers/ieee1394/ohci1394.c
index ab01a54..a240b2a 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");
+		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,

^ 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