mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-09 03:21:51 +00:00
lib: fdtdec: Add function re-setup the fdt more effeciently
In some cases it may be useful to be able to change the fdt we have been using and use another one instead. For example, the TI platforms uses an EEPROM to store board information and, based on the type of board, different dtbs are used by the SPL. When DM_I2C is used, a first dtb must be used before the I2C is initialized and only then the final dtb can be selected. To speed up the process and reduce memory usage, introduce a new function fdtdec_setup_best_match() that re-use the DTBs loaded in memory by fdtdec_setup() to select the best match. Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com> Reviewed-by: Heiko Schocher <hs@denx.de>
This commit is contained in:
parent
78eee5e90d
commit
f1d2bc9034
4 changed files with 85 additions and 1 deletions
43
lib/fdtdec.c
43
lib/fdtdec.c
|
@ -1275,14 +1275,55 @@ int fdtdec_setup(void)
|
|||
* If so, pick the most relevant
|
||||
*/
|
||||
fdt_blob = locate_dtb_in_fit(gd->fdt_blob);
|
||||
if (fdt_blob)
|
||||
if (fdt_blob) {
|
||||
gd->multi_dtb_fit = gd->fdt_blob;
|
||||
gd->fdt_blob = fdt_blob;
|
||||
}
|
||||
|
||||
# endif
|
||||
#endif
|
||||
|
||||
return fdtdec_prepare_fdt();
|
||||
}
|
||||
|
||||
#if CONFIG_IS_ENABLED(MULTI_DTB_FIT)
|
||||
int fdtdec_resetup(int *rescan)
|
||||
{
|
||||
void *fdt_blob;
|
||||
|
||||
/*
|
||||
* If the current DTB is part of a compressed FIT image,
|
||||
* try to locate the best match from the uncompressed
|
||||
* FIT image stillpresent there. Save the time and space
|
||||
* required to uncompress it again.
|
||||
*/
|
||||
if (gd->multi_dtb_fit) {
|
||||
fdt_blob = locate_dtb_in_fit(gd->multi_dtb_fit);
|
||||
|
||||
if (fdt_blob == gd->fdt_blob) {
|
||||
/*
|
||||
* The best match did not change. no need to tear down
|
||||
* the DM and rescan the fdt.
|
||||
*/
|
||||
*rescan = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
*rescan = 1;
|
||||
gd->fdt_blob = fdt_blob;
|
||||
return fdtdec_prepare_fdt();
|
||||
}
|
||||
|
||||
/*
|
||||
* If multi_dtb_fit is NULL, it means that blob appended to u-boot is
|
||||
* not a FIT image containings DTB, but a single DTB. There is no need
|
||||
* to teard down DM and rescan the DT in this case.
|
||||
*/
|
||||
*rescan = 0;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_NR_DRAM_BANKS
|
||||
int fdtdec_decode_ram_size(const void *blob, const char *area, int board_id,
|
||||
phys_addr_t *basep, phys_size_t *sizep, bd_t *bd)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue