]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
common: board_r: rework BOOT LED handling
authorChristian Marangi <ansuelsmth@gmail.com>
Tue, 1 Oct 2024 12:24:37 +0000 (14:24 +0200)
committerTom Rini <trini@konsulko.com>
Thu, 10 Oct 2024 22:02:20 +0000 (16:02 -0600)
Rework BOOT LED handling. There is currently one legacy implementation
for BOOT LED from Status Led API.

This work on ancient implementation used by BOOTP by setting the LED
to Blink on boot and to turn it OFF when the firmware was correctly
received by network.

Now that we new LED implementation have support for LED boot, rework
this by also set the new BOOT LED to blink and also set it to ON before
entering main loop to confirm successful boot.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
common/board_r.c
include/status_led.h

index 4faaa202421abe3fda9f251f1e1c356108ef672f..1acad069d929b045625778a3ebbd0dc60776e1f3 100644 (file)
@@ -40,6 +40,7 @@
 #include <initcall.h>
 #include <kgdb.h>
 #include <irq_func.h>
+#include <led.h>
 #include <malloc.h>
 #include <mapmem.h>
 #include <miiphy.h>
@@ -460,17 +461,28 @@ static int initr_malloc_bootparams(void)
 }
 #endif
 
-#if defined(CONFIG_LED_STATUS)
 static int initr_status_led(void)
 {
-#if defined(CONFIG_LED_STATUS_BOOT)
-       status_led_set(CONFIG_LED_STATUS_BOOT, CONFIG_LED_STATUS_BLINKING);
-#else
        status_led_init();
-#endif
+
+       return 0;
+}
+
+static int initr_boot_led_blink(void)
+{
+       status_led_boot_blink();
+
+       led_boot_blink();
+
+       return 0;
+}
+
+static int initr_boot_led_on(void)
+{
+       led_boot_on();
+
        return 0;
 }
-#endif
 
 #ifdef CONFIG_CMD_NET
 static int initr_net(void)
@@ -725,9 +737,8 @@ static init_fnc_t init_sequence_r[] = {
 #if defined(CONFIG_MICROBLAZE) || defined(CONFIG_M68K)
        timer_init,             /* initialize timer */
 #endif
-#if defined(CONFIG_LED_STATUS)
        initr_status_led,
-#endif
+       initr_boot_led_blink,
        /* PPC has a udelay(20) here dating from 2002. Why? */
 #ifdef CONFIG_BOARD_LATE_INIT
        board_late_init,
@@ -750,6 +761,7 @@ static init_fnc_t init_sequence_r[] = {
 #if defined(CFG_PRAM)
        initr_mem,
 #endif
+       initr_boot_led_on,
        run_main_loop,
 };
 
index 6707ab1d29d214c8ea273fb69dbadb3ad7054e3a..1282022253e88d4401cfc3dcbcfffb13fd5545e5 100644 (file)
@@ -39,6 +39,13 @@ void status_led_init(void);
 void status_led_tick(unsigned long timestamp);
 void status_led_set(int led, int state);
 
+static inline void status_led_boot_blink(void)
+{
+#ifdef CONFIG_LED_STATUS_BOOT_ENABLE
+       status_led_set(CONFIG_LED_STATUS_BOOT, CONFIG_LED_STATUS_BLINKING);
+#endif
+}
+
 /*****  MVS v1  **********************************************************/
 #if (defined(CONFIG_MVS) && CONFIG_MVS < 2)
 # define STATUS_LED_PAR                im_ioport.iop_pdpar
@@ -72,6 +79,12 @@ void __led_blink(led_id_t mask, int freq);
 # include <asm/status_led.h>
 #endif
 
+#else
+
+static inline void status_led_init(void) { }
+static inline void status_led_set(int led, int state) { }
+static inline void status_led_boot_blink(void) { }
+
 #endif /* CONFIG_LED_STATUS    */
 
 /*