test: dm: Add test for fastboot mmc partition naming
authorSean Anderson <sean.anderson@seco.com>
Fri, 5 Feb 2021 14:38:54 +0000 (09:38 -0500)
committerMarek Vasut <marex@denx.de>
Fri, 26 Feb 2021 14:30:55 +0000 (15:30 +0100)
This test verifies the mapping between fastboot partitions and partitions
as understood by U-Boot. It also tests the creation of GPT partitions,
though that is not the primary goal.

Signed-off-by: Sean Anderson <sean.anderson@seco.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
configs/sandbox64_defconfig
configs/sandbox_defconfig
test/dm/Makefile
test/dm/fastboot.c [new file with mode: 0644]

index 634c195..cfda834 100644 (file)
@@ -111,6 +111,8 @@ CONFIG_DM_DEMO=y
 CONFIG_DM_DEMO_SIMPLE=y
 CONFIG_DM_DEMO_SHAPE=y
 CONFIG_DFU_SF=y
+CONFIG_FASTBOOT_FLASH=y
+CONFIG_FASTBOOT_FLASH_MMC_DEV=0
 CONFIG_GPIO_HOG=y
 CONFIG_DM_GPIO_LOOKUP_LABEL=y
 CONFIG_PM8916_GPIO=y
index a485b38..5bc90d0 100644 (file)
@@ -137,6 +137,8 @@ CONFIG_DFU_SF=y
 CONFIG_DMA=y
 CONFIG_DMA_CHANNELS=y
 CONFIG_SANDBOX_DMA=y
+CONFIG_FASTBOOT_FLASH=y
+CONFIG_FASTBOOT_FLASH_MMC_DEV=0
 CONFIG_GPIO_HOG=y
 CONFIG_DM_GPIO_LOOKUP_LABEL=y
 CONFIG_PM8916_GPIO=y
index 6275ec5..fd14551 100644 (file)
@@ -95,5 +95,8 @@ obj-$(CONFIG_SCMI_FIRMWARE) += scmi.o
 ifneq ($(CONFIG_PINMUX),)
 obj-$(CONFIG_PINCONF) += pinmux.o
 endif
+ifneq ($(CONFIG_EFI_PARTITION),)
+obj-$(CONFIG_FASTBOOT_FLASH_MMC) += fastboot.o
+endif
 endif
 endif # !SPL
diff --git a/test/dm/fastboot.c b/test/dm/fastboot.c
new file mode 100644 (file)
index 0000000..8f905d8
--- /dev/null
@@ -0,0 +1,64 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2015 Google, Inc
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <fastboot.h>
+#include <fb_mmc.h>
+#include <mmc.h>
+#include <part.h>
+#include <part_efi.h>
+#include <dm/test.h>
+#include <test/ut.h>
+#include <linux/stringify.h>
+
+#define FB_ALIAS_PREFIX "fastboot_partition_alias_"
+
+static int dm_test_fastboot_mmc_part(struct unit_test_state *uts)
+{
+       char response[FASTBOOT_RESPONSE_LEN] = {0};
+       char str_disk_guid[UUID_STR_LEN + 1];
+       struct blk_desc *mmc_dev_desc, *fb_dev_desc;
+       struct disk_partition part_info;
+       struct disk_partition parts[2] = {
+               {
+                       .start = 48, /* GPT data takes up the first 34 blocks or so */
+                       .size = 1,
+                       .name = "test1",
+               },
+               {
+                       .start = 49,
+                       .size = 1,
+                       .name = "test2",
+               },
+       };
+
+       ut_assertok(blk_get_device_by_str("mmc",
+                                         __stringify(CONFIG_FASTBOOT_FLASH_MMC_DEV),
+                                         &mmc_dev_desc));
+       if (CONFIG_IS_ENABLED(RANDOM_UUID)) {
+               gen_rand_uuid_str(parts[0].uuid, UUID_STR_FORMAT_STD);
+               gen_rand_uuid_str(parts[1].uuid, UUID_STR_FORMAT_STD);
+               gen_rand_uuid_str(str_disk_guid, UUID_STR_FORMAT_STD);
+       }
+       ut_assertok(gpt_restore(mmc_dev_desc, str_disk_guid, parts,
+                               ARRAY_SIZE(parts)));
+
+       /* "Classic" partition labels */
+       ut_asserteq(1, fastboot_mmc_get_part_info("test1", &fb_dev_desc,
+                                                 &part_info, response));
+       ut_asserteq(2, fastboot_mmc_get_part_info("test2", &fb_dev_desc,
+                                                 &part_info, response));
+
+       /* Test aliases */
+       ut_assertnull(env_get(FB_ALIAS_PREFIX "test3"));
+       ut_assertok(env_set(FB_ALIAS_PREFIX "test3", "test1"));
+       ut_asserteq(1, fastboot_mmc_get_part_info("test3", &fb_dev_desc,
+                                                 &part_info, response));
+       ut_assertok(env_set(FB_ALIAS_PREFIX "test3", NULL));
+
+       return 0;
+}
+DM_TEST(dm_test_fastboot_mmc_part, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);