Skip to content

Commit a4dc090

Browse files
author
Stefan Richter
committed
firewire: ohci: work around VIA and NEC PHY packet reception bug
VIA VT6306, VIA VT6308, and NEC OrangeLink controllers do not write packet event codes for received PHY packets (or perhaps write evt_no_status, hard to tell). Work around it by overwriting the packet's ACK by ack_complete, so that upper layers that listen to PHY packet reception get to see these packets. (Also tested: TI TSB82AA2, TI TSB43AB22/A, TI XIO2213A, Agere FW643, JMicron JMB381 --- these do not exhibit this bug.) Clemens proposed a quirks flag for that, IOW whitelist known misbehaving controllers for this workaround. Though to me it seems harmless enough to enable for all controllers. The log_ar_at_event() debug log will continue to show the original status from the DMA unit. Reported-by: Clemens Ladisch <clemens@ladisch.de> (VT6308) Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
1 parent 2222bcb commit a4dc090

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

drivers/firewire/ohci.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -694,7 +694,15 @@ static __le32 *handle_ar_packet(struct ar_context *ctx, __le32 *buffer)
694694
log_ar_at_event('R', p.speed, p.header, evt);
695695

696696
/*
697-
* The OHCI bus reset handler synthesizes a phy packet with
697+
* Several controllers, notably from NEC and VIA, forget to
698+
* write ack_complete status at PHY packet reception.
699+
*/
700+
if (evt == OHCI1394_evt_no_status &&
701+
(p.header[0] & 0xff) == (OHCI1394_phy_tcode << 4))
702+
p.ack = ACK_COMPLETE;
703+
704+
/*
705+
* The OHCI bus reset handler synthesizes a PHY packet with
698706
* the new generation number when a bus reset happens (see
699707
* section 8.4.2.3). This helps us determine when a request
700708
* was received and make sure we send the response in the same

0 commit comments

Comments
 (0)