On Thu, Apr 17, 2025 at 02:41:55PM +0530, Krishna Chaitanya Chundru wrote: > > > On 4/17/2025 1:24 PM, Manivannan Sadhasivam wrote: > > On Wed, Apr 16, 2025 at 11:21:49PM +0530, Krishna Chaitanya Chundru wrote: > > > > > > > > > On 4/16/2025 9:59 PM, Manivannan Sadhasivam via B4 Relay wrote: > > > > From: Manivannan Sadhasivam <manivannan.sadhasi...@linaro.org> > > > > > > > > The PCI link, when down, needs to be recovered to bring it back. But > > > > that > > > > cannot be done in a generic way as link recovery procedure is specific > > > > to > > > > host bridges. So add a new API pci_host_handle_link_down() that could be > > > > called by the host bridge drivers when the link goes down. > > > > > > > > The API will iterate through all the slots and calls the > > > > pcie_do_recovery() > > > > function with 'pci_channel_io_frozen' as the state. This will result in > > > > the > > > > execution of the AER Fatal error handling code. Since the link down > > > > recovery is pretty much the same as AER Fatal error handling, > > > > pcie_do_recovery() helper is reused here. First the AER error_detected > > > > callback will be triggered for the bridge and the downstream devices. > > > > Then, > > > > pcie_do_slot_reset() will be called for each slots, which will reset the > > > > slots using 'reset_slot' callback to recover the link. Once that's done, > > > > resume message will be broadcasted to the bridge and the downstream > > > > devices > > > > indicating successful link recovery. > > > > > > > > In case if the AER support is not enabled in the kernel, only > > > > pci_bus_error_reset() will be called for each slots as there is no way > > > > we > > > > could inform the drivers about link recovery. > > > > > > > The PCIe endpoint drivers are registering with err_handlers and they > > > will be invoked only from pcie_do_recovery, but there are getting built > > > by default irrespective of AER is enabled or not. > > > > > > > AER is *one* of the functionalities of an endpoint. And the endpoint could > > mostly work without AER reporting (except for AER fatal/non-fatal where > > recovery > > need to be performed by the host). So it wouldn't make sense to add AER > > dependency for them. > > > > > Does it make sense to built err.c irrespective of AER is enabled or not > > > to use common logic without the need of having dependency on AER. > > > > > > > Well, yes and no. Right now, only DPC reuses the err handlers except AER. > > But > > DPC driver itself is functional dependent on AER. So I don't think it is > > really > > required to build err.c independent of AER. But I will try to rework the > > code in > > the future for fixing things like 'AER' prefix added to logs and such. > > > Right now we have DPC & AER to use this pcie_do_recovery(), now we are > adding supporting for controller reported error (Link down) not sure if > there will be newer ways to report errors in future. > > May be not in this series, in future better to de-couple err.c from > AER as err.c. As the sources of error reporting is not limited to AER > or DPC alone now. >
Yes, that's part of my plan. > > > Also since err.c is tied with AER, DPC also had a hard requirement > > > to enable AER which is not needed technically. > > > > > > > DPC driver is functional dependent on AER. > I got a impression by seeing below statement that DPC can work > independently. > As per spec 6 sec 6.2.11.2, DPC error signaling "A DPC-capable > Downstream Port must support ERR_COR signaling, independent of whether > it supports Advanced Error Reporting (AER) or not". > That's why I intentionally said 'DPC driver' not 'DPC'. The driver has the dependency, not the feature. > In fact it can work if AER is not enabled also, but will not have full > functionality of DPC. > Right. That's why I said functionally dependent. - Mani -- மணிவண்ணன் சதாசிவம்