From: Sean Anderson <seanga2@gmail.com>
To: u-boot@lists.denx.de, Tom Rini <trini@konsulko.com>
Cc: Harald Seiler <hws@denx.de>, Simon Glass <sjg@chromium.org>,
Heinrich Schuchardt <xypron.glpk@gmx.de>,
Sean Anderson <seanga2@gmail.com>
Subject: [PATCH v2 18/29] spl: Add callbacks to invalidate cached devices
Date: Sat, 14 Oct 2023 16:47:54 -0400 [thread overview]
Message-ID: <20231014204805.439009-19-seanga2@gmail.com> (raw)
In-Reply-To: <20231014204805.439009-1-seanga2@gmail.com>
Several SPL functions try to avoid performing initialization twice by
caching devices. This is fine for regular boot, but does not work with
UNIT_TEST, since all devices are torn down after each test. Add some
functions to invalidate the caches which can be called before testing these
load methods.
Signed-off-by: Sean Anderson <seanga2@gmail.com>
---
Changes in v2:
- Use callbacks to invalidate SPL caches instead of disabling them entirely
common/spl/spl_fat.c | 5 +++++
common/spl/spl_mmc.c | 8 +++++++-
include/spl.h | 22 ++++++++++++++++++++++
3 files changed, 34 insertions(+), 1 deletion(-)
diff --git a/common/spl/spl_fat.c b/common/spl/spl_fat.c
index c6e2526ade1..b7b6a7794fd 100644
--- a/common/spl/spl_fat.c
+++ b/common/spl/spl_fat.c
@@ -20,6 +20,11 @@
static int fat_registered;
+void spl_fat_force_reregister(void)
+{
+ fat_registered = 0;
+}
+
static int spl_register_fat_device(struct blk_desc *block_dev, int partition)
{
int err = 0;
diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c
index 67c7ae34a58..03a081fa47e 100644
--- a/common/spl/spl_mmc.c
+++ b/common/spl/spl_mmc.c
@@ -403,13 +403,19 @@ static int spl_mmc_get_mmc_devnum(struct mmc *mmc)
return block_dev->devnum;
}
+static struct mmc *mmc;
+
+void spl_mmc_clear_cache(void)
+{
+ mmc = NULL;
+}
+
int spl_mmc_load(struct spl_image_info *spl_image,
struct spl_boot_device *bootdev,
const char *filename,
int raw_part,
unsigned long raw_sect)
{
- static struct mmc *mmc;
u32 boot_mode;
int err = 0;
__maybe_unused int part = 0;
diff --git a/include/spl.h b/include/spl.h
index 7d30fb57dac..5b051ef2aae 100644
--- a/include/spl.h
+++ b/include/spl.h
@@ -674,6 +674,18 @@ static inline const char *spl_loader_name(const struct spl_image_loader *loader)
#endif
/* SPL FAT image functions */
+
+/**
+ * spl_fat_force_reregister() - Force reregistration of FAT block devices
+ *
+ * To avoid repeatedly looking up block devices, spl_load_image_fat keeps track
+ * of whether it has already registered a block device. This is fine for most
+ * cases, but when running unit tests all devices are removed and recreated
+ * in-between tests. This function will force re-registration of any block
+ * devices, ensuring that we don't try to use an invalid block device.
+ */
+void spl_fat_force_reregister(void);
+
int spl_load_image_fat(struct spl_image_info *spl_image,
struct spl_boot_device *bootdev,
struct blk_desc *block_dev, int partition,
@@ -753,6 +765,16 @@ bool spl_was_boot_source(void);
*/
int spl_dfu_cmd(int usbctrl, char *dfu_alt_info, char *interface, char *devstr);
+/**
+ * spl_mmc_clear_cache() - Clear cached MMC devices
+ *
+ * To avoid reinitializing MMCs, spl_mmc_load caches the most-recently-used MMC
+ * device. This is fine for most cases, but when running unit tests all devices
+ * are removed and recreated in-between tests. This function will clear any
+ * cached state, ensuring that we don't try to use an invalid MMC.
+ */
+void spl_mmc_clear_cache(void);
+
int spl_mmc_load_image(struct spl_image_info *spl_image,
struct spl_boot_device *bootdev);
--
2.37.1
next prev parent reply other threads:[~2023-10-15 7:27 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-14 20:47 [PATCH v2 00/29] test: spl: Test some load methods Sean Anderson
2023-10-14 20:47 ` [PATCH v2 01/29] spl: legacy: Fix referencing _image_binary_end Sean Anderson
2023-10-14 20:47 ` [PATCH v2 02/29] spl: nor: Don't allocate header on stack Sean Anderson
2023-10-14 20:47 ` [PATCH v2 03/29] spl: fit: Fix entry point for SPL_LOAD_FIT_FULL Sean Anderson
2023-10-14 20:47 ` [PATCH v2 04/29] arm: imx: Fix i.MX8 container load address Sean Anderson
2023-10-14 20:47 ` [PATCH v2 05/29] arm: imx: Add newlines after error messages Sean Anderson
2023-10-14 20:47 ` [PATCH v2 06/29] arm: imx: Use log_err for errors in read_auth_container Sean Anderson
2023-10-14 20:47 ` [PATCH v2 07/29] arm: imx: Add function to validate i.MX8 containers Sean Anderson
2023-10-14 20:47 ` [PATCH v2 08/29] arm: imx: Check header before calling spl_load_imx_container Sean Anderson
2023-10-14 20:47 ` [PATCH v2 09/29] Move i.MX8 container image loading support to common/spl Sean Anderson
2023-10-14 20:47 ` [PATCH v2 10/29] spl: Allow enabling SPL_OF_REAL and SPL_OF_PLATDATA at the same time Sean Anderson
2023-10-14 20:47 ` [PATCH v2 11/29] lib: acpi: Fix linking SPL when ACPIGEN is enabled Sean Anderson
2023-10-14 20:47 ` [PATCH v2 12/29] fs: Disable sandbox filesystem in SPL Sean Anderson
2023-10-14 21:14 ` Heinrich Schuchardt
2023-10-14 21:24 ` Sean Anderson
2023-10-14 21:45 ` Simon Glass
2023-10-14 20:47 ` [PATCH v2 13/29] fs: ext4: Fix building ext4 in SPL if write is enabled Sean Anderson
2023-10-14 20:47 ` [PATCH v2 14/29] fs: ext4: Add some defines for testing Sean Anderson
2023-10-14 23:35 ` Simon Glass
2023-10-14 20:47 ` [PATCH v2 15/29] net: Fix compiling SPL when fastboot is enabled Sean Anderson
2023-10-14 20:47 ` [PATCH v2 16/29] net: bootp: Move port numbers to header Sean Anderson
2023-10-14 21:20 ` Heinrich Schuchardt
2023-10-14 21:22 ` Tom Rini
2023-10-14 20:47 ` [PATCH v2 17/29] net: bootp: Fall back to BOOTP from DHCP when unit testing Sean Anderson
2023-10-14 21:22 ` Heinrich Schuchardt
2023-10-14 21:27 ` Sean Anderson
2023-10-15 14:39 ` Simon Glass
2023-10-15 19:20 ` Tom Rini
2023-10-14 20:47 ` Sean Anderson [this message]
2023-10-14 20:47 ` [PATCH v2 19/29] spl: Use map_sysmem where appropriate Sean Anderson
2023-10-14 20:47 ` [PATCH v2 20/29] sandbox: Support -T in spl Sean Anderson
2023-10-14 23:35 ` Simon Glass
2023-10-14 20:47 ` [PATCH v2 21/29] test: spl: Split tests up and use some configs Sean Anderson
2023-10-14 20:47 ` [PATCH v2 22/29] test: spl: Fix spl_test_load not failing if fname doesn't exist Sean Anderson
2023-10-14 20:47 ` [PATCH v2 23/29] test: spl: Add functions to create images Sean Anderson
2023-10-14 20:48 ` [PATCH v2 24/29] test: spl: Add functions to create filesystems Sean Anderson
2023-10-14 23:35 ` Simon Glass
2023-10-14 20:48 ` [PATCH v2 25/29] test: spl: Add a test for spl_blk_load_image Sean Anderson
2023-10-14 20:48 ` [PATCH v2 26/29] test: spl: Add a test for the MMC load method Sean Anderson
2023-10-14 20:48 ` [PATCH v2 27/29] test: spl: Add a test for the NET " Sean Anderson
2023-10-14 20:48 ` [PATCH v2 28/29] test: spl: Add a test for the NOR " Sean Anderson
2023-10-14 20:48 ` [PATCH v2 29/29] test: spl: Add a test for the SPI " Sean Anderson
2023-10-18 12:30 ` [PATCH v2 00/29] test: spl: Test some load methods Tom Rini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231014204805.439009-19-seanga2@gmail.com \
--to=seanga2@gmail.com \
--cc=hws@denx.de \
--cc=sjg@chromium.org \
--cc=trini@konsulko.com \
--cc=u-boot@lists.denx.de \
--cc=xypron.glpk@gmx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox