Device-tree and bring-up for custom Jetson Nano carrier

Hi, I am in the bring-up process for a custom carrier board for the Jetson Nano (P3448) and have several questions about device-tree customisation and the bring-up process in general.

Overview of what I am trying to do:

To provide some background, the carrier board is fairly simple and uses only a few of the features from the development kit carrier board.

The following are the features I would like to have configured for the custom carrier board:

  • General Power/Sys Signals - POWER_EN, SHUTDOWN_REQ, SYS_RESET, FORCE_RECOVERY etc.
  • GPIO - Fan PWM and tach, Power LED
  • UART - x3 UARTs (one of which is for the debug console)
  • I2C - x2 I2C for communicating with sensors on the carrier
  • USB - x3 USB2.0 ports (no USB3.0)
  • LAN - Fast Ethernet 100Mbps (Gigabit Ethernet not required, so only really need MDI0 & MDI1 pins from the module but I have included the option for GigE anyways)

I have no need for the following features to be configured :

  • SPI
  • Camera (CSI, Control, Clock)
  • PCIe - besides the Ethernet PHY on the Jetson Module
  • Audio (I2S, Clock)
  • Display (DP, HDMI, DSI)
  • Wi-Fi/BT/Modem
  • SDIO - besides the SD card used on the Jetson Module

The table below shows the pins that are used from the Jetson Nano Module (excluding power pins) using the nomenclature from the Jetson Nano Pin and Function Names Guide.

What I have done so far:

I have verified that a Jetson Module using the default provided image boots up on my carrier board, I can view debug messages and log in through the debug UART port on the device. That being said, the kernel is understandably throwing up warnings as the device-tree is unmodified and the Jetson can’t find things like the board’s ID EEPROM etc. This leads to what I am currently working on which is building a device-tree for the carrier board. This development is mostly taking place on the dev kit carrier board.

I am new to bringing up custom Linux-based embedded devices but I have been through the following documentation thoroughly and have a reasonable idea of what I should be doing (although there are some areas I am still unsure of):

  • NVIDIA Jetson Linux Developer Guide (for L4T 32.7.1)
  • Jetson Nano Product Design Guide
  • Jetson Nano Module Datasheet

I have done the following so far:

  1. I have downloaded the L4T Driver Package (BSP) and the Sample Root Filesystem for the latest L4T release for the Jetson Nano (L4T 32.7.2). I then extracted the BSP followed by extracting the Sample Root Filesystem into the Linux_for_Tegra/rootfs folder. Using the source_sync.sh script, I downloaded the sources required to modify the kernel.

  2. I then used the Jetson Nano Module Pinmux spreadsheet to generate the gpio-default and pinmux device tree source include files. Since the board name for this board is horizon, these files are named:

    • tegra210-horizon-gpio-default.dtsi
    • tegra210-horizon-pinmux.dtsi
  3. In order to update the pinmux in the device-tree for CBoot, I copied tegra210-horizon-pinmux.dtsi to
    <src>/hardware/‌nvidia/platform/‌t210/porg/‌kernel-dts/porg-platforms/tegra210-porg-pinmux-p3448-0000-b00.dtsi.
    I see in the bring-up guide, they name the file in the destination is: tegra210-porg-pinmux-p3448-0001-b00.dtsi; however, I assume this is an error in the documentation as this isn’t referenced in any Makefile or device-tree include directives, nor can I see it being built. Please correct me if I am doing the wrong thing here.

  4. I see that porting U-Boot is part of the bring-up guide although I was wondering if I need U-Boot at all and should just disable it by setting USE_UBOOT to 0 via the Linux_for_Tegra/p3448-0000.conf.common configuration file? From what I can see on the forum (boot linux using cboot without uboot), removing UBoot will mean that CBoot would load the kernel and kernel DTB from separate “kernel” and “kernel-dtb” partitions as opposed to UBoot loading from /boot in the rootfs. To me, this doesn’t seem like much of an issue but I feel like I am missing something here - Please let me know if removing UBoot is recommended in this instance and what the downsides/caveats are of doing so.

    I have gone through the process of porting U-Boot; however, when I try to flash the bootloader (by setting the environment variable BOOTLOADER=bootloader/t210ref/horizon/u-boot-dtb.bin) the flashing process fails. I have also tried pointing BOOTLOADER to use the other generated files from the U-Boot build such as the u-boot.bin and u-boot files. All of these fail when trying to flash and so at this point, I have left out the U-Boot step.

  5. In order to port the Linux Kernel, I copied the two generated files from the pinmux spreadsheet to the following locations:

    • <src>/hardware/nvidia/platform/t210/porg/kernel-dts/porg-platforms/tegra210-porg-gpio-p3448-0000-b00.dtsi
    • <src>/hardware/nvidia/platform/t210/porg/kernel-dts/porg-platforms/tegra210-porg-pinmux-p3448-0000-b00.dtsi

    I then modified created a DTS file for the board which have I adapted from the tegra210-p3448-0000-p3449-0000-b00.dts file:

    • hardware/nvidia/platform/t210/porg/kernel-dts/horizon.dts

    I added horizon.dts to the Makefile to include it in the build:

    • hardware/nvidia/platform/t210/porg/kernel-dts/Makefile

    Then, I compile the DTBs and copy them into Linux_for_Tegra/kernel/dtb/.

    I have attached my horizon.dts file below:

/*
 * horizon.dts
 * adapted from <src>/hardware/nvidia/platform/t210/porg/kernel-dts/tegra210-p3448-0000-p3449-0000-b00.dts
 *
 */

#include "tegra210-porg-p3448-common.dtsi"
#include "porg-platforms/tegra210-porg-pinmux-p3448-0000-b00.dtsi"
#include "porg-platforms/tegra210-porg-gpio-p3448-0000-b00.dtsi"
#include "porg-platforms/tegra210-porg-p3448-emc-a00.dtsi"


/* Disable nodes for dev kit headers */
&hdr40_spi1 {
	status="disabled";
};
&hdr40_spi2 {
	status="disabled";
};

// /* Disable display/graphics */
&host1x {
	dc@54200000 {
		status="disabled";
	};
	dc@54240000 {
		status="disabled";
	};
	sor {
		status="disabled";
	};
	sor1 {
		status="disabled";
	};
	dpaux {
		status="disabled";
	};
	dpaux1 {
		status="disabled";
	};
};

/* Disable audio */
&tegra_sound {
	status = "disabled";
};


/ {
	model = "Horizon";
	compatible = "nvidia,jetson-nano", "nvidia,tegra210";
	nvidia,dtsfilename = __FILE__;


	/* Not quite sure what flash is attached to this SPI bus but copying the reference DTS here */
	spi@70410000 {
		status = "okay";
		spiflash@0 {
			controller-data {
				nvidia,x1-len-limit = <16>;
				nvidia,x4-bus-speed = <104000000>;
				nvidia,x4-dymmy-cycle = <8>;
			};
		};
	};



	/* Disable unused PCIe */
	pcie@1003000 {
		pci@1,0 {
			status = "disabled";
		};
	};


	xusb_padctl@7009f000 {
		/* Disable M.2 PCIe lanes (pcie-1 to pcie-4) and USB3 PCIe lanes (pcie-5 and pcie-6). Leave Ethernet (pcie-0)*/
		pads {
			pcie {
				lanes {
					pcie-1 {
						status = "disabled";
					};
					pcie-2 {
						status = "disabled";
					};
					pcie-3 {
						status = "disabled";
					};
					pcie-4 {
						status = "disabled";
					};
					pcie-5 {
						status = "disabled";
					};
					pcie-6 {
						status = "disabled";
					};
				};
			};
		};
		
		/* set usb2-0 to to be a host mode USB2.0 port, disable all USB3.0 ports */
		ports {
			usb2-0 {
				mode = "host";
				/delete-property/ nvidia,usb3-port-fake;
			};
			usb3-0 {
				status="disabled";
			};
		};
	};

	/* Remove the USB3.0 PHY from the Host Controller */
	xusb@70090000 {
		phys = <&{/xusb_padctl@7009f000/pads/usb2/lanes/usb2-0}>,
				<&{/xusb_padctl@7009f000/pads/usb2/lanes/usb2-1}>,
				<&{/xusb_padctl@7009f000/pads/usb2/lanes/usb2-2}>;
		phy-names = "usb2-0", "usb2-1", "usb2-2";
	};

	/* Disable the USB Device Controller as device only ever acts as Host */
	xudc@700d0000 {
		status = "disabled";
	};


	/* Note UART-A = UART1: Debug, UART-B = UART2, UART-C = UART3 */

	/* Configure UART-C as per UARTB */
	serial@70006200 {
		dma-names = "rx\0tx";
		nvidia,adjust-baud-rates = <115200 115200 100>;
	};

	i2c@7000c000 {
		clock-frequency = <100000>;
	};

};
  1. For flashing, I have created a configuration file, Linux_for_Tegra/horizon.conf which is a copy of the Linux_for_Tegra/jetson-nano-qspi-sd.conf file with the following line added to the bottom of the file in order to select DTB:

    • DTBFILE=kernel/dtb/horizon.dtb;

    I then flash the board using the command: sudo ./flash.sh horizon mmcblk0p1
    This builds fine and the output is shown below:

###############################################################################
# L4T BSP Information:
# R32 , REVISION: 7.2
###############################################################################
# Target Board Information:
# Name: horizon, Board Family: t210ref, SoC: Tegra 210, 
# OpMode: production, Boot Authentication: , 
# Disk encryption: disabled ,
###############################################################################
./tegraflash.py --chip 0x21 --applet "/home/liam/Desktop/horizon-bringup/Linux_for_Tegra/bootloader/nvtboot_recovery.bin" --skipuid --cmd "dump eeprom boardinfo cvm.bin" 
Welcome to Tegra Flash
version 1.0.0
Type ? or help for help and q or quit to exit
Use ! to execute system commands
 
[   0.0023 ] Generating RCM messages
[   0.0046 ] tegrarcm --listrcm rcm_list.xml --chip 0x21 0 --download rcm /home/liam/Desktop/horizon-bringup/Linux_for_Tegra/bootloader/nvtboot_recovery.bin 0 0
[   0.0055 ] RCM 0 is saved as rcm_0.rcm
[   0.0060 ] RCM 1 is saved as rcm_1.rcm
[   0.0060 ] List of rcm files are saved in rcm_list.xml
[   0.0060 ] 
[   0.0060 ] Signing RCM messages
[   0.0080 ] tegrasign --key None --list rcm_list.xml --pubkeyhash pub_key.key
[   0.0088 ] Assuming zero filled SBK key
[   0.0124 ] 
[   0.0125 ] Copying signature to RCM mesages
[   0.0145 ] tegrarcm --chip 0x21 0 --updatesig rcm_list_signed.xml
[   0.0157 ] 
[   0.0157 ] Boot Rom communication
[   0.0177 ] tegrarcm --chip 0x21 0 --rcm rcm_list_signed.xml --skipuid
[   0.0186 ] RCM version 0X210001
[   8.9904 ] Boot Rom communication completed
[   9.9980 ] 
[   9.9981 ] dump EEPROM info
[  10.0010 ] tegrarcm --oem platformdetails eeprom /home/liam/Desktop/horizon-bringup/Linux_for_Tegra/bootloader/cvm.bin
[  10.0022 ] Applet version 00.01.0000
[  21.6915 ] Saved platform info in /home/liam/Desktop/horizon-bringup/Linux_for_Tegra/bootloader/cvm.bin
[  21.7679 ] 
[  21.7709 ] tegrarcm --reboot recovery
[  21.7720 ] Applet version 00.01.0000
[  27.7280 ] 
Board ID(3448) version(400) 
copying bctfile(/home/liam/Desktop/horizon-bringup/Linux_for_Tegra/bootloader/t210ref/BCT/P3448_A00_lpddr4_204Mhz_P987.cfg)... done.
copying bootloader(/home/liam/Desktop/horizon-bringup/Linux_for_Tegra/bootloader/t210ref/cboot.bin)... done.
copying initrd(/home/liam/Desktop/horizon-bringup/Linux_for_Tegra/bootloader/l4t_initrd.img)... done.
Making Boot image... done.
Existing sosfile(/home/liam/Desktop/horizon-bringup/Linux_for_Tegra/bootloader/nvtboot_recovery.bin) reused.
copying tegraboot(/home/liam/Desktop/horizon-bringup/Linux_for_Tegra/bootloader/t210ref/nvtboot.bin)... done.
copying cpu_bootloader(/home/liam/Desktop/horizon-bringup/Linux_for_Tegra/bootloader/t210ref/cboot.bin)... done.
copying bpffile(/home/liam/Desktop/horizon-bringup/Linux_for_Tegra/bootloader/t210ref/sc7entry-firmware.bin)... done.
copying wb0boot(/home/liam/Desktop/horizon-bringup/Linux_for_Tegra/bootloader/t210ref/warmboot.bin)... done.
Existing tosfile(/home/liam/Desktop/horizon-bringup/Linux_for_Tegra/bootloader/tos-mon-only.img) reused.
Existing eksfile(/home/liam/Desktop/horizon-bringup/Linux_for_Tegra/bootloader/eks.img) reused.
copying dtbfile(/home/liam/Desktop/horizon-bringup/Linux_for_Tegra/kernel/dtb/horizon.dtb)... done.
Copying nv_boot_control.conf to rootfs
	populating kernel to rootfs... done.
	populating initrd to rootfs... done.
	populating kernel_horizon.dtb to rootfs... done.
Making system.img... 
	populating rootfs from /home/liam/Desktop/horizon-bringup/Linux_for_Tegra/rootfs ... 	populating /boot/extlinux/extlinux.conf ... done.
	Sync'ing system.img ... done.
	Converting RAW image to Sparse image... done.
system.img built successfully. 
Existing tbcfile(/home/liam/Desktop/horizon-bringup/Linux_for_Tegra/bootloader/nvtboot_cpu.bin) reused.
copying tbcdtbfile(/home/liam/Desktop/horizon-bringup/Linux_for_Tegra/kernel/dtb/tegra210-p3448-0000-p3449-0000-b00.dtb)... done.
copying cfgfile(/home/liam/Desktop/horizon-bringup/Linux_for_Tegra/bootloader/t210ref/cfg/flash_l4t_t210_max-spi_sd_p3448.xml) to flash.xml... done.
copying flasher(/home/liam/Desktop/horizon-bringup/Linux_for_Tegra/bootloader/t210ref/cboot.bin)... done.
Existing flashapp(/home/liam/Desktop/horizon-bringup/Linux_for_Tegra/bootloader/tegraflash.py) reused.
./tegraflash.py --bl cboot.bin --bct  P3448_A00_lpddr4_204Mhz_P987.cfg --odmdata 0xa4000 --bldtb kernel_horizon.dtb --applet nvtboot_recovery.bin  --cmd "flash; reboot"  --cfg flash.xml --chip 0x21    --bins "EBT cboot.bin; DTB tegra210-p3448-0000-p3449-0000-b00.dtb" 
saving flash command in /home/liam/Desktop/horizon-bringup/Linux_for_Tegra/bootloader/flashcmd.txt
saving Windows flash command to /home/liam/Desktop/horizon-bringup/Linux_for_Tegra/bootloader/flash_win.bat
assign_value: crc-flash.xml.bin 1 65520 1
printf '\x1' | dd of=crc-flash.xml.bin bs=1 seek=65520 count=1 conv=notrunc
1+0 records in
1+0 records out
1 byte copied, 2.945e-05 s, 34.0 kB/s
assign_value: crc-flash.xml.bin 0 65521 1
printf '\x0' | dd of=crc-flash.xml.bin bs=1 seek=65521 count=1 conv=notrunc
1+0 records in
1+0 records out
1 byte copied, 2.4085e-05 s, 41.5 kB/s
assign_string: crc-flash.xml.bin PTHD 65528 4
echo PTHD | dd of=crc-flash.xml.bin bs=1 seek=65528 count=4 conv=notrunc
4+0 records in
4+0 records out
4 bytes copied, 2.9019e-05 s, 138 kB/s
*** Flashing target device started. ***
Welcome to Tegra Flash
version 1.0.0
Type ? or help for help and q or quit to exit
Use ! to execute system commands
 
[   0.0019 ] tegrasign --getmode mode.txt --key None
[   0.0026 ] Assuming zero filled SBK key
[   0.0027 ] 
[   0.0028 ] Generating RCM messages
[   0.0045 ] tegrarcm --listrcm rcm_list.xml --chip 0x21 0 --download rcm nvtboot_recovery.bin 0 0
[   0.0051 ] RCM 0 is saved as rcm_0.rcm
[   0.0055 ] RCM 1 is saved as rcm_1.rcm
[   0.0055 ] List of rcm files are saved in rcm_list.xml
[   0.0055 ] 
[   0.0055 ] Signing RCM messages
[   0.0072 ] tegrasign --key None --list rcm_list.xml --pubkeyhash pub_key.key
[   0.0077 ] Assuming zero filled SBK key
[   0.0112 ] 
[   0.0112 ] Copying signature to RCM mesages
[   0.0130 ] tegrarcm --chip 0x21 0 --updatesig rcm_list_signed.xml
[   0.0139 ] 
[   0.0139 ] Parsing partition layout
[   0.0156 ] tegraparser --pt flash.xml.tmp
[   0.0164 ] 
[   0.0165 ] Using default ramcode: 0
[   0.0165 ] Disable BPMP dtb trim, using default dtb
[   0.0165 ] 
[   0.0165 ] Creating list of images to be signed
[   0.0183 ] tegrahost --chip 0x21 0 --partitionlayout flash.xml.bin --list images_list.xml
[   0.0213 ] 
[   0.0213 ] Generating signatures
[   0.0230 ] tegrasign --key None --list images_list.xml --pubkeyhash pub_key.key
[   0.0236 ] Assuming zero filled SBK key
[   0.0613 ] 
[   0.0614 ] Generating br-bct
[   0.0632 ] tegrabct --bct P3448_A00_lpddr4_204Mhz_P987.cfg --chip 0x21 0
[   0.0670 ] 
[   0.0671 ] Updating boot device parameters
[   0.0688 ] tegrabct --bct P3448_A00_lpddr4_204Mhz_P987.bct --chip 0x21 0 --updatedevparam flash.xml.bin
[   0.0694 ] Warning: No sdram params
[   0.0695 ] 
[   0.0695 ] Updating bl info
[   0.0713 ] tegrabct --bct P3448_A00_lpddr4_204Mhz_P987.bct --chip 0x21 0 --updateblinfo flash.xml.bin --updatesig images_list_signed.xml
[   0.0722 ] 
[   0.0722 ] Updating secondary storage information into bct
[   0.0739 ] tegraparser --pt flash.xml.bin --chip 0x21 0 --updatecustinfo P3448_A00_lpddr4_204Mhz_P987.bct
[   0.0747 ] 
[   0.0747 ] Updating Odmdata
[   0.0764 ] tegrabct --bct P3448_A00_lpddr4_204Mhz_P987.bct --chip 0x21 0 --updatefields Odmdata =0xa4000
[   0.0771 ] Warning: No sdram params
[   0.0772 ] 
[   0.0772 ] Get Signed section of bct
[   0.0789 ] tegrabct --bct P3448_A00_lpddr4_204Mhz_P987.bct --chip 0x21 0 --listbct bct_list.xml
[   0.0796 ] 
[   0.0796 ] Signing BCT
[   0.0830 ] tegrasign --key None --list bct_list.xml --pubkeyhash pub_key.key
[   0.0836 ] Assuming zero filled SBK key
[   0.0839 ] 
[   0.0839 ] Updating BCT with signature
[   0.0857 ] tegrabct --bct P3448_A00_lpddr4_204Mhz_P987.bct --chip 0x21 0 --updatesig bct_list_signed.xml
[   0.0864 ] 
[   0.0864 ] Copying signatures
[   0.0882 ] tegrahost --chip 0x21 0 --partitionlayout flash.xml.bin --updatesig images_list_signed.xml
[   0.0911 ] 
[   0.0911 ] Updating BFS information on BCT
[   0.0929 ] tegrabct --bct P3448_A00_lpddr4_204Mhz_P987.bct --chip 0x21 0 --updatebfsinfo flash.xml.bin
[   0.0936 ] 
[   0.0936 ] Boot Rom communication
[   0.0954 ] tegrarcm --chip 0x21 0 --rcm rcm_list_signed.xml
[   0.0960 ] BR_CID: 0x3210100164456803080000000d070380
[   0.6372 ] RCM version 0X210001
[   3.6532 ] Boot Rom communication completed
[   4.6602 ] 
[   4.6602 ] Sending BCTs
[   4.6622 ] tegrarcm --download bct P3448_A00_lpddr4_204Mhz_P987.bct
[   4.6629 ] Applet version 00.01.0000
[   9.6751 ] Sending bct
[   9.6752 ] [................................................] 100%
[   9.8984 ] 
[   9.9011 ] tegrahost --chip 0x21 --align cboot.bin
[   9.9024 ] 
[   9.9049 ] tegrahost --magicid EBT --appendsigheader cboot.bin cboot.bin_blheader
[   9.9075 ] 
[   9.9098 ] tegrasign --key None --list cboot.bin_list.xml
[   9.9106 ] Assuming zero filled SBK key
[   9.9198 ] 
[   9.9220 ] tegrahost --updatesigheader cboot.bin_blheader.encrypt cboot.bin_blheader.hash zerosbk
[   9.9238 ] 
[   9.9265 ] tegrahost --chip 0x21 --align tegra210-p3448-0000-p3449-0000-b00.dtb
[   9.9274 ] 
[   9.9294 ] tegrahost --magicid DTB --appendsigheader tegra210-p3448-0000-p3449-0000-b00.dtb tegra210-p3448-0000-p3449-0000-b00.dtb_blheader
[   9.9312 ] 
[   9.9332 ] tegrasign --key None --list tegra210-p3448-0000-p3449-0000-b00.dtb_list.xml
[   9.9341 ] Assuming zero filled SBK key
[   9.9386 ] 
[   9.9407 ] tegrahost --updatesigheader tegra210-p3448-0000-p3449-0000-b00.dtb_blheader.encrypt tegra210-p3448-0000-p3449-0000-b00.dtb_blheader.hash zerosbk
[   9.9420 ] 
[   9.9423 ] Sending bootloader and pre-requisite binaries
[   9.9443 ] tegrarcm --download ebt cboot.bin.encrypt 0 0 --download rp1 tegra210-p3448-0000-p3449-0000-b00.dtb.encrypt 0
[   9.9451 ] Applet version 00.01.0000
[  18.7267 ] Sending ebt
[  18.7268 ] [................................................] 100%
[  18.8296 ] Sending rp1
[  18.8343 ] [................................................] 100%
[  18.8856 ] 
[  18.8879 ] tegrarcm --boot recovery
[  18.8887 ] Applet version 00.01.0000
[  24.7519 ] 
[  24.7520 ] Retrieving storage infomation
[  24.7546 ] tegrarcm --oem platformdetails storage storage_info.bin
[  24.7557 ] Applet is not running on device. Continue with Bootloader
[  30.8145 ] 
[  30.8170 ] tegradevflash --oem platformdetails storage storage_info.bin
[  30.8177 ] Cboot version 00.01.0000
[  33.8227 ] Saved platform info in storage_info.bin
[  33.8237 ] 
[  33.8237 ] Flashing the device
[  33.8264 ] tegradevflash --pt flash.xml.bin --storageinfo storage_info.bin --create
[  33.8274 ] Cboot version 00.01.0000
[  39.8948 ] Writing partition GPT with gpt.bin
[  39.8951 ] [................................................] 100%
[  39.9009 ] Writing partition PT with crc-flash.xml.bin
[  56.5340 ] [................................................] 100%
[  56.5394 ] Writing partition NVC with nvtboot.bin.encrypt
[  60.4482 ] [................................................] 100%
[  60.4598 ] Writing partition NVC_R with nvtboot.bin.encrypt
[  70.4735 ] [................................................] 100%
[  70.4886 ] Writing partition TBC with nvtboot_cpu.bin.encrypt
[  80.5115 ] [................................................] 100%
[  80.5231 ] Writing partition RP1 with kernel_horizon.dtb.encrypt
[  84.6896 ] [................................................] 100%
[  84.7057 ] Writing partition EBT with cboot.bin.encrypt
[  98.3887 ] [................................................] 100%
[  98.4126 ] Writing partition WB0 with warmboot.bin.encrypt
[ 127.4685 ] [................................................] 100%
[ 127.4782 ] Writing partition BPF with sc7entry-firmware.bin.encrypt
[ 127.7405 ] [................................................] 100%
[ 127.7504 ] Writing partition TOS with tos-mon-only.img.encrypt
[ 128.0123 ] [................................................] 100%
[ 128.0237 ] Writing partition DTB with kernel_horizon.dtb.encrypt
[ 131.4583 ] [................................................] 100%
[ 131.4745 ] Writing partition LNX with boot.img.encrypt
[ 145.1577 ] [................................................] 100%
[ 145.1870 ] Warning: EKS partition magic header mismatch!
[ 184.9787 ] Writing partition EKS with eks.img
[ 184.9788 ] [................................................] 100%
[ 184.9882 ] Writing partition BMP with bmp.blob
[ 185.2503 ] [................................................] 100%
[ 185.2648 ] Writing partition RP4 with rp4.blob
[ 194.3115 ] [................................................] 100%
[ 194.3254 ] Writing partition VER_b with qspi_bootblob_ver.txt
[ 202.1518 ] [................................................] 100%
[ 202.1617 ] Writing partition VER with qspi_bootblob_ver.txt
[ 202.4244 ] [................................................] 100%
[ 202.4343 ] Writing partition APP with system.img
[ 202.6961 ] [................................................] 100%
[ 732.2939 ] 
[ 732.2961 ] tegradevflash --write BCT P3448_A00_lpddr4_204Mhz_P987.bct
[ 732.2968 ] Cboot version 00.01.0000
[ 735.8783 ] Writing partition BCT with P3448_A00_lpddr4_204Mhz_P987.bct
[ 735.8785 ] [................................................] 100%
[ 742.5339 ] 
[ 742.5339 ] Flashing completed

[ 742.5339 ] Coldbooting the device
[ 742.5360 ] tegradevflash --reboot coldboot
[ 742.5367 ] Cboot version 00.01.0000
[ 744.9108 ] 
*** The target t210ref has been flashed successfully. ***
Reset the board to boot from internal eMMC.

Device-tree questions:

My current method for building out my modified horizon.dts file involves sifting through the .dtsi and .dts files as well as examining the final tegra210-p3448-0000-p3449-0000-b00.dtb and my horizon.dtb (by converting them back into .dts files).

To me, the above method of figuring out what modifications to make in the .dts file seems very tedious and inefficient. As an example, I disabled the host1x node as I assumed this could be disabled since I was not using any display/graphics on my custom carrier - when I did this though, I couldn’t boot the module successfully as I got stuck in a boot loop with the kernel panicking, locking up and then rebooting before any login.

I realise there is some documentation under the <src>/kernel/kernel-4.9/Documentation/devicetree/ directory; however, there are many items that I find are missing.

On this note, is there any documentation on what nodes are required for the DTB such that one could work off a “clean slate” adding only the features necessary? I also feel that working backwards from a fully implemented DTB means I end up with a bloated DTB as I am probably not disabling/deleting as many nodes as I could. Alternatively, is there a base/“clean slate” .dts file for the Jetson SoM?

Issues:

Currently, when flashing the device, whether just flashing DTBs or doing a full flash with kernel, rootfs etc. the module is not working as intended. I have tested this on two Jetson Nano Modules (P3448) when plugged into a dev kit carrier board (P3449) both yielding different results for some reason. Perhaps it has to do with not porting U-Boot although I have read in one or two places on the forum that modifying U-Boot is not required… So I don’t really know what to make of that.

On the first module, the module does not boot fully and it seems like there are many errors encountered during the boot. I have provided a log of boot from the debug console below:

[0000.125] [L4T TegraBoot] (version 00.00.2018.01-l4t-8728f3cb)
[0000.130] Processing in cold boot mode Bootloader 2
[0000.135] A02 Bootrom Patch rev = 1023
[0000.138] Power-up reason: pmc por
[0000.141] No Battery Present
[0000.144] pmic max77620 reset reason
[0000.147] pmic max77620 NVERC : 0x40
[0000.151] RamCode = 0
[0000.153] Platform has DDR4 type RAM
[0000.156] max77620 disabling SD1 Remote Sense
[0000.161] Setting DDR voltage to 1125mv
[0000.165] Serial Number of Pmic Max77663: 0x925ec
[0000.172] Entering ramdump check
[0000.175] Get RamDumpCarveOut = 0x0
[0000.178] RamDumpCarveOut=0x0,  RamDumperFlag=0xe59ff3f8
[0000.184] Last reboot was clean, booting normally!
[0000.188] Sdram initialization is successful 
[0000.192] SecureOs Carveout Base=0x00000000ff800000 Size=0x00800000
[0000.198] Lp0 Carveout Base=0x00000000ff780000 Size=0x00001000
[0000.204] BpmpFw Carveout Base=0x00000000ff700000 Size=0x00080000
[0000.210] GSC1 Carveout Base=0x00000000ff600000 Size=0x00100000
[0000.216] GSC2 Carveout Base=0x00000000ff500000 Size=0x00100000
[0000.222] GSC4 Carveout Base=0x00000000ff400000 Size=0x00100000
[0000.228] GSC5 Carveout Base=0x00000000ff300000 Size=0x00100000
[0000.233] GSC3 Carveout Base=0x000000017f300000 Size=0x00d00000
[0000.250] RamDump Carveout Base=0x00000000ff280000 Size=0x00080000
[0000.256] Platform-DebugCarveout: 0
[0000.259] Nck Carveout Base=0x00000000ff080000 Size=0x00200000
[0000.265] Non secure mode, and RB not enabled.
[0000.269] BoardID = 3448, SKU = 0x0
[0000.272] QSPI-ONLY: SkipQspiOnlyFlag = 0
[0000.276] Nano-SD: checking PT table on QSPI ...
[0000.280] Initialize FailControl
[0000.283] Read PT from (2:0)
[0000.314] PT crc32 and magic check passed.
[0000.318] Using BFS PT to query partitions 
[0000.324] Loading Tboot-CPU binary
[0000.352] Verifying TBC in OdmNonSecureSBK mode
[0000.362] Bootloader load address is 0xa0000000, entry address is 0xa0000258
[0000.369] Bootloader downloaded successfully.
[0000.373] Downloaded Tboot-CPU binary to 0xa0000258
[0000.378] MAX77620_GPIO5 configured
[0000.381] CPU power rail is up
[0000.384] CPU clock enabled
[0000.388] Performing RAM repair
[0000.391] Updating A64 Warmreset Address to 0xa00002e9
[0000.396] BoardID = 3448, SKU = 0x0
[0000.399] QSPI-ONLY: SkipQspiOnlyFlag = 0
[0000.403] Nano-SD: checking PT table on QSPI ...
[0000.407] NvTbootFailControlDoFailover: No failover; Continuing ...
[0000.413] Loading NvTbootBootloaderDTB
[0000.480] Verifying NvTbootBootloaderDTB in OdmNonSecureSBK mode
[0000.546] Bootloader DTB Load Address: 0x83000000
[0000.551] BoardID = 3448, SKU = 0x0
[0000.554] QSPI-ONLY: SkipQspiOnlyFlag = 0
[0000.558] Nano-SD: checking PT table on QSPI ...
[0000.562] NvTbootFailControlDoFailover: No failover; Continuing ...
[0000.568] Loading NvTbootKernelDTB
[0000.634] Verifying NvTbootKernelDTB in OdmNonSecureSBK mode
[0000.700] Kernel DTB Load Address: 0x83100000
[0000.704] BoardID = 3448, SKU = 0x0
[0000.708] QSPI-ONLY: SkipQspiOnlyFlag = 0
[0000.711] Nano-SD: checking PT table on QSPI ...
[0000.716] NvTbootFailControlDoFailover: No failover; Continuing ...
[0000.724] Loading cboot binary
[0000.839] Verifying EBT in OdmNonSecureSBK mode
[0000.881] Bootloader load address is 0x92c00000, entry address is 0x92c00258
[0000.888] Bootloader downloaded successfully.
[0000.892] BoardID = 3448, SKU = 0x0
[0000.896] QSPI-ONLY: SkipQspiOnlyFlag = 0
[0000.899] Nano-SD: checking PT table on QSPI ...
[0000.904] NvTbootFailControlDoFailover: No failover; Continuing ...
[0000.910] PT: Partition NCT NOT found ! 
[0000.914] Warning: Find Partition via PT Failed
[0000.918] Next binary entry address: 0x92c00258 
[0000.922] BoardId: 3448
[0000.927] Overriding pmu board id with proc board id
[0000.932] Display board id is not available 
[0000.936] BoardID = 3448, SKU = 0x0
[0000.939] QSPI-ONLY: SkipQspiOnlyFlag = 0
[0000.943] Nano-SD: checking PT table on QSPI ...
[0000.947] NvTbootFailControlDoFailover: No failover; Continuing ...
[0001.054] Verifying SC7EntryFw in OdmNonSecureSBK mode
[0001.108] /bpmp deleted
[0001.110] SC7EntryFw header found loaded at 0xff700000
[0001.295] OVR2 PMIC
[0001.297] Bpmp FW successfully loaded
[0001.300] BoardID = 3448, SKU = 0x0
[0001.303] QSPI-ONLY: SkipQspiOnlyFlag = 0
[0001.307] Nano-SD: checking PT table on QSPI ...
[0001.312] NvTbootFailControlDoFailover: No failover; Continuing ...
[0001.318] WB0 init successfully at 0xff780000
[0001.323] Verifying NvTbootWb0 in OdmNonSecureSBK mode
[0001.328] Set NvDecSticky Bits
[0001.331] GSC2 address ff53fffc value c0edbbcc
[0001.338] GSC MC Settings done
[0001.341] BoardID = 3448, SKU = 0x0
[0001.344] QSPI-ONLY: SkipQspiOnlyFlag = 0
[0001.348] Nano-SD: checking PT table on QSPI ...
[0001.352] NvTbootFailControlDoFailover: No failover; Continuing ...
[0001.359] TOS Image length 53680
[0001.362]  Monitor size 53680
[0001.365]  OS size 0
[0001.380] Secure Os AES-CMAC Verification Success!
[0001.385] TOS image cipher info: plaintext
[0001.389] Loading and Validation of Secure OS Successful
[0001.404] SC7 Entry Firmware - 0xff700000, 0x4000
[0001.409] NvTbootPackSdramParams: start. 
[0001.414] NvTbootPackSdramParams: done. 
[0001.418] Tegraboot started after 51855 us
[0001.422] Basic modules init took 925098 us
[0001.426] Sec Bootdevice Read Time = 12 ms, Read Size = 61 KB
[0001.431] Sec Bootdevice Write Time = 0 ms, Write Size = 0 KB
[0001.437] Next stage binary read took 102859 us
[0001.441] Carveout took -132455 us
[0001.444] CPU initialization took 505020 us
[0001.448] Total time taken by TegraBoot 1400522 us

[0001.453] Starting CPU & Halting co-processor 

64NOTICE:  BL31: v1.3(release):b5eeb33
NOTICE:  BL31: Built : 14:22:20, Apr 20 2022
ERROR:   Error initializing runtime service trusty_fast
[0001.575] RamCode = 0
[0001.580] LPDDR4 Training: Read DT: Number of tables = 2
[0001.585] EMC Training (SRC-freq: 204000; DST-freq: 1600000)
[0001.598] EMC Training Successful
[0001.601] 408000 not found in DVFS table
[0001.607] RamCode = 0
[0001.610] DT Write: emc-table@204000 succeeded
[0001.616] DT Write: emc-table@1600000 succeeded
[0001.620] LPDDR4 Training: Write DT: Number of tables = 2
[0001.668] 
[0001.669] Debug Init done
[0001.671] Marked DTB cacheable
[0001.674] Bootloader DTB loaded at 0x83000000
[0001.679] Marked DTB cacheable
[0001.682] Kernel DTB loaded at 0x83100000
[0001.686] DeviceTree Init done
[0001.699] Pinmux applied successfully
[0001.703] gicd_base: 0x50041000
[0001.707] gicc_base: 0x50042000
[0001.710] Interrupts Init done
[0001.714] Using base:0x60005090 & irq:208 for tick-timer
[0001.719] Using base:0x60005098 for delay-timer
[0001.723] platform_init_timer: DONE
[0001.727] Timer(tick) Init done
[0001.731] osc freq = 38400 khz
[0001.735] 
[0001.736] Welcome to L4T Cboot
[0001.739] 
[0001.740] Cboot Version: 00.00.2018.01-t210-a2f2e4b8
[0001.745] calling constructors
[0001.748] initializing heap
[0001.750] initializing threads
[0001.753] initializing timers
[0001.756] creating bootstrap completion thread
[0001.761] top of bootstrap2()
[0001.763] CPU: ARM Cortex A57
[0001.766] CPU: MIDR: 0x411FD071, MPIDR: 0x80000000
[0001.771] initializing platform
[0001.778] Manufacturer: MF = 0xc2, ID MSB = 0x25
[0001.783] ID LSB = 0x36, ID-CFI len = 194 bytes
[0001.787] Macronix QSPI chip present
[0001.791] SPI device register
[0001.794] init boot device
[0001.796] allocating memory for boot device(SPI)
[0001.801] registering boot device
[0001.809] QSPI bdev is already initialized
[0001.813] Enable APE clock
[0001.816] Un-powergate APE partition
[0001.819] of_register: registering tegra_udc to of_hal
[0001.824] of_register: registering inv20628-driver to of_hal
[0001.830] of_register: registering ads1015-driver to of_hal
[0001.835] of_register: registering lp8557-bl-driver to of_hal
[0001.841] of_register: registering bq2419x_charger to of_hal
[0001.847] of_register: registering bq27441_fuel_gauge to of_hal
[0001.858] gpio framework initialized
[0001.862] of_register: registering tca9539_gpio to of_hal
[0001.867] of_register: registering tca9539_gpio to of_hal
[0001.872] of_register: registering i2c_bus_driver to of_hal
[0001.878] of_register: registering i2c_bus_driver to of_hal
[0001.883] of_register: registering i2c_bus_driver to of_hal
[0001.889] pmic framework initialized
[0001.892] of_register: registering max77620_pmic to of_hal
[0001.898] regulator framework initialized
[0001.902] of_register: registering tps65132_bl_driver to of_hal
[0001.908] initializing target
[0001.914] gpio_driver_register: register 'tegra_gpio_driver' driver
[0001.922] board ID = D78, board SKU = 0
[0001.925] Skipping Z3!
[0001.930] fixed regulator driver initialized
[0001.948] initializing OF layer
[0001.951] NCK carveout not present
[0001.954] Skipping dts_overrides
[0001.958] of_children_init: Ops found for compatible string nvidia,tegra210-i2c
[0001.974] I2C Bus Init done
[0001.976] of_children_init: Ops found for compatible string nvidia,tegra210-i2c
[0001.987] I2C Bus Init done
[0001.989] of_children_init: Ops found for compatible string nvidia,tegra210-i2c
[0001.999] I2C Bus Init done
[0002.002] of_children_init: Ops found for compatible string nvidia,tegra210-i2c
[0002.012] I2C Bus Init done
[0002.015] of_children_init: Ops found for compatible string nvidia,tegra210-i2c
[0002.025] I2C Bus Init done
[0002.028] of_children_init: Ops found for compatible string maxim,max77620
[0002.038] max77620_init using irq 118
[0002.043] register 'maxim,max77620' pmic
[0002.047] gpio_driver_register: register 'max77620-gpio' driver
[0002.053] of_children_init: Ops found for compatible string nvidia,tegra210-i2c
[0002.064] I2C Bus Init done
[0002.067] NCK carveout not present
[0002.077] Find /i2c@7000c000's alias i2c0
[0002.080] get eeprom at 1-a0, size 256, type 0
[0002.089] Find /i2c@7000c500's alias i2c2
[0002.093] get eeprom at 3-a0, size 256, type 0
[0002.097] get eeprom at 3-ae, size 256, type 0
[0002.102] pm_ids_update: Updating 1,a0, size 256, type 0
[0004.107] I2C transfer timeout
[0004.110] I2C write failed
[0004.113] Writing offset failed
[0004.116] eeprom_init: EEPROM read failed
[0004.120] pm_ids_update: eeprom init failed
[0004.124] pm_ids_update: Updating 3,a0, size 256, type 0
[0006.129] I2C transfer timeout
[0006.132] I2C write failed
[0006.135] Writing offset failed
[0006.138] eeprom_init: EEPROM read failed
[0006.142] pm_ids_update: eeprom init failed
[0006.146] pm_ids_update: Updating 3,ae, size 256, type 0
[0008.151] I2C transfer timeout
[0008.154] I2C write failed
[0008.157] Writing offset failed
[0008.160] eeprom_init: EEPROM read failed
[0008.164] pm_ids_update: eeprom init failed
[0010.168] I2C transfer timeout
[0010.171] I2C write failed
[0010.174] Writing offset failed
[0010.177] eeprom_init: EEPROM read failed
[0010.181] Plugin Manager: Parse ODM data 0x000a4000
[0010.192] shim_cmdline_install: /chosen/bootargs: earlycon=uart8250,mmio32,0x70006000 
[0010.207] Find /i2c@7000c000's alias i2c0
[0010.211] get eeprom at 1-a0, size 256, type 0
[0010.219] Find /i2c@7000c500's alias i2c2
[0010.223] get eeprom at 3-a0, size 256, type 0
[0010.227] get eeprom at 3-ae, size 256, type 0
[0010.232] pm_ids_update: Updating 1,a0, size 256, type 0
[0012.237] I2C transfer timeout
[0012.240] I2C write failed
[0012.243] Writing offset failed
[0012.246] eeprom_init: EEPROM read failed
[0012.250] pm_ids_update: eeprom init failed
[0012.254] pm_ids_update: Updating 3,a0, size 256, type 0
[0014.259] I2C transfer timeout
[0014.262] I2C write failed
[0014.265] Writing offset failed
[0014.268] eeprom_init: EEPROM read failed
[0014.272] pm_ids_update: eeprom init failed
[0014.276] pm_ids_update: Updating 3,ae, size 256, type 0
[0016.281] I2C transfer timeout
[0016.284] I2C write failed
[0016.287] Writing offset failed
[0016.290] eeprom_init: EEPROM read failed
[0016.294] pm_ids_update: eeprom init failed
[0018.298] I2C transfer timeout
[0018.301] I2C write failed
[0018.304] Writing offset failed
[0018.307] eeprom_init: EEPROM read failed
[0018.311] shim_get_serial_num:EEPROM read failed
[0018.315] Reading Serial number from with NCT/FCT
[0018.320] No serial number in NCT/EEPROM. Using fused IDs
[0018.325] Chip UID is 0000000164510644000000000a000280
[0018.330] Add serial number:8002000a000000004406 as DT property
[0018.338] Applying platform configs
[0018.345] platform-init is not present. Skipping
[0018.349] calling apps_init()
[0018.355] Couldn't find GPT header
[0018.360] Proceeding to Cold Boot
[0018.363] starting app android_boot_app
[0018.366] Device state: unlocked
[0018.370] display console init
[0018.375] status of sor1 node is not okay
[0018.379] sor0 is not supported
[0018.382] display_console_init: no valid display out_type
[0018.390] subnode volume_up is not found !
[0018.394] subnode back is not found !
[0018.397] subnode volume_down is not found !
[0018.401] subnode menu is not found !
[0018.405] Gpio keyboard init success
[0018.419] DT entry for leds-pwm not found
[0018.492] found decompressor handler: lz4-legacy
[0018.506] decompressing blob (type 1)...
[0018.572] display_resolution: No display init
[0018.577] Failed to retrieve display resolution
[0018.581] Could not load/initialize BMP blob...ignoring
[0018.586] -------> se_aes_verify_sbk_clear: 747
[0018.591] se_aes_verify_sbk_clear: Error
[0018.595] SE operation failed
[0018.598] bl_battery_charging: connected to external power supply
[0018.607] display_console_ioctl: No display init
[0018.611] switch_backlight failed
[0018.617] device_query_partition_size: failed to open partition spiflash0:MSC !
[0018.625] MSC Partition not found
[0018.631] device_query_partition_size: failed to open partition spiflash0:USP !
[0018.638] USP partition read failed!
[0018.642] blob_init: blob-partition USP header read failed
[0018.647] android_boot Unable to update recovery partition
[0018.653] kfs_getpartname: name = LNX
[0018.656] Loading kernel from LNX
[0018.666] Found 19 BFS partitions in "spiflash0"
[0018.987] load kernel from storage
[0018.992] decompressor handler not found
[0019.258] Successfully loaded kernel and ramdisk images
[0019.263] board ID = D78, board SKU = 0
[0019.268] sdmmc node status = okay
[0019.271] sdcard instance = 0
[0019.274] sdmmc cd-inverted
[0019.277] sdcard gpio handle 0x5a
[0019.280] sdcard gpio pin 0xc9
[0019.283] sdcard gpio flags 0x0
[0019.286] vmmc-supply 0x96
[0019.288] cd_gpio_pin = 201
[0019.291] pin_state = 0
[0019.294] Found sdcard
[0019.296] SD-card IS present ...
[0019.299] load_and_boot_kernel: SD card detected OK
[0019.305] display_resolution: No display init
[0019.309] Failed to retrieve display resolution
[0019.313] bmp blob is not loaded and initialized
[0019.318] Failed to display boot-logo
[0019.322] NCK carveout not present
[0019.325] Skipping dts_overrides
[0019.328] NCK carveout not present
[0019.337] Find /i2c@7000c000's alias i2c0
[0019.341] get eeprom at 1-a0, size 256, type 0
[0019.350] Find /i2c@7000c500's alias i2c2
[0019.354] get eeprom at 3-a0, size 256, type 0
[0019.358] get eeprom at 3-ae, size 256, type 0
[0019.363] pm_ids_update: Updating 1,a0, size 256, type 0
[0021.368] I2C transfer timeout
[0021.371] I2C write failed
[0021.373] Writing offset failed
[0021.377] eeprom_init: EEPROM read failed
[0021.380] pm_ids_update: eeprom init failed
[0021.385] pm_ids_update: Updating 3,a0, size 256, type 0
[0023.390] I2C transfer timeout
[0023.393] I2C write failed
[0023.396] Writing offset failed
[0023.399] eeprom_init: EEPROM read failed
[0023.402] pm_ids_update: eeprom init failed
[0023.407] pm_ids_update: Updating 3,ae, size 256, type 0
[0025.412] I2C transfer timeout
[0025.415] I2C write failed
[0025.418] Writing offset failed
[0025.421] eeprom_init: EEPROM read failed
[0025.425] pm_ids_update: eeprom init failed
[0027.429] I2C transfer timeout
[0027.432] I2C write failed
[0027.434] Writing offset failed
[0027.437] eeprom_init: EEPROM read failed
[0027.441] Plugin Manager: Parse ODM data 0x000a4000
[0027.453] shim_cmdline_install: /chosen/bootargs: earlycon=uart8250,mmio32,0x70006000 
[0027.461] Add serial number:8002000a000000004406 as DT property
[0027.470] "bpmp" doesn't exist, creating 
[0027.476] Updated bpmp info to DTB
[0027.481] Updated initrd info to DTB
[0027.484] "proc-board" doesn't exist, creating 
[0027.490] Updated board info to DTB
[0027.493] "pmu-board" doesn't exist, creating 
[0027.499] Updated board info to DTB
[0027.502] "display-board" doesn't exist, creating 
[0027.508] Updated board info to DTB
[0027.512] "reset" doesn't exist, creating 
[0027.516] Updated reset info to DTB
[0027.520] display_console_ioctl: No display init
[0027.524] display_console_ioctl: No display init
[0027.529] display_console_ioctl: No display init
[0027.533] Cmdline: tegraid=21.1.2.0.0 ddr_die=4096M@2048M section=512M memtype=0 vpr_resize usb_port_owner_info=0 lane_owner_info=0 emc_max_dvfs=0 touch_id=0@63 video=tegrafb no_console_suspend=1 console=ttyS0,115200n8 debug_uartport=lsport,4 earlyprintk=uart8250-32bit,0x70006000 maxcpus=4 usbcore.old_scheme_first=1 lp0_vec=0x1000@0xff780000 core_edp_mv=1125 core_edp_ma=4000 gpt 
[0027.568] DTB cmdline: earlycon=uart8250,mmio32,0x70006000 
[0027.573] boot image cmdline: root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 
[0027.587] Updated bootarg info to DTB
[0027.590] Adding uuid 0000000164510644000000000a000280 to DT
[0027.596] Adding eks info 0 to DT
[0027.602] WARNING: Failed to pass NS DRAM ranges to TOS, err: -7
[0027.607] Updated memory info to DTB
[0027.612] add_lp0_disable: Unable to find plugin-manager ids under chosen node! (FDT_ERR_NOTFOUND)
[0027.624] set vdd_core voltage to 1125 mv
[0027.628] setting 'vdd-core' regulator to 1125000 micro volts
[0027.634] Found secure-pmc; disable BPMP


U-Boot 2020.04-g4335beb (Apr 20 2022 - 14:22:25 -0700)

SoC: tegra210
Model: NVIDIA Jetson Nano Developer Kit
Board: NVIDIA P3450-0000
DRAM:  4 GiB
tegra210_env_drv_config: find node offset error -1
MMC:   sdhci@700b0000: 1, sdhci@700b0600: 0
Loading Environment from MMC... Card did not respond to voltage select!
*** Warning - No block device, using default environment

