mirror of
https://github.com/torvalds/linux.git
synced 2024-11-01 04:53:36 +01:00
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. -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQQE66IEYNDXNBPeGKSsLtaWM8LwEwUCZeOqLAAKCRCsLtaWM8Lw E2rLAQDJiYNXItCD0Q+RISEH7mtrfXmx/f4Tb1Uf9lBtKzOKIAD/Vn0H5WRrj5Qx fuTb70AD2zRb4zpTM65hOdYBEQ4TnAE= =T3IO -----END PGP SIGNATURE----- Merge tag 'firewire-fixes-6.8-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394 Pull firewire fixes from Takashi Sakamoto: "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" * tag 'firewire-fixes-6.8-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394: firewire: core: use long bus reset on gap count error
This commit is contained in:
commit
04b8076df2
1 changed files with 13 additions and 1 deletions
|
@ -500,7 +500,19 @@ static void bm_work(struct work_struct *work)
|
|||
fw_notice(card, "phy config: new root=%x, gap_count=%d\n",
|
||||
new_root_id, gap_count);
|
||||
fw_send_phy_config(card, new_root_id, generation, gap_count);
|
||||
reset_bus(card, true);
|
||||
/*
|
||||
* Where possible, use a short bus reset to minimize
|
||||
* disruption to isochronous transfers. But in the event
|
||||
* of a gap count inconsistency, use a long bus reset.
|
||||
*
|
||||
* As noted in 1394a 8.4.6.2, nodes on a mixed 1394/1394a bus
|
||||
* may set different gap counts after a bus reset. On a mixed
|
||||
* 1394/1394a bus, a short bus reset can get doubled. Some
|
||||
* nodes may treat the double reset as one bus reset and others
|
||||
* may treat it as two, causing a gap count inconsistency
|
||||
* again. Using a long bus reset prevents this.
|
||||
*/
|
||||
reset_bus(card, card->gap_count != 0);
|
||||
/* Will allocate broadcast channel after the reset. */
|
||||
goto out;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue