[POWERPC] Add of_platform support for ROM devices
authorVitaly Wool <vwool@ru.mvista.com>
Mon, 20 Nov 2006 13:32:39 +0000 (16:32 +0300)
committerPaul Mackerras <paulus@samba.org>
Mon, 4 Dec 2006 09:41:24 +0000 (20:41 +1100)
This adds support for flash device descriptions to the OF device tree.
It's inspired by and partially borrowed from Sergei's patch "[RFC]
Adding MTD to device tree.patch".

Signed-off-by: Vitaly Wool <vwool@ru.mvista.com>
Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Documentation/powerpc/booting-without-of.txt
arch/powerpc/sysdev/Makefile
arch/powerpc/sysdev/rom.c [new file with mode: 0644]

index 4ac2d641fcb6a9b848fdb3c0761ea57b0ec25cb4..b3bd36668db3a4cef12a7996dfb51f78180da129 100644 (file)
@@ -6,6 +6,8 @@
     IBM Corp.
 (c) 2005 Becky Bruce <becky.bruce at freescale.com>,
     Freescale Semiconductor, FSL SOC and 32-bit additions
+(c) 2006 MontaVista Software, Inc.
+    Flash chip node definition
 
    May 18, 2005: Rev 0.1 - Initial draft, no chapter III yet.
 
@@ -1693,6 +1695,43 @@ platforms are moved over to use the flattened-device-tree model.
                };
        };
 
+    g) Flash chip nodes
+
+    Flash chips (Memory Technology Devices) are often used for solid state
+    file systems on embedded devices.
+
+    Required properties:
+
+     - device_type : has to be "rom"
+     - compatible : Should specify what this ROM device is compatible with
+       (i.e. "onenand"). Currently, this is most likely to be "direct-mapped"
+       (which corresponds to the MTD physmap mapping driver).
+     - regs : Offset and length of the register set (or memory mapping) for
+       the device.
+
+    Recommended properties :
+
+     - bank-width : Width of the flash data bus in bytes. Required
+       for the NOR flashes (compatible == "direct-mapped" and others) ONLY.
+     - partitions : Several pairs of 32-bit values where the first value is
+       partition's offset from the start of the device and the second one is
+       partition size in bytes with LSB used to signify a read only
+       partititon (so, the parition size should always be an even number).
+     - partition-names : The list of concatenated zero terminated strings
+       representing the partition names.
+
+   Example:
+
+       flash@ff000000 {
+               device_type = "rom";
+               compatible = "direct-mapped";
+               regs = <ff000000 01000000>;
+               bank-width = <4>;
+               partitions = <00000000 00f80000
+                             00f80000 00080001>;
+               partition-names = "fs\0firmware";
+       };
+
    More devices will be defined as this spec matures.
 
 
index bae874626fc30f95a9400ed19764d49645793b9f..ee7c6d48af7fb6206166f7340b48eb85496615fa 100644 (file)
@@ -11,6 +11,7 @@ obj-$(CONFIG_MMIO_NVRAM)      += mmio_nvram.o
 obj-$(CONFIG_FSL_SOC)          += fsl_soc.o
 obj-$(CONFIG_TSI108_BRIDGE)    += tsi108_pci.o tsi108_dev.o
 obj-$(CONFIG_QUICC_ENGINE)     += qe_lib/
+obj-$(CONFIG_MTD)              += rom.o
 
 ifeq ($(CONFIG_PPC_MERGE),y)
 obj-$(CONFIG_PPC_I8259)                += i8259.o
diff --git a/arch/powerpc/sysdev/rom.c b/arch/powerpc/sysdev/rom.c
new file mode 100644 (file)
index 0000000..bf5b3f1
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * ROM device registration
+ *
+ * (C) 2006 MontaVista Software, Inc. This file is licensed under
+ * the terms of the GNU General Public License version 2. This program
+ * is licensed "as is" without any warranty of any kind, whether express
+ * or implied.
+ */
+
+#include <linux/kernel.h>
+#include <asm/of_device.h>
+
+static int __init powerpc_flash_init(void)
+{
+       struct device_node *node = NULL;
+
+       /*
+        * Register all the devices which type is "rom"
+        */
+       while ((node = of_find_node_by_type(node, "rom")) != NULL) {
+               if (node->name == NULL) {
+                       printk(KERN_WARNING "powerpc_flash_init: found 'rom' "
+                               "device, but with no name, skipping...\n");
+                       continue;
+               }
+               of_platform_device_create(node, node->name, NULL);
+       }
+       return 0;
+}
+
+arch_initcall(powerpc_flash_init);