Loading
PCI: dwc: Fix missing iATU setup when ECAM is enabled
When ECAM is enabled, the driver skipped calling dw_pcie_iatu_setup() before configuring ECAM iATU entries. This left IO and MEM outbound windows unprogrammed, resulting in broken IO transactions. Additionally, dw_pcie_config_ecam_iatu() was only called during host initialization, so ECAM-related iATU entries were not restored after suspend/resume, leading to failures in configuration space access To resolve these issues, move the ECAM iATU configuration to dw_pcie_iatu_setup(), and invoke dw_pcie_iatu_setup() when ECAM is enabled. Furthermore, add error checks in dw_pcie_prog_outbound_atu() and dw_pcie_prog_inbound_atu() such that an error is returned if the caller is trying to program an iATU that is outside the number of iATUs supported by the controller. Fixes: f6fd357f ("PCI: dwc: Prepare the driver for enabling ECAM mechanism using iATU 'CFG Shift Feature'") Reported-by:Maciej W. Rozycki <macro@orcam.me.uk> Closes: https://lore.kernel.org/all/alpine.DEB.2.21.2511280256260.36486@angie.orcam.me.uk/ Signed-off-by:
Krishna Chaitanya Chundru <krishna.chundru@oss.qualcomm.com> Co-developed-by:
Niklas Cassel <cassel@kernel.org> Signed-off-by:
Niklas Cassel <cassel@kernel.org> [mani: used imperative tone] Signed-off-by:
Manivannan Sadhasivam <mani@kernel.org> Tested-by:
Maciej W. Rozycki <macro@orcam.me.uk> Reviewed-by:
Damien Le Moal <dlemoal@kernel.org> Reviewed-by:
Hans Zhang <zhanghuabing@ecosda.com> Reviewed-by:
Frank Li <Frank.Li@nxp.com> Cc: stable+noautosel@kernel.org # depends on Clean up iATU index usage in dw_pcie_iatu_setup() Link: https://patch.msgid.link/20260127151038.1484881-8-cassel@kernel.org