The introduction of device tree in ARM Linux kernel tree requires the
definition of a new class of machines. Board init files should be split
in DT and non-DT (static) and the Kernel build system and config files
should be updated accordingly. To allow u-boot to recognize and boot
images with a device tree embedded stub, a new image is required
(dtbuImage), which is a u-boot compressed image with an assembly stub
containing the compiled flattened device tree.

This patch modifies the kernel build and config system to take into
account the Versatile Express device tree machine port and adds a new
image file suitable for booting a DT kernel with u-boot.
An appropriate machine config is added encompassing all config
parameters needed to compile in C units for DT booting on Versatile
Express.

Signed-off-by: Lorenzo Pieralisi <[email protected]>
---
 arch/arm/Kconfig                |    4 ++--
 arch/arm/Makefile               |    2 +-
 arch/arm/boot/Makefile          |   10 +++++++++-
 arch/arm/mach-vexpress/Kconfig  |    7 +++++++
 arch/arm/mach-vexpress/Makefile |    5 +++--
 arch/arm/mm/Kconfig             |    2 +-
 6 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 4ebecee..a63f7c2 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1104,10 +1104,10 @@ config SMP
        bool "Symmetric Multi-Processing (EXPERIMENTAL)"
        depends on EXPERIMENTAL && (REALVIEW_EB_ARM11MP || REALVIEW_EB_A9MP ||\
                 MACH_REALVIEW_PB11MP || MACH_REALVIEW_PBX || ARCH_OMAP4 ||\
-                ARCH_U8500 || ARCH_VEXPRESS_CA9X4)
+                ARCH_U8500 || ARCH_VEXPRESS_CA9X4 || ARCH_VEXPRESS_CA9X4_DT)
        depends on GENERIC_CLOCKEVENTS
        select USE_GENERIC_SMP_HELPERS
-       select HAVE_ARM_SCU if (ARCH_REALVIEW || ARCH_OMAP4 || ARCH_U8500 || 
ARCH_VEXPRESS_CA9X4)
+       select HAVE_ARM_SCU if (ARCH_REALVIEW || ARCH_OMAP4 || ARCH_U8500 || 
ARCH_VEXPRESS_CA9X4 || ARCH_VEXPRESS_CA9X4_DT)
        help
          This enables support for systems with more than one CPU. If you have
          a system with only one CPU, like most personal computers, say N. If
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index dab066a..3ce1751 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -264,7 +264,7 @@ archprepare:
 # Convert bzImage to zImage
 bzImage: zImage
 
-zImage Image xipImage bootpImage uImage dtbImage: vmlinux
+zImage Image xipImage bootpImage uImage dtbImage dtbuImage: vmlinux
        $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@
 
 zinstall install: vmlinux
diff --git a/arch/arm/boot/Makefile b/arch/arm/boot/Makefile
index c608c98..63200f1 100644
--- a/arch/arm/boot/Makefile
+++ b/arch/arm/boot/Makefile
@@ -27,7 +27,7 @@ INITRD_PHYS := $(initrd_phys-y)
 
 export ZRELADDR INITRD_PHYS PARAMS_PHYS
 
-targets := Image zImage xipImage bootpImage uImage dtbImage
+targets := Image zImage xipImage bootpImage uImage dtbuImage
 
 ifeq ($(CONFIG_XIP_KERNEL),y)
 
@@ -66,14 +66,18 @@ quiet_cmd_uimage = UIMAGE  $@
 
 ifeq ($(CONFIG_ZBOOT_ROM),y)
 $(obj)/uImage: LOADADDR=$(CONFIG_ZBOOT_ROM_TEXT)
+$(obj)/dtbuImage: LOADADDR=$(CONFIG_ZBOOT_ROM_TEXT)
 else
 $(obj)/uImage: LOADADDR=$(ZRELADDR)
+$(obj)/dtbuImage: LOADADDR=$(ZRELADDR)
 endif
 
 ifeq ($(CONFIG_THUMB2_KERNEL),y)
 # Set bit 0 to 1 so that "mov pc, rx" switches to Thumb-2 mode
 $(obj)/uImage: STARTADDR=$(shell echo $(LOADADDR) | sed -e "s/.$$/1/")
+$(obj)/dtbuImage: STARTADDR=$(shell echo $(LOADADDR) | sed -e "s/.$$/1/")
 else
+$(obj)/dtbuImage: STARTADDR=$(LOADADDR)
 $(obj)/uImage: STARTADDR=$(LOADADDR)
 endif
 
@@ -81,6 +85,10 @@ $(obj)/uImage:       $(obj)/zImage FORCE
        $(call if_changed,uimage)
        @echo '  Image $@ is ready'
 
+$(obj)/dtbuImage:      $(obj)/dtbImage FORCE
+       $(call if_changed,uimage)
+       @echo '  Image $@ is ready'
+
 $(obj)/bootp/bootp: $(obj)/zImage initrd FORCE
        $(Q)$(MAKE) $(build)=$(obj)/bootp $@
        @:
diff --git a/arch/arm/mach-vexpress/Kconfig b/arch/arm/mach-vexpress/Kconfig
index 3f19b66..1d35a11 100644
--- a/arch/arm/mach-vexpress/Kconfig
+++ b/arch/arm/mach-vexpress/Kconfig
@@ -6,4 +6,11 @@ config ARCH_VEXPRESS_CA9X4
        select CPU_V7
        select ARM_GIC
 
+config ARCH_VEXPRESS_CA9X4_DT
+       bool "Versatile Express Cortex-A9x4 tile - DT enabled"
+       select CPU_V7
+       select ARM_GIC
+       select OF
+       select OF_FLATTREE
+
 endmenu
diff --git a/arch/arm/mach-vexpress/Makefile b/arch/arm/mach-vexpress/Makefile
index 1b71b77..c6bc159 100644
--- a/arch/arm/mach-vexpress/Makefile
+++ b/arch/arm/mach-vexpress/Makefile
@@ -2,7 +2,8 @@
 # Makefile for the linux kernel.
 #
 
-obj-y                                  := v2m.o
-obj-$(CONFIG_ARCH_VEXPRESS_CA9X4)      += ct-ca9x4.o
+obj-y                                  := v2m-base.o ct-ca9x4-base.o
+obj-$(CONFIG_ARCH_VEXPRESS_CA9X4)      += ct-ca9x4.o v2m.o
+obj-$(CONFIG_ARCH_VEXPRESS_CA9X4_DT)   += ct-ca9x4-of.o v2m-of.o
 obj-$(CONFIG_SMP)                      += platsmp.o headsmp.o
 obj-$(CONFIG_LOCAL_TIMERS)             += localtimer.o
diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig
index 101105e..97bc19e 100644
--- a/arch/arm/mm/Kconfig
+++ b/arch/arm/mm/Kconfig
@@ -782,7 +782,7 @@ config CACHE_L2X0
        bool "Enable the L2x0 outer cache controller"
        depends on REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP || 
MACH_REALVIEW_PB1176 || \
                   REALVIEW_EB_A9MP || ARCH_MX35 || ARCH_MX31 || 
MACH_REALVIEW_PBX || \
-                  ARCH_NOMADIK || ARCH_OMAP4 || ARCH_U8500 || 
ARCH_VEXPRESS_CA9X4
+                  ARCH_NOMADIK || ARCH_OMAP4 || ARCH_U8500 || 
ARCH_VEXPRESS_CA9X4 || ARCH_VEXPRESS_CA9X4_DT
        default y
        select OUTER_CACHE
        select OUTER_CACHE_SYNC
-- 
1.6.3.3

_______________________________________________
devicetree-discuss mailing list
[email protected]
https://lists.ozlabs.org/listinfo/devicetree-discuss

Reply via email to