linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/4] CRIS: add device tree support
@ 2015-02-08 15:35 Rabin Vincent
  2015-02-08 15:35 ` [PATCH 2/4] CRISv32: add irq domains support Rabin Vincent
                   ` (4 more replies)
  0 siblings, 5 replies; 10+ messages in thread
From: Rabin Vincent @ 2015-02-08 15:35 UTC (permalink / raw)
  To: jesper.nilsson; +Cc: linux-cris-kernel, devicetree, linux-kernel, Rabin Vincent

Add support for booting CRIS with a built-in device tree.

Signed-off-by: Rabin Vincent <rabin@rab.in>
---
 arch/cris/Kconfig             |  6 ++++++
 arch/cris/Makefile            |  4 ++++
 arch/cris/boot/dts/Makefile   |  6 ++++++
 arch/cris/kernel/Makefile     |  1 +
 arch/cris/kernel/devicetree.c | 14 ++++++++++++++
 arch/cris/kernel/setup.c      | 13 +++++++++++++
 6 files changed, 44 insertions(+)
 create mode 100644 arch/cris/boot/dts/Makefile
 create mode 100644 arch/cris/kernel/devicetree.c

diff --git a/arch/cris/Kconfig b/arch/cris/Kconfig
index 8474c66..cbbc2dc 100644
--- a/arch/cris/Kconfig
+++ b/arch/cris/Kconfig
@@ -53,11 +53,17 @@ config CRIS
 	select OLD_SIGSUSPEND
 	select OLD_SIGACTION
 	select ARCH_REQUIRE_GPIOLIB
+	select OF
+	select OF_EARLY_FLATTREE
 
 config HZ
 	int
 	default 100
 
+config BUILTIN_DTB
+	string "DTB to build into the kernel image"
+	depends on OF
+
 source "init/Kconfig"
 
 source "kernel/Kconfig.freezer"
diff --git a/arch/cris/Makefile b/arch/cris/Makefile
index 39dc7d0..4a5404b 100644
--- a/arch/cris/Makefile
+++ b/arch/cris/Makefile
@@ -40,6 +40,10 @@ else
 MACH :=
 endif
 
+ifneq ($(CONFIG_BUILTIN_DTB),"")
+core-$(CONFIG_OF) += arch/cris/boot/dts/
+endif
+
 LD = $(CROSS_COMPILE)ld -mcrislinux
 
 OBJCOPYFLAGS := -O binary -R .note -R .comment -S
diff --git a/arch/cris/boot/dts/Makefile b/arch/cris/boot/dts/Makefile
new file mode 100644
index 0000000..faf69fb
--- /dev/null
+++ b/arch/cris/boot/dts/Makefile
@@ -0,0 +1,6 @@
+BUILTIN_DTB := $(patsubst "%",%,$(CONFIG_BUILTIN_DTB)).dtb.o
+ifneq ($(CONFIG_BUILTIN_DTB),"")
+obj-$(CONFIG_OF) += $(BUILTIN_DTB)
+endif
+
+clean-files := *.dtb.S
diff --git a/arch/cris/kernel/Makefile b/arch/cris/kernel/Makefile
index b45640b..edef71f 100644
--- a/arch/cris/kernel/Makefile
+++ b/arch/cris/kernel/Makefile
@@ -7,6 +7,7 @@ CPPFLAGS_vmlinux.lds := -DDRAM_VIRTUAL_BASE=0x$(CONFIG_ETRAX_DRAM_VIRTUAL_BASE)
 extra-y	:= vmlinux.lds
 
 obj-y   := process.o traps.o irq.o ptrace.o setup.o time.o sys_cris.o
+obj-y += devicetree.o
 
 obj-$(CONFIG_MODULES)    += crisksyms.o
 obj-$(CONFIG_MODULES)	 += module.o
diff --git a/arch/cris/kernel/devicetree.c b/arch/cris/kernel/devicetree.c
new file mode 100644
index 0000000..53ff8d7
--- /dev/null
+++ b/arch/cris/kernel/devicetree.c
@@ -0,0 +1,14 @@
+#include <linux/init.h>
+#include <linux/bootmem.h>
+#include <linux/printk.h>
+
+void __init early_init_dt_add_memory_arch(u64 base, u64 size)
+{
+	pr_err("%s(%llx, %llx)\n",
+	       __func__, base, size);
+}
+
+void * __init early_init_dt_alloc_memory_arch(u64 size, u64 align)
+{
+	return alloc_bootmem_align(size, align);
+}
diff --git a/arch/cris/kernel/setup.c b/arch/cris/kernel/setup.c
index 905b70e..f11538e 100644
--- a/arch/cris/kernel/setup.c
+++ b/arch/cris/kernel/setup.c
@@ -19,6 +19,9 @@
 #include <linux/utsname.h>
 #include <linux/pfn.h>
 #include <linux/cpu.h>
+#include <linux/of.h>
+#include <linux/of_fdt.h>
+#include <linux/of_platform.h>
 #include <asm/setup.h>
 #include <arch/system.h>
 
@@ -64,6 +67,8 @@ void __init setup_arch(char **cmdline_p)
 	unsigned long start_pfn, max_pfn;
 	unsigned long memory_start;
 
+	early_init_dt_scan(__dtb_start);
+
 	/* register an initial console printing routine for printk's */
 
 	init_etrax_debug();
@@ -141,6 +146,8 @@ void __init setup_arch(char **cmdline_p)
 
 	reserve_bootmem(PFN_PHYS(start_pfn), bootmap_size, BOOTMEM_DEFAULT);
 
+	unflatten_and_copy_device_tree();
+
 	/* paging_init() sets up the MMU and marks all pages as reserved */
 
 	paging_init();
@@ -204,3 +211,9 @@ static int __init topology_init(void)
 
 subsys_initcall(topology_init);
 
+static int __init cris_of_init(void)
+{
+	of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
+	return 0;
+}
+core_initcall(cris_of_init);
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 2/4] CRISv32: add irq domains support
  2015-02-08 15:35 [PATCH 1/4] CRIS: add device tree support Rabin Vincent
@ 2015-02-08 15:35 ` Rabin Vincent
  2015-02-09  9:40   ` Jesper Nilsson
  2015-02-08 15:35 ` [PATCH 3/4] CRIS: document CRISv32 intc bindings Rabin Vincent
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 10+ messages in thread
From: Rabin Vincent @ 2015-02-08 15:35 UTC (permalink / raw)
  To: jesper.nilsson; +Cc: linux-cris-kernel, devicetree, linux-kernel, Rabin Vincent

Add support for IRQ domains to the CRISv32 interrupt controller.

Signed-off-by: Rabin Vincent <rabin@rab.in>
---
 arch/cris/Kconfig               |  1 +
 arch/cris/arch-v32/kernel/irq.c | 28 +++++++++++++++++++++++++---
 2 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/arch/cris/Kconfig b/arch/cris/Kconfig
index cbbc2dc..66f71df 100644
--- a/arch/cris/Kconfig
+++ b/arch/cris/Kconfig
@@ -55,6 +55,7 @@ config CRIS
 	select ARCH_REQUIRE_GPIOLIB
 	select OF
 	select OF_EARLY_FLATTREE
+	select IRQ_DOMAIN if ETRAX_ARCH_V32
 
 config HZ
 	int
diff --git a/arch/cris/arch-v32/kernel/irq.c b/arch/cris/arch-v32/kernel/irq.c
index 25437ae..bc871d2 100644
--- a/arch/cris/arch-v32/kernel/irq.c
+++ b/arch/cris/arch-v32/kernel/irq.c
@@ -10,6 +10,8 @@
 #include <linux/errno.h>
 #include <linux/init.h>
 #include <linux/profile.h>
+#include <linux/of.h>
+#include <linux/of_irq.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
 #include <linux/threads.h>
@@ -431,6 +433,19 @@ crisv32_do_multiple(struct pt_regs* regs)
 	irq_exit();
 }
 
+static int crisv32_irq_map(struct irq_domain *h, unsigned int virq,
+			   irq_hw_number_t hw_irq_num)
+{
+	irq_set_chip_and_handler(virq, &crisv32_irq_type, handle_simple_irq);
+
+	return 0;
+}
+
+static struct irq_domain_ops crisv32_irq_ops = {
+	.map	= crisv32_irq_map,
+	.xlate	= irq_domain_xlate_onecell,
+};
+
 /*
  * This is called by start_kernel. It fixes the IRQ masks and setup the
  * interrupt vector table to point to bad_interrupt pointers.
@@ -441,6 +456,8 @@ init_IRQ(void)
 	int i;
 	int j;
 	reg_intr_vect_rw_mask vect_mask = {0};
+	struct device_node *np;
+	struct irq_domain *domain;
 
 	/* Clear all interrupts masks. */
 	for (i = 0; i < NBR_REGS; i++)
@@ -449,10 +466,15 @@ init_IRQ(void)
 	for (i = 0; i < 256; i++)
 		etrax_irv->v[i] = weird_irq;
 
-	/* Point all IRQ's to bad handlers. */
+	np = of_find_compatible_node(NULL, NULL, "axis,crisv32-intc");
+	domain = irq_domain_add_legacy(np, NR_IRQS - FIRST_IRQ,
+				       FIRST_IRQ, FIRST_IRQ,
+				       &crisv32_irq_ops, NULL);
+	BUG_ON(!domain);
+	irq_set_default_host(domain);
+	of_node_put(np);
+
 	for (i = FIRST_IRQ, j = 0; j < NR_IRQS; i++, j++) {
-		irq_set_chip_and_handler(j, &crisv32_irq_type,
-					 handle_simple_irq);
 		set_exception_vector(i, interrupt[j]);
 	}
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 3/4] CRIS: document CRISv32 intc bindings
  2015-02-08 15:35 [PATCH 1/4] CRIS: add device tree support Rabin Vincent
  2015-02-08 15:35 ` [PATCH 2/4] CRISv32: add irq domains support Rabin Vincent
@ 2015-02-08 15:35 ` Rabin Vincent
  2015-02-09  9:45   ` Jesper Nilsson
  2015-02-08 15:35 ` [PATCH 4/4] CRIS: add Axis 88 board device tree Rabin Vincent
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 10+ messages in thread
From: Rabin Vincent @ 2015-02-08 15:35 UTC (permalink / raw)
  To: jesper.nilsson; +Cc: linux-cris-kernel, devicetree, linux-kernel, Rabin Vincent

Add the DT bindings documentation for the CRISV32 interrupt controller.

Signed-off-by: Rabin Vincent <rabin@rab.in>
---
 .../interrupt-controller/axis,crisv32-intc.txt         | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/interrupt-controller/axis,crisv32-intc.txt

diff --git a/Documentation/devicetree/bindings/interrupt-controller/axis,crisv32-intc.txt b/Documentation/devicetree/bindings/interrupt-controller/axis,crisv32-intc.txt
new file mode 100644
index 0000000..3726f14
--- /dev/null
+++ b/Documentation/devicetree/bindings/interrupt-controller/axis,crisv32-intc.txt
@@ -0,0 +1,18 @@
+Axis CRISv32 interrupt controller
+
+Required properties:
+- compatible: Compatible property value should be "axis,cris32-intc"
+
+- reg: Physical base address of the controller and length of memory mapped
+       region.
+
+- interrupt-controller : Identifies the node as an interrupt controller
+
+Example:
+
+interrupt-controller {
+	compatible = "axis,crisv32-intc";
+	interrupt-controller;
+	reg = <0xb001c000 0x1000>;
+	#interrupt-cells = <1>;
+};
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 4/4] CRIS: add Axis 88 board device tree
  2015-02-08 15:35 [PATCH 1/4] CRIS: add device tree support Rabin Vincent
  2015-02-08 15:35 ` [PATCH 2/4] CRISv32: add irq domains support Rabin Vincent
  2015-02-08 15:35 ` [PATCH 3/4] CRIS: document CRISv32 intc bindings Rabin Vincent
@ 2015-02-08 15:35 ` Rabin Vincent
  2015-02-09  9:46   ` Jesper Nilsson
  2015-02-09  9:39 ` [PATCH 1/4] CRIS: add device tree support Jesper Nilsson
  2015-02-22 19:42 ` [PATCHv2 1/2] CRISv32: add irq domains support Rabin Vincent
  4 siblings, 1 reply; 10+ messages in thread
From: Rabin Vincent @ 2015-02-08 15:35 UTC (permalink / raw)
  To: jesper.nilsson; +Cc: linux-cris-kernel, devicetree, linux-kernel, Rabin Vincent

Add a minimal device tree for the ETRAX FS SoC and the Axis 88 developer
board.

Signed-off-by: Rabin Vincent <rabin@rab.in>
---
 arch/cris/boot/dts/dev88.dts    | 18 ++++++++++++++++++
 arch/cris/boot/dts/etraxfs.dtsi | 38 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 56 insertions(+)
 create mode 100644 arch/cris/boot/dts/dev88.dts
 create mode 100644 arch/cris/boot/dts/etraxfs.dtsi

diff --git a/arch/cris/boot/dts/dev88.dts b/arch/cris/boot/dts/dev88.dts
new file mode 100644
index 0000000..4fa5a3f
--- /dev/null
+++ b/arch/cris/boot/dts/dev88.dts
@@ -0,0 +1,18 @@
+/dts-v1/;
+
+/include/ "etraxfs.dtsi"
+
+/ {
+	model = "Axis 88 Developer Board";
+	compatible = "axis,dev88";
+
+	aliases {
+		serial0 = &uart0;
+	};
+
+	soc {
+		uart0: serial@b00260000 {
+			status = "okay";
+		};
+	};
+};
diff --git a/arch/cris/boot/dts/etraxfs.dtsi b/arch/cris/boot/dts/etraxfs.dtsi
new file mode 100644
index 0000000..909bced
--- /dev/null
+++ b/arch/cris/boot/dts/etraxfs.dtsi
@@ -0,0 +1,38 @@
+/ {
+	#address-cells = <1>;
+	#size-cells = <1>;
+	interrupt-parent = <&intc>;
+
+	cpus {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		cpu@0 {
+			device_type = "cpu";
+			model = "axis,crisv32";
+			reg = <0>;
+		};
+	};
+
+	soc {
+		compatible = "simple-bus";
+		model = "etraxfs";
+		#address-cells = <1>;
+		#size-cells = <1>;
+		ranges;
+
+		intc: interrupt-controller {
+			compatible = "axis,crisv32-intc";
+			reg = <0xb001c000 0x1000>;
+			interrupt-controller;
+			#interrupt-cells = <1>;
+		};
+
+		serial@b00260000 {
+			compatible = "axis,etraxfs-uart";
+			reg = <0xb0026000 0x1000>;
+			interrupts = <68>;
+			status = "disabled";
+		};
+	};
+};
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/4] CRIS: add device tree support
  2015-02-08 15:35 [PATCH 1/4] CRIS: add device tree support Rabin Vincent
                   ` (2 preceding siblings ...)
  2015-02-08 15:35 ` [PATCH 4/4] CRIS: add Axis 88 board device tree Rabin Vincent
@ 2015-02-09  9:39 ` Jesper Nilsson
  2015-02-22 19:42 ` [PATCHv2 1/2] CRISv32: add irq domains support Rabin Vincent
  4 siblings, 0 replies; 10+ messages in thread
From: Jesper Nilsson @ 2015-02-09  9:39 UTC (permalink / raw)
  To: Rabin Vincent; +Cc: Jesper Nilsson, linux-cris-kernel, devicetree, linux-kernel

On Sun, Feb 08, 2015 at 04:35:42PM +0100, Rabin Vincent wrote:
> Add support for booting CRIS with a built-in device tree.
> 
> Signed-off-by: Rabin Vincent <rabin@rab.in>

Looks good, putting it in the CRIS tree for 3.20.

/^JN - Jesper Nilsson
-- 
               Jesper Nilsson -- jesper.nilsson@axis.com

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/4] CRISv32: add irq domains support
  2015-02-08 15:35 ` [PATCH 2/4] CRISv32: add irq domains support Rabin Vincent
@ 2015-02-09  9:40   ` Jesper Nilsson
  0 siblings, 0 replies; 10+ messages in thread
From: Jesper Nilsson @ 2015-02-09  9:40 UTC (permalink / raw)
  To: Rabin Vincent; +Cc: Jesper Nilsson, linux-cris-kernel, devicetree, linux-kernel

On Sun, Feb 08, 2015 at 04:35:43PM +0100, Rabin Vincent wrote:
> Add support for IRQ domains to the CRISv32 interrupt controller.
> 
> Signed-off-by: Rabin Vincent <rabin@rab.in>

Looks good, putting it in the CRIS tree for 3.20.

/^JN - Jesper Nilsson
-- 
               Jesper Nilsson -- jesper.nilsson@axis.com

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 3/4] CRIS: document CRISv32 intc bindings
  2015-02-08 15:35 ` [PATCH 3/4] CRIS: document CRISv32 intc bindings Rabin Vincent
@ 2015-02-09  9:45   ` Jesper Nilsson
  0 siblings, 0 replies; 10+ messages in thread
From: Jesper Nilsson @ 2015-02-09  9:45 UTC (permalink / raw)
  To: Rabin Vincent; +Cc: Jesper Nilsson, linux-cris-kernel, devicetree, linux-kernel

On Sun, Feb 08, 2015 at 04:35:44PM +0100, Rabin Vincent wrote:
> Add the DT bindings documentation for the CRISV32 interrupt controller.
> 
> Signed-off-by: Rabin Vincent <rabin@rab.in>

Looks good, putting it in the CRIS tree for 3.20.

/^JN - Jesper Nilsson
-- 
               Jesper Nilsson -- jesper.nilsson@axis.com

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 4/4] CRIS: add Axis 88 board device tree
  2015-02-08 15:35 ` [PATCH 4/4] CRIS: add Axis 88 board device tree Rabin Vincent
@ 2015-02-09  9:46   ` Jesper Nilsson
  0 siblings, 0 replies; 10+ messages in thread
From: Jesper Nilsson @ 2015-02-09  9:46 UTC (permalink / raw)
  To: Rabin Vincent; +Cc: Jesper Nilsson, linux-cris-kernel, devicetree, linux-kernel

On Sun, Feb 08, 2015 at 04:35:45PM +0100, Rabin Vincent wrote:
> Add a minimal device tree for the ETRAX FS SoC and the Axis 88 developer
> board.
> 
> Signed-off-by: Rabin Vincent <rabin@rab.in>

Looks good, putting it in the CRIS tree for 3.20.

/^JN - Jesper Nilsson
-- 
               Jesper Nilsson -- jesper.nilsson@axis.com

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCHv2 1/2] CRISv32: add irq domains support
  2015-02-08 15:35 [PATCH 1/4] CRIS: add device tree support Rabin Vincent
                   ` (3 preceding siblings ...)
  2015-02-09  9:39 ` [PATCH 1/4] CRIS: add device tree support Jesper Nilsson
@ 2015-02-22 19:42 ` Rabin Vincent
  2015-02-22 19:42   ` [PATCHv2 2/2] CRISv32: add device tree support Rabin Vincent
  4 siblings, 1 reply; 10+ messages in thread
From: Rabin Vincent @ 2015-02-22 19:42 UTC (permalink / raw)
  To: jesper.nilsson; +Cc: linux-kernel, linux-cris-kernel, devicetree, Rabin Vincent

Add support for IRQ domains to the CRISv32 interrupt controller.

Signed-off-by: Rabin Vincent <rabin@rab.in>
---
V2: No changes, but reorder so that this patch is before the OF patch, to avoid
build errors.

 arch/cris/Kconfig               |  1 +
 arch/cris/arch-v32/kernel/irq.c | 28 +++++++++++++++++++++++++---
 2 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/arch/cris/Kconfig b/arch/cris/Kconfig
index 8474c66..3c94c96 100644
--- a/arch/cris/Kconfig
+++ b/arch/cris/Kconfig
@@ -53,6 +53,7 @@ config CRIS
 	select OLD_SIGSUSPEND
 	select OLD_SIGACTION
 	select ARCH_REQUIRE_GPIOLIB
+	select IRQ_DOMAIN if ETRAX_ARCH_V32
 
 config HZ
 	int
diff --git a/arch/cris/arch-v32/kernel/irq.c b/arch/cris/arch-v32/kernel/irq.c
index 25437ae..bc871d2 100644
--- a/arch/cris/arch-v32/kernel/irq.c
+++ b/arch/cris/arch-v32/kernel/irq.c
@@ -10,6 +10,8 @@
 #include <linux/errno.h>
 #include <linux/init.h>
 #include <linux/profile.h>
+#include <linux/of.h>
+#include <linux/of_irq.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
 #include <linux/threads.h>
@@ -431,6 +433,19 @@ crisv32_do_multiple(struct pt_regs* regs)
 	irq_exit();
 }
 
+static int crisv32_irq_map(struct irq_domain *h, unsigned int virq,
+			   irq_hw_number_t hw_irq_num)
+{
+	irq_set_chip_and_handler(virq, &crisv32_irq_type, handle_simple_irq);
+
+	return 0;
+}
+
+static struct irq_domain_ops crisv32_irq_ops = {
+	.map	= crisv32_irq_map,
+	.xlate	= irq_domain_xlate_onecell,
+};
+
 /*
  * This is called by start_kernel. It fixes the IRQ masks and setup the
  * interrupt vector table to point to bad_interrupt pointers.
@@ -441,6 +456,8 @@ init_IRQ(void)
 	int i;
 	int j;
 	reg_intr_vect_rw_mask vect_mask = {0};
+	struct device_node *np;
+	struct irq_domain *domain;
 
 	/* Clear all interrupts masks. */
 	for (i = 0; i < NBR_REGS; i++)
@@ -449,10 +466,15 @@ init_IRQ(void)
 	for (i = 0; i < 256; i++)
 		etrax_irv->v[i] = weird_irq;
 
-	/* Point all IRQ's to bad handlers. */
+	np = of_find_compatible_node(NULL, NULL, "axis,crisv32-intc");
+	domain = irq_domain_add_legacy(np, NR_IRQS - FIRST_IRQ,
+				       FIRST_IRQ, FIRST_IRQ,
+				       &crisv32_irq_ops, NULL);
+	BUG_ON(!domain);
+	irq_set_default_host(domain);
+	of_node_put(np);
+
 	for (i = FIRST_IRQ, j = 0; j < NR_IRQS; i++, j++) {
-		irq_set_chip_and_handler(j, &crisv32_irq_type,
-					 handle_simple_irq);
 		set_exception_vector(i, interrupt[j]);
 	}
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCHv2 2/2] CRISv32: add device tree support
  2015-02-22 19:42 ` [PATCHv2 1/2] CRISv32: add irq domains support Rabin Vincent
