]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob
68c71e04d4e7a016ce53e2fbc7a670c0c79e775f
[thirdparty/kernel/stable-queue.git] /
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
5 To: stable@kernel.org
6 Message-ID: <tkrat.c40219855501ef69@s5r6.in-berlin.de>
7 Content-Disposition: INLINE
8
9 From: Stefan Richter <stefanr@s5r6.in-berlin.de>
10
11 Commit 8b7b6afaa84708d08139daa08538ca3e56c351f1 upstream.
12
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
19 prominent now.
20
21 According to
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).
27
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 .
31
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
35 duration.
36
37 Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
38 Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
39
40 ---
41 drivers/firewire/fw-ohci.c | 2 +-
42 1 file changed, 1 insertion(+), 1 deletion(-)
43
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
49
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
54