tree c42dec5a1ecdcbae74a7b62603dadf874542ee68
parent 9eb0d731d800b4fbc8e9ed0178fec0d6f201d911
parent 7de51622a2cf901e888d703a7bea33ad16645d3b
author Tom Rini <trini@konsulko.com> 1726237225 -0600
committer Tom Rini <trini@konsulko.com> 1726237225 -0600
mergetag object 7de51622a2cf901e888d703a7bea33ad16645d3b
 type commit
 tag efi-next-20241024
 tagger Heinrich Schuchardt <heinrich.schuchardt@canonical.com> 1726234785 +0200
 
 Pull request efi-next-20241024
 
 UEFI:
 
 * Use generated UUIDs in UEFI capsules:
   - efi: define struct efi_guid
   - lib: uuid: add UUID v5 support
   - efi: add a helper to generate dynamic UUIDs
   - doc: uefi: document dynamic UUID generation
   - sandbox: switch to dynamic UUIDs
   - lib: uuid: supporting building as part of host tools
   - include: export uuid.h
   - tools: mkeficapsule: use u-boot UUID library
   - tools: mkeficapsule: support generating dynamic GUIDs
   - test: lib/uuid: add unit tests for dynamic UUIDs
   - test: lib/uuid: add tests for UUID version/variant bits
 
 * Minor code clean-up
   - shorten efi_bootmgr_release_uridp_resource()
   - rename efi_bootmgr_image_return_notify
   - return the correct error in efi_bootmgr_release_uridp()
   - Kconfig: clean up the efi configuration status
   - Use puts() in cout so that console recording works
   - Put back copyright message in helloworld.c
 -----BEGIN PGP SIGNATURE-----
 
 iQJWBAABCABAFiEEK7wKXt3/btL6/yA+hO4vgnE3U0sFAmbkQbQiHGhlaW5yaWNo
 LnNjaHVjaGFyZHRAY2Fub25pY2FsLmNvbQAKCRCE7i+CcTdTS78AD/438lZrXSvV
 0aunMCDokTlg7Hxwme1oeLI6+r1SFwJa2EHEdsKbZ74ubh8H/UJkyFpsPr5mZeCI
 BUkrxiI3bJnsw8HftZpkc4k1fRgzk/ufNcH1ywyFLV5gXfAHUpPzfx3C3eB2unr3
 f0zlsOl7VTkdOqXSebWcbFGXIKRb/p6jUtWkCaM/Ip3i8wgEU9PlFTPXutdxHFi/
 GsByD7I2exsnoEm+ODZ1P/FGEyhWMAN8c643DWRplc8vFHFyg8rqsnjOOekWN4WO
 HMVvs9lUKtLpWK8HaoAZKFL1NFdwdEjbaRUqSeHSdKan/tJIRgTNGzrtlD/i7YHQ
 b2nTrlhlDtrobfITvyicg7cIy/XcBksIFOQ3kHaZWD18DINiwuX1AEKESwqdFGpB
 88gaE45XAqTYW8EpSYq61JlaPQZvR70nXISzLCIce25a1jFt6oO88rV5eEHm67gA
 HufIiyR2aOTiFvrHe0ZNgjeOMGMaFFHEMTOx+exhAJ6NTuwgWi/aTQXGF2OkWzBX
 LXCnb6huyAOqj+3PJCCIed9vf2AlvIm7a8hZDxmCmJMWmaHrRIObBjLZOmGu9vU4
 cdaMNO1s4bptqGjhfETxmjbtnX9YI8hAhChNs0d/vs1k0hIMPaI170Q9zR2xN+2S
 wBG3iMs9Q6ECNaoeVcfwS2HfpVovI7j4uQ==
 =mncs
 -----END PGP SIGNATURE-----

Merge tag 'efi-next-20241024' of https://source.denx.de/u-boot/custodians/u-boot-efi into next

Pull request efi-next-20241024

UEFI:

* Use generated UUIDs in UEFI capsules:
  - efi: define struct efi_guid
  - lib: uuid: add UUID v5 support
  - efi: add a helper to generate dynamic UUIDs
  - doc: uefi: document dynamic UUID generation
  - sandbox: switch to dynamic UUIDs
  - lib: uuid: supporting building as part of host tools
  - include: export uuid.h
  - tools: mkeficapsule: use u-boot UUID library
  - tools: mkeficapsule: support generating dynamic GUIDs
  - test: lib/uuid: add unit tests for dynamic UUIDs
  - test: lib/uuid: add tests for UUID version/variant bits

* Minor code clean-up
  - shorten efi_bootmgr_release_uridp_resource()
  - rename efi_bootmgr_image_return_notify
  - return the correct error in efi_bootmgr_release_uridp()
  - Kconfig: clean up the efi configuration status
  - Use puts() in cout so that console recording works
  - Put back copyright message in helloworld.c
