diff --git a/target/linux/imx/patches-6.12/505-6.13-arm64-dts-imx8mm-venice-gw73xx-remove-compatible-in-overlay-files.patch b/target/linux/imx/patches-6.12/505-6.13-arm64-dts-imx8mm-venice-gw73xx-remove-compatible-in-overlay-files.patch new file mode 100644 index 00000000000..9268858432c --- /dev/null +++ b/target/linux/imx/patches-6.12/505-6.13-arm64-dts-imx8mm-venice-gw73xx-remove-compatible-in-overlay-files.patch @@ -0,0 +1,56 @@ +From d3fdc7ae2ca9cb93d634e84a2b90ebf340d6e622 Mon Sep 17 00:00:00 2001 +From: Frank Li +Date: Fri, 18 Oct 2024 14:28:23 -0400 +Subject: [PATCH] arm64: dts: imx8mm-venice-gw73xx: remove compatible in + overlay file + +Remove compatible string in overlay file to fix below warning: +'gw,imx8mm-gw73xx-0x' is not one of ['fsl,ls1043a-rdb', 'fsl,ls1043a-qds'] + +Signed-off-by: Frank Li +Signed-off-by: Shawn Guo +--- + .../boot/dts/freescale/imx8mm-venice-gw73xx-0x-rs232-rts.dtso | 4 ---- + .../boot/dts/freescale/imx8mm-venice-gw73xx-0x-rs422.dtso | 4 ---- + .../boot/dts/freescale/imx8mm-venice-gw73xx-0x-rs485.dtso | 4 ---- + 3 files changed, 12 deletions(-) + +--- a/arch/arm64/boot/dts/freescale/imx8mm-venice-gw73xx-0x-rs232-rts.dtso ++++ b/arch/arm64/boot/dts/freescale/imx8mm-venice-gw73xx-0x-rs232-rts.dtso +@@ -15,10 +15,6 @@ + /dts-v1/; + /plugin/; + +-&{/} { +- compatible = "gw,imx8mm-gw73xx-0x"; +-}; +- + &gpio4 { + rs485-en-hog { + gpio-hog; +--- a/arch/arm64/boot/dts/freescale/imx8mm-venice-gw73xx-0x-rs422.dtso ++++ b/arch/arm64/boot/dts/freescale/imx8mm-venice-gw73xx-0x-rs422.dtso +@@ -18,10 +18,6 @@ + /dts-v1/; + /plugin/; + +-&{/} { +- compatible = "gw,imx8mm-gw73xx-0x"; +-}; +- + &gpio4 { + rs485-en-hog { + gpio-hog; +--- a/arch/arm64/boot/dts/freescale/imx8mm-venice-gw73xx-0x-rs485.dtso ++++ b/arch/arm64/boot/dts/freescale/imx8mm-venice-gw73xx-0x-rs485.dtso +@@ -18,10 +18,6 @@ + /dts-v1/; + /plugin/; + +-&{/} { +- compatible = "gw,imx8mm-gw73xx-0x"; +-}; +- + &gpio4 { + rs485-en-hog { + gpio-hog; diff --git a/target/linux/imx/patches-6.12/506-6.16-PCI-imx6-Skip-link-up-workaround-for-newer-platforms.patch b/target/linux/imx/patches-6.12/506-6.16-PCI-imx6-Skip-link-up-workaround-for-newer-platforms.patch new file mode 100644 index 00000000000..675da3e2d93 --- /dev/null +++ b/target/linux/imx/patches-6.12/506-6.16-PCI-imx6-Skip-link-up-workaround-for-newer-platforms.patch @@ -0,0 +1,101 @@ +From 42042e33451e380f45ad13ae725bf28ed6f0110d Mon Sep 17 00:00:00 2001 +From: Richard Zhu +Date: Wed, 16 Apr 2025 16:13:08 +0800 +Subject: [PATCH] PCI: imx6: Skip link up workaround for newer platforms + +The current link setup procedure has one workaround to detect the devices +behind PCIe switches on some i.MX6 platforms. But this workaround is not +needed on recent i.MX7 platforms. So skip the workaround for platforms that +do not set the flag and start LTSSM directly. + +Also, change the flag name from IMX_PCIE_FLAG_IMX_SPEED_CHANGE to +IMX_PCIE_FLAG_SPEED_CHANGE_WORKAROUND to match the usecase. + +Signed-off-by: Richard Zhu +[mani: subject and description rewording] +Signed-off-by: Manivannan Sadhasivam +Reviewed-by: Frank Li +Reviewed-by: Manivannan Sadhasivam +Link: https://patch.msgid.link/20250416081314.3929794-2-hongxing.zhu@nxp.com +--- + drivers/pci/controller/dwc/pci-imx6.c | 34 +++++++++++---------------- + 1 file changed, 14 insertions(+), 20 deletions(-) + +--- a/drivers/pci/controller/dwc/pci-imx6.c ++++ b/drivers/pci/controller/dwc/pci-imx6.c +@@ -74,7 +74,7 @@ enum imx_pcie_variants { + }; + + #define IMX_PCIE_FLAG_IMX_PHY BIT(0) +-#define IMX_PCIE_FLAG_IMX_SPEED_CHANGE BIT(1) ++#define IMX_PCIE_FLAG_SPEED_CHANGE_WORKAROUND BIT(1) + #define IMX_PCIE_FLAG_SUPPORTS_SUSPEND BIT(2) + #define IMX_PCIE_FLAG_HAS_PHYDRV BIT(3) + #define IMX_PCIE_FLAG_HAS_APP_RESET BIT(4) +@@ -847,6 +847,12 @@ static int imx_pcie_start_link(struct dw + u32 tmp; + int ret; + ++ if (!(imx_pcie->drvdata->flags & ++ IMX_PCIE_FLAG_SPEED_CHANGE_WORKAROUND)) { ++ imx_pcie_ltssm_enable(dev); ++ return 0; ++ } ++ + /* + * Force Gen1 operation when starting the link. In case the link is + * started in Gen2 mode, there is a possibility the devices on the +@@ -883,22 +889,10 @@ static int imx_pcie_start_link(struct dw + dw_pcie_writel_dbi(pci, PCIE_LINK_WIDTH_SPEED_CONTROL, tmp); + dw_pcie_dbi_ro_wr_dis(pci); + +- if (imx_pcie->drvdata->flags & +- IMX_PCIE_FLAG_IMX_SPEED_CHANGE) { +- /* +- * On i.MX7, DIRECT_SPEED_CHANGE behaves differently +- * from i.MX6 family when no link speed transition +- * occurs and we go Gen1 -> yep, Gen1. The difference +- * is that, in such case, it will not be cleared by HW +- * which will cause the following code to report false +- * failure. +- */ +- +- ret = imx_pcie_wait_for_speed_change(imx_pcie); +- if (ret) { +- dev_err(dev, "Failed to bring link up!\n"); +- goto err_reset_phy; +- } ++ ret = imx_pcie_wait_for_speed_change(imx_pcie); ++ if (ret) { ++ dev_err(dev, "Failed to bring link up!\n"); ++ goto err_reset_phy; + } + + /* Make sure link training is finished as well! */ +@@ -1520,7 +1514,7 @@ static const struct imx_pcie_drvdata drv + [IMX6Q] = { + .variant = IMX6Q, + .flags = IMX_PCIE_FLAG_IMX_PHY | +- IMX_PCIE_FLAG_IMX_SPEED_CHANGE | ++ IMX_PCIE_FLAG_SPEED_CHANGE_WORKAROUND | + IMX_PCIE_FLAG_BROKEN_SUSPEND | + IMX_PCIE_FLAG_SUPPORTS_SUSPEND, + .dbi_length = 0x200, +@@ -1538,7 +1532,7 @@ static const struct imx_pcie_drvdata drv + [IMX6SX] = { + .variant = IMX6SX, + .flags = IMX_PCIE_FLAG_IMX_PHY | +- IMX_PCIE_FLAG_IMX_SPEED_CHANGE | ++ IMX_PCIE_FLAG_SPEED_CHANGE_WORKAROUND | + IMX_PCIE_FLAG_SUPPORTS_SUSPEND, + .gpr = "fsl,imx6q-iomuxc-gpr", + .clk_names = imx6sx_clks, +@@ -1554,7 +1548,7 @@ static const struct imx_pcie_drvdata drv + [IMX6QP] = { + .variant = IMX6QP, + .flags = IMX_PCIE_FLAG_IMX_PHY | +- IMX_PCIE_FLAG_IMX_SPEED_CHANGE | ++ IMX_PCIE_FLAG_SPEED_CHANGE_WORKAROUND | + IMX_PCIE_FLAG_SUPPORTS_SUSPEND, + .dbi_length = 0x200, + .gpr = "fsl,imx6q-iomuxc-gpr", diff --git a/target/linux/imx/patches-6.12/506-pending-PCI-imx6-Remove-apps_reset-toggle-in-_core_reset-function.patch b/target/linux/imx/patches-6.12/506-pending-PCI-imx6-Remove-apps_reset-toggle-in-_core_reset-function.patch new file mode 100644 index 00000000000..711bf677744 --- /dev/null +++ b/target/linux/imx/patches-6.12/506-pending-PCI-imx6-Remove-apps_reset-toggle-in-_core_reset-function.patch @@ -0,0 +1,52 @@ +From d8588b5b9fddffd51962c13db7d00ae6f2ac945b Mon Sep 17 00:00:00 2001 +From: Tim Harvey +Date: Thu, 19 Jun 2025 16:04:53 -0700 +Subject: [PATCH] PCI: imx6: Remove apps_reset toggle in _core_reset functions + +apps_reset is LTSSM_EN on i.MX7, i.MX8MQ, i.MX8MM and i.MX8MP platforms. +Since the assertion/de-assertion of apps_reset(LTSSM_EN bit) had been +wrappered in imx_pcie_ltssm_enable() and imx_pcie_ltssm_disable(); + +Remove apps_reset toggle in imx_pcie_assert_core_reset() and +imx_pcie_deassert_core_reset() functions. Use imx_pcie_ltssm_enable() +and imx_pcie_ltssm_disable() to configure apps_reset directly. + +Fix fail to enumerate reliably PI7C9X2G608GP (hotplug) at i.MX8MM, which +reported By Tim. + +Reported-by: Tim Harvey +Closes: https://lore.kernel.org/all/CAJ+vNU3ohR2YKTwC4xoYrc1z-neDoH2TTZcMHDy+poj9=jSy+w@mail.gmail.com/ +Fixes: ef61c7d8d032 ("PCI: imx6: Deassert apps_reset in imx_pcie_deassert_core_reset()") +Signed-off-by: Richard Zhu +--- + drivers/pci/controller/dwc/pci-imx6.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +--- a/drivers/pci/controller/dwc/pci-imx6.c ++++ b/drivers/pci/controller/dwc/pci-imx6.c +@@ -763,7 +763,6 @@ static int imx7d_pcie_core_reset(struct + static void imx_pcie_assert_core_reset(struct imx_pcie *imx_pcie) + { + reset_control_assert(imx_pcie->pciephy_reset); +- reset_control_assert(imx_pcie->apps_reset); + + if (imx_pcie->drvdata->core_reset) + imx_pcie->drvdata->core_reset(imx_pcie, true); +@@ -775,7 +774,6 @@ static void imx_pcie_assert_core_reset(s + static int imx_pcie_deassert_core_reset(struct imx_pcie *imx_pcie) + { + reset_control_deassert(imx_pcie->pciephy_reset); +- reset_control_deassert(imx_pcie->apps_reset); + + if (imx_pcie->drvdata->core_reset) + imx_pcie->drvdata->core_reset(imx_pcie, false); +@@ -976,6 +974,9 @@ static int imx_pcie_host_init(struct dw_ + } + } + ++ /* Make sure that PCIe LTSSM is cleared */ ++ imx_pcie_ltssm_disable(dev); ++ + ret = imx_pcie_deassert_core_reset(imx_pcie); + if (ret < 0) { + dev_err(dev, "pcie deassert core reset failed: %d\n", ret);