Hi all,
I am working on PCIE support on my custom board. I raised a question before IMX7D PCIE Support . But this time I am going to provide more details.
As I am going to enable PCIE support for IMX7D, I have enabled following kernel options.
CONFIG_PCI=y
CONFIG_PCI_MSI=y
CONFIG_PCI_IMX6=y
CONFIG_BLK_DEV_NVME=y
After that I have also enable the PCIE in device tree.
&pcie {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pcie>;
reset-gpio = <&gpio1 13 GPIO_ACTIVE_LOW>;
disable-gpio = <&gpio1 12 GPIO_ACTIVE_LOW>;
status = "okay";
};
After that, the kernel stuck at
Starting kernel ...
Uncompressing Linux... done, booting the kernel.
I finally trace the cause is here in pcie-designware.c
void dw_pcie_setup_rc(struct pcie_port *pp)
{
return;
u32 val;
val = dw_pcie_readl_rc(pp, PCIE_PORT_LINK_CONTROL);
val &= ~PORT_LINK_MODE_MASK;
switch (pp->lanes) {
case 1:
val |= PORT_LINK_MODE_1_LANES;
break;
The dw_pcie_readl_rc() function cannot proceed and the kernel fails to respond.
This issue only happens on my custom board but not on IMX7D sabre board.
I tried to manually read the register instead, in both kernel and uboot. Both of them fail to respond and keep stuck at that moment. Even CTRL-C cannot escape that condition
Kernel:
memtool md -l 0x33800710 1
Uboot
md.l 0x33800710 1
This register seems to be able to access using certain method.
Please advise. Thanks.
Chris Tsang