Loading Environment from SPI Flash... SF: Detected mx25u3235f with page size 256 Bytes, erase size 4 KiB, total 4 MiB
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Can't find Ethernet MAC address in cboot DTB
Net:   No ethernet found.
Hit any key to stop autoboot:  0 
switch to partitions #0, OK
mmc1 is current device
Scanning mmc 1:1...
Found /boot/extlinux/extlinux.conf
Retrieving file: /boot/extlinux/extlinux.conf
845 bytes read in 21 ms (39.1 KiB/s)
1:	primary kernel
Retrieving file: /boot/initrd
7160179 bytes read in 330 ms (20.7 MiB/s)
Retrieving file: /boot/Image
34418696 bytes read in 1505 ms (21.8 MiB/s)
append: tegraid=21.1.2.0.0 ddr_die=4096M@2048M section=512M memtype=0 vpr_resize usb_port_owner_info=0 lane_owner_info=0 emc_max_dvfs=0 touch_id=0@63 video=tegrafb no_console_suspend=1 console=ttyS0,115200n8 debug_uartport=lsport,4 earlyprintk=uart8250-32bit,0x70006000 maxcpus=4 usbcore.old_scheme_first=1 lp0_vec=0x1000@0xff780000 core_edp_mv=1125 core_edp_ma=4000 gpt  earlycon=uart8250,mmio32,0x70006000  root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 quiet root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 
## Flattened Device Tree blob at 83100000
   Booting using the fdt blob at 0x83100000
ERROR: reserving fdt memory region failed (addr=0 size=0)
ERROR: reserving fdt memory region failed (addr=0 size=0)
   Using Device Tree in place at 0000000083100000, end 0000000083178477
Can't find Ethernet MAC address in cboot DTB
copying carveout for /host1x@50000000/dc@54200000...
copying carveout for /host1x@50000000/dc@54240000...

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 4.9.253-tegra (liam@ALPHA-1) (gcc version 7.3.1 20180425 [linaro-7.3-2018.05 revision d29120a424ecfbc167ef90065c0eeb7f91977701] (Linaro GCC 7.3-2018.05) ) #2 SMP PREEMPT Tue Nov 8 14:01:44 SAST 2022
[    0.000000] Boot CPU: AArch64 Processor [411fd071]
[    0.000000] OF: fdt:memory scan node memory@80000000, reg size 32,
[    0.000000] OF: fdt: - 80000000 ,  7ee00000
[    0.000000] OF: fdt: - 100000000 ,  7f200000
[    0.000000] earlycon: uart8250 at MMIO32 0x0000000070006000 (options '')
[    0.000000] bootconsole [uart8250] enabled
[   11.122816] tegra-i2c 7000d000.i2c: pio timed out addr: 0x3c tlen:28 rlen:4
[   11.122851] tegra-i2c 7000d000.i2c: --- register dump for debugging ----
[   11.122868] tegra-i2c 7000d000.i2c: I2C_CNFG - 0x22c00
[   11.122882] tegra-i2c 7000d000.i2c: I2C_PACKET_TRANSFER_STATUS - 0x1010001
[   11.122897] tegra-i2c 7000d000.i2c: I2C_FIFO_CONTROL - 0xe0
[   11.122909] tegra-i2c 7000d000.i2c: I2C_FIFO_STATUS - 0x800081
[   11.122923] tegra-i2c 7000d000.i2c: I2C_INT_MASK - 0x7d
[   11.122935] tegra-i2c 7000d000.i2c: I2C_INT_STATUS - 0xc3
[   11.122951] tegra-i2c 7000d000.i2c: i2c transfer timed out addr: 0x3c
[   21.362808] tegra-i2c 7000d000.i2c: pio timed out addr: 0x3c tlen:28 rlen:4
[   21.362824] tegra-i2c 7000d000.i2c: --- register dump for debugging ----
[   21.362838] tegra-i2c 7000d000.i2c: I2C_CNFG - 0x22c00
[   21.362851] tegra-i2c 7000d000.i2c: I2C_PACKET_TRANSFER_STATUS - 0x1010001
[   21.362865] tegra-i2c 7000d000.i2c: I2C_FIFO_CONTROL - 0xe0
[   21.362877] tegra-i2c 7000d000.i2c: I2C_FIFO_STATUS - 0x800081
[   21.362891] tegra-i2c 7000d000.i2c: I2C_INT_MASK - 0x7d
[   21.362903] tegra-i2c 7000d000.i2c: I2C_INT_STATUS - 0xc3
[   21.362917] tegra-i2c 7000d000.i2c: i2c transfer timed out addr: 0x3c
[   21.362977] max77620-gpio max77620-gpio: CNFG_GPIOx val update failed: -110
[   21.362997] pwm-regulator pwm_regulators:pwm-regulator@1: Failed to get enable GPIO: -110
[   22.042795] INFO: rcu_preempt detected stalls on CPUs/tasks:
[   22.048481] 	0-...: (0 ticks this GP) idle=7bd/140000000000000/0 softirq=208/208 fqs=2483 
[   22.056734] 	(detected by 3, t=5255 jiffies, g=-221, c=-222, q=946)
[   22.096989] CPU0: SError detected, daif=1c0, spsr=0x200000c5, mpidr=80000000, esr=bf000002
[   36.322797] Kernel panic - not syncing: Watchdog detected hard LOCKUP on cpu 0
[   36.330026] CPU: 3 PID: 0 Comm: swapper/3 Not tainted 4.9.253-tegra #2
[   36.336549] Hardware name: Horizon (DT)
[   36.340381] Call trace:
[   36.342834] [<ffffff800808ba40>] dump_backtrace+0x0/0x198
[   36.348232] [<ffffff800808c004>] show_stack+0x24/0x30
[   36.353294] [<ffffff8008f62c7c>] dump_stack+0xa0/0xc4
[   36.358349] [<ffffff8008f5fd20>] panic+0x12c/0x2a8
[   36.363148] [<ffffff80081819b4>] watchdog_check_hardlockup_other_cpu+0x11c/0x120
[   36.370545] [<ffffff8008180b28>] watchdog_timer_fn+0x98/0x2c0
[   36.376293] [<ffffff8008138f30>] __hrtimer_run_queues+0xd8/0x360
[   36.382295] [<ffffff8008139880>] hrtimer_interrupt+0xa8/0x1e0
[   36.388044] [<ffffff8008bfc080>] tegra210_timer_isr+0x38/0x48
[   36.393791] [<ffffff8008121960>] __handle_irq_event_percpu+0x68/0x288
[   36.400227] [<ffffff8008121ba8>] handle_irq_event_percpu+0x28/0x60
[   36.406404] [<ffffff8008121c30>] handle_irq_event+0x50/0x80
[   36.411973] [<ffffff8008125ac4>] handle_fasteoi_irq+0xd4/0x1c0
[   36.417803] [<ffffff8008120914>] generic_handle_irq+0x34/0x50
[   36.423545] [<ffffff8008121000>] __handle_domain_irq+0x68/0xc0
[   36.429372] [<ffffff8008080d44>] gic_handle_irq+0x5c/0xb0
[   36.434767] [<ffffff8008082c28>] el1_irq+0xe8/0x194
[   36.439643] [<ffffff80080859b0>] arch_cpu_idle+0x30/0x1b0
[   36.445040] [<ffffff80081116c8>] cpu_startup_entry+0x140/0x200
[   36.450871] [<ffffff8008091cf8>] secondary_start_kernel+0x190/0x1f8
[   36.457133] [<0000000084f701a8>] 0x84f701a8
[   36.461320] SMP: stopping secondary CPUs
[   37.568758] SMP: failed to stop secondary CPUs 0,3
[   37.573559] Kernel Offset: disabled
[   37.577049] Memory Limit: none
[   37.584954] Rebooting in 5 seconds..

# ..... this keeps rebooting in a boot loop like this .......

On the second module, the module boots but there are several issues. I have confirmed that I am using the correct device-tree by running:

nano@localhost:~$ cat /proc/device-tree/nvidia,dtsfilename 
arch/arm64/boot/dts/../../../../../../hardware/nvidia/platform/t210/porg/kernel-dts/horizon.dts
  1. First, there are quite a few error messages during boot. These include issues mentioned below as well as EEPROM issues etc. I have attached a log of the boot from the debug console below.

  2. Ethernet is not working for some reason (CBoot seems to be complaining about not being able to find the MAC address).

  3. Additionally, I2C seems broken. When trying to run i2cdetect on any of the i2c busses, the i2c transfer times out. I have looked at the SDA and SCL lines on an oscilloscope and what happens during this process is that at first both SDA and SCL lines are high (as they should be), then as the transfer starts, SDA is pulled low (also normal) but then nothing else happens until the timeout occurs (i.e. SDA remains low and SCL high until timeout) at which point SDA is released and is high again. I don’t know if this is somehow related to a clock issue perhaps as the SCL line does nothing during this whole process.

  4. There is probably more wrong that I haven’t picked up on so far…

I2C issue shown with i2cdetect:

nano@localhost:~$ sudo i2cdetect -y -r 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          [  614.515469] tegra-i2c 7000c000.i2c: pio timed out addr: 0x3 tlen:12 rlen:4
[  614.522729] tegra-i2c 7000c000.i2c: --- register dump for debugging ----
[  614.529737] tegra-i2c 7000c000.i2c: I2C_CNFG - 0x22c00
[  614.534977] tegra-i2c 7000c000.i2c: I2C_PACKET_TRANSFER_STATUS - 0x10001
[  614.541712] tegra-i2c 7000c000.i2c: I2C_FIFO_CONTROL - 0xe0
[  614.547296] tegra-i2c 7000c000.i2c: I2C_FIFO_STATUS - 0x800080
[  614.553137] tegra-i2c 7000c000.i2c: I2C_INT_MASK - 0x7d
[  614.558366] tegra-i2c 7000c000.i2c: I2C_INT_STATUS - 0x2
[  614.563833] tegra-i2c 7000c000.i2c: i2c transfer timed out addr: 0x3
-- [  624.755485] tegra-i2c 7000c000.i2c: pio timed out addr: 0x4 tlen:12 rlen:4
[  624.762751] tegra-i2c 7000c000.i2c: --- register dump for debugging ----
[  624.769983] tegra-i2c 7000c000.i2c: I2C_CNFG - 0x22c00
[  624.775262] tegra-i2c 7000c000.i2c: I2C_PACKET_TRANSFER_STATUS - 0x10001
[  624.782028] tegra-i2c 7000c000.i2c: I2C_FIFO_CONTROL - 0xe0
[  624.787886] tegra-i2c 7000c000.i2c: I2C_FIFO_STATUS - 0x800080
[  624.793825] tegra-i2c 7000c000.i2c: I2C_INT_MASK - 0x7d
[  624.799107] tegra-i2c 7000c000.i2c: I2C_INT_STATUS - 0x2
[  624.804450] tegra-i2c 7000c000.i2c: i2c transfer timed out addr: 0x4
-- 
..... and so on .....

Boot log for the second module:

[0000.125] [L4T TegraBoot] (version 00.00.2018.01-l4t-8728f3cb)
[0000.130] Processing in cold boot mode Bootloader 2
[0000.135] A02 Bootrom Patch rev = 1023
[0000.138] Power-up reason: pmc por
[0000.141] No Battery Present
[0000.144] pmic max77620 reset reason
[0000.147] pmic max77620 NVERC : 0x40
[0000.151] RamCode = 0
[0000.153] Platform has DDR4 type RAM
[0000.156] max77620 disabling SD1 Remote Sense
[0000.161] Setting DDR voltage to 1125mv
[0000.165] Serial Number of Pmic Max77663: 0x203cf3
[0000.172] Entering ramdump check
[0000.175] Get RamDumpCarveOut = 0x0
[0000.179] RamDumpCarveOut=0x0,  RamDumperFlag=0xe59ff3f8
[0000.184] Last reboot was clean, booting normally!
[0000.188] Sdram initialization is successful 
[0000.192] SecureOs Carveout Base=0x00000000ff800000 Size=0x00800000
[0000.199] Lp0 Carveout Base=0x00000000ff780000 Size=0x00001000
[0000.204] BpmpFw Carveout Base=0x00000000ff700000 Size=0x00080000
[0000.210] GSC1 Carveout Base=0x00000000ff600000 Size=0x00100000
[0000.216] GSC2 Carveout Base=0x00000000ff500000 Size=0x00100000
[0000.222] GSC4 Carveout Base=0x00000000ff400000 Size=0x00100000
[0000.228] GSC5 Carveout Base=0x00000000ff300000 Size=0x00100000
[0000.234] GSC3 Carveout Base=0x000000017f300000 Size=0x00d00000
[0000.250] RamDump Carveout Base=0x00000000ff280000 Size=0x00080000
[0000.256] Platform-DebugCarveout: 0
[0000.259] Nck Carveout Base=0x00000000ff080000 Size=0x00200000
[0000.265] Non secure mode, and RB not enabled.
[0000.269] BoardID = 3448, SKU = 0x0
[0000.272] QSPI-ONLY: SkipQspiOnlyFlag = 0
[0000.276] Nano-SD: checking PT table on QSPI ...
[0000.281] Initialize FailControl
[0000.284] Read PT from (2:0)
[0000.314] PT crc32 and magic check passed.
[0000.318] Using BFS PT to query partitions 
[0000.324] Loading Tboot-CPU binary
[0000.352] Verifying TBC in OdmNonSecureSBK mode
[0000.362] Bootloader load address is 0xa0000000, entry address is 0xa0000258
[0000.369] Bootloader downloaded successfully.
[0000.373] Downloaded Tboot-CPU binary to 0xa0000258
[0000.378] MAX77620_GPIO5 configured
[0000.381] CPU power rail is up
[0000.384] CPU clock enabled
[0000.388] Performing RAM repair
[0000.391] Updating A64 Warmreset Address to 0xa00002e9
[0000.396] BoardID = 3448, SKU = 0x0
[0000.399] QSPI-ONLY: SkipQspiOnlyFlag = 0
[0000.403] Nano-SD: checking PT table on QSPI ...
[0000.407] NvTbootFailControlDoFailover: No failover; Continuing ...
[0000.413] Loading NvTbootBootloaderDTB
[0000.480] Verifying NvTbootBootloaderDTB in OdmNonSecureSBK mode
[0000.546] Bootloader DTB Load Address: 0x83000000
[0000.551] BoardID = 3448, SKU = 0x0
[0000.554] QSPI-ONLY: SkipQspiOnlyFlag = 0
[0000.558] Nano-SD: checking PT table on QSPI ...
[0000.562] NvTbootFailControlDoFailover: No failover; Continuing ...
[0000.568] Loading NvTbootKernelDTB
[0000.634] Verifying NvTbootKernelDTB in OdmNonSecureSBK mode
[0000.700] Kernel DTB Load Address: 0x83100000
[0000.705] BoardID = 3448, SKU = 0x0
[0000.708] QSPI-ONLY: SkipQspiOnlyFlag = 0
[0000.712] Nano-SD: checking PT table on QSPI ...
[0000.716] NvTbootFailControlDoFailover: No failover; Continuing ...
[0000.724] Loading cboot binary
[0000.840] Verifying EBT in OdmNonSecureSBK mode
[0000.881] Bootloader load address is 0x92c00000, entry address is 0x92c00258
[0000.888] Bootloader downloaded successfully.
[0000.892] BoardID = 3448, SKU = 0x0
[0000.896] QSPI-ONLY: SkipQspiOnlyFlag = 0
[0000.899] Nano-SD: checking PT table on QSPI ...
[0000.904] NvTbootFailControlDoFailover: No failover; Continuing ...
[0000.910] PT: Partition NCT NOT found ! 
[0000.914] Warning: Find Partition via PT Failed
[0000.918] Next binary entry address: 0x92c00258 
[0000.922] BoardId: 3448
[0000.927] Overriding pmu board id with proc board id
[0000.932] Display board id is not available 
[0000.936] BoardID = 3448, SKU = 0x0
[0000.939] QSPI-ONLY: SkipQspiOnlyFlag = 0
[0000.943] Nano-SD: checking PT table on QSPI ...
[0000.948] NvTbootFailControlDoFailover: No failover; Continuing ...
[0001.054] Verifying SC7EntryFw in OdmNonSecureSBK mode
[0001.108] /bpmp deleted
[0001.110] SC7EntryFw header found loaded at 0xff700000
[0001.295] OVR2 PMIC
[0001.297] Bpmp FW successfully loaded
[0001.300] BoardID = 3448, SKU = 0x0
[0001.303] QSPI-ONLY: SkipQspiOnlyFlag = 0
[0001.307] Nano-SD: checking PT table on QSPI ...
[0001.312] NvTbootFailControlDoFailover: No failover; Continuing ...
[0001.319] WB0 init successfully at 0xff780000
[0001.323] Verifying NvTbootWb0 in OdmNonSecureSBK mode
[0001.328] Set NvDecSticky Bits
[0001.332] GSC2 address ff53fffc value c0edbbcc
[0001.338] GSC MC Settings done
[0001.341] BoardID = 3448, SKU = 0x0
[0001.344] QSPI-ONLY: SkipQspiOnlyFlag = 0
[0001.348] Nano-SD: checking PT table on QSPI ...
[0001.352] NvTbootFailControlDoFailover: No failover; Continuing ...
[0001.359] TOS Image length 53680
[0001.362]  Monitor size 53680
[0001.365]  OS size 0
[0001.380] Secure Os AES-CMAC Verification Success!
[0001.385] TOS image cipher info: plaintext
[0001.389] Loading and Validation of Secure OS Successful
[0001.405] SC7 Entry Firmware - 0xff700000, 0x4000
[0001.409] NvTbootPackSdramParams: start. 
[0001.414] NvTbootPackSdramParams: done. 
[0001.418] Tegraboot started after 51866 us
[0001.422] Basic modules init took 925183 us
[0001.426] Sec Bootdevice Read Time = 12 ms, Read Size = 61 KB
[0001.431] Sec Bootdevice Write Time = 0 ms, Write Size = 0 KB
[0001.437] Next stage binary read took 102860 us
[0001.441] Carveout took -132453 us
[0001.445] CPU initialization took 505025 us
[0001.449] Total time taken by TegraBoot 1400615 us

[0001.453] Starting CPU & Halting co-processor 

64NOTICE:  BL31: v1.3(release):b5eeb33
NOTICE:  BL31: Built : 14:22:20, Apr 20 2022
ERROR:   Error initializing runtime service trusty_fast
[0001.575] RamCode = 0
[0001.580] LPDDR4 Training: Read DT: Number of tables = 2
[0001.585] EMC Training (SRC-freq: 204000; DST-freq: 1600000)
[0001.598] EMC Training Successful
[0001.601] 408000 not found in DVFS table
[0001.607] RamCode = 0
[0001.610] DT Write: emc-table@204000 succeeded
[0001.616] DT Write: emc-table@1600000 succeeded
[0001.620] LPDDR4 Training: Write DT: Number of tables = 2
[0001.668] 
[0001.669] Debug Init done
[0001.671] Marked DTB cacheable
[0001.674] Bootloader DTB loaded at 0x83000000
[0001.679] Marked DTB cacheable
[0001.682] Kernel DTB loaded at 0x83100000
[0001.686] DeviceTree Init done
[0001.699] Pinmux applied successfully
[0001.703] gicd_base: 0x50041000
[0001.707] gicc_base: 0x50042000
[0001.710] Interrupts Init done
[0001.714] Using base:0x60005090 & irq:208 for tick-timer
[0001.719] Using base:0x60005098 for delay-timer
[0001.724] platform_init_timer: DONE
[0001.727] Timer(tick) Init done
[0001.731] osc freq = 38400 khz
[0001.735] 
[0001.736] Welcome to L4T Cboot
[0001.739] 
[0001.740] Cboot Version: 00.00.2018.01-t210-a2f2e4b8
[0001.745] calling constructors
[0001.748] initializing heap
[0001.750] initializing threads
[0001.753] initializing timers
[0001.756] creating bootstrap completion thread
[0001.761] top of bootstrap2()
[0001.763] CPU: ARM Cortex A57
[0001.766] CPU: MIDR: 0x411FD071, MPIDR: 0x80000000
[0001.771] initializing platform
[0001.778] Manufacturer: MF = 0xc2, ID MSB = 0x25
[0001.783] ID LSB = 0x36, ID-CFI len = 194 bytes
[0001.787] Macronix QSPI chip present
[0001.791] SPI device register
[0001.794] init boot device
[0001.796] allocating memory for boot device(SPI)
[0001.801] registering boot device
[0001.809] QSPI bdev is already initialized
[0001.813] Enable APE clock
[0001.816] Un-powergate APE partition
[0001.819] of_register: registering tegra_udc to of_hal
[0001.824] of_register: registering inv20628-driver to of_hal
[0001.830] of_register: registering ads1015-driver to of_hal
[0001.836] of_register: registering lp8557-bl-driver to of_hal
[0001.841] of_register: registering bq2419x_charger to of_hal
[0001.847] of_register: registering bq27441_fuel_gauge to of_hal
[0001.858] gpio framework initialized
[0001.862] of_register: registering tca9539_gpio to of_hal
[0001.867] of_register: registering tca9539_gpio to of_hal
[0001.872] of_register: registering i2c_bus_driver to of_hal
[0001.878] of_register: registering i2c_bus_driver to of_hal
[0001.884] of_register: registering i2c_bus_driver to of_hal
[0001.889] pmic framework initialized
[0001.893] of_register: registering max77620_pmic to of_hal
[0001.898] regulator framework initialized
[0001.902] of_register: registering tps65132_bl_driver to of_hal
[0001.908] initializing target
[0001.914] gpio_driver_register: register 'tegra_gpio_driver' driver
[0001.922] board ID = D78, board SKU = 0
[0001.926] Skipping Z3!
[0001.930] fixed regulator driver initialized
[0001.948] initializing OF layer
[0001.951] NCK carveout not present
[0001.954] Skipping dts_overrides
[0001.958] of_children_init: Ops found for compatible string nvidia,tegra210-i2c
[0001.974] I2C Bus Init done
[0001.977] of_children_init: Ops found for compatible string nvidia,tegra210-i2c
[0001.987] I2C Bus Init done
[0001.989] of_children_init: Ops found for compatible string nvidia,tegra210-i2c
[0002.000] I2C Bus Init done
[0002.002] of_children_init: Ops found for compatible string nvidia,tegra210-i2c
[0002.012] I2C Bus Init done
[0002.015] of_children_init: Ops found for compatible string nvidia,tegra210-i2c
[0002.025] I2C Bus Init done
[0002.028] of_children_init: Ops found for compatible string maxim,max77620
[0002.038] max77620_init using irq 118
[0002.043] register 'maxim,max77620' pmic
[0002.047] gpio_driver_register: register 'max77620-gpio' driver
[0002.054] of_children_init: Ops found for compatible string nvidia,tegra210-i2c
[0002.064] I2C Bus Init done
[0002.068] NCK carveout not present
[0002.077] Find /i2c@7000c000's alias i2c0
[0002.081] get eeprom at 1-a0, size 256, type 0
[0002.089] Find /i2c@7000c500's alias i2c2
[0002.093] get eeprom at 3-a0, size 256, type 0
[0002.098] get eeprom at 3-ae, size 256, type 0
[0002.102] pm_ids_update: Updating 1,a0, size 256, type 0
[0004.107] I2C transfer timeout
[0004.110] I2C write failed
[0004.113] Writing offset failed
[0004.116] eeprom_init: EEPROM read failed
[0004.120] pm_ids_update: eeprom init failed
[0004.124] pm_ids_update: Updating 3,a0, size 256, type 0
[0006.129] I2C transfer timeout
[0006.132] I2C write failed
[0006.135] Writing offset failed
[0006.138] eeprom_init: EEPROM read failed
[0006.142] pm_ids_update: eeprom init failed
[0006.146] pm_ids_update: Updating 3,ae, size 256, type 0
[0008.151] I2C transfer timeout
[0008.154] I2C write failed
[0008.157] Writing offset failed
[0008.160] eeprom_init: EEPROM read failed
[0008.164] pm_ids_update: eeprom init failed
[0010.168] I2C transfer timeout
[0010.171] I2C write failed
[0010.174] Writing offset failed
[0010.177] eeprom_init: EEPROM read failed
[0010.181] Plugin Manager: Parse ODM data 0x000a4000
[0010.192] shim_cmdline_install: /chosen/bootargs: earlycon=uart8250,mmio32,0x70006000 
[0010.207] Find /i2c@7000c000's alias i2c0
[0010.210] get eeprom at 1-a0, size 256, type 0
[0010.219] Find /i2c@7000c500's alias i2c2
[0010.223] get eeprom at 3-a0, size 256, type 0
[0010.227] get eeprom at 3-ae, size 256, type 0
[0010.232] pm_ids_update: Updating 1,a0, size 256, type 0
[0012.237] I2C transfer timeout
[0012.240] I2C write failed
[0012.243] Writing offset failed
[0012.246] eeprom_init: EEPROM read failed
[0012.250] pm_ids_update: eeprom init failed
[0012.254] pm_ids_update: Updating 3,a0, size 256, type 0
[0014.259] I2C transfer timeout
[0014.262] I2C write failed
[0014.265] Writing offset failed
[0014.268] eeprom_init: EEPROM read failed
[0014.272] pm_ids_update: eeprom init failed
[0014.276] pm_ids_update: Updating 3,ae, size 256, type 0
[0016.281] I2C transfer timeout
[0016.284] I2C write failed
[0016.287] Writing offset failed
[0016.290] eeprom_init: EEPROM read failed
[0016.294] pm_ids_update: eeprom init failed
[0018.298] I2C transfer timeout
[0018.301] I2C write failed
[0018.303] Writing offset failed
[0018.307] eeprom_init: EEPROM read failed
[0018.310] shim_get_serial_num:EEPROM read failed
[0018.315] Reading Serial number from with NCT/FCT
[0018.320] No serial number in NCT/EEPROM. Using fused IDs
[0018.325] Chip UID is 0000000164456803080000000d070380
[0018.330] Add serial number:8003070d000000080368 as DT property
[0018.338] Applying platform configs
[0018.345] platform-init is not present. Skipping
[0018.349] calling apps_init()
[0018.355] Couldn't find GPT header
[0018.359] Proceeding to Cold Boot
[0018.363] starting app android_boot_app
[0018.366] Device state: unlocked
[0018.369] display console init
[0018.378] could not find regulator
[0018.381] hdmi cable connected
[0018.384] I2C slave not started
[0018.387] I2C write failed
[0018.390] Writing offset failed
[0018.393] could not read edid
[0018.397] tmds-config node not found
[0018.401] pmc_set_io_pad_voltage: Error -2 retrieving platform-io-pad-voltagepropsetting 'avdd-io-hdmi-dp' regulator to 1050000 micro volts
[00[0018.419] DT entry for leds-pwm not found
18.416] setting 'vdd-1v8' regulator to 1800000 micro volts
[0018.431] could not find regulator
[0018.434] could not find regulator
[0018.437] could not find regulator
[0018.465] using default cmu settings
[0018.469] dc_hdmi_enable, starting HDMI initialisation
[0018.475] dc_hdmi_enable, HDMI initialisation complete
[0018.480] list and configure display window
[0018.485] display console init completed
[0018.492] subnode volume_up is not found !
[0018.496] subnode back is not found !
[0018.500] subnode volume_down is not found !
[0018.504] subnode menu is not found !
[0018.508] Gpio keyboard init success
[0018.588] found decompressor handler: lz4-legacy
[0018.602] decompressing blob (type 1)...
[0018.669] load_bmp_blob: panelresolution=480 type=0
[0018.674] -------> se_aes_verify_sbk_clear: 747
[0018.678] se_aes_verify_sbk_clear: Error
[0018.682] SE operation failed
[0018.685] bl_battery_charging: connected to external power supply
[0018.697] device_query_partition_size: failed to open partition spiflash0:MSC !
[0018.705] MSC Partition not found
[0018.711] device_query_partition_size: failed to open partition spiflash0:USP !
[0018.718] USP partition read failed!
[0018.722] blob_init: blob-partition USP header read failed
[0018.727] android_boot Unable to update recovery partition
[0018.733] kfs_getpartname: name = LNX
[0018.736] Loading kernel from LNX
[0018.745] Found 19 BFS partitions in "spiflash0"
[0019.066] load kernel from storage
[0019.071] decompressor handler not found
[0019.337] Successfully loaded kernel and ramdisk images
[0019.343] board ID = D78, board SKU = 0
[0019.347] sdmmc node status = okay
[0019.351] sdcard instance = 0
[0019.353] sdmmc cd-inverted
[0019.356] sdcard gpio handle 0x5a
[0019.359] sdcard gpio pin 0xc9
[0019.362] sdcard gpio flags 0x0
[0019.365] vmmc-supply 0x96
[0019.368] cd_gpio_pin = 201
[0019.371] pin_state = 0
[0019.373] Found sdcard
[0019.375] SD-card IS present ...
[0019.378] load_and_boot_kernel: SD card detected OK
[0019.384] load_bmp_blob: panelresolution=480 type=0
[0019.458] display bmp image done
[0019.461] NCK carveout not present
[0019.464] Skipping dts_overrides
[0019.467] NCK carveout not present
[0019.476] Find /i2c@7000c000's alias i2c0
[0019.480] get eeprom at 1-a0, size 256, type 0
[0019.489] Find /i2c@7000c500's alias i2c2
[0019.493] get eeprom at 3-a0, size 256, type 0
[0019.497] get eeprom at 3-ae, size 256, type 0
[0019.502] pm_ids_update: Updating 1,a0, size 256, type 0
[0021.507] I2C transfer timeout
[0021.510] I2C write failed
[0021.513] Writing offset failed
[0021.516] eeprom_init: EEPROM read failed
[0021.520] pm_ids_update: eeprom init failed
[0021.524] pm_ids_update: Updating 3,a0, size 256, type 0
[0023.529] I2C transfer timeout
[0023.532] I2C write failed
[0023.535] Writing offset failed
[0023.538] eeprom_init: EEPROM read failed
[0023.542] pm_ids_update: eeprom init failed
[0023.546] pm_ids_update: Updating 3,ae, size 256, type 0
[0025.551] I2C transfer timeout
[0025.554] I2C write failed
[0025.557] Writing offset failed
[0025.560] eeprom_init: EEPROM read failed
[0025.564] pm_ids_update: eeprom init failed
[0027.568] I2C transfer timeout
[0027.571] I2C write failed
[0027.573] Writing offset failed
[0027.576] eeprom_init: EEPROM read failed
[0027.580] Plugin Manager: Parse ODM data 0x000a4000
[0027.592] shim_cmdline_install: /chosen/bootargs: earlycon=uart8250,mmio32,0x70006000 
[0027.600] Add serial number:8003070d000000080368 as DT property
[0027.610] "bpmp" doesn't exist, creating 
[0027.615] Updated bpmp info to DTB
[0027.620] Updated initrd info to DTB
[0027.623] "proc-board" doesn't exist, creating 
[0027.629] Updated board info to DTB
[0027.632] "pmu-board" doesn't exist, creating 
[0027.638] Updated board info to DTB
[0027.641] "display-board" doesn't exist, creating 
[0027.647] Updated board info to DTB
[0027.651] "reset" doesn't exist, creating 
[0027.655] Updated reset info to DTB
[0027.659] Cmdline: tegraid=21.1.2.0.0 ddr_die=4096M@2048M section=512M memtype=0 vpr_resize usb_port_owner_info=0 lane_owner_info=0 emc_max_dvfs=0 touch_id=0@63 video=tegrafb no_console_suspend=1 console=ttyS0,115200n8 debug_uartport=lsport,4 earlyprintk=uart8250-32bit,0x70006000 maxcpus=4 usbcore.old_scheme_first=1 lp0_vec=0x1000@0xff780000 core_edp_mv=1075 core_edp_ma=4000 gpt tegra_fbmem=0x140000@0x92ca9000 is_hdmi_initialised=1 
[0027.698] DTB cmdline: earlycon=uart8250,mmio32,0x70006000 
[0027.703] boot image cmdline: root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 
[0027.716] Updated bootarg info to DTB
[0027.720] Adding uuid 0000000164456803080000000d070380 to DT
[0027.726] Adding eks info 0 to DT
[0027.731] WARNING: Failed to pass NS DRAM ranges to TOS, err: -7
[0027.737] Updated memory info to DTB
[0027.742] add_lp0_disable: Unable to find plugin-manager ids under chosen node! (FDT_ERR_NOTFOUND)
[0027.754] set vdd_core voltage to 1075 mv
[0027.758] setting 'vdd-core' regulator to 1075000 micro volts
[0027.764] Found secure-pmc; disable BPMP


