select PPC_RTAS
        select RTAS_ERROR_LOGGING
        select PPC_UDBG_16550
+       select PPC_NATIVE
        default y
 
 config PPC_ISERIES
        select PPC_RTAS
        select PPC_MPC106
        select PPC_UDBG_16550
+       select PPC_NATIVE
        default y
 
 config PPC_EFIKA
        select PPC_RTAS
        select RTAS_PROC
        select PPC_MPC52xx
+       select PPC_NATIVE
        default y
 
 config PPC_PMAC
        select MPIC
        select PPC_INDIRECT_PCI if PPC32
        select PPC_MPC106 if PPC32
+       select PPC_NATIVE
        default y
 
 config PPC_PMAC64
        select PPC_I8259
        select PPC_INDIRECT_PCI
        select PPC_UDBG_16550
+       select PPC_NATIVE
        default y
 
 config PPC_MAPLE
        select GENERIC_TBSYNC
        select PPC_UDBG_16550
        select PPC_970_NAP
+       select PPC_NATIVE
        default n
        help
           This option enables support for the Maple 970FX Evaluation Board.
        select MPIC
        select PPC_UDBG_16550
        select GENERIC_TBSYNC
+       select PPC_NATIVE
        help
          This option enables support for PA Semi's PWRficient line
          of SoC processors, including PA6T-1682M
        select PPC_DCR_MMIO
        select PPC_OF_PLATFORM_PCI
        select PPC_INDIRECT_IO
+       select PPC_NATIVE
        select MPIC
        default n
 
        select PPC_UDBG_16550
        select UDBG_RTAS_CONSOLE
 
-config UDBG_RTAS_CONSOLE
-       bool "RTAS based debug console"
-       depends on PPC_RTAS
-       default n
-
 config PPC_PS3
        bool "Sony PS3"
        depends on PPC_MULTIPLATFORM && PPC64
          This option enables support for the Sony PS3 game console
          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
        depends on PPC_PSERIES
        bool
 
 
 obj-y                          := fault.o mem.o lmb.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 \
                                   hash_utils_64.o hash_low_64.o tlb_64.o \
                                   slb_low.o slb.o stab.o mmap.o imalloc.o \
 
                timer_int.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_FSL_BOOKE) += op_model_fsl_booke.o
 oprofile-$(CONFIG_6xx) += op_model_7450.o
 
 
        switch (cur_cpu_spec->oprofile_type) {
 #ifdef CONFIG_PPC64
-#ifdef CONFIG_PPC_CELL
+#ifdef CONFIG_PPC_CELL_NATIVE
                case PPC_OPROFILE_CELL:
                        model = &op_model_cell;
                        break;
 
 #include <linux/module.h>
 #include <linux/memory_hotplug.h>
 
+#include <asm/firmware.h>
 #include <asm/lmb.h>
 #include <asm/udbg.h>
 #include <asm/ps3.h>
        unsigned long start_pfn;
        unsigned long nr_pages;
 
+       if (!firmware_has_feature(FW_FEATURE_PS3_LV1))
+               return 0;
+
        BUG_ON(!mem_init_done);
 
        start_addr = USE_LPAR_ADDR ? map.r1.base : map.rm.size;
 
        if (!of_flat_dt_is_compatible(dt_root, "PS3"))
                return 0;
 
-       powerpc_firmware_features |= FW_FEATURE_LPAR;
+       powerpc_firmware_features |= FW_FEATURE_PS3_POSSIBLE;
 
        ps3_os_area_init();
        ps3_mm_init();
 
 #include <asm/udbg.h>
 #include <asm/ps3.h>
 #include <asm/lv1call.h>
+#include <asm/firmware.h>
 
 #define dump_mmio_region(_a) _dump_mmio_region(_a, __func__, __LINE__)
 static void _dump_mmio_region(const struct ps3_mmio_region* r,
 {
        int result;
 
+       if (!firmware_has_feature(FW_FEATURE_PS3_LV1))
+               return 0;
+
        result = bus_register(&ps3_system_bus_type);
        BUG_ON(result);
        return result;
 
 #define FW_FEATURE_SPLPAR      ASM_CONST(0x0000000000100000)
 #define FW_FEATURE_ISERIES     ASM_CONST(0x0000000000200000)
 #define FW_FEATURE_LPAR                ASM_CONST(0x0000000000400000)
+#define FW_FEATURE_PS3_LV1     ASM_CONST(0x0000000000800000)
 
 #ifndef __ASSEMBLY__
 
        FW_FEATURE_PSERIES_ALWAYS = 0,
        FW_FEATURE_ISERIES_POSSIBLE = 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_ALWAYS = FW_FEATURE_LPAR,
+       FW_FEATURE_PS3_POSSIBLE = FW_FEATURE_LPAR | FW_FEATURE_PS3_LV1,
+       FW_FEATURE_PS3_ALWAYS = FW_FEATURE_LPAR | FW_FEATURE_PS3_LV1,
+       FW_FEATURE_NATIVE_POSSIBLE = 0,
+       FW_FEATURE_NATIVE_ALWAYS = 0,
        FW_FEATURE_POSSIBLE =
 #ifdef CONFIG_PPC_PSERIES
                FW_FEATURE_PSERIES_POSSIBLE |
 #endif
 #ifdef CONFIG_PPC_PS3
                FW_FEATURE_PS3_POSSIBLE |
+#endif
+#ifdef CONFIG_PPC_NATIVE
+               FW_FEATURE_NATIVE_ALWAYS |
 #endif
                0,
        FW_FEATURE_ALWAYS =
 #endif
 #ifdef CONFIG_PPC_PS3
                FW_FEATURE_PS3_ALWAYS &
+#endif
+#ifdef CONFIG_PPC_NATIVE
+               FW_FEATURE_NATIVE_ALWAYS &
 #endif
                FW_FEATURE_POSSIBLE,