Commit 133dda1e authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Paul Mackerras

[PATCH] powerpc: Fix cell blade detection

The IBM Cell blade firmware might confuse the kernel to think it's a
pSeries machine. This fixes it for now. With a bit of luck, the firmware
will be updated to avoid that in the future but currently that patch is
needed.
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 33b74977
...@@ -1623,6 +1623,15 @@ static int __init prom_find_machine_type(void) ...@@ -1623,6 +1623,15 @@ static int __init prom_find_machine_type(void)
if (strstr(p, RELOC("Power Macintosh")) || if (strstr(p, RELOC("Power Macintosh")) ||
strstr(p, RELOC("MacRISC"))) strstr(p, RELOC("MacRISC")))
return PLATFORM_POWERMAC; 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; i += sl + 1;
} }
} }
......
...@@ -125,14 +125,13 @@ static void __init cell_init_early(void) ...@@ -125,14 +125,13 @@ static void __init cell_init_early(void)
static int __init cell_probe(void) 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(); 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;
} }
/* /*
......
...@@ -389,6 +389,7 @@ static int __init pSeries_probe_hypertas(unsigned long node, ...@@ -389,6 +389,7 @@ static int __init pSeries_probe_hypertas(unsigned long node,
static int __init pSeries_probe(void) 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(), char *dtype = of_get_flat_dt_prop(of_get_flat_dt_root(),
"device_type", NULL); "device_type", NULL);
if (dtype == NULL) if (dtype == NULL)
...@@ -396,6 +397,13 @@ static int __init pSeries_probe(void) ...@@ -396,6 +397,13 @@ static int __init pSeries_probe(void)
if (strcmp(dtype, "chrp")) if (strcmp(dtype, "chrp"))
return 0; 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"); DBG("pSeries detected, looking for LPAR capability...\n");
/* Now try to figure out if we are running on LPAR */ /* Now try to figure out if we are running on LPAR */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment