It’s mentioned in Jetson TX2 Update and Redundancy document that MB1 leaves information for slot A or slot B boot in that register for later MB2, CBoot or later stage loader to use.
How to access it? prefer in C code.
Thanks,
Jack
It’s mentioned in Jetson TX2 Update and Redundancy document that MB1 leaves information for slot A or slot B boot in that register for later MB2, CBoot or later stage loader to use.
How to access it? prefer in C code.
Thanks,
Jack
Tried to access the scratch 99 register in u-boot using ‘md’ command and it’s all 0.
The offset I got is (NV_ADDRESS_MAP_SCRATCH_BASE + SCRATCH_SCRATCH_99) == 0xC390ADC in u-boot memory space.
Am I missing something?
hello jack.hsia,
could you please share some backgrounds, may I know what’s your usage of accessing this scratch register?
you may refer to the documentation, Jetson AGX Xavier/TX2 Update and Redundancy to enable A/B redundancy.
thanks
The plan is to let uboot know which slot (A/B) booted from and track retry_count to take appropriate action.
Better still, if uboot can alter retry_count so that next reset will switch to slot.
Hi @JerryChang,
I’ve ported this code into uboot and it ‘tegrabl_get_boot_slot_reg()’ returns 0.
What do you think is the issue?
Can I get hold of ‘nvbootctrl’ and ‘nv_update_engine’ source code?
#ifndef _MK_ADDR_CONST
#define _MK_ADDR_CONST(_constant_) _constant_
#endif
#define NV_ADDRESS_MAP_SCRATCH_BASE 205062144
#define SCRATCH_SCRATCH_99 _MK_ADDR_CONST(0xadc)
#define NV_READ32(a) *((const volatile uint32_t *)(uintptr_t)(a))
uint32_t tegrabl_get_boot_slot_reg(void)
{
return NV_READ32(NV_ADDRESS_MAP_SCRATCH_BASE + SCRATCH_SCRATCH_99);
}
hello jack.hsia,
the function call to access SCRATCH_SCRATCH_99 address for the boot-slots looks correct. but it’s MB1 to select the boot slot, which is part of bpmp firmware. u-boot being the last bootloader process to load kernel images. please also check Jetson TX2 Boot Flow for reference.
you should also refer to Flashing U-Boot Only, please note that u-boot is flashed to the kernel partition and it’s also have A/B redundancy.
for example,
[ 86.0954 ] Writing partition kernel with boot_sigheader.img.encrypt
[ 86.1045 ] [................................................] 100%
[ 86.1261 ] Writing partition kernel_b with boot_sigheader.img.encrypt
[ 86.1373 ] [................................................] 100%
you may check Manually Modifying Boot Slots to enable get-current-slot option from the kernel side.
BTW,
there’s no plan to release the source code of “nvbootctrl” and also “nv_update_engine”.
thanks
@JerryChang how do we get/deduce NV_ADDRESS_MAP_SCRATCH_BASE and SCRATCH_SCRATCH_99?
Is it the same for TX2 and Xavier? I need both.
Hi @lfdm , did you manage to read/change the register value from u-boot or from the kernel? If yes, could you share the snippet please? Thank you
@AlexCo something messed up with NVidia accounts, I cannot recover my old one…
I didn’t. I started using the C-Boot only bootloader configuration you can find in the meta-tegra layer for yocto. With u-boot removed, I get the slot suffix from kernel arguments and handle the rootfs partition selection in initramfs.