We are trying to establish PCIe communication between an ARM-based board and a Jetson Orin NX, which is mounted on a carrier board via a slot.
We modified ODMDATA according to the official documentation as follows:
ODMDATA="gbe-uphy-config-8,hsstp-lane-map-3,hsio-uphy-config-41"
Then, we applied the following commands:
# For Orin NX/Nano, configure PCIE_EP_ADDR to correspond with the C4 controller:
PCIE_EP_ADDR=14160000
# modprobe pci-epf-dma-test
# cd /sys/kernel/config/pci_ep/
# mkdir functions/tegra_pcie_dma_epf/func1
# echo 0x10de > functions/tegra_pcie_dma_epf/func1/vendorid
# echo 0x229a > functions/tegra_pcie_dma_epf/func1/deviceid
# echo 16 > functions/tegra_pcie_dma_epf/func1/msi_interrupts
# ln -s functions/tegra_pcie_dma_epf/func1 controllers/${PCIE_EP_ADDR}.pcie-ep/
# echo 1 > controllers/${PCIE_EP_ADDR}.pcie-ep/start
After applying these commands, we booted the root port system.
However, when we ran lspci on both the root port and Jetson Orin NX, neither detected a PCIe connection.
When running dmesg | grep pcie, pcie-ep
is correctly displayed.
We have already verified that a 100MHz reference clock is being properly received from the ARM board to the Jetson Orin NX.
However, according to the datasheet, it seems that Orin NX does not receive the reference clock from an external source.
Due to this, we also tried using the internal clock instead, but it still failed to establish a PCIe connection.
Questions:
- Are there any hardware-related issues that I might have overlooked?
- Should the reference clock come from an external source, or should the internal clock be used instead?
- Does Jetson Orin NX only support endpoint connections between Jetson devices, or can it work with other systems as well?