Message ID | 20240916-u-boot-topic-dynamic-uuid-v1-2-7e4f48542a0f@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | ARM: meson: libretech-ac: add suppor for EFI Capsules Update | expand |
Thanks Neil! On Mon, 16 Sept 2024 at 12:41, Neil Armstrong <neil.armstrong@linaro.org> wrote: > > Since the aml-s805-cc works well using EFI, and now the capsule updates > backend has been merged, let's enable the missing configs and add > the required structures to support it. > > The GUID is dynamically generated for the board, to get it: > => efidebug capsule esrt > ======================================== > ESRT: fw_resource_count=1 > ESRT: fw_resource_count_max=1 > ESRT: fw_resource_version=1 > [entry 0]============================== > ESRT: fw_class=B8079027-9B2C-57D4-86AA-CC782ADA598C > ESRT: fw_type=unknown > ESRT: fw_version=0 > ESRT: lowest_supported_fw_version=0 > ESRT: capsule_flags=0 > ESRT: last_attempt_version=0 > ESRT: last_attempt_status=success > ======================================== > > On the host (with the aml_encrypt_gxl result binary): > $ eficapsule --guid B8079027-9B2C-57D4-86AA-CC782ADA598C -i 1 u-boot.bin u-boot.cap > > On the board (from USB disk containing u-boot.cap at root): > => load usb 0:1 $kernel_addr_r u-boot.cap > => efidebug capsule update $kernel_addr_r > > The binary will then be flashed on the SPI. > > Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org> > --- > board/libre-computer/aml-s805x-ac/aml-s805x-ac.c | 14 ++++++++++++++ > configs/libretech-ac_defconfig | 5 +++++ > 2 files changed, 19 insertions(+) > > diff --git a/board/libre-computer/aml-s805x-ac/aml-s805x-ac.c b/board/libre-computer/aml-s805x-ac/aml-s805x-ac.c > index ae9834c0bf8..ba14df54967 100644 > --- a/board/libre-computer/aml-s805x-ac/aml-s805x-ac.c > +++ b/board/libre-computer/aml-s805x-ac/aml-s805x-ac.c > @@ -8,6 +8,7 @@ > #include <env.h> > #include <init.h> > #include <net.h> > +#include <efi_loader.h> > #include <asm/io.h> > #include <asm/arch/gx.h> > #include <asm/arch/sm.h> > @@ -19,6 +20,19 @@ > #define EFUSE_MAC_OFFSET 52 > #define EFUSE_MAC_SIZE 6 > > +struct efi_fw_image fw_images[] = { > + { > + .fw_name = u"AML_S805X_AC_BOOT", > + .image_index = 1, > + }, > +}; > + > +struct efi_capsule_update_info update_info = { > + .dfu_string = "sf 0:0=u-boot-bin raw 0 0x10000", > + .num_images = ARRAY_SIZE(fw_images), > + .images = fw_images, > +}; > + > int misc_init_r(void) > { > u8 mac_addr[EFUSE_MAC_SIZE + 1]; > diff --git a/configs/libretech-ac_defconfig b/configs/libretech-ac_defconfig > index 11d9795e05d..f146a495654 100644 > --- a/configs/libretech-ac_defconfig > +++ b/configs/libretech-ac_defconfig > @@ -35,6 +35,7 @@ CONFIG_SYS_MAXARGS=32 > # CONFIG_CMD_IMI is not set > CONFIG_CMD_ADC=y > CONFIG_CMD_DFU=y > +CONFIG_CMD_NVEDIT_EFI=y > CONFIG_CMD_GPIO=y > # CONFIG_CMD_LOADS is not set > CONFIG_CMD_MMC=y > @@ -42,6 +43,7 @@ CONFIG_CMD_SF_TEST=y > CONFIG_CMD_SPI=y > CONFIG_CMD_USB=y > CONFIG_CMD_USB_MASS_STORAGE=y > +CONFIG_CMD_EFIDEBUG=y > # CONFIG_CMD_SETEXPR is not set > CONFIG_CMD_REGULATOR=y > CONFIG_OF_CONTROL=y > @@ -49,6 +51,7 @@ CONFIG_ENV_IS_IN_SPI_FLASH=y > CONFIG_SYS_RELOC_GD_ENV_ADDR=y > CONFIG_SARADC_MESON=y > CONFIG_DFU_RAM=y > +CONFIG_DFU_SF=y > CONFIG_MMC_MESON_GX=y > CONFIG_MTD=y > CONFIG_DM_MTD=y > @@ -98,3 +101,5 @@ CONFIG_VIDEO_BMP_RLE8=y > CONFIG_BMP_16BPP=y > CONFIG_BMP_24BPP=y > CONFIG_BMP_32BPP=y > +CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y > +CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y > > -- > 2.34.1 > Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
diff --git a/board/libre-computer/aml-s805x-ac/aml-s805x-ac.c b/board/libre-computer/aml-s805x-ac/aml-s805x-ac.c index ae9834c0bf8..ba14df54967 100644 --- a/board/libre-computer/aml-s805x-ac/aml-s805x-ac.c +++ b/board/libre-computer/aml-s805x-ac/aml-s805x-ac.c @@ -8,6 +8,7 @@ #include <env.h> #include <init.h> #include <net.h> +#include <efi_loader.h> #include <asm/io.h> #include <asm/arch/gx.h> #include <asm/arch/sm.h> @@ -19,6 +20,19 @@ #define EFUSE_MAC_OFFSET 52 #define EFUSE_MAC_SIZE 6 +struct efi_fw_image fw_images[] = { + { + .fw_name = u"AML_S805X_AC_BOOT", + .image_index = 1, + }, +}; + +struct efi_capsule_update_info update_info = { + .dfu_string = "sf 0:0=u-boot-bin raw 0 0x10000", + .num_images = ARRAY_SIZE(fw_images), + .images = fw_images, +}; + int misc_init_r(void) { u8 mac_addr[EFUSE_MAC_SIZE + 1]; diff --git a/configs/libretech-ac_defconfig b/configs/libretech-ac_defconfig index 11d9795e05d..f146a495654 100644 --- a/configs/libretech-ac_defconfig +++ b/configs/libretech-ac_defconfig @@ -35,6 +35,7 @@ CONFIG_SYS_MAXARGS=32 # CONFIG_CMD_IMI is not set CONFIG_CMD_ADC=y CONFIG_CMD_DFU=y +CONFIG_CMD_NVEDIT_EFI=y CONFIG_CMD_GPIO=y # CONFIG_CMD_LOADS is not set CONFIG_CMD_MMC=y @@ -42,6 +43,7 @@ CONFIG_CMD_SF_TEST=y CONFIG_CMD_SPI=y CONFIG_CMD_USB=y CONFIG_CMD_USB_MASS_STORAGE=y +CONFIG_CMD_EFIDEBUG=y # CONFIG_CMD_SETEXPR is not set CONFIG_CMD_REGULATOR=y CONFIG_OF_CONTROL=y @@ -49,6 +51,7 @@ CONFIG_ENV_IS_IN_SPI_FLASH=y CONFIG_SYS_RELOC_GD_ENV_ADDR=y CONFIG_SARADC_MESON=y CONFIG_DFU_RAM=y +CONFIG_DFU_SF=y CONFIG_MMC_MESON_GX=y CONFIG_MTD=y CONFIG_DM_MTD=y @@ -98,3 +101,5 @@ CONFIG_VIDEO_BMP_RLE8=y CONFIG_BMP_16BPP=y CONFIG_BMP_24BPP=y CONFIG_BMP_32BPP=y +CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y +CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y
Since the aml-s805-cc works well using EFI, and now the capsule updates backend has been merged, let's enable the missing configs and add the required structures to support it. The GUID is dynamically generated for the board, to get it: => efidebug capsule esrt ======================================== ESRT: fw_resource_count=1 ESRT: fw_resource_count_max=1 ESRT: fw_resource_version=1 [entry 0]============================== ESRT: fw_class=B8079027-9B2C-57D4-86AA-CC782ADA598C ESRT: fw_type=unknown ESRT: fw_version=0 ESRT: lowest_supported_fw_version=0 ESRT: capsule_flags=0 ESRT: last_attempt_version=0 ESRT: last_attempt_status=success ======================================== On the host (with the aml_encrypt_gxl result binary): $ eficapsule --guid B8079027-9B2C-57D4-86AA-CC782ADA598C -i 1 u-boot.bin u-boot.cap On the board (from USB disk containing u-boot.cap at root): => load usb 0:1 $kernel_addr_r u-boot.cap => efidebug capsule update $kernel_addr_r The binary will then be flashed on the SPI. Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org> --- board/libre-computer/aml-s805x-ac/aml-s805x-ac.c | 14 ++++++++++++++ configs/libretech-ac_defconfig | 5 +++++ 2 files changed, 19 insertions(+)