[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: Arnd Bergmann <arnd.bergmann@de.ibm.com>
This commit is contained in:
committed by
Paul Mackerras
parent
eb30c72026
commit
e22ba7e381
@@ -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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
|
|
||||||
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/, \
|
|||||||
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)
|
|||||||
|
|
||||||
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 @@
|
|||||||
#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)
|
|||||||
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)
|
|||||||
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 @@
|
|||||||
#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)
|
|||||||
{
|
{
|
||||||
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 @@
|
|||||||
#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 {
|
|||||||
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 {
|
|||||||
#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 {
|
|||||||
#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,
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user