I’m trying to follow the instructions from Enabling AGX Orin, Orin NX, and Orin Nano in USB3 Recovery Mode but I don’t have the suggested Factory Secure Key Provisioning tool. It is no where to be found and our Arrow Electronics / NVIDIA contact is asking for public cert for signing but there’s a misunderstanding. To my understanding we just need to set bit 7 of FUSE_RESERVED_SW_0 and whatever else is required to work with it (bits 8 and 11 of BootDevInfo or FUSE_BOOT_DEVICE_INFO_0?).
We are not looking to burn any other fuses and do not want to lock down the AGX with any encryption. So far I’ve tried reading and writing to a devkit using the included odmfuseread.sh and odmfuse.sh scripts included with JP 36.4.
I’ve modified the odmfuse.func to also read BootDevInfo by adding it to line 58:
FUSES_MANUFACTURING_T234=("BootSecurityInfo" "ArmJtagDisable" "SecurityMode" "SwReserve d" "DebugAuthentication" "OdmId" "BootDevInfo");
Reading the fresh module shows:
Fuse reading is done. The fuse values have been saved in: /home/acs/git/turret-vision/jetson_flashing/bf_motherboard_v2/Linux_for_Tegra/bootloader/fuse_info.txt
PublicKeyHash: 34faf07ef705737b635f8518fb937240468135e78ba6971689ce2f5b5b1a8e62263bce8e8a484e6c25a10d05b0a9e5d003614bf2543ce490c002845585efa164
BootSecurityInfo: 000001e0
ArmJtagDisable: 00000000
SecurityMode: 00000000
SwReserved: 00000000
DebugAuthentication: 00000000
OdmId: 0000000000000000
BootDevInfo: 00000000
OdmLock: 00000000
ReservedOdm0: 00000000
ReservedOdm1: 00000000
ReservedOdm2: 00000000
ReservedOdm3: 00000000
ReservedOdm4: 00000000
ReservedOdm5: 00000000
ReservedOdm6: 00000000
ReservedOdm7: 00000000
I then tried to burn the module with sudo ./odmfuse.sh -i 0x23 -r 0x80 jetson-agx-orin-devkit and host showed it completed successfully. I did not capture the AGX UART log from it at the time.
However, running the same read command as above to read back the fuses shows SwReserved: 00000008 instead of exectedSwReserved: 00000080
Trying to rerun the same write command shows this on the host:
(standard_in) 1: syntax error
SwReserved: you can't reset bits from 1 to 0. You're changing 0x8 to 0x80.
I then tried to write again but with the overlapping bit set using sudo ./odmfuse.sh -i 0x23 -r 0x88 jetson-agx-orin-devkit:
[0007.885] I> Task: Disable SCPM/POD reset
[0007.889] I> SLCG Global override status := 0x0
[0007.894] I> MB1: MSS reconfig completed
I> FSKP (version: 0.0.0.0-t234-54845784-33c9168e)
I> t234-A01-1-Silicon (0x12347)
I> Emulation:
I> Entry timestamp: 0x0078e96b
I> Regular heap: [base:0x40040000, size:0x10000]
I> DMA heap: [base:0x102e000000, size:0x800000]
I> Task: Crypto init
I> Task: Program CBB PCIE AMAP regions
I> Task: Burn fuses
I> Index : 1 SwReserved size: 4
I> Fuse Blob found
I>
I> Burning fuses
I> 1. Start SwReserved burn
E> FUSE: Failed to burn fuse addr: 0xc5.
E> FUSE: Could not write Fuse: 0x2c.
E> FUSE: Could not write Fuse: 0x2c.
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