Flashing new .dtb file onto Jetson TX1

I have R28.2 (from Jetpack 3.2) installed on my Jetson TX1 and I am following this to enable SPI1 on my system. With the R28.2, updating the .dtb file requires flashing it instead of just editing extlinux.conf file. However, when I try a command similar to:

sudo ./flash.sh -r -k DTB jetson-tx1 mmcblk0p1

or

sudo ./flash.sh DTB jetson-tx1 mmcblk0p1

I obtain the following error:

Error: probing the target board failed.
       Make sure the target board is connected through 
       micro-B USB port and is in recovery mode.

The above problem does not appear when I flash stock .dtb file. Hence, I don’t think it is related to the micro USB cable or other hardware. My modified .dtb file is located inside Linux_for_Tegra/kernel/dtb and I have deleted the existing .dtb file. I also rename the modified .dtb file to the original .dtb file that was used. Also, it seems that the flashing commands I am using correspond to versions upto R28.1 not R28.2. What command should I use?

Please note:

  1. I am using the micro USB cable that came with the kit.
  2. The host is not a VM.
  3. The host runs Ubuntu 16.04.
  4. When lsusb command is run prior to flashing, it correctly displays:
Bus 001 Device 040: ID 0955:7721 NVidia Corp.
  1. The modified .dtb file that I generated is called:
tegra210-jetson-tx1-p2597-2180-a01-devkit-gpio.dtb

The different commands that I have tried include:

sudo ./flash.sh -d kernel/dtb/tegra210-jetson-tx1-p2597-2180-a01-devkit-gpio.dtb jetson-tx1 mmcblk0p1
sudo ./flash.sh -d kernel/dtb/tegra210-jetson-tx1-p2597-2180-a01-devkit-gpio.dtb DTB jetson-tx1 mmcblk0p1
sudo ./flash.sh -d tegra210-jetson-tx1-p2597-2180-a01-devkit-gpio.dtb DTB jetson-tx1 mmcblk0p1

I have also tried similar command by renaming the file to:

tegra210-jetson-tx1-p2597-2180-a01-devkit.dtb

and then replacing the original file with the same name.

This works for me on R28.2 TX1, but I have not modified any of the dtb files (the “Linux_for_Tegra/” sub-directory was populated by a previous flash and all dtb files in place are the standard ones):

sudo ./flash.sh -r -k DTB jetson-tx1 mmcblk0p1

I am able to flash the standard ones. My objective is to enable SPI1 on the Jetson TX1 development board. So I made the following changes:

  1. Added the following inside gpio@6000d000 {}; block of dts:
gpio_default: default {
			gpio-to-sfio = <16 17 18 19 20>;
		};
  1. Also added the following:
spi@7000d400 {
        status = "okay";

        spi0_0 {
            #address-cells = <0x1>;
            #size-cells = <0x0>;
            compatible = "spidev";
            reg = <0x0>;
            spi-max-frequency = <0x17d7840>;
            nvidia,enable-hw-based-cs;
            nvidia,cs-setup-clk-count = <0x1e>;
            nvidia,cs-hold-clk-count = <0x1e>;
            nvidia,rx-clk-tap-delay = <0x1f>;
            nvidia,tx-clk-tap-delay = <0x0>;
        };
    };

I am able to compile a .dtb after making the changes. But I am not able to flash it. But it seems that these edits are meant for R24.x not for R28.2. I have found this link which I am yet to try.

So I tried your command after copying modified .dtb file to to the folders:

/64_TX1/Linux_for_Tegra/kernel/dtb

and

/64_TX1/Linux_for_Tegra/rootfs/boot

, and then renaming the file as:

tegra210-jetson-tx1-p2597-2180-a01-devkit.dtb

This time I was able to flash the .dtb file. However, I did not see the SPI bus enabled. The

sudo cat /sys/kernel/debug/tegra_gpio

command given in this link did not produce the expected result (also shown in the same link). I am yet to try the new modifications I mentioned towards the end of previous reply.

I made the changes from this link and tried your command. It showed that the flashing was successful but when I run the command:

sudo cat /sys/kernel/debug/tegra_gpio

it still does not provide required results.

Also, I used this command:

dtc -I fs -O dts -o extracted.dts /proc/device-tree

posted by you, to extract the .dts.

FYI, in the R28.x series firmware and device tree files in “/rootfs/boot/” will not matter…this is leftover baggage from a previous release and is ignored (or if not ignored it won’t do as expected).

You are correct that the 3.x kernel series device tree is not compatible with a 4.x series kernel device tree. This would be the root of the problem.

It seems the real problem is what device tree change is required for your SPI controller, but I do not know the answer to this. The pinmux spreadsheet is probably the way to go, but someone who has enabled SPI may want to comment on specific changes.

I switched from pinmux spreadsheet method to this one because the Nvidia documentation for this method doesn’t seem upto date. I had to make too many assumptions with several steps. But I didn’t want to break the board.

I switched to R28.1 and ran the following command:

sudo ./flash.sh -r -d tegra210-jetson-tx1-p2597-2180-a01-devkit-gpio-new.dtb jetson-tx1 mmcblk0p1

Now

sudo cat /sys/kernel/debug/tegra_gpio

gives the right results. Thank you for the help.