diff mbox

[U-Boot,v2,1/2] fdt: prevent clearing memory node if there are no banks

Message ID 1434842995-25884-1-git-send-email-osp@andrep.de
State Accepted
Delegated to: Simon Glass
Headers show

Commit Message

Andre Przywara June 20, 2015, 11:29 p.m. UTC
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(+)

Comments

Simon Glass July 20, 2015, 1:21 p.m. UTC | #1
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>
Simon Glass July 20, 2015, 1:25 p.m. UTC | #2
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!
diff mbox

Patch

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);