diff mbox series

[v13,12/15] test: dm: Add test cases for FWU Metadata uclass

Message ID 20221006090629.436518-13-sughosh.ganu@linaro.org
State Superseded
Headers show
Series FWU: Add FWU Multi Bank Update feature support | expand

Commit Message

Sughosh Ganu Oct. 6, 2022, 9:06 a.m. UTC
Add test cases for accessing the FWU Metadata on the sandbox
platform. The sandbox platform also uses the metadata access driver
for GPT partitioned block devices.

The FWU feature will be tested on the sandbox64 variant with a raw
capsule. Remove the FIT capsule testing from sandbox64 defconfig --
the FIT capsule test will be run on the sandbox_flattree variant.

Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
Suggested-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
---
Changes since V12: None

 arch/sandbox/Kconfig                          |   6 +
 arch/sandbox/dts/test.dts                     |   7 +-
 board/sandbox/sandbox.c                       |   8 +
 configs/sandbox64_defconfig                   |   5 +-
 lib/fwu_updates/fwu.c                         |   6 +
 test/dm/Makefile                              |   1 +
 test/dm/fwu_mdata.c                           | 149 ++++++++++++++++++
 test/dm/fwu_mdata_disk_image.h                | 112 +++++++++++++
 .../test_capsule_firmware_fit.py              |   1 -
 .../test_capsule_firmware_signed_fit.py       |   1 -
 tools/Makefile                                |   2 +-
 11 files changed, 293 insertions(+), 5 deletions(-)
 create mode 100644 test/dm/fwu_mdata.c
 create mode 100644 test/dm/fwu_mdata_disk_image.h

Comments

Etienne Carriere Oct. 6, 2022, 2:06 p.m. UTC | #1
Hi Sughosh,

