1 From stefanr@s5r6.in-berlin.de Sun Feb 8 12:42:41 2009
2 From: Stefan Richter <stefanr@s5r6.in-berlin.de>
3 Date: Sat, 7 Feb 2009 13:08:41 +0100 (CET)
4 Subject: firewire: ohci: increase AT req. retries, fix ack_busy_X from Panasonic camcorders and others
6 Message-ID: <tkrat.c40219855501ef69@s5r6.in-berlin.de>
7 Content-Disposition: INLINE
9 From: Stefan Richter <stefanr@s5r6.in-berlin.de>
11 Commit 8b7b6afaa84708d08139daa08538ca3e56c351f1 upstream.
13 Camcorders have a tendency to fail read requests to their config ROM and
14 write request to their FCP command register with ack_busy_X. This has
15 become a problem with newer kernels and especially Panasonic camcorders,
16 causing AV/C in dvgrab and kino to fail. Dvgrab for example frequently
17 logs "send oops"; kino reports loss of AV/C control. I suspect that
18 lower CPU scheduling latencies in newer kernels made this issue more
22 https://sourceforge.net/tracker/?func=detail&atid=114103&aid=2492640&group_id=14103
23 this can be fixed by configuring the FireWire controller for more
24 hardware retries for request transmission; these retries are evidently
25 more successful than libavc1394's own retry loop (typically 3 tries on
26 top of hardware retries).
28 Presumably the same issue has been reported at
29 https://bugzilla.redhat.com/show_bug.cgi?id=449252 and
30 https://bugzilla.redhat.com/show_bug.cgi?id=477279 .
32 In a quick test with a JVC camcorder (which didn't malfunction like the
33 reported camcorders), this change decreased the number of ack_busy_X
34 from 16 in three runs of dvgrab to 4 in three runs of the same capture
37 Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
38 Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
41 drivers/firewire/fw-ohci.c | 2 +-
42 1 file changed, 1 insertion(+), 1 deletion(-)
44 --- a/drivers/firewire/fw-ohci.c
45 +++ b/drivers/firewire/fw-ohci.c
46 @@ -226,7 +226,7 @@ static inline struct fw_ohci *fw_ohci(st
47 #define CONTEXT_DEAD 0x0800
48 #define CONTEXT_ACTIVE 0x0400
50 -#define OHCI1394_MAX_AT_REQ_RETRIES 0x2
51 +#define OHCI1394_MAX_AT_REQ_RETRIES 0xf
52 #define OHCI1394_MAX_AT_RESP_RETRIES 0x2
53 #define OHCI1394_MAX_PHYS_RESP_RETRIES 0x8