mirror of
https://xff.cz/git/u-boot/
synced 2025-09-25 12:31:17 +02:00
fdtdec: allow board to provide fdt for CONFIG_OF_SEPARATE
Similar to CONFIG_OF_BOARD, but in this case the fdt is still built by u-boot build. This allows the board to patch the fdt, etc. In the specific case of dragonboard 410c, we pass the u-boot generated fdt to the previous stage of bootloader (by embedding it in the u-boot.img that is loaded by lk/aboot), which patches the fdt and passes it back to u-boot. Signed-off-by: Rob Clark <robdclark@gmail.com> [trini: Update board_fdt_blob_setup #if check] Signed-off-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
@@ -990,7 +990,8 @@ int fdtdec_setup(void);
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Board-specific FDT initialization. Returns the address to a device tree blob.
|
* Board-specific FDT initialization. Returns the address to a device tree blob.
|
||||||
* Called when CONFIG_OF_BOARD is defined.
|
* Called when CONFIG_OF_BOARD is defined, or if CONFIG_OF_SEPARATE is defined
|
||||||
|
* and the board implements it.
|
||||||
*/
|
*/
|
||||||
void *board_fdt_blob_setup(void);
|
void *board_fdt_blob_setup(void);
|
||||||
|
|
||||||
|
35
lib/fdtdec.c
35
lib/fdtdec.c
@@ -1272,6 +1272,28 @@ static int uncompress_blob(const void *src, ulong sz_src, void **dstp)
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(CONFIG_OF_BOARD) || defined(CONFIG_OF_SEPARATE)
|
||||||
|
/*
|
||||||
|
* For CONFIG_OF_SEPARATE, the board may optionally implement this to
|
||||||
|
* provide and/or fixup the fdt.
|
||||||
|
*/
|
||||||
|
__weak void *board_fdt_blob_setup(void)
|
||||||
|
{
|
||||||
|
void *fdt_blob = NULL;
|
||||||
|
#ifdef CONFIG_SPL_BUILD
|
||||||
|
/* FDT is at end of BSS unless it is in a different memory region */
|
||||||
|
if (IS_ENABLED(CONFIG_SPL_SEPARATE_BSS))
|
||||||
|
fdt_blob = (ulong *)&_image_binary_end;
|
||||||
|
else
|
||||||
|
fdt_blob = (ulong *)&__bss_end;
|
||||||
|
#else
|
||||||
|
/* FDT is at end of image */
|
||||||
|
fdt_blob = (ulong *)&_end;
|
||||||
|
#endif
|
||||||
|
return fdt_blob;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int fdtdec_setup(void)
|
int fdtdec_setup(void)
|
||||||
{
|
{
|
||||||
#if CONFIG_IS_ENABLED(OF_CONTROL)
|
#if CONFIG_IS_ENABLED(OF_CONTROL)
|
||||||
@@ -1285,18 +1307,7 @@ int fdtdec_setup(void)
|
|||||||
# else
|
# else
|
||||||
gd->fdt_blob = __dtb_dt_begin;
|
gd->fdt_blob = __dtb_dt_begin;
|
||||||
# endif
|
# endif
|
||||||
# elif defined CONFIG_OF_SEPARATE
|
# elif defined(CONFIG_OF_BOARD) || defined(CONFIG_OF_SEPARATE)
|
||||||
# ifdef CONFIG_SPL_BUILD
|
|
||||||
/* FDT is at end of BSS unless it is in a different memory region */
|
|
||||||
if (IS_ENABLED(CONFIG_SPL_SEPARATE_BSS))
|
|
||||||
gd->fdt_blob = (ulong *)&_image_binary_end;
|
|
||||||
else
|
|
||||||
gd->fdt_blob = (ulong *)&__bss_end;
|
|
||||||
# else
|
|
||||||
/* FDT is at end of image */
|
|
||||||
gd->fdt_blob = (ulong *)&_end;
|
|
||||||
# endif
|
|
||||||
# elif defined(CONFIG_OF_BOARD)
|
|
||||||
/* Allow the board to override the fdt address. */
|
/* Allow the board to override the fdt address. */
|
||||||
gd->fdt_blob = board_fdt_blob_setup();
|
gd->fdt_blob = board_fdt_blob_setup();
|
||||||
# elif defined(CONFIG_OF_HOSTFILE)
|
# elif defined(CONFIG_OF_HOSTFILE)
|
||||||
|
Reference in New Issue
Block a user