fdtdec: encapsulate dtb_dt_embedded() within

Patch keeps the access to dtb_dt_embedded() within fdtdec API,
by means of new API function introduction. This new function is a
common place for updating appropriate global_data fields for
OF_EMBED case.

  Also, the consequence of the patch is movement of '___dtb_dt_*begin'
symbols' declaration from header file, because nobody used symbols
outside the lib/fdtdec.c.

Signed-off-by: Evgeny Bachinin <EABachinin@salutedevices.com>
Suggested-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
(cherry picked from commit 623f5cf517)
This commit is contained in:
Evgeny Bachinin
2024-12-11 01:39:57 +03:00
committed by Simon Glass
parent e094e2095e
commit 94e9d64ffc
3 changed files with 33 additions and 21 deletions

View File

@@ -159,11 +159,11 @@ static int initr_reloc_global_data(void)
/*
* For CONFIG_OF_EMBED case the FDT is embedded into ELF, available by
* __dtb_dt_begin. After U-boot ELF self-relocation to RAM top address
* __dtb_dt_begin. After U-Boot ELF self-relocation to RAM top address
* it is worth to update fdt_blob in global_data
*/
if (IS_ENABLED(CONFIG_OF_EMBED))
gd->fdt_blob = dtb_dt_embedded();
fdtdec_setup_embed();
#ifdef CONFIG_EFI_LOADER
/*

View File

@@ -136,23 +136,6 @@ struct fdt_pci_addr {
u32 phys_lo;
};
extern u8 __dtb_dt_begin[]; /* embedded device tree blob */
extern u8 __dtb_dt_spl_begin[]; /* embedded device tree blob for SPL/TPL */
/* Get a pointer to the embedded devicetree, if there is one, else NULL */
static inline u8 *dtb_dt_embedded(void)
{
#ifdef CONFIG_OF_EMBED
# ifdef CONFIG_XPL_BUILD
return __dtb_dt_spl_begin;
# else
return __dtb_dt_begin;
# endif
#else
return NULL;
#endif
}
/**
* Compute the size of a resource.
*
@@ -1155,6 +1138,13 @@ int fdtdec_set_carveout(void *blob, const char *node, const char *prop_name,
const char *name, const char **compatibles,
unsigned int count, unsigned long flags);
/**
* fdtdec_setup_embed - pick up embedded DTS
*
* Should be invoked under CONFIG_OF_EMBED guard.
*/
void fdtdec_setup_embed(void);
/**
* Set up the device tree ready for use
*/

View File

@@ -94,6 +94,23 @@ static const char *const fdt_src_name[] = {
[FDTSRC_PASSAGE] = "passage",
};
extern u8 __dtb_dt_begin[]; /* embedded device tree blob */
extern u8 __dtb_dt_spl_begin[]; /* embedded device tree blob for SPL/TPL */
/* Get a pointer to the embedded devicetree, if there is one, else NULL */
static u8 *dtb_dt_embedded(void)
{
#ifdef CONFIG_OF_EMBED
# ifdef CONFIG_XPL_BUILD
return __dtb_dt_spl_begin;
# else
return __dtb_dt_begin;
# endif
#else
return NULL;
#endif
}
const char *fdtdec_get_srcname(void)
{
return fdt_src_name[gd->fdt_src];
@@ -1670,6 +1687,12 @@ static void setup_multi_dtb_fit(void)
}
}
void fdtdec_setup_embed(void)
{
gd->fdt_blob = dtb_dt_embedded();
gd->fdt_src = FDTSRC_EMBED;
}
int fdtdec_setup(void)
{
int ret;
@@ -1690,8 +1713,7 @@ int fdtdec_setup(void)
gd->fdt_blob = fdt_find_separate();
gd->fdt_src = FDTSRC_SEPARATE;
} else { /* embed dtb in ELF file for testing / development */
gd->fdt_blob = dtb_dt_embedded();
gd->fdt_src = FDTSRC_EMBED;
fdtdec_setup_embed();
}
}