[RFC PATCH 1/6] capsule: Add Image GUIDs for platforms using capsule updates
Masami Hiramatsu
masami.hiramatsu at linaro.org
Fri Mar 25 06:28:37 CET 2022
Hi Sughosh,
OK I understand that if the platform uses the FIT capsule, the
fw_images[] must have 1 entry and it is completely non relationship
with dfu_alt_info... We may need a document for this case too.
Thanks,
2022年3月25日(金) 10:09 Masami Hiramatsu <masami.hiramatsu at linaro.org>:
>
> Hi Sughosh,
>
> 2022年3月24日(木) 23:40 Sughosh Ganu <sughosh.ganu at linaro.org>:
> >
> > hi Masami,
> >
> > On Thu, 24 Mar 2022 at 19:14, Masami Hiramatsu
> > <masami.hiramatsu at linaro.org> wrote:
> > >
> > > Hi Sughosh,
> > >
> > > 2022年3月24日(木) 21:39 Sughosh Ganu <sughosh.ganu at linaro.org>:
> > > >
> > > > Currently, all platforms that enable capsule updates do so using
> > > > either EFI_FIRMWARE_IMAGE_TYPE_UBOOT_RAW_GUID or
> > > > EFI_FIRMWARE_IMAGE_TYPE_UBOOT_FIT_GUID. This is based on the Firmware
> > > > Management Protocol(FMP) instance used on the platform. However, this
> > > > means that all platforms that enable a particular FMP instance have
> > > > the same GUID value for all the updatable images, either the FIT image
> > > > GUID or the raw image GUID, and that an image for some platform can be
> > > > updated on any other platform which uses the same FMP instance. Another
> > > > issue with this implementation is that the ESRT table shows the same
> > > > GUID value for all images on the platform and also across platforms,
> > > > which is not in compliance with the UEFI specification.
> > > >
> > > > Fix this by defining image GUID values and firmware names for
> > > > individual images per platform. The GetImageInfo FMP hook would then
> > > > populate these values in the image descriptor array.
> > >
> > > OK, so you have generated GUIDs for each "dfu_alt_info" entry on the
> > > platforms, correct?
> >
> > No, I have generated the fw_images array based on the information that
> > I found in the dfu_alt_info variable for the platform. But this is not
> > correlated to the dfu_alt_info variable. If you think that the array
> > should have more/different entries for your platform, please let me
> > know, and I will change it.
>
> At least for the DeveloperBox, it looks good to me.
> (Hopefully, if you comment the string formatted GUID in the code for
> mkeficapsule, that is perfect. :) )
>
> > > I think you should explain that those GUIDs (fw_images[] entries) must
> > > be corresponding to the dfu_alt_info entries, in the same order.
> >
> > The dfu_alt_info can have more entries than the firmware images that
> > are updatable through capsule update. One example is the ST platforms
> > which have additional entries in the dfu_alt_info. The image
> > descriptor array should only contain entries of images which are
> > updatable through capsule update, since the same information is also
> > used for generating the ESRT. Which is why I have changed the logic to
> > populate the image descriptors through the fw_images array rather than
> > the dfu_alt_info.
>
> I meant, the order of the fw_images array needs to be same as
> dfu_alt_info entries and the firmware entries for dfu_alt_info must be
> the first, because finally we will use the index of the fw_images
> array, which matched to given image type GUID, for specifying
> dfu_alt_info entry.
> Or, without dfu_alt_info, your new fw_images can update the firmware?
> I would like to see such *relationship* at least in the patch
> description and the documentation.
>
> Thank you,
>
>
> >
> > -sughosh
> >
> > > Without that, it is hard to understand why the next patch ([2/6]) works :-)
> > >
> > > Thank you,
> > >
> > > >
> > > > Signed-off-by: Sughosh Ganu <sughosh.ganu at linaro.org>
> > > > ---
> > > > .../imx8mp_rsb3720a1/imx8mp_rsb3720a1.c | 19 +++++++++++++++
> > > > .../imx8mm-cl-iot-gate/imx8mm-cl-iot-gate.c | 18 +++++++++++++++
> > > > board/emulation/qemu-arm/qemu-arm.c | 20 ++++++++++++++++
> > > > board/kontron/pitx_imx8m/pitx_imx8m.c | 15 +++++++++++-
> > > > board/kontron/sl-mx8mm/sl-mx8mm.c | 14 +++++++++++
> > > > board/kontron/sl28/sl28.c | 14 +++++++++++
> > > > board/sandbox/sandbox.c | 17 ++++++++++++++
> > > > board/socionext/developerbox/developerbox.c | 23 +++++++++++++++++++
> > > > board/xilinx/common/board.h | 18 +++++++++++++++
> > > > board/xilinx/zynq/board.c | 18 +++++++++++++++
> > > > board/xilinx/zynqmp/zynqmp.c | 18 +++++++++++++++
> > > > include/configs/imx8mm-cl-iot-gate.h | 10 ++++++++
> > > > include/configs/imx8mp_rsb3720.h | 10 ++++++++
> > > > include/configs/kontron-sl-mx8mm.h | 6 +++++
> > > > include/configs/kontron_pitx_imx8m.h | 6 +++++
> > > > include/configs/kontron_sl28.h | 6 +++++
> > > > include/configs/qemu-arm.h | 10 ++++++++
> > > > include/configs/sandbox.h | 10 ++++++++
> > > > include/configs/synquacer.h | 14 +++++++++++
> > > > include/efi_loader.h | 15 ++++++++++++
> > > > 20 files changed, 280 insertions(+), 1 deletion(-)
> > > >
> > > > diff --git a/board/advantech/imx8mp_rsb3720a1/imx8mp_rsb3720a1.c b/board/advantech/imx8mp_rsb3720a1/imx8mp_rsb3720a1.c
> > > > index 16566092bd..6b534660fe 100644
> > > > --- a/board/advantech/imx8mp_rsb3720a1/imx8mp_rsb3720a1.c
> > > > +++ b/board/advantech/imx8mp_rsb3720a1/imx8mp_rsb3720a1.c
> > > > @@ -6,6 +6,8 @@
> > > >
> > > > #include <common.h>
> > > > #include <dwc3-uboot.h>
> > > > +#include <efi.h>
> > > > +#include <efi_loader.h>
> > > > #include <errno.h>
> > > > #include <miiphy.h>
> > > > #include <netdev.h>
> > > > @@ -21,6 +23,7 @@
> > > > #include <asm/arch/clock.h>
> > > > #include <asm/mach-imx/dma.h>
> > > > #include <linux/delay.h>
> > > > +#include <linux/kernel.h>
> > > > #include <power/pmic.h>
> > > >
> > > > DECLARE_GLOBAL_DATA_PTR;
> > > > @@ -44,6 +47,22 @@ static void setup_gpmi_nand(void)
> > > > }
> > > > #endif
> > > >
> > > > +#if CONFIG_IS_ENABLED(EFI_HAVE_CAPSULE_SUPPORT)
> > > > +struct efi_fw_images fw_images[] = {
> > > > + {
> > > > +#if defined(CONFIG_TARGET_IMX8MP_RSB3720A1_4G)
> > > > + .image_type_id = IMX8MP_RSB3720A1_4G_FIT_IMAGE_GUID,
> > > > +#elif defined(CONFIG_TARGET_IMX8MP_RSB3720A1_6G)
> > > > + .image_type_id = IMX8MP_RSB3720A1_6G_FIT_IMAGE_GUID,
> > > > +#endif
> > > > + .fw_name = u"IMX8MP-RSB3720-FIT"
> > > > + },
> > > > +};
> > > > +
> > > > +u8 num_image_type_guids = ARRAY_SIZE(fw_images);
> > > > +#endif /* EFI_HAVE_CAPSULE_SUPPORT */
> > > > +
> > > > +
> > > > int board_early_init_f(void)
> > > > {
> > > > struct wdog_regs *wdog = (struct wdog_regs *)WDOG1_BASE_ADDR;
> > > > diff --git a/board/compulab/imx8mm-cl-iot-gate/imx8mm-cl-iot-gate.c b/board/compulab/imx8mm-cl-iot-gate/imx8mm-cl-iot-gate.c
> > > > index 7e2d88f449..ec73d75db3 100644
> > > > --- a/board/compulab/imx8mm-cl-iot-gate/imx8mm-cl-iot-gate.c
> > > > +++ b/board/compulab/imx8mm-cl-iot-gate/imx8mm-cl-iot-gate.c
> > > > @@ -5,6 +5,8 @@
> > > > */
> > > >
> > > > #include <common.h>
> > > > +#include <efi.h>
> > > > +#include <efi_loader.h>
> > > > #include <env.h>
> > > > #include <extension_board.h>
> > > > #include <hang.h>
> > > > @@ -21,11 +23,27 @@
> > > > #include <asm/mach-imx/gpio.h>
> > > > #include <asm/mach-imx/mxc_i2c.h>
> > > > #include <asm/sections.h>
> > > > +#include <linux/kernel.h>
> > > >
> > > > #include "ddr/ddr.h"
> > > >
> > > > DECLARE_GLOBAL_DATA_PTR;
> > > >
> > > > +#if CONFIG_IS_ENABLED(EFI_HAVE_CAPSULE_SUPPORT)
> > > > +struct efi_fw_images fw_images[] = {
> > > > + {
> > > > +#if defined(CONFIG_TARGET_IMX8MM_CL_IOT_GATE)
> > > > + .image_type_id = IMX8MM_CL_IOT_GATE_FIT_IMAGE_GUID,
> > > > +#elif defined(CONFIG_TARGET_IMX8MM_CL_IOT_GATE_OPTEE)
> > > > + .image_type_id = IMX8MM_CL_IOT_GATE_OPTEE_FIT_IMAGE_GUID,
> > > > +#endif
> > > > + .fw_name = u"IMX8MM-CL-IOT-GATE-FIT",
> > > > + },
> > > > +};
> > > > +
> > > > +u8 num_image_type_guids = ARRAY_SIZE(fw_images);
> > > > +#endif /* EFI_HAVE_CAPSULE_SUPPORT */
> > > > +
> > > > int board_phys_sdram_size(phys_size_t *size)
> > > > {
> > > > struct lpddr4_tcm_desc *lpddr4_tcm_desc =
> > > > diff --git a/board/emulation/qemu-arm/qemu-arm.c b/board/emulation/qemu-arm/qemu-arm.c
> > > > index 16d5a97167..99872ce0b8 100644
> > > > --- a/board/emulation/qemu-arm/qemu-arm.c
> > > > +++ b/board/emulation/qemu-arm/qemu-arm.c
> > > > @@ -6,15 +6,35 @@
> > > > #include <common.h>
> > > > #include <cpu_func.h>
> > > > #include <dm.h>
> > > > +#include <efi.h>
> > > > +#include <efi_loader.h>
> > > > +#include <efi_loader.h>
> > > > #include <fdtdec.h>
> > > > #include <init.h>
> > > > #include <log.h>
> > > > #include <virtio_types.h>
> > > > #include <virtio.h>
> > > >
> > > > +#include <linux/kernel.h>
> > > > +
> > > > #ifdef CONFIG_ARM64
> > > > #include <asm/armv8/mmu.h>
> > > >
> > > > +#if CONFIG_IS_ENABLED(EFI_HAVE_CAPSULE_SUPPORT)
> > > > +struct efi_fw_images fw_images[] = {
> > > > + {
> > > > +#if defined(CONFIG_TARGET_QEMU_ARM_32BIT)
> > > > + .image_type_id = QEMU_ARM_UBOOT_IMAGE_GUID,
> > > > +#elif defined(CONFIG_TARGET_QEMU_ARM_64BIT)
> > > > + .image_type_id = QEMU_ARM64_UBOOT_IMAGE_GUID,
> > > > +#endif
> > > > + .fw_name = u"Qemu-Arm-UBOOT",
> > > > + },
> > > > +};
> > > > +
> > > > +u8 num_image_type_guids = ARRAY_SIZE(fw_images);
> > > > +#endif /* EFI_HAVE_CAPSULE_SUPPORT */
> > > > +
> > > > static struct mm_region qemu_arm64_mem_map[] = {
> > > > {
> > > > /* Flash */
> > > > diff --git a/board/kontron/pitx_imx8m/pitx_imx8m.c b/board/kontron/pitx_imx8m/pitx_imx8m.c
> > > > index d655fe099b..c3af951b14 100644
> > > > --- a/board/kontron/pitx_imx8m/pitx_imx8m.c
> > > > +++ b/board/kontron/pitx_imx8m/pitx_imx8m.c
> > > > @@ -2,6 +2,8 @@
> > > >
> > > > #include "pitx_misc.h"
> > > > #include <common.h>
> > > > +#include <efi.h>
> > > > +#include <efi_loader.h>
> > > > #include <init.h>
> > > > #include <mmc.h>
> > > > #include <miiphy.h>
> > > > @@ -12,7 +14,7 @@
> > > > #include <asm/mach-imx/gpio.h>
> > > > #include <asm/mach-imx/iomux-v3.h>
> > > > #include <linux/delay.h>
> > > > -
> > > > +#include <linux/kernel.h>
> > > >
> > > > DECLARE_GLOBAL_DATA_PTR;
> > > >
> > > > @@ -30,6 +32,17 @@ static iomux_v3_cfg_t const uart_pads[] = {
> > > > IMX8MQ_PAD_ECSPI1_MISO__UART3_CTS_B | MUX_PAD_CTRL(UART_PAD_CTRL),
> > > > };
> > > >
> > > > +#if CONFIG_IS_ENABLED(EFI_HAVE_CAPSULE_SUPPORT)
> > > > +struct efi_fw_images fw_images[] = {
> > > > + {
> > > > + .image_type_id = KONTRON_PITX_IMX8M_FIT_IMAGE_GUID,
> > > > + .fw_name = u"KONTRON-PITX-IMX8M-UBOOT",
> > > > + },
> > > > +};
> > > > +
> > > > +u8 num_image_type_guids = ARRAY_SIZE(fw_images);
> > > > +#endif /* EFI_HAVE_CAPSULE_SUPPORT */
> > > > +
> > > > int board_early_init_f(void)
> > > > {
> > > > struct wdog_regs *wdog = (struct wdog_regs *)WDOG1_BASE_ADDR;
> > > > diff --git a/board/kontron/sl-mx8mm/sl-mx8mm.c b/board/kontron/sl-mx8mm/sl-mx8mm.c
> > > > index 48376cb826..4d25618895 100644
> > > > --- a/board/kontron/sl-mx8mm/sl-mx8mm.c
> > > > +++ b/board/kontron/sl-mx8mm/sl-mx8mm.c
> > > > @@ -6,12 +6,26 @@
> > > > #include <asm/arch/imx-regs.h>
> > > > #include <asm/global_data.h>
> > > > #include <asm/io.h>
> > > > +#include <efi.h>
> > > > +#include <efi_loader.h>
> > > > #include <fdt_support.h>
> > > > #include <linux/errno.h>
> > > > +#include <linux/kernel.h>
> > > > #include <net.h>
> > > >
> > > > DECLARE_GLOBAL_DATA_PTR;
> > > >
> > > > +#if CONFIG_IS_ENABLED(EFI_HAVE_CAPSULE_SUPPORT)
> > > > +struct efi_fw_images fw_images[] = {
> > > > + {
> > > > + .image_type_id = KONTRON_SL_MX8MM_FIT_IMAGE_GUID,
> > > > + .fw_name = u"KONTROL-SL-MX8MM-UBOOT",
> > > > + },
> > > > +};
> > > > +
> > > > +u8 num_image_type_guids = ARRAY_SIZE(fw_images);
> > > > +#endif /* EFI_HAVE_CAPSULE_SUPPORT */
> > > > +
> > > > int board_phys_sdram_size(phys_size_t *size)
> > > > {
> > > > u32 ddr_size = readl(M4_BOOTROM_BASE_ADDR);
> > > > diff --git a/board/kontron/sl28/sl28.c b/board/kontron/sl28/sl28.c
> > > > index 3c48a9141d..a4985df4ea 100644
> > > > --- a/board/kontron/sl28/sl28.c
> > > > +++ b/board/kontron/sl28/sl28.c
> > > > @@ -3,11 +3,14 @@
> > > > #include <common.h>
> > > > #include <dm.h>
> > > > #include <malloc.h>
> > > > +#include <efi.h>
> > > > +#include <efi_loader.h>
> > > > #include <errno.h>
> > > > #include <fsl_ddr.h>
> > > > #include <fdt_support.h>
> > > > #include <asm/global_data.h>
> > > > #include <linux/libfdt.h>
> > > > +#include <linux/kernel.h>
> > > > #include <env_internal.h>
> > > > #include <asm/arch-fsl-layerscape/soc.h>
> > > > #include <asm/arch-fsl-layerscape/fsl_icid.h>
> > > > @@ -23,6 +26,17 @@
> > > >
> > > > DECLARE_GLOBAL_DATA_PTR;
> > > >
> > > > +#if CONFIG_IS_ENABLED(EFI_HAVE_CAPSULE_SUPPORT)
> > > > +struct efi_fw_images fw_images[] = {
> > > > + {
> > > > + .image_type_id = KONTRON_SL28_FIT_IMAGE_GUID,
> > > > + .fw_name = u"KONTRON-SL28-FIT",
> > > > + },
> > > > +};
> > > > +
> > > > +u8 num_image_type_guids = ARRAY_SIZE(fw_images);
> > > > +#endif /* EFI_HAVE_CAPSULE_SUPPORT */
> > > > +
> > > > int board_early_init_f(void)
> > > > {
> > > > fsl_lsch3_early_init_f();
> > > > diff --git a/board/sandbox/sandbox.c b/board/sandbox/sandbox.c
> > > > index 5d9a945d64..8b0f3de1ea 100644
> > > > --- a/board/sandbox/sandbox.c
> > > > +++ b/board/sandbox/sandbox.c
> > > > @@ -7,6 +7,8 @@
> > > > #include <cpu_func.h>
> > > > #include <cros_ec.h>
> > > > #include <dm.h>
> > > > +#include <efi.h>
> > > > +#include <efi_loader.h>
> > > > #include <env_internal.h>
> > > > #include <init.h>
> > > > #include <led.h>
> > > > @@ -25,6 +27,21 @@
> > > > */
> > > > gd_t *gd;
> > > >
> > > > +#if CONFIG_IS_ENABLED(EFI_HAVE_CAPSULE_SUPPORT)
> > > > +struct efi_fw_images fw_images[] = {
> > > > + {
> > > > + .image_type_id = SANDBOX_UBOOT_IMAGE_GUID,
> > > > + .fw_name = u"SANDBOX-UBOOT",
> > > > + },
> > > > + {
> > > > + .image_type_id = SANDBOX_UBOOT_ENV_IMAGE_GUID,
> > > > + .fw_name = u"SANDBOX-UBOOT-ENV",
> > > > + },
> > > > +};
> > > > +
> > > > +u8 num_image_type_guids = ARRAY_SIZE(fw_images);
> > > > +#endif /* EFI_HAVE_CAPSULE_SUPPORT */
> > > > +
> > > > #if !CONFIG_IS_ENABLED(OF_PLATDATA)
> > > > /*
> > > > * Add a simple GPIO device (don't use with of-platdata as it interferes with
> > > > diff --git a/board/socionext/developerbox/developerbox.c b/board/socionext/developerbox/developerbox.c
> > > > index 9552bfcdc3..4df26f4019 100644
> > > > --- a/board/socionext/developerbox/developerbox.c
> > > > +++ b/board/socionext/developerbox/developerbox.c
> > > > @@ -10,10 +10,33 @@
> > > > #include <asm/global_data.h>
> > > > #include <asm/io.h>
> > > > #include <common.h>
> > > > +#include <efi.h>
> > > > +#include <efi_loader.h>
> > > > #include <env_internal.h>
> > > > #include <fdt_support.h>
> > > > #include <log.h>
> > > >
> > > > +#include <linux/kernel.h>
> > > > +
> > > > +#if CONFIG_IS_ENABLED(EFI_HAVE_CAPSULE_SUPPORT)
> > > > +struct efi_fw_images fw_images[] = {
> > > > + {
> > > > + .image_type_id = DEVELOPERBOX_UBOOT_IMAGE_GUID,
> > > > + .fw_name = u"DEVELOPERBOX-UBOOT",
> > > > + },
> > > > + {
> > > > + .image_type_id = DEVELOPERBOX_FIP_IMAGE_GUID,
> > > > + .fw_name = u"DEVELOPERBOX-FIP",
> > > > + },
> > > > + {
> > > > + .image_type_id = DEVELOPERBOX_OPTEE_IMAGE_GUID,
> > > > + .fw_name = u"DEVELOPERBOX-OPTEE",
> > > > + },
> > > > +};
> > > > +
> > > > +u8 num_image_type_guids = ARRAY_SIZE(fw_images);
> > > > +#endif /* EFI_HAVE_CAPSULE_SUPPORT */
> > > > +
> > > > static struct mm_region sc2a11_mem_map[] = {
> > > > {
> > > > .virt = 0x0UL,
> > > > diff --git a/board/xilinx/common/board.h b/board/xilinx/common/board.h
> > > > index 69e642429b..9bcac14946 100644
> > > > --- a/board/xilinx/common/board.h
> > > > +++ b/board/xilinx/common/board.h
> > > > @@ -7,6 +7,24 @@
> > > > #ifndef _BOARD_XILINX_COMMON_BOARD_H
> > > > #define _BOARD_XILINX_COMMON_BOARD_H
> > > >
> > > > +#if CONFIG_IS_ENABLED(EFI_HAVE_CAPSULE_SUPPORT)
> > > > +#define ZYNQ_BOOT_IMAGE_GUID \
> > > > + EFI_GUID(0x1ba29a15, 0x9969, 0x40aa, 0xb4, 0x24, \
> > > > + 0xe8, 0x61, 0x21, 0x61, 0x86, 0x64)
> > > > +
> > > > +#define ZYNQ_UBOOT_IMAGE_GUID \
> > > > + EFI_GUID(0x1a5178f0, 0x87d3, 0x4f36, 0xac, 0x63, \
> > > > + 0x3b, 0x31, 0xa2, 0x3b, 0xe3, 0x05)
> > > > +
> > > > +#define ZYNQMP_BOOT_IMAGE_GUID \
> > > > + EFI_GUID(0xde6066e8, 0x0256, 0x4fad, 0x82, 0x38, \
> > > > + 0xe4, 0x06, 0xe2, 0x74, 0xc4, 0xcf)
> > > > +
> > > > +#define ZYNQMP_UBOOT_IMAGE_GUID \
> > > > + EFI_GUID(0xcf9ecfd4, 0x938b, 0x41c5, 0x85, 0x51, \
> > > > + 0x1f, 0x88, 0x3a, 0xb7, 0xdc, 0x18)
> > > > +#endif /* EFI_HAVE_CAPSULE_SUPPORT */
> > > > +
> > > > int board_late_init_xilinx(void);
> > > >
> > > > int xilinx_read_eeprom(void);
> > > > diff --git a/board/xilinx/zynq/board.c b/board/xilinx/zynq/board.c
> > > > index 26ef048835..0aa51a3e6d 100644
> > > > --- a/board/xilinx/zynq/board.c
> > > > +++ b/board/xilinx/zynq/board.c
> > > > @@ -8,6 +8,8 @@
> > > > #include <init.h>
> > > > #include <log.h>
> > > > #include <dm/uclass.h>
> > > > +#include <efi.h>
> > > > +#include <efi_loader.h>
> > > > #include <env.h>
> > > > #include <env_internal.h>
> > > > #include <fdtdec.h>
> > > > @@ -21,10 +23,26 @@
> > > > #include <asm/global_data.h>
> > > > #include <asm/arch/hardware.h>
> > > > #include <asm/arch/sys_proto.h>
> > > > +#include <linux/kernel.h>
> > > > #include "../common/board.h"
> > > >
> > > > DECLARE_GLOBAL_DATA_PTR;
> > > >
> > > > +#if CONFIG_IS_ENABLED(EFI_HAVE_CAPSULE_SUPPORT)
> > > > +struct efi_fw_images fw_images[] = {
> > > > + {
> > > > + .image_type_id = ZYNQ_BOOT_IMAGE_GUID,
> > > > + .fw_name = u"ZYNQ-BOOT-IMAGE",
> > > > + },
> > > > + {
> > > > + .image_type_id = ZYNQ_UBOOT_IMAGE_GUID,
> > > > + .fw_name = u"ZYNQ-UBOOT",
> > > > + },
> > > > +};
> > > > +
> > > > +u8 num_image_type_guids = ARRAY_SIZE(fw_images);
> > > > +#endif /* EFI_HAVE_CAPSULE_SUPPORT */
> > > > +
> > > > #if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_DEBUG_UART_BOARD_INIT)
> > > > void board_debug_uart_init(void)
> > > > {
> > > > diff --git a/board/xilinx/zynqmp/zynqmp.c b/board/xilinx/zynqmp/zynqmp.c
> > > > index 70b3c81f12..b232f7ac4f 100644
> > > > --- a/board/xilinx/zynqmp/zynqmp.c
> > > > +++ b/board/xilinx/zynqmp/zynqmp.c
> > > > @@ -9,6 +9,8 @@
> > > > #include <cpu_func.h>
> > > > #include <debug_uart.h>
> > > > #include <dfu.h>
> > > > +#include <efi.h>
> > > > +#include <efi_loader.h>
> > > > #include <env.h>
> > > > #include <env_internal.h>
> > > > #include <init.h>
> > > > @@ -40,6 +42,7 @@
> > > > #include <linux/bitops.h>
> > > > #include <linux/delay.h>
> > > > #include <linux/sizes.h>
> > > > +#include <linux/kernel.h>
> > > > #include "../common/board.h"
> > > >
> > > > #include "pm_cfg_obj.h"
> > > > @@ -54,6 +57,21 @@
> > > >
> > > > DECLARE_GLOBAL_DATA_PTR;
> > > >
> > > > +#if CONFIG_IS_ENABLED(EFI_HAVE_CAPSULE_SUPPORT)
> > > > +struct efi_fw_images fw_images[] = {
> > > > + {
> > > > + .image_type_id = ZYNQMP_BOOT_IMAGE_GUID,
> > > > + .fw_name = u"ZYNQMP-BOOT-IMAGE",
> > > > + },
> > > > + {
> > > > + .image_type_id = ZYNQMP_UBOOT_IMAGE_GUID,
> > > > + .fw_name = u"ZYNQMP-UBOOT",
> > > > + },
> > > > +};
> > > > +
> > > > +u8 num_image_type_guids = ARRAY_SIZE(fw_images);
> > > > +#endif /* EFI_HAVE_CAPSULE_SUPPORT */
> > > > +
> > > > #if CONFIG_IS_ENABLED(FPGA) && defined(CONFIG_FPGA_ZYNQMPPL)
> > > > static xilinx_desc zynqmppl = XILINX_ZYNQMP_DESC;
> > > >
> > > > diff --git a/include/configs/imx8mm-cl-iot-gate.h b/include/configs/imx8mm-cl-iot-gate.h
> > > > index 7e6be6050c..35df2e755e 100644
> > > > --- a/include/configs/imx8mm-cl-iot-gate.h
> > > > +++ b/include/configs/imx8mm-cl-iot-gate.h
> > > > @@ -31,6 +31,16 @@
> > > >
> > > > #endif
> > > >
> > > > +#if CONFIG_IS_ENABLED(EFI_HAVE_CAPSULE_SUPPORT)
> > > > +#define IMX8MM_CL_IOT_GATE_FIT_IMAGE_GUID \
> > > > + EFI_GUID(0x7a32a939, 0xab92, 0x467b, 0x91, 0x52, \
> > > > + 0x74, 0x77, 0x1b, 0x95, 0xe6, 0x46)
> > > > +
> > > > +#define IMX8MM_CL_IOT_GATE_OPTEE_FIT_IMAGE_GUID \
> > > > + EFI_GUID(0x0bf1165c, 0x1831, 0x4864, 0x94, 0x5e, \
> > > > + 0xac, 0x3d, 0x38, 0x48, 0xf4, 0x99)
> > > > +#endif /* EFI_HAVE_CAPSULE_SUPPORT */
> > > > +
> > > > #if CONFIG_IS_ENABLED(CMD_MMC)
> > > > # define BOOT_TARGET_MMC(func) \
> > > > func(MMC, mmc, 2) \
> > > > diff --git a/include/configs/imx8mp_rsb3720.h b/include/configs/imx8mp_rsb3720.h
> > > > index ac4a7d0cb3..a5a845c2da 100644
> > > > --- a/include/configs/imx8mp_rsb3720.h
> > > > +++ b/include/configs/imx8mp_rsb3720.h
> > > > @@ -21,6 +21,16 @@
> > > > #define CONFIG_SYS_MMCSD_FS_BOOT_PARTITION 1
> > > > #define CONFIG_SYS_UBOOT_BASE (QSPI0_AMBA_BASE + CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR * 512)
> > > >
> > > > +#if CONFIG_IS_ENABLED(EFI_HAVE_CAPSULE_SUPPORT)
> > > > +#define IMX8MP_RSB3720A1_4G_FIT_IMAGE_GUID \
> > > > + EFI_GUID(0xb1251e89, 0x384a, 0x4635, 0xa8, 0x06, \
> > > > + 0x3a, 0xa0, 0xb0, 0xe9, 0xf9, 0x65)
> > > > +
> > > > +#define IMX8MP_RSB3720A1_6G_FIT_IMAGE_GUID \
> > > > + EFI_GUID(0xb5fb6f08, 0xe142, 0x4db1, 0x97, 0xea, \
> > > > + 0x5f, 0xd3, 0x6b, 0x9b, 0xe5, 0xb9)
> > > > +#endif /* EFI_HAVE_CAPSULE_SUPPORT*/
> > > > +
> > > > #ifdef CONFIG_SPL_BUILD
> > > > #define CONFIG_SPL_LDSCRIPT "arch/arm/cpu/armv8/u-boot-spl.lds"
> > > > #define CONFIG_SPL_STACK 0x960000
> > > > diff --git a/include/configs/kontron-sl-mx8mm.h b/include/configs/kontron-sl-mx8mm.h
> > > > index 788ae77cd3..aff1b90010 100644
> > > > --- a/include/configs/kontron-sl-mx8mm.h
> > > > +++ b/include/configs/kontron-sl-mx8mm.h
> > > > @@ -38,6 +38,12 @@
> > > > #define CONFIG_USB_MAX_CONTROLLER_COUNT 2
> > > > #endif
> > > >
> > > > +#if CONFIG_IS_ENABLED(EFI_HAVE_CAPSULE_SUPPORT)
> > > > +#define KONTRON_SL_MX8MM_FIT_IMAGE_GUID \
> > > > + EFI_GUID(0xd488e45a, 0x4929, 0x4b55, 0x8c, 0x14, \
> > > > + 0x86, 0xce, 0xa2, 0xcd, 0x66, 0x29)
> > > > +#endif /* EFI_HAVE_CAPSULE_SUPPORT */
> > > > +
> > > > #ifndef CONFIG_SPL_BUILD
> > > > #define BOOT_TARGET_DEVICES(func) \
> > > > func(MMC, mmc, 1) \
> > > > diff --git a/include/configs/kontron_pitx_imx8m.h b/include/configs/kontron_pitx_imx8m.h
> > > > index 0f96b905ab..678364e367 100644
> > > > --- a/include/configs/kontron_pitx_imx8m.h
> > > > +++ b/include/configs/kontron_pitx_imx8m.h
> > > > @@ -14,6 +14,12 @@
> > > > #define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR
> > > > #define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR 0x300
> > > >
> > > > +#if CONFIG_IS_ENABLED(EFI_HAVE_CAPSULE_SUPPORT)
> > > > +#define KONTRON_PITX_IMX8M_FIT_IMAGE_GUID \
> > > > + EFI_GUID(0xc898e959, 0x5b1f, 0x4e6d, 0x88, 0xe0, \
> > > > + 0x40, 0xd4, 0x5c, 0xca, 0x13, 0x99)
> > > > +#endif /* EFI_HAVE_CAPSULE_SUPPORT */
> > > > +
> > > > #ifdef CONFIG_SPL_BUILD
> > > > #define CONFIG_SPL_LDSCRIPT "arch/arm/cpu/armv8/u-boot-spl.lds"
> > > > #define CONFIG_SPL_STACK 0x187FF0
> > > > diff --git a/include/configs/kontron_sl28.h b/include/configs/kontron_sl28.h
> > > > index 448749a7f8..97d0d365f6 100644
> > > > --- a/include/configs/kontron_sl28.h
> > > > +++ b/include/configs/kontron_sl28.h
> > > > @@ -57,6 +57,12 @@
> > > > #define CONFIG_SYS_SPL_MALLOC_START 0x80200000
> > > > #define CONFIG_SYS_MONITOR_LEN (1024 * 1024)
> > > >
> > > > +#if CONFIG_IS_ENABLED(EFI_HAVE_CAPSULE_SUPPORT)
> > > > +#define KONTRON_SL28_FIT_IMAGE_GUID \
> > > > + EFI_GUID(0x86ebd44f, 0xfeb8, 0x466f, 0x8b, 0xb8, \
> > > > + 0x89, 0x06, 0x18, 0x45, 0x6d, 0x8b)
> > > > +#endif /* EFI_HAVE_CAPSULE_SUPPORT */
> > > > +
> > > > /* environment */
> > > > /* see include/configs/ti_armv7_common.h */
> > > > #define ENV_MEM_LAYOUT_SETTINGS \
> > > > diff --git a/include/configs/qemu-arm.h b/include/configs/qemu-arm.h
> > > > index d45f606860..2f2abc746d 100644
> > > > --- a/include/configs/qemu-arm.h
> > > > +++ b/include/configs/qemu-arm.h
> > > > @@ -17,6 +17,16 @@
> > > >
> > > > #define CONFIG_SYS_BOOTM_LEN SZ_64M
> > > >
> > > > +#if CONFIG_IS_ENABLED(EFI_HAVE_CAPSULE_SUPPORT)
> > > > +#define QEMU_ARM_UBOOT_IMAGE_GUID \
> > > > + EFI_GUID(0xf885b085, 0x99f8, 0x45af, 0x84, 0x7d, \
> > > > + 0xd5, 0x14, 0x10, 0x7a, 0x4a, 0x2c)
> > > > +
> > > > +#define QEMU_ARM64_UBOOT_IMAGE_GUID \
> > > > + EFI_GUID(0x058b7d83, 0x50d5, 0x4c47, 0xa1, 0x95, \
> > > > + 0x60, 0xd8, 0x6a, 0xd3, 0x41, 0xc4)
> > > > +#endif /* EFI_HAVE_CAPSULE_SUPPORT */
> > > > +
> > > > /* For timer, QEMU emulates an ARMv7/ARMv8 architected timer */
> > > >
> > > > /* Environment options */
> > > > diff --git a/include/configs/sandbox.h b/include/configs/sandbox.h
> > > > index 75efbf3448..d06c3de2e0 100644
> > > > --- a/include/configs/sandbox.h
> > > > +++ b/include/configs/sandbox.h
> > > > @@ -14,6 +14,16 @@
> > > >
> > > > #define CONFIG_SYS_CBSIZE 1024 /* Console I/O Buffer Size */
> > > >
> > > > +#if CONFIG_IS_ENABLED(EFI_HAVE_CAPSULE_SUPPORT)
> > > > +#define SANDBOX_UBOOT_IMAGE_GUID \
> > > > + EFI_GUID(0x09d7cf52, 0x0720, 0x4710, 0x91, 0xd1, \
> > > > + 0x08, 0x46, 0x9b, 0x7f, 0xe9, 0xc8)
> > > > +
> > > > +#define SANDBOX_UBOOT_ENV_IMAGE_GUID \
> > > > + EFI_GUID(0x5a7021f5, 0xfef2, 0x48b4, 0xaa, 0xba, \
> > > > + 0x83, 0x2e, 0x77, 0x74, 0x18, 0xc0)
> > > > +#endif /* EFI_HAVE_CAPSULE_SUPPORT */
> > > > +
> > > > /* Size of our emulated memory */
> > > > #define SB_CONCAT(x, y) x ## y
> > > > #define SB_TO_UL(s) SB_CONCAT(s, UL)
> > > > diff --git a/include/configs/synquacer.h b/include/configs/synquacer.h
> > > > index 8dd092fc59..07e1f56e3d 100644
> > > > --- a/include/configs/synquacer.h
> > > > +++ b/include/configs/synquacer.h
> > > > @@ -51,6 +51,20 @@
> > > > "fip.bin raw 180000 78000;" \
> > > > "optee.bin raw 500000 100000\0"
> > > >
> > > > +#if CONFIG_IS_ENABLED(EFI_HAVE_CAPSULE_SUPPORT)
> > > > +#define DEVELOPERBOX_UBOOT_IMAGE_GUID \
> > > > + EFI_GUID(0x53a92e83, 0x4ef4, 0x473a, 0x8b, 0x0d, \
> > > > + 0xb5, 0xd8, 0xc7, 0xb2, 0xd6, 0x00)
> > > > +
> > > > +#define DEVELOPERBOX_FIP_IMAGE_GUID \
> > > > + EFI_GUID(0x880866e9, 0x84ba, 0x4793, 0xa9, 0x08, \
> > > > + 0x33, 0xe0, 0xb9, 0x16, 0xf3, 0x98)
> > > > +
> > > > +#define DEVELOPERBOX_OPTEE_IMAGE_GUID \
> > > > + EFI_GUID(0xc1b629f1, 0xce0e, 0x4894, 0x82, 0xbf, \
> > > > + 0xf0, 0xa3, 0x83, 0x87, 0xe6, 0x30)
> > > > +#endif /* EFI_HAVE_CAPSULE_SUPPORT */
> > > > +
> > > > /* Distro boot settings */
> > > > #ifndef CONFIG_SPL_BUILD
> > > > #ifdef CONFIG_CMD_USB
> > > > diff --git a/include/efi_loader.h b/include/efi_loader.h
> > > > index af36639ec6..1965b5a28f 100644
> > > > --- a/include/efi_loader.h
> > > > +++ b/include/efi_loader.h
> > > > @@ -979,6 +979,21 @@ efi_status_t efi_capsule_authenticate(const void *capsule,
> > > >
> > > > #define EFI_CAPSULE_DIR u"\\EFI\\UpdateCapsule\\"
> > > >
> > > > +/**
> > > > + * struct efi_fw_images - List of firmware images updatable through capsule
> > > > + * update
> > > > + *
> > > > + * This structure gives information about the firmware images on the platform
> > > > + * which can be updated through the capsule update mechanism
> > > > + *
> > > > + * @image_type_id: Image GUID. Same value is to be used in the capsule
> > > > + * @fw_name: Name of the firmware image
> > > > + */
> > > > +struct efi_fw_images {
> > > > + efi_guid_t image_type_id;
> > > > + const u16 *fw_name;
> > > > +};
> > > > +
> > > > /**
> > > > * Install the ESRT system table.
> > > > *
> > > > --
> > > > 2.25.1
> > > >
> > >
> > >
> > > --
> > > Masami Hiramatsu
>
>
>
> --
> Masami Hiramatsu
--
Masami Hiramatsu
More information about the U-Boot
mailing list