[U-Boot] [PATCH 2/2 v2] 8xx, kup4: add FDT support

Heiko Schocher hs at denx.de
Mon Jul 19 14:13:53 CEST 2010


Signed-off-by: Heiko Schocher <hs at denx.de>

---
- changes since v1
  - rebased against current mainline
  - fix printf output

 board/kup/kup4k/kup4k.c |   58 +++++++++++++++++++++++++++++++++++++++++++++++
 include/configs/KUP4K.h |    4 +++
 2 files changed, 62 insertions(+), 0 deletions(-)

diff --git a/board/kup/kup4k/kup4k.c b/board/kup/kup4k/kup4k.c
index 7eb36ab..637fe3d 100644
--- a/board/kup/kup4k/kup4k.c
+++ b/board/kup/kup4k/kup4k.c
@@ -24,6 +24,7 @@

 #include <common.h>
 #include <command.h>
+#include <libfdt.h>
 #include <mpc8xx.h>
 #include <hwconfig.h>
 #include <i2c.h>
@@ -291,3 +292,60 @@ static unsigned char swapbyte(unsigned char c)
 	}
 	return result;
 }
+
+/*
+ * Device Tree Support
+ */
+#if defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT)
+int fdt_set_node_and_value(void *blob,
+				char *nodename,
+				char *regname,
+				void *var,
+				int size)
+{
+	int ret = 0;
+	int nodeoffset = 0;
+
+	nodeoffset = fdt_path_offset(blob, nodename);
+	if (nodeoffset >= 0) {
+		ret = fdt_setprop(blob, nodeoffset, regname, var,
+					size);
+		if (ret < 0) {
+			printf("%s: cannot set %s/%s property; err: %s\n",
+			__func__, nodename, regname, fdt_strerror(ret));
+		}
+	} else {
+		printf("%s: cannot find %s node err:%s\n", __func__,
+			nodename, fdt_strerror(nodeoffset));
+	}
+	return ret;
+}
+
+/*
+ * update "brg" property in the blob
+ */
+void ft_blob_update(void *blob, bd_t *bd)
+{
+	uchar enetaddr[6];
+	ulong brg_data = 0;
+
+	/* BRG */
+	brg_data = cpu_to_be32(bd->bi_busfreq);
+	fdt_set_node_and_value(blob,
+				"/soc/cpm", "brg-frequency",
+				&brg_data, sizeof(brg_data));
+
+	/* MAC addr */
+	if (eth_getenv_enetaddr("ethaddr", enetaddr)) {
+		fdt_set_node_and_value(blob,
+					"ethernet0", "local-mac-address",
+					enetaddr, sizeof(u8) * 6);
+	}
+}
+
+void ft_board_setup(void *blob, bd_t *bd)
+{
+	ft_cpu_setup(blob, bd);
+	ft_blob_update(blob, bd);
+}
+#endif /* defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT) */
diff --git a/include/configs/KUP4K.h b/include/configs/KUP4K.h
index ab708ae..14d412d 100644
--- a/include/configs/KUP4K.h
+++ b/include/configs/KUP4K.h
@@ -510,5 +510,9 @@
 #define CONFIG_SYS_DEVICE_NULLDEV	1       /* enble null device            */
 #define CONFIG_VERSION_VARIABLE		1

+/* pass open firmware flat tree */
+#define CONFIG_OF_LIBFDT	1
+#define CONFIG_OF_BOARD_SETUP	1
+
 #endif	/* __CONFIG_H */

-- 
1.6.2.5

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany


More information about the U-Boot mailing list