aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-generic/vmlinux.lds.h
diff options
context:
space:
mode:
authorDirk Brandewie <dirk.brandewie@gmail.com>2010-12-22 14:57:26 -0500
committerGrant Likely <grant.likely@secretlab.ca>2010-12-23 16:43:00 -0500
commitaab94339cd85d726abeae78fc02351fc1910e6a4 (patch)
tree25d434a1dec4f758a9938e621dc1516f7a788521 /include/asm-generic/vmlinux.lds.h
parentcfb13c5db08c90311a5defdde9a0328ee788cca5 (diff)
of: Add support for linking device tree blobs into vmlinux
This patch adds support for linking device tree blob(s) into vmlinux. Modifies asm-generic/vmlinux.lds.h to add linking .dtb sections into vmlinux. To maintain compatiblity with the of/fdt driver code platforms MUST copy the blob to a non-init memory location before the kernel frees the .init.* sections in the image. Modifies scripts/Makefile.lib to add a kbuild command to compile DTS files to device tree blobs and a rule to create objects to wrap the blobs for linking. STRUCT_ALIGNMENT is defined in vmlinux.lds.h for use in the rule to create wrapper objects for the dtb in Makefile.lib. The STRUCT_ALIGN() macro in vmlinux.lds.h is modified to use the STRUCT_ALIGNMENT definition. The DTB's are placed on 32 byte boundries to allow parsing the blob with driver/of/fdt.c during early boot without having to copy the blob to get the structure alignment GCC expects. A DTB is linked in by adding the DTB object to the list of objects to be linked into vmlinux in the archtecture specific Makefile using obj-y += foo.dtb.o Signed-off-by: Dirk Brandewie <dirk.brandewie@gmail.com> Acked-by: Michal Marek <mmarek@suse.cz> [grant.likely@secretlab.ca: cleaned up whitespace inconsistencies] Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Diffstat (limited to 'include/asm-generic/vmlinux.lds.h')
-rw-r--r--include/asm-generic/vmlinux.lds.h13
1 files changed, 11 insertions, 2 deletions
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index bd69d79208de..05cbad03c5ab 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -67,7 +67,8 @@
67 * Align to a 32 byte boundary equal to the 67 * Align to a 32 byte boundary equal to the
68 * alignment gcc 4.5 uses for a struct 68 * alignment gcc 4.5 uses for a struct
69 */ 69 */
70#define STRUCT_ALIGN() . = ALIGN(32) 70#define STRUCT_ALIGNMENT 32
71#define STRUCT_ALIGN() . = ALIGN(STRUCT_ALIGNMENT)
71 72
72/* The actual configuration determine if the init/exit sections 73/* The actual configuration determine if the init/exit sections
73 * are handled as text/data or they can be discarded (which 74 * are handled as text/data or they can be discarded (which
@@ -146,6 +147,13 @@
146#define TRACE_SYSCALLS() 147#define TRACE_SYSCALLS()
147#endif 148#endif
148 149
150
151#define KERNEL_DTB() \
152 STRUCT_ALIGN(); \
153 VMLINUX_SYMBOL(__dtb_start) = .; \
154 *(.dtb.init.rodata) \
155 VMLINUX_SYMBOL(__dtb_end) = .;
156
149/* .data section */ 157/* .data section */
150#define DATA_DATA \ 158#define DATA_DATA \
151 *(.data) \ 159 *(.data) \
@@ -468,7 +476,8 @@
468 MCOUNT_REC() \ 476 MCOUNT_REC() \
469 DEV_DISCARD(init.rodata) \ 477 DEV_DISCARD(init.rodata) \
470 CPU_DISCARD(init.rodata) \ 478 CPU_DISCARD(init.rodata) \
471 MEM_DISCARD(init.rodata) 479 MEM_DISCARD(init.rodata) \
480 KERNEL_DTB()
472 481
473#define INIT_TEXT \ 482#define INIT_TEXT \
474 *(.init.text) \ 483 *(.init.text) \