U-Boot 2020.04-g4335beb (Apr 20 2022 - 14:22:25 -0700)

SoC: tegra210
Model: NVIDIA Jetson Nano Developer Kit
Board: NVIDIA P3450-0000
DRAM:  4 GiB
tegra210_env_drv_config: find node offset error -1
MMC:   sdhci@700b0000: 1, sdhci@700b0600: 0
Loading Environment from MMC... Card did not respond to voltage select!
*** Warning - No block device, using default environment

Loading Environment from SPI Flash... SF: Detected mx25u3235f with page size 256 Bytes, erase size 4 KiB, total 4 MiB
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Can't find Ethernet MAC address in cboot DTB
Net:   No ethernet found.
Hit any key to stop autoboot:  0 
switch to partitions #0, OK
mmc1 is current device
Scanning mmc 1:1...
Found /boot/extlinux/extlinux.conf
Retrieving file: /boot/extlinux/extlinux.conf
845 bytes read in 21 ms (39.1 KiB/s)
1:	primary kernel
Retrieving file: /boot/initrd
7160179 bytes read in 330 ms (20.7 MiB/s)
Retrieving file: /boot/Image
34418696 bytes read in 1505 ms (21.8 MiB/s)
append: tegraid=21.1.2.0.0 ddr_die=4096M@2048M section=512M memtype=0 vpr_resize usb_port_owner_info=0 lane_owner_info=0 emc_max_dvfs=0 touch_id=0@63 video=tegrafb no_console_suspend=1 console=ttyS0,115200n8 debug_uartport=lsport,4 earlyprintk=uart8250-32bit,0x70006000 maxcpus=4 usbcore.old_scheme_first=1 lp0_vec=0x1000@0xff780000 core_edp_mv=1075 core_edp_ma=4000 gpt tegra_fbmem=0x140000@0x92ca9000 is_hdmi_initialised=1  earlycon=uart8250,mmio32,0x70006000  root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 quiet root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 
## Flattened Device Tree blob at 83100000
   Booting using the fdt blob at 0x83100000
ERROR: reserving fdt memory region failed (addr=0 size=0)
ERROR: reserving fdt memory region failed (addr=0 size=0)
   Using Device Tree in place at 0000000083100000, end 0000000083178477
Can't find Ethernet MAC address in cboot DTB
copying carveout for /host1x@50000000/dc@54200000...
copying carveout for /host1x@50000000/dc@54240000...

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 4.9.253-tegra (liam@ALPHA-1) (gcc version 7.3.1 20180425 [linaro-7.3-2018.05 revision d29120a424ecfbc167ef90065c0eeb7f91977701] (Linaro GCC 7.3-2018.05) ) #2 SMP PREEMPT Tue Nov 8 14:01:44 SAST 2022
[    0.000000] Boot CPU: AArch64 Processor [411fd071]
[    0.000000] OF: fdt:memory scan node memory@80000000, reg size 32,
[    0.000000] OF: fdt: - 80000000 ,  7ee00000
[    0.000000] OF: fdt: - 100000000 ,  7f200000
[    0.000000] Found tegra_fbmem: 00140000@92ca9000
[    0.000000] earlycon: uart8250 at MMIO32 0x0000000070006000 (options '')
[    0.000000] bootconsole [uart8250] enabled
[    2.290854] tegra-vii2c 546c0000.i2c: --- register dump for debugging ----
[    2.297737] tegra-vii2c 546c0000.i2c: I2C_CNFG - 0x22c00
[    2.303073] tegra-vii2c 546c0000.i2c: I2C_PACKET_TRANSFER_STATUS - 0x10001
[    2.309944] tegra-vii2c 546c0000.i2c: I2C_FIFO_CONTROL - 0xe0
[    2.315684] tegra-vii2c 546c0000.i2c: I2C_FIFO_STATUS - 0x800070
[    2.321684] tegra-vii2c 546c0000.i2c: I2C_INT_MASK - 0xac
[    2.327078] tegra-vii2c 546c0000.i2c: I2C_INT_STATUS - 0x0
[    2.332559] tegra-vii2c 546c0000.i2c: msg->len - 3
[    2.337346] tegra-vii2c 546c0000.i2c: is_msg_write - 1
[    2.342479] tegra-vii2c 546c0000.i2c: buf_remaining - 0
[    2.347702] tegra-vii2c 546c0000.i2c: i2c transfer timed out, addr 0x0040, data 0x00
[    2.355493] ina3221x 6-0040: ina3221 reset failure status: 0xffffff92
[    3.316913] cgroup: cgroup2: unknown option "nsdelegate"
[    4.856940] random: crng init done
[    4.860344] random: 7 urandom warning(s) missed due to ratelimiting
[    8.323518] Bridge firewalling registered

Ubuntu 18.04.6 LTS localhost.localdomain ttyS0

localhost login: 

# Periodically these messages pop up too regarding i2c timeouts:
[   79.219529] tegra-i2c 7000c500.i2c: pio timed out addr: 0x50 tlen:28 rlen:4
[   79.227322] tegra-i2c 7000c500.i2c: --- register dump for debugging ----
[   79.234465] tegra-i2c 7000c500.i2c: I2C_CNFG - 0x22c00
[   79.240806] tegra-i2c 7000c500.i2c: I2C_PACKET_TRANSFER_STATUS - 0x10001
[   79.247740] tegra-i2c 7000c500.i2c: I2C_FIFO_CONTROL - 0xe0
[   79.253382] tegra-i2c 7000c500.i2c: I2C_FIFO_STATUS - 0x800040
[   79.261522] tegra-i2c 7000c500.i2c: I2C_INT_MASK - 0x7d
[   79.266815] tegra-i2c 7000c500.i2c: I2C_INT_STATUS - 0x0
[   79.272655] tegra-i2c 7000c500.i2c: i2c transfer timed out addr: 0x50

