if (strstr(p, RELOC("Power Macintosh")) ||
                            strstr(p, RELOC("MacRISC")))
                                return PLATFORM_POWERMAC;
+#ifdef CONFIG_PPC64
+                       /* We must make sure we don't detect the IBM Cell
+                        * blades as pSeries due to some firmware issues,
+                        * so we do it here.
+                        */
+                       if (strstr(p, RELOC("IBM,CBEA")) ||
+                           strstr(p, RELOC("IBM,CPBW-1.0")))
+                               return PLATFORM_GENERIC;
+#endif /* CONFIG_PPC64 */
                        i += sl + 1;
                }
        }
 
 
 static int __init cell_probe(void)
 {
-       /* XXX This is temporary, the Cell maintainer will come up with
-        * more appropriate detection logic
-        */
        unsigned long root = of_get_flat_dt_root();
-       if (!of_flat_dt_is_compatible(root, "IBM,CPBW-1.0"))
-               return 0;
 
-       return 1;
+       if (of_flat_dt_is_compatible(root, "IBM,CBEA") ||
+           of_flat_dt_is_compatible(root, "IBM,CPBW-1.0"))
+               return 1;
+
+       return 0;
 }
 
 /*
 
 
 static int __init pSeries_probe(void)
 {
+       unsigned long root = of_get_flat_dt_root();
        char *dtype = of_get_flat_dt_prop(of_get_flat_dt_root(),
                                          "device_type", NULL);
        if (dtype == NULL)
        if (strcmp(dtype, "chrp"))
                return 0;
 
+       /* Cell blades firmware claims to be chrp while it's not. Until this
+        * is fixed, we need to avoid those here.
+        */
+       if (of_flat_dt_is_compatible(root, "IBM,CPBW-1.0") ||
+           of_flat_dt_is_compatible(root, "IBM,CBEA"))
+               return 0;
+
        DBG("pSeries detected, looking for LPAR capability...\n");
 
        /* Now try to figure out if we are running on LPAR */