On Thu, 6 Oct 2022 at 11:07, Sughosh Ganu <sughosh.ganu@linaro.org> wrote:
>
> Add test cases for accessing the FWU Metadata on the sandbox
> platform. The sandbox platform also uses the metadata access driver
> for GPT partitioned block devices.
>
> The FWU feature will be tested on the sandbox64 variant with a raw
> capsule. Remove the FIT capsule testing from sandbox64 defconfig --
> the FIT capsule test will be run on the sandbox_flattree variant.
>
> Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
> Suggested-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> ---
> Changes since V12: None
>
>  arch/sandbox/Kconfig                          |   6 +
>  arch/sandbox/dts/test.dts                     |   7 +-
>  board/sandbox/sandbox.c                       |   8 +
>  configs/sandbox64_defconfig                   |   5 +-
>  lib/fwu_updates/fwu.c                         |   6 +
>  test/dm/Makefile                              |   1 +
>  test/dm/fwu_mdata.c                           | 149 ++++++++++++++++++
>  test/dm/fwu_mdata_disk_image.h                | 112 +++++++++++++
>  .../test_capsule_firmware_fit.py              |   1 -
>  .../test_capsule_firmware_signed_fit.py       |   1 -
>  tools/Makefile                                |   2 +-
>  11 files changed, 293 insertions(+), 5 deletions(-)
>  create mode 100644 test/dm/fwu_mdata.c
>  create mode 100644 test/dm/fwu_mdata_disk_image.h
>
> diff --git a/arch/sandbox/Kconfig b/arch/sandbox/Kconfig
> index 852a7c8bf2..40cdea7d46 100644
> --- a/arch/sandbox/Kconfig
> +++ b/arch/sandbox/Kconfig
> @@ -84,3 +84,9 @@ config SYS_FDT_LOAD_ADDR
>           See `doc/arch/sandbox.rst` for more information.
>
>  endmenu
> +
> +config FWU_NUM_BANKS
> +       default 2
> +
> +config FWU_NUM_IMAGES_PER_BANK
> +       default 2
> diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts
> index 4ee471238e..a4f6fc3abe 100644
> --- a/arch/sandbox/dts/test.dts
> +++ b/arch/sandbox/dts/test.dts
> @@ -950,7 +950,7 @@
>         };
>
>         /* This is used for the fastboot tests */
> -       mmc0 {
> +       mmc0: mmc0 {
>                 compatible = "sandbox,mmc";
>         };
>
> @@ -1690,6 +1690,11 @@
>                         compatible = "sandbox,regmap_test";
>                 };
>         };
> +
> +       fwu-mdata {
> +               compatible = "u-boot,fwu-mdata-gpt";
> +               fwu-mdata-store = <&mmc0>;
> +       };
>  };
>
>  #include "sandbox_pmic.dtsi"
> diff --git a/board/sandbox/sandbox.c b/board/sandbox/sandbox.c
> index ca9a2ca5b1..c3d0c35444 100644
> --- a/board/sandbox/sandbox.c
> +++ b/board/sandbox/sandbox.c
> @@ -164,3 +164,11 @@ int init_addr_map(void)
>
>         return 0;
>  }
> +
> +#if defined(CONFIG_FWU_MULTI_BANK_UPDATE)
> +void fwu_plat_get_bootidx(uint *boot_idx)
> +{
> +       /* Dummy value */
> +       *boot_idx = 0;
> +}
> +#endif
> diff --git a/configs/sandbox64_defconfig b/configs/sandbox64_defconfig
> index b20b181ab1..8b0d35f484 100644
> --- a/configs/sandbox64_defconfig
> +++ b/configs/sandbox64_defconfig
> @@ -244,9 +244,12 @@ CONFIG_LZ4=y
>  CONFIG_ERRNO_STR=y
>  CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y
>  CONFIG_EFI_CAPSULE_ON_DISK=y
> -CONFIG_EFI_CAPSULE_FIRMWARE_FIT=y
> +CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y
>  CONFIG_EFI_SECURE_BOOT=y
>  CONFIG_TEST_FDTDEC=y
>  CONFIG_UNIT_TEST=y
>  CONFIG_UT_TIME=y
>  CONFIG_UT_DM=y
> +CONFIG_FWU_MDATA=y
> +CONFIG_FWU_MDATA_GPT_BLK=y
> +CONFIG_FWU_MULTI_BANK_UPDATE=y
> diff --git a/lib/fwu_updates/fwu.c b/lib/fwu_updates/fwu.c
> index ea8d4144b2..9e3d9e962a 100644
> --- a/lib/fwu_updates/fwu.c
> +++ b/lib/fwu_updates/fwu.c
> @@ -551,6 +551,12 @@ static int fwu_boottime_checks(void *ctx, struct event *event)
>         struct udevice *dev;
>         u32 boot_idx, active_idx;
>
> +       /* Don't have boot time checks on sandbox */
> +       if (IS_ENABLED(CONFIG_SANDBOX)) {
> +               boottime_check = 1;
> +               return 0;
> +       }
> +
>         ret = fwu_get_dev_mdata(&dev, NULL);
>         if (ret)
>                 return ret;
> diff --git a/test/dm/Makefile b/test/dm/Makefile
> index 5178daa7cf..8b2ac9e989 100644
> --- a/test/dm/Makefile
> +++ b/test/dm/Makefile
> @@ -47,6 +47,7 @@ ifneq ($(CONFIG_EFI_PARTITION),)
>  obj-$(CONFIG_FASTBOOT_FLASH_MMC) += fastboot.o
>  endif
>  obj-$(CONFIG_FIRMWARE) += firmware.o
> +obj-$(CONFIG_FWU_MDATA_GPT_BLK) += fwu_mdata.o
>  obj-$(CONFIG_DM_HWSPINLOCK) += hwspinlock.o
>  obj-$(CONFIG_DM_I2C) += i2c.o
>  obj-$(CONFIG_SOUND) += i2s.o
> diff --git a/test/dm/fwu_mdata.c b/test/dm/fwu_mdata.c
> new file mode 100644
> index 0000000000..3401fb64d5
> --- /dev/null
> +++ b/test/dm/fwu_mdata.c
> @@ -0,0 +1,149 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (c) 2022, Linaro Limited
> + * Copyright (c) 2022, Heinrich Schuchardt <xypron.glpk@gmx.de>
> + */
> +
> +#include <blk.h>
> +#include <common.h>
> +#include <dm.h>
> +#include <fwu.h>
> +#include <fwu_mdata.h>
> +#include <log.h>
> +#include <malloc.h>
> +#include <memalign.h>
> +#include <part.h>
> +
> +#include <dm/test.h>
> +#include <test/ut.h>
> +
> +#include "fwu_mdata_disk_image.h"
> +
> +/* Block size of compressed disk image */
> +#define COMPRESSED_DISK_IMAGE_BLOCK_SIZE 8
> +
> +static struct udevice *mmc_dev;
> +static struct blk_desc *dev_desc;
> +
> +/* One 8 byte block of the compressed disk image */
> +struct line {
> +       size_t addr;
> +       char *line;
> +};
> +
> +/* Compressed disk image */
> +struct compressed_disk_image {
> +       size_t length;
> +       struct line lines[];
> +};
> +
> +static const struct compressed_disk_image img = FWU_MDATA_DISK_IMG;
> +
> +/* Decompressed disk image */
> +static u8 *image;
> +
> +static int setup_blk_device(struct unit_test_state *uts)
> +{
> +       ut_assertok(uclass_get_device(UCLASS_MMC, 0, &mmc_dev));
> +       ut_assertok(blk_get_device_by_str("mmc", "0", &dev_desc));
> +
> +       return 0;
> +}
> +
> +static int populate_mmc_disk_image(struct unit_test_state *uts)
> +{
> +       u8 *buf;
> +       size_t i;
> +       size_t addr;
> +       size_t len;
> +
> +       buf = malloc(img.length);
> +       if (!buf)
> +               return -ENOMEM;
> +
> +       memset(buf, 0, img.length);
> +
> +       for (i = 0; ; i++) {
> +               if (!img.lines[i].line)
> +                       break;
> +               addr = img.lines[i].addr;
> +               len = COMPRESSED_DISK_IMAGE_BLOCK_SIZE;
> +               if (addr + len > img.length)
> +                       len = img.length - addr;
> +               memcpy(buf + addr, img.lines[i].line, len);
> +       }
> +       image = buf;
> +
> +       return 0;
> +}
> +
> +static int write_mmc_blk_device(struct unit_test_state *uts)
> +{
> +       lbaint_t blkcnt;
> +
> +       blkcnt = BLOCK_CNT(img.length, dev_desc);
> +
> +       ut_asserteq(blkcnt, blk_dwrite(dev_desc, 0, blkcnt, image));
> +
> +       return 0;
> +}
> +
> +static int dm_test_fwu_mdata_read(struct unit_test_state *uts)
> +{
> +       struct udevice *dev;
> +       struct fwu_mdata mdata = { 0 };
> +
> +       ut_assertok(uclass_first_device(UCLASS_FWU_MDATA, &dev));
> +       ut_assertok(setup_blk_device(uts));
> +       ut_assertok(populate_mmc_disk_image(uts));
> +       ut_assertok(write_mmc_blk_device(uts));
> +
> +       ut_assertok(fwu_get_mdata(dev, &mdata));
> +
> +       ut_asserteq(mdata.version, 0x1);
> +
> +       return 0;
> +}
> +DM_TEST(dm_test_fwu_mdata_read, UT_TESTF_SCAN_FDT);
> +
> +static int dm_test_fwu_mdata_write(struct unit_test_state *uts)
> +{
> +       u32 active_idx;
> +       struct udevice *dev;
> +       struct fwu_mdata mdata = { 0 };
> +
> +       ut_assertok(setup_blk_device(uts));
> +       ut_assertok(populate_mmc_disk_image(uts));
> +       ut_assertok(write_mmc_blk_device(uts));
> +
> +       ut_assertok(uclass_first_device(UCLASS_FWU_MDATA, &dev));
> +       ut_assertnonnull(dev);
> +
> +       ut_assertok(fwu_get_mdata(dev, &mdata));
> +
> +       active_idx = (mdata.active_index + 1) % CONFIG_FWU_NUM_BANKS;
> +       ut_assertok(fwu_set_active_index(active_idx));
> +
> +       ut_assertok(fwu_get_mdata(dev, &mdata));
> +       ut_asserteq(mdata.active_index, active_idx);
> +
> +       return 0;
> +}
> +DM_TEST(dm_test_fwu_mdata_write, UT_TESTF_SCAN_FDT);
> +
> +static int dm_test_fwu_mdata_check(struct unit_test_state *uts)
> +{
> +       struct udevice *dev;
> +
> +       ut_assertok(setup_blk_device(uts));
> +       ut_assertok(populate_mmc_disk_image(uts));
> +       ut_assertok(write_mmc_blk_device(uts));
> +
> +       ut_assertok(uclass_first_device(UCLASS_FWU_MDATA, &dev));
> +       ut_assertnonnull(dev);
> +
> +       ut_assertok(fwu_mdata_check(dev));
> +
> +       return 0;
> +}
> +DM_TEST(dm_test_fwu_mdata_check, UT_TESTF_SCAN_FDT);
> diff --git a/test/dm/fwu_mdata_disk_image.h b/test/dm/fwu_mdata_disk_image.h
> new file mode 100644
> index 0000000000..b9803417c8
> --- /dev/null
> +++ b/test/dm/fwu_mdata_disk_image.h
> @@ -0,0 +1,112 @@
> +/* SPDX-License-Identifier: GPL-2.0+ */
> +/*
> + *  Non-zero 8 byte strings of a disk image
> + *
> + *  Generated with tools/file2include
> + */
> +
> +#define FWU_MDATA_DISK_IMG { 0x00010000, { \
> +       {0x000001c0, "\x02\x00\xee\x02\x02\x00\x01\x00"}, /* ........ */ \
> +       {0x000001c8, "\x00\x00\x7f\x00\x00\x00\x00\x00"}, /* ........ */ \
> +       {0x000001f8, "\x00\x00\x00\x00\x00\x00\x55\xaa"}, /* ......U. */ \
> +       {0x00000200, "\x45\x46\x49\x20\x50\x41\x52\x54"}, /* EFI PART */ \
> +       {0x00000208, "\x00\x00\x01\x00\x5c\x00\x00\x00"}, /* ....\... */ \
> +       {0x00000210, "\xa6\xf6\x92\x20\x00\x00\x00\x00"}, /* ... .... */ \
> +       {0x00000218, "\x01\x00\x00\x00\x00\x00\x00\x00"}, /* ........ */ \
> +       {0x00000220, "\x7f\x00\x00\x00\x00\x00\x00\x00"}, /* ........ */ \
> +       {0x00000228, "\x22\x00\x00\x00\x00\x00\x00\x00"}, /* "....... */ \
> +       {0x00000230, "\x5e\x00\x00\x00\x00\x00\x00\x00"}, /* ^....... */ \
> +       {0x00000238, "\xde\x99\xa2\x7e\x46\x34\xeb\x47"}, /* ...~F4.G */ \
> +       {0x00000240, "\x87\xf6\x4f\x75\xe8\xd5\x7d\xc7"}, /* ..Ou..}. */ \
> +       {0x00000248, "\x02\x00\x00\x00\x00\x00\x00\x00"}, /* ........ */ \
> +       {0x00000250, "\x80\x00\x00\x00\x80\x00\x00\x00"}, /* ........ */ \
> +       {0x00000258, "\x2a\x64\x03\x83\x00\x00\x00\x00"}, /* .d...... */ \
> +       {0x00000400, "\xa0\x84\x7a\x8a\x87\x83\xf6\x40"}, /* ..z....@ */ \
> +       {0x00000408, "\xab\x41\xa8\xb9\xa5\xa6\x0d\x23"}, /* .A.....# */ \
> +       {0x00000410, "\x3d\x6c\xb9\xaa\x20\xb2\x18\x4c"}, /* =l.. ..L */ \
> +       {0x00000418, "\xbc\x87\x1c\x9f\xe0\x35\x9b\x73"}, /* .....5.s */ \
> +       {0x00000420, "\x22\x00\x00\x00\x00\x00\x00\x00"}, /* "....... */ \
> +       {0x00000428, "\x31\x00\x00\x00\x00\x00\x00\x00"}, /* 1....... */ \
> +       {0x00000438, "\x55\x00\x6e\x00\x6b\x00\x6e\x00"}, /* U.n.k.n. */ \
> +       {0x00000440, "\x6f\x00\x77\x00\x6e\x00\x00\x00"}, /* o.w.n... */ \
> +       {0x00000480, "\xa0\x84\x7a\x8a\x87\x83\xf6\x40"}, /* ..z....@ */ \
> +       {0x00000488, "\xab\x41\xa8\xb9\xa5\xa6\x0d\x23"}, /* .A.....# */ \
> +       {0x00000490, "\x57\x24\xf6\xe6\x0b\x6f\x66\x4e"}, /* W$...ofN */ \
> +       {0x00000498, "\xb3\xd5\x99\x50\xa5\xc6\x4e\xc1"}, /* ...P..N. */ \
> +       {0x000004a0, "\x32\x00\x00\x00\x00\x00\x00\x00"}, /* 2....... */ \
> +       {0x000004a8, "\x41\x00\x00\x00\x00\x00\x00\x00"}, /* A....... */ \
> +       {0x000004b8, "\x55\x00\x6e\x00\x6b\x00\x6e\x00"}, /* U.n.k.n. */ \
> +       {0x000004c0, "\x6f\x00\x77\x00\x6e\x00\x00\x00"}, /* o.w.n... */ \
> +       {0x00004400, "\x4e\xd5\x3f\x43\x01\x00\x00\x00"}, /* N.?C.... */ \
> +       {0x00004408, "\x00\x00\x00\x00\x01\x00\x00\x00"}, /* ........ */ \
> +       {0x00004410, "\x52\xcf\xd7\x09\x20\x07\x10\x47"}, /* R... ..G */ \
> +       {0x00004418, "\x91\xd1\x08\x46\x9b\x7f\xe9\xc8"}, /* ...F.... */ \
> +       {0x00004420, "\xeb\x2b\x27\x49\xd8\x8d\xdf\x46"}, /* .+'I...F */ \
> +       {0x00004428, "\x8d\x75\x35\x6c\x65\xef\xf4\x17"}, /* .u5le... */ \
> +       {0x00004430, "\x86\x7a\x05\x10\xf1\xda\x93\x4f"}, /* .z.....O */ \
> +       {0x00004438, "\xba\x7f\xb1\x95\xf7\xfa\x41\x70"}, /* ......Ap */ \
> +       {0x00004440, "\x01\x00\x00\x00\x00\x00\x00\x00"}, /* ........ */ \
> +       {0x00004448, "\x3e\xed\x62\xdb\x37\x62\xb4\x4f"}, /* >.b.7b.O */ \
> +       {0x00004450, "\x80\xc4\x1b\x74\xd8\x46\xa8\xe7"}, /* ...t.F.. */ \
> +       {0x00004458, "\x01\x00\x00\x00\x00\x00\x00\x00"}, /* ........ */ \
> +       {0x00004460, "\xf5\x21\x70\x5a\xf2\xfe\xb4\x48"}, /* .!pZ...H */ \
> +       {0x00004468, "\xaa\xba\x83\x2e\x77\x74\x18\xc0"}, /* ....wt.. */ \
> +       {0x00004470, "\xeb\x2b\x27\x49\xd8\x8d\xdf\x46"}, /* .+'I...F */ \
> +       {0x00004478, "\x8d\x75\x35\x6c\x65\xef\xf4\x17"}, /* .u5le... */ \
> +       {0x00004480, "\x3b\x0e\xd2\x0b\x9f\xab\x86\x49"}, /* ;......I */ \
> +       {0x00004488, "\xb7\x90\x8d\xf3\x9c\x9c\xa3\x82"}, /* ........ */ \
> +       {0x00004490, "\x01\x00\x00\x00\x00\x00\x00\x00"}, /* ........ */ \
> +       {0x00004498, "\x6d\xe4\x25\x0e\x15\xb6\xd3\x4c"}, /* m.%....L */ \
> +       {0x000044a0, "\x94\xda\x51\x79\x8f\xb1\x9e\xb1"}, /* ..Qy.... */ \
> +       {0x000044a8, "\x01\x00\x00\x00\x00\x00\x00\x00"}, /* ........ */ \
> +       {0x00006400, "\x4e\xd5\x3f\x43\x01\x00\x00\x00"}, /* N.?C.... */ \
> +       {0x00006408, "\x00\x00\x00\x00\x01\x00\x00\x00"}, /* ........ */ \
> +       {0x00006410, "\x52\xcf\xd7\x09\x20\x07\x10\x47"}, /* R... ..G */ \
> +       {0x00006418, "\x91\xd1\x08\x46\x9b\x7f\xe9\xc8"}, /* ...F.... */ \
> +       {0x00006420, "\xeb\x2b\x27\x49\xd8\x8d\xdf\x46"}, /* .+'I...F */ \
> +       {0x00006428, "\x8d\x75\x35\x6c\x65\xef\xf4\x17"}, /* .u5le... */ \
> +       {0x00006430, "\x86\x7a\x05\x10\xf1\xda\x93\x4f"}, /* .z.....O */ \
> +       {0x00006438, "\xba\x7f\xb1\x95\xf7\xfa\x41\x70"}, /* ......Ap */ \
> +       {0x00006440, "\x01\x00\x00\x00\x00\x00\x00\x00"}, /* ........ */ \
> +       {0x00006448, "\x3e\xed\x62\xdb\x37\x62\xb4\x4f"}, /* >.b.7b.O */ \
> +       {0x00006450, "\x80\xc4\x1b\x74\xd8\x46\xa8\xe7"}, /* ...t.F.. */ \
> +       {0x00006458, "\x01\x00\x00\x00\x00\x00\x00\x00"}, /* ........ */ \
> +       {0x00006460, "\xf5\x21\x70\x5a\xf2\xfe\xb4\x48"}, /* .!pZ...H */ \
> +       {0x00006468, "\xaa\xba\x83\x2e\x77\x74\x18\xc0"}, /* ....wt.. */ \
> +       {0x00006470, "\xeb\x2b\x27\x49\xd8\x8d\xdf\x46"}, /* .+'I...F */ \
> +       {0x00006478, "\x8d\x75\x35\x6c\x65\xef\xf4\x17"}, /* .u5le... */ \
> +       {0x00006480, "\x3b\x0e\xd2\x0b\x9f\xab\x86\x49"}, /* ;......I */ \
> +       {0x00006488, "\xb7\x90\x8d\xf3\x9c\x9c\xa3\x82"}, /* ........ */ \
> +       {0x00006490, "\x01\x00\x00\x00\x00\x00\x00\x00"}, /* ........ */ \
> +       {0x00006498, "\x6d\xe4\x25\x0e\x15\xb6\xd3\x4c"}, /* m.%....L */ \
> +       {0x000064a0, "\x94\xda\x51\x79\x8f\xb1\x9e\xb1"}, /* ..Qy.... */ \
> +       {0x000064a8, "\x01\x00\x00\x00\x00\x00\x00\x00"}, /* ........ */ \
> +       {0x0000be00, "\xa0\x84\x7a\x8a\x87\x83\xf6\x40"}, /* ..z....@ */ \
> +       {0x0000be08, "\xab\x41\xa8\xb9\xa5\xa6\x0d\x23"}, /* .A.....# */ \
> +       {0x0000be10, "\x3d\x6c\xb9\xaa\x20\xb2\x18\x4c"}, /* =l.. ..L */ \
> +       {0x0000be18, "\xbc\x87\x1c\x9f\xe0\x35\x9b\x73"}, /* .....5.s */ \
> +       {0x0000be20, "\x22\x00\x00\x00\x00\x00\x00\x00"}, /* "....... */ \
> +       {0x0000be28, "\x31\x00\x00\x00\x00\x00\x00\x00"}, /* 1....... */ \
> +       {0x0000be38, "\x55\x00\x6e\x00\x6b\x00\x6e\x00"}, /* U.n.k.n. */ \
> +       {0x0000be40, "\x6f\x00\x77\x00\x6e\x00\x00\x00"}, /* o.w.n... */ \
> +       {0x0000be80, "\xa0\x84\x7a\x8a\x87\x83\xf6\x40"}, /* ..z....@ */ \
> +       {0x0000be88, "\xab\x41\xa8\xb9\xa5\xa6\x0d\x23"}, /* .A.....# */ \
> +       {0x0000be90, "\x57\x24\xf6\xe6\x0b\x6f\x66\x4e"}, /* W$...ofN */ \
> +       {0x0000be98, "\xb3\xd5\x99\x50\xa5\xc6\x4e\xc1"}, /* ...P..N. */ \
> +       {0x0000bea0, "\x32\x00\x00\x00\x00\x00\x00\x00"}, /* 2....... */ \
> +       {0x0000bea8, "\x41\x00\x00\x00\x00\x00\x00\x00"}, /* A....... */ \
> +       {0x0000beb8, "\x55\x00\x6e\x00\x6b\x00\x6e\x00"}, /* U.n.k.n. */ \
> +       {0x0000bec0, "\x6f\x00\x77\x00\x6e\x00\x00\x00"}, /* o.w.n... */ \
> +       {0x0000fe00, "\x45\x46\x49\x20\x50\x41\x52\x54"}, /* EFI PART */ \
> +       {0x0000fe08, "\x00\x00\x01\x00\x5c\x00\x00\x00"}, /* ....\... */ \
> +       {0x0000fe10, "\xa2\xce\x23\xfc\x00\x00\x00\x00"}, /* ..#..... */ \
> +       {0x0000fe18, "\x7f\x00\x00\x00\x00\x00\x00\x00"}, /* ........ */ \
> +       {0x0000fe20, "\x01\x00\x00\x00\x00\x00\x00\x00"}, /* ........ */ \
> +       {0x0000fe28, "\x22\x00\x00\x00\x00\x00\x00\x00"}, /* "....... */ \
> +       {0x0000fe30, "\x5e\x00\x00\x00\x00\x00\x00\x00"}, /* ^....... */ \
> +       {0x0000fe38, "\xde\x99\xa2\x7e\x46\x34\xeb\x47"}, /* ...~F4.G */ \
> +       {0x0000fe40, "\x87\xf6\x4f\x75\xe8\xd5\x7d\xc7"}, /* ..Ou..}. */ \
> +       {0x0000fe48, "\x5f\x00\x00\x00\x00\x00\x00\x00"}, /* _....... */ \
> +       {0x0000fe50, "\x80\x00\x00\x00\x80\x00\x00\x00"}, /* ........ */ \
> +       {0x0000fe58, "\x2a\x64\x03\x83\x00\x00\x00\x00"}, /* .d...... */ \
> +       {0, NULL} } }
> diff --git a/test/py/tests/test_efi_capsule/test_capsule_firmware_fit.py b/test/py/tests/test_efi_capsule/test_capsule_firmware_fit.py
> index 8f75b554ad..d28b53a1a1 100644
> --- a/test/py/tests/test_efi_capsule/test_capsule_firmware_fit.py
> +++ b/test/py/tests/test_efi_capsule/test_capsule_firmware_fit.py
> @@ -13,7 +13,6 @@ import pytest
>  from capsule_defs import *
>
>
> -@pytest.mark.boardspec('sandbox64')
>  @pytest.mark.boardspec('sandbox_flattree')
>  @pytest.mark.buildconfigspec('efi_capsule_firmware_fit')
>  @pytest.mark.buildconfigspec('efi_capsule_on_disk')
> diff --git a/test/py/tests/test_efi_capsule/test_capsule_firmware_signed_fit.py b/test/py/tests/test_efi_capsule/test_capsule_firmware_signed_fit.py
> index d6ca9b1674..8c2d616fd0 100644
> --- a/test/py/tests/test_efi_capsule/test_capsule_firmware_signed_fit.py
> +++ b/test/py/tests/test_efi_capsule/test_capsule_firmware_signed_fit.py
> @@ -14,7 +14,6 @@ with signed capsule files containing FIT images
>  import pytest
>  from capsule_defs import CAPSULE_DATA_DIR, CAPSULE_INSTALL_DIR
>
> -@pytest.mark.boardspec('sandbox64')
>  @pytest.mark.boardspec('sandbox_flattree')
>  @pytest.mark.buildconfigspec('efi_capsule_firmware_fit')
>  @pytest.mark.buildconfigspec('efi_capsule_authenticate')
> diff --git a/tools/Makefile b/tools/Makefile
> index 34a1aa7a8b..27687d5cd9 100644
> --- a/tools/Makefile
> +++ b/tools/Makefile
> @@ -74,7 +74,7 @@ mkenvimage-objs := mkenvimage.o os_support.o lib/crc32.o
>  hostprogs-y += dumpimage mkimage
>  hostprogs-$(CONFIG_TOOLS_LIBCRYPTO) += fit_info fit_check_sign
>
> -hostprogs-$(CONFIG_CMD_BOOTEFI_SELFTEST) += file2include
> +hostprogs-$(CONFIG_CMD_BOOTEFI_SELFTEST)$(CONFIG_FWU_MDATA_GPT_BLK) += file2include

