]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
test: spl: Add a test for spl_blk_load_image
authorSean Anderson <seanga2@gmail.com>
Sat, 14 Oct 2023 20:48:01 +0000 (16:48 -0400)
committerTom Rini <trini@konsulko.com>
Wed, 18 Oct 2023 00:50:52 +0000 (20:50 -0400)
Add a test for spl_blk_load_image, currently used only by NVMe. Because
there is no sandbox NVMe driver, just use MMC instead. Avoid falling back
to raw images to make failures more obvious.

Signed-off-by: Sean Anderson <seanga2@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
configs/sandbox_noinst_defconfig
test/image/Kconfig
test/image/spl_load_fs.c

index 0a542cfb6aa22786f924789826028e07ea9623df..11be2dccf7dde8b4f77f793a1bc1daa65506cf46 100644 (file)
@@ -34,6 +34,7 @@ CONFIG_DISPLAY_BOARDINFO_LATE=y
 CONFIG_SPL_NO_BSS_LIMIT=y
 CONFIG_HANDOFF=y
 CONFIG_SPL_BOARD_INIT=y
+# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set
 CONFIG_SPL_LEGACY_IMAGE_FORMAT=y
 CONFIG_SPL_LOAD_IMX_CONTAINER=y
 CONFIG_SPL_SYS_MALLOC=y
@@ -123,6 +124,7 @@ CONFIG_ADC=y
 CONFIG_ADC_SANDBOX=y
 CONFIG_AXI=y
 CONFIG_AXI_SANDBOX=y
+CONFIG_SPL_BLK_FS=y
 CONFIG_SYS_IDE_MAXBUS=1
 CONFIG_SYS_ATA_BASE_ADDR=0x100
 CONFIG_SYS_ATA_STRIDE=4
index 963c86cc290b9030c0a47b968ad73c30c8a940f1..a52766b77d49853967154deffab58c19599178f4 100644 (file)
@@ -14,12 +14,13 @@ config SPL_UT_LOAD_FS
        bool "Unit tests for filesystems"
        depends on SANDBOX && SPL_OF_REAL
        depends on FS_LOADER
+       depends on SPL_BLK_FS
        depends on SPL_FS_FAT
        depends on SPL_FS_EXT4
        depends on SPL_MMC_WRITE
        default y
        help
-         Test filesystems in SPL.
+         Test filesystems and the various load methods which use them.
 
 config SPL_UT_LOAD_OS
        bool "Test loading from the host OS"
index 0ee1ede134a1f4d7fc8c8cb8c237f53a9982ea08..a8b45bdbc49c77faaadfe50d1ce924379f5ee3e2 100644 (file)
@@ -10,6 +10,7 @@
 #include <fat.h>
 #include <fs.h>
 #include <memalign.h>
+#include <spl.h>
 #include <asm/io.h>
 #include <linux/stat.h>
 #include <test/spl.h>
@@ -304,3 +305,65 @@ static int spl_test_fat(struct unit_test_state *uts)
        return spl_test_fs(uts, __func__, create_fat);
 }
 SPL_TEST(spl_test_fat, DM_FLAGS);
+
+static int spl_test_mmc_fs(struct unit_test_state *uts, const char *test_name,
+                          enum spl_test_image type, create_fs_t create_fs)
+{
+       const char *filename = CONFIG_SPL_FS_LOAD_PAYLOAD_NAME;
+       struct blk_desc *dev_desc;
+       size_t fs_size, fs_data, img_size, img_data,
+              data_size = SPL_TEST_DATA_SIZE;
+       struct spl_image_info info_write = {
+               .name = test_name,
+               .size = data_size,
+       }, info_read = { };
+       struct disk_partition part = {
+               .start = 1,
+               .sys_ind = 0x83,
+       };
+       struct spl_boot_device bootdev = { };
+       void *fs;
+       char *data;
+
+       img_size = create_image(NULL, type, &info_write, &img_data);
+       ut_assert(img_size);
+       fs_size = create_fs(NULL, img_size, filename, &fs_data);
+       ut_assert(fs_size);
+       fs = calloc(fs_size, 1);
+       ut_assertnonnull(fs);
+
+       data = fs + fs_data + img_data;
+       generate_data(data, data_size, test_name);
+       ut_asserteq(img_size, create_image(fs + fs_data, type, &info_write,
+                                          NULL));
+       ut_asserteq(fs_size, create_fs(fs, img_size, filename, NULL));
+
+       dev_desc = blk_get_devnum_by_uclass_id(UCLASS_MMC, 0);
+       ut_assertnonnull(dev_desc);
+
+       ut_asserteq(512, dev_desc->blksz);
+       part.size = fs_size / dev_desc->blksz;
+       ut_assertok(write_mbr_partitions(dev_desc, &part, 1, 0));
+       ut_asserteq(part.size, blk_dwrite(dev_desc, part.start, part.size, fs));
+
+       ut_assertok(spl_blk_load_image(&info_read, &bootdev, UCLASS_MMC, 0, 1));
+       if (check_image_info(uts, &info_write, &info_read))
+               return CMD_RET_FAILURE;
+       ut_asserteq_mem(data, phys_to_virt(info_write.load_addr), data_size);
+
+       free(fs);
+       return 0;
+}
+
+static int spl_test_blk(struct unit_test_state *uts, const char *test_name,
+                       enum spl_test_image type)
+{
+       spl_fat_force_reregister();
+       if (spl_test_mmc_fs(uts, test_name, type, create_fat))
+               return CMD_RET_FAILURE;
+
+       return spl_test_mmc_fs(uts, test_name, type, create_ext2);
+}
+SPL_IMG_TEST(spl_test_blk, LEGACY, DM_FLAGS);
+SPL_IMG_TEST(spl_test_blk, FIT_EXTERNAL, DM_FLAGS);
+SPL_IMG_TEST(spl_test_blk, FIT_INTERNAL, DM_FLAGS);