On Tue, Jan 07, 2025 at 12:17:03PM +0100, Ahmad Fatoum wrote: > Thanks for the follow-up. Of course, my pleasure :) I used "pio device monitor" from platformio and added a custom filter searching for ">" in the reveived stream and if true adds seconds.microseconds timestamp. With this: diff --git a/arch/arm/boards/beaglebone/lowlevel.c b/arch/arm/boards/beaglebone/lowlevel.c index 5dc49dfaaf..db1c464a27 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. * @@ -111,6 +117,8 @@ static noinline int beaglebone_sram_init(void) uint32_t sdram_size; void *fdt; + int k; + fdt = __dtb_z_am335x_bone_common_start; if (is_beaglebone_black()) @@ -134,6 +142,11 @@ static noinline int beaglebone_sram_init(void) am33xx_uart_soft_reset((void *)AM33XX_UART0_BASE); am33xx_enable_uart0_pin_mux(); omap_debug_ll_init(); + + putc_ll('>'); + for (k = 0; k < 1000; k++) { + __udelay(1000); + } putc_ll('>'); barebox_arm_entry(0x80000000, sdram_size, fdt); This gives me this: 44.412429 > 46.284478 > If I calculated correct this are 1.8 seconds. So without the surrounding 1000 loop this final result here: diff --git a/arch/arm/boards/beaglebone/lowlevel.c b/arch/arm/boards/beaglebone/lowlevel.c index 5dc49dfaaf..ccae1d1122 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. * @@ -135,6 +141,7 @@ static noinline int beaglebone_sram_init(void) am33xx_enable_uart0_pin_mux(); omap_debug_ll_init(); putc_ll('>'); + __udelay(1000); // Adding delay of 1.8ms barebox_arm_entry(0x80000000, sdram_size, fdt); } Should add a delay of 1.8ms. Is this feasible? > If it's indeed just a millisecond, I am in favor of adding this to > barebox upstream with a comment explaining what this fixes, even > if we don't fully understand it yet. Yes, I agree to the not fully yet understood part. What me holds back from lowering the speed is the following: I went into production with the final result part above and reflashe all our BBB devices which failed warm start without the additional delay and all passed 100% flawlessly after the modficication. So it is tested upon roughly 30 devices which failed before. Kind Regards Konstantin -- INSIDE M2M GmbH Konstantin Kletschke Berenbosteler Straße 76 B 30823 Garbsen Telefon: +49 (0) 5137 90950136 Mobil: +49 (0) 151 15256238 Fax: +49 (0) 5137 9095010 konstantin.kletschke@xxxxxxxxxxxxx http://www.inside-m2m.de Geschäftsführung: Michael Emmert, Derek Uhlig HRB: 111204, AG Hannover