In short, I would just like to have a barebones bootloader, dtb, image etc. flashed to the Jetson Module which does the following in terms of features (as mentioned at the top of the post):

  • General Power/Sys Signals - POWER_EN, SHUTDOWN_REQ, SYS_RESET, FORCE_RECOVERY etc.
  • GPIO - Fan PWM and tach, Power LED
  • UART - x3 UARTs (one of which is for the debug console)
  • I2C - x2 I2C for communicating with sensors on the carrier
  • USB - x3 USB2.0 ports (no USB3.0)
  • LAN - Fast Ethernet 100Mbps (Gigabit Ethernet not required, so only really need MDI0 & MDI1 pins from the module but I have included the option for GigE anyways)

I would really appreciate any help in regard to sorting out the issues mentioned above in order to get the Jetson Nano Module up and running. Help with the following would all be useful:

  • Further information about whether U-Boot modification is required.
  • Fixing issues/errors listed above.
  • Advice around device-tree development and whether or not there is a barebones template to work from.
  • Any modifications that I need to make to the .dts files.
  • Anything else that I have perhaps missed in this process?

Lastly, in case its needed, I have uploaded the pinmux spreadsheet (unfortunately in a CSV format as the forum won’t let me upload it in .xlsm format due to antivirus) - I will happily email the .xlsm if preferred.

Jetson Nano Module Pinmux.csv (94.3 KB)

Hi,

There are lots of questions here and I may not able to reply every detail. There are some suggestion first…

  1. It is unlikely to resolve every peripheral issue in one topic. I would suggest you file separate one for each and this one just focuses on the boot issue.

  2. You can directly use the default dtb on your board first and see if it can boot up. Then you can go back and disable each function you don’t need one by one. I don’t suggest to directly put everything you think is “right” all at once and then it crashes…

  3. yes, you don’t need to modify uboot here if you just want to boot up.

  4. I saw your eeprom is missing here. But please understand that there are 2 eeproms here. Eerpom on module and eeporm on carrier board. The one on carrier board is not mandatory and does not affect the boot. However, if the one from module fails to be read, then it will definitely affect boot.

Thus, fallback to default dtb first, if even that one cannot make your board gets module eeprom, then please review your hardware design with our design guide…

Thanks, I agree that I should focus on getting the board booted without errors first. Apologies if the above post was a bit long. I’d rather have provided too much information rather than too little.

So, starting fresh, I have tested the Jetson SoM on the dev kit carrier and the custom carrier board with the L4T 32.7.2 release package and sample rootfs. The results are that the module boots fine on both of these carrier boards. There are still some errors being shown on both boards, understandably more so on the custom carrier, due to the hardware being different.

Logs are available here:
horizon-diff.txt (22.5 KB)
p3449-diff.txt (20.7 KB)

Running a diff between the two logs (with times masked out) yields the following:

diff p3449-diff.txt horizon-diff.txt 
7c7
< [********] pmic max77620 NVERC : 0x50
---
> [********] pmic max77620 NVERC : 0xef
229,231c229,233
< [********] pm_ids_update: The pm board id is 3449-0000-400
< [********] Adding plugin-manager/ids/3449-0000-400=/i2c@7000c500:module@0x57
< [********] pm_ids_update: pm id update successful
---
> [********] I2C slave not started
> [********] I2C write failed
> [********] Writing offset failed
> [********] eeprom_init: EEPROM read failed
> [********] pm_ids_update: eeprom init failed
238c240
< [********] shim_cmdline_install: /chosen/bootargs: earlycon=uart8250,mmio32,0x70006000 
---
> [********] shim_cmdline_install: /chosen/bootargs: earlycon=uart8250,mmio32,0x70006400 
255,257c257,261
< [********] pm_ids_update: The pm board id is 3449-0000-400
< [********] Adding plugin-manager/ids/3449-0000-400=/i2c@7000c500:module@0x57
< [********] pm_ids_update: pm id update successful
---
> [********] I2C slave not started
> [********] I2C write failed
> [********] Writing offset failed
> [********] eeprom_init: EEPROM read failed
> [********] pm_ids_update: eeprom init failed
268,271c272
< [********] hdmi cable not connected
< [********] is_hdmi_needed: HDMI not connected, returning false
< [********] hdmi is not connected
< [********] sor0 is not supported
---
> [********] hdmi cable connected
273c274,288
< [********] display_console_init: no valid display out_type
---
> [********] I2C transfer timeout
> [********] I2C write failed
> [********] Writing offset failed
> [********] could not read edid
> [********] tmds-config node not found
> [********] pmc_set_io_pad_voltage: Error -2 retrieving platform-io-pad-voltagepropsetting 'avdd-io-hdmi-dp' regulator to 1050000 micro volts
> [********] setting 'vdd-1v8' regulator to 1800000 micro volts
> [********] could not find regulator
> [********] could not find regulator
> [********] could not find regulator
> [********] using default cmu settings
> [********] dc_hdmi_enable, starting HDMI initialisation
> [********] dc_hdmi_enable, HDMI initialisation complete
> [********] list and configure display window
> [********] display console init completed
281,283c296
< [********] display_resolution: No display init
< [********] Failed to retrieve display resolution
< [********] Could not load/initialize BMP blob...ignoring
---
> [********] load_bmp_blob: panelresolution=480 type=0
288,289d300
< [********] display_console_ioctl: No display init
< [********] switch_backlight failed
315,318c326,327
< [********] display_resolution: No display init
< [********] Failed to retrieve display resolution
< [********] bmp blob is not loaded and initialized
< [********] Failed to display boot-logo
---
> [********] load_bmp_blob: panelresolution=480 type=0
> [********] display bmp image done
338,340c347,351
< [********] pm_ids_update: The pm board id is 3449-0000-400
< [********] Adding plugin-manager/ids/3449-0000-400=/i2c@7000c500:module@0x57
< [********] pm_ids_update: pm id update successful
---
> [********] I2C slave not started
> [********] I2C write failed
> [********] Writing offset failed
> [********] eeprom_init: EEPROM read failed
> [********] pm_ids_update: eeprom init failed
360,363c371
< [********] display_console_ioctl: No display init
< [********] display_console_ioctl: No display init
< [********] display_console_ioctl: No display init
< [********] Cmdline: tegraid=21.1.2.0.0 ddr_die=4096M@2048M section=512M memtype=0 vpr_resize usb_port_owner_info=0 lane_owner_info=0 emc_max_dvfs=0 touch_id=0@63 video=tegrafb no_console_suspend=1 console=ttyS0,115200n8 debug_uartport=lsport,4 earlyprintk=uart8250-32bit,0x70006000 maxcpus=4 usbcore.old_scheme_first=1 lp0_vec=0x1000@0xff780000 core_edp_mv=1125 core_edp_ma=4000 gpt 
---
> [********] Cmdline: tegraid=21.1.2.0.0 ddr_die=4096M@2048M section=512M memtype=0 vpr_resize usb_port_owner_info=0 lane_owner_info=0 emc_max_dvfs=0 touch_id=0@63 video=tegrafb no_console_suspend=1 console=ttyS0,115200n8 debug_uartport=lsport,4 earlyprintk=uart8250-32bit,0x70006000 maxcpus=4 usbcore.old_scheme_first=1 lp0_vec=0x1000@0xff780000 core_edp_mv=1125 core_edp_ma=4000 gpt tegra_fbmem=0x140000@0x92ca9000 is_hdmi_initialised=1 
402c410
< append: tegraid=21.1.2.0.0 ddr_die=4096M@2048M section=512M memtype=0 vpr_resize usb_port_owner_info=0 lane_owner_info=0 emc_max_dvfs=0 touch_id=0@63 video=tegrafb no_console_suspend=1 console=ttyS0,115200n8 debug_uartport=lsport,4 earlyprintk=uart8250-32bit,0x70006000 maxcpus=4 usbcore.old_scheme_first=1 lp0_vec=0x1000@0xff780000 core_edp_mv=1125 core_edp_ma=4000 gpt  earlycon=uart8250,mmio32,0x70006000  root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 quiet root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 
---
> append: tegraid=21.1.2.0.0 ddr_die=4096M@2048M section=512M memtype=0 vpr_resize usb_port_owner_info=0 lane_owner_info=0 emc_max_dvfs=0 touch_id=0@63 video=tegrafb no_console_suspend=1 console=ttyS0,115200n8 debug_uartport=lsport,4 earlyprintk=uart8250-32bit,0x70006000 maxcpus=4 usbcore.old_scheme_first=1 lp0_vec=0x1000@0xff780000 core_edp_mv=1125 core_edp_ma=4000 gpt tegra_fbmem=0x140000@0x92ca9000 is_hdmi_initialised=1  earlycon=uart8250,mmio32,0x70006000  root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 quiet root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 
418a427
> [********] Found tegra_fbmem: 00140000@92ca9000
421,422d429
< [********] tegradc tegradc.1: dpd enable lookup fail:-19
< [********] Host read timeout at address 545c00c4
426a434,443
> [********] tegra-i2c 7000c700.i2c: rx dma timeout txlen:28 rxlen:128
> [********] tegra-i2c 7000c700.i2c: --- register dump for debugging ----
> [********] tegra-i2c 7000c700.i2c: I2C_CNFG - 0x22c00
> [********] tegra-i2c 7000c700.i2c: I2C_PACKET_TRANSFER_STATUS - 0x10001
> [********] tegra-i2c 7000c700.i2c: I2C_FIFO_CONTROL - 0x1c
> [********] tegra-i2c 7000c700.i2c: I2C_FIFO_STATUS - 0x800040
> [********] tegra-i2c 7000c700.i2c: I2C_INT_MASK - 0x6c
> [********] tegra-i2c 7000c700.i2c: I2C_INT_STATUS - 0x2
> [********] tegra-i2c 7000c700.i2c: i2c transfer timed out addr: 0x50
> [********] tegradc tegradc.1: dpd enable lookup fail:-19
428,429d444
< [********] using random self ethernet address
< [********] using random host ethernet address
433a449,450
> [********] using random self ethernet address
> [********] using random host ethernet address
438a456,473
> [********] tegra-i2c 7000c700.i2c: rx dma timeout txlen:28 rxlen:128
> [********] tegra-i2c 7000c700.i2c: --- register dump for debugging ----
> [********] tegra-i2c 7000c700.i2c: I2C_CNFG - 0x22c00
> [********] tegra-i2c 7000c700.i2c: I2C_PACKET_TRANSFER_STATUS - 0x10001
> [********] tegra-i2c 7000c700.i2c: I2C_FIFO_CONTROL - 0x1c
> [********] tegra-i2c 7000c700.i2c: I2C_FIFO_STATUS - 0x800040
> [********] tegra-i2c 7000c700.i2c: I2C_INT_MASK - 0x6c
> [********] tegra-i2c 7000c700.i2c: I2C_INT_STATUS - 0x2
> [********] tegra-i2c 7000c700.i2c: i2c transfer timed out addr: 0x50
> [********] tegra-i2c 7000c700.i2c: rx dma timeout txlen:28 rxlen:128
> [********] tegra-i2c 7000c700.i2c: --- register dump for debugging ----
> [********] tegra-i2c 7000c700.i2c: I2C_CNFG - 0x22c00
> [********] tegra-i2c 7000c700.i2c: I2C_PACKET_TRANSFER_STATUS - 0x10001
> [********] tegra-i2c 7000c700.i2c: I2C_FIFO_CONTROL - 0x1c
> [********] tegra-i2c 7000c700.i2c: I2C_FIFO_STATUS - 0x800040
> [********] tegra-i2c 7000c700.i2c: I2C_INT_MASK - 0x6c
> [********] tegra-i2c 7000c700.i2c: I2C_INT_STATUS - 0x2
> [********] tegra-i2c 7000c700.i2c: i2c transfer timed out addr: 0x50

So a few takeaways here:

  1. The custom carrier thinks HDMI is available, and, from what I can see in this post (I2C transfer timed out addr: 0x50) is complaining about not being able to perform an HDMI monitor query - probably because I have left the hot-plug-detection pins on the Jetson SoM floating. The two solutions I can think of to remedy this are:
    • Add pull-up resistors (to 1.8V) to pins 88 (DP0_HPD) and 96 (DP1_HPD).
    • Disable the display-controller nodes (dc@54200000 and dc@54240000) in the device-tree.
  2. On the custom carrier the kernel is complaining about the carrier board identification EEPROM (i2c@7000c500:module@0x57) not being found. I don’t know if this is really an issue though as after booting the kernel doesn’t seem to complain about it not being on the bus.

Before I continue to modify the device tree, could you please let me know if the solutions for 1. are the correct way to stop the HDMI issues and if I should be performing any modifications to stop the Jetson SoM looking for an EEPROM on the carrier board.

For 1, disabling the display controller node should work.

For 2, no need to worry about those error. They are not fatal to board functionality.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.