mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-09-30 00:20:44 +09:00
fdt: prevent clearing memory node if there are no banks
Avoid clearing the reg property in the memory DT node if no memory banks have been specified for a board (CONFIG_NR_DRAM_BANKS == 0). This allows boards to let U-Boot skip the DT memory tinkering in case other firmware has already setup the node properly before. This should be safe as all callers of fdt_fixup_memory_banks that use a computed <banks> value put at least 1 in there. Add some documentation comments to the header file. Signed-off-by: Andre Przywara <osp@andrep.de> Acked-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
605e15db2b
commit
5c1cf89f8c
@ -454,6 +454,9 @@ int fdt_fixup_memory_banks(void *blob, u64 start[], u64 size[], int banks)
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!banks)
|
||||||
|
return 0;
|
||||||
|
|
||||||
len = fdt_pack_reg(blob, tmp, start, size, banks);
|
len = fdt_pack_reg(blob, tmp, start, size, banks);
|
||||||
|
|
||||||
err = fdt_setprop(blob, nodeoffset, "reg", tmp, len);
|
err = fdt_setprop(blob, nodeoffset, "reg", tmp, len);
|
||||||
|
@ -67,8 +67,34 @@ void do_fixup_by_compat(void *fdt, const char *compat,
|
|||||||
const char *prop, const void *val, int len, int create);
|
const char *prop, const void *val, int len, int create);
|
||||||
void do_fixup_by_compat_u32(void *fdt, const char *compat,
|
void do_fixup_by_compat_u32(void *fdt, const char *compat,
|
||||||
const char *prop, u32 val, int create);
|
const char *prop, u32 val, int create);
|
||||||
|
/**
|
||||||
|
* Setup the memory node in the DT. Creates one if none was existing before.
|
||||||
|
* Calls fdt_fixup_memory_banks() to populate a single reg pair covering the
|
||||||
|
* whole memory.
|
||||||
|
*
|
||||||
|
* @param blob FDT blob to update
|
||||||
|
* @param start Begin of DRAM mapping in physical memory
|
||||||
|
* @param size Size of the single memory bank
|
||||||
|
* @return 0 if ok, or -1 or -FDT_ERR_... on error
|
||||||
|
*/
|
||||||
int fdt_fixup_memory(void *blob, u64 start, u64 size);
|
int fdt_fixup_memory(void *blob, u64 start, u64 size);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fill the DT memory node with multiple memory banks.
|
||||||
|
* Creates the node if none was existing before.
|
||||||
|
* If banks is 0, it will not touch the existing reg property. This allows
|
||||||
|
* boards to not mess with the existing DT setup, which may have been
|
||||||
|
* filled in properly before.
|
||||||
|
*
|
||||||
|
* @param blob FDT blob to update
|
||||||
|
* @param start Array of size <banks> to hold the start addresses.
|
||||||
|
* @param size Array of size <banks> to hold the size of each region.
|
||||||
|
* @param banks Number of memory banks to create. If 0, the reg
|
||||||
|
* property will be left untouched.
|
||||||
|
* @return 0 if ok, or -1 or -FDT_ERR_... on error
|
||||||
|
*/
|
||||||
int fdt_fixup_memory_banks(void *blob, u64 start[], u64 size[], int banks);
|
int fdt_fixup_memory_banks(void *blob, u64 start[], u64 size[], int banks);
|
||||||
|
|
||||||
void fdt_fixup_ethernet(void *fdt);
|
void fdt_fixup_ethernet(void *fdt);
|
||||||
int fdt_find_and_setprop(void *fdt, const char *node, const char *prop,
|
int fdt_find_and_setprop(void *fdt, const char *node, const char *prop,
|
||||||
const void *val, int len, int create);
|
const void *val, int len, int create);
|
||||||
|
Loading…
Reference in New Issue
Block a user