aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFiona Klute <fiona.klute@gmx.de>2024-05-01 10:54:09 +0200
committerTom Rini <trini@konsulko.com>2024-05-17 13:18:43 -0600
commit3be9f399e911cfc437a37ac826441f1d96da1c9b (patch)
tree4b554e14f4f8292f44f520d378bd511b52e4988a
parentad7dce5abd49ef3b5c93da5303e15449c8c162b4 (diff)
downloadu-boot-WIP/17May2024.zip
u-boot-WIP/17May2024.tar.gz
u-boot-WIP/17May2024.tar.bz2
Init virtio before loading ENV from EXT4 or FATWIP/17May2024
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>
-rw-r--r--env/ext4.c5
-rw-r--r--env/fat.c5
-rw-r--r--include/virtio.h1
3 files changed, 11 insertions, 0 deletions
diff --git a/env/ext4.c b/env/ext4.c
index eb16568..d92c844 100644
--- a/env/ext4.c
+++ b/env/ext4.c
@@ -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);
diff --git a/env/fat.c b/env/fat.c
index 2a40f12..f3f8b73 100644
--- 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);
diff --git a/include/virtio.h b/include/virtio.h
index 1ab0ec5..17f894a 100644
--- a/include/virtio.h
+++ b/include/virtio.h
@@ -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>