summaryrefslogtreecommitdiff
path: root/boot
AgeCommit message (Collapse)Author
2025-01-26bootmeth_efi: Support PXE bootingSimon Glass
Finish off the implementation so it is possible to boot an EFI app over a network. Signed-off-by: Simon Glass <[email protected]>
2025-01-26efi_loader: Pass in the required parameters from EFI bootmethSimon Glass
Rather than setting up the global variables and then making the call, pass them into function directly. This cleans up the code and makes it all a bit easier to understand. Signed-off-by: Simon Glass <[email protected]>
2025-01-23bootstd: android: Allow boot with AVB failures when unlockedMattijs Korpershoek
When the bootloader is UNLOCKED, it should be possible to boot Android even if AVB reports verification errors [1]. This allows developers to flash modified partitions on userdebug/engineering builds. Developers can do so on unlocked devices with: $ fastboot flash --disable-verity --disable-verification vbmeta vbmeta.img In such case, bootmeth_android refuses to boot. Allow the boot to continue when the device is UNLOCKED and AVB reports verification errors. [1] https://source.android.com/docs/security/features/verifiedboot/boot-flow#unlocked-devices Fixes: 125d9f3306ea ("bootstd: Add a bootmeth for Android") Reviewed-by: Julien Masson <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Mattijs Korpershoek <[email protected]>
2025-01-23bootstd: android: Add missing NULL in the avb partition listMattijs Korpershoek
When booting an Android build with AVB enabled, it's still possible to deactivate the check for development purposes if the bootloader state is UNLOCKED. This is very useful for development and can be done at flashing time via: $ fastboot flash --disable-verity --disable-verification vbmeta vbmeta.img However, with bootmeth_android, we cannot boot this way: Scanning bootdev '[email protected]': 0 android ready mmc 0 [email protected] ** Booting bootflow '[email protected]' with android avb_vbmeta_image.c:188: ERROR: Hash does not match! avb_slot_verify.c:732: ERROR: vbmeta_a: Error verifying vbmeta image: HASH_MISMATCH get_partition: can't find partition '_a' avb_slot_verify.c:496: ERROR: _a: Error determining partition size. Verification failed, reason: I/O error occurred while trying to load data Boot failed (err=-5) No more bootdevs From the logs we can see that avb tries to read a partition named '_a'. It's doing so because the last element of requested_partitions implicitly is '\0', but the doc explicitly request it to be NULL instead. Add NULL as last element to requested_partitions to avoid this problem. Fixes: 125d9f3306ea ("bootstd: Add a bootmeth for Android") Reviewed-by: Julien Masson <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Mattijs Korpershoek <[email protected]>
2025-01-23boot: android: Check kcmdline's for NULL in android_image_get_kernel()Aaron Kling
kcmdline and kcmdline_extra strings can be NULL. In that case, we still read the content from 0x00000 and pass that to the kernel, which is completely wrong. Fix android_image_get_kernel() to check for NULL before checking if they are empty strings. Fixes: 53a0ddb6d3be ("boot: android: fix extra command line support") Signed-off-by: Aaron Kling <[email protected]> Reviewed-by: Nicolas Belin <[email protected]> Reviewed-by: Julien Masson <[email protected]> Tested-by: Sam Day <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Mattijs Korpershoek <[email protected]>
2025-01-22Merge patch series "upl: Prerequite patches for updated spec"Tom Rini
Simon Glass <[email protected]> says: The current UPL spec[1] has been tidied up and improved over the last year, since U-Boot's original UPL support was written. This series includes some prerequisite patches needed for the real UPL patches. It is split from [2] [1] https://github.com/UniversalPayload/spec/tree/3f1450d [2] https://patchwork.ozlabs.org/project/uboot/list/?series=438574&state=* Link: https://lore.kernel.org/r/[email protected]
2025-01-22boot: Rename fit_image_get_data_and_size()Simon Glass
This function is really just getting the data. The size comes along for the ride. In fact this function is only reliable way to obtain the data for an image in a FIT, since the FIT may use external data. Rename it to fit_image_get_data() Signed-off-by: Simon Glass <[email protected]>
2025-01-22boot: Rename fit_image_get_data()Simon Glass
This function can only be used with FITs that use embedded data. Rename it so this is clear. Signed-off-by: Simon Glass <[email protected]> Acked-by: Heinrich Schuchardt <[email protected]>
2025-01-22Merge patch series "vbe: Series part F"Tom Rini
Simon Glass <[email protected]> says: This includes various patches towards implementing the VBE abrec bootmeth in U-Boot. It mostly focuses on introducing a relocating SPL-loader so that VBE can run in the limited amount of SRAM available on many devices. Another minor new feature is support in VBE for specifying the image phase when loading from a FIT. This allows a single FIT to include images for several boot phases, thus simplifying image-creation. One lingering niggle in this series is that it has a different code path for sandbox, since it does not support the relocating jump. It should be possible to resolve this with additional work, but I have not attempted this so far. For v2, I have split the first patch into 5 pieces, to make it easier to see the code-size impact, plus added a few tweaks to reduce code size. Again, only MMC is supported so far. Looking ahead, series G will have some more plumbing and H some rk3399 pieces. That should be enough to complete these feature. Here is a run in my lab, with the VBE ABrec bootmeth. You can see that VPL runs before memory is set up. SPL sets up memory and can be upgraded in the field reliably. $ ub-int vbe Building U-Boot in sourcedir for rk3399-generic Bootstrapping U-Boot from dir /tmp/b/rk3399-generic Writing U-Boot using method rockchip U-Boot TPL 2025.01-rc3-00345-gdfbdbf1eb56c-dirty (Jan 08 2025 - 10:47:58) Trying to boot from vbe_abrec load: Firefly-RK3399 Board Using 'config-3' configuration Trying 'image-vpl' firmware subimage Using 'config-3' configuration Trying 'fdt-3' fdt subimage U-Boot VPL 2025.01-rc3-00345-gdfbdbf1eb56c-dirty (Jan 08 2025 - 10:47:58) Trying to boot from vbe_abrec load: Firefly-RK3399 Board Starting with empty state VBE: Firmware pick A at 800000 Using 'config-3' configuration Trying 'spl' firmware subimage Using 'config-3' configuration Trying 'fdt-3' fdt subimage Channel 0: DDR3, 800MHz BW=32 Col=10 Bk=8 CS0 Row=15 CS1 Row=15 CS=2 Die BW=16 Size=2048MB Channel 1: DDR3, 800MHz BW=32 Col=10 Bk=8 CS0 Row=15 CS1 Row=15 CS=2 Die BW=16 Size=2048MB 256B stride U-Boot SPL 2025.01-rc3-00345-gdfbdbf1eb56c-dirty (Jan 08 2025 - 10:47:58 -0700) Trying to boot from vbe_abrec load: Firefly-RK3399 Board VBE: Firmware pick A at 900000 load_simple_fit: Skip load 'atf-5': image size is 0! Relocating bloblist ff8eff00 to 100000: done ns16550_serial serial@ff1a0000: pinctrl_select_state_full: uclass_get_device_by_phandle_id: err=-19 U-Boot 2025.01-rc3-00345-gdfbdbf1eb56c-dirty (Jan 08 2025 - 10:47:58 -0700) SoC: Rockchip rk3399 Reset cause: POR Model: Firefly-RK3399 Board DRAM: 4 GiB (effective 3.9 GiB) Core: 314 devices, 33 uclasses, devicetree: separate MMC: mmc@fe310000: 3, mmc@fe320000: 1, mmc@fe330000: 0 Loading Environment from SPIFlash... Invalid bus 0 (err=-19) *** Warning - spi_flash_probe_bus_cs() failed, using default environment In: serial,usbkbd Out: serial,vidconsole Err: serial,vidconsole Model: Firefly-RK3399 Board Net: PMIC: RK808 eth0: ethernet@fe300000 starting USB... Bus usb@fe380000: USB EHCI 1.00 Bus usb@fe3a0000: USB OHCI 1.0 Bus usb@fe3c0000: USB EHCI 1.00 Bus usb@fe3e0000: USB OHCI 1.0 Bus usb@fe900000: Register 2000140 NbrPorts 2 Starting the controller USB XHCI 1.10 scanning bus usb@fe380000 for devices... 1 USB Device(s) found scanning bus usb@fe3a0000 for devices... 1 USB Device(s) found scanning bus usb@fe3c0000 for devices... 2 USB Device(s) found scanning bus usb@fe3e0000 for devices... 1 USB Device(s) found scanning bus usb@fe900000 for devices... 1 USB Device(s) found scanning usb for storage devices... 0 Storage Device(s) found Hit any key to stop autoboot: 0 Link: https://lore.kernel.org/r/[email protected]
2025-01-22vbe: Update simple-fw to support using the SPL loaderSimon Glass
For a sandbox implementation, where code size is no object, it makes sense to use the full bootstd drivers to load images. For real boards, running from SRAM, this adds quite a bit of overhead. Add a way to load the next phase using just the underlying storage driver, to reduce code size. For now, only MMC is supported. Change the log_debug() to show the load address and size in a more neutral way, rather than suggesting that the load has already happened. Signed-off-by: Simon Glass <[email protected]>
2025-01-22vbe: Support loading SPL imagesSimon Glass
VBE needs to load different images from a FIT depending on the xPL phase in use. The IH_PHASE value is used to select the image to load. Add the required logic to handle this. For compatibility with the SPL-loader driver, fill out a struct spl_image_info with the details needed to boot the next phase. This is good enough for VBE-simple but ABrec will need the full set of bootstd features. So add a USE_BOOTMETH define to control this. Signed-off-by: Simon Glass <[email protected]>
2025-01-22vbe: Support loading an FDT with the relocating loaderSimon Glass
Add FDT support so that this can be copied down in memory after loading and made available to the new image. Signed-off-by: Simon Glass <[email protected]>
2025-01-22vbe: Support loading an FDT from the FITSimon Glass
In many cases the FIT includes a devicetree. Add support for loading this into a suitable place in memory. Signed-off-by: Simon Glass <[email protected]>
2025-01-22vbe: Allow loading loadables if there is no firmwareSimon Glass
In some cases only the 'loadable' property is present in the FIT. Handle this by loading the first such image. Signed-off-by: Simon Glass <[email protected]>
2025-01-22vbe: Handle loading from an unaligned offsetSimon Glass
There is no guarantee that an FIT image starts on a block boundary. When it doesn't, the image starts part-way through the first block. Add logic to detect this and copy the image down into place. Signed-off-by: Simon Glass <[email protected]>
2025-01-22vbe: Tidy up error checking with blk_read()Simon Glass
This function can read fewer blocks than requested, so update the checks to handle this. Signed-off-by: Simon Glass <[email protected]>
2025-01-22vbe: Allow VBE to load FITs on any architectureSimon Glass
At present the VBE implementation is limited to sandbox only. Adjust the call to fit_image_load() to remove this limitation. Signed-off-by: Simon Glass <[email protected]>
2025-01-22vbe: Allocate space for the FIT headerSimon Glass
It is convenient to use TEXT_BASE as a place to hold the FIT header, but this does not work in VPL, since SDRAM is not inited yet. Allocate the memory instead. Ensure the size is aligned to the media block-size so that it can be read in directly. Improve the error-checking for blk_read() and add some more debugging. Keep the existing TEXT_BASE mechanism in sandbox to avoid an 'Exec format error' when trying to run the image. Signed-off-by: Simon Glass <[email protected]>
2025-01-22vbe: Split out reading a FIT into the common fileSimon Glass
Loading a FIT is useful for other VBE methods, such as ABrec. Create a new function to handling reading it. Signed-off-by: Simon Glass <[email protected]>
2025-01-22vbe: Move reading the nvdata into the common fileSimon Glass
All VBE methods read non-volatile data, so move this function into a common file. Signed-off-by: Simon Glass <[email protected]>
2025-01-22vbe: Move reading the version into the common fileSimon Glass
All VBE methods read a version string, so move this function into a common file. Signed-off-by: Simon Glass <[email protected]>
2025-01-22vbe: Create a common function to get the block deviceSimon Glass
Add a vbe_get_blk() function and use it to obtain the block device used by VBE. Signed-off-by: Simon Glass <[email protected]>
2025-01-22vbe: Convert some checks to assertionsSimon Glass
VBE is currently quite careful with function arguments because it is used in VPL which cannot be updated after manufacture. Bugs can cause security holes. Unfortunately this adds to code size. In several cases we are reading values from a devicetree which is part of U-Boot (or at least VPL) and so known to be good. Also, in several places, getting bad values does not matter. So change a few checks to assert() to reduce code size. Signed-off-by: Simon Glass <[email protected]>
2025-01-22vbe: Pass simple_priv to internal functionsSimon Glass
Pass the private data instead of the device, to help the compiler optimise better. This saves 16 bytes of code on pinecube (rk3288) Signed-off-by: Simon Glass <[email protected]>
2025-01-22vbe: Use a block device instead of descriptorSimon Glass
Pass a struct udevice instead of the descriptor structure, since this is the native argument for blk_read() Signed-off-by: Simon Glass <[email protected]>
2025-01-22vbe: Start a common header fileSimon Glass
Move a few things into a new, common header file so that vbe-simple can share code with the upcoming abrec. Put struct simple_nvdata in it and rename it. Signed-off-by: Simon Glass <[email protected]>
2025-01-22vbe: Use blk_read() to read blocksSimon Glass
We should not be using the old blk_d...() interface, is only there to aid migration to driver model. Move to blk_read() instead. Changes in v2: - Split patch into several pieces Signed-off-by: Simon Glass <[email protected]>
2025-01-15Merge patch series "bootstd: Support recording images"Tom Rini
Simon Glass <[email protected]> says: This series provides a way to keep track of the images used in bootstd, including the type of each image. At present this is sort-of handled by struct bootflow but in quite an ad-hoc way. The structure has become quite large and is hard to query. Future work will be able to reduce its size. Ultimately the 'bootflow info' command may change to also show images as a list, but that is left for later, as this series is already fairly long. So for now, just introduce the concept and adjust bootstd to use it, with a simple command to list the images. This series includes various alist enhancements, to make use of this new data structure a little easier. [trini: Drop patch 18 and 19 for now due to size considerations] Link: https://lore.kernel.org/r/[email protected]
2025-01-15bootstd: Export bootdev_get_from_blk()Simon Glass
Export this function so it can be used from other files. Signed-off-by: Simon Glass <[email protected]>
2025-01-15bootstd: Add a simple command to list imagesSimon Glass
Add a new 'bootstd images' command, which lists the images which have been loaded. Update some existing tests to use it. Provide some documentation about images in general and this command in particular. Use a more realistic kernel command-line to make the test easier to follow. Signed-off-by: Simon Glass <[email protected]>
2025-01-15bootstd: Update cros bootmeth to record imagesSimon Glass
Record images loaded by this bootmeth. Signed-off-by: Simon Glass <[email protected]>
2025-01-15Update bootmeth_alloc_other() to record imagesSimon Glass
Update this function to add the image to the list. Signed-off-by: Simon Glass <[email protected]>
2025-01-15boot: Update pxe bootmeth to record imagesSimon Glass
Record images loaded by this bootmeth. Signed-off-by: Simon Glass <[email protected]>
2025-01-15boot: Update extlinux pxe_getfile_func() to include typeSimon Glass
Add a file-type parameter to this function and update all users. Add a proper comment to the function which we are here. This will allow tracking of the file types loaded by the extlinux bootmeth. Signed-off-by: Simon Glass <[email protected]>
2025-01-15bootmeth_efi: Check the filename-allocation in the network pathSimon Glass
If the filename cannot be set we should give up. Add the missing error check. Signed-off-by: Simon Glass <[email protected]>
2025-01-15bootmeth: Update the read_file() method to include a typeSimon Glass
We want to record the type of each file which is loaded. Add an new parameter for this, to the read_file() method. Update all users. Make bootmeth_common_read_file() store information about the image that is read. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Mattijs Korpershoek <[email protected]>
2025-01-15bootmeth_efi: Simplify reading files by using the common functionSimon Glass
The efiload_read_file() does similar things to a common function, so update it to use that instead. Signed-off-by: Simon Glass <[email protected]> Acked-by: Ilias Apalodimas <[email protected]>
2025-01-15boot: pxe: Drop the duplicate comment on get_pxe_file()Simon Glass
This function is exported, so document it in the header file. Drop the duplicate comment in the C file. Signed-off-by: Simon Glass <[email protected]>
2025-01-15bootstd: Update bootmeth_alloc_file() to record imagesSimon Glass
As a first step to recording images and where they came from, update this function to do so, since it is used by two bootmeths Create a helper function in the bootflow system, since recorded images are always associated with bootflows. Signed-off-by: Simon Glass <[email protected]>
2025-01-15bootstd: Maintain a list of imagesSimon Glass
We want to keep track of images which are loaded, or those which could perhaps be loaded. This will make it easier to manage memory allocation, as well as permit removal of the EFI set_efi_bootdev() feature. Add a list of these, attached to the bootflow. For now the list is empty. Signed-off-by: Simon Glass <[email protected]>
2025-01-15bootstd: Move the bootflow list into an alistSimon Glass
Use an alist for this data structure as it is somewhat simpler to manage. This means that bootstd holds a simple list of bootflow structs and can drop it at will, without chasing down lists. Signed-off-by: Simon Glass <[email protected]>
2025-01-15bootstd: Drop the bootdev-specific list of bootflowsSimon Glass
This list is only used by two functions, which can be updated to iterate through the global list. Take this approach, which allows the bootdev list to be dropped. Overall this makes the code slightly more complicated, but will allow moving the bootflow list into an alist Signed-off-by: Simon Glass <[email protected]>
2025-01-15bootstd: Add a function to get bootstd only if availableSimon Glass
Provide a function which is safe to call in the 'unbind' path, which returns the bootstd priv data if available. Signed-off-by: Simon Glass <[email protected]>
2025-01-15bootstd: Move bootflow-clearing to bootstdSimon Glass
This relates to more than just the bootdev, since there is a global list of bootflows. Move the function to the bootstd file and rename it. Signed-off-by: Simon Glass <[email protected]> Acked-by: Heinrich Schuchardt <[email protected]>
2025-01-15bootstd: Move bootflow-adding to bootstdSimon Glass
This relates to more than just the bootdev, since there is a global list of bootflows. Move the function to the bootstd file and rename it. Signed-off-by: Simon Glass <[email protected]>
2025-01-14Merge patch series "fdt_support: improve board_fdt_chosen_bootargs() for ↵Tom Rini
flexibility" Dmitry Rokosov <[email protected]> says: This series consists of three patches. The first patch modifies the function documentation style in the include/fdt_support.h file to comply with kernel-doc requirements. The second patch modifies the board_fdt_chosen_bootargs() function to return a const char* type. This change clarifies to the caller that the returned string should neither be freed nor modified. It aligns with the existing fdt_setprop() function, which already utilizes a const char* parameter. This promotes consistency within the codebase and enhances code safety by preventing unintended modifications to the returned string. The third patch addresses the need for flexibility in providing kernel command line arguments (bootargs) for different kernel images within the same U-Boot environment. It introduces a read-only (RO) fdt_property argument to the board_fdt_chosen_bootargs() function, allowing access to the original chosen/bootargs data. This is crucial for scenarios where different kernel versions require distinct console setups (e.g., ttyS0 for vendor kernels and ttyAML0 for upstream kernels). By enabling board developers to either merge or replace the original bootargs, this patch enhances the configurability of U-Boot for various kernel images without relying on outdated configurations like CMDLINE_EXTEND. CI/CD results: https://github.com/u-boot/u-boot/pull/716/checks Link: https://lore.kernel.org/r/20241220-board_fdt_chosen_bootargs_improvements-v1-0-f6a7181787c5@salutedevices.com
2025-01-14common: fdt: hand over original fdt bootargs into board chosen handlerDmitry Rokosov
Sometimes, it is necessary to provide an additional bootargs string to the kernel command line. We have a real scenario where one U-Boot blob needs to boot several kernel images: the vendor-patched kernel image and the latest upstream kernel image. The Amlogic (Meson architecture) tty driver has different tty suffixes in these kernels: the vendor uses 'ttySx', while the upstream implementation uses 'ttyAMLx'. The initial console setup is provided to the kernel using the kernel command line (bootargs). For the vendor kernel, we should use 'console=ttyS0,115200', while for the upstream kernel, it must be 'console=ttyAML0,115200'. This means we have to use different command line strings depending on the kernel version. To resolve this issue, we cannot use the CMDLINE_EXTEND kernel configuration because it is considered legacy and is not supported for the arm64 architecture. CMDLINE_EXTEND is outdated primarily because we can provide additional command line strings through the 'chosen/bootargs' FDT node. However, U-Boot uses this node to inject the U-Boot bootargs environment variable content, which results in U-Boot silently overriding all data in the 'chosen/bootargs' node. While we do have the board_fdt_chosen_bootargs() board hook to address such issues, this function lacks any FDT context, such as the original value of the 'chosen/bootargs' node. This patch introduces a read-only (RO) fdt_property argument to board_fdt_chosen_bootargs() to share the original 'chosen/bootargs' data with the board code. Consequently, the board developer can decide how to handle this information for their board setup: whether to drop it or merge it with the bootargs environment. Signed-off-by: Dmitry Rokosov <[email protected]> Reviewed-by: Quentin Schulz <[email protected]>
2025-01-14fdt_support: board_fdt_chosen_bootargs() should return const char*Dmitry Rokosov
It should be structured this way to demonstrate to the caller that freeing the return value is unnecessary and that the caller cannot modify it. The function fdt_setprop() includes a parameter with a const char* prototype, so it is better to use the const qualifier. Signed-off-by: Dmitry Rokosov <[email protected]> Reviewed-by: Heinrich Schuchardt <[email protected]>
2024-12-30lmb: Remove lmb_alloc_base_flags()Ilias Apalodimas
lmb_alloc_base() is just calling lmb_alloc_base_flags() with LMB_NONE. There's not much we gain from this abstraction, so let's remove the former add the flags argument to lmb_alloc_base() and make the code a bit easier to follow. Reviewed-by: Sam Protsenko <[email protected]> Tested-by: Sam Protsenko <[email protected]> Signed-off-by: Ilias Apalodimas <[email protected]>
2024-12-30lmb: Remove lmb_reserve_flags()Ilias Apalodimas
lmb_reserve() is just calling lmb_reserve_flags() with LMB_NONE. There's not much we gain from this abstraction. So let's remove the latter, add the flags argument to lmb_reserve() and make the code a bit easier to follow. Reviewed-by: Tom Rini <[email protected]> Reviewed-by: Sam Protsenko <[email protected]> Tested-by: Sam Protsenko <[email protected]> Signed-off-by: Ilias Apalodimas <[email protected]>