Late catch, my apologies. This won't work when both switches are enable.
Prefer something like:

+ifneq (,$(filter y,$(CONFIG_CMD_BOOTEFI_SELFTEST) $(CONFIG_FWU_MDATA_GPT_BLK)))
+hostprogs-y += file2include
+endif

br,
etienne

>
>  FIT_OBJS-y := fit_common.o fit_image.o image-host.o boot/image-fit.o
>  FIT_SIG_OBJS-$(CONFIG_TOOLS_LIBCRYPTO) := image-sig-host.o boot/image-fit-sig.o
> --
> 2.34.1
>
Simon Glass Oct. 6, 2022, 7:07 p.m. UTC | #2
Hi Sughosh,

On Thu, 6 Oct 2022 at 03:07, Sughosh Ganu <sughosh.ganu@linaro.org> wrote:
>
> Add test cases for accessing the FWU Metadata on the sandbox
> platform. The sandbox platform also uses the metadata access driver
> for GPT partitioned block devices.
>
> The FWU feature will be tested on the sandbox64 variant with a raw
> capsule. Remove the FIT capsule testing from sandbox64 defconfig --
> the FIT capsule test will be run on the sandbox_flattree variant.
>
> Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
> Suggested-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> ---
> Changes since V12: None
>
>  arch/sandbox/Kconfig                          |   6 +
>  arch/sandbox/dts/test.dts                     |   7 +-
>  board/sandbox/sandbox.c                       |   8 +
>  configs/sandbox64_defconfig                   |   5 +-
>  lib/fwu_updates/fwu.c                         |   6 +
>  test/dm/Makefile                              |   1 +
>  test/dm/fwu_mdata.c                           | 149 ++++++++++++++++++
>  test/dm/fwu_mdata_disk_image.h                | 112 +++++++++++++

Can this be generated by the Python test setup? See
setup_bootflow_image() for an example. Sandbox can access host files
easily enough.

Otherwise, we could add it as a binary file, with instructions
somewhere on how to generate it, as is done for drivers/video/fonts/
and other things.

Also I notice that the file is decompressed in U-Boot and then written
out to the MMC device. Doesn't that affect other tests that use that
device, i.e. the fastboot tests, given the comments there. If it
passes CI, that's fine. But if there is a problem, you could add
another mmc device, as is done here:

https://patchwork.ozlabs.org/project/uboot/list/?series=319949
(u-boot-dm/vpa-working)

Regards,
Simon
Sughosh Ganu Oct. 7, 2022, 3:16 a.m. UTC | #3
hi Etienne,

On Thu, 6 Oct 2022 at 19:36, Etienne Carriere
<etienne.carriere@linaro.org> wrote:
>
> Hi Sughosh,
>
> On Thu, 6 Oct 2022 at 11:07, Sughosh Ganu <sughosh.ganu@linaro.org> wrote:
> >
> > Add test cases for accessing the FWU Metadata on the sandbox
> > platform. The sandbox platform also uses the metadata access driver
> > for GPT partitioned block devices.
> >
> > The FWU feature will be tested on the sandbox64 variant with a raw
> > capsule. Remove the FIT capsule testing from sandbox64 defconfig --
> > the FIT capsule test will be run on the sandbox_flattree variant.
> >
> > Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
> > Suggested-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> > ---
> > Changes since V12: None
> >
> >  arch/sandbox/Kconfig                          |   6 +
> >  arch/sandbox/dts/test.dts                     |   7 +-
> >  board/sandbox/sandbox.c                       |   8 +
> >  configs/sandbox64_defconfig                   |   5 +-
> >  lib/fwu_updates/fwu.c                         |   6 +
> >  test/dm/Makefile                              |   1 +
> >  test/dm/fwu_mdata.c                           | 149 ++++++++++++++++++
> >  test/dm/fwu_mdata_disk_image.h                | 112 +++++++++++++
> >  .../test_capsule_firmware_fit.py              |   1 -
> >  .../test_capsule_firmware_signed_fit.py       |   1 -
> >  tools/Makefile                                |   2 +-
> >  11 files changed, 293 insertions(+), 5 deletions(-)
> >  create mode 100644 test/dm/fwu_mdata.c
> >  create mode 100644 test/dm/fwu_mdata_disk_image.h

<snip>

> > diff --git a/tools/Makefile b/tools/Makefile
> > index 34a1aa7a8b..27687d5cd9 100644
> > --- a/tools/Makefile
> > +++ b/tools/Makefile
> > @@ -74,7 +74,7 @@ mkenvimage-objs := mkenvimage.o os_support.o lib/crc32.o
> >  hostprogs-y += dumpimage mkimage
> >  hostprogs-$(CONFIG_TOOLS_LIBCRYPTO) += fit_info fit_check_sign
> >
> > -hostprogs-$(CONFIG_CMD_BOOTEFI_SELFTEST) += file2include
> > +hostprogs-$(CONFIG_CMD_BOOTEFI_SELFTEST)$(CONFIG_FWU_MDATA_GPT_BLK) += file2include
>
> Late catch, my apologies. This won't work when both switches are enable.

Okay, although this is not an issue in the current upstream, as
CONFIG_CMD_BOOTEFI_SELFTEST is not enabled in the sandbox64 defconfig.

> Prefer something like:
>
> +ifneq (,$(filter y,$(CONFIG_CMD_BOOTEFI_SELFTEST) $(CONFIG_FWU_MDATA_GPT_BLK)))
> +hostprogs-y += file2include
> +endif

Okay. Btw, any issue with having something like this?

ifneq ($(CONFIG_CMD_BOOTEFI_SELFTEST)$(CONFIG_FWU_MDATA_GPT_BLK),)
hostprogs-y += file2include
endif

-sughosh

>
> br,
> etienne
>
> >
> >  FIT_OBJS-y := fit_common.o fit_image.o image-host.o boot/image-fit.o
> >  FIT_SIG_OBJS-$(CONFIG_TOOLS_LIBCRYPTO) := image-sig-host.o boot/image-fit-sig.o
> > --
> > 2.34.1
> >
Sughosh Ganu Oct. 7, 2022, 3:23 a.m. UTC | #4
hi Simon,

On Fri, 7 Oct 2022 at 00:37, Simon Glass <sjg@chromium.org> wrote:
>
> Hi Sughosh,
>
> On Thu, 6 Oct 2022 at 03:07, Sughosh Ganu <sughosh.ganu@linaro.org> wrote:
> >
> > Add test cases for accessing the FWU Metadata on the sandbox
> > platform. The sandbox platform also uses the metadata access driver
> > for GPT partitioned block devices.
> >
> > The FWU feature will be tested on the sandbox64 variant with a raw
> > capsule. Remove the FIT capsule testing from sandbox64 defconfig --
> > the FIT capsule test will be run on the sandbox_flattree variant.
> >
> > Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
> > Suggested-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> > ---
> > Changes since V12: None
> >
> >  arch/sandbox/Kconfig                          |   6 +
> >  arch/sandbox/dts/test.dts                     |   7 +-
> >  board/sandbox/sandbox.c                       |   8 +
> >  configs/sandbox64_defconfig                   |   5 +-
> >  lib/fwu_updates/fwu.c                         |   6 +
> >  test/dm/Makefile                              |   1 +
> >  test/dm/fwu_mdata.c                           | 149 ++++++++++++++++++
> >  test/dm/fwu_mdata_disk_image.h                | 112 +++++++++++++
>
> Can this be generated by the Python test setup? See
> setup_bootflow_image() for an example. Sandbox can access host files
> easily enough.

This is a dm test for the fwu-mdata uclass, and I was under the
impression that the dm tests are to be written in C. Btw, with this
setup, the GPT block device driver(drivers/fwu-mdata/gpt_blk.c) is
being exercised for all the dm API's without any dummy operations or
workarounds.

>
> Otherwise, we could add it as a binary file, with instructions
> somewhere on how to generate it, as is done for drivers/video/fonts/
> and other things.
>
> Also I notice that the file is decompressed in U-Boot and then written
> out to the MMC device. Doesn't that affect other tests that use that
> device, i.e. the fastboot tests, given the comments there. If it
> passes CI, that's fine. But if there is a problem, you could add
> another mmc device, as is done here:

It does pass the CI tests, so it is not an issue. Thanks.

-sughosh

>
> https://patchwork.ozlabs.org/project/uboot/list/?series=319949
> (u-boot-dm/vpa-working)
>
> Regards,
> Simon
Simon Glass Oct. 10, 2022, 3:53 a.m. UTC | #5
Hi Sughosh,

On Thu, 6 Oct 2022 at 21:23, Sughosh Ganu <sughosh.ganu@linaro.org> wrote:
>
> hi Simon,
>
> On Fri, 7 Oct 2022 at 00:37, Simon Glass <sjg@chromium.org> wrote:
> >
> > Hi Sughosh,
> >
> > On Thu, 6 Oct 2022 at 03:07, Sughosh Ganu <sughosh.ganu@linaro.org> wrote:
> > >
> > > Add test cases for accessing the FWU Metadata on the sandbox
> > > platform. The sandbox platform also uses the metadata access driver
> > > for GPT partitioned block devices.
> > >
> > > The FWU feature will be tested on the sandbox64 variant with a raw
> > > capsule. Remove the FIT capsule testing from sandbox64 defconfig --
> > > the FIT capsule test will be run on the sandbox_flattree variant.
> > >
> > > Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
> > > Suggested-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> > > ---
> > > Changes since V12: None
> > >
> > >  arch/sandbox/Kconfig                          |   6 +
> > >  arch/sandbox/dts/test.dts                     |   7 +-
> > >  board/sandbox/sandbox.c                       |   8 +
> > >  configs/sandbox64_defconfig                   |   5 +-
> > >  lib/fwu_updates/fwu.c                         |   6 +
> > >  test/dm/Makefile                              |   1 +
> > >  test/dm/fwu_mdata.c                           | 149 ++++++++++++++++++
> > >  test/dm/fwu_mdata_disk_image.h                | 112 +++++++++++++
> >
> > Can this be generated by the Python test setup? See
> > setup_bootflow_image() for an example. Sandbox can access host files
> > easily enough.
>
> This is a dm test for the fwu-mdata uclass, and I was under the
> impression that the dm tests are to be written in C. Btw, with this
> setup, the GPT block device driver(drivers/fwu-mdata/gpt_blk.c) is
> being exercised for all the dm API's without any dummy operations or
> workarounds.

Yes it looks good to me. But please read my comment again, including
the code link for how this is done in other tests, without needing to
commit binary data to the tree.

This could be a follow-up if you like, since this is already at v13.

>
> >
> > Otherwise, we could add it as a binary file, with instructions
> > somewhere on how to generate it, as is done for drivers/video/fonts/
> > and other things.
> >
> > Also I notice that the file is decompressed in U-Boot and then written
> > out to the MMC device. Doesn't that affect other tests that use that
> > device, i.e. the fastboot tests, given the comments there. If it
> > passes CI, that's fine. But if there is a problem, you could add
> > another mmc device, as is done here:
>
> It does pass the CI tests, so it is not an issue. Thanks.

OK good.

Regards,
SImon
Etienne Carriere Oct. 10, 2022, 6:23 a.m. UTC | #6
Hi Sughosh,

On Fri, 7 Oct 2022 at 05:16, Sughosh Ganu <sughosh.ganu@linaro.org> wrote:
>
> hi Etienne,
>
> On Thu, 6 Oct 2022 at 19:36, Etienne Carriere
> <etienne.carriere@linaro.org> wrote:
> >
> > Hi Sughosh,
> >
> > On Thu, 6 Oct 2022 at 11:07, Sughosh Ganu <sughosh.ganu@linaro.org> wrote:
> > >
> > > Add test cases for accessing the FWU Metadata on the sandbox
> > > platform. The sandbox platform also uses the metadata access driver
> > > for GPT partitioned block devices.
> > >
> > > The FWU feature will be tested on the sandbox64 variant with a raw
> > > capsule. Remove the FIT capsule testing from sandbox64 defconfig --
> > > the FIT capsule test will be run on the sandbox_flattree variant.
> > >
> > > Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
> > > Suggested-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> > > ---
> > > Changes since V12: None
> > >
> > >  arch/sandbox/Kconfig                          |   6 +
> > >  arch/sandbox/dts/test.dts                     |   7 +-
> > >  board/sandbox/sandbox.c                       |   8 +
> > >  configs/sandbox64_defconfig                   |   5 +-
> > >  lib/fwu_updates/fwu.c                         |   6 +
> > >  test/dm/Makefile                              |   1 +
> > >  test/dm/fwu_mdata.c                           | 149 ++++++++++++++++++
> > >  test/dm/fwu_mdata_disk_image.h                | 112 +++++++++++++
> > >  .../test_capsule_firmware_fit.py              |   1 -
> > >  .../test_capsule_firmware_signed_fit.py       |   1 -
> > >  tools/Makefile                                |   2 +-
> > >  11 files changed, 293 insertions(+), 5 deletions(-)
> > >  create mode 100644 test/dm/fwu_mdata.c
> > >  create mode 100644 test/dm/fwu_mdata_disk_image.h
>
> <snip>
>
> > > diff --git a/tools/Makefile b/tools/Makefile
> > > index 34a1aa7a8b..27687d5cd9 100644
> > > --- a/tools/Makefile
> > > +++ b/tools/Makefile
> > > @@ -74,7 +74,7 @@ mkenvimage-objs := mkenvimage.o os_support.o lib/crc32.o
> > >  hostprogs-y += dumpimage mkimage
> > >  hostprogs-$(CONFIG_TOOLS_LIBCRYPTO) += fit_info fit_check_sign
> > >
> > > -hostprogs-$(CONFIG_CMD_BOOTEFI_SELFTEST) += file2include
> > > +hostprogs-$(CONFIG_CMD_BOOTEFI_SELFTEST)$(CONFIG_FWU_MDATA_GPT_BLK) += file2include
> >
> > Late catch, my apologies. This won't work when both switches are enable.
>
> Okay, although this is not an issue in the current upstream, as
> CONFIG_CMD_BOOTEFI_SELFTEST is not enabled in the sandbox64 defconfig.
>
> > Prefer something like:
> >
> > +ifneq (,$(filter y,$(CONFIG_CMD_BOOTEFI_SELFTEST) $(CONFIG_FWU_MDATA_GPT_BLK)))
> > +hostprogs-y += file2include
> > +endif
>
> Okay. Btw, any issue with having something like this?
>
> ifneq ($(CONFIG_CMD_BOOTEFI_SELFTEST)$(CONFIG_FWU_MDATA_GPT_BLK),)
> hostprogs-y += file2include
> endif

I'm not shure. I prefer to ask maintainers whether they prefer
ifneq ($(CONFIG_FOO)$(CONFIG_BAR),)
or
ifneq (,$(filter y,$(CONFIG_FOO) $(CONFIG_BAR)))
for such boolean config switches.

br,
etienne

>
> -sughosh
>
> >
> > br,
> > etienne
> >
> > >
> > >  FIT_OBJS-y := fit_common.o fit_image.o image-host.o boot/image-fit.o
> > >  FIT_SIG_OBJS-$(CONFIG_TOOLS_LIBCRYPTO) := image-sig-host.o boot/image-fit-sig.o
> > > --
> > > 2.34.1
> > >
Sughosh Ganu Oct. 10, 2022, 6:32 a.m. UTC | #7
hi Etienne,

On Mon, 10 Oct 2022 at 11:53, Etienne Carriere
<etienne.carriere@linaro.org> wrote:
>
> Hi Sughosh,
>
> On Fri, 7 Oct 2022 at 05:16, Sughosh Ganu <sughosh.ganu@linaro.org> wrote:
> >
> > hi Etienne,
> >
> > On Thu, 6 Oct 2022 at 19:36, Etienne Carriere
> > <etienne.carriere@linaro.org> wrote:
> > >
> > > Hi Sughosh,
> > >
> > > On Thu, 6 Oct 2022 at 11:07, Sughosh Ganu <sughosh.ganu@linaro.org> wrote:
> > > >
> > > > Add test cases for accessing the FWU Metadata on the sandbox
> > > > platform. The sandbox platform also uses the metadata access driver
> > > > for GPT partitioned block devices.
> > > >
> > > > The FWU feature will be tested on the sandbox64 variant with a raw
> > > > capsule. Remove the FIT capsule testing from sandbox64 defconfig --
> > > > the FIT capsule test will be run on the sandbox_flattree variant.
> > > >
> > > > Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
> > > > Suggested-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> > > > ---
> > > > Changes since V12: None
> > > >
> > > >  arch/sandbox/Kconfig                          |   6 +
> > > >  arch/sandbox/dts/test.dts                     |   7 +-
> > > >  board/sandbox/sandbox.c                       |   8 +
> > > >  configs/sandbox64_defconfig                   |   5 +-
> > > >  lib/fwu_updates/fwu.c                         |   6 +
> > > >  test/dm/Makefile                              |   1 +
> > > >  test/dm/fwu_mdata.c                           | 149 ++++++++++++++++++
> > > >  test/dm/fwu_mdata_disk_image.h                | 112 +++++++++++++
> > > >  .../test_capsule_firmware_fit.py              |   1 -
> > > >  .../test_capsule_firmware_signed_fit.py       |   1 -
> > > >  tools/Makefile                                |   2 +-
> > > >  11 files changed, 293 insertions(+), 5 deletions(-)
> > > >  create mode 100644 test/dm/fwu_mdata.c
> > > >  create mode 100644 test/dm/fwu_mdata_disk_image.h
> >
> > <snip>
> >
> > > > diff --git a/tools/Makefile b/tools/Makefile
> > > > index 34a1aa7a8b..27687d5cd9 100644
> > > > --- a/tools/Makefile
> > > > +++ b/tools/Makefile
> > > > @@ -74,7 +74,7 @@ mkenvimage-objs := mkenvimage.o os_support.o lib/crc32.o
> > > >  hostprogs-y += dumpimage mkimage
> > > >  hostprogs-$(CONFIG_TOOLS_LIBCRYPTO) += fit_info fit_check_sign
> > > >
> > > > -hostprogs-$(CONFIG_CMD_BOOTEFI_SELFTEST) += file2include
> > > > +hostprogs-$(CONFIG_CMD_BOOTEFI_SELFTEST)$(CONFIG_FWU_MDATA_GPT_BLK) += file2include
> > >
> > > Late catch, my apologies. This won't work when both switches are enable.
> >
> > Okay, although this is not an issue in the current upstream, as
> > CONFIG_CMD_BOOTEFI_SELFTEST is not enabled in the sandbox64 defconfig.
> >
> > > Prefer something like:
> > >
> > > +ifneq (,$(filter y,$(CONFIG_CMD_BOOTEFI_SELFTEST) $(CONFIG_FWU_MDATA_GPT_BLK)))
> > > +hostprogs-y += file2include
> > > +endif
> >
> > Okay. Btw, any issue with having something like this?
> >
> > ifneq ($(CONFIG_CMD_BOOTEFI_SELFTEST)$(CONFIG_FWU_MDATA_GPT_BLK),)
> > hostprogs-y += file2include
> > endif
>
> I'm not shure. I prefer to ask maintainers whether they prefer
> ifneq ($(CONFIG_FOO)$(CONFIG_BAR),)
> or
> ifneq (,$(filter y,$(CONFIG_FOO) $(CONFIG_BAR)))
> for such boolean config switches.

The Makefile has a couple of uses of the form that I mentioned. So
maybe I can use that to keep the consistency, if you do not have a
strong opinion on this. Thanks.

-sughosh

>
> br,
> etienne
>
> >
> > -sughosh
> >
> > >
> > > br,
> > > etienne
> > >
> > > >
> > > >  FIT_OBJS-y := fit_common.o fit_image.o image-host.o boot/image-fit.o
> > > >  FIT_SIG_OBJS-$(CONFIG_TOOLS_LIBCRYPTO) := image-sig-host.o boot/image-fit-sig.o
> > > > --
> > > > 2.34.1
> > > >
diff mbox series

Patch

diff --git a/arch/sandbox/Kconfig b/arch/sandbox/Kconfig
index 852a7c8bf2..40cdea7d46 100644
--- a/arch/sandbox/Kconfig
+++ b/arch/sandbox/Kconfig
@@ -84,3 +84,9 @@  config SYS_FDT_LOAD_ADDR
 	  See `doc/arch/sandbox.rst` for more information.
 
 endmenu
+
+config FWU_NUM_BANKS
+	default 2
+
+config FWU_NUM_IMAGES_PER_BANK
+	default 2
diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts
index 4ee471238e..a4f6fc3abe 100644
--- a/arch/sandbox/dts/test.dts
+++ b/arch/sandbox/dts/test.dts
@@ -950,7 +950,7 @@ 
 	};
 
 	/* This is used for the fastboot tests */
-	mmc0 {
+	mmc0: mmc0 {
 		compatible = "sandbox,mmc";
 	};
 
@@ -1690,6 +1690,11 @@ 
 			compatible = "sandbox,regmap_test";
 		};
 	};
+
+	fwu-mdata {
+		compatible = "u-boot,fwu-mdata-gpt";
+		fwu-mdata-store = <&mmc0>;
+	};
 };
 
 #include "sandbox_pmic.dtsi"
diff --git a/board/sandbox/sandbox.c b/board/sandbox/sandbox.c
index ca9a2ca5b1..c3d0c35444 100644
--- a/board/sandbox/sandbox.c
+++ b/board/sandbox/sandbox.c
@@ -164,3 +164,11 @@  int init_addr_map(void)
 
 	return 0;
 }
+
+#if defined(CONFIG_FWU_MULTI_BANK_UPDATE)
+void fwu_plat_get_bootidx(uint *boot_idx)
+{
+	/* Dummy value */
+	*boot_idx = 0;
+}
+#endif
diff --git a/configs/sandbox64_defconfig b/configs/sandbox64_defconfig
index b20b181ab1..8b0d35f484 100644
--- a/configs/sandbox64_defconfig
+++ b/configs/sandbox64_defconfig
@@ -244,9 +244,12 @@  CONFIG_LZ4=y
 CONFIG_ERRNO_STR=y
 CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y
 CONFIG_EFI_CAPSULE_ON_DISK=y
-CONFIG_EFI_CAPSULE_FIRMWARE_FIT=y
+CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y
 CONFIG_EFI_SECURE_BOOT=y
 CONFIG_TEST_FDTDEC=y
 CONFIG_UNIT_TEST=y
 CONFIG_UT_TIME=y
 CONFIG_UT_DM=y
+CONFIG_FWU_MDATA=y
+CONFIG_FWU_MDATA_GPT_BLK=y
+CONFIG_FWU_MULTI_BANK_UPDATE=y
diff --git a/lib/fwu_updates/fwu.c b/lib/fwu_updates/fwu.c
index ea8d4144b2..9e3d9e962a 100644
--- a/lib/fwu_updates/fwu.c
+++ b/lib/fwu_updates/fwu.c
@@ -551,6 +551,12 @@  static int fwu_boottime_checks(void *ctx, struct event *event)
 	struct udevice *dev;
 	u32 boot_idx, active_idx;
 
+	/* Don't have boot time checks on sandbox */
+	if (IS_ENABLED(CONFIG_SANDBOX)) {
+		boottime_check = 1;
+		return 0;
+	}
+
 	ret = fwu_get_dev_mdata(&dev, NULL);
 	if (ret)
 		return ret;
diff --git a/test/dm/Makefile b/test/dm/Makefile
index 5178daa7cf..8b2ac9e989 100644
--- a/test/dm/Makefile
+++ b/test/dm/Makefile
@@ -47,6 +47,7 @@  ifneq ($(CONFIG_EFI_PARTITION),)
 obj-$(CONFIG_FASTBOOT_FLASH_MMC) += fastboot.o
 endif
 obj-$(CONFIG_FIRMWARE) += firmware.o
+obj-$(CONFIG_FWU_MDATA_GPT_BLK) += fwu_mdata.o
 obj-$(CONFIG_DM_HWSPINLOCK) += hwspinlock.o
 obj-$(CONFIG_DM_I2C) += i2c.o
 obj-$(CONFIG_SOUND) += i2s.o
