Reset on Beaglebone Black has become unreliable/broken
Konstantin Kletschke
konstantin.kletschke at inside-m2m.de
Fri Dec 20 03:05:37 PST 2024
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
More information about the barebox
mailing list