Merge remote-tracking branch 'origin/master' into next
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 24 Apr 2013 04:43:36 +0000 (14:43 +1000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 24 Apr 2013 04:43:36 +0000 (14:43 +1000)
Merge upstream to get the audit fixes

66 files changed:
Documentation/powerpc/00-INDEX
Documentation/powerpc/ptrace.txt
Documentation/powerpc/sound.txt [deleted file]
Documentation/powerpc/zImage_layout.txt [deleted file]
arch/metag/mm/Kconfig
arch/powerpc/Kconfig
arch/powerpc/configs/ps3_defconfig
arch/powerpc/include/asm/bitops.h
arch/powerpc/include/asm/dma.h
arch/powerpc/include/asm/hardirq.h
arch/powerpc/include/asm/io.h
arch/powerpc/include/asm/parport.h
arch/powerpc/include/asm/processor.h
arch/powerpc/include/asm/ptrace.h
arch/powerpc/include/asm/reg.h
arch/powerpc/include/asm/smp.h
arch/powerpc/include/uapi/asm/ptrace.h
arch/powerpc/kernel/cpu_setup_power.S
arch/powerpc/kernel/dbell.c
arch/powerpc/kernel/exceptions-64s.S
arch/powerpc/kernel/iommu.c
arch/powerpc/kernel/irq.c
arch/powerpc/kernel/kgdb.c
arch/powerpc/kernel/lparcfg.c
arch/powerpc/kernel/nvram_64.c
arch/powerpc/kernel/pci-common.c
arch/powerpc/kernel/process.c
arch/powerpc/kernel/ptrace.c
arch/powerpc/kernel/ptrace32.c
arch/powerpc/kernel/rtas_flash.c
arch/powerpc/kernel/rtas_pci.c
arch/powerpc/kernel/setup-common.c
arch/powerpc/kernel/time.c
arch/powerpc/kernel/vdso.c
arch/powerpc/kernel/vdso32/gettimeofday.S
arch/powerpc/kernel/vdso32/vdso32.lds.S
arch/powerpc/kernel/vdso64/gettimeofday.S
arch/powerpc/kernel/vdso64/vdso64.lds.S
arch/powerpc/kvm/book3s_hv_interrupts.S
arch/powerpc/kvm/book3s_pr.c
arch/powerpc/mm/hash_utils_64.c
arch/powerpc/mm/hugetlbpage-hash64.c
arch/powerpc/mm/icswx.c
arch/powerpc/mm/mem.c
arch/powerpc/mm/numa.c
arch/powerpc/platforms/40x/Kconfig
arch/powerpc/platforms/Kconfig
arch/powerpc/platforms/cell/pmu.c
arch/powerpc/platforms/cell/spufs/inode.c
arch/powerpc/platforms/embedded6xx/Kconfig
arch/powerpc/platforms/powernv/pci-ioda.c
arch/powerpc/platforms/powernv/pci-p5ioc2.c
arch/powerpc/platforms/powernv/pci.c
arch/powerpc/platforms/powernv/pci.h
arch/powerpc/platforms/prep/Kconfig [deleted file]
arch/powerpc/platforms/ps3/time.c
arch/powerpc/platforms/pseries/iommu.c
arch/powerpc/platforms/pseries/plpar_wrappers.h
arch/powerpc/platforms/wsp/Kconfig
arch/powerpc/sysdev/rtc_cmos_setup.c
arch/sh/mm/Kconfig
drivers/macintosh/smu.c
drivers/macintosh/via-pmu.c
drivers/pci/probe.c
drivers/pnp/pnpbios/core.c
drivers/video/cirrusfb.c

index 5620fb5..dd9e928 100644 (file)
@@ -14,10 +14,6 @@ hvcs.txt
        - IBM "Hypervisor Virtual Console Server" Installation Guide
 mpc52xx.txt
        - Linux 2.6.x on MPC52xx family
-sound.txt
-       - info on sound support under Linux/PPC
-zImage_layout.txt
-       - info on the kernel images for Linux/PPC
 qe_firmware.txt
        - describes the layout of firmware binaries for the Freescale QUICC
          Engine and the code that parses and uploads the microcode therein.
index f2a7a39..99c5ce8 100644 (file)
@@ -40,6 +40,7 @@ features will have bits indicating whether there is support for:
 #define PPC_DEBUG_FEATURE_INSN_BP_MASK         0x2
 #define PPC_DEBUG_FEATURE_DATA_BP_RANGE                0x4
 #define PPC_DEBUG_FEATURE_DATA_BP_MASK         0x8
+#define PPC_DEBUG_FEATURE_DATA_BP_DAWR         0x10
 
 2. PTRACE_SETHWDEBUG
 
diff --git a/Documentation/powerpc/sound.txt b/Documentation/powerpc/sound.txt
deleted file mode 100644 (file)
index df23d95..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-            Information about PowerPC Sound support
-=====================================================================
-
-Please mail me (Cort Dougan, cort@fsmlabs.com) if you have questions,
-comments or corrections.
-
-Last Change: 6.16.99
-
-This just covers sound on the PReP and CHRP systems for now and later
-will contain information on the PowerMac's.
-
-Sound on PReP has been tested and is working with the PowerStack and IBM
-Power Series onboard sound systems which are based on the cs4231(2) chip.
-The sound options when doing the make config are a bit different from
-the default, though.
-
-The I/O base, irq and dma lines that you enter during the make config
-are ignored and are set when booting according to the machine type.
-This is so that one binary can be used for Motorola and IBM machines
-which use different values and isn't allowed by the driver, so things
-are hacked together in such a way as to allow this information to be
-set automatically on boot.
-
-1. Motorola PowerStack PReP machines
-
-  Enable support for "Crystal CS4232 based (PnP) cards" and for the
-  Microsoft Sound System.  The MSS isn't used, but some of the routines
-  that the CS4232 driver uses are in it.
-
-  Although the options you set are ignored and determined automatically
-  on boot these are included for information only:
-
-  (830) CS4232 audio I/O base 530, 604, E80 or F40
-  (10) CS4232 audio IRQ 5, 7, 9, 11, 12 or 15
-  (6) CS4232 audio DMA 0, 1 or 3
-  (7) CS4232 second (duplex) DMA 0, 1 or 3
-
-  This will allow simultaneous record and playback, as 2 different dma
-  channels are used.
-
-  The sound will be all left channel and very low volume since the
-  auxiliary input isn't muted by default.  I had the changes necessary
-  for this in the kernel but the sound driver maintainer didn't want
-  to include them since it wasn't common in other machines.  To fix this
-  you need to mute it using a mixer utility of some sort (if you find one
-  please let me know) or by patching the driver yourself and recompiling.
-
-  There is a problem on the PowerStack 2's (PowerStack Pro's) using a
-  different irq/drq than the kernel expects.  Unfortunately, I don't know
-  which irq/drq it is so if anyone knows please email me.
-
-  Midi is not supported since the cs4232 driver doesn't support midi yet.
-
-2. IBM PowerPersonal PReP machines
-
-  I've only tested sound on the Power Personal Series of IBM workstations
-  so if you try it on others please let me know the result.  I'm especially
-  interested in the 43p's sound system, which I know nothing about.
-
-  Enable support for "Crystal CS4232 based (PnP) cards" and for the
-  Microsoft Sound System.  The MSS isn't used, but some of the routines
-  that the CS4232 driver uses are in it.
-
-  Although the options you set are ignored and determined automatically
-  on boot these are included for information only:
-
-  (530) CS4232 audio I/O base 530, 604, E80 or F40
-  (5) CS4232 audio IRQ 5, 7, 9, 11, 12 or 15
-  (1) CS4232 audio DMA 0, 1 or 3
-  (7) CS4232 second (duplex) DMA 0, 1 or 3
-  (330) CS4232 MIDI I/O base 330, 370, 3B0 or 3F0
-  (9) CS4232 MIDI IRQ 5, 7, 9, 11, 12 or 15
-
-  This setup does _NOT_ allow for recording yet.
-
-  Midi is not supported since the cs4232 driver doesn't support midi yet.
-
-2. IBM CHRP
-
-  I have only tested this on the 43P-150.  Build the kernel with the cs4232
-  set as a module and load the module with irq=9 dma=1 dma2=2 io=0x550
diff --git a/Documentation/powerpc/zImage_layout.txt b/Documentation/powerpc/zImage_layout.txt
deleted file mode 100644 (file)
index 048e015..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-          Information about the Linux/PPC kernel images
-=====================================================================
-
-Please mail me (Cort Dougan, cort@fsmlabs.com) if you have questions,
-comments or corrections.
-
-This document is meant to answer several questions I've had about how
-the PReP system boots and how Linux/PPC interacts with that mechanism.
-It would be nice if we could have information on how other architectures
-boot here as well.  If you have anything to contribute, please
-let me know.
-
-
-1. PReP boot file
-
-  This is the file necessary to boot PReP systems from floppy or
-  hard drive.  The firmware reads the PReP partition table entry
-  and will load the image accordingly.
-
-  To boot the zImage, copy it onto a floppy with dd if=zImage of=/dev/fd0h1440
-  or onto a PReP hard drive partition with dd if=zImage of=/dev/sda4
-  assuming you've created a PReP partition (type 0x41) with fdisk on
-  /dev/sda4.
-
-  The layout of the image format is:
-
-  0x0     +------------+
-          |            | PReP partition table entry
-          |            |
-  0x400   +------------+
-          |            | Bootstrap program code + data
-          |            |
-          |            |
-          +------------+
-          |            | compressed kernel, elf header removed
-          +------------+
-          |            | initrd (if loaded)
-          +------------+
-          |            | Elf section table for bootstrap program
-          +------------+
-
-
-2. MBX boot file
-
-  The MBX boards can load an elf image, and relocate it to the
-  proper location in memory - it copies the image to the location it was
-  linked at.
index 975f2f4..ccf2576 100644 (file)
@@ -93,11 +93,6 @@ config ARCH_SPARSEMEM_ENABLE
 config ARCH_SPARSEMEM_DEFAULT
        def_bool y
 
-config MAX_ACTIVE_REGIONS
-       int
-       default "2" if SPARSEMEM
-       default "1"
-
 config ARCH_POPULATES_NODE_MAP
        def_bool y
 
index ea5bb04..a9ae673 100644 (file)
@@ -428,11 +428,6 @@ config NODES_SHIFT
        default "4"
        depends on NEED_MULTIPLE_NODES
 
-config MAX_ACTIVE_REGIONS
-       int
-       default "256" if PPC64
-       default "32"
-
 config ARCH_SELECT_MEMORY_MODEL
        def_bool y
        depends on PPC64
@@ -647,14 +642,14 @@ menu "Bus options"
 
 config ISA
        bool "Support for ISA-bus hardware"
-       depends on PPC_PREP || PPC_CHRP
+       depends on PPC_CHRP
        select PPC_I8259
        help
          Find out whether you have ISA slots on your motherboard.  ISA is the
          name of a bus system, i.e. the way the CPU talks to the other stuff
          inside your box.  If you have an Apple machine, say N here; if you
-         have an IBM RS/6000 or pSeries machine or a PReP machine, say Y.  If
-         you have an embedded board, consult your board documentation.
+         have an IBM RS/6000 or pSeries machine, say Y.  If you have an
+         embedded board, consult your board documentation.
 
 config ZONE_DMA
        bool
@@ -745,7 +740,6 @@ config PCI
        bool "PCI support" if PPC_PCI_CHOICE
        default y if !40x && !CPM2 && !8xx && !PPC_83xx \
                && !PPC_85xx && !PPC_86xx && !GAMECUBE_COMMON
-       default PCI_PERMEDIA if !4xx && !CPM2 && !8xx
        default PCI_QSPAN if !4xx && !CPM2 && 8xx
        select ARCH_SUPPORTS_MSI
        select GENERIC_PCI_IOMAP
@@ -969,7 +963,7 @@ config TASK_SIZE_BOOL
 
 config TASK_SIZE
        hex "Size of user task space" if TASK_SIZE_BOOL
-       default "0x80000000" if PPC_PREP || PPC_8xx
+       default "0x80000000" if PPC_8xx
        default "0xc0000000"
 
 config CONSISTENT_SIZE_BOOL
index 7a5c15f..f791962 100644 (file)
@@ -3,11 +3,11 @@ CONFIG_TUNE_CELL=y
 CONFIG_ALTIVEC=y
 CONFIG_SMP=y
 CONFIG_NR_CPUS=2
-CONFIG_EXPERIMENTAL=y
 CONFIG_SYSVIPC=y
 CONFIG_POSIX_MQUEUE=y
 CONFIG_HIGH_RES_TIMERS=y
 CONFIG_BLK_DEV_INITRD=y
+CONFIG_RD_LZMA=y
 CONFIG_CC_OPTIMIZE_FOR_SIZE=y
 CONFIG_EMBEDDED=y
 # CONFIG_PERF_EVENTS is not set
index 08bd299..910194e 100644 (file)
@@ -53,7 +53,7 @@
 #define smp_mb__after_clear_bit()      smp_mb()
 
 /* Macro for generating the ***_bits() functions */
-#define DEFINE_BITOP(fn, op, prefix, postfix)  \
+#define DEFINE_BITOP(fn, op, prefix)           \
 static __inline__ void fn(unsigned long mask,  \
                volatile unsigned long *_p)     \
 {                                              \
@@ -66,16 +66,15 @@ static __inline__ void fn(unsigned long mask,       \
        PPC405_ERR77(0,%3)                      \
        PPC_STLCX "%0,0,%3\n"                   \
        "bne- 1b\n"                             \
-       postfix                                 \
        : "=&r" (old), "+m" (*p)                \
        : "r" (mask), "r" (p)                   \
        : "cc", "memory");                      \
 }
 
-DEFINE_BITOP(set_bits, or, "", "")
-DEFINE_BITOP(clear_bits, andc, "", "")
-DEFINE_BITOP(clear_bits_unlock, andc, PPC_RELEASE_BARRIER, "")
-DEFINE_BITOP(change_bits, xor, "", "")
+DEFINE_BITOP(set_bits, or, "")
+DEFINE_BITOP(clear_bits, andc, "")
+DEFINE_BITOP(clear_bits_unlock, andc, PPC_RELEASE_BARRIER)
+DEFINE_BITOP(change_bits, xor, "")
 
 static __inline__ void set_bit(int nr, volatile unsigned long *addr)
 {
index f6813e9..a5c6d83 100644 (file)
  *
  * None of this really applies for Power Macintoshes.  There is
  * basically just enough here to get kernel/dma.c to compile.
- *
- * There may be some comments or restrictions made here which are
- * not valid for the PReP platform.  Take what you read
- * with a grain of salt.
  */
 
 #include <asm/io.h>
@@ -57,7 +53,6 @@
  *  - page registers for 5-7 don't use data bit 0, represent 128K pages
  *  - page registers for 0-3 use bit 0, represent 64K pages
  *
- * On PReP, DMA transfers are limited to the lower 16MB of _physical_ memory.
  * On CHRP, the W83C553F (and VLSI Tollgate?) support full 32 bit addressing.
  * Note that addresses loaded into registers must be _physical_ addresses,
  * not logical addresses (which may differ if paging is active).
index 3147a29..3bdcfce 100644 (file)
@@ -10,6 +10,9 @@ typedef struct {
        unsigned int pmu_irqs;
        unsigned int mce_exceptions;
        unsigned int spurious_irqs;
+#ifdef CONFIG_PPC_DOORBELL
+       unsigned int doorbell_irqs;
+#endif
 } ____cacheline_aligned irq_cpustat_t;
 
 DECLARE_PER_CPU_SHARED_ALIGNED(irq_cpustat_t, irq_stat);
index f94ef42..dd15e5e 100644 (file)
 extern int check_legacy_ioport(unsigned long base_port);
 #define I8042_DATA_REG 0x60
 #define FDC_BASE       0x3f0
-/* only relevant for PReP */
-#define _PIDXR         0x279
-#define _PNPWRP                0xa79
-#define PNPBIOS_BASE   0xf000
 
 #if defined(CONFIG_PPC64) && defined(CONFIG_PCI)
 extern struct pci_dev *isa_bridge_pcidev;
index 6dc2577..a452968 100644 (file)
@@ -21,9 +21,7 @@ static int parport_pc_find_nonpci_ports (int autoirq, int autodma)
        int count = 0;
        int virq;
 
-       for (np = NULL; (np = of_find_compatible_node(np,
-                                                     "parallel",
-                                                     "pnpPNP,400")) != NULL;) {
+       for_each_compatible_node(np, "parallel", "pnpPNP,400") {
                prop = of_get_property(np, "reg", &propsize);
                if (!prop || propsize > 6*sizeof(u32))
                        continue;
index 7ff9eaa..0a4cc5d 100644 (file)
@@ -40,7 +40,7 @@
  * -- BenH.
  */
 
-/* PREP sub-platform types see residual.h for these */
+/* PREP sub-platform types. Unused */
 #define _PREP_Motorola 0x01    /* motorola prep */
 #define _PREP_Firm     0x02    /* firmworks prep */
 #define _PREP_IBM      0x00    /* ibm prep */
 
 extern int _chrp_type;
 
-#ifdef CONFIG_PPC_PREP
-
-/* what kind of prep workstation we are */
-extern int _prep_type;
-
-#endif /* CONFIG_PPC_PREP */
-
 #endif /* defined(__KERNEL__) && defined(CONFIG_PPC32) */
 
 /*
index 5f99568..becc08e 100644 (file)
@@ -92,7 +92,8 @@ static inline long regs_return_value(struct pt_regs *regs)
        } while(0)
 
 struct task_struct;
-extern unsigned long ptrace_get_reg(struct task_struct *task, int regno);
+extern int ptrace_get_reg(struct task_struct *task, int regno,
+                         unsigned long *data);
 extern int ptrace_put_reg(struct task_struct *task, int regno,
                          unsigned long data);
 
index c9c67fc..4ae2d44 100644 (file)
 #define SPRN_FSCR      0x099   /* Facility Status & Control Register */
 #define   FSCR_TAR     (1 << (63-55)) /* Enable Target Address Register */
 #define   FSCR_DSCR    (1 << (63-61)) /* Enable Data Stream Control Register */
+#define SPRN_HFSCR     0xbe    /* HV=1 Facility Status & Control Register */
+#define   HFSCR_TAR    (1 << (63-55)) /* Enable Target Address Register */
+#define   HFSCR_TM     (1 << (63-58)) /* Enable Transactional Memory */
+#define   HFSCR_DSCR   (1 << (63-61)) /* Enable Data Stream Control Register */
+#define   HFSCR_VECVSX (1 << (63-62)) /* Enable VMX/VSX  */
+#define   HFSCR_FP     (1 << (63-63)) /* Enable Floating Point */
 #define SPRN_TAR       0x32f   /* Target Address Register */
 #define SPRN_LPCR      0x13E   /* LPAR Control Register */
 #define   LPCR_VPM0    (1ul << (63-0))
index 195ce2a..ffbaabe 100644 (file)
@@ -143,6 +143,8 @@ extern void __cpu_die(unsigned int cpu);
 /* for UP */
 #define hard_smp_processor_id()                get_hard_smp_processor_id(0)
 #define smp_setup_cpu_maps()
+static inline void inhibit_secondary_onlining(void) {}
+static inline void uninhibit_secondary_onlining(void) {}
 
 #endif /* CONFIG_SMP */
 
index 66b9ca4..77d2ed3 100644 (file)
@@ -211,6 +211,7 @@ struct ppc_debug_info {
 #define PPC_DEBUG_FEATURE_INSN_BP_MASK         0x0000000000000002
 #define PPC_DEBUG_FEATURE_DATA_BP_RANGE                0x0000000000000004
 #define PPC_DEBUG_FEATURE_DATA_BP_MASK         0x0000000000000008
+#define PPC_DEBUG_FEATURE_DATA_BP_DAWR         0x0000000000000010
 
 #ifndef __ASSEMBLY__
 
index ea847ab..2e6ad11 100644 (file)
@@ -57,6 +57,7 @@ _GLOBAL(__setup_cpu_power8)
        mfspr   r3,SPRN_LPCR
        oris    r3, r3, LPCR_AIL_3@h
        bl      __init_LPCR
+       bl      __init_HFSCR
        bl      __init_TLB
        mtlr    r11
        blr
@@ -72,6 +73,7 @@ _GLOBAL(__restore_cpu_power8)
        mfspr   r3,SPRN_LPCR
        oris    r3, r3, LPCR_AIL_3@h
        bl      __init_LPCR
+       bl      __init_HFSCR
        bl      __init_TLB
        mtlr    r11
        blr
@@ -120,6 +122,12 @@ __init_FSCR:
        mtspr   SPRN_FSCR,r3
        blr
 
+__init_HFSCR:
+       mfspr   r3,SPRN_HFSCR
+       ori     r3,r3,HFSCR_TAR|HFSCR_TM|HFSCR_DSCR|HFSCR_VECVSX|HFSCR_FP
+       mtspr   SPRN_HFSCR,r3
+       blr
+
 __init_TLB:
        /* Clear the TLB */
        li      r6,128
index 9ebbc24..d55c76c 100644 (file)
@@ -41,6 +41,8 @@ void doorbell_exception(struct pt_regs *regs)
 
        may_hard_irq_enable();
 
+       __get_cpu_var(irq_stat).doorbell_irqs++;
+
        smp_ipi_demux();
 
        irq_exit();
index 56bd923..e789ee7 100644 (file)
@@ -870,10 +870,6 @@ tm_unavailable_relon_pSeries_1:
        . = 0x5500
        b       denorm_exception_hv
 #endif
-#ifdef CONFIG_HVC_SCOM
-       STD_RELON_EXCEPTION_HV(0x5600, 0x1600, maintence_interrupt)
-       KVM_HANDLER_SKIP(PACA_EXGEN, EXC_HV, 0x1600)
-#endif /* CONFIG_HVC_SCOM */
        STD_RELON_EXCEPTION_PSERIES(0x5700, 0x1700, altivec_assist)
 
        /* Other future vectors */
index 31c4fdc..c0d0dbd 100644 (file)
@@ -102,7 +102,7 @@ static int __init fail_iommu_debugfs(void)
        struct dentry *dir = fault_create_debugfs_attr("fail_iommu",
                                                       NULL, &fail_iommu);
 
-       return IS_ERR(dir) ? PTR_ERR(dir) : 0;
+       return PTR_RET(dir);
 }
 late_initcall(fail_iommu_debugfs);
 
index 4f97fe3..5cbcf4d 100644 (file)
@@ -374,6 +374,15 @@ int arch_show_interrupts(struct seq_file *p, int prec)
                seq_printf(p, "%10u ", per_cpu(irq_stat, j).mce_exceptions);
        seq_printf(p, "  Machine check exceptions\n");
 
+#ifdef CONFIG_PPC_DOORBELL
+       if (cpu_has_feature(CPU_FTR_DBELL)) {
+               seq_printf(p, "%*s: ", prec, "DBL");
+               for_each_online_cpu(j)
+                       seq_printf(p, "%10u ", per_cpu(irq_stat, j).doorbell_irqs);
+               seq_printf(p, "  Doorbell interrupts\n");
+       }
+#endif
+
        return 0;
 }
 
@@ -387,6 +396,9 @@ u64 arch_irq_stat_cpu(unsigned int cpu)
        sum += per_cpu(irq_stat, cpu).pmu_irqs;
        sum += per_cpu(irq_stat, cpu).mce_exceptions;
        sum += per_cpu(irq_stat, cpu).spurious_irqs;
+#ifdef CONFIG_PPC_DOORBELL
+       sum += per_cpu(irq_stat, cpu).doorbell_irqs;
+#endif
 
        return sum;
 }
index 5ca82cd..c1eef24 100644 (file)
@@ -159,7 +159,7 @@ static int kgdb_singlestep(struct pt_regs *regs)
        if (user_mode(regs))
                return 0;
 
-       backup_current_thread_info = (struct thread_info *)kmalloc(sizeof(struct thread_info), GFP_KERNEL);
+       backup_current_thread_info = kmalloc(sizeof(struct thread_info), GFP_KERNEL);
        /*
         * On Book E and perhaps other processors, singlestep is handled on
         * the critical exception stack.  This causes current_thread_info()
index f5725bc..ab297f4 100644 (file)
@@ -301,6 +301,7 @@ static void parse_system_parameter_string(struct seq_file *m)
                                __pa(rtas_data_buf),
                                RTAS_DATA_BUF_SIZE);
        memcpy(local_buffer, rtas_data_buf, SPLPAR_MAXLENGTH);
+       local_buffer[SPLPAR_MAXLENGTH - 1] = '\0';
        spin_unlock(&rtas_data_buf_lock);
 
        if (call_status != 0) {
index bec1e93..48fbc2b 100644 (file)
@@ -511,8 +511,7 @@ int __init nvram_scan_partitions(void)
                               "detected: 0-length partition\n");
                        goto out;
                }
-               tmp_part = (struct nvram_partition *)
-                       kmalloc(sizeof(struct nvram_partition), GFP_KERNEL);
+               tmp_part = kmalloc(sizeof(struct nvram_partition), GFP_KERNEL);
                err = -ENOMEM;
                if (!tmp_part) {
                        printk(KERN_ERR "nvram_scan_partitions: kmalloc failed\n");
index fa12ae4..f325dc9 100644 (file)
@@ -30,6 +30,7 @@
 #include <linux/irq.h>
 #include <linux/vmalloc.h>
 #include <linux/slab.h>
+#include <linux/vgaarb.h>
 
 #include <asm/processor.h>
 #include <asm/io.h>
@@ -1023,6 +1024,27 @@ void pcibios_setup_bus_self(struct pci_bus *bus)
                ppc_md.pci_dma_bus_setup(bus);
 }
 
+void pcibios_setup_device(struct pci_dev *dev)
+{
+       /* Fixup NUMA node as it may not be setup yet by the generic
+        * code and is needed by the DMA init
+        */
+       set_dev_node(&dev->dev, pcibus_to_node(dev->bus));
+
+       /* Hook up default DMA ops */
+       set_dma_ops(&dev->dev, pci_dma_ops);
+       set_dma_offset(&dev->dev, PCI_DRAM_OFFSET);
+
+       /* Additional platform DMA/iommu setup */
+       if (ppc_md.pci_dma_dev_setup)
+               ppc_md.pci_dma_dev_setup(dev);
+
+       /* Read default IRQs and fixup if necessary */
+       pci_read_irq_line(dev);
+       if (ppc_md.pci_irq_fixup)
+               ppc_md.pci_irq_fixup(dev);
+}
+
 void pcibios_setup_bus_devices(struct pci_bus *bus)
 {
        struct pci_dev *dev;
@@ -1037,23 +1059,7 @@ void pcibios_setup_bus_devices(struct pci_bus *bus)
                if (dev->is_added)
                        continue;
 
-               /* Fixup NUMA node as it may not be setup yet by the generic
-                * code and is needed by the DMA init
-                */
-               set_dev_node(&dev->dev, pcibus_to_node(dev->bus));
-
-               /* Hook up default DMA ops */
-               set_dma_ops(&dev->dev, pci_dma_ops);
-               set_dma_offset(&dev->dev, PCI_DRAM_OFFSET);
-
-               /* Additional platform DMA/iommu setup */
-               if (ppc_md.pci_dma_dev_setup)
-                       ppc_md.pci_dma_dev_setup(dev);
-
-               /* Read default IRQs and fixup if necessary */
-               pci_read_irq_line(dev);
-               if (ppc_md.pci_irq_fixup)
-                       ppc_md.pci_irq_fixup(dev);
+               pcibios_setup_device(dev);
        }
 }
 
@@ -1494,6 +1500,10 @@ int pcibios_enable_device(struct pci_dev *dev, int mask)
                if (ppc_md.pcibios_enable_device_hook(dev))
                        return -EINVAL;
 
+       /* avoid pcie irq fix up impact on cardbus */
+       if (dev->hdr_type != PCI_HEADER_TYPE_CARDBUS)
+               pcibios_setup_device(dev);
+
        return pci_enable_resources(dev, mask);
 }
 
@@ -1725,3 +1735,15 @@ static void fixup_hide_host_resource_fsl(struct pci_dev *dev)
 }
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MOTOROLA, PCI_ANY_ID, fixup_hide_host_resource_fsl);
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_FREESCALE, PCI_ANY_ID, fixup_hide_host_resource_fsl);
+
+static void fixup_vga(struct pci_dev *pdev)
+{
+       u16 cmd;
+
+       pci_read_config_word(pdev, PCI_COMMAND, &cmd);
+       if ((cmd & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) || !vga_default_device())
+               vga_set_default_device(pdev);
+
+}
+DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_ANY_ID, PCI_ANY_ID,
+                             PCI_CLASS_DISPLAY_VGA, 8, fixup_vga);
index 16e77a8..c0dea6f 100644 (file)
@@ -912,10 +912,6 @@ int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)
        flush_altivec_to_thread(src);
        flush_vsx_to_thread(src);
        flush_spe_to_thread(src);
-#ifdef CONFIG_HAVE_HW_BREAKPOINT
-       flush_ptrace_hw_breakpoint(src);
-#endif /* CONFIG_HAVE_HW_BREAKPOINT */
-
        *dst = *src;
        return 0;
 }
@@ -986,6 +982,10 @@ int copy_thread(unsigned long clone_flags, unsigned long usp,
        p->thread.ksp_limit = (unsigned long)task_stack_page(p) +
                                _ALIGN_UP(sizeof(struct thread_info), 16);
 
+#ifdef CONFIG_HAVE_HW_BREAKPOINT
+       p->thread.ptrace_bps[0] = NULL;
+#endif
+
 #ifdef CONFIG_PPC_STD_MMU_64
        if (mmu_has_feature(MMU_FTR_SLB)) {
                unsigned long sp_vsid;
index f9b30c6..3b14d32 100644 (file)
@@ -180,9 +180,10 @@ static int set_user_msr(struct task_struct *task, unsigned long msr)
 }
 
 #ifdef CONFIG_PPC64
-static unsigned long get_user_dscr(struct task_struct *task)
+static int get_user_dscr(struct task_struct *task, unsigned long *data)
 {
-       return task->thread.dscr;
+       *data = task->thread.dscr;
+       return 0;
 }
 
 static int set_user_dscr(struct task_struct *task, unsigned long dscr)
@@ -192,7 +193,7 @@ static int set_user_dscr(struct task_struct *task, unsigned long dscr)
        return 0;
 }
 #else
-static unsigned long get_user_dscr(struct task_struct *task)
+static int get_user_dscr(struct task_struct *task, unsigned long *data)
 {
        return -EIO;
 }
@@ -216,19 +217,23 @@ static int set_user_trap(struct task_struct *task, unsigned long trap)
 /*
  * Get contents of register REGNO in task TASK.
  */
-unsigned long ptrace_get_reg(struct task_struct *task, int regno)
+int ptrace_get_reg(struct task_struct *task, int regno, unsigned long *data)
 {
-       if (task->thread.regs == NULL)
+       if ((task->thread.regs == NULL) || !data)
                return -EIO;
 
-       if (regno == PT_MSR)
-               return get_user_msr(task);
+       if (regno == PT_MSR) {
+               *data = get_user_msr(task);
+               return 0;
+       }
 
        if (regno == PT_DSCR)
-               return get_user_dscr(task);
+               return get_user_dscr(task, data);
 
-       if (regno < (sizeof(struct pt_regs) / sizeof(unsigned long)))
-               return ((unsigned long *)task->thread.regs)[regno];
+       if (regno < (sizeof(struct pt_regs) / sizeof(unsigned long))) {
+               *data = ((unsigned long *)task->thread.regs)[regno];
+               return 0;
+       }
 
        return -EIO;
 }
@@ -1560,7 +1565,9 @@ long arch_ptrace(struct task_struct *child, long request,
 
                CHECK_FULL_REGS(child->thread.regs);
                if (index < PT_FPR0) {
-                       tmp = ptrace_get_reg(child, (int) index);
+                       ret = ptrace_get_reg(child, (int) index, &tmp);
+                       if (ret)
+                               break;
                } else {
                        unsigned int fpidx = index - PT_FPR0;
 
@@ -1637,6 +1644,8 @@ long arch_ptrace(struct task_struct *child, long request,
                dbginfo.sizeof_condition = 0;
 #ifdef CONFIG_HAVE_HW_BREAKPOINT
                dbginfo.features = PPC_DEBUG_FEATURE_DATA_BP_RANGE;
+               if (cpu_has_feature(CPU_FTR_DAWR))
+                       dbginfo.features |= PPC_DEBUG_FEATURE_DATA_BP_DAWR;
 #else
                dbginfo.features = 0;
 #endif /* CONFIG_HAVE_HW_BREAKPOINT */
index c0244e7..f51599e 100644 (file)
@@ -95,7 +95,9 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
 
                CHECK_FULL_REGS(child->thread.regs);
                if (index < PT_FPR0) {
-                       tmp = ptrace_get_reg(child, index);
+                       ret = ptrace_get_reg(child, index, &tmp);
+                       if (ret)
+                               break;
                } else {
                        flush_fp_to_thread(child);
                        /*
@@ -148,7 +150,11 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
                        tmp = ((u64 *)child->thread.fpr)
                                [FPRINDEX_3264(numReg)];
                } else { /* register within PT_REGS struct */
-                       tmp = ptrace_get_reg(child, numReg);
+                       unsigned long tmp2;
+                       ret = ptrace_get_reg(child, numReg, &tmp2);
+                       if (ret)
+                               break;
+                       tmp = tmp2;
                } 
                reg32bits = ((u32*)&tmp)[part];
                ret = put_user(reg32bits, (u32 __user *)data);
@@ -232,7 +238,10 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
                        break;
                CHECK_FULL_REGS(child->thread.regs);
                if (numReg < PT_FPR0) {
-                       unsigned long freg = ptrace_get_reg(child, numReg);
+                       unsigned long freg;
+                       ret = ptrace_get_reg(child, numReg, &freg);
+                       if (ret)
+                               break;
                        if (index % 2)
                                freg = (freg & ~0xfffffffful) | (data & 0xfffffffful);
                        else
index c642f01..a3e4034 100644 (file)
 #define VALIDATE_READY        -1001 /* Firmware image ready for validation */
 #define VALIDATE_PARAM_ERR     -3    /* RTAS Parameter Error */
 #define VALIDATE_HW_ERR        -1    /* RTAS Hardware Error */
-#define VALIDATE_TMP_UPDATE    0     /* Validate Return Status */
-#define VALIDATE_FLASH_AUTH    1     /* Validate Return Status */
-#define VALIDATE_INVALID_IMG   2     /* Validate Return Status */
-#define VALIDATE_CUR_UNKNOWN   3     /* Validate Return Status */
-#define VALIDATE_TMP_COMMIT_DL 4     /* Validate Return Status */
-#define VALIDATE_TMP_COMMIT    5     /* Validate Return Status */
-#define VALIDATE_TMP_UPDATE_DL 6     /* Validate Return Status */
+
+/* ibm,validate-flash-image update result tokens */
+#define VALIDATE_TMP_UPDATE    0     /* T side will be updated */
+#define VALIDATE_FLASH_AUTH    1     /* Partition does not have authority */
+#define VALIDATE_INVALID_IMG   2     /* Candidate image is not valid */
+#define VALIDATE_CUR_UNKNOWN   3     /* Current fixpack level is unknown */
+/*
+ * Current T side will be committed to P side before being replace with new
+ * image, and the new image is downlevel from current image
+ */
+#define VALIDATE_TMP_COMMIT_DL 4
+/*
+ * Current T side will be committed to P side before being replaced with new
+ * image
+ */
+#define VALIDATE_TMP_COMMIT    5
+/*
+ * T side will be updated with a downlevel image
+ */
+#define VALIDATE_TMP_UPDATE_DL 6
+/*
+ * The candidate image's release date is later than the system's firmware
+ * service entitlement date - service warranty period has expired
+ */
+#define VALIDATE_OUT_OF_WRNTY  7
 
 /* ibm,manage-flash-image operation tokens */
 #define RTAS_REJECT_TMP_IMG   0
@@ -790,6 +808,11 @@ static void __exit rtas_flash_cleanup(void)
 {
        rtas_flash_term_hook = NULL;
 
+       if (rtas_firmware_flash_list) {
+               free_flash_list(rtas_firmware_flash_list);
+               rtas_firmware_flash_list = NULL;
+       }
+
        if (flash_block_cache)
                kmem_cache_destroy(flash_block_cache);
 
index 71cb20d..6e7b7cd 100644 (file)
@@ -201,7 +201,7 @@ static void python_countermeasures(struct device_node *dev)
        iounmap(chip_regs);
 }
 
-void __init init_pci_config_tokens (void)
+void __init init_pci_config_tokens(void)
 {
        read_pci_config = rtas_token("read-pci-config");
        write_pci_config = rtas_token("write-pci-config");
@@ -209,7 +209,7 @@ void __init init_pci_config_tokens (void)
        ibm_write_pci_config = rtas_token("ibm,write-pci-config");
 }
 
-unsigned long get_phb_buid (struct device_node *phb)
+unsigned long get_phb_buid(struct device_node *phb)
 {
        struct resource r;
 
index bdc499c..63d051f 100644 (file)
@@ -621,12 +621,6 @@ int check_legacy_ioport(unsigned long base_port)
        case FDC_BASE: /* FDC1 */
                np = of_find_node_by_type(NULL, "fdc");
                break;
-#ifdef CONFIG_PPC_PREP
-       case _PIDXR:
-       case _PNPWRP:
-       case PNPBIOS_BASE:
-               /* implement me */
-#endif
        default:
                /* ipmi is supposed to fail here */
                break;
index f77fa22..5fc29ad 100644 (file)
@@ -1049,10 +1049,8 @@ static int __init rtc_init(void)
                return -ENODEV;
 
        pdev = platform_device_register_simple("rtc-generic", -1, NULL, 0);
-       if (IS_ERR(pdev))
-               return PTR_ERR(pdev);
 
-       return 0;
+       return PTR_RET(pdev);
 }
 
 module_init(rtc_init);
index 1b2076f..d4f463a 100644 (file)
@@ -113,6 +113,10 @@ static struct vdso_patch_def vdso_patches[] = {
                CPU_FTR_USE_TB, 0,
                "__kernel_get_tbfreq", NULL
        },
+       {
+               CPU_FTR_USE_TB, 0,
+               "__kernel_time", NULL
+       },
 };
 
 /*
index 4ee09ee..27e2f62 100644 (file)
@@ -180,6 +180,32 @@ V_FUNCTION_BEGIN(__kernel_clock_getres)
 V_FUNCTION_END(__kernel_clock_getres)
 
 
+/*
+ * Exact prototype of time()
+ *
+ * time_t time(time *t);
+ *
+ */
+V_FUNCTION_BEGIN(__kernel_time)
+  .cfi_startproc
+       mflr    r12
+  .cfi_register lr,r12
+
+       mr      r11,r3                  /* r11 holds t */
+       bl      __get_datapage@local
+       mr      r9, r3                  /* datapage ptr in r9 */
+
+       lwz     r3,STAMP_XTIME+TSPEC_TV_SEC(r9)
+
+       cmplwi  r11,0                   /* check if t is NULL */
+       beq     2f
+       stw     r3,0(r11)               /* store result at *t */
+2:     mtlr    r12
+       crclr   cr0*4+so
+       blr
+  .cfi_endproc
+V_FUNCTION_END(__kernel_time)
+
 /*
  * This is the core of clock_gettime() and gettimeofday(),
  * it returns the current time in r3 (seconds) and r4.
index 43200ba..f223409 100644 (file)
@@ -150,6 +150,7 @@ VERSION
 #ifdef CONFIG_PPC64
                __kernel_getcpu;
 #endif
+               __kernel_time;
 
        local: *;
        };
index e97a9a0..a76b4af 100644 (file)
@@ -164,6 +164,32 @@ V_FUNCTION_BEGIN(__kernel_clock_getres)
   .cfi_endproc
 V_FUNCTION_END(__kernel_clock_getres)
 
+/*
+ * Exact prototype of time()
+ *
+ * time_t time(time *t);
+ *
+ */
+V_FUNCTION_BEGIN(__kernel_time)
+  .cfi_startproc
+       mflr    r12
+  .cfi_register lr,r12
+
+       mr      r11,r3                  /* r11 holds t */
+       bl      V_LOCAL_FUNC(__get_datapage)
+
+       ld      r4,STAMP_XTIME+TSPC64_TV_SEC(r3)
+
+       cmpldi  r11,0                   /* check if t is NULL */
+       beq     2f
+       std     r4,0(r11)               /* store result at *t */
+2:     mtlr    r12
+       crclr   cr0*4+so
+       mr      r3,r4
+       blr
+  .cfi_endproc
+V_FUNCTION_END(__kernel_time)
+
 
 /*
  * This is the core of clock_gettime() and gettimeofday(),
index e6c1758..e486381 100644 (file)
@@ -147,6 +147,7 @@ VERSION
                __kernel_sync_dicache_p5;
                __kernel_sigtramp_rt64;
                __kernel_getcpu;
+               __kernel_time;
 
        local: *;
        };
index 84035a5..37f1cc4 100644 (file)
@@ -122,11 +122,16 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_201)
        add     r8,r8,r7
        std     r8,HSTATE_DECEXP(r13)
 
+#ifdef CONFIG_SMP
        /*
         * On PPC970, if the guest vcpu has an external interrupt pending,
         * send ourselves an IPI so as to interrupt the guest once it
         * enables interrupts.  (It must have interrupts disabled,
         * otherwise we would already have delivered the interrupt.)
+        *
+        * XXX If this is a UP build, smp_send_reschedule is not available,
+        * so the interrupt will be delayed until the next time the vcpu
+        * enters the guest with interrupts enabled.
         */
 BEGIN_FTR_SECTION
        ld      r0, VCPU_PENDING_EXC(r4)
@@ -141,6 +146,7 @@ BEGIN_FTR_SECTION
        mr      r4, r31
 32:
 END_FTR_SECTION_IFSET(CPU_FTR_ARCH_201)
+#endif /* CONFIG_SMP */
 
        /* Jump to partition switch code */
        bl      .kvmppc_hv_entry_trampoline
index 5e93438..dbdc15a 100644 (file)
@@ -1039,7 +1039,7 @@ struct kvm_vcpu *kvmppc_core_vcpu_create(struct kvm *kvm, unsigned int id)
        if (!vcpu_book3s)
                goto out;
 
-       vcpu_book3s->shadow_vcpu = (struct kvmppc_book3s_shadow_vcpu *)
+       vcpu_book3s->shadow_vcpu =
                kzalloc(sizeof(*vcpu_book3s->shadow_vcpu), GFP_KERNEL);
        if (!vcpu_book3s->shadow_vcpu)
                goto free_vcpu;
index f410c3e..1ed4419 100644 (file)
@@ -1230,24 +1230,60 @@ void low_hash_fault(struct pt_regs *regs, unsigned long address, int rc)
                bad_page_fault(regs, address, SIGBUS);
 }
 
+long hpte_insert_repeating(unsigned long hash, unsigned long vpn,
+                          unsigned long pa, unsigned long rflags,
+                          unsigned long vflags, int psize, int ssize)
+{
+       unsigned long hpte_group;
+       long slot;
+
+repeat:
+       hpte_group = ((hash & htab_hash_mask) *
+                      HPTES_PER_GROUP) & ~0x7UL;
+
+       /* Insert into the hash table, primary slot */
+       slot = ppc_md.hpte_insert(hpte_group, vpn, pa, rflags, vflags,
+                                 psize, ssize);
+
+       /* Primary is full, try the secondary */
+       if (unlikely(slot == -1)) {
+               hpte_group = ((~hash & htab_hash_mask) *
+                             HPTES_PER_GROUP) & ~0x7UL;
+               slot = ppc_md.hpte_insert(hpte_group, vpn, pa, rflags,
+                                         vflags | HPTE_V_SECONDARY,
+                                         psize, ssize);
+               if (slot == -1) {
+                       if (mftb() & 0x1)
+                               hpte_group = ((hash & htab_hash_mask) *
+                                             HPTES_PER_GROUP)&~0x7UL;
+
+                       ppc_md.hpte_remove(hpte_group);
+                       goto repeat;
+               }
+       }
+
+       return slot;
+}
+
 #ifdef CONFIG_DEBUG_PAGEALLOC
 static void kernel_map_linear_page(unsigned long vaddr, unsigned long lmi)
 {
-       unsigned long hash, hpteg;
+       unsigned long hash;
        unsigned long vsid = get_kernel_vsid(vaddr, mmu_kernel_ssize);
        unsigned long vpn = hpt_vpn(vaddr, vsid, mmu_kernel_ssize);
        unsigned long mode = htab_convert_pte_flags(PAGE_KERNEL);
-       int ret;
+       long ret;
 
        hash = hpt_hash(vpn, PAGE_SHIFT, mmu_kernel_ssize);
-       hpteg = ((hash & htab_hash_mask) * HPTES_PER_GROUP);
 
        /* Don't create HPTE entries for bad address */
        if (!vsid)
                return;
-       ret = ppc_md.hpte_insert(hpteg, vpn, __pa(vaddr),
-                                mode, HPTE_V_BOLTED,
-                                mmu_linear_psize, mmu_kernel_ssize);
+
+       ret = hpte_insert_repeating(hash, vpn, __pa(vaddr), mode,
+                                   HPTE_V_BOLTED,
+                                   mmu_linear_psize, mmu_kernel_ssize);
+
        BUG_ON (ret < 0);
        spin_lock(&linear_map_hash_lock);
        BUG_ON(linear_map_hash_slots[lmi] & 0x80);
index cecad34..b913f41 100644 (file)
 #include <asm/cacheflush.h>
 #include <asm/machdep.h>
 
+extern long hpte_insert_repeating(unsigned long hash, unsigned long vpn,
+                                 unsigned long pa, unsigned long rlags,
+                                 unsigned long vflags, int psize, int ssize);
+
 int __hash_page_huge(unsigned long ea, unsigned long access, unsigned long vsid,
                     pte_t *ptep, unsigned long trap, int local, int ssize,
                     unsigned int shift, unsigned int mmu_psize)
@@ -83,14 +87,9 @@ int __hash_page_huge(unsigned long ea, unsigned long access, unsigned long vsid,
 
        if (likely(!(old_pte & _PAGE_HASHPTE))) {
                unsigned long hash = hpt_hash(vpn, shift, ssize);
-               unsigned long hpte_group;
 
                pa = pte_pfn(__pte(old_pte)) << PAGE_SHIFT;
 
-repeat:
-               hpte_group = ((hash & htab_hash_mask) *
-                             HPTES_PER_GROUP) & ~0x7UL;
-
                /* clear HPTE slot informations in new PTE */
 #ifdef CONFIG_PPC_64K_PAGES
                new_pte = (new_pte & ~_PAGE_HPTEFLAGS) | _PAGE_HPTE_SUB0;
@@ -101,26 +100,8 @@ repeat:
                rflags |= (new_pte & (_PAGE_WRITETHRU | _PAGE_NO_CACHE |
                                      _PAGE_COHERENT | _PAGE_GUARDED));
 
-               /* Insert into the hash table, primary slot */
-               slot = ppc_md.hpte_insert(hpte_group, vpn, pa, rflags, 0,
-                                         mmu_psize, ssize);
-
-               /* Primary is full, try the secondary */
-               if (unlikely(slot == -1)) {
-                       hpte_group = ((~hash & htab_hash_mask) *
-                                     HPTES_PER_GROUP) & ~0x7UL;
-                       slot = ppc_md.hpte_insert(hpte_group, vpn, pa, rflags,
-                                                 HPTE_V_SECONDARY,
-                                                 mmu_psize, ssize);
-                       if (slot == -1) {
-                               if (mftb() & 0x1)
-                                       hpte_group = ((hash & htab_hash_mask) *
-                                                     HPTES_PER_GROUP)&~0x7UL;
-
-                               ppc_md.hpte_remove(hpte_group);
-                               goto repeat;
-                        }
-               }
+               slot = hpte_insert_repeating(hash, vpn, pa, rflags, 0,
+                                            mmu_psize, ssize);
 
                /*
                 * Hypervisor failure. Restore old pte and return -1
index 8cdbd86..915412e 100644 (file)
@@ -67,7 +67,7 @@
 
 void switch_cop(struct mm_struct *next)
 {
-#ifdef CONFIG_ICSWX_PID
+#ifdef CONFIG_PPC_ICSWX_PID
        mtspr(SPRN_PID, next->context.cop_pid);
 #endif
        mtspr(SPRN_ACOP, next->context.acop);
index f1f7409..056732e 100644 (file)
@@ -66,10 +66,9 @@ unsigned long long memory_limit;
 
 #ifdef CONFIG_HIGHMEM
 pte_t *kmap_pte;
+EXPORT_SYMBOL(kmap_pte);
 pgprot_t kmap_prot;
-
 EXPORT_SYMBOL(kmap_prot);
-EXPORT_SYMBOL(kmap_pte);
 
 static inline pte_t *virt_to_kpte(unsigned long vaddr)
 {
index bba87ca..7218e9d 100644 (file)
@@ -79,7 +79,7 @@ static void __init setup_node_to_cpumask_map(void)
        dbg("Node to cpumask map for %d nodes\n", nr_node_ids);
 }
 
-static int __cpuinit fake_numa_create_new_node(unsigned long end_pfn,
+static int __init fake_numa_create_new_node(unsigned long end_pfn,
                                                unsigned int *nid)
 {
        unsigned long long mem;
@@ -201,7 +201,7 @@ int __node_distance(int a, int b)
        int distance = LOCAL_DISTANCE;
 
        if (!form1_affinity)
-               return distance;
+               return ((a == b) ? LOCAL_DISTANCE : REMOTE_DISTANCE);
 
        for (i = 0; i < distance_ref_points_depth; i++) {
                if (distance_lookup_table[a][i] == distance_lookup_table[b][i])
index a392d12..bd40bbb 100644 (file)
@@ -20,7 +20,6 @@ config HOTFOOT
         bool "Hotfoot"
        depends on 40x
        default n
-       select 405EP
        select PPC40x_SIMPLE
        select PCI
         help
@@ -105,9 +104,6 @@ config 405GP
        select IBM405_ERR51
        select IBM_EMAC_ZMII
 
-config 405EP
-       bool
-
 config 405EX
        bool
        select IBM_EMAC_EMAC4
@@ -119,9 +115,6 @@ config 405EZ
        select IBM_EMAC_MAL_CLR_ICINTSTAT
        select IBM_EMAC_MAL_COMMON_ERR
 
-config 405GPR
-       bool
-
 config XILINX_VIRTEX
        bool
        select DEFAULT_UIMAGE
index 52de8bc..9089ae7 100644 (file)
@@ -6,7 +6,6 @@ source "arch/powerpc/platforms/chrp/Kconfig"
 source "arch/powerpc/platforms/512x/Kconfig"
 source "arch/powerpc/platforms/52xx/Kconfig"
 source "arch/powerpc/platforms/powermac/Kconfig"
-source "arch/powerpc/platforms/prep/Kconfig"
 source "arch/powerpc/platforms/maple/Kconfig"
 source "arch/powerpc/platforms/pasemi/Kconfig"
 source "arch/powerpc/platforms/ps3/Kconfig"
@@ -233,7 +232,7 @@ endmenu
 
 config PPC601_SYNC_FIX
        bool "Workarounds for PPC601 bugs"
-       depends on 6xx && (PPC_PREP || PPC_PMAC)
+       depends on 6xx && PPC_PMAC
        help
          Some versions of the PPC601 (the first PowerPC chip) have bugs which
          mean that extra synchronization instructions are required near
index 59c1a16..348a27b 100644 (file)
@@ -382,7 +382,7 @@ static int __init cbe_init_pm_irq(void)
        unsigned int irq;
        int rc, node;
 
-       for_each_node(node) {
+       for_each_online_node(node) {
                irq = irq_create_mapping(NULL, IIC_IRQ_IOEX_PMI |
                                               (node << IIC_IRQ_NODE_SHIFT));
                if (irq == NO_IRQ) {
index 3f3bb4c..35f77a4 100644 (file)
@@ -99,6 +99,7 @@ spufs_new_inode(struct super_block *sb, umode_t mode)
        if (!inode)
                goto out;
 
+       inode->i_ino = get_next_ino();
        inode->i_mode = mode;
        inode->i_uid = current_fsuid();
        inode->i_gid = current_fsgid();
index 5a8f50a..302ba43 100644 (file)
@@ -9,7 +9,6 @@ config LINKSTATION
        select FSL_SOC
        select PPC_UDBG_16550 if SERIAL_8250
        select DEFAULT_UIMAGE
-       select MPC10X_OPENPIC
        select MPC10X_BRIDGE
        help
          Select LINKSTATION if configuring for one of PPC- (MPC8241)
@@ -24,7 +23,6 @@ config STORCENTER
        select MPIC
        select FSL_SOC
        select PPC_UDBG_16550 if SERIAL_8250
-       select MPC10X_OPENPIC
        select MPC10X_BRIDGE
        help
          Select STORCENTER if configuring for the iomega StorCenter
@@ -84,9 +82,6 @@ config MV64X60
        select PPC_INDIRECT_PCI
        select CHECK_CACHE_COHERENCY
 
-config MPC10X_OPENPIC
-       bool
-
 config GAMECUBE_COMMON
        bool
 
index 8e90e89..a5c5f15 100644 (file)
@@ -26,6 +26,7 @@
 #include <asm/prom.h>
 #include <asm/pci-bridge.h>
 #include <asm/machdep.h>
+#include <asm/msi_bitmap.h>
 #include <asm/ppc-pci.h>
 #include <asm/opal.h>
 #include <asm/iommu.h>
@@ -647,7 +648,7 @@ static int pnv_pci_ioda_msi_setup(struct pnv_phb *phb, struct pci_dev *dev,
 
 static void pnv_pci_init_ioda_msis(struct pnv_phb *phb)
 {
-       unsigned int bmap_size;
+       unsigned int count;
        const __be32 *prop = of_get_property(phb->hose->dn,
                                             "ibm,opal-msi-ranges", NULL);
        if (!prop) {
@@ -658,18 +659,17 @@ static void pnv_pci_init_ioda_msis(struct pnv_phb *phb)
                return;
 
        phb->msi_base = be32_to_cpup(prop);
-       phb->msi_count = be32_to_cpup(prop + 1);
-       bmap_size = BITS_TO_LONGS(phb->msi_count) * sizeof(unsigned long);
-       phb->msi_map = zalloc_maybe_bootmem(bmap_size, GFP_KERNEL);
-       if (!phb->msi_map) {
+       count = be32_to_cpup(prop + 1);
+       if (msi_bitmap_alloc(&phb->msi_bmp, count, phb->hose->dn)) {
                pr_err("PCI %d: Failed to allocate MSI bitmap !\n",
                       phb->hose->global_number);
                return;
        }
+
        phb->msi_setup = pnv_pci_ioda_msi_setup;
        phb->msi32_support = 1;
        pr_info("  Allocated bitmap for %d MSIs (base IRQ 0x%x)\n",
-               phb->msi_count, phb->msi_base);
+               count, phb->msi_base);
 }
 #else
 static void pnv_pci_init_ioda_msis(struct pnv_phb *phb) { }
index 7db8771..d5c066e 100644 (file)
@@ -26,6 +26,7 @@
 #include <asm/prom.h>
 #include <asm/pci-bridge.h>
 #include <asm/machdep.h>
+#include <asm/msi_bitmap.h>
 #include <asm/ppc-pci.h>
 #include <asm/opal.h>
 #include <asm/iommu.h>
@@ -55,7 +56,7 @@ static int pnv_pci_p5ioc2_msi_setup(struct pnv_phb *phb, struct pci_dev *dev,
 
 static void pnv_pci_init_p5ioc2_msis(struct pnv_phb *phb)
 {
-       unsigned int bmap_size;
+       unsigned int count;
        const __be32 *prop = of_get_property(phb->hose->dn,
                                             "ibm,opal-msi-ranges", NULL);
        if (!prop)
@@ -67,10 +68,8 @@ static void pnv_pci_init_p5ioc2_msis(struct pnv_phb *phb)
        if (of_device_is_compatible(phb->hose->dn, "ibm,p5ioc2-pcix"))
                return;
        phb->msi_base = be32_to_cpup(prop);
-       phb->msi_count = be32_to_cpup(prop + 1);
-       bmap_size = BITS_TO_LONGS(phb->msi_count) * sizeof(unsigned long);
-       phb->msi_map = zalloc_maybe_bootmem(bmap_size, GFP_KERNEL);
-       if (!phb->msi_map) {
+       count = be32_to_cpup(prop + 1);
+       if (msi_bitmap_alloc(&phb->msi_bmp, count, phb->hose->dn)) {
                pr_err("PCI %d: Failed to allocate MSI bitmap !\n",
                       phb->hose->global_number);
                return;
@@ -78,7 +77,7 @@ static void pnv_pci_init_p5ioc2_msis(struct pnv_phb *phb)
        phb->msi_setup = pnv_pci_p5ioc2_msi_setup;
        phb->msi32_support = 0;
        pr_info(" Allocated bitmap for %d MSIs (base IRQ 0x%x)\n",
-               phb->msi_count, phb->msi_base);
+               count, phb->msi_base);
 }
 #else
 static void pnv_pci_init_p5ioc2_msis(struct pnv_phb *phb) { }
index b8b8e0b..42eee93 100644 (file)
@@ -26,6 +26,7 @@
 #include <asm/prom.h>
 #include <asm/pci-bridge.h>
 #include <asm/machdep.h>
+#include <asm/msi_bitmap.h>
 #include <asm/ppc-pci.h>
 #include <asm/opal.h>
 #include <asm/iommu.h>
@@ -47,43 +48,7 @@ static int pnv_msi_check_device(struct pci_dev* pdev, int nvec, int type)
        struct pci_controller *hose = pci_bus_to_host(pdev->bus);
        struct pnv_phb *phb = hose->private_data;
 
-       return (phb && phb->msi_map) ? 0 : -ENODEV;
-}
-
-static unsigned int pnv_get_one_msi(struct pnv_phb *phb)
-{
-       unsigned long flags;
-       unsigned int id, rc;
-
-       spin_lock_irqsave(&phb->lock, flags);
-
-       id = find_next_zero_bit(phb->msi_map, phb->msi_count, phb->msi_next);
-       if (id >= phb->msi_count && phb->msi_next)
-               id = find_next_zero_bit(phb->msi_map, phb->msi_count, 0);
-       if (id >= phb->msi_count) {
-               rc = 0;
-               goto out;
-       }
-       __set_bit(id, phb->msi_map);
-       rc = id + phb->msi_base;
-out:
-       spin_unlock_irqrestore(&phb->lock, flags);
-       return rc;
-}
-
-static void pnv_put_msi(struct pnv_phb *phb, unsigned int hwirq)
-{
-       unsigned long flags;
-       unsigned int id;
-
-       if (WARN_ON(hwirq < phb->msi_base ||
-                   hwirq >= (phb->msi_base + phb->msi_count)))
-               return;
-       id = hwirq - phb->msi_base;
-
-       spin_lock_irqsave(&phb->lock, flags);
-       __clear_bit(id, phb->msi_map);
-       spin_unlock_irqrestore(&phb->lock, flags);
+       return (phb && phb->msi_bmp.bitmap) ? 0 : -ENODEV;
 }
 
 static int pnv_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type)
@@ -92,7 +57,8 @@ static int pnv_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type)
        struct pnv_phb *phb = hose->private_data;
        struct msi_desc *entry;
        struct msi_msg msg;
-       unsigned int hwirq, virq;
+       int hwirq;
+       unsigned int virq;
        int rc;
 
        if (WARN_ON(!phb))
@@ -104,25 +70,25 @@ static int pnv_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type)
                                pci_name(pdev));
                        return -ENXIO;
                }
-               hwirq = pnv_get_one_msi(phb);
-               if (!hwirq) {
+               hwirq = msi_bitmap_alloc_hwirqs(&phb->msi_bmp, 1);
+               if (hwirq < 0) {
                        pr_warn("%s: Failed to find a free MSI\n",
                                pci_name(pdev));
                        return -ENOSPC;
                }
-               virq = irq_create_mapping(NULL, hwirq);
+               virq = irq_create_mapping(NULL, phb->msi_base + hwirq);
                if (virq == NO_IRQ) {
                        pr_warn("%s: Failed to map MSI to linux irq\n",
                                pci_name(pdev));
-                       pnv_put_msi(phb, hwirq);
+                       msi_bitmap_free_hwirqs(&phb->msi_bmp, hwirq, 1);
                        return -ENOMEM;
                }
-               rc = phb->msi_setup(phb, pdev, hwirq, entry->msi_attrib.is_64,
-                                   &msg);
+               rc = phb->msi_setup(phb, pdev, phb->msi_base + hwirq,
+                                   entry->msi_attrib.is_64, &msg);
                if (rc) {
                        pr_warn("%s: Failed to setup MSI\n", pci_name(pdev));
                        irq_dispose_mapping(virq);
-                       pnv_put_msi(phb, hwirq);
+                       msi_bitmap_free_hwirqs(&phb->msi_bmp, hwirq, 1);
                        return rc;
                }
                irq_set_msi_desc(virq, entry);
@@ -144,7 +110,8 @@ static void pnv_teardown_msi_irqs(struct pci_dev *pdev)
                if (entry->irq == NO_IRQ)
                        continue;
                irq_set_msi_desc(entry->irq, NULL);
-               pnv_put_msi(phb, virq_to_hw(entry->irq));
+               msi_bitmap_free_hwirqs(&phb->msi_bmp,
+                       virq_to_hw(entry->irq) - phb->msi_base, 1);
                irq_dispose_mapping(entry->irq);
        }
 }
index 7cfb7c8..42ddfba 100644 (file)
@@ -73,11 +73,9 @@ struct pnv_phb {
        spinlock_t              lock;
 
 #ifdef CONFIG_PCI_MSI
-       unsigned long           *msi_map;
        unsigned int            msi_base;
-       unsigned int            msi_count;
-       unsigned int            msi_next;
        unsigned int            msi32_support;
+       struct msi_bitmap       msi_bmp;
 #endif
        int (*msi_setup)(struct pnv_phb *phb, struct pci_dev *dev,
                         unsigned int hwirq, unsigned int is_64,
diff --git a/arch/powerpc/platforms/prep/Kconfig b/arch/powerpc/platforms/prep/Kconfig
deleted file mode 100644 (file)
index 1547f66..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-config PPC_PREP
-       bool "PowerPC Reference Platform (PReP) based machines"
-       depends on 6xx && BROKEN
-       select HAVE_PCSPKR_PLATFORM
-       select MPIC
-       select PPC_I8259
-       select PPC_INDIRECT_PCI
-       select PPC_UDBG_16550
-       select PPC_NATIVE
-       default n
-
-config PREP_RESIDUAL
-       bool "Support for PReP Residual Data"
-       depends on PPC_PREP
-       help
-         Some PReP systems have residual data passed to the kernel by the
-         firmware.  This allows detection of memory size, devices present and
-         other useful pieces of information.  Sometimes this information is
-         not present or incorrect, in which case it could lead to the machine 
-         behaving incorrectly.  If this happens, either disable PREP_RESIDUAL
-         or pass the 'noresidual' option to the kernel.
-
-         If you are running a PReP system, say Y here, otherwise say N.
index 40b5cb4..cba1e6b 100644 (file)
@@ -89,10 +89,8 @@ static int __init ps3_rtc_init(void)
                return -ENODEV;
 
        pdev = platform_device_register_simple("rtc-ps3", -1, NULL, 0);
-       if (IS_ERR(pdev))
-               return PTR_ERR(pdev);
 
-       return 0;
+       return PTR_RET(pdev);
 }
 
 module_init(ps3_rtc_init);
index 1b2a174..86ae364 100644 (file)
@@ -924,6 +924,13 @@ static void restore_default_window(struct pci_dev *dev,
        __restore_default_window(pci_dev_to_eeh_dev(dev), ddw_restore_token);
 }
 
+struct failed_ddw_pdn {
+       struct device_node *pdn;
+       struct list_head list;
+};
+
+static LIST_HEAD(failed_ddw_pdn_list);
+
 /*
  * If the PE supports dynamic dma windows, and there is space for a table
  * that can map all pages in a linear offset, then setup such a table,
@@ -951,6 +958,7 @@ static u64 enable_ddw(struct pci_dev *dev, struct device_node *pdn)
        struct dynamic_dma_window_prop *ddwprop;
        const void *dma_window = NULL;
        unsigned long liobn, offset, size;
+       struct failed_ddw_pdn *fpdn;
 
        mutex_lock(&direct_window_init_mutex);
 
@@ -958,6 +966,18 @@ static u64 enable_ddw(struct pci_dev *dev, struct device_node *pdn)
        if (dma_addr != 0)
                goto out_unlock;
 
+       /*
+        * If we already went through this for a previous function of
+        * the same device and failed, we don't want to muck with the
+        * DMA window again, as it will race with in-flight operations
+        * and can lead to EEHs. The above mutex protects access to the
+        * list.
+        */
+       list_for_each_entry(fpdn, &failed_ddw_pdn_list, list) {
+               if (!strcmp(fpdn->pdn->full_name, pdn->full_name))
+                       goto out_unlock;
+       }
+
        /*
         * the ibm,ddw-applicable property holds the tokens for:
         * ibm,query-pe-dma-window
@@ -1114,6 +1134,12 @@ out_restore_window:
        if (ddw_restore_token)
                restore_default_window(dev, ddw_restore_token);
 
+       fpdn = kzalloc(sizeof(*fpdn), GFP_KERNEL);
+       if (!fpdn)
+               goto out_unlock;
+       fpdn->pdn = pdn;
+       list_add(&fpdn->list, &failed_ddw_pdn_list);
+
 out_unlock:
        mutex_unlock(&direct_window_init_mutex);
        return dma_addr;
index f368668..f35787b 100644 (file)
@@ -58,40 +58,39 @@ static inline long extended_cede_processor(unsigned long latency_hint)
 static inline long vpa_call(unsigned long flags, unsigned long cpu,
                unsigned long vpa)
 {
-       /* flags are in bits 16-18 (counting from most significant bit) */
-       flags = flags << (63 - 18);
+       flags = flags << H_VPA_FUNC_SHIFT;
 
        return plpar_hcall_norets(H_REGISTER_VPA, flags, cpu, vpa);
 }
 
 static inline long unregister_vpa(unsigned long cpu)
 {
-       return vpa_call(0x5, cpu, 0);
+       return vpa_call(H_VPA_DEREG_VPA, cpu, 0);
 }
 
 static inline long register_vpa(unsigned long cpu, unsigned long vpa)
 {
-       return vpa_call(0x1, cpu, vpa);
+       return vpa_call(H_VPA_REG_VPA, cpu, vpa);
 }
 
 static inline long unregister_slb_shadow(unsigned long cpu)
 {
-       return vpa_call(0x7, cpu, 0);
+       return vpa_call(H_VPA_DEREG_SLB, cpu, 0);
 }
 
 static inline long register_slb_shadow(unsigned long cpu, unsigned long vpa)
 {
-       return vpa_call(0x3, cpu, vpa);
+       return vpa_call(H_VPA_REG_SLB, cpu, vpa);
 }
 
 static inline long unregister_dtl(unsigned long cpu)
 {
-       return vpa_call(0x6, cpu, 0);
+       return vpa_call(H_VPA_DEREG_DTL, cpu, 0);
 }
 
 static inline long register_dtl(unsigned long cpu, unsigned long vpa)
 {
-       return vpa_call(0x2, cpu, vpa);
+       return vpa_call(H_VPA_REG_DTL, cpu, vpa);
 }
 
 static inline long plpar_page_set_loaned(unsigned long vpa)
index 79d2225..422a175 100644 (file)
@@ -9,7 +9,6 @@ config PPC_WSP
        select PCI
        select PPC_IO_WORKAROUNDS if PCI
        select PPC_INDIRECT_PIO if PCI
-       select PPC_WSP_COPRO
        default n
 
 menu "WSP platform selection"
@@ -29,7 +28,3 @@ config PPC_CHROMA
        default y
 
 endmenu
-
-config PPC_A2_DD2
-       bool "Support for DD2 based A2/WSP systems"
-       depends on PPC_A2
index 9afba92..af79e1e 100644 (file)
@@ -62,10 +62,7 @@ static int  __init add_rtc(void)
        pd = platform_device_register_simple("rtc_cmos", -1,
                                             &res[0], num_res);
 
-       if (IS_ERR(pd))
-               return PTR_ERR(pd);
-
-       return 0;
+       return PTR_RET(pd);
 }
 fs_initcall(add_rtc);
 
index 5a43a87..dba285e 100644 (file)
@@ -137,13 +137,6 @@ config ARCH_SPARSEMEM_ENABLE
 config ARCH_SPARSEMEM_DEFAULT
        def_bool y
 
-config MAX_ACTIVE_REGIONS
-       int
-       default "6" if (CPU_SUBTYPE_SHX3 && SPARSEMEM)
-       default "2" if SPARSEMEM && (CPU_SUBTYPE_SH7722 || \
-                      CPU_SUBTYPE_SH7785)
-       default "1"
-
 config ARCH_SELECT_MEMORY_MODEL
        def_bool y
 
index 9c6b964..b3b2d36 100644 (file)
@@ -120,11 +120,7 @@ static void smu_start_cmd(void)
 
        DPRINTK("SMU: starting cmd %x, %d bytes data\n", cmd->cmd,
                cmd->data_len);
-       DPRINTK("SMU: data buffer: %02x %02x %02x %02x %02x %02x %02x %02x\n",
-               ((u8 *)cmd->data_buf)[0], ((u8 *)cmd->data_buf)[1],
-               ((u8 *)cmd->data_buf)[2], ((u8 *)cmd->data_buf)[3],
-               ((u8 *)cmd->data_buf)[4], ((u8 *)cmd->data_buf)[5],
-               ((u8 *)cmd->data_buf)[6], ((u8 *)cmd->data_buf)[7]);
+       DPRINTK("SMU: data buffer: %8ph\n", cmd->data_buf);
 
        /* Fill the SMU command buffer */
        smu->cmd_buf->cmd = cmd->cmd;
index 22b8ce4..c9c8542 100644 (file)
@@ -750,8 +750,9 @@ done_battery_state_smart(struct adb_request* req)
                                voltage = (req->reply[8] << 8) | req->reply[9];
                                break;
                        default:
-                               printk(KERN_WARNING "pmu.c : unrecognized battery info, len: %d, %02x %02x %02x %02x\n",
-                                       req->reply_len, req->reply[0], req->reply[1], req->reply[2], req->reply[3]);
+                               pr_warn("pmu.c: unrecognized battery info, "
+                                       "len: %d, %4ph\n", req->reply_len,
+                                                          req->reply);
                                break;
                }
        }
index b494066..92be60c 100644 (file)
@@ -988,7 +988,6 @@ int pci_setup_device(struct pci_dev *dev)
        dev->sysdata = dev->bus->sysdata;
        dev->dev.parent = dev->bus->bridge;
        dev->dev.bus = &pci_bus_type;
-       dev->dev.type = &pci_dev_type;
        dev->hdr_type = hdr_type & 0x7f;
        dev->multifunction = !!(hdr_type & 0x80);
        dev->error_state = pci_channel_io_normal;
@@ -1208,6 +1207,7 @@ struct pci_dev *alloc_pci_dev(void)
                return NULL;
 
        INIT_LIST_HEAD(&dev->bus_list);
+       dev->dev.type = &pci_dev_type;
 
        return dev;
 }
