Hello,
I am attempting to fuse a Jetson AGX Orin (32GB) using PKC (ECDSA P-256) and SBK with JetPack 6.2
I have prepared the following keys:
- PKC: ECDSA P-256
- SBK: 32-byte key
- OEM_K1: 32-byte key
Key Generation:
## PKC
openssl ecparam -name prime256v1 -genkey -noout -out ecp256.pem
./tegrasign_v3.py --pubkeyhash ecp256.pubkey ecp256.hash --key ecp256.pem
# SBK (Converted to 8-word format)
openssl rand -hex 32 | ./convert_8words.sh > sbk-32.key
# OEM_K1
openssl rand -hex 32 > oemk1.key
fuse_orin.xml
<genericfuse MagicId="0x45535546" version="1.0.0">
<fuse name="OemK1" size="32" value="0x34af...890a"/>
<fuse name="PublicKeyHash" size="64" value="0x567a...9876"/>
<fuse name="SecureBootKey" size="32" value="0xe3f4...1a2b"/>
<fuse name="BootSecurityInfo" size="4" value="0x20a"/>
<fuse name="SecurityMode" size="4" value="0x1"/>
<fuse name="ArmJtagDisable" size="4" value="0x1"/>
</genericfuse>
Issue Description:
Fusing was successful on some Orin units, but failed on a new batch of devices. I noticed the new devices already had BootSecurityInfo set to 0x1e0 by default (checked via nv_fuse_read.sh), while my previous XML used 0x20a.
According to nv_fuse_read.sh, the current fuse values are:
- boot_security_info: 0x000001e0
- public_key_hash: 0x567a…9876
- ecid: 0x9378…9875
All other fields (including security_mode, odm_lock, pk_h1, and reserved_odm0~7) remain at zero.
To account for the existing bits, I updated BootSecurityInfo to 0x3ea (0x1e0 | 0x20a).
Attempt 1: Fusing with OemK1, PKC, SBK, and BootSecurityInfo
New xml file:
<genericfuse MagicId="0x45535546" version="1.0.0">
<fuse name="OemK1" size="32" value="0x34af...890a"/>
<fuse name="PublicKeyHash" size="64" value="0x567a...9876"/>
<fuse name="SecureBootKey" size="32" value="0xe3f4...1a2b"/>
<fuse name="BootSecurityInfo" size="4" value="0x3ea"/>
</genericfuse>
When I ran the following commands:
./odmfuse.sh --noburn --auth NS -i 0x23 -k ecp256.pem -S sbk-32.key -X fuse_orin.xml jetson-agx-orin-devkit
tar xpf fuseblob.tbz2 && cd bootloader/
./fusecmd.sh
I encountered the following errors:
I> FSKP (version: 0.0.0.0-t234-54845784-33c9168e)
I> t234-A01-1-Silicon (0x12347)
I> Emulation:
I> Entry timestamp: 0x020536aa
I> Regular heap: [base:0x40040000, size:0x10000]
I> DMA heap: [base:0x82e000000, size:0x800000]
I> Task: Crypto init
I> Task: Program CBB PCIE AMAP regions
I> Task: Burn fuses
I> Index : 1 OemK1 size: 32
I> Index : 2 PublicKeyHash size: 64
I> Index : 3 SecureBootKey size: 32
I> Index : 4 BootSecurityInfo size: 4
I> Fuse Blob found
I>
I> Burning fuses
I> 1. Start OemK1 burn
E> FUSE: Failed to burn fuse addr: 0x316.
E> FUSE: Could not write Fuse: 0x6a.
E> FUSE: Could not write Fuse: 0x6a.
E> FUSE: Failed burn fuses as per fuse info.
E> FSKP: Failed to burn fuses.
C> Task 0x0 failed (err: 0x62170302)
E> Top caller module: FSKP, error module: FUSE, reason: 0x02, aux_info: 0x03
I> Busy Spin
nv_fuse_read.sh showed no change in the results.
Attempt 2: Fusing only BootSecurityInfo
I updated the XML to only include BootSecurityInfo (0x3ea).
fuse_orin.xml:
<genericfuse MagicId="0x45535546" version="1.0.0">
<fuse name="BootSecurityInfo" size="4" value="0x3ea"/>
</genericfuse>
This time, the burn reported success
I> FSKP (version: 0.0.0.0-t234-54845784-33c9168e)
I> t234-A01-1-Silicon (0x12347)
I> Emulation:
I> Entry timestamp: 0x022481b6
I> Regular heap: [base:0x40040000, size:0x10000]
I> DMA heap: [base:0x82e000000, size:0x800000]
I> Task: Crypto init
I> Task: Program CBB PCIE AMAP regions
I> Task: Burn fuses
I> Index : 1 BootSecurityInfo size: 4
I> Fuse Blob found
I>
I> Burning fuses
I> 1. Start BootSecurityInfo burn
I> 1. BootSecurityInfo burnt successfully
W> No handling of CRC-32 for BootSecurityInfo
I>
I> Successfully burnt fuses as per fuse info
I> Index : 1 BootSecurityInfo size: 4
I> Fuse Blob found
I> No RPMB provisioning details is found. Skip RPMB Provisioning.
I> FSKP finished
But when I tried to flash with the following commands
# sudo ROOTFS_ENC=1 ./flash.sh --generic-passphrase --no-flash -i sym2_t234.key -u ecp256.pem -v sbk-32.key --uefi-keys uefi_keys/uefi_keys.conf --uefi-enc sym_t234.key jetson-agx-orin-devkit mmcblk0p1
# bash ./flashcmd.txt
I encountered an error during flashing
...
[ 0.0235 ] tegrarcm_v2 --new_session --chip 0x23 0 --uid --download bct_br br_bct_BR.bct --download mb1 mb1_t234_prod_aligned_sigheader_encrypt.bin.signed --download psc_bl1 psc_bl1_t234_prod_aligned_sigheader_encrypt.bin.signed --download bct_mb1 mb1_bct_MB1_sigheader_encrypt.bct.signed
[ 0.0244 ] BR_CID: 0xAA012344705DF6513000000019020140
[ 0.0476 ] Sending bct_br
[ 0.0768 ] Sending mb1
[ 0.0777 ] ERROR: might be timeout in USB write.
Error: Return value 3
Command tegrarcm_v2 --new_session --chip 0x23 0 --uid --download bct_br br_bct_BR.bct --download mb1 mb1_t234_prod_aligned_sigheader_encrypt.bin.signed --download psc_bl1 psc_bl1_t234_prod_aligned_sigheader_encrypt.bin.signed --download bct_mb1 mb1_bct_MB1_sigheader_encrypt.bct.signed
And when I try to read fuse info with keys
./odmfuseread.sh -i 0x23 -k ecp256.pem -S sbk-32.key jetson-agx-orin-devkit
I encountered the following error
. . .
[ 0.4373 ] tegrarcm_v2 --new_session --chip 0x23 0 --uid --download bct_br br_bct_BR.bct --download mb1 mb1_t234_prod_aligned_sigheader_encrypt.bin.signed --download psc_bl1 psc_bl1_t234_prod_aligned_sigheader_encrypt.bin.signed --download bct_mb1 mb1_bct_MB1_sigheader_encrypt.bct
[ 0.4382 ] BR_CID: 0xAA012344705DF6513000000019020140
[ 0.4608 ] Sending bct_br
[ 0.4902 ] Sending mb1
[ 0.4909 ] ERROR: might be timeout in USB write.
Error: Return value 3
[ 0.5091 ] File tmp.bct open failed
Error: Return value 19
Command tegrabct_v2 --brbct tmp.bct --chip 0x23 0 --custinfo /home/nvidia/nvidia/nvidia_sdk/JetPack_6.2_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/bootloader/custinfo_out.bin
Reading board information failed.
Questions:
- What is causing this failure? I did not encounter any issues during the fuse and flash process with the Orin models released last year (BootSecurityInfo=0x0)
- Is there something wrong with my procedure?
- How can I successfully flash this board while it is in this partially-fused state?
Any insights or guidance would be greatly appreciated!
Thank you