diff mbox

[U-Boot,v5,3/4] lib, fdt: move fdtdec_get_int() out of lib/fdtdec.c

Message ID 1401269616-10303-4-git-send-email-hs@denx.de
State Changes Requested
Delegated to: Tom Rini
Headers show

Commit Message

Heiko Schocher May 28, 2014, 9:33 a.m. UTC
move fdtdec_get_int() out of lib/fdtdec.c into lib/fdtdec_common.c
as this function is also used, if CONFIG_OF_CONTROL is not
used. Poped up on the ids8313 board using signed FIT images,
and activating CONFIG_SYS_GENERIC_BOARD. Without this patch
it shows on boot:

No valid FDT found - please append one to U-Boot binary, use u-boot-dtb.bin or define CONFIG_OF_EMBED. For sandbox, use -d <file.dtb>

With this patch, it boots again with CONFIG_SYS_GENERIC_BOARD
enabled.

Signed-off-by: Heiko Schocher <hs@denx.de>
Acked-by: Simon Glass <sjg@chromium.org>
Cc: Tom Rini <trini@ti.com>

---
- changes for v2:
  - remove fdtdec_get_int() in lib/fdtdec.c
  - only one fdtdec_get_int() implementation
     Tested on the ids8313 board (on host and target side)
- changes for v3:
  use fdt_getprop() instead fdt_getprop_w() so we avoid a cast
  as Simon suggested.
- changes for v4:
  none
- changes for v5:
  - keep debug for non host side as Simon Glass suggested.
  - add Acked-by from Simon Glass
---
 lib/Makefile        |  1 +
 lib/fdtdec.c        | 36 ------------------------------------
 lib/fdtdec_common.c | 38 ++++++++++++++++++++++++++++++++++++++
 tools/fdtdec.c      |  1 +
 4 files changed, 40 insertions(+), 36 deletions(-)
 create mode 100644 lib/fdtdec_common.c

Comments

Simon Glass May 30, 2014, 11:55 p.m. UTC | #1
Hi Heiko,

On 28 May 2014 03:33, Heiko Schocher <hs@denx.de> wrote:
> move fdtdec_get_int() out of lib/fdtdec.c into lib/fdtdec_common.c
> as this function is also used, if CONFIG_OF_CONTROL is not
> used. Poped up on the ids8313 board using signed FIT images,
> and activating CONFIG_SYS_GENERIC_BOARD. Without this patch
> it shows on boot:
>
> No valid FDT found - please append one to U-Boot binary, use u-boot-dtb.bin or define CONFIG_OF_EMBED. For sandbox, use -d <file.dtb>
>
> With this patch, it boots again with CONFIG_SYS_GENERIC_BOARD
> enabled.
>
> Signed-off-by: Heiko Schocher <hs@denx.de>
> Acked-by: Simon Glass <sjg@chromium.org>
> Cc: Tom Rini <trini@ti.com>

FYI I just noticed some apparent failures for this:

$ ./tools/buildman/buildman -b try-heiko3 -s
...
04: lib, fdt: move fdtdec_get_int() out of lib/fdtdec.c
     sparc: +   grsim grsim_leon2 gr_cpci_ax2000 gr_xc3s_1500 gr_ep2s60
        sh: +   ms7750se ap_sh4a_4a sh7753evb sh7763rdp r0p7734
r2dplus ms7720se shmin sh7752evb espt ap325rxa mpr2 ms7722se r7780mp
ecovec sh7785lcr sh7757lcr MigoR sh7785lcr_32bit
  blackfin: +   cm-bf561 blackstamp bf537-minotaur br4 cm-bf527
bf506f-ezkit ip04 bf527-sdp pr1 bf527-ezkit-v2 tcm-bf518 bf537-pnav
bf537-srv1 cm-bf548 bf548-ezkit bf525-ucr2 blackvme bf527-ezkit
bf518f-ezbrd bf527-ad7160-eval bf526-ezbrd
     nds32: +   adp-ag101p adp-ag102 adp-ag101

For example:

$ ./tools/buildman/buildman -b try-heiko3 -se grsim
...
04: lib, fdt: move fdtdec_get_int() out of lib/fdtdec.c
     sparc: +   grsim grsim_leon2