index 5d66e55..9b86a01 100644 (file)
@@ -513,10 +513,6 @@ static int __init pnpbios_init(void)
 {
        int ret;
 
-#if defined(CONFIG_PPC)
-       if (check_legacy_ioport(PNPBIOS_BASE))
-               return -ENODEV;
-#endif
        if (pnpbios_disabled || dmi_check_system(pnpbios_dmi_table) ||
            paravirt_enabled()) {
                printk(KERN_INFO "PnPBIOS: Disabled\n");
@@ -570,10 +566,7 @@ fs_initcall(pnpbios_init);
 static int __init pnpbios_thread_init(void)
 {
        struct task_struct *task;
-#if defined(CONFIG_PPC)
-       if (check_legacy_ioport(PNPBIOS_BASE))
-               return 0;
-#endif
+
        if (pnpbios_disabled)
                return 0;
 
index c3dbbe6..97db3ba 100644 (file)
 #ifdef CONFIG_AMIGA
 #include <asm/amigahw.h>
 #endif
-#ifdef CONFIG_PPC_PREP
-#include <asm/machdep.h>
-#define isPReP machine_is(prep)
-#else
-#define isPReP 0
-#endif
 
 #include <video/vga.h>
 #include <video/cirrus.h>
@@ -557,30 +551,18 @@ static int cirrusfb_check_var(struct fb_var_screeninfo *var,
                break;
 
        case 16:
-               if (isPReP) {
-                       var->red.offset = 2;
-                       var->green.offset = -3;
-                       var->blue.offset = 8;
-               } else {
-                       var->red.offset = 11;
-                       var->green.offset = 5;
-                       var->blue.offset = 0;
-               }
+               var->red.offset = 11;
+               var->green.offset = 5;
+               var->blue.offset = 0;
                var->red.length = 5;
                var->green.length = 6;
                var->blue.length = 5;
                break;
 
        case 24:
-               if (isPReP) {
-                       var->red.offset = 0;
-                       var->green.offset = 8;
-                       var->blue.offset = 16;
-               } else {
-                       var->red.offset = 16;
-                       var->green.offset = 8;
-                       var->blue.offset = 0;
-               }
+               var->red.offset = 16;
+               var->green.offset = 8;
+               var->blue.offset = 0;
                var->red.length = 8;
                var->green.length = 8;
                var->blue.length = 8;
@@ -1874,17 +1856,6 @@ static void cirrusfb_imageblit(struct fb_info *info,
        }
 }
 
-#ifdef CONFIG_PPC_PREP
-#define PREP_VIDEO_BASE ((volatile unsigned long) 0xC0000000)
-#define PREP_IO_BASE    ((volatile unsigned char *) 0x80000000)
-static void get_prep_addrs(unsigned long *display, unsigned long *registers)
-{
-       *display = PREP_VIDEO_BASE;
-       *registers = (unsigned long) PREP_IO_BASE;
-}
-
-#endif                         /* CONFIG_PPC_PREP */
-
 #ifdef CONFIG_PCI
 static int release_io_ports;
 
@@ -2139,21 +2110,12 @@ static int cirrusfb_pci_register(struct pci_dev *pdev,
        dev_dbg(info->device, " base address 1 is 0x%Lx\n",
                (unsigned long long)pdev->resource[1].start);
 
-       if (isPReP) {
-               pci_write_config_dword(pdev, PCI_BASE_ADDRESS_0, 0x00000000);
-#ifdef CONFIG_PPC_PREP
-               get_prep_addrs(&board_addr, &info->fix.mmio_start);
-#endif
-       /* PReP dies if we ioremap the IO registers, but it works w/out... */
-               cinfo->regbase = (char __iomem *) info->fix.mmio_start;
-       } else {
-               dev_dbg(info->device,
-                       "Attempt to get PCI info for Cirrus Graphics Card\n");
-               get_pci_addrs(pdev, &board_addr, &info->fix.mmio_start);
-               /* FIXME: this forces VGA.  alternatives? */
-               cinfo->regbase = NULL;
-               cinfo->laguna_mmio = ioremap(info->fix.mmio_start, 0x1000);
-       }
+       dev_dbg(info->device,
+               "Attempt to get PCI info for Cirrus Graphics Card\n");
+       get_pci_addrs(pdev, &board_addr, &info->fix.mmio_start);
+       /* FIXME: this forces VGA.  alternatives? */
+       cinfo->regbase = NULL;
+       cinfo->laguna_mmio = ioremap(info->fix.mmio_start, 0x1000);
 
        dev_dbg(info->device, "Board address: 0x%lx, register address: 0x%lx\n",
                board_addr, info->fix.mmio_start);