aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGrant Likely <grant.likely@secretlab.ca>2011-04-28 16:27:20 -0400
committerGrant Likely <grant.likely@secretlab.ca>2011-05-11 09:14:29 -0400
commit9eb8f6743b076b67f00776cda4330c802e157b41 (patch)
tree665b7bc96e672e4f3df6c25ea08b00714331a0c4
parent4c2896e88d976d0e5b2213c64cde885f5677fa2b (diff)
arm/dt: Allow CONFIG_OF on ARM
Add some basic empty infrastructure for DT support on ARM. v5: - Fix off-by-one error in size calculation of initrd - Stop mucking with cmd_line, and load command line from dt into boot_command_line instead which matches the behaviour of ATAGS booting v3: - moved cmd_line export and initrd setup to this patch to make the series bisectable. - switched to alloc_bootmem_align() for allocation when unflattening the device tree. memblock_alloc() was not the right interface. Signed-off-by: Jeremy Kerr <jeremy.kerr@canonical.com> Tested-by: Tony Lindgren <tony@atomide.com> Acked-by: Nicolas Pitre <nicolas.pitre@linaro.org> Acked-by: Russell King <rmk+kernel@arm.linux.org.uk> Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
-rw-r--r--arch/arm/Kconfig7
-rw-r--r--arch/arm/include/asm/prom.h25
-rw-r--r--arch/arm/include/asm/setup.h2
-rw-r--r--arch/arm/kernel/Makefile1
-rw-r--r--arch/arm/kernel/devtree.c47
-rw-r--r--arch/arm/kernel/setup.c2
-rw-r--r--arch/arm/mm/init.c9
7 files changed, 92 insertions, 1 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 377a7a595b08..efc7f3c87f1d 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1687,6 +1687,13 @@ endmenu
1687 1687
1688menu "Boot options" 1688menu "Boot options"
1689 1689
1690config USE_OF
1691 bool "Flattened Device Tree support"
1692 select OF
1693 select OF_EARLY_FLATTREE
1694 help
1695 Include support for flattened device tree machine descriptions.
1696
1690# Compressed boot loader in ROM. Yes, we really want to ask about 1697# Compressed boot loader in ROM. Yes, we really want to ask about
1691# TEXT and BSS so we preserve their values in the config files. 1698# TEXT and BSS so we preserve their values in the config files.
1692config ZBOOT_ROM_TEXT 1699config ZBOOT_ROM_TEXT
diff --git a/arch/arm/include/asm/prom.h b/arch/arm/include/asm/prom.h
new file mode 100644
index 000000000000..8f1037fdc08f
--- /dev/null
+++ b/arch/arm/include/asm/prom.h
@@ -0,0 +1,25 @@
1/*
2 * arch/arm/include/asm/prom.h
3 *
4 * Copyright (C) 2009 Canonical Ltd. <jeremy.kerr@canonical.com>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 *
10 */
11#ifndef __ASMARM_PROM_H
12#define __ASMARM_PROM_H
13
14#ifdef CONFIG_OF
15
16#include <asm/setup.h>
17#include <asm/irq.h>
18
19static inline void irq_dispose_mapping(unsigned int virq)
20{
21 return;
22}
23
24#endif /* CONFIG_OF */
25#endif /* ASMARM_PROM_H */
diff --git a/arch/arm/include/asm/setup.h b/arch/arm/include/asm/setup.h
index 95176af3df8c..93b4702ffa0f 100644
--- a/arch/arm/include/asm/setup.h
+++ b/arch/arm/include/asm/setup.h
@@ -217,6 +217,8 @@ extern struct meminfo meminfo;
217#define bank_phys_end(bank) ((bank)->start + (bank)->size) 217#define bank_phys_end(bank) ((bank)->start + (bank)->size)
218#define bank_phys_size(bank) (bank)->size 218#define bank_phys_size(bank) (bank)->size
219 219
220extern int arm_add_memory(phys_addr_t start, unsigned long size);
221
220#endif /* __KERNEL__ */ 222#endif /* __KERNEL__ */
221 223
222#endif 224#endif
diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile
index 8d95446150a3..908c78cb1d1c 100644
--- a/arch/arm/kernel/Makefile
+++ b/arch/arm/kernel/Makefile
@@ -44,6 +44,7 @@ obj-$(CONFIG_ARM_THUMBEE) += thumbee.o
44obj-$(CONFIG_KGDB) += kgdb.o 44obj-$(CONFIG_KGDB) += kgdb.o
45obj-$(CONFIG_ARM_UNWIND) += unwind.o 45obj-$(CONFIG_ARM_UNWIND) += unwind.o
46obj-$(CONFIG_HAVE_TCM) += tcm.o 46obj-$(CONFIG_HAVE_TCM) += tcm.o
47obj-$(CONFIG_OF) += devtree.o
47obj-$(CONFIG_CRASH_DUMP) += crash_dump.o 48obj-$(CONFIG_CRASH_DUMP) += crash_dump.o
48obj-$(CONFIG_SWP_EMULATE) += swp_emulate.o 49obj-$(CONFIG_SWP_EMULATE) += swp_emulate.o
49CFLAGS_swp_emulate.o := -Wa,-march=armv7-a 50CFLAGS_swp_emulate.o := -Wa,-march=armv7-a
diff --git a/arch/arm/kernel/devtree.c b/arch/arm/kernel/devtree.c
new file mode 100644
index 000000000000..75e3df85b88c
--- /dev/null
+++ b/arch/arm/kernel/devtree.c
@@ -0,0 +1,47 @@
1/*
2 * linux/arch/arm/kernel/devtree.c
3 *
4 * Copyright (C) 2009 Canonical Ltd. <jeremy.kerr@canonical.com>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10
11#include <linux/init.h>
12#include <linux/module.h>
13#include <linux/errno.h>
14#include <linux/types.h>
15#include <linux/bootmem.h>
16#include <linux/memblock.h>
17#include <linux/of.h>
18#include <linux/of_fdt.h>
19#include <linux/of_irq.h>
20#include <linux/of_platform.h>
21
22#include <asm/setup.h>
23#include <asm/page.h>
24
25void __init early_init_dt_add_memory_arch(u64 base, u64 size)
26{
27 arm_add_memory(base, size);
28}
29
30void * __init early_init_dt_alloc_memory_arch(u64 size, u64 align)
31{
32 return alloc_bootmem_align(size, align);
33}
34
35/**
36 * irq_create_of_mapping - Hook to resolve OF irq specifier into a Linux irq#
37 *
38 * Currently the mapping mechanism is trivial; simple flat hwirq numbers are
39 * mapped 1:1 onto Linux irq numbers. Cascaded irq controllers are not
40 * supported.
41 */
42unsigned int irq_create_of_mapping(struct device_node *controller,
43 const u32 *intspec, unsigned int intsize)
44{
45 return intspec[0];
46}
47EXPORT_SYMBOL_GPL(irq_create_of_mapping);
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
index 006c1e884eaf..109997e3fe4a 100644
--- a/arch/arm/kernel/setup.c
+++ b/arch/arm/kernel/setup.c
@@ -466,7 +466,7 @@ static struct machine_desc * __init setup_machine(unsigned int nr)
466 /* can't use cpu_relax() here as it may require MMU setup */; 466 /* can't use cpu_relax() here as it may require MMU setup */;
467} 467}
468 468
469static int __init arm_add_memory(phys_addr_t start, unsigned long size) 469int __init arm_add_memory(phys_addr_t start, unsigned long size)
470{ 470{
471 struct membank *bank = &meminfo.bank[meminfo.nr_banks]; 471 struct membank *bank = &meminfo.bank[meminfo.nr_banks];
472 472
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index e5f6fc428348..26c405421f4e 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -15,6 +15,7 @@
15#include <linux/mman.h> 15#include <linux/mman.h>
16#include <linux/nodemask.h> 16#include <linux/nodemask.h>
17#include <linux/initrd.h> 17#include <linux/initrd.h>
18#include <linux/of_fdt.h>
18#include <linux/highmem.h> 19#include <linux/highmem.h>
19#include <linux/gfp.h> 20#include <linux/gfp.h>
20#include <linux/memblock.h> 21#include <linux/memblock.h>
@@ -71,6 +72,14 @@ static int __init parse_tag_initrd2(const struct tag *tag)
71 72
72__tagtable(ATAG_INITRD2, parse_tag_initrd2); 73__tagtable(ATAG_INITRD2, parse_tag_initrd2);
73 74
75#ifdef CONFIG_OF_FLATTREE
76void __init early_init_dt_setup_initrd_arch(unsigned long start, unsigned long end)
77{
78 phys_initrd_start = start;
79 phys_initrd_size = end - start;
80}
81#endif /* CONFIG_OF_FLATTREE */
82
74/* 83/*
75 * This keeps memory configuration data used by a couple memory 84 * This keeps memory configuration data used by a couple memory
76 * initialization functions, as well as show_mem() for the skipping 85 * initialization functions, as well as show_mem() for the skipping