public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [PATCH v3 0/3] fwu: Call EFI stack initialization after preboot
@ 2026-04-01  6:03 Michal Simek
  2026-04-01  6:03 ` [PATCH v3 1/3] event: Check return value from event_notify_null() Michal Simek
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Michal Simek @ 2026-04-01  6:03 UTC (permalink / raw)
  To: u-boot, git, xypron.glpk, ilias.apalodimas, sjg
  Cc: Casey Connolly, Kory Maincent, Marek Vasut, Padmarao Begari,
	Quentin Schulz, Sughosh Ganu, Tom Rini, Weijie Gao

Hi,

the whole series is trying to address issues we have on platforms where usb
and ufs init are not done before efi initialization. This is happening on
platforms where A/B update is enabled. FWU code is called early and do EFI
initialization before usb and ufs started that's why they are not visible.

We are workarounding it by starting usb/ufs from board file but this should
be more generic approach.

Thanks,
Michal

Changes in v3:
- add missing type_name extension

Changes in v2:
- new patch in series
- check return value

Michal Simek (3):
  event: Check return value from event_notify_null()
  event: Introduce EVT_POST_PREBOOT event
  fwu: Move boottime checks to EVT_POST_PREBOOT

 common/board_r.c      | 6 +++++-
 common/event.c        | 3 +++
 common/main.c         | 4 ++++
 include/event.h       | 9 +++++++++
 lib/fwu_updates/fwu.c | 2 +-
 test/dm/fwu_mdata.c   | 4 ++--
 6 files changed, 24 insertions(+), 4 deletions(-)

-- 
2.43.0

base-commit: 0da1866a8fdd4d4bc4837ef2af281dbe010ae16b
branch: debian-sent3

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH v3 1/3] event: Check return value from event_notify_null()
  2026-04-01  6:03 [PATCH v3 0/3] fwu: Call EFI stack initialization after preboot Michal Simek
@ 2026-04-01  6:03 ` Michal Simek
  2026-04-01  6:54   ` Ilias Apalodimas
  2026-04-01 20:24   ` [v3,1/3] " Simon Glass
  2026-04-01  6:03 ` [PATCH v3 2/3] event: Introduce EVT_POST_PREBOOT event Michal Simek
  2026-04-01  6:03 ` [PATCH v3 3/3] fwu: Move boottime checks to EVT_POST_PREBOOT Michal Simek
  2 siblings, 2 replies; 9+ messages in thread
From: Michal Simek @ 2026-04-01  6:03 UTC (permalink / raw)
  To: u-boot, git, xypron.glpk, ilias.apalodimas, sjg
  Cc: Marek Vasut, Quentin Schulz, Tom Rini, Weijie Gao

event_notify_null() returns int but its return value is not
checked in run_main_loop() and in fwu_mdata tests.
Add proper error checking to all unchecked call sites.

Signed-off-by: Michal Simek <michal.simek@amd.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
---

(no changes since v2)

