Trouble Shooting of PCIe Absence on Customized Carrier Board Based on i.MX8MQ

There are two PCIe interfaces on Forlinx Embedded OKMX8MQ-C development board, corresponding to two PCIe differential clocks. The two PCIe are used as M.2 card slots KEYE (P37) and KEYM (P34).

Many users who use FETMX8MQ-C SoM will not use PCIe for their own carrier board. So PCIe differential clock will not be soldered. When use factory image to verify carrier board, it can’t start normally.

The following are two problems caused by without PCIe on user made carrier boards and corresponding solutions.

Q1. When using factory image to start, it cannot start normally

Description: The user made carrier board removes PCIe and flashing factory image. Stuck message appears during startup:

Cause: PCIe affects startup. Functions related to PCIe need to be turned off in device tree.

Solution: modify kernel device tree:

vi OK8MQ-linux-kernel/arch/arm64/boot/dts/freescale/ok8mq-evk.dts

Change all PCIe in device tree from "okay" to "disabled" and recompile. After compilation, ok8mq-evk.dtb will be generated under /OK8MQ-linux-sdk/images/boot.

After above modifications, recompile and flashing new image.

The printing information after normal startup is as follows ( red box is the printing information that continues to start backward at above stuck position):

Note: The minimum system currently provided by Forlinx is also without PCIe. So if use the minimum system, user also need to modify it according to above method.

Q2. When using TF card for flashing, it is stuck during process

Description: user made carrier board removes PCIe. when using TF card for flashing, command line print information stuck in following position:

Note: It may not be at the marked location, but must be near the printed information above.

Cause: The startup of PCIe in flashing boot image affects flashing. The kernel boot image in flashing tool needs to be replaced.

Solution: First modify kernel device tree and compile as above 1. Enter OK8MQ-linux-sdk/tools/update. There are many dtb files in this path:

Replace ok8mq-evk.dtb in current path with ok8mq-evk.dtb generated by compilation in images/boot.

Execute compile to generate a new flashing tool:

Use newly generated update.itb to replace update.itb in TF card, and perform TF card flashing.

Enter OK8MQ-linux-sdk/tools/sdfuse, and you can see newly generated flashing tool update.itb.


  • Part source code of Forlinx flashing tool is not open source. If you need to make corresponding changes, please contact your Forlinx sales, and Forlinx will help you modify it.
  • OTG flashing will not be affected by without PCIe.

User may encounter above two problems when removing PCIe from his own carrier board.

If design with 1 PCIe, you also need to pay attention:

If self-made carrier board only has 1 PCIe and only 1 clock chip is soldered, it will also affect startup. It also need to modify device tree and turn off the PCIe that noy used.

If self-made carrier board has only 1 PCIe, and differential clock is soldered not corresponding to the interface, the device cannot be found by querying lspci on command line.

The above are trouble shootings proposed based on OKMX8MQ-C for problems of removing PCIe from carrier board. You can refer to it when designing carrier board of i.MX8MQ.