mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Sascha Hauer <s.hauer@pengutronix.de>
To: Barebox List <barebox@lists.infradead.org>
Subject: [PATCH 4/8] Compile libfdt for barebox
Date: Mon, 19 Aug 2019 15:38:43 +0200	[thread overview]
Message-ID: <20190819133847.17015-5-s.hauer@pengutronix.de> (raw)
In-Reply-To: <20190819133847.17015-1-s.hauer@pengutronix.de>

libfdt can be useful for very early device tree parsing, so compile it
for barobox aswell. This is done the same way as done in the Kernel:
we put C files with the same name as in libfdt into lib/ and just
include the libfdt files from there.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 include/fdt.h              | 69 +-------------------------------------
 include/linux/libfdt.h     |  8 +++++
 include/linux/libfdt_env.h | 19 +++++++++++
 lib/Kconfig                |  3 ++
 lib/Makefile               | 10 ++++++
 lib/fdt.c                  |  2 ++
 lib/fdt_empty_tree.c       |  2 ++
 lib/fdt_ro.c               |  2 ++
 lib/fdt_rw.c               |  2 ++
 lib/fdt_strerror.c         |  2 ++
 lib/fdt_sw.c               |  2 ++
 lib/fdt_wip.c              |  2 ++
 12 files changed, 55 insertions(+), 68 deletions(-)
 create mode 100644 include/linux/libfdt.h
 create mode 100644 include/linux/libfdt_env.h
 create mode 100644 lib/fdt.c
 create mode 100644 lib/fdt_empty_tree.c
 create mode 100644 lib/fdt_ro.c
 create mode 100644 lib/fdt_rw.c
 create mode 100644 lib/fdt_strerror.c
 create mode 100644 lib/fdt_sw.c
 create mode 100644 lib/fdt_wip.c

diff --git a/include/fdt.h b/include/fdt.h
index 1ccd4c6734..38a2d27b02 100644
--- a/include/fdt.h
+++ b/include/fdt.h
@@ -3,73 +3,6 @@
 
 #include <linux/types.h>
 
-#ifndef __ASSEMBLY__
-
-#define _B(n)	((unsigned long long)((uint8_t *)&x)[n])
-
-#define fdt32_to_cpu(x)	be32_to_cpu(x)
-#define cpu_to_fdt32(x) cpu_to_be32(x)
-
-static inline uint64_t fdt64_to_cpu(uint64_t x)
-{
-	return (_B(0) << 56) | (_B(1) << 48) | (_B(2) << 40) | (_B(3) << 32)
-		| (_B(4) << 24) | (_B(5) << 16) | (_B(6) << 8) | _B(7);
-}
-#define cpu_to_fdt64(x) fdt64_to_cpu(x)
-#undef _B
-
-struct fdt_header {
-	uint32_t magic;			 /* magic word FDT_MAGIC */
-	uint32_t totalsize;		 /* total size of DT block */
-	uint32_t off_dt_struct;		 /* offset to structure */
-	uint32_t off_dt_strings;	 /* offset to strings */
-	uint32_t off_mem_rsvmap;	 /* offset to memory reserve map */
-	uint32_t version;		 /* format version */
-	uint32_t last_comp_version;	 /* last compatible version */
-
-	/* version 2 fields below */
-	uint32_t boot_cpuid_phys;	 /* Which physical CPU id we're
-					    booting on */
-	/* version 3 fields below */
-	uint32_t size_dt_strings;	 /* size of the strings block */
-
-	/* version 17 fields below */
-	uint32_t size_dt_struct;	 /* size of the structure block */
-};
-
-struct fdt_reserve_entry {
-	uint64_t address;
-	uint64_t size;
-};
-
-struct fdt_node_header {
-	uint32_t tag;
-	char name[0];
-};
-
-struct fdt_property {
-	uint32_t tag;
-	uint32_t len;
-	uint32_t nameoff;
-	char data[0];
-};
-
-#endif /* !__ASSEMBLY */
-
-#define FDT_MAGIC	0xd00dfeed	/* 4: version, 4: total size */
-#define FDT_TAGSIZE	sizeof(uint32_t)
-
-#define FDT_BEGIN_NODE	0x1		/* Start node: full name */
-#define FDT_END_NODE	0x2		/* End node */
-#define FDT_PROP	0x3		/* Property: name off,
-					   size, content */
-#define FDT_NOP		0x4		/* nop */
-#define FDT_END		0x9
-
-#define FDT_V1_SIZE	(7*sizeof(uint32_t))
-#define FDT_V2_SIZE	(FDT_V1_SIZE + sizeof(uint32_t))
-#define FDT_V3_SIZE	(FDT_V2_SIZE + sizeof(uint32_t))
-#define FDT_V16_SIZE	FDT_V3_SIZE
-#define FDT_V17_SIZE	(FDT_V16_SIZE + sizeof(uint32_t))
+#include <linux/libfdt.h>
 
 #endif /* _FDT_H */
diff --git a/include/linux/libfdt.h b/include/linux/libfdt.h
new file mode 100644
index 0000000000..ef2467213b
--- /dev/null
+++ b/include/linux/libfdt.h
@@ -0,0 +1,8 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _INCLUDE_LIBFDT_H_
+#define _INCLUDE_LIBFDT_H_
+
+#include <linux/libfdt_env.h>
+#include "../scripts/dtc/libfdt/libfdt.h"
+
+#endif /* _INCLUDE_LIBFDT_H_ */
diff --git a/include/linux/libfdt_env.h b/include/linux/libfdt_env.h
new file mode 100644
index 0000000000..edb0f0c309
--- /dev/null
+++ b/include/linux/libfdt_env.h
@@ -0,0 +1,19 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef LIBFDT_ENV_H
+#define LIBFDT_ENV_H
+
+#include <linux/kernel.h>	/* For INT_MAX */
+#include <linux/string.h>
+
+#include <asm/byteorder.h>
+
+typedef __be16 fdt16_t;
+typedef __be32 fdt32_t;
+typedef __be64 fdt64_t;
+
+#define fdt32_to_cpu(x) be32_to_cpu(x)
+#define cpu_to_fdt32(x) cpu_to_be32(x)
+#define fdt64_to_cpu(x) be64_to_cpu(x)
+#define cpu_to_fdt64(x) cpu_to_be64(x)
+
+#endif /* LIBFDT_ENV_H */
diff --git a/lib/Kconfig b/lib/Kconfig
index af178217f8..f75eba9220 100644
--- a/lib/Kconfig
+++ b/lib/Kconfig
@@ -100,6 +100,9 @@ config FSL_QE_FIRMWARE
 	select CRC32
 	bool
 
+config LIBFDT
+	bool
+
 config RATP
 	select CRC_ITU_T
 	bool "RATP protocol support"
diff --git a/lib/Makefile b/lib/Makefile
index 161d3a756e..a07ceb15ab 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -79,3 +79,13 @@ obj-$(CONFIG_GENERIC_LIB_LSHRDI3) += lshrdi3.o
 obj-$(CONFIG_GENERIC_LIB_MULDI3)  += muldi3.o
 
 pbl-$(CONFIG_GENERIC_LIB_ASHLDI3) += ashldi3.o
+
+libfdt_files = fdt.o fdt_ro.o fdt_wip.o fdt_rw.o fdt_sw.o fdt_strerror.o \
+	                      fdt_empty_tree.o
+$(foreach file, $(libfdt_files), \
+	        $(eval CFLAGS_$(file) = -I $(srctree)/scripts/dtc/libfdt))
+$(foreach file, $(libfdt_files), \
+		$(eval CFLAGS_pbl-$(file) = -I $(srctree)/scripts/dtc/libfdt))
+
+obj-pbl-$(CONFIG_LIBFDT) += $(libfdt_files)
+
diff --git a/lib/fdt.c b/lib/fdt.c
new file mode 100644
index 0000000000..97f20069fc
--- /dev/null
+++ b/lib/fdt.c
@@ -0,0 +1,2 @@
+#include <linux/libfdt_env.h>
+#include "../scripts/dtc/libfdt/fdt.c"
diff --git a/lib/fdt_empty_tree.c b/lib/fdt_empty_tree.c
new file mode 100644
index 0000000000..5d30c58150
--- /dev/null
+++ b/lib/fdt_empty_tree.c
@@ -0,0 +1,2 @@
+#include <linux/libfdt_env.h>
+#include "../scripts/dtc/libfdt/fdt_empty_tree.c"
diff --git a/lib/fdt_ro.c b/lib/fdt_ro.c
new file mode 100644
index 0000000000..f73c04ea7b
--- /dev/null
+++ b/lib/fdt_ro.c
@@ -0,0 +1,2 @@
+#include <linux/libfdt_env.h>
+#include "../scripts/dtc/libfdt/fdt_ro.c"
diff --git a/lib/fdt_rw.c b/lib/fdt_rw.c
new file mode 100644
index 0000000000..0c1f0f4a4b
--- /dev/null
+++ b/lib/fdt_rw.c
@@ -0,0 +1,2 @@
+#include <linux/libfdt_env.h>
+#include "../scripts/dtc/libfdt/fdt_rw.c"
diff --git a/lib/fdt_strerror.c b/lib/fdt_strerror.c
new file mode 100644
index 0000000000..8713e3ff47
--- /dev/null
+++ b/lib/fdt_strerror.c
@@ -0,0 +1,2 @@
+#include <linux/libfdt_env.h>
+#include "../scripts/dtc/libfdt/fdt_strerror.c"
diff --git a/lib/fdt_sw.c b/lib/fdt_sw.c
new file mode 100644
index 0000000000..9ac7e50c76
--- /dev/null
+++ b/lib/fdt_sw.c
@@ -0,0 +1,2 @@
+#include <linux/libfdt_env.h>
+#include "../scripts/dtc/libfdt/fdt_sw.c"
diff --git a/lib/fdt_wip.c b/lib/fdt_wip.c
new file mode 100644
index 0000000000..45b3fc3d3b
--- /dev/null
+++ b/lib/fdt_wip.c
@@ -0,0 +1,2 @@
+#include <linux/libfdt_env.h>
+#include "../scripts/dtc/libfdt/fdt_wip.c"
-- 
2.20.1


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

  parent reply	other threads:[~2019-08-19 13:39 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-19 13:38 [PATCH 0/8] Add support for a generic DT based 2nd stage ARM image Sascha Hauer
2019-08-19 13:38 ` [PATCH 1/8] dtc: Update update-dtc-source.sh from Linux Sascha Hauer
2019-08-19 13:48   ` Roland Hieber
2019-08-19 13:38 ` [PATCH 2/8] scripts/dtc: Update to upstream version v1.5.0 Sascha Hauer
2019-08-19 13:52   ` Roland Hieber
2019-08-19 13:56     ` Sascha Hauer
2019-08-19 14:09       ` Roland Hieber
2019-09-23 13:39         ` Ahmad Fatoum
2019-08-19 13:38 ` [PATCH 3/8] pbl: Implement strrchr Sascha Hauer
2019-08-19 13:38 ` Sascha Hauer [this message]
2019-08-19 13:38 ` [PATCH 5/8] common: return "none" when board unset Sascha Hauer
2019-08-19 13:38 ` [PATCH 6/8] ARM: Add generic device tree 2nd stage support Sascha Hauer
2019-11-19  8:26   ` Ahmad Fatoum
2019-11-19  9:41     ` Oleksij Rempel
2019-11-19 10:21       ` Ahmad Fatoum
2019-11-25  7:47     ` Sascha Hauer
2019-08-19 13:38 ` [PATCH 7/8] ARM: i.MX: Do not hang() on unknown SoCs Sascha Hauer
2019-08-19 13:38 ` [PATCH 8/8] ARM: i.MX: When generic DT image is enabled do not hardcode SoC Sascha Hauer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190819133847.17015-5-s.hauer@pengutronix.de \
    --to=s.hauer@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox