summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/arm/Kconfig15
-rw-r--r--arch/arm/Makefile7
-rw-r--r--arch/arm/boot/.gitignore3
-rw-r--r--arch/arm/boot/Makefile9
-rw-r--r--arch/arm/boot/dts/Makefile16
-rw-r--r--scripts/Makefile.lib8
-rwxr-xr-xscripts/dtcat.py37
7 files changed, 83 insertions, 12 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 99887aaa04b..9ee350a36c5 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1840,6 +1840,21 @@ config USE_OF
help
Include support for flattened device tree machine descriptions.
+config BUILD_ARM_APPENDED_DTB_IMAGE
+ bool "Build a concatenated zImage/dtb by default"
+ depends on OF
+ help
+ Enabling this option will cause a concatenated zImage and list of
+ DTBs to be built by default (instead of a standalone zImage.)
+ The image will built in arch/arm/boot/zImage-dtb
+
+config BUILD_ARM_APPENDED_DTB_IMAGE_NAMES
+ string "Default dtb names"
+ depends on BUILD_ARM_APPENDED_DTB_IMAGE
+ help
+ Space separated list of names of dtbs to append when
+ building a concatenated zImage-dtb.
+
config ATAGS
bool "Support for the traditional ATAGS boot data passing" if USE_OF
default y
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 314c7be492a..7278619f549 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -297,8 +297,11 @@ zinstall uinstall install: vmlinux
dtbs: scripts
$(Q)$(MAKE) $(build)=$(boot)/dts MACHINE=$(MACHINE) dtbs
-zImage-dtb: vmlinux scripts dtbs
- $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@
+dtb_list: dtbs
+ $(Q)$(MAKE) $(build)=$(boot)/dts MACHINE=$(MACHINE) $(boot)/dts/$@
+
+zImage-dtb: vmlinux dtb_list scripts
+ $(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@
# We use MRPROPER_FILES and CLEAN_FILES now
archclean:
diff --git a/arch/arm/boot/.gitignore b/arch/arm/boot/.gitignore
index ad7a0253ea9..765c29a1e6d 100644
--- a/arch/arm/boot/.gitignore
+++ b/arch/arm/boot/.gitignore
@@ -1,7 +1,8 @@
Image
zImage
+zImage-dtb
xipImage
bootpImage
uImage
*.dtb
-zImage-dtb \ No newline at end of file
+zImage-dtb
diff --git a/arch/arm/boot/Makefile b/arch/arm/boot/Makefile
index 65285bbbf89..b66f57dbf75 100644
--- a/arch/arm/boot/Makefile
+++ b/arch/arm/boot/Makefile
@@ -26,7 +26,8 @@ INITRD_PHYS := $(initrd_phys-y)
export ZRELADDR INITRD_PHYS PARAMS_PHYS
-targets := Image zImage xipImage bootpImage uImage
+targets := Image zImage xipImage bootpImage uImage zImage-dtb
+
DTB_NAMES := $(subst $\",,$(CONFIG_BUILD_ARM_APPENDED_DTB_IMAGE_NAMES))
ifneq ($(DTB_NAMES),)
@@ -64,9 +65,9 @@ $(obj)/zImage: $(obj)/compressed/vmlinux FORCE
$(call if_changed,objcopy)
@$(kecho) ' Kernel: $@ is ready'
-$(obj)/zImage-dtb: $(obj)/zImage $(DTB_OBJS) FORCE
- $(call if_changed,cat)
- @echo ' Kernel: $@ is ready'
+$(obj)/zImage-dtb: $(obj)/zImage $(obj)/dts/dtb_list FORCE
+ $(call if_changed,cat64)
+ @$(kecho) ' Kernel: $@ is ready'
endif
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index 5cd0d765c75..e2a70d9fb96 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -1,5 +1,13 @@
ifeq ($(CONFIG_OF),y)
+DTB_NAMES := $(subst $\",,$(CONFIG_BUILD_ARM_APPENDED_DTB_IMAGE_NAMES))
+ifneq ($(DTB_NAMES),)
+DTB_LIST := $(addsuffix .dtb,$(DTB_NAMES))
+else
+DTB_LIST := $(dtb-y)
+endif
+DTB_OBJS := $(addprefix $(obj)/,$(DTB_LIST))
+
# Keep at91 dtb files sorted alphabetically for each SoC
# rm9200
dtb-$(CONFIG_ARCH_AT91) += at91rm9200ek.dtb
@@ -222,9 +230,15 @@ targets += dtbs
targets += $(DTB_LIST)
endif
+$(obj)/dtb_list: $(DTB_OBJS) FORCE
+ $(call if_changed,cat64)
+
+#$(srctree)/scripts/dtcat.py $(obj)/../zImage $(DTB_OBJS) > $@
+
# *.dtb used to be generated in the directory above. Clean out the
# old build results so people don't accidentally use them.
-dtbs: $(addprefix $(obj)/, $(DTB_LIST))
+dtbs: $(DTB_OBJS)
$(Q)rm -f $(obj)/../*.dtb
clean-files := *.dtb
+
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
index ef2142a6159..734fb10a0b0 100644
--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
@@ -273,11 +273,11 @@ $(obj)/%.dtb: $(src)/%.dts FORCE
dtc-tmp = $(subst $(comma),_,$(dot-target).dts.tmp)
-# cat
+# cat64
# ---------------------------------------------------------------------------
-# Concatentate multiple files together
-quiet_cmd_cat = CAT $@
-cmd_cat = (cat $(filter-out FORCE,$^) > $@) || (rm -f $@; false)
+# Concatentate multiple files together aligned to 64 bit
+quiet_cmd_cat64 = CAT64 $@
+cmd_cat64 = ($(srctree)/scripts/dtcat.py $(filter-out FORCE,$^) > $@)
# Bzip2
# ---------------------------------------------------------------------------
diff --git a/scripts/dtcat.py b/scripts/dtcat.py
new file mode 100755
index 00000000000..add986245e2
--- /dev/null
+++ b/scripts/dtcat.py
@@ -0,0 +1,37 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2013 Motorola, LLC.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307, USA
+#
+# generate a 64 bit aligned concatenation of the files
+# given based on:
+# padding = (align - (offset mod align)) mod align
+import os, sys
+
+
+def padding(v):
+ align = 8
+ return (align - (v % align)) % align
+
+for f in sys.argv[1:]:
+ s = os.stat(f).st_size
+ print >> sys.stderr, f, 'size', s, 'padding', padding(s)
+ with open(f, 'rb') as fp:
+ data = fp.read()
+ sys.stdout.write(data)
+ for i in range(padding(s)):
+ sys.stdout.write(B'0')
+