aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arc/Kconfig9
-rw-r--r--arch/arc/Makefile9
-rw-r--r--arch/arc/boot/dts/Makefile13
-rw-r--r--arch/arc/boot/dts/skeleton.dts10
-rw-r--r--arch/arc/boot/dts/skeleton.dtsi21
-rw-r--r--arch/arc/include/asm/prom.h15
-rw-r--r--arch/arc/include/asm/sections.h1
-rw-r--r--arch/arc/kernel/Makefile1
-rw-r--r--arch/arc/kernel/devtree.c64
-rw-r--r--arch/arc/kernel/setup.c9
-rw-r--r--arch/arc/mm/init.c13
11 files changed, 165 insertions, 0 deletions
diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig
index a3538493e353..76668579b543 100644
--- a/arch/arc/Kconfig
+++ b/arch/arc/Kconfig
@@ -24,8 +24,11 @@ config ARC
24 select GENERIC_SMP_IDLE_THREAD 24 select GENERIC_SMP_IDLE_THREAD
25 select HAVE_GENERIC_HARDIRQS 25 select HAVE_GENERIC_HARDIRQS
26 select HAVE_MEMBLOCK 26 select HAVE_MEMBLOCK
27 select IRQ_DOMAIN
27 select MODULES_USE_ELF_RELA 28 select MODULES_USE_ELF_RELA
28 select NO_BOOTMEM 29 select NO_BOOTMEM
30 select OF
31 select OF_EARLY_FLATTREE
29 32
30config SCHED_OMIT_FRAME_POINTER 33config SCHED_OMIT_FRAME_POINTER
31 def_bool y 34 def_bool y
@@ -320,6 +323,12 @@ config CMDLINE_UBOOT
320 to it. kernel startup code will copy the string into cmdline buffer 323 to it. kernel startup code will copy the string into cmdline buffer
321 and also append CONFIG_CMDLINE. 324 and also append CONFIG_CMDLINE.
322 325
326config ARC_BUILTIN_DTB_NAME
327 string "Built in DTB"
328 help
329 Set the name of the DTB to embed in the vmlinux binary
330 Leaving it blank selects the minimal "skeleton" dtb
331
323source "kernel/Kconfig.preempt" 332source "kernel/Kconfig.preempt"
324 333
325endmenu # "ARC Architecture Configuration" 334endmenu # "ARC Architecture Configuration"
diff --git a/arch/arc/Makefile b/arch/arc/Makefile
index 4d52a3bb68a0..29b5fcd9c4b6 100644
--- a/arch/arc/Makefile
+++ b/arch/arc/Makefile
@@ -83,6 +83,9 @@ head-y := arch/arc/kernel/head.o
83# See arch/arc/Kbuild for content of core part of the kernel 83# See arch/arc/Kbuild for content of core part of the kernel
84core-y += arch/arc/ 84core-y += arch/arc/
85 85
86# w/o this dtb won't embed into kernel binary
87core-y += arch/arc/boot/dts/
88
86# w/o this ifneq, make ARCH=arc clean was crapping out 89# w/o this ifneq, make ARCH=arc clean was crapping out
87ifneq ($(platform-y),) 90ifneq ($(platform-y),)
88core-y += arch/arc/plat-$(PLATFORM)/ 91core-y += arch/arc/plat-$(PLATFORM)/
@@ -101,6 +104,12 @@ bootpImage: vmlinux
101uImage: vmlinux 104uImage: vmlinux
102 $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ 105 $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
103 106
107%.dtb %.dtb.S %.dtb.o: scripts
108 $(Q)$(MAKE) $(build)=$(boot)/dts $(boot)/dts/$@
109
110dtbs: scripts
111 $(Q)$(MAKE) $(build)=$(boot)/dts dtbs
112
104archclean: 113archclean:
105 $(Q)$(MAKE) $(clean)=$(boot) 114 $(Q)$(MAKE) $(clean)=$(boot)
106 115
diff --git a/arch/arc/boot/dts/Makefile b/arch/arc/boot/dts/Makefile
new file mode 100644
index 000000000000..17dc7b8b05fa
--- /dev/null
+++ b/arch/arc/boot/dts/Makefile
@@ -0,0 +1,13 @@
1# Built-in dtb
2builtindtb-y := skeleton
3
4ifneq ($(CONFIG_ARC_BUILTIN_DTB_NAME),"")
5 builtindtb-y := $(patsubst "%",%,$(CONFIG_ARC_BUILTIN_DTB_NAME))
6endif
7
8obj-y += $(builtindtb-y).dtb.o
9targets += $(builtindtb-y).dtb
10
11dtbs: $(addprefix $(obj)/, $(builtindtb-y).dtb)
12
13clean-files := *.dtb
diff --git a/arch/arc/boot/dts/skeleton.dts b/arch/arc/boot/dts/skeleton.dts
new file mode 100644
index 000000000000..25a84fb5b3dc
--- /dev/null
+++ b/arch/arc/boot/dts/skeleton.dts
@@ -0,0 +1,10 @@
1/*
2 * Copyright (C) 2012 Synopsys, Inc. (www.synopsys.com)
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 */
8/dts-v1/;
9
10/include/ "skeleton.dtsi"
diff --git a/arch/arc/boot/dts/skeleton.dtsi b/arch/arc/boot/dts/skeleton.dtsi
new file mode 100644
index 000000000000..9b357d802a10
--- /dev/null
+++ b/arch/arc/boot/dts/skeleton.dtsi
@@ -0,0 +1,21 @@
1/*
2 * Copyright (C) 2012 Synopsys, Inc. (www.synopsys.com)
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 */
8
9/*
10 * Skeleton device tree; the bare minimum needed to boot; just include and
11 * add a compatible value.
12 */
13
14/ {
15 compatible = "snps,arc";
16 #address-cells = <1>;
17 #size-cells = <1>;
18 chosen { };
19 aliases { };
20 memory { device_type = "memory"; reg = <0 0>; };
21};
diff --git a/arch/arc/include/asm/prom.h b/arch/arc/include/asm/prom.h
new file mode 100644
index 000000000000..f54489bc4eca
--- /dev/null
+++ b/arch/arc/include/asm/prom.h
@@ -0,0 +1,15 @@
1/*
2 * Copyright (C) 2012 Synopsys, Inc. (www.synopsys.com)
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 */
8
9#ifndef _ASM_ARC_PROM_H_
10#define _ASM_ARC_PROM_H_
11
12#define HAVE_ARCH_DEVTREE_FIXUPS
13extern int __init setup_machine_fdt(void *dt);
14
15#endif
diff --git a/arch/arc/include/asm/sections.h b/arch/arc/include/asm/sections.h
index fc15f2e1a12e..6fc1159dfefe 100644
--- a/arch/arc/include/asm/sections.h
+++ b/arch/arc/include/asm/sections.h
@@ -13,5 +13,6 @@
13 13
14extern char _int_vec_base_lds[]; 14extern char _int_vec_base_lds[];
15extern char __arc_dccm_base[]; 15extern char __arc_dccm_base[];
16extern char __dtb_start[];
16 17
17#endif 18#endif
diff --git a/arch/arc/kernel/Makefile b/arch/arc/kernel/Makefile
index 6d834312f755..c9ec0662a4ec 100644
--- a/arch/arc/kernel/Makefile
+++ b/arch/arc/kernel/Makefile
@@ -7,6 +7,7 @@
7 7
8obj-y := arcksyms.o setup.o irq.o time.o reset.o ptrace.o entry.o process.o 8obj-y := arcksyms.o setup.o irq.o time.o reset.o ptrace.o entry.o process.o
9obj-y += signal.o traps.o sys.o troubleshoot.o stacktrace.o clk.o 9obj-y += signal.o traps.o sys.o troubleshoot.o stacktrace.o clk.o
10obj-y += devtree.o
10 11
11obj-$(CONFIG_ARC_FPU_SAVE_RESTORE) += fpu.o 12obj-$(CONFIG_ARC_FPU_SAVE_RESTORE) += fpu.o
12CFLAGS_fpu.o += -mdpfp 13CFLAGS_fpu.o += -mdpfp
diff --git a/arch/arc/kernel/devtree.c b/arch/arc/kernel/devtree.c
new file mode 100644
index 000000000000..48e157efad15
--- /dev/null
+++ b/arch/arc/kernel/devtree.c
@@ -0,0 +1,64 @@
1/*
2 * Copyright (C) 2012 Synopsys, Inc. (www.synopsys.com)
3 *
4 * Based on reduced version of METAG
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
12#include <linux/init.h>
13#include <linux/reboot.h>
14#include <linux/memblock.h>
15#include <linux/of.h>
16#include <linux/of_fdt.h>
17#include <asm/prom.h>
18
19/* called from unflatten_device_tree() to bootstrap devicetree itself */
20void * __init early_init_dt_alloc_memory_arch(u64 size, u64 align)
21{
22 return __va(memblock_alloc(size, align));
23}
24
25/**
26 * setup_machine_fdt - Machine setup when an dtb was passed to the kernel
27 * @dt: virtual address pointer to dt blob
28 *
29 * If a dtb was passed to the kernel, then use it to choose the correct
30 * machine_desc and to setup the system.
31 */
32int __init setup_machine_fdt(void *dt)
33{
34 struct boot_param_header *devtree = dt;
35 unsigned long dt_root;
36 char *model, *compat;
37 char manufacturer[16];
38
39 /* check device tree validity */
40 if (be32_to_cpu(devtree->magic) != OF_DT_HEADER)
41 return 1;
42
43 /* Search the mdescs for the 'best' compatible value match */
44 initial_boot_params = devtree;
45 dt_root = of_get_flat_dt_root();
46
47 /* compat = "<manufacturer>,<model>" */
48 compat = of_get_flat_dt_prop(dt_root, "compatible", NULL);
49 if (!compat)
50 compat = "<unknown>";
51
52 model = strchr(compat, ',');
53 if (model)
54 model++;
55
56 strlcpy(manufacturer, compat, model ? model - compat : strlen(compat));
57
58 pr_info("Board \"%s\" from %s (Manufacturer)\n", model, manufacturer);
59
60 /* Retrieve various information from the /chosen node */
61 of_scan_flat_dt(early_init_dt_scan_chosen, boot_command_line);
62
63 return 0;
64}
diff --git a/arch/arc/kernel/setup.c b/arch/arc/kernel/setup.c
index 82ac20603398..27aebd6d9513 100644
--- a/arch/arc/kernel/setup.c
+++ b/arch/arc/kernel/setup.c
@@ -13,6 +13,8 @@
13#include <linux/console.h> 13#include <linux/console.h>
14#include <linux/module.h> 14#include <linux/module.h>
15#include <linux/cpu.h> 15#include <linux/cpu.h>
16#include <linux/of_fdt.h>
17#include <asm/sections.h>
16#include <asm/arcregs.h> 18#include <asm/arcregs.h>
17#include <asm/tlb.h> 19#include <asm/tlb.h>
18#include <asm/cache.h> 20#include <asm/cache.h>
@@ -20,6 +22,7 @@
20#include <asm/page.h> 22#include <asm/page.h>
21#include <asm/irq.h> 23#include <asm/irq.h>
22#include <asm/arcregs.h> 24#include <asm/arcregs.h>
25#include <asm/prom.h>
23 26
24#define FIX_PTR(x) __asm__ __volatile__(";" : "+r"(x)) 27#define FIX_PTR(x) __asm__ __volatile__(";" : "+r"(x))
25 28
@@ -57,6 +60,8 @@ void __init __attribute__((weak)) arc_platform_early_init(void)
57 60
58void __init setup_arch(char **cmdline_p) 61void __init setup_arch(char **cmdline_p)
59{ 62{
63 int rc;
64
60#ifdef CONFIG_CMDLINE_UBOOT 65#ifdef CONFIG_CMDLINE_UBOOT
61 /* Make sure that a whitespace is inserted before */ 66 /* Make sure that a whitespace is inserted before */
62 strlcat(command_line, " ", sizeof(command_line)); 67 strlcat(command_line, " ", sizeof(command_line));
@@ -71,6 +76,8 @@ void __init setup_arch(char **cmdline_p)
71 strlcpy(boot_command_line, command_line, COMMAND_LINE_SIZE); 76 strlcpy(boot_command_line, command_line, COMMAND_LINE_SIZE);
72 *cmdline_p = command_line; 77 *cmdline_p = command_line;
73 78
79 rc = setup_machine_fdt(__dtb_start);
80
74 /* To force early parsing of things like mem=xxx */ 81 /* To force early parsing of things like mem=xxx */
75 parse_early_param(); 82 parse_early_param();
76 83
@@ -81,6 +88,8 @@ void __init setup_arch(char **cmdline_p)
81 88
82 setup_arch_memory(); 89 setup_arch_memory();
83 90
91 unflatten_device_tree();
92
84 /* Can be issue if someone passes cmd line arg "ro" 93 /* Can be issue if someone passes cmd line arg "ro"
85 * But that is unlikely so keeping it as it is 94 * But that is unlikely so keeping it as it is
86 */ 95 */
diff --git a/arch/arc/mm/init.c b/arch/arc/mm/init.c
index 63da3478521f..682cf5740483 100644
--- a/arch/arc/mm/init.c
+++ b/arch/arc/mm/init.c
@@ -39,6 +39,11 @@ static int __init setup_mem_sz(char *str)
39} 39}
40early_param("mem", setup_mem_sz); 40early_param("mem", setup_mem_sz);
41 41
42void __init early_init_dt_add_memory_arch(u64 base, u64 size)
43{
44 pr_err("%s(%llx, %llx)\n", __func__, base, size);
45}
46
42/* 47/*
43 * First memory setup routine called from setup_arch() 48 * First memory setup routine called from setup_arch()
44 * 1. setup swapper's mm @init_mm 49 * 1. setup swapper's mm @init_mm
@@ -169,3 +174,11 @@ void __init free_initrd_mem(unsigned long start, unsigned long end)
169 free_init_pages("initrd memory", start, end); 174 free_init_pages("initrd memory", start, end);
170} 175}
171#endif 176#endif
177
178#ifdef CONFIG_OF_FLATTREE
179void __init early_init_dt_setup_initrd_arch(unsigned long start,
180 unsigned long end)
181{
182 pr_err("%s(%lx, %lx)\n", __func__, start, end);
183}
184#endif /* CONFIG_OF_FLATTREE */