mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 07:04:28 +00:00
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:
parent
acb96c170d
commit
93caa3efe2
3 changed files with 34 additions and 1 deletions
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in a new issue