+lib/built-in.o: In function `fdtdec_get_int':
+/usr/local/google/c/cosarm/src/third_party/u-boot/try-heiko3/.bm-work/14/lib/fdtdec_common.c:29:
undefined reference to `fdt_getprop'
+make[1]: *** [u-boot] Error 1
+make: *** [sub-make] Error 2
+/usr/local/google/c/cosarm/src/third_party/u-boot/try-heiko3/.bm-work/19/lib/fdtdec_common.c:29:
undefined reference to `fdt_getprop'

Regards,
Simon
Tom Rini June 5, 2014, 7:15 p.m. UTC | #2
On Wed, May 28, 2014 at 11:33:35AM +0200, Heiko Schocher wrote:

> move fdtdec_get_int() out of lib/fdtdec.c into lib/fdtdec_common.c
> as this function is also used, if CONFIG_OF_CONTROL is not
> used. Poped up on the ids8313 board using signed FIT images,
> and activating CONFIG_SYS_GENERIC_BOARD. Without this patch
> it shows on boot:
> 
> No valid FDT found - please append one to U-Boot binary, use u-boot-dtb.bin or define CONFIG_OF_EMBED. For sandbox, use -d <file.dtb>
> 
> With this patch, it boots again with CONFIG_SYS_GENERIC_BOARD
> enabled.
> 
> Signed-off-by: Heiko Schocher <hs@denx.de>
> Acked-by: Simon Glass <sjg@chromium.org>
> Cc: Tom Rini <trini@ti.com>

The problem is that on architectures with old compilers (sparc,
blackfin, nds32) this doesn't get discarded due to not being used but
instead causes link errors.  Can you figure out which option
(CONFIG_FIT_SIGNATURE I suspect) drives this need and make sure we
include fdtdec_common.o then?  Thanks!
Heiko Schocher June 10, 2014, 7:35 a.m. UTC | #3
Hello Tom,

Am 05.06.2014 21:15, schrieb Tom Rini:
> On Wed, May 28, 2014 at 11:33:35AM +0200, Heiko Schocher wrote:
>
>> move fdtdec_get_int() out of lib/fdtdec.c into lib/fdtdec_common.c
>> as this function is also used, if CONFIG_OF_CONTROL is not
>> used. Poped up on the ids8313 board using signed FIT images,
>> and activating CONFIG_SYS_GENERIC_BOARD. Without this patch
>> it shows on boot:
>>
>> No valid FDT found - please append one to U-Boot binary, use u-boot-dtb.bin or define CONFIG_OF_EMBED. For sandbox, use -d<file.dtb>
>>
>> With this patch, it boots again with CONFIG_SYS_GENERIC_BOARD
>> enabled.
>>
>> Signed-off-by: Heiko Schocher<hs@denx.de>
>> Acked-by: Simon Glass<sjg@chromium.org>
>> Cc: Tom Rini<trini@ti.com>
>
> The problem is that on architectures with old compilers (sparc,
> blackfin, nds32) this doesn't get discarded due to not being used but
> instead causes link errors.  Can you figure out which option
> (CONFIG_FIT_SIGNATURE I suspect) drives this need and make sure we
> include fdtdec_common.o then?  Thanks!

I look into it ... but I think it is not only one config option,
as this code is not FIT specific and used also for code which
uses DT ... (maybe CONFIG_OF_CONTROL or CONFIG_FIT_SIGNATURE).

bye,
Heiko
Tom Rini June 11, 2014, 3:49 p.m. UTC | #4
On Tue, Jun 10, 2014 at 09:35:51AM +0200, Heiko Schocher wrote:
> Hello Tom,
> 
> Am 05.06.2014 21:15, schrieb Tom Rini:
> >On Wed, May 28, 2014 at 11:33:35AM +0200, Heiko Schocher wrote:
> >
> >>move fdtdec_get_int() out of lib/fdtdec.c into lib/fdtdec_common.c
> >>as this function is also used, if CONFIG_OF_CONTROL is not
> >>used. Poped up on the ids8313 board using signed FIT images,
> >>and activating CONFIG_SYS_GENERIC_BOARD. Without this patch
> >>it shows on boot:
> >>
> >>No valid FDT found - please append one to U-Boot binary, use u-boot-dtb.bin or define CONFIG_OF_EMBED. For sandbox, use -d<file.dtb>
> >>
> >>With this patch, it boots again with CONFIG_SYS_GENERIC_BOARD
> >>enabled.
> >>
> >>Signed-off-by: Heiko Schocher<hs@denx.de>
> >>Acked-by: Simon Glass<sjg@chromium.org>
> >>Cc: Tom Rini<trini@ti.com>
> >
> >The problem is that on architectures with old compilers (sparc,
> >blackfin, nds32) this doesn't get discarded due to not being used but
> >instead causes link errors.  Can you figure out which option
> >(CONFIG_FIT_SIGNATURE I suspect) drives this need and make sure we
> >include fdtdec_common.o then?  Thanks!
> 
> I look into it ... but I think it is not only one config option,
> as this code is not FIT specific and used also for code which
> uses DT ... (maybe CONFIG_OF_CONTROL or CONFIG_FIT_SIGNATURE).

That's fine, we can have multiple obj-$(CONFIG_...) += fdtdec_common.o
(or rename it to fdtdec_get_int.o?).

But.. how is this only a runtime not link time failure?
diff mbox

Patch

diff --git a/lib/Makefile b/lib/Makefile
index 377ab13..fbe7d93 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -23,6 +23,7 @@  obj-$(CONFIG_USB_TTY) += circbuf.o
 obj-y += crc7.o
 obj-y += crc8.o
 obj-y += crc16.o
+obj-y += fdtdec_common.o
 obj-$(CONFIG_OF_CONTROL) += fdtdec.o
 obj-$(CONFIG_TEST_FDTDEC) += fdtdec_test.o
 obj-$(CONFIG_GZIP) += gunzip.o
diff --git a/lib/fdtdec.c b/lib/fdtdec.c
index 8ecb80f..21d5e85 100644
--- a/lib/fdtdec.c
+++ b/lib/fdtdec.c
@@ -109,24 +109,6 @@  fdt_addr_t fdtdec_get_addr(const void *blob, int node,
 	return fdtdec_get_addr_size(blob, node, prop_name, NULL);
 }
 
-s32 fdtdec_get_int(const void *blob, int node, const char *prop_name,
-		s32 default_val)
-{
-	const s32 *cell;
-	int len;
-
-	debug("%s: %s: ", __func__, prop_name);
-	cell = fdt_getprop(blob, node, prop_name, &len);
-	if (cell && len >= sizeof(s32)) {
-		s32 val = fdt32_to_cpu(cell[0]);
-
-		debug("%#x (%d)\n", val, val);
-		return val;
-	}
-	debug("(not found)\n");
-	return default_val;
-}
-
 uint64_t fdtdec_get_uint64(const void *blob, int node, const char *prop_name,
 		uint64_t default_val)
 {
@@ -646,22 +628,4 @@  int fdtdec_read_fmap_entry(const void *blob, int node, const char *name,
 
 	return 0;
 }
-#else
-#include "libfdt.h"
-#include "fdt_support.h"
-
-int fdtdec_get_int(const void *blob, int node, const char *prop_name,
-		int default_val)
-{
-	const int *cell;
-	int len;
-
-	cell = fdt_getprop_w((void *)blob, node, prop_name, &len);
-	if (cell && len >= sizeof(int)) {
-		int val = fdt32_to_cpu(cell[0]);
-
-		return val;
-	}
-	return default_val;
-}
 #endif
diff --git a/lib/fdtdec_common.c b/lib/fdtdec_common.c
new file mode 100644
index 0000000..757931a
--- /dev/null
+++ b/lib/fdtdec_common.c
@@ -0,0 +1,38 @@ 
+/*
+ * Copyright (c) 2014
+ * Heiko Schocher, DENX Software Engineering, hs@denx.de.
+ *
+ * Based on lib/fdtdec.c:
+ * Copyright (c) 2011 The Chromium OS Authors.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#ifndef USE_HOSTCC
+#include <common.h>
+#include <libfdt.h>
+#include <fdtdec.h>
+#else
+#include "libfdt.h"
+#include "fdt_support.h"
+
+#define debug(...)
+#endif
+
+int fdtdec_get_int(const void *blob, int node, const char *prop_name,
+		int default_val)
+{
+	const int *cell;
+	int len;
+
+	debug("%s: %s: ", __func__, prop_name);
+	cell = fdt_getprop(blob, node, prop_name, &len);
+	if (cell && len >= sizeof(int)) {
+		int val = fdt32_to_cpu(cell[0]);
+
+		debug("%#x (%d)\n", val, val);
+		return val;
+	}
+	debug("(not found)\n");
+	return default_val;
+}
diff --git a/tools/fdtdec.c b/tools/fdtdec.c
index f1c2256..9987f83 100644
--- a/tools/fdtdec.c
+++ b/tools/fdtdec.c
@@ -1 +1,2 @@ 
+#include "../lib/fdtdec_common.c"
 #include "../lib/fdtdec.c"