[U-Boot] [PATCH v2 1/2] 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 --- Hi Tom,
if you haven't applied the last version of this patch, consider using this version instead, which has Rob's comment addressed (bailing out early).
Cheers, Andre.
common/fdt_support.c | 3 +++ include/fdt_support.h | 26 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+)
diff --git a/common/fdt_support.c b/common/fdt_support.c index 10648b5..f86365e 100644 --- a/common/fdt_support.c +++ b/common/fdt_support.c @@ -454,6 +454,9 @@ int fdt_fixup_memory_banks(void *blob, u64 start[], u64 size[], int banks) return err; }
+ if (!banks) + return 0; + len = fdt_pack_reg(blob, tmp, start, size, banks);
err = fdt_setprop(blob, nodeoffset, "reg", tmp, len); diff --git a/include/fdt_support.h b/include/fdt_support.h index 0edc4fa..296add0 100644 --- a/include/fdt_support.h +++ b/include/fdt_support.h @@ -67,8 +67,34 @@ void do_fixup_by_compat(void *fdt, const char *compat, const char *prop, const void *val, int len, int create); void do_fixup_by_compat_u32(void *fdt, const char *compat, 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); + +/** + * 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); + void fdt_fixup_ethernet(void *fdt); int fdt_find_and_setprop(void *fdt, const char *node, const char *prop, const void *val, int len, int create);

From: Rob Herring robh@kernel.org
On the highbank platform the SoC's management controller firmware will probe the DRAM modules and populates the initial device tree with the correct values. Therefore the memory sizes in the DT are already correct, so remove U-Boot's DRAM bank setup so the memory node is not "fixed up" by u-boot.
Signed-off-by: Rob Herring robh@kernel.org Signed-off-by: Andre Przywara osp@andrep.de --- board/highbank/highbank.c | 6 ------ include/configs/highbank.h | 3 ++- 2 files changed, 2 insertions(+), 7 deletions(-)
diff --git a/board/highbank/highbank.c b/board/highbank/highbank.c index 469ee8e..55999ed 100644 --- a/board/highbank/highbank.c +++ b/board/highbank/highbank.c @@ -96,12 +96,6 @@ int dram_init(void) return 0; }
-void dram_init_banksize(void) -{ - gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE; - gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE; -} - #if defined(CONFIG_OF_BOARD_SETUP) int ft_board_setup(void *fdt, bd_t *bd) { diff --git a/include/configs/highbank.h b/include/configs/highbank.h index 08dcdf8..0c5f927 100644 --- a/include/configs/highbank.h +++ b/include/configs/highbank.h @@ -80,8 +80,9 @@
/*----------------------------------------------------------------------- * Physical Memory Map + * The DRAM is already setup, so do not touch the DT node later. */ -#define CONFIG_NR_DRAM_BANKS 1 +#define CONFIG_NR_DRAM_BANKS 0 #define PHYS_SDRAM_1_SIZE (4089 << 20) #define CONFIG_SYS_MEMTEST_START 0x100000 #define CONFIG_SYS_MEMTEST_END (PHYS_SDRAM_1_SIZE - 0x100000)

On Sun, Jun 21, 2015 at 12:29:55AM +0100, Andre Przywara wrote:
From: Rob Herring robh@kernel.org
On the highbank platform the SoC's management controller firmware will probe the DRAM modules and populates the initial device tree with the correct values. Therefore the memory sizes in the DT are already correct, so remove U-Boot's DRAM bank setup so the memory node is not "fixed up" by u-boot.
Signed-off-by: Rob Herring robh@kernel.org Signed-off-by: Andre Przywara osp@andrep.de
Applied to u-boot/master, thanks!

On 20 June 2015 at 17:29, Andre Przywara osp@andrep.de wrote:
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
Hi Tom,
if you haven't applied the last version of this patch, consider using this version instead, which has Rob's comment addressed (bailing out early).
Cheers, Andre.
common/fdt_support.c | 3 +++ include/fdt_support.h | 26 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+)
I almost applied v1 which was assigned to me in patchwork. I'll pick up just this patch (not 2/2).
Acked-by: Simon Glass sjg@chromium.org

On 20 July 2015 at 07:21, Simon Glass sjg@chromium.org wrote:
On 20 June 2015 at 17:29, Andre Przywara osp@andrep.de wrote:
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
Hi Tom,
if you haven't applied the last version of this patch, consider using this version instead, which has Rob's comment addressed (bailing out early).
Cheers, Andre.
common/fdt_support.c | 3 +++ include/fdt_support.h | 26 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+)
I almost applied v1 which was assigned to me in patchwork. I'll pick up just this patch (not 2/2).
Acked-by: Simon Glass sjg@chromium.org
Applied to u-boot-fdt, thanks!
participants (3)
-
Andre Przywara
-
Simon Glass
-
Tom Rini