@ 2015-02-22 19:42   ` Rabin Vincent
  0 siblings, 0 replies; 10+ messages in thread
From: Rabin Vincent @ 2015-02-22 19:42 UTC (permalink / raw)
  To: jesper.nilsson; +Cc: linux-kernel, linux-cris-kernel, devicetree, Rabin Vincent

Add support for booting CRISv32 with a built-in device tree.

Signed-off-by: Rabin Vincent <rabin@rab.in>
---
V2: Reorder to be after irqdomains patch and restrict to CRISv32 for now to
avoid build errors on CRISv10.

 arch/cris/Kconfig             |  6 ++++++
 arch/cris/Makefile            |  4 ++++
 arch/cris/boot/dts/Makefile   |  6 ++++++
 arch/cris/kernel/Makefile     |  1 +
 arch/cris/kernel/devicetree.c | 14 ++++++++++++++
 arch/cris/kernel/setup.c      | 15 +++++++++++++++
 6 files changed, 46 insertions(+)
 create mode 100644 arch/cris/boot/dts/Makefile
 create mode 100644 arch/cris/kernel/devicetree.c

diff --git a/arch/cris/Kconfig b/arch/cris/Kconfig
index 3c94c96..eb11774 100644
--- a/arch/cris/Kconfig
+++ b/arch/cris/Kconfig
@@ -54,11 +54,17 @@ config CRIS
 	select OLD_SIGACTION
 	select ARCH_REQUIRE_GPIOLIB
 	select IRQ_DOMAIN if ETRAX_ARCH_V32
+	select OF if ETRAX_ARCH_V32
+	select OF_EARLY_FLATTREE if ETRAX_ARCH_V32
 
 config HZ
 	int
 	default 100
 
+config BUILTIN_DTB
+	string "DTB to build into the kernel image"
+	depends on OF
+
 source "init/Kconfig"
 
 source "kernel/Kconfig.freezer"
diff --git a/arch/cris/Makefile b/arch/cris/Makefile
index 39dc7d0..4a5404b 100644
--- a/arch/cris/Makefile
+++ b/arch/cris/Makefile
@@ -40,6 +40,10 @@ else
 MACH :=
 endif
 
+ifneq ($(CONFIG_BUILTIN_DTB),"")
+core-$(CONFIG_OF) += arch/cris/boot/dts/
+endif
+
 LD = $(CROSS_COMPILE)ld -mcrislinux
 
 OBJCOPYFLAGS := -O binary -R .note -R .comment -S
diff --git a/arch/cris/boot/dts/Makefile b/arch/cris/boot/dts/Makefile
new file mode 100644
index 0000000..faf69fb
--- /dev/null
+++ b/arch/cris/boot/dts/Makefile
@@ -0,0 +1,6 @@
+BUILTIN_DTB := $(patsubst "%",%,$(CONFIG_BUILTIN_DTB)).dtb.o
+ifneq ($(CONFIG_BUILTIN_DTB),"")
+obj-$(CONFIG_OF) += $(BUILTIN_DTB)
+endif
+
+clean-files := *.dtb.S
diff --git a/arch/cris/kernel/Makefile b/arch/cris/kernel/Makefile
index b45640b..edef71f 100644
--- a/arch/cris/kernel/Makefile
+++ b/arch/cris/kernel/Makefile
@@ -7,6 +7,7 @@ CPPFLAGS_vmlinux.lds := -DDRAM_VIRTUAL_BASE=0x$(CONFIG_ETRAX_DRAM_VIRTUAL_BASE)
 extra-y	:= vmlinux.lds
 
 obj-y   := process.o traps.o irq.o ptrace.o setup.o time.o sys_cris.o
+obj-y += devicetree.o
 
 obj-$(CONFIG_MODULES)    += crisksyms.o
 obj-$(CONFIG_MODULES)	 += module.o
diff --git a/arch/cris/kernel/devicetree.c b/arch/cris/kernel/devicetree.c
new file mode 100644
index 0000000..53ff8d7
--- /dev/null
+++ b/arch/cris/kernel/devicetree.c
@@ -0,0 +1,14 @@
+#include <linux/init.h>
+#include <linux/bootmem.h>
+#include <linux/printk.h>
+
+void __init early_init_dt_add_memory_arch(u64 base, u64 size)
+{
+	pr_err("%s(%llx, %llx)\n",
+	       __func__, base, size);
+}
+
+void * __init early_init_dt_alloc_memory_arch(u64 size, u64 align)
+{
+	return alloc_bootmem_align(size, align);
+}
diff --git a/arch/cris/kernel/setup.c b/arch/cris/kernel/setup.c
index 905b70e..bb12aa9 100644
--- a/arch/cris/kernel/setup.c
+++ b/arch/cris/kernel/setup.c
@@ -19,6 +19,9 @@
 #include <linux/utsname.h>
 #include <linux/pfn.h>
 #include <linux/cpu.h>
+#include <linux/of.h>
+#include <linux/of_fdt.h>
+#include <linux/of_platform.h>
 #include <asm/setup.h>
 #include <arch/system.h>
 
@@ -64,6 +67,10 @@ void __init setup_arch(char **cmdline_p)
 	unsigned long start_pfn, max_pfn;
 	unsigned long memory_start;
 
+#ifdef CONFIG_OF
+	early_init_dt_scan(__dtb_start);
+#endif
+
 	/* register an initial console printing routine for printk's */
 
 	init_etrax_debug();
@@ -141,6 +148,8 @@ void __init setup_arch(char **cmdline_p)
 
 	reserve_bootmem(PFN_PHYS(start_pfn), bootmap_size, BOOTMEM_DEFAULT);
 
+	unflatten_and_copy_device_tree();
+
 	/* paging_init() sets up the MMU and marks all pages as reserved */
 
 	paging_init();
@@ -204,3 +213,9 @@ static int __init topology_init(void)
 
 subsys_initcall(topology_init);
 
+static int __init cris_of_init(void)
+{
+	of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
+	return 0;
+}
+core_initcall(cris_of_init);
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2015-02-22 19:43 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-02-08 15:35 [PATCH 1/4] CRIS: add device tree support Rabin Vincent
2015-02-08 15:35 ` [PATCH 2/4] CRISv32: add irq domains support Rabin Vincent
2015-02-09  9:40   ` Jesper Nilsson
2015-02-08 15:35 ` [PATCH 3/4] CRIS: document CRISv32 intc bindings Rabin Vincent
2015-02-09  9:45   ` Jesper Nilsson
2015-02-08 15:35 ` [PATCH 4/4] CRIS: add Axis 88 board device tree Rabin Vincent
2015-02-09  9:46   ` Jesper Nilsson
2015-02-09  9:39 ` [PATCH 1/4] CRIS: add device tree support Jesper Nilsson
2015-02-22 19:42 ` [PATCHv2 1/2] CRISv32: add irq domains support Rabin Vincent
2015-02-22 19:42   ` [PATCHv2 2/2] CRISv32: add device tree support Rabin Vincent

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).