Changes in v2:
- new patch in series

 common/board_r.c    | 6 +++++-
 test/dm/fwu_mdata.c | 4 ++--
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/common/board_r.c b/common/board_r.c
index 8cf0e14679c0..5d37345ca09d 100644
--- a/common/board_r.c
+++ b/common/board_r.c
@@ -569,11 +569,15 @@ static int dm_announce(void)
 
 static int run_main_loop(void)
 {
+	int ret;
+
 #ifdef CONFIG_SANDBOX
 	sandbox_main_loop_init();
 #endif
 
-	event_notify_null(EVT_MAIN_LOOP);
+	ret = event_notify_null(EVT_MAIN_LOOP);
+	if (ret)
+		return ret;
 
 	/* main_loop() can return to retry autoboot, if so just run it again */
 	for (;;)
diff --git a/test/dm/fwu_mdata.c b/test/dm/fwu_mdata.c
index b7680632f95f..643b647af0a9 100644
--- a/test/dm/fwu_mdata.c
+++ b/test/dm/fwu_mdata.c
@@ -100,7 +100,7 @@ static int dm_test_fwu_mdata_read(struct unit_test_state *uts)
 	 * Trigger lib/fwu_updates/fwu.c fwu_boottime_checks()
 	 * to populate g_dev global pointer in that library.
 	 */
-	event_notify_null(EVT_MAIN_LOOP);
+	ut_assertok(event_notify_null(EVT_MAIN_LOOP));
 
 	ut_assertok(uclass_first_device_err(UCLASS_FWU_MDATA, &dev));
 	ut_assertok(fwu_init());
@@ -127,7 +127,7 @@ static int dm_test_fwu_mdata_write(struct unit_test_state *uts)
 	 * Trigger lib/fwu_updates/fwu.c fwu_boottime_checks()
 	 * to populate g_dev global pointer in that library.
 	 */
-	event_notify_null(EVT_MAIN_LOOP);
+	ut_assertok(event_notify_null(EVT_MAIN_LOOP));
 
 	ut_assertok(uclass_first_device_err(UCLASS_FWU_MDATA, &dev));
 
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v3 2/3] event: Introduce EVT_POST_PREBOOT event
  2026-04-01  6:03 [PATCH v3 0/3] fwu: Call EFI stack initialization after preboot Michal Simek
  2026-04-01  6:03 ` [PATCH v3 1/3] event: Check return value from event_notify_null() Michal Simek
@ 2026-04-01  6:03 ` Michal Simek
  2026-04-01  6:54   ` Ilias Apalodimas
  2026-04-01 20:24   ` [v3,2/3] " Simon Glass
  2026-04-01  6:03 ` [PATCH v3 3/3] fwu: Move boottime checks to EVT_POST_PREBOOT Michal Simek
  2 siblings, 2 replies; 9+ messages in thread
From: Michal Simek @ 2026-04-01  6:03 UTC (permalink / raw)
  To: u-boot, git, xypron.glpk, ilias.apalodimas, sjg; +Cc: Casey Connolly, Tom Rini

Add a new EVT_POST_PREBOOT event type which is fired in main_loop()
after the preboot command has been executed.

Signed-off-by: Michal Simek <michal.simek@amd.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
---

Changes in v3:
- add missing type_name extension

Changes in v2:
- check return value

 common/event.c  | 3 +++
 common/main.c   | 4 ++++
 include/event.h | 9 +++++++++
 3 files changed, 16 insertions(+)

diff --git a/common/event.c b/common/event.c
index 8d7513eb10b6..398e713d2f82 100644
--- a/common/event.c
+++ b/common/event.c
@@ -49,6 +49,9 @@ const char *const type_name[] = {
 	/* main loop events */
 	"main_loop",
 
+	/* post preboot events */
+	"post_preboot",
+
 	/* livetree has been built */
 	"of_live_init",
 };
diff --git a/common/main.c b/common/main.c
index b0b6e74f5d3d..4b4504557f6e 100644
--- a/common/main.c
+++ b/common/main.c
@@ -19,6 +19,7 @@
 #include <net.h>
 #include <version_string.h>
 #include <efi_loader.h>
+#include <event.h>
 
 static void run_preboot_environment_command(void)
 {
@@ -53,6 +54,9 @@ void main_loop(void)
 	if (IS_ENABLED(CONFIG_USE_PREBOOT))
 		run_preboot_environment_command();
 
+	if (event_notify_null(EVT_POST_PREBOOT))
+		return;
+
 	if (IS_ENABLED(CONFIG_UPDATE_TFTP))
 		update_tftp(0UL, NULL, NULL);
 
diff --git a/include/event.h b/include/event.h
index 1d267f1d1054..3ce5f992b04e 100644
--- a/include/event.h
+++ b/include/event.h
@@ -153,6 +153,15 @@ enum event_t {
 	 */
 	EVT_MAIN_LOOP,
 
+	/**
+	 * @EVT_POST_PREBOOT:
+	 * This event is triggered in main_loop() after the preboot command
+	 * has run, so that devices initialised by preboot (e.g. USB, UFS)
+	 * are available to event handlers. Its parameter is NULL.
+	 * A non-zero return value causes the boot to fail.
+	 */
+	EVT_POST_PREBOOT,
+
 	/**
 	 * @EVT_OF_LIVE_BUILT:
 	 * This event is triggered immediately after the live device tree has been
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v3 3/3] fwu: Move boottime checks to EVT_POST_PREBOOT
  2026-04-01  6:03 [PATCH v3 0/3] fwu: Call EFI stack initialization after preboot Michal Simek
  2026-04-01  6:03 ` [PATCH v3 1/3] event: Check return value from event_notify_null() Michal Simek
  2026-04-01  6:03 ` [PATCH v3 2/3] event: Introduce EVT_POST_PREBOOT event Michal Simek
@ 2026-04-01  6:03 ` Michal Simek
  2026-04-01 20:25   ` [v3,3/3] " Simon Glass
  2 siblings, 1 reply; 9+ messages in thread
From: Michal Simek @ 2026-04-01  6:03 UTC (permalink / raw)
  To: u-boot, git, xypron.glpk, ilias.apalodimas, sjg
  Cc: Kory Maincent, Padmarao Begari, Sughosh Ganu, Tom Rini

Switch fwu_boottime_checks() from EVT_MAIN_LOOP to EVT_POST_PREBOOT
because there is no reason to call FWU so early. FWU triggers EFI
stack initialization before all devices are visible which prevents
the EFI stack from scanning these devices and adding them to EFI
variables.

Signed-off-by: Michal Simek <michal.simek@amd.com>
---

(no changes since v1)

 lib/fwu_updates/fwu.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/fwu_updates/fwu.c b/lib/fwu_updates/fwu.c
index 37c613014d18..e82600a29a40 100644
--- a/lib/fwu_updates/fwu.c
+++ b/lib/fwu_updates/fwu.c
@@ -796,4 +796,4 @@ static int fwu_boottime_checks(void)
 
 	return 0;
 }
-EVENT_SPY_SIMPLE(EVT_MAIN_LOOP, fwu_boottime_checks);
+EVENT_SPY_SIMPLE(EVT_POST_PREBOOT, fwu_boottime_checks);
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 1/3] event: Check return value from event_notify_null()
  2026-04-01  6:03 ` [PATCH v3 1/3] event: Check return value from event_notify_null() Michal Simek
@ 2026-04-01  6:54   ` Ilias Apalodimas
  2026-04-01 20:24   ` [v3,1/3] " Simon Glass
  1 sibling, 0 replies; 9+ messages in thread
From: Ilias Apalodimas @ 2026-04-01  6:54 UTC (permalink / raw)
  To: Michal Simek
  Cc: u-boot, git, xypron.glpk, sjg, Marek Vasut, Quentin Schulz,
	Tom Rini, Weijie Gao

On Wed, 1 Apr 2026 at 09:04, Michal Simek <michal.simek@amd.com> wrote:
>
> event_notify_null() returns int but its return value is not
> checked in run_main_loop() and in fwu_mdata tests.
> Add proper error checking to all unchecked call sites.
>
> Signed-off-by: Michal Simek <michal.simek@amd.com>
> Reviewed-by: Simon Glass <sjg@chromium.org>
> ---
>

Acked-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>

> (no changes since v2)
>
> Changes in v2:
> - new patch in series
>
>  common/board_r.c    | 6 +++++-
>  test/dm/fwu_mdata.c | 4 ++--
>  2 files changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/common/board_r.c b/common/board_r.c
> index 8cf0e14679c0..5d37345ca09d 100644
> --- a/common/board_r.c
> +++ b/common/board_r.c
> @@ -569,11 +569,15 @@ static int dm_announce(void)
>
>  static int run_main_loop(void)
>  {
> +       int ret;
> +
>  #ifdef CONFIG_SANDBOX
>         sandbox_main_loop_init();
>  #endif
>
> -       event_notify_null(EVT_MAIN_LOOP);
> +       ret = event_notify_null(EVT_MAIN_LOOP);
> +       if (ret)
> +               return ret;
>
>         /* main_loop() can return to retry autoboot, if so just run it again */
>         for (;;)
> diff --git a/test/dm/fwu_mdata.c b/test/dm/fwu_mdata.c
> index b7680632f95f..643b647af0a9 100644
> --- a/test/dm/fwu_mdata.c
> +++ b/test/dm/fwu_mdata.c
> @@ -100,7 +100,7 @@ static int dm_test_fwu_mdata_read(struct unit_test_state *uts)
>          * Trigger lib/fwu_updates/fwu.c fwu_boottime_checks()
>          * to populate g_dev global pointer in that library.
>          */
> -       event_notify_null(EVT_MAIN_LOOP);
> +       ut_assertok(event_notify_null(EVT_MAIN_LOOP));
>
>         ut_assertok(uclass_first_device_err(UCLASS_FWU_MDATA, &dev));
>         ut_assertok(fwu_init());
> @@ -127,7 +127,7 @@ static int dm_test_fwu_mdata_write(struct unit_test_state *uts)
>          * Trigger lib/fwu_updates/fwu.c fwu_boottime_checks()
>          * to populate g_dev global pointer in that library.
>          */
> -       event_notify_null(EVT_MAIN_LOOP);
> +       ut_assertok(event_notify_null(EVT_MAIN_LOOP));
>
>         ut_assertok(uclass_first_device_err(UCLASS_FWU_MDATA, &dev));
>
> --
> 2.43.0
>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 2/3] event: Introduce EVT_POST_PREBOOT event
  2026-04-01  6:03 ` [PATCH v3 2/3] event: Introduce EVT_POST_PREBOOT event Michal Simek
@ 2026-04-01  6:54   ` Ilias Apalodimas
  2026-04-01 20:24   ` [v3,2/3] " Simon Glass
  1 sibling, 0 replies; 9+ messages in thread
From: Ilias Apalodimas @ 2026-04-01  6:54 UTC (permalink / raw)
  To: Michal Simek; +Cc: u-boot, git, xypron.glpk, sjg, Casey Connolly, Tom Rini

On Wed, 1 Apr 2026 at 09:04, Michal Simek <michal.simek@amd.com> wrote:
>
> Add a new EVT_POST_PREBOOT event type which is fired in main_loop()
> after the preboot command has been executed.
>
> Signed-off-by: Michal Simek <michal.simek@amd.com>
> Reviewed-by: Simon Glass <sjg@chromium.org>
> ---

Acked-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>


>
> Changes in v3:
> - add missing type_name extension
>
> Changes in v2:
> - check return value
>
>  common/event.c  | 3 +++
>  common/main.c   | 4 ++++
>  include/event.h | 9 +++++++++
>  3 files changed, 16 insertions(+)
>
> diff --git a/common/event.c b/common/event.c
> index 8d7513eb10b6..398e713d2f82 100644
> --- a/common/event.c
> +++ b/common/event.c
> @@ -49,6 +49,9 @@ const char *const type_name[] = {
>         /* main loop events */
>         "main_loop",
>
> +       /* post preboot events */
> +       "post_preboot",
> +
>         /* livetree has been built */
>         "of_live_init",
>  };
> diff --git a/common/main.c b/common/main.c
> index b0b6e74f5d3d..4b4504557f6e 100644
> --- a/common/main.c
> +++ b/common/main.c
> @@ -19,6 +19,7 @@
>  #include <net.h>
>  #include <version_string.h>
>  #include <efi_loader.h>
> +#include <event.h>
>
>  static void run_preboot_environment_command(void)
>  {
> @@ -53,6 +54,9 @@ void main_loop(void)
>         if (IS_ENABLED(CONFIG_USE_PREBOOT))
>                 run_preboot_environment_command();
>
> +       if (event_notify_null(EVT_POST_PREBOOT))
> +               return;
> +
>         if (IS_ENABLED(CONFIG_UPDATE_TFTP))
>                 update_tftp(0UL, NULL, NULL);
>
> diff --git a/include/event.h b/include/event.h
> index 1d267f1d1054..3ce5f992b04e 100644
> --- a/include/event.h
> +++ b/include/event.h
> @@ -153,6 +153,15 @@ enum event_t {
>          */
>         EVT_MAIN_LOOP,
>
> +       /**
> +        * @EVT_POST_PREBOOT:
> +        * This event is triggered in main_loop() after the preboot command
> +        * has run, so that devices initialised by preboot (e.g. USB, UFS)
> +        * are available to event handlers. Its parameter is NULL.
> +        * A non-zero return value causes the boot to fail.
> +        */
> +       EVT_POST_PREBOOT,
> +
>         /**
>          * @EVT_OF_LIVE_BUILT:
>          * This event is triggered immediately after the live device tree has been
> --
> 2.43.0
>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [v3,1/3] event: Check return value from event_notify_null()
  2026-04-01  6:03 ` [PATCH v3 1/3] event: Check return value from event_notify_null() Michal Simek
  2026-04-01  6:54   ` Ilias Apalodimas
@ 2026-04-01 20:24   ` Simon Glass
  1 sibling, 0 replies; 9+ messages in thread
