On Fri, 3 Sept 2021 at 16:18, Lukas Wunner <lukas@xxxxxxxxx> wrote: > > On Fri, Sep 03, 2021 at 03:40:29AM +0000, Nathan Rossi wrote: > > The Pericom PI7C9X2G404 PCIe switch has an errata for ACS P2P Request > > Redirect behaviour when used in the cut-through forwarding mode. The > > recommended work around for this issue is to use the switch in store and > > forward mode. > > > > This change adds a fixup specific to this switch that when enabling the > > downstream port it checks if it has enabled ACS P2P Request Redirect, > > and if so changes the device (via the upstream port) to use the store > > and forward operating mode. > > From a quick look at the datasheet, this switch seems to support > hot-plug on its Downstream Ports: > > https://www.diodes.com/assets/Datasheets/PI7C9X2G404SL.pdf > > I think your quirk isn't executed if a device is hotplugged to an > initially-empty Downstream Port. The device I am testing against has the ports wired directly to devices (though can be disconnected) without hotplug so I will see if I can find a development board with this switch to test the hotplug behaviour. However it should be noted that the downstream ports are probed with the switch, and are enabled with the ACS P2P Request Redirect configured regardless of the presence of a device connected to the downstream port. > > Also, if a device which triggered the quirk is hot-removed and none > of its siblings uses ACS P2P Request Redirect, cut-through forwarding > isn't reinstated. The quirk is enabled on the downstream port of the switch, using the state of the downstream port and not the device attached to it. My understanding is that the only path that enables/disables the ACS P2P Request Redirect on the downstream port is the initial pci_enable_acs. This means that devices attached to the downstream port either initially or with hotplugging should not change the ACS configuration of the switches downstream port. Which means nothing can cause the switch to need to be reinstated with cut-through forwarding except the switch itself being hotplugged, which would cause reset of the switch and the enable fixup to be called again. Thanks, Nathan > > Perhaps we need additional pci_fixup ELF sections which are used on > hot-add and hot-remove? > > Thanks, > > Lukas