Hello,
I need help burning fuses after an unsuccessful attempt left my board with partially burned fuses.
The issue that caused the partially burned state is that the BootSecurityInfo fuse had an initial value of 0x1e0.
From what I gathered the bits set are reserved bits and do not to anything. But my fuse.xml configuration had
attempted to add the value of 0x209 to this fuse. Resulting in the “trying to turn 1 into 0” error, and the fuse process being stopped.
Note that this was not reported by the odmfuse.sh script as an error! The error was only observed on serial.
After the failed attempt the odmfuseread.sh reports the following values:
PublicKeyHash: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(my key hash)
BootSecurityInfo: 000001e0
ArmJtagDisable: 00000000
SecurityMode: 00000000
SwReserved: 00000000
DebugAuthentication: 00000000
OdmId: 0000000000000000
OdmLock: 00000000
ReservedOdm0: 00000000
ReservedOdm1: 00000000
ReservedOdm2: 00000000
ReservedOdm3: 00000000
ReservedOdm4: 00000000
ReservedOdm5: 00000000
ReservedOdm6: 00000000
ReservedOdm7: 00000000
Looks like only the PublicKey was fused.
Seeing that the production mode is not set. Fuses should still be burnable?
After fixing the value to 0x3e9(0x209 | 0x1e0). The --test command looks good on serial
sudo ./odmfuse.sh --test -i 0x23 -X fuse.xml jetson-orin-nano-devkit
Last part of serial output:
I> Burning fuses
I> 1. Start PublicKeyHash burn
I> Fuse is already burned with the same value
I> 1. PublicKeyHash burnt successfully
I>
I> 2. Start SecureBootKey burn
I> Dry run detected, returning now.
I> 2. SecureBootKey burnt successfully
I>
I> 3. Start PscOdmStatic burn
I> Dry run detected, returning now.
I> 3. PscOdmStatic burnt successfully
I>
I> 4. Start OemK1 burn
I> Dry run detected, returning now.
I> 4. OemK1 burnt successfully
I>
I> 5. Start OemK2 burn
I> Dry run detected, returning now.
I> 5. OemK2 burnt successfully
I>
I> 6. Start BootSecurityInfo burn
I> Dry run detected, returning now.
I> 6. BootSecurityInfo burnt successfully
I>
I> Successfully burnt fuses as per fuse info
I> Index : 1 PublicKeyHash size: 64
I> Index : 2 SecureBootKey size: 32
I> Index : 3 PscOdmStatic size: 4
I> Index : 4 OemK1 size: 32
I> Index : 5 OemK2 size: 32
I> Index : 6 BootSecurityInfo size: 4
I> Index : 7 SecurityMode size: 4
I> Fuse Blob found
I> No RPMB provisioning details is found. Skip RPMB Provisioning.
I> FSKP finished
But the real fuse commad fails! Again, this is only observable on serial odmfuse.sh does not return an error!
sudo ./odmfuse.sh -i 0x23 -X fuse.xml jetson-orin-nano-devkit
serial output:
I> Burning fuses
I> 1. Start PublicKeyHash burn
I> Fuse is already burned with the same value
I> 1. PublicKeyHash burnt successfully
I>
I> 2. Start SecureBootKey burn
E> Fuse burn failed
E> error = 0x17173002 in fuse_burn
E> Error = 0x17173002 in tegrabl_fuse_write
E> 2. Failed to burn SecureBootKey
E> Failed to burn fuses as per fuse info
E> FSKP: Failed to burn fuses.
C> Task 0x0 failed (err: 0x62173002)
E> Top caller module: FSKP, error module: FUSE, reason: 0x02, aux_info: 0x30
I> Busy Spin
Since the production mode fuse is not burned, why is it that this fails? We have 6 affected systems now because of this error and would like to fuse them properly in order for our security features to work.
Also, why did our systems come with fuse values being nonzero?
Please advise,
Thank you