Merge branches 'upstream', 'upstream-fixes' and 'debugfs' into for-linus
[sfrench/cifs-2.6.git] / arch / powerpc / platforms / maple / setup.c
index bfd60e4acceeeb21be02e2f68cc58d251d696395..0636a3df6978bed791e6d6160655f3cd56f748ff 100644 (file)
@@ -335,3 +335,62 @@ define_machine(maple) {
        .progress               = maple_progress,
        .power_save             = power4_idle,
 };
+
+#ifdef CONFIG_EDAC
+/*
+ * Register a platform device for CPC925 memory controller on
+ * Motorola ATCA-6101 blade.
+ */
+#define MAPLE_CPC925_MODEL     "Motorola,ATCA-6101"
+static int __init maple_cpc925_edac_setup(void)
+{
+       struct platform_device *pdev;
+       struct device_node *np = NULL;
+       struct resource r;
+       const unsigned char *model;
+       int ret;
+
+       np = of_find_node_by_path("/");
+       if (!np) {
+               printk(KERN_ERR "%s: Unable to get root node\n", __func__);
+               return -ENODEV;
+       }
+
+       model = (const unsigned char *)of_get_property(np, "model", NULL);
+       if (!model) {
+               printk(KERN_ERR "%s: Unabel to get model info\n", __func__);
+               return -ENODEV;
+       }
+
+       ret = strcmp(model, MAPLE_CPC925_MODEL);
+       of_node_put(np);
+
+       if (ret != 0)
+               return 0;
+
+       np = of_find_node_by_type(NULL, "memory-controller");
+       if (!np) {
+               printk(KERN_ERR "%s: Unable to find memory-controller node\n",
+                       __func__);
+               return -ENODEV;
+       }
+
+       ret = of_address_to_resource(np, 0, &r);
+       of_node_put(np);
+
+       if (ret < 0) {
+               printk(KERN_ERR "%s: Unable to get memory-controller reg\n",
+                       __func__);
+               return -ENODEV;
+       }
+
+       pdev = platform_device_register_simple("cpc925_edac", 0, &r, 1);
+       if (IS_ERR(pdev))
+               return PTR_ERR(pdev);
+
+       printk(KERN_INFO "%s: CPC925 platform device created\n", __func__);
+
+       return 0;
+}
+machine_device_initcall(maple, maple_cpc925_edac_setup);
+#endif