How to set the PCIe of i.MX8M Plus development board to EP mode?

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

How to set the PCIe of i.MX8M Plus development board to EP mode?

3,312 次查看
22721579
Contributor I

Is this feature supported by the current development board? If so, are there any related documents available? Thank you.

0 项奖励
回复
10 回复数

3,298 次查看
JorgeCas
NXP TechSupport
NXP TechSupport

Hello, I hope you are doing well.

This mode is mentioned on device tree (imx8mp-evk-pcie-ep.dts) you could try to load it on U-boot with the next commands.

u-boot=> setenv fdtfile imx8mp-evk-pcie-ep.dtb
u-boot=> saveenv
u-boot=> boot

Best regads.

0 项奖励
回复

3,278 次查看
22721579
Contributor I
Thank you for your response. May I know how can I verify if the EP mode setting is successful?

Best regards
0 项奖励
回复

3,261 次查看
JorgeCas
NXP TechSupport
NXP TechSupport

Hello,

These are the logs with default PCIe configuration.

root@imx8mpevk:~# dmesg | grep pcie
[ 2.474790] imx6q-pcie 33800000.pcie: host bridge /soc@0/pcie@33800000 ranges:
[ 2.489157] imx6q-pcie 33800000.pcie: IO 0x001ff80000..0x001ff8ffff -> 0x0000000000
[ 2.497372] imx6q-pcie 33800000.pcie: MEM 0x0018000000..0x001fefffff -> 0x0018000000
[ 2.731113] imx6q-pcie 33800000.pcie: iATU: unroll T, 4 ob, 4 ib, align 64K, limit 16G
[ 2.839408] imx6q-pcie 33800000.pcie: PCIe Gen.1 x1 link up
[ 2.947804] imx6q-pcie 33800000.pcie: PCIe Gen.2 x1 link up
[ 2.953400] imx6q-pcie 33800000.pcie: Link up, Gen2
[ 2.958288] imx6q-pcie 33800000.pcie: PCIe Gen.2 x1 link up
[ 2.963972] imx6q-pcie 33800000.pcie: PCI host bridge to bus 0000:00
[ 3.112749] pcieport 0000:00:00.0: PME: Signaling with IRQ 226

And these after changing the device tree.

root@imx8mpevk:~# dmesg | grep pcie
[ 2.471025] imx6q-pcie 33800000.pcie_ep: iATU: unroll T, 4 ob, 4 ib, align 64K, limit 16G

Best regards.

0 项奖励
回复

3,239 次查看
22721579
Contributor I

Thank you for your answer.

After following your instructions to configure the fdtfile, the output is still

[    2.762409] imx6q-pcie 33800000.pcie: 33800000.pcie supply epdev_on not found, using dummy regulator
[    2.780653] imx6q-pcie 33800000.pcie: EXT REF_CLK is used!.
[    2.795671] imx6q-pcie 33800000.pcie: PCIe PHY PLL clock is locked.
[    2.827983] imx6q-pcie 33800000.pcie: PCIe PLL locked after 0 us.
[    2.836596] imx6q-pcie 33800000.pcie: host bridge /pcie@33800000 ranges:
[    2.851181] imx6q-pcie 33800000.pcie:   No bus range found for /pcie@33800000, using [bus 00-ff]
[    2.851199] imx6q-pcie 33800000.pcie:    IO 0x1ff80000..0x1ff8ffff -> 0x00000000
[    2.866941] imx6q-pcie 33800000.pcie:   MEM 0x18000000..0x1fefffff -> 0x18000000
[    3.872212] imx6q-pcie 33800000.pcie: Phy link never came up
[    3.877910] imx6q-pcie 33800000.pcie: failed to initialize host
[    3.883847] imx6q-pcie 33800000.pcie: unable to add pcie port.

 Is there any prerequisite work that I haven’t done?

Best regards.

0 项奖励
回复

3,231 次查看
JorgeCas
NXP TechSupport
NXP TechSupport

Hello,

Maybe you are not saving the environment.

Could you please share the log on U-boot of the next command?

u-boot=> printenv

Best regards.

0 项奖励
回复

3,219 次查看
22721579
Contributor I

This is my printenv:

baudrate=115200
board_name=OK8MP-C
board_rev=iMX8MP
boot_fit=no
bootcmd=mmc dev ${mmcdev}; if mmc rescan; then if run loadbootscript; then run bootscript; elif test ${fastboot_dev} = mmc1 && run loadupdate; then run sdargs; run mmcupdate; else if run loadimage; then run mmcboot; else run netboot; fi; fi; fi;
bootcmd_mfg=run mfgtool_args;if iminfo ${initrd_addr}; then if test ${tee} = yes; then bootm ${tee_addr} ${initrd_addr} ${fdt_addr}; else booti ${loadaddr} ${initrd_addr} ${fdt_addr}; fi; else echo "Run fastboot ..."; fastboot 0; fi;
bootdelay=1
bootscript=echo Running bootscript from mmc ...; source
console=ttymxc1,115200
emmc_dev=2
eth1addr=ca:e1:01:ca:87:78
ethaddr=ca:e1:01:ca:87:77
ethprime=eth1
fastboot_dev=mmc2
fdt_addr=0x43000000
fdt_file=OK8MP-C.dtb
fdt_high=0xffffffffffffffff
fdtcontroladdr=43000000
fdtfile=imx8mp-evk-pcie-ep.dtb
image=Image
initrd_addr=0x43800000
initrd_high=0xffffffffffffffff
jh_clk=
jh_mmcboot=setenv fdt_file imx8mp-evk-root.dtb;setenv jh_clk clk_ignore_unused; if run loadimage; then run mmcboot; else run jh_netboot; fi;
jh_netboot=setenv fdt_file imx8mp-evk-root.dtb; setenv jh_clk clk_ignore_unused; run netboot;
kboot=booti
loadaddr=0x40480000
loadbootscript=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};
loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}
loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}
loadupdate=mmc dev 1;fatload mmc 1:1 ${loadaddr} config.ini;
mfgtool_args=setenv bootargs console=${console},${baudrate} rdinit=/linuxrc clk_ignore_unused
mmcargs=setenv bootargs ${jh_clk} console=${console} root=${mmcroot}
mmcautodetect=yes
mmcboot=echo Booting from mmc ...; run mmcargs; if test ${boot_fit} = yes || test ${boot_fit} = try; then bootm ${loadaddr}; else if run loadfdt; then booti ${loadaddr} - ${fdt_addr}; else echo WARN: Cannot load the DT; fi; fi;
mmcdev=2
mmcpart=1
mmcroot=/dev/mmcblk2p2 rootwait rw
mmcupdate=fatload mmc 1:1 ${loadaddr} kernel/Image;fatload mmc 1:1 ${initrd_addr} ramdisk.img;fatload mmc 1:1 ${fdt_addr} kernel/${fdt_file};booti ${loadaddr} ${initrd_addr} ${fdt_addr};
nandfit_part=yes
netargs=setenv bootargs ${jh_clk} console=${console} root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp
netboot=echo Booting from net ...; run netargs;  if test ${ip_dyn} = yes; then setenv get_cmd dhcp; else setenv get_cmd tftp; fi; ${get_cmd} ${loadaddr} ${image}; if test ${boot_fit} = yes || test ${boot_fit} = try; then bootm ${loadaddr}; else if ${get_cmd} ${fdt_addr} ${fdt_file}; then booti ${loadaddr} - ${fdt_addr}; else echo WARN: Cannot load the DT; fi; fi;
script=boot.scr
sd_dev=1
sdargs=setenv bootargs ${jh_clk} console=${console} root=/dev/ram0 rootwait rw
serial#=111c1000ef25d549
soc_type=imx8mp
splashimage=0x50000000
video_hdmi=on
video_lvds=on
video_mipi=on

Environment size: 2820/4092 bytes

 Best regards.

0 项奖励
回复

3,178 次查看
JorgeCas
NXP TechSupport
NXP TechSupport

Hello,

Got it, it seems to be ok.

Your log indicates that it could not initialize PCIe port.

Do you have something connected to the port?

Could you please share me you OS version?

Are you using our EVK right? 

Best regards.

0 项奖励
回复

3,173 次查看
22721579
Contributor I

Hello, thank you for your response:

My PCIe interface is not connected to any device. The operating system version is Ubuntu 18.04.64, and the kernel version of the development board is Linux 5.4.7.0.

Linux OK8MP 5.4.70-2.3.0-00005-g33a263b968fb #1 SMP PREEMPT Wed Aug 25 15:03:04 HKT 2021 aarch64 aarch64 aarch64 GNU/Linux

Regarding the EVK, I am using an evaluation board from the distributor Forlinx. Their website is: https://www.forlinx.com/product/136.html.

微信截图_20231117224031.jpg

I have previously asked their technical personnel, but they did not give me a precise answer, which is why I am seeking your help.

Best Regard.

 

0 项奖励
回复

3,160 次查看
JorgeCas
NXP TechSupport
NXP TechSupport

Got it, in that case you should check if the manufacturer of board has enabled that feature on their BSP.

On our EVK board the only configuration needed is that I showed before.

Best regards.

0 项奖励
回复

3,116 次查看
22721579
Contributor I

Hello,

I apologize for bothering you again. After consulting with the technical personnel, I replaced the device tree file of the current development board. Does the output of the following information indicate that the setup is successful?

root@OK8MP:~# dmesg | grep pcie
[    2.798222] imx6q-pcie 33800000.pcie_ep: 33800000.pcie_ep supply epdev_on not found, using dummy regulator
[    2.816995] imx6q-pcie 33800000.pcie_ep: EXT REF_CLK is used!.
[    2.832404] imx6q-pcie 33800000.pcie_ep: PCIe PHY PLL clock is locked.
[    2.839005] imx6q-pcie 33800000.pcie_ep: PCIe PLL locked after 0 us.

best regards.

0 项奖励
回复