summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2025-05-30expo: Update bootflow_menu_poll() to return a sequence IDSimon Glass
Rather than returning a bootflow, return the index of the bootflow. This will allow callers to do their own translation to bootflows or some other data structure. Also return a special code when the user tries to move the pointer, so that the caller can cancel the boot-menu timeout, if this is in use. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Improve the visual appearance of the menuSimon Glass
The menu is currently quite basic. Make use of some recently added features in expo, to: - Show proper prompts - Highlight the current item - Centre text - Use multi-line text instead of two independent lines - Put a box around the items Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Provide a way to position things relative to displaySimon Glass
It is often necessary to centre objects within the display area. Add a special position value to indicate this. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Drop the render from expo_poll()Simon Glass
Within tests it is useful to be able to control rendering of the expo. Drop the automatic call to expo_render() within expo_poll() and adjust its callers to handle this instead. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Adjust expo_poll() to avoid looping foreverSimon Glass
If the user does not quickly provide some input, exit so that other things can be done, such as searching for the next OS. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Support highlighting menu itemsSimon Glass
Expo normally uses a pointer to show the current item. Add support for highlighting as well, since this makes it easier for the user to see the current item. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Add forward declarations to scene_internal.hSimon Glass
Provide some forward declarations for types used in this file, to keep the LSP happy and avoid errors if the caller happens not to include the required header. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Drop the gap between groups of menu itemsSimon Glass
The gap is intended to separate options which are on different bootdevs, but most of the time there is only one. So drop this gap. Keep the code around in case it becomes useful to have it in the style, or based on some other mechanism. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Use a simpler name for USB mediaSimon Glass
For USB devices we use the string 'usb_mass_storage' which is a bit verbose. Use 'USB' instead. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Begin implementation of a text editorSimon Glass
It is useful to be able to edit text, e.g. to allow the user to edit the environment or the command-line arguments for the OS. Add the beginnings of an implementation. Future work is needed to finish this: keypress handling and scrolling. For now it just displays the text. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Support object alignmentSimon Glass
Add support for left, right and centred alignment for text, in the horizontal dimension. Also support top, bottom and centred in the vertical dimension, for the text object as a whole. Alignment is not yet implemented for images. It has no meaning for menus. A textline object uses a text object internally, so alignment is supported there. Provide some documentation to explain how objects are positioned. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Implement a boxSimon Glass
It is useful to be able to draw a box around elements in the menu. Add support for an unfilled box with a selectable thickness. Note that there is no support for selecting the colour for any expo objects yet. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Support white-on-black in the themeSimon Glass
Allow this setting to be controlled from the theme. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Support rendering multiple lines of textSimon Glass
Use the measurement info to write each line of text separately, thus respecting word-wrapping and newlines. Fix up the comment for scene_obj_render() while we are here. Since a lineedit does not support alignment, add a special case to just display the text if there is no measurement. This happens assuming the lineedit is initially empty. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Check the screen contents after renderingSimon Glass
Make sure that the screen contents are as expected when a scene has been rendered. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Allow strings to be editableSimon Glass
In some cases dynamic text is needed, e.g. for a menu countdown. Add a function which handles this, allowing the caller to take control of the text that is shown on each render. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Tidy up scene_txt_render()Simon Glass
Add an early return if there is no string. Move all declarations to the top of the function. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Move text-rendering into its own functionSimon Glass
The code to render text is quite long, so put it in its own function. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Create a struct for generic text attributesSimon Glass
In preparation for adding more text types, refactor the common fields into a new structure. This will allow common code to be used. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Line up all menu objectsSimon Glass
At present labels are lined up vertically. Do the same with keys and descriptions, since it looks nicer. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Support setting the size and bounds of an objectSimon Glass
Add a function to allow the size of an object to be set independently of its position. Also add a function to permit the object's bounding box to be set independently of its dimensions. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Make bounding-box calculation more flexibleSimon Glass
In some cases it is useful to obtain more than just two bounding boxes from a menu, e.g. to line up all descriptions vertically. Use an array to obtain bounding-box information and calculate it separately for each item. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Separate dimensions from the bounding boxSimon Glass
At present each object has a width and height and the bounding box is implicit in that. This is not flexible enough to handle objects which are larger than their contents might need. For example, when centring a text object we might want to have it stretch across the whole width of the display even if the text itself does not need that much space. Create a new 'dimensions' field and convert the existing width/height into x1/y1 coordinates. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Use an abuf to hold stringsSimon Glass
It is more convenient to put strings in an abuf so they can easily be resized. Adjust the struct accordingly. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Rename x and y in struct scene_obj_bboxSimon Glass
These coordinates are the top left values, so rename them to x0 and y0 in preparation for changing the width and height to x1 and y1 Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Rename scene_dim to scene_obj_bboxSimon Glass
At present we assume that each object is a simple box and that it fills the whole box. This is quite limiting for text objects, which we may want to centre within the box. We need a position within the box where drawing starts. Rename the scene_dim struct to indicate that it is a bounding box. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Allow adding a single bootflow to a menuSimon Glass
Refactor bootflow_menu_add_all() to call a new bootflow_menu_add() to add each of its bootflows. Move the last_bootdev value into struct menu_priv to make this work. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Split bootflow_menu_new() into two piecesSimon Glass
Split the iteration piece of this function into bootflow_menu_add_all() so that it is possible for the caller to be in control of adding items to the menu. Move the expo_destroy() call into the caller. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Split bootflow_menu_run() into two piecesSimon Glass
Split the starting piece of this function into bootflow_menu_start() and the polling part into bootflow_menu_poll() so that it is possible for the caller to be in control of the event loop. Move the expo_destroy() call into the caller. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Test editing a lineeditSimon Glass
Open the lineedit and add a few characters, to check that things look right. At present when the user moves to a new menu item, the menu code handles this immediately. This means it is not possible to use an expo action to effect the same change. Update this so that EXPOACT_POINT_ITEM is handled in cedit_do_action(). Expand the test to cover this. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Adjust how menu items are highlightedSimon Glass
At present when the user moves to a new menu item, the menu code handles this immediately. This means it is not possible to use an expo action to effect the same change. Update this so that EXPOACT_POINT_ITEM is handled in cedit_do_action(). Expand the test to cover this. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Provide access to the current menu itemSimon Glass
Add functions to allow a caller to find out the current menu item and to select a different one. Update the event handling so that an attempt to change the current item (e.g. by pressing the up-arrow key) is reported to the caller, since this may be used to cancel an autoboot timeout. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Test rendering a lineeditSimon Glass
Check the rendering output when adding characters to a line-edit object. Add a separate test to check behaviour when starting with existing text in the lineedit. The cursor should start at the end. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Pass in the video device for cedit_prepare()Simon Glass
At present this function locates it own video device. Pass it in to provide more flexibility. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Test some cedit actionsSimon Glass
Refactor the action-processing code into a new cedit_do_action() function so we can call it from a test. Check moving to a new field and opening the menu, to ensure that rendering is correct. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Move cedit-state fields into expoSimon Glass
Move the boolean flags into struct expo so that the state can be maintained over function calls. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Create a rendering test for ceditSimon Glass
Add a test to check that the cedit renders as expected. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Destroy the cedit expo when doneSimon Glass
Once 'cedit run' is completed, destroy the expo so that a fresh one is used for any future editing. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Add a function to poll for inputSimon Glass
Both bootflow_menu and cedit use similar logic to poll an expo. Move this into the expo library so the code can be shared. Update bootflow_menu_run() to return -EPIPE when the user quits without choosing anything, since -EAGAIN is ambiguous and elsewhere means that there is no input yet. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30expo: Add CLI context to the expoSimon Glass
An expo generally needs to keep track of the keyboard state while it is running, so move the context into struct expo Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30abuf: Add a way to printf() into a bufferSimon Glass
It is useful to format a string into a buffer, with the sizing handled automatically. Add a function for this. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30abuf: Add a function to copy a bufferSimon Glass
It is useful to be able to copy an abuf, to allow changes while preserving the original. Add a function for this. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-30abuf: Add a helper for initing and allocating a bufferSimon Glass
This construct appears in various places. Reduce code size by adding a function for it. It inits the abuf, then allocates it to the requested size. Signed-off-by: Simon Glass <sjg@chromium.org>
2025-05-29Merge patch series "Enable env in SCSI"Tom Rini
Varadarajan Narayanan <quic_varada@quicinc.com> says: The qcs9100 based Ride platforms have UFS as their primary storage. Hence add support to U-Boot env framework to be able to save and retrieve the environment from UFS. The environment will be saved/retrieved from the partition specified in the config option CONFIG_SCSI_ENV_PART. Also add an API to convert partition UUID string to block device descriptor for UFS. This API will be used to get the block device descriptor for the partition specified in CONFIG_SCSI_ENV_PART. Link: https://lore.kernel.org/r/20250513091710.3719292-1-quic_varada@quicinc.com
2025-05-29configs: qcs9100: Enable env in SCSIVaradarajan Narayanan
Enable CONFIG_ENV_IS_IN_SCSI to store environment variables in SCSI. Set env variables partition UUID as seen in qcs9100 based boards. Signed-off-by: Varadarajan Narayanan <quic_varada@quicinc.com> Reviewed-by: Casey Connolly <casey.connolly@linaro.org>
2025-05-29env: Add support for storing env variables in SCSI devicesVaradarajan Narayanan
Allow SCSI to be able to store environment variables. Signed-off-by: Varadarajan Narayanan <quic_varada@quicinc.com> Acked-by: Casey Connolly <casey.connolly@linaro.org>
2025-05-29scsi: Implement get_blk() functionVaradarajan Narayanan
Add a function to obtain the block device for SCSI. Signed-off-by: Varadarajan Narayanan <quic_varada@quicinc.com> Acked-by: Casey Connolly <casey.connolly@linaro.org>
2025-05-29disk: part: implement generic function part_get_info_by_uuid()Varadarajan Narayanan
Add function to search for a partition by UUID as partition names may not be unique. Signed-off-by: Varadarajan Narayanan <quic_varada@quicinc.com> Acked-by: Casey Connolly <casey.connolly@linaro.org>
2025-05-29Merge patch series "Remove clocks from R5 dtsi for missed boards."Tom Rini
Manorit Chawdhry <m-chawdhry@ti.com> says: Fix some of the boards that could be affected by the change done in [0]. [0]: https://lore.kernel.org/u-boot/20241121-b4-upstream-pll-fix-v1-0-904f618897a7@ti.com/T/#mecb70b415a364fdf322a94241438db7b5607e92b Link: https://lore.kernel.org/r/20250515-b4-upstream-k3-pll-miss-v1-0-e38b89f027b8@ti.com
2025-05-29arm: dts: k3-am62a7-phycore-r5*: Remove clocks from main_timer0Manorit Chawdhry
The commit 79d91e77f4c2 ("clk: ti: clk-k3-pll: Add additional robustness steps to the PLL sequence") introduced a change which requires the main_timer0 to not rely on it's own clocks which anyways was wrong. Fix it by removing the clock dependency for it, also while at it, move it from u-boot.dtsi to R5 as that is the only entity that should require it as DM isn't up. Fixes: 5d1aac358f3c ("arm: dts: k3-*-r5: Remove clocks from mcu_timer0") Signed-off-by: Manorit Chawdhry <m-chawdhry@ti.com> Acked-by: Wadim Egorov <w.egorov@phytec.de>