From: Simon Glass @ 2026-04-01 20:24 UTC (permalink / raw)
  To: michal.simek; +Cc: u-boot, git, xypron.glpk, ilias.apalodimas, sjg

On 2026-04-01T06:03:43, Michal Simek <michal.simek@amd.com> wrote:
> event: Check return value from event_notify_null()
>
> event_notify_null() returns int but its return value is not
> checked in run_main_loop() and in fwu_mdata tests.
> Add proper error checking to all unchecked call sites.
>
> Signed-off-by: Michal Simek <michal.simek@amd.com>
> Reviewed-by: Simon Glass <sjg@chromium.org>
> Acked-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
>
> common/board_r.c    | 6 +++++-
>  test/dm/fwu_mdata.c | 4 ++--
>  2 files changed, 7 insertions(+), 3 deletions(-)

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [v3,2/3] event: Introduce EVT_POST_PREBOOT event
  2026-04-01  6:03 ` [PATCH v3 2/3] event: Introduce EVT_POST_PREBOOT event Michal Simek
  2026-04-01  6:54   ` Ilias Apalodimas
@ 2026-04-01 20:24   ` Simon Glass
  1 sibling, 0 replies; 9+ messages in thread
From: Simon Glass @ 2026-04-01 20:24 UTC (permalink / raw)
  To: michal.simek; +Cc: u-boot, git, xypron.glpk, ilias.apalodimas, sjg

On 2026-04-01T06:03:43, Michal Simek <michal.simek@amd.com> wrote:
> event: Introduce EVT_POST_PREBOOT event
>
> Add a new EVT_POST_PREBOOT event type which is fired in main_loop()
> after the preboot command has been executed.
>
> Signed-off-by: Michal Simek <michal.simek@amd.com>
> Reviewed-by: Simon Glass <sjg@chromium.org>
> Acked-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
>
> common/event.c  | 3 +++
>  common/main.c   | 4 ++++
>  include/event.h | 9 +++++++++
>  3 files changed, 16 insertions(+)

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [v3,3/3] fwu: Move boottime checks to EVT_POST_PREBOOT
  2026-04-01  6:03 ` [PATCH v3 3/3] fwu: Move boottime checks to EVT_POST_PREBOOT Michal Simek