diff --git a/test/dm/fwu_mdata.c b/test/dm/fwu_mdata.c
new file mode 100644
index 0000000000..3401fb64d5
--- /dev/null
+++ b/test/dm/fwu_mdata.c
@@ -0,0 +1,149 @@ 
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2022, Linaro Limited
+ * Copyright (c) 2022, Heinrich Schuchardt <xypron.glpk@gmx.de>
+ */
+
+#include <blk.h>
+#include <common.h>
+#include <dm.h>
+#include <fwu.h>
+#include <fwu_mdata.h>
+#include <log.h>
+#include <malloc.h>
+#include <memalign.h>
+#include <part.h>
+
+#include <dm/test.h>
+#include <test/ut.h>
+
+#include "fwu_mdata_disk_image.h"
+
+/* Block size of compressed disk image */
+#define COMPRESSED_DISK_IMAGE_BLOCK_SIZE 8
+
+static struct udevice *mmc_dev;
+static struct blk_desc *dev_desc;
+
+/* One 8 byte block of the compressed disk image */
+struct line {
+	size_t addr;
+	char *line;
+};
+
+/* Compressed disk image */
+struct compressed_disk_image {
+	size_t length;
+	struct line lines[];
+};
+
+static const struct compressed_disk_image img = FWU_MDATA_DISK_IMG;
+
+/* Decompressed disk image */
+static u8 *image;
+
+static int setup_blk_device(struct unit_test_state *uts)
+{
+	ut_assertok(uclass_get_device(UCLASS_MMC, 0, &mmc_dev));
+	ut_assertok(blk_get_device_by_str("mmc", "0", &dev_desc));
+
+	return 0;
+}
+
+static int populate_mmc_disk_image(struct unit_test_state *uts)
+{
+	u8 *buf;
+	size_t i;
+	size_t addr;
+	size_t len;
+
+	buf = malloc(img.length);
+	if (!buf)
+		return -ENOMEM;
+
+	memset(buf, 0, img.length);
+
+	for (i = 0; ; i++) {
+		if (!img.lines[i].line)
+			break;
+		addr = img.lines[i].addr;
+		len = COMPRESSED_DISK_IMAGE_BLOCK_SIZE;
+		if (addr + len > img.length)
+			len = img.length - addr;
+		memcpy(buf + addr, img.lines[i].line, len);
+	}
+	image = buf;
+
+	return 0;
+}
+
+static int write_mmc_blk_device(struct unit_test_state *uts)
+{
+	lbaint_t blkcnt;
+
+	blkcnt = BLOCK_CNT(img.length, dev_desc);
+
+	ut_asserteq(blkcnt, blk_dwrite(dev_desc, 0, blkcnt, image));
+
+	return 0;
+}
+
+static int dm_test_fwu_mdata_read(struct unit_test_state *uts)
+{
+	struct udevice *dev;
+	struct fwu_mdata mdata = { 0 };
+
+	ut_assertok(uclass_first_device(UCLASS_FWU_MDATA, &dev));
+	ut_assertok(setup_blk_device(uts));
+	ut_assertok(populate_mmc_disk_image(uts));
+	ut_assertok(write_mmc_blk_device(uts));
+
+	ut_assertok(fwu_get_mdata(dev, &mdata));
+
+	ut_asserteq(mdata.version, 0x1);
+
+	return 0;
+}
+DM_TEST(dm_test_fwu_mdata_read, UT_TESTF_SCAN_FDT);
+
+static int dm_test_fwu_mdata_write(struct unit_test_state *uts)
+{
+	u32 active_idx;
+	struct udevice *dev;
+	struct fwu_mdata mdata = { 0 };
+
+	ut_assertok(setup_blk_device(uts));
+	ut_assertok(populate_mmc_disk_image(uts));
+	ut_assertok(write_mmc_blk_device(uts));
+
+	ut_assertok(uclass_first_device(UCLASS_FWU_MDATA, &dev));
+	ut_assertnonnull(dev);
+
+	ut_assertok(fwu_get_mdata(dev, &mdata));
+
+	active_idx = (mdata.active_index + 1) % CONFIG_FWU_NUM_BANKS;
+	ut_assertok(fwu_set_active_index(active_idx));
+
+	ut_assertok(fwu_get_mdata(dev, &mdata));
+	ut_asserteq(mdata.active_index, active_idx);
+
+	return 0;
+}
+DM_TEST(dm_test_fwu_mdata_write, UT_TESTF_SCAN_FDT);
+
+static int dm_test_fwu_mdata_check(struct unit_test_state *uts)
+{
+	struct udevice *dev;
+
+	ut_assertok(setup_blk_device(uts));
+	ut_assertok(populate_mmc_disk_image(uts));
+	ut_assertok(write_mmc_blk_device(uts));
+
+	ut_assertok(uclass_first_device(UCLASS_FWU_MDATA, &dev));
+	ut_assertnonnull(dev);
+
+	ut_assertok(fwu_mdata_check(dev));
+
+	return 0;
+}
+DM_TEST(dm_test_fwu_mdata_check, UT_TESTF_SCAN_FDT);
diff --git a/test/dm/fwu_mdata_disk_image.h b/test/dm/fwu_mdata_disk_image.h
new file mode 100644
index 0000000000..b9803417c8
--- /dev/null
+++ b/test/dm/fwu_mdata_disk_image.h
@@ -0,0 +1,112 @@ 
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ *  Non-zero 8 byte strings of a disk image
+ *
+ *  Generated with tools/file2include
+ */
+
+#define FWU_MDATA_DISK_IMG { 0x00010000, { \
+	{0x000001c0, "\x02\x00\xee\x02\x02\x00\x01\x00"}, /* ........ */ \
+	{0x000001c8, "\x00\x00\x7f\x00\x00\x00\x00\x00"}, /* ........ */ \
+	{0x000001f8, "\x00\x00\x00\x00\x00\x00\x55\xaa"}, /* ......U. */ \
+	{0x00000200, "\x45\x46\x49\x20\x50\x41\x52\x54"}, /* EFI PART */ \
+	{0x00000208, "\x00\x00\x01\x00\x5c\x00\x00\x00"}, /* ....\... */ \
+	{0x00000210, "\xa6\xf6\x92\x20\x00\x00\x00\x00"}, /* ... .... */ \
+	{0x00000218, "\x01\x00\x00\x00\x00\x00\x00\x00"}, /* ........ */ \
+	{0x00000220, "\x7f\x00\x00\x00\x00\x00\x00\x00"}, /* ........ */ \
+	{0x00000228, "\x22\x00\x00\x00\x00\x00\x00\x00"}, /* "....... */ \
+	{0x00000230, "\x5e\x00\x00\x00\x00\x00\x00\x00"}, /* ^....... */ \
+	{0x00000238, "\xde\x99\xa2\x7e\x46\x34\xeb\x47"}, /* ...~F4.G */ \
+	{0x00000240, "\x87\xf6\x4f\x75\xe8\xd5\x7d\xc7"}, /* ..Ou..}. */ \
+	{0x00000248, "\x02\x00\x00\x00\x00\x00\x00\x00"}, /* ........ */ \
+	{0x00000250, "\x80\x00\x00\x00\x80\x00\x00\x00"}, /* ........ */ \
+	{0x00000258, "\x2a\x64\x03\x83\x00\x00\x00\x00"}, /* .d...... */ \
+	{0x00000400, "\xa0\x84\x7a\x8a\x87\x83\xf6\x40"}, /* ..z....@ */ \
+	{0x00000408, "\xab\x41\xa8\xb9\xa5\xa6\x0d\x23"}, /* .A.....# */ \
+	{0x00000410, "\x3d\x6c\xb9\xaa\x20\xb2\x18\x4c"}, /* =l.. ..L */ \
+	{0x00000418, "\xbc\x87\x1c\x9f\xe0\x35\x9b\x73"}, /* .....5.s */ \
+	{0x00000420, "\x22\x00\x00\x00\x00\x00\x00\x00"}, /* "....... */ \
+	{0x00000428, "\x31\x00\x00\x00\x00\x00\x00\x00"}, /* 1....... */ \
+	{0x00000438, "\x55\x00\x6e\x00\x6b\x00\x6e\x00"}, /* U.n.k.n. */ \
+	{0x00000440, "\x6f\x00\x77\x00\x6e\x00\x00\x00"}, /* o.w.n... */ \
+	{0x00000480, "\xa0\x84\x7a\x8a\x87\x83\xf6\x40"}, /* ..z....@ */ \
+	{0x00000488, "\xab\x41\xa8\xb9\xa5\xa6\x0d\x23"}, /* .A.....# */ \
+	{0x00000490, "\x57\x24\xf6\xe6\x0b\x6f\x66\x4e"}, /* W$...ofN */ \
+	{0x00000498, "\xb3\xd5\x99\x50\xa5\xc6\x4e\xc1"}, /* ...P..N. */ \
+	{0x000004a0, "\x32\x00\x00\x00\x00\x00\x00\x00"}, /* 2....... */ \
+	{0x000004a8, "\x41\x00\x00\x00\x00\x00\x00\x00"}, /* A....... */ \
+	{0x000004b8, "\x55\x00\x6e\x00\x6b\x00\x6e\x00"}, /* U.n.k.n. */ \
+	{0x000004c0, "\x6f\x00\x77\x00\x6e\x00\x00\x00"}, /* o.w.n... */ \
+	{0x00004400, "\x4e\xd5\x3f\x43\x01\x00\x00\x00"}, /* N.?C.... */ \
+	{0x00004408, "\x00\x00\x00\x00\x01\x00\x00\x00"}, /* ........ */ \
+	{0x00004410, "\x52\xcf\xd7\x09\x20\x07\x10\x47"}, /* R... ..G */ \
+	{0x00004418, "\x91\xd1\x08\x46\x9b\x7f\xe9\xc8"}, /* ...F.... */ \
+	{0x00004420, "\xeb\x2b\x27\x49\xd8\x8d\xdf\x46"}, /* .+'I...F */ \
+	{0x00004428, "\x8d\x75\x35\x6c\x65\xef\xf4\x17"}, /* .u5le... */ \
+	{0x00004430, "\x86\x7a\x05\x10\xf1\xda\x93\x4f"}, /* .z.....O */ \
+	{0x00004438, "\xba\x7f\xb1\x95\xf7\xfa\x41\x70"}, /* ......Ap */ \
+	{0x00004440, "\x01\x00\x00\x00\x00\x00\x00\x00"}, /* ........ */ \
+	{0x00004448, "\x3e\xed\x62\xdb\x37\x62\xb4\x4f"}, /* >.b.7b.O */ \
+	{0x00004450, "\x80\xc4\x1b\x74\xd8\x46\xa8\xe7"}, /* ...t.F.. */ \
+	{0x00004458, "\x01\x00\x00\x00\x00\x00\x00\x00"}, /* ........ */ \
+	{0x00004460, "\xf5\x21\x70\x5a\xf2\xfe\xb4\x48"}, /* .!pZ...H */ \
+	{0x00004468, "\xaa\xba\x83\x2e\x77\x74\x18\xc0"}, /* ....wt.. */ \
+	{0x00004470, "\xeb\x2b\x27\x49\xd8\x8d\xdf\x46"}, /* .+'I...F */ \
+	{0x00004478, "\x8d\x75\x35\x6c\x65\xef\xf4\x17"}, /* .u5le... */ \
+	{0x00004480, "\x3b\x0e\xd2\x0b\x9f\xab\x86\x49"}, /* ;......I */ \
+	{0x00004488, "\xb7\x90\x8d\xf3\x9c\x9c\xa3\x82"}, /* ........ */ \
+	{0x00004490, "\x01\x00\x00\x00\x00\x00\x00\x00"}, /* ........ */ \
+	{0x00004498, "\x6d\xe4\x25\x0e\x15\xb6\xd3\x4c"}, /* m.%....L */ \
+	{0x000044a0, "\x94\xda\x51\x79\x8f\xb1\x9e\xb1"}, /* ..Qy.... */ \
+	{0x000044a8, "\x01\x00\x00\x00\x00\x00\x00\x00"}, /* ........ */ \
+	{0x00006400, "\x4e\xd5\x3f\x43\x01\x00\x00\x00"}, /* N.?C.... */ \
+	{0x00006408, "\x00\x00\x00\x00\x01\x00\x00\x00"}, /* ........ */ \
+	{0x00006410, "\x52\xcf\xd7\x09\x20\x07\x10\x47"}, /* R... ..G */ \
+	{0x00006418, "\x91\xd1\x08\x46\x9b\x7f\xe9\xc8"}, /* ...F.... */ \
+	{0x00006420, "\xeb\x2b\x27\x49\xd8\x8d\xdf\x46"}, /* .+'I...F */ \
+	{0x00006428, "\x8d\x75\x35\x6c\x65\xef\xf4\x17"}, /* .u5le... */ \
+	{0x00006430, "\x86\x7a\x05\x10\xf1\xda\x93\x4f"}, /* .z.....O */ \
+	{0x00006438, "\xba\x7f\xb1\x95\xf7\xfa\x41\x70"}, /* ......Ap */ \
+	{0x00006440, "\x01\x00\x00\x00\x00\x00\x00\x00"}, /* ........ */ \
+	{0x00006448, "\x3e\xed\x62\xdb\x37\x62\xb4\x4f"}, /* >.b.7b.O */ \
+	{0x00006450, "\x80\xc4\x1b\x74\xd8\x46\xa8\xe7"}, /* ...t.F.. */ \
+	{0x00006458, "\x01\x00\x00\x00\x00\x00\x00\x00"}, /* ........ */ \
+	{0x00006460, "\xf5\x21\x70\x5a\xf2\xfe\xb4\x48"}, /* .!pZ...H */ \
+	{0x00006468, "\xaa\xba\x83\x2e\x77\x74\x18\xc0"}, /* ....wt.. */ \
+	{0x00006470, "\xeb\x2b\x27\x49\xd8\x8d\xdf\x46"}, /* .+'I...F */ \
+	{0x00006478, "\x8d\x75\x35\x6c\x65\xef\xf4\x17"}, /* .u5le... */ \
+	{0x00006480, "\x3b\x0e\xd2\x0b\x9f\xab\x86\x49"}, /* ;......I */ \
+	{0x00006488, "\xb7\x90\x8d\xf3\x9c\x9c\xa3\x82"}, /* ........ */ \
+	{0x00006490, "\x01\x00\x00\x00\x00\x00\x00\x00"}, /* ........ */ \
+	{0x00006498, "\x6d\xe4\x25\x0e\x15\xb6\xd3\x4c"}, /* m.%....L */ \
+	{0x000064a0, "\x94\xda\x51\x79\x8f\xb1\x9e\xb1"}, /* ..Qy.... */ \
+	{0x000064a8, "\x01\x00\x00\x00\x00\x00\x00\x00"}, /* ........ */ \
+	{0x0000be00, "\xa0\x84\x7a\x8a\x87\x83\xf6\x40"}, /* ..z....@ */ \
+	{0x0000be08, "\xab\x41\xa8\xb9\xa5\xa6\x0d\x23"}, /* .A.....# */ \
+	{0x0000be10, "\x3d\x6c\xb9\xaa\x20\xb2\x18\x4c"}, /* =l.. ..L */ \
+	{0x0000be18, "\xbc\x87\x1c\x9f\xe0\x35\x9b\x73"}, /* .....5.s */ \
+	{0x0000be20, "\x22\x00\x00\x00\x00\x00\x00\x00"}, /* "....... */ \
+	{0x0000be28, "\x31\x00\x00\x00\x00\x00\x00\x00"}, /* 1....... */ \
+	{0x0000be38, "\x55\x00\x6e\x00\x6b\x00\x6e\x00"}, /* U.n.k.n. */ \
+	{0x0000be40, "\x6f\x00\x77\x00\x6e\x00\x00\x00"}, /* o.w.n... */ \
+	{0x0000be80, "\xa0\x84\x7a\x8a\x87\x83\xf6\x40"}, /* ..z....@ */ \
+	{0x0000be88, "\xab\x41\xa8\xb9\xa5\xa6\x0d\x23"}, /* .A.....# */ \
+	{0x0000be90, "\x57\x24\xf6\xe6\x0b\x6f\x66\x4e"}, /* W$...ofN */ \
+	{0x0000be98, "\xb3\xd5\x99\x50\xa5\xc6\x4e\xc1"}, /* ...P..N. */ \
+	{0x0000bea0, "\x32\x00\x00\x00\x00\x00\x00\x00"}, /* 2....... */ \
+	{0x0000bea8, "\x41\x00\x00\x00\x00\x00\x00\x00"}, /* A....... */ \
+	{0x0000beb8, "\x55\x00\x6e\x00\x6b\x00\x6e\x00"}, /* U.n.k.n. */ \
+	{0x0000bec0, "\x6f\x00\x77\x00\x6e\x00\x00\x00"}, /* o.w.n... */ \
+	{0x0000fe00, "\x45\x46\x49\x20\x50\x41\x52\x54"}, /* EFI PART */ \
+	{0x0000fe08, "\x00\x00\x01\x00\x5c\x00\x00\x00"}, /* ....\... */ \
+	{0x0000fe10, "\xa2\xce\x23\xfc\x00\x00\x00\x00"}, /* ..#..... */ \
+	{0x0000fe18, "\x7f\x00\x00\x00\x00\x00\x00\x00"}, /* ........ */ \
+	{0x0000fe20, "\x01\x00\x00\x00\x00\x00\x00\x00"}, /* ........ */ \
+	{0x0000fe28, "\x22\x00\x00\x00\x00\x00\x00\x00"}, /* "....... */ \
+	{0x0000fe30, "\x5e\x00\x00\x00\x00\x00\x00\x00"}, /* ^....... */ \
+	{0x0000fe38, "\xde\x99\xa2\x7e\x46\x34\xeb\x47"}, /* ...~F4.G */ \
+	{0x0000fe40, "\x87\xf6\x4f\x75\xe8\xd5\x7d\xc7"}, /* ..Ou..}. */ \
+	{0x0000fe48, "\x5f\x00\x00\x00\x00\x00\x00\x00"}, /* _....... */ \
+	{0x0000fe50, "\x80\x00\x00\x00\x80\x00\x00\x00"}, /* ........ */ \
+	{0x0000fe58, "\x2a\x64\x03\x83\x00\x00\x00\x00"}, /* .d...... */ \
+	{0, NULL} } }
diff --git a/test/py/tests/test_efi_capsule/test_capsule_firmware_fit.py b/test/py/tests/test_efi_capsule/test_capsule_firmware_fit.py
index 8f75b554ad..d28b53a1a1 100644
--- a/test/py/tests/test_efi_capsule/test_capsule_firmware_fit.py
+++ b/test/py/tests/test_efi_capsule/test_capsule_firmware_fit.py
@@ -13,7 +13,6 @@  import pytest
 from capsule_defs import *
 
 
