I found the minimum change required to make barebox warm restart every time I hot S1, write warm restart register, type reset or linux kernel reboot. I needed to figure out to realize in my yocto the MLO stage is another package to test my changes in this vanilla defconfig part carefully. My barebox-pbl stage package calls the defconfig am335x_mlo_defconfig, I apply only this patch on top on my 2022.04 version: diff --git a/arch/arm/boards/beaglebone/lowlevel.c b/arch/arm/boards/beaglebone/lowlevel.c index 544e396e03..329d7a9150 100644 --- a/arch/arm/boards/beaglebone/lowlevel.c +++ b/arch/arm/boards/beaglebone/lowlevel.c @@ -97,6 +97,12 @@ extern char __dtb_z_am335x_boneblack_start[]; extern char __dtb_z_am335x_bone_common_start[]; extern char __dtb_z_am335x_bone_start[]; +static void __udelay(int us) +{ + volatile int i; + for (i = 0; i < us * 3; i++); +} + /** * @brief The basic entry point for board initialization. * @@ -142,6 +148,7 @@ static noinline int beaglebone_sram_init(void) omap_uart_lowlevel_init((void *)AM33XX_UART0_BASE); putc_ll('>'); + __udelay(1000); barebox_arm_entry(0x80000000, sdram_size, fdt); } This delay loop (side quest: how do I calculate how long it waits?) on its own with no changes in CONFIG or debugging or whatsoever fixes everything. Regards Konstantin