All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] of/flattree: Eliminate need to provide early_init_dt_scan_chosen_arch
@ 2010-10-13  6:44 ` Grant Likely
  0 siblings, 0 replies; 12+ messages in thread
From: Grant Likely @ 2010-10-13  6:44 UTC (permalink / raw)
  To: benh, dediao, ralf
  Cc: linux-mips, monstr, dvomlehn, devicetree-discuss, ddaney

This patch refactors the early init parsing of the chosen node so that
architectures aren't forced to provide an empty implementation of
early_init_dt_scan_chosen_arch.  Instead, if an architecture wants to
do something different, it can either use a wrapper function around
early_init_dt_scan_chosen(), or it can replace it altogether.

This patch was written in preparation to adding device tree support to
both x86 ad MIPS.

Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
---
 arch/microblaze/kernel/prom.c |    5 -----
 arch/powerpc/kernel/prom.c    |   12 ++++++++++--
 drivers/of/fdt.c              |    2 --
 include/linux/of_fdt.h        |    2 +-
 4 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/arch/microblaze/kernel/prom.c b/arch/microblaze/kernel/prom.c
index 427b13b..bacbd3d 100644
--- a/arch/microblaze/kernel/prom.c
+++ b/arch/microblaze/kernel/prom.c
@@ -42,11 +42,6 @@
 #include <asm/sections.h>
 #include <asm/pci-bridge.h>
 
-void __init early_init_dt_scan_chosen_arch(unsigned long node)
-{
-	/* No Microblaze specific code here */
-}
-
 void __init early_init_dt_add_memory_arch(u64 base, u64 size)
 {
 	memblock_add(base, size);
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
index fed9bf6..e296aae 100644
--- a/arch/powerpc/kernel/prom.c
+++ b/arch/powerpc/kernel/prom.c
@@ -363,10 +363,15 @@ static int __init early_init_dt_scan_cpus(unsigned long node,
 	return 0;
 }
 
-void __init early_init_dt_scan_chosen_arch(unsigned long node)
+int __init early_init_dt_scan_chosen_ppc(unsigned long node, const char *uname,
+					 int depth, void *data)
 {
 	unsigned long *lprop;
 
+	/* Use common scan routine to determine if this is the chosen node */
+	if (early_init_dt_scan_chosen(node, uname, depth, data) == 0)
+		return 0;
+
 #ifdef CONFIG_PPC64
 	/* check if iommu is forced on or off */
 	if (of_get_flat_dt_prop(node, "linux,iommu-off", NULL) != NULL)
@@ -398,6 +403,9 @@ void __init early_init_dt_scan_chosen_arch(unsigned long node)
 	if (lprop)
 		crashk_res.end = crashk_res.start + *lprop - 1;
 #endif
+
+	/* break now */
+	return 1;
 }
 
 #ifdef CONFIG_PPC_PSERIES
@@ -679,7 +687,7 @@ void __init early_init_devtree(void *params)
 	 * device-tree, including the platform type, initrd location and
 	 * size, TCE reserve, and more ...
 	 */
-	of_scan_flat_dt(early_init_dt_scan_chosen, NULL);
+	of_scan_flat_dt(early_init_dt_scan_chosen_ppc, NULL);
 
 	/* Scan memory nodes and rebuild MEMBLOCKs */
 	memblock_init();
diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
index 65da5ae..c1360e0 100644
--- a/drivers/of/fdt.c
+++ b/drivers/of/fdt.c
@@ -533,8 +533,6 @@ int __init early_init_dt_scan_chosen(unsigned long node, const char *uname,
 		strlcpy(cmd_line, CONFIG_CMDLINE, COMMAND_LINE_SIZE);
 #endif /* CONFIG_CMDLINE */
 
-	early_init_dt_scan_chosen_arch(node);
-
 	pr_debug("Command line is: %s\n", cmd_line);
 
 	/* break now */
diff --git a/include/linux/of_fdt.h b/include/linux/of_fdt.h
index 71e1a91..7bbf5b3 100644
--- a/include/linux/of_fdt.h
+++ b/include/linux/of_fdt.h
@@ -72,7 +72,7 @@ extern void *of_get_flat_dt_prop(unsigned long node, const char *name,
 				 unsigned long *size);
 extern int of_flat_dt_is_compatible(unsigned long node, const char *name);
 extern unsigned long of_get_flat_dt_root(void);
-extern void early_init_dt_scan_chosen_arch(unsigned long node);
+
 extern int early_init_dt_scan_chosen(unsigned long node, const char *uname,
 				     int depth, void *data);
 extern void early_init_dt_check_for_initrd(unsigned long node);

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

* [PATCH 1/2] of/flattree: Eliminate need to provide early_init_dt_scan_chosen_arch
@ 2010-10-13  6:44 ` Grant Likely
  0 siblings, 0 replies; 12+ messages in thread
From: Grant Likely @ 2010-10-13  6:44 UTC (permalink / raw)
  To: benh-XVmvHMARGAS8U2dJNN8I7kB+6BGkLq7r,
	dediao-FYB4Gu1CFyUAvxtiuMwx3w, ralf-6z/3iImG2C8G8FEW9MqTrA
  Cc: linux-mips-6z/3iImG2C8G8FEW9MqTrA,
	ddaney-M3mlKVOIwJVv6pq1l3V1OdBPR1lH4CV8,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
	dvomlehn-FYB4Gu1CFyUAvxtiuMwx3w

This patch refactors the early init parsing of the chosen node so that
architectures aren't forced to provide an empty implementation of
early_init_dt_scan_chosen_arch.  Instead, if an architecture wants to
do something different, it can either use a wrapper function around
early_init_dt_scan_chosen(), or it can replace it altogether.

This patch was written in preparation to adding device tree support to
both x86 ad MIPS.

Signed-off-by: Grant Likely <grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>
---
 arch/microblaze/kernel/prom.c |    5 -----
 arch/powerpc/kernel/prom.c    |   12 ++++++++++--
 drivers/of/fdt.c              |    2 --
 include/linux/of_fdt.h        |    2 +-
 4 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/arch/microblaze/kernel/prom.c b/arch/microblaze/kernel/prom.c
index 427b13b..bacbd3d 100644
--- a/arch/microblaze/kernel/prom.c
+++ b/arch/microblaze/kernel/prom.c
@@ -42,11 +42,6 @@
 #include <asm/sections.h>
 #include <asm/pci-bridge.h>
 
