TX2 dev kit PCIe works with factory flash but not compiled

I tried
./source_sync.sh -k tegra-l4t-r28.2.2
and
./source_sync.sh -k tegra-l4t-r28.2.1

on TX2 and TX2i, but I cannot get my compiled versions to list anything for

lspci

When I freshly install the Jetpack and flash the board, it finds my ethernet card in the 4x slot.

If I compare the working and non-working versions with

dtc -I fs /sys/firmware/devicetree/base >> thisdts

The results look pretty much the same.

            pci@1,0 {
                    reg = <0x800 0x0 0x0 0x0 0x0>;
                    assigned-addresses = <0x82000800 0x0 0x10000000 0x0 0x1000>;
                    device_type = "pci";
                    ranges;
                    status = "okay";
                    #address-cells = <0x3>;
                    #size-cells = <0x2>;
                    nvidia,afi-ctl-offset
                    nvidia,num-lanes = <0x4>;
            };

            pci@2,0 {
                    reg = <0x1000 0x0 0x0 0x0 0x0>;
                    assigned-addresses = <0x82001000 0x0 0x10001000 0x0 0x1000>;
                    device_type = "pci";
                    ranges;
                    status = "disabled";
                    #address-cells = <0x3>;
                    #size-cells = <0x2>;
                    nvidia,afi-ctl-offset = <0x118>;
                    nvidia,num-lanes = <0x0>;
            };

            pci@3,0 {
                    reg = <0x1800 0x0 0x0 0x0 0x0>;
                    assigned-addresses = <0x82001800 0x0 0x10004000 0x0 0x1000>;
                    device_type = "pci";
                    ranges;
                    status = "okay";
                    #address-cells = <0x3>;
                    #size-cells = <0x2>;
                    nvidia,afi-ctl-offset = <0x19c>;
                    nvidia,num-lanes = <0x1>;
            };
    };

Is there some step that applies the p2597 BSP that I am missing in the build process?

I’m using

NVIDIA Tegra Linux Driver Package

Development Guide
28.2 Release

Thanks!!!

Correction

I tried
./source_sync.sh -k tegra-l4t-r28.2.2
and
./source_sync.sh -k tegra-l4t-r28.2.1

I just used ./source_sync.sh and pasted the tags in when it asked for them

Thanks!!

Could you check the kernel name by uname -a

This is what your tegra-l4t-r28.2.1 git tag looks like:

ubuntu@tegra-ubuntu:~$ uname -a
Linux tegra-ubuntu 4.4.38+ #4 SMP PREEMPT Tue Mar 26 13:53:55 MST 2019 aarch64 aarch64 aarch64 GNU/Linux

/etc/nv_tegra_release

R28 (release), REVISION: 2.1, GCID: 11272647, BOARD: t186ref, EABI: aarch64, DATE: Thu May 17 07:29:06 UTC 2018

Makefile:
VERSION = 4
PATCHLEVEL = 4
SUBLEVEL = 38
EXTRAVERSION =
NAME = Blurry Fish Butt

jetson-tx2.conf

p2771-0000-devkit.conf: configuration for T186-A02 te770d-UCM2 Silicon

BPFDTB_FILE=tegra186-a02-bpmp-quill-p3310-1000-a00-00-te770d-ucm2.dtb;

source “${LDK_DIR}/p2771-0000.conf.common”;

jetson-tx2i.conf

p2771-3489-ucm1.conf: configuration for T186-A02 ta795sa Silicon ucm1 profile

BPFDTB_FILE=tegra186-a02-bpmp-storm-p3489-a00-00-ta795sa-ucm1.dtb;
source “${LDK_DIR}/p2771-0000.conf.common”;
SYSBOOTFILE=p2771-0000/extlinux.conf;
EMMC_BCT=P3489_A00_8GB_Samsung_8GB_lpddr4_204Mhz_P134_A02_ECC_en_l4t.cfg
DTB_FILE=tegra186-quill-p3489-1000-a00-00-ucm1.dtb;
TBCDTB_FILE=tegra186-quill-p3489-1000-a00-00-ucm1.dtb;

PROD_CONFIG=“tegra186-mb1-bct-prod-storm-p3489-1000-a00.cfg”;
PINMUX_CONFIG=“tegra186-mb1-bct-pinmux-quill-p3489-1000-a00.cfg”;
PMIC_CONFIG=“tegra186-mb1-bct-pmic-quill-p3489-1000-a00.cfg”;
PMC_CONFIG=“tegra186-mb1-bct-pad-quill-p3489-1000-a00.cfg”;
BOOTROM_CONFIG=“tegra186-mb1-bct-bootrom-quill-p3489-1000-a00.cfg”;

Are you cross-compiling the kernel on an x86 PC and then reflashing with flash.sh, or compiling on Jetson itself?

After compilation, which files are you copying where to install the new kernel; did you also install the matching DTS and module files?

Which compiler are you using?

After you boot Jetson with the new kernel, what PCIe-related messages are seen in the kernel log? Run “dmesg” to see the full log.

I’m using the instructions that came with 28.2.2 →

NVIDIA_Tegra_Linux_Driver_Package/nvl4t_docs/index.html#page/Tegra%2520Linux%2520Driver%2520Package%2520Development%2520Guide%2Fkernel_custom.html

Kernel Customization instructions from the
NVIDIA Tegra Linux Driver Package

Development Guide
28.2 Release

make ARCH=arm64 O=$TEGRA_KERNEL_OUT -j8

sudo cp /home/alphi/TX2/64_TX2/Linux_for_Tegra/kernel-out/kernel/arch/arm64/boot/Image /home/alphi/TX2/64_TX2/Linux_for_Tegra/kernel/Image

sudo cp -r /home/alphi/TX2/64_TX2/Linux_for_Tegra/kernel-out/kernel/arch/arm64/boot/dts/* /home/alphi/TX2/64_TX2/Linux_for_Tegra/kernel/dtb/

sudo ./apply_binaries.sh

sudo ./flash.sh jetson-tx2i mmcblk0p1
or
sudo ./flash.sh jetson-tx2 mmcblk0p1

I used the precompiled toolchain from the download directory.

ubuntu@tegra-ubuntu:~$ dmesg|grep pci
[ 0.143022] node /plugin-manager/fragment-500-pcie-config match with board >=3310-1000-500
[ 0.143751] node /plugin-manager/fragment-500-e3325-pcie match with board >=3310-1000-500
[ 0.267159] iommu: Adding device 10003000.pcie-controller to group 50
ubuntu@tegra-ubuntu:~$ lspci
ubuntu@tegra-ubuntu:~$

The dtb appears to update. I moved the HDMI and fixed the USB for my carrier. When I couldn’t get the PCIe to work, I went back to the dev kit and noticed that it never worked there unless I used the factory image to flash.

Setting the LOCALVERSION by below command while you build the kernel. Please do a clean build.

export LOCALVERSION=-tegra

Bingo!

Thanks!!