spl: Add callbacks to invalidate cached devices

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>
This commit is contained in:
Sean Anderson 2023-10-14 16:47:54 -04:00 committed by Tom Rini
parent acb96c170d
commit 93caa3efe2
3 changed files with 34 additions and 1 deletions

View file

@ -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;

View file

@ -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;

View file

@ -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);