[PATCH 3/6] bootstd: Indicate refresh need with bootflow_menu_poll()

Simon Glass sjg at chromium.org
Sat May 24 17:41:09 CEST 2025


When the user presses 'up' when on the top menu item, it is a waste of
time to refresh since nothing has changed.

Add a new return code from this function to indicate that the UI must be
refreshed.

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

 boot/bootflow_menu.c | 2 ++
 cmd/bootflow.c       | 2 +-
 include/bootflow.h   | 4 +++-
 3 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/boot/bootflow_menu.c b/boot/bootflow_menu.c
index 1966e38a6d6..2f08fa54081 100644
--- a/boot/bootflow_menu.c
+++ b/boot/bootflow_menu.c
@@ -310,6 +310,8 @@ int bootflow_menu_poll(struct expo *exp, int *seqp)
 		ret = scene_menu_select_item(scn, OBJ_MENU, act.select.id);
 		if (ret)
 			return log_msg_ret("bmp", ret);
+		if (act.select.changed)
+			return -EREMCHG;
 		return -ERESTART;
 	}
 	case EXPOACT_QUIT:
diff --git a/cmd/bootflow.c b/cmd/bootflow.c
index 9d449f430c9..3bdebd96bda 100644
--- a/cmd/bootflow.c
+++ b/cmd/bootflow.c
@@ -126,7 +126,7 @@ __maybe_unused static int bootflow_handle_menu(struct bootstd_priv *std,
 				return log_msg_ret("bhr", ret);
 		}
 		ret = bootflow_menu_poll(exp, &seq);
-	} while (ret == -EAGAIN || ret == -ERESTART);
+	} while (ret == -EAGAIN || ret == -ERESTART || ret == -EREMCHG);
 
 	if (ret == -EPIPE) {
 		printf("Nothing chosen\n");
diff --git a/include/bootflow.h b/include/bootflow.h
index c0e19feb9cc..18bfa1fe8b1 100644
--- a/include/bootflow.h
+++ b/include/bootflow.h
@@ -688,7 +688,9 @@ int bootflow_menu_start(struct bootstd_priv *std, bool text_mode,
  * @exp: Expo to poll
  * @seqp: Returns the bootflow chosen or currently pointed to (numbered from 0)
  * Return: 0 if a bootflow was chosen, -EAGAIN if nothing is chosen yet, -EPIPE
- *	if the user quit, -ERESTART if the expo needs refreshing
+ *	if the user quit, -EREMCHG if the expo needs refreshing, -ERESTART if
+ *	the user tried to move to a new selection but was unable (e.g. already
+ *	at the top and tried to move up)
  */
 int bootflow_menu_poll(struct expo *exp, int *seqp);
 
-- 
2.43.0

base-commit: e3ced530e543c9f24cbc66430abc6109ce8df015
branch: expa


More information about the U-Boot mailing list