summaryrefslogtreecommitdiffstats
path: root/meta-ti-extras/recipes/dtc/dtc/0002-DTBO-magic-and-dtbo-format-options.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-ti-extras/recipes/dtc/dtc/0002-DTBO-magic-and-dtbo-format-options.patch')
-rw-r--r--meta-ti-extras/recipes/dtc/dtc/0002-DTBO-magic-and-dtbo-format-options.patch253
1 files changed, 253 insertions, 0 deletions
diff --git a/meta-ti-extras/recipes/dtc/dtc/0002-DTBO-magic-and-dtbo-format-options.patch b/meta-ti-extras/recipes/dtc/dtc/0002-DTBO-magic-and-dtbo-format-options.patch
new file mode 100644
index 0000000..73e0a09
--- /dev/null
+++ b/meta-ti-extras/recipes/dtc/dtc/0002-DTBO-magic-and-dtbo-format-options.patch
@@ -0,0 +1,253 @@
1From d69b3ebbf86c45cbe717ee35359e15af3cf02014 Mon Sep 17 00:00:00 2001
2From: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
3Date: Thu, 5 May 2016 14:07:48 +0300
4Subject: [PATCH] DTBO magic and dtbo format options
5
6Introduce a new magic number for dynamic plugin objects,
7which is enabled by selecting dtbo/input output options.
8
9Signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
10---
11 Documentation/manual.txt | 7 +++++++
12 dtc.c | 14 +++++++++++---
13 dtc.h | 4 ++--
14 fdtdump.c | 2 +-
15 flattree.c | 11 ++++++-----
16 libfdt/fdt.c | 2 +-
17 libfdt/fdt.h | 3 ++-
18 tests/mangle-layout.c | 7 ++++---
19 8 files changed, 34 insertions(+), 16 deletions(-)
20
21diff --git a/Documentation/manual.txt b/Documentation/manual.txt
22index 398de32..f64c4f4 100644
23--- a/Documentation/manual.txt
24+++ b/Documentation/manual.txt
25@@ -60,6 +60,9 @@ The currently supported Input Formats are:
26 - "dtb": "blob" format. A flattened device-tree block with
27 header in one binary blob.
28
29+ - "dtbo" : "blob" format. Identical with "dtb" but meant
30+ for use with dynamic-device tree objects.
31+
32 - "dts": "source" format. A text file containing a "source"
33 for a device-tree.
34
35@@ -71,6 +74,8 @@ The currently supported Output Formats are:
36
37 - "dtb": "blob" format
38
39+ - "dtbo": "blob" format - for objects
40+
41 - "dts": "source" format
42
43 - "asm": assembly language file. A file that can be sourced
44@@ -78,6 +83,8 @@ The currently supported Output Formats are:
45 then simply be added to your Makefile. Additionally, the
46 assembly file exports some symbols that can be used.
47
48+ - "asmo": assembly language file for objects. Identical to "asm"
49+
50
51 3) Command Line
52
53diff --git a/dtc.c b/dtc.c
54index 5fa23c4..63c2c9c 100644
55--- a/dtc.c
56+++ b/dtc.c
57@@ -117,6 +117,8 @@ static const char *guess_type_by_name(const char *fname, const char *fallback)
58 return "dts";
59 if (!strcasecmp(s, ".dtb"))
60 return "dtb";
61+ if (!strcasecmp(s, ".dtbo"))
62+ return "dtbo";
63 return fallback;
64 }
65
66@@ -147,6 +149,8 @@ static const char *guess_input_format(const char *fname, const char *fallback)
67 magic = fdt32_to_cpu(magic);
68 if (magic == FDT_MAGIC)
69 return "dtb";
70+ if (magic == FDT_MAGIC_DTBO)
71+ return "dtbo";
72
73 return guess_type_by_name(fname, fallback);
74 }
75@@ -275,7 +279,7 @@ int main(int argc, char *argv[])
76 bi = dt_from_source(arg);
77 else if (streq(inform, "fs"))
78 bi = dt_from_fs(arg);
79- else if(streq(inform, "dtb"))
80+ else if(streq(inform, "dtb") || streq(inform, "dtbo"))
81 bi = dt_from_blob(arg);
82 else
83 die("Unknown input format \"%s\"\n", inform);
84@@ -306,9 +310,13 @@ int main(int argc, char *argv[])
85 if (streq(outform, "dts")) {
86 dt_to_source(outf, bi);
87 } else if (streq(outform, "dtb")) {
88- dt_to_blob(outf, bi, outversion);
89+ dt_to_blob(outf, bi, FDT_MAGIC, outversion);
90+ } else if (streq(outform, "dtbo")) {
91+ dt_to_blob(outf, bi, FDT_MAGIC_DTBO, outversion);
92 } else if (streq(outform, "asm")) {
93- dt_to_asm(outf, bi, outversion);
94+ dt_to_asm(outf, bi, FDT_MAGIC, outversion);
95+ } else if (streq(outform, "asmo")) {
96+ dt_to_asm(outf, bi, FDT_MAGIC_DTBO, outversion);
97 } else if (streq(outform, "null")) {
98 /* do nothing */
99 } else {
100diff --git a/dtc.h b/dtc.h
101index 56212c8..9d7f2d6 100644
102--- a/dtc.h
103+++ b/dtc.h
104@@ -252,8 +252,8 @@ void process_checks(bool force, struct boot_info *bi);
105
106 /* Flattened trees */
107
108-void dt_to_blob(FILE *f, struct boot_info *bi, int version);
109-void dt_to_asm(FILE *f, struct boot_info *bi, int version);
110+void dt_to_blob(FILE *f, struct boot_info *bi, fdt32_t magic, int version);
111+void dt_to_asm(FILE *f, struct boot_info *bi, fdt32_t magic, int version);
112
113 struct boot_info *dt_from_blob(const char *fname);
114
115diff --git a/fdtdump.c b/fdtdump.c
116index 9183555..11c2b8d 100644
117--- a/fdtdump.c
118+++ b/fdtdump.c
119@@ -306,7 +306,7 @@ int main(int argc, char *argv[])
120 p = memchr(p, smagic[0], endp - p - 4);
121 if (!p)
122 break;
123- if (fdt_magic(p) == FDT_MAGIC) {
124+ if (fdt_magic(p) == FDT_MAGIC || fdt_magic(p) == FDT_MAGIC_DTBO) {
125 /* try and validate the main struct */
126 off_t this_len = endp - p;
127 fdt32_t max_version = 17;
128diff --git a/flattree.c b/flattree.c
129index ec14954..64ed375 100644
130--- a/flattree.c
131+++ b/flattree.c
132@@ -335,6 +335,7 @@ static struct data flatten_reserve_list(struct reserve_info *reservelist,
133 }
134
135 static void make_fdt_header(struct fdt_header *fdt,
136+ fdt32_t magic,
137 struct version_info *vi,
138 int reservesize, int dtsize, int strsize,
139 int boot_cpuid_phys)
140@@ -345,7 +346,7 @@ static void make_fdt_header(struct fdt_header *fdt,
141
142 memset(fdt, 0xff, sizeof(*fdt));
143
144- fdt->magic = cpu_to_fdt32(FDT_MAGIC);
145+ fdt->magic = cpu_to_fdt32(magic);
146 fdt->version = cpu_to_fdt32(vi->version);
147 fdt->last_comp_version = cpu_to_fdt32(vi->last_comp_version);
148
149@@ -366,7 +367,7 @@ static void make_fdt_header(struct fdt_header *fdt,
150 fdt->size_dt_struct = cpu_to_fdt32(dtsize);
151 }
152
153-void dt_to_blob(FILE *f, struct boot_info *bi, int version)
154+void dt_to_blob(FILE *f, struct boot_info *bi, fdt32_t magic, int version)
155 {
156 struct version_info *vi = NULL;
157 int i;
158@@ -390,7 +391,7 @@ void dt_to_blob(FILE *f, struct boot_info *bi, int version)
159 reservebuf = flatten_reserve_list(bi->reservelist, vi);
160
161 /* Make header */
162- make_fdt_header(&fdt, vi, reservebuf.len, dtbuf.len, strbuf.len,
163+ make_fdt_header(&fdt, magic, vi, reservebuf.len, dtbuf.len, strbuf.len,
164 bi->boot_cpuid_phys);
165
166 /*
167@@ -460,7 +461,7 @@ static void dump_stringtable_asm(FILE *f, struct data strbuf)
168 }
169 }
170
171-void dt_to_asm(FILE *f, struct boot_info *bi, int version)
172+void dt_to_asm(FILE *f, struct boot_info *bi, fdt32_t magic, int version)
173 {
174 struct version_info *vi = NULL;
175 int i;
176@@ -832,7 +833,7 @@ struct boot_info *dt_from_blob(const char *fname)
177 }
178
179 magic = fdt32_to_cpu(magic);
180- if (magic != FDT_MAGIC)
181+ if (magic != FDT_MAGIC && magic != FDT_MAGIC_DTBO)
182 die("Blob has incorrect magic number\n");
183
184 rc = fread(&totalsize, sizeof(totalsize), 1, f);
185diff --git a/libfdt/fdt.c b/libfdt/fdt.c
186index 22286a1..28d422c 100644
187--- a/libfdt/fdt.c
188+++ b/libfdt/fdt.c
189@@ -57,7 +57,7 @@
190
191 int fdt_check_header(const void *fdt)
192 {
193- if (fdt_magic(fdt) == FDT_MAGIC) {
194+ if (fdt_magic(fdt) == FDT_MAGIC || fdt_magic(fdt) == FDT_MAGIC_DTBO) {
195 /* Complete tree */
196 if (fdt_version(fdt) < FDT_FIRST_SUPPORTED_VERSION)
197 return -FDT_ERR_BADVERSION;
198diff --git a/libfdt/fdt.h b/libfdt/fdt.h
199index 526aedb..493cd55 100644
200--- a/libfdt/fdt.h
201+++ b/libfdt/fdt.h
202@@ -55,7 +55,7 @@
203 #ifndef __ASSEMBLY__
204
205 struct fdt_header {
206- fdt32_t magic; /* magic word FDT_MAGIC */
207+ fdt32_t magic; /* magic word FDT_MAGIC[|_DTBO] */
208 fdt32_t totalsize; /* total size of DT block */
209 fdt32_t off_dt_struct; /* offset to structure */
210 fdt32_t off_dt_strings; /* offset to strings */
211@@ -93,6 +93,7 @@ struct fdt_property {
212 #endif /* !__ASSEMBLY */
213
214 #define FDT_MAGIC 0xd00dfeed /* 4: version, 4: total size */
215+#define FDT_MAGIC_DTBO 0xd00dfdb0 /* DTBO magic */
216 #define FDT_TAGSIZE sizeof(fdt32_t)
217
218 #define FDT_BEGIN_NODE 0x1 /* Start node: full name */
219diff --git a/tests/mangle-layout.c b/tests/mangle-layout.c
220index a76e51e..d29ebc6 100644
221--- a/tests/mangle-layout.c
222+++ b/tests/mangle-layout.c
223@@ -42,7 +42,8 @@ static void expand_buf(struct bufstate *buf, int newsize)
224 buf->size = newsize;
225 }
226
227-static void new_header(struct bufstate *buf, int version, const void *fdt)
228+static void new_header(struct bufstate *buf, fdt32_t magic, int version,
229+ const void *fdt)
230 {
231 int hdrsize;
232
233@@ -56,7 +57,7 @@ static void new_header(struct bufstate *buf, int version, const void *fdt)
234 expand_buf(buf, hdrsize);
235 memset(buf->buf, 0, hdrsize);
236
237- fdt_set_magic(buf->buf, FDT_MAGIC);
238+ fdt_set_magic(buf->buf, magic);
239 fdt_set_version(buf->buf, version);
240 fdt_set_last_comp_version(buf->buf, 16);
241 fdt_set_boot_cpuid_phys(buf->buf, fdt_boot_cpuid_phys(fdt));
242@@ -145,7 +146,7 @@ int main(int argc, char *argv[])
243 if (fdt_version(fdt) < 17)
244 CONFIG("Input tree must be v17");
245
246- new_header(&buf, version, fdt);
247+ new_header(&buf, FDT_MAGIC, version, fdt);
248
249 while (*blockorder) {
250 add_block(&buf, version, *blockorder, fdt);
251--
2521.9.1
253