* [PATCH 0/4] [RFC V4] Adding DTB to architecture independent vmlinux
@ 2010-11-11 23:45 dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w
[not found] ` <20101111234257.16185.6076.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
0 siblings, 1 reply; 3+ messages in thread
From: dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w @ 2010-11-11 23:45 UTC (permalink / raw)
To: devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
sodaville-hfZtesqFncYOwBW4kG4KsQ
Cc: Dirk Brandewie, arjan-VuQAYsv1563Yd54FQh9/CA
From: Dirk Brandewie <dirk.j.brandewie-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
The following series implements the ability to link device tree
blob(s) into the kernel image.
Changes since V3:
Added kernel command line option to pass a "compatible" string to
select the DTB for the platform.
Added function to find the compatible DTB in the kernel image if any
Added code to dtc to force the DTB to be modulo 32 bytes in size
Changed the alignment of the .dtb section
---
Dirk Brandewie (4):
x86/of: Support building device tree blob(s) into image.
of: Add support for linking device tree blobs into vmlinux
of/dtc: force dtb size to modulo 32 bytes
of/fdt: add kernel command line option for dtb_compat string
arch/x86/Kconfig | 6 ++++
arch/x86/boot/dts/Kconfig | 8 ++++++
arch/x86/kernel/Makefile | 11 ++++++++
drivers/of/fdt.c | 52 +++++++++++++++++++++++++++++++++++++
include/asm-generic/vmlinux.lds.h | 13 +++++++++
include/linux/of_fdt.h | 9 ++++++
init/Kconfig | 7 +++++
scripts/Makefile.lib | 14 ++++++++++
scripts/dtc/flattree.c | 6 ++++
9 files changed, 123 insertions(+), 3 deletions(-)
create mode 100644 arch/x86/boot/dts/Kconfig
--
Signature
>From nobody Thu Nov 11 15:42:58 2010
Subject: [PATCH 1/4] x86/of: Support building device tree blob(s) into image.
Bcc: dirk.j.brandewie-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org
From: Dirk Brandewie <dirk.j.brandewie-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Date: Thu, 11 Nov 2010 15:42:58 -0800
Message-ID: <20101111234258.16185.98317.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
In-Reply-To: <20101111234257.16185.6076.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
References: <20101111234257.16185.6076.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
User-Agent: StGit/0.15
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
From: Dirk Brandewie <dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
This patch adds support for linking device tree blobs into vmlinux.
The blobs linked into the image is controlled via kernel config
variables
Signed-off-by: Dirk Brandewie <dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
---
arch/x86/Kconfig | 6 +++++-
arch/x86/boot/dts/Kconfig | 8 ++++++++
arch/x86/kernel/Makefile | 11 +++++++++++
3 files changed, 24 insertions(+), 1 deletions(-)
create mode 100644 arch/x86/boot/dts/Kconfig
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 5904f38..62c195d 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -299,13 +299,17 @@ config X86_BIGSMP
---help---
This option is needed for the systems that have more than 8 CPUs
-config X86_OF
+menuconfig X86_OF
bool "Support for device tree"
select OF
select OF_FLATTREE
---help---
Device tree support on X86.
+if X86_OF
+source "arch/x86/boot/dts/Kconfig
+endif
+
if X86_32
config X86_EXTENDED_PLATFORM
bool "Support for extended (non-PC) x86 platforms"
diff --git a/arch/x86/boot/dts/Kconfig b/arch/x86/boot/dts/Kconfig
new file mode 100644
index 0000000..5380b6b
--- /dev/null
+++ b/arch/x86/boot/dts/Kconfig
@@ -0,0 +1,8 @@
+config CE4100_DTB
+ bool "Intel CE4100"
+ depends on X86_OF && KERNEL_DTB
+
+config TEST_DTB
+ bool "Test DTS"
+ depends on X86_OF && KERNEL_DTB
+
diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile
index 586df14..cf15e8c 100644
--- a/arch/x86/kernel/Makefile
+++ b/arch/x86/kernel/Makefile
@@ -113,6 +113,17 @@ obj-$(CONFIG_X86_CHECK_BIOS_CORRUPTION) += check.o
obj-$(CONFIG_SWIOTLB) += pci-swiotlb.o
obj-$(CONFIG_X86_OF) += prom.o
+ifeq ($(CONFIG_KERNEL_DTB),y)
+obj-$(CONFIG_CE4100_DTB) += ce4100.dtb.o
+obj-$(CONFIG_TEST_DTB) += test.dtb.o
+endif
+
+dtstree := $(srctree)/arch/x86/boot/dts
+
+$(obj)/%.dtb: $(dtstree)/%.dts
+ $(call if_changed,dtc)
+
+
###
# 64 bit specific files
ifeq ($(CONFIG_X86_64),y)
>From nobody Thu Nov 11 15:42:58 2010
Subject: [PATCH 2/4] of: Add support for linking device tree blobs into vmlinux
Bcc: dirk.j.brandewie-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org
From: Dirk Brandewie <dirk.j.brandewie-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Date: Thu, 11 Nov 2010 15:42:58 -0800
Message-ID: <20101111234258.16185.42704.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
In-Reply-To: <20101111234257.16185.6076.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
References: <20101111234257.16185.6076.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
User-Agent: StGit/0.15
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
From: Dirk Brandewie <dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
This patch adds support for linking device tree blobs into
vmlinux. The device tree blobs are placed in the init.data
section.
Signed-off-by: Dirk Brandewie <dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
---
include/asm-generic/vmlinux.lds.h | 13 ++++++++++++-
init/Kconfig | 7 +++++++
scripts/Makefile.lib | 14 ++++++++++++++
3 files changed, 33 insertions(+), 1 deletions(-)
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index bd69d79..c8f600e 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -146,6 +146,16 @@
#define TRACE_SYSCALLS()
#endif
+#ifdef CONFIG_KERNEL_DTB
+#define KERNEL_DTB \
+ . = ALIGN(32); \
+ VMLINUX_SYMBOL(__dtb_start) = .; \
+ *(.dtb) \
+ VMLINUX_SYMBOL(__dtb_end) = .;
+#else
+#define KERNEL_DTB
+#endif
+
/* .data section */
#define DATA_DATA \
*(.data) \
@@ -468,7 +478,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/init/Kconfig b/init/Kconfig
index 88c1046..fddfc0f 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -1083,6 +1083,13 @@ config PCI_QUIRKS
bugs/quirks. Disable this only if your target machine is
unaffected by PCI quirks.
+config KERNEL_DTB
+ bool "Support linking a device tree blob into vmlinux"
+ default n
+ help
+ This option provides support for adding a device tree blob(s)
+ directly to vmlinux
+
config SLUB_DEBUG
default y
bool "Enable SLUB debugging support" if EMBEDDED
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
index 4c72c11..c4487b2 100644
--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
@@ -200,6 +200,20 @@ quiet_cmd_gzip = GZIP $@
cmd_gzip = (cat $(filter-out FORCE,$^) | gzip -f -9 > $@) || \
(rm -f $@ ; false)
+# DTC
+# ---------------------------------------------------------------------------
+$(obj)/%.dtb.S: $(obj)/%.dtb FORCE
+ @echo '.section .dtb,"a"' > $@
+ @echo '.global __dtb_$(*F)_begin' >> $@
+ @echo '__dtb_$(*F)_begin:' >> $@
+ @echo '.incbin "$<" ' >> $@
+ @echo '__dtb_$(*F)_end:' >> $@
+ @echo '.global __dtb_$(*F)_end' >> $@
+
+DTC = $(objtree)/scripts/dtc/dtc
+
+quiet_cmd_dtc = DTC $@
+ cmd_dtc = $(DTC) -O dtb -o $(obj)/$*.dtb -b 0 $(dtstree)/$*.dts
# Bzip2
# ---------------------------------------------------------------------------
>From nobody Thu Nov 11 15:42:58 2010
Subject: [PATCH 3/4] of/dtc: force dtb size to modulo 32 bytes
Bcc: dirk.j.brandewie-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org
From: Dirk Brandewie <dirk.j.brandewie-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Date: Thu, 11 Nov 2010 15:42:58 -0800
Message-ID: <20101111234258.16185.25714.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
In-Reply-To: <20101111234257.16185.6076.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
References: <20101111234257.16185.6076.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
User-Agent: StGit/0.15
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
From: Dirk Brandewie <dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
This patch forces the size of the DTB to be modulo 32 bytes. This is
needed to support linking multiple DTB's into a single section in the
image. GCC wants structures to be 32 byte aligned without this change
DTB's after the first in the section may not be properly aligned so
the flat tree parsing code will fall over.
Signed-off-by: Dirk Brandewie <dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
---
scripts/dtc/flattree.c | 6 +++++-
1 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/scripts/dtc/flattree.c b/scripts/dtc/flattree.c
index 76acd28..ccca797 100644
--- a/scripts/dtc/flattree.c
+++ b/scripts/dtc/flattree.c
@@ -358,6 +358,7 @@ void dt_to_blob(FILE *f, struct boot_info *bi, int version)
struct data strbuf = empty_data;
struct fdt_header fdt;
int padlen = 0;
+ int align_size;
for (i = 0; i < ARRAY_SIZE(version_table); i++) {
if (version_table[i].version == version)
@@ -395,6 +396,9 @@ void dt_to_blob(FILE *f, struct boot_info *bi, int version)
fdt.totalsize = cpu_to_fdt32(tsize);
}
+ align_size = ALIGN(fdt32_to_cpu(fdt.totalsize), 32);
+ fdt.totalsize = cpu_to_fdt32(align_size);
+
/*
* Assemble the blob: start with the header, add with alignment
* the reserve buffer, add the reserve map terminating zeroes,
@@ -412,7 +416,7 @@ void dt_to_blob(FILE *f, struct boot_info *bi, int version)
*/
if (padlen > 0)
blob = data_append_zeroes(blob, padlen);
-
+ blob = data_append_align(blob, 32);
fwrite(blob.val, blob.len, 1, f);
if (ferror(f))
>From nobody Thu Nov 11 15:42:58 2010
Subject: [PATCH 4/4] of/fdt: add kernel command line option for dtb_compat
string
Bcc: dirk.j.brandewie-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org
From: Dirk Brandewie <dirk.j.brandewie-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Date: Thu, 11 Nov 2010 15:42:58 -0800
Message-ID: <20101111234258.16185.25736.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
In-Reply-To: <20101111234257.16185.6076.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
References: <20101111234257.16185.6076.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
User-Agent: StGit/0.15
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
From: Dirk Brandewie <dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Add support for specifying a "compatible" string from the kernel
command line and functions for the platform to find the compatible
blob present in the kernel image if any.
Signed-off-by: Dirk Brandewie <dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
---
drivers/of/fdt.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++
include/linux/of_fdt.h | 9 ++++++++
2 files changed, 61 insertions(+), 0 deletions(-)
diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
index c1360e0..07fe4c6 100644
--- a/drivers/of/fdt.c
+++ b/drivers/of/fdt.c
@@ -604,3 +604,55 @@ void __init unflatten_device_tree(void)
pr_debug(" <- unflatten_device_tree()\n");
}
+
+#ifndef MODULE
+#ifdef CONFIG_OF_FLATTREE
+static char dtb_compat_name[MAX_DTB_COMPAT_STR] = "";
+
+char __init *of_get_dtb_compatible_string(void)
+{
+ return dtb_compat_name;
+}
+
+#ifdef CONFIG_KERNEL_DTB
+extern char __dtb_start[];
+extern char __dtb_end[];
+
+void *of_find_compatible_dtb(char *name)
+{
+ void *rc = NULL;
+ char *hdr;
+ unsigned long node, root;
+ struct boot_param_header *blob, *orig_initial_boot_params;
+
+ orig_initial_boot_params = initial_boot_params;
+
+ if (__dtb_start != __dtb_end){
+ blob = (struct boot_param_header *)__dtb_start;
+ do{
+ node = ((unsigned long)blob) +
+ be32_to_cpu(blob->off_dt_struct);
+ initial_boot_params = blob;
+ root = of_get_flat_dt_root();
+ if (of_flat_dt_is_compatible(root, name) > 0) {
+ rc = (void*) blob;
+ break;
+ }
+ blob = (unsigned long)blob+be32_to_cpu(blob->totalsize);
+ }while (blob < (struct boot_param_header *)__dtb_end);
+ }
+ if (rc == NULL)
+ initial_boot_params = orig_initial_boot_params;
+ return rc;
+}
+#endif
+
+static int __init dtb_compat_setup(char *line)
+{
+ strncpy(dtb_compat_name, line, MAX_DTB_COMPAT_STR);
+ return 1;
+}
+
+__setup("dtb_compat=", dtb_compat_setup);
+#endif
+#endif
diff --git a/include/linux/of_fdt.h b/include/linux/of_fdt.h
index 7bbf5b3..181e413 100644
--- a/include/linux/of_fdt.h
+++ b/include/linux/of_fdt.h
@@ -58,6 +58,8 @@ struct boot_param_header {
};
#if defined(CONFIG_OF_FLATTREE)
+#define MAX_DTB_COMPAT_STR 64
+
/* TBD: Temporary export of fdt globals - remove when code fully merged */
extern int __initdata dt_root_addr_cells;
extern int __initdata dt_root_size_cells;
@@ -82,6 +84,13 @@ extern void early_init_dt_add_memory_arch(u64 base, u64 size);
extern u64 early_init_dt_alloc_memory_arch(u64 size, u64 align);
extern u64 dt_mem_next_cell(int s, __be32 **cellp);
+extern char *of_get_dtb_compatible_string(void);
+#ifdef CONFIG_KERNEL_DTB
+extern void *of_find_compatible_dtb(char *name);
+#else
+static inline void *of_find_compatible_dtb(char *name) {return 0;}
+
+#endif
/*
* If BLK_DEV_INITRD, the fdt early init code will call this function,
* to be provided by the arch code. start and end are specified as
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH 0/4] [RFC V4] Adding DTB to architecture independent vmlinux
[not found] ` <20101111234257.16185.6076.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
@ 2010-11-11 23:58 ` Dirk Brandewie
0 siblings, 0 replies; 3+ messages in thread
From: Dirk Brandewie @ 2010-11-11 23:58 UTC (permalink / raw)
To: dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
Cc: sodaville-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org,
devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org,
arjan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org
Sorry for the poor formatting I will resend as discreet patches to make
commenting easier
--Dirk
On Thu, 2010-11-11 at 15:45 -0800, dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org wrote:
> From: Dirk Brandewie <dirk.j.brandewie-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
>
> The following series implements the ability to link device tree
> blob(s) into the kernel image.
>
> Changes since V3:
> Added kernel command line option to pass a "compatible" string to
> select the DTB for the platform.
>
> Added function to find the compatible DTB in the kernel image if any
>
> Added code to dtc to force the DTB to be modulo 32 bytes in size
>
> Changed the alignment of the .dtb section
>
> ---
>
> Dirk Brandewie (4):
> x86/of: Support building device tree blob(s) into image.
> of: Add support for linking device tree blobs into vmlinux
> of/dtc: force dtb size to modulo 32 bytes
> of/fdt: add kernel command line option for dtb_compat string
>
>
> arch/x86/Kconfig | 6 ++++
> arch/x86/boot/dts/Kconfig | 8 ++++++
> arch/x86/kernel/Makefile | 11 ++++++++
> drivers/of/fdt.c | 52 +++++++++++++++++++++++++++++++++++++
> include/asm-generic/vmlinux.lds.h | 13 +++++++++
> include/linux/of_fdt.h | 9 ++++++
> init/Kconfig | 7 +++++
> scripts/Makefile.lib | 14 ++++++++++
> scripts/dtc/flattree.c | 6 ++++
> 9 files changed, 123 insertions(+), 3 deletions(-)
> create mode 100644 arch/x86/boot/dts/Kconfig
>
> --
> Signature
>
> From nobody Thu Nov 11 15:42:58 2010
> Subject: [PATCH 1/4] x86/of: Support building device tree blob(s) into image.
> Bcc: dirk.j.brandewie-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org
> From: Dirk Brandewie <dirk.j.brandewie-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> Date: Thu, 11 Nov 2010 15:42:58 -0800
> Message-ID: <20101111234258.16185.98317.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
> In-Reply-To: <20101111234257.16185.6076.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
> References: <20101111234257.16185.6076.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
> User-Agent: StGit/0.15
> MIME-Version: 1.0
> Content-Type: text/plain; charset="utf-8"
> Content-Transfer-Encoding: 7bit
>
> From: Dirk Brandewie <dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
>
> This patch adds support for linking device tree blobs into vmlinux.
> The blobs linked into the image is controlled via kernel config
> variables
>
> Signed-off-by: Dirk Brandewie <dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> ---
> arch/x86/Kconfig | 6 +++++-
> arch/x86/boot/dts/Kconfig | 8 ++++++++
> arch/x86/kernel/Makefile | 11 +++++++++++
> 3 files changed, 24 insertions(+), 1 deletions(-)
> create mode 100644 arch/x86/boot/dts/Kconfig
>
> diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
> index 5904f38..62c195d 100644
> --- a/arch/x86/Kconfig
> +++ b/arch/x86/Kconfig
> @@ -299,13 +299,17 @@ config X86_BIGSMP
> ---help---
> This option is needed for the systems that have more than 8 CPUs
>
> -config X86_OF
> +menuconfig X86_OF
> bool "Support for device tree"
> select OF
> select OF_FLATTREE
> ---help---
> Device tree support on X86.
>
> +if X86_OF
> +source "arch/x86/boot/dts/Kconfig
> +endif
> +
> if X86_32
> config X86_EXTENDED_PLATFORM
> bool "Support for extended (non-PC) x86 platforms"
> diff --git a/arch/x86/boot/dts/Kconfig b/arch/x86/boot/dts/Kconfig
> new file mode 100644
> index 0000000..5380b6b
> --- /dev/null
> +++ b/arch/x86/boot/dts/Kconfig
> @@ -0,0 +1,8 @@
> +config CE4100_DTB
> + bool "Intel CE4100"
> + depends on X86_OF && KERNEL_DTB
> +
> +config TEST_DTB
> + bool "Test DTS"
> + depends on X86_OF && KERNEL_DTB
> +
> diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile
> index 586df14..cf15e8c 100644
> --- a/arch/x86/kernel/Makefile
> +++ b/arch/x86/kernel/Makefile
> @@ -113,6 +113,17 @@ obj-$(CONFIG_X86_CHECK_BIOS_CORRUPTION) += check.o
> obj-$(CONFIG_SWIOTLB) += pci-swiotlb.o
> obj-$(CONFIG_X86_OF) += prom.o
>
> +ifeq ($(CONFIG_KERNEL_DTB),y)
> +obj-$(CONFIG_CE4100_DTB) += ce4100.dtb.o
> +obj-$(CONFIG_TEST_DTB) += test.dtb.o
> +endif
> +
> +dtstree := $(srctree)/arch/x86/boot/dts
> +
> +$(obj)/%.dtb: $(dtstree)/%.dts
> + $(call if_changed,dtc)
> +
> +
> ###
> # 64 bit specific files
> ifeq ($(CONFIG_X86_64),y)
>
>
> From nobody Thu Nov 11 15:42:58 2010
> Subject: [PATCH 2/4] of: Add support for linking device tree blobs into vmlinux
> Bcc: dirk.j.brandewie-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org
> From: Dirk Brandewie <dirk.j.brandewie-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> Date: Thu, 11 Nov 2010 15:42:58 -0800
> Message-ID: <20101111234258.16185.42704.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
> In-Reply-To: <20101111234257.16185.6076.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
> References: <20101111234257.16185.6076.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
> User-Agent: StGit/0.15
> MIME-Version: 1.0
> Content-Type: text/plain; charset="utf-8"
> Content-Transfer-Encoding: 7bit
>
> From: Dirk Brandewie <dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
>
> This patch adds support for linking device tree blobs into
> vmlinux. The device tree blobs are placed in the init.data
> section.
>
> Signed-off-by: Dirk Brandewie <dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> ---
> include/asm-generic/vmlinux.lds.h | 13 ++++++++++++-
> init/Kconfig | 7 +++++++
> scripts/Makefile.lib | 14 ++++++++++++++
> 3 files changed, 33 insertions(+), 1 deletions(-)
>
> diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
> index bd69d79..c8f600e 100644
> --- a/include/asm-generic/vmlinux.lds.h
> +++ b/include/asm-generic/vmlinux.lds.h
> @@ -146,6 +146,16 @@
> #define TRACE_SYSCALLS()
> #endif
>
> +#ifdef CONFIG_KERNEL_DTB
> +#define KERNEL_DTB \
> + . = ALIGN(32); \
> + VMLINUX_SYMBOL(__dtb_start) = .; \
> + *(.dtb) \
> + VMLINUX_SYMBOL(__dtb_end) = .;
> +#else
> +#define KERNEL_DTB
> +#endif
> +
> /* .data section */
> #define DATA_DATA \
> *(.data) \
> @@ -468,7 +478,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/init/Kconfig b/init/Kconfig
> index 88c1046..fddfc0f 100644
> --- a/init/Kconfig
> +++ b/init/Kconfig
> @@ -1083,6 +1083,13 @@ config PCI_QUIRKS
> bugs/quirks. Disable this only if your target machine is
> unaffected by PCI quirks.
>
> +config KERNEL_DTB
> + bool "Support linking a device tree blob into vmlinux"
> + default n
> + help
> + This option provides support for adding a device tree blob(s)
> + directly to vmlinux
> +
> config SLUB_DEBUG
> default y
> bool "Enable SLUB debugging support" if EMBEDDED
> diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
> index 4c72c11..c4487b2 100644
> --- a/scripts/Makefile.lib
> +++ b/scripts/Makefile.lib
> @@ -200,6 +200,20 @@ quiet_cmd_gzip = GZIP $@
> cmd_gzip = (cat $(filter-out FORCE,$^) | gzip -f -9 > $@) || \
> (rm -f $@ ; false)
>
> +# DTC
> +# ---------------------------------------------------------------------------
> +$(obj)/%.dtb.S: $(obj)/%.dtb FORCE
> + @echo '.section .dtb,"a"' > $@
> + @echo '.global __dtb_$(*F)_begin' >> $@
> + @echo '__dtb_$(*F)_begin:' >> $@
> + @echo '.incbin "$<" ' >> $@
> + @echo '__dtb_$(*F)_end:' >> $@
> + @echo '.global __dtb_$(*F)_end' >> $@
> +
> +DTC = $(objtree)/scripts/dtc/dtc
> +
> +quiet_cmd_dtc = DTC $@
> + cmd_dtc = $(DTC) -O dtb -o $(obj)/$*.dtb -b 0 $(dtstree)/$*.dts
>
> # Bzip2
> # ---------------------------------------------------------------------------
>
>
> From nobody Thu Nov 11 15:42:58 2010
> Subject: [PATCH 3/4] of/dtc: force dtb size to modulo 32 bytes
> Bcc: dirk.j.brandewie-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org
> From: Dirk Brandewie <dirk.j.brandewie-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> Date: Thu, 11 Nov 2010 15:42:58 -0800
> Message-ID: <20101111234258.16185.25714.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
> In-Reply-To: <20101111234257.16185.6076.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
> References: <20101111234257.16185.6076.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
> User-Agent: StGit/0.15
> MIME-Version: 1.0
> Content-Type: text/plain; charset="utf-8"
> Content-Transfer-Encoding: 7bit
>
> From: Dirk Brandewie <dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
>
> This patch forces the size of the DTB to be modulo 32 bytes. This is
> needed to support linking multiple DTB's into a single section in the
> image. GCC wants structures to be 32 byte aligned without this change
> DTB's after the first in the section may not be properly aligned so
> the flat tree parsing code will fall over.
>
> Signed-off-by: Dirk Brandewie <dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> ---
> scripts/dtc/flattree.c | 6 +++++-
> 1 files changed, 5 insertions(+), 1 deletions(-)
>
> diff --git a/scripts/dtc/flattree.c b/scripts/dtc/flattree.c
> index 76acd28..ccca797 100644
> --- a/scripts/dtc/flattree.c
> +++ b/scripts/dtc/flattree.c
> @@ -358,6 +358,7 @@ void dt_to_blob(FILE *f, struct boot_info *bi, int version)
> struct data strbuf = empty_data;
> struct fdt_header fdt;
> int padlen = 0;
> + int align_size;
>
> for (i = 0; i < ARRAY_SIZE(version_table); i++) {
> if (version_table[i].version == version)
> @@ -395,6 +396,9 @@ void dt_to_blob(FILE *f, struct boot_info *bi, int version)
> fdt.totalsize = cpu_to_fdt32(tsize);
> }
>
> + align_size = ALIGN(fdt32_to_cpu(fdt.totalsize), 32);
> + fdt.totalsize = cpu_to_fdt32(align_size);
> +
> /*
> * Assemble the blob: start with the header, add with alignment
> * the reserve buffer, add the reserve map terminating zeroes,
> @@ -412,7 +416,7 @@ void dt_to_blob(FILE *f, struct boot_info *bi, int version)
> */
> if (padlen > 0)
> blob = data_append_zeroes(blob, padlen);
> -
> + blob = data_append_align(blob, 32);
> fwrite(blob.val, blob.len, 1, f);
>
> if (ferror(f))
>
>
> From nobody Thu Nov 11 15:42:58 2010
> Subject: [PATCH 4/4] of/fdt: add kernel command line option for dtb_compat
> string
> Bcc: dirk.j.brandewie-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org
> From: Dirk Brandewie <dirk.j.brandewie-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> Date: Thu, 11 Nov 2010 15:42:58 -0800
> Message-ID: <20101111234258.16185.25736.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
> In-Reply-To: <20101111234257.16185.6076.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
> References: <20101111234257.16185.6076.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
> User-Agent: StGit/0.15
> MIME-Version: 1.0
> Content-Type: text/plain; charset="utf-8"
> Content-Transfer-Encoding: 7bit
>
> From: Dirk Brandewie <dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
>
> Add support for specifying a "compatible" string from the kernel
> command line and functions for the platform to find the compatible
> blob present in the kernel image if any.
>
> Signed-off-by: Dirk Brandewie <dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> ---
> drivers/of/fdt.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++
> include/linux/of_fdt.h | 9 ++++++++
> 2 files changed, 61 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
> index c1360e0..07fe4c6 100644
> --- a/drivers/of/fdt.c
> +++ b/drivers/of/fdt.c
> @@ -604,3 +604,55 @@ void __init unflatten_device_tree(void)
>
> pr_debug(" <- unflatten_device_tree()\n");
> }
> +
> +#ifndef MODULE
> +#ifdef CONFIG_OF_FLATTREE
> +static char dtb_compat_name[MAX_DTB_COMPAT_STR] = "";
> +
> +char __init *of_get_dtb_compatible_string(void)
> +{
> + return dtb_compat_name;
> +}
> +
> +#ifdef CONFIG_KERNEL_DTB
> +extern char __dtb_start[];
> +extern char __dtb_end[];
> +
> +void *of_find_compatible_dtb(char *name)
> +{
> + void *rc = NULL;
> + char *hdr;
> + unsigned long node, root;
> + struct boot_param_header *blob, *orig_initial_boot_params;
> +
> + orig_initial_boot_params = initial_boot_params;
> +
> + if (__dtb_start != __dtb_end){
> + blob = (struct boot_param_header *)__dtb_start;
> + do{
> + node = ((unsigned long)blob) +
> + be32_to_cpu(blob->off_dt_struct);
> + initial_boot_params = blob;
> + root = of_get_flat_dt_root();
> + if (of_flat_dt_is_compatible(root, name) > 0) {
> + rc = (void*) blob;
> + break;
> + }
> + blob = (unsigned long)blob+be32_to_cpu(blob->totalsize);
> + }while (blob < (struct boot_param_header *)__dtb_end);
> + }
> + if (rc == NULL)
> + initial_boot_params = orig_initial_boot_params;
> + return rc;
> +}
> +#endif
> +
> +static int __init dtb_compat_setup(char *line)
> +{
> + strncpy(dtb_compat_name, line, MAX_DTB_COMPAT_STR);
> + return 1;
> +}
> +
> +__setup("dtb_compat=", dtb_compat_setup);
> +#endif
> +#endif
> diff --git a/include/linux/of_fdt.h b/include/linux/of_fdt.h
> index 7bbf5b3..181e413 100644
> --- a/include/linux/of_fdt.h
> +++ b/include/linux/of_fdt.h
> @@ -58,6 +58,8 @@ struct boot_param_header {
> };
>
> #if defined(CONFIG_OF_FLATTREE)
> +#define MAX_DTB_COMPAT_STR 64
> +
> /* TBD: Temporary export of fdt globals - remove when code fully merged */
> extern int __initdata dt_root_addr_cells;
> extern int __initdata dt_root_size_cells;
> @@ -82,6 +84,13 @@ extern void early_init_dt_add_memory_arch(u64 base, u64 size);
> extern u64 early_init_dt_alloc_memory_arch(u64 size, u64 align);
> extern u64 dt_mem_next_cell(int s, __be32 **cellp);
>
> +extern char *of_get_dtb_compatible_string(void);
> +#ifdef CONFIG_KERNEL_DTB
> +extern void *of_find_compatible_dtb(char *name);
> +#else
> +static inline void *of_find_compatible_dtb(char *name) {return 0;}
> +
> +#endif
> /*
> * If BLK_DEV_INITRD, the fdt early init code will call this function,
> * to be provided by the arch code. start and end are specified as
>
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH 0/4] [RFC V4] Adding DTB to architecture independent vmlinux
@ 2010-11-12 0:03 dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w
0 siblings, 0 replies; 3+ messages in thread
From: dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w @ 2010-11-12 0:03 UTC (permalink / raw)
To: devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
sodaville-hfZtesqFncYOwBW4kG4KsQ
Cc: arjan-VuQAYsv1563Yd54FQh9/CA
From: Dirk Brandewie <dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
The following series implements the ability to link device tree
blob(s) into the kernel image.
Changes since V3:
Added kernel command line option to pass a "compatible" string to
select the DTB for the platform.
Added function to find the compatible DTB in the kernel image if any
Added code to dtc to force the DTB to be modulo 32 bytes in size
Changed the alignment of the .dtb section
Dirk Brandewie (4):
x86/of: Support building device tree blob(s) into image.
of: Add support for linking device tree blobs into vmlinux
of/dtc: force dtb size to modulo 32 bytes
of/fdt: add kernel command line option for dtb_compat string
arch/x86/Kconfig | 6 +++-
arch/x86/boot/dts/Kconfig | 8 +++++
arch/x86/kernel/Makefile | 11 ++++++++
drivers/of/fdt.c | 52 +++++++++++++++++++++++++++++++++++++
include/asm-generic/vmlinux.lds.h | 13 ++++++++-
include/linux/of_fdt.h | 9 ++++++
init/Kconfig | 7 +++++
scripts/Makefile.lib | 14 ++++++++++
scripts/dtc/flattree.c | 6 +++-
9 files changed, 123 insertions(+), 3 deletions(-)
create mode 100644 arch/x86/boot/dts/Kconfig
--
1.7.2.3
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2010-11-12 0:03 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-11-11 23:45 [PATCH 0/4] [RFC V4] Adding DTB to architecture independent vmlinux dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w
[not found] ` <20101111234257.16185.6076.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
2010-11-11 23:58 ` Dirk Brandewie
-- strict thread matches above, loose matches on Subject: below --
2010-11-12 0:03 dirk.brandewie-Re5JQEeQqe8AvxtiuMwx3w
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.