[PATCH 04/19] expo: Avoid arranging the scene willy nilly

Simon Glass sjg at chromium.org
Mon May 5 17:42:42 CEST 2025


Moving from one scene to another should not result in the scene being
re-arranged. Drop this, so that tests can have more control of when
scenes are arranged.

Also drop the scene_arrange() call when applying a theme, for the same
reason.

Add the now-required scene_arrange() to cedit and bootmenu

Signed-off-by: Simon Glass <sjg at chromium.org>
---

 boot/cedit.c   | 3 +++
 boot/expo.c    | 4 ----
 boot/scene.c   | 5 -----
 cmd/bootflow.c | 3 +++
 4 files changed, 6 insertions(+), 9 deletions(-)

diff --git a/boot/cedit.c b/boot/cedit.c
index 56dc7c6af15..b7c2d37e3a2 100644
--- a/boot/cedit.c
+++ b/boot/cedit.c
@@ -98,6 +98,9 @@ int cedit_arange(struct expo *exp, struct video_priv *vpriv, uint scene_id)
 			break;
 		}
 	}
+	ret = scene_arrange(scn);
+	if (ret)
+		return log_msg_ret("cac", ret);
 
 	return 0;
 }
diff --git a/boot/expo.c b/boot/expo.c
index 3e79cbca04b..d09cc1861da 100644
--- a/boot/expo.c
+++ b/boot/expo.c
@@ -185,14 +185,10 @@ struct scene *expo_lookup_scene_id(struct expo *exp, uint scene_id)
 int expo_set_scene_id(struct expo *exp, uint scene_id)
 {
 	struct scene *scn;
-	int ret;
 
 	scn = expo_lookup_scene_id(exp, scene_id);
 	if (!scn)
 		return log_msg_ret("id", -ENOENT);
-	ret = scene_arrange(scn);
-	if (ret)
-		return log_msg_ret("arr", ret);
 
 	exp->scene_id = scene_id;
 
diff --git a/boot/scene.c b/boot/scene.c
index fa8f540bfb0..2ca82236300 100644
--- a/boot/scene.c
+++ b/boot/scene.c
@@ -1062,7 +1062,6 @@ int scene_calc_dims(struct scene *scn, bool do_menus)
 int scene_apply_theme(struct scene *scn, struct expo_theme *theme)
 {
 	struct scene_obj *obj;
-	int ret;
 
 	/* Avoid error-checking optional items */
 	scene_txt_set_font(scn, scn->title_id, NULL, theme->font_size);
@@ -1086,10 +1085,6 @@ int scene_apply_theme(struct scene *scn, struct expo_theme *theme)
 		}
 	}
 
-	ret = scene_arrange(scn);
-	if (ret)
-		return log_msg_ret("arr", ret);
-
 	return 0;
 }
 
diff --git a/cmd/bootflow.c b/cmd/bootflow.c
index 6ffb1bd33e1..9d449f430c9 100644
--- a/cmd/bootflow.c
+++ b/cmd/bootflow.c
@@ -118,6 +118,9 @@ __maybe_unused static int bootflow_handle_menu(struct bootstd_priv *std,
 	ret = -ERESTART;
 	do {
 		if (ret == -ERESTART) {
+			ret = expo_arrange(exp);
+			if (ret)
+				return log_msg_ret("bha", ret);
 			ret = expo_render(exp);
 			if (ret)
 				return log_msg_ret("bhr", ret);
-- 
2.43.0



More information about the U-Boot mailing list