]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
PCI: imx6: Keep i.MX6 Root Port MSI/MSI-X Capabilities with iMSI-RX to work around...
authorSoeren Moch <smoch@web.de>
Fri, 17 Jul 2026 03:32:03 +0000 (11:32 +0800)
committerBjorn Helgaas <bhelgaas@google.com>
Fri, 17 Jul 2026 16:59:41 +0000 (11:59 -0500)
On some NXP chipsets, disabling Root Port MSI/MSI-X Capabilities blocks
MSIs originating from Endpoints from reaching the iMSI-RX controller.

To address this hardware bug, commit 3a4e8302e72f ("PCI: imx6: Keep Root
Port MSI capability with iMSI-RX to work around hardware bug") preserves
Root Port MSI and MSI-X Capabilities on i.MX7D, i.MX8MM, and i.MX8MQ
when iMSI-RX is in use.

The same applies to i.MX6Q, i.MX6QP, and i.MX6SX, so preserve Root Port
MSI/MSI-X Capabilities there as well.

Note that preserving these Capabilities means Root Port-originated MSIs
such as AER and PME won't be received due to separate hardware limitations.
Users may need to use workarounds such as passing the 'pcie_pme=nomsi'
command-line parameter.

Fixes: f5cd8a929c825 ("PCI: dwc: Remove MSI/MSIX capability for Root Port if iMSI-RX is used as MSI controller")
Signed-off-by: Soeren Moch <smoch@web.de>
Signed-off-by: Richard Zhu <hongxing.zhu@nxp.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Reviewed-by: Manivannan Sadhasivam <mani@kernel.org>
Acked-by: Richard Zhu <hongxing.zhu@nxp.com>
Cc: stable@vger.kernel.org # 7.0+
Link: https://patch.msgid.link/20260717033203.2965045-1-hongxing.zhu@oss.nxp.com
drivers/pci/controller/dwc/pci-imx6.c

index 98e1db751132af309220adc9e939332f588ecc81..dba27eac6bff6d4bf10a92662791d6e9511a647e 100644 (file)
@@ -1995,7 +1995,8 @@ static const struct imx_pcie_drvdata drvdata[] = {
                .flags = IMX_PCIE_FLAG_IMX_PHY |
                         IMX_PCIE_FLAG_SPEED_CHANGE_WORKAROUND |
                         IMX_PCIE_FLAG_BROKEN_SUSPEND |
-                        IMX_PCIE_FLAG_SUPPORTS_SUSPEND,
+                        IMX_PCIE_FLAG_SUPPORTS_SUSPEND |
+                        IMX_PCIE_FLAG_KEEP_MSI_CAP,
                .dbi_length = 0x200,
                .gpr = "fsl,imx6q-iomuxc-gpr",
                .ltssm_off = IOMUXC_GPR12,
@@ -2011,7 +2012,8 @@ static const struct imx_pcie_drvdata drvdata[] = {
                .flags = IMX_PCIE_FLAG_IMX_PHY |
                         IMX_PCIE_FLAG_SPEED_CHANGE_WORKAROUND |
                         IMX_PCIE_FLAG_SKIP_L23_READY |
-                        IMX_PCIE_FLAG_SUPPORTS_SUSPEND,
+                        IMX_PCIE_FLAG_SUPPORTS_SUSPEND |
+                        IMX_PCIE_FLAG_KEEP_MSI_CAP,
                .gpr = "fsl,imx6q-iomuxc-gpr",
                .ltssm_off = IOMUXC_GPR12,
                .ltssm_mask = IMX6Q_GPR12_PCIE_CTL_2,
@@ -2026,7 +2028,8 @@ static const struct imx_pcie_drvdata drvdata[] = {
                .flags = IMX_PCIE_FLAG_IMX_PHY |
                         IMX_PCIE_FLAG_SPEED_CHANGE_WORKAROUND |
                         IMX_PCIE_FLAG_SKIP_L23_READY |
-                        IMX_PCIE_FLAG_SUPPORTS_SUSPEND,
+                        IMX_PCIE_FLAG_SUPPORTS_SUSPEND |
+                        IMX_PCIE_FLAG_KEEP_MSI_CAP,
                .dbi_length = 0x200,
                .gpr = "fsl,imx6q-iomuxc-gpr",
                .ltssm_off = IOMUXC_GPR12,