aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc')
-rw-r--r--arch/powerpc/Kconfig19
-rw-r--r--arch/powerpc/Kconfig.debug22
-rw-r--r--arch/powerpc/Makefile2
-rw-r--r--arch/powerpc/boot/44x.c40
-rw-r--r--arch/powerpc/boot/44x.h16
-rw-r--r--arch/powerpc/boot/Makefile49
-rw-r--r--arch/powerpc/boot/cuboot-ebony.c42
-rw-r--r--arch/powerpc/boot/dcr.h87
-rw-r--r--arch/powerpc/boot/dts/ebony.dts307
-rw-r--r--arch/powerpc/boot/dts/holly.dts198
-rw-r--r--arch/powerpc/boot/dts/lite5200.dts11
-rw-r--r--arch/powerpc/boot/dts/lite5200b.dts11
-rw-r--r--arch/powerpc/boot/dts/mpc832x_mds.dts2
-rw-r--r--arch/powerpc/boot/dts/mpc832x_rdb.dts2
-rw-r--r--arch/powerpc/boot/dts/mpc836x_mds.dts4
-rw-r--r--arch/powerpc/boot/dts/mpc8568mds.dts6
-rw-r--r--arch/powerpc/boot/ebony.c129
-rw-r--r--arch/powerpc/boot/holly.c38
-rw-r--r--arch/powerpc/boot/mktree.c10
-rw-r--r--arch/powerpc/boot/treeboot-ebony.c34
-rwxr-xr-xarch/powerpc/boot/wrapper36
-rw-r--r--arch/powerpc/configs/ebony_defconfig905
-rw-r--r--arch/powerpc/configs/holly_defconfig1070
-rw-r--r--arch/powerpc/configs/mpc832x_mds_defconfig67
-rw-r--r--arch/powerpc/configs/mpc832x_rdb_defconfig28
-rw-r--r--arch/powerpc/configs/mpc836x_mds_defconfig42
-rw-r--r--arch/powerpc/configs/ps3_defconfig329
-rw-r--r--arch/powerpc/kernel/Makefile4
-rw-r--r--arch/powerpc/kernel/asm-offsets.c4
-rw-r--r--arch/powerpc/kernel/head_44x.S48
-rw-r--r--arch/powerpc/kernel/idle.c5
-rw-r--r--arch/powerpc/kernel/idle_power4.S21
-rw-r--r--arch/powerpc/kernel/irq.c38
-rw-r--r--arch/powerpc/kernel/kprobes.c41
-rw-r--r--arch/powerpc/kernel/legacy_serial.c14
-rw-r--r--arch/powerpc/kernel/msi.c38
-rw-r--r--arch/powerpc/kernel/of_device.c7
-rw-r--r--arch/powerpc/kernel/of_platform.c1
-rw-r--r--arch/powerpc/kernel/pci_32.c2
-rw-r--r--arch/powerpc/kernel/pci_64.c9
-rw-r--r--arch/powerpc/kernel/ppc_ksyms.c1
-rw-r--r--arch/powerpc/kernel/process.c1
-rw-r--r--arch/powerpc/kernel/prom_init.c12
-rw-r--r--arch/powerpc/kernel/prom_parse.c25
-rw-r--r--arch/powerpc/kernel/ptrace.c1
-rw-r--r--arch/powerpc/kernel/signal_32.c1
-rw-r--r--arch/powerpc/kernel/signal_64.c1
-rw-r--r--arch/powerpc/kernel/smp.c73
-rw-r--r--arch/powerpc/kernel/swsusp.c43
-rw-r--r--arch/powerpc/kernel/swsusp_64.c24
-rw-r--r--arch/powerpc/kernel/swsusp_asm64.S228
-rw-r--r--arch/powerpc/kernel/syscalls.c1
-rw-r--r--arch/powerpc/kernel/sysfs.c2
-rw-r--r--arch/powerpc/kernel/traps.c16
-rw-r--r--arch/powerpc/kernel/udbg.c22
-rw-r--r--arch/powerpc/kernel/udbg_16550.c23
-rw-r--r--arch/powerpc/kernel/vdso.c1
-rw-r--r--arch/powerpc/kernel/vio.c2
-rw-r--r--arch/powerpc/lib/dma-noncoherent.c4
-rw-r--r--arch/powerpc/mm/44x_mmu.c82
-rw-r--r--arch/powerpc/mm/fault.c44
-rw-r--r--arch/powerpc/mm/hash_native_64.c84
-rw-r--r--arch/powerpc/mm/hash_utils_64.c2
-rw-r--r--arch/powerpc/mm/hugetlbpage.c1
-rw-r--r--arch/powerpc/mm/init_64.c5
-rw-r--r--arch/powerpc/mm/mem.c1
-rw-r--r--arch/powerpc/mm/mmu_decl.h3
-rw-r--r--arch/powerpc/mm/pgtable_32.c28
-rw-r--r--arch/powerpc/mm/stab.c2
-rw-r--r--arch/powerpc/platforms/44x/44x.h8
-rw-r--r--arch/powerpc/platforms/44x/Kconfig56
-rw-r--r--arch/powerpc/platforms/44x/Makefile2
-rw-r--r--arch/powerpc/platforms/44x/ebony.c73
-rw-r--r--arch/powerpc/platforms/44x/misc_44x.S57
-rw-r--r--arch/powerpc/platforms/52xx/Kconfig1
-rw-r--r--arch/powerpc/platforms/52xx/Makefile2
-rw-r--r--arch/powerpc/platforms/52xx/efika.c15
-rw-r--r--arch/powerpc/platforms/52xx/lite5200.c28
-rw-r--r--arch/powerpc/platforms/52xx/mpc52xx_pm.c191
-rw-r--r--arch/powerpc/platforms/52xx/mpc52xx_sleep.S154
-rw-r--r--arch/powerpc/platforms/83xx/mpc832x_mds.c1
-rw-r--r--arch/powerpc/platforms/83xx/mpc832x_rdb.c1
-rw-r--r--arch/powerpc/platforms/83xx/mpc836x_mds.c1
-rw-r--r--arch/powerpc/platforms/85xx/mpc8544_ds.c2
-rw-r--r--arch/powerpc/platforms/85xx/mpc85xx_cds.c2
-rw-r--r--arch/powerpc/platforms/85xx/mpc85xx_mds.c1
-rw-r--r--arch/powerpc/platforms/86xx/mpc86xx_hpcn.c2
-rw-r--r--arch/powerpc/platforms/Kconfig1
-rw-r--r--arch/powerpc/platforms/Makefile3
-rw-r--r--arch/powerpc/platforms/cell/interrupt.c6
-rw-r--r--arch/powerpc/platforms/cell/setup.c2
-rw-r--r--arch/powerpc/platforms/cell/spider-pic.c4
-rw-r--r--arch/powerpc/platforms/cell/spufs/backing_ops.c1
-rw-r--r--arch/powerpc/platforms/cell/spufs/hw_ops.c1
-rw-r--r--arch/powerpc/platforms/cell/spufs/sched.c1
-rw-r--r--arch/powerpc/platforms/cell/spufs/switch.c1
-rw-r--r--arch/powerpc/platforms/chrp/pci.c2
-rw-r--r--arch/powerpc/platforms/chrp/setup.c2
-rw-r--r--arch/powerpc/platforms/chrp/smp.c1
-rw-r--r--arch/powerpc/platforms/embedded6xx/Kconfig14
-rw-r--r--arch/powerpc/platforms/embedded6xx/Makefile1
-rw-r--r--arch/powerpc/platforms/embedded6xx/holly.c317
-rw-r--r--arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c21
-rw-r--r--arch/powerpc/platforms/iseries/smp.c1
-rw-r--r--arch/powerpc/platforms/iseries/viopath.c1
-rw-r--r--arch/powerpc/platforms/maple/pci.c12
-rw-r--r--arch/powerpc/platforms/maple/setup.c2
-rw-r--r--arch/powerpc/platforms/pasemi/cpufreq.c4
-rw-r--r--arch/powerpc/platforms/pasemi/setup.c7
-rw-r--r--arch/powerpc/platforms/powermac/cpufreq_64.c8
-rw-r--r--arch/powerpc/platforms/powermac/feature.c26
-rw-r--r--arch/powerpc/platforms/powermac/low_i2c.c2
-rw-r--r--arch/powerpc/platforms/powermac/nvram.c4
-rw-r--r--arch/powerpc/platforms/powermac/pci.c30
-rw-r--r--arch/powerpc/platforms/powermac/pic.c2
-rw-r--r--arch/powerpc/platforms/powermac/setup.c121
-rw-r--r--arch/powerpc/platforms/powermac/smp.c19
-rw-r--r--arch/powerpc/platforms/ps3/htab.c3
-rw-r--r--arch/powerpc/platforms/ps3/interrupt.c234
-rw-r--r--arch/powerpc/platforms/ps3/mm.c1
-rw-r--r--arch/powerpc/platforms/ps3/setup.c7
-rw-r--r--arch/powerpc/platforms/ps3/smp.c6
-rw-r--r--arch/powerpc/platforms/ps3/spu.c18
-rw-r--r--arch/powerpc/platforms/pseries/Makefile1
-rw-r--r--arch/powerpc/platforms/pseries/eeh.c30
-rw-r--r--arch/powerpc/platforms/pseries/iommu.c6
-rw-r--r--arch/powerpc/platforms/pseries/lpar.c4
-rw-r--r--arch/powerpc/platforms/pseries/msi.c270
-rw-r--r--arch/powerpc/platforms/pseries/pci_dlpar.c1
-rw-r--r--arch/powerpc/platforms/pseries/setup.c2
-rw-r--r--arch/powerpc/platforms/pseries/xics.c4
-rw-r--r--arch/powerpc/sysdev/Makefile5
-rw-r--r--arch/powerpc/sysdev/dart_iommu.c46
-rw-r--r--arch/powerpc/sysdev/mpic.c162
-rw-r--r--arch/powerpc/sysdev/mpic.h38
-rw-r--r--arch/powerpc/sysdev/mpic_msi.c183
-rw-r--r--arch/powerpc/sysdev/mpic_u3msi.c186
-rw-r--r--arch/powerpc/sysdev/rom.c32
-rw-r--r--arch/powerpc/sysdev/tsi108_dev.c7
-rw-r--r--arch/powerpc/sysdev/tsi108_pci.c12
-rw-r--r--arch/powerpc/sysdev/uic.c2
-rw-r--r--arch/powerpc/xmon/xmon.c3
142 files changed, 6176 insertions, 772 deletions
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 8de5f9ff4ade..808d2ef80e2f 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -117,6 +117,9 @@ config GENERIC_BUG
117 default y 117 default y
118 depends on BUG 118 depends on BUG
119 119
120config SYS_SUPPORTS_APM_EMULATION
121 bool
122
120# 123#
121# Powerpc uses the slab allocator to manage its ptes and the 124# Powerpc uses the slab allocator to manage its ptes and the
122# page structs of ptes are used for splitting the page table 125# page structs of ptes are used for splitting the page table
@@ -136,6 +139,11 @@ config DEFAULT_UIMAGE
136 Used to allow a board to specify it wants a uImage built by default 139 Used to allow a board to specify it wants a uImage built by default
137 default n 140 default n
138 141
142config PPC64_SWSUSP
143 bool
144 depends on PPC64 && (BROKEN || (PPC_PMAC64 && EXPERIMENTAL))
145 default y
146
139menu "Processor support" 147menu "Processor support"
140choice 148choice
141 prompt "Processor Type" 149 prompt "Processor Type"
@@ -206,6 +214,7 @@ config 40x
206config 44x 214config 44x
207 bool "AMCC 44x" 215 bool "AMCC 44x"
208 select PPC_DCR_NATIVE 216 select PPC_DCR_NATIVE
217 select WANT_DEVICE_TREE
209 218
210config E200 219config E200
211 bool "Freescale e200" 220 bool "Freescale e200"
@@ -270,9 +279,14 @@ config PPC_OF_PLATFORM_PCI
270 depends on PPC64 # not supported on 32 bits yet 279 depends on PPC64 # not supported on 32 bits yet
271 default n 280 default n
272 281
282config 4xx
283 bool
284 depends on 40x || 44x
285 default y
286
273config BOOKE 287config BOOKE
274 bool 288 bool
275 depends on E200 || E500 289 depends on E200 || E500 || 44x
276 default y 290 default y
277 291
278config FSL_BOOKE 292config FSL_BOOKE
@@ -669,11 +683,12 @@ config MCA
669config PCI 683config PCI
670 bool "PCI support" if 40x || CPM2 || PPC_83xx || PPC_85xx || PPC_86xx \ 684 bool "PCI support" if 40x || CPM2 || PPC_83xx || PPC_85xx || PPC_86xx \
671 || PPC_MPC52xx || (EMBEDDED && (PPC_PSERIES || PPC_ISERIES)) \ 685 || PPC_MPC52xx || (EMBEDDED && (PPC_PSERIES || PPC_ISERIES)) \
672 || MPC7448HPC2 || PPC_PS3 686 || MPC7448HPC2 || PPC_PS3 || PPC_HOLLY
673 default y if !40x && !CPM2 && !8xx && !APUS && !PPC_83xx \ 687 default y if !40x && !CPM2 && !8xx && !APUS && !PPC_83xx \
674 && !PPC_85xx && !PPC_86xx 688 && !PPC_85xx && !PPC_86xx
675 default PCI_PERMEDIA if !4xx && !CPM2 && !8xx && APUS 689 default PCI_PERMEDIA if !4xx && !CPM2 && !8xx && APUS
676 default PCI_QSPAN if !4xx && !CPM2 && 8xx 690 default PCI_QSPAN if !4xx && !CPM2 && 8xx
691 select ARCH_SUPPORTS_MSI
677 help 692 help
678 Find out whether your system includes a PCI bus. PCI is the name of 693 Find out whether your system includes a PCI bus. PCI is the name of
679 a bus system, i.e. the way the CPU talks to the other stuff inside 694 a bus system, i.e. the way the CPU talks to the other stuff inside
diff --git a/arch/powerpc/Kconfig.debug b/arch/powerpc/Kconfig.debug
index 86aa3745af7f..f70e795c262e 100644
--- a/arch/powerpc/Kconfig.debug
+++ b/arch/powerpc/Kconfig.debug
@@ -139,10 +139,6 @@ config BOOTX_TEXT
139 Say Y here to see progress messages from the boot firmware in text 139 Say Y here to see progress messages from the boot firmware in text
140 mode. Requires either BootX or Open Firmware. 140 mode. Requires either BootX or Open Firmware.
141 141
142config SERIAL_TEXT_DEBUG
143 bool "Support for early boot texts over serial port"
144 depends on 4xx
145
146config PPC_EARLY_DEBUG 142config PPC_EARLY_DEBUG
147 bool "Early debugging (dangerous)" 143 bool "Early debugging (dangerous)"
148 144
@@ -207,6 +203,24 @@ config PPC_EARLY_DEBUG_BEAT
207 help 203 help
208 Select this to enable early debugging for Celleb with Beat. 204 Select this to enable early debugging for Celleb with Beat.
209 205
206config PPC_EARLY_DEBUG_44x
207 bool "Early serial debugging for IBM/AMCC 44x CPUs"
208 depends on 44x
209 select PPC_UDBG_16550
210 help
211 Select this to enable early debugging for IBM 44x chips via the
212 inbuilt serial port.
213
210endchoice 214endchoice
211 215
216config PPC_EARLY_DEBUG_44x_PHYSLOW
217 hex "Low 32 bits of early debug UART physical address"
218 depends PPC_EARLY_DEBUG_44x
219 default "0x40000200"
220
221config PPC_EARLY_DEBUG_44x_PHYSHIGH
222 hex "EPRN of early debug UART physical address"
223 depends PPC_EARLY_DEBUG_44x
224 default "0x1"
225
212endmenu 226endmenu
diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
index 794992025d8d..81a531d84ff9 100644
--- a/arch/powerpc/Makefile
+++ b/arch/powerpc/Makefile
@@ -148,7 +148,7 @@ all: $(KBUILD_IMAGE)
148 148
149CPPFLAGS_vmlinux.lds := -Upowerpc 149CPPFLAGS_vmlinux.lds := -Upowerpc
150 150
151BOOT_TARGETS = zImage zImage.initrd uImage cuImage 151BOOT_TARGETS = zImage zImage.initrd uImage
152 152
153PHONY += $(BOOT_TARGETS) 153PHONY += $(BOOT_TARGETS)
154 154
diff --git a/arch/powerpc/boot/44x.c b/arch/powerpc/boot/44x.c
new file mode 100644
index 000000000000..d51377d9024f
--- /dev/null
+++ b/arch/powerpc/boot/44x.c
@@ -0,0 +1,40 @@
1/*
2 * Copyright 2007 David Gibson, IBM Corporation.
3 *
4 * Based on earlier code:
5 * Matt Porter <mporter@kernel.crashing.org>
6 * Copyright 2002-2005 MontaVista Software Inc.
7 *
8 * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
9 * Copyright (c) 2003, 2004 Zultys Technologies
10 *
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation; either version
14 * 2 of the License, or (at your option) any later version.
15 */
16#include <stddef.h>
17#include "types.h"
18#include "string.h"
19#include "stdio.h"
20#include "ops.h"
21#include "reg.h"
22#include "dcr.h"
23
24/* Read the 44x memory controller to get size of system memory. */
25void ibm44x_fixup_memsize(void)
26{
27 int i;
28 unsigned long memsize, bank_config;
29
30 memsize = 0;
31 for (i = 0; i < ARRAY_SIZE(sdram_bxcr); i++) {
32 mtdcr(DCRN_SDRAM0_CFGADDR, sdram_bxcr[i]);
33 bank_config = mfdcr(DCRN_SDRAM0_CFGDATA);
34
35 if (bank_config & SDRAM_CONFIG_BANK_ENABLE)
36 memsize += SDRAM_CONFIG_BANK_SIZE(bank_config);
37 }
38
39 dt_fixup_memory(0, memsize);
40}
diff --git a/arch/powerpc/boot/44x.h b/arch/powerpc/boot/44x.h
new file mode 100644
index 000000000000..7b129ad043e1
--- /dev/null
+++ b/arch/powerpc/boot/44x.h
@@ -0,0 +1,16 @@
1/*
2 * PowerPC 44x related functions
3 *
4 * Copyright 2007 David Gibson, IBM Corporation.
5 *
6 * This file is licensed under the terms of the GNU General Public
7 * License version 2. This program is licensed "as is" without any
8 * warranty of any kind, whether express or implied.
9 */
10#ifndef _PPC_BOOT_44X_H_
11#define _PPC_BOOT_44X_H_
12
13void ibm44x_fixup_memsize(void);
14void ebony_init(void *mac0, void *mac1);
15
16#endif /* _PPC_BOOT_44X_H_ */
diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile
index 3716594ea33e..5c384aad1184 100644
--- a/arch/powerpc/boot/Makefile
+++ b/arch/powerpc/boot/Makefile
@@ -37,13 +37,15 @@ zlib := inffast.c inflate.c inftrees.c
37zlibheader := inffast.h inffixed.h inflate.h inftrees.h infutil.h 37zlibheader := inffast.h inffixed.h inflate.h inftrees.h infutil.h
38zliblinuxheader := zlib.h zconf.h zutil.h 38zliblinuxheader := zlib.h zconf.h zutil.h
39 39
40$(addprefix $(obj)/,$(zlib) main.o): $(addprefix $(obj)/,$(zliblinuxheader)) \ 40$(addprefix $(obj)/,$(zlib) gunzip_util.o main.o): \
41 $(addprefix $(obj)/,$(zlibheader)) 41 $(addprefix $(obj)/,$(zliblinuxheader)) $(addprefix $(obj)/,$(zlibheader))
42 42
43src-wlib := string.S crt0.S stdio.c main.c flatdevtree.c flatdevtree_misc.c \ 43src-wlib := string.S crt0.S stdio.c main.c flatdevtree.c flatdevtree_misc.c \
44 ns16550.c serial.c simple_alloc.c div64.S util.S \ 44 ns16550.c serial.c simple_alloc.c div64.S util.S \
45 gunzip_util.c elf_util.c $(zlib) devtree.c 45 gunzip_util.c elf_util.c $(zlib) devtree.c \
46src-plat := of.c cuboot-83xx.c cuboot-85xx.c 46 44x.c ebony.c
47src-plat := of.c cuboot-83xx.c cuboot-85xx.c holly.c \
48 cuboot-ebony.c treeboot-ebony.c
47src-boot := $(src-wlib) $(src-plat) empty.c 49src-boot := $(src-wlib) $(src-plat) empty.c
48 50
49src-boot := $(addprefix $(obj)/, $(src-boot)) 51src-boot := $(addprefix $(obj)/, $(src-boot))
@@ -129,7 +131,14 @@ image-$(CONFIG_PPC_CELLEB) += zImage.pseries
129image-$(CONFIG_PPC_CHRP) += zImage.chrp 131image-$(CONFIG_PPC_CHRP) += zImage.chrp
130image-$(CONFIG_PPC_EFIKA) += zImage.chrp 132image-$(CONFIG_PPC_EFIKA) += zImage.chrp
131image-$(CONFIG_PPC_PMAC) += zImage.pmac 133image-$(CONFIG_PPC_PMAC) += zImage.pmac
132image-$(CONFIG_DEFAULT_UIMAGE) += uImage cuImage 134image-$(CONFIG_PPC_HOLLY) += zImage.holly-elf
135image-$(CONFIG_DEFAULT_UIMAGE) += uImage
136
137ifneq ($(CONFIG_DEVICE_TREE),"")
138image-$(CONFIG_PPC_83xx) += cuImage.83xx
139image-$(CONFIG_PPC_85xx) += cuImage.85xx
140image-$(CONFIG_EBONY) += treeImage.ebony cuImage.ebony
141endif
133 142
134# For 32-bit powermacs, build the COFF and miboot images 143# For 32-bit powermacs, build the COFF and miboot images
135# as well as the ELF images. 144# as well as the ELF images.
@@ -138,7 +147,8 @@ image-$(CONFIG_PPC_PMAC) += zImage.coff zImage.miboot
138endif 147endif
139 148
140initrd- := $(patsubst zImage%, zImage.initrd%, $(image-n) $(image-)) 149initrd- := $(patsubst zImage%, zImage.initrd%, $(image-n) $(image-))
141initrd-y := $(patsubst zImage%, zImage.initrd%, $(image-y)) 150initrd-y := $(patsubst zImage%, zImage.initrd%, \
151 $(patsubst treeImage%, treeImage.initrd%, $(image-y)))
142initrd-y := $(filter-out $(image-y), $(initrd-y)) 152initrd-y := $(filter-out $(image-y), $(initrd-y))
143targets += $(image-y) $(initrd-y) 153targets += $(image-y) $(initrd-y)
144 154
@@ -159,18 +169,27 @@ $(obj)/zImage.ps3: vmlinux
159$(obj)/zImage.initrd.ps3: vmlinux 169$(obj)/zImage.initrd.ps3: vmlinux
160 @echo " WARNING zImage.initrd.ps3 not supported (yet)" 170 @echo " WARNING zImage.initrd.ps3 not supported (yet)"
161 171
172$(obj)/zImage.holly-elf: vmlinux $(wrapperbits)
173 $(call if_changed,wrap,holly,$(obj)/dts/holly.dts,,)
174
175$(obj)/zImage.initrd.holly-elf: vmlinux $(wrapperbits) $(obj)/ramdisk.image.gz
176 $(call if_changed,wrap,holly,$(obj)/dts/holly.dts,,$(obj)/ramdisk.image.gz)
177
162$(obj)/uImage: vmlinux $(wrapperbits) 178$(obj)/uImage: vmlinux $(wrapperbits)
163 $(call if_changed,wrap,uboot) 179 $(call if_changed,wrap,uboot)
164 180
165cuboot-plat-$(CONFIG_83xx) += 83xx 181# CONFIG_DEVICE_TREE will have "" around it, make sure to strip them
166cuboot-plat-$(CONFIG_85xx) += 85xx
167cuboot-plat-y += unknown-platform
168
169dts = $(if $(shell echo $(CONFIG_DEVICE_TREE) | grep '^/'),\ 182dts = $(if $(shell echo $(CONFIG_DEVICE_TREE) | grep '^/'),\
170 ,$(srctree)/$(src)/dts/)$(CONFIG_DEVICE_TREE) 183 ,$(srctree)/$(src)/dts/)$(CONFIG_DEVICE_TREE:"%"=%)
184
185$(obj)/cuImage.%: vmlinux $(dts) $(wrapperbits)
186 $(call if_changed,wrap,cuboot-$*,$(dts))
187
188$(obj)/treeImage.%: vmlinux $(dts) $(wrapperbits)
189 $(call if_changed,wrap,treeboot-$*,$(dts))
171 190
172$(obj)/cuImage: vmlinux $(wrapperbits) 191$(obj)/treeImage.initrd.%: vmlinux $(dts) $(wrapperbits)
173 $(call if_changed,wrap,cuboot-$(word 1,$(cuboot-plat-y)),$(dts)) 192 $(call if_changed,wrap,treeboot-$*,$(dts),,$(obj)/ramdisk.image.gz)
174 193
175$(obj)/zImage: $(addprefix $(obj)/, $(image-y)) 194$(obj)/zImage: $(addprefix $(obj)/, $(image-y))
176 @rm -f $@; ln $< $@ 195 @rm -f $@; ln $< $@
@@ -181,8 +200,8 @@ install: $(CONFIGURE) $(addprefix $(obj)/, $(image-y))
181 sh -x $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" vmlinux System.map "$(INSTALL_PATH)" $< 200 sh -x $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" vmlinux System.map "$(INSTALL_PATH)" $<
182 201
183# anything not in $(targets) 202# anything not in $(targets)
184clean-files += $(image-) $(initrd-) zImage zImage.initrd \ 203clean-files += $(image-) $(initrd-) zImage zImage.initrd cuImage.* \
185 cuImage.elf cuImage.bin.gz 204 treeImage.*
186 205
187# clean up files cached by wrapper 206# clean up files cached by wrapper
188clean-kernel := vmlinux.strip vmlinux.bin 207clean-kernel := vmlinux.strip vmlinux.bin
diff --git a/arch/powerpc/boot/cuboot-ebony.c b/arch/powerpc/boot/cuboot-ebony.c
new file mode 100644
index 000000000000..4464c5f67acb
--- /dev/null
+++ b/arch/powerpc/boot/cuboot-ebony.c
@@ -0,0 +1,42 @@
1/*
2 * Old U-boot compatibility for Ebony
3 *
4 * Author: David Gibson <david@gibson.dropbear.id.au>
5 *
6 * Copyright 2007 David Gibson, IBM Corporatio.
7 * Based on cuboot-83xx.c, which is:
8 * Copyright (c) 2007 Freescale Semiconductor, Inc.
9 *
10 * This program is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU General Public License version 2 as published
12 * by the Free Software Foundation.
13 */
14
15#include "ops.h"
16#include "stdio.h"
17#include "44x.h"
18
19#define TARGET_44x
20#include "ppcboot.h"
21
22static bd_t bd;
23extern char _end[];
24
25BSS_STACK(4096);
26
27void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
28 unsigned long r6, unsigned long r7)
29{
30 unsigned long end_of_ram = bd.bi_memstart + bd.bi_memsize;
31 unsigned long avail_ram = end_of_ram - (unsigned long)_end;
32
33 memcpy(&bd, (bd_t *)r3, sizeof(bd));
34 loader_info.initrd_addr = r4;
35 loader_info.initrd_size = r4 ? r5 : 0;
36 loader_info.cmdline = (char *)r6;
37 loader_info.cmdline_len = r7 - r6;
38
39 simple_alloc_init(_end, avail_ram, 32, 64);
40
41 ebony_init(&bd.bi_enetaddr, &bd.bi_enet1addr);
42}
diff --git a/arch/powerpc/boot/dcr.h b/arch/powerpc/boot/dcr.h
new file mode 100644
index 000000000000..877bc97b1e97
--- /dev/null
+++ b/arch/powerpc/boot/dcr.h
@@ -0,0 +1,87 @@
1#ifndef _PPC_BOOT_DCR_H_
2#define _PPC_BOOT_DCR_H_
3
4#define mfdcr(rn) \
5 ({ \
6 unsigned long rval; \
7 asm volatile("mfdcr %0,%1" : "=r"(rval) : "i"(rn)); \
8 rval; \
9 })
10#define mtdcr(rn, val) \
11 asm volatile("mtdcr %0,%1" : : "i"(rn), "r"(val))
12
13/* 440GP/440GX SDRAM controller DCRs */
14#define DCRN_SDRAM0_CFGADDR 0x010
15#define DCRN_SDRAM0_CFGDATA 0x011
16
17#define SDRAM0_B0CR 0x40
18#define SDRAM0_B1CR 0x44
19#define SDRAM0_B2CR 0x48
20#define SDRAM0_B3CR 0x4c
21
22static const unsigned long sdram_bxcr[] = { SDRAM0_B0CR, SDRAM0_B1CR, SDRAM0_B2CR, SDRAM0_B3CR };
23
24#define SDRAM_CONFIG_BANK_ENABLE 0x00000001
25#define SDRAM_CONFIG_SIZE_MASK 0x000e0000
26#define SDRAM_CONFIG_BANK_SIZE(reg) \
27 (0x00400000 << ((reg & SDRAM_CONFIG_SIZE_MASK) >> 17))
28
29/* 440GP Clock, PM, chip control */
30#define DCRN_CPC0_SR 0x0b0
31#define DCRN_CPC0_ER 0x0b1
32#define DCRN_CPC0_FR 0x0b2
33#define DCRN_CPC0_SYS0 0x0e0
34#define CPC0_SYS0_TUNE 0xffc00000
35#define CPC0_SYS0_FBDV_MASK 0x003c0000
36#define CPC0_SYS0_FWDVA_MASK 0x00038000
37#define CPC0_SYS0_FWDVB_MASK 0x00007000
38#define CPC0_SYS0_OPDV_MASK 0x00000c00
39#define CPC0_SYS0_EPDV_MASK 0x00000300
40/* Helper macros to compute the actual clock divider values from the
41 * encodings in the CPC0 register */
42#define CPC0_SYS0_FBDV(reg) \
43 ((((((reg) & CPC0_SYS0_FBDV_MASK) >> 18) - 1) & 0xf) + 1)
44#define CPC0_SYS0_FWDVA(reg) \
45 (8 - (((reg) & CPC0_SYS0_FWDVA_MASK) >> 15))
46#define CPC0_SYS0_FWDVB(reg) \
47 (8 - (((reg) & CPC0_SYS0_FWDVB_MASK) >> 12))
48#define CPC0_SYS0_OPDV(reg) \
49 ((((reg) & CPC0_SYS0_OPDV_MASK) >> 10) + 1)
50#define CPC0_SYS0_EPDV(reg) \
51 ((((reg) & CPC0_SYS0_EPDV_MASK) >> 8) + 1)
52#define CPC0_SYS0_EXTSL 0x00000080
53#define CPC0_SYS0_RW_MASK 0x00000060
54#define CPC0_SYS0_RL 0x00000010
55#define CPC0_SYS0_ZMIISL_MASK 0x0000000c
56#define CPC0_SYS0_BYPASS 0x00000002
57#define CPC0_SYS0_NTO1 0x00000001
58#define DCRN_CPC0_SYS1 0x0e1
59#define DCRN_CPC0_CUST0 0x0e2
60#define DCRN_CPC0_CUST1 0x0e3
61#define DCRN_CPC0_STRP0 0x0e4
62#define DCRN_CPC0_STRP1 0x0e5
63#define DCRN_CPC0_STRP2 0x0e6
64#define DCRN_CPC0_STRP3 0x0e7
65#define DCRN_CPC0_GPIO 0x0e8
66#define DCRN_CPC0_PLB 0x0e9
67#define DCRN_CPC0_CR1 0x0ea
68#define DCRN_CPC0_CR0 0x0eb
69#define CPC0_CR0_SWE 0x80000000
70#define CPC0_CR0_CETE 0x40000000
71#define CPC0_CR0_U1FCS 0x20000000
72#define CPC0_CR0_U0DTE 0x10000000
73#define CPC0_CR0_U0DRE 0x08000000
74#define CPC0_CR0_U0DC 0x04000000
75#define CPC0_CR0_U1DTE 0x02000000
76#define CPC0_CR0_U1DRE 0x01000000
77#define CPC0_CR0_U1DC 0x00800000
78#define CPC0_CR0_U0EC 0x00400000
79#define CPC0_CR0_U1EC 0x00200000
80#define CPC0_CR0_UDIV_MASK 0x001f0000
81#define CPC0_CR0_UDIV(reg) \
82 ((((reg) & CPC0_CR0_UDIV_MASK) >> 16) + 1)
83#define DCRN_CPC0_MIRQ0 0x0ec
84#define DCRN_CPC0_MIRQ1 0x0ed
85#define DCRN_CPC0_JTAGID 0x0ef
86
87#endif /* _PPC_BOOT_DCR_H_ */
diff --git a/arch/powerpc/boot/dts/ebony.dts b/arch/powerpc/boot/dts/ebony.dts
new file mode 100644
index 000000000000..b67918651c48
--- /dev/null
+++ b/arch/powerpc/boot/dts/ebony.dts
@@ -0,0 +1,307 @@
1/*
2 * Device Tree Source for IBM Ebony
3 *
4 * Copyright (c) 2006, 2007 IBM Corp.
5 * Josh Boyer <jwboyer@linux.vnet.ibm.com>, David Gibson <dwg@au1.ibm.com>
6 *
7 * FIXME: Draft only!
8 *
9 * This file is licensed under the terms of the GNU General Public
10 * License version 2. This program is licensed "as is" without
11 * any warranty of any kind, whether express or implied.
12 *
13 * To build:
14 * dtc -I dts -O asm -o ebony.S -b 0 ebony.dts
15 * dtc -I dts -O dtb -o ebony.dtb -b 0 ebony.dts
16 */
17
18/ {
19 #address-cells = <2>;
20 #size-cells = <1>;
21 model = "ibm,ebony";
22 compatible = "ibm,ebony";
23 dcr-parent = <&/cpus/PowerPC,440GP@0>;
24
25 cpus {
26 #address-cells = <1>;
27 #size-cells = <0>;
28
29 PowerPC,440GP@0 {
30 device_type = "cpu";
31 reg = <0>;
32 clock-frequency = <0>; // Filled in by zImage
33 timebase-frequency = <0>; // Filled in by zImage
34 i-cache-line-size = <32>;
35 d-cache-line-size = <32>;
36 i-cache-size = <0>;
37 d-cache-size = <0>;
38 dcr-controller;
39 dcr-access-method = "native";
40 };
41 };
42
43 memory {
44 device_type = "memory";
45 reg = <0 0 0>; // Filled in by zImage
46 };
47
48 UIC0: interrupt-controller0 {
49 device_type = "ibm,uic";
50 compatible = "ibm,uic-440gp", "ibm,uic";
51 interrupt-controller;
52 cell-index = <0>;
53 dcr-reg = <0c0 009>;
54 #address-cells = <0>;
55 #size-cells = <0>;
56 #interrupt-cells = <2>;
57
58 };
59
60 UIC1: interrupt-controller1 {
61 device_type = "ibm,uic";
62 compatible = "ibm,uic-440gp", "ibm,uic";
63 interrupt-controller;
64 cell-index = <1>;
65 dcr-reg = <0d0 009>;
66 #address-cells = <0>;
67 #size-cells = <0>;
68 #interrupt-cells = <2>;
69 interrupts = <1e 4 1f 4>; /* cascade */
70 interrupt-parent = <&UIC0>;
71 };
72
73 CPC0: cpc {
74 device_type = "ibm,cpc";
75 compatible = "ibm,cpc-440gp";
76 dcr-reg = <0b0 003 0e0 010>;
77 // FIXME: anything else?
78 };
79
80 plb {
81 device_type = "ibm,plb";
82 compatible = "ibm,plb-440gp", "ibm,plb4";
83 #address-cells = <2>;
84 #size-cells = <1>;
85 ranges;
86 clock-frequency = <0>; // Filled in by zImage
87
88 SDRAM0: sdram {
89 device_type = "memory-controller";
90 compatible = "ibm,sdram-440gp", "ibm,sdram";
91 dcr-reg = <010 2>;
92 // FIXME: anything else?
93 };
94
95 DMA0: dma {
96 // FIXME: ???
97 device_type = "ibm,dma-4xx";
98 compatible = "ibm,dma-440gp", "ibm,dma-4xx";
99 dcr-reg = <100 027>;
100 };
101
102 MAL0: mcmal {
103 device_type = "mcmal-dma";
104 compatible = "ibm,mcmal-440gp", "ibm,mcmal";
105 dcr-reg = <180 62>;
106 num-tx-chans = <4>;
107 num-rx-chans = <4>;
108 interrupt-parent = <&MAL0>;
109 interrupts = <0 1 2 3 4>;
110 #interrupt-cells = <1>;
111 #address-cells = <0>;
112 #size-cells = <0>;
113 interrupt-map = </*TXEOB*/ 0 &UIC0 a 4
114 /*RXEOB*/ 1 &UIC0 b 4
115 /*SERR*/ 2 &UIC1 0 4
116 /*TXDE*/ 3 &UIC1 1 4
117 /*RXDE*/ 4 &UIC1 2 4>;
118 interrupt-map-mask = <ffffffff>;
119 };
120
121 POB0: opb {
122 device_type = "ibm,opb";
123 compatible = "ibm,opb-440gp", "ibm,opb";
124 #address-cells = <1>;
125 #size-cells = <1>;
126 /* Wish there was a nicer way of specifying a full 32-bit
127 range */
128 ranges = <00000000 1 00000000 80000000
129 80000000 1 80000000 80000000>;
130 dcr-reg = <090 00b>;
131 interrupt-parent = <&UIC1>;
132 interrupts = <7 4>;
133 clock-frequency = <0>; // Filled in by zImage
134
135 EBC0: ebc {
136 device_type = "ibm,ebc";
137 compatible = "ibm,ebc-440gp";
138 dcr-reg = <012 2>;
139 #address-cells = <2>;
140 #size-cells = <1>;
141 clock-frequency = <0>; // Filled in by zImage
142 ranges = <0 00000000 fff00000 100000
143 1 00000000 48000000 100000
144 2 00000000 ff800000 400000
145 3 00000000 48200000 100000
146 7 00000000 48300000 100000>;
147 interrupts = <5 4>;
148 interrupt-parent = <&UIC1>;
149
150 small-flash@0,0 {
151 device_type = "rom";
152 compatible = "direct-mapped";
153 probe-type = "JEDEC";
154 bank-width = <1>;
155 partitions = <0 80000>;
156 partition-names = "OpenBIOS";
157 reg = <0 80000 80000>;
158 };
159
160 ds1743@1,0 {
161 /* NVRAM & RTC */
162 device_type = "nvram";
163 compatible = "ds1743";
164 reg = <1 0 2000>;
165 };
166
167 large-flash@2,0 {
168 device_type = "rom";
169 compatible = "direct-mapped";
170 probe-type = "JEDEC";
171 bank-width = <1>;
172 partitions = <0 380000
173 280000 80000>;
174 partition-names = "fs", "firmware";
175 reg = <2 0 400000>;
176 };
177
178 ir@3,0 {
179 reg = <3 0 10>;
180 };
181
182 fpga@7,0 {
183 compatible = "Ebony-FPGA";
184 reg = <7 0 10>;
185 };
186 };
187
188 UART0: serial@40000200 {
189 device_type = "serial";
190 compatible = "ns16550";
191 reg = <40000200 8>;
192 virtual-reg = <e0000200>;
193 clock-frequency = <A8C000>;
194 current-speed = <2580>;
195 interrupt-parent = <&UIC0>;
196 interrupts = <0 4>;
197 };
198
199 UART1: serial@40000300 {
200 device_type = "serial";
201 compatible = "ns16550";
202 reg = <40000300 8>;
203 virtual-reg = <e0000300>;
204 clock-frequency = <A8C000>;
205 current-speed = <2580>;
206 interrupt-parent = <&UIC0>;
207 interrupts = <1 4>;
208 };
209
210 IIC0: i2c@40000400 {
211 /* FIXME */
212 device_type = "i2c";
213 compatible = "ibm,iic-440gp", "ibm,iic";
214 reg = <40000400 14>;
215 interrupt-parent = <&UIC0>;
216 interrupts = <2 4>;
217 };
218 IIC1: i2c@40000500 {
219 /* FIXME */
220 device_type = "i2c";
221 compatible = "ibm,iic-440gp", "ibm,iic";
222 reg = <40000500 14>;
223 interrupt-parent = <&UIC0>;
224 interrupts = <3 4>;
225 };
226
227 GPIO0: gpio@40000700 {
228 /* FIXME */
229 device_type = "gpio";
230 compatible = "ibm,gpio-440gp";
231 reg = <40000700 20>;
232 };
233
234 ZMII0: emac-zmii@40000780 {
235 device_type = "emac-zmii";
236 compatible = "ibm,zmii-440gp", "ibm,zmii";
237 reg = <40000780 c>;
238 };
239
240 EMAC0: ethernet@40000800 {
241 linux,network-index = <0>;
242 device_type = "network";
243 compatible = "ibm,emac-440gp", "ibm,emac";
244 interrupt-parent = <&UIC1>;
245 interrupts = <1c 4 1d 4>;
246 reg = <40000800 70>;
247 local-mac-address = [000000000000]; // Filled in by zImage
248 mal-device = <&MAL0>;
249 mal-tx-channel = <0 1>;
250 mal-rx-channel = <0>;
251 cell-index = <0>;
252 max-frame-size = <5dc>;
253 rx-fifo-size = <1000>;
254 tx-fifo-size = <800>;
255 phy-mode = "rmii";
256 phy-map = <00000001>;
257 zmii-device = <&ZMII0>;
258 zmii-channel = <0>;
259 };
260 EMAC1: ethernet@40000900 {
261 linux,network-index = <1>;
262 device_type = "network";
263 compatible = "ibm,emac-440gp", "ibm,emac";
264 interrupt-parent = <&UIC1>;
265 interrupts = <1e 4 1f 4>;
266 reg = <40000900 70>;
267 local-mac-address = [000000000000]; // Filled in by zImage
268 mal-device = <&MAL0>;
269 mal-tx-channel = <2 3>;
270 mal-rx-channel = <1>;
271 cell-index = <1>;
272 max-frame-size = <5dc>;
273 rx-fifo-size = <1000>;
274 tx-fifo-size = <800>;
275 phy-mode = "rmii";
276 phy-map = <00000001>;
277 zmii-device = <&ZMII0>;
278 zmii-channel = <1>;
279 };
280
281
282 GPT0: gpt@40000a00 {
283 /* FIXME */
284 reg = <40000a00 d4>;
285 interrupt-parent = <&UIC0>;
286 interrupts = <12 4 13 4 14 4 15 4 16 4>;
287 };
288
289 };
290
291 PCIX0: pci@1234 {
292 device_type = "pci";
293 /* FIXME */
294 reg = <2 0ec00000 8
295 2 0ec80000 f0
296 2 0ec80100 fc>;
297 };
298 };
299
300 chosen {
301 linux,stdout-path = "/plb/opb/serial@40000200";
302// linux,initrd-start = <0>; /* FIXME */
303// linux,initrd-end = <0>;
304// bootargs = "";
305 };
306};
307
diff --git a/arch/powerpc/boot/dts/holly.dts b/arch/powerpc/boot/dts/holly.dts
new file mode 100644
index 000000000000..254499b107f4
--- /dev/null
+++ b/arch/powerpc/boot/dts/holly.dts
@@ -0,0 +1,198 @@
1/*
2 * Device Tree Source for IBM Holly (PPC 750CL with TSI controller)
3 * Copyright 2007, IBM Corporation
4 *
5 * Stephen Winiecki <stevewin@us.ibm.com>
6 * Josh Boyer <jwboyer@linux.vnet.ibm.com>
7 *
8 * This file is licensed under the terms of the GNU General Public
9 * License version 2. This program is licensed "as is" without
10 * any warranty of any kind, whether express or implied.
11 *
12 * To build:
13 * dtc -I dts -O asm -o holly.S -b 0 holly.dts
14 * dtc -I dts -O dtb -o holly.dtb -b 0 holly.dts
15 */
16
17/ {
18 model = "41K7339";
19 compatible = "ibm,holly";
20 #address-cells = <1>;
21 #size-cells = <1>;
22
23 cpus {
24 #address-cells = <1>;
25 #size-cells =<0>;
26 PowerPC,750CL@0 {
27 device_type = "cpu";
28 reg = <0>;
29 d-cache-line-size = <20>;
30 i-cache-line-size = <20>;
31 d-cache-size = <8000>;
32 i-cache-size = <8000>;
33 d-cache-sets = <80>;
34 i-cache-sets = <80>;
35 timebase-frequency = <2faf080>;
36 clock-frequency = <23c34600>;
37 bus-frequency = <bebc200>;
38 32-bit;
39 };
40 };
41
42 memory@0 {
43 device_type = "memory";
44 reg = <00000000 20000000>;
45 };
46
47 tsi109@c0000000 {
48 device_type = "tsi-bridge";
49 compatible = "tsi-bridge";
50 #address-cells = <1>;
51 #size-cells = <1>;
52 ranges = <00000000 c0000000 00010000>;
53 reg = <c0000000 00010000>;
54
55 i2c@7000 {
56 device_type = "i2c";
57 compatible = "tsi-i2c";
58 interrupt-parent = < &/tsi109@c0000000/pic@7400 >;
59 interrupts = <e 2>;
60 reg = <7000 400>;
61 };
62
63 mdio@6000 {
64 device_type = "mdio";
65 compatible = "tsi-ethernet";
66
67 PHY1: ethernet-phy@6000 {
68 device_type = "ethernet-phy";
69 compatible = "bcm54xx";
70 reg = <6000 50>;
71 phy-id = <1>;
72 };
73
74 PHY2: ethernet-phy@6400 {
75 device_type = "ethernet-phy";
76 compatible = "bcm54xx";
77 reg = <6000 50>;
78 phy-id = <2>;
79 };
80 };
81
82 ethernet@6200 {
83 device_type = "network";
84 compatible = "tsi-ethernet";
85 #address-cells = <1>;
86 #size-cells = <0>;
87 reg = <6000 200>;
88 local-mac-address = [ 00 00 00 00 00 00 ];
89 interrupt-parent = < &/tsi109@c0000000/pic@7400 >;
90 interrupts = <10 2>;
91 phy-handle = <&PHY1>;
92 };
93
94 ethernet@6600 {
95 device_type = "network";
96 compatible = "tsi-ethernet";
97 #address-cells = <1>;
98 #size-cells = <0>;
99 reg = <6400 200>;
100 local-mac-address = [ 00 00 00 00 00 00 ];
101 interrupt-parent = < &/tsi109@c0000000/pic@7400 >;
102 interrupts = <11 2>;
103 phy-handle = <&PHY2>;
104 };
105
106 serial@7808 {
107 device_type = "serial";
108 compatible = "ns16550";
109 reg = <7808 200>;
110 virtual-reg = <c0007808>;
111 clock-frequency = <3F9C6000>;
112 current-speed = <1c200>;
113 interrupt-parent = < &/tsi109@c0000000/pic@7400 >;
114 interrupts = <c 2>;
115 };
116
117 serial@7c08 {
118 device_type = "serial";
119 compatible = "ns16550";
120 reg = <7c08 200>;
121 virtual-reg = <c0007c08>;
122 clock-frequency = <3F9C6000>;
123 current-speed = <1c200>;
124 interrupt-parent = < &/tsi109@c0000000/pic@7400 >;
125 interrupts = <d 2>;
126 };
127
128 MPIC: pic@7400 {
129 device_type = "open-pic";
130 compatible = "chrp,open-pic";
131 interrupt-controller;
132 #interrupt-cells = <2>;
133 reg = <7400 400>;
134 big-endian;
135 };
136
137 pci@1000 {
138 device_type = "pci";
139 compatible = "tsi109";
140 #interrupt-cells = <1>;
141 #size-cells = <2>;
142 #address-cells = <3>;
143 reg = <1000 1000>;
144 bus-range = <0 0>;
145 /*----------------------------------------------------+
146 | PCI memory range.
147 | 01 denotes I/O space
148 | 02 denotes 32-bit memory space
149 +----------------------------------------------------*/
150 ranges = <02000000 0 40000000 40000000 0 10000000
151 01000000 0 00000000 7e000000 0 00010000>;
152 clock-frequency = <7f28154>;
153 interrupt-parent = < &/tsi109@c0000000/pic@7400 >;
154 interrupts = <17 2>;
155 interrupt-map-mask = <f800 0 0 7>;
156 /*----------------------------------------------------+
157 | The INTA, INTB, INTC, INTD are shared.
158 +----------------------------------------------------*/
159 interrupt-map = <
160 0800 0 0 1 &RT0 24 0
161 0800 0 0 2 &RT0 25 0
162 0800 0 0 3 &RT0 26 0
163 0800 0 0 4 &RT0 27 0
164
165 1000 0 0 1 &RT0 25 0
166 1000 0 0 2 &RT0 26 0
167 1000 0 0 3 &RT0 27 0
168 1000 0 0 4 &RT0 24 0
169
170 1800 0 0 1 &RT0 26 0
171 1800 0 0 2 &RT0 27 0
172 1800 0 0 3 &RT0 24 0
173 1800 0 0 4 &RT0 25 0
174
175 2000 0 0 1 &RT0 27 0
176 2000 0 0 2 &RT0 24 0
177 2000 0 0 3 &RT0 25 0
178 2000 0 0 4 &RT0 26 0
179 >;
180
181 RT0: router@1180 {
182 device_type = "pic-router";
183 interrupt-controller;
184 big-endian;
185 clock-frequency = <0>;
186 #address-cells = <0>;
187 #interrupt-cells = <2>;
188 interrupts = <17 2>;
189 interrupt-parent = < &/tsi109@c0000000/pic@7400 >;
190 };
191 };
192 };
193
194 chosen {
195 linux,stdout-path = "/tsi109@c0000000/serial@7808";
196 bootargs = "console=ttyS0,115200";
197 };
198};
diff --git a/arch/powerpc/boot/dts/lite5200.dts b/arch/powerpc/boot/dts/lite5200.dts
index ba54c6b40a09..e13ac6ef05a9 100644
--- a/arch/powerpc/boot/dts/lite5200.dts
+++ b/arch/powerpc/boot/dts/lite5200.dts
@@ -48,6 +48,7 @@
48 48
49 soc5200@f0000000 { 49 soc5200@f0000000 {
50 model = "fsl,mpc5200"; 50 model = "fsl,mpc5200";
51 compatible = "mpc5200";
51 revision = "" // from bootloader 52 revision = "" // from bootloader
52 #interrupt-cells = <3>; 53 #interrupt-cells = <3>;
53 device_type = "soc"; 54 device_type = "soc";
@@ -166,7 +167,7 @@
166 device_type = "mscan"; 167 device_type = "mscan";
167 compatible = "mpc5200-mscan"; 168 compatible = "mpc5200-mscan";
168 cell-index = <1>; 169 cell-index = <1>;
169 interrupts = <1 12 0>; 170 interrupts = <2 12 0>;
170 interrupt-parent = <500>; 171 interrupt-parent = <500>;
171 reg = <980 80>; 172 reg = <980 80>;
172 }; 173 };
@@ -178,7 +179,7 @@
178 interrupt-parent = <500>; 179 interrupt-parent = <500>;
179 }; 180 };
180 181
181 gpio-wkup@b00 { 182 gpio-wkup@c00 {
182 compatible = "mpc5200-gpio-wkup"; 183 compatible = "mpc5200-gpio-wkup";
183 reg = <c00 40>; 184 reg = <c00 40>;
184 interrupts = <1 8 0 0 3 0>; 185 interrupts = <1 8 0 0 3 0>;
@@ -317,20 +318,22 @@
317 318
318 i2c@3d00 { 319 i2c@3d00 {
319 device_type = "i2c"; 320 device_type = "i2c";
320 compatible = "mpc5200-i2c"; 321 compatible = "mpc5200-i2c\0fsl-i2c";
321 cell-index = <0>; 322 cell-index = <0>;
322 reg = <3d00 40>; 323 reg = <3d00 40>;
323 interrupts = <2 f 0>; 324 interrupts = <2 f 0>;
324 interrupt-parent = <500>; 325 interrupt-parent = <500>;
326 fsl5200-clocking;
325 }; 327 };
326 328
327 i2c@3d40 { 329 i2c@3d40 {
328 device_type = "i2c"; 330 device_type = "i2c";
329 compatible = "mpc5200-i2c"; 331 compatible = "mpc5200-i2c\0fsl-i2c";
330 cell-index = <1>; 332 cell-index = <1>;
331 reg = <3d40 40>; 333 reg = <3d40 40>;
332 interrupts = <2 10 0>; 334 interrupts = <2 10 0>;
333 interrupt-parent = <500>; 335 interrupt-parent = <500>;
336 fsl5200-clocking;
334 }; 337 };
335 sram@8000 { 338 sram@8000 {
336 device_type = "sram"; 339 device_type = "sram";
diff --git a/arch/powerpc/boot/dts/lite5200b.dts b/arch/powerpc/boot/dts/lite5200b.dts
index 2e003081b0d3..00211b39a342 100644
--- a/arch/powerpc/boot/dts/lite5200b.dts
+++ b/arch/powerpc/boot/dts/lite5200b.dts
@@ -48,6 +48,7 @@
48 48
49 soc5200@f0000000 { 49 soc5200@f0000000 {
50 model = "fsl,mpc5200b"; 50 model = "fsl,mpc5200b";
51 compatible = "mpc5200";
51 revision = ""; // from bootloader 52 revision = ""; // from bootloader
52 #interrupt-cells = <3>; 53 #interrupt-cells = <3>;
53 device_type = "soc"; 54 device_type = "soc";
@@ -166,7 +167,7 @@
166 device_type = "mscan"; 167 device_type = "mscan";
167 compatible = "mpc5200b-mscan\0mpc5200-mscan"; 168 compatible = "mpc5200b-mscan\0mpc5200-mscan";
168 cell-index = <1>; 169 cell-index = <1>;
169 interrupts = <1 12 0>; 170 interrupts = <2 12 0>;
170 interrupt-parent = <500>; 171 interrupt-parent = <500>;
171 reg = <980 80>; 172 reg = <980 80>;
172 }; 173 };
@@ -178,7 +179,7 @@
178 interrupt-parent = <500>; 179 interrupt-parent = <500>;
179 }; 180 };
180 181
181 gpio-wkup@b00 { 182 gpio-wkup@c00 {
182 compatible = "mpc5200b-gpio-wkup\0mpc5200-gpio-wkup"; 183 compatible = "mpc5200b-gpio-wkup\0mpc5200-gpio-wkup";
183 reg = <c00 40>; 184 reg = <c00 40>;
184 interrupts = <1 8 0 0 3 0>; 185 interrupts = <1 8 0 0 3 0>;
@@ -322,20 +323,22 @@
322 323
323 i2c@3d00 { 324 i2c@3d00 {
324 device_type = "i2c"; 325 device_type = "i2c";
325 compatible = "mpc5200b-i2c\0mpc5200-i2c"; 326 compatible = "mpc5200b-i2c\0mpc5200-i2c\0fsl-i2c";
326 cell-index = <0>; 327 cell-index = <0>;
327 reg = <3d00 40>; 328 reg = <3d00 40>;
328 interrupts = <2 f 0>; 329 interrupts = <2 f 0>;
329 interrupt-parent = <500>; 330 interrupt-parent = <500>;
331 fsl5200-clocking;
330 }; 332 };
331 333
332 i2c@3d40 { 334 i2c@3d40 {
333 device_type = "i2c"; 335 device_type = "i2c";
334 compatible = "mpc5200b-i2c\0mpc5200-i2c"; 336 compatible = "mpc5200b-i2c\0mpc5200-i2c\0fsl-i2c";
335 cell-index = <1>; 337 cell-index = <1>;
336 reg = <3d40 40>; 338 reg = <3d40 40>;
337 interrupts = <2 10 0>; 339 interrupts = <2 10 0>;
338 interrupt-parent = <500>; 340 interrupt-parent = <500>;
341 fsl5200-clocking;
339 }; 342 };
340 sram@8000 { 343 sram@8000 {
341 device_type = "sram"; 344 device_type = "sram";
diff --git a/arch/powerpc/boot/dts/mpc832x_mds.dts b/arch/powerpc/boot/dts/mpc832x_mds.dts
index c798491f4cd0..93b760696010 100644
--- a/arch/powerpc/boot/dts/mpc832x_mds.dts
+++ b/arch/powerpc/boot/dts/mpc832x_mds.dts
@@ -306,14 +306,12 @@
306 interrupts = <11 8>; 306 interrupts = <11 8>;
307 reg = <3>; 307 reg = <3>;
308 device_type = "ethernet-phy"; 308 device_type = "ethernet-phy";
309 interface = <3>; //ENET_100_MII
310 }; 309 };
311 phy4: ethernet-phy@04 { 310 phy4: ethernet-phy@04 {
312 interrupt-parent = < &ipic >; 311 interrupt-parent = < &ipic >;
313 interrupts = <12 8>; 312 interrupts = <12 8>;
314 reg = <4>; 313 reg = <4>;
315 device_type = "ethernet-phy"; 314 device_type = "ethernet-phy";
316 interface = <3>;
317 }; 315 };
318 }; 316 };
319 317
diff --git a/arch/powerpc/boot/dts/mpc832x_rdb.dts b/arch/powerpc/boot/dts/mpc832x_rdb.dts
index b55bced1593d..be4c35784e49 100644
--- a/arch/powerpc/boot/dts/mpc832x_rdb.dts
+++ b/arch/powerpc/boot/dts/mpc832x_rdb.dts
@@ -265,14 +265,12 @@
265 interrupts = <0>; 265 interrupts = <0>;
266 reg = <0>; 266 reg = <0>;
267 device_type = "ethernet-phy"; 267 device_type = "ethernet-phy";
268 interface = <3>; //ENET_100_MII
269 }; 268 };
270 phy04:ethernet-phy@04 { 269 phy04:ethernet-phy@04 {
271 interrupt-parent = <&pic>; 270 interrupt-parent = <&pic>;
272 interrupts = <0>; 271 interrupts = <0>;
273 reg = <4>; 272 reg = <4>;
274 device_type = "ethernet-phy"; 273 device_type = "ethernet-phy";
275 interface = <3>;
276 }; 274 };
277 }; 275 };
278 276
diff --git a/arch/powerpc/boot/dts/mpc836x_mds.dts b/arch/powerpc/boot/dts/mpc836x_mds.dts
index 7f578eb57082..38c8594df3a4 100644
--- a/arch/powerpc/boot/dts/mpc836x_mds.dts
+++ b/arch/powerpc/boot/dts/mpc836x_mds.dts
@@ -305,6 +305,7 @@
305 rx-clock = <0>; 305 rx-clock = <0>;
306 tx-clock = <19>; 306 tx-clock = <19>;
307 phy-handle = < &phy0 >; 307 phy-handle = < &phy0 >;
308 phy-connection-type = "rgmii-id";
308 pio-handle = < &pio1 >; 309 pio-handle = < &pio1 >;
309 }; 310 };
310 311
@@ -320,6 +321,7 @@
320 rx-clock = <0>; 321 rx-clock = <0>;
321 tx-clock = <14>; 322 tx-clock = <14>;
322 phy-handle = < &phy1 >; 323 phy-handle = < &phy1 >;
324 phy-connection-type = "rgmii-id";
323 pio-handle = < &pio2 >; 325 pio-handle = < &pio2 >;
324 }; 326 };
325 327
@@ -335,14 +337,12 @@
335 interrupts = <11 8>; 337 interrupts = <11 8>;
336 reg = <0>; 338 reg = <0>;
337 device_type = "ethernet-phy"; 339 device_type = "ethernet-phy";
338 interface = <6>; //ENET_1000_GMII
339 }; 340 };
340 phy1: ethernet-phy@01 { 341 phy1: ethernet-phy@01 {
341 interrupt-parent = < &ipic >; 342 interrupt-parent = < &ipic >;
342 interrupts = <12 8>; 343 interrupts = <12 8>;
343 reg = <1>; 344 reg = <1>;
344 device_type = "ethernet-phy"; 345 device_type = "ethernet-phy";
345 interface = <6>;
346 }; 346 };
347 }; 347 };
348 348
diff --git a/arch/powerpc/boot/dts/mpc8568mds.dts b/arch/powerpc/boot/dts/mpc8568mds.dts
index 7361b36749cb..948a3b61bd4a 100644
--- a/arch/powerpc/boot/dts/mpc8568mds.dts
+++ b/arch/powerpc/boot/dts/mpc8568mds.dts
@@ -288,6 +288,7 @@
288 rx-clock = <0>; 288 rx-clock = <0>;
289 tx-clock = <19>; 289 tx-clock = <19>;
290 phy-handle = <&qe_phy0>; 290 phy-handle = <&qe_phy0>;
291 phy-connection-type = "gmii";
291 pio-handle = <&pio1>; 292 pio-handle = <&pio1>;
292 }; 293 };
293 294
@@ -303,6 +304,7 @@
303 rx-clock = <0>; 304 rx-clock = <0>;
304 tx-clock = <14>; 305 tx-clock = <14>;
305 phy-handle = <&qe_phy1>; 306 phy-handle = <&qe_phy1>;
307 phy-connection-type = "gmii";
306 pio-handle = <&pio2>; 308 pio-handle = <&pio2>;
307 }; 309 };
308 310
@@ -320,28 +322,24 @@
320 interrupts = <31 1>; 322 interrupts = <31 1>;
321 reg = <0>; 323 reg = <0>;
322 device_type = "ethernet-phy"; 324 device_type = "ethernet-phy";
323 interface = <6>; //ENET_1000_GMII
324 }; 325 };
325 qe_phy1: ethernet-phy@01 { 326 qe_phy1: ethernet-phy@01 {
326 interrupt-parent = <&mpic>; 327 interrupt-parent = <&mpic>;
327 interrupts = <32 1>; 328 interrupts = <32 1>;
328 reg = <1>; 329 reg = <1>;
329 device_type = "ethernet-phy"; 330 device_type = "ethernet-phy";
330 interface = <6>;
331 }; 331 };
332 qe_phy2: ethernet-phy@02 { 332 qe_phy2: ethernet-phy@02 {
333 interrupt-parent = <&mpic>; 333 interrupt-parent = <&mpic>;
334 interrupts = <31 1>; 334 interrupts = <31 1>;
335 reg = <2>; 335 reg = <2>;
336 device_type = "ethernet-phy"; 336 device_type = "ethernet-phy";
337 interface = <6>; //ENET_1000_GMII
338 }; 337 };
339 qe_phy3: ethernet-phy@03 { 338 qe_phy3: ethernet-phy@03 {
340 interrupt-parent = <&mpic>; 339 interrupt-parent = <&mpic>;
341 interrupts = <32 1>; 340 interrupts = <32 1>;
342 reg = <3>; 341 reg = <3>;
343 device_type = "ethernet-phy"; 342 device_type = "ethernet-phy";
344 interface = <6>; //ENET_1000_GMII
345 }; 343 };
346 }; 344 };
347 345
diff --git a/arch/powerpc/boot/ebony.c b/arch/powerpc/boot/ebony.c
new file mode 100644
index 000000000000..b1251ee7a102
--- /dev/null
+++ b/arch/powerpc/boot/ebony.c
@@ -0,0 +1,129 @@
1/*
2 * Copyright 2007 David Gibson, IBM Corporation.
3 *
4 * Based on earlier code:
5 * Copyright (C) Paul Mackerras 1997.
6 *
7 * Matt Porter <mporter@kernel.crashing.org>
8 * Copyright 2002-2005 MontaVista Software Inc.
9 *
10 * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
11 * Copyright (c) 2003, 2004 Zultys Technologies
12 *
13 * This program is free software; you can redistribute it and/or
14 * modify it under the terms of the GNU General Public License
15 * as published by the Free Software Foundation; either version
16 * 2 of the License, or (at your option) any later version.
17 */
18#include <stdarg.h>
19#include <stddef.h>
20#include "types.h"
21#include "elf.h"
22#include "string.h"
23#include "stdio.h"
24#include "page.h"
25#include "ops.h"
26#include "reg.h"
27#include "dcr.h"
28#include "44x.h"
29
30extern char _dtb_start[];
31extern char _dtb_end[];
32
33static u8 *ebony_mac0, *ebony_mac1;
34
35/* Calculate 440GP clocks */
36void ibm440gp_fixup_clocks(unsigned int sysclk, unsigned int ser_clk)
37{
38 u32 sys0 = mfdcr(DCRN_CPC0_SYS0);
39 u32 cr0 = mfdcr(DCRN_CPC0_CR0);
40 u32 cpu, plb, opb, ebc, tb, uart0, uart1, m;
41 u32 opdv = CPC0_SYS0_OPDV(sys0);
42 u32 epdv = CPC0_SYS0_EPDV(sys0);
43
44 if (sys0 & CPC0_SYS0_BYPASS) {
45 /* Bypass system PLL */
46 cpu = plb = sysclk;
47 } else {
48 if (sys0 & CPC0_SYS0_EXTSL)
49 /* PerClk */
50 m = CPC0_SYS0_FWDVB(sys0) * opdv * epdv;
51 else
52 /* CPU clock */
53 m = CPC0_SYS0_FBDV(sys0) * CPC0_SYS0_FWDVA(sys0);
54 cpu = sysclk * m / CPC0_SYS0_FWDVA(sys0);
55 plb = sysclk * m / CPC0_SYS0_FWDVB(sys0);
56 }
57
58 opb = plb / opdv;
59 ebc = opb / epdv;
60
61 /* FIXME: Check if this is for all 440GP, or just Ebony */
62 if ((mfpvr() & 0xf0000fff) == 0x40000440)
63 /* Rev. B 440GP, use external system clock */
64 tb = sysclk;
65 else
66 /* Rev. C 440GP, errata force us to use internal clock */
67 tb = cpu;
68
69 if (cr0 & CPC0_CR0_U0EC)
70 /* External UART clock */
71 uart0 = ser_clk;
72 else
73 /* Internal UART clock */
74 uart0 = plb / CPC0_CR0_UDIV(cr0);
75
76 if (cr0 & CPC0_CR0_U1EC)
77 /* External UART clock */
78 uart1 = ser_clk;
79 else
80 /* Internal UART clock */
81 uart1 = plb / CPC0_CR0_UDIV(cr0);
82
83 printf("PPC440GP: SysClk = %dMHz (%x)\n\r",
84 (sysclk + 500000) / 1000000, sysclk);
85
86 dt_fixup_cpu_clocks(cpu, tb, 0);
87
88 dt_fixup_clock("/plb", plb);
89 dt_fixup_clock("/plb/opb", opb);
90 dt_fixup_clock("/plb/opb/ebc", ebc);
91 dt_fixup_clock("/plb/opb/serial@40000200", uart0);
92 dt_fixup_clock("/plb/opb/serial@40000300", uart1);
93}
94
95static void ebony_fixups(void)
96{
97 // FIXME: sysclk should be derived by reading the FPGA registers
98 unsigned long sysclk = 33000000;
99
100 ibm440gp_fixup_clocks(sysclk, 6 * 1843200);
101 ibm44x_fixup_memsize();
102 dt_fixup_mac_addresses(ebony_mac0, ebony_mac1);
103}
104
105#define SPRN_DBCR0 0x134
106#define DBCR0_RST_SYSTEM 0x30000000
107
108static void ebony_exit(void)
109{
110 unsigned long tmp;
111
112 asm volatile (
113 "mfspr %0,%1\n"
114 "oris %0,%0,%2@h\n"
115 "mtspr %1,%0"
116 : "=&r"(tmp) : "i"(SPRN_DBCR0), "i"(DBCR0_RST_SYSTEM)
117 );
118
119}
120
121void ebony_init(void *mac0, void *mac1)
122{
123 platform_ops.fixups = ebony_fixups;
124 platform_ops.exit = ebony_exit;
125 ebony_mac0 = mac0;
126 ebony_mac1 = mac1;
127 ft_init(_dtb_start, _dtb_end - _dtb_start, 32);
128 serial_console_init();
129}
diff --git a/arch/powerpc/boot/holly.c b/arch/powerpc/boot/holly.c
new file mode 100644
index 000000000000..7d6539f5e22c
--- /dev/null
+++ b/arch/powerpc/boot/holly.c
@@ -0,0 +1,38 @@
1/*
2 * Copyright 2007 IBM Corporation
3 *
4 * Stephen Winiecki <stevewin@us.ibm.com>
5 * Josh Boyer <jwboyer@linux.vnet.ibm.com>
6 *
7 * Based on earlier code:
8 * Copyright (C) Paul Mackerras 1997.
9 *
10 * This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public License
12 * version 2 as published by the Free Software Foundation.
13 */
14#include <stdarg.h>
15#include <stddef.h>
16#include "types.h"
17#include "elf.h"
18#include "string.h"
19#include "stdio.h"
20#include "page.h"
21#include "ops.h"
22#include "io.h"
23
24extern char _start[];
25extern char _end[];
26extern char _dtb_start[];
27extern char _dtb_end[];
28
29BSS_STACK(4096);
30
31void platform_init(unsigned long r3, unsigned long r4, unsigned long r5)
32{
33 u32 heapsize = 0x8000000 - (u32)_end; /* 128M */
34
35 simple_alloc_init(_end, heapsize, 32, 64);
36 ft_init(_dtb_start, 0, 4);
37 serial_console_init();
38}
diff --git a/arch/powerpc/boot/mktree.c b/arch/powerpc/boot/mktree.c
index 4cb892993651..45d06a8c7cd1 100644
--- a/arch/powerpc/boot/mktree.c
+++ b/arch/powerpc/boot/mktree.c
@@ -46,8 +46,8 @@ int main(int argc, char *argv[])
46 struct stat st; 46 struct stat st;
47 boot_block_t bt; 47 boot_block_t bt;
48 48
49 if (argc < 3) { 49 if (argc < 5) {
50 fprintf(stderr, "usage: %s <zImage-file> <boot-image> [entry-point]\n",argv[0]); 50 fprintf(stderr, "usage: %s <zImage-file> <boot-image> <load address> <entry point>\n",argv[0]);
51 exit(1); 51 exit(1);
52 } 52 }
53 53
@@ -61,10 +61,8 @@ int main(int argc, char *argv[])
61 bt.bb_magic = htonl(0x0052504F); 61 bt.bb_magic = htonl(0x0052504F);
62 62
63 /* If we have the optional entry point parameter, use it */ 63 /* If we have the optional entry point parameter, use it */
64 if (argc == 4) 64 bt.bb_dest = htonl(strtoul(argv[3], NULL, 0));
65 bt.bb_dest = bt.bb_entry_point = htonl(strtoul(argv[3], NULL, 0)); 65 bt.bb_entry_point = htonl(strtoul(argv[4], NULL, 0));
66 else
67 bt.bb_dest = bt.bb_entry_point = htonl(0x500000);
68 66
69 /* We know these from the linker command. 67 /* We know these from the linker command.
70 * ...and then move it up into memory a little more so the 68 * ...and then move it up into memory a little more so the
diff --git a/arch/powerpc/boot/treeboot-ebony.c b/arch/powerpc/boot/treeboot-ebony.c
new file mode 100644
index 000000000000..8436a9c55192
--- /dev/null
+++ b/arch/powerpc/boot/treeboot-ebony.c
@@ -0,0 +1,34 @@
1/*
2 * Old U-boot compatibility for Ebony
3 *
4 * Author: David Gibson <david@gibson.dropbear.id.au>
5 *
6 * Copyright 2007 David Gibson, IBM Corporatio.
7 * Based on cuboot-83xx.c, which is:
8 * Copyright (c) 2007 Freescale Semiconductor, Inc.
9 *
10 * This program is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU General Public License version 2 as published
12 * by the Free Software Foundation.
13 */
14
15#include "ops.h"
16#include "stdio.h"
17#include "44x.h"
18
19extern char _end[];
20
21BSS_STACK(4096);
22
23#define OPENBIOS_MAC_BASE 0xfffffe0c
24#define OPENBIOS_MAC_OFFSET 0xc
25
26void platform_init(void)
27{
28 unsigned long end_of_ram = 0x8000000;
29 unsigned long avail_ram = end_of_ram - (unsigned long)_end;
30
31 simple_alloc_init(_end, avail_ram, 32, 64);
32 ebony_init((u8 *)OPENBIOS_MAC_BASE,
33 (u8 *)(OPENBIOS_MAC_BASE + OPENBIOS_MAC_OFFSET));
34}
diff --git a/arch/powerpc/boot/wrapper b/arch/powerpc/boot/wrapper
index 5cedd901201f..2ed8b8b3f0ec 100755
--- a/arch/powerpc/boot/wrapper
+++ b/arch/powerpc/boot/wrapper
@@ -163,20 +163,19 @@ fi
163 163
164vmz="$vmz$gzip" 164vmz="$vmz$gzip"
165 165
166case "$platform" in 166# Extract kernel version information, some platforms want to include
167uboot|cuboot*) 167# it in the image header
168 version=`${CROSS}strings "$kernel" | grep '^Linux version [-0-9.]' | \ 168version=`${CROSS}strings "$kernel" | grep '^Linux version [-0-9.]' | \
169 cut -d' ' -f3` 169 cut -d' ' -f3`
170 if [ -n "$version" ]; then 170if [ -n "$version" ]; then
171 version="-n Linux-$version" 171 uboot_version="-n Linux-$version"
172 fi 172fi
173esac
174 173
175case "$platform" in 174case "$platform" in
176uboot) 175uboot)
177 rm -f "$ofile" 176 rm -f "$ofile"
178 mkimage -A ppc -O linux -T kernel -C gzip -a 00000000 -e 00000000 \ 177 mkimage -A ppc -O linux -T kernel -C gzip -a 00000000 -e 00000000 \
179 $version -d "$vmz" "$ofile" 178 $uboot_version -d "$vmz" "$ofile"
180 if [ -z "$cacheit" ]; then 179 if [ -z "$cacheit" ]; then
181 rm -f "$vmz" 180 rm -f "$vmz"
182 fi 181 fi
@@ -212,25 +211,32 @@ if [ "$platform" != "miboot" ]; then
212 rm $tmp 211 rm $tmp
213fi 212fi
214 213
214# Some platforms need the zImage's entry point and base address
215base=0x`${CROSS}nm "$ofile" | grep ' _start$' | cut -d' ' -f1`
216entry=`${CROSS}objdump -f "$ofile" | grep '^start address ' | cut -d' ' -f3`
217
215# post-processing needed for some platforms 218# post-processing needed for some platforms
216case "$platform" in 219case "$platform" in
217pseries|chrp) 220pseries|chrp)
218 $object/addnote "$ofile" 221 $object/addnote "$ofile"
219 ;; 222 ;;
220pmaccoff) 223pmaccoff)
221 entry=`objdump -f "$ofile" | grep '^start address ' | \
222 cut -d' ' -f3`
223 ${CROSS}objcopy -O aixcoff-rs6000 --set-start "$entry" "$ofile" 224 ${CROSS}objcopy -O aixcoff-rs6000 --set-start "$entry" "$ofile"
224 $object/hack-coff "$ofile" 225 $object/hack-coff "$ofile"
225 ;; 226 ;;
226cuboot*) 227cuboot*)
227 base=`${CROSS}nm "$ofile" | grep ' _start$' | cut -d' ' -f1`
228 entry=`${CROSS}objdump -f "$ofile" | grep '^start address ' | \
229 cut -d' ' -f3`
230 mv "$ofile" "$ofile".elf 228 mv "$ofile" "$ofile".elf
231 ${CROSS}objcopy -O binary "$ofile".elf "$ofile".bin 229 ${CROSS}objcopy -O binary "$ofile".elf "$ofile".bin
232 gzip -f -9 "$ofile".bin 230 gzip -f -9 "$ofile".bin
233 mkimage -A ppc -O linux -T kernel -C gzip -a "$base" -e "$entry" \ 231 mkimage -A ppc -O linux -T kernel -C gzip -a "$base" -e "$entry" \
234 $version -d "$ofile".bin.gz "$ofile" 232 $uboot_version -d "$ofile".bin.gz "$ofile"
233 ;;
234treeboot*)
235 mv "$ofile" "$ofile.elf"
236 $object/mktree "$ofile.elf" "$ofile" "$base" "$entry"
237 if [ -z "$cacheit" ]; then
238 rm -f "$ofile.elf"
239 fi
240 exit 0
235 ;; 241 ;;
236esac 242esac
diff --git a/arch/powerpc/configs/ebony_defconfig b/arch/powerpc/configs/ebony_defconfig
new file mode 100644
index 000000000000..c3b96ef3c2d1
--- /dev/null
+++ b/arch/powerpc/configs/ebony_defconfig
@@ -0,0 +1,905 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.21
4# Fri May 4 13:47:08 2007
5#
6# CONFIG_PPC64 is not set
7CONFIG_PPC32=y
8CONFIG_PPC_MERGE=y
9CONFIG_MMU=y
10CONFIG_GENERIC_HARDIRQS=y
11CONFIG_IRQ_PER_CPU=y
12CONFIG_RWSEM_XCHGADD_ALGORITHM=y
13CONFIG_ARCH_HAS_ILOG2_U32=y
14CONFIG_GENERIC_HWEIGHT=y
15CONFIG_GENERIC_CALIBRATE_DELAY=y
16CONFIG_GENERIC_FIND_NEXT_BIT=y
17CONFIG_PPC=y
18CONFIG_EARLY_PRINTK=y
19CONFIG_GENERIC_NVRAM=y
20CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
21CONFIG_ARCH_MAY_HAVE_PC_FDC=y
22CONFIG_PPC_OF=y
23# CONFIG_PPC_UDBG_16550 is not set
24# CONFIG_GENERIC_TBSYNC is not set
25CONFIG_AUDIT_ARCH=y
26CONFIG_GENERIC_BUG=y
27# CONFIG_DEFAULT_UIMAGE is not set
28
29#
30# Processor support
31#
32# CONFIG_CLASSIC32 is not set
33# CONFIG_PPC_82xx is not set
34# CONFIG_PPC_83xx is not set
35# CONFIG_PPC_85xx is not set
36# CONFIG_PPC_86xx is not set
37# CONFIG_PPC_8xx is not set
38# CONFIG_40x is not set
39CONFIG_44x=y
40# CONFIG_E200 is not set
41CONFIG_PPC_DCR_NATIVE=y
42# CONFIG_PPC_DCR_MMIO is not set
43CONFIG_PPC_DCR=y
44CONFIG_4xx=y
45CONFIG_BOOKE=y
46CONFIG_PTE_64BIT=y
47CONFIG_PHYS_64BIT=y
48CONFIG_NOT_COHERENT_CACHE=y
49CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
50
51#
52# Code maturity level options
53#
54CONFIG_EXPERIMENTAL=y
55CONFIG_BROKEN_ON_SMP=y
56CONFIG_INIT_ENV_ARG_LIMIT=32
57
58#
59# General setup
60#
61CONFIG_LOCALVERSION=""
62CONFIG_LOCALVERSION_AUTO=y
63CONFIG_SWAP=y
64CONFIG_SYSVIPC=y
65# CONFIG_IPC_NS is not set
66CONFIG_SYSVIPC_SYSCTL=y
67CONFIG_POSIX_MQUEUE=y
68# CONFIG_BSD_PROCESS_ACCT is not set
69# CONFIG_TASKSTATS is not set
70# CONFIG_UTS_NS is not set
71# CONFIG_AUDIT is not set
72# CONFIG_IKCONFIG is not set
73CONFIG_SYSFS_DEPRECATED=y
74# CONFIG_RELAY is not set
75CONFIG_BLK_DEV_INITRD=y
76CONFIG_INITRAMFS_SOURCE=""
77# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
78CONFIG_SYSCTL=y
79CONFIG_EMBEDDED=y
80CONFIG_SYSCTL_SYSCALL=y
81CONFIG_KALLSYMS=y
82CONFIG_KALLSYMS_ALL=y
83CONFIG_KALLSYMS_EXTRA_PASS=y
84CONFIG_HOTPLUG=y
85CONFIG_PRINTK=y
86CONFIG_BUG=y
87CONFIG_ELF_CORE=y
88CONFIG_BASE_FULL=y
89CONFIG_FUTEX=y
90CONFIG_EPOLL=y
91CONFIG_SHMEM=y
92CONFIG_SLAB=y
93CONFIG_VM_EVENT_COUNTERS=y
94CONFIG_RT_MUTEXES=y
95# CONFIG_TINY_SHMEM is not set
96CONFIG_BASE_SMALL=0
97# CONFIG_SLOB is not set
98
99#
100# Loadable module support
101#
102CONFIG_MODULES=y
103CONFIG_MODULE_UNLOAD=y
104# CONFIG_MODULE_FORCE_UNLOAD is not set
105# CONFIG_MODVERSIONS is not set
106# CONFIG_MODULE_SRCVERSION_ALL is not set
107CONFIG_KMOD=y
108
109#
110# Block layer
111#
112CONFIG_BLOCK=y
113CONFIG_LBD=y
114# CONFIG_BLK_DEV_IO_TRACE is not set
115# CONFIG_LSF is not set
116
117#
118# IO Schedulers
119#
120CONFIG_IOSCHED_NOOP=y
121CONFIG_IOSCHED_AS=y
122CONFIG_IOSCHED_DEADLINE=y
123CONFIG_IOSCHED_CFQ=y
124CONFIG_DEFAULT_AS=y
125# CONFIG_DEFAULT_DEADLINE is not set
126# CONFIG_DEFAULT_CFQ is not set
127# CONFIG_DEFAULT_NOOP is not set
128CONFIG_DEFAULT_IOSCHED="anticipatory"
129
130#
131# Platform support
132#
133# CONFIG_PPC_MPC52xx is not set
134# CONFIG_PPC_MPC5200 is not set
135# CONFIG_PPC_CELL is not set
136# CONFIG_PPC_CELL_NATIVE is not set
137# CONFIG_PQ2ADS is not set
138CONFIG_EBONY=y
139CONFIG_440GP=y
140# CONFIG_MPIC is not set
141# CONFIG_MPIC_WEIRD is not set
142# CONFIG_PPC_I8259 is not set
143# CONFIG_PPC_RTAS is not set
144# CONFIG_MMIO_NVRAM is not set
145# CONFIG_PPC_MPC106 is not set
146# CONFIG_PPC_970_NAP is not set
147# CONFIG_PPC_INDIRECT_IO is not set
148# CONFIG_GENERIC_IOMAP is not set
149# CONFIG_CPU_FREQ is not set
150# CONFIG_CPM2 is not set
151
152#
153# Kernel options
154#
155# CONFIG_HIGHMEM is not set
156# CONFIG_HZ_100 is not set
157CONFIG_HZ_250=y
158# CONFIG_HZ_300 is not set
159# CONFIG_HZ_1000 is not set
160CONFIG_HZ=250
161CONFIG_PREEMPT_NONE=y
162# CONFIG_PREEMPT_VOLUNTARY is not set
163# CONFIG_PREEMPT is not set
164CONFIG_BINFMT_ELF=y
165# CONFIG_BINFMT_MISC is not set
166CONFIG_MATH_EMULATION=y
167CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
168CONFIG_ARCH_FLATMEM_ENABLE=y
169CONFIG_ARCH_POPULATES_NODE_MAP=y
170CONFIG_SELECT_MEMORY_MODEL=y
171CONFIG_FLATMEM_MANUAL=y
172# CONFIG_DISCONTIGMEM_MANUAL is not set
173# CONFIG_SPARSEMEM_MANUAL is not set
174CONFIG_FLATMEM=y
175CONFIG_FLAT_NODE_MEM_MAP=y
176# CONFIG_SPARSEMEM_STATIC is not set
177CONFIG_SPLIT_PTLOCK_CPUS=4
178CONFIG_RESOURCES_64BIT=y
179CONFIG_ZONE_DMA_FLAG=1
180CONFIG_PROC_DEVICETREE=y
181# CONFIG_CMDLINE_BOOL is not set
182CONFIG_SECCOMP=y
183CONFIG_WANT_DEVICE_TREE=y
184CONFIG_DEVICE_TREE="ebony.dts"
185CONFIG_ISA_DMA_API=y
186
187#
188# Bus options
189#
190CONFIG_ZONE_DMA=y
191CONFIG_PPC_INDIRECT_PCI=y
192# CONFIG_PPC_INDIRECT_PCI_BE is not set
193CONFIG_PCI=y
194CONFIG_PCI_DOMAINS=y
195# CONFIG_PCIEPORTBUS is not set
196# CONFIG_PCI_DEBUG is not set
197
198#
199# PCCARD (PCMCIA/CardBus) support
200#
201# CONFIG_PCCARD is not set
202
203#
204# PCI Hotplug Support
205#
206# CONFIG_HOTPLUG_PCI is not set
207
208#
209# Advanced setup
210#
211# CONFIG_ADVANCED_OPTIONS is not set
212
213#
214# Default settings for advanced configuration options are used
215#
216CONFIG_HIGHMEM_START=0xfe000000
217CONFIG_LOWMEM_SIZE=0x30000000
218CONFIG_KERNEL_START=0xc0000000
219CONFIG_TASK_SIZE=0x80000000
220CONFIG_CONSISTENT_START=0xff100000
221CONFIG_CONSISTENT_SIZE=0x00200000
222CONFIG_BOOT_LOAD=0x01000000
223
224#
225# Networking
226#
227CONFIG_NET=y
228
229#
230# Networking options
231#
232CONFIG_PACKET=y
233# CONFIG_PACKET_MMAP is not set
234CONFIG_UNIX=y
235# CONFIG_NET_KEY is not set
236CONFIG_INET=y
237# CONFIG_IP_MULTICAST is not set
238# CONFIG_IP_ADVANCED_ROUTER is not set
239CONFIG_IP_FIB_HASH=y
240CONFIG_IP_PNP=y
241CONFIG_IP_PNP_DHCP=y
242CONFIG_IP_PNP_BOOTP=y
243# CONFIG_IP_PNP_RARP is not set
244# CONFIG_NET_IPIP is not set
245# CONFIG_NET_IPGRE is not set
246# CONFIG_ARPD is not set
247# CONFIG_SYN_COOKIES is not set
248# CONFIG_INET_AH is not set
249# CONFIG_INET_ESP is not set
250# CONFIG_INET_IPCOMP is not set
251# CONFIG_INET_XFRM_TUNNEL is not set
252# CONFIG_INET_TUNNEL is not set
253# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
254# CONFIG_INET_XFRM_MODE_TUNNEL is not set
255# CONFIG_INET_XFRM_MODE_BEET is not set
256CONFIG_INET_DIAG=y
257CONFIG_INET_TCP_DIAG=y
258# CONFIG_TCP_CONG_ADVANCED is not set
259CONFIG_TCP_CONG_CUBIC=y
260CONFIG_DEFAULT_TCP_CONG="cubic"
261# CONFIG_TCP_MD5SIG is not set
262# CONFIG_IPV6 is not set
263# CONFIG_INET6_XFRM_TUNNEL is not set
264# CONFIG_INET6_TUNNEL is not set
265# CONFIG_NETWORK_SECMARK is not set
266# CONFIG_NETFILTER is not set
267
268#
269# DCCP Configuration (EXPERIMENTAL)
270#
271# CONFIG_IP_DCCP is not set
272
273#
274# SCTP Configuration (EXPERIMENTAL)
275#
276# CONFIG_IP_SCTP is not set
277
278#
279# TIPC Configuration (EXPERIMENTAL)
280#
281# CONFIG_TIPC is not set
282# CONFIG_ATM is not set
283# CONFIG_BRIDGE is not set
284# CONFIG_VLAN_8021Q is not set
285# CONFIG_DECNET is not set
286# CONFIG_LLC2 is not set
287# CONFIG_IPX is not set
288# CONFIG_ATALK is not set
289# CONFIG_X25 is not set
290# CONFIG_LAPB is not set
291# CONFIG_ECONET is not set
292# CONFIG_WAN_ROUTER is not set
293
294#
295# QoS and/or fair queueing
296#
297# CONFIG_NET_SCHED is not set
298
299#
300# Network testing
301#
302# CONFIG_NET_PKTGEN is not set
303# CONFIG_HAMRADIO is not set
304# CONFIG_IRDA is not set
305# CONFIG_BT is not set
306# CONFIG_AF_RXRPC is not set
307
308#
309# Wireless
310#
311# CONFIG_CFG80211 is not set
312# CONFIG_WIRELESS_EXT is not set
313# CONFIG_IEEE80211 is not set
314
315#
316# Device Drivers
317#
318
319#
320# Generic Driver Options
321#
322CONFIG_STANDALONE=y
323CONFIG_PREVENT_FIRMWARE_BUILD=y
324CONFIG_FW_LOADER=y
325# CONFIG_DEBUG_DRIVER is not set
326# CONFIG_DEBUG_DEVRES is not set
327# CONFIG_SYS_HYPERVISOR is not set
328
329#
330# Connector - unified userspace <-> kernelspace linker
331#
332CONFIG_CONNECTOR=y
333CONFIG_PROC_EVENTS=y
334# CONFIG_MTD is not set
335
336#
337# Parallel port support
338#
339# CONFIG_PARPORT is not set
340
341#
342# Plug and Play support
343#
344# CONFIG_PNPACPI is not set
345
346#
347# Block devices
348#
349# CONFIG_BLK_DEV_FD is not set
350# CONFIG_BLK_CPQ_DA is not set
351# CONFIG_BLK_CPQ_CISS_DA is not set
352# CONFIG_BLK_DEV_DAC960 is not set
353# CONFIG_BLK_DEV_UMEM is not set
354# CONFIG_BLK_DEV_COW_COMMON is not set
355# CONFIG_BLK_DEV_LOOP is not set
356# CONFIG_BLK_DEV_NBD is not set
357# CONFIG_BLK_DEV_SX8 is not set
358CONFIG_BLK_DEV_RAM=y
359CONFIG_BLK_DEV_RAM_COUNT=16
360CONFIG_BLK_DEV_RAM_SIZE=35000
361CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
362# CONFIG_CDROM_PKTCDVD is not set
363# CONFIG_ATA_OVER_ETH is not set
364
365#
366# Misc devices
367#
368# CONFIG_SGI_IOC4 is not set
369# CONFIG_TIFM_CORE is not set
370
371#
372# ATA/ATAPI/MFM/RLL support
373#
374# CONFIG_IDE is not set
375
376#
377# SCSI device support
378#
379# CONFIG_RAID_ATTRS is not set
380# CONFIG_SCSI is not set
381# CONFIG_SCSI_NETLINK is not set
382
383#
384# Serial ATA (prod) and Parallel ATA (experimental) drivers
385#
386# CONFIG_ATA is not set
387
388#
389# Multi-device support (RAID and LVM)
390#
391# CONFIG_MD is not set
392
393#
394# Fusion MPT device support
395#
396# CONFIG_FUSION is not set
397
398#
399# IEEE 1394 (FireWire) support
400#
401# CONFIG_IEEE1394 is not set
402
403#
404# I2O device support
405#
406# CONFIG_I2O is not set
407# CONFIG_MACINTOSH_DRIVERS is not set
408
409#
410# Network device support
411#
412CONFIG_NETDEVICES=y
413# CONFIG_DUMMY is not set
414# CONFIG_BONDING is not set
415# CONFIG_EQUALIZER is not set
416# CONFIG_TUN is not set
417
418#
419# ARCnet devices
420#
421# CONFIG_ARCNET is not set
422
423#
424# PHY device support
425#
426
427#
428# Ethernet (10 or 100Mbit)
429#
430# CONFIG_NET_ETHERNET is not set
431CONFIG_IBM_NEW_EMAC=y
432CONFIG_IBM_NEW_EMAC_RXB=128
433CONFIG_IBM_NEW_EMAC_TXB=64
434CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
435CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
436CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
437# CONFIG_IBM_NEW_EMAC_DEBUG is not set
438CONFIG_IBM_NEW_EMAC_ZMII=y
439# CONFIG_IBM_NEW_EMAC_RGMII is not set
440# CONFIG_IBM_NEW_EMAC_TAH is not set
441# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
442
443#
444# Ethernet (1000 Mbit)
445#
446# CONFIG_ACENIC is not set
447# CONFIG_DL2K is not set
448# CONFIG_E1000 is not set
449# CONFIG_NS83820 is not set
450# CONFIG_HAMACHI is not set
451# CONFIG_YELLOWFIN is not set
452# CONFIG_R8169 is not set
453# CONFIG_SIS190 is not set
454# CONFIG_SKGE is not set
455# CONFIG_SKY2 is not set
456# CONFIG_SK98LIN is not set
457# CONFIG_TIGON3 is not set
458# CONFIG_BNX2 is not set
459# CONFIG_QLA3XXX is not set
460# CONFIG_ATL1 is not set
461
462#
463# Ethernet (10000 Mbit)
464#
465# CONFIG_CHELSIO_T1 is not set
466# CONFIG_CHELSIO_T3 is not set
467# CONFIG_IXGB is not set
468# CONFIG_S2IO is not set
469# CONFIG_MYRI10GE is not set
470# CONFIG_NETXEN_NIC is not set
471
472#
473# Token Ring devices
474#
475# CONFIG_TR is not set
476
477#
478# Wireless LAN
479#
480# CONFIG_WLAN_PRE80211 is not set
481# CONFIG_WLAN_80211 is not set
482
483#
484# Wan interfaces
485#
486# CONFIG_WAN is not set
487# CONFIG_FDDI is not set
488# CONFIG_HIPPI is not set
489# CONFIG_PPP is not set
490# CONFIG_SLIP is not set
491# CONFIG_SHAPER is not set
492# CONFIG_NETCONSOLE is not set
493# CONFIG_NETPOLL is not set
494# CONFIG_NET_POLL_CONTROLLER is not set
495
496#
497# ISDN subsystem
498#
499# CONFIG_ISDN is not set
500
501#
502# Telephony Support
503#
504# CONFIG_PHONE is not set
505
506#
507# Input device support
508#
509# CONFIG_INPUT is not set
510
511#
512# Hardware I/O ports
513#
514# CONFIG_SERIO is not set
515# CONFIG_GAMEPORT is not set
516
517#
518# Character devices
519#
520# CONFIG_VT is not set
521# CONFIG_SERIAL_NONSTANDARD is not set
522
523#
524# Serial drivers
525#
526CONFIG_SERIAL_8250=y
527CONFIG_SERIAL_8250_CONSOLE=y
528# CONFIG_SERIAL_8250_PCI is not set
529CONFIG_SERIAL_8250_NR_UARTS=4
530CONFIG_SERIAL_8250_RUNTIME_UARTS=4
531CONFIG_SERIAL_8250_EXTENDED=y
532# CONFIG_SERIAL_8250_MANY_PORTS is not set
533CONFIG_SERIAL_8250_SHARE_IRQ=y
534# CONFIG_SERIAL_8250_DETECT_IRQ is not set
535# CONFIG_SERIAL_8250_RSA is not set
536
537#
538# Non-8250 serial port support
539#
540# CONFIG_SERIAL_UARTLITE is not set
541CONFIG_SERIAL_CORE=y
542CONFIG_SERIAL_CORE_CONSOLE=y
543# CONFIG_SERIAL_JSM is not set
544CONFIG_SERIAL_OF_PLATFORM=y
545CONFIG_UNIX98_PTYS=y
546CONFIG_LEGACY_PTYS=y
547CONFIG_LEGACY_PTY_COUNT=256
548
549#
550# IPMI
551#
552# CONFIG_IPMI_HANDLER is not set
553
554#
555# Watchdog Cards
556#
557# CONFIG_WATCHDOG is not set
558# CONFIG_HW_RANDOM is not set
559# CONFIG_NVRAM is not set
560# CONFIG_GEN_RTC is not set
561# CONFIG_DTLK is not set
562# CONFIG_R3964 is not set
563# CONFIG_APPLICOM is not set
564# CONFIG_AGP is not set
565# CONFIG_DRM is not set
566# CONFIG_RAW_DRIVER is not set
567
568#
569# TPM devices
570#
571# CONFIG_TCG_TPM is not set
572
573#
574# I2C support
575#
576# CONFIG_I2C is not set
577
578#
579# SPI support
580#
581# CONFIG_SPI is not set
582# CONFIG_SPI_MASTER is not set
583
584#
585# Dallas's 1-wire bus
586#
587# CONFIG_W1 is not set
588
589#
590# Hardware Monitoring support
591#
592# CONFIG_HWMON is not set
593# CONFIG_HWMON_VID is not set
594
595#
596# Multifunction device drivers
597#
598# CONFIG_MFD_SM501 is not set
599
600#
601# Multimedia devices
602#
603# CONFIG_VIDEO_DEV is not set
604
605#
606# Digital Video Broadcasting Devices
607#
608# CONFIG_DVB is not set
609
610#
611# Graphics support
612#
613# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
614# CONFIG_FB is not set
615# CONFIG_FB_IBM_GXT4500 is not set
616
617#
618# Sound
619#
620# CONFIG_SOUND is not set
621
622#
623# USB support
624#
625CONFIG_USB_ARCH_HAS_HCD=y
626CONFIG_USB_ARCH_HAS_OHCI=y
627CONFIG_USB_ARCH_HAS_EHCI=y
628# CONFIG_USB is not set
629
630#
631# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
632#
633
634#
635# USB Gadget Support
636#
637# CONFIG_USB_GADGET is not set
638
639#
640# MMC/SD Card support
641#
642# CONFIG_MMC is not set
643
644#
645# LED devices
646#
647# CONFIG_NEW_LEDS is not set
648
649#
650# LED drivers
651#
652
653#
654# LED Triggers
655#
656
657#
658# InfiniBand support
659#
660# CONFIG_INFINIBAND is not set
661
662#
663# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
664#
665
666#
667# Real Time Clock
668#
669# CONFIG_RTC_CLASS is not set
670
671#
672# DMA Engine support
673#
674# CONFIG_DMA_ENGINE is not set
675
676#
677# DMA Clients
678#
679
680#
681# DMA Devices
682#
683
684#
685# Auxiliary Display support
686#
687
688#
689# Virtualization
690#
691
692#
693# File systems
694#
695CONFIG_EXT2_FS=y
696# CONFIG_EXT2_FS_XATTR is not set
697# CONFIG_EXT2_FS_XIP is not set
698# CONFIG_EXT3_FS is not set
699# CONFIG_EXT4DEV_FS is not set
700# CONFIG_REISERFS_FS is not set
701# CONFIG_JFS_FS is not set
702# CONFIG_FS_POSIX_ACL is not set
703# CONFIG_XFS_FS is not set
704# CONFIG_GFS2_FS is not set
705# CONFIG_OCFS2_FS is not set
706# CONFIG_MINIX_FS is not set
707# CONFIG_ROMFS_FS is not set
708CONFIG_INOTIFY=y
709CONFIG_INOTIFY_USER=y
710# CONFIG_QUOTA is not set
711CONFIG_DNOTIFY=y
712# CONFIG_AUTOFS_FS is not set
713# CONFIG_AUTOFS4_FS is not set
714# CONFIG_FUSE_FS is not set
715
716#
717# CD-ROM/DVD Filesystems
718#
719# CONFIG_ISO9660_FS is not set
720# CONFIG_UDF_FS is not set
721
722#
723# DOS/FAT/NT Filesystems
724#
725# CONFIG_MSDOS_FS is not set
726# CONFIG_VFAT_FS is not set
727# CONFIG_NTFS_FS is not set
728
729#
730# Pseudo filesystems
731#
732CONFIG_PROC_FS=y
733CONFIG_PROC_KCORE=y
734CONFIG_PROC_SYSCTL=y
735CONFIG_SYSFS=y
736CONFIG_TMPFS=y
737# CONFIG_TMPFS_POSIX_ACL is not set
738# CONFIG_HUGETLB_PAGE is not set
739CONFIG_RAMFS=y
740# CONFIG_CONFIGFS_FS is not set
741
742#
743# Miscellaneous filesystems
744#
745# CONFIG_ADFS_FS is not set
746# CONFIG_AFFS_FS is not set
747# CONFIG_HFS_FS is not set
748# CONFIG_HFSPLUS_FS is not set
749# CONFIG_BEFS_FS is not set
750# CONFIG_BFS_FS is not set
751# CONFIG_EFS_FS is not set
752CONFIG_CRAMFS=y
753# CONFIG_VXFS_FS is not set
754# CONFIG_HPFS_FS is not set
755# CONFIG_QNX4FS_FS is not set
756# CONFIG_SYSV_FS is not set
757# CONFIG_UFS_FS is not set
758
759#
760# Network File Systems
761#
762CONFIG_NFS_FS=y
763CONFIG_NFS_V3=y
764# CONFIG_NFS_V3_ACL is not set
765# CONFIG_NFS_V4 is not set
766# CONFIG_NFS_DIRECTIO is not set
767# CONFIG_NFSD is not set
768CONFIG_ROOT_NFS=y
769CONFIG_LOCKD=y
770CONFIG_LOCKD_V4=y
771CONFIG_NFS_COMMON=y
772CONFIG_SUNRPC=y
773# CONFIG_RPCSEC_GSS_KRB5 is not set
774# CONFIG_RPCSEC_GSS_SPKM3 is not set
775# CONFIG_SMB_FS is not set
776# CONFIG_CIFS is not set
777# CONFIG_NCP_FS is not set
778# CONFIG_CODA_FS is not set
779# CONFIG_AFS_FS is not set
780# CONFIG_9P_FS is not set
781
782#
783# Partition Types
784#
785# CONFIG_PARTITION_ADVANCED is not set
786CONFIG_MSDOS_PARTITION=y
787
788#
789# Native Language Support
790#
791# CONFIG_NLS is not set
792
793#
794# Distributed Lock Manager
795#
796# CONFIG_DLM is not set
797# CONFIG_UCC_SLOW is not set
798# CONFIG_UCC_FAST is not set
799
800#
801# Library routines
802#
803CONFIG_BITREVERSE=y
804# CONFIG_CRC_CCITT is not set
805# CONFIG_CRC16 is not set
806CONFIG_CRC32=y
807# CONFIG_LIBCRC32C is not set
808CONFIG_ZLIB_INFLATE=y
809CONFIG_PLIST=y
810CONFIG_HAS_IOMEM=y
811CONFIG_HAS_IOPORT=y
812
813#
814# Instrumentation Support
815#
816# CONFIG_PROFILING is not set
817
818#
819# Kernel hacking
820#
821# CONFIG_PRINTK_TIME is not set
822CONFIG_ENABLE_MUST_CHECK=y
823CONFIG_MAGIC_SYSRQ=y
824# CONFIG_UNUSED_SYMBOLS is not set
825# CONFIG_DEBUG_FS is not set
826# CONFIG_HEADERS_CHECK is not set
827CONFIG_DEBUG_KERNEL=y
828# CONFIG_DEBUG_SHIRQ is not set
829CONFIG_LOG_BUF_SHIFT=14
830CONFIG_DETECT_SOFTLOCKUP=y
831# CONFIG_SCHEDSTATS is not set
832# CONFIG_TIMER_STATS is not set
833# CONFIG_DEBUG_SLAB is not set
834# CONFIG_DEBUG_RT_MUTEXES is not set
835# CONFIG_RT_MUTEX_TESTER is not set
836# CONFIG_DEBUG_SPINLOCK is not set
837# CONFIG_DEBUG_MUTEXES is not set
838# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
839# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
840# CONFIG_DEBUG_KOBJECT is not set
841CONFIG_DEBUG_BUGVERBOSE=y
842# CONFIG_DEBUG_INFO is not set
843# CONFIG_DEBUG_VM is not set
844# CONFIG_DEBUG_LIST is not set
845CONFIG_FORCED_INLINING=y
846# CONFIG_RCU_TORTURE_TEST is not set
847# CONFIG_FAULT_INJECTION is not set
848# CONFIG_DEBUG_STACKOVERFLOW is not set
849# CONFIG_DEBUG_STACK_USAGE is not set
850# CONFIG_DEBUG_PAGEALLOC is not set
851# CONFIG_DEBUGGER is not set
852# CONFIG_BDI_SWITCH is not set
853# CONFIG_BOOTX_TEXT is not set
854# CONFIG_SERIAL_TEXT_DEBUG is not set
855# CONFIG_PPC_EARLY_DEBUG is not set
856
857#
858# Security options
859#
860# CONFIG_KEYS is not set
861# CONFIG_SECURITY is not set
862
863#
864# Cryptographic options
865#
866CONFIG_CRYPTO=y
867CONFIG_CRYPTO_ALGAPI=y
868CONFIG_CRYPTO_BLKCIPHER=y
869CONFIG_CRYPTO_MANAGER=y
870# CONFIG_CRYPTO_HMAC is not set
871# CONFIG_CRYPTO_XCBC is not set
872# CONFIG_CRYPTO_NULL is not set
873# CONFIG_CRYPTO_MD4 is not set
874CONFIG_CRYPTO_MD5=y
875# CONFIG_CRYPTO_SHA1 is not set
876# CONFIG_CRYPTO_SHA256 is not set
877# CONFIG_CRYPTO_SHA512 is not set
878# CONFIG_CRYPTO_WP512 is not set
879# CONFIG_CRYPTO_TGR192 is not set
880# CONFIG_CRYPTO_GF128MUL is not set
881CONFIG_CRYPTO_ECB=y
882CONFIG_CRYPTO_CBC=y
883CONFIG_CRYPTO_PCBC=y
884# CONFIG_CRYPTO_LRW is not set
885CONFIG_CRYPTO_DES=y
886# CONFIG_CRYPTO_FCRYPT is not set
887# CONFIG_CRYPTO_BLOWFISH is not set
888# CONFIG_CRYPTO_TWOFISH is not set
889# CONFIG_CRYPTO_SERPENT is not set
890# CONFIG_CRYPTO_AES is not set
891# CONFIG_CRYPTO_CAST5 is not set
892# CONFIG_CRYPTO_CAST6 is not set
893# CONFIG_CRYPTO_TEA is not set
894# CONFIG_CRYPTO_ARC4 is not set
895# CONFIG_CRYPTO_KHAZAD is not set
896# CONFIG_CRYPTO_ANUBIS is not set
897# CONFIG_CRYPTO_DEFLATE is not set
898# CONFIG_CRYPTO_MICHAEL_MIC is not set
899# CONFIG_CRYPTO_CRC32C is not set
900# CONFIG_CRYPTO_CAMELLIA is not set
901# CONFIG_CRYPTO_TEST is not set
902
903#
904# Hardware crypto devices
905#
diff --git a/arch/powerpc/configs/holly_defconfig b/arch/powerpc/configs/holly_defconfig
new file mode 100644
index 000000000000..be633b9b57c3
--- /dev/null
+++ b/arch/powerpc/configs/holly_defconfig
@@ -0,0 +1,1070 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.21
4# Sat May 5 11:02:35 2007
5#
6# CONFIG_PPC64 is not set
7CONFIG_PPC32=y
8CONFIG_PPC_MERGE=y
9CONFIG_MMU=y
10CONFIG_GENERIC_HARDIRQS=y
11CONFIG_IRQ_PER_CPU=y
12CONFIG_RWSEM_XCHGADD_ALGORITHM=y
13CONFIG_ARCH_HAS_ILOG2_U32=y
14CONFIG_GENERIC_HWEIGHT=y
15CONFIG_GENERIC_CALIBRATE_DELAY=y
16CONFIG_GENERIC_FIND_NEXT_BIT=y
17CONFIG_PPC=y
18CONFIG_EARLY_PRINTK=y
19CONFIG_GENERIC_NVRAM=y
20CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
21CONFIG_ARCH_MAY_HAVE_PC_FDC=y
22CONFIG_PPC_OF=y
23CONFIG_PPC_UDBG_16550=y
24# CONFIG_GENERIC_TBSYNC is not set
25CONFIG_AUDIT_ARCH=y
26CONFIG_GENERIC_BUG=y
27# CONFIG_DEFAULT_UIMAGE is not set
28
29#
30# Processor support
31#
32CONFIG_CLASSIC32=y
33# CONFIG_PPC_82xx is not set
34# CONFIG_PPC_83xx is not set
35# CONFIG_PPC_85xx is not set
36# CONFIG_PPC_86xx is not set
37# CONFIG_PPC_8xx is not set
38# CONFIG_40x is not set
39# CONFIG_44x is not set
40# CONFIG_E200 is not set
41CONFIG_6xx=y
42CONFIG_PPC_FPU=y
43# CONFIG_PPC_DCR_NATIVE is not set
44# CONFIG_PPC_DCR_MMIO is not set
45# CONFIG_ALTIVEC is not set
46CONFIG_PPC_STD_MMU=y
47CONFIG_PPC_STD_MMU_32=y
48# CONFIG_SMP is not set
49CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
50
51#
52# Code maturity level options
53#
54CONFIG_EXPERIMENTAL=y
55CONFIG_BROKEN_ON_SMP=y
56CONFIG_INIT_ENV_ARG_LIMIT=32
57
58#
59# General setup
60#
61CONFIG_LOCALVERSION=""
62CONFIG_LOCALVERSION_AUTO=y
63CONFIG_SWAP=y
64CONFIG_SYSVIPC=y
65# CONFIG_IPC_NS is not set
66CONFIG_SYSVIPC_SYSCTL=y
67# CONFIG_POSIX_MQUEUE is not set
68# CONFIG_BSD_PROCESS_ACCT is not set
69# CONFIG_TASKSTATS is not set
70# CONFIG_UTS_NS is not set
71# CONFIG_AUDIT is not set
72# CONFIG_IKCONFIG is not set
73CONFIG_SYSFS_DEPRECATED=y
74# CONFIG_RELAY is not set
75CONFIG_BLK_DEV_INITRD=y
76CONFIG_INITRAMFS_SOURCE=""
77# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
78CONFIG_SYSCTL=y
79CONFIG_EMBEDDED=y
80CONFIG_SYSCTL_SYSCALL=y
81CONFIG_KALLSYMS=y
82# CONFIG_KALLSYMS_ALL is not set
83# CONFIG_KALLSYMS_EXTRA_PASS is not set
84CONFIG_HOTPLUG=y
85CONFIG_PRINTK=y
86CONFIG_BUG=y
87CONFIG_ELF_CORE=y
88CONFIG_BASE_FULL=y
89CONFIG_FUTEX=y
90CONFIG_EPOLL=y
91CONFIG_SHMEM=y
92CONFIG_SLAB=y
93CONFIG_VM_EVENT_COUNTERS=y
94CONFIG_RT_MUTEXES=y
95# CONFIG_TINY_SHMEM is not set
96CONFIG_BASE_SMALL=0
97# CONFIG_SLOB is not set
98
99#
100# Loadable module support
101#
102CONFIG_MODULES=y
103# CONFIG_MODULE_UNLOAD is not set
104# CONFIG_MODVERSIONS is not set
105# CONFIG_MODULE_SRCVERSION_ALL is not set
106# CONFIG_KMOD is not set
107
108#
109# Block layer
110#
111CONFIG_BLOCK=y
112CONFIG_LBD=y
113# CONFIG_BLK_DEV_IO_TRACE is not set
114# CONFIG_LSF is not set
115
116#
117# IO Schedulers
118#
119CONFIG_IOSCHED_NOOP=y
120CONFIG_IOSCHED_AS=y
121CONFIG_IOSCHED_DEADLINE=y
122CONFIG_IOSCHED_CFQ=y
123CONFIG_DEFAULT_AS=y
124# CONFIG_DEFAULT_DEADLINE is not set
125# CONFIG_DEFAULT_CFQ is not set
126# CONFIG_DEFAULT_NOOP is not set
127CONFIG_DEFAULT_IOSCHED="anticipatory"
128
129#
130# Platform support
131#
132# CONFIG_PPC_MULTIPLATFORM is not set
133CONFIG_EMBEDDED6xx=y
134# CONFIG_APUS is not set
135# CONFIG_PPC_MPC52xx is not set
136# CONFIG_PPC_MPC5200 is not set
137# CONFIG_PPC_CELL is not set
138# CONFIG_PPC_CELL_NATIVE is not set
139# CONFIG_PQ2ADS is not set
140# CONFIG_LINKSTATION is not set
141# CONFIG_MPC7448HPC2 is not set
142CONFIG_PPC_HOLLY=y
143CONFIG_TSI108_BRIDGE=y
144CONFIG_MPIC=y
145CONFIG_MPIC_WEIRD=y
146# CONFIG_PPC_I8259 is not set
147# CONFIG_PPC_RTAS is not set
148# CONFIG_MMIO_NVRAM is not set
149# CONFIG_PPC_MPC106 is not set
150# CONFIG_PPC_970_NAP is not set
151# CONFIG_PPC_INDIRECT_IO is not set
152# CONFIG_GENERIC_IOMAP is not set
153# CONFIG_CPU_FREQ is not set
154# CONFIG_TAU is not set
155# CONFIG_CPM2 is not set
156
157#
158# Kernel options
159#
160# CONFIG_HIGHMEM is not set
161# CONFIG_HZ_100 is not set
162CONFIG_HZ_250=y
163# CONFIG_HZ_300 is not set
164# CONFIG_HZ_1000 is not set
165CONFIG_HZ=250
166CONFIG_PREEMPT_NONE=y
167# CONFIG_PREEMPT_VOLUNTARY is not set
168# CONFIG_PREEMPT is not set
169CONFIG_BINFMT_ELF=y
170CONFIG_BINFMT_MISC=y
171CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
172CONFIG_ARCH_FLATMEM_ENABLE=y
173CONFIG_ARCH_POPULATES_NODE_MAP=y
174CONFIG_SELECT_MEMORY_MODEL=y
175CONFIG_FLATMEM_MANUAL=y
176# CONFIG_DISCONTIGMEM_MANUAL is not set
177# CONFIG_SPARSEMEM_MANUAL is not set
178CONFIG_FLATMEM=y
179CONFIG_FLAT_NODE_MEM_MAP=y
180# CONFIG_SPARSEMEM_STATIC is not set
181CONFIG_SPLIT_PTLOCK_CPUS=4
182# CONFIG_RESOURCES_64BIT is not set
183CONFIG_ZONE_DMA_FLAG=1
184CONFIG_PROC_DEVICETREE=y
185# CONFIG_CMDLINE_BOOL is not set
186# CONFIG_PM is not set
187# CONFIG_SECCOMP is not set
188# CONFIG_WANT_DEVICE_TREE is not set
189CONFIG_ISA_DMA_API=y
190
191#
192# Bus options
193#
194CONFIG_ZONE_DMA=y
195CONFIG_GENERIC_ISA_DMA=y
196# CONFIG_PPC_INDIRECT_PCI is not set
197CONFIG_PCI=y
198CONFIG_PCI_DOMAINS=y
199# CONFIG_PCIEPORTBUS is not set
200# CONFIG_PCI_DEBUG is not set
201
202#
203# PCCARD (PCMCIA/CardBus) support
204#
205# CONFIG_PCCARD is not set
206
207#
208# PCI Hotplug Support
209#
210# CONFIG_HOTPLUG_PCI is not set
211
212#
213# Advanced setup
214#
215# CONFIG_ADVANCED_OPTIONS is not set
216
217#
218# Default settings for advanced configuration options are used
219#
220CONFIG_HIGHMEM_START=0xfe000000
221CONFIG_LOWMEM_SIZE=0x30000000
222CONFIG_KERNEL_START=0xc0000000
223CONFIG_TASK_SIZE=0x80000000
224CONFIG_BOOT_LOAD=0x00800000
225
226#
227# Networking
228#
229CONFIG_NET=y
230
231#
232# Networking options
233#
234CONFIG_PACKET=y
235# CONFIG_PACKET_MMAP is not set
236CONFIG_UNIX=y
237CONFIG_XFRM=y
238CONFIG_XFRM_USER=y
239# CONFIG_XFRM_SUB_POLICY is not set
240# CONFIG_XFRM_MIGRATE is not set
241# CONFIG_NET_KEY is not set
242CONFIG_INET=y
243CONFIG_IP_MULTICAST=y
244# CONFIG_IP_ADVANCED_ROUTER is not set
245CONFIG_IP_FIB_HASH=y
246CONFIG_IP_PNP=y
247CONFIG_IP_PNP_DHCP=y
248CONFIG_IP_PNP_BOOTP=y
249# CONFIG_IP_PNP_RARP is not set
250# CONFIG_NET_IPIP is not set
251# CONFIG_NET_IPGRE is not set
252# CONFIG_IP_MROUTE is not set
253# CONFIG_ARPD is not set
254CONFIG_SYN_COOKIES=y
255# CONFIG_INET_AH is not set
256# CONFIG_INET_ESP is not set
257# CONFIG_INET_IPCOMP is not set
258# CONFIG_INET_XFRM_TUNNEL is not set
259# CONFIG_INET_TUNNEL is not set
260CONFIG_INET_XFRM_MODE_TRANSPORT=y
261CONFIG_INET_XFRM_MODE_TUNNEL=y
262CONFIG_INET_XFRM_MODE_BEET=y
263CONFIG_INET_DIAG=y
264CONFIG_INET_TCP_DIAG=y
265# CONFIG_TCP_CONG_ADVANCED is not set
266CONFIG_TCP_CONG_CUBIC=y
267CONFIG_DEFAULT_TCP_CONG="cubic"
268# CONFIG_TCP_MD5SIG is not set
269# CONFIG_IPV6 is not set
270# CONFIG_INET6_XFRM_TUNNEL is not set
271# CONFIG_INET6_TUNNEL is not set
272# CONFIG_NETWORK_SECMARK is not set
273# CONFIG_NETFILTER is not set
274
275#
276# DCCP Configuration (EXPERIMENTAL)
277#
278# CONFIG_IP_DCCP is not set
279
280#
281# SCTP Configuration (EXPERIMENTAL)
282#
283# CONFIG_IP_SCTP is not set
284
285#
286# TIPC Configuration (EXPERIMENTAL)
287#
288# CONFIG_TIPC is not set
289# CONFIG_ATM is not set
290# CONFIG_BRIDGE is not set
291# CONFIG_VLAN_8021Q is not set
292# CONFIG_DECNET is not set
293# CONFIG_LLC2 is not set
294# CONFIG_IPX is not set
295# CONFIG_ATALK is not set
296# CONFIG_X25 is not set
297# CONFIG_LAPB is not set
298# CONFIG_ECONET is not set
299# CONFIG_WAN_ROUTER is not set
300
301#
302# QoS and/or fair queueing
303#
304# CONFIG_NET_SCHED is not set
305
306#
307# Network testing
308#
309# CONFIG_NET_PKTGEN is not set
310# CONFIG_HAMRADIO is not set
311# CONFIG_IRDA is not set
312# CONFIG_BT is not set
313# CONFIG_AF_RXRPC is not set
314
315#
316# Wireless
317#
318# CONFIG_CFG80211 is not set
319# CONFIG_WIRELESS_EXT is not set
320# CONFIG_IEEE80211 is not set
321
322#
323# Device Drivers
324#
325
326#
327# Generic Driver Options
328#
329CONFIG_STANDALONE=y
330CONFIG_PREVENT_FIRMWARE_BUILD=y
331# CONFIG_FW_LOADER is not set
332# CONFIG_DEBUG_DRIVER is not set
333# CONFIG_DEBUG_DEVRES is not set
334# CONFIG_SYS_HYPERVISOR is not set
335
336#
337# Connector - unified userspace <-> kernelspace linker
338#
339# CONFIG_CONNECTOR is not set
340# CONFIG_MTD is not set
341
342#
343# Parallel port support
344#
345# CONFIG_PARPORT is not set
346
347#
348# Plug and Play support
349#
350# CONFIG_PNPACPI is not set
351
352#
353# Block devices
354#
355# CONFIG_BLK_DEV_FD is not set
356# CONFIG_BLK_CPQ_DA is not set
357# CONFIG_BLK_CPQ_CISS_DA is not set
358# CONFIG_BLK_DEV_DAC960 is not set
359# CONFIG_BLK_DEV_UMEM is not set
360# CONFIG_BLK_DEV_COW_COMMON is not set
361CONFIG_BLK_DEV_LOOP=y
362# CONFIG_BLK_DEV_CRYPTOLOOP is not set
363# CONFIG_BLK_DEV_NBD is not set
364# CONFIG_BLK_DEV_SX8 is not set
365CONFIG_BLK_DEV_RAM=y
366CONFIG_BLK_DEV_RAM_COUNT=16
367CONFIG_BLK_DEV_RAM_SIZE=131072
368CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
369# CONFIG_CDROM_PKTCDVD is not set
370# CONFIG_ATA_OVER_ETH is not set
371
372#
373# Misc devices
374#
375# CONFIG_SGI_IOC4 is not set
376# CONFIG_TIFM_CORE is not set
377
378#
379# ATA/ATAPI/MFM/RLL support
380#
381# CONFIG_IDE is not set
382
383#
384# SCSI device support
385#
386# CONFIG_RAID_ATTRS is not set
387CONFIG_SCSI=y
388# CONFIG_SCSI_TGT is not set
389# CONFIG_SCSI_NETLINK is not set
390CONFIG_SCSI_PROC_FS=y
391
392#
393# SCSI support type (disk, tape, CD-ROM)
394#
395CONFIG_BLK_DEV_SD=y
396# CONFIG_CHR_DEV_ST is not set
397# CONFIG_CHR_DEV_OSST is not set
398# CONFIG_BLK_DEV_SR is not set
399# CONFIG_CHR_DEV_SG is not set
400# CONFIG_CHR_DEV_SCH is not set
401
402#
403# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
404#
405# CONFIG_SCSI_MULTI_LUN is not set
406# CONFIG_SCSI_CONSTANTS is not set
407# CONFIG_SCSI_LOGGING is not set
408# CONFIG_SCSI_SCAN_ASYNC is not set
409
410#
411# SCSI Transports
412#
413# CONFIG_SCSI_SPI_ATTRS is not set
414# CONFIG_SCSI_FC_ATTRS is not set
415# CONFIG_SCSI_ISCSI_ATTRS is not set
416# CONFIG_SCSI_SAS_ATTRS is not set
417# CONFIG_SCSI_SAS_LIBSAS is not set
418
419#
420# SCSI low-level drivers
421#
422# CONFIG_ISCSI_TCP is not set
423# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
424# CONFIG_SCSI_3W_9XXX is not set
425# CONFIG_SCSI_ACARD is not set
426# CONFIG_SCSI_AACRAID is not set
427# CONFIG_SCSI_AIC7XXX is not set
428# CONFIG_SCSI_AIC7XXX_OLD is not set
429# CONFIG_SCSI_AIC79XX is not set
430# CONFIG_SCSI_AIC94XX is not set
431# CONFIG_SCSI_DPT_I2O is not set
432# CONFIG_SCSI_ARCMSR is not set
433# CONFIG_MEGARAID_NEWGEN is not set
434# CONFIG_MEGARAID_LEGACY is not set
435# CONFIG_MEGARAID_SAS is not set
436# CONFIG_SCSI_HPTIOP is not set
437# CONFIG_SCSI_BUSLOGIC is not set
438# CONFIG_SCSI_DMX3191D is not set
439# CONFIG_SCSI_EATA is not set
440# CONFIG_SCSI_FUTURE_DOMAIN is not set
441# CONFIG_SCSI_GDTH is not set
442# CONFIG_SCSI_IPS is not set
443# CONFIG_SCSI_INITIO is not set
444# CONFIG_SCSI_INIA100 is not set
445# CONFIG_SCSI_STEX is not set
446# CONFIG_SCSI_SYM53C8XX_2 is not set
447# CONFIG_SCSI_IPR is not set
448# CONFIG_SCSI_QLOGIC_1280 is not set
449# CONFIG_SCSI_QLA_FC is not set
450# CONFIG_SCSI_QLA_ISCSI is not set
451# CONFIG_SCSI_LPFC is not set
452# CONFIG_SCSI_DC395x is not set
453# CONFIG_SCSI_DC390T is not set
454# CONFIG_SCSI_NSP32 is not set
455# CONFIG_SCSI_DEBUG is not set
456# CONFIG_SCSI_ESP_CORE is not set
457# CONFIG_SCSI_SRP is not set
458
459#
460# Serial ATA (prod) and Parallel ATA (experimental) drivers
461#
462CONFIG_ATA=y
463# CONFIG_ATA_NONSTANDARD is not set
464# CONFIG_SATA_AHCI is not set
465# CONFIG_SATA_SVW is not set
466# CONFIG_ATA_PIIX is not set
467# CONFIG_SATA_MV is not set
468# CONFIG_SATA_NV is not set
469# CONFIG_PDC_ADMA is not set
470# CONFIG_SATA_QSTOR is not set
471# CONFIG_SATA_PROMISE is not set
472# CONFIG_SATA_SX4 is not set
473# CONFIG_SATA_SIL is not set
474# CONFIG_SATA_SIL24 is not set
475# CONFIG_SATA_SIS is not set
476# CONFIG_SATA_ULI is not set
477# CONFIG_SATA_VIA is not set
478# CONFIG_SATA_VITESSE is not set
479# CONFIG_SATA_INIC162X is not set
480# CONFIG_PATA_ALI is not set
481# CONFIG_PATA_AMD is not set
482# CONFIG_PATA_ARTOP is not set
483# CONFIG_PATA_ATIIXP is not set
484# CONFIG_PATA_CMD640_PCI is not set
485# CONFIG_PATA_CMD64X is not set
486# CONFIG_PATA_CS5520 is not set
487# CONFIG_PATA_CS5530 is not set
488# CONFIG_PATA_CYPRESS is not set
489# CONFIG_PATA_EFAR is not set
490# CONFIG_ATA_GENERIC is not set
491# CONFIG_PATA_HPT366 is not set
492# CONFIG_PATA_HPT37X is not set
493# CONFIG_PATA_HPT3X2N is not set
494# CONFIG_PATA_HPT3X3 is not set
495# CONFIG_PATA_IT821X is not set
496# CONFIG_PATA_IT8213 is not set
497# CONFIG_PATA_JMICRON is not set
498# CONFIG_PATA_TRIFLEX is not set
499# CONFIG_PATA_MARVELL is not set
500# CONFIG_PATA_MPIIX is not set
501# CONFIG_PATA_OLDPIIX is not set
502# CONFIG_PATA_NETCELL is not set
503# CONFIG_PATA_NS87410 is not set
504# CONFIG_PATA_OPTI is not set
505# CONFIG_PATA_OPTIDMA is not set
506# CONFIG_PATA_PDC_OLD is not set
507# CONFIG_PATA_RADISYS is not set
508# CONFIG_PATA_RZ1000 is not set
509# CONFIG_PATA_SC1200 is not set
510# CONFIG_PATA_SERVERWORKS is not set
511# CONFIG_PATA_PDC2027X is not set
512# CONFIG_PATA_SIL680 is not set
513# CONFIG_PATA_SIS is not set
514# CONFIG_PATA_VIA is not set
515# CONFIG_PATA_WINBOND is not set
516# CONFIG_PATA_PLATFORM is not set
517
518#
519# Multi-device support (RAID and LVM)
520#
521# CONFIG_MD is not set
522
523#
524# Fusion MPT device support
525#
526# CONFIG_FUSION is not set
527# CONFIG_FUSION_SPI is not set
528# CONFIG_FUSION_FC is not set
529# CONFIG_FUSION_SAS is not set
530
531#
532# IEEE 1394 (FireWire) support
533#
534# CONFIG_IEEE1394 is not set
535
536#
537# I2O device support
538#
539# CONFIG_I2O is not set
540# CONFIG_MACINTOSH_DRIVERS is not set
541
542#
543# Network device support
544#
545CONFIG_NETDEVICES=y
546# CONFIG_DUMMY is not set
547# CONFIG_BONDING is not set
548# CONFIG_EQUALIZER is not set
549# CONFIG_TUN is not set
550
551#
552# ARCnet devices
553#
554# CONFIG_ARCNET is not set
555
556#
557# PHY device support
558#
559CONFIG_PHYLIB=y
560
561#
562# MII PHY device drivers
563#
564# CONFIG_MARVELL_PHY is not set
565# CONFIG_DAVICOM_PHY is not set
566# CONFIG_QSEMI_PHY is not set
567# CONFIG_LXT_PHY is not set
568# CONFIG_CICADA_PHY is not set
569# CONFIG_VITESSE_PHY is not set
570# CONFIG_SMSC_PHY is not set
571# CONFIG_BROADCOM_PHY is not set
572# CONFIG_FIXED_PHY is not set
573
574#
575# Ethernet (10 or 100Mbit)
576#
577CONFIG_NET_ETHERNET=y
578CONFIG_MII=y
579# CONFIG_HAPPYMEAL is not set
580# CONFIG_SUNGEM is not set
581# CONFIG_CASSINI is not set
582CONFIG_NET_VENDOR_3COM=y
583CONFIG_VORTEX=y
584# CONFIG_TYPHOON is not set
585
586#
587# Tulip family network device support
588#
589# CONFIG_NET_TULIP is not set
590# CONFIG_HP100 is not set
591# CONFIG_NET_PCI is not set
592
593#
594# Ethernet (1000 Mbit)
595#
596# CONFIG_ACENIC is not set
597# CONFIG_DL2K is not set
598# CONFIG_E1000 is not set
599# CONFIG_NS83820 is not set
600# CONFIG_HAMACHI is not set
601# CONFIG_YELLOWFIN is not set
602# CONFIG_R8169 is not set
603# CONFIG_SIS190 is not set
604# CONFIG_SKGE is not set
605# CONFIG_SKY2 is not set
606# CONFIG_SK98LIN is not set
607# CONFIG_TIGON3 is not set
608# CONFIG_BNX2 is not set
609CONFIG_TSI108_ETH=y
610# CONFIG_QLA3XXX is not set
611# CONFIG_ATL1 is not set
612
613#
614# Ethernet (10000 Mbit)
615#
616# CONFIG_CHELSIO_T1 is not set
617# CONFIG_CHELSIO_T3 is not set
618# CONFIG_IXGB is not set
619# CONFIG_S2IO is not set
620# CONFIG_MYRI10GE is not set
621# CONFIG_NETXEN_NIC is not set
622
623#
624# Token Ring devices
625#
626# CONFIG_TR is not set
627
628#
629# Wireless LAN
630#
631# CONFIG_WLAN_PRE80211 is not set
632# CONFIG_WLAN_80211 is not set
633
634#
635# Wan interfaces
636#
637# CONFIG_WAN is not set
638# CONFIG_FDDI is not set
639# CONFIG_HIPPI is not set
640# CONFIG_PPP is not set
641# CONFIG_SLIP is not set
642# CONFIG_NET_FC is not set
643# CONFIG_SHAPER is not set
644# CONFIG_NETCONSOLE is not set
645# CONFIG_NETPOLL is not set
646# CONFIG_NET_POLL_CONTROLLER is not set
647
648#
649# ISDN subsystem
650#
651# CONFIG_ISDN is not set
652
653#
654# Telephony Support
655#
656# CONFIG_PHONE is not set
657
658#
659# Input device support
660#
661CONFIG_INPUT=y
662# CONFIG_INPUT_FF_MEMLESS is not set
663
664#
665# Userland interfaces
666#
667# CONFIG_INPUT_MOUSEDEV is not set
668# CONFIG_INPUT_JOYDEV is not set
669# CONFIG_INPUT_TSDEV is not set
670# CONFIG_INPUT_EVDEV is not set
671# CONFIG_INPUT_EVBUG is not set
672
673#
674# Input Device Drivers
675#
676# CONFIG_INPUT_KEYBOARD is not set
677# CONFIG_INPUT_MOUSE is not set
678# CONFIG_INPUT_JOYSTICK is not set
679# CONFIG_INPUT_TOUCHSCREEN is not set
680# CONFIG_INPUT_MISC is not set
681
682#
683# Hardware I/O ports
684#
685# CONFIG_SERIO is not set
686# CONFIG_GAMEPORT is not set
687
688#
689# Character devices
690#
691# CONFIG_VT is not set
692# CONFIG_SERIAL_NONSTANDARD is not set
693
694#
695# Serial drivers
696#
697CONFIG_SERIAL_8250=y
698CONFIG_SERIAL_8250_CONSOLE=y
699# CONFIG_SERIAL_8250_PCI is not set
700CONFIG_SERIAL_8250_NR_UARTS=4
701CONFIG_SERIAL_8250_RUNTIME_UARTS=4
702CONFIG_SERIAL_8250_EXTENDED=y
703# CONFIG_SERIAL_8250_MANY_PORTS is not set
704CONFIG_SERIAL_8250_SHARE_IRQ=y
705# CONFIG_SERIAL_8250_DETECT_IRQ is not set
706# CONFIG_SERIAL_8250_RSA is not set
707
708#
709# Non-8250 serial port support
710#
711# CONFIG_SERIAL_UARTLITE is not set
712CONFIG_SERIAL_CORE=y
713CONFIG_SERIAL_CORE_CONSOLE=y
714# CONFIG_SERIAL_JSM is not set
715CONFIG_SERIAL_OF_PLATFORM=y
716CONFIG_UNIX98_PTYS=y
717CONFIG_LEGACY_PTYS=y
718CONFIG_LEGACY_PTY_COUNT=256
719
720#
721# IPMI
722#
723# CONFIG_IPMI_HANDLER is not set
724
725#
726# Watchdog Cards
727#
728# CONFIG_WATCHDOG is not set
729# CONFIG_HW_RANDOM is not set
730# CONFIG_NVRAM is not set
731CONFIG_GEN_RTC=y
732# CONFIG_GEN_RTC_X is not set
733# CONFIG_DTLK is not set
734# CONFIG_R3964 is not set
735# CONFIG_APPLICOM is not set
736# CONFIG_AGP is not set
737# CONFIG_DRM is not set
738# CONFIG_RAW_DRIVER is not set
739
740#
741# TPM devices
742#
743# CONFIG_TCG_TPM is not set
744
745#
746# I2C support
747#
748# CONFIG_I2C is not set
749
750#
751# SPI support
752#
753# CONFIG_SPI is not set
754# CONFIG_SPI_MASTER is not set
755
756#
757# Dallas's 1-wire bus
758#
759# CONFIG_W1 is not set
760
761#
762# Hardware Monitoring support
763#
764CONFIG_HWMON=y
765# CONFIG_HWMON_VID is not set
766# CONFIG_SENSORS_ABITUGURU is not set
767# CONFIG_SENSORS_F71805F is not set
768# CONFIG_SENSORS_PC87427 is not set
769# CONFIG_SENSORS_VT1211 is not set
770# CONFIG_HWMON_DEBUG_CHIP is not set
771
772#
773# Multifunction device drivers
774#
775# CONFIG_MFD_SM501 is not set
776
777#
778# Multimedia devices
779#
780# CONFIG_VIDEO_DEV is not set
781
782#
783# Digital Video Broadcasting Devices
784#
785# CONFIG_DVB is not set
786
787#
788# Graphics support
789#
790# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
791# CONFIG_FB is not set
792# CONFIG_FB_IBM_GXT4500 is not set
793
794#
795# Sound
796#
797# CONFIG_SOUND is not set
798
799#
800# HID Devices
801#
802CONFIG_HID=y
803# CONFIG_HID_DEBUG is not set
804
805#
806# USB support
807#
808CONFIG_USB_ARCH_HAS_HCD=y
809CONFIG_USB_ARCH_HAS_OHCI=y
810CONFIG_USB_ARCH_HAS_EHCI=y
811# CONFIG_USB is not set
812
813#
814# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
815#
816
817#
818# USB Gadget Support
819#
820# CONFIG_USB_GADGET is not set
821
822#
823# MMC/SD Card support
824#
825# CONFIG_MMC is not set
826
827#
828# LED devices
829#
830# CONFIG_NEW_LEDS is not set
831
832#
833# LED drivers
834#
835
836#
837# LED Triggers
838#
839
840#
841# InfiniBand support
842#
843# CONFIG_INFINIBAND is not set
844
845#
846# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
847#
848
849#
850# Real Time Clock
851#
852# CONFIG_RTC_CLASS is not set
853
854#
855# DMA Engine support
856#
857# CONFIG_DMA_ENGINE is not set
858
859#
860# DMA Clients
861#
862
863#
864# DMA Devices
865#
866
867#
868# Auxiliary Display support
869#
870
871#
872# Virtualization
873#
874
875#
876# File systems
877#
878CONFIG_EXT2_FS=y
879# CONFIG_EXT2_FS_XATTR is not set
880# CONFIG_EXT2_FS_XIP is not set
881CONFIG_EXT3_FS=y
882CONFIG_EXT3_FS_XATTR=y
883# CONFIG_EXT3_FS_POSIX_ACL is not set
884# CONFIG_EXT3_FS_SECURITY is not set
885# CONFIG_EXT4DEV_FS is not set
886CONFIG_JBD=y
887# CONFIG_JBD_DEBUG is not set
888CONFIG_FS_MBCACHE=y
889# CONFIG_REISERFS_FS is not set
890# CONFIG_JFS_FS is not set
891# CONFIG_FS_POSIX_ACL is not set
892# CONFIG_XFS_FS is not set
893# CONFIG_GFS2_FS is not set
894# CONFIG_OCFS2_FS is not set
895# CONFIG_MINIX_FS is not set
896# CONFIG_ROMFS_FS is not set
897CONFIG_INOTIFY=y
898CONFIG_INOTIFY_USER=y
899# CONFIG_QUOTA is not set
900CONFIG_DNOTIFY=y
901# CONFIG_AUTOFS_FS is not set
902# CONFIG_AUTOFS4_FS is not set
903# CONFIG_FUSE_FS is not set
904
905#
906# CD-ROM/DVD Filesystems
907#
908# CONFIG_ISO9660_FS is not set
909# CONFIG_UDF_FS is not set
910
911#
912# DOS/FAT/NT Filesystems
913#
914# CONFIG_MSDOS_FS is not set
915# CONFIG_VFAT_FS is not set
916# CONFIG_NTFS_FS is not set
917
918#
919# Pseudo filesystems
920#
921CONFIG_PROC_FS=y
922CONFIG_PROC_KCORE=y
923CONFIG_PROC_SYSCTL=y
924CONFIG_SYSFS=y
925CONFIG_TMPFS=y
926# CONFIG_TMPFS_POSIX_ACL is not set
927# CONFIG_HUGETLB_PAGE is not set
928CONFIG_RAMFS=y
929# CONFIG_CONFIGFS_FS is not set
930
931#
932# Miscellaneous filesystems
933#
934# CONFIG_ADFS_FS is not set
935# CONFIG_AFFS_FS is not set
936# CONFIG_HFS_FS is not set
937# CONFIG_HFSPLUS_FS is not set
938# CONFIG_BEFS_FS is not set
939# CONFIG_BFS_FS is not set
940# CONFIG_EFS_FS is not set
941# CONFIG_CRAMFS is not set
942# CONFIG_VXFS_FS is not set
943# CONFIG_HPFS_FS is not set
944# CONFIG_QNX4FS_FS is not set
945# CONFIG_SYSV_FS is not set
946# CONFIG_UFS_FS is not set
947
948#
949# Network File Systems
950#
951CONFIG_NFS_FS=y
952# CONFIG_NFS_V3 is not set
953# CONFIG_NFS_V4 is not set
954# CONFIG_NFS_DIRECTIO is not set
955# CONFIG_NFSD is not set
956CONFIG_ROOT_NFS=y
957CONFIG_LOCKD=y
958CONFIG_NFS_COMMON=y
959CONFIG_SUNRPC=y
960# CONFIG_RPCSEC_GSS_KRB5 is not set
961# CONFIG_RPCSEC_GSS_SPKM3 is not set
962# CONFIG_SMB_FS is not set
963# CONFIG_CIFS is not set
964# CONFIG_NCP_FS is not set
965# CONFIG_CODA_FS is not set
966# CONFIG_AFS_FS is not set
967# CONFIG_9P_FS is not set
968
969#
970# Partition Types
971#
972CONFIG_PARTITION_ADVANCED=y
973# CONFIG_ACORN_PARTITION is not set
974# CONFIG_OSF_PARTITION is not set
975# CONFIG_AMIGA_PARTITION is not set
976# CONFIG_ATARI_PARTITION is not set
977# CONFIG_MAC_PARTITION is not set
978CONFIG_MSDOS_PARTITION=y
979# CONFIG_BSD_DISKLABEL is not set
980# CONFIG_MINIX_SUBPARTITION is not set
981# CONFIG_SOLARIS_X86_PARTITION is not set
982# CONFIG_UNIXWARE_DISKLABEL is not set
983# CONFIG_LDM_PARTITION is not set
984# CONFIG_SGI_PARTITION is not set
985# CONFIG_ULTRIX_PARTITION is not set
986# CONFIG_SUN_PARTITION is not set
987# CONFIG_KARMA_PARTITION is not set
988# CONFIG_EFI_PARTITION is not set
989
990#
991# Native Language Support
992#
993# CONFIG_NLS is not set
994
995#
996# Distributed Lock Manager
997#
998# CONFIG_DLM is not set
999# CONFIG_UCC_SLOW is not set
1000# CONFIG_UCC_FAST is not set
1001
1002#
1003# Library routines
1004#
1005CONFIG_BITREVERSE=y
1006# CONFIG_CRC_CCITT is not set
1007# CONFIG_CRC16 is not set
1008CONFIG_CRC32=y
1009# CONFIG_LIBCRC32C is not set
1010CONFIG_PLIST=y
1011CONFIG_HAS_IOMEM=y
1012CONFIG_HAS_IOPORT=y
1013
1014#
1015# Instrumentation Support
1016#
1017# CONFIG_PROFILING is not set
1018# CONFIG_KPROBES is not set
1019
1020#
1021# Kernel hacking
1022#
1023# CONFIG_PRINTK_TIME is not set
1024CONFIG_ENABLE_MUST_CHECK=y
1025CONFIG_MAGIC_SYSRQ=y
1026# CONFIG_UNUSED_SYMBOLS is not set
1027# CONFIG_DEBUG_FS is not set
1028# CONFIG_HEADERS_CHECK is not set
1029CONFIG_DEBUG_KERNEL=y
1030# CONFIG_DEBUG_SHIRQ is not set
1031CONFIG_LOG_BUF_SHIFT=14
1032CONFIG_DETECT_SOFTLOCKUP=y
1033# CONFIG_SCHEDSTATS is not set
1034# CONFIG_TIMER_STATS is not set
1035# CONFIG_DEBUG_SLAB is not set
1036# CONFIG_DEBUG_RT_MUTEXES is not set
1037# CONFIG_RT_MUTEX_TESTER is not set
1038# CONFIG_DEBUG_SPINLOCK is not set
1039# CONFIG_DEBUG_MUTEXES is not set
1040# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1041# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
1042# CONFIG_DEBUG_KOBJECT is not set
1043# CONFIG_DEBUG_BUGVERBOSE is not set
1044# CONFIG_DEBUG_INFO is not set
1045# CONFIG_DEBUG_VM is not set
1046# CONFIG_DEBUG_LIST is not set
1047CONFIG_FORCED_INLINING=y
1048# CONFIG_RCU_TORTURE_TEST is not set
1049# CONFIG_FAULT_INJECTION is not set
1050# CONFIG_DEBUG_STACKOVERFLOW is not set
1051# CONFIG_DEBUG_STACK_USAGE is not set
1052# CONFIG_DEBUG_PAGEALLOC is not set
1053CONFIG_DEBUGGER=y
1054CONFIG_XMON=y
1055CONFIG_XMON_DEFAULT=y
1056CONFIG_XMON_DISASSEMBLY=y
1057# CONFIG_BDI_SWITCH is not set
1058# CONFIG_BOOTX_TEXT is not set
1059# CONFIG_PPC_EARLY_DEBUG is not set
1060
1061#
1062# Security options
1063#
1064# CONFIG_KEYS is not set
1065# CONFIG_SECURITY is not set
1066
1067#
1068# Cryptographic options
1069#
1070# CONFIG_CRYPTO is not set
diff --git a/arch/powerpc/configs/mpc832x_mds_defconfig b/arch/powerpc/configs/mpc832x_mds_defconfig
index e1b36de6b38c..83192c0dc5bb 100644
--- a/arch/powerpc/configs/mpc832x_mds_defconfig
+++ b/arch/powerpc/configs/mpc832x_mds_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.20-rc5 3# Linux kernel version: 2.6.21-rc5
4# Tue Jan 30 14:27:25 2007 4# Mon Apr 9 16:09:16 2007
5# 5#
6# CONFIG_PPC64 is not set 6# CONFIG_PPC64 is not set
7CONFIG_PPC32=y 7CONFIG_PPC32=y
@@ -34,9 +34,9 @@ CONFIG_DEFAULT_UIMAGE=y
34CONFIG_PPC_83xx=y 34CONFIG_PPC_83xx=y
35# CONFIG_PPC_85xx is not set 35# CONFIG_PPC_85xx is not set
36# CONFIG_PPC_86xx is not set 36# CONFIG_PPC_86xx is not set
37# CONFIG_PPC_8xx is not set
37# CONFIG_40x is not set 38# CONFIG_40x is not set
38# CONFIG_44x is not set 39# CONFIG_44x is not set
39# CONFIG_8xx is not set
40# CONFIG_E200 is not set 40# CONFIG_E200 is not set
41CONFIG_6xx=y 41CONFIG_6xx=y
42CONFIG_83xx=y 42CONFIG_83xx=y
@@ -63,6 +63,7 @@ CONFIG_LOCALVERSION_AUTO=y
63CONFIG_SWAP=y 63CONFIG_SWAP=y
64CONFIG_SYSVIPC=y 64CONFIG_SYSVIPC=y
65# CONFIG_IPC_NS is not set 65# CONFIG_IPC_NS is not set
66CONFIG_SYSVIPC_SYSCTL=y
66# CONFIG_POSIX_MQUEUE is not set 67# CONFIG_POSIX_MQUEUE is not set
67# CONFIG_BSD_PROCESS_ACCT is not set 68# CONFIG_BSD_PROCESS_ACCT is not set
68# CONFIG_TASKSTATS is not set 69# CONFIG_TASKSTATS is not set
@@ -71,6 +72,7 @@ CONFIG_SYSVIPC=y
71# CONFIG_IKCONFIG is not set 72# CONFIG_IKCONFIG is not set
72CONFIG_SYSFS_DEPRECATED=y 73CONFIG_SYSFS_DEPRECATED=y
73# CONFIG_RELAY is not set 74# CONFIG_RELAY is not set
75CONFIG_BLK_DEV_INITRD=y
74CONFIG_INITRAMFS_SOURCE="" 76CONFIG_INITRAMFS_SOURCE=""
75# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 77# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
76CONFIG_SYSCTL=y 78CONFIG_SYSCTL=y
@@ -123,16 +125,17 @@ CONFIG_DEFAULT_AS=y
123# CONFIG_DEFAULT_NOOP is not set 125# CONFIG_DEFAULT_NOOP is not set
124CONFIG_DEFAULT_IOSCHED="anticipatory" 126CONFIG_DEFAULT_IOSCHED="anticipatory"
125CONFIG_QUICC_ENGINE=y 127CONFIG_QUICC_ENGINE=y
126CONFIG_PPC_GEN550=y
127# CONFIG_WANT_EARLY_SERIAL is not set 128# CONFIG_WANT_EARLY_SERIAL is not set
128 129
129# 130#
130# Platform support 131# Platform support
131# 132#
133# CONFIG_MPC8313_RDB is not set
132CONFIG_MPC832x_MDS=y 134CONFIG_MPC832x_MDS=y
133# CONFIG_MPC834x_SYS is not set 135# CONFIG_MPC832x_RDB is not set
136# CONFIG_MPC834x_MDS is not set
134# CONFIG_MPC834x_ITX is not set 137# CONFIG_MPC834x_ITX is not set
135# CONFIG_MPC8360E_PB is not set 138# CONFIG_MPC836x_MDS is not set
136CONFIG_PPC_MPC832x=y 139CONFIG_PPC_MPC832x=y
137# CONFIG_MPIC is not set 140# CONFIG_MPIC is not set
138 141
@@ -163,6 +166,7 @@ CONFIG_FLAT_NODE_MEM_MAP=y
163# CONFIG_SPARSEMEM_STATIC is not set 166# CONFIG_SPARSEMEM_STATIC is not set
164CONFIG_SPLIT_PTLOCK_CPUS=4 167CONFIG_SPLIT_PTLOCK_CPUS=4
165# CONFIG_RESOURCES_64BIT is not set 168# CONFIG_RESOURCES_64BIT is not set
169CONFIG_ZONE_DMA_FLAG=1
166CONFIG_PROC_DEVICETREE=y 170CONFIG_PROC_DEVICETREE=y
167# CONFIG_CMDLINE_BOOL is not set 171# CONFIG_CMDLINE_BOOL is not set
168# CONFIG_PM is not set 172# CONFIG_PM is not set
@@ -172,6 +176,7 @@ CONFIG_ISA_DMA_API=y
172# 176#
173# Bus options 177# Bus options
174# 178#
179CONFIG_ZONE_DMA=y
175CONFIG_GENERIC_ISA_DMA=y 180CONFIG_GENERIC_ISA_DMA=y
176# CONFIG_MPIC_WEIRD is not set 181# CONFIG_MPIC_WEIRD is not set
177# CONFIG_PPC_I8259 is not set 182# CONFIG_PPC_I8259 is not set
@@ -220,6 +225,7 @@ CONFIG_UNIX=y
220CONFIG_XFRM=y 225CONFIG_XFRM=y
221# CONFIG_XFRM_USER is not set 226# CONFIG_XFRM_USER is not set
222# CONFIG_XFRM_SUB_POLICY is not set 227# CONFIG_XFRM_SUB_POLICY is not set
228# CONFIG_XFRM_MIGRATE is not set
223# CONFIG_NET_KEY is not set 229# CONFIG_NET_KEY is not set
224CONFIG_INET=y 230CONFIG_INET=y
225CONFIG_IP_MULTICAST=y 231CONFIG_IP_MULTICAST=y
@@ -324,6 +330,7 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
324# 330#
325# Plug and Play support 331# Plug and Play support
326# 332#
333# CONFIG_PNPACPI is not set
327 334
328# 335#
329# Block devices 336# Block devices
@@ -342,7 +349,6 @@ CONFIG_BLK_DEV_RAM=y
342CONFIG_BLK_DEV_RAM_COUNT=16 349CONFIG_BLK_DEV_RAM_COUNT=16
343CONFIG_BLK_DEV_RAM_SIZE=32768 350CONFIG_BLK_DEV_RAM_SIZE=32768
344CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 351CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
345CONFIG_BLK_DEV_INITRD=y
346# CONFIG_CDROM_PKTCDVD is not set 352# CONFIG_CDROM_PKTCDVD is not set
347# CONFIG_ATA_OVER_ETH is not set 353# CONFIG_ATA_OVER_ETH is not set
348 354
@@ -482,7 +488,21 @@ CONFIG_NETDEVICES=y
482# 488#
483# PHY device support 489# PHY device support
484# 490#
485# CONFIG_PHYLIB is not set 491CONFIG_PHYLIB=y
492
493#
494# MII PHY device drivers
495#
496# CONFIG_MARVELL_PHY is not set
497CONFIG_DAVICOM_PHY=y
498# CONFIG_QSEMI_PHY is not set
499# CONFIG_LXT_PHY is not set
500# CONFIG_CICADA_PHY is not set
501# CONFIG_VITESSE_PHY is not set
502# CONFIG_SMSC_PHY is not set
503# CONFIG_BROADCOM_PHY is not set
504# CONFIG_ICPLUS_PHY is not set
505# CONFIG_FIXED_PHY is not set
486 506
487# 507#
488# Ethernet (10 or 100Mbit) 508# Ethernet (10 or 100Mbit)
@@ -524,11 +544,13 @@ CONFIG_UCC_GETH=y
524# CONFIG_UGETH_FILTERING is not set 544# CONFIG_UGETH_FILTERING is not set
525# CONFIG_UGETH_TX_ON_DEMOND is not set 545# CONFIG_UGETH_TX_ON_DEMOND is not set
526# CONFIG_QLA3XXX is not set 546# CONFIG_QLA3XXX is not set
547# CONFIG_ATL1 is not set
527 548
528# 549#
529# Ethernet (10000 Mbit) 550# Ethernet (10000 Mbit)
530# 551#
531# CONFIG_CHELSIO_T1 is not set 552# CONFIG_CHELSIO_T1 is not set
553# CONFIG_CHELSIO_T3 is not set
532# CONFIG_IXGB is not set 554# CONFIG_IXGB is not set
533# CONFIG_S2IO is not set 555# CONFIG_S2IO is not set
534# CONFIG_MYRI10GE is not set 556# CONFIG_MYRI10GE is not set
@@ -621,6 +643,7 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=4
621CONFIG_SERIAL_CORE=y 643CONFIG_SERIAL_CORE=y
622CONFIG_SERIAL_CORE_CONSOLE=y 644CONFIG_SERIAL_CORE_CONSOLE=y
623# CONFIG_SERIAL_JSM is not set 645# CONFIG_SERIAL_JSM is not set
646# CONFIG_SERIAL_OF_PLATFORM is not set
624CONFIG_UNIX98_PTYS=y 647CONFIG_UNIX98_PTYS=y
625CONFIG_LEGACY_PTYS=y 648CONFIG_LEGACY_PTYS=y
626CONFIG_LEGACY_PTY_COUNT=256 649CONFIG_LEGACY_PTY_COUNT=256
@@ -691,6 +714,7 @@ CONFIG_I2C_MPC=y
691# CONFIG_I2C_NFORCE2 is not set 714# CONFIG_I2C_NFORCE2 is not set
692# CONFIG_I2C_OCORES is not set 715# CONFIG_I2C_OCORES is not set
693# CONFIG_I2C_PARPORT_LIGHT is not set 716# CONFIG_I2C_PARPORT_LIGHT is not set
717# CONFIG_I2C_PASEMI is not set
694# CONFIG_I2C_PROSAVAGE is not set 718# CONFIG_I2C_PROSAVAGE is not set
695# CONFIG_I2C_SAVAGE4 is not set 719# CONFIG_I2C_SAVAGE4 is not set
696# CONFIG_I2C_SIS5595 is not set 720# CONFIG_I2C_SIS5595 is not set
@@ -738,6 +762,7 @@ CONFIG_HWMON=y
738# CONFIG_SENSORS_ADM1021 is not set 762# CONFIG_SENSORS_ADM1021 is not set
739# CONFIG_SENSORS_ADM1025 is not set 763# CONFIG_SENSORS_ADM1025 is not set
740# CONFIG_SENSORS_ADM1026 is not set 764# CONFIG_SENSORS_ADM1026 is not set
765# CONFIG_SENSORS_ADM1029 is not set
741# CONFIG_SENSORS_ADM1031 is not set 766# CONFIG_SENSORS_ADM1031 is not set
742# CONFIG_SENSORS_ADM9240 is not set 767# CONFIG_SENSORS_ADM9240 is not set
743# CONFIG_SENSORS_ASB100 is not set 768# CONFIG_SENSORS_ASB100 is not set
@@ -779,6 +804,11 @@ CONFIG_HWMON=y
779# CONFIG_HWMON_DEBUG_CHIP is not set 804# CONFIG_HWMON_DEBUG_CHIP is not set
780 805
781# 806#
807# Multifunction device drivers
808#
809# CONFIG_MFD_SM501 is not set
810
811#
782# Multimedia devices 812# Multimedia devices
783# 813#
784# CONFIG_VIDEO_DEV is not set 814# CONFIG_VIDEO_DEV is not set
@@ -791,10 +821,9 @@ CONFIG_HWMON=y
791# 821#
792# Graphics support 822# Graphics support
793# 823#
794CONFIG_FIRMWARE_EDID=y 824# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
795# CONFIG_FB is not set 825# CONFIG_FB is not set
796# CONFIG_FB_IBM_GXT4500 is not set 826# CONFIG_FB_IBM_GXT4500 is not set
797# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
798 827
799# 828#
800# Sound 829# Sound
@@ -805,6 +834,7 @@ CONFIG_FIRMWARE_EDID=y
805# HID Devices 834# HID Devices
806# 835#
807CONFIG_HID=y 836CONFIG_HID=y
837# CONFIG_HID_DEBUG is not set
808 838
809# 839#
810# USB support 840# USB support
@@ -869,6 +899,10 @@ CONFIG_USB_ARCH_HAS_EHCI=y
869# 899#
870 900
871# 901#
902# Auxiliary Display support
903#
904
905#
872# Virtualization 906# Virtualization
873# 907#
874 908
@@ -995,11 +1029,7 @@ CONFIG_PARTITION_ADVANCED=y
995# Distributed Lock Manager 1029# Distributed Lock Manager
996# 1030#
997# CONFIG_DLM is not set 1031# CONFIG_DLM is not set
998 1032# CONFIG_UCC_SLOW is not set
999#
1000# QE Options
1001#
1002CONFIG_UCC_SLOW=y
1003CONFIG_UCC_FAST=y 1033CONFIG_UCC_FAST=y
1004CONFIG_UCC=y 1034CONFIG_UCC=y
1005 1035
@@ -1012,7 +1042,8 @@ CONFIG_BITREVERSE=y
1012CONFIG_CRC32=y 1042CONFIG_CRC32=y
1013# CONFIG_LIBCRC32C is not set 1043# CONFIG_LIBCRC32C is not set
1014CONFIG_PLIST=y 1044CONFIG_PLIST=y
1015CONFIG_IOMAP_COPY=y 1045CONFIG_HAS_IOMEM=y
1046CONFIG_HAS_IOPORT=y
1016 1047
1017# 1048#
1018# Instrumentation Support 1049# Instrumentation Support
@@ -1032,7 +1063,6 @@ CONFIG_ENABLE_MUST_CHECK=y
1032CONFIG_LOG_BUF_SHIFT=14 1063CONFIG_LOG_BUF_SHIFT=14
1033# CONFIG_DEBUG_BUGVERBOSE is not set 1064# CONFIG_DEBUG_BUGVERBOSE is not set
1034# CONFIG_BOOTX_TEXT is not set 1065# CONFIG_BOOTX_TEXT is not set
1035# CONFIG_SERIAL_TEXT_DEBUG is not set
1036# CONFIG_PPC_EARLY_DEBUG is not set 1066# CONFIG_PPC_EARLY_DEBUG is not set
1037 1067
1038# 1068#
@@ -1061,8 +1091,10 @@ CONFIG_CRYPTO_MD5=y
1061# CONFIG_CRYPTO_GF128MUL is not set 1091# CONFIG_CRYPTO_GF128MUL is not set
1062CONFIG_CRYPTO_ECB=m 1092CONFIG_CRYPTO_ECB=m
1063CONFIG_CRYPTO_CBC=y 1093CONFIG_CRYPTO_CBC=y
1094CONFIG_CRYPTO_PCBC=m
1064# CONFIG_CRYPTO_LRW is not set 1095# CONFIG_CRYPTO_LRW is not set
1065CONFIG_CRYPTO_DES=y 1096CONFIG_CRYPTO_DES=y
1097# CONFIG_CRYPTO_FCRYPT is not set
1066# CONFIG_CRYPTO_BLOWFISH is not set 1098# CONFIG_CRYPTO_BLOWFISH is not set
1067# CONFIG_CRYPTO_TWOFISH is not set 1099# CONFIG_CRYPTO_TWOFISH is not set
1068# CONFIG_CRYPTO_SERPENT is not set 1100# CONFIG_CRYPTO_SERPENT is not set
@@ -1076,6 +1108,7 @@ CONFIG_CRYPTO_DES=y
1076# CONFIG_CRYPTO_DEFLATE is not set 1108# CONFIG_CRYPTO_DEFLATE is not set
1077# CONFIG_CRYPTO_MICHAEL_MIC is not set 1109# CONFIG_CRYPTO_MICHAEL_MIC is not set
1078# CONFIG_CRYPTO_CRC32C is not set 1110# CONFIG_CRYPTO_CRC32C is not set
1111# CONFIG_CRYPTO_CAMELLIA is not set
1079# CONFIG_CRYPTO_TEST is not set 1112# CONFIG_CRYPTO_TEST is not set
1080 1113
1081# 1114#
diff --git a/arch/powerpc/configs/mpc832x_rdb_defconfig b/arch/powerpc/configs/mpc832x_rdb_defconfig
index 56fc0a824458..4a4da875fa4e 100644
--- a/arch/powerpc/configs/mpc832x_rdb_defconfig
+++ b/arch/powerpc/configs/mpc832x_rdb_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.21-rc3 3# Linux kernel version: 2.6.21-rc5
4# Mon Mar 12 17:32:19 2007 4# Mon Apr 9 16:12:43 2007
5# 5#
6# CONFIG_PPC64 is not set 6# CONFIG_PPC64 is not set
7CONFIG_PPC32=y 7CONFIG_PPC32=y
@@ -125,7 +125,6 @@ CONFIG_DEFAULT_AS=y
125# CONFIG_DEFAULT_NOOP is not set 125# CONFIG_DEFAULT_NOOP is not set
126CONFIG_DEFAULT_IOSCHED="anticipatory" 126CONFIG_DEFAULT_IOSCHED="anticipatory"
127CONFIG_QUICC_ENGINE=y 127CONFIG_QUICC_ENGINE=y
128CONFIG_PPC_GEN550=y
129# CONFIG_WANT_EARLY_SERIAL is not set 128# CONFIG_WANT_EARLY_SERIAL is not set
130 129
131# 130#
@@ -490,7 +489,21 @@ CONFIG_NETDEVICES=y
490# 489#
491# PHY device support 490# PHY device support
492# 491#
493# CONFIG_PHYLIB is not set 492CONFIG_PHYLIB=y
493
494#
495# MII PHY device drivers
496#
497# CONFIG_MARVELL_PHY is not set
498# CONFIG_DAVICOM_PHY is not set
499# CONFIG_QSEMI_PHY is not set
500# CONFIG_LXT_PHY is not set
501# CONFIG_CICADA_PHY is not set
502# CONFIG_VITESSE_PHY is not set
503# CONFIG_SMSC_PHY is not set
504# CONFIG_BROADCOM_PHY is not set
505CONFIG_ICPLUS_PHY=y
506# CONFIG_FIXED_PHY is not set
494 507
495# 508#
496# Ethernet (10 or 100Mbit) 509# Ethernet (10 or 100Mbit)
@@ -1200,11 +1213,7 @@ CONFIG_NLS_ISO8859_1=y
1200# Distributed Lock Manager 1213# Distributed Lock Manager
1201# 1214#
1202# CONFIG_DLM is not set 1215# CONFIG_DLM is not set
1203 1216# CONFIG_UCC_SLOW is not set
1204#
1205# QE Options
1206#
1207CONFIG_UCC_SLOW=y
1208CONFIG_UCC_FAST=y 1217CONFIG_UCC_FAST=y
1209CONFIG_UCC=y 1218CONFIG_UCC=y
1210 1219
@@ -1238,7 +1247,6 @@ CONFIG_ENABLE_MUST_CHECK=y
1238CONFIG_LOG_BUF_SHIFT=14 1247CONFIG_LOG_BUF_SHIFT=14
1239# CONFIG_DEBUG_BUGVERBOSE is not set 1248# CONFIG_DEBUG_BUGVERBOSE is not set
1240# CONFIG_BOOTX_TEXT is not set 1249# CONFIG_BOOTX_TEXT is not set
1241# CONFIG_SERIAL_TEXT_DEBUG is not set
1242# CONFIG_PPC_EARLY_DEBUG is not set 1250# CONFIG_PPC_EARLY_DEBUG is not set
1243 1251
1244# 1252#
diff --git a/arch/powerpc/configs/mpc836x_mds_defconfig b/arch/powerpc/configs/mpc836x_mds_defconfig
index 8eb475cd0df0..921a151dc778 100644
--- a/arch/powerpc/configs/mpc836x_mds_defconfig
+++ b/arch/powerpc/configs/mpc836x_mds_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.20 3# Linux kernel version: 2.6.21-rc5
4# Sat Feb 17 10:09:26 2007 4# Mon Apr 9 16:14:05 2007
5# 5#
6# CONFIG_PPC64 is not set 6# CONFIG_PPC64 is not set
7CONFIG_PPC32=y 7CONFIG_PPC32=y
@@ -72,6 +72,7 @@ CONFIG_SYSVIPC_SYSCTL=y
72# CONFIG_IKCONFIG is not set 72# CONFIG_IKCONFIG is not set
73CONFIG_SYSFS_DEPRECATED=y 73CONFIG_SYSFS_DEPRECATED=y
74# CONFIG_RELAY is not set 74# CONFIG_RELAY is not set
75CONFIG_BLK_DEV_INITRD=y
75CONFIG_INITRAMFS_SOURCE="" 76CONFIG_INITRAMFS_SOURCE=""
76# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 77# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
77CONFIG_SYSCTL=y 78CONFIG_SYSCTL=y
@@ -124,7 +125,6 @@ CONFIG_DEFAULT_AS=y
124# CONFIG_DEFAULT_NOOP is not set 125# CONFIG_DEFAULT_NOOP is not set
125CONFIG_DEFAULT_IOSCHED="anticipatory" 126CONFIG_DEFAULT_IOSCHED="anticipatory"
126CONFIG_QUICC_ENGINE=y 127CONFIG_QUICC_ENGINE=y
127CONFIG_PPC_GEN550=y
128# CONFIG_WANT_EARLY_SERIAL is not set 128# CONFIG_WANT_EARLY_SERIAL is not set
129 129
130# 130#
@@ -132,6 +132,7 @@ CONFIG_PPC_GEN550=y
132# 132#
133# CONFIG_MPC8313_RDB is not set 133# CONFIG_MPC8313_RDB is not set
134# CONFIG_MPC832x_MDS is not set 134# CONFIG_MPC832x_MDS is not set
135# CONFIG_MPC832x_RDB is not set
135# CONFIG_MPC834x_MDS is not set 136# CONFIG_MPC834x_MDS is not set
136# CONFIG_MPC834x_ITX is not set 137# CONFIG_MPC834x_ITX is not set
137CONFIG_MPC836x_MDS=y 138CONFIG_MPC836x_MDS=y
@@ -328,6 +329,7 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
328# 329#
329# Plug and Play support 330# Plug and Play support
330# 331#
332# CONFIG_PNPACPI is not set
331 333
332# 334#
333# Block devices 335# Block devices
@@ -346,7 +348,6 @@ CONFIG_BLK_DEV_RAM=y
346CONFIG_BLK_DEV_RAM_COUNT=16 348CONFIG_BLK_DEV_RAM_COUNT=16
347CONFIG_BLK_DEV_RAM_SIZE=32768 349CONFIG_BLK_DEV_RAM_SIZE=32768
348CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 350CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
349CONFIG_BLK_DEV_INITRD=y
350# CONFIG_CDROM_PKTCDVD is not set 351# CONFIG_CDROM_PKTCDVD is not set
351# CONFIG_ATA_OVER_ETH is not set 352# CONFIG_ATA_OVER_ETH is not set
352 353
@@ -486,7 +487,21 @@ CONFIG_NETDEVICES=y
486# 487#
487# PHY device support 488# PHY device support
488# 489#
489# CONFIG_PHYLIB is not set 490CONFIG_PHYLIB=y
491
492#
493# MII PHY device drivers
494#
495CONFIG_MARVELL_PHY=y
496# CONFIG_DAVICOM_PHY is not set
497# CONFIG_QSEMI_PHY is not set
498# CONFIG_LXT_PHY is not set
499# CONFIG_CICADA_PHY is not set
500# CONFIG_VITESSE_PHY is not set
501# CONFIG_SMSC_PHY is not set
502# CONFIG_BROADCOM_PHY is not set
503# CONFIG_ICPLUS_PHY is not set
504# CONFIG_FIXED_PHY is not set
490 505
491# 506#
492# Ethernet (10 or 100Mbit) 507# Ethernet (10 or 100Mbit)
@@ -528,6 +543,7 @@ CONFIG_UCC_GETH=y
528# CONFIG_UGETH_FILTERING is not set 543# CONFIG_UGETH_FILTERING is not set
529# CONFIG_UGETH_TX_ON_DEMOND is not set 544# CONFIG_UGETH_TX_ON_DEMOND is not set
530# CONFIG_QLA3XXX is not set 545# CONFIG_QLA3XXX is not set
546# CONFIG_ATL1 is not set
531 547
532# 548#
533# Ethernet (10000 Mbit) 549# Ethernet (10000 Mbit)
@@ -745,6 +761,7 @@ CONFIG_HWMON=y
745# CONFIG_SENSORS_ADM1021 is not set 761# CONFIG_SENSORS_ADM1021 is not set
746# CONFIG_SENSORS_ADM1025 is not set 762# CONFIG_SENSORS_ADM1025 is not set
747# CONFIG_SENSORS_ADM1026 is not set 763# CONFIG_SENSORS_ADM1026 is not set
764# CONFIG_SENSORS_ADM1029 is not set
748# CONFIG_SENSORS_ADM1031 is not set 765# CONFIG_SENSORS_ADM1031 is not set
749# CONFIG_SENSORS_ADM9240 is not set 766# CONFIG_SENSORS_ADM9240 is not set
750# CONFIG_SENSORS_ASB100 is not set 767# CONFIG_SENSORS_ASB100 is not set
@@ -786,6 +803,11 @@ CONFIG_HWMON=y
786# CONFIG_HWMON_DEBUG_CHIP is not set 803# CONFIG_HWMON_DEBUG_CHIP is not set
787 804
788# 805#
806# Multifunction device drivers
807#
808# CONFIG_MFD_SM501 is not set
809
810#
789# Multimedia devices 811# Multimedia devices
790# 812#
791# CONFIG_VIDEO_DEV is not set 813# CONFIG_VIDEO_DEV is not set
@@ -798,10 +820,9 @@ CONFIG_HWMON=y
798# 820#
799# Graphics support 821# Graphics support
800# 822#
801CONFIG_FIRMWARE_EDID=y 823# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
802# CONFIG_FB is not set 824# CONFIG_FB is not set
803# CONFIG_FB_IBM_GXT4500 is not set 825# CONFIG_FB_IBM_GXT4500 is not set
804# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
805 826
806# 827#
807# Sound 828# Sound
@@ -1007,11 +1028,7 @@ CONFIG_PARTITION_ADVANCED=y
1007# Distributed Lock Manager 1028# Distributed Lock Manager
1008# 1029#
1009# CONFIG_DLM is not set 1030# CONFIG_DLM is not set
1010 1031# CONFIG_UCC_SLOW is not set
1011#
1012# QE Options
1013#
1014CONFIG_UCC_SLOW=y
1015CONFIG_UCC_FAST=y 1032CONFIG_UCC_FAST=y
1016CONFIG_UCC=y 1033CONFIG_UCC=y
1017 1034
@@ -1045,7 +1062,6 @@ CONFIG_ENABLE_MUST_CHECK=y
1045CONFIG_LOG_BUF_SHIFT=14 1062CONFIG_LOG_BUF_SHIFT=14
1046# CONFIG_DEBUG_BUGVERBOSE is not set 1063# CONFIG_DEBUG_BUGVERBOSE is not set
1047# CONFIG_BOOTX_TEXT is not set 1064# CONFIG_BOOTX_TEXT is not set
1048# CONFIG_SERIAL_TEXT_DEBUG is not set
1049# CONFIG_PPC_EARLY_DEBUG is not set 1065# CONFIG_PPC_EARLY_DEBUG is not set
1050 1066
1051# 1067#
diff --git a/arch/powerpc/configs/ps3_defconfig b/arch/powerpc/configs/ps3_defconfig
index 0345a2ceec59..fd604968f9a2 100644
--- a/arch/powerpc/configs/ps3_defconfig
+++ b/arch/powerpc/configs/ps3_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.20-rc6 3# Linux kernel version: 2.6.21
4# Thu Jan 25 13:35:34 2007 4# Mon Apr 30 12:03:35 2007
5# 5#
6CONFIG_PPC64=y 6CONFIG_PPC64=y
7CONFIG_64BIT=y 7CONFIG_64BIT=y
@@ -60,6 +60,7 @@ CONFIG_LOCALVERSION_AUTO=y
60CONFIG_SWAP=y 60CONFIG_SWAP=y
61CONFIG_SYSVIPC=y 61CONFIG_SYSVIPC=y
62# CONFIG_IPC_NS is not set 62# CONFIG_IPC_NS is not set
63CONFIG_SYSVIPC_SYSCTL=y
63# CONFIG_POSIX_MQUEUE is not set 64# CONFIG_POSIX_MQUEUE is not set
64# CONFIG_BSD_PROCESS_ACCT is not set 65# CONFIG_BSD_PROCESS_ACCT is not set
65# CONFIG_TASKSTATS is not set 66# CONFIG_TASKSTATS is not set
@@ -69,6 +70,7 @@ CONFIG_SYSVIPC=y
69# CONFIG_CPUSETS is not set 70# CONFIG_CPUSETS is not set
70CONFIG_SYSFS_DEPRECATED=y 71CONFIG_SYSFS_DEPRECATED=y
71# CONFIG_RELAY is not set 72# CONFIG_RELAY is not set
73CONFIG_BLK_DEV_INITRD=y
72CONFIG_INITRAMFS_SOURCE="" 74CONFIG_INITRAMFS_SOURCE=""
73CONFIG_CC_OPTIMIZE_FOR_SIZE=y 75CONFIG_CC_OPTIMIZE_FOR_SIZE=y
74CONFIG_SYSCTL=y 76CONFIG_SYSCTL=y
@@ -131,13 +133,36 @@ CONFIG_PPC_MULTIPLATFORM=y
131# CONFIG_PPC_PSERIES is not set 133# CONFIG_PPC_PSERIES is not set
132# CONFIG_PPC_ISERIES is not set 134# CONFIG_PPC_ISERIES is not set
133# CONFIG_PPC_MPC52xx is not set 135# CONFIG_PPC_MPC52xx is not set
136# CONFIG_PPC_MPC5200 is not set
134# CONFIG_PPC_PMAC is not set 137# CONFIG_PPC_PMAC is not set
135# CONFIG_PPC_MAPLE is not set 138# CONFIG_PPC_MAPLE is not set
136# CONFIG_PPC_PASEMI is not set 139# CONFIG_PPC_PASEMI is not set
140# CONFIG_PPC_CELLEB is not set
141CONFIG_PPC_PS3=y
142
143#
144# PS3 Platform Options
145#
146# CONFIG_PS3_ADVANCED is not set
147CONFIG_PS3_HTAB_SIZE=20
148# CONFIG_PS3_DYNAMIC_DMA is not set
149CONFIG_PS3_USE_LPAR_ADDR=y
150CONFIG_PS3_VUART=y
151CONFIG_PS3_PS3AV=y
152CONFIG_PS3_SYS_MANAGER=y
137CONFIG_PPC_CELL=y 153CONFIG_PPC_CELL=y
138# CONFIG_PPC_CELL_NATIVE is not set 154# CONFIG_PPC_CELL_NATIVE is not set
139# CONFIG_PPC_IBM_CELL_BLADE is not set 155# CONFIG_PPC_IBM_CELL_BLADE is not set
140CONFIG_PPC_PS3=y 156
157#
158# Cell Broadband Engine options
159#
160CONFIG_SPU_FS=y
161CONFIG_SPU_BASE=y
162# CONFIG_PQ2ADS is not set
163# CONFIG_MPIC is not set
164# CONFIG_MPIC_WEIRD is not set
165# CONFIG_PPC_I8259 is not set
141# CONFIG_U3_DART is not set 166# CONFIG_U3_DART is not set
142# CONFIG_PPC_RTAS is not set 167# CONFIG_PPC_RTAS is not set
143# CONFIG_MMIO_NVRAM is not set 168# CONFIG_MMIO_NVRAM is not set
@@ -146,24 +171,7 @@ CONFIG_PPC_PS3=y
146# CONFIG_PPC_INDIRECT_IO is not set 171# CONFIG_PPC_INDIRECT_IO is not set
147# CONFIG_GENERIC_IOMAP is not set 172# CONFIG_GENERIC_IOMAP is not set
148# CONFIG_CPU_FREQ is not set 173# CONFIG_CPU_FREQ is not set
149# CONFIG_WANT_EARLY_SERIAL is not set 174# CONFIG_CPM2 is not set
150# CONFIG_MPIC is not set
151
152#
153# Cell Broadband Engine options
154#
155CONFIG_SPU_FS=y
156CONFIG_SPU_BASE=y
157# CONFIG_CBE_RAS is not set
158
159#
160# PS3 Platform Options
161#
162CONFIG_PS3_HTAB_SIZE=20
163# CONFIG_PS3_DYNAMIC_DMA is not set
164CONFIG_PS3_USE_LPAR_ADDR=y
165CONFIG_PS3_VUART=y
166CONFIG_PS3_PS3AV=y
167 175
168# 176#
169# Kernel options 177# Kernel options
@@ -179,10 +187,10 @@ CONFIG_PREEMPT_NONE=y
179# CONFIG_PREEMPT_BKL is not set 187# CONFIG_PREEMPT_BKL is not set
180CONFIG_BINFMT_ELF=y 188CONFIG_BINFMT_ELF=y
181CONFIG_BINFMT_MISC=y 189CONFIG_BINFMT_MISC=y
182CONFIG_FORCE_MAX_ZONEORDER=9 190CONFIG_FORCE_MAX_ZONEORDER=13
183# CONFIG_IOMMU_VMERGE is not set 191# CONFIG_IOMMU_VMERGE is not set
184CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y 192CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
185# CONFIG_KEXEC is not set 193CONFIG_KEXEC=y
186# CONFIG_CRASH_DUMP is not set 194# CONFIG_CRASH_DUMP is not set
187# CONFIG_IRQ_ALL_CPUS is not set 195# CONFIG_IRQ_ALL_CPUS is not set
188# CONFIG_NUMA is not set 196# CONFIG_NUMA is not set
@@ -203,22 +211,22 @@ CONFIG_MEMORY_HOTPLUG=y
203CONFIG_MEMORY_HOTPLUG_SPARSE=y 211CONFIG_MEMORY_HOTPLUG_SPARSE=y
204CONFIG_SPLIT_PTLOCK_CPUS=4 212CONFIG_SPLIT_PTLOCK_CPUS=4
205CONFIG_RESOURCES_64BIT=y 213CONFIG_RESOURCES_64BIT=y
214CONFIG_ZONE_DMA_FLAG=1
206CONFIG_ARCH_MEMORY_PROBE=y 215CONFIG_ARCH_MEMORY_PROBE=y
207CONFIG_PPC_64K_PAGES=y 216# CONFIG_PPC_64K_PAGES is not set
208# CONFIG_SCHED_SMT is not set 217# CONFIG_SCHED_SMT is not set
209CONFIG_PROC_DEVICETREE=y 218CONFIG_PROC_DEVICETREE=y
210CONFIG_CMDLINE_BOOL=y 219# CONFIG_CMDLINE_BOOL is not set
211CONFIG_CMDLINE="root=/dev/sda1 ip=dhcp"
212# CONFIG_PM is not set 220# CONFIG_PM is not set
213# CONFIG_SECCOMP is not set 221# CONFIG_SECCOMP is not set
222# CONFIG_WANT_DEVICE_TREE is not set
214CONFIG_ISA_DMA_API=y 223CONFIG_ISA_DMA_API=y
215 224
216# 225#
217# Bus options 226# Bus options
218# 227#
228CONFIG_ZONE_DMA=y
219CONFIG_GENERIC_ISA_DMA=y 229CONFIG_GENERIC_ISA_DMA=y
220# CONFIG_MPIC_WEIRD is not set
221# CONFIG_PPC_I8259 is not set
222# CONFIG_PCI is not set 230# CONFIG_PCI is not set
223# CONFIG_PCI_DOMAINS is not set 231# CONFIG_PCI_DOMAINS is not set
224 232
@@ -240,10 +248,13 @@ CONFIG_NET=y
240# 248#
241# Networking options 249# Networking options
242# 250#
243# CONFIG_NETDEBUG is not set
244CONFIG_PACKET=y 251CONFIG_PACKET=y
245CONFIG_PACKET_MMAP=y 252CONFIG_PACKET_MMAP=y
246CONFIG_UNIX=y 253CONFIG_UNIX=y
254CONFIG_XFRM=y
255# CONFIG_XFRM_USER is not set
256# CONFIG_XFRM_SUB_POLICY is not set
257# CONFIG_XFRM_MIGRATE is not set
247# CONFIG_NET_KEY is not set 258# CONFIG_NET_KEY is not set
248CONFIG_INET=y 259CONFIG_INET=y
249# CONFIG_IP_MULTICAST is not set 260# CONFIG_IP_MULTICAST is not set
@@ -261,7 +272,7 @@ CONFIG_IP_PNP_DHCP=y
261# CONFIG_INET_ESP is not set 272# CONFIG_INET_ESP is not set
262# CONFIG_INET_IPCOMP is not set 273# CONFIG_INET_IPCOMP is not set
263# CONFIG_INET_XFRM_TUNNEL is not set 274# CONFIG_INET_XFRM_TUNNEL is not set
264# CONFIG_INET_TUNNEL is not set 275CONFIG_INET_TUNNEL=y
265# CONFIG_INET_XFRM_MODE_TRANSPORT is not set 276# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
266# CONFIG_INET_XFRM_MODE_TUNNEL is not set 277# CONFIG_INET_XFRM_MODE_TUNNEL is not set
267# CONFIG_INET_XFRM_MODE_BEET is not set 278# CONFIG_INET_XFRM_MODE_BEET is not set
@@ -270,9 +281,23 @@ CONFIG_IP_PNP_DHCP=y
270CONFIG_TCP_CONG_CUBIC=y 281CONFIG_TCP_CONG_CUBIC=y
271CONFIG_DEFAULT_TCP_CONG="cubic" 282CONFIG_DEFAULT_TCP_CONG="cubic"
272# CONFIG_TCP_MD5SIG is not set 283# CONFIG_TCP_MD5SIG is not set
273# CONFIG_IPV6 is not set 284CONFIG_IPV6=y
285# CONFIG_IPV6_PRIVACY is not set
286# CONFIG_IPV6_ROUTER_PREF is not set
287# CONFIG_IPV6_OPTIMISTIC_DAD is not set
288# CONFIG_INET6_AH is not set
289# CONFIG_INET6_ESP is not set
290# CONFIG_INET6_IPCOMP is not set
291# CONFIG_IPV6_MIP6 is not set
274# CONFIG_INET6_XFRM_TUNNEL is not set 292# CONFIG_INET6_XFRM_TUNNEL is not set
275# CONFIG_INET6_TUNNEL is not set 293# CONFIG_INET6_TUNNEL is not set
294CONFIG_INET6_XFRM_MODE_TRANSPORT=y
295CONFIG_INET6_XFRM_MODE_TUNNEL=y
296CONFIG_INET6_XFRM_MODE_BEET=y
297# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
298CONFIG_IPV6_SIT=y
299# CONFIG_IPV6_TUNNEL is not set
300# CONFIG_IPV6_MULTIPLE_TABLES is not set
276# CONFIG_NETWORK_SECMARK is not set 301# CONFIG_NETWORK_SECMARK is not set
277# CONFIG_NETFILTER is not set 302# CONFIG_NETFILTER is not set
278 303
@@ -313,7 +338,31 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
313# CONFIG_NET_PKTGEN is not set 338# CONFIG_NET_PKTGEN is not set
314# CONFIG_HAMRADIO is not set 339# CONFIG_HAMRADIO is not set
315# CONFIG_IRDA is not set 340# CONFIG_IRDA is not set
316# CONFIG_BT is not set 341CONFIG_BT=m
342CONFIG_BT_L2CAP=m
343CONFIG_BT_SCO=m
344CONFIG_BT_RFCOMM=m
345# CONFIG_BT_RFCOMM_TTY is not set
346# CONFIG_BT_BNEP is not set
347CONFIG_BT_HIDP=m
348
349#
350# Bluetooth device drivers
351#
352CONFIG_BT_HCIUSB=m
353CONFIG_BT_HCIUSB_SCO=y
354# CONFIG_BT_HCIUART is not set
355# CONFIG_BT_HCIBCM203X is not set
356# CONFIG_BT_HCIBPA10X is not set
357# CONFIG_BT_HCIBFUSB is not set
358# CONFIG_BT_HCIVHCI is not set
359# CONFIG_AF_RXRPC is not set
360
361#
362# Wireless
363#
364# CONFIG_CFG80211 is not set
365CONFIG_WIRELESS_EXT=y
317# CONFIG_IEEE80211 is not set 366# CONFIG_IEEE80211 is not set
318 367
319# 368#
@@ -327,16 +376,13 @@ CONFIG_STANDALONE=y
327CONFIG_PREVENT_FIRMWARE_BUILD=y 376CONFIG_PREVENT_FIRMWARE_BUILD=y
328# CONFIG_FW_LOADER is not set 377# CONFIG_FW_LOADER is not set
329# CONFIG_DEBUG_DRIVER is not set 378# CONFIG_DEBUG_DRIVER is not set
379# CONFIG_DEBUG_DEVRES is not set
330# CONFIG_SYS_HYPERVISOR is not set 380# CONFIG_SYS_HYPERVISOR is not set
331 381
332# 382#
333# Connector - unified userspace <-> kernelspace linker 383# Connector - unified userspace <-> kernelspace linker
334# 384#
335# CONFIG_CONNECTOR is not set 385# CONFIG_CONNECTOR is not set
336
337#
338# Memory Technology Devices (MTD)
339#
340# CONFIG_MTD is not set 386# CONFIG_MTD is not set
341 387
342# 388#
@@ -347,24 +393,27 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
347# 393#
348# Plug and Play support 394# Plug and Play support
349# 395#
396# CONFIG_PNPACPI is not set
350 397
351# 398#
352# Block devices 399# Block devices
353# 400#
354# CONFIG_BLK_DEV_FD is not set 401# CONFIG_BLK_DEV_FD is not set
355# CONFIG_BLK_DEV_COW_COMMON is not set 402# CONFIG_BLK_DEV_COW_COMMON is not set
356# CONFIG_BLK_DEV_LOOP is not set 403CONFIG_BLK_DEV_LOOP=y
404# CONFIG_BLK_DEV_CRYPTOLOOP is not set
357# CONFIG_BLK_DEV_NBD is not set 405# CONFIG_BLK_DEV_NBD is not set
358# CONFIG_BLK_DEV_UB is not set 406# CONFIG_BLK_DEV_UB is not set
359# CONFIG_BLK_DEV_RAM is not set 407CONFIG_BLK_DEV_RAM=y
360# CONFIG_BLK_DEV_INITRD is not set 408CONFIG_BLK_DEV_RAM_COUNT=16
409CONFIG_BLK_DEV_RAM_SIZE=65535
410CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
361# CONFIG_CDROM_PKTCDVD is not set 411# CONFIG_CDROM_PKTCDVD is not set
362# CONFIG_ATA_OVER_ETH is not set 412# CONFIG_ATA_OVER_ETH is not set
363 413
364# 414#
365# Misc devices 415# Misc devices
366# 416#
367# CONFIG_TIFM_CORE is not set
368 417
369# 418#
370# ATA/ATAPI/MFM/RLL support 419# ATA/ATAPI/MFM/RLL support
@@ -388,7 +437,7 @@ CONFIG_BLK_DEV_SD=y
388# CONFIG_CHR_DEV_OSST is not set 437# CONFIG_CHR_DEV_OSST is not set
389CONFIG_BLK_DEV_SR=y 438CONFIG_BLK_DEV_SR=y
390# CONFIG_BLK_DEV_SR_VENDOR is not set 439# CONFIG_BLK_DEV_SR_VENDOR is not set
391# CONFIG_CHR_DEV_SG is not set 440CONFIG_CHR_DEV_SG=m
392# CONFIG_CHR_DEV_SCH is not set 441# CONFIG_CHR_DEV_SCH is not set
393 442
394# 443#
@@ -413,6 +462,7 @@ CONFIG_BLK_DEV_SR=y
413# 462#
414# CONFIG_ISCSI_TCP is not set 463# CONFIG_ISCSI_TCP is not set
415# CONFIG_SCSI_DEBUG is not set 464# CONFIG_SCSI_DEBUG is not set
465# CONFIG_SCSI_ESP_CORE is not set
416 466
417# 467#
418# Serial ATA (prod) and Parallel ATA (experimental) drivers 468# Serial ATA (prod) and Parallel ATA (experimental) drivers
@@ -460,7 +510,7 @@ CONFIG_NETDEVICES=y
460# Ethernet (10 or 100Mbit) 510# Ethernet (10 or 100Mbit)
461# 511#
462# CONFIG_NET_ETHERNET is not set 512# CONFIG_NET_ETHERNET is not set
463CONFIG_MII=y 513CONFIG_MII=m
464 514
465# 515#
466# Ethernet (1000 Mbit) 516# Ethernet (1000 Mbit)
@@ -475,9 +525,10 @@ CONFIG_MII=y
475# 525#
476 526
477# 527#
478# Wireless LAN (non-hamradio) 528# Wireless LAN
479# 529#
480# CONFIG_NET_RADIO is not set 530# CONFIG_WLAN_PRE80211 is not set
531# CONFIG_WLAN_80211 is not set
481 532
482# 533#
483# Wan interfaces 534# Wan interfaces
@@ -551,7 +602,8 @@ CONFIG_HW_CONSOLE=y
551# Non-8250 serial port support 602# Non-8250 serial port support
552# 603#
553CONFIG_UNIX98_PTYS=y 604CONFIG_UNIX98_PTYS=y
554# CONFIG_LEGACY_PTYS is not set 605CONFIG_LEGACY_PTYS=y
606CONFIG_LEGACY_PTY_COUNT=16
555 607
556# 608#
557# IPMI 609# IPMI
@@ -598,6 +650,11 @@ CONFIG_GEN_RTC=y
598# CONFIG_HWMON_VID is not set 650# CONFIG_HWMON_VID is not set
599 651
600# 652#
653# Multifunction device drivers
654#
655# CONFIG_MFD_SM501 is not set
656
657#
601# Multimedia devices 658# Multimedia devices
602# 659#
603# CONFIG_VIDEO_DEV is not set 660# CONFIG_VIDEO_DEV is not set
@@ -611,15 +668,22 @@ CONFIG_GEN_RTC=y
611# 668#
612# Graphics support 669# Graphics support
613# 670#
614# CONFIG_FIRMWARE_EDID is not set 671# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
615CONFIG_FB=y 672CONFIG_FB=y
673# CONFIG_FIRMWARE_EDID is not set
674# CONFIG_FB_DDC is not set
616CONFIG_FB_CFB_FILLRECT=y 675CONFIG_FB_CFB_FILLRECT=y
617CONFIG_FB_CFB_COPYAREA=y 676CONFIG_FB_CFB_COPYAREA=y
618CONFIG_FB_CFB_IMAGEBLIT=y 677CONFIG_FB_CFB_IMAGEBLIT=y
678# CONFIG_FB_SVGALIB is not set
619# CONFIG_FB_MACMODES is not set 679# CONFIG_FB_MACMODES is not set
620# CONFIG_FB_BACKLIGHT is not set 680# CONFIG_FB_BACKLIGHT is not set
621# CONFIG_FB_MODE_HELPERS is not set 681# CONFIG_FB_MODE_HELPERS is not set
622# CONFIG_FB_TILEBLITTING is not set 682# CONFIG_FB_TILEBLITTING is not set
683
684#
685# Frame buffer hardware drivers
686#
623# CONFIG_FB_OF is not set 687# CONFIG_FB_OF is not set
624# CONFIG_FB_VGA16 is not set 688# CONFIG_FB_VGA16 is not set
625# CONFIG_FB_S1D13XXX is not set 689# CONFIG_FB_S1D13XXX is not set
@@ -634,7 +698,7 @@ CONFIG_FB_PS3_DEFAULT_SIZE_M=18
634# CONFIG_VGA_CONSOLE is not set 698# CONFIG_VGA_CONSOLE is not set
635CONFIG_DUMMY_CONSOLE=y 699CONFIG_DUMMY_CONSOLE=y
636CONFIG_FRAMEBUFFER_CONSOLE=y 700CONFIG_FRAMEBUFFER_CONSOLE=y
637# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set 701CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
638# CONFIG_FONTS is not set 702# CONFIG_FONTS is not set
639CONFIG_FONT_8x8=y 703CONFIG_FONT_8x8=y
640CONFIG_FONT_8x16=y 704CONFIG_FONT_8x16=y
@@ -646,17 +710,62 @@ CONFIG_LOGO=y
646# CONFIG_LOGO_LINUX_MONO is not set 710# CONFIG_LOGO_LINUX_MONO is not set
647# CONFIG_LOGO_LINUX_VGA16 is not set 711# CONFIG_LOGO_LINUX_VGA16 is not set
648CONFIG_LOGO_LINUX_CLUT224=y 712CONFIG_LOGO_LINUX_CLUT224=y
649# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
650 713
651# 714#
652# Sound 715# Sound
653# 716#
654# CONFIG_SOUND is not set 717CONFIG_SOUND=y
718
719#
720# Advanced Linux Sound Architecture
721#
722CONFIG_SND=y
723# CONFIG_SND_SEQUENCER is not set
724# CONFIG_SND_MIXER_OSS is not set
725# CONFIG_SND_PCM_OSS is not set
726# CONFIG_SND_DYNAMIC_MINORS is not set
727CONFIG_SND_SUPPORT_OLD_API=y
728CONFIG_SND_VERBOSE_PROCFS=y
729# CONFIG_SND_VERBOSE_PRINTK is not set
730# CONFIG_SND_DEBUG is not set
731
732#
733# Generic devices
734#
735# CONFIG_SND_DUMMY is not set
736# CONFIG_SND_MTPAV is not set
737# CONFIG_SND_SERIAL_U16550 is not set
738# CONFIG_SND_MPU401 is not set
739
740#
741# ALSA PowerMac devices
742#
743
744#
745# ALSA PowerMac requires I2C
746#
747
748#
749# USB devices
750#
751# CONFIG_SND_USB_AUDIO is not set
752# CONFIG_SND_USB_USX2Y is not set
753
754#
755# SoC audio support
756#
757# CONFIG_SND_SOC is not set
758
759#
760# Open Sound System
761#
762# CONFIG_SOUND_PRIME is not set
655 763
656# 764#
657# HID Devices 765# HID Devices
658# 766#
659CONFIG_HID=y 767CONFIG_HID=y
768# CONFIG_HID_DEBUG is not set
660 769
661# 770#
662# USB support 771# USB support
@@ -665,13 +774,13 @@ CONFIG_USB_ARCH_HAS_HCD=y
665CONFIG_USB_ARCH_HAS_OHCI=y 774CONFIG_USB_ARCH_HAS_OHCI=y
666CONFIG_USB_ARCH_HAS_EHCI=y 775CONFIG_USB_ARCH_HAS_EHCI=y
667CONFIG_USB=y 776CONFIG_USB=y
668CONFIG_USB_DEBUG=y 777# CONFIG_USB_DEBUG is not set
669 778
670# 779#
671# Miscellaneous USB options 780# Miscellaneous USB options
672# 781#
673# CONFIG_USB_DEVICEFS is not set 782CONFIG_USB_DEVICEFS=y
674# CONFIG_USB_BANDWIDTH is not set 783# CONFIG_USB_DEVICE_CLASS is not set
675# CONFIG_USB_DYNAMIC_MINORS is not set 784# CONFIG_USB_DYNAMIC_MINORS is not set
676# CONFIG_USB_OTG is not set 785# CONFIG_USB_OTG is not set
677 786
@@ -704,7 +813,7 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
704# 813#
705# may also be needed; see USB_STORAGE Help for more information 814# may also be needed; see USB_STORAGE Help for more information
706# 815#
707CONFIG_USB_STORAGE=y 816CONFIG_USB_STORAGE=m
708# CONFIG_USB_STORAGE_DEBUG is not set 817# CONFIG_USB_STORAGE_DEBUG is not set
709# CONFIG_USB_STORAGE_DATAFAB is not set 818# CONFIG_USB_STORAGE_DATAFAB is not set
710# CONFIG_USB_STORAGE_FREECOM is not set 819# CONFIG_USB_STORAGE_FREECOM is not set
@@ -720,10 +829,16 @@ CONFIG_USB_STORAGE=y
720# 829#
721# USB Input Devices 830# USB Input Devices
722# 831#
723CONFIG_USB_HID=y 832CONFIG_USB_HID=m
724# CONFIG_USB_HIDINPUT_POWERBOOK is not set 833# CONFIG_USB_HIDINPUT_POWERBOOK is not set
725# CONFIG_HID_FF is not set 834# CONFIG_HID_FF is not set
726# CONFIG_USB_HIDDEV is not set 835# CONFIG_USB_HIDDEV is not set
836
837#
838# USB HID Boot Protocol drivers
839#
840# CONFIG_USB_KBD is not set
841# CONFIG_USB_MOUSE is not set
727# CONFIG_USB_AIPTEK is not set 842# CONFIG_USB_AIPTEK is not set
728# CONFIG_USB_WACOM is not set 843# CONFIG_USB_WACOM is not set
729# CONFIG_USB_ACECAD is not set 844# CONFIG_USB_ACECAD is not set
@@ -736,6 +851,7 @@ CONFIG_USB_HID=y
736# CONFIG_USB_ATI_REMOTE2 is not set 851# CONFIG_USB_ATI_REMOTE2 is not set
737# CONFIG_USB_KEYSPAN_REMOTE is not set 852# CONFIG_USB_KEYSPAN_REMOTE is not set
738# CONFIG_USB_APPLETOUCH is not set 853# CONFIG_USB_APPLETOUCH is not set
854# CONFIG_USB_GTCO is not set
739 855
740# 856#
741# USB Imaging devices 857# USB Imaging devices
@@ -748,15 +864,16 @@ CONFIG_USB_HID=y
748# 864#
749# CONFIG_USB_CATC is not set 865# CONFIG_USB_CATC is not set
750# CONFIG_USB_KAWETH is not set 866# CONFIG_USB_KAWETH is not set
751# CONFIG_USB_PEGASUS is not set 867CONFIG_USB_PEGASUS=m
752# CONFIG_USB_RTL8150 is not set 868# CONFIG_USB_RTL8150 is not set
753CONFIG_USB_USBNET_MII=y 869CONFIG_USB_USBNET_MII=m
754CONFIG_USB_USBNET=y 870CONFIG_USB_USBNET=m
755CONFIG_USB_NET_CDCETHER=y 871# CONFIG_USB_NET_CDCETHER is not set
872# CONFIG_USB_NET_DM9601 is not set
756# CONFIG_USB_NET_GL620A is not set 873# CONFIG_USB_NET_GL620A is not set
757# CONFIG_USB_NET_NET1080 is not set 874# CONFIG_USB_NET_NET1080 is not set
758# CONFIG_USB_NET_PLUSB is not set 875# CONFIG_USB_NET_PLUSB is not set
759CONFIG_USB_NET_MCS7830=y 876CONFIG_USB_NET_MCS7830=m
760# CONFIG_USB_NET_RNDIS_HOST is not set 877# CONFIG_USB_NET_RNDIS_HOST is not set
761# CONFIG_USB_NET_CDC_SUBSET is not set 878# CONFIG_USB_NET_CDC_SUBSET is not set
762# CONFIG_USB_NET_ZAURUS is not set 879# CONFIG_USB_NET_ZAURUS is not set
@@ -781,6 +898,7 @@ CONFIG_USB_MON=y
781# CONFIG_USB_RIO500 is not set 898# CONFIG_USB_RIO500 is not set
782# CONFIG_USB_LEGOTOWER is not set 899# CONFIG_USB_LEGOTOWER is not set
783# CONFIG_USB_LCD is not set 900# CONFIG_USB_LCD is not set
901# CONFIG_USB_BERRY_CHARGE is not set
784# CONFIG_USB_LED is not set 902# CONFIG_USB_LED is not set
785# CONFIG_USB_CYPRESS_CY7C63 is not set 903# CONFIG_USB_CYPRESS_CY7C63 is not set
786# CONFIG_USB_CYTHERM is not set 904# CONFIG_USB_CYTHERM is not set
@@ -791,6 +909,8 @@ CONFIG_USB_MON=y
791# CONFIG_USB_SISUSBVGA is not set 909# CONFIG_USB_SISUSBVGA is not set
792# CONFIG_USB_LD is not set 910# CONFIG_USB_LD is not set
793# CONFIG_USB_TRANCEVIBRATOR is not set 911# CONFIG_USB_TRANCEVIBRATOR is not set
912# CONFIG_USB_IOWARRIOR is not set
913# CONFIG_USB_TEST is not set
794 914
795# 915#
796# USB DSL modem support 916# USB DSL modem support
@@ -846,13 +966,19 @@ CONFIG_USB_MON=y
846# 966#
847 967
848# 968#
969# Auxiliary Display support
970#
971
972#
849# Virtualization 973# Virtualization
850# 974#
851 975
852# 976#
853# File systems 977# File systems
854# 978#
855# CONFIG_EXT2_FS is not set 979CONFIG_EXT2_FS=m
980# CONFIG_EXT2_FS_XATTR is not set
981# CONFIG_EXT2_FS_XIP is not set
856CONFIG_EXT3_FS=y 982CONFIG_EXT3_FS=y
857CONFIG_EXT3_FS_XATTR=y 983CONFIG_EXT3_FS_XATTR=y
858# CONFIG_EXT3_FS_POSIX_ACL is not set 984# CONFIG_EXT3_FS_POSIX_ACL is not set
@@ -871,27 +997,30 @@ CONFIG_FS_MBCACHE=y
871# CONFIG_ROMFS_FS is not set 997# CONFIG_ROMFS_FS is not set
872CONFIG_INOTIFY=y 998CONFIG_INOTIFY=y
873CONFIG_INOTIFY_USER=y 999CONFIG_INOTIFY_USER=y
874# CONFIG_QUOTA is not set 1000CONFIG_QUOTA=y
1001# CONFIG_QFMT_V1 is not set
1002CONFIG_QFMT_V2=y
1003CONFIG_QUOTACTL=y
875CONFIG_DNOTIFY=y 1004CONFIG_DNOTIFY=y
876# CONFIG_AUTOFS_FS is not set 1005# CONFIG_AUTOFS_FS is not set
877# CONFIG_AUTOFS4_FS is not set 1006CONFIG_AUTOFS4_FS=y
878# CONFIG_FUSE_FS is not set 1007# CONFIG_FUSE_FS is not set
879 1008
880# 1009#
881# CD-ROM/DVD Filesystems 1010# CD-ROM/DVD Filesystems
882# 1011#
883CONFIG_ISO9660_FS=y 1012CONFIG_ISO9660_FS=m
884CONFIG_JOLIET=y 1013CONFIG_JOLIET=y
885# CONFIG_ZISOFS is not set 1014# CONFIG_ZISOFS is not set
886CONFIG_UDF_FS=y 1015CONFIG_UDF_FS=m
887CONFIG_UDF_NLS=y 1016CONFIG_UDF_NLS=y
888 1017
889# 1018#
890# DOS/FAT/NT Filesystems 1019# DOS/FAT/NT Filesystems
891# 1020#
892CONFIG_FAT_FS=y 1021CONFIG_FAT_FS=m
893# CONFIG_MSDOS_FS is not set 1022# CONFIG_MSDOS_FS is not set
894CONFIG_VFAT_FS=y 1023CONFIG_VFAT_FS=m
895CONFIG_FAT_DEFAULT_CODEPAGE=437 1024CONFIG_FAT_DEFAULT_CODEPAGE=437
896CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" 1025CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
897# CONFIG_NTFS_FS is not set 1026# CONFIG_NTFS_FS is not set
@@ -933,7 +1062,7 @@ CONFIG_RAMFS=y
933CONFIG_NFS_FS=y 1062CONFIG_NFS_FS=y
934CONFIG_NFS_V3=y 1063CONFIG_NFS_V3=y
935# CONFIG_NFS_V3_ACL is not set 1064# CONFIG_NFS_V3_ACL is not set
936# CONFIG_NFS_V4 is not set 1065CONFIG_NFS_V4=y
937# CONFIG_NFS_DIRECTIO is not set 1066# CONFIG_NFS_DIRECTIO is not set
938# CONFIG_NFSD is not set 1067# CONFIG_NFSD is not set
939CONFIG_ROOT_NFS=y 1068CONFIG_ROOT_NFS=y
@@ -941,10 +1070,16 @@ CONFIG_LOCKD=y
941CONFIG_LOCKD_V4=y 1070CONFIG_LOCKD_V4=y
942CONFIG_NFS_COMMON=y 1071CONFIG_NFS_COMMON=y
943CONFIG_SUNRPC=y 1072CONFIG_SUNRPC=y
944# CONFIG_RPCSEC_GSS_KRB5 is not set 1073CONFIG_SUNRPC_GSS=y
1074CONFIG_RPCSEC_GSS_KRB5=y
945# CONFIG_RPCSEC_GSS_SPKM3 is not set 1075# CONFIG_RPCSEC_GSS_SPKM3 is not set
946# CONFIG_SMB_FS is not set 1076# CONFIG_SMB_FS is not set
947# CONFIG_CIFS is not set 1077CONFIG_CIFS=m
1078# CONFIG_CIFS_STATS is not set
1079# CONFIG_CIFS_WEAK_PW_HASH is not set
1080# CONFIG_CIFS_XATTR is not set
1081# CONFIG_CIFS_DEBUG2 is not set
1082# CONFIG_CIFS_EXPERIMENTAL is not set
948# CONFIG_NCP_FS is not set 1083# CONFIG_NCP_FS is not set
949# CONFIG_CODA_FS is not set 1084# CONFIG_CODA_FS is not set
950# CONFIG_AFS_FS is not set 1085# CONFIG_AFS_FS is not set
@@ -1004,6 +1139,8 @@ CONFIG_NLS_ISO8859_1=y
1004# Distributed Lock Manager 1139# Distributed Lock Manager
1005# 1140#
1006# CONFIG_DLM is not set 1141# CONFIG_DLM is not set
1142# CONFIG_UCC_SLOW is not set
1143# CONFIG_UCC_FAST is not set
1007 1144
1008# 1145#
1009# Library routines 1146# Library routines
@@ -1014,7 +1151,8 @@ CONFIG_BITREVERSE=y
1014CONFIG_CRC32=y 1151CONFIG_CRC32=y
1015# CONFIG_LIBCRC32C is not set 1152# CONFIG_LIBCRC32C is not set
1016CONFIG_PLIST=y 1153CONFIG_PLIST=y
1017CONFIG_IOMAP_COPY=y 1154CONFIG_HAS_IOMEM=y
1155CONFIG_HAS_IOPORT=y
1018 1156
1019# 1157#
1020# Instrumentation Support 1158# Instrumentation Support
@@ -1032,16 +1170,16 @@ CONFIG_ENABLE_MUST_CHECK=y
1032# CONFIG_DEBUG_FS is not set 1170# CONFIG_DEBUG_FS is not set
1033# CONFIG_HEADERS_CHECK is not set 1171# CONFIG_HEADERS_CHECK is not set
1034CONFIG_DEBUG_KERNEL=y 1172CONFIG_DEBUG_KERNEL=y
1173# CONFIG_DEBUG_SHIRQ is not set
1035CONFIG_LOG_BUF_SHIFT=17 1174CONFIG_LOG_BUF_SHIFT=17
1036CONFIG_DETECT_SOFTLOCKUP=y 1175CONFIG_DETECT_SOFTLOCKUP=y
1037# CONFIG_SCHEDSTATS is not set 1176# CONFIG_SCHEDSTATS is not set
1038CONFIG_DEBUG_SLAB=y 1177# CONFIG_TIMER_STATS is not set
1039# CONFIG_DEBUG_SLAB_LEAK is not set 1178# CONFIG_DEBUG_SLAB is not set
1040# CONFIG_DEBUG_RT_MUTEXES is not set 1179# CONFIG_DEBUG_RT_MUTEXES is not set
1041# CONFIG_RT_MUTEX_TESTER is not set 1180# CONFIG_RT_MUTEX_TESTER is not set
1042CONFIG_DEBUG_SPINLOCK=y 1181CONFIG_DEBUG_SPINLOCK=y
1043CONFIG_DEBUG_MUTEXES=y 1182CONFIG_DEBUG_MUTEXES=y
1044CONFIG_DEBUG_RWSEMS=y
1045CONFIG_DEBUG_SPINLOCK_SLEEP=y 1183CONFIG_DEBUG_SPINLOCK_SLEEP=y
1046# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set 1184# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
1047# CONFIG_DEBUG_KOBJECT is not set 1185# CONFIG_DEBUG_KOBJECT is not set
@@ -1051,8 +1189,10 @@ CONFIG_DEBUG_INFO=y
1051CONFIG_DEBUG_LIST=y 1189CONFIG_DEBUG_LIST=y
1052CONFIG_FORCED_INLINING=y 1190CONFIG_FORCED_INLINING=y
1053# CONFIG_RCU_TORTURE_TEST is not set 1191# CONFIG_RCU_TORTURE_TEST is not set
1192# CONFIG_FAULT_INJECTION is not set
1054CONFIG_DEBUG_STACKOVERFLOW=y 1193CONFIG_DEBUG_STACKOVERFLOW=y
1055# CONFIG_DEBUG_STACK_USAGE is not set 1194# CONFIG_DEBUG_STACK_USAGE is not set
1195# CONFIG_DEBUG_PAGEALLOC is not set
1056# CONFIG_DEBUGGER is not set 1196# CONFIG_DEBUGGER is not set
1057CONFIG_IRQSTACKS=y 1197CONFIG_IRQSTACKS=y
1058# CONFIG_BOOTX_TEXT is not set 1198# CONFIG_BOOTX_TEXT is not set
@@ -1063,6 +1203,8 @@ CONFIG_PPC_EARLY_DEBUG=y
1063# CONFIG_PPC_EARLY_DEBUG_RTAS_CONSOLE is not set 1203# CONFIG_PPC_EARLY_DEBUG_RTAS_CONSOLE is not set
1064# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set 1204# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
1065# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set 1205# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
1206# CONFIG_PPC_EARLY_DEBUG_PAS_REALMODE is not set
1207# CONFIG_PPC_EARLY_DEBUG_BEAT is not set
1066 1208
1067# 1209#
1068# Security options 1210# Security options
@@ -1073,4 +1215,43 @@ CONFIG_PPC_EARLY_DEBUG=y
1073# 1215#
1074# Cryptographic options 1216# Cryptographic options
1075# 1217#
1076# CONFIG_CRYPTO is not set 1218CONFIG_CRYPTO=y
1219CONFIG_CRYPTO_ALGAPI=y
1220CONFIG_CRYPTO_BLKCIPHER=y
1221CONFIG_CRYPTO_MANAGER=y
1222# CONFIG_CRYPTO_HMAC is not set
1223# CONFIG_CRYPTO_XCBC is not set
1224# CONFIG_CRYPTO_NULL is not set
1225# CONFIG_CRYPTO_MD4 is not set
1226CONFIG_CRYPTO_MD5=y
1227# CONFIG_CRYPTO_SHA1 is not set
1228# CONFIG_CRYPTO_SHA256 is not set
1229# CONFIG_CRYPTO_SHA512 is not set
1230# CONFIG_CRYPTO_WP512 is not set
1231# CONFIG_CRYPTO_TGR192 is not set
1232# CONFIG_CRYPTO_GF128MUL is not set
1233CONFIG_CRYPTO_ECB=m
1234CONFIG_CRYPTO_CBC=y
1235CONFIG_CRYPTO_PCBC=m
1236# CONFIG_CRYPTO_LRW is not set
1237CONFIG_CRYPTO_DES=y
1238# CONFIG_CRYPTO_FCRYPT is not set
1239# CONFIG_CRYPTO_BLOWFISH is not set
1240# CONFIG_CRYPTO_TWOFISH is not set
1241# CONFIG_CRYPTO_SERPENT is not set
1242# CONFIG_CRYPTO_AES is not set
1243# CONFIG_CRYPTO_CAST5 is not set
1244# CONFIG_CRYPTO_CAST6 is not set
1245# CONFIG_CRYPTO_TEA is not set
1246# CONFIG_CRYPTO_ARC4 is not set
1247# CONFIG_CRYPTO_KHAZAD is not set
1248# CONFIG_CRYPTO_ANUBIS is not set
1249# CONFIG_CRYPTO_DEFLATE is not set
1250# CONFIG_CRYPTO_MICHAEL_MIC is not set
1251# CONFIG_CRYPTO_CRC32C is not set
1252# CONFIG_CRYPTO_CAMELLIA is not set
1253# CONFIG_CRYPTO_TEST is not set
1254
1255#
1256# Hardware crypto devices
1257#
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
index aa693d0f151a..3e779f07f21b 100644
--- a/arch/powerpc/kernel/Makefile
+++ b/arch/powerpc/kernel/Makefile
@@ -36,8 +36,9 @@ obj-$(CONFIG_GENERIC_TBSYNC) += smp-tbsync.o
36obj-$(CONFIG_CRASH_DUMP) += crash_dump.o 36obj-$(CONFIG_CRASH_DUMP) += crash_dump.o
37obj-$(CONFIG_6xx) += idle_6xx.o l2cr_6xx.o cpu_setup_6xx.o 37obj-$(CONFIG_6xx) += idle_6xx.o l2cr_6xx.o cpu_setup_6xx.o
38obj-$(CONFIG_TAU) += tau_6xx.o 38obj-$(CONFIG_TAU) += tau_6xx.o
39obj-$(CONFIG_SOFTWARE_SUSPEND) += swsusp.o suspend.o
39obj32-$(CONFIG_SOFTWARE_SUSPEND) += swsusp_32.o 40obj32-$(CONFIG_SOFTWARE_SUSPEND) += swsusp_32.o
40obj-$(CONFIG_SOFTWARE_SUSPEND) += suspend.o 41obj64-$(CONFIG_SOFTWARE_SUSPEND) += swsusp_64.o swsusp_asm64.o
41obj32-$(CONFIG_MODULES) += module_32.o 42obj32-$(CONFIG_MODULES) += module_32.o
42 43
43ifeq ($(CONFIG_PPC_MERGE),y) 44ifeq ($(CONFIG_PPC_MERGE),y)
@@ -67,6 +68,7 @@ obj-$(CONFIG_MODULES) += $(module-y)
67pci64-$(CONFIG_PPC64) += pci_64.o pci_dn.o 68pci64-$(CONFIG_PPC64) += pci_64.o pci_dn.o
68pci32-$(CONFIG_PPC32) := pci_32.o 69pci32-$(CONFIG_PPC32) := pci_32.o
69obj-$(CONFIG_PCI) += $(pci64-y) $(pci32-y) 70obj-$(CONFIG_PCI) += $(pci64-y) $(pci32-y)
71obj-$(CONFIG_PCI_MSI) += msi.o
70kexec-$(CONFIG_PPC64) := machine_kexec_64.o 72kexec-$(CONFIG_PPC64) := machine_kexec_64.o
71kexec-$(CONFIG_PPC32) := machine_kexec_32.o 73kexec-$(CONFIG_PPC32) := machine_kexec_32.o
72obj-$(CONFIG_KEXEC) += machine_kexec.o crash.o $(kexec-y) 74obj-$(CONFIG_KEXEC) += machine_kexec.o crash.o $(kexec-y)
diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c
index 0c5150c69175..8f48560b7ee2 100644
--- a/arch/powerpc/kernel/asm-offsets.c
+++ b/arch/powerpc/kernel/asm-offsets.c
@@ -21,12 +21,12 @@
21#include <linux/types.h> 21#include <linux/types.h>
22#include <linux/mman.h> 22#include <linux/mman.h>
23#include <linux/mm.h> 23#include <linux/mm.h>
24#include <linux/suspend.h>
24#ifdef CONFIG_PPC64 25#ifdef CONFIG_PPC64
25#include <linux/time.h> 26#include <linux/time.h>
26#include <linux/hardirq.h> 27#include <linux/hardirq.h>
27#else 28#else
28#include <linux/ptrace.h> 29#include <linux/ptrace.h>
29#include <linux/suspend.h>
30#endif 30#endif
31 31
32#include <asm/io.h> 32#include <asm/io.h>
@@ -257,11 +257,11 @@ int main(void)
257 DEFINE(CPU_SPEC_SETUP, offsetof(struct cpu_spec, cpu_setup)); 257 DEFINE(CPU_SPEC_SETUP, offsetof(struct cpu_spec, cpu_setup));
258 DEFINE(CPU_SPEC_RESTORE, offsetof(struct cpu_spec, cpu_restore)); 258 DEFINE(CPU_SPEC_RESTORE, offsetof(struct cpu_spec, cpu_restore));
259 259
260#ifndef CONFIG_PPC64
261 DEFINE(pbe_address, offsetof(struct pbe, address)); 260 DEFINE(pbe_address, offsetof(struct pbe, address));
262 DEFINE(pbe_orig_address, offsetof(struct pbe, orig_address)); 261 DEFINE(pbe_orig_address, offsetof(struct pbe, orig_address));
263 DEFINE(pbe_next, offsetof(struct pbe, next)); 262 DEFINE(pbe_next, offsetof(struct pbe, next));
264 263
264#ifndef CONFIG_PPC64
265 DEFINE(TASK_SIZE, TASK_SIZE); 265 DEFINE(TASK_SIZE, TASK_SIZE);
266 DEFINE(NUM_USER_SEGMENTS, TASK_SIZE>>28); 266 DEFINE(NUM_USER_SEGMENTS, TASK_SIZE>>28);
267#endif /* ! CONFIG_PPC64 */ 267#endif /* ! CONFIG_PPC64 */
diff --git a/arch/powerpc/kernel/head_44x.S b/arch/powerpc/kernel/head_44x.S
index a15d4b8cce48..88695963f587 100644
--- a/arch/powerpc/kernel/head_44x.S
+++ b/arch/powerpc/kernel/head_44x.S
@@ -120,8 +120,8 @@ skpinv: addi r4,r4,1 /* Increment */
120 * Configure and load pinned entry into TLB slot 63. 120 * Configure and load pinned entry into TLB slot 63.
121 */ 121 */
122 122
123 lis r3,KERNELBASE@h /* Load the kernel virtual address */ 123 lis r3,PAGE_OFFSET@h
124 ori r3,r3,KERNELBASE@l 124 ori r3,r3,PAGE_OFFSET@l
125 125
126 /* Kernel is at the base of RAM */ 126 /* Kernel is at the base of RAM */
127 li r4, 0 /* Load the kernel physical address */ 127 li r4, 0 /* Load the kernel physical address */
@@ -172,36 +172,28 @@ skpinv: addi r4,r4,1 /* Increment */
172 isync 172 isync
173 173
1744: 1744:
175#ifdef CONFIG_SERIAL_TEXT_DEBUG 175#ifdef CONFIG_PPC_EARLY_DEBUG_44x
176 /* 176 /* Add UART mapping for early debug. */
177 * Add temporary UART mapping for early debug. 177
178 * We can map UART registers wherever we want as long as they don't
179 * interfere with other system mappings (e.g. with pinned entries).
180 * For an example of how we handle this - see ocotea.h. --ebs
181 */
182 /* pageid fields */ 178 /* pageid fields */
183 lis r3,UART0_IO_BASE@h 179 lis r3,PPC44x_EARLY_DEBUG_VIRTADDR@h
184 ori r3,r3,PPC44x_TLB_VALID | PPC44x_TLB_4K 180 ori r3,r3,PPC44x_TLB_VALID|PPC44x_TLB_TS|PPC44x_TLB_64K
185 181
186 /* xlat fields */ 182 /* xlat fields */
187 lis r4,UART0_PHYS_IO_BASE@h /* RPN depends on SoC */ 183 lis r4,CONFIG_PPC_EARLY_DEBUG_44x_PHYSLOW@h
188#ifndef CONFIG_440EP 184 ori r4,r4,CONFIG_PPC_EARLY_DEBUG_44x_PHYSHIGH
189 ori r4,r4,0x0001 /* ERPN is 1 for second 4GB page */
190#endif
191 185
192 /* attrib fields */ 186 /* attrib fields */
193 li r5,0 187 li r5,(PPC44x_TLB_SW|PPC44x_TLB_SR|PPC44x_TLB_I|PPC44x_TLB_G)
194 ori r5,r5,(PPC44x_TLB_SW | PPC44x_TLB_SR | PPC44x_TLB_I | PPC44x_TLB_G) 188 li r0,62 /* TLB slot 0 */
195 189
196 li r0,0 /* TLB slot 0 */ 190 tlbwe r3,r0,PPC44x_TLB_PAGEID
197 191 tlbwe r4,r0,PPC44x_TLB_XLAT
198 tlbwe r3,r0,PPC44x_TLB_PAGEID /* Load the pageid fields */ 192 tlbwe r5,r0,PPC44x_TLB_ATTRIB
199 tlbwe r4,r0,PPC44x_TLB_XLAT /* Load the translation fields */
200 tlbwe r5,r0,PPC44x_TLB_ATTRIB /* Load the attrib/access fields */
201 193
202 /* Force context change */ 194 /* Force context change */
203 isync 195 isync
204#endif /* CONFIG_SERIAL_TEXT_DEBUG */ 196#endif /* CONFIG_PPC_EARLY_DEBUG_44x */
205 197
206 /* Establish the interrupt vector offsets */ 198 /* Establish the interrupt vector offsets */
207 SET_IVOR(0, CriticalInput); 199 SET_IVOR(0, CriticalInput);
@@ -709,16 +701,6 @@ _GLOBAL(giveup_fpu)
709 blr 701 blr
710#endif 702#endif
711 703
712/*
713 * extern void abort(void)
714 *
715 * At present, this routine just applies a system reset.
716 */
717_GLOBAL(abort)
718 mfspr r13,SPRN_DBCR0
719 oris r13,r13,DBCR0_RST_SYSTEM@h
720 mtspr SPRN_DBCR0,r13
721
722_GLOBAL(set_context) 704_GLOBAL(set_context)
723 705
724#ifdef CONFIG_BDI_SWITCH 706#ifdef CONFIG_BDI_SWITCH
diff --git a/arch/powerpc/kernel/idle.c b/arch/powerpc/kernel/idle.c
index 6e7f50967bab..a9e9cbd32975 100644
--- a/arch/powerpc/kernel/idle.c
+++ b/arch/powerpc/kernel/idle.c
@@ -33,8 +33,11 @@
33#include <asm/smp.h> 33#include <asm/smp.h>
34 34
35#ifdef CONFIG_HOTPLUG_CPU 35#ifdef CONFIG_HOTPLUG_CPU
36/* this is used for software suspend, and that shuts down
37 * CPUs even while the system is still booting... */
36#define cpu_should_die() (cpu_is_offline(smp_processor_id()) && \ 38#define cpu_should_die() (cpu_is_offline(smp_processor_id()) && \
37 system_state == SYSTEM_RUNNING) 39 (system_state == SYSTEM_RUNNING \
40 || system_state == SYSTEM_BOOTING))
38#else 41#else
39#define cpu_should_die() 0 42#define cpu_should_die() 0
40#endif 43#endif
diff --git a/arch/powerpc/kernel/idle_power4.S b/arch/powerpc/kernel/idle_power4.S
index ba3195478600..5328709eeedc 100644
--- a/arch/powerpc/kernel/idle_power4.S
+++ b/arch/powerpc/kernel/idle_power4.S
@@ -53,3 +53,24 @@ END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC)
53 isync 53 isync
54 b 1b 54 b 1b
55 55
56_GLOBAL(power4_cpu_offline_powersave)
57 /* Go to NAP now */
58 mfmsr r7
59 rldicl r0,r7,48,1
60 rotldi r0,r0,16
61 mtmsrd r0,1 /* hard-disable interrupts */
62 li r0,1
63 li r6,0
64 stb r0,PACAHARDIRQEN(r13) /* we'll hard-enable shortly */
65 stb r6,PACASOFTIRQEN(r13) /* soft-disable irqs */
66BEGIN_FTR_SECTION
67 DSSALL
68 sync
69END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC)
70 ori r7,r7,MSR_EE
71 oris r7,r7,MSR_POW@h
72 sync
73 isync
74 mtmsrd r7
75 isync
76 blr
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index 6c83fe229e60..9ed4931af164 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -67,6 +67,7 @@
67#ifdef CONFIG_PPC64 67#ifdef CONFIG_PPC64
68#include <asm/paca.h> 68#include <asm/paca.h>
69#include <asm/firmware.h> 69#include <asm/firmware.h>
70#include <asm/lv1call.h>
70#endif 71#endif
71 72
72int __irq_offset_value; 73int __irq_offset_value;
@@ -162,6 +163,16 @@ void local_irq_restore(unsigned long en)
162 local_paca->hard_enabled = en; 163 local_paca->hard_enabled = en;
163 if ((int)mfspr(SPRN_DEC) < 0) 164 if ((int)mfspr(SPRN_DEC) < 0)
164 mtspr(SPRN_DEC, 1); 165 mtspr(SPRN_DEC, 1);
166
167 /*
168 * Force the delivery of pending soft-disabled interrupts on PS3.
169 * Any HV call will have this side effect.
170 */
171 if (firmware_has_feature(FW_FEATURE_PS3_LV1)) {
172 u64 tmp;
173 lv1_get_version_info(&tmp);
174 }
175
165 hard_irq_enable(); 176 hard_irq_enable();
166} 177}
167#endif /* CONFIG_PPC64 */ 178#endif /* CONFIG_PPC64 */
@@ -947,33 +958,6 @@ arch_initcall(irq_late_init);
947 958
948#endif /* CONFIG_PPC_MERGE */ 959#endif /* CONFIG_PPC_MERGE */
949 960
950#ifdef CONFIG_PCI_MSI
951int pci_enable_msi(struct pci_dev * pdev)
952{
953 if (ppc_md.enable_msi)
954 return ppc_md.enable_msi(pdev);
955 else
956 return -1;
957}
958EXPORT_SYMBOL(pci_enable_msi);
959
960void pci_disable_msi(struct pci_dev * pdev)
961{
962 if (ppc_md.disable_msi)
963 ppc_md.disable_msi(pdev);
964}
965EXPORT_SYMBOL(pci_disable_msi);
966
967void pci_scan_msi_device(struct pci_dev *dev) {}
968int pci_enable_msix(struct pci_dev* dev, struct msix_entry *entries, int nvec) {return -1;}
969void pci_disable_msix(struct pci_dev *dev) {}
970void msi_remove_pci_irq_vectors(struct pci_dev *dev) {}
971void pci_no_msi(void) {}
972EXPORT_SYMBOL(pci_enable_msix);
973EXPORT_SYMBOL(pci_disable_msix);
974
975#endif
976
977#ifdef CONFIG_PPC64 961#ifdef CONFIG_PPC64
978static int __init setup_noirqdistrib(char *str) 962static int __init setup_noirqdistrib(char *str)
979{ 963{
diff --git a/arch/powerpc/kernel/kprobes.c b/arch/powerpc/kernel/kprobes.c
index ef647e7a9dc3..0c96611f02f4 100644
--- a/arch/powerpc/kernel/kprobes.c
+++ b/arch/powerpc/kernel/kprobes.c
@@ -30,8 +30,8 @@
30#include <linux/ptrace.h> 30#include <linux/ptrace.h>
31#include <linux/preempt.h> 31#include <linux/preempt.h>
32#include <linux/module.h> 32#include <linux/module.h>
33#include <linux/kdebug.h>
33#include <asm/cacheflush.h> 34#include <asm/cacheflush.h>
34#include <asm/kdebug.h>
35#include <asm/sstep.h> 35#include <asm/sstep.h>
36#include <asm/uaccess.h> 36#include <asm/uaccess.h>
37 37
@@ -126,22 +126,13 @@ static void __kprobes set_current_kprobe(struct kprobe *p, struct pt_regs *regs,
126} 126}
127 127
128/* Called with kretprobe_lock held */ 128/* Called with kretprobe_lock held */
129void __kprobes arch_prepare_kretprobe(struct kretprobe *rp, 129void __kprobes arch_prepare_kretprobe(struct kretprobe_instance *ri,
130 struct pt_regs *regs) 130 struct pt_regs *regs)
131{ 131{
132 struct kretprobe_instance *ri; 132 ri->ret_addr = (kprobe_opcode_t *)regs->link;
133 133
134 if ((ri = get_free_rp_inst(rp)) != NULL) { 134 /* Replace the return addr with trampoline addr */
135 ri->rp = rp; 135 regs->link = (unsigned long)kretprobe_trampoline;
136 ri->task = current;
137 ri->ret_addr = (kprobe_opcode_t *)regs->link;
138
139 /* Replace the return addr with trampoline addr */
140 regs->link = (unsigned long)kretprobe_trampoline;
141 add_rp_inst(ri);
142 } else {
143 rp->nmissed++;
144 }
145} 136}
146 137
147static int __kprobes kprobe_handler(struct pt_regs *regs) 138static int __kprobes kprobe_handler(struct pt_regs *regs)
@@ -336,7 +327,7 @@ int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)
336 break; 327 break;
337 } 328 }
338 329
339 BUG_ON(!orig_ret_address || (orig_ret_address == trampoline_address)); 330 kretprobe_assert(ri, orig_ret_address, trampoline_address);
340 regs->nip = orig_ret_address; 331 regs->nip = orig_ret_address;
341 332
342 reset_current_kprobe(); 333 reset_current_kprobe();
@@ -410,7 +401,7 @@ out:
410 return 1; 401 return 1;
411} 402}
412 403
413static int __kprobes kprobe_fault_handler(struct pt_regs *regs, int trapnr) 404int __kprobes kprobe_fault_handler(struct pt_regs *regs, int trapnr)
414{ 405{
415 struct kprobe *cur = kprobe_running(); 406 struct kprobe *cur = kprobe_running();
416 struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); 407 struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
@@ -495,14 +486,6 @@ int __kprobes kprobe_exceptions_notify(struct notifier_block *self,
495 if (post_kprobe_handler(args->regs)) 486 if (post_kprobe_handler(args->regs))
496 ret = NOTIFY_STOP; 487 ret = NOTIFY_STOP;
497 break; 488 break;
498 case DIE_PAGE_FAULT:
499 /* kprobe_running() needs smp_processor_id() */
500 preempt_disable();
501 if (kprobe_running() &&
502 kprobe_fault_handler(args->regs, args->trapnr))
503 ret = NOTIFY_STOP;
504 preempt_enable();
505 break;
506 default: 489 default:
507 break; 490 break;
508 } 491 }
@@ -559,3 +542,11 @@ int __init arch_init_kprobes(void)
559{ 542{
560 return register_kprobe(&trampoline_p); 543 return register_kprobe(&trampoline_p);
561} 544}
545
546int __kprobes arch_trampoline_kprobe(struct kprobe *p)
547{
548 if (p->addr == (kprobe_opcode_t *)&kretprobe_trampoline)
549 return 1;
550
551 return 0;
552}
diff --git a/arch/powerpc/kernel/legacy_serial.c b/arch/powerpc/kernel/legacy_serial.c
index ae4836ea7442..cea8045ba40b 100644
--- a/arch/powerpc/kernel/legacy_serial.c
+++ b/arch/powerpc/kernel/legacy_serial.c
@@ -244,9 +244,9 @@ static int __init add_legacy_pci_port(struct device_node *np,
244 * doesn't work for these settings, you'll have to add your own special 244 * doesn't work for these settings, you'll have to add your own special
245 * cases here 245 * cases here
246 */ 246 */
247 if (device_is_compatible(pci_dev, "pci13a8,152") || 247 if (of_device_is_compatible(pci_dev, "pci13a8,152") ||
248 device_is_compatible(pci_dev, "pci13a8,154") || 248 of_device_is_compatible(pci_dev, "pci13a8,154") ||
249 device_is_compatible(pci_dev, "pci13a8,158")) { 249 of_device_is_compatible(pci_dev, "pci13a8,158")) {
250 addr += 0x200 * lindex; 250 addr += 0x200 * lindex;
251 base += 0x200 * lindex; 251 base += 0x200 * lindex;
252 } else { 252 } else {
@@ -365,11 +365,11 @@ void __init find_legacy_serial_ports(void)
365 /* Check for known pciclass, and also check wether we have 365 /* Check for known pciclass, and also check wether we have
366 * a device with child nodes for ports or not 366 * a device with child nodes for ports or not
367 */ 367 */
368 if (device_is_compatible(np, "pciclass,0700") || 368 if (of_device_is_compatible(np, "pciclass,0700") ||
369 device_is_compatible(np, "pciclass,070002")) 369 of_device_is_compatible(np, "pciclass,070002"))
370 pci = np; 370 pci = np;
371 else if (device_is_compatible(parent, "pciclass,0700") || 371 else if (of_device_is_compatible(parent, "pciclass,0700") ||
372 device_is_compatible(parent, "pciclass,070002")) 372 of_device_is_compatible(parent, "pciclass,070002"))
373 pci = parent; 373 pci = parent;
374 else { 374 else {
375 of_node_put(parent); 375 of_node_put(parent);
diff --git a/arch/powerpc/kernel/msi.c b/arch/powerpc/kernel/msi.c
new file mode 100644
index 000000000000..c62d1012c013
--- /dev/null
+++ b/arch/powerpc/kernel/msi.c
@@ -0,0 +1,38 @@
1/*
2 * Copyright 2006-2007, Michael Ellerman, IBM Corporation.
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version
7 * 2 of the License, or (at your option) any later version.
8 */
9
10#include <linux/kernel.h>
11#include <linux/msi.h>
12
13#include <asm/machdep.h>
14
15int arch_msi_check_device(struct pci_dev* dev, int nvec, int type)
16{
17 if (!ppc_md.setup_msi_irqs || !ppc_md.teardown_msi_irqs) {
18 pr_debug("msi: Platform doesn't provide MSI callbacks.\n");
19 return -ENOSYS;
20 }
21
22 if (ppc_md.msi_check_device) {
23 pr_debug("msi: Using platform check routine.\n");
24 return ppc_md.msi_check_device(dev, nvec, type);
25 }
26
27 return 0;
28}
29
30int arch_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
31{
32 return ppc_md.setup_msi_irqs(dev, nvec, type);
33}
34
35void arch_teardown_msi_irqs(struct pci_dev *dev)
36{
37 return ppc_md.teardown_msi_irqs(dev);
38}
diff --git a/arch/powerpc/kernel/of_device.c b/arch/powerpc/kernel/of_device.c
index 0c8ea7659d92..a464d67248df 100644
--- a/arch/powerpc/kernel/of_device.c
+++ b/arch/powerpc/kernel/of_device.c
@@ -27,7 +27,7 @@ const struct of_device_id *of_match_node(const struct of_device_id *matches,
27 match &= node->type 27 match &= node->type
28 && !strcmp(matches->type, node->type); 28 && !strcmp(matches->type, node->type);
29 if (matches->compatible[0]) 29 if (matches->compatible[0])
30 match &= device_is_compatible(node, 30 match &= of_device_is_compatible(node,
31 matches->compatible); 31 matches->compatible);
32 if (match) 32 if (match)
33 return matches; 33 return matches;
@@ -120,8 +120,8 @@ void of_device_unregister(struct of_device *ofdev)
120} 120}
121 121
122 122
123static ssize_t of_device_get_modalias(struct of_device *ofdev, 123ssize_t of_device_get_modalias(struct of_device *ofdev,
124 char *str, ssize_t len) 124 char *str, ssize_t len)
125{ 125{
126 const char *compat; 126 const char *compat;
127 int cplen, i; 127 int cplen, i;
@@ -239,3 +239,4 @@ EXPORT_SYMBOL(of_dev_get);
239EXPORT_SYMBOL(of_dev_put); 239EXPORT_SYMBOL(of_dev_put);
240EXPORT_SYMBOL(of_release_dev); 240EXPORT_SYMBOL(of_release_dev);
241EXPORT_SYMBOL(of_device_uevent); 241EXPORT_SYMBOL(of_device_uevent);
242EXPORT_SYMBOL(of_device_get_modalias);
diff --git a/arch/powerpc/kernel/of_platform.c b/arch/powerpc/kernel/of_platform.c
index 908ed7926db4..84c34d979a88 100644
--- a/arch/powerpc/kernel/of_platform.c
+++ b/arch/powerpc/kernel/of_platform.c
@@ -29,7 +29,6 @@
29#include <asm/ppc-pci.h> 29#include <asm/ppc-pci.h>
30#include <asm/atomic.h> 30#include <asm/atomic.h>
31 31
32
33/* 32/*
34 * The list of OF IDs below is used for matching bus types in the 33 * The list of OF IDs below is used for matching bus types in the
35 * system whose devices are to be exposed as of_platform_devices. 34 * system whose devices are to be exposed as of_platform_devices.
diff --git a/arch/powerpc/kernel/pci_32.c b/arch/powerpc/kernel/pci_32.c
index f022862de344..e66064b5093a 100644
--- a/arch/powerpc/kernel/pci_32.c
+++ b/arch/powerpc/kernel/pci_32.c
@@ -1658,7 +1658,7 @@ pgprot_t pci_phys_mem_access_prot(struct file *file,
1658 int i; 1658 int i;
1659 1659
1660 if (page_is_ram(pfn)) 1660 if (page_is_ram(pfn))
1661 return prot; 1661 return __pgprot(prot);
1662 1662
1663 prot |= _PAGE_NO_CACHE | _PAGE_GUARDED; 1663 prot |= _PAGE_NO_CACHE | _PAGE_GUARDED;
1664 1664
diff --git a/arch/powerpc/kernel/pci_64.c b/arch/powerpc/kernel/pci_64.c
index 7138092826aa..6d05a1f377b5 100644
--- a/arch/powerpc/kernel/pci_64.c
+++ b/arch/powerpc/kernel/pci_64.c
@@ -1006,8 +1006,9 @@ void __devinit pci_process_bridge_OF_ranges(struct pci_controller *hose,
1006 1006
1007 switch ((pci_space >> 24) & 0x3) { 1007 switch ((pci_space >> 24) & 0x3) {
1008 case 1: /* I/O space */ 1008 case 1: /* I/O space */
1009 hose->io_base_phys = cpu_phys_addr; 1009 hose->io_base_phys = cpu_phys_addr - pci_addr;
1010 hose->pci_io_size = size; 1010 /* handle from 0 to top of I/O window */
1011 hose->pci_io_size = pci_addr + size;
1011 1012
1012 res = &hose->io_resource; 1013 res = &hose->io_resource;
1013 res->flags = IORESOURCE_IO; 1014 res->flags = IORESOURCE_IO;
@@ -1117,8 +1118,8 @@ static int get_bus_io_range(struct pci_bus *bus, unsigned long *start_phys,
1117 } else { 1118 } else {
1118 /* Root Bus */ 1119 /* Root Bus */
1119 res = &hose->io_resource; 1120 res = &hose->io_resource;
1120 *start_phys = hose->io_base_phys; 1121 *start_phys = hose->io_base_phys + res->start;
1121 *start_virt = (unsigned long) hose->io_base_virt; 1122 *start_virt = (unsigned long) hose->io_base_virt + res->start;
1122 if (res->end > res->start) 1123 if (res->end > res->start)
1123 *size = res->end - res->start + 1; 1124 *size = res->end - res->start + 1;
1124 else { 1125 else {
diff --git a/arch/powerpc/kernel/ppc_ksyms.c b/arch/powerpc/kernel/ppc_ksyms.c
index ff252aaead12..c96fa9bd35a4 100644
--- a/arch/powerpc/kernel/ppc_ksyms.c
+++ b/arch/powerpc/kernel/ppc_ksyms.c
@@ -66,7 +66,6 @@ EXPORT_SYMBOL(clear_pages);
66EXPORT_SYMBOL(ISA_DMA_THRESHOLD); 66EXPORT_SYMBOL(ISA_DMA_THRESHOLD);
67EXPORT_SYMBOL(DMA_MODE_READ); 67EXPORT_SYMBOL(DMA_MODE_READ);
68EXPORT_SYMBOL(DMA_MODE_WRITE); 68EXPORT_SYMBOL(DMA_MODE_WRITE);
69EXPORT_SYMBOL(__div64_32);
70 69
71EXPORT_SYMBOL(do_signal); 70EXPORT_SYMBOL(do_signal);
72EXPORT_SYMBOL(transfer_to_handler); 71EXPORT_SYMBOL(transfer_to_handler);
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
index e509aae2feb3..6e2f03566b0d 100644
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
@@ -19,7 +19,6 @@
19#include <linux/kernel.h> 19#include <linux/kernel.h>
20#include <linux/mm.h> 20#include <linux/mm.h>
21#include <linux/smp.h> 21#include <linux/smp.h>
22#include <linux/smp_lock.h>
23#include <linux/stddef.h> 22#include <linux/stddef.h>
24#include <linux/unistd.h> 23#include <linux/unistd.h>
25#include <linux/ptrace.h> 24#include <linux/ptrace.h>
diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c
index e27d9d1b6e67..d6047c441034 100644
--- a/arch/powerpc/kernel/prom_init.c
+++ b/arch/powerpc/kernel/prom_init.c
@@ -635,6 +635,12 @@ static void __init early_cmdline_parse(void)
635/* ibm,dynamic-reconfiguration-memory property supported */ 635/* ibm,dynamic-reconfiguration-memory property supported */
636#define OV5_DRCONF_MEMORY 0x20 636#define OV5_DRCONF_MEMORY 0x20
637#define OV5_LARGE_PAGES 0x10 /* large pages supported */ 637#define OV5_LARGE_PAGES 0x10 /* large pages supported */
638/* PCIe/MSI support. Without MSI full PCIe is not supported */
639#ifdef CONFIG_PCI_MSI
640#define OV5_MSI 0x01 /* PCIe/MSI support */
641#else
642#define OV5_MSI 0x00
643#endif /* CONFIG_PCI_MSI */
638 644
639/* 645/*
640 * The architecture vector has an array of PVR mask/value pairs, 646 * The architecture vector has an array of PVR mask/value pairs,
@@ -679,7 +685,7 @@ static unsigned char ibm_architecture_vec[] = {
679 /* option vector 5: PAPR/OF options */ 685 /* option vector 5: PAPR/OF options */
680 3 - 2, /* length */ 686 3 - 2, /* length */
681 0, /* don't ignore, don't halt */ 687 0, /* don't ignore, don't halt */
682 OV5_LPAR | OV5_SPLPAR | OV5_LARGE_PAGES | OV5_DRCONF_MEMORY, 688 OV5_LPAR | OV5_SPLPAR | OV5_LARGE_PAGES | OV5_DRCONF_MEMORY | OV5_MSI,
683}; 689};
684 690
685/* Old method - ELF header with PT_NOTE sections */ 691/* Old method - ELF header with PT_NOTE sections */
@@ -967,7 +973,7 @@ static unsigned long __init prom_next_cell(int s, cell_t **cellp)
967 * If problems seem to show up, it would be a good start to track 973 * If problems seem to show up, it would be a good start to track
968 * them down. 974 * them down.
969 */ 975 */
970static void reserve_mem(u64 base, u64 size) 976static void __init reserve_mem(u64 base, u64 size)
971{ 977{
972 u64 top = base + size; 978 u64 top = base + size;
973 unsigned long cnt = RELOC(mem_reserve_cnt); 979 unsigned long cnt = RELOC(mem_reserve_cnt);
@@ -2153,7 +2159,7 @@ static void __init fixup_device_tree_efika(void)
2153 3,12,0, 3,13,0, 3,14,0, 3,15,0 }; 2159 3,12,0, 3,13,0, 3,14,0, 3,15,0 };
2154 struct subst_entry efika_subst_table[] = { 2160 struct subst_entry efika_subst_table[] = {
2155 { "/", "device_type", prop_cstr("efika") }, 2161 { "/", "device_type", prop_cstr("efika") },
2156 { "/builtin", "compatible", prop_cstr("soc") }, 2162 { "/builtin", "device_type", prop_cstr("soc") },
2157 { "/builtin/ata", "compatible", prop_cstr("mpc5200b-ata\0mpc5200-ata"), }, 2163 { "/builtin/ata", "compatible", prop_cstr("mpc5200b-ata\0mpc5200-ata"), },
2158 { "/builtin/bestcomm", "compatible", prop_cstr("mpc5200b-bestcomm\0mpc5200-bestcomm") }, 2164 { "/builtin/bestcomm", "compatible", prop_cstr("mpc5200b-bestcomm\0mpc5200-bestcomm") },
2159 { "/builtin/bestcomm", "interrupts", prop_bcomm_irq, sizeof(prop_bcomm_irq) }, 2165 { "/builtin/bestcomm", "interrupts", prop_bcomm_irq, sizeof(prop_bcomm_irq) },
diff --git a/arch/powerpc/kernel/prom_parse.c b/arch/powerpc/kernel/prom_parse.c
index aa40a5307294..b5c96af955c6 100644
--- a/arch/powerpc/kernel/prom_parse.c
+++ b/arch/powerpc/kernel/prom_parse.c
@@ -1042,3 +1042,28 @@ const void *of_get_mac_address(struct device_node *np)
1042} 1042}
1043EXPORT_SYMBOL(of_get_mac_address); 1043EXPORT_SYMBOL(of_get_mac_address);
1044 1044
1045int of_irq_to_resource(struct device_node *dev, int index, struct resource *r)
1046{
1047 int irq = irq_of_parse_and_map(dev, index);
1048
1049 /* Only dereference the resource if both the
1050 * resource and the irq are valid. */
1051 if (r && irq != NO_IRQ) {
1052 r->start = r->end = irq;
1053 r->flags = IORESOURCE_IRQ;
1054 }
1055
1056 return irq;
1057}
1058EXPORT_SYMBOL_GPL(of_irq_to_resource);
1059
1060void __iomem *of_iomap(struct device_node *np, int index)
1061{
1062 struct resource res;
1063
1064 if (of_address_to_resource(np, index, &res))
1065 return NULL;
1066
1067 return ioremap(res.start, 1 + res.end - res.start);
1068}
1069EXPORT_SYMBOL(of_iomap);
diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c
index cc44c7b975aa..f4f391cdd8f5 100644
--- a/arch/powerpc/kernel/ptrace.c
+++ b/arch/powerpc/kernel/ptrace.c
@@ -19,7 +19,6 @@
19#include <linux/sched.h> 19#include <linux/sched.h>
20#include <linux/mm.h> 20#include <linux/mm.h>
21#include <linux/smp.h> 21#include <linux/smp.h>
22#include <linux/smp_lock.h>
23#include <linux/errno.h> 22#include <linux/errno.h>
24#include <linux/ptrace.h> 23#include <linux/ptrace.h>
25#include <linux/user.h> 24#include <linux/user.h>
diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c
index 6b405a3f43f9..dd1dca5bfa81 100644
--- a/arch/powerpc/kernel/signal_32.c
+++ b/arch/powerpc/kernel/signal_32.c
@@ -20,7 +20,6 @@
20#include <linux/sched.h> 20#include <linux/sched.h>
21#include <linux/mm.h> 21#include <linux/mm.h>
22#include <linux/smp.h> 22#include <linux/smp.h>
23#include <linux/smp_lock.h>
24#include <linux/kernel.h> 23#include <linux/kernel.h>
25#include <linux/signal.h> 24#include <linux/signal.h>
26#include <linux/errno.h> 25#include <linux/errno.h>
diff --git a/arch/powerpc/kernel/signal_64.c b/arch/powerpc/kernel/signal_64.c
index f72e8e823d78..1ce0ae3f6ffc 100644
--- a/arch/powerpc/kernel/signal_64.c
+++ b/arch/powerpc/kernel/signal_64.c
@@ -15,7 +15,6 @@
15#include <linux/sched.h> 15#include <linux/sched.h>
16#include <linux/mm.h> 16#include <linux/mm.h>
17#include <linux/smp.h> 17#include <linux/smp.h>
18#include <linux/smp_lock.h>
19#include <linux/kernel.h> 18#include <linux/kernel.h>
20#include <linux/signal.h> 19#include <linux/signal.h>
21#include <linux/errno.h> 20#include <linux/errno.h>
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
index d8e503b2e1af..22f1ef1b3100 100644
--- a/arch/powerpc/kernel/smp.c
+++ b/arch/powerpc/kernel/smp.c
@@ -176,10 +176,10 @@ static struct call_data_struct {
176#define SMP_CALL_TIMEOUT 8 176#define SMP_CALL_TIMEOUT 8
177 177
178/* 178/*
179 * This function sends a 'generic call function' IPI to all other CPUs 179 * These functions send a 'generic call function' IPI to other online
180 * in the system. 180 * CPUS in the system.
181 * 181 *
182 * [SUMMARY] Run a function on all other CPUs. 182 * [SUMMARY] Run a function on other CPUs.
183 * <func> The function to run. This must be fast and non-blocking. 183 * <func> The function to run. This must be fast and non-blocking.
184 * <info> An arbitrary pointer to pass to the function. 184 * <info> An arbitrary pointer to pass to the function.
185 * <nonatomic> currently unused. 185 * <nonatomic> currently unused.
@@ -190,18 +190,26 @@ static struct call_data_struct {
190 * You must not call this function with disabled interrupts or from a 190 * You must not call this function with disabled interrupts or from a
191 * hardware interrupt handler or from a bottom half handler. 191 * hardware interrupt handler or from a bottom half handler.
192 */ 192 */
193int smp_call_function (void (*func) (void *info), void *info, int nonatomic, 193int smp_call_function_map(void (*func) (void *info), void *info, int nonatomic,
194 int wait) 194 int wait, cpumask_t map)
195{ 195{
196 struct call_data_struct data; 196 struct call_data_struct data;
197 int ret = -1, cpus; 197 int ret = -1, num_cpus;
198 int cpu;
198 u64 timeout; 199 u64 timeout;
199 200
200 /* Can deadlock when called with interrupts disabled */ 201 /* Can deadlock when called with interrupts disabled */
201 WARN_ON(irqs_disabled()); 202 WARN_ON(irqs_disabled());
202 203
204 /* remove 'self' from the map */
205 if (cpu_isset(smp_processor_id(), map))
206 cpu_clear(smp_processor_id(), map);
207
208 /* sanity check the map, remove any non-online processors. */
209 cpus_and(map, map, cpu_online_map);
210
203 if (unlikely(smp_ops == NULL)) 211 if (unlikely(smp_ops == NULL))
204 return -1; 212 return ret;
205 213
206 data.func = func; 214 data.func = func;
207 data.info = info; 215 data.info = info;
@@ -213,40 +221,42 @@ int smp_call_function (void (*func) (void *info), void *info, int nonatomic,
213 spin_lock(&call_lock); 221 spin_lock(&call_lock);
214 /* Must grab online cpu count with preempt disabled, otherwise 222 /* Must grab online cpu count with preempt disabled, otherwise
215 * it can change. */ 223 * it can change. */
216 cpus = num_online_cpus() - 1; 224 num_cpus = num_online_cpus() - 1;
217 if (!cpus) { 225 if (!num_cpus || cpus_empty(map)) {
218 ret = 0; 226 ret = 0;
219 goto out; 227 goto out;
220 } 228 }
221 229
222 call_data = &data; 230 call_data = &data;
223 smp_wmb(); 231 smp_wmb();
224 /* Send a message to all other CPUs and wait for them to respond */ 232 /* Send a message to all CPUs in the map */
225 smp_ops->message_pass(MSG_ALL_BUT_SELF, PPC_MSG_CALL_FUNCTION); 233 for_each_cpu_mask(cpu, map)
234 smp_ops->message_pass(cpu, PPC_MSG_CALL_FUNCTION);
226 235
227 timeout = get_tb() + (u64) SMP_CALL_TIMEOUT * tb_ticks_per_sec; 236 timeout = get_tb() + (u64) SMP_CALL_TIMEOUT * tb_ticks_per_sec;
228 237
229 /* Wait for response */ 238 /* Wait for indication that they have received the message */
230 while (atomic_read(&data.started) != cpus) { 239 while (atomic_read(&data.started) != num_cpus) {
231 HMT_low(); 240 HMT_low();
232 if (get_tb() >= timeout) { 241 if (get_tb() >= timeout) {
233 printk("smp_call_function on cpu %d: other cpus not " 242 printk("smp_call_function on cpu %d: other cpus not "
234 "responding (%d)\n", smp_processor_id(), 243 "responding (%d)\n", smp_processor_id(),
235 atomic_read(&data.started)); 244 atomic_read(&data.started));
236 debugger(NULL); 245 debugger(NULL);
237 goto out; 246 goto out;
238 } 247 }
239 } 248 }
240 249
250 /* optionally wait for the CPUs to complete */
241 if (wait) { 251 if (wait) {
242 while (atomic_read(&data.finished) != cpus) { 252 while (atomic_read(&data.finished) != num_cpus) {
243 HMT_low(); 253 HMT_low();
244 if (get_tb() >= timeout) { 254 if (get_tb() >= timeout) {
245 printk("smp_call_function on cpu %d: other " 255 printk("smp_call_function on cpu %d: other "
246 "cpus not finishing (%d/%d)\n", 256 "cpus not finishing (%d/%d)\n",
247 smp_processor_id(), 257 smp_processor_id(),
248 atomic_read(&data.finished), 258 atomic_read(&data.finished),
249 atomic_read(&data.started)); 259 atomic_read(&data.started));
250 debugger(NULL); 260 debugger(NULL);
251 goto out; 261 goto out;
252 } 262 }
@@ -262,8 +272,29 @@ int smp_call_function (void (*func) (void *info), void *info, int nonatomic,
262 return ret; 272 return ret;
263} 273}
264 274
275int smp_call_function(void (*func) (void *info), void *info, int nonatomic,
276 int wait)
277{
278 return smp_call_function_map(func,info,nonatomic,wait,cpu_online_map);
279}
265EXPORT_SYMBOL(smp_call_function); 280EXPORT_SYMBOL(smp_call_function);
266 281
282int smp_call_function_single(int cpu, void (*func) (void *info), void *info, int nonatomic,
283 int wait)
284{
285 cpumask_t map=CPU_MASK_NONE;
286
287 if (!cpu_online(cpu))
288 return -EINVAL;
289
290 if (cpu == smp_processor_id())
291 return -EBUSY;
292
293 cpu_set(cpu, map);
294 return smp_call_function_map(func,info,nonatomic,wait,map);
295}
296EXPORT_SYMBOL(smp_call_function_single);
297
267void smp_call_function_interrupt(void) 298void smp_call_function_interrupt(void)
268{ 299{
269 void (*func) (void *info); 300 void (*func) (void *info);
diff --git a/arch/powerpc/kernel/swsusp.c b/arch/powerpc/kernel/swsusp.c
new file mode 100644
index 000000000000..064a7ba4f02c
--- /dev/null
+++ b/arch/powerpc/kernel/swsusp.c
@@ -0,0 +1,43 @@
1/*
2 * Common powerpc suspend code for 32 and 64 bits
3 *
4 * Copyright 2007 Johannes Berg <johannes@sipsolutions.net>
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version
9 * 2 of the License, or (at your option) any later version.
10 */
11
12#include <linux/sched.h>
13#include <asm/suspend.h>
14#include <asm/system.h>
15#include <asm/current.h>
16#include <asm/mmu_context.h>
17
18void save_processor_state(void)
19{
20 /*
21 * flush out all the special registers so we don't need
22 * to save them in the snapshot
23 */
24 flush_fp_to_thread(current);
25 flush_altivec_to_thread(current);
26 flush_spe_to_thread(current);
27
28#ifdef CONFIG_PPC64
29 hard_irq_disable();
30#endif
31
32}
33
34void restore_processor_state(void)
35{
36#ifdef CONFIG_PPC32
37 set_context(current->active_mm->context.id, current->active_mm->pgd);
38#endif
39
40#ifdef CONFIG_PPC64
41 hard_irq_enable();
42#endif
43}
diff --git a/arch/powerpc/kernel/swsusp_64.c b/arch/powerpc/kernel/swsusp_64.c
new file mode 100644
index 000000000000..6f3f0697274e
--- /dev/null
+++ b/arch/powerpc/kernel/swsusp_64.c
@@ -0,0 +1,24 @@
1/*
2 * PowerPC 64-bit swsusp implementation
3 *
4 * Copyright 2006 Johannes Berg <johannes@sipsolutions.net>
5 *
6 * GPLv2
7 */
8
9#include <asm/system.h>
10#include <asm/iommu.h>
11#include <linux/irq.h>
12#include <linux/interrupt.h>
13
14void do_after_copyback(void)
15{
16 iommu_restore();
17 touch_softlockup_watchdog();
18 mb();
19}
20
21void _iommu_save(void)
22{
23 iommu_save();
24}
diff --git a/arch/powerpc/kernel/swsusp_asm64.S b/arch/powerpc/kernel/swsusp_asm64.S
new file mode 100644
index 000000000000..e092c3cbdb9b
--- /dev/null
+++ b/arch/powerpc/kernel/swsusp_asm64.S
@@ -0,0 +1,228 @@
1/*
2 * PowerPC 64-bit swsusp implementation
3 *
4 * Copyright 2006 Johannes Berg <johannes@sipsolutions.net>
5 *
6 * GPLv2
7 */
8
9#include <linux/threads.h>
10#include <asm/processor.h>
11#include <asm/page.h>
12#include <asm/cputable.h>
13#include <asm/thread_info.h>
14#include <asm/ppc_asm.h>
15#include <asm/asm-offsets.h>
16
17/*
18 * Structure for storing CPU registers on the save area.
19 */
20#define SL_r1 0x00 /* stack pointer */
21#define SL_PC 0x08
22#define SL_MSR 0x10
23#define SL_SDR1 0x18
24#define SL_XER 0x20
25#define SL_TB 0x40
26#define SL_r2 0x48
27#define SL_CR 0x50
28#define SL_LR 0x58
29#define SL_r12 0x60
30#define SL_r13 0x68
31#define SL_r14 0x70
32#define SL_r15 0x78
33#define SL_r16 0x80
34#define SL_r17 0x88
35#define SL_r18 0x90
36#define SL_r19 0x98
37#define SL_r20 0xa0
38#define SL_r21 0xa8
39#define SL_r22 0xb0
40#define SL_r23 0xb8
41#define SL_r24 0xc0
42#define SL_r25 0xc8
43#define SL_r26 0xd0
44#define SL_r27 0xd8
45#define SL_r28 0xe0
46#define SL_r29 0xe8
47#define SL_r30 0xf0
48#define SL_r31 0xf8
49#define SL_SIZE SL_r31+8
50
51/* these macros rely on the save area being
52 * pointed to by r11 */
53#define SAVE_SPECIAL(special) \
54 mf##special r0 ;\
55 std r0, SL_##special(r11)
56#define RESTORE_SPECIAL(special) \
57 ld r0, SL_##special(r11) ;\
58 mt##special r0
59#define SAVE_REGISTER(reg) \
60 std reg, SL_##reg(r11)
61#define RESTORE_REGISTER(reg) \
62 ld reg, SL_##reg(r11)
63
64/* space for storing cpu state */
65 .section .data
66 .align 5
67swsusp_save_area:
68 .space SL_SIZE
69
70 .section ".toc","aw"
71swsusp_save_area_ptr:
72 .tc swsusp_save_area[TC],swsusp_save_area
73restore_pblist_ptr:
74 .tc restore_pblist[TC],restore_pblist
75
76 .section .text
77 .align 5
78_GLOBAL(swsusp_arch_suspend)
79 ld r11,swsusp_save_area_ptr@toc(r2)
80 SAVE_SPECIAL(LR)
81 SAVE_REGISTER(r1)
82 SAVE_SPECIAL(CR)
83 SAVE_SPECIAL(TB)
84 SAVE_REGISTER(r2)
85 SAVE_REGISTER(r12)
86 SAVE_REGISTER(r13)
87 SAVE_REGISTER(r14)
88 SAVE_REGISTER(r15)
89 SAVE_REGISTER(r16)
90 SAVE_REGISTER(r17)
91 SAVE_REGISTER(r18)
92 SAVE_REGISTER(r19)
93 SAVE_REGISTER(r20)
94 SAVE_REGISTER(r21)
95 SAVE_REGISTER(r22)
96 SAVE_REGISTER(r23)
97 SAVE_REGISTER(r24)
98 SAVE_REGISTER(r25)
99 SAVE_REGISTER(r26)
100 SAVE_REGISTER(r27)
101 SAVE_REGISTER(r28)
102 SAVE_REGISTER(r29)
103 SAVE_REGISTER(r30)
104 SAVE_REGISTER(r31)
105 SAVE_SPECIAL(MSR)
106 SAVE_SPECIAL(SDR1)
107 SAVE_SPECIAL(XER)
108
109 /* we push the stack up 128 bytes but don't store the
110 * stack pointer on the stack like a real stackframe */
111 addi r1,r1,-128
112
113 bl _iommu_save
114 bl swsusp_save
115
116 /* restore LR */
117 ld r11,swsusp_save_area_ptr@toc(r2)
118 RESTORE_SPECIAL(LR)
119 addi r1,r1,128
120
121 blr
122
123/* Resume code */
124_GLOBAL(swsusp_arch_resume)
125 /* Stop pending alitvec streams and memory accesses */
126BEGIN_FTR_SECTION
127 DSSALL
128END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC)
129 sync
130
131 ld r12,restore_pblist_ptr@toc(r2)
132 ld r12,0(r12)
133
134 cmpdi r12,0
135 beq- nothing_to_copy
136 li r15,512
137copyloop:
138 ld r13,pbe_address(r12)
139 ld r14,pbe_orig_address(r12)
140
141 mtctr r15
142 li r10,0
143copy_page_loop:
144 ldx r0,r10,r13
145 stdx r0,r10,r14
146 addi r10,r10,8
147 bdnz copy_page_loop
148
149 ld r12,pbe_next(r12)
150 cmpdi r12,0
151 bne+ copyloop
152nothing_to_copy:
153
154 /* flush caches */
155 lis r3, 0x10
156 mtctr r3
157 li r3, 0
158 ori r3, r3, CONFIG_KERNEL_START>>48
159 li r0, 48
160 sld r3, r3, r0
161 li r0, 0
1621:
163 dcbf r0,r3
164 addi r3,r3,0x20
165 bdnz 1b
166
167 sync
168
169 tlbia
170
171 ld r11,swsusp_save_area_ptr@toc(r2)
172
173 RESTORE_SPECIAL(CR)
174
175 /* restore timebase */
176 /* load saved tb */
177 ld r1, SL_TB(r11)
178 /* get upper 32 bits of it */
179 srdi r2, r1, 32
180 /* clear tb lower to avoid wrap */
181 li r0, 0
182 mttbl r0
183 /* set tb upper */
184 mttbu r2
185 /* set tb lower */
186 mttbl r1
187
188 /* restore registers */
189 RESTORE_REGISTER(r1)
190 RESTORE_REGISTER(r2)
191 RESTORE_REGISTER(r12)
192 RESTORE_REGISTER(r13)
193 RESTORE_REGISTER(r14)
194 RESTORE_REGISTER(r15)
195 RESTORE_REGISTER(r16)
196 RESTORE_REGISTER(r17)
197 RESTORE_REGISTER(r18)
198 RESTORE_REGISTER(r19)
199 RESTORE_REGISTER(r20)
200 RESTORE_REGISTER(r21)
201 RESTORE_REGISTER(r22)
202 RESTORE_REGISTER(r23)
203 RESTORE_REGISTER(r24)
204 RESTORE_REGISTER(r25)
205 RESTORE_REGISTER(r26)
206 RESTORE_REGISTER(r27)
207 RESTORE_REGISTER(r28)
208 RESTORE_REGISTER(r29)
209 RESTORE_REGISTER(r30)
210 RESTORE_REGISTER(r31)
211 /* can't use RESTORE_SPECIAL(MSR) */
212 ld r0, SL_MSR(r11)
213 mtmsrd r0, 0
214 RESTORE_SPECIAL(SDR1)
215 RESTORE_SPECIAL(XER)
216
217 sync
218
219 addi r1,r1,-128
220 bl slb_flush_and_rebolt
221 bl do_after_copyback
222 addi r1,r1,128
223
224 ld r11,swsusp_save_area_ptr@toc(r2)
225 RESTORE_SPECIAL(LR)
226
227 li r3, 0
228 blr
diff --git a/arch/powerpc/kernel/syscalls.c b/arch/powerpc/kernel/syscalls.c
index d358866b880f..fc6647d332cb 100644
--- a/arch/powerpc/kernel/syscalls.c
+++ b/arch/powerpc/kernel/syscalls.c
@@ -24,7 +24,6 @@
24#include <linux/syscalls.h> 24#include <linux/syscalls.h>
25#include <linux/mm.h> 25#include <linux/mm.h>
26#include <linux/smp.h> 26#include <linux/smp.h>
27#include <linux/smp_lock.h>
28#include <linux/sem.h> 27#include <linux/sem.h>
29#include <linux/msg.h> 28#include <linux/msg.h>
30#include <linux/shm.h> 29#include <linux/shm.h>
diff --git a/arch/powerpc/kernel/sysfs.c b/arch/powerpc/kernel/sysfs.c
index 933e214c33e8..cae39d9dfe48 100644
--- a/arch/powerpc/kernel/sysfs.c
+++ b/arch/powerpc/kernel/sysfs.c
@@ -499,4 +499,4 @@ static int __init topology_init(void)
499 499
500 return 0; 500 return 0;
501} 501}
502__initcall(topology_init); 502subsys_initcall(topology_init);
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
index f7862224fe85..bf6445ac9f1c 100644
--- a/arch/powerpc/kernel/traps.c
+++ b/arch/powerpc/kernel/traps.c
@@ -33,8 +33,8 @@
33#include <linux/kexec.h> 33#include <linux/kexec.h>
34#include <linux/backlight.h> 34#include <linux/backlight.h>
35#include <linux/bug.h> 35#include <linux/bug.h>
36#include <linux/kdebug.h>
36 37
37#include <asm/kdebug.h>
38#include <asm/pgtable.h> 38#include <asm/pgtable.h>
39#include <asm/uaccess.h> 39#include <asm/uaccess.h>
40#include <asm/system.h> 40#include <asm/system.h>
@@ -72,20 +72,6 @@ EXPORT_SYMBOL(__debugger_dabr_match);
72EXPORT_SYMBOL(__debugger_fault_handler); 72EXPORT_SYMBOL(__debugger_fault_handler);
73#endif 73#endif
74 74
75ATOMIC_NOTIFIER_HEAD(powerpc_die_chain);
76
77int register_die_notifier(struct notifier_block *nb)
78{
79 return atomic_notifier_chain_register(&powerpc_die_chain, nb);
80}
81EXPORT_SYMBOL(register_die_notifier);
82
83int unregister_die_notifier(struct notifier_block *nb)
84{
85 return atomic_notifier_chain_unregister(&powerpc_die_chain, nb);
86}
87EXPORT_SYMBOL(unregister_die_notifier);
88
89/* 75/*
90 * Trap & Exception support 76 * Trap & Exception support
91 */ 77 */
diff --git a/arch/powerpc/kernel/udbg.c b/arch/powerpc/kernel/udbg.c
index 7e0971868fc2..87703df87509 100644
--- a/arch/powerpc/kernel/udbg.c
+++ b/arch/powerpc/kernel/udbg.c
@@ -51,6 +51,9 @@ void __init udbg_early_init(void)
51 udbg_init_pas_realmode(); 51 udbg_init_pas_realmode();
52#elif defined(CONFIG_BOOTX_TEXT) 52#elif defined(CONFIG_BOOTX_TEXT)
53 udbg_init_btext(); 53 udbg_init_btext();
54#elif defined(CONFIG_PPC_EARLY_DEBUG_44x)
55 /* PPC44x debug */
56 udbg_init_44x_as1();
54#endif 57#endif
55} 58}
56 59
@@ -142,29 +145,22 @@ static void udbg_console_write(struct console *con, const char *s,
142static struct console udbg_console = { 145static struct console udbg_console = {
143 .name = "udbg", 146 .name = "udbg",
144 .write = udbg_console_write, 147 .write = udbg_console_write,
145 .flags = CON_PRINTBUFFER | CON_ENABLED, 148 .flags = CON_PRINTBUFFER | CON_ENABLED | CON_BOOT,
146 .index = -1, 149 .index = -1,
147}; 150};
148 151
149static int early_console_initialized; 152static int early_console_initialized;
150 153
151void __init disable_early_printk(void)
152{
153 if (!early_console_initialized)
154 return;
155 if (strstr(boot_command_line, "udbg-immortal")) {
156 printk(KERN_INFO "early console immortal !\n");
157 return;
158 }
159 unregister_console(&udbg_console);
160 early_console_initialized = 0;
161}
162
163/* called by setup_system */ 154/* called by setup_system */
164void register_early_udbg_console(void) 155void register_early_udbg_console(void)
165{ 156{
166 if (early_console_initialized) 157 if (early_console_initialized)
167 return; 158 return;
159
160 if (strstr(boot_command_line, "udbg-immortal")) {
161 printk(KERN_INFO "early console immortal !\n");
162 udbg_console.flags &= ~CON_BOOT;
163 }
168 early_console_initialized = 1; 164 early_console_initialized = 1;
169 register_console(&udbg_console); 165 register_console(&udbg_console);
170} 166}
diff --git a/arch/powerpc/kernel/udbg_16550.c b/arch/powerpc/kernel/udbg_16550.c
index a963f657222b..7afab5bcd61a 100644
--- a/arch/powerpc/kernel/udbg_16550.c
+++ b/arch/powerpc/kernel/udbg_16550.c
@@ -191,3 +191,26 @@ void udbg_init_pas_realmode(void)
191 udbg_getc_poll = NULL; 191 udbg_getc_poll = NULL;
192} 192}
193#endif /* CONFIG_PPC_MAPLE */ 193#endif /* CONFIG_PPC_MAPLE */
194
195#ifdef CONFIG_PPC_EARLY_DEBUG_44x
196#include <platforms/44x/44x.h>
197
198static void udbg_44x_as1_putc(char c)
199{
200 if (udbg_comport) {
201 while ((as1_readb(&udbg_comport->lsr) & LSR_THRE) == 0)
202 /* wait for idle */;
203 as1_writeb(c, &udbg_comport->thr); eieio();
204 if (c == '\n')
205 udbg_44x_as1_putc('\r');
206 }
207}
208
209void __init udbg_init_44x_as1(void)
210{
211 udbg_comport =
212 (volatile struct NS16550 __iomem *)PPC44x_EARLY_DEBUG_VIRTADDR;
213
214 udbg_putc = udbg_44x_as1_putc;
215}
216#endif /* CONFIG_PPC_EARLY_DEBUG_44x */
diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c
index e46c31b36641..4245579edb4e 100644
--- a/arch/powerpc/kernel/vdso.c
+++ b/arch/powerpc/kernel/vdso.c
@@ -14,7 +14,6 @@
14#include <linux/kernel.h> 14#include <linux/kernel.h>
15#include <linux/mm.h> 15#include <linux/mm.h>
16#include <linux/smp.h> 16#include <linux/smp.h>
17#include <linux/smp_lock.h>
18#include <linux/stddef.h> 17#include <linux/stddef.h>
19#include <linux/unistd.h> 18#include <linux/unistd.h>
20#include <linux/slab.h> 19#include <linux/slab.h>
diff --git a/arch/powerpc/kernel/vio.c b/arch/powerpc/kernel/vio.c
index b2c1b67a10a7..62c1bc12ea39 100644
--- a/arch/powerpc/kernel/vio.c
+++ b/arch/powerpc/kernel/vio.c
@@ -117,7 +117,7 @@ static const struct vio_device_id *vio_match_device(
117{ 117{
118 while (ids->type[0] != '\0') { 118 while (ids->type[0] != '\0') {
119 if ((strncmp(dev->type, ids->type, strlen(ids->type)) == 0) && 119 if ((strncmp(dev->type, ids->type, strlen(ids->type)) == 0) &&
120 device_is_compatible(dev->dev.archdata.of_node, 120 of_device_is_compatible(dev->dev.archdata.of_node,
121 ids->compat)) 121 ids->compat))
122 return ids; 122 return ids;
123 ids++; 123 ids++;
diff --git a/arch/powerpc/lib/dma-noncoherent.c b/arch/powerpc/lib/dma-noncoherent.c
index 48f3d13a3de5..6656d47841d0 100644
--- a/arch/powerpc/lib/dma-noncoherent.c
+++ b/arch/powerpc/lib/dma-noncoherent.c
@@ -306,13 +306,15 @@ EXPORT_SYMBOL(__dma_free_coherent);
306static int __init dma_alloc_init(void) 306static int __init dma_alloc_init(void)
307{ 307{
308 pgd_t *pgd; 308 pgd_t *pgd;
309 pud_t *pud;
309 pmd_t *pmd; 310 pmd_t *pmd;
310 pte_t *pte; 311 pte_t *pte;
311 int ret = 0; 312 int ret = 0;
312 313
313 do { 314 do {
314 pgd = pgd_offset(&init_mm, CONSISTENT_BASE); 315 pgd = pgd_offset(&init_mm, CONSISTENT_BASE);
315 pmd = pmd_alloc(&init_mm, pgd, CONSISTENT_BASE); 316 pud = pud_alloc(&init_mm, pgd, CONSISTENT_BASE);
317 pmd = pmd_alloc(&init_mm, pud, CONSISTENT_BASE);
316 if (!pmd) { 318 if (!pmd) {
317 printk(KERN_ERR "%s: no pmd tables\n", __func__); 319 printk(KERN_ERR "%s: no pmd tables\n", __func__);
318 ret = -ENOMEM; 320 ret = -ENOMEM;
diff --git a/arch/powerpc/mm/44x_mmu.c b/arch/powerpc/mm/44x_mmu.c
index 0a0a0487b334..ca4dcb07a939 100644
--- a/arch/powerpc/mm/44x_mmu.c
+++ b/arch/powerpc/mm/44x_mmu.c
@@ -24,73 +24,38 @@
24 * 24 *
25 */ 25 */
26 26
27#include <linux/signal.h>
28#include <linux/sched.h>
29#include <linux/kernel.h>
30#include <linux/errno.h>
31#include <linux/string.h>
32#include <linux/types.h>
33#include <linux/ptrace.h>
34#include <linux/mman.h>
35#include <linux/mm.h>
36#include <linux/swap.h>
37#include <linux/stddef.h>
38#include <linux/vmalloc.h>
39#include <linux/init.h> 27#include <linux/init.h>
40#include <linux/delay.h>
41#include <linux/highmem.h>
42
43#include <asm/pgalloc.h>
44#include <asm/prom.h>
45#include <asm/io.h>
46#include <asm/mmu_context.h>
47#include <asm/pgtable.h>
48#include <asm/mmu.h> 28#include <asm/mmu.h>
49#include <asm/uaccess.h> 29#include <asm/system.h>
50#include <asm/smp.h> 30#include <asm/page.h>
51#include <asm/bootx.h>
52#include <asm/machdep.h>
53#include <asm/setup.h>
54 31
55#include "mmu_decl.h" 32#include "mmu_decl.h"
56 33
57extern char etext[], _stext[];
58
59/* Used by the 44x TLB replacement exception handler. 34/* Used by the 44x TLB replacement exception handler.
60 * Just needed it declared someplace. 35 * Just needed it declared someplace.
61 */ 36 */
62unsigned int tlb_44x_index = 0; 37unsigned int tlb_44x_index; /* = 0 */
63unsigned int tlb_44x_hwater = 62; 38unsigned int tlb_44x_hwater = PPC44x_TLB_SIZE - 1 - PPC44x_EARLY_TLBS;
64 39
65/* 40/*
66 * "Pins" a 256MB TLB entry in AS0 for kernel lowmem 41 * "Pins" a 256MB TLB entry in AS0 for kernel lowmem
67 */ 42 */
68static void __init 43static void __init ppc44x_pin_tlb(unsigned int virt, unsigned int phys)
69ppc44x_pin_tlb(int slot, unsigned int virt, unsigned int phys)
70{ 44{
71 unsigned long attrib = 0; 45 __asm__ __volatile__(
72 46 "tlbwe %2,%3,%4\n"
73 __asm__ __volatile__("\ 47 "tlbwe %1,%3,%5\n"
74 clrrwi %2,%2,10\n\ 48 "tlbwe %0,%3,%6\n"
75 ori %2,%2,%4\n\
76 clrrwi %1,%1,10\n\
77 li %0,0\n\
78 ori %0,%0,%5\n\
79 tlbwe %2,%3,%6\n\
80 tlbwe %1,%3,%7\n\
81 tlbwe %0,%3,%8"
82 : 49 :
83 : "r" (attrib), "r" (phys), "r" (virt), "r" (slot), 50 : "r" (PPC44x_TLB_SW | PPC44x_TLB_SR | PPC44x_TLB_SX | PPC44x_TLB_G),
84 "i" (PPC44x_TLB_VALID | PPC44x_TLB_256M), 51 "r" (phys),
85 "i" (PPC44x_TLB_SW | PPC44x_TLB_SR | PPC44x_TLB_SX | PPC44x_TLB_G), 52 "r" (virt | PPC44x_TLB_VALID | PPC44x_TLB_256M),
53 "r" (tlb_44x_hwater--), /* slot for this TLB entry */
86 "i" (PPC44x_TLB_PAGEID), 54 "i" (PPC44x_TLB_PAGEID),
87 "i" (PPC44x_TLB_XLAT), 55 "i" (PPC44x_TLB_XLAT),
88 "i" (PPC44x_TLB_ATTRIB)); 56 "i" (PPC44x_TLB_ATTRIB));
89} 57}
90 58
91/*
92 * MMU_init_hw does the chip-specific initialization of the MMU hardware.
93 */
94void __init MMU_init_hw(void) 59void __init MMU_init_hw(void)
95{ 60{
96 flush_instruction_cache(); 61 flush_instruction_cache();
@@ -98,22 +63,13 @@ void __init MMU_init_hw(void)
98 63
99unsigned long __init mmu_mapin_ram(void) 64unsigned long __init mmu_mapin_ram(void)
100{ 65{
101 unsigned int pinned_tlbs = 1; 66 unsigned long addr;
102 int i;
103
104 /* Determine number of entries necessary to cover lowmem */
105 pinned_tlbs = (unsigned int)
106 (_ALIGN(total_lowmem, PPC_PIN_SIZE) >> PPC44x_PIN_SHIFT);
107
108 /* Write upper watermark to save location */
109 tlb_44x_hwater = PPC44x_LOW_SLOT - pinned_tlbs;
110 67
111 /* If necessary, set additional pinned TLBs */ 68 /* Pin in enough TLBs to cover any lowmem not covered by the
112 if (pinned_tlbs > 1) 69 * initial 256M mapping established in head_44x.S */
113 for (i = (PPC44x_LOW_SLOT-(pinned_tlbs-1)); i < PPC44x_LOW_SLOT; i++) { 70 for (addr = PPC_PIN_SIZE; addr < total_lowmem;
114 unsigned int phys_addr = (PPC44x_LOW_SLOT-i) * PPC_PIN_SIZE; 71 addr += PPC_PIN_SIZE)
115 ppc44x_pin_tlb(i, phys_addr+PAGE_OFFSET, phys_addr); 72 ppc44x_pin_tlb(addr + PAGE_OFFSET, addr);
116 }
117 73
118 return total_lowmem; 74 return total_lowmem;
119} 75}
diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c
index 03aeb3a46077..bfe901353142 100644
--- a/arch/powerpc/mm/fault.c
+++ b/arch/powerpc/mm/fault.c
@@ -28,6 +28,7 @@
28#include <linux/highmem.h> 28#include <linux/highmem.h>
29#include <linux/module.h> 29#include <linux/module.h>
30#include <linux/kprobes.h> 30#include <linux/kprobes.h>
31#include <linux/kdebug.h>
31 32
32#include <asm/page.h> 33#include <asm/page.h>
33#include <asm/pgtable.h> 34#include <asm/pgtable.h>
@@ -36,40 +37,28 @@
36#include <asm/system.h> 37#include <asm/system.h>
37#include <asm/uaccess.h> 38#include <asm/uaccess.h>
38#include <asm/tlbflush.h> 39#include <asm/tlbflush.h>
39#include <asm/kdebug.h>
40#include <asm/siginfo.h> 40#include <asm/siginfo.h>
41 41
42#ifdef CONFIG_KPROBES
43ATOMIC_NOTIFIER_HEAD(notify_page_fault_chain);
44 42
45/* Hook to register for page fault notifications */ 43#ifdef CONFIG_KPROBES
46int register_page_fault_notifier(struct notifier_block *nb) 44static inline int notify_page_fault(struct pt_regs *regs)
47{
48 return atomic_notifier_chain_register(&notify_page_fault_chain, nb);
49}
50
51int unregister_page_fault_notifier(struct notifier_block *nb)
52{ 45{
53 return atomic_notifier_chain_unregister(&notify_page_fault_chain, nb); 46 int ret = 0;
54} 47
48 /* kprobe_running() needs smp_processor_id() */
49 if (!user_mode(regs)) {
50 preempt_disable();
51 if (kprobe_running() && kprobe_fault_handler(regs, 11))
52 ret = 1;
53 preempt_enable();
54 }
55 55
56static inline int notify_page_fault(enum die_val val, const char *str, 56 return ret;
57 struct pt_regs *regs, long err, int trap, int sig)
58{
59 struct die_args args = {
60 .regs = regs,
61 .str = str,
62 .err = err,
63 .trapnr = trap,
64 .signr = sig
65 };
66 return atomic_notifier_call_chain(&notify_page_fault_chain, val, &args);
67} 57}
68#else 58#else
69static inline int notify_page_fault(enum die_val val, const char *str, 59static inline int notify_page_fault(struct pt_regs *regs)
70 struct pt_regs *regs, long err, int trap, int sig)
71{ 60{
72 return NOTIFY_DONE; 61 return 0;
73} 62}
74#endif 63#endif
75 64
@@ -175,8 +164,7 @@ int __kprobes do_page_fault(struct pt_regs *regs, unsigned long address,
175 is_write = error_code & ESR_DST; 164 is_write = error_code & ESR_DST;
176#endif /* CONFIG_4xx || CONFIG_BOOKE */ 165#endif /* CONFIG_4xx || CONFIG_BOOKE */
177 166
178 if (notify_page_fault(DIE_PAGE_FAULT, "page_fault", regs, error_code, 167 if (notify_page_fault(regs))
179 11, SIGSEGV) == NOTIFY_STOP)
180 return 0; 168 return 0;
181 169
182 if (trap == 0x300) { 170 if (trap == 0x300) {
diff --git a/arch/powerpc/mm/hash_native_64.c b/arch/powerpc/mm/hash_native_64.c
index 79aedaf36f2b..7b7fe2d7b9dc 100644
--- a/arch/powerpc/mm/hash_native_64.c
+++ b/arch/powerpc/mm/hash_native_64.c
@@ -26,6 +26,7 @@
26#include <asm/tlb.h> 26#include <asm/tlb.h>
27#include <asm/cputable.h> 27#include <asm/cputable.h>
28#include <asm/udbg.h> 28#include <asm/udbg.h>
29#include <asm/kexec.h>
29 30
30#ifdef DEBUG_LOW 31#ifdef DEBUG_LOW
31#define DBG_LOW(fmt...) udbg_printf(fmt) 32#define DBG_LOW(fmt...) udbg_printf(fmt)
@@ -340,31 +341,70 @@ static void native_hpte_invalidate(unsigned long slot, unsigned long va,
340 local_irq_restore(flags); 341 local_irq_restore(flags);
341} 342}
342 343
343/* 344#define LP_SHIFT 12
344 * XXX This need fixing based on page size. It's only used by 345#define LP_BITS 8
345 * native_hpte_clear() for now which needs fixing too so they 346#define LP_MASK(i) ((0xFF >> (i)) << LP_SHIFT)
346 * make a good pair...
347 */
348static unsigned long slot2va(unsigned long hpte_v, unsigned long slot)
349{
350 unsigned long avpn = HPTE_V_AVPN_VAL(hpte_v);
351 unsigned long va;
352 347
353 va = avpn << 23; 348static void hpte_decode(hpte_t *hpte, unsigned long slot,
349 int *psize, unsigned long *va)
350{
351 unsigned long hpte_r = hpte->r;
352 unsigned long hpte_v = hpte->v;
353 unsigned long avpn;
354 int i, size, shift, penc, avpnm_bits;
355
356 if (!(hpte_v & HPTE_V_LARGE))
357 size = MMU_PAGE_4K;
358 else {
359 for (i = 0; i < LP_BITS; i++) {
360 if ((hpte_r & LP_MASK(i+1)) == LP_MASK(i+1))
361 break;
362 }
363 penc = LP_MASK(i+1) >> LP_SHIFT;
364 for (size = 0; size < MMU_PAGE_COUNT; size++) {
354 365
355 if (! (hpte_v & HPTE_V_LARGE)) { 366 /* 4K pages are not represented by LP */
356 unsigned long vpi, pteg; 367 if (size == MMU_PAGE_4K)
368 continue;
357 369
358 pteg = slot / HPTES_PER_GROUP; 370 /* valid entries have a shift value */
359 if (hpte_v & HPTE_V_SECONDARY) 371 if (!mmu_psize_defs[size].shift)
360 pteg = ~pteg; 372 continue;
361 373
362 vpi = ((va >> 28) ^ pteg) & htab_hash_mask; 374 if (penc == mmu_psize_defs[size].penc)
375 break;
376 }
377 }
363 378
364 va |= vpi << PAGE_SHIFT; 379 /*
380 * FIXME, the code below works for 16M, 64K, and 4K pages as these
381 * fall under the p<=23 rules for calculating the virtual address.
382 * In the case of 16M pages, an extra bit is stolen from the AVPN
383 * field to achieve the requisite 24 bits.
384 *
385 * Does not work for 16G pages or 1 TB segments.
386 */
387 shift = mmu_psize_defs[size].shift;
388 if (mmu_psize_defs[size].avpnm)
389 avpnm_bits = __ilog2_u64(mmu_psize_defs[size].avpnm) + 1;
390 else
391 avpnm_bits = 0;
392 if (shift - avpnm_bits <= 23) {
393 avpn = HPTE_V_AVPN_VAL(hpte_v) << 23;
394
395 if (shift < 23) {
396 unsigned long vpi, pteg;
397
398 pteg = slot / HPTES_PER_GROUP;
399 if (hpte_v & HPTE_V_SECONDARY)
400 pteg = ~pteg;
401 vpi = ((avpn >> 28) ^ pteg) & htab_hash_mask;
402 avpn |= (vpi << mmu_psize_defs[size].shift);
403 }
365 } 404 }
366 405
367 return va; 406 *va = avpn;
407 *psize = size;
368} 408}
369 409
370/* 410/*
@@ -374,15 +414,14 @@ static unsigned long slot2va(unsigned long hpte_v, unsigned long slot)
374 * 414 *
375 * TODO: add batching support when enabled. remember, no dynamic memory here, 415 * TODO: add batching support when enabled. remember, no dynamic memory here,
376 * athough there is the control page available... 416 * athough there is the control page available...
377 *
378 * XXX FIXME: 4k only for now !
379 */ 417 */
380static void native_hpte_clear(void) 418static void native_hpte_clear(void)
381{ 419{
382 unsigned long slot, slots, flags; 420 unsigned long slot, slots, flags;
383 hpte_t *hptep = htab_address; 421 hpte_t *hptep = htab_address;
384 unsigned long hpte_v; 422 unsigned long hpte_v, va;
385 unsigned long pteg_count; 423 unsigned long pteg_count;
424 int psize;
386 425
387 pteg_count = htab_hash_mask + 1; 426 pteg_count = htab_hash_mask + 1;
388 427
@@ -408,8 +447,9 @@ static void native_hpte_clear(void)
408 * already hold the native_tlbie_lock. 447 * already hold the native_tlbie_lock.
409 */ 448 */
410 if (hpte_v & HPTE_V_VALID) { 449 if (hpte_v & HPTE_V_VALID) {
450 hpte_decode(hptep, slot, &psize, &va);
411 hptep->v = 0; 451 hptep->v = 0;
412 __tlbie(slot2va(hpte_v, slot), MMU_PAGE_4K); 452 __tlbie(va, psize);
413 } 453 }
414 } 454 }
415 455
diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c
index 49618461defb..9b226fa7006f 100644
--- a/arch/powerpc/mm/hash_utils_64.c
+++ b/arch/powerpc/mm/hash_utils_64.c
@@ -103,7 +103,7 @@ int mmu_ci_restrictions;
103#ifdef CONFIG_DEBUG_PAGEALLOC 103#ifdef CONFIG_DEBUG_PAGEALLOC
104static u8 *linear_map_hash_slots; 104static u8 *linear_map_hash_slots;
105static unsigned long linear_map_hash_count; 105static unsigned long linear_map_hash_count;
106static spinlock_t linear_map_hash_lock; 106static DEFINE_SPINLOCK(linear_map_hash_lock);
107#endif /* CONFIG_DEBUG_PAGEALLOC */ 107#endif /* CONFIG_DEBUG_PAGEALLOC */
108 108
109/* There are definitions of page sizes arrays to be used when none 109/* There are definitions of page sizes arrays to be used when none
diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c
index 1f07f70ac89f..fb959264c104 100644
--- a/arch/powerpc/mm/hugetlbpage.c
+++ b/arch/powerpc/mm/hugetlbpage.c
@@ -12,7 +12,6 @@
12#include <linux/mm.h> 12#include <linux/mm.h>
13#include <linux/hugetlb.h> 13#include <linux/hugetlb.h>
14#include <linux/pagemap.h> 14#include <linux/pagemap.h>
15#include <linux/smp_lock.h>
16#include <linux/slab.h> 15#include <linux/slab.h>
17#include <linux/err.h> 16#include <linux/err.h>
18#include <linux/sysctl.h> 17#include <linux/sysctl.h>
diff --git a/arch/powerpc/mm/init_64.c b/arch/powerpc/mm/init_64.c
index 4416d5140c53..fe1fe852181a 100644
--- a/arch/powerpc/mm/init_64.c
+++ b/arch/powerpc/mm/init_64.c
@@ -183,11 +183,8 @@ void pgtable_cache_init(void)
183 "for size: %08x...\n", name, i, size); 183 "for size: %08x...\n", name, i, size);
184 pgtable_cache[i] = kmem_cache_create(name, 184 pgtable_cache[i] = kmem_cache_create(name,
185 size, size, 185 size, size,
186 0, 186 SLAB_PANIC,
187 zero_ctor, 187 zero_ctor,
188 NULL); 188 NULL);
189 if (! pgtable_cache[i])
190 panic("pgtable_cache_init(): could not create %s!\n",
191 name);
192 } 189 }
193} 190}
diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c
index c4bcd7546424..1a6e08f3298f 100644
--- a/arch/powerpc/mm/mem.c
+++ b/arch/powerpc/mm/mem.c
@@ -80,7 +80,6 @@ int page_is_ram(unsigned long pfn)
80 return 0; 80 return 0;
81#endif 81#endif
82} 82}
83EXPORT_SYMBOL(page_is_ram);
84 83
85pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn, 84pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
86 unsigned long size, pgprot_t vma_prot) 85 unsigned long size, pgprot_t vma_prot)
diff --git a/arch/powerpc/mm/mmu_decl.h b/arch/powerpc/mm/mmu_decl.h
index 9c4538bb04b0..2558c34eedaa 100644
--- a/arch/powerpc/mm/mmu_decl.h
+++ b/arch/powerpc/mm/mmu_decl.h
@@ -40,7 +40,8 @@ extern int __map_without_bats;
40extern unsigned long ioremap_base; 40extern unsigned long ioremap_base;
41extern unsigned int rtas_data, rtas_size; 41extern unsigned int rtas_data, rtas_size;
42 42
43extern PTE *Hash, *Hash_end; 43struct _PTE;
44extern struct _PTE *Hash, *Hash_end;
44extern unsigned long Hash_size, Hash_mask; 45extern unsigned long Hash_size, Hash_mask;
45 46
46extern unsigned int num_tlbcam_entries; 47extern unsigned int num_tlbcam_entries;
diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c
index bca560374927..d8232b7a08f7 100644
--- a/arch/powerpc/mm/pgtable_32.c
+++ b/arch/powerpc/mm/pgtable_32.c
@@ -261,7 +261,7 @@ int map_page(unsigned long va, phys_addr_t pa, int flags)
261 int err = -ENOMEM; 261 int err = -ENOMEM;
262 262
263 /* Use upper 10 bits of VA to index the first level map */ 263 /* Use upper 10 bits of VA to index the first level map */
264 pd = pmd_offset(pgd_offset_k(va), va); 264 pd = pmd_offset(pud_offset(pgd_offset_k(va), va), va);
265 /* Use middle 10 bits of VA to index the second-level map */ 265 /* Use middle 10 bits of VA to index the second-level map */
266 pg = pte_alloc_kernel(pd, va); 266 pg = pte_alloc_kernel(pd, va);
267 if (pg != 0) { 267 if (pg != 0) {
@@ -354,23 +354,27 @@ int
354get_pteptr(struct mm_struct *mm, unsigned long addr, pte_t **ptep, pmd_t **pmdp) 354get_pteptr(struct mm_struct *mm, unsigned long addr, pte_t **ptep, pmd_t **pmdp)
355{ 355{
356 pgd_t *pgd; 356 pgd_t *pgd;
357 pud_t *pud;
357 pmd_t *pmd; 358 pmd_t *pmd;
358 pte_t *pte; 359 pte_t *pte;
359 int retval = 0; 360 int retval = 0;
360 361
361 pgd = pgd_offset(mm, addr & PAGE_MASK); 362 pgd = pgd_offset(mm, addr & PAGE_MASK);
362 if (pgd) { 363 if (pgd) {
363 pmd = pmd_offset(pgd, addr & PAGE_MASK); 364 pud = pud_offset(pgd, addr & PAGE_MASK);
364 if (pmd_present(*pmd)) { 365 if (pud && pud_present(*pud)) {
365 pte = pte_offset_map(pmd, addr & PAGE_MASK); 366 pmd = pmd_offset(pud, addr & PAGE_MASK);
366 if (pte) { 367 if (pmd_present(*pmd)) {
367 retval = 1; 368 pte = pte_offset_map(pmd, addr & PAGE_MASK);
368 *ptep = pte; 369 if (pte) {
369 if (pmdp) 370 retval = 1;
370 *pmdp = pmd; 371 *ptep = pte;
371 /* XXX caller needs to do pte_unmap, yuck */ 372 if (pmdp)
372 } 373 *pmdp = pmd;
373 } 374 /* XXX caller needs to do pte_unmap, yuck */
375 }
376 }
377 }
374 } 378 }
375 return(retval); 379 return(retval);
376} 380}
diff --git a/arch/powerpc/mm/stab.c b/arch/powerpc/mm/stab.c
index eeeacab548e6..132c6bc66ce1 100644
--- a/arch/powerpc/mm/stab.c
+++ b/arch/powerpc/mm/stab.c
@@ -227,7 +227,7 @@ void switch_stab(struct task_struct *tsk, struct mm_struct *mm)
227 * the first (bolted) segment, so that do_stab_bolted won't get a 227 * the first (bolted) segment, so that do_stab_bolted won't get a
228 * recursive segment miss on the segment table itself. 228 * recursive segment miss on the segment table itself.
229 */ 229 */
230void stabs_alloc(void) 230void __init stabs_alloc(void)
231{ 231{
232 int cpu; 232 int cpu;
233 233
diff --git a/arch/powerpc/platforms/44x/44x.h b/arch/powerpc/platforms/44x/44x.h
new file mode 100644
index 000000000000..42eabf87fea3
--- /dev/null
+++ b/arch/powerpc/platforms/44x/44x.h
@@ -0,0 +1,8 @@
1#ifndef __POWERPC_PLATFORMS_44X_44X_H
2#define __POWERPC_PLATFORMS_44X_44X_H
3
4extern u8 as1_readb(volatile u8 __iomem *addr);
5extern void as1_writeb(u8 data, volatile u8 __iomem *addr);
6extern void ppc44x_reset_system(char *cmd);
7
8#endif /* __POWERPC_PLATFORMS_44X_44X_H */
diff --git a/arch/powerpc/platforms/44x/Kconfig b/arch/powerpc/platforms/44x/Kconfig
new file mode 100644
index 000000000000..8e66949e7c67
--- /dev/null
+++ b/arch/powerpc/platforms/44x/Kconfig
@@ -0,0 +1,56 @@
1#config BAMBOO
2# bool "Bamboo"
3# depends on 44x
4# default n
5# select 440EP
6# help
7# This option enables support for the IBM PPC440EP evaluation board.
8
9config EBONY
10 bool "Ebony"
11 depends on 44x
12 default y
13 select 440GP
14 help
15 This option enables support for the IBM PPC440GP evaluation board.
16
17#config LUAN
18# bool "Luan"
19# depends on 44x
20# default n
21# select 440SP
22# help
23# This option enables support for the IBM PPC440SP evaluation board.
24
25#config OCOTEA
26# bool "Ocotea"
27# depends on 44x
28# default n
29# select 440GX
30# help
31# This option enables support for the IBM PPC440GX evaluation board.
32
33# 44x specific CPU modules, selected based on the board above.
34config 440EP
35 bool
36 select PPC_FPU
37 select IBM440EP_ERR42
38
39config 440GP
40 bool
41 select IBM_NEW_EMAC_ZMII
42
43config 440GX
44 bool
45
46config 440SP
47 bool
48
49config 440A
50 bool
51 depends on 440GX
52 default y
53
54# 44x errata/workaround config symbols, selected by the CPU models above
55config IBM440EP_ERR42
56 bool
diff --git a/arch/powerpc/platforms/44x/Makefile b/arch/powerpc/platforms/44x/Makefile
new file mode 100644
index 000000000000..41d0a18a0e44
--- /dev/null
+++ b/arch/powerpc/platforms/44x/Makefile
@@ -0,0 +1,2 @@
1obj-$(CONFIG_44x) := misc_44x.o
2obj-$(CONFIG_EBONY) += ebony.o
diff --git a/arch/powerpc/platforms/44x/ebony.c b/arch/powerpc/platforms/44x/ebony.c
new file mode 100644
index 000000000000..ad526eafc90b
--- /dev/null
+++ b/arch/powerpc/platforms/44x/ebony.c
@@ -0,0 +1,73 @@
1/*
2 * Ebony board specific routines
3 *
4 * Matt Porter <mporter@kernel.crashing.org>
5 * Copyright 2002-2005 MontaVista Software Inc.
6 *
7 * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
8 * Copyright (c) 2003-2005 Zultys Technologies
9 *
10 * Rewritten and ported to the merged powerpc tree:
11 * Copyright 2007 David Gibson <dwg@au1.ibm.com>, IBM Corporation.
12 *
13 * This program is free software; you can redistribute it and/or modify it
14 * under the terms of the GNU General Public License as published by the
15 * Free Software Foundation; either version 2 of the License, or (at your
16 * option) any later version.
17 */
18
19#include <linux/init.h>
20#include <asm/machdep.h>
21#include <asm/prom.h>
22#include <asm/udbg.h>
23#include <asm/time.h>
24#include <asm/uic.h>
25#include <asm/of_platform.h>
26
27#include "44x.h"
28
29static struct of_device_id ebony_of_bus[] = {
30 { .type = "ibm,plb", },
31 { .type = "ibm,opb", },
32 { .type = "ibm,ebc", },
33 {},
34};
35
36static int __init ebony_device_probe(void)
37{
38 if (!machine_is(ebony))
39 return 0;
40
41 of_platform_bus_probe(NULL, ebony_of_bus, NULL);
42
43 return 0;
44}
45device_initcall(ebony_device_probe);
46
47/*
48 * Called very early, MMU is off, device-tree isn't unflattened
49 */
50static int __init ebony_probe(void)
51{
52 unsigned long root = of_get_flat_dt_root();
53
54 if (!of_flat_dt_is_compatible(root, "ibm,ebony"))
55 return 0;
56
57 return 1;
58}
59
60static void __init ebony_setup_arch(void)
61{
62}
63
64define_machine(ebony) {
65 .name = "Ebony",
66 .probe = ebony_probe,
67 .setup_arch = ebony_setup_arch,
68 .progress = udbg_progress,
69 .init_IRQ = uic_init_tree,
70 .get_irq = uic_get_irq,
71 .restart = ppc44x_reset_system,
72 .calibrate_decr = generic_calibrate_decr,
73};
diff --git a/arch/powerpc/platforms/44x/misc_44x.S b/arch/powerpc/platforms/44x/misc_44x.S
new file mode 100644
index 000000000000..3bce71d5d756
--- /dev/null
+++ b/arch/powerpc/platforms/44x/misc_44x.S
@@ -0,0 +1,57 @@
1/*
2 * This file contains miscellaneous low-level functions for PPC 44x.
3 * Copyright 2007 David Gibson <dwg@au1.ibm.com>, IBM Corporation.
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version
8 * 2 of the License, or (at your option) any later version.
9 *
10 */
11
12#include <asm/reg.h>
13#include <asm/ppc_asm.h>
14
15 .text
16
17/*
18 * Do an IO access in AS1
19 */
20_GLOBAL(as1_readb)
21 mfmsr r7
22 ori r0,r7,MSR_DS
23 sync
24 mtmsr r0
25 sync
26 isync
27 lbz r3,0(r3)
28 sync
29 mtmsr r7
30 sync
31 isync
32 blr
33
34_GLOBAL(as1_writeb)
35 mfmsr r7
36 ori r0,r7,MSR_DS
37 sync
38 mtmsr r0
39 sync
40 isync
41 stb r3,0(r4)
42 sync
43 mtmsr r7
44 sync
45 isync
46 blr
47
48/*
49 * void ppc44x_reset_system(char *cmd)
50 *
51 * At present, this routine just applies a system reset.
52 */
53_GLOBAL(ppc44x_reset_system)
54 mfspr r13,SPRN_DBCR0
55 oris r13,r13,DBCR0_RST_SYSTEM@h
56 mtspr SPRN_DBCR0,r13
57 b . /* Just in case the reset doesn't work */
diff --git a/arch/powerpc/platforms/52xx/Kconfig b/arch/powerpc/platforms/52xx/Kconfig
index bc4aa4a80a12..3ffaa066c2c8 100644
--- a/arch/powerpc/platforms/52xx/Kconfig
+++ b/arch/powerpc/platforms/52xx/Kconfig
@@ -1,5 +1,6 @@
1config PPC_MPC52xx 1config PPC_MPC52xx
2 bool 2 bool
3 select FSL_SOC
3 default n 4 default n
4 5
5config PPC_MPC5200 6config PPC_MPC5200
diff --git a/arch/powerpc/platforms/52xx/Makefile b/arch/powerpc/platforms/52xx/Makefile
index 07cdbcacf156..b91e39c84d46 100644
--- a/arch/powerpc/platforms/52xx/Makefile
+++ b/arch/powerpc/platforms/52xx/Makefile
@@ -8,3 +8,5 @@ endif
8 8
9obj-$(CONFIG_PPC_EFIKA) += efika.o 9obj-$(CONFIG_PPC_EFIKA) += efika.o
10obj-$(CONFIG_PPC_LITE5200) += lite5200.o 10obj-$(CONFIG_PPC_LITE5200) += lite5200.o
11
12obj-$(CONFIG_PM) += mpc52xx_sleep.o mpc52xx_pm.o
diff --git a/arch/powerpc/platforms/52xx/efika.c b/arch/powerpc/platforms/52xx/efika.c
index a6bba97314eb..f591a9fc19b9 100644
--- a/arch/powerpc/platforms/52xx/efika.c
+++ b/arch/powerpc/platforms/52xx/efika.c
@@ -184,6 +184,16 @@ static void efika_show_cpuinfo(struct seq_file *m)
184 of_node_put(root); 184 of_node_put(root);
185} 185}
186 186
187#ifdef CONFIG_PM
188static void efika_suspend_prepare(void __iomem *mbar)
189{
190 u8 pin = 4; /* GPIO_WKUP_4 (GPIO_PSC6_0 - IRDA_RX) */
191 u8 level = 1; /* wakeup on high level */
192 /* IOW. to wake it up, short pins 1 and 3 on IRDA connector */
193 mpc52xx_set_wakeup_gpio(pin, level);
194}
195#endif
196
187static void __init efika_setup_arch(void) 197static void __init efika_setup_arch(void)
188{ 198{
189 rtas_initialize(); 199 rtas_initialize();
@@ -199,6 +209,11 @@ static void __init efika_setup_arch(void)
199 209
200 efika_pcisetup(); 210 efika_pcisetup();
201 211
212#ifdef CONFIG_PM
213 mpc52xx_suspend.board_suspend_prepare = efika_suspend_prepare;
214 mpc52xx_pm_init();
215#endif
216
202 if (ppc_md.progress) 217 if (ppc_md.progress)
203 ppc_md.progress("Linux/PPC " UTS_RELEASE " running on Efika ;-)\n", 0x0); 218 ppc_md.progress("Linux/PPC " UTS_RELEASE " running on Efika ;-)\n", 0x0);
204} 219}
diff --git a/arch/powerpc/platforms/52xx/lite5200.c b/arch/powerpc/platforms/52xx/lite5200.c
index 8e2646ac417b..1cfc00dfb99a 100644
--- a/arch/powerpc/platforms/52xx/lite5200.c
+++ b/arch/powerpc/platforms/52xx/lite5200.c
@@ -85,6 +85,28 @@ error:
85 iounmap(gpio); 85 iounmap(gpio);
86} 86}
87 87
88#ifdef CONFIG_PM
89static u32 descr_a;
90static void lite5200_suspend_prepare(void __iomem *mbar)
91{
92 u8 pin = 1; /* GPIO_WKUP_1 (GPIO_PSC2_4) */
93 u8 level = 0; /* wakeup on low level */
94 mpc52xx_set_wakeup_gpio(pin, level);
95
96 /*
97 * power down usb port
98 * this needs to be called before of-ohci suspend code
99 */
100 descr_a = in_be32(mbar + 0x1048);
101 out_be32(mbar + 0x1048, (descr_a & ~0x200) | 0x100);
102}
103
104static void lite5200_resume_finish(void __iomem *mbar)
105{
106 out_be32(mbar + 0x1048, descr_a);
107}
108#endif
109
88static void __init lite5200_setup_arch(void) 110static void __init lite5200_setup_arch(void)
89{ 111{
90 struct device_node *np; 112 struct device_node *np;
@@ -107,6 +129,12 @@ static void __init lite5200_setup_arch(void)
107 mpc52xx_setup_cpu(); /* Generic */ 129 mpc52xx_setup_cpu(); /* Generic */
108 lite5200_setup_cpu(); /* Platorm specific */ 130 lite5200_setup_cpu(); /* Platorm specific */
109 131
132#ifdef CONFIG_PM
133 mpc52xx_suspend.board_suspend_prepare = lite5200_suspend_prepare;
134 mpc52xx_suspend.board_resume_finish = lite5200_resume_finish;
135 mpc52xx_pm_init();
136#endif
137
110#ifdef CONFIG_PCI 138#ifdef CONFIG_PCI
111 np = of_find_node_by_type(NULL, "pci"); 139 np = of_find_node_by_type(NULL, "pci");
112 if (np) { 140 if (np) {
diff --git a/arch/powerpc/platforms/52xx/mpc52xx_pm.c b/arch/powerpc/platforms/52xx/mpc52xx_pm.c
new file mode 100644
index 000000000000..fd40044d16cd
--- /dev/null
+++ b/arch/powerpc/platforms/52xx/mpc52xx_pm.c
@@ -0,0 +1,191 @@
1#include <linux/init.h>
2#include <linux/pm.h>
3#include <linux/io.h>
4#include <asm/time.h>
5#include <asm/cacheflush.h>
6#include <asm/mpc52xx.h>
7
8#include "mpc52xx_pic.h"
9
10
11/* these are defined in mpc52xx_sleep.S, and only used here */
12extern void mpc52xx_deep_sleep(void *sram, void *sdram_regs,
13 struct mpc52xx_cdm *, struct mpc52xx_intr *);
14extern void mpc52xx_ds_sram(void);
15extern const long mpc52xx_ds_sram_size;
16extern void mpc52xx_ds_cached(void);
17extern const long mpc52xx_ds_cached_size;
18
19static void __iomem *mbar;
20static void __iomem *sdram;
21static struct mpc52xx_cdm __iomem *cdm;
22static struct mpc52xx_intr __iomem *intr;
23static struct mpc52xx_gpio_wkup __iomem *gpiow;
24static void *sram;
25static int sram_size;
26
27struct mpc52xx_suspend mpc52xx_suspend;
28
29static int mpc52xx_pm_valid(suspend_state_t state)
30{
31 switch (state) {
32 case PM_SUSPEND_STANDBY:
33 return 1;
34 default:
35 return 0;
36 }
37}
38
39int mpc52xx_set_wakeup_gpio(u8 pin, u8 level)
40{
41 u16 tmp;
42
43 /* enable gpio */
44 out_8(&gpiow->wkup_gpioe, in_8(&gpiow->wkup_gpioe) | (1 << pin));
45 /* set as input */
46 out_8(&gpiow->wkup_ddr, in_8(&gpiow->wkup_ddr) & ~(1 << pin));
47 /* enable deep sleep interrupt */
48 out_8(&gpiow->wkup_inten, in_8(&gpiow->wkup_inten) | (1 << pin));
49 /* low/high level creates wakeup interrupt */
50 tmp = in_be16(&gpiow->wkup_itype);
51 tmp &= ~(0x3 << (pin * 2));
52 tmp |= (!level + 1) << (pin * 2);
53 out_be16(&gpiow->wkup_itype, tmp);
54 /* master enable */
55 out_8(&gpiow->wkup_maste, 1);
56
57 return 0;
58}
59
60int mpc52xx_pm_prepare(suspend_state_t state)
61{
62 if (state != PM_SUSPEND_STANDBY)
63 return -EINVAL;
64
65 /* map the whole register space */
66 mbar = mpc52xx_find_and_map("mpc5200");
67 if (!mbar) {
68 printk(KERN_ERR "%s:%i Error mapping registers\n", __func__, __LINE__);
69 return -ENOSYS;
70 }
71 /* these offsets are from mpc5200 users manual */
72 sdram = mbar + 0x100;
73 cdm = mbar + 0x200;
74 intr = mbar + 0x500;
75 gpiow = mbar + 0xc00;
76 sram = mbar + 0x8000; /* Those will be handled by the */
77 sram_size = 0x4000; /* bestcomm driver soon */
78
79 /* call board suspend code, if applicable */
80 if (mpc52xx_suspend.board_suspend_prepare)
81 mpc52xx_suspend.board_suspend_prepare(mbar);
82 else {
83 printk(KERN_ALERT "%s: %i don't know how to wake up the board\n",
84 __func__, __LINE__);
85 goto out_unmap;
86 }
87
88 return 0;
89
90 out_unmap:
91 iounmap(mbar);
92 return -ENOSYS;
93}
94
95
96char saved_sram[0x4000];
97
98int mpc52xx_pm_enter(suspend_state_t state)
99{
100 u32 clk_enables;
101 u32 msr, hid0;
102 u32 intr_main_mask;
103 void __iomem * irq_0x500 = (void *)CONFIG_KERNEL_START + 0x500;
104 unsigned long irq_0x500_stop = (unsigned long)irq_0x500 + mpc52xx_ds_cached_size;
105 char saved_0x500[mpc52xx_ds_cached_size];
106
107 /* disable all interrupts in PIC */
108 intr_main_mask = in_be32(&intr->main_mask);
109 out_be32(&intr->main_mask, intr_main_mask | 0x1ffff);
110
111 /* don't let DEC expire any time soon */
112 mtspr(SPRN_DEC, 0x7fffffff);
113
114 /* save SRAM */
115 memcpy(saved_sram, sram, sram_size);
116
117 /* copy low level suspend code to sram */
118 memcpy(sram, mpc52xx_ds_sram, mpc52xx_ds_sram_size);
119
120 out_8(&cdm->ccs_sleep_enable, 1);
121 out_8(&cdm->osc_sleep_enable, 1);
122 out_8(&cdm->ccs_qreq_test, 1);
123
124 /* disable all but SDRAM and bestcomm (SRAM) clocks */
125 clk_enables = in_be32(&cdm->clk_enables);
126 out_be32(&cdm->clk_enables, clk_enables & 0x00088000);
127
128 /* disable power management */
129 msr = mfmsr();
130 mtmsr(msr & ~MSR_POW);
131
132 /* enable sleep mode, disable others */
133 hid0 = mfspr(SPRN_HID0);
134 mtspr(SPRN_HID0, (hid0 & ~(HID0_DOZE | HID0_NAP | HID0_DPM)) | HID0_SLEEP);
135
136 /* save original, copy our irq handler, flush from dcache and invalidate icache */
137 memcpy(saved_0x500, irq_0x500, mpc52xx_ds_cached_size);
138 memcpy(irq_0x500, mpc52xx_ds_cached, mpc52xx_ds_cached_size);
139 flush_icache_range((unsigned long)irq_0x500, irq_0x500_stop);
140
141 /* call low-level sleep code */
142 mpc52xx_deep_sleep(sram, sdram, cdm, intr);
143
144 /* restore original irq handler */
145 memcpy(irq_0x500, saved_0x500, mpc52xx_ds_cached_size);
146 flush_icache_range((unsigned long)irq_0x500, irq_0x500_stop);
147
148 /* restore old power mode */
149 mtmsr(msr & ~MSR_POW);
150 mtspr(SPRN_HID0, hid0);
151 mtmsr(msr);
152
153 out_be32(&cdm->clk_enables, clk_enables);
154 out_8(&cdm->ccs_sleep_enable, 0);
155 out_8(&cdm->osc_sleep_enable, 0);
156
157 /* restore SRAM */
158 memcpy(sram, saved_sram, sram_size);
159
160 /* restart jiffies */
161 wakeup_decrementer();
162
163 /* reenable interrupts in PIC */
164 out_be32(&intr->main_mask, intr_main_mask);
165
166 return 0;
167}
168
169int mpc52xx_pm_finish(suspend_state_t state)
170{
171 /* call board resume code */
172 if (mpc52xx_suspend.board_resume_finish)
173 mpc52xx_suspend.board_resume_finish(mbar);
174
175 iounmap(mbar);
176
177 return 0;
178}
179
180static struct pm_ops mpc52xx_pm_ops = {
181 .valid = mpc52xx_pm_valid,
182 .prepare = mpc52xx_pm_prepare,
183 .enter = mpc52xx_pm_enter,
184 .finish = mpc52xx_pm_finish,
185};
186
187int __init mpc52xx_pm_init(void)
188{
189 pm_set_ops(&mpc52xx_pm_ops);
190 return 0;
191}
diff --git a/arch/powerpc/platforms/52xx/mpc52xx_sleep.S b/arch/powerpc/platforms/52xx/mpc52xx_sleep.S
new file mode 100644
index 000000000000..4dc170b0ae18
--- /dev/null
+++ b/arch/powerpc/platforms/52xx/mpc52xx_sleep.S
@@ -0,0 +1,154 @@
1#include <asm/reg.h>
2#include <asm/ppc_asm.h>
3#include <asm/processor.h>
4
5
6.text
7
8_GLOBAL(mpc52xx_deep_sleep)
9mpc52xx_deep_sleep: /* args r3-r6: SRAM, SDRAM regs, CDM regs, INTR regs */
10
11 /* enable interrupts */
12 mfmsr r7
13 ori r7, r7, 0x8000 /* EE */
14 mtmsr r7
15 sync; isync;
16
17 li r10, 0 /* flag that irq handler sets */
18
19 /* enable tmr7 (or any other) interrupt */
20 lwz r8, 0x14(r6) /* intr->main_mask */
21 ori r8, r8, 0x1
22 xori r8, r8, 0x1
23 stw r8, 0x14(r6)
24 sync
25
26 /* emulate tmr7 interrupt */
27 li r8, 0x1
28 stw r8, 0x40(r6) /* intr->main_emulate */
29 sync
30
31 /* wait for it to happen */
321:
33 cmpi cr0, r10, 1
34 bne cr0, 1b
35
36 /* lock icache */
37 mfspr r10, SPRN_HID0
38 ori r10, r10, 0x2000
39 sync; isync;
40 mtspr SPRN_HID0, r10
41 sync; isync;
42
43
44 mflr r9 /* save LR */
45
46 /* jump to sram */
47 mtlr r3
48 blrl
49
50 mtlr r9 /* restore LR */
51
52 /* unlock icache */
53 mfspr r10, SPRN_HID0
54 ori r10, r10, 0x2000
55 xori r10, r10, 0x2000
56 sync; isync;
57 mtspr SPRN_HID0, r10
58 sync; isync;
59
60
61 /* return to C code */
62 blr
63
64
65_GLOBAL(mpc52xx_ds_sram)
66mpc52xx_ds_sram:
67 /* put SDRAM into self-refresh */
68 lwz r8, 0x4(r4) /* sdram->ctrl */
69
70 oris r8, r8, 0x8000 /* mode_en */
71 stw r8, 0x4(r4)
72 sync
73
74 ori r8, r8, 0x0002 /* soft_pre */
75 stw r8, 0x4(r4)
76 sync
77 xori r8, r8, 0x0002
78
79 xoris r8, r8, 0x8000 /* !mode_en */
80 stw r8, 0x4(r4)
81 sync
82
83 oris r8, r8, 0x5000
84 xoris r8, r8, 0x4000 /* ref_en !cke */
85 stw r8, 0x4(r4)
86 sync
87
88 /* disable SDRAM clock */
89 lwz r8, 0x14(r5) /* cdm->clkenable */
90 ori r8, r8, 0x0008
91 xori r8, r8, 0x0008
92 stw r8, 0x14(r5)
93 sync
94
95
96 /* put mpc5200 to sleep */
97 mfmsr r10
98 oris r10, r10, 0x0004 /* POW = 1 */
99 sync; isync;
100 mtmsr r10
101 sync; isync;
102
103
104 /* enable clock */
105 lwz r8, 0x14(r5)
106 ori r8, r8, 0x0008
107 stw r8, 0x14(r5)
108 sync
109
110 /* get ram out of self-refresh */
111 lwz r8, 0x4(r4)
112 oris r8, r8, 0x5000 /* cke ref_en */
113 stw r8, 0x4(r4)
114 sync
115
116 blr
117_GLOBAL(mpc52xx_ds_sram_size)
118mpc52xx_ds_sram_size:
119 .long $-mpc52xx_ds_sram
120
121
122/* ### interrupt handler for wakeup from deep-sleep ### */
123_GLOBAL(mpc52xx_ds_cached)
124mpc52xx_ds_cached:
125 mtspr SPRN_SPRG0, r7
126 mtspr SPRN_SPRG1, r8
127
128 /* disable emulated interrupt */
129 mfspr r7, 311 /* MBAR */
130 addi r7, r7, 0x540 /* intr->main_emul */
131 li r8, 0
132 stw r8, 0(r7)
133 sync
134 dcbf 0, r7
135
136 /* acknowledge wakeup, so CCS releases power pown */
137 mfspr r7, 311 /* MBAR */
138 addi r7, r7, 0x524 /* intr->enc_status */
139 lwz r8, 0(r7)
140 ori r8, r8, 0x0400
141 stw r8, 0(r7)
142 sync
143 dcbf 0, r7
144
145 /* flag - we handled the interrupt */
146 li r10, 1
147
148 mfspr r8, SPRN_SPRG1
149 mfspr r7, SPRN_SPRG0
150
151 rfi
152_GLOBAL(mpc52xx_ds_cached_size)
153mpc52xx_ds_cached_size:
154 .long $-mpc52xx_ds_cached
diff --git a/arch/powerpc/platforms/83xx/mpc832x_mds.c b/arch/powerpc/platforms/83xx/mpc832x_mds.c
index fff09f5d6edf..94843ed52a93 100644
--- a/arch/powerpc/platforms/83xx/mpc832x_mds.c
+++ b/arch/powerpc/platforms/83xx/mpc832x_mds.c
@@ -111,6 +111,7 @@ static struct of_device_id mpc832x_ids[] = {
111 { .type = "soc", }, 111 { .type = "soc", },
112 { .compatible = "soc", }, 112 { .compatible = "soc", },
113 { .type = "qe", }, 113 { .type = "qe", },
114 { .type = "mdio", },
114 {}, 115 {},
115}; 116};
116 117
diff --git a/arch/powerpc/platforms/83xx/mpc832x_rdb.c b/arch/powerpc/platforms/83xx/mpc832x_rdb.c
index 6b71e9ffb11a..b0b22bb29de7 100644
--- a/arch/powerpc/platforms/83xx/mpc832x_rdb.c
+++ b/arch/powerpc/platforms/83xx/mpc832x_rdb.c
@@ -73,6 +73,7 @@ static struct of_device_id mpc832x_ids[] = {
73 { .type = "soc", }, 73 { .type = "soc", },
74 { .compatible = "soc", }, 74 { .compatible = "soc", },
75 { .type = "qe", }, 75 { .type = "qe", },
76 { .type = "mdio", },
76 {}, 77 {},
77}; 78};
78 79
diff --git a/arch/powerpc/platforms/83xx/mpc836x_mds.c b/arch/powerpc/platforms/83xx/mpc836x_mds.c
index 526ed090a446..bceeff8bbfd2 100644
--- a/arch/powerpc/platforms/83xx/mpc836x_mds.c
+++ b/arch/powerpc/platforms/83xx/mpc836x_mds.c
@@ -118,6 +118,7 @@ static struct of_device_id mpc836x_ids[] = {
118 { .type = "soc", }, 118 { .type = "soc", },
119 { .compatible = "soc", }, 119 { .compatible = "soc", },
120 { .type = "qe", }, 120 { .type = "qe", },
121 { .type = "mdio", },
121 {}, 122 {},
122}; 123};
123 124
diff --git a/arch/powerpc/platforms/85xx/mpc8544_ds.c b/arch/powerpc/platforms/85xx/mpc8544_ds.c
index 2867f85e6325..bec84ffe708e 100644
--- a/arch/powerpc/platforms/85xx/mpc8544_ds.c
+++ b/arch/powerpc/platforms/85xx/mpc8544_ds.c
@@ -84,7 +84,7 @@ void __init mpc8544_ds_pic_init(void)
84#ifdef CONFIG_PPC_I8259 84#ifdef CONFIG_PPC_I8259
85 /* Initialize the i8259 controller */ 85 /* Initialize the i8259 controller */
86 for_each_node_by_type(np, "interrupt-controller") 86 for_each_node_by_type(np, "interrupt-controller")
87 if (device_is_compatible(np, "chrp,iic")) { 87 if (of_device_is_compatible(np, "chrp,iic")) {
88 cascade_node = np; 88 cascade_node = np;
89 break; 89 break;
90 } 90 }
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_cds.c b/arch/powerpc/platforms/85xx/mpc85xx_cds.c
index 7e71636f9098..1490eb3ce0d3 100644
--- a/arch/powerpc/platforms/85xx/mpc85xx_cds.c
+++ b/arch/powerpc/platforms/85xx/mpc85xx_cds.c
@@ -197,7 +197,7 @@ static void __init mpc85xx_cds_pic_init(void)
197#ifdef CONFIG_PPC_I8259 197#ifdef CONFIG_PPC_I8259
198 /* Initialize the i8259 controller */ 198 /* Initialize the i8259 controller */
199 for_each_node_by_type(np, "interrupt-controller") 199 for_each_node_by_type(np, "interrupt-controller")
200 if (device_is_compatible(np, "chrp,iic")) { 200 if (of_device_is_compatible(np, "chrp,iic")) {
201 cascade_node = np; 201 cascade_node = np;
202 break; 202 break;
203 } 203 }
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_mds.c b/arch/powerpc/platforms/85xx/mpc85xx_mds.c
index 54db41689954..e3dddbfe66ff 100644
--- a/arch/powerpc/platforms/85xx/mpc85xx_mds.c
+++ b/arch/powerpc/platforms/85xx/mpc85xx_mds.c
@@ -147,6 +147,7 @@ static struct of_device_id mpc85xx_ids[] = {
147 { .type = "soc", }, 147 { .type = "soc", },
148 { .compatible = "soc", }, 148 { .compatible = "soc", },
149 { .type = "qe", }, 149 { .type = "qe", },
150 { .type = "mdio", },
150 {}, 151 {},
151}; 152};
152 153
diff --git a/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c b/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c
index 3d3d98f5bd4a..90877565caa3 100644
--- a/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c
+++ b/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c
@@ -102,7 +102,7 @@ mpc86xx_hpcn_init_irq(void)
102#ifdef CONFIG_PCI 102#ifdef CONFIG_PCI
103 /* Initialize i8259 controller */ 103 /* Initialize i8259 controller */
104 for_each_node_by_type(np, "interrupt-controller") 104 for_each_node_by_type(np, "interrupt-controller")
105 if (device_is_compatible(np, "chrp,iic")) { 105 if (of_device_is_compatible(np, "chrp,iic")) {
106 cascade_node = np; 106 cascade_node = np;
107 break; 107 break;
108 } 108 }
diff --git a/arch/powerpc/platforms/Kconfig b/arch/powerpc/platforms/Kconfig
index 51e33347c147..361acfa2894c 100644
--- a/arch/powerpc/platforms/Kconfig
+++ b/arch/powerpc/platforms/Kconfig
@@ -42,6 +42,7 @@ source "arch/powerpc/platforms/83xx/Kconfig"
42source "arch/powerpc/platforms/85xx/Kconfig" 42source "arch/powerpc/platforms/85xx/Kconfig"
43source "arch/powerpc/platforms/86xx/Kconfig" 43source "arch/powerpc/platforms/86xx/Kconfig"
44source "arch/powerpc/platforms/embedded6xx/Kconfig" 44source "arch/powerpc/platforms/embedded6xx/Kconfig"
45source "arch/powerpc/platforms/44x/Kconfig"
45#source "arch/powerpc/platforms/4xx/Kconfig 46#source "arch/powerpc/platforms/4xx/Kconfig
46 47
47config PPC_NATIVE 48config PPC_NATIVE
diff --git a/arch/powerpc/platforms/Makefile b/arch/powerpc/platforms/Makefile
index 452004283f17..d6e041a46d25 100644
--- a/arch/powerpc/platforms/Makefile
+++ b/arch/powerpc/platforms/Makefile
@@ -6,7 +6,8 @@ obj-$(CONFIG_PPC_PMAC) += powermac/
6endif 6endif
7endif 7endif
8obj-$(CONFIG_PPC_CHRP) += chrp/ 8obj-$(CONFIG_PPC_CHRP) += chrp/
9obj-$(CONFIG_4xx) += 4xx/ 9#obj-$(CONFIG_4xx) += 4xx/
10obj-$(CONFIG_44x) += 44x/
10obj-$(CONFIG_PPC_MPC52xx) += 52xx/ 11obj-$(CONFIG_PPC_MPC52xx) += 52xx/
11obj-$(CONFIG_PPC_8xx) += 8xx/ 12obj-$(CONFIG_PPC_8xx) += 8xx/
12obj-$(CONFIG_PPC_82xx) += 82xx/ 13obj-$(CONFIG_PPC_82xx) += 82xx/
diff --git a/arch/powerpc/platforms/cell/interrupt.c b/arch/powerpc/platforms/cell/interrupt.c
index 4fc4e92775d0..47264e722029 100644
--- a/arch/powerpc/platforms/cell/interrupt.c
+++ b/arch/powerpc/platforms/cell/interrupt.c
@@ -227,7 +227,7 @@ void iic_request_IPIs(void)
227 227
228static int iic_host_match(struct irq_host *h, struct device_node *node) 228static int iic_host_match(struct irq_host *h, struct device_node *node)
229{ 229{
230 return device_is_compatible(node, 230 return of_device_is_compatible(node,
231 "IBM,CBEA-Internal-Interrupt-Controller"); 231 "IBM,CBEA-Internal-Interrupt-Controller");
232} 232}
233 233
@@ -256,7 +256,7 @@ static int iic_host_xlate(struct irq_host *h, struct device_node *ct,
256 unsigned int node, ext, unit, class; 256 unsigned int node, ext, unit, class;
257 const u32 *val; 257 const u32 *val;
258 258
259 if (!device_is_compatible(ct, 259 if (!of_device_is_compatible(ct,
260 "IBM,CBEA-Internal-Interrupt-Controller")) 260 "IBM,CBEA-Internal-Interrupt-Controller"))
261 return -ENODEV; 261 return -ENODEV;
262 if (intsize != 1) 262 if (intsize != 1)
@@ -324,7 +324,7 @@ static int __init setup_iic(void)
324 324
325 for (dn = NULL; 325 for (dn = NULL;
326 (dn = of_find_node_by_name(dn,"interrupt-controller")) != NULL;) { 326 (dn = of_find_node_by_name(dn,"interrupt-controller")) != NULL;) {
327 if (!device_is_compatible(dn, 327 if (!of_device_is_compatible(dn,
328 "IBM,CBEA-Internal-Interrupt-Controller")) 328 "IBM,CBEA-Internal-Interrupt-Controller"))
329 continue; 329 continue;
330 np = of_get_property(dn, "ibm,interrupt-server-ranges", NULL); 330 np = of_get_property(dn, "ibm,interrupt-server-ranges", NULL);
diff --git a/arch/powerpc/platforms/cell/setup.c b/arch/powerpc/platforms/cell/setup.c
index 54b96183cb64..db6654272e13 100644
--- a/arch/powerpc/platforms/cell/setup.c
+++ b/arch/powerpc/platforms/cell/setup.c
@@ -112,7 +112,7 @@ static void __init mpic_init_IRQ(void)
112 112
113 for (dn = NULL; 113 for (dn = NULL;
114 (dn = of_find_node_by_name(dn, "interrupt-controller"));) { 114 (dn = of_find_node_by_name(dn, "interrupt-controller"));) {
115 if (!device_is_compatible(dn, "CBEA,platform-open-pic")) 115 if (!of_device_is_compatible(dn, "CBEA,platform-open-pic"))
116 continue; 116 continue;
117 117
118 /* The MPIC driver will get everything it needs from the 118 /* The MPIC driver will get everything it needs from the
diff --git a/arch/powerpc/platforms/cell/spider-pic.c b/arch/powerpc/platforms/cell/spider-pic.c
index fb1f15797bbb..05f4b3d3d756 100644
--- a/arch/powerpc/platforms/cell/spider-pic.c
+++ b/arch/powerpc/platforms/cell/spider-pic.c
@@ -358,12 +358,12 @@ void __init spider_init_IRQ(void)
358 */ 358 */
359 for (dn = NULL; 359 for (dn = NULL;
360 (dn = of_find_node_by_name(dn, "interrupt-controller"));) { 360 (dn = of_find_node_by_name(dn, "interrupt-controller"));) {
361 if (device_is_compatible(dn, "CBEA,platform-spider-pic")) { 361 if (of_device_is_compatible(dn, "CBEA,platform-spider-pic")) {
362 if (of_address_to_resource(dn, 0, &r)) { 362 if (of_address_to_resource(dn, 0, &r)) {
363 printk(KERN_WARNING "spider-pic: Failed\n"); 363 printk(KERN_WARNING "spider-pic: Failed\n");
364 continue; 364 continue;
365 } 365 }
366 } else if (device_is_compatible(dn, "sti,platform-spider-pic") 366 } else if (of_device_is_compatible(dn, "sti,platform-spider-pic")
367 && (chip < 2)) { 367 && (chip < 2)) {
368 static long hard_coded_pics[] = 368 static long hard_coded_pics[] =
369 { 0x24000008000ul, 0x34000008000ul}; 369 { 0x24000008000ul, 0x34000008000ul};
diff --git a/arch/powerpc/platforms/cell/spufs/backing_ops.c b/arch/powerpc/platforms/cell/spufs/backing_ops.c
index 3322528fa6eb..d32db9ffc6eb 100644
--- a/arch/powerpc/platforms/cell/spufs/backing_ops.c
+++ b/arch/powerpc/platforms/cell/spufs/backing_ops.c
@@ -28,7 +28,6 @@
28#include <linux/mm.h> 28#include <linux/mm.h>
29#include <linux/vmalloc.h> 29#include <linux/vmalloc.h>
30#include <linux/smp.h> 30#include <linux/smp.h>
31#include <linux/smp_lock.h>
32#include <linux/stddef.h> 31#include <linux/stddef.h>
33#include <linux/unistd.h> 32#include <linux/unistd.h>
34#include <linux/poll.h> 33#include <linux/poll.h>
diff --git a/arch/powerpc/platforms/cell/spufs/hw_ops.c b/arch/powerpc/platforms/cell/spufs/hw_ops.c
index 428875c5e4ec..fc4ed1ffbd4f 100644
--- a/arch/powerpc/platforms/cell/spufs/hw_ops.c
+++ b/arch/powerpc/platforms/cell/spufs/hw_ops.c
@@ -25,7 +25,6 @@
25#include <linux/mm.h> 25#include <linux/mm.h>
26#include <linux/poll.h> 26#include <linux/poll.h>
27#include <linux/smp.h> 27#include <linux/smp.h>
28#include <linux/smp_lock.h>
29#include <linux/stddef.h> 28#include <linux/stddef.h>
30#include <linux/unistd.h> 29#include <linux/unistd.h>
31 30
diff --git a/arch/powerpc/platforms/cell/spufs/sched.c b/arch/powerpc/platforms/cell/spufs/sched.c
index 91030b8abdca..b6ecb30e7d58 100644
--- a/arch/powerpc/platforms/cell/spufs/sched.c
+++ b/arch/powerpc/platforms/cell/spufs/sched.c
@@ -30,7 +30,6 @@
30#include <linux/completion.h> 30#include <linux/completion.h>
31#include <linux/vmalloc.h> 31#include <linux/vmalloc.h>
32#include <linux/smp.h> 32#include <linux/smp.h>
33#include <linux/smp_lock.h>
34#include <linux/stddef.h> 33#include <linux/stddef.h>
35#include <linux/unistd.h> 34#include <linux/unistd.h>
36#include <linux/numa.h> 35#include <linux/numa.h>
diff --git a/arch/powerpc/platforms/cell/spufs/switch.c b/arch/powerpc/platforms/cell/spufs/switch.c
index 8347c4a3f894..29dc59cefc38 100644
--- a/arch/powerpc/platforms/cell/spufs/switch.c
+++ b/arch/powerpc/platforms/cell/spufs/switch.c
@@ -39,7 +39,6 @@
39#include <linux/mm.h> 39#include <linux/mm.h>
40#include <linux/vmalloc.h> 40#include <linux/vmalloc.h>
41#include <linux/smp.h> 41#include <linux/smp.h>
42#include <linux/smp_lock.h>
43#include <linux/stddef.h> 42#include <linux/stddef.h>
44#include <linux/unistd.h> 43#include <linux/unistd.h>
45 44
diff --git a/arch/powerpc/platforms/chrp/pci.c b/arch/powerpc/platforms/chrp/pci.c
index 1469d6478f67..d32fedc991d3 100644
--- a/arch/powerpc/platforms/chrp/pci.c
+++ b/arch/powerpc/platforms/chrp/pci.c
@@ -267,7 +267,7 @@ chrp_find_bridges(void)
267 model = of_get_property(dev, "model", NULL); 267 model = of_get_property(dev, "model", NULL);
268 if (model == NULL) 268 if (model == NULL)
269 model = "<none>"; 269 model = "<none>";
270 if (device_is_compatible(dev, "IBM,python")) { 270 if (of_device_is_compatible(dev, "IBM,python")) {
271 setup_python(hose, dev); 271 setup_python(hose, dev);
272 } else if (is_mot 272 } else if (is_mot
273 || strncmp(model, "Motorola, Grackle", 17) == 0) { 273 || strncmp(model, "Motorola, Grackle", 17) == 0) {
diff --git a/arch/powerpc/platforms/chrp/setup.c b/arch/powerpc/platforms/chrp/setup.c
index 1870038a8e0a..373de4c063db 100644
--- a/arch/powerpc/platforms/chrp/setup.c
+++ b/arch/powerpc/platforms/chrp/setup.c
@@ -448,7 +448,7 @@ static void __init chrp_find_8259(void)
448 448
449 /* Look for cascade */ 449 /* Look for cascade */
450 for_each_node_by_type(np, "interrupt-controller") 450 for_each_node_by_type(np, "interrupt-controller")
451 if (device_is_compatible(np, "chrp,iic")) { 451 if (of_device_is_compatible(np, "chrp,iic")) {
452 pic = np; 452 pic = np;
453 break; 453 break;
454 } 454 }
diff --git a/arch/powerpc/platforms/chrp/smp.c b/arch/powerpc/platforms/chrp/smp.c
index 1d2307e87c30..3ea0eb78568e 100644
--- a/arch/powerpc/platforms/chrp/smp.c
+++ b/arch/powerpc/platforms/chrp/smp.c
@@ -11,7 +11,6 @@
11#include <linux/kernel.h> 11#include <linux/kernel.h>
12#include <linux/sched.h> 12#include <linux/sched.h>
13#include <linux/smp.h> 13#include <linux/smp.h>
14#include <linux/smp_lock.h>
15#include <linux/interrupt.h> 14#include <linux/interrupt.h>
16#include <linux/kernel_stat.h> 15#include <linux/kernel_stat.h>
17#include <linux/delay.h> 16#include <linux/delay.h>
diff --git a/arch/powerpc/platforms/embedded6xx/Kconfig b/arch/powerpc/platforms/embedded6xx/Kconfig
index 9557908ef545..8f3c2a73e165 100644
--- a/arch/powerpc/platforms/embedded6xx/Kconfig
+++ b/arch/powerpc/platforms/embedded6xx/Kconfig
@@ -20,16 +20,24 @@ config MPC7448HPC2
20 select TSI108_BRIDGE 20 select TSI108_BRIDGE
21 select DEFAULT_UIMAGE 21 select DEFAULT_UIMAGE
22 select PPC_UDBG_16550 22 select PPC_UDBG_16550
23 select MPIC
24 select MPIC_WEIRD
25 help 23 help
26 Select MPC7448HPC2 if configuring for Freescale MPC7448HPC2 (Taiga) 24 Select MPC7448HPC2 if configuring for Freescale MPC7448HPC2 (Taiga)
27 platform 25 platform
26
27config PPC_HOLLY
28 bool "PPC750GX/CL with TSI10x bridge (Hickory/Holly)"
29 select TSI108_BRIDGE
30 select PPC_UDBG_16550
31 help
32 Select PPC_HOLLY if configuring for an IBM 750GX/CL Eval
33 Board with TSI108/9 bridge (Hickory/Holly)
28endchoice 34endchoice
29 35
30config TSI108_BRIDGE 36config TSI108_BRIDGE
31 bool 37 bool
32 depends on MPC7448HPC2 38 depends on MPC7448HPC2 || PPC_HOLLY
39 select MPIC
40 select MPIC_WEIRD
33 default y 41 default y
34 42
35config MPC10X_BRIDGE 43config MPC10X_BRIDGE
diff --git a/arch/powerpc/platforms/embedded6xx/Makefile b/arch/powerpc/platforms/embedded6xx/Makefile
index d3d11a3cd656..b39fe4f470d5 100644
--- a/arch/powerpc/platforms/embedded6xx/Makefile
+++ b/arch/powerpc/platforms/embedded6xx/Makefile
@@ -3,3 +3,4 @@
3# 3#
4obj-$(CONFIG_MPC7448HPC2) += mpc7448_hpc2.o 4obj-$(CONFIG_MPC7448HPC2) += mpc7448_hpc2.o
5obj-$(CONFIG_LINKSTATION) += linkstation.o ls_uart.o 5obj-$(CONFIG_LINKSTATION) += linkstation.o ls_uart.o
6obj-$(CONFIG_PPC_HOLLY) += holly.o
diff --git a/arch/powerpc/platforms/embedded6xx/holly.c b/arch/powerpc/platforms/embedded6xx/holly.c
new file mode 100644
index 000000000000..3a0b4a01401c
--- /dev/null
+++ b/arch/powerpc/platforms/embedded6xx/holly.c
@@ -0,0 +1,317 @@
1/*
2 * Board setup routines for the IBM 750GX/CL platform w/ TSI10x bridge
3 *
4 * Copyright 2007 IBM Corporation
5 *
6 * Stephen Winiecki <stevewin@us.ibm.com>
7 * Josh Boyer <jwboyer@linux.vnet.ibm.com>
8 *
9 * Based on code from mpc7448_hpc2.c
10 *
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * version 2 as published by the Free Software Foundation.
14 */
15
16#include <linux/stddef.h>
17#include <linux/kernel.h>
18#include <linux/pci.h>
19#include <linux/kdev_t.h>
20#include <linux/console.h>
21#include <linux/delay.h>
22#include <linux/irq.h>
23#include <linux/ide.h>
24#include <linux/seq_file.h>
25#include <linux/root_dev.h>
26#include <linux/serial.h>
27#include <linux/tty.h>
28#include <linux/serial_core.h>
29
30#include <asm/system.h>
31#include <asm/time.h>
32#include <asm/machdep.h>
33#include <asm/prom.h>
34#include <asm/udbg.h>
35#include <asm/tsi108.h>
36#include <asm/pci-bridge.h>
37#include <asm/reg.h>
38#include <mm/mmu_decl.h>
39#include <asm/tsi108_irq.h>
40#include <asm/tsi108_pci.h>
41#include <asm/mpic.h>
42#include <asm/of_platform.h>
43
44#undef DEBUG
45
46#define HOLLY_PCI_CFG_PHYS 0x7c000000
47
48int holly_exclude_device(u_char bus, u_char devfn)
49{
50 if (bus == 0 && PCI_SLOT(devfn) == 0)
51 return PCIBIOS_DEVICE_NOT_FOUND;
52 else
53 return PCIBIOS_SUCCESSFUL;
54}
55
56static void holly_remap_bridge(void)
57{
58 u32 lut_val, lut_addr;
59 int i;
60
61 printk(KERN_INFO "Remapping PCI bridge\n");
62
63 /* Re-init the PCI bridge and LUT registers to have mappings that don't
64 * rely on PIBS
65 */
66 lut_addr = 0x900;
67 for (i = 0; i < 31; i++) {
68 tsi108_write_reg(TSI108_PB_OFFSET + lut_addr, 0x00000201);
69 lut_addr += 4;
70 tsi108_write_reg(TSI108_PB_OFFSET + lut_addr, 0x0);
71 lut_addr += 4;
72 }
73
74 /* Reserve the last LUT entry for PCI I/O space */
75 tsi108_write_reg(TSI108_PB_OFFSET + lut_addr, 0x00000241);
76 lut_addr += 4;
77 tsi108_write_reg(TSI108_PB_OFFSET + lut_addr, 0x0);
78
79 /* Map PCI I/O space */
80 tsi108_write_reg(TSI108_PCI_PFAB_IO_UPPER, 0x0);
81 tsi108_write_reg(TSI108_PCI_PFAB_IO, 0x1);
82
83 /* Map PCI CFG space */
84 tsi108_write_reg(TSI108_PCI_PFAB_BAR0_UPPER, 0x0);
85 tsi108_write_reg(TSI108_PCI_PFAB_BAR0, 0x7c000000 | 0x01);
86
87 /* We don't need MEM32 and PRM remapping so disable them */
88 tsi108_write_reg(TSI108_PCI_PFAB_MEM32, 0x0);
89 tsi108_write_reg(TSI108_PCI_PFAB_PFM3, 0x0);
90 tsi108_write_reg(TSI108_PCI_PFAB_PFM4, 0x0);
91
92 /* Set P2O_BAR0 */
93 tsi108_write_reg(TSI108_PCI_P2O_BAR0_UPPER, 0x0);
94 tsi108_write_reg(TSI108_PCI_P2O_BAR0, 0xc0000000);
95
96 /* Init the PCI LUTs to do no remapping */
97 lut_addr = 0x500;
98 lut_val = 0x00000002;
99
100 for (i = 0; i < 32; i++) {
101 tsi108_write_reg(TSI108_PCI_OFFSET + lut_addr, lut_val);
102 lut_addr += 4;
103 tsi108_write_reg(TSI108_PCI_OFFSET + lut_addr, 0x40000000);
104 lut_addr += 4;
105 lut_val += 0x02000000;
106 }
107 tsi108_write_reg(TSI108_PCI_P2O_PAGE_SIZES, 0x00007900);
108
109 /* Set 64-bit PCI bus address for system memory */
110 tsi108_write_reg(TSI108_PCI_P2O_BAR2_UPPER, 0x0);
111 tsi108_write_reg(TSI108_PCI_P2O_BAR2, 0x0);
112}
113
114static void __init holly_setup_arch(void)
115{
116 struct device_node *cpu;
117 struct device_node *np;
118
119 if (ppc_md.progress)
120 ppc_md.progress("holly_setup_arch():set_bridge", 0);
121
122 cpu = of_find_node_by_type(NULL, "cpu");
123 if (cpu) {
124 const unsigned int *fp;
125
126 fp = of_get_property(cpu, "clock-frequency", NULL);
127 if (fp)
128 loops_per_jiffy = *fp / HZ;
129 else
130 loops_per_jiffy = 50000000 / HZ;
131 of_node_put(cpu);
132 }
133 tsi108_csr_vir_base = get_vir_csrbase();
134
135 /* setup PCI host bridge */
136 holly_remap_bridge();
137
138 np = of_find_node_by_type(NULL, "pci");
139 if (np)
140 tsi108_setup_pci(np, HOLLY_PCI_CFG_PHYS, 1);
141
142 ppc_md.pci_exclude_device = holly_exclude_device;
143 if (ppc_md.progress)
144 ppc_md.progress("tsi108: resources set", 0x100);
145
146 printk(KERN_INFO "PPC750GX/CL Platform\n");
147}
148
149/*
150 * Interrupt setup and service. Interrrupts on the holly come
151 * from the four external INT pins, PCI interrupts are routed via
152 * PCI interrupt control registers, it generates internal IRQ23
153 *
154 * Interrupt routing on the Holly Board:
155 * TSI108:PB_INT[0] -> CPU0:INT#
156 * TSI108:PB_INT[1] -> CPU0:MCP#
157 * TSI108:PB_INT[2] -> N/C
158 * TSI108:PB_INT[3] -> N/C
159 */
160static void __init holly_init_IRQ(void)
161{
162 struct mpic *mpic;
163 phys_addr_t mpic_paddr = 0;
164 struct device_node *tsi_pic;
165#ifdef CONFIG_PCI
166 unsigned int cascade_pci_irq;
167 struct device_node *tsi_pci;
168 struct device_node *cascade_node = NULL;
169#endif
170
171 tsi_pic = of_find_node_by_type(NULL, "open-pic");
172 if (tsi_pic) {
173 unsigned int size;
174 const void *prop = of_get_property(tsi_pic, "reg", &size);
175 mpic_paddr = of_translate_address(tsi_pic, prop);
176 }
177
178 if (mpic_paddr == 0) {
179 printk(KERN_ERR "%s: No tsi108 PIC found !\n", __func__);
180 return;
181 }
182
183 pr_debug("%s: tsi108 pic phys_addr = 0x%x\n", __func__, (u32) mpic_paddr);
184
185 mpic = mpic_alloc(tsi_pic, mpic_paddr,
186 MPIC_PRIMARY | MPIC_BIG_ENDIAN | MPIC_WANTS_RESET |
187 MPIC_SPV_EOI | MPIC_NO_PTHROU_DIS | MPIC_REGSET_TSI108,
188 24,
189 NR_IRQS-4, /* num_sources used */
190 "Tsi108_PIC");
191
192 BUG_ON(mpic == NULL);
193
194 mpic_assign_isu(mpic, 0, mpic_paddr + 0x100);
195
196 mpic_init(mpic);
197
198#ifdef CONFIG_PCI
199 tsi_pci = of_find_node_by_type(NULL, "pci");
200 if (tsi_pci == NULL) {
201 printk(KERN_ERR "%s: No tsi108 pci node found !\n", __func__);
202 return;
203 }
204
205 cascade_node = of_find_node_by_type(NULL, "pic-router");
206 if (cascade_node == NULL) {
207 printk(KERN_ERR "%s: No tsi108 pci cascade node found !\n", __func__);
208 return;
209 }
210
211 cascade_pci_irq = irq_of_parse_and_map(tsi_pci, 0);
212 pr_debug("%s: tsi108 cascade_pci_irq = 0x%x\n", __func__, (u32) cascade_pci_irq);
213 tsi108_pci_int_init(cascade_node);
214 set_irq_data(cascade_pci_irq, mpic);
215 set_irq_chained_handler(cascade_pci_irq, tsi108_irq_cascade);
216#endif
217 /* Configure MPIC outputs to CPU0 */
218 tsi108_write_reg(TSI108_MPIC_OFFSET + 0x30c, 0);
219 of_node_put(tsi_pic);
220}
221
222void holly_show_cpuinfo(struct seq_file *m)
223{
224 seq_printf(m, "vendor\t\t: IBM\n");
225 seq_printf(m, "machine\t\t: PPC750 GX/CL\n");
226}
227
228void holly_restart(char *cmd)
229{
230 __be32 __iomem *ocn_bar1 = NULL;
231 unsigned long bar;
232 struct device_node *bridge = NULL;
233 const void *prop;
234 int size;
235 phys_addr_t addr = 0xc0000000;
236
237 local_irq_disable();
238
239 bridge = of_find_node_by_type(NULL, "tsi-bridge");
240 if (bridge) {
241 prop = of_get_property(bridge, "reg", &size);
242 addr = of_translate_address(bridge, prop);
243 }
244 addr += (TSI108_PB_OFFSET + 0x414);
245
246 ocn_bar1 = ioremap(addr, 0x4);
247
248 /* Turn on the BOOT bit so the addresses are correctly
249 * routed to the HLP interface */
250 bar = ioread32be(ocn_bar1);
251 bar |= 2;
252 iowrite32be(bar, ocn_bar1);
253 iosync();
254
255 /* Set SRR0 to the reset vector and turn on MSR_IP */
256 mtspr(SPRN_SRR0, 0xfff00100);
257 mtspr(SPRN_SRR1, MSR_IP);
258
259 /* Do an rfi to jump back to firmware. Somewhat evil,
260 * but it works
261 */
262 __asm__ __volatile__("rfi" : : : "memory");
263
264 /* Spin until reset happens. Shouldn't really get here */
265 for (;;) ;
266}
267
268void holly_power_off(void)
269{
270 local_irq_disable();
271 /* No way to shut power off with software */
272 for (;;) ;
273}
274
275void holly_halt(void)
276{
277 holly_power_off();
278}
279
280/*
281 * Called very early, device-tree isn't unflattened
282 */
283static int __init holly_probe(void)
284{
285 unsigned long root = of_get_flat_dt_root();
286
287 if (!of_flat_dt_is_compatible(root, "ibm,holly"))
288 return 0;
289 return 1;
290}
291
292static int ppc750_machine_check_exception(struct pt_regs *regs)
293{
294 const struct exception_table_entry *entry;
295
296 /* Are we prepared to handle this fault */
297 if ((entry = search_exception_tables(regs->nip)) != NULL) {
298 tsi108_clear_pci_cfg_error();
299 regs->msr |= MSR_RI;
300 regs->nip = entry->fixup;
301 return 1;
302 }
303 return 0;
304}
305
306define_machine(holly){
307 .name = "PPC750 GX/CL TSI",
308 .probe = holly_probe,
309 .setup_arch = holly_setup_arch,
310 .init_IRQ = holly_init_IRQ,
311 .show_cpuinfo = holly_show_cpuinfo,
312 .get_irq = mpic_get_irq,
313 .restart = holly_restart,
314 .calibrate_decr = generic_calibrate_decr,
315 .machine_check_exception = ppc750_machine_check_exception,
316 .progress = udbg_progress,
317};
diff --git a/arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c b/arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c
index c3f64ddb0be6..4542e0c837c0 100644
--- a/arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c
+++ b/arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c
@@ -41,6 +41,7 @@
41#include <asm/reg.h> 41#include <asm/reg.h>
42#include <mm/mmu_decl.h> 42#include <mm/mmu_decl.h>
43#include "mpc7448_hpc2.h" 43#include "mpc7448_hpc2.h"
44#include <asm/tsi108_pci.h>
44#include <asm/tsi108_irq.h> 45#include <asm/tsi108_irq.h>
45#include <asm/mpic.h> 46#include <asm/mpic.h>
46 47
@@ -51,16 +52,15 @@
51#define DBG(fmt...) do { } while(0) 52#define DBG(fmt...) do { } while(0)
52#endif 53#endif
53 54
55#define MPC7448HPC2_PCI_CFG_PHYS 0xfb000000
56
54#ifndef CONFIG_PCI 57#ifndef CONFIG_PCI
55isa_io_base = MPC7448_HPC2_ISA_IO_BASE; 58isa_io_base = MPC7448_HPC2_ISA_IO_BASE;
56isa_mem_base = MPC7448_HPC2_ISA_MEM_BASE; 59isa_mem_base = MPC7448_HPC2_ISA_MEM_BASE;
57pci_dram_offset = MPC7448_HPC2_PCI_MEM_OFFSET; 60pci_dram_offset = MPC7448_HPC2_PCI_MEM_OFFSET;
58#endif 61#endif
59 62
60extern int tsi108_setup_pci(struct device_node *dev);
61extern void _nmask_and_or_msr(unsigned long nmask, unsigned long or_val); 63extern void _nmask_and_or_msr(unsigned long nmask, unsigned long or_val);
62extern void tsi108_pci_int_init(struct device_node *node);
63extern void tsi108_irq_cascade(unsigned int irq, struct irq_desc *desc);
64 64
65int mpc7448_hpc2_exclude_device(u_char bus, u_char devfn) 65int mpc7448_hpc2_exclude_device(u_char bus, u_char devfn)
66{ 66{
@@ -72,28 +72,16 @@ int mpc7448_hpc2_exclude_device(u_char bus, u_char devfn)
72 72
73static void __init mpc7448_hpc2_setup_arch(void) 73static void __init mpc7448_hpc2_setup_arch(void)
74{ 74{
75 struct device_node *cpu;
76 struct device_node *np; 75 struct device_node *np;
77 if (ppc_md.progress) 76 if (ppc_md.progress)
78 ppc_md.progress("mpc7448_hpc2_setup_arch():set_bridge", 0); 77 ppc_md.progress("mpc7448_hpc2_setup_arch():set_bridge", 0);
79 78
80 cpu = of_find_node_by_type(NULL, "cpu");
81 if (cpu != 0) {
82 const unsigned int *fp;
83
84 fp = of_get_property(cpu, "clock-frequency", NULL);
85 if (fp != 0)
86 loops_per_jiffy = *fp / HZ;
87 else
88 loops_per_jiffy = 50000000 / HZ;
89 of_node_put(cpu);
90 }
91 tsi108_csr_vir_base = get_vir_csrbase(); 79 tsi108_csr_vir_base = get_vir_csrbase();
92 80
93 /* setup PCI host bridge */ 81 /* setup PCI host bridge */
94#ifdef CONFIG_PCI 82#ifdef CONFIG_PCI
95 for (np = NULL; (np = of_find_node_by_type(np, "pci")) != NULL;) 83 for (np = NULL; (np = of_find_node_by_type(np, "pci")) != NULL;)
96 tsi108_setup_pci(np); 84 tsi108_setup_pci(np, MPC7448HPC2_PCI_CFG_PHYS, 0);
97 85
98 ppc_md.pci_exclude_device = mpc7448_hpc2_exclude_device; 86 ppc_md.pci_exclude_device = mpc7448_hpc2_exclude_device;
99 if (ppc_md.progress) 87 if (ppc_md.progress)
@@ -222,7 +210,6 @@ static int __init mpc7448_hpc2_probe(void)
222 210
223static int mpc7448_machine_check_exception(struct pt_regs *regs) 211static int mpc7448_machine_check_exception(struct pt_regs *regs)
224{ 212{
225 extern void tsi108_clear_pci_cfg_error(void);
226 const struct exception_table_entry *entry; 213 const struct exception_table_entry *entry;
227 214
228 /* Are we prepared to handle this fault */ 215 /* Are we prepared to handle this fault */
diff --git a/arch/powerpc/platforms/iseries/smp.c b/arch/powerpc/platforms/iseries/smp.c
index aee5908df700..722335e32fd4 100644
--- a/arch/powerpc/platforms/iseries/smp.c
+++ b/arch/powerpc/platforms/iseries/smp.c
@@ -18,7 +18,6 @@
18#include <linux/module.h> 18#include <linux/module.h>
19#include <linux/sched.h> 19#include <linux/sched.h>
20#include <linux/smp.h> 20#include <linux/smp.h>
21#include <linux/smp_lock.h>
22#include <linux/interrupt.h> 21#include <linux/interrupt.h>
23#include <linux/kernel_stat.h> 22#include <linux/kernel_stat.h>
24#include <linux/delay.h> 23#include <linux/delay.h>
diff --git a/arch/powerpc/platforms/iseries/viopath.c b/arch/powerpc/platforms/iseries/viopath.c
index 2ca2d8a9de97..354b8dd2a2c1 100644
--- a/arch/powerpc/platforms/iseries/viopath.c
+++ b/arch/powerpc/platforms/iseries/viopath.c
@@ -36,7 +36,6 @@
36#include <linux/dma-mapping.h> 36#include <linux/dma-mapping.h>
37#include <linux/wait.h> 37#include <linux/wait.h>
38#include <linux/seq_file.h> 38#include <linux/seq_file.h>
39#include <linux/smp_lock.h>
40#include <linux/interrupt.h> 39#include <linux/interrupt.h>
41 40
42#include <asm/system.h> 41#include <asm/system.h>
diff --git a/arch/powerpc/platforms/maple/pci.c b/arch/powerpc/platforms/maple/pci.c
index b1d3b99c3f9d..7aaa5bbc9363 100644
--- a/arch/powerpc/platforms/maple/pci.c
+++ b/arch/powerpc/platforms/maple/pci.c
@@ -467,15 +467,15 @@ static int __init add_bridge(struct device_node *dev)
467 hose->last_busno = bus_range ? bus_range[1] : 0xff; 467 hose->last_busno = bus_range ? bus_range[1] : 0xff;
468 468
469 disp_name = NULL; 469 disp_name = NULL;
470 if (device_is_compatible(dev, "u3-agp")) { 470 if (of_device_is_compatible(dev, "u3-agp")) {
471 setup_u3_agp(hose); 471 setup_u3_agp(hose);
472 disp_name = "U3-AGP"; 472 disp_name = "U3-AGP";
473 primary = 0; 473 primary = 0;
474 } else if (device_is_compatible(dev, "u3-ht")) { 474 } else if (of_device_is_compatible(dev, "u3-ht")) {
475 setup_u3_ht(hose); 475 setup_u3_ht(hose);
476 disp_name = "U3-HT"; 476 disp_name = "U3-HT";
477 primary = 1; 477 primary = 1;
478 } else if (device_is_compatible(dev, "u4-pcie")) { 478 } else if (of_device_is_compatible(dev, "u4-pcie")) {
479 setup_u4_pcie(hose); 479 setup_u4_pcie(hose);
480 disp_name = "U4-PCIE"; 480 disp_name = "U4-PCIE";
481 primary = 0; 481 primary = 0;
@@ -556,12 +556,12 @@ void __init maple_pci_init(void)
556 continue; 556 continue;
557 if (strcmp(np->type, "pci") && strcmp(np->type, "ht")) 557 if (strcmp(np->type, "pci") && strcmp(np->type, "ht"))
558 continue; 558 continue;
559 if ((device_is_compatible(np, "u4-pcie") || 559 if ((of_device_is_compatible(np, "u4-pcie") ||
560 device_is_compatible(np, "u3-agp")) && 560 of_device_is_compatible(np, "u3-agp")) &&
561 add_bridge(np) == 0) 561 add_bridge(np) == 0)
562 of_node_get(np); 562 of_node_get(np);
563 563
564 if (device_is_compatible(np, "u3-ht")) { 564 if (of_device_is_compatible(np, "u3-ht")) {
565 of_node_get(np); 565 of_node_get(np);
566 ht = np; 566 ht = np;
567 } 567 }
diff --git a/arch/powerpc/platforms/maple/setup.c b/arch/powerpc/platforms/maple/setup.c
index 2a30c5b2532e..354c05861629 100644
--- a/arch/powerpc/platforms/maple/setup.c
+++ b/arch/powerpc/platforms/maple/setup.c
@@ -231,7 +231,7 @@ static void __init maple_init_IRQ(void)
231 */ 231 */
232 232
233 for_each_node_by_type(np, "interrupt-controller") 233 for_each_node_by_type(np, "interrupt-controller")
234 if (device_is_compatible(np, "open-pic")) { 234 if (of_device_is_compatible(np, "open-pic")) {
235 mpic_node = np; 235 mpic_node = np;
236 break; 236 break;
237 } 237 }
diff --git a/arch/powerpc/platforms/pasemi/cpufreq.c b/arch/powerpc/platforms/pasemi/cpufreq.c
index 2a57d6023685..3ae083851b01 100644
--- a/arch/powerpc/platforms/pasemi/cpufreq.c
+++ b/arch/powerpc/platforms/pasemi/cpufreq.c
@@ -31,6 +31,7 @@
31#include <asm/hw_irq.h> 31#include <asm/hw_irq.h>
32#include <asm/io.h> 32#include <asm/io.h>
33#include <asm/prom.h> 33#include <asm/prom.h>
34#include <asm/time.h>
34 35
35#define SDCASR_REG 0x0100 36#define SDCASR_REG 0x0100
36#define SDCASR_REG_STRIDE 0x1000 37#define SDCASR_REG_STRIDE 0x1000
@@ -204,6 +205,8 @@ static int pas_cpufreq_cpu_init(struct cpufreq_policy *policy)
204 policy->cur = pas_freqs[cur_astate].frequency; 205 policy->cur = pas_freqs[cur_astate].frequency;
205 policy->cpus = cpu_online_map; 206 policy->cpus = cpu_online_map;
206 207
208 ppc_proc_freq = policy->cur * 1000ul;
209
207 cpufreq_frequency_table_get_attr(pas_freqs, policy->cpu); 210 cpufreq_frequency_table_get_attr(pas_freqs, policy->cpu);
208 211
209 /* this ensures that policy->cpuinfo_min and policy->cpuinfo_max 212 /* this ensures that policy->cpuinfo_min and policy->cpuinfo_max
@@ -270,6 +273,7 @@ static int pas_cpufreq_target(struct cpufreq_policy *policy,
270 cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); 273 cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
271 mutex_unlock(&pas_switch_mutex); 274 mutex_unlock(&pas_switch_mutex);
272 275
276 ppc_proc_freq = freqs.new * 1000ul;
273 return 0; 277 return 0;
274} 278}
275 279
diff --git a/arch/powerpc/platforms/pasemi/setup.c b/arch/powerpc/platforms/pasemi/setup.c
index 5bdd6abd89c0..c5a3f61f8d85 100644
--- a/arch/powerpc/platforms/pasemi/setup.c
+++ b/arch/powerpc/platforms/pasemi/setup.c
@@ -114,7 +114,7 @@ static __init void pas_init_IRQ(void)
114 mpic_node = NULL; 114 mpic_node = NULL;
115 115
116 for_each_node_by_type(np, "interrupt-controller") 116 for_each_node_by_type(np, "interrupt-controller")
117 if (device_is_compatible(np, "open-pic")) { 117 if (of_device_is_compatible(np, "open-pic")) {
118 mpic_node = np; 118 mpic_node = np;
119 break; 119 break;
120 } 120 }
@@ -211,7 +211,10 @@ static struct of_device_id pasemi_bus_ids[] = {
211 211
212static int __init pasemi_publish_devices(void) 212static int __init pasemi_publish_devices(void)
213{ 213{
214 /* Publish OF platform devices for southbridge IOs */ 214 if (!machine_is(pasemi))
215 return 0;
216
217 /* Publish OF platform devices for SDC and other non-PCI devices */
215 of_platform_bus_probe(NULL, pasemi_bus_ids, NULL); 218 of_platform_bus_probe(NULL, pasemi_bus_ids, NULL);
216 219
217 return 0; 220 return 0;
diff --git a/arch/powerpc/platforms/powermac/cpufreq_64.c b/arch/powerpc/platforms/powermac/cpufreq_64.c
index 567d5523b690..00f50298c342 100644
--- a/arch/powerpc/platforms/powermac/cpufreq_64.c
+++ b/arch/powerpc/platforms/powermac/cpufreq_64.c
@@ -357,13 +357,13 @@ static unsigned int g5_cpufreq_get_speed(unsigned int cpu)
357 357
358static int g5_cpufreq_cpu_init(struct cpufreq_policy *policy) 358static int g5_cpufreq_cpu_init(struct cpufreq_policy *policy)
359{ 359{
360 if (policy->cpu != 0)
361 return -ENODEV;
362
363 policy->governor = CPUFREQ_DEFAULT_GOVERNOR; 360 policy->governor = CPUFREQ_DEFAULT_GOVERNOR;
364 policy->cpuinfo.transition_latency = CPUFREQ_ETERNAL; 361 policy->cpuinfo.transition_latency = CPUFREQ_ETERNAL;
365 policy->cur = g5_cpu_freqs[g5_query_freq()].frequency; 362 policy->cur = g5_cpu_freqs[g5_query_freq()].frequency;
366 policy->cpus = cpu_possible_map; 363 /* secondary CPUs are tied to the primary one by the
364 * cpufreq core if in the secondary policy we tell it that
365 * it actually must be one policy together with all others. */
366 policy->cpus = cpu_online_map;
367 cpufreq_frequency_table_get_attr(g5_cpu_freqs, policy->cpu); 367 cpufreq_frequency_table_get_attr(g5_cpu_freqs, policy->cpu);
368 368
369 return cpufreq_frequency_table_cpuinfo(policy, 369 return cpufreq_frequency_table_cpuinfo(policy,
diff --git a/arch/powerpc/platforms/powermac/feature.c b/arch/powerpc/platforms/powermac/feature.c
index 52cfdd86c928..f29705f8047d 100644
--- a/arch/powerpc/platforms/powermac/feature.c
+++ b/arch/powerpc/platforms/powermac/feature.c
@@ -1418,7 +1418,7 @@ static long g5_eth_phy_reset(struct device_node *node, long param, long value)
1418 phy = of_get_next_child(node, NULL); 1418 phy = of_get_next_child(node, NULL);
1419 if (!phy) 1419 if (!phy)
1420 return -ENODEV; 1420 return -ENODEV;
1421 need_reset = device_is_compatible(phy, "B5221"); 1421 need_reset = of_device_is_compatible(phy, "B5221");
1422 of_node_put(phy); 1422 of_node_put(phy);
1423 if (!need_reset) 1423 if (!need_reset)
1424 return 0; 1424 return 0;
@@ -2624,7 +2624,7 @@ static void __init probe_one_macio(const char *name, const char *compat, int typ
2624 for (node = NULL; (node = of_find_node_by_name(node, name)) != NULL;) { 2624 for (node = NULL; (node = of_find_node_by_name(node, name)) != NULL;) {
2625 if (!compat) 2625 if (!compat)
2626 break; 2626 break;
2627 if (device_is_compatible(node, compat)) 2627 if (of_device_is_compatible(node, compat))
2628 break; 2628 break;
2629 } 2629 }
2630 if (!node) 2630 if (!node)
@@ -2728,7 +2728,7 @@ initial_serial_shutdown(struct device_node *np)
2728 conn = of_get_property(np, "AAPL,connector", &len); 2728 conn = of_get_property(np, "AAPL,connector", &len);
2729 if (conn && (strcmp(conn, "infrared") == 0)) 2729 if (conn && (strcmp(conn, "infrared") == 0))
2730 port_type = PMAC_SCC_IRDA; 2730 port_type = PMAC_SCC_IRDA;
2731 else if (device_is_compatible(np, "cobalt")) 2731 else if (of_device_is_compatible(np, "cobalt"))
2732 modem = 1; 2732 modem = 1;
2733 else if (slots && slots->count > 0) { 2733 else if (slots && slots->count > 0) {
2734 if (strcmp(slots->name, "IrDA") == 0) 2734 if (strcmp(slots->name, "IrDA") == 0)
@@ -2787,7 +2787,7 @@ set_initial_features(void)
2787 */ 2787 */
2788 np = of_find_node_by_name(NULL, "ethernet"); 2788 np = of_find_node_by_name(NULL, "ethernet");
2789 while(np) { 2789 while(np) {
2790 if (device_is_compatible(np, "K2-GMAC")) 2790 if (of_device_is_compatible(np, "K2-GMAC"))
2791 g5_gmac_enable(np, 0, 1); 2791 g5_gmac_enable(np, 0, 1);
2792 np = of_find_node_by_name(np, "ethernet"); 2792 np = of_find_node_by_name(np, "ethernet");
2793 } 2793 }
@@ -2799,7 +2799,7 @@ set_initial_features(void)
2799 */ 2799 */
2800 np = of_find_node_by_name(NULL, "firewire"); 2800 np = of_find_node_by_name(NULL, "firewire");
2801 while(np) { 2801 while(np) {
2802 if (device_is_compatible(np, "pci106b,5811")) { 2802 if (of_device_is_compatible(np, "pci106b,5811")) {
2803 macio_chips[0].flags |= MACIO_FLAG_FW_SUPPORTED; 2803 macio_chips[0].flags |= MACIO_FLAG_FW_SUPPORTED;
2804 g5_fw_enable(np, 0, 1); 2804 g5_fw_enable(np, 0, 1);
2805 } 2805 }
@@ -2817,8 +2817,8 @@ set_initial_features(void)
2817 np = of_find_node_by_name(NULL, "ethernet"); 2817 np = of_find_node_by_name(NULL, "ethernet");
2818 while(np) { 2818 while(np) {
2819 if (np->parent 2819 if (np->parent
2820 && device_is_compatible(np->parent, "uni-north") 2820 && of_device_is_compatible(np->parent, "uni-north")
2821 && device_is_compatible(np, "gmac")) 2821 && of_device_is_compatible(np, "gmac"))
2822 core99_gmac_enable(np, 0, 1); 2822 core99_gmac_enable(np, 0, 1);
2823 np = of_find_node_by_name(np, "ethernet"); 2823 np = of_find_node_by_name(np, "ethernet");
2824 } 2824 }
@@ -2831,10 +2831,10 @@ set_initial_features(void)
2831 np = of_find_node_by_name(NULL, "firewire"); 2831 np = of_find_node_by_name(NULL, "firewire");
2832 while(np) { 2832 while(np) {
2833 if (np->parent 2833 if (np->parent
2834 && device_is_compatible(np->parent, "uni-north") 2834 && of_device_is_compatible(np->parent, "uni-north")
2835 && (device_is_compatible(np, "pci106b,18") || 2835 && (of_device_is_compatible(np, "pci106b,18") ||
2836 device_is_compatible(np, "pci106b,30") || 2836 of_device_is_compatible(np, "pci106b,30") ||
2837 device_is_compatible(np, "pci11c1,5811"))) { 2837 of_device_is_compatible(np, "pci11c1,5811"))) {
2838 macio_chips[0].flags |= MACIO_FLAG_FW_SUPPORTED; 2838 macio_chips[0].flags |= MACIO_FLAG_FW_SUPPORTED;
2839 core99_firewire_enable(np, 0, 1); 2839 core99_firewire_enable(np, 0, 1);
2840 } 2840 }
@@ -2845,8 +2845,8 @@ set_initial_features(void)
2845 np = of_find_node_by_name(NULL, "ata-6"); 2845 np = of_find_node_by_name(NULL, "ata-6");
2846 while(np) { 2846 while(np) {
2847 if (np->parent 2847 if (np->parent
2848 && device_is_compatible(np->parent, "uni-north") 2848 && of_device_is_compatible(np->parent, "uni-north")
2849 && device_is_compatible(np, "kauai-ata")) { 2849 && of_device_is_compatible(np, "kauai-ata")) {
2850 core99_ata100_enable(np, 1); 2850 core99_ata100_enable(np, 1);
2851 } 2851 }
2852 np = of_find_node_by_name(np, "ata-6"); 2852 np = of_find_node_by_name(np, "ata-6");
diff --git a/arch/powerpc/platforms/powermac/low_i2c.c b/arch/powerpc/platforms/powermac/low_i2c.c
index 5430e146b3e9..3f507ab9c5e5 100644
--- a/arch/powerpc/platforms/powermac/low_i2c.c
+++ b/arch/powerpc/platforms/powermac/low_i2c.c
@@ -1207,7 +1207,7 @@ static void pmac_i2c_devscan(void (*callback)(struct device_node *dev,
1207 if (strcmp(np->name, p->name)) 1207 if (strcmp(np->name, p->name))
1208 continue; 1208 continue;
1209 if (p->compatible && 1209 if (p->compatible &&
1210 !device_is_compatible(np, p->compatible)) 1210 !of_device_is_compatible(np, p->compatible))
1211 continue; 1211 continue;
1212 if (p->quirks & pmac_i2c_quirk_skip) 1212 if (p->quirks & pmac_i2c_quirk_skip)
1213 break; 1213 break;
diff --git a/arch/powerpc/platforms/powermac/nvram.c b/arch/powerpc/platforms/powermac/nvram.c
index 692945c14919..c6f0f9e738e5 100644
--- a/arch/powerpc/platforms/powermac/nvram.c
+++ b/arch/powerpc/platforms/powermac/nvram.c
@@ -553,7 +553,7 @@ static int __init core99_nvram_setup(struct device_node *dp, unsigned long addr)
553 * identify the chip using flash id commands and base ourselves on 553 * identify the chip using flash id commands and base ourselves on
554 * a list of known chips IDs 554 * a list of known chips IDs
555 */ 555 */
556 if (device_is_compatible(dp, "amd-0137")) { 556 if (of_device_is_compatible(dp, "amd-0137")) {
557 core99_erase_bank = amd_erase_bank; 557 core99_erase_bank = amd_erase_bank;
558 core99_write_bank = amd_write_bank; 558 core99_write_bank = amd_write_bank;
559 } else { 559 } else {
@@ -588,7 +588,7 @@ int __init pmac_nvram_init(void)
588 } 588 }
589 } 589 }
590 590
591 is_core_99 = device_is_compatible(dp, "nvram,flash"); 591 is_core_99 = of_device_is_compatible(dp, "nvram,flash");
592 if (is_core_99) { 592 if (is_core_99) {
593 err = core99_nvram_setup(dp, r1.start); 593 err = core99_nvram_setup(dp, r1.start);
594 goto bail; 594 goto bail;
diff --git a/arch/powerpc/platforms/powermac/pci.c b/arch/powerpc/platforms/powermac/pci.c
index 22c4ae4c6934..c4af9e21ac93 100644
--- a/arch/powerpc/platforms/powermac/pci.c
+++ b/arch/powerpc/platforms/powermac/pci.c
@@ -934,15 +934,15 @@ static int __init add_bridge(struct device_node *dev)
934 934
935 /* 64 bits only bridges */ 935 /* 64 bits only bridges */
936#ifdef CONFIG_PPC64 936#ifdef CONFIG_PPC64
937 if (device_is_compatible(dev, "u3-agp")) { 937 if (of_device_is_compatible(dev, "u3-agp")) {
938 setup_u3_agp(hose); 938 setup_u3_agp(hose);
939 disp_name = "U3-AGP"; 939 disp_name = "U3-AGP";
940 primary = 0; 940 primary = 0;
941 } else if (device_is_compatible(dev, "u3-ht")) { 941 } else if (of_device_is_compatible(dev, "u3-ht")) {
942 setup_u3_ht(hose); 942 setup_u3_ht(hose);
943 disp_name = "U3-HT"; 943 disp_name = "U3-HT";
944 primary = 1; 944 primary = 1;
945 } else if (device_is_compatible(dev, "u4-pcie")) { 945 } else if (of_device_is_compatible(dev, "u4-pcie")) {
946 setup_u4_pcie(hose); 946 setup_u4_pcie(hose);
947 disp_name = "U4-PCIE"; 947 disp_name = "U4-PCIE";
948 primary = 0; 948 primary = 0;
@@ -953,7 +953,7 @@ static int __init add_bridge(struct device_node *dev)
953 953
954 /* 32 bits only bridges */ 954 /* 32 bits only bridges */
955#ifdef CONFIG_PPC32 955#ifdef CONFIG_PPC32
956 if (device_is_compatible(dev, "uni-north")) { 956 if (of_device_is_compatible(dev, "uni-north")) {
957 primary = setup_uninorth(hose, &rsrc); 957 primary = setup_uninorth(hose, &rsrc);
958 disp_name = "UniNorth"; 958 disp_name = "UniNorth";
959 } else if (strcmp(dev->name, "pci") == 0) { 959 } else if (strcmp(dev->name, "pci") == 0) {
@@ -1129,21 +1129,21 @@ pmac_pci_enable_device_hook(struct pci_dev *dev, int initial)
1129 return 0; 1129 return 0;
1130 1130
1131 uninorth_child = node->parent && 1131 uninorth_child = node->parent &&
1132 device_is_compatible(node->parent, "uni-north"); 1132 of_device_is_compatible(node->parent, "uni-north");
1133 1133
1134 /* Firewire & GMAC were disabled after PCI probe, the driver is 1134 /* Firewire & GMAC were disabled after PCI probe, the driver is
1135 * claiming them, we must re-enable them now. 1135 * claiming them, we must re-enable them now.
1136 */ 1136 */
1137 if (uninorth_child && !strcmp(node->name, "firewire") && 1137 if (uninorth_child && !strcmp(node->name, "firewire") &&
1138 (device_is_compatible(node, "pci106b,18") || 1138 (of_device_is_compatible(node, "pci106b,18") ||
1139 device_is_compatible(node, "pci106b,30") || 1139 of_device_is_compatible(node, "pci106b,30") ||
1140 device_is_compatible(node, "pci11c1,5811"))) { 1140 of_device_is_compatible(node, "pci11c1,5811"))) {
1141 pmac_call_feature(PMAC_FTR_1394_CABLE_POWER, node, 0, 1); 1141 pmac_call_feature(PMAC_FTR_1394_CABLE_POWER, node, 0, 1);
1142 pmac_call_feature(PMAC_FTR_1394_ENABLE, node, 0, 1); 1142 pmac_call_feature(PMAC_FTR_1394_ENABLE, node, 0, 1);
1143 updatecfg = 1; 1143 updatecfg = 1;
1144 } 1144 }
1145 if (uninorth_child && !strcmp(node->name, "ethernet") && 1145 if (uninorth_child && !strcmp(node->name, "ethernet") &&
1146 device_is_compatible(node, "gmac")) { 1146 of_device_is_compatible(node, "gmac")) {
1147 pmac_call_feature(PMAC_FTR_GMAC_ENABLE, node, 0, 1); 1147 pmac_call_feature(PMAC_FTR_GMAC_ENABLE, node, 0, 1);
1148 updatecfg = 1; 1148 updatecfg = 1;
1149 } 1149 }
@@ -1203,18 +1203,18 @@ void __init pmac_pcibios_after_init(void)
1203#endif /* CONFIG_BLK_DEV_IDE */ 1203#endif /* CONFIG_BLK_DEV_IDE */
1204 1204
1205 for_each_node_by_name(nd, "firewire") { 1205 for_each_node_by_name(nd, "firewire") {
1206 if (nd->parent && (device_is_compatible(nd, "pci106b,18") || 1206 if (nd->parent && (of_device_is_compatible(nd, "pci106b,18") ||
1207 device_is_compatible(nd, "pci106b,30") || 1207 of_device_is_compatible(nd, "pci106b,30") ||
1208 device_is_compatible(nd, "pci11c1,5811")) 1208 of_device_is_compatible(nd, "pci11c1,5811"))
1209 && device_is_compatible(nd->parent, "uni-north")) { 1209 && of_device_is_compatible(nd->parent, "uni-north")) {
1210 pmac_call_feature(PMAC_FTR_1394_ENABLE, nd, 0, 0); 1210 pmac_call_feature(PMAC_FTR_1394_ENABLE, nd, 0, 0);
1211 pmac_call_feature(PMAC_FTR_1394_CABLE_POWER, nd, 0, 0); 1211 pmac_call_feature(PMAC_FTR_1394_CABLE_POWER, nd, 0, 0);
1212 } 1212 }
1213 } 1213 }
1214 of_node_put(nd); 1214 of_node_put(nd);
1215 for_each_node_by_name(nd, "ethernet") { 1215 for_each_node_by_name(nd, "ethernet") {
1216 if (nd->parent && device_is_compatible(nd, "gmac") 1216 if (nd->parent && of_device_is_compatible(nd, "gmac")
1217 && device_is_compatible(nd->parent, "uni-north")) 1217 && of_device_is_compatible(nd->parent, "uni-north"))
1218 pmac_call_feature(PMAC_FTR_GMAC_ENABLE, nd, 0, 0); 1218 pmac_call_feature(PMAC_FTR_GMAC_ENABLE, nd, 0, 0);
1219 } 1219 }
1220 of_node_put(nd); 1220 of_node_put(nd);
diff --git a/arch/powerpc/platforms/powermac/pic.c b/arch/powerpc/platforms/powermac/pic.c
index ae5097ac0378..87cd6805171a 100644
--- a/arch/powerpc/platforms/powermac/pic.c
+++ b/arch/powerpc/platforms/powermac/pic.c
@@ -364,7 +364,7 @@ static void __init pmac_pic_probe_oldstyle(void)
364 slave = of_find_node_by_name(master, "mac-io"); 364 slave = of_find_node_by_name(master, "mac-io");
365 365
366 /* Check ordering of master & slave */ 366 /* Check ordering of master & slave */
367 if (device_is_compatible(master, "gatwick")) { 367 if (of_device_is_compatible(master, "gatwick")) {
368 struct device_node *tmp; 368 struct device_node *tmp;
369 BUG_ON(slave == NULL); 369 BUG_ON(slave == NULL);
370 tmp = master; 370 tmp = master;
diff --git a/arch/powerpc/platforms/powermac/setup.c b/arch/powerpc/platforms/powermac/setup.c
index b820cabac697..a410bc76a8a8 100644
--- a/arch/powerpc/platforms/powermac/setup.c
+++ b/arch/powerpc/platforms/powermac/setup.c
@@ -439,76 +439,14 @@ static void __init find_boot_device(void)
439#endif 439#endif
440} 440}
441 441
442/* TODO: Merge the suspend-to-ram with the common code !!!
443 * currently, this is a stub implementation for suspend-to-disk
444 * only
445 */
446
447#ifdef CONFIG_SOFTWARE_SUSPEND
448
449static int pmac_pm_prepare(suspend_state_t state)
450{
451 printk(KERN_DEBUG "%s(%d)\n", __FUNCTION__, state);
452
453 return 0;
454}
455
456static int pmac_pm_enter(suspend_state_t state)
457{
458 printk(KERN_DEBUG "%s(%d)\n", __FUNCTION__, state);
459
460 /* Giveup the lazy FPU & vec so we don't have to back them
461 * up from the low level code
462 */
463 enable_kernel_fp();
464
465#ifdef CONFIG_ALTIVEC
466 if (cur_cpu_spec->cpu_features & CPU_FTR_ALTIVEC)
467 enable_kernel_altivec();
468#endif /* CONFIG_ALTIVEC */
469
470 return 0;
471}
472
473static int pmac_pm_finish(suspend_state_t state)
474{
475 printk(KERN_DEBUG "%s(%d)\n", __FUNCTION__, state);
476
477 /* Restore userland MMU context */
478 set_context(current->active_mm->context.id, current->active_mm->pgd);
479
480 return 0;
481}
482
483static int pmac_pm_valid(suspend_state_t state)
484{
485 switch (state) {
486 case PM_SUSPEND_DISK:
487 return 1;
488 /* can't do any other states via generic mechanism yet */
489 default:
490 return 0;
491 }
492}
493
494static struct pm_ops pmac_pm_ops = {
495 .pm_disk_mode = PM_DISK_SHUTDOWN,
496 .prepare = pmac_pm_prepare,
497 .enter = pmac_pm_enter,
498 .finish = pmac_pm_finish,
499 .valid = pmac_pm_valid,
500};
501
502#endif /* CONFIG_SOFTWARE_SUSPEND */
503
504static int initializing = 1; 442static int initializing = 1;
505 443
506static int pmac_late_init(void) 444static int pmac_late_init(void)
507{ 445{
508 initializing = 0; 446 initializing = 0;
509#ifdef CONFIG_SOFTWARE_SUSPEND 447 /* this is udbg (which is __init) and we can later use it during
510 pm_set_ops(&pmac_pm_ops); 448 * cpu hotplug (in smp_core99_kick_cpu) */
511#endif /* CONFIG_SOFTWARE_SUSPEND */ 449 ppc_md.progress = NULL;
512 return 0; 450 return 0;
513} 451}
514 452
@@ -721,12 +659,57 @@ static int pmac_pci_probe_mode(struct pci_bus *bus)
721 /* We need to use normal PCI probing for the AGP bus, 659 /* We need to use normal PCI probing for the AGP bus,
722 * since the device for the AGP bridge isn't in the tree. 660 * since the device for the AGP bridge isn't in the tree.
723 */ 661 */
724 if (bus->self == NULL && (device_is_compatible(node, "u3-agp") || 662 if (bus->self == NULL && (of_device_is_compatible(node, "u3-agp") ||
725 device_is_compatible(node, "u4-pcie"))) 663 of_device_is_compatible(node, "u4-pcie")))
726 return PCI_PROBE_NORMAL; 664 return PCI_PROBE_NORMAL;
727 return PCI_PROBE_DEVTREE; 665 return PCI_PROBE_DEVTREE;
728} 666}
729#endif 667
668#ifdef CONFIG_HOTPLUG_CPU
669/* access per cpu vars from generic smp.c */
670DECLARE_PER_CPU(int, cpu_state);
671
672static void pmac_cpu_die(void)
673{
674 /*
675 * turn off as much as possible, we'll be
676 * kicked out as this will only be invoked
677 * on core99 platforms for now ...
678 */
679
680 printk(KERN_INFO "CPU#%d offline\n", smp_processor_id());
681 __get_cpu_var(cpu_state) = CPU_DEAD;
682 smp_wmb();
683
684 /*
685 * during the path that leads here preemption is disabled,
686 * reenable it now so that when coming up preempt count is
687 * zero correctly
688 */
689 preempt_enable();
690
691 /*
692 * hard-disable interrupts for the non-NAP case, the NAP code
693 * needs to re-enable interrupts (but soft-disables them)
694 */
695 hard_irq_disable();
696
697 while (1) {
698 /* let's not take timer interrupts too often ... */
699 set_dec(0x7fffffff);
700
701 /* should always be true at this point */
702 if (cpu_has_feature(CPU_FTR_CAN_NAP))
703 power4_cpu_offline_powersave();
704 else {
705 HMT_low();
706 HMT_very_low();
707 }
708 }
709}
710#endif /* CONFIG_HOTPLUG_CPU */
711
712#endif /* CONFIG_PPC64 */
730 713
731define_machine(powermac) { 714define_machine(powermac) {
732 .name = "PowerMac", 715 .name = "PowerMac",
@@ -763,6 +746,6 @@ define_machine(powermac) {
763 .phys_mem_access_prot = pci_phys_mem_access_prot, 746 .phys_mem_access_prot = pci_phys_mem_access_prot,
764#endif 747#endif
765#if defined(CONFIG_HOTPLUG_CPU) && defined(CONFIG_PPC64) 748#if defined(CONFIG_HOTPLUG_CPU) && defined(CONFIG_PPC64)
766 .cpu_die = generic_mach_cpu_die, 749 .cpu_die = pmac_cpu_die,
767#endif 750#endif
768}; 751};
diff --git a/arch/powerpc/platforms/powermac/smp.c b/arch/powerpc/platforms/powermac/smp.c
index 6f32c4eca6e5..686ed82bde79 100644
--- a/arch/powerpc/platforms/powermac/smp.c
+++ b/arch/powerpc/platforms/powermac/smp.c
@@ -24,7 +24,6 @@
24#include <linux/kernel.h> 24#include <linux/kernel.h>
25#include <linux/sched.h> 25#include <linux/sched.h>
26#include <linux/smp.h> 26#include <linux/smp.h>
27#include <linux/smp_lock.h>
28#include <linux/interrupt.h> 27#include <linux/interrupt.h>
29#include <linux/kernel_stat.h> 28#include <linux/kernel_stat.h>
30#include <linux/delay.h> 29#include <linux/delay.h>
@@ -562,7 +561,7 @@ static void __init smp_core99_setup_i2c_hwsync(int ncpus)
562 /* Look for the clock chip */ 561 /* Look for the clock chip */
563 while ((cc = of_find_node_by_name(cc, "i2c-hwclock")) != NULL) { 562 while ((cc = of_find_node_by_name(cc, "i2c-hwclock")) != NULL) {
564 p = of_get_parent(cc); 563 p = of_get_parent(cc);
565 ok = p && device_is_compatible(p, "uni-n-i2c"); 564 ok = p && of_device_is_compatible(p, "uni-n-i2c");
566 of_node_put(p); 565 of_node_put(p);
567 if (!ok) 566 if (!ok)
568 continue; 567 continue;
@@ -575,11 +574,11 @@ static void __init smp_core99_setup_i2c_hwsync(int ncpus)
575 continue; 574 continue;
576 switch (*reg) { 575 switch (*reg) {
577 case 0xd2: 576 case 0xd2:
578 if (device_is_compatible(cc,"pulsar-legacy-slewing")) { 577 if (of_device_is_compatible(cc,"pulsar-legacy-slewing")) {
579 pmac_tb_freeze = smp_core99_pulsar_tb_freeze; 578 pmac_tb_freeze = smp_core99_pulsar_tb_freeze;
580 pmac_tb_pulsar_addr = 0xd2; 579 pmac_tb_pulsar_addr = 0xd2;
581 name = "Pulsar"; 580 name = "Pulsar";
582 } else if (device_is_compatible(cc, "cy28508")) { 581 } else if (of_device_is_compatible(cc, "cy28508")) {
583 pmac_tb_freeze = smp_core99_cypress_tb_freeze; 582 pmac_tb_freeze = smp_core99_cypress_tb_freeze;
584 name = "Cypress"; 583 name = "Cypress";
585 } 584 }
@@ -900,7 +899,7 @@ void smp_core99_cpu_die(unsigned int cpu)
900 cpu_dead[cpu] = 0; 899 cpu_dead[cpu] = 0;
901} 900}
902 901
903#endif 902#endif /* CONFIG_HOTPLUG_CPU && CONFIG_PP32 */
904 903
905/* Core99 Macs (dual G4s and G5s) */ 904/* Core99 Macs (dual G4s and G5s) */
906struct smp_ops_t core99_smp_ops = { 905struct smp_ops_t core99_smp_ops = {
@@ -910,8 +909,16 @@ struct smp_ops_t core99_smp_ops = {
910 .setup_cpu = smp_core99_setup_cpu, 909 .setup_cpu = smp_core99_setup_cpu,
911 .give_timebase = smp_core99_give_timebase, 910 .give_timebase = smp_core99_give_timebase,
912 .take_timebase = smp_core99_take_timebase, 911 .take_timebase = smp_core99_take_timebase,
913#if defined(CONFIG_HOTPLUG_CPU) && defined(CONFIG_PPC32) 912#if defined(CONFIG_HOTPLUG_CPU)
913# if defined(CONFIG_PPC32)
914 .cpu_disable = smp_core99_cpu_disable, 914 .cpu_disable = smp_core99_cpu_disable,
915 .cpu_die = smp_core99_cpu_die, 915 .cpu_die = smp_core99_cpu_die,
916# endif
917# if defined(CONFIG_PPC64)
918 .cpu_disable = generic_cpu_disable,
919 .cpu_die = generic_cpu_die,
920 /* intentionally do *NOT* assign cpu_enable,
921 * the generic code will use kick_cpu then! */
922# endif
916#endif 923#endif
917}; 924};
diff --git a/arch/powerpc/platforms/ps3/htab.c b/arch/powerpc/platforms/ps3/htab.c
index ea60c451cf87..a1409e450c70 100644
--- a/arch/powerpc/platforms/ps3/htab.c
+++ b/arch/powerpc/platforms/ps3/htab.c
@@ -273,7 +273,8 @@ void __init ps3_map_htab(void)
273 273
274 result = lv1_map_htab(0, &htab_addr); 274 result = lv1_map_htab(0, &htab_addr);
275 275
276 htab = (hpte_t *)__ioremap(htab_addr, htab_size, PAGE_READONLY_X); 276 htab = (hpte_t *)__ioremap(htab_addr, htab_size,
277 pgprot_val(PAGE_READONLY_X));
277 278
278 DBG("%s:%d: lpar %016lxh, virt %016lxh\n", __func__, __LINE__, 279 DBG("%s:%d: lpar %016lxh, virt %016lxh\n", __func__, __LINE__,
279 htab_addr, (unsigned long)htab); 280 htab_addr, (unsigned long)htab);
diff --git a/arch/powerpc/platforms/ps3/interrupt.c b/arch/powerpc/platforms/ps3/interrupt.c
index 631c30095617..9da82c266ba9 100644
--- a/arch/powerpc/platforms/ps3/interrupt.c
+++ b/arch/powerpc/platforms/ps3/interrupt.c
@@ -89,7 +89,18 @@ struct ps3_private {
89 89
90static DEFINE_PER_CPU(struct ps3_private, ps3_private); 90static DEFINE_PER_CPU(struct ps3_private, ps3_private);
91 91
92int ps3_alloc_irq(enum ps3_cpu_binding cpu, unsigned long outlet, 92/**
93 * ps3_virq_setup - virq related setup.
94 * @cpu: enum ps3_cpu_binding indicating the cpu the interrupt should be
95 * serviced on.
96 * @outlet: The HV outlet from the various create outlet routines.
97 * @virq: The assigned Linux virq.
98 *
99 * Calls irq_create_mapping() to get a virq and sets the chip data to
100 * ps3_private data.
101 */
102
103int ps3_virq_setup(enum ps3_cpu_binding cpu, unsigned long outlet,
93 unsigned int *virq) 104 unsigned int *virq)
94{ 105{
95 int result; 106 int result;
@@ -111,17 +122,6 @@ int ps3_alloc_irq(enum ps3_cpu_binding cpu, unsigned long outlet,
111 goto fail_create; 122 goto fail_create;
112 } 123 }
113 124
114 /* Binds outlet to cpu + virq. */
115
116 result = lv1_connect_irq_plug_ext(pd->node, pd->cpu, *virq, outlet, 0);
117
118 if (result) {
119 pr_info("%s:%d: lv1_connect_irq_plug_ext failed: %s\n",
120 __func__, __LINE__, ps3_result(result));
121 result = -EPERM;
122 goto fail_connect;
123 }
124
125 pr_debug("%s:%d: outlet %lu => cpu %u, virq %u\n", __func__, __LINE__, 125 pr_debug("%s:%d: outlet %lu => cpu %u, virq %u\n", __func__, __LINE__,
126 outlet, cpu, *virq); 126 outlet, cpu, *virq);
127 127
@@ -136,94 +136,118 @@ int ps3_alloc_irq(enum ps3_cpu_binding cpu, unsigned long outlet,
136 return result; 136 return result;
137 137
138fail_set: 138fail_set:
139 lv1_disconnect_irq_plug_ext(pd->node, pd->cpu, *virq);
140fail_connect:
141 irq_dispose_mapping(*virq); 139 irq_dispose_mapping(*virq);
142fail_create: 140fail_create:
143 return result; 141 return result;
144} 142}
145EXPORT_SYMBOL_GPL(ps3_alloc_irq);
146 143
147int ps3_free_irq(unsigned int virq) 144/**
145 * ps3_virq_destroy - virq related teardown.
146 * @virq: The assigned Linux virq.
147 *
148 * Clears chip data and calls irq_dispose_mapping() for the virq.
149 */
150
151int ps3_virq_destroy(unsigned int virq)
148{ 152{
149 int result;
150 const struct ps3_private *pd = get_irq_chip_data(virq); 153 const struct ps3_private *pd = get_irq_chip_data(virq);
151 154
152 pr_debug("%s:%d: node %lu, cpu %d, virq %u\n", __func__, __LINE__, 155 pr_debug("%s:%d: node %lu, cpu %d, virq %u\n", __func__, __LINE__,
153 pd->node, pd->cpu, virq); 156 pd->node, pd->cpu, virq);
154 157
155 result = lv1_disconnect_irq_plug_ext(pd->node, pd->cpu, virq);
156
157 if (result)
158 pr_info("%s:%d: lv1_disconnect_irq_plug_ext failed: %s\n",
159 __func__, __LINE__, ps3_result(result));
160
161 set_irq_chip_data(virq, NULL); 158 set_irq_chip_data(virq, NULL);
162 irq_dispose_mapping(virq); 159 irq_dispose_mapping(virq);
163 return result; 160
161 pr_debug("%s:%d <-\n", __func__, __LINE__);
162 return 0;
164} 163}
165EXPORT_SYMBOL_GPL(ps3_free_irq);
166 164
167/** 165/**
168 * ps3_alloc_io_irq - Assign a virq to a system bus device. 166 * ps3_irq_plug_setup - Generic outlet and virq related setup.
169 * @cpu: enum ps3_cpu_binding indicating the cpu the interrupt should be 167 * @cpu: enum ps3_cpu_binding indicating the cpu the interrupt should be
170 * serviced on. 168 * serviced on.
171 * @interrupt_id: The device interrupt id read from the system repository. 169 * @outlet: The HV outlet from the various create outlet routines.
172 * @virq: The assigned Linux virq. 170 * @virq: The assigned Linux virq.
173 * 171 *
174 * An io irq represents a non-virtualized device interrupt. interrupt_id 172 * Sets up virq and connects the irq plug.
175 * coresponds to the interrupt number of the interrupt controller.
176 */ 173 */
177 174
178int ps3_alloc_io_irq(enum ps3_cpu_binding cpu, unsigned int interrupt_id, 175int ps3_irq_plug_setup(enum ps3_cpu_binding cpu, unsigned long outlet,
179 unsigned int *virq) 176 unsigned int *virq)
180{ 177{
181 int result; 178 int result;
182 unsigned long outlet; 179 struct ps3_private *pd;
183 180
184 result = lv1_construct_io_irq_outlet(interrupt_id, &outlet); 181 result = ps3_virq_setup(cpu, outlet, virq);
185 182
186 if (result) { 183 if (result) {
187 pr_debug("%s:%d: lv1_construct_io_irq_outlet failed: %s\n", 184 pr_debug("%s:%d: ps3_virq_setup failed\n", __func__, __LINE__);
188 __func__, __LINE__, ps3_result(result)); 185 goto fail_setup;
189 return result;
190 } 186 }
191 187
192 result = ps3_alloc_irq(cpu, outlet, virq); 188 pd = get_irq_chip_data(*virq);
193 BUG_ON(result); 189
190 /* Binds outlet to cpu + virq. */
191
192 result = lv1_connect_irq_plug_ext(pd->node, pd->cpu, *virq, outlet, 0);
194 193
194 if (result) {
195 pr_info("%s:%d: lv1_connect_irq_plug_ext failed: %s\n",
196 __func__, __LINE__, ps3_result(result));
197 result = -EPERM;
198 goto fail_connect;
199 }
200
201 return result;
202
203fail_connect:
204 ps3_virq_destroy(*virq);
205fail_setup:
195 return result; 206 return result;
196} 207}
197EXPORT_SYMBOL_GPL(ps3_alloc_io_irq); 208EXPORT_SYMBOL_GPL(ps3_irq_plug_setup);
209
210/**
211 * ps3_irq_plug_destroy - Generic outlet and virq related teardown.
212 * @virq: The assigned Linux virq.
213 *
214 * Disconnects the irq plug and tears down virq.
215 * Do not call for system bus event interrupts setup with
216 * ps3_sb_event_receive_port_setup().
217 */
198 218
199int ps3_free_io_irq(unsigned int virq) 219int ps3_irq_plug_destroy(unsigned int virq)
200{ 220{
201 int result; 221 int result;
222 const struct ps3_private *pd = get_irq_chip_data(virq);
202 223
203 result = lv1_destruct_io_irq_outlet(virq_to_hw(virq)); 224 pr_debug("%s:%d: node %lu, cpu %d, virq %u\n", __func__, __LINE__,
225 pd->node, pd->cpu, virq);
226
227 result = lv1_disconnect_irq_plug_ext(pd->node, pd->cpu, virq);
204 228
205 if (result) 229 if (result)
206 pr_debug("%s:%d: lv1_destruct_io_irq_outlet failed: %s\n", 230 pr_info("%s:%d: lv1_disconnect_irq_plug_ext failed: %s\n",
207 __func__, __LINE__, ps3_result(result)); 231 __func__, __LINE__, ps3_result(result));
208 232
209 ps3_free_irq(virq); 233 ps3_virq_destroy(virq);
210 234
211 return result; 235 return result;
212} 236}
213EXPORT_SYMBOL_GPL(ps3_free_io_irq); 237EXPORT_SYMBOL_GPL(ps3_irq_plug_destroy);
214 238
215/** 239/**
216 * ps3_alloc_event_irq - Allocate a virq for use with a system event. 240 * ps3_event_receive_port_setup - Setup an event receive port.
217 * @cpu: enum ps3_cpu_binding indicating the cpu the interrupt should be 241 * @cpu: enum ps3_cpu_binding indicating the cpu the interrupt should be
218 * serviced on. 242 * serviced on.
219 * @virq: The assigned Linux virq. 243 * @virq: The assigned Linux virq.
220 * 244 *
221 * The virq can be used with lv1_connect_interrupt_event_receive_port() to 245 * The virq can be used with lv1_connect_interrupt_event_receive_port() to
222 * arrange to receive events, or with ps3_send_event_locally() to signal 246 * arrange to receive interrupts from system-bus devices, or with
223 * events. 247 * ps3_send_event_locally() to signal events.
224 */ 248 */
225 249
226int ps3_alloc_event_irq(enum ps3_cpu_binding cpu, unsigned int *virq) 250int ps3_event_receive_port_setup(enum ps3_cpu_binding cpu, unsigned int *virq)
227{ 251{
228 int result; 252 int result;
229 unsigned long outlet; 253 unsigned long outlet;
@@ -237,17 +261,27 @@ int ps3_alloc_event_irq(enum ps3_cpu_binding cpu, unsigned int *virq)
237 return result; 261 return result;
238 } 262 }
239 263
240 result = ps3_alloc_irq(cpu, outlet, virq); 264 result = ps3_irq_plug_setup(cpu, outlet, virq);
241 BUG_ON(result); 265 BUG_ON(result);
242 266
243 return result; 267 return result;
244} 268}
269EXPORT_SYMBOL_GPL(ps3_event_receive_port_setup);
270
271/**
272 * ps3_event_receive_port_destroy - Destroy an event receive port.
273 * @virq: The assigned Linux virq.
274 *
275 * Since ps3_event_receive_port_destroy destroys the receive port outlet,
276 * SB devices need to call disconnect_interrupt_event_receive_port() before
277 * this.
278 */
245 279
246int ps3_free_event_irq(unsigned int virq) 280int ps3_event_receive_port_destroy(unsigned int virq)
247{ 281{
248 int result; 282 int result;
249 283
250 pr_debug(" -> %s:%d\n", __func__, __LINE__); 284 pr_debug(" -> %s:%d virq: %u\n", __func__, __LINE__, virq);
251 285
252 result = lv1_destruct_event_receive_port(virq_to_hw(virq)); 286 result = lv1_destruct_event_receive_port(virq_to_hw(virq));
253 287
@@ -255,11 +289,17 @@ int ps3_free_event_irq(unsigned int virq)
255 pr_debug("%s:%d: lv1_destruct_event_receive_port failed: %s\n", 289 pr_debug("%s:%d: lv1_destruct_event_receive_port failed: %s\n",
256 __func__, __LINE__, ps3_result(result)); 290 __func__, __LINE__, ps3_result(result));
257 291
258 ps3_free_irq(virq); 292 /* lv1_destruct_event_receive_port() destroys the IRQ plug,
293 * so don't call ps3_irq_plug_destroy() here.
294 */
295
296 result = ps3_virq_destroy(virq);
297 BUG_ON(result);
259 298
260 pr_debug(" <- %s:%d\n", __func__, __LINE__); 299 pr_debug(" <- %s:%d\n", __func__, __LINE__);
261 return result; 300 return result;
262} 301}
302EXPORT_SYMBOL_GPL(ps3_event_receive_port_destroy);
263 303
264int ps3_send_event_locally(unsigned int virq) 304int ps3_send_event_locally(unsigned int virq)
265{ 305{
@@ -267,7 +307,7 @@ int ps3_send_event_locally(unsigned int virq)
267} 307}
268 308
269/** 309/**
270 * ps3_connect_event_irq - Assign a virq to a system bus device. 310 * ps3_sb_event_receive_port_setup - Setup a system bus event receive port.
271 * @cpu: enum ps3_cpu_binding indicating the cpu the interrupt should be 311 * @cpu: enum ps3_cpu_binding indicating the cpu the interrupt should be
272 * serviced on. 312 * serviced on.
273 * @did: The HV device identifier read from the system repository. 313 * @did: The HV device identifier read from the system repository.
@@ -278,13 +318,15 @@ int ps3_send_event_locally(unsigned int virq)
278 * coresponds to the software interrupt number. 318 * coresponds to the software interrupt number.
279 */ 319 */
280 320
281int ps3_connect_event_irq(enum ps3_cpu_binding cpu, 321int ps3_sb_event_receive_port_setup(enum ps3_cpu_binding cpu,
282 const struct ps3_device_id *did, unsigned int interrupt_id, 322 const struct ps3_device_id *did, unsigned int interrupt_id,
283 unsigned int *virq) 323 unsigned int *virq)
284{ 324{
325 /* this should go in system-bus.c */
326
285 int result; 327 int result;
286 328
287 result = ps3_alloc_event_irq(cpu, virq); 329 result = ps3_event_receive_port_setup(cpu, virq);
288 330
289 if (result) 331 if (result)
290 return result; 332 return result;
@@ -296,7 +338,7 @@ int ps3_connect_event_irq(enum ps3_cpu_binding cpu,
296 pr_debug("%s:%d: lv1_connect_interrupt_event_receive_port" 338 pr_debug("%s:%d: lv1_connect_interrupt_event_receive_port"
297 " failed: %s\n", __func__, __LINE__, 339 " failed: %s\n", __func__, __LINE__,
298 ps3_result(result)); 340 ps3_result(result));
299 ps3_free_event_irq(*virq); 341 ps3_event_receive_port_destroy(*virq);
300 *virq = NO_IRQ; 342 *virq = NO_IRQ;
301 return result; 343 return result;
302 } 344 }
@@ -306,10 +348,13 @@ int ps3_connect_event_irq(enum ps3_cpu_binding cpu,
306 348
307 return 0; 349 return 0;
308} 350}
351EXPORT_SYMBOL(ps3_sb_event_receive_port_setup);
309 352
310int ps3_disconnect_event_irq(const struct ps3_device_id *did, 353int ps3_sb_event_receive_port_destroy(const struct ps3_device_id *did,
311 unsigned int interrupt_id, unsigned int virq) 354 unsigned int interrupt_id, unsigned int virq)
312{ 355{
356 /* this should go in system-bus.c */
357
313 int result; 358 int result;
314 359
315 pr_debug(" -> %s:%d: interrupt_id %u, virq %u\n", __func__, __LINE__, 360 pr_debug(" -> %s:%d: interrupt_id %u, virq %u\n", __func__, __LINE__,
@@ -323,14 +368,65 @@ int ps3_disconnect_event_irq(const struct ps3_device_id *did,
323 " failed: %s\n", __func__, __LINE__, 368 " failed: %s\n", __func__, __LINE__,
324 ps3_result(result)); 369 ps3_result(result));
325 370
326 ps3_free_event_irq(virq); 371 result = ps3_event_receive_port_destroy(virq);
372 BUG_ON(result);
327 373
328 pr_debug(" <- %s:%d\n", __func__, __LINE__); 374 pr_debug(" <- %s:%d\n", __func__, __LINE__);
329 return result; 375 return result;
330} 376}
377EXPORT_SYMBOL(ps3_sb_event_receive_port_destroy);
331 378
332/** 379/**
333 * ps3_alloc_vuart_irq - Configure the system virtual uart virq. 380 * ps3_io_irq_setup - Setup a system bus io irq.
381 * @cpu: enum ps3_cpu_binding indicating the cpu the interrupt should be
382 * serviced on.
383 * @interrupt_id: The device interrupt id read from the system repository.
384 * @virq: The assigned Linux virq.
385 *
386 * An io irq represents a non-virtualized device interrupt. interrupt_id
387 * coresponds to the interrupt number of the interrupt controller.
388 */
389
390int ps3_io_irq_setup(enum ps3_cpu_binding cpu, unsigned int interrupt_id,
391 unsigned int *virq)
392{
393 int result;
394 unsigned long outlet;
395
396 result = lv1_construct_io_irq_outlet(interrupt_id, &outlet);
397
398 if (result) {
399 pr_debug("%s:%d: lv1_construct_io_irq_outlet failed: %s\n",
400 __func__, __LINE__, ps3_result(result));
401 return result;
402 }
403
404 result = ps3_irq_plug_setup(cpu, outlet, virq);
405 BUG_ON(result);
406
407 return result;
408}
409EXPORT_SYMBOL_GPL(ps3_io_irq_setup);
410
411int ps3_io_irq_destroy(unsigned int virq)
412{
413 int result;
414
415 result = lv1_destruct_io_irq_outlet(virq_to_hw(virq));
416
417 if (result)
418 pr_debug("%s:%d: lv1_destruct_io_irq_outlet failed: %s\n",
419 __func__, __LINE__, ps3_result(result));
420
421 result = ps3_irq_plug_destroy(virq);
422 BUG_ON(result);
423
424 return result;
425}
426EXPORT_SYMBOL_GPL(ps3_io_irq_destroy);
427
428/**
429 * ps3_vuart_irq_setup - Setup the system virtual uart virq.
334 * @cpu: enum ps3_cpu_binding indicating the cpu the interrupt should be 430 * @cpu: enum ps3_cpu_binding indicating the cpu the interrupt should be
335 * serviced on. 431 * serviced on.
336 * @virt_addr_bmp: The caller supplied virtual uart interrupt bitmap. 432 * @virt_addr_bmp: The caller supplied virtual uart interrupt bitmap.
@@ -340,7 +436,7 @@ int ps3_disconnect_event_irq(const struct ps3_device_id *did,
340 * freeing the interrupt will return a wrong state error. 436 * freeing the interrupt will return a wrong state error.
341 */ 437 */
342 438
343int ps3_alloc_vuart_irq(enum ps3_cpu_binding cpu, void* virt_addr_bmp, 439int ps3_vuart_irq_setup(enum ps3_cpu_binding cpu, void* virt_addr_bmp,
344 unsigned int *virq) 440 unsigned int *virq)
345{ 441{
346 int result; 442 int result;
@@ -359,13 +455,13 @@ int ps3_alloc_vuart_irq(enum ps3_cpu_binding cpu, void* virt_addr_bmp,
359 return result; 455 return result;
360 } 456 }
361 457
362 result = ps3_alloc_irq(cpu, outlet, virq); 458 result = ps3_irq_plug_setup(cpu, outlet, virq);
363 BUG_ON(result); 459 BUG_ON(result);
364 460
365 return result; 461 return result;
366} 462}
367 463
368int ps3_free_vuart_irq(unsigned int virq) 464int ps3_vuart_irq_destroy(unsigned int virq)
369{ 465{
370 int result; 466 int result;
371 467
@@ -377,13 +473,14 @@ int ps3_free_vuart_irq(unsigned int virq)
377 return result; 473 return result;
378 } 474 }
379 475
380 ps3_free_irq(virq); 476 result = ps3_irq_plug_destroy(virq);
477 BUG_ON(result);
381 478
382 return result; 479 return result;
383} 480}
384 481
385/** 482/**
386 * ps3_alloc_spe_irq - Configure an spe virq. 483 * ps3_spe_irq_setup - Setup an spe virq.
387 * @cpu: enum ps3_cpu_binding indicating the cpu the interrupt should be 484 * @cpu: enum ps3_cpu_binding indicating the cpu the interrupt should be
388 * serviced on. 485 * serviced on.
389 * @spe_id: The spe_id returned from lv1_construct_logical_spe(). 486 * @spe_id: The spe_id returned from lv1_construct_logical_spe().
@@ -392,7 +489,7 @@ int ps3_free_vuart_irq(unsigned int virq)
392 * 489 *
393 */ 490 */
394 491
395int ps3_alloc_spe_irq(enum ps3_cpu_binding cpu, unsigned long spe_id, 492int ps3_spe_irq_setup(enum ps3_cpu_binding cpu, unsigned long spe_id,
396 unsigned int class, unsigned int *virq) 493 unsigned int class, unsigned int *virq)
397{ 494{
398 int result; 495 int result;
@@ -408,15 +505,16 @@ int ps3_alloc_spe_irq(enum ps3_cpu_binding cpu, unsigned long spe_id,
408 return result; 505 return result;
409 } 506 }
410 507
411 result = ps3_alloc_irq(cpu, outlet, virq); 508 result = ps3_irq_plug_setup(cpu, outlet, virq);
412 BUG_ON(result); 509 BUG_ON(result);
413 510
414 return result; 511 return result;
415} 512}
416 513
417int ps3_free_spe_irq(unsigned int virq) 514int ps3_spe_irq_destroy(unsigned int virq)
418{ 515{
419 ps3_free_irq(virq); 516 int result = ps3_irq_plug_destroy(virq);
517 BUG_ON(result);
420 return 0; 518 return 0;
421} 519}
422 520
diff --git a/arch/powerpc/platforms/ps3/mm.c b/arch/powerpc/platforms/ps3/mm.c
index 2014d2b44449..f8a3e206c584 100644
--- a/arch/powerpc/platforms/ps3/mm.c
+++ b/arch/powerpc/platforms/ps3/mm.c
@@ -826,5 +826,4 @@ void __init ps3_mm_init(void)
826void ps3_mm_shutdown(void) 826void ps3_mm_shutdown(void)
827{ 827{
828 ps3_mm_region_destroy(&map.r1); 828 ps3_mm_region_destroy(&map.r1);
829 map.total = map.rm.size;
830} 829}
diff --git a/arch/powerpc/platforms/ps3/setup.c b/arch/powerpc/platforms/ps3/setup.c
index ac5df9688dcb..c9894933084f 100644
--- a/arch/powerpc/platforms/ps3/setup.c
+++ b/arch/powerpc/platforms/ps3/setup.c
@@ -137,6 +137,12 @@ early_param("ps3fb", early_parse_ps3fb);
137#define prealloc_ps3fb_videomemory() do { } while (0) 137#define prealloc_ps3fb_videomemory() do { } while (0)
138#endif 138#endif
139 139
140static int ps3_set_dabr(u64 dabr)
141{
142 enum {DABR_USER = 1, DABR_KERNEL = 2,};
143
144 return lv1_set_dabr(dabr, DABR_KERNEL | DABR_USER) ? -1 : 0;
145}
140 146
141static void __init ps3_setup_arch(void) 147static void __init ps3_setup_arch(void)
142{ 148{
@@ -234,6 +240,7 @@ define_machine(ps3) {
234 .get_boot_time = ps3_get_boot_time, 240 .get_boot_time = ps3_get_boot_time,
235 .set_rtc_time = ps3_set_rtc_time, 241 .set_rtc_time = ps3_set_rtc_time,
236 .get_rtc_time = ps3_get_rtc_time, 242 .get_rtc_time = ps3_get_rtc_time,
243 .set_dabr = ps3_set_dabr,
237 .calibrate_decr = ps3_calibrate_decr, 244 .calibrate_decr = ps3_calibrate_decr,
238 .progress = ps3_progress, 245 .progress = ps3_progress,
239 .restart = ps3_restart, 246 .restart = ps3_restart,
diff --git a/arch/powerpc/platforms/ps3/smp.c b/arch/powerpc/platforms/ps3/smp.c
index 6fb887961a6d..8729348c0608 100644
--- a/arch/powerpc/platforms/ps3/smp.c
+++ b/arch/powerpc/platforms/ps3/smp.c
@@ -110,7 +110,7 @@ static void __init ps3_smp_setup_cpu(int cpu)
110 BUILD_BUG_ON(PPC_MSG_DEBUGGER_BREAK != 3); 110 BUILD_BUG_ON(PPC_MSG_DEBUGGER_BREAK != 3);
111 111
112 for (i = 0; i < MSG_COUNT; i++) { 112 for (i = 0; i < MSG_COUNT; i++) {
113 result = ps3_alloc_event_irq(cpu, &virqs[i]); 113 result = ps3_event_receive_port_setup(cpu, &virqs[i]);
114 114
115 if (result) 115 if (result)
116 continue; 116 continue;
@@ -134,11 +134,13 @@ void ps3_smp_cleanup_cpu(int cpu)
134 int i; 134 int i;
135 135
136 DBG(" -> %s:%d: (%d)\n", __func__, __LINE__, cpu); 136 DBG(" -> %s:%d: (%d)\n", __func__, __LINE__, cpu);
137
137 for (i = 0; i < MSG_COUNT; i++) { 138 for (i = 0; i < MSG_COUNT; i++) {
138 ps3_free_event_irq(virqs[i]);
139 free_irq(virqs[i], (void*)(long)i); 139 free_irq(virqs[i], (void*)(long)i);
140 ps3_event_receive_port_destroy(virqs[i]);
140 virqs[i] = NO_IRQ; 141 virqs[i] = NO_IRQ;
141 } 142 }
143
142 DBG(" <- %s:%d: (%d)\n", __func__, __LINE__, cpu); 144 DBG(" <- %s:%d: (%d)\n", __func__, __LINE__, cpu);
143} 145}
144 146
diff --git a/arch/powerpc/platforms/ps3/spu.c b/arch/powerpc/platforms/ps3/spu.c
index a397e4e17c13..651437cb2c18 100644
--- a/arch/powerpc/platforms/ps3/spu.c
+++ b/arch/powerpc/platforms/ps3/spu.c
@@ -184,7 +184,7 @@ static int __init setup_areas(struct spu *spu)
184 184
185 spu_pdata(spu)->shadow = __ioremap( 185 spu_pdata(spu)->shadow = __ioremap(
186 spu_pdata(spu)->shadow_addr, sizeof(struct spe_shadow), 186 spu_pdata(spu)->shadow_addr, sizeof(struct spe_shadow),
187 PAGE_READONLY | _PAGE_NO_CACHE | _PAGE_GUARDED); 187 pgprot_val(PAGE_READONLY) | _PAGE_NO_CACHE | _PAGE_GUARDED);
188 if (!spu_pdata(spu)->shadow) { 188 if (!spu_pdata(spu)->shadow) {
189 pr_debug("%s:%d: ioremap shadow failed\n", __func__, __LINE__); 189 pr_debug("%s:%d: ioremap shadow failed\n", __func__, __LINE__);
190 goto fail_ioremap; 190 goto fail_ioremap;
@@ -230,19 +230,19 @@ static int __init setup_interrupts(struct spu *spu)
230{ 230{
231 int result; 231 int result;
232 232
233 result = ps3_alloc_spe_irq(PS3_BINDING_CPU_ANY, spu_pdata(spu)->spe_id, 233 result = ps3_spe_irq_setup(PS3_BINDING_CPU_ANY, spu_pdata(spu)->spe_id,
234 0, &spu->irqs[0]); 234 0, &spu->irqs[0]);
235 235
236 if (result) 236 if (result)
237 goto fail_alloc_0; 237 goto fail_alloc_0;
238 238
239 result = ps3_alloc_spe_irq(PS3_BINDING_CPU_ANY, spu_pdata(spu)->spe_id, 239 result = ps3_spe_irq_setup(PS3_BINDING_CPU_ANY, spu_pdata(spu)->spe_id,
240 1, &spu->irqs[1]); 240 1, &spu->irqs[1]);
241 241
242 if (result) 242 if (result)
243 goto fail_alloc_1; 243 goto fail_alloc_1;
244 244
245 result = ps3_alloc_spe_irq(PS3_BINDING_CPU_ANY, spu_pdata(spu)->spe_id, 245 result = ps3_spe_irq_setup(PS3_BINDING_CPU_ANY, spu_pdata(spu)->spe_id,
246 2, &spu->irqs[2]); 246 2, &spu->irqs[2]);
247 247
248 if (result) 248 if (result)
@@ -251,9 +251,9 @@ static int __init setup_interrupts(struct spu *spu)
251 return result; 251 return result;
252 252
253fail_alloc_2: 253fail_alloc_2:
254 ps3_free_spe_irq(spu->irqs[1]); 254 ps3_spe_irq_destroy(spu->irqs[1]);
255fail_alloc_1: 255fail_alloc_1:
256 ps3_free_spe_irq(spu->irqs[0]); 256 ps3_spe_irq_destroy(spu->irqs[0]);
257fail_alloc_0: 257fail_alloc_0:
258 spu->irqs[0] = spu->irqs[1] = spu->irqs[2] = NO_IRQ; 258 spu->irqs[0] = spu->irqs[1] = spu->irqs[2] = NO_IRQ;
259 return result; 259 return result;
@@ -301,9 +301,9 @@ static int ps3_destroy_spu(struct spu *spu)
301 result = lv1_disable_logical_spe(spu_pdata(spu)->spe_id, 0); 301 result = lv1_disable_logical_spe(spu_pdata(spu)->spe_id, 0);
302 BUG_ON(result); 302 BUG_ON(result);
303 303
304 ps3_free_spe_irq(spu->irqs[2]); 304 ps3_spe_irq_destroy(spu->irqs[2]);
305 ps3_free_spe_irq(spu->irqs[1]); 305 ps3_spe_irq_destroy(spu->irqs[1]);
306 ps3_free_spe_irq(spu->irqs[0]); 306 ps3_spe_irq_destroy(spu->irqs[0]);
307 307
308 spu->irqs[0] = spu->irqs[1] = spu->irqs[2] = NO_IRQ; 308 spu->irqs[0] = spu->irqs[1] = spu->irqs[2] = NO_IRQ;
309 309
diff --git a/arch/powerpc/platforms/pseries/Makefile b/arch/powerpc/platforms/pseries/Makefile
index 90235d598751..ae1fc92dc1c9 100644
--- a/arch/powerpc/platforms/pseries/Makefile
+++ b/arch/powerpc/platforms/pseries/Makefile
@@ -11,6 +11,7 @@ obj-$(CONFIG_SCANLOG) += scanlog.o
11obj-$(CONFIG_EEH) += eeh.o eeh_cache.o eeh_driver.o eeh_event.o 11obj-$(CONFIG_EEH) += eeh.o eeh_cache.o eeh_driver.o eeh_event.o
12obj-$(CONFIG_KEXEC) += kexec.o 12obj-$(CONFIG_KEXEC) += kexec.o
13obj-$(CONFIG_PCI) += pci.o pci_dlpar.o 13obj-$(CONFIG_PCI) += pci.o pci_dlpar.o
14obj-$(CONFIG_PCI_MSI) += msi.o
14 15
15obj-$(CONFIG_HOTPLUG_CPU) += hotplug-cpu.o 16obj-$(CONFIG_HOTPLUG_CPU) += hotplug-cpu.o
16 17
diff --git a/arch/powerpc/platforms/pseries/eeh.c b/arch/powerpc/platforms/pseries/eeh.c
index 48fbd442e9df..63e23062e982 100644
--- a/arch/powerpc/platforms/pseries/eeh.c
+++ b/arch/powerpc/platforms/pseries/eeh.c
@@ -580,6 +580,36 @@ rtas_pci_slot_reset(struct pci_dn *pdn, int state)
580} 580}
581 581
582/** 582/**
583 * pcibios_set_pcie_slot_reset - Set PCI-E reset state
584 * @dev: pci device struct
585 * @state: reset state to enter
586 *
587 * Return value:
588 * 0 if success
589 **/
590int pcibios_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state state)
591{
592 struct device_node *dn = pci_device_to_OF_node(dev);
593 struct pci_dn *pdn = PCI_DN(dn);
594
595 switch (state) {
596 case pcie_deassert_reset:
597 rtas_pci_slot_reset(pdn, 0);
598 break;
599 case pcie_hot_reset:
600 rtas_pci_slot_reset(pdn, 1);
601 break;
602 case pcie_warm_reset:
603 rtas_pci_slot_reset(pdn, 3);
604 break;
605 default:
606 return -EINVAL;
607 };
608
609 return 0;
610}
611
612/**
583 * rtas_set_slot_reset -- assert the pci #RST line for 1/4 second 613 * rtas_set_slot_reset -- assert the pci #RST line for 1/4 second
584 * @pdn: pci device node to be reset. 614 * @pdn: pci device node to be reset.
585 * 615 *
diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c
index 66665c82415c..eec684a8e44e 100644
--- a/arch/powerpc/platforms/pseries/iommu.c
+++ b/arch/powerpc/platforms/pseries/iommu.c
@@ -504,6 +504,12 @@ static void pci_dma_dev_setup_pSeriesLP(struct pci_dev *dev)
504 break; 504 break;
505 } 505 }
506 506
507 if (!pdn || !PCI_DN(pdn)) {
508 printk(KERN_WARNING "pci_dma_dev_setup_pSeriesLP: "
509 "no DMA window found for pci dev=%s dn=%s\n",
510 pci_name(dev), dn? dn->full_name : "<null>");
511 return;
512 }
507 DBG(" parent is %s\n", pdn->full_name); 513 DBG(" parent is %s\n", pdn->full_name);
508 514
509 /* Check for parent == NULL so we don't try to setup the empty EADS 515 /* Check for parent == NULL so we don't try to setup the empty EADS
diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c
index 3a70e8ad7bc8..362dfbc260a6 100644
--- a/arch/powerpc/platforms/pseries/lpar.c
+++ b/arch/powerpc/platforms/pseries/lpar.c
@@ -231,13 +231,13 @@ void __init find_udbg_vterm(void)
231 goto out; 231 goto out;
232 vtermno = termno[0]; 232 vtermno = termno[0];
233 233
234 if (device_is_compatible(stdout_node, "hvterm1")) { 234 if (of_device_is_compatible(stdout_node, "hvterm1")) {
235 udbg_putc = udbg_putcLP; 235 udbg_putc = udbg_putcLP;
236 udbg_getc = udbg_getcLP; 236 udbg_getc = udbg_getcLP;
237 udbg_getc_poll = udbg_getc_pollLP; 237 udbg_getc_poll = udbg_getc_pollLP;
238 if (add_console) 238 if (add_console)
239 add_preferred_console("hvc", termno[0] & 0xff, NULL); 239 add_preferred_console("hvc", termno[0] & 0xff, NULL);
240 } else if (device_is_compatible(stdout_node, "hvterm-protocol")) { 240 } else if (of_device_is_compatible(stdout_node, "hvterm-protocol")) {
241 vtermno = termno[0]; 241 vtermno = termno[0];
242 udbg_putc = udbg_hvsi_putc; 242 udbg_putc = udbg_hvsi_putc;
243 udbg_getc = udbg_hvsi_getc; 243 udbg_getc = udbg_hvsi_getc;
diff --git a/arch/powerpc/platforms/pseries/msi.c b/arch/powerpc/platforms/pseries/msi.c
new file mode 100644
index 000000000000..6063ea2f67ad
--- /dev/null
+++ b/arch/powerpc/platforms/pseries/msi.c
@@ -0,0 +1,270 @@
1/*
2 * Copyright 2006 Jake Moilanen <moilanen@austin.ibm.com>, IBM Corp.
3 * Copyright 2006-2007 Michael Ellerman, IBM Corp.
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; version 2 of the
8 * License.
9 *
10 */
11
12#include <linux/device.h>
13#include <linux/irq.h>
14#include <linux/msi.h>
15
16#include <asm/rtas.h>
17#include <asm/hw_irq.h>
18#include <asm/ppc-pci.h>
19
20static int query_token, change_token;
21
22#define RTAS_QUERY_FN 0
23#define RTAS_CHANGE_FN 1
24#define RTAS_RESET_FN 2
25#define RTAS_CHANGE_MSI_FN 3
26#define RTAS_CHANGE_MSIX_FN 4
27
28static struct pci_dn *get_pdn(struct pci_dev *pdev)
29{
30 struct device_node *dn;
31 struct pci_dn *pdn;
32
33 dn = pci_device_to_OF_node(pdev);
34 if (!dn) {
35 dev_dbg(&pdev->dev, "rtas_msi: No OF device node\n");
36 return NULL;
37 }
38
39 pdn = PCI_DN(dn);
40 if (!pdn) {
41 dev_dbg(&pdev->dev, "rtas_msi: No PCI DN\n");
42 return NULL;
43 }
44
45 return pdn;
46}
47
48/* RTAS Helpers */
49
50static int rtas_change_msi(struct pci_dn *pdn, u32 func, u32 num_irqs)
51{
52 u32 addr, seq_num, rtas_ret[3];
53 unsigned long buid;
54 int rc;
55
56 addr = rtas_config_addr(pdn->busno, pdn->devfn, 0);
57 buid = pdn->phb->buid;
58
59 seq_num = 1;
60 do {
61 if (func == RTAS_CHANGE_MSI_FN || func == RTAS_CHANGE_MSIX_FN)
62 rc = rtas_call(change_token, 6, 4, rtas_ret, addr,
63 BUID_HI(buid), BUID_LO(buid),
64 func, num_irqs, seq_num);
65 else
66 rc = rtas_call(change_token, 6, 3, rtas_ret, addr,
67 BUID_HI(buid), BUID_LO(buid),
68 func, num_irqs, seq_num);
69
70 seq_num = rtas_ret[1];
71 } while (rtas_busy_delay(rc));
72
73 if (rc == 0) /* Success */
74 rc = rtas_ret[0];
75
76 pr_debug("rtas_msi: ibm,change_msi(func=%d,num=%d) = (%d)\n",
77 func, num_irqs, rc);
78
79 return rc;
80}
81
82static void rtas_disable_msi(struct pci_dev *pdev)
83{
84 struct pci_dn *pdn;
85
86 pdn = get_pdn(pdev);
87 if (!pdn)
88 return;
89
90 if (rtas_change_msi(pdn, RTAS_CHANGE_FN, 0) != 0)
91 pr_debug("rtas_msi: Setting MSIs to 0 failed!\n");
92}
93
94static int rtas_query_irq_number(struct pci_dn *pdn, int offset)
95{
96 u32 addr, rtas_ret[2];
97 unsigned long buid;
98 int rc;
99
100 addr = rtas_config_addr(pdn->busno, pdn->devfn, 0);
101 buid = pdn->phb->buid;
102
103 do {
104 rc = rtas_call(query_token, 4, 3, rtas_ret, addr,
105 BUID_HI(buid), BUID_LO(buid), offset);
106 } while (rtas_busy_delay(rc));
107
108 if (rc) {
109 pr_debug("rtas_msi: error (%d) querying source number\n", rc);
110 return rc;
111 }
112
113 return rtas_ret[0];
114}
115
116static void rtas_teardown_msi_irqs(struct pci_dev *pdev)
117{
118 struct msi_desc *entry;
119
120 list_for_each_entry(entry, &pdev->msi_list, list) {
121 if (entry->irq == NO_IRQ)
122 continue;
123
124 set_irq_msi(entry->irq, NULL);
125 irq_dispose_mapping(entry->irq);
126 }
127
128 rtas_disable_msi(pdev);
129}
130
131static int check_req_msi(struct pci_dev *pdev, int nvec)
132{
133 struct device_node *dn;
134 struct pci_dn *pdn;
135 const u32 *req_msi;
136
137 pdn = get_pdn(pdev);
138 if (!pdn)
139 return -ENODEV;
140
141 dn = pdn->node;
142
143 req_msi = of_get_property(dn, "ibm,req#msi", NULL);
144 if (!req_msi) {
145 pr_debug("rtas_msi: No ibm,req#msi on %s\n", dn->full_name);
146 return -ENOENT;
147 }
148
149 if (*req_msi < nvec) {
150 pr_debug("rtas_msi: ibm,req#msi requests < %d MSIs\n", nvec);
151 return -ENOSPC;
152 }
153
154 return 0;
155}
156
157static int rtas_msi_check_device(struct pci_dev *pdev, int nvec, int type)
158{
159 if (type == PCI_CAP_ID_MSIX)
160 pr_debug("rtas_msi: MSI-X untested, trying anyway.\n");
161
162 return check_req_msi(pdev, nvec);
163}
164
165static int rtas_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type)
166{
167 struct pci_dn *pdn;
168 int hwirq, virq, i, rc;
169 struct msi_desc *entry;
170
171 pdn = get_pdn(pdev);
172 if (!pdn)
173 return -ENODEV;
174
175 /*
176 * Try the new more explicit firmware interface, if that fails fall
177 * back to the old interface. The old interface is known to never
178 * return MSI-Xs.
179 */
180 if (type == PCI_CAP_ID_MSI) {
181 rc = rtas_change_msi(pdn, RTAS_CHANGE_MSI_FN, nvec);
182
183 if (rc != nvec) {
184 pr_debug("rtas_msi: trying the old firmware call.\n");
185 rc = rtas_change_msi(pdn, RTAS_CHANGE_FN, nvec);
186 }
187 } else
188 rc = rtas_change_msi(pdn, RTAS_CHANGE_MSIX_FN, nvec);
189
190 if (rc != nvec) {
191 pr_debug("rtas_msi: rtas_change_msi() failed\n");
192
193 /*
194 * In case of an error it's not clear whether the device is
195 * left with MSI enabled or not, so we explicitly disable.
196 */
197 goto out_free;
198 }
199
200 i = 0;
201 list_for_each_entry(entry, &pdev->msi_list, list) {
202 hwirq = rtas_query_irq_number(pdn, i);
203 if (hwirq < 0) {
204 rc = hwirq;
205 pr_debug("rtas_msi: error (%d) getting hwirq\n", rc);
206 goto out_free;
207 }
208
209 virq = irq_create_mapping(NULL, hwirq);
210
211 if (virq == NO_IRQ) {
212 pr_debug("rtas_msi: Failed mapping hwirq %d\n", hwirq);
213 rc = -ENOSPC;
214 goto out_free;
215 }
216
217 dev_dbg(&pdev->dev, "rtas_msi: allocated virq %d\n", virq);
218 set_irq_msi(virq, entry);
219 unmask_msi_irq(virq);
220 }
221
222 return 0;
223
224 out_free:
225 rtas_teardown_msi_irqs(pdev);
226 return rc;
227}
228
229static void rtas_msi_pci_irq_fixup(struct pci_dev *pdev)
230{
231 /* No LSI -> leave MSIs (if any) configured */
232 if (pdev->irq == NO_IRQ) {
233 dev_dbg(&pdev->dev, "rtas_msi: no LSI, nothing to do.\n");
234 return;
235 }
236
237 /* No MSI -> MSIs can't have been assigned by fw, leave LSI */
238 if (check_req_msi(pdev, 1)) {
239 dev_dbg(&pdev->dev, "rtas_msi: no req#msi, nothing to do.\n");
240 return;
241 }
242
243 dev_dbg(&pdev->dev, "rtas_msi: disabling existing MSI.\n");
244 rtas_disable_msi(pdev);
245}
246
247static int rtas_msi_init(void)
248{
249 query_token = rtas_token("ibm,query-interrupt-source-number");
250 change_token = rtas_token("ibm,change-msi");
251
252 if ((query_token == RTAS_UNKNOWN_SERVICE) ||
253 (change_token == RTAS_UNKNOWN_SERVICE)) {
254 pr_debug("rtas_msi: no RTAS tokens, no MSI support.\n");
255 return -1;
256 }
257
258 pr_debug("rtas_msi: Registering RTAS MSI callbacks.\n");
259
260 WARN_ON(ppc_md.setup_msi_irqs);
261 ppc_md.setup_msi_irqs = rtas_setup_msi_irqs;
262 ppc_md.teardown_msi_irqs = rtas_teardown_msi_irqs;
263 ppc_md.msi_check_device = rtas_msi_check_device;
264
265 WARN_ON(ppc_md.pci_irq_fixup);
266 ppc_md.pci_irq_fixup = rtas_msi_pci_irq_fixup;
267
268 return 0;
269}
270arch_initcall(rtas_msi_init);
diff --git a/arch/powerpc/platforms/pseries/pci_dlpar.c b/arch/powerpc/platforms/pseries/pci_dlpar.c
index fdc1a369f767..ffaf6c5c517b 100644
--- a/arch/powerpc/platforms/pseries/pci_dlpar.c
+++ b/arch/powerpc/platforms/pseries/pci_dlpar.c
@@ -79,6 +79,7 @@ pcibios_remove_pci_devices(struct pci_bus *bus)
79 pci_remove_bus_device(dev); 79 pci_remove_bus_device(dev);
80 } 80 }
81} 81}
82EXPORT_SYMBOL_GPL(pcibios_remove_pci_devices);
82 83
83/* Must be called before pci_bus_add_devices */ 84/* Must be called before pci_bus_add_devices */
84void 85void
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
index 33eec2822c66..470db6efaeb6 100644
--- a/arch/powerpc/platforms/pseries/setup.c
+++ b/arch/powerpc/platforms/pseries/setup.c
@@ -168,7 +168,7 @@ static void __init pseries_mpic_init_IRQ(void)
168 168
169 /* Look for cascade */ 169 /* Look for cascade */
170 for_each_node_by_type(np, "interrupt-controller") 170 for_each_node_by_type(np, "interrupt-controller")
171 if (device_is_compatible(np, "chrp,iic")) { 171 if (of_device_is_compatible(np, "chrp,iic")) {
172 cascade = np; 172 cascade = np;
173 break; 173 break;
174 } 174 }
diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c
index 896cbf340c42..b854e7f1001c 100644
--- a/arch/powerpc/platforms/pseries/xics.c
+++ b/arch/powerpc/platforms/pseries/xics.c
@@ -477,7 +477,7 @@ static int xics_host_match(struct irq_host *h, struct device_node *node)
477 * like vdevices, events, etc... The trick we use here is to match 477 * like vdevices, events, etc... The trick we use here is to match
478 * everything here except the legacy 8259 which is compatible "chrp,iic" 478 * everything here except the legacy 8259 which is compatible "chrp,iic"
479 */ 479 */
480 return !device_is_compatible(node, "chrp,iic"); 480 return !of_device_is_compatible(node, "chrp,iic");
481} 481}
482 482
483static int xics_host_map_direct(struct irq_host *h, unsigned int virq, 483static int xics_host_map_direct(struct irq_host *h, unsigned int virq,
@@ -618,7 +618,7 @@ static void __init xics_setup_8259_cascade(void)
618 unsigned long intack = 0; 618 unsigned long intack = 0;
619 619
620 for_each_node_by_type(np, "interrupt-controller") 620 for_each_node_by_type(np, "interrupt-controller")
621 if (device_is_compatible(np, "chrp,iic")) { 621 if (of_device_is_compatible(np, "chrp,iic")) {
622 found = np; 622 found = np;
623 break; 623 break;
624 } 624 }
diff --git a/arch/powerpc/sysdev/Makefile b/arch/powerpc/sysdev/Makefile
index e96ca9618dbb..9ce775c38ab7 100644
--- a/arch/powerpc/sysdev/Makefile
+++ b/arch/powerpc/sysdev/Makefile
@@ -2,7 +2,9 @@ ifeq ($(CONFIG_PPC64),y)
2EXTRA_CFLAGS += -mno-minimal-toc 2EXTRA_CFLAGS += -mno-minimal-toc
3endif 3endif
4 4
5obj-$(CONFIG_MPIC) += mpic.o 5mpic-msi-obj-$(CONFIG_PCI_MSI) += mpic_msi.o mpic_u3msi.o
6obj-$(CONFIG_MPIC) += mpic.o $(mpic-msi-obj-y)
7
6obj-$(CONFIG_PPC_INDIRECT_PCI) += indirect_pci.o 8obj-$(CONFIG_PPC_INDIRECT_PCI) += indirect_pci.o
7obj-$(CONFIG_PPC_MPC106) += grackle.o 9obj-$(CONFIG_PPC_MPC106) += grackle.o
8obj-$(CONFIG_PPC_DCR) += dcr.o 10obj-$(CONFIG_PPC_DCR) += dcr.o
@@ -26,7 +28,6 @@ endif
26 28
27# Temporary hack until we have migrated to asm-powerpc 29# Temporary hack until we have migrated to asm-powerpc
28ifeq ($(ARCH),powerpc) 30ifeq ($(ARCH),powerpc)
29obj-$(CONFIG_MTD) += rom.o
30obj-$(CONFIG_CPM2) += cpm2_common.o cpm2_pic.o 31obj-$(CONFIG_CPM2) += cpm2_common.o cpm2_pic.o
31obj-$(CONFIG_8xx) += mpc8xx_pic.o commproc.o 32obj-$(CONFIG_8xx) += mpc8xx_pic.o commproc.o
32obj-$(CONFIG_UCODE_PATCH) += micropatch.o 33obj-$(CONFIG_UCODE_PATCH) += micropatch.o
diff --git a/arch/powerpc/sysdev/dart_iommu.c b/arch/powerpc/sysdev/dart_iommu.c
index 336186dd7f10..a1d2042bb304 100644
--- a/arch/powerpc/sysdev/dart_iommu.c
+++ b/arch/powerpc/sysdev/dart_iommu.c
@@ -36,6 +36,7 @@
36#include <linux/pci.h> 36#include <linux/pci.h>
37#include <linux/dma-mapping.h> 37#include <linux/dma-mapping.h>
38#include <linux/vmalloc.h> 38#include <linux/vmalloc.h>
39#include <linux/suspend.h>
39#include <asm/io.h> 40#include <asm/io.h>
40#include <asm/prom.h> 41#include <asm/prom.h>
41#include <asm/iommu.h> 42#include <asm/iommu.h>
@@ -54,6 +55,9 @@ static unsigned long dart_tablesize;
54 55
55/* Virtual base address of the DART table */ 56/* Virtual base address of the DART table */
56static u32 *dart_vbase; 57static u32 *dart_vbase;
58#ifdef CONFIG_PM
59static u32 *dart_copy;
60#endif
57 61
58/* Mapped base address for the dart */ 62/* Mapped base address for the dart */
59static unsigned int __iomem *dart; 63static unsigned int __iomem *dart;
@@ -346,6 +350,48 @@ void iommu_init_early_dart(void)
346 set_pci_dma_ops(&dma_direct_ops); 350 set_pci_dma_ops(&dma_direct_ops);
347} 351}
348 352
353#ifdef CONFIG_PM
354static void iommu_dart_save(void)
355{
356 memcpy(dart_copy, dart_vbase, 2*1024*1024);
357}
358
359static void iommu_dart_restore(void)
360{
361 memcpy(dart_vbase, dart_copy, 2*1024*1024);
362 dart_tlb_invalidate_all();
363}
364
365static int __init iommu_init_late_dart(void)
366{
367 unsigned long tbasepfn;
368 struct page *p;
369
370 /* if no dart table exists then we won't need to save it
371 * and the area has also not been reserved */
372 if (!dart_tablebase)
373 return 0;
374
375 tbasepfn = __pa(dart_tablebase) >> PAGE_SHIFT;
376 register_nosave_region_late(tbasepfn,
377 tbasepfn + ((1<<24) >> PAGE_SHIFT));
378
379 /* For suspend we need to copy the dart contents because
380 * it is not part of the regular mapping (see above) and
381 * thus not saved automatically. The memory for this copy
382 * must be allocated early because we need 2 MB. */
383 p = alloc_pages(GFP_KERNEL, 21 - PAGE_SHIFT);
384 BUG_ON(!p);
385 dart_copy = page_address(p);
386
387 ppc_md.iommu_save = iommu_dart_save;
388 ppc_md.iommu_restore = iommu_dart_restore;
389
390 return 0;
391}
392
393late_initcall(iommu_init_late_dart);
394#endif
349 395
350void __init alloc_dart_table(void) 396void __init alloc_dart_table(void)
351{ 397{
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c
index 0b84b7c775d8..4fd2bec89916 100644
--- a/arch/powerpc/sysdev/mpic.c
+++ b/arch/powerpc/sysdev/mpic.c
@@ -36,6 +36,8 @@
36#include <asm/mpic.h> 36#include <asm/mpic.h>
37#include <asm/smp.h> 37#include <asm/smp.h>
38 38
39#include "mpic.h"
40
39#ifdef DEBUG 41#ifdef DEBUG
40#define DBG(fmt...) printk(fmt) 42#define DBG(fmt...) printk(fmt)
41#else 43#else
@@ -354,6 +356,12 @@ static void mpic_startup_ht_interrupt(struct mpic *mpic, unsigned int source,
354 tmp |= 0x22; 356 tmp |= 0x22;
355 writel(tmp, fixup->base + 4); 357 writel(tmp, fixup->base + 4);
356 spin_unlock_irqrestore(&mpic->fixup_lock, flags); 358 spin_unlock_irqrestore(&mpic->fixup_lock, flags);
359
360#ifdef CONFIG_PM
361 /* use the lowest bit inverted to the actual HW,
362 * set if this fixup was enabled, clear otherwise */
363 mpic->save_data[source].fixup_data = tmp | 1;
364#endif
357} 365}
358 366
359static void mpic_shutdown_ht_interrupt(struct mpic *mpic, unsigned int source, 367static void mpic_shutdown_ht_interrupt(struct mpic *mpic, unsigned int source,
@@ -375,8 +383,58 @@ static void mpic_shutdown_ht_interrupt(struct mpic *mpic, unsigned int source,
375 tmp |= 1; 383 tmp |= 1;
376 writel(tmp, fixup->base + 4); 384 writel(tmp, fixup->base + 4);
377 spin_unlock_irqrestore(&mpic->fixup_lock, flags); 385 spin_unlock_irqrestore(&mpic->fixup_lock, flags);
386
387#ifdef CONFIG_PM
388 /* use the lowest bit inverted to the actual HW,
389 * set if this fixup was enabled, clear otherwise */
390 mpic->save_data[source].fixup_data = tmp & ~1;
391#endif
378} 392}
379 393
394#ifdef CONFIG_PCI_MSI
395static void __init mpic_scan_ht_msi(struct mpic *mpic, u8 __iomem *devbase,
396 unsigned int devfn)
397{
398 u8 __iomem *base;
399 u8 pos, flags;
400 u64 addr = 0;
401
402 for (pos = readb(devbase + PCI_CAPABILITY_LIST); pos != 0;
403 pos = readb(devbase + pos + PCI_CAP_LIST_NEXT)) {
404 u8 id = readb(devbase + pos + PCI_CAP_LIST_ID);
405 if (id == PCI_CAP_ID_HT) {
406 id = readb(devbase + pos + 3);
407 if ((id & HT_5BIT_CAP_MASK) == HT_CAPTYPE_MSI_MAPPING)
408 break;
409 }
410 }
411
412 if (pos == 0)
413 return;
414
415 base = devbase + pos;
416
417 flags = readb(base + HT_MSI_FLAGS);
418 if (!(flags & HT_MSI_FLAGS_FIXED)) {
419 addr = readl(base + HT_MSI_ADDR_LO) & HT_MSI_ADDR_LO_MASK;
420 addr = addr | ((u64)readl(base + HT_MSI_ADDR_HI) << 32);
421 }
422
423 printk(KERN_DEBUG "mpic: - HT:%02x.%x %s MSI mapping found @ 0x%lx\n",
424 PCI_SLOT(devfn), PCI_FUNC(devfn),
425 flags & HT_MSI_FLAGS_ENABLE ? "enabled" : "disabled", addr);
426
427 if (!(flags & HT_MSI_FLAGS_ENABLE))
428 writeb(flags | HT_MSI_FLAGS_ENABLE, base + HT_MSI_FLAGS);
429}
430#else
431static void __init mpic_scan_ht_msi(struct mpic *mpic, u8 __iomem *devbase,
432 unsigned int devfn)
433{
434 return;
435}
436#endif
437
380static void __init mpic_scan_ht_pic(struct mpic *mpic, u8 __iomem *devbase, 438static void __init mpic_scan_ht_pic(struct mpic *mpic, u8 __iomem *devbase,
381 unsigned int devfn, u32 vdid) 439 unsigned int devfn, u32 vdid)
382{ 440{
@@ -468,6 +526,7 @@ static void __init mpic_scan_ht_pics(struct mpic *mpic)
468 goto next; 526 goto next;
469 527
470 mpic_scan_ht_pic(mpic, devbase, devfn, l); 528 mpic_scan_ht_pic(mpic, devbase, devfn, l);
529 mpic_scan_ht_msi(mpic, devbase, devfn);
471 530
472 next: 531 next:
473 /* next device, if function 0 */ 532 /* next device, if function 0 */
@@ -559,7 +618,7 @@ static irqreturn_t mpic_ipi_action(int irq, void *dev_id)
559 */ 618 */
560 619
561 620
562static void mpic_unmask_irq(unsigned int irq) 621void mpic_unmask_irq(unsigned int irq)
563{ 622{
564 unsigned int loops = 100000; 623 unsigned int loops = 100000;
565 struct mpic *mpic = mpic_from_irq(irq); 624 struct mpic *mpic = mpic_from_irq(irq);
@@ -579,7 +638,7 @@ static void mpic_unmask_irq(unsigned int irq)
579 } while(mpic_irq_read(src, MPIC_INFO(IRQ_VECTOR_PRI)) & MPIC_VECPRI_MASK); 638 } while(mpic_irq_read(src, MPIC_INFO(IRQ_VECTOR_PRI)) & MPIC_VECPRI_MASK);
580} 639}
581 640
582static void mpic_mask_irq(unsigned int irq) 641void mpic_mask_irq(unsigned int irq)
583{ 642{
584 unsigned int loops = 100000; 643 unsigned int loops = 100000;
585 struct mpic *mpic = mpic_from_irq(irq); 644 struct mpic *mpic = mpic_from_irq(irq);
@@ -600,7 +659,7 @@ static void mpic_mask_irq(unsigned int irq)
600 } while(!(mpic_irq_read(src, MPIC_INFO(IRQ_VECTOR_PRI)) & MPIC_VECPRI_MASK)); 659 } while(!(mpic_irq_read(src, MPIC_INFO(IRQ_VECTOR_PRI)) & MPIC_VECPRI_MASK));
601} 660}
602 661
603static void mpic_end_irq(unsigned int irq) 662void mpic_end_irq(unsigned int irq)
604{ 663{
605 struct mpic *mpic = mpic_from_irq(irq); 664 struct mpic *mpic = mpic_from_irq(irq);
606 665
@@ -733,7 +792,7 @@ static unsigned int mpic_type_to_vecpri(struct mpic *mpic, unsigned int type)
733 } 792 }
734} 793}
735 794
736static int mpic_set_irq_type(unsigned int virq, unsigned int flow_type) 795int mpic_set_irq_type(unsigned int virq, unsigned int flow_type)
737{ 796{
738 struct mpic *mpic = mpic_from_irq(virq); 797 struct mpic *mpic = mpic_from_irq(virq);
739 unsigned int src = mpic_irq_to_hw(virq); 798 unsigned int src = mpic_irq_to_hw(virq);
@@ -834,6 +893,8 @@ static int mpic_host_map(struct irq_host *h, unsigned int virq,
834 if (hw >= mpic->irq_count) 893 if (hw >= mpic->irq_count)
835 return -EINVAL; 894 return -EINVAL;
836 895
896 mpic_msi_reserve_hwirq(mpic, hw);
897
837 /* Default chip */ 898 /* Default chip */
838 chip = &mpic->hc_irq; 899 chip = &mpic->hc_irq;
839 900
@@ -1142,8 +1203,10 @@ void __init mpic_init(struct mpic *mpic)
1142 1203
1143 /* Do the HT PIC fixups on U3 broken mpic */ 1204 /* Do the HT PIC fixups on U3 broken mpic */
1144 DBG("MPIC flags: %x\n", mpic->flags); 1205 DBG("MPIC flags: %x\n", mpic->flags);
1145 if ((mpic->flags & MPIC_U3_HT_IRQS) && (mpic->flags & MPIC_PRIMARY)) 1206 if ((mpic->flags & MPIC_U3_HT_IRQS) && (mpic->flags & MPIC_PRIMARY)) {
1146 mpic_scan_ht_pics(mpic); 1207 mpic_scan_ht_pics(mpic);
1208 mpic_u3msi_init(mpic);
1209 }
1147 1210
1148 for (i = 0; i < mpic->num_sources; i++) { 1211 for (i = 0; i < mpic->num_sources; i++) {
1149 /* start with vector = source number, and masked */ 1212 /* start with vector = source number, and masked */
@@ -1167,6 +1230,12 @@ void __init mpic_init(struct mpic *mpic)
1167 1230
1168 /* Set current processor priority to 0 */ 1231 /* Set current processor priority to 0 */
1169 mpic_cpu_write(MPIC_INFO(CPU_CURRENT_TASK_PRI), 0); 1232 mpic_cpu_write(MPIC_INFO(CPU_CURRENT_TASK_PRI), 0);
1233
1234#ifdef CONFIG_PM
1235 /* allocate memory to save mpic state */
1236 mpic->save_data = alloc_bootmem(mpic->num_sources * sizeof(struct mpic_irq_save));
1237 BUG_ON(mpic->save_data == NULL);
1238#endif
1170} 1239}
1171 1240
1172void __init mpic_set_clk_ratio(struct mpic *mpic, u32 clock_ratio) 1241void __init mpic_set_clk_ratio(struct mpic *mpic, u32 clock_ratio)
@@ -1333,8 +1402,11 @@ unsigned int mpic_get_one_irq(struct mpic *mpic)
1333#ifdef DEBUG_LOW 1402#ifdef DEBUG_LOW
1334 DBG("%s: get_one_irq(): %d\n", mpic->name, src); 1403 DBG("%s: get_one_irq(): %d\n", mpic->name, src);
1335#endif 1404#endif
1336 if (unlikely(src == mpic->spurious_vec)) 1405 if (unlikely(src == mpic->spurious_vec)) {
1406 if (mpic->flags & MPIC_SPV_EOI)
1407 mpic_eoi(mpic);
1337 return NO_IRQ; 1408 return NO_IRQ;
1409 }
1338 return irq_linear_revmap(mpic->irqhost, src); 1410 return irq_linear_revmap(mpic->irqhost, src);
1339} 1411}
1340 1412
@@ -1417,3 +1489,79 @@ void __devinit smp_mpic_setup_cpu(int cpu)
1417 mpic_setup_this_cpu(); 1489 mpic_setup_this_cpu();
1418} 1490}
1419#endif /* CONFIG_SMP */ 1491#endif /* CONFIG_SMP */
1492
1493#ifdef CONFIG_PM
1494static int mpic_suspend(struct sys_device *dev, pm_message_t state)
1495{
1496 struct mpic *mpic = container_of(dev, struct mpic, sysdev);
1497 int i;
1498
1499 for (i = 0; i < mpic->num_sources; i++) {
1500 mpic->save_data[i].vecprio =
1501 mpic_irq_read(i, MPIC_INFO(IRQ_VECTOR_PRI));
1502 mpic->save_data[i].dest =
1503 mpic_irq_read(i, MPIC_INFO(IRQ_DESTINATION));
1504 }
1505
1506 return 0;
1507}
1508
1509static int mpic_resume(struct sys_device *dev)
1510{
1511 struct mpic *mpic = container_of(dev, struct mpic, sysdev);
1512 int i;
1513
1514 for (i = 0; i < mpic->num_sources; i++) {
1515 mpic_irq_write(i, MPIC_INFO(IRQ_VECTOR_PRI),
1516 mpic->save_data[i].vecprio);
1517 mpic_irq_write(i, MPIC_INFO(IRQ_DESTINATION),
1518 mpic->save_data[i].dest);
1519
1520#ifdef CONFIG_MPIC_U3_HT_IRQS
1521 {
1522 struct mpic_irq_fixup *fixup = &mpic->fixups[i];
1523
1524 if (fixup->base) {
1525 /* we use the lowest bit in an inverted meaning */
1526 if ((mpic->save_data[i].fixup_data & 1) == 0)
1527 continue;
1528
1529 /* Enable and configure */
1530 writeb(0x10 + 2 * fixup->index, fixup->base + 2);
1531
1532 writel(mpic->save_data[i].fixup_data & ~1,
1533 fixup->base + 4);
1534 }
1535 }
1536#endif
1537 } /* end for loop */
1538
1539 return 0;
1540}
1541#endif
1542
1543static struct sysdev_class mpic_sysclass = {
1544#ifdef CONFIG_PM
1545 .resume = mpic_resume,
1546 .suspend = mpic_suspend,
1547#endif
1548 set_kset_name("mpic"),
1549};
1550
1551static int mpic_init_sys(void)
1552{
1553 struct mpic *mpic = mpics;
1554 int error, id = 0;
1555
1556 error = sysdev_class_register(&mpic_sysclass);
1557
1558 while (mpic && !error) {
1559 mpic->sysdev.cls = &mpic_sysclass;
1560 mpic->sysdev.id = id++;
1561 error = sysdev_register(&mpic->sysdev);
1562 mpic = mpic->next;
1563 }
1564 return error;
1565}
1566
1567device_initcall(mpic_init_sys);
diff --git a/arch/powerpc/sysdev/mpic.h b/arch/powerpc/sysdev/mpic.h
new file mode 100644
index 000000000000..3a1c3d2c594d
--- /dev/null
+++ b/arch/powerpc/sysdev/mpic.h
@@ -0,0 +1,38 @@
1#ifndef _POWERPC_SYSDEV_MPIC_H
2#define _POWERPC_SYSDEV_MPIC_H
3
4/*
5 * Copyright 2006-2007, Michael Ellerman, IBM Corporation.
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; version 2 of the
10 * License.
11 *
12 */
13
14#ifdef CONFIG_PCI_MSI
15extern void mpic_msi_reserve_hwirq(struct mpic *mpic, irq_hw_number_t hwirq);
16extern int mpic_msi_init_allocator(struct mpic *mpic);
17extern irq_hw_number_t mpic_msi_alloc_hwirqs(struct mpic *mpic, int num);
18extern void mpic_msi_free_hwirqs(struct mpic *mpic, int offset, int num);
19extern int mpic_u3msi_init(struct mpic *mpic);
20#else
21static inline void mpic_msi_reserve_hwirq(struct mpic *mpic,
22 irq_hw_number_t hwirq)
23{
24 return;
25}
26
27static inline int mpic_u3msi_init(struct mpic *mpic)
28{
29 return -1;
30}
31#endif
32
33extern int mpic_set_irq_type(unsigned int virq, unsigned int flow_type);
34extern void mpic_end_irq(unsigned int irq);
35extern void mpic_mask_irq(unsigned int irq);
36extern void mpic_unmask_irq(unsigned int irq);
37
38#endif /* _POWERPC_SYSDEV_MPIC_H */
diff --git a/arch/powerpc/sysdev/mpic_msi.c b/arch/powerpc/sysdev/mpic_msi.c
new file mode 100644
index 000000000000..b076793033c2
--- /dev/null
+++ b/arch/powerpc/sysdev/mpic_msi.c
@@ -0,0 +1,183 @@
1/*
2 * Copyright 2006-2007, Michael Ellerman, IBM Corporation.
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; version 2 of the
7 * License.
8 *
9 */
10
11#include <linux/irq.h>
12#include <linux/bootmem.h>
13#include <linux/bitmap.h>
14#include <linux/msi.h>
15#include <asm/mpic.h>
16#include <asm/prom.h>
17#include <asm/hw_irq.h>
18#include <asm/ppc-pci.h>
19
20
21static void __mpic_msi_reserve_hwirq(struct mpic *mpic, irq_hw_number_t hwirq)
22{
23 pr_debug("mpic: reserving hwirq 0x%lx\n", hwirq);
24 bitmap_allocate_region(mpic->hwirq_bitmap, hwirq, 0);
25}
26
27void mpic_msi_reserve_hwirq(struct mpic *mpic, irq_hw_number_t hwirq)
28{
29 unsigned long flags;
30
31 /* The mpic calls this even when there is no allocator setup */
32 if (!mpic->hwirq_bitmap)
33 return;
34
35 spin_lock_irqsave(&mpic->bitmap_lock, flags);
36 __mpic_msi_reserve_hwirq(mpic, hwirq);
37 spin_unlock_irqrestore(&mpic->bitmap_lock, flags);
38}
39
40irq_hw_number_t mpic_msi_alloc_hwirqs(struct mpic *mpic, int num)
41{
42 unsigned long flags;
43 int offset, order = get_count_order(num);
44
45 spin_lock_irqsave(&mpic->bitmap_lock, flags);
46 /*
47 * This is fast, but stricter than we need. We might want to add
48 * a fallback routine which does a linear search with no alignment.
49 */
50 offset = bitmap_find_free_region(mpic->hwirq_bitmap, mpic->irq_count,
51 order);
52 spin_unlock_irqrestore(&mpic->bitmap_lock, flags);
53
54 pr_debug("mpic: allocated 0x%x (2^%d) at offset 0x%x\n",
55 num, order, offset);
56
57 return offset;
58}
59
60void mpic_msi_free_hwirqs(struct mpic *mpic, int offset, int num)
61{
62 unsigned long flags;
63 int order = get_count_order(num);
64
65 pr_debug("mpic: freeing 0x%x (2^%d) at offset 0x%x\n",
66 num, order, offset);
67
68 spin_lock_irqsave(&mpic->bitmap_lock, flags);
69 bitmap_release_region(mpic->hwirq_bitmap, offset, order);
70 spin_unlock_irqrestore(&mpic->bitmap_lock, flags);
71}
72
73#ifdef CONFIG_MPIC_U3_HT_IRQS
74static int mpic_msi_reserve_u3_hwirqs(struct mpic *mpic)
75{
76 irq_hw_number_t hwirq;
77 struct irq_host_ops *ops = mpic->irqhost->ops;
78 struct device_node *np;
79 int flags, index, i;
80 struct of_irq oirq;
81
82 pr_debug("mpic: found U3, guessing msi allocator setup\n");
83
84 /* Reserve source numbers we know are reserved in the HW */
85 for (i = 0; i < 8; i++)
86 __mpic_msi_reserve_hwirq(mpic, i);
87
88 for (i = 42; i < 46; i++)
89 __mpic_msi_reserve_hwirq(mpic, i);
90
91 for (i = 100; i < 105; i++)
92 __mpic_msi_reserve_hwirq(mpic, i);
93
94 np = NULL;
95 while ((np = of_find_all_nodes(np))) {
96 pr_debug("mpic: mapping hwirqs for %s\n", np->full_name);
97
98 index = 0;
99 while (of_irq_map_one(np, index++, &oirq) == 0) {
100 ops->xlate(mpic->irqhost, NULL, oirq.specifier,
101 oirq.size, &hwirq, &flags);
102 __mpic_msi_reserve_hwirq(mpic, hwirq);
103 }
104 }
105
106 return 0;
107}
108#else
109static int mpic_msi_reserve_u3_hwirqs(struct mpic *mpic)
110{
111 return -1;
112}
113#endif
114
115static int mpic_msi_reserve_dt_hwirqs(struct mpic *mpic)
116{
117 int i, len;
118 const u32 *p;
119
120 p = of_get_property(mpic->of_node, "msi-available-ranges", &len);
121 if (!p) {
122 pr_debug("mpic: no msi-available-ranges property found on %s\n",
123 mpic->of_node->full_name);
124 return -ENODEV;
125 }
126
127 if (len % 8 != 0) {
128 printk(KERN_WARNING "mpic: Malformed msi-available-ranges "
129 "property on %s\n", mpic->of_node->full_name);
130 return -EINVAL;
131 }
132
133 bitmap_allocate_region(mpic->hwirq_bitmap, 0,
134 get_count_order(mpic->irq_count));
135
136 /* Format is: (<u32 start> <u32 count>)+ */
137 len /= sizeof(u32);
138 for (i = 0; i < len / 2; i++, p += 2)
139 mpic_msi_free_hwirqs(mpic, *p, *(p + 1));
140
141 return 0;
142}
143
144int mpic_msi_init_allocator(struct mpic *mpic)
145{
146 int rc, size;
147
148 BUG_ON(mpic->hwirq_bitmap);
149 spin_lock_init(&mpic->bitmap_lock);
150
151 size = BITS_TO_LONGS(mpic->irq_count) * sizeof(long);
152 pr_debug("mpic: allocator bitmap size is 0x%x bytes\n", size);
153
154 if (mem_init_done)
155 mpic->hwirq_bitmap = kmalloc(size, GFP_KERNEL);
156 else
157 mpic->hwirq_bitmap = alloc_bootmem(size);
158
159 if (!mpic->hwirq_bitmap) {
160 pr_debug("mpic: ENOMEM allocating allocator bitmap!\n");
161 return -ENOMEM;
162 }
163
164 memset(mpic->hwirq_bitmap, 0, size);
165
166 rc = mpic_msi_reserve_dt_hwirqs(mpic);
167 if (rc) {
168 if (mpic->flags & MPIC_U3_HT_IRQS)
169 rc = mpic_msi_reserve_u3_hwirqs(mpic);
170
171 if (rc)
172 goto out_free;
173 }
174
175 return 0;
176
177 out_free:
178 if (mem_init_done)
179 kfree(mpic->hwirq_bitmap);
180
181 mpic->hwirq_bitmap = NULL;
182 return rc;
183}
diff --git a/arch/powerpc/sysdev/mpic_u3msi.c b/arch/powerpc/sysdev/mpic_u3msi.c
new file mode 100644
index 000000000000..305b864c25d9
--- /dev/null
+++ b/arch/powerpc/sysdev/mpic_u3msi.c
@@ -0,0 +1,186 @@
1/*
2 * Copyright 2006, Segher Boessenkool, IBM Corporation.
3 * Copyright 2006-2007, Michael Ellerman, IBM Corporation.
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; version 2 of the
8 * License.
9 *
10 */
11
12#include <linux/irq.h>
13#include <linux/bootmem.h>
14#include <linux/msi.h>
15#include <asm/mpic.h>
16#include <asm/prom.h>
17#include <asm/hw_irq.h>
18#include <asm/ppc-pci.h>
19
20#include "mpic.h"
21
22/* A bit ugly, can we get this from the pci_dev somehow? */
23static struct mpic *msi_mpic;
24
25static void mpic_u3msi_mask_irq(unsigned int irq)
26{
27 mask_msi_irq(irq);
28 mpic_mask_irq(irq);
29}
30
31static void mpic_u3msi_unmask_irq(unsigned int irq)
32{
33 mpic_unmask_irq(irq);
34 unmask_msi_irq(irq);
35}
36
37static struct irq_chip mpic_u3msi_chip = {
38 .shutdown = mpic_u3msi_mask_irq,
39 .mask = mpic_u3msi_mask_irq,
40 .unmask = mpic_u3msi_unmask_irq,
41 .eoi = mpic_end_irq,
42 .set_type = mpic_set_irq_type,
43 .typename = "MPIC-U3MSI",
44};
45
46static u64 read_ht_magic_addr(struct pci_dev *pdev, unsigned int pos)
47{
48 u8 flags;
49 u32 tmp;
50 u64 addr;
51
52 pci_read_config_byte(pdev, pos + HT_MSI_FLAGS, &flags);
53
54 if (flags & HT_MSI_FLAGS_FIXED)
55 return HT_MSI_FIXED_ADDR;
56
57 pci_read_config_dword(pdev, pos + HT_MSI_ADDR_LO, &tmp);
58 addr = tmp & HT_MSI_ADDR_LO_MASK;
59 pci_read_config_dword(pdev, pos + HT_MSI_ADDR_HI, &tmp);
60 addr = addr | ((u64)tmp << 32);
61
62 return addr;
63}
64
65static u64 find_ht_magic_addr(struct pci_dev *pdev)
66{
67 struct pci_bus *bus;
68 unsigned int pos;
69
70 for (bus = pdev->bus; bus; bus = bus->parent) {
71 pos = pci_find_ht_capability(bus->self, HT_CAPTYPE_MSI_MAPPING);
72 if (pos)
73 return read_ht_magic_addr(bus->self, pos);
74 }
75
76 return 0;
77}
78
79static int u3msi_msi_check_device(struct pci_dev *pdev, int nvec, int type)
80{
81 if (type == PCI_CAP_ID_MSIX)
82 pr_debug("u3msi: MSI-X untested, trying anyway.\n");
83
84 /* If we can't find a magic address then MSI ain't gonna work */
85 if (find_ht_magic_addr(pdev) == 0) {
86 pr_debug("u3msi: no magic address found for %s\n",
87 pci_name(pdev));
88 return -ENXIO;
89 }
90
91 return 0;
92}
93
94static void u3msi_teardown_msi_irqs(struct pci_dev *pdev)
95{
96 struct msi_desc *entry;
97
98 list_for_each_entry(entry, &pdev->msi_list, list) {
99 if (entry->irq == NO_IRQ)
100 continue;
101
102 set_irq_msi(entry->irq, NULL);
103 mpic_msi_free_hwirqs(msi_mpic, virq_to_hw(entry->irq), 1);
104 irq_dispose_mapping(entry->irq);
105 }
106
107 return;
108}
109
110static void u3msi_compose_msi_msg(struct pci_dev *pdev, int virq,
111 struct msi_msg *msg)
112{
113 u64 addr;
114
115 addr = find_ht_magic_addr(pdev);
116 msg->address_lo = addr & 0xFFFFFFFF;
117 msg->address_hi = addr >> 32;
118 msg->data = virq_to_hw(virq);
119
120 pr_debug("u3msi: allocated virq 0x%x (hw 0x%lx) at address 0x%lx\n",
121 virq, virq_to_hw(virq), addr);
122}
123
124static int u3msi_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type)
125{
126 irq_hw_number_t hwirq;
127 int rc;
128 unsigned int virq;
129 struct msi_desc *entry;
130 struct msi_msg msg;
131
132 list_for_each_entry(entry, &pdev->msi_list, list) {
133 hwirq = mpic_msi_alloc_hwirqs(msi_mpic, 1);
134 if (hwirq < 0) {
135 rc = hwirq;
136 pr_debug("u3msi: failed allocating hwirq\n");
137 goto out_free;
138 }
139
140 virq = irq_create_mapping(msi_mpic->irqhost, hwirq);
141 if (virq == NO_IRQ) {
142 pr_debug("u3msi: failed mapping hwirq 0x%lx\n", hwirq);
143 mpic_msi_free_hwirqs(msi_mpic, hwirq, 1);
144 rc = -ENOSPC;
145 goto out_free;
146 }
147
148 set_irq_msi(virq, entry);
149 set_irq_chip(virq, &mpic_u3msi_chip);
150 set_irq_type(virq, IRQ_TYPE_EDGE_RISING);
151
152 u3msi_compose_msi_msg(pdev, virq, &msg);
153 write_msi_msg(virq, &msg);
154
155 hwirq++;
156 }
157
158 return 0;
159
160 out_free:
161 u3msi_teardown_msi_irqs(pdev);
162 return rc;
163}
164
165int mpic_u3msi_init(struct mpic *mpic)
166{
167 int rc;
168
169 rc = mpic_msi_init_allocator(mpic);
170 if (rc) {
171 pr_debug("u3msi: Error allocating bitmap!\n");
172 return rc;
173 }
174
175 pr_debug("u3msi: Registering MPIC U3 MSI callbacks.\n");
176
177 BUG_ON(msi_mpic);
178 msi_mpic = mpic;
179
180 WARN_ON(ppc_md.setup_msi_irqs);
181 ppc_md.setup_msi_irqs = u3msi_setup_msi_irqs;
182 ppc_md.teardown_msi_irqs = u3msi_teardown_msi_irqs;
183 ppc_md.msi_check_device = u3msi_msi_check_device;
184
185 return 0;
186}
diff --git a/arch/powerpc/sysdev/rom.c b/arch/powerpc/sysdev/rom.c
deleted file mode 100644
index c855a3b298a3..000000000000
--- a/arch/powerpc/sysdev/rom.c
+++ /dev/null
@@ -1,32 +0,0 @@
1/*
2 * ROM device registration
3 *
4 * (C) 2006 MontaVista Software, Inc. This file is licensed under
5 * the terms of the GNU General Public License version 2. This program
6 * is licensed "as is" without any warranty of any kind, whether express
7 * or implied.
8 */
9
10#include <linux/kernel.h>
11#include <asm/of_device.h>
12#include <asm/of_platform.h>
13
14static int __init powerpc_flash_init(void)
15{
16 struct device_node *node = NULL;
17
18 /*
19 * Register all the devices which type is "rom"
20 */
21 while ((node = of_find_node_by_type(node, "rom")) != NULL) {
22 if (node->name == NULL) {
23 printk(KERN_WARNING "powerpc_flash_init: found 'rom' "
24 "device, but with no name, skipping...\n");
25 continue;
26 }
27 of_platform_device_create(node, node->name, NULL);
28 }
29 return 0;
30}
31
32arch_initcall(powerpc_flash_init);
diff --git a/arch/powerpc/sysdev/tsi108_dev.c b/arch/powerpc/sysdev/tsi108_dev.c
index 337039ee51e6..7d3b09b7d544 100644
--- a/arch/powerpc/sysdev/tsi108_dev.c
+++ b/arch/powerpc/sysdev/tsi108_dev.c
@@ -107,8 +107,9 @@ static int __init tsi108_eth_of_init(void)
107 goto err; 107 goto err;
108 } 108 }
109 109
110 mac_addr = of_get_property(np, "address", NULL); 110 mac_addr = of_get_mac_address(np);
111 memcpy(tsi_eth_data.mac_addr, mac_addr, 6); 111 if (mac_addr)
112 memcpy(tsi_eth_data.mac_addr, mac_addr, 6);
112 113
113 ph = of_get_property(np, "phy-handle", NULL); 114 ph = of_get_property(np, "phy-handle", NULL);
114 phy = of_find_node_by_phandle(*ph); 115 phy = of_find_node_by_phandle(*ph);
@@ -129,6 +130,8 @@ static int __init tsi108_eth_of_init(void)
129 tsi_eth_data.phyregs = res.start; 130 tsi_eth_data.phyregs = res.start;
130 tsi_eth_data.phy = *phy_id; 131 tsi_eth_data.phy = *phy_id;
131 tsi_eth_data.irq_num = irq_of_parse_and_map(np, 0); 132 tsi_eth_data.irq_num = irq_of_parse_and_map(np, 0);
133 if (of_device_is_compatible(phy, "bcm54xx"))
134 tsi_eth_data.phy_type = TSI108_PHY_BCM54XX;
132 of_node_put(phy); 135 of_node_put(phy);
133 ret = 136 ret =
134 platform_device_add_data(tsi_eth_dev, &tsi_eth_data, 137 platform_device_add_data(tsi_eth_dev, &tsi_eth_data,
diff --git a/arch/powerpc/sysdev/tsi108_pci.c b/arch/powerpc/sysdev/tsi108_pci.c
index 58b9e7f8abf2..2153163fa593 100644
--- a/arch/powerpc/sysdev/tsi108_pci.c
+++ b/arch/powerpc/sysdev/tsi108_pci.c
@@ -35,6 +35,7 @@
35#include <asm/machdep.h> 35#include <asm/machdep.h>
36#include <asm/pci-bridge.h> 36#include <asm/pci-bridge.h>
37#include <asm/tsi108.h> 37#include <asm/tsi108.h>
38#include <asm/tsi108_pci.h>
38#include <asm/tsi108_irq.h> 39#include <asm/tsi108_irq.h>
39#include <asm/prom.h> 40#include <asm/prom.h>
40 41
@@ -49,6 +50,7 @@
49 ((((bus)<<16) | ((devfunc)<<8) | (offset & 0xfc)) + tsi108_pci_cfg_base) 50 ((((bus)<<16) | ((devfunc)<<8) | (offset & 0xfc)) + tsi108_pci_cfg_base)
50 51
51u32 tsi108_pci_cfg_base; 52u32 tsi108_pci_cfg_base;
53static u32 tsi108_pci_cfg_phys;
52u32 tsi108_csr_vir_base; 54u32 tsi108_csr_vir_base;
53static struct device_node *pci_irq_node; 55static struct device_node *pci_irq_node;
54static struct irq_host *pci_irq_host; 56static struct irq_host *pci_irq_host;
@@ -185,7 +187,7 @@ tsi108_direct_read_config(struct pci_bus *bus, unsigned int devfn, int offset,
185 187
186void tsi108_clear_pci_cfg_error(void) 188void tsi108_clear_pci_cfg_error(void)
187{ 189{
188 tsi108_clear_pci_error(TSI108_PCI_CFG_BASE_PHYS); 190 tsi108_clear_pci_error(tsi108_pci_cfg_phys);
189} 191}
190 192
191static struct pci_ops tsi108_direct_pci_ops = { 193static struct pci_ops tsi108_direct_pci_ops = {
@@ -193,17 +195,17 @@ static struct pci_ops tsi108_direct_pci_ops = {
193 tsi108_direct_write_config 195 tsi108_direct_write_config
194}; 196};
195 197
196int __init tsi108_setup_pci(struct device_node *dev) 198int __init tsi108_setup_pci(struct device_node *dev, u32 cfg_phys, int primary)
197{ 199{
198 int len; 200 int len;
199 struct pci_controller *hose; 201 struct pci_controller *hose;
200 struct resource rsrc; 202 struct resource rsrc;
201 const int *bus_range; 203 const int *bus_range;
202 int primary = 0, has_address = 0; 204 int has_address = 0;
203 205
204 /* PCI Config mapping */ 206 /* PCI Config mapping */
205 tsi108_pci_cfg_base = (u32)ioremap(TSI108_PCI_CFG_BASE_PHYS, 207 tsi108_pci_cfg_base = (u32)ioremap(cfg_phys, TSI108_PCI_CFG_SIZE);
206 TSI108_PCI_CFG_SIZE); 208 tsi108_pci_cfg_phys = cfg_phys;
207 DBG("TSI_PCI: %s tsi108_pci_cfg_base=0x%x\n", __FUNCTION__, 209 DBG("TSI_PCI: %s tsi108_pci_cfg_base=0x%x\n", __FUNCTION__,
208 tsi108_pci_cfg_base); 210 tsi108_pci_cfg_base);
209 211
diff --git a/arch/powerpc/sysdev/uic.c b/arch/powerpc/sysdev/uic.c
index 968fb40af9dc..89059895a20d 100644
--- a/arch/powerpc/sysdev/uic.c
+++ b/arch/powerpc/sysdev/uic.c
@@ -221,7 +221,7 @@ static struct uic * __init uic_init_one(struct device_node *node)
221 const u32 *indexp, *dcrreg; 221 const u32 *indexp, *dcrreg;
222 int len; 222 int len;
223 223
224 BUG_ON(! device_is_compatible(node, "ibm,uic")); 224 BUG_ON(! of_device_is_compatible(node, "ibm,uic"));
225 225
226 uic = alloc_bootmem(sizeof(*uic)); 226 uic = alloc_bootmem(sizeof(*uic));
227 if (! uic) 227 if (! uic)
diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
index b481db1dacb4..28fdf4f50c27 100644
--- a/arch/powerpc/xmon/xmon.c
+++ b/arch/powerpc/xmon/xmon.c
@@ -1217,7 +1217,6 @@ static void get_function_bounds(unsigned long pc, unsigned long *startp,
1217{ 1217{
1218 unsigned long size, offset; 1218 unsigned long size, offset;
1219 const char *name; 1219 const char *name;
1220 char *modname;
1221 1220
1222 *startp = *endp = 0; 1221 *startp = *endp = 0;
1223 if (pc == 0) 1222 if (pc == 0)
@@ -1225,7 +1224,7 @@ static void get_function_bounds(unsigned long pc, unsigned long *startp,
1225 if (setjmp(bus_error_jmp) == 0) { 1224 if (setjmp(bus_error_jmp) == 0) {
1226 catch_memory_errors = 1; 1225 catch_memory_errors = 1;
1227 sync(); 1226 sync();
1228 name = kallsyms_lookup(pc, &size, &offset, &modname, tmpstr); 1227 name = kallsyms_lookup(pc, &size, &offset, NULL, tmpstr);
1229 if (name != NULL) { 1228 if (name != NULL) {
1230 *startp = pc - offset; 1229 *startp = pc - offset;
1231 *endp = pc - offset + size; 1230 *endp = pc - offset + size;