[efi] Honor ABR one-shot bootloader flag on EFI reset

When GBL handles 'fastboot reboot-bootloader', it sets the ABR one-shot
bootloader flag in durable_boot and calls UEFI ResetSystem(), which
invokes efi_reset_system_boottime(). Unconditionally running 'reboot'
sets the Amlogic reboot mode register (AO_SEC_SD_CFG15) to normal boot,
causing legacy U-Boot to boot Zircon instead of entering fastboot after
a bootloader rollback.

Add GetAndClearOneShotBootloaderFlag() in zircon_boot.c (preserving
one-shot recovery if set) and call it in efi_reset_system_boottime() to
run 'reboot fastboot' when requested, logging a warning if the reboot
command returns before falling back to do_reset().

TAG=agy
CONV=d6901459-7b8c-4e0a-8447-092869375046
Bug: 571205565
Test: Built VIM3 U-Boot with ./fuchsia_build.py

Change-Id: I020bcd960f94135f3266512cb170c9204eec2107
Reviewed-on: https://turquoise-internal-review.googlesource.com/c/third_party/u-boot/+/1683274
Reviewed-by: David Pursell <dpursell@google.com>
Commit-Queue: Sergii Parubochyi <sergiip@google.com>
GitOrigin-RevId: 8e7ac1835c7d1d9a54fca2fa5b4a3a139b887fd6
3 files changed
tree: f7e587a1273cc7b1ecc16184a098372d59dfbd7f
  1. api/
  2. arch/
  3. bl2/
  4. bl30/
  5. bl31/
  6. bl31_1.3/
  7. board/
  8. common/
  9. configs/
  10. disk/
  11. doc/
  12. drivers/
  13. dts/
  14. examples/
  15. fip/
  16. fs/
  17. include/
  18. lib/
  19. Licenses/
  20. net/
  21. post/
  22. scripts/
  23. test/
  24. tools/
  25. vim3_aml_tools/
  26. .checkpatch.conf
  27. .clang-format
  28. .gitignore
  29. .mailmap
  30. amlogic_help.sh
  31. check_compile.sh
  32. config.mk
  33. fuchsia_build.py
  34. fuchsia_upload.py
  35. Kbuild
  36. Kconfig
  37. MAINTAINERS
  38. MAKEALL
  39. Makefile
  40. mk
  41. README
  42. README.md
  43. snapshot.commit
README.md

This is a version of u-boot, modified to support Fuchsia on the Khadas vim3

Building vim3 Bootloader for Fuchsia

To build the vim3 bootloader for Fuchsia:

CIPD access. All build tools are downloaded to cipd_deps.

Run the build script from repo root

./fuchsia_build.py

Options:

  • --clean-cipd option can be used to make sure CIPD checkout is clean. It will remove cipd_deps directory and download dependencies again.
  • --gbl-path <path> option specifies a path to a local GBL (gbl.efi) binary. If provided, CIPD GBL is not used; otherwise, the script downloads GBL from CIPD and uses gbl_aarch64_dev.efi.

You now have a build/u-boot.bin.unsigned that you can flash to a target using fastboot.

Releasing and Uploading

go/fuchsia-firmware-licensing-publishing