-void __init early_init_dt_scan_chosen_arch(unsigned long node)
-{
-	/* No Microblaze specific code here */
-}
-
 void __init early_init_dt_add_memory_arch(u64 base, u64 size)
 {
 	memblock_add(base, size);
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
index fed9bf6..e296aae 100644
--- a/arch/powerpc/kernel/prom.c
+++ b/arch/powerpc/kernel/prom.c
@@ -363,10 +363,15 @@ static int __init early_init_dt_scan_cpus(unsigned long node,
 	return 0;
 }
 
-void __init early_init_dt_scan_chosen_arch(unsigned long node)
+int __init early_init_dt_scan_chosen_ppc(unsigned long node, const char *uname,
+					 int depth, void *data)
 {
 	unsigned long *lprop;
 
+	/* Use common scan routine to determine if this is the chosen node */
+	if (early_init_dt_scan_chosen(node, uname, depth, data) == 0)
+		return 0;
+
 #ifdef CONFIG_PPC64
 	/* check if iommu is forced on or off */
 	if (of_get_flat_dt_prop(node, "linux,iommu-off", NULL) != NULL)
@@ -398,6 +403,9 @@ void __init early_init_dt_scan_chosen_arch(unsigned long node)
 	if (lprop)
 		crashk_res.end = crashk_res.start + *lprop - 1;
 #endif
+
+	/* break now */
+	return 1;
 }
 
 #ifdef CONFIG_PPC_PSERIES
@@ -679,7 +687,7 @@ void __init early_init_devtree(void *params)
 	 * device-tree, including the platform type, initrd location and
 	 * size, TCE reserve, and more ...
 	 */
-	of_scan_flat_dt(early_init_dt_scan_chosen, NULL);
+	of_scan_flat_dt(early_init_dt_scan_chosen_ppc, NULL);
 
 	/* Scan memory nodes and rebuild MEMBLOCKs */
 	memblock_init();
diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
index 65da5ae..c1360e0 100644
--- a/drivers/of/fdt.c
+++ b/drivers/of/fdt.c
@@ -533,8 +533,6 @@ int __init early_init_dt_scan_chosen(unsigned long node, const char *uname,
 		strlcpy(cmd_line, CONFIG_CMDLINE, COMMAND_LINE_SIZE);
 #endif /* CONFIG_CMDLINE */
 
-	early_init_dt_scan_chosen_arch(node);
-
 	pr_debug("Command line is: %s\n", cmd_line);
 
 	/* break now */
diff --git a/include/linux/of_fdt.h b/include/linux/of_fdt.h
index 71e1a91..7bbf5b3 100644
--- a/include/linux/of_fdt.h
+++ b/include/linux/of_fdt.h
@@ -72,7 +72,7 @@ extern void *of_get_flat_dt_prop(unsigned long node, const char *name,
 				 unsigned long *size);
 extern int of_flat_dt_is_compatible(unsigned long node, const char *name);
 extern unsigned long of_get_flat_dt_root(void);
-extern void early_init_dt_scan_chosen_arch(unsigned long node);
+
 extern int early_init_dt_scan_chosen(unsigned long node, const char *uname,
 				     int depth, void *data);
 extern void early_init_dt_check_for_initrd(unsigned long node);

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

* [PATCH 2/2 RFC] of/mips: Add device tree support to MIPS
@ 2010-10-13  6:48   ` Grant Likely
  0 siblings, 0 replies; 12+ messages in thread
From: Grant Likely @ 2010-10-13  6:48 UTC (permalink / raw)
  To: benh, dediao, ralf
  Cc: linux-mips, monstr, dvomlehn, devicetree-discuss, ddaney

From: Dezhong Diao <dediao@cisco.com>

Add the ability to enable CONFIG_OF on the MIPS architecture.

Signed-off-by: Dezhong Diao <dediao@cisco.com>
[grant.likely@secretlab.ca: cleared out obsolete hooks,
	removed ARCH_HAS_DEVTREE_MEM from being manually selected,
	remove __init tags from header file]
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Cc: linux-mips@linux-mips.org
Cc: David Daney <ddaney@caviumnetworks.com>
Cc: David VomLehn <dvomlehn@cisco.com>
---

I've not tested this on anything, but I picked up the MIPS device tree
patch written by Dezhong and updated it to match the changes in
mainline.  I also half-heartedly tried to rebase the powertv support
patch, didn't get very far due to the refactoring in
arch/mips/powertv/memory.c

Anyway, please take a look and give it a spin.  If it looks good, then
I can add it into my -next branch.

g.

 arch/mips/Kconfig            |   13 ++++
 arch/mips/include/asm/prom.h |   35 +++++++++++
 arch/mips/kernel/Makefile    |    2 +
 arch/mips/kernel/prom.c      |  135 ++++++++++++++++++++++++++++++++++++++++++
 arch/mips/kernel/setup.c     |    2 +
 5 files changed, 187 insertions(+), 0 deletions(-)
 create mode 100644 arch/mips/include/asm/prom.h
 create mode 100644 arch/mips/kernel/prom.c

diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index 3ad59dd..15e364d 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -2107,6 +2107,19 @@ config SECCOMP
 
 	  If unsure, say Y. Only embedded should say N here.
 
+config USE_OF
+	bool "Flattened Device Tree support"
+	select OF
+	select OF_FLATTREE
+	help
+	  Include support for flattened device tree machine descriptions.
+
+config ARCH_HAS_DEVTREE_MEM
+	bool
+	depends on OF
+	help
+	  The user has a customized function to parse memory nodes.
+
 endmenu
 
 config LOCKDEP_SUPPORT
diff --git a/arch/mips/include/asm/prom.h b/arch/mips/include/asm/prom.h
new file mode 100644
index 0000000..23f8237
--- /dev/null
+++ b/arch/mips/include/asm/prom.h
@@ -0,0 +1,35 @@
+/*
+ *  arch/mips/include/asm/prom.h
+ *
+ *  Copyright (C) 2010 Cisco Systems Inc. <dediao@cisco.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+#ifndef __ASM_MIPS_PROM_H
+#define __ASM_MIPS_PROM_H
+
+#ifdef CONFIG_OF
+#include <linux/init.h>
+
+#include <asm/setup.h>
+#include <asm/irq.h>
+#include <asm/bootinfo.h>
+
+/* which is compatible with the flattened device tree (FDT) */
+#define cmd_line arcs_cmdline
+
+extern int early_init_dt_scan_memory_arch(unsigned long node,
+	const char *uname, int depth, void *data);
+
+extern int reserve_mem_mach(unsigned long addr, unsigned long size);
+extern void free_mem_mach(unsigned long addr, unsigned long size);
+
+extern void __init device_tree_init(void);
+#else /* CONFIG_OF */
+static inline void __init device_tree_init(void) { }
+#endif /* CONFIG_OF */
+
+#endif /* _ASM_MIPS_PROM_H */
diff --git a/arch/mips/kernel/Makefile b/arch/mips/kernel/Makefile
index 06f8482..8088498 100644
--- a/arch/mips/kernel/Makefile
+++ b/arch/mips/kernel/Makefile
@@ -96,6 +96,8 @@ obj-$(CONFIG_KEXEC)		+= machine_kexec.o relocate_kernel.o
 obj-$(CONFIG_EARLY_PRINTK)	+= early_printk.o
 obj-$(CONFIG_SPINLOCK_TEST)	+= spinlock_test.o
 
+obj-$(CONFIG_OF)		+= prom.o
+
 CFLAGS_cpu-bugs64.o	= $(shell if $(CC) $(KBUILD_CFLAGS) -Wa,-mdaddi -c -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-DHAVE_AS_SET_DADDI"; fi)
 
 obj-$(CONFIG_HAVE_STD_PC_SERIAL_PORT)	+= 8250-platform.o
diff --git a/arch/mips/kernel/prom.c b/arch/mips/kernel/prom.c
new file mode 100644
index 0000000..6378834
--- /dev/null
+++ b/arch/mips/kernel/prom.c
@@ -0,0 +1,135 @@
+/*
+ *  linux/arch/mips/kernel/prom.c
+ *
+ *  Copyright (C) 2010 Cisco Systems Inc. <dediao@cisco.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/errno.h>
+#include <linux/types.h>
+#include <linux/bootmem.h>
+#include <linux/initrd.h>
+#include <linux/debugfs.h>
+#include <linux/of.h>
+#include <linux/of_fdt.h>
+#include <linux/of_irq.h>
+#include <linux/of_platform.h>
+
+#include <asm/page.h>
+#include <asm/prom.h>
+
+#ifndef CONFIG_ARCH_HAS_DEVTREE_MEM
+int __init early_init_dt_scan_memory_arch(unsigned long node,
+					  const char *uname, int depth,
+					  void *data)
+{
+	return early_init_dt_scan_memory(node, uname, depth, data);
+}
+
+void __init early_init_dt_add_memory_arch(u64 base, u64 size)
+{
+	return add_memory_region(base, size, BOOT_MEM_RAM);
+}
+
+int __init reserve_mem_mach(unsigned long addr, unsigned long size)
+{
+	return reserve_bootmem(addr, size, BOOTMEM_DEFAULT);
+}
+
+void __init free_mem_mach(unsigned long addr, unsigned long size)
+{
+	return free_bootmem(addr, size);
+}
+#endif
+
+u64 __init early_init_dt_alloc_memory_arch(u64 size, u64 align)
+{
+	return virt_to_phys(
+		__alloc_bootmem(size, align, __pa(MAX_DMA_ADDRESS))
+		);
+}
+
+#ifdef CONFIG_BLK_DEV_INITRD
+void __init early_init_dt_setup_initrd_arch(unsigned long start,
+					    unsigned long end)
+{
+	initrd_start = (unsigned long)__va(start);
+	initrd_end = (unsigned long)__va(end);
+	initrd_below_start_ok = 1;
+}
+#endif
+
+/*
+ * irq_create_of_mapping - Hook to resolve OF irq specifier into a Linux irq#
+ *
+ * Currently the mapping mechanism is trivial; simple flat hwirq numbers are
+ * mapped 1:1 onto Linux irq numbers.  Cascaded irq controllers are not
+ * supported.
+ */
+unsigned int irq_create_of_mapping(struct device_node *controller,
+				   const u32 *intspec, unsigned int intsize)
+{
+	return intspec[0];
+}
+EXPORT_SYMBOL_GPL(irq_create_of_mapping);
+
+void __init early_init_devtree(void *params)
+{
+	/* Setup flat device-tree pointer */
+	initial_boot_params = params;
+
+	/* Retrieve various informations from the /chosen node of the
+	 * device-tree, including the platform type, initrd location and
+	 * size, and more ...
+	 */
+	of_scan_flat_dt(early_init_dt_scan_chosen, NULL);
+
+	/* Scan memory nodes */
+	of_scan_flat_dt(early_init_dt_scan_root, NULL);
+	of_scan_flat_dt(early_init_dt_scan_memory_arch, NULL);
+}
+
+void __init device_tree_init(void)
+{
+	unsigned long base, size;
+
+	if (!initial_boot_params)
+		return;
+
+	base = virt_to_phys((void *)initial_boot_params);
+	size = initial_boot_params->totalsize;
+
+	/* Before we do anything, lets reserve the dt blob */
+	reserve_mem_mach(base, size);
+
+	unflatten_device_tree();
+
+	/* free the space reserved for the dt blob */
+	free_mem_mach(base, size);
+}
+
+#if defined(CONFIG_DEBUG_FS) && defined(DEBUG)
+static struct dentry *of_debugfs_root;
+static struct debugfs_blob_wrapper flat_dt_blob;
+
+static int __init export_flat_device_tree(void)
+{
+	struct dentry *d;
+
+	flat_dt_blob.data = initial_boot_params;
+	flat_dt_blob.size = initial_boot_params->totalsize;
+
+	d = debugfs_create_blob("flat-device-tree", S_IFREG | S_IRUSR,
+				of_debugfs_root, &flat_dt_blob);
+	if (!d)
+		return 1;
+
+	return 0;
+}
+device_initcall(export_flat_device_tree);
+#endif
diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c
index 85aef3f..a6b900f 100644
--- a/arch/mips/kernel/setup.c
+++ b/arch/mips/kernel/setup.c
@@ -31,6 +31,7 @@
 #include <asm/setup.h>
 #include <asm/smp-ops.h>
 #include <asm/system.h>
+#include <asm/prom.h>
 
 struct cpuinfo_mips cpu_data[NR_CPUS] __read_mostly;
 
@@ -487,6 +488,7 @@ static void __init arch_mem_init(char **cmdline_p)
 	}
 
 	bootmem_init();
+	device_tree_init();
 	sparse_init();
 	paging_init();
 }

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

* [PATCH 2/2 RFC] of/mips: Add device tree support to MIPS
@ 2010-10-13  6:48   ` Grant Likely
  0 siblings, 0 replies; 12+ messages in thread
From: Grant Likely @ 2010-10-13  6:48 UTC (permalink / raw)
  To: benh-XVmvHMARGAS8U2dJNN8I7kB+6BGkLq7r,
	dediao-FYB4Gu1CFyUAvxtiuMwx3w, ralf-6z/3iImG2C8G8FEW9MqTrA
  Cc: linux-mips-6z/3iImG2C8G8FEW9MqTrA,
	ddaney-M3mlKVOIwJVv6pq1l3V1OdBPR1lH4CV8,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
	dvomlehn-FYB4Gu1CFyUAvxtiuMwx3w

From: Dezhong Diao <dediao-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org>

Add the ability to enable CONFIG_OF on the MIPS architecture.

Signed-off-by: Dezhong Diao <dediao-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org>
[grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org: cleared out obsolete hooks,
	removed ARCH_HAS_DEVTREE_MEM from being manually selected,
	remove __init tags from header file]
Signed-off-by: Grant Likely <grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>
Cc: linux-mips-6z/3iImG2C8G8FEW9MqTrA@public.gmane.org
Cc: David Daney <ddaney-M3mlKVOIwJVv6pq1l3V1OdBPR1lH4CV8@public.gmane.org>
Cc: David VomLehn <dvomlehn-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org>
---

I've not tested this on anything, but I picked up the MIPS device tree
patch written by Dezhong and updated it to match the changes in
mainline.  I also half-heartedly tried to rebase the powertv support
patch, didn't get very far due to the refactoring in
arch/mips/powertv/memory.c

Anyway, please take a look and give it a spin.  If it looks good, then
I can add it into my -next branch.

g.

 arch/mips/Kconfig            |   13 ++++
 arch/mips/include/asm/prom.h |   35 +++++++++++
 arch/mips/kernel/Makefile    |    2 +
 arch/mips/kernel/prom.c      |  135 ++++++++++++++++++++++++++++++++++++++++++
 arch/mips/kernel/setup.c     |    2 +
 5 files changed, 187 insertions(+), 0 deletions(-)
 create mode 100644 arch/mips/include/asm/prom.h
 create mode 100644 arch/mips/kernel/prom.c

diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index 3ad59dd..15e364d 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -2107,6 +2107,19 @@ config SECCOMP
 
 	  If unsure, say Y. Only embedded should say N here.
 
+config USE_OF
+	bool "Flattened Device Tree support"
+	select OF
+	select OF_FLATTREE
+	help
+	  Include support for flattened device tree machine descriptions.
+
+config ARCH_HAS_DEVTREE_MEM
+	bool
+	depends on OF
+	help
+	  The user has a customized function to parse memory nodes.
+
 endmenu
 
 config LOCKDEP_SUPPORT
diff --git a/arch/mips/include/asm/prom.h b/arch/mips/include/asm/prom.h
new file mode 100644
index 0000000..23f8237
--- /dev/null
+++ b/arch/mips/include/asm/prom.h
@@ -0,0 +1,35 @@
+/*
+ *  arch/mips/include/asm/prom.h
+ *
+ *  Copyright (C) 2010 Cisco Systems Inc. <dediao-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+#ifndef __ASM_MIPS_PROM_H
+#define __ASM_MIPS_PROM_H
+
+#ifdef CONFIG_OF
+#include <linux/init.h>
+
+#include <asm/setup.h>
+#include <asm/irq.h>
+#include <asm/bootinfo.h>
+
+/* which is compatible with the flattened device tree (FDT) */
+#define cmd_line arcs_cmdline
+
+extern int early_init_dt_scan_memory_arch(unsigned long node,
+	const char *uname, int depth, void *data);
+
+extern int reserve_mem_mach(unsigned long addr, unsigned long size);
+extern void free_mem_mach(unsigned long addr, unsigned long size);
+
+extern void __init device_tree_init(void);
+#else /* CONFIG_OF */
+static inline void __init device_tree_init(void) { }
+#endif /* CONFIG_OF */
+
+#endif /* _ASM_MIPS_PROM_H */
diff --git a/arch/mips/kernel/Makefile b/arch/mips/kernel/Makefile
index 06f8482..8088498 100644
--- a/arch/mips/kernel/Makefile
+++ b/arch/mips/kernel/Makefile
@@ -96,6 +96,8 @@ obj-$(CONFIG_KEXEC)		+= machine_kexec.o relocate_kernel.o
 obj-$(CONFIG_EARLY_PRINTK)	+= early_printk.o
 obj-$(CONFIG_SPINLOCK_TEST)	+= spinlock_test.o
 
+obj-$(CONFIG_OF)		+= prom.o
+
 CFLAGS_cpu-bugs64.o	= $(shell if $(CC) $(KBUILD_CFLAGS) -Wa,-mdaddi -c -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-DHAVE_AS_SET_DADDI"; fi)
 
 obj-$(CONFIG_HAVE_STD_PC_SERIAL_PORT)	+= 8250-platform.o
diff --git a/arch/mips/kernel/prom.c b/arch/mips/kernel/prom.c
new file mode 100644
index 0000000..6378834
--- /dev/null
+++ b/arch/mips/kernel/prom.c
@@ -0,0 +1,135 @@
+/*
+ *  linux/arch/mips/kernel/prom.c
+ *
+ *  Copyright (C) 2010 Cisco Systems Inc. <dediao-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/errno.h>
+#include <linux/types.h>
+#include <linux/bootmem.h>
+#include <linux/initrd.h>
+#include <linux/debugfs.h>
+#include <linux/of.h>
+#include <linux/of_fdt.h>
+#include <linux/of_irq.h>
+#include <linux/of_platform.h>
+
+#include <asm/page.h>
+#include <asm/prom.h>
+
+#ifndef CONFIG_ARCH_HAS_DEVTREE_MEM
+int __init early_init_dt_scan_memory_arch(unsigned long node,
+					  const char *uname, int depth,
+					  void *data)
+{
+	return early_init_dt_scan_memory(node, uname, depth, data);
+}
+
+void __init early_init_dt_add_memory_arch(u64 base, u64 size)
+{
+	return add_memory_region(base, size, BOOT_MEM_RAM);
+}
+
+int __init reserve_mem_mach(unsigned long addr, unsigned long size)
+{
+	return reserve_bootmem(addr, size, BOOTMEM_DEFAULT);
+}
+
+void __init free_mem_mach(unsigned long addr, unsigned long size)
+{
+	return free_bootmem(addr, size);
+}
+#endif
+
+u64 __init early_init_dt_alloc_memory_arch(u64 size, u64 align)
+{
+	return virt_to_phys(
+		__alloc_bootmem(size, align, __pa(MAX_DMA_ADDRESS))
+		);
+}
+
+#ifdef CONFIG_BLK_DEV_INITRD
+void __init early_init_dt_setup_initrd_arch(unsigned long start,
+					    unsigned long end)
+{
+	initrd_start = (unsigned long)__va(start);
+	initrd_end = (unsigned long)__va(end);
+	initrd_below_start_ok = 1;
+}
+#endif
+
+/*
+ * irq_create_of_mapping - Hook to resolve OF irq specifier into a Linux irq#
+ *
+ * Currently the mapping mechanism is trivial; simple flat hwirq numbers are
+ * mapped 1:1 onto Linux irq numbers.  Cascaded irq controllers are not
+ * supported.
+ */
+unsigned int irq_create_of_mapping(struct device_node *controller,
+				   const u32 *intspec, unsigned int intsize)
+{
+	return intspec[0];
+}
+EXPORT_SYMBOL_GPL(irq_create_of_mapping);
+
+void __init early_init_devtree(void *params)
+{
+	/* Setup flat device-tree pointer */
+	initial_boot_params = params;
+
+	/* Retrieve various informations from the /chosen node of the
+	 * device-tree, including the platform type, initrd location and
+	 * size, and more ...
+	 */
+	of_scan_flat_dt(early_init_dt_scan_chosen, NULL);
+
+	/* Scan memory nodes */
+	of_scan_flat_dt(early_init_dt_scan_root, NULL);
+	of_scan_flat_dt(early_init_dt_scan_memory_arch, NULL);
+}
+
+void __init device_tree_init(void)
+{
+	unsigned long base, size;
+
+	if (!initial_boot_params)
+		return;
+
+	base = virt_to_phys((void *)initial_boot_params);
+	size = initial_boot_params->totalsize;
+
+	/* Before we do anything, lets reserve the dt blob */
+	reserve_mem_mach(base, size);
+
+	unflatten_device_tree();
+
+	/* free the space reserved for the dt blob */
+	free_mem_mach(base, size);
+}
+
+#if defined(CONFIG_DEBUG_FS) && defined(DEBUG)
+static struct dentry *of_debugfs_root;
+static struct debugfs_blob_wrapper flat_dt_blob;
+
+static int __init export_flat_device_tree(void)
+{
+	struct dentry *d;
+
+	flat_dt_blob.data = initial_boot_params;
+	flat_dt_blob.size = initial_boot_params->totalsize;
+
+	d = debugfs_create_blob("flat-device-tree", S_IFREG | S_IRUSR,
+				of_debugfs_root, &flat_dt_blob);
+	if (!d)
+		return 1;
+
+	return 0;
+}
+device_initcall(export_flat_device_tree);
+#endif
diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c
index 85aef3f..a6b900f 100644
--- a/arch/mips/kernel/setup.c
+++ b/arch/mips/kernel/setup.c
@@ -31,6 +31,7 @@
 #include <asm/setup.h>
 #include <asm/smp-ops.h>
 #include <asm/system.h>
+#include <asm/prom.h>
 
 struct cpuinfo_mips cpu_data[NR_CPUS] __read_mostly;
 
@@ -487,6 +488,7 @@ static void __init arch_mem_init(char **cmdline_p)
 	}
 
 	bootmem_init();
+	device_tree_init();
 	sparse_init();
 	paging_init();
 }

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

* Re: [PATCH 1/2] of/flattree: Eliminate need to provide early_init_dt_scan_chosen_arch
  2010-10-13  6:44 ` Grant Likely
  (?)
  (?)
@ 2010-10-14 21:08 ` David Daney
  2010-10-15  4:53     ` Grant Likely
  -1 siblings, 1 reply; 12+ messages in thread
From: David Daney @ 2010-10-14 21:08 UTC (permalink / raw)
  To: Grant Likely, ralf
  Cc: benh, dediao, linux-mips, monstr, dvomlehn, devicetree-discuss

On 10/12/2010 11:44 PM, Grant Likely wrote:
> This patch refactors the early init parsing of the chosen node so that
> architectures aren't forced to provide an empty implementation of
> early_init_dt_scan_chosen_arch.  Instead, if an architecture wants to
> do something different, it can either use a wrapper function around
> early_init_dt_scan_chosen(), or it can replace it altogether.
>
> This patch was written in preparation to adding device tree support to
> both x86 ad MIPS.
>
> Signed-off-by: Grant Likely<grant.likely@secretlab.ca>

In conjunction with my 'MIPS: Add some irq definitins required by OF' 
and the '2/2 of/mips: Add device tree support to MIPS' patches, I can 
enable CONFIG_USE_OF, and build and run a kernel on my Octeon.  I 
haven't started using the device tree yet, but this is a good start.

You can add my...

Tested-by: David Daney <ddaney@caviumnetworks.com>


> ---
>   arch/microblaze/kernel/prom.c |    5 -----
>   arch/powerpc/kernel/prom.c    |   12 ++++++++++--
>   drivers/of/fdt.c              |    2 --
>   include/linux/of_fdt.h        |    2 +-
>   4 files changed, 11 insertions(+), 10 deletions(-)
[...]

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

* Re: [PATCH 2/2 RFC] of/mips: Add device tree support to MIPS
  2010-10-13  6:48   ` Grant Likely
  (?)
@ 2010-10-14 21:09   ` David Daney
  -1 siblings, 0 replies; 12+ messages in thread
From: David Daney @ 2010-10-14 21:09 UTC (permalink / raw)
  To: Grant Likely, ralf
  Cc: benh, dediao, linux-mips, monstr, dvomlehn, devicetree-discuss

On 10/12/2010 11:48 PM, Grant Likely wrote:
> From: Dezhong Diao<dediao@cisco.com>
>
> Add the ability to enable CONFIG_OF on the MIPS architecture.
>
> Signed-off-by: Dezhong Diao<dediao@cisco.com>
> [grant.likely@secretlab.ca: cleared out obsolete hooks,
> 	removed ARCH_HAS_DEVTREE_MEM from being manually selected,
> 	remove __init tags from header file]
> Signed-off-by: Grant Likely<grant.likely@secretlab.ca>
> Cc: linux-mips@linux-mips.org
> Cc: David Daney<ddaney@caviumnetworks.com>
> Cc: David VomLehn<dvomlehn@cisco.com>

As I mentioned in my reply to 1/2, this seems to work,


Tested-by: David Daney <ddaney@caviumnetworks.com>


> ---
>
> I've not tested this on anything, but I picked up the MIPS device tree
> patch written by Dezhong and updated it to match the changes in
> mainline.  I also half-heartedly tried to rebase the powertv support
> patch, didn't get very far due to the refactoring in
> arch/mips/powertv/memory.c
>
> Anyway, please take a look and give it a spin.  If it looks good, then
> I can add it into my -next branch.
>
> g.
>
[...]

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

* Re: [PATCH 1/2] of/flattree: Eliminate need to provide early_init_dt_scan_chosen_arch
@ 2010-10-15  4:53     ` Grant Likely
  0 siblings, 0 replies; 12+ messages in thread
From: Grant Likely @ 2010-10-15  4:53 UTC (permalink / raw)
  To: David Daney
  Cc: ralf, benh, dediao, linux-mips, monstr, dvomlehn,
	devicetree-discuss

On Thu, Oct 14, 2010 at 3:08 PM, David Daney <ddaney@caviumnetworks.com> wrote:
> On 10/12/2010 11:44 PM, Grant Likely wrote:
>>
>> This patch refactors the early init parsing of the chosen node so that
>> architectures aren't forced to provide an empty implementation of
>> early_init_dt_scan_chosen_arch.  Instead, if an architecture wants to
>> do something different, it can either use a wrapper function around
>> early_init_dt_scan_chosen(), or it can replace it altogether.
>>
>> This patch was written in preparation to adding device tree support to
>> both x86 ad MIPS.
>>
>> Signed-off-by: Grant Likely<grant.likely@secretlab.ca>
>
> In conjunction with my 'MIPS: Add some irq definitins required by OF' and
> the '2/2 of/mips: Add device tree support to MIPS' patches, I can enable
> CONFIG_USE_OF, and build and run a kernel on my Octeon.  I haven't started
> using the device tree yet, but this is a good start.
>
> You can add my...
>
> Tested-by: David Daney <ddaney@caviumnetworks.com>

Thanks David.  I'll add your tags.

What do you think Ralf?  Should I merge these two patches up for
2.6.37?  As mentioned on my other reply, David's "MIPS: add some irq
definitions required by OF" patch isn't needed in my current
next-devicetree branch.

g.

>
>
>> ---
>>  arch/microblaze/kernel/prom.c |    5 -----
>>  arch/powerpc/kernel/prom.c    |   12 ++++++++++--
>>  drivers/of/fdt.c              |    2 --
>>  include/linux/of_fdt.h        |    2 +-
>>  4 files changed, 11 insertions(+), 10 deletions(-)
>
> [...]
>



-- 
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.

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

* Re: [PATCH 1/2] of/flattree: Eliminate need to provide early_init_dt_scan_chosen_arch
@ 2010-10-15  4:53     ` Grant Likely
  0 siblings, 0 replies; 12+ messages in thread
From: Grant Likely @ 2010-10-15  4:53 UTC (permalink / raw)
  To: David Daney
  Cc: linux-mips-6z/3iImG2C8G8FEW9MqTrA,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
	ralf-6z/3iImG2C8G8FEW9MqTrA, dvomlehn-FYB4Gu1CFyUAvxtiuMwx3w

On Thu, Oct 14, 2010 at 3:08 PM, David Daney <ddaney-M3mlKVOIwJVv6pq1l3V1OdBPR1lH4CV8@public.gmane.org> wrote:
> On 10/12/2010 11:44 PM, Grant Likely wrote:
>>
>> This patch refactors the early init parsing of the chosen node so that
>> architectures aren't forced to provide an empty implementation of
>> early_init_dt_scan_chosen_arch.  Instead, if an architecture wants to
>> do something different, it can either use a wrapper function around
>> early_init_dt_scan_chosen(), or it can replace it altogether.
>>
>> This patch was written in preparation to adding device tree support to
>> both x86 ad MIPS.
>>
>> Signed-off-by: Grant Likely<grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>
>
> In conjunction with my 'MIPS: Add some irq definitins required by OF' and
> the '2/2 of/mips: Add device tree support to MIPS' patches, I can enable
> CONFIG_USE_OF, and build and run a kernel on my Octeon.  I haven't started
> using the device tree yet, but this is a good start.
>
> You can add my...
>
> Tested-by: David Daney <ddaney-M3mlKVOIwJVv6pq1l3V1OdBPR1lH4CV8@public.gmane.org>

Thanks David.  I'll add your tags.

What do you think Ralf?  Should I merge these two patches up for
2.6.37?  As mentioned on my other reply, David's "MIPS: add some irq
definitions required by OF" patch isn't needed in my current
next-devicetree branch.

g.

>
>
>> ---
>>  arch/microblaze/kernel/prom.c |    5 -----
>>  arch/powerpc/kernel/prom.c    |   12 ++++++++++--
>>  drivers/of/fdt.c              |    2 --
>>  include/linux/of_fdt.h        |    2 +-
>>  4 files changed, 11 insertions(+), 10 deletions(-)
>
> [...]
>



-- 
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.

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

* Re: [PATCH 2/2 RFC] of/mips: Add device tree support to MIPS
@ 2010-10-18 20:50     ` David Daney
  0 siblings, 0 replies; 12+ messages in thread
From: David Daney @ 2010-10-18 20:50 UTC (permalink / raw)
  To: Grant Likely, dediao
  Cc: benh, ralf, linux-mips, monstr, dvomlehn, devicetree-discuss

Although I tested this patch, and it compiles, I have a few more 
comments now that I have studied it.

Basically, it looks like most of the code in arch/mips/kernel/prom.c is 
not generic to MIPS, but instead highly specific to some platform 
(perhaps PowerTV).

On 10/12/2010 11:48 PM, Grant Likely wrote:
> From: Dezhong Diao<dediao@cisco.com>
>
> Add the ability to enable CONFIG_OF on the MIPS architecture.
>
> Signed-off-by: Dezhong Diao<dediao@cisco.com>
> [grant.likely@secretlab.ca: cleared out obsolete hooks,
> 	removed ARCH_HAS_DEVTREE_MEM from being manually selected,
> 	remove __init tags from header file]
> Signed-off-by: Grant Likely<grant.likely@secretlab.ca>
> Cc: linux-mips@linux-mips.org
> Cc: David Daney<ddaney@caviumnetworks.com>
> Cc: David VomLehn<dvomlehn@cisco.com>
> ---
>
> I've not tested this on anything, but I picked up the MIPS device tree
> patch written by Dezhong and updated it to match the changes in
> mainline.  I also half-heartedly tried to rebase the powertv support
> patch, didn't get very far due to the refactoring in
> arch/mips/powertv/memory.c
>
> Anyway, please take a look and give it a spin.  If it looks good, then
> I can add it into my -next branch.
>
> g.
>
>   arch/mips/Kconfig            |   13 ++++
>   arch/mips/include/asm/prom.h |   35 +++++++++++
>   arch/mips/kernel/Makefile    |    2 +
>   arch/mips/kernel/prom.c      |  135 ++++++++++++++++++++++++++++++++++++++++++
>   arch/mips/kernel/setup.c     |    2 +
>   5 files changed, 187 insertions(+), 0 deletions(-)
>   create mode 100644 arch/mips/include/asm/prom.h
>   create mode 100644 arch/mips/kernel/prom.c
>
> diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
> index 3ad59dd..15e364d 100644
> --- a/arch/mips/Kconfig
> +++ b/arch/mips/Kconfig
> @@ -2107,6 +2107,19 @@ config SECCOMP
>
>   	  If unsure, say Y. Only embedded should say N here.
>
> +config USE_OF
> +	bool "Flattened Device Tree support"
> +	select OF
> +	select OF_FLATTREE
> +	help
> +	  Include support for flattened device tree machine descriptions.
> +
> +config ARCH_HAS_DEVTREE_MEM
> +	bool
> +	depends on OF
> +	help
> +	  The user has a customized function to parse memory nodes.
> +
>   endmenu
>

These Kconfig items should only be selectable if OF is truly supported. 
  Hardwiring  ARCH_HAS_DEVTREE_MEM to USE_OF at this global level 
doesn't seem quite right either.  I think it is conceivable that we 
would want USE_OF without ARCH_HAS_DEVTREE_MEM.


>   config LOCKDEP_SUPPORT
> diff --git a/arch/mips/include/asm/prom.h b/arch/mips/include/asm/prom.h
> new file mode 100644
> index 0000000..23f8237
> --- /dev/null
> +++ b/arch/mips/include/asm/prom.h
> @@ -0,0 +1,35 @@
> +/*
> + *  arch/mips/include/asm/prom.h
> + *
> + *  Copyright (C) 2010 Cisco Systems Inc.<dediao@cisco.com>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + */
> +#ifndef __ASM_MIPS_PROM_H
> +#define __ASM_MIPS_PROM_H
> +
> +#ifdef CONFIG_OF
> +#include<linux/init.h>
> +
> +#include<asm/setup.h>
> +#include<asm/irq.h>
> +#include<asm/bootinfo.h>
> +
> +/* which is compatible with the flattened device tree (FDT) */
> +#define cmd_line arcs_cmdline
> +
> +extern int early_init_dt_scan_memory_arch(unsigned long node,
> +	const char *uname, int depth, void *data);
> +
> +extern int reserve_mem_mach(unsigned long addr, unsigned long size);
> +extern void free_mem_mach(unsigned long addr, unsigned long size);
> +
> +extern void __init device_tree_init(void);
> +#else /* CONFIG_OF */
> +static inline void __init device_tree_init(void) { }
> +#endif /* CONFIG_OF */
> +
> +#endif /* _ASM_MIPS_PROM_H */
> diff --git a/arch/mips/kernel/Makefile b/arch/mips/kernel/Makefile
> index 06f8482..8088498 100644
> --- a/arch/mips/kernel/Makefile
> +++ b/arch/mips/kernel/Makefile
> @@ -96,6 +96,8 @@ obj-$(CONFIG_KEXEC)		+= machine_kexec.o relocate_kernel.o
>   obj-$(CONFIG_EARLY_PRINTK)	+= early_printk.o
>   obj-$(CONFIG_SPINLOCK_TEST)	+= spinlock_test.o
>
> +obj-$(CONFIG_OF)		+= prom.o
> +
>   CFLAGS_cpu-bugs64.o	= $(shell if $(CC) $(KBUILD_CFLAGS) -Wa,-mdaddi -c -o /dev/null -xc /dev/null>/dev/null 2>&1; then echo "-DHAVE_AS_SET_DADDI"; fi)
>
>   obj-$(CONFIG_HAVE_STD_PC_SERIAL_PORT)	+= 8250-platform.o
> diff --git a/arch/mips/kernel/prom.c b/arch/mips/kernel/prom.c
> new file mode 100644
> index 0000000..6378834
> --- /dev/null
> +++ b/arch/mips/kernel/prom.c
> @@ -0,0 +1,135 @@
> +/*
> + *  linux/arch/mips/kernel/prom.c
> + *
> + *  Copyright (C) 2010 Cisco Systems Inc.<dediao@cisco.com>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +
> +#include<linux/init.h>
> +#include<linux/module.h>
> +#include<linux/errno.h>
> +#include<linux/types.h>
> +#include<linux/bootmem.h>
> +#include<linux/initrd.h>
> +#include<linux/debugfs.h>
> +#include<linux/of.h>
> +#include<linux/of_fdt.h>
> +#include<linux/of_irq.h>
> +#include<linux/of_platform.h>
> +
> +#include<asm/page.h>
> +#include<asm/prom.h>
> +
> +#ifndef CONFIG_ARCH_HAS_DEVTREE_MEM
> +int __init early_init_dt_scan_memory_arch(unsigned long node,
> +					  const char *uname, int depth,
> +					  void *data)
> +{
> +	return early_init_dt_scan_memory(node, uname, depth, data);
> +}
> +
> +void __init early_init_dt_add_memory_arch(u64 base, u64 size)
> +{
> +	return add_memory_region(base, size, BOOT_MEM_RAM);
> +}
> +
> +int __init reserve_mem_mach(unsigned long addr, unsigned long size)
> +{
> +	return reserve_bootmem(addr, size, BOOTMEM_DEFAULT);
> +}
> +
> +void __init free_mem_mach(unsigned long addr, unsigned long size)
> +{
> +	return free_bootmem(addr, size);
> +}
> +#endif
> +
> +u64 __init early_init_dt_alloc_memory_arch(u64 size, u64 align)
> +{
> +	return virt_to_phys(
> +		__alloc_bootmem(size, align, __pa(MAX_DMA_ADDRESS))
> +		);
> +}
> +
> +#ifdef CONFIG_BLK_DEV_INITRD
> +void __init early_init_dt_setup_initrd_arch(unsigned long start,
> +					    unsigned long end)
> +{
> +	initrd_start = (unsigned long)__va(start);
> +	initrd_end = (unsigned long)__va(end);
> +	initrd_below_start_ok = 1;
> +}
> +#endif
> +
> +/*
> + * irq_create_of_mapping - Hook to resolve OF irq specifier into a Linux irq#
> + *
> + * Currently the mapping mechanism is trivial; simple flat hwirq numbers are
> + * mapped 1:1 onto Linux irq numbers.  Cascaded irq controllers are not
> + * supported.
> + */
> +unsigned int irq_create_of_mapping(struct device_node *controller,
> +				   const u32 *intspec, unsigned int intsize)
> +{
> +	return intspec[0];
> +}
> +EXPORT_SYMBOL_GPL(irq_create_of_mapping);
> +

This mapping function depends on the interrupt controller architecture. 
  It is not at all a good fit for what I want to do on Octeon.  We have 
a hierarchy of interrupt mapping that is best described by a two level 
tree, so has '#interrupt-cells = <2>;'.  We definitely need a different 
implementation than this.

> +void __init early_init_devtree(void *params)
> +{
> +	/* Setup flat device-tree pointer */
> +	initial_boot_params = params;
> +
> +	/* Retrieve various informations from the /chosen node of the
> +	 * device-tree, including the platform type, initrd location and
> +	 * size, and more ...
> +	 */
> +	of_scan_flat_dt(early_init_dt_scan_chosen, NULL);
> +
> +	/* Scan memory nodes */
> +	of_scan_flat_dt(early_init_dt_scan_root, NULL);
> +	of_scan_flat_dt(early_init_dt_scan_memory_arch, NULL);
> +}
> +
> +void __init device_tree_init(void)
> +{
> +	unsigned long base, size;
> +
> +	if (!initial_boot_params)
> +		return;
> +
> +	base = virt_to_phys((void *)initial_boot_params);
> +	size = initial_boot_params->totalsize;
> +
> +	/* Before we do anything, lets reserve the dt blob */
> +	reserve_mem_mach(base, size);
> +
> +	unflatten_device_tree();
> +
> +	/* free the space reserved for the dt blob */
> +	free_mem_mach(base, size);
> +}
> +
> +#if defined(CONFIG_DEBUG_FS)&&  defined(DEBUG)
> +static struct dentry *of_debugfs_root;
> +static struct debugfs_blob_wrapper flat_dt_blob;
> +
> +static int __init export_flat_device_tree(void)
> +{
> +	struct dentry *d;
> +
> +	flat_dt_blob.data = initial_boot_params;
> +	flat_dt_blob.size = initial_boot_params->totalsize;
> +
> +	d = debugfs_create_blob("flat-device-tree", S_IFREG | S_IRUSR,
> +				of_debugfs_root,&flat_dt_blob);
> +	if (!d)
> +		return 1;
> +
> +	return 0;
> +}
> +device_initcall(export_flat_device_tree);

This debugfs bit will fail.  of_debugfs_root is never initialized that I 
can see.


> +#endif
> diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c
> index 85aef3f..a6b900f 100644
> --- a/arch/mips/kernel/setup.c
> +++ b/arch/mips/kernel/setup.c
> @@ -31,6 +31,7 @@
>   #include<asm/setup.h>
>   #include<asm/smp-ops.h>
>   #include<asm/system.h>
> +#include<asm/prom.h>
>
>   struct cpuinfo_mips cpu_data[NR_CPUS] __read_mostly;
>
> @@ -487,6 +488,7 @@ static void __init arch_mem_init(char **cmdline_p)
>   	}
>
>   	bootmem_init();
> +	device_tree_init();
>   	sparse_init();
>   	paging_init();
>   }
>
>

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

* Re: [PATCH 2/2 RFC] of/mips: Add device tree support to MIPS
@ 2010-10-18 20:50     ` David Daney
  0 siblings, 0 replies; 12+ messages in thread
From: David Daney @ 2010-10-18 20:50 UTC (permalink / raw)
  To: Grant Likely, dediao-FYB4Gu1CFyUAvxtiuMwx3w
  Cc: linux-mips-6z/3iImG2C8G8FEW9MqTrA,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
	ralf-6z/3iImG2C8G8FEW9MqTrA, dvomlehn-FYB4Gu1CFyUAvxtiuMwx3w

Although I tested this patch, and it compiles, I have a few more 
comments now that I have studied it.

Basically, it looks like most of the code in arch/mips/kernel/prom.c is 
not generic to MIPS, but instead highly specific to some platform 
(perhaps PowerTV).

On 10/12/2010 11:48 PM, Grant Likely wrote:
> From: Dezhong Diao<dediao-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org>
>
> Add the ability to enable CONFIG_OF on the MIPS architecture.
>
> Signed-off-by: Dezhong Diao<dediao-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org>
> [grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org: cleared out obsolete hooks,
> 	removed ARCH_HAS_DEVTREE_MEM from being manually selected,
> 	remove __init tags from header file]
> Signed-off-by: Grant Likely<grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>
> Cc: linux-mips-6z/3iImG2C8G8FEW9MqTrA@public.gmane.org
> Cc: David Daney<ddaney-M3mlKVOIwJVv6pq1l3V1OdBPR1lH4CV8@public.gmane.org>
> Cc: David VomLehn<dvomlehn-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org>
> ---
>
> I've not tested this on anything, but I picked up the MIPS device tree
> patch written by Dezhong and updated it to match the changes in
> mainline.  I also half-heartedly tried to rebase the powertv support
> patch, didn't get very far due to the refactoring in
> arch/mips/powertv/memory.c
>
> Anyway, please take a look and give it a spin.  If it looks good, then
> I can add it into my -next branch.
>
> g.
>
>   arch/mips/Kconfig            |   13 ++++
>   arch/mips/include/asm/prom.h |   35 +++++++++++
>   arch/mips/kernel/Makefile    |    2 +
>   arch/mips/kernel/prom.c      |  135 ++++++++++++++++++++++++++++++++++++++++++
>   arch/mips/kernel/setup.c     |    2 +
>   5 files changed, 187 insertions(+), 0 deletions(-)
>   create mode 100644 arch/mips/include/asm/prom.h
>   create mode 100644 arch/mips/kernel/prom.c
>
> diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
> index 3ad59dd..15e364d 100644
> --- a/arch/mips/Kconfig
> +++ b/arch/mips/Kconfig
> @@ -2107,6 +2107,19 @@ config SECCOMP
>
>   	  If unsure, say Y. Only embedded should say N here.
>
> +config USE_OF
> +	bool "Flattened Device Tree support"
> +	select OF
> +	select OF_FLATTREE
> +	help
> +	  Include support for flattened device tree machine descriptions.
> +
> +config ARCH_HAS_DEVTREE_MEM
> +	bool
> +	depends on OF
> +	help
> +	  The user has a customized function to parse memory nodes.
> +
>   endmenu
>

These Kconfig items should only be selectable if OF is truly supported. 
  Hardwiring  ARCH_HAS_DEVTREE_MEM to USE_OF at this global level 
doesn't seem quite right either.  I think it is conceivable that we 
would want USE_OF without ARCH_HAS_DEVTREE_MEM.


>   config LOCKDEP_SUPPORT
> diff --git a/arch/mips/include/asm/prom.h b/arch/mips/include/asm/prom.h
> new file mode 100644
> index 0000000..23f8237
> --- /dev/null
> +++ b/arch/mips/include/asm/prom.h
> @@ -0,0 +1,35 @@
> +/*
> + *  arch/mips/include/asm/prom.h
> + *
> + *  Copyright (C) 2010 Cisco Systems Inc.<dediao-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + */
> +#ifndef __ASM_MIPS_PROM_H
> +#define __ASM_MIPS_PROM_H
> +
> +#ifdef CONFIG_OF
> +#include<linux/init.h>
> +
> +#include<asm/setup.h>
> +#include<asm/irq.h>
> +#include<asm/bootinfo.h>
> +
> +/* which is compatible with the flattened device tree (FDT) */
> +#define cmd_line arcs_cmdline
> +
> +extern int early_init_dt_scan_memory_arch(unsigned long node,
> +	const char *uname, int depth, void *data);
> +
> +extern int reserve_mem_mach(unsigned long addr, unsigned long size);
> +extern void free_mem_mach(unsigned long addr, unsigned long size);
> +
> +extern void __init device_tree_init(void);
> +#else /* CONFIG_OF */
> +static inline void __init device_tree_init(void) { }
> +#endif /* CONFIG_OF */
> +
> +#endif /* _ASM_MIPS_PROM_H */
> diff --git a/arch/mips/kernel/Makefile b/arch/mips/kernel/Makefile
> index 06f8482..8088498 100644
> --- a/arch/mips/kernel/Makefile
> +++ b/arch/mips/kernel/Makefile
> @@ -96,6 +96,8 @@ obj-$(CONFIG_KEXEC)		+= machine_kexec.o relocate_kernel.o
>   obj-$(CONFIG_EARLY_PRINTK)	+= early_printk.o
>   obj-$(CONFIG_SPINLOCK_TEST)	+= spinlock_test.o
>
> +obj-$(CONFIG_OF)		+= prom.o
> +
>   CFLAGS_cpu-bugs64.o	= $(shell if $(CC) $(KBUILD_CFLAGS) -Wa,-mdaddi -c -o /dev/null -xc /dev/null>/dev/null 2>&1; then echo "-DHAVE_AS_SET_DADDI"; fi)
>
>   obj-$(CONFIG_HAVE_STD_PC_SERIAL_PORT)	+= 8250-platform.o
> diff --git a/arch/mips/kernel/prom.c b/arch/mips/kernel/prom.c
> new file mode 100644
> index 0000000..6378834
> --- /dev/null
> +++ b/arch/mips/kernel/prom.c
> @@ -0,0 +1,135 @@
> +/*
> + *  linux/arch/mips/kernel/prom.c
> + *
> + *  Copyright (C) 2010 Cisco Systems Inc.<dediao-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +
> +#include<linux/init.h>
> +#include<linux/module.h>
> +#include<linux/errno.h>
> +#include<linux/types.h>
> +#include<linux/bootmem.h>
> +#include<linux/initrd.h>
> +#include<linux/debugfs.h>
> +#include<linux/of.h>
> +#include<linux/of_fdt.h>
> +#include<linux/of_irq.h>
> +#include<linux/of_platform.h>
> +
> +#include<asm/page.h>
> +#include<asm/prom.h>
> +
> +#ifndef CONFIG_ARCH_HAS_DEVTREE_MEM
> +int __init early_init_dt_scan_memory_arch(unsigned long node,
> +					  const char *uname, int depth,
> +					  void *data)
> +{
> +	return early_init_dt_scan_memory(node, uname, depth, data);
> +}
> +
> +void __init early_init_dt_add_memory_arch(u64 base, u64 size)
> +{
> +	return add_memory_region(base, size, BOOT_MEM_RAM);
> +}
> +
> +int __init reserve_mem_mach(unsigned long addr, unsigned long size)
> +{
> +	return reserve_bootmem(addr, size, BOOTMEM_DEFAULT);
> +}
> +
> +void __init free_mem_mach(unsigned long addr, unsigned long size)
> +{
> +	return free_bootmem(addr, size);
> +}
> +#endif
> +
> +u64 __init early_init_dt_alloc_memory_arch(u64 size, u64 align)
> +{
> +	return virt_to_phys(
> +		__alloc_bootmem(size, align, __pa(MAX_DMA_ADDRESS))
> +		);
> +}
> +
> +#ifdef CONFIG_BLK_DEV_INITRD
> +void __init early_init_dt_setup_initrd_arch(unsigned long start,
> +					    unsigned long end)
> +{
> +	initrd_start = (unsigned long)__va(start);
> +	initrd_end = (unsigned long)__va(end);
> +	initrd_below_start_ok = 1;
> +}
> +#endif
> +
> +/*
> + * irq_create_of_mapping - Hook to resolve OF irq specifier into a Linux irq#
> + *
> + * Currently the mapping mechanism is trivial; simple flat hwirq numbers are
> + * mapped 1:1 onto Linux irq numbers.  Cascaded irq controllers are not
> + * supported.
> + */
> +unsigned int irq_create_of_mapping(struct device_node *controller,
> +				   const u32 *intspec, unsigned int intsize)
> +{
> +	return intspec[0];
> +}
> +EXPORT_SYMBOL_GPL(irq_create_of_mapping);
> +

This mapping function depends on the interrupt controller architecture. 
  It is not at all a good fit for what I want to do on Octeon.  We have 
a hierarchy of interrupt mapping that is best described by a two level 
tree, so has '#interrupt-cells = <2>;'.  We definitely need a different 
implementation than this.

> +void __init early_init_devtree(void *params)
> +{
> +	/* Setup flat device-tree pointer */
> +	initial_boot_params = params;
> +
> +	/* Retrieve various informations from the /chosen node of the
> +	 * device-tree, including the platform type, initrd location and
> +	 * size, and more ...
> +	 */
> +	of_scan_flat_dt(early_init_dt_scan_chosen, NULL);
> +
> +	/* Scan memory nodes */
> +	of_scan_flat_dt(early_init_dt_scan_root, NULL);
> +	of_scan_flat_dt(early_init_dt_scan_memory_arch, NULL);
> +}
> +
> +void __init device_tree_init(void)
> +{
> +	unsigned long base, size;
> +
> +	if (!initial_boot_params)
> +		return;
> +
> +	base = virt_to_phys((void *)initial_boot_params);
> +	size = initial_boot_params->totalsize;
> +
> +	/* Before we do anything, lets reserve the dt blob */
> +	reserve_mem_mach(base, size);
> +
> +	unflatten_device_tree();
> +
> +	/* free the space reserved for the dt blob */
> +	free_mem_mach(base, size);
> +}
> +
> +#if defined(CONFIG_DEBUG_FS)&&  defined(DEBUG)
> +static struct dentry *of_debugfs_root;
> +static struct debugfs_blob_wrapper flat_dt_blob;
> +
> +static int __init export_flat_device_tree(void)
> +{
> +	struct dentry *d;
> +
> +	flat_dt_blob.data = initial_boot_params;
> +	flat_dt_blob.size = initial_boot_params->totalsize;
> +
> +	d = debugfs_create_blob("flat-device-tree", S_IFREG | S_IRUSR,
> +				of_debugfs_root,&flat_dt_blob);
> +	if (!d)
> +		return 1;
> +
> +	return 0;
> +}
> +device_initcall(export_flat_device_tree);

This debugfs bit will fail.  of_debugfs_root is never initialized that I 
can see.


> +#endif
> diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c
> index 85aef3f..a6b900f 100644
> --- a/arch/mips/kernel/setup.c
> +++ b/arch/mips/kernel/setup.c
> @@ -31,6 +31,7 @@
>   #include<asm/setup.h>
>   #include<asm/smp-ops.h>
>   #include<asm/system.h>
> +#include<asm/prom.h>
>
>   struct cpuinfo_mips cpu_data[NR_CPUS] __read_mostly;
>
> @@ -487,6 +488,7 @@ static void __init arch_mem_init(char **cmdline_p)
>   	}
>
>   	bootmem_init();
> +	device_tree_init();
>   	sparse_init();
>   	paging_init();
>   }
>
>

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

* Re: [PATCH 2/2 RFC] of/mips: Add device tree support to MIPS
@ 2010-10-18 21:07       ` Grant Likely
  0 siblings, 0 replies; 12+ messages in thread
From: Grant Likely @ 2010-10-18 21:07 UTC (permalink / raw)
  To: David Daney
  Cc: dediao, benh, ralf, linux-mips, monstr, dvomlehn,
	devicetree-discuss

On Mon, Oct 18, 2010 at 01:50:56PM -0700, David Daney wrote:
> Although I tested this patch, and it compiles, I have a few more
> comments now that I have studied it.
> 
> Basically, it looks like most of the code in arch/mips/kernel/prom.c
> is not generic to MIPS, but instead highly specific to some platform
> (perhaps PowerTV).
> 
> On 10/12/2010 11:48 PM, Grant Likely wrote:
> >From: Dezhong Diao<dediao@cisco.com>
> >
> >Add the ability to enable CONFIG_OF on the MIPS architecture.
> >
> >Signed-off-by: Dezhong Diao<dediao@cisco.com>
> >[grant.likely@secretlab.ca: cleared out obsolete hooks,
> >	removed ARCH_HAS_DEVTREE_MEM from being manually selected,
> >	remove __init tags from header file]
> >Signed-off-by: Grant Likely<grant.likely@secretlab.ca>
> >Cc: linux-mips@linux-mips.org
> >Cc: David Daney<ddaney@caviumnetworks.com>
> >Cc: David VomLehn<dvomlehn@cisco.com>
> >---
> >
> >I've not tested this on anything, but I picked up the MIPS device tree
> >patch written by Dezhong and updated it to match the changes in
> >mainline.  I also half-heartedly tried to rebase the powertv support
> >patch, didn't get very far due to the refactoring in
> >arch/mips/powertv/memory.c
> >
> >Anyway, please take a look and give it a spin.  If it looks good, then
> >I can add it into my -next branch.
> >
> >g.
> >
> >  arch/mips/Kconfig            |   13 ++++
> >  arch/mips/include/asm/prom.h |   35 +++++++++++
> >  arch/mips/kernel/Makefile    |    2 +
> >  arch/mips/kernel/prom.c      |  135 ++++++++++++++++++++++++++++++++++++++++++
> >  arch/mips/kernel/setup.c     |    2 +
> >  5 files changed, 187 insertions(+), 0 deletions(-)
> >  create mode 100644 arch/mips/include/asm/prom.h
> >  create mode 100644 arch/mips/kernel/prom.c
> >
> >diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
> >index 3ad59dd..15e364d 100644
> >--- a/arch/mips/Kconfig
> >+++ b/arch/mips/Kconfig
> >@@ -2107,6 +2107,19 @@ config SECCOMP
> >
> >  	  If unsure, say Y. Only embedded should say N here.
> >
> >+config USE_OF
> >+	bool "Flattened Device Tree support"
> >+	select OF
> >+	select OF_FLATTREE
> >+	help
> >+	  Include support for flattened device tree machine descriptions.
> >+
> >+config ARCH_HAS_DEVTREE_MEM
> >+	bool
> >+	depends on OF
> >+	help
> >+	  The user has a customized function to parse memory nodes.
> >+
> >  endmenu
> >
> 
> These Kconfig items should only be selectable if OF is truly
> supported.  Hardwiring  ARCH_HAS_DEVTREE_MEM to USE_OF at this
> global level doesn't seem quite right either.  I think it is
> conceivable that we would want USE_OF without ARCH_HAS_DEVTREE_MEM.

Right.  That ARCH_HAS_DEVTREE_MEM thing really shouldn't be in this
patch since it is implemented only so that powertv can override them.
Instead, it should be in another patch so it can be reviewed
separately.  I'll remove.

> >+unsigned int irq_create_of_mapping(struct device_node *controller,
> >+				   const u32 *intspec, unsigned int intsize)
> >+{
> >+	return intspec[0];
> >+}
> >+EXPORT_SYMBOL_GPL(irq_create_of_mapping);
> >+
> 
> This mapping function depends on the interrupt controller
> architecture.  It is not at all a good fit for what I want to do on
> Octeon.  We have a hierarchy of interrupt mapping that is best
> described by a two level tree, so has '#interrupt-cells = <2>;'.  We
> definitely need a different implementation than this.
> 

All of the IRQ mapping infrastructure is the biggest current missing
piece needed for the device tree architecture to be nicely cross
platform.  This map function is definitely a hack, but it is a stop
gap until a port or write a cross architecture irq mapping code so
that each irq controller can claim a different slice of the irq number
space and be able to resolve it to interrupt-controller device tree nodes.

> >+void __init early_init_devtree(void *params)
> >+{
> >+	/* Setup flat device-tree pointer */
> >+	initial_boot_params = params;
> >+
> >+	/* Retrieve various informations from the /chosen node of the
> >+	 * device-tree, including the platform type, initrd location and
> >+	 * size, and more ...
> >+	 */
> >+	of_scan_flat_dt(early_init_dt_scan_chosen, NULL);
> >+
> >+	/* Scan memory nodes */
> >+	of_scan_flat_dt(early_init_dt_scan_root, NULL);
> >+	of_scan_flat_dt(early_init_dt_scan_memory_arch, NULL);
> >+}
> >+
> >+void __init device_tree_init(void)
> >+{
> >+	unsigned long base, size;
> >+
> >+	if (!initial_boot_params)
> >+		return;
> >+
> >+	base = virt_to_phys((void *)initial_boot_params);
> >+	size = initial_boot_params->totalsize;
> >+
> >+	/* Before we do anything, lets reserve the dt blob */
> >+	reserve_mem_mach(base, size);
> >+
> >+	unflatten_device_tree();
> >+
> >+	/* free the space reserved for the dt blob */
> >+	free_mem_mach(base, size);
> >+}
> >+
> >+#if defined(CONFIG_DEBUG_FS)&&  defined(DEBUG)
> >+static struct dentry *of_debugfs_root;
> >+static struct debugfs_blob_wrapper flat_dt_blob;
> >+
> >+static int __init export_flat_device_tree(void)
> >+{
> >+	struct dentry *d;
> >+
> >+	flat_dt_blob.data = initial_boot_params;
> >+	flat_dt_blob.size = initial_boot_params->totalsize;
> >+
> >+	d = debugfs_create_blob("flat-device-tree", S_IFREG | S_IRUSR,
> >+				of_debugfs_root,&flat_dt_blob);
> >+	if (!d)
> >+		return 1;
> >+
> >+	return 0;
> >+}
> >+device_initcall(export_flat_device_tree);
> 
> This debugfs bit will fail.  of_debugfs_root is never initialized
> that I can see.

I'm happy to drop the debugfs bits from this patch.

g.

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

* Re: [PATCH 2/2 RFC] of/mips: Add device tree support to MIPS
@ 2010-10-18 21:07       ` Grant Likely
  0 siblings, 0 replies; 12+ messages in thread
From: Grant Likely @ 2010-10-18 21:07 UTC (permalink / raw)
  To: David Daney
  Cc: linux-mips-6z/3iImG2C8G8FEW9MqTrA,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
	ralf-6z/3iImG2C8G8FEW9MqTrA, dvomlehn-FYB4Gu1CFyUAvxtiuMwx3w

On Mon, Oct 18, 2010 at 01:50:56PM -0700, David Daney wrote:
> Although I tested this patch, and it compiles, I have a few more
> comments now that I have studied it.
> 
> Basically, it looks like most of the code in arch/mips/kernel/prom.c
> is not generic to MIPS, but instead highly specific to some platform
> (perhaps PowerTV).
> 
> On 10/12/2010 11:48 PM, Grant Likely wrote:
> >From: Dezhong Diao<dediao-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org>
> >
> >Add the ability to enable CONFIG_OF on the MIPS architecture.
> >
> >Signed-off-by: Dezhong Diao<dediao-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org>
> >[grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org: cleared out obsolete hooks,
> >	removed ARCH_HAS_DEVTREE_MEM from being manually selected,
> >	remove __init tags from header file]
> >Signed-off-by: Grant Likely<grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>
> >Cc: linux-mips-6z/3iImG2C8G8FEW9MqTrA@public.gmane.org
> >Cc: David Daney<ddaney-M3mlKVOIwJVv6pq1l3V1OdBPR1lH4CV8@public.gmane.org>
> >Cc: David VomLehn<dvomlehn-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org>
> >---
> >
> >I've not tested this on anything, but I picked up the MIPS device tree
> >patch written by Dezhong and updated it to match the changes in
> >mainline.  I also half-heartedly tried to rebase the powertv support
> >patch, didn't get very far due to the refactoring in
> >arch/mips/powertv/memory.c
> >
> >Anyway, please take a look and give it a spin.  If it looks good, then
> >I can add it into my -next branch.
> >
> >g.
> >
> >  arch/mips/Kconfig            |   13 ++++
> >  arch/mips/include/asm/prom.h |   35 +++++++++++
> >  arch/mips/kernel/Makefile    |    2 +
> >  arch/mips/kernel/prom.c      |  135 ++++++++++++++++++++++++++++++++++++++++++
> >  arch/mips/kernel/setup.c     |    2 +
> >  5 files changed, 187 insertions(+), 0 deletions(-)
> >  create mode 100644 arch/mips/include/asm/prom.h
> >  create mode 100644 arch/mips/kernel/prom.c
> >
> >diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
> >index 3ad59dd..15e364d 100644
> >--- a/arch/mips/Kconfig
> >+++ b/arch/mips/Kconfig
> >@@ -2107,6 +2107,19 @@ config SECCOMP
> >
> >  	  If unsure, say Y. Only embedded should say N here.
> >
> >+config USE_OF
> >+	bool "Flattened Device Tree support"
> >+	select OF
> >+	select OF_FLATTREE
> >+	help
> >+	  Include support for flattened device tree machine descriptions.
> >+
> >+config ARCH_HAS_DEVTREE_MEM
> >+	bool
> >+	depends on OF
> >+	help
> >+	  The user has a customized function to parse memory nodes.
> >+
> >  endmenu
> >
> 
> These Kconfig items should only be selectable if OF is truly
> supported.  Hardwiring  ARCH_HAS_DEVTREE_MEM to USE_OF at this
> global level doesn't seem quite right either.  I think it is
> conceivable that we would want USE_OF without ARCH_HAS_DEVTREE_MEM.

Right.  That ARCH_HAS_DEVTREE_MEM thing really shouldn't be in this
patch since it is implemented only so that powertv can override them.
Instead, it should be in another patch so it can be reviewed
separately.  I'll remove.

> >+unsigned int irq_create_of_mapping(struct device_node *controller,
> >+				   const u32 *intspec, unsigned int intsize)
> >+{
> >+	return intspec[0];
> >+}
> >+EXPORT_SYMBOL_GPL(irq_create_of_mapping);
> >+
> 
> This mapping function depends on the interrupt controller
> architecture.  It is not at all a good fit for what I want to do on
> Octeon.  We have a hierarchy of interrupt mapping that is best
> described by a two level tree, so has '#interrupt-cells = <2>;'.  We
> definitely need a different implementation than this.
> 

All of the IRQ mapping infrastructure is the biggest current missing
piece needed for the device tree architecture to be nicely cross
platform.  This map function is definitely a hack, but it is a stop
gap until a port or write a cross architecture irq mapping code so
that each irq controller can claim a different slice of the irq number
space and be able to resolve it to interrupt-controller device tree nodes.

> >+void __init early_init_devtree(void *params)
> >+{
> >+	/* Setup flat device-tree pointer */
> >+	initial_boot_params = params;
> >+
> >+	/* Retrieve various informations from the /chosen node of the
> >+	 * device-tree, including the platform type, initrd location and
> >+	 * size, and more ...
> >+	 */
> >+	of_scan_flat_dt(early_init_dt_scan_chosen, NULL);
> >+
> >+	/* Scan memory nodes */
> >+	of_scan_flat_dt(early_init_dt_scan_root, NULL);
> >+	of_scan_flat_dt(early_init_dt_scan_memory_arch, NULL);
> >+}
> >+
> >+void __init device_tree_init(void)
> >+{
> >+	unsigned long base, size;
> >+
> >+	if (!initial_boot_params)
> >+		return;
> >+
> >+	base = virt_to_phys((void *)initial_boot_params);
> >+	size = initial_boot_params->totalsize;
> >+
> >+	/* Before we do anything, lets reserve the dt blob */
> >+	reserve_mem_mach(base, size);
> >+
> >+	unflatten_device_tree();
> >+
> >+	/* free the space reserved for the dt blob */
> >+	free_mem_mach(base, size);
> >+}
> >+
> >+#if defined(CONFIG_DEBUG_FS)&&  defined(DEBUG)
> >+static struct dentry *of_debugfs_root;
> >+static struct debugfs_blob_wrapper flat_dt_blob;
> >+
> >+static int __init export_flat_device_tree(void)
> >+{
> >+	struct dentry *d;
> >+
> >+	flat_dt_blob.data = initial_boot_params;
> >+	flat_dt_blob.size = initial_boot_params->totalsize;
> >+
> >+	d = debugfs_create_blob("flat-device-tree", S_IFREG | S_IRUSR,
> >+				of_debugfs_root,&flat_dt_blob);
> >+	if (!d)
> >+		return 1;
> >+
> >+	return 0;
> >+}
> >+device_initcall(export_flat_device_tree);
> 
> This debugfs bit will fail.  of_debugfs_root is never initialized
> that I can see.

I'm happy to drop the debugfs bits from this patch.

g.

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

end of thread, other threads:[~2010-10-18 21:08 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-10-13  6:44 [PATCH 1/2] of/flattree: Eliminate need to provide early_init_dt_scan_chosen_arch Grant Likely
2010-10-13  6:44 ` Grant Likely
2010-10-13  6:48 ` [PATCH 2/2 RFC] of/mips: Add device tree support to MIPS Grant Likely
2010-10-13  6:48   ` Grant Likely
2010-10-14 21:09   ` David Daney
2010-10-18 20:50   ` David Daney
2010-10-18 20:50     ` David Daney
2010-10-18 21:07     ` Grant Likely
2010-10-18 21:07       ` Grant Likely
2010-10-14 21:08 ` [PATCH 1/2] of/flattree: Eliminate need to provide early_init_dt_scan_chosen_arch David Daney
2010-10-15  4:53   ` Grant Likely
2010-10-15  4:53     ` Grant Likely

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.