@ 2026-04-01 20:25   ` Simon Glass
  0 siblings, 0 replies; 9+ messages in thread
From: Simon Glass @ 2026-04-01 20:25 UTC (permalink / raw)
  To: michal.simek; +Cc: u-boot, git, xypron.glpk, ilias.apalodimas, sjg

Hi Michal,

On 2026-04-01T06:03:43, Michal Simek <michal.simek@amd.com> wrote:
> diff --git a/lib/fwu_updates/fwu.c b/lib/fwu_updates/fwu.c
> @@ -790,4 +790,4 @@ static int fwu_boottime_checks(void)
> -EVENT_SPY_SIMPLE(EVT_MAIN_LOOP, fwu_boottime_checks);
> +EVENT_SPY_SIMPLE(EVT_POST_PREBOOT, fwu_boottime_checks);

The tests in test/dm/fwu_mdata.c still call
event_notify_null(EVT_MAIN_LOOP) to trigger fwu_boottime_checks().
Since this patch moves the spy to EVT_POST_PREBOOT, those tests will
no longer work - the g_dev global pointer won't be populated. Please
can you update the tests to use EVT_POST_PREBOOT?

Regards,
Simon

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2026-04-01 20:25 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-01  6:03 [PATCH v3 0/3] fwu: Call EFI stack initialization after preboot Michal Simek
2026-04-01  6:03 ` [PATCH v3 1/3] event: Check return value from event_notify_null() Michal Simek
2026-04-01  6:54   ` Ilias Apalodimas
2026-04-01 20:24   ` [v3,1/3] " Simon Glass
2026-04-01  6:03 ` [PATCH v3 2/3] event: Introduce EVT_POST_PREBOOT event Michal Simek
2026-04-01  6:54   ` Ilias Apalodimas
2026-04-01 20:24   ` [v3,2/3] " Simon Glass
2026-04-01  6:03 ` [PATCH v3 3/3] fwu: Move boottime checks to EVT_POST_PREBOOT Michal Simek
2026-04-01 20:25   ` [v3,3/3] " Simon Glass

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox