]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
Init virtio before loading ENV from EXT4 or FAT
authorFiona Klute <fiona.klute@gmx.de>
Wed, 1 May 2024 08:54:09 +0000 (10:54 +0200)
committerTom Rini <trini@konsulko.com>
Mon, 13 May 2024 22:51:14 +0000 (16:51 -0600)
Specifying a file in an EXT4 or FAT partition on a virtio device as
environment location failed because virtio hadn't been initialized by
the time the environment was loaded. This patch mirrors commit
54ee5ae84191 ("Add SCSI scan for ENV in EXT4 or FAT") in issue and
fix, just for a different kind of block device.

The additional include in include/virtio.h is needed so all functions
called there are defined, the alternative would have been to include
dm/device.h separately in the env/ sources.

Checkpatch suggests using "if (IS_ENABLED(CONFIG...))" instead of
"#if defined(CONFIG_...)", I'm sticking to the style of the existing
code here.

Signed-off-by: Fiona Klute <fiona.klute@gmx.de>
CC: Joe Hershberger <joe.hershberger@ni.com>
CC: Bin Meng <bmeng.cn@gmail.com>
CC: Rogier Stam <rogier@unrailed.org>
env/ext4.c
env/fat.c
include/virtio.h

index eb16568bd463d61dd570d318e972015f1597cb14..d92c844ea6c0d2b66387f15a72aab3a601f7a1d1 100644 (file)
@@ -31,6 +31,7 @@
 #include <ext4fs.h>
 #include <mmc.h>
 #include <scsi.h>
+#include <virtio.h>
 #include <asm/global_data.h>
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -150,6 +151,10 @@ static int env_ext4_load(void)
        if (!strcmp(ifname, "scsi"))
                scsi_scan(true);
 #endif
+#if defined(CONFIG_VIRTIO)
+       if (!strcmp(ifname, "virtio"))
+               virtio_init();
+#endif
 
        part = blk_get_device_part_str(ifname, dev_and_part,
                                       &dev_desc, &info, 1);
index 2a40f123936caba4d15c1520f46a9d1ae58e5bdc..f3f8b7301eef6e494ba4bdcd5558f681cfe086e6 100644 (file)
--- a/env/fat.c
+++ b/env/fat.c
@@ -17,6 +17,7 @@
 #include <fat.h>
 #include <mmc.h>
 #include <scsi.h>
+#include <virtio.h>
 #include <asm/cache.h>
 #include <asm/global_data.h>
 #include <linux/stddef.h>
@@ -133,6 +134,10 @@ static int env_fat_load(void)
        if (!strcmp(CONFIG_ENV_FAT_INTERFACE, "scsi"))
                scsi_scan(true);
 #endif
+#if defined(CONFIG_VIRTIO)
+       if (!strcmp(ifname, "virtio"))
+               virtio_init();
+#endif
 #endif
        part = blk_get_device_part_str(ifname, dev_and_part,
                                       &dev_desc, &info, 1);
index 1ab0ec5f39f582a24a1e9bb419c3fd4c082314e4..17f894a79e3162d246ec9c160678386fd25ac023 100644 (file)
@@ -21,6 +21,7 @@
 #define __VIRTIO_H__
 
 #include <virtio_types.h>
+#include <dm/device.h>
 #include <linux/bitops.h>
 #include <linux/bug.h>
 #include <linux/typecheck.h>