Re: [PATCH V6 00/12] pci-imx6: Add support for parsing the reset property in new Root Port binding

From: Manivannan Sadhasivam

Date: Wed Feb 25 2026 - 08:21:49 EST


On Wed, Feb 25, 2026 at 06:55:11PM +0800, Sherry Sun wrote:
> This patch set adds support for parsing the reset property in new Root Port
> binding in pci-imx6 driver, similar to the implementation in the qcom pcie
> driver[1].
>
> Also introduce generic helper functions to parse Root Port device tree
> nodes and extract common properties like reset GPIOs. This allows multiple
> PCI host controller drivers to share the same parsing logic.
>
> Define struct pci_host_port to hold common Root Port properties
> (currently only reset GPIO descriptor) and add
> pci_host_common_parse_ports() to parse Root Port nodes from device tree.
> Also add the 'ports' list to struct pci_host_bridge for better maintain
> parsed Root Port information.
>
> The plan is to add the wake-gpio property to the root port in subsequent
> patches. Also, the vpcie-supply property will be moved to the root port
> node later based on the refactoring patch set for the PCI pwrctrl
> framework[2].
>
> The initial idea is to adopt the Manivannan’s recent PCIe M.2 KeyE
> connector support patch set[3] and PCI power control framework patches[2],
> and extend them to the pcie-imx6 driver. Since the new M.2/pwrctrl model is
> implemented based on Root Ports and requires the pwrctrl driver to bind to
> a Root Port device, we need to introduce a Root Port child node on i.MX
> boards that provide an M.2 connector.
>
> To follow a more standardized DT structure, it also makes sense to move
> the reset-gpios and wake-gpios properties into the Root Port node. These
> signals logically belong to the Root Port rather than the host bridge,
> and placing them there aligns with the new M.2/pwrctrl model.
>
> Regarding backward compatibility, as Frank suggested, I will not remove
> the old reset-gpio property from existing DTS files to avoid function
> break.
>
> For new i.MX platforms — such as the upcoming i.MX952-evk will add
> vpcie-supply, reset-gpios, and wake-gpios directly under the Root Port
> node.
> Therefore, driver updates are needed to support both the legacy
> properties and the new standardized Root Port based layout.
>
> [1] https://lore.kernel.org/linux-pci/20250702-perst-v5-0-920b3d1f6ee1@xxxxxxxxxxxxxxxx/
> [2] https://lore.kernel.org/linux-pci/20260115-pci-pwrctrl-rework-v5-0-9d26da3ce903@xxxxxxxxxxxxxxxx/
> [3] https://lore.kernel.org/linux-pci/20260112-pci-m2-e-v4-0-eff84d2c6d26@xxxxxxxxxxxxxxxx/
>
> Signed-off-by: Sherry Sun <sherry.sun@xxxxxxx>

Please do not send next version before closing or even giving a window.

- Mani

> ---
> Changes in V6:
> 1. Drop the pre-allocate pci_host_bridge struct changes in dw_pcie_host_init()
> and imx_pcie_probe().
> 2. Parse Root Port nodes in dw_pcie_host_init() as Frank and Mani suggested.
> 3. Move the imx_pcie_parse_legacy_binding() from imx_pcie_probe() to
> imx_pcie_host_init(), so that dw_pcie_host_init() parse Root Port first, if
> no Root Port nodes were parsed(indicated by empty ports list), then parse
> legacy binding.
> 4. Add device pointer parameter for pci_host_common_parse_ports().
> 5. Add NULL pointer check for reset gpio in imx_pcie_parse_legacy_binding().
>
> Changes in V5:
> 1. Add the Root Port list(pci_host_port) to struct pci_host_bridge for better
> maintain parsed Root Port information.
> 2. Delete the pci_host_common_delete_ports() as now the Root Port list in
> pci_host_bridge can be cleared by pci_release_host_bridge_dev().
> 3. Change the common API pci_host_common_parse_ports() pass down struct
> pci_host_bridge *.
> 4. Modify dw_pcie_host_init() to allow drivers to pre-allocate pci_host_bridge
> struct when needed.
> 5. Allocate bridge early in imx_pcie_probe() to parse Root Ports.
>
> Changes in V4:
> 1. Add common helpers for parsing Root Port properties in pci-host-common.c in
> patch#2.
> 2. Call common pci_host_common_parse_ports() and pci_host_common_delete_ports()
> in pci-imx6 driver.
> 3. Use PCIE_T_PVPERL_MS and PCIE_RESET_CONFIG_WAIT_MS instead of magic number
> 100 in patch#3 as Manivannan suggested.
> 4. Use "PERST#" instead of "PCIe reset" for the reset gpio lable in patch#3.
>
> Changes in V3:
> 1. Improve the patch#2 commit message as Frank suggested.
> 2. Add Reviewed-by tag for patch#1.
>
> Changes in V2:
> 1. Improve the patch#1 commit message as Frank suggested.
> 2. Also mark the reset-gpio-active-high property as deprecated in
> imx6q-pcie DT binding as Rob suggested.
> 3. The imx_pcie_delete_ports() has been moved up so that the
> imx_pcie_parse_ports() can call this helper function in error handling.
> 4. Keep the old reset-gpio property in the host bridge node for the
> existing dts files and add comments to avoid confusion.
> ---
>
> Sherry Sun (12):
> dt-bindings: PCI: fsl,imx6q-pcie: Add reset GPIO in Root Port node
> PCI: host-generic: Add common helpers for parsing Root Port properties
> PCI: dwc: Parse Root Port nodes in dw_pcie_host_init()
> PCI: imx6: Add support for parsing the reset property in new Root Port
> binding
> arm: dts: imx6qdl: Add Root Port node and PERST property
> arm: dts: imx6sx: Add Root Port node and PERST property
> arm: dts: imx7d: Add Root Port node and PERST property
> arm64: dts: imx8mm: Add Root Port node and PERST property
> arm64: dts: imx8mp: Add Root Port node and PERST property
> arm64: dts: imx8mq: Add Root Port node and PERST property
> arm64: dts: imx8dxl/qm/qxp: Add Root Port node and PERST property
> arm64: dts: imx95: Add Root Port node and PERST property
>
> .../bindings/pci/fsl,imx6q-pcie.yaml | 32 ++++++++
> .../arm/boot/dts/nxp/imx/imx6qdl-sabresd.dtsi | 5 ++
> arch/arm/boot/dts/nxp/imx/imx6qdl.dtsi | 11 +++
> .../arm/boot/dts/nxp/imx/imx6qp-sabreauto.dts | 5 ++
> arch/arm/boot/dts/nxp/imx/imx6sx-sdb.dtsi | 5 ++
> arch/arm/boot/dts/nxp/imx/imx6sx.dtsi | 11 +++
> arch/arm/boot/dts/nxp/imx/imx7d-sdb.dts | 5 ++
> arch/arm/boot/dts/nxp/imx/imx7d.dtsi | 11 +++
> .../boot/dts/freescale/imx8-ss-hsio.dtsi | 11 +++
> arch/arm64/boot/dts/freescale/imx8dxl-evk.dts | 5 ++
> arch/arm64/boot/dts/freescale/imx8mm-evk.dtsi | 5 ++
> arch/arm64/boot/dts/freescale/imx8mm.dtsi | 11 +++
> arch/arm64/boot/dts/freescale/imx8mp-evk.dts | 5 ++
> arch/arm64/boot/dts/freescale/imx8mp.dtsi | 11 +++
> arch/arm64/boot/dts/freescale/imx8mq-evk.dts | 10 +++
> arch/arm64/boot/dts/freescale/imx8mq.dtsi | 22 ++++++
> arch/arm64/boot/dts/freescale/imx8qm-mek.dts | 10 +++
> .../boot/dts/freescale/imx8qm-ss-hsio.dtsi | 22 ++++++
> arch/arm64/boot/dts/freescale/imx8qxp-mek.dts | 5 ++
> .../boot/dts/freescale/imx95-15x15-evk.dts | 5 ++
> .../boot/dts/freescale/imx95-19x19-evk.dts | 10 +++
> arch/arm64/boot/dts/freescale/imx95.dtsi | 22 ++++++
> drivers/pci/controller/dwc/pci-imx6.c | 76 +++++++++++++++----
> .../pci/controller/dwc/pcie-designware-host.c | 8 ++
> drivers/pci/controller/pci-host-common.c | 58 ++++++++++++++
> drivers/pci/controller/pci-host-common.h | 15 ++++
> drivers/pci/probe.c | 2 +
> include/linux/pci.h | 1 +
> 28 files changed, 384 insertions(+), 15 deletions(-)
>
> --
> 2.37.1
>

--
மணிவண்ணன் சதாசிவம்