Problem with fuse burning

Do you have anything to say about my other questions regarding the odmfuseread.sh script?

Are you able to successfully read the fuses with this script?

I did try changing the cvb_eeprom_read_size parameter in the L4T DTS file, but it didn’t change anything. I don’t think odmfuseread.sh actually compiles this file.

Is there a .dtb file in L4T I can replace with the DTB file from my (working) Linux image? Would that make the script work?

hello david_charlap,

yes, odmfuseread.sh should be able to read fuse from SBKPKC Orin target.
anyways, you may have an alternative ways to read fuse variable with flash script, there’s --read-info options for the same purpose.
for instance, $ sudo ./flash.sh --read-info -u <pkc> -v <sbk> <target_conf> <rootdev>

Thanks. That worked:

# sudo ./flash.sh --read-info -u .../rsakey_priv.pem jetson-orin-nano-devkit-nvme nvme0n1p1
###############################################################################
# L4T BSP Information:
# R36 , REVISION: 5.0
# User release: 0.0
###############################################################################
ECID is 0x81012344705DF888180000000E008180
# Target Board Information:
# Name: jetson-orin-nano-devkit-nvme, Board Family: generic, SoC: Tegra 234, 
# OpMode: production, Boot Authentication: PKC, 
# Disk encryption: disabled ,
###############################################################################
...
Board ID(3767) version(301) sku(0004) revision(H.1)
Preset RAMCODE is 5
Chip SKU(00:00:00:D6) ramcode(5) fuselevel(fuselevel_production) board_FAB(301)
ECID is 0x81012344705DF888180000000E008180

==== Fuse Info (.../Linux_for_Tegra/bootloader/fuse_t234.bin) ====
PublicKeyHash: ebcc1285bea9e89c53001920ca1ad2e72b6410ceba0ede5588016c8592b676e2c9a916ed936783924ddebadf56f165394855ef777dd7f680452a1e2aedcc1959
PkcPubkeyHash1: 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
PkcPubkeyHash2: 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
BootSecurityInfo: 000001e1
ArmJtagDisable: 00000000
SecurityMode: 00000000
SwReserved: 00000000
DebugAuthentication: 00000000
OdmInfo: 00000000
OdmId: 0000000000000000
OdmLock: 00000000
ReservedOdm0: 00000000
ReservedOdm1: 00000000
ReservedOdm2: 00000000
ReservedOdm3: 00000000
ReservedOdm4: 00000000
ReservedOdm5: 00000000
ReservedOdm6: 00000000
ReservedOdm7: 00000000
Sku: 000000d6
Uid: 8081000e0000001888f85d7004000000
OptEmcDisable: 0000000c

==== EEPROM content (.../Linux_for_Tegra/bootloader/cvm.bin) ====
00000000: 02 00 fe 00 00 00 00 00 00 00 00 ff 00 00 00 00  ................
00000010: 00 01 00 01 36 39 39 2d 31 33 37 36 37 2d 30 30  ....699-13767-00
00000020: 30 34 2d 33 30 31 20 48 2e 31 00 00 00 00 00 00  04-301 H.1......
00000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000040: b0 48 00 00 3b db c3 66 6d 3c 31 34 32 32 36 32  .H..;..fm<142262
00000050: 35 30 33 30 39 36 31 00 00 00 00 00 00 00 00 00  5030961.........
00000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000090: 00 00 00 00 00 00 4e 56 43 42 00 ff 4d 31 00 00  ......NVCB..M1..
000000a0: 00 00 00 00 00 00 00 00 00 00 00 00 3b db c3 66  ............;..f
000000b0: 6d 3c 01 00 00 00 00 00 00 00 00 00 00 00 00 00  m<..............
000000c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000000d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000000e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000000f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 83  ................

I still would love to know what I need to do to make odmfuseread.sh work.

hello david_charlap,

odmfuseread.sh script should works in the early JP-6 release (r36.3, etc.)
anyways, please consider it’s deprecated, you should read fuse variable with flash script now.

Thanks. I think that solves my problems, as best as is possible at this time. Here’s a quick summary of the answers:

  • We should only use RSA3K keys for the PKC key. Although ECDSA is documented, and it appears to work during the flashing process, the result is a module that can not be updated further.

    It is unknown at this time if this is due to a bug in the module, a bug in the module’s firmware or a bug in the Linux tools.

  • The odmfuseread.sh script does not work once fuses have been burned. It appears to work OK when nothing has been burned, and it might work for an NVIDIA developer kit, but it fails when used with a custom carrier board and/or a Yocto-generted firmware image.

  • The flash.sh script, with the --read-info option can be used to read fuses.. This worked for me:

    sudo ./flash.sh --read-info -u .../rsakey_priv.pem jetson-orin-nano-devkit-nvme nvme0n1p1