diff options
-rw-r--r-- | common/spl/spl_fat.c | 5 | ||||
-rw-r--r-- | common/spl/spl_mmc.c | 8 | ||||
-rw-r--r-- | include/spl.h | 22 |
3 files changed, 34 insertions, 1 deletions
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 1d416b4c929..03a4a83eb24 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); |