-@pytest.mark.boardspec('sandbox64')
 @pytest.mark.boardspec('sandbox_flattree')
 @pytest.mark.buildconfigspec('efi_capsule_firmware_fit')
 @pytest.mark.buildconfigspec('efi_capsule_on_disk')
diff --git a/test/py/tests/test_efi_capsule/test_capsule_firmware_signed_fit.py b/test/py/tests/test_efi_capsule/test_capsule_firmware_signed_fit.py
index d6ca9b1674..8c2d616fd0 100644
--- a/test/py/tests/test_efi_capsule/test_capsule_firmware_signed_fit.py
+++ b/test/py/tests/test_efi_capsule/test_capsule_firmware_signed_fit.py
@@ -14,7 +14,6 @@  with signed capsule files containing FIT images
 import pytest
 from capsule_defs import CAPSULE_DATA_DIR, CAPSULE_INSTALL_DIR
 
-@pytest.mark.boardspec('sandbox64')
 @pytest.mark.boardspec('sandbox_flattree')
 @pytest.mark.buildconfigspec('efi_capsule_firmware_fit')
 @pytest.mark.buildconfigspec('efi_capsule_authenticate')
diff --git a/tools/Makefile b/tools/Makefile
index 34a1aa7a8b..27687d5cd9 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -74,7 +74,7 @@  mkenvimage-objs := mkenvimage.o os_support.o lib/crc32.o
 hostprogs-y += dumpimage mkimage
 hostprogs-$(CONFIG_TOOLS_LIBCRYPTO) += fit_info fit_check_sign
 
-hostprogs-$(CONFIG_CMD_BOOTEFI_SELFTEST) += file2include
+hostprogs-$(CONFIG_CMD_BOOTEFI_SELFTEST)$(CONFIG_FWU_MDATA_GPT_BLK) += file2include
 
 FIT_OBJS-y := fit_common.o fit_image.o image-host.o boot/image-fit.o
 FIT_SIG_OBJS-$(CONFIG_TOOLS_LIBCRYPTO) := image-sig-host.o boot/image-fit-sig.o