[GIT PULL] firewire fixes for v6.8-rc7
From: Takashi Sakamoto
Date: Sat Mar 02 2024 - 18:12:59 EST
Hi Linus,
Please pull the following fixes for the next RC from firewire tree.
We have identified a long-standing issue involving continuous bus resets
in some older devices (e.g. DV camera manufactured in the late 1990s).
After thorough investigation, Adam Goldman has finally figured out the
underlying mechanism.
The problem arises in environments where both IEEE 1394:1995 PHY and
IEEE 1394a-2000 (or later) PHY exist. It is triggered by the short bus
reset defined in IEEE 1394a-2000. The current implementation of firewire
stack uses this short bus reset to solve the gap count mismatches in the
certain generation of bus topology, and causing the issue.
As a workaround, we decided to use the long bus reset instead. I anticipate
that the workaround will also be applied to the stable kernel and the
longterm kernels.
The following changes since commit d206a76d7d2726f3b096037f2079ce0bd3ba329b:
Linux 6.8-rc6 (2024-02-25 15:46:06 -0800)
are available in the Git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394.git tags/firewire-fixes-6.8-rc7
for you to fetch changes up to d0b06dc48fb15902d7da09c5c0861e7f042a9381:
firewire: core: use long bus reset on gap count error (2024-02-29 22:18:14 +0900)
----------------------------------------------------------------
firewire-fixes-6.8-rc7
A workaround to suppress the continuous bus resets in the case that older
devices are connected to the modern 1394 OHCI hardware and devices
In IEEE 1394 Amendment (IEEE 1394a-2000), the short bus reset is added to
resolve the shortcomings of the long bus reset in IEEE 1394-1995. However,
it is well-known that the solution is not necessarily effective in the
mixing environment that both IEEE 1394-1995 PHY and IEEE 1394a-2000 (or
later) PHY exist, as described in section 8.4.6.2 of IEEE 1394a-2000.
The current implementation of firewire stack schedules the short bus
reset when attempting to resolve the mismatch of gap count in the certain
generation of bus topology. It can cause the continuous bus reset in the
issued environment.
The workaround simply uses the long bus reset instead of the short bus
reset. It is desirable to detect whether the issued environment or not.
However, the way to access PHY registers from remote note is firstly
defined in IEEE 1394a-2000, thus it is not available in the case.
----------------------------------------------------------------
Takashi Sakamoto (1):
firewire: core: use long bus reset on gap count error
drivers/firewire/core-card.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
Thanks
Takashi Sakamoto