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-13 16:51:14 -0600
commit4f652182a0777085eb9022648c33c5fd8356a0de (patch)
tree073df29d0b0ad924eae04aeb877b7c77a232c91e
parentebc84d7b60c1ed3398e9f600fe3dc8406500bd35 (diff)
downloadu-boot-4f652182a0777085eb9022648c33c5fd8356a0de.zip
u-boot-4f652182a0777085eb9022648c33c5fd8356a0de.tar.gz
u-boot-4f652182a0777085eb9022648c33c5fd8356a0de.tar.bz2
Init virtio before loading ENV from EXT4 or FAT
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>