From patchwork Wed Dec 22 19:57:26 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: dirk.brandewie@gmail.com X-Patchwork-Id: 428481 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id oBMJwcxQ008588 for ; Wed, 22 Dec 2010 19:58:39 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751999Ab0LVT5q (ORCPT ); Wed, 22 Dec 2010 14:57:46 -0500 Received: from mail-iy0-f174.google.com ([209.85.210.174]:51700 "EHLO mail-iy0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751707Ab0LVT5o (ORCPT ); Wed, 22 Dec 2010 14:57:44 -0500 Received: by iyi12 with SMTP id 12so4376816iyi.19 for ; Wed, 22 Dec 2010 11:57:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:from:to:cc:subject:date :message-id:x-mailer:in-reply-to:references; bh=X9wtfwyCJ6hh8CF0Aj8wOfW0e8mwKnoGgTB7kPUWjes=; b=CqTlXywbfMZ7xgE/Jf56WJ7z1UDmW4EfwD4vkjOCMvi3tGKlEph8TAsCzEQ4nsJmCG LU8d3NMK44y8HtO+kRFd+YHvYEOzBmrgNxRphK+TMmxxhen5hODkNycV9V5x+StZQtvq Ua9TGccIWrgCwBsG2XIxVgrpl8bMQa+5NHWRA= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; b=nNgQx26QxecVoEGBybLKZP9ZQX621As9P1qGn8uS3MAo8lIMxamkNzJiX9t1Q9gg3Q /rOLTvivXHjBDiK9X5Ao18jKVCRDXQi3jFmrWbjnyZTIcqgG0RYWeZIMN8FbAEI/uNkG zWThx8ZgvzCTk38tECLoipxClsLfMF8fKFwqE= Received: by 10.42.223.196 with SMTP id il4mr7462723icb.200.1293047864067; Wed, 22 Dec 2010 11:57:44 -0800 (PST) Received: from localhost.localdomain (pool-173-50-156-247.ptldor.fios.verizon.net [173.50.156.247]) by mx.google.com with ESMTPS id f7sm6021294icq.17.2010.12.22.11.57.42 (version=TLSv1/SSLv3 cipher=RC4-MD5); Wed, 22 Dec 2010 11:57:43 -0800 (PST) From: dirk.brandewie@gmail.com To: linux-kernel@vger.kernel.org Cc: devicetree-discuss@lists.ozlabs.org, linuxppc-dev@lists.ozlabs.org, microblaze-uclinux@itee.uq.edu.au, linux-arch@vger.kernel.org, mmarek@suse.cz, dirk.brandewie@gmail.com, linux-kbuild@vger.kernel.org Subject: [PATCH 1/4] of: Add support for linking device tree blobs into vmlinux Date: Wed, 22 Dec 2010 11:57:26 -0800 Message-Id: <1293047849-26078-2-git-send-email-dirk.brandewie@gmail.com> X-Mailer: git-send-email 1.7.2.3 In-Reply-To: <1293047849-26078-1-git-send-email-dirk.brandewie@gmail.com> References: <1293047849-26078-1-git-send-email-dirk.brandewie@gmail.com> Sender: linux-kbuild-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter1.kernel.org [140.211.167.41]); Wed, 22 Dec 2010 19:58:40 +0000 (UTC) diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt index 0ef00bd..86e3cd0 100644 --- a/Documentation/kbuild/makefiles.txt +++ b/Documentation/kbuild/makefiles.txt @@ -1136,6 +1136,21 @@ When kbuild executes, the following steps are followed (roughly): resulting in the target file being recompiled for no obvious reason. + dtc + Create flattend device tree blob object suitable for linking + into vmlinux. Device tree blobs linked into vmlinux are placed + in an init section in the image. Platform code *must* copy the + blob to non-init memory prior to calling unflatten_device_tree(). + + Example: + #arch/x86/platform/ce4100/Makefile + clean-files := *dtb.S + + DTC_FLAGS := -p 1024 + obj-y += foo.dtb.o + + $(obj)/%.dtb: $(src)/%.dts + $(call cmd,dtc) --- 6.7 Custom kbuild commands diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index bd69d79..05cbad0 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -67,7 +67,8 @@ * Align to a 32 byte boundary equal to the * alignment gcc 4.5 uses for a struct */ -#define STRUCT_ALIGN() . = ALIGN(32) +#define STRUCT_ALIGNMENT 32 +#define STRUCT_ALIGN() . = ALIGN(STRUCT_ALIGNMENT) /* The actual configuration determine if the init/exit sections * are handled as text/data or they can be discarded (which @@ -146,6 +147,13 @@ #define TRACE_SYSCALLS() #endif + +#define KERNEL_DTB() \ + STRUCT_ALIGN(); \ + VMLINUX_SYMBOL(__dtb_start) = .; \ + *(.dtb.init.rodata) \ + VMLINUX_SYMBOL(__dtb_end) = .; + /* .data section */ #define DATA_DATA \ *(.data) \ @@ -468,7 +476,8 @@ MCOUNT_REC() \ DEV_DISCARD(init.rodata) \ CPU_DISCARD(init.rodata) \ - MEM_DISCARD(init.rodata) + MEM_DISCARD(init.rodata) \ + KERNEL_DTB() #define INIT_TEXT \ *(.init.text) \ diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib index 4c72c11..7df8eb5 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib @@ -200,6 +200,29 @@ quiet_cmd_gzip = GZIP $@ cmd_gzip = (cat $(filter-out FORCE,$^) | gzip -f -9 > $@) || \ (rm -f $@ ; false) +# DTC +# --------------------------------------------------------------------------- + +# Generate an assembly file to wrap the output of the device tree compiler +quiet_cmd_dt_S_dtb= DTB $@ +cmd_dt_S_dtb= \ +( \ + echo '\#include '; \ + echo '.section .dtb.init.rodata,"a"'; \ + echo '.balign STRUCT_ALIGNMENT'; \ + echo '.global __dtb_$(*F)_begin'; \ + echo '__dtb_$(*F)_begin:'; \ + echo '.incbin "$<" '; \ + echo '__dtb_$(*F)_end:'; \ + echo '.global __dtb_$(*F)_end'; \ + echo '.balign STRUCT_ALIGNMENT'; \ +) > $@ + +$(obj)/%.dtb.S: $(obj)/%.dtb + $(call cmd,dt_S_dtb) + +quiet_cmd_dtc = DTC $@ + cmd_dtc = $(objtree)/scripts/dtc/dtc -O dtb -o $@ -b 0 $(DTC_FLAGS) $< # Bzip2 # ---------------------------------------------------------------------------