Commit e22ba7e3 authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Paul Mackerras

[POWERPC] ps3: multiplatform build fixes

A few code paths need to check whether or not they are running
on the PS3's LV1 hypervisor before making hcalls. This introduces
a new firmware feature bit for this, FW_FEATURE_PS3_LV1.

Now when both PS3 and IBM_CELL_BLADE are enabled, but not PSERIES,
FW_FEATURE_PS3_LV1 and FW_FEATURE_LPAR get enabled at compile time,
which is a bug. The same problem can also happen for (PPC_ISERIES &&
!PPC_PSERIES && PPC_SOMETHING_ELSE). In order to solve this, I
introduce a new CONFIG_PPC_NATIVE option that is set when at least
one platform is selected that can run without a hypervisor and then
turns the firmware feature check into a run-time option.

The new cell oprofile support that was recently merged does not
work on hypervisor based platforms like the PS3, therefore make
it depend on PPC_CELL_NATIVE instead of PPC_CELL. This may change
if we get oprofile support for PS3.
Signed-off-by: default avatarArnd Bergmann <arnd.bergmann@de.ibm.com>
parent eb30c720
...@@ -390,6 +390,7 @@ config PPC_PSERIES ...@@ -390,6 +390,7 @@ config PPC_PSERIES
select PPC_RTAS select PPC_RTAS
select RTAS_ERROR_LOGGING select RTAS_ERROR_LOGGING
select PPC_UDBG_16550 select PPC_UDBG_16550
select PPC_NATIVE
default y default y
config PPC_ISERIES config PPC_ISERIES
...@@ -406,6 +407,7 @@ config PPC_CHRP ...@@ -406,6 +407,7 @@ config PPC_CHRP
select PPC_RTAS select PPC_RTAS
select PPC_MPC106 select PPC_MPC106
select PPC_UDBG_16550 select PPC_UDBG_16550
select PPC_NATIVE
default y default y
config PPC_EFIKA config PPC_EFIKA
...@@ -414,6 +416,7 @@ config PPC_EFIKA ...@@ -414,6 +416,7 @@ config PPC_EFIKA
select PPC_RTAS select PPC_RTAS
select RTAS_PROC select RTAS_PROC
select PPC_MPC52xx select PPC_MPC52xx
select PPC_NATIVE
default y default y
config PPC_PMAC config PPC_PMAC
...@@ -422,6 +425,7 @@ config PPC_PMAC ...@@ -422,6 +425,7 @@ config PPC_PMAC
select MPIC select MPIC
select PPC_INDIRECT_PCI if PPC32 select PPC_INDIRECT_PCI if PPC32
select PPC_MPC106 if PPC32 select PPC_MPC106 if PPC32
select PPC_NATIVE
default y default y
config PPC_PMAC64 config PPC_PMAC64
...@@ -441,6 +445,7 @@ config PPC_PREP ...@@ -441,6 +445,7 @@ config PPC_PREP
select PPC_I8259 select PPC_I8259
select PPC_INDIRECT_PCI select PPC_INDIRECT_PCI
select PPC_UDBG_16550 select PPC_UDBG_16550
select PPC_NATIVE
default y default y
config PPC_MAPLE config PPC_MAPLE
...@@ -452,6 +457,7 @@ config PPC_MAPLE ...@@ -452,6 +457,7 @@ config PPC_MAPLE
select GENERIC_TBSYNC select GENERIC_TBSYNC
select PPC_UDBG_16550 select PPC_UDBG_16550
select PPC_970_NAP select PPC_970_NAP
select PPC_NATIVE
default n default n
help help
This option enables support for the Maple 970FX Evaluation Board. This option enables support for the Maple 970FX Evaluation Board.
...@@ -464,6 +470,7 @@ config PPC_PASEMI ...@@ -464,6 +470,7 @@ config PPC_PASEMI
select MPIC select MPIC
select PPC_UDBG_16550 select PPC_UDBG_16550
select GENERIC_TBSYNC select GENERIC_TBSYNC
select PPC_NATIVE
help help
This option enables support for PA Semi's PWRficient line This option enables support for PA Semi's PWRficient line
of SoC processors, including PA6T-1682M of SoC processors, including PA6T-1682M
...@@ -478,6 +485,7 @@ config PPC_CELL_NATIVE ...@@ -478,6 +485,7 @@ config PPC_CELL_NATIVE
select PPC_DCR_MMIO select PPC_DCR_MMIO
select PPC_OF_PLATFORM_PCI select PPC_OF_PLATFORM_PCI
select PPC_INDIRECT_IO select PPC_INDIRECT_IO
select PPC_NATIVE
select MPIC select MPIC
default n default n
...@@ -490,11 +498,6 @@ config PPC_IBM_CELL_BLADE ...@@ -490,11 +498,6 @@ config PPC_IBM_CELL_BLADE
select PPC_UDBG_16550 select PPC_UDBG_16550
select UDBG_RTAS_CONSOLE select UDBG_RTAS_CONSOLE
config UDBG_RTAS_CONSOLE
bool "RTAS based debug console"
depends on PPC_RTAS
default n
config PPC_PS3 config PPC_PS3
bool "Sony PS3" bool "Sony PS3"
depends on PPC_MULTIPLATFORM && PPC64 depends on PPC_MULTIPLATFORM && PPC64
...@@ -503,6 +506,19 @@ config PPC_PS3 ...@@ -503,6 +506,19 @@ config PPC_PS3
This option enables support for the Sony PS3 game console This option enables support for the Sony PS3 game console
and other platforms using the PS3 hypervisor. and other platforms using the PS3 hypervisor.
config PPC_NATIVE
bool
depends on PPC_MULTIPLATFORM
help
Support for running natively on the hardware, i.e. without
a hypervisor. This option is not user-selectable but should
be selected by all platforms that need it.
config UDBG_RTAS_CONSOLE
bool "RTAS based debug console"
depends on PPC_RTAS
default n
config XICS config XICS
depends on PPC_PSERIES depends on PPC_PSERIES
bool bool
......
...@@ -8,7 +8,7 @@ endif ...@@ -8,7 +8,7 @@ endif
obj-y := fault.o mem.o lmb.o obj-y := fault.o mem.o lmb.o
obj-$(CONFIG_PPC32) += init_32.o pgtable_32.o mmu_context_32.o obj-$(CONFIG_PPC32) += init_32.o pgtable_32.o mmu_context_32.o
hash-$(CONFIG_PPC_MULTIPLATFORM) := hash_native_64.o hash-$(CONFIG_PPC_NATIVE) := hash_native_64.o
obj-$(CONFIG_PPC64) += init_64.o pgtable_64.o mmu_context_64.o \ obj-$(CONFIG_PPC64) += init_64.o pgtable_64.o mmu_context_64.o \
hash_utils_64.o hash_low_64.o tlb_64.o \ hash_utils_64.o hash_low_64.o tlb_64.o \
slb_low.o slb.o stab.o mmap.o imalloc.o \ slb_low.o slb.o stab.o mmap.o imalloc.o \
......
...@@ -11,7 +11,7 @@ DRIVER_OBJS := $(addprefix ../../../drivers/oprofile/, \ ...@@ -11,7 +11,7 @@ DRIVER_OBJS := $(addprefix ../../../drivers/oprofile/, \
timer_int.o ) timer_int.o )
oprofile-y := $(DRIVER_OBJS) common.o backtrace.o oprofile-y := $(DRIVER_OBJS) common.o backtrace.o
oprofile-$(CONFIG_PPC_CELL) += op_model_cell.o oprofile-$(CONFIG_PPC_CELL_NATIVE) += op_model_cell.o
oprofile-$(CONFIG_PPC64) += op_model_rs64.o op_model_power4.o oprofile-$(CONFIG_PPC64) += op_model_rs64.o op_model_power4.o
oprofile-$(CONFIG_FSL_BOOKE) += op_model_fsl_booke.o oprofile-$(CONFIG_FSL_BOOKE) += op_model_fsl_booke.o
oprofile-$(CONFIG_6xx) += op_model_7450.o oprofile-$(CONFIG_6xx) += op_model_7450.o
...@@ -147,7 +147,7 @@ int __init oprofile_arch_init(struct oprofile_operations *ops) ...@@ -147,7 +147,7 @@ int __init oprofile_arch_init(struct oprofile_operations *ops)
switch (cur_cpu_spec->oprofile_type) { switch (cur_cpu_spec->oprofile_type) {
#ifdef CONFIG_PPC64 #ifdef CONFIG_PPC64
#ifdef CONFIG_PPC_CELL #ifdef CONFIG_PPC_CELL_NATIVE
case PPC_OPROFILE_CELL: case PPC_OPROFILE_CELL:
model = &op_model_cell; model = &op_model_cell;
break; break;
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/memory_hotplug.h> #include <linux/memory_hotplug.h>
#include <asm/firmware.h>
#include <asm/lmb.h> #include <asm/lmb.h>
#include <asm/udbg.h> #include <asm/udbg.h>
#include <asm/ps3.h> #include <asm/ps3.h>
...@@ -293,6 +294,9 @@ static int __init ps3_mm_add_memory(void) ...@@ -293,6 +294,9 @@ static int __init ps3_mm_add_memory(void)
unsigned long start_pfn; unsigned long start_pfn;
unsigned long nr_pages; unsigned long nr_pages;
if (!firmware_has_feature(FW_FEATURE_PS3_LV1))
return 0;
BUG_ON(!mem_init_done); BUG_ON(!mem_init_done);
start_addr = USE_LPAR_ADDR ? map.r1.base : map.rm.size; start_addr = USE_LPAR_ADDR ? map.r1.base : map.rm.size;
......
...@@ -108,7 +108,7 @@ static int __init ps3_probe(void) ...@@ -108,7 +108,7 @@ static int __init ps3_probe(void)
if (!of_flat_dt_is_compatible(dt_root, "PS3")) if (!of_flat_dt_is_compatible(dt_root, "PS3"))
return 0; return 0;
powerpc_firmware_features |= FW_FEATURE_LPAR; powerpc_firmware_features |= FW_FEATURE_PS3_POSSIBLE;
ps3_os_area_init(); ps3_os_area_init();
ps3_mm_init(); ps3_mm_init();
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <asm/udbg.h> #include <asm/udbg.h>
#include <asm/ps3.h> #include <asm/ps3.h>
#include <asm/lv1call.h> #include <asm/lv1call.h>
#include <asm/firmware.h>
#define dump_mmio_region(_a) _dump_mmio_region(_a, __func__, __LINE__) #define dump_mmio_region(_a) _dump_mmio_region(_a, __func__, __LINE__)
static void _dump_mmio_region(const struct ps3_mmio_region* r, static void _dump_mmio_region(const struct ps3_mmio_region* r,
...@@ -167,6 +168,9 @@ int __init ps3_system_bus_init(void) ...@@ -167,6 +168,9 @@ int __init ps3_system_bus_init(void)
{ {
int result; int result;
if (!firmware_has_feature(FW_FEATURE_PS3_LV1))
return 0;
result = bus_register(&ps3_system_bus_type); result = bus_register(&ps3_system_bus_type);
BUG_ON(result); BUG_ON(result);
return result; return result;
......
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
#define FW_FEATURE_SPLPAR ASM_CONST(0x0000000000100000) #define FW_FEATURE_SPLPAR ASM_CONST(0x0000000000100000)
#define FW_FEATURE_ISERIES ASM_CONST(0x0000000000200000) #define FW_FEATURE_ISERIES ASM_CONST(0x0000000000200000)
#define FW_FEATURE_LPAR ASM_CONST(0x0000000000400000) #define FW_FEATURE_LPAR ASM_CONST(0x0000000000400000)
#define FW_FEATURE_PS3_LV1 ASM_CONST(0x0000000000800000)
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
...@@ -58,8 +59,10 @@ enum { ...@@ -58,8 +59,10 @@ enum {
FW_FEATURE_PSERIES_ALWAYS = 0, FW_FEATURE_PSERIES_ALWAYS = 0,
FW_FEATURE_ISERIES_POSSIBLE = FW_FEATURE_ISERIES | FW_FEATURE_LPAR, FW_FEATURE_ISERIES_POSSIBLE = FW_FEATURE_ISERIES | FW_FEATURE_LPAR,
FW_FEATURE_ISERIES_ALWAYS = FW_FEATURE_ISERIES | FW_FEATURE_LPAR, FW_FEATURE_ISERIES_ALWAYS = FW_FEATURE_ISERIES | FW_FEATURE_LPAR,
FW_FEATURE_PS3_POSSIBLE = FW_FEATURE_LPAR, FW_FEATURE_PS3_POSSIBLE = FW_FEATURE_LPAR | FW_FEATURE_PS3_LV1,
FW_FEATURE_PS3_ALWAYS = FW_FEATURE_LPAR, FW_FEATURE_PS3_ALWAYS = FW_FEATURE_LPAR | FW_FEATURE_PS3_LV1,
FW_FEATURE_NATIVE_POSSIBLE = 0,
FW_FEATURE_NATIVE_ALWAYS = 0,
FW_FEATURE_POSSIBLE = FW_FEATURE_POSSIBLE =
#ifdef CONFIG_PPC_PSERIES #ifdef CONFIG_PPC_PSERIES
FW_FEATURE_PSERIES_POSSIBLE | FW_FEATURE_PSERIES_POSSIBLE |
...@@ -69,6 +72,9 @@ enum { ...@@ -69,6 +72,9 @@ enum {
#endif #endif
#ifdef CONFIG_PPC_PS3 #ifdef CONFIG_PPC_PS3
FW_FEATURE_PS3_POSSIBLE | FW_FEATURE_PS3_POSSIBLE |
#endif
#ifdef CONFIG_PPC_NATIVE
FW_FEATURE_NATIVE_ALWAYS |
#endif #endif
0, 0,
FW_FEATURE_ALWAYS = FW_FEATURE_ALWAYS =
...@@ -80,6 +86,9 @@ enum { ...@@ -80,6 +86,9 @@ enum {
#endif #endif
#ifdef CONFIG_PPC_PS3 #ifdef CONFIG_PPC_PS3
FW_FEATURE_PS3_ALWAYS & FW_FEATURE_PS3_ALWAYS &
#endif
#ifdef CONFIG_PPC_NATIVE
FW_FEATURE_NATIVE_ALWAYS &
#endif #endif
FW_FEATURE_POSSIBLE, FW_FEATURE_POSSIBLE,
......
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