PCI Express is a third-generation I/O interconnect targeting low-cost, high-volume, multi-platform interconnection. The NXP i.MX95 CPU has two independent PCI Express (PCIe) controllers, each supporting a single-lane link up to Gen 3 speeds.

The BSP configures the PCIe port 0 to act as Root Complex (RC).

On the ConnectCore 95 system-on-module:

  • The PCIe buses are available on the LGA pads.

On the ConnectCore 95 Development Kit:

  • The PCIe port 0 is available in the PCIe mini card connector J18.

Kernel configuration

You can manage the PCIe driver support through the kernel configuration option:

  • Freescale i.MX6/7/8 PCIe controller (CONFIG_PCI_IMX6)

This option is enabled as built-in on the default ConnectCore 95 kernel configuration file.

Kernel driver

The PCIe bus driver for the ConnectCore 95 system-on-module is located at drivers/pci/controller/dwc/pci-imx6.c.

Device tree bindings and customization

The i.MX95 PCIe interface device tree binding is documented at Documentation/devicetree/bindings/pci/fsl,imx6q-pcie.yaml.

Example: PCIe (Mini card) on the ConnectCore 95 Development Kit

Definition of the PCIe bus

i.MX95 device tree
		pcie0: pcie@4c300000 {
			compatible = "fsl,imx95-pcie";
			reg = <0 0x4c300000 0 0x10000>,
			      <0 0x4c360000 0 0x20000>,
			      <0 0x60100000 0 0xfe00000>;
			reg-names = "dbi", "atu", "config";
			[...]
			status = "disabled";
		};

		serdes0_ssr: ssr@4c340000 {
			compatible = "fsl,imx95-serdes-syscfg", "syscon";
			reg = <0 0x4c340000 0 0x2000>;
		};

		pcie1: pcie@4c380000 {
			compatible = "fsl,imx95-pcie";
			reg = <0 0x4c380000 0 0x10000>,
			      <0 0x4c3e0000 0 0x20000>,
			      <8 0x80100000 0 0xfe00000>;
			reg-names = "dbi", "atu", "config";
			[...]
			status = "disabled";
		};

		pcie1_ep: pcie-ep@4c380000 {
			compatible = "fsl,imx95-pcie-ep";
			reg = <0 0x4c380000 0 0x10000>,
			      <0 0x4c3a0000 0 0x1000>,
			      <0 0x4c3e0000 0 0x1000>,
			      <0 0x4c3f0000 0 0x10000>,
			      <0xa 0 1 0>;
			reg-names = "dbi", "dbi2", "atu", "dma", "addr_space";
			[...]
			status = "disabled";
		};

		serdes1_ssr: ssr@4c3c0000 {
			compatible = "fsl,imx95-serdes-syscfg", "syscon";
			reg = <0 0x4c3c0000 0 0x2000>;
		};

PCIe port on the ConnectCore 95 Development Kit

ConnectCore 95 Development Kit device tree
&pcie0 {
	vpcie-supply = <&reg_3v3_dvk>;
	fsl,refclk-pad-mode = <IMX8_PCIE_REFCLK_PAD_OUTPUT>;
	status = "okay";
};

/*
 * Disabled by default. To enable it, on the DVK, 0-ohm selection resistors must
 * be swapped from PCIE0 lines to the PCIE1 lines.
 */
&pcie1 {
	vpcie-supply = <&reg_3v3_dvk>;
	fsl,refclk-pad-mode = <IMX8_PCIE_REFCLK_PAD_OUTPUT>;
	status = "disabled";
};

&pcie1_ep {
	vpcie-supply = <&reg_3v3_dvk>;
	status = "disabled";
};