Hi Hou, On 29/09/20 6:43 pm, Zhiqiang Hou wrote: > From: Hou Zhiqiang <Zhiqiang.Hou@xxxxxxx> > > In the current error response behavior, it will send a SLVERR response > to device's internal AXI slave system interface when the PCIe controller > experiences an erroneous completion (UR, CA and CT) from an external > completer for its outbound non-posted request, which will result in > SError and crash the kernel directly. > This patch change back it to the default behavior to increase the > robustness of the kernel. In the default behavior, it always sends an > OKAY response to the internal AXI slave interface when the controller > gets these erroneous completions. And the AER driver will report and > try to recover these errors. I don't think not forwarding any error interrupts is a good idea. Maybe you could disable it while reading configuration space registers (vendorID and deviceID) and then enable error forwarding back? Thanks Kishon > > Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@xxxxxxx> > --- > drivers/pci/controller/dwc/pci-layerscape.c | 11 ----------- > 1 file changed, 11 deletions(-) > > diff --git a/drivers/pci/controller/dwc/pci-layerscape.c b/drivers/pci/controller/dwc/pci-layerscape.c > index f24f79a70d9a..e92ab8a77046 100644 > --- a/drivers/pci/controller/dwc/pci-layerscape.c > +++ b/drivers/pci/controller/dwc/pci-layerscape.c > @@ -30,8 +30,6 @@ > > /* PEX Internal Configuration Registers */ > #define PCIE_STRFMR1 0x71c /* Symbol Timer & Filter Mask Register1 */ > -#define PCIE_ABSERR 0x8d0 /* Bridge Slave Error Response Register */ > -#define PCIE_ABSERR_SETTING 0x9401 /* Forward error of non-posted request */ > > #define PCIE_IATU_NUM 6 > > @@ -123,14 +121,6 @@ static int ls_pcie_link_up(struct dw_pcie *pci) > return 1; > } > > -/* Forward error response of outbound non-posted requests */ > -static void ls_pcie_fix_error_response(struct ls_pcie *pcie) > -{ > - struct dw_pcie *pci = pcie->pci; > - > - iowrite32(PCIE_ABSERR_SETTING, pci->dbi_base + PCIE_ABSERR); > -} > - > static int ls_pcie_host_init(struct pcie_port *pp) > { > struct dw_pcie *pci = to_dw_pcie_from_pp(pp); > @@ -142,7 +132,6 @@ static int ls_pcie_host_init(struct pcie_port *pp) > * dw_pcie_setup_rc() will reconfigure the outbound windows. > */ > ls_pcie_disable_outbound_atus(pcie); > - ls_pcie_fix_error_response(pcie); > > dw_pcie_dbi_ro_wr_en(pci); > ls_pcie_clear_multifunction(pcie); >