aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-11-26 22:08:35 -0500
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-11-26 22:08:35 -0500
commitda457d4b93f9d746b0afd4aa65c94759f190d642 (patch)
treedbd838391c612326bda09e5ea632c9c1e50a7fd0 /arch
parent0f13864e5b24d9cbe18d125d41bfa4b726a82e40 (diff)
parentad639b9f2ccb87815384bda4ed4609592a861b8b (diff)
Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc
* 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc: (27 commits) [POWERPC] 83xx: Update mpc8349emitx(gp) defconfig for USB [POWERPC] 83xx: Update mpc832x_rdb_defconfig to enable MMC-over-SPI [POWERPC] 83xx: MPC832x RDB - remove spidev stub, use mmc_spi [POWERPC] 8xxx: MDS board RTC fixes [POWERPC] Fix 8xx build breakage due to _tlbie changes [POWERPC] Fix device tree interrupt map for Freescale ULI1575 boards [POWERPC] Fix possible division by zero in scaled time accounting [POWERPC] spufs: Fix context destroy vs /spu readdir race [POWERPC] Fix RTAS os-term usage on kernel panic [POWERPC] 83xx: Handle mpc8360 rev. 2.1 RGMII timing erratum [POWERPC] Document rgmii-rxid and rgmii-txid phy-connection-types [POWERPC] 83xx: Fix 2nd UCC entry in mpc832x_mds.dts [POWERPC] 83xx: mpc832x mds: Fix board PHY reset code [POWERPC] Fix potential NULL dereference [POWERPC] vdso: Fixes for cache block sizes [POWERPC] pasemi: Don't reset mpic at boot [POWERPC] Fix kmalloc alignment on non-coherent DMA platforms [POWERPC] Fix build failure on legacy iSeries [POWERPC] 4xx: Use virtual PVR value to init FPU on arch/ppc 440EP [POWERPC] 4xx: UIC add mask_ack callback ...
Diffstat (limited to 'arch')
-rw-r--r--arch/powerpc/boot/dts/mpc832x_mds.dts16
-rw-r--r--arch/powerpc/boot/dts/mpc834x_mds.dts9
-rw-r--r--arch/powerpc/boot/dts/mpc836x_mds.dts9
-rw-r--r--arch/powerpc/boot/dts/mpc8544ds.dts20
-rw-r--r--arch/powerpc/boot/dts/mpc8572ds.dts108
-rw-r--r--arch/powerpc/boot/dts/mpc8641_hpcn.dts126
-rw-r--r--arch/powerpc/configs/mpc832x_mds_defconfig48
-rw-r--r--arch/powerpc/configs/mpc832x_rdb_defconfig41
-rw-r--r--arch/powerpc/configs/mpc834x_itx_defconfig2
-rw-r--r--arch/powerpc/configs/mpc834x_itxgp_defconfig88
-rw-r--r--arch/powerpc/configs/mpc834x_mds_defconfig48
-rw-r--r--arch/powerpc/configs/mpc836x_mds_defconfig48
-rw-r--r--arch/powerpc/configs/mpc8568mds_defconfig48
-rw-r--r--arch/powerpc/kernel/asm-offsets.c4
-rw-r--r--arch/powerpc/kernel/rtas.c111
-rw-r--r--arch/powerpc/kernel/time.c5
-rw-r--r--arch/powerpc/kernel/vdso.c11
-rw-r--r--arch/powerpc/kernel/vdso32/cacheflush.S41
-rw-r--r--arch/powerpc/kernel/vdso64/cacheflush.S41
-rw-r--r--arch/powerpc/mm/mem.c2
-rw-r--r--arch/powerpc/mm/mmu_decl.h2
-rw-r--r--arch/powerpc/mm/stab.c1
-rw-r--r--arch/powerpc/platforms/40x/walnut.c3
-rw-r--r--arch/powerpc/platforms/44x/bamboo.c3
-rw-r--r--arch/powerpc/platforms/44x/ebony.c3
-rw-r--r--arch/powerpc/platforms/44x/sequoia.c3
-rw-r--r--arch/powerpc/platforms/83xx/mpc832x_mds.c31
-rw-r--r--arch/powerpc/platforms/83xx/mpc832x_rdb.c14
-rw-r--r--arch/powerpc/platforms/83xx/mpc834x_mds.c24
-rw-r--r--arch/powerpc/platforms/83xx/mpc836x_mds.c55
-rw-r--r--arch/powerpc/platforms/83xx/usb.c8
-rw-r--r--arch/powerpc/platforms/cell/spufs/inode.c1
-rw-r--r--arch/powerpc/platforms/embedded6xx/prpmc2800.c1
-rw-r--r--arch/powerpc/platforms/pasemi/setup.c2
-rw-r--r--arch/powerpc/platforms/pseries/Kconfig2
-rw-r--r--arch/powerpc/platforms/pseries/setup.c3
-rw-r--r--arch/powerpc/sysdev/uic.c18
-rw-r--r--arch/ppc/kernel/setup.c7
-rw-r--r--arch/ppc/mm/init.c2
-rw-r--r--arch/ppc/mm/mmu_decl.h2
-rw-r--r--arch/ppc/platforms/4xx/yucca.c1
-rw-r--r--arch/ppc/syslib/virtex_devices.c31
42 files changed, 812 insertions, 231 deletions
diff --git a/arch/powerpc/boot/dts/mpc832x_mds.dts b/arch/powerpc/boot/dts/mpc832x_mds.dts
index fcd333c391..c64f3037a1 100644
--- a/arch/powerpc/boot/dts/mpc832x_mds.dts
+++ b/arch/powerpc/boot/dts/mpc832x_mds.dts
@@ -57,12 +57,19 @@
57 }; 57 };
58 58
59 i2c@3000 { 59 i2c@3000 {
60 #address-cells = <1>;
61 #size-cells = <0>;
60 device_type = "i2c"; 62 device_type = "i2c";
61 compatible = "fsl-i2c"; 63 compatible = "fsl-i2c";
62 reg = <3000 100>; 64 reg = <3000 100>;
63 interrupts = <e 8>; 65 interrupts = <e 8>;
64 interrupt-parent = < &ipic >; 66 interrupt-parent = < &ipic >;
65 dfsrr; 67 dfsrr;
68
69 rtc@68 {
70 compatible = "dallas,ds1374";
71 reg = <68>;
72 };
66 }; 73 };
67 74
68 serial@4500 { 75 serial@4500 {
@@ -104,7 +111,7 @@
104 reg = <700 100>; 111 reg = <700 100>;
105 device_type = "ipic"; 112 device_type = "ipic";
106 }; 113 };
107 114
108 par_io@1400 { 115 par_io@1400 {
109 reg = <1400 100>; 116 reg = <1400 100>;
110 device_type = "par_io"; 117 device_type = "par_io";
@@ -117,7 +124,6 @@
117 3 5 1 0 2 0 /* MDC */ 124 3 5 1 0 2 0 /* MDC */
118 0 d 2 0 1 0 /* RX_CLK (CLK9) */ 125 0 d 2 0 1 0 /* RX_CLK (CLK9) */
119 3 18 2 0 1 0 /* TX_CLK (CLK10) */ 126 3 18 2 0 1 0 /* TX_CLK (CLK10) */
120 1 1 1 0 1 0 /* TxD1 */
121 1 0 1 0 1 0 /* TxD0 */ 127 1 0 1 0 1 0 /* TxD0 */
122 1 1 1 0 1 0 /* TxD1 */ 128 1 1 1 0 1 0 /* TxD1 */
123 1 2 1 0 1 0 /* TxD2 */ 129 1 2 1 0 1 0 /* TxD2 */
@@ -165,11 +171,11 @@
165 reg = <e0100000 480>; 171 reg = <e0100000 480>;
166 brg-frequency = <0>; 172 brg-frequency = <0>;
167 bus-frequency = <BCD3D80>; 173 bus-frequency = <BCD3D80>;
168 174
169 muram@10000 { 175 muram@10000 {
170 device_type = "muram"; 176 device_type = "muram";
171 ranges = <0 00010000 00004000>; 177 ranges = <0 00010000 00004000>;
172 178
173 data-only@0 { 179 data-only@0 {
174 reg = <0 4000>; 180 reg = <0 4000>;
175 }; 181 };
@@ -228,7 +234,7 @@
228 compatible = "ucc_geth"; 234 compatible = "ucc_geth";
229 model = "UCC"; 235 model = "UCC";
230 device-id = <4>; 236 device-id = <4>;
231 reg = <3000 200>; 237 reg = <3200 200>;
232 interrupts = <23>; 238 interrupts = <23>;
233 interrupt-parent = < &qeic >; 239 interrupt-parent = < &qeic >;
234 /* 240 /*
diff --git a/arch/powerpc/boot/dts/mpc834x_mds.dts b/arch/powerpc/boot/dts/mpc834x_mds.dts
index e5a84ef9f4..49363f89cb 100644
--- a/arch/powerpc/boot/dts/mpc834x_mds.dts
+++ b/arch/powerpc/boot/dts/mpc834x_mds.dts
@@ -57,15 +57,24 @@
57 }; 57 };
58 58
59 i2c@3000 { 59 i2c@3000 {
60 #address-cells = <1>;
61 #size-cells = <0>;
60 device_type = "i2c"; 62 device_type = "i2c";
61 compatible = "fsl-i2c"; 63 compatible = "fsl-i2c";
62 reg = <3000 100>; 64 reg = <3000 100>;
63 interrupts = <e 8>; 65 interrupts = <e 8>;
64 interrupt-parent = < &ipic >; 66 interrupt-parent = < &ipic >;
65 dfsrr; 67 dfsrr;
68
69 rtc@68 {
70 compatible = "dallas,ds1374";
71 reg = <68>;
72 };
66 }; 73 };
67 74
68 i2c@3100 { 75 i2c@3100 {
76 #address-cells = <1>;
77 #size-cells = <0>;
69 device_type = "i2c"; 78 device_type = "i2c";
70 compatible = "fsl-i2c"; 79 compatible = "fsl-i2c";
71 reg = <3100 100>; 80 reg = <3100 100>;
diff --git a/arch/powerpc/boot/dts/mpc836x_mds.dts b/arch/powerpc/boot/dts/mpc836x_mds.dts
index fbd1573c34..0b2d2b588d 100644
--- a/arch/powerpc/boot/dts/mpc836x_mds.dts
+++ b/arch/powerpc/boot/dts/mpc836x_mds.dts
@@ -62,15 +62,24 @@
62 }; 62 };
63 63
64 i2c@3000 { 64 i2c@3000 {
65 #address-cells = <1>;
66 #size-cells = <0>;
65 device_type = "i2c"; 67 device_type = "i2c";
66 compatible = "fsl-i2c"; 68 compatible = "fsl-i2c";
67 reg = <3000 100>; 69 reg = <3000 100>;
68 interrupts = <e 8>; 70 interrupts = <e 8>;
69 interrupt-parent = < &ipic >; 71 interrupt-parent = < &ipic >;
70 dfsrr; 72 dfsrr;
73
74 rtc@68 {
75 compatible = "dallas,ds1374";
76 reg = <68>;
77 };
71 }; 78 };
72 79
73 i2c@3100 { 80 i2c@3100 {
81 #address-cells = <1>;
82 #size-cells = <0>;
74 device_type = "i2c"; 83 device_type = "i2c";
75 compatible = "fsl-i2c"; 84 compatible = "fsl-i2c";
76 reg = <3100 100>; 85 reg = <3100 100>;
diff --git a/arch/powerpc/boot/dts/mpc8544ds.dts b/arch/powerpc/boot/dts/mpc8544ds.dts
index 3f9d15cf13..6c608de1fc 100644
--- a/arch/powerpc/boot/dts/mpc8544ds.dts
+++ b/arch/powerpc/boot/dts/mpc8544ds.dts
@@ -272,24 +272,24 @@
272 clock-frequency = <1fca055>; 272 clock-frequency = <1fca055>;
273 interrupt-parent = <&mpic>; 273 interrupt-parent = <&mpic>;
274 interrupts = <1b 2>; 274 interrupts = <1b 2>;
275 interrupt-map-mask = <fb00 0 0 0>; 275 interrupt-map-mask = <ff00 0 0 1>;
276 interrupt-map = < 276 interrupt-map = <
277 // IDSEL 0x1c USB 277 // IDSEL 0x1c USB
278 e000 0 0 0 &i8259 c 2 278 e000 0 0 1 &i8259 c 2
279 e100 0 0 0 &i8259 9 2 279 e100 0 0 1 &i8259 9 2
280 e200 0 0 0 &i8259 a 2 280 e200 0 0 1 &i8259 a 2
281 e300 0 0 0 &i8259 b 2 281 e300 0 0 1 &i8259 b 2
282 282
283 // IDSEL 0x1d Audio 283 // IDSEL 0x1d Audio
284 e800 0 0 0 &i8259 6 2 284 e800 0 0 1 &i8259 6 2
285 285
286 // IDSEL 0x1e Legacy 286 // IDSEL 0x1e Legacy
287 f000 0 0 0 &i8259 7 2 287 f000 0 0 1 &i8259 7 2
288 f100 0 0 0 &i8259 7 2 288 f100 0 0 1 &i8259 7 2
289 289
290 // IDSEL 0x1f IDE/SATA 290 // IDSEL 0x1f IDE/SATA
291 f800 0 0 0 &i8259 e 2 291 f800 0 0 1 &i8259 e 2
292 f900 0 0 0 &i8259 5 2 292 f900 0 0 1 &i8259 5 2
293 >; 293 >;
294 294
295 pcie@0 { 295 pcie@0 {
diff --git a/arch/powerpc/boot/dts/mpc8572ds.dts b/arch/powerpc/boot/dts/mpc8572ds.dts
index d638deec76..0eb44fb964 100644
--- a/arch/powerpc/boot/dts/mpc8572ds.dts
+++ b/arch/powerpc/boot/dts/mpc8572ds.dts
@@ -219,36 +219,120 @@
219 clock-frequency = <1fca055>; 219 clock-frequency = <1fca055>;
220 interrupt-parent = <&mpic>; 220 interrupt-parent = <&mpic>;
221 interrupts = <18 2>; 221 interrupts = <18 2>;
222 interrupt-map-mask = <fb00 0 0 0>; 222 interrupt-map-mask = <ff00 0 0 7>;
223 interrupt-map = < 223 interrupt-map = <
224 /* IDSEL 0x11 - PCI slot 1 */ 224 /* IDSEL 0x11 func 0 - PCI slot 1 */
225 8800 0 0 1 &mpic 2 1 225 8800 0 0 1 &mpic 2 1
226 8800 0 0 2 &mpic 3 1 226 8800 0 0 2 &mpic 3 1
227 8800 0 0 3 &mpic 4 1 227 8800 0 0 3 &mpic 4 1
228 8800 0 0 4 &mpic 1 1 228 8800 0 0 4 &mpic 1 1
229 229
230 /* IDSEL 0x12 - PCI slot 2 */ 230 /* IDSEL 0x11 func 1 - PCI slot 1 */
231 8900 0 0 1 &mpic 2 1
232 8900 0 0 2 &mpic 3 1
233 8900 0 0 3 &mpic 4 1
234 8900 0 0 4 &mpic 1 1
235
236 /* IDSEL 0x11 func 2 - PCI slot 1 */
237 8a00 0 0 1 &mpic 2 1
238 8a00 0 0 2 &mpic 3 1
239 8a00 0 0 3 &mpic 4 1
240 8a00 0 0 4 &mpic 1 1
241
242 /* IDSEL 0x11 func 3 - PCI slot 1 */
243 8b00 0 0 1 &mpic 2 1
244 8b00 0 0 2 &mpic 3 1
245 8b00 0 0 3 &mpic 4 1
246 8b00 0 0 4 &mpic 1 1
247
248 /* IDSEL 0x11 func 4 - PCI slot 1 */
249 8c00 0 0 1 &mpic 2 1
250 8c00 0 0 2 &mpic 3 1
251 8c00 0 0 3 &mpic 4 1
252 8c00 0 0 4 &mpic 1 1
253
254 /* IDSEL 0x11 func 5 - PCI slot 1 */
255 8d00 0 0 1 &mpic 2 1
256 8d00 0 0 2 &mpic 3 1
257 8d00 0 0 3 &mpic 4 1
258 8d00 0 0 4 &mpic 1 1
259
260 /* IDSEL 0x11 func 6 - PCI slot 1 */
261 8e00 0 0 1 &mpic 2 1
262 8e00 0 0 2 &mpic 3 1
263 8e00 0 0 3 &mpic 4 1
264 8e00 0 0 4 &mpic 1 1
265
266 /* IDSEL 0x11 func 7 - PCI slot 1 */
267 8f00 0 0 1 &mpic 2 1
268 8f00 0 0 2 &mpic 3 1
269 8f00 0 0 3 &mpic 4 1
270 8f00 0 0 4 &mpic 1 1
271
272 /* IDSEL 0x12 func 0 - PCI slot 2 */
231 9000 0 0 1 &mpic 3 1 273 9000 0 0 1 &mpic 3 1
232 9000 0 0 2 &mpic 4 1 274 9000 0 0 2 &mpic 4 1
233 9000 0 0 3 &mpic 1 1 275 9000 0 0 3 &mpic 1 1
234 9000 0 0 4 &mpic 2 1 276 9000 0 0 4 &mpic 2 1
235 277
278 /* IDSEL 0x12 func 1 - PCI slot 2 */
279 9100 0 0 1 &mpic 3 1
280 9100 0 0 2 &mpic 4 1
281 9100 0 0 3 &mpic 1 1
282 9100 0 0 4 &mpic 2 1
283
284 /* IDSEL 0x12 func 2 - PCI slot 2 */
285 9200 0 0 1 &mpic 3 1
286 9200 0 0 2 &mpic 4 1
287 9200 0 0 3 &mpic 1 1
288 9200 0 0 4 &mpic 2 1
289
290 /* IDSEL 0x12 func 3 - PCI slot 2 */
291 9300 0 0 1 &mpic 3 1
292 9300 0 0 2 &mpic 4 1
293 9300 0 0 3 &mpic 1 1
294 9300 0 0 4 &mpic 2 1
295
296 /* IDSEL 0x12 func 4 - PCI slot 2 */
297 9400 0 0 1 &mpic 3 1
298 9400 0 0 2 &mpic 4 1
299 9400 0 0 3 &mpic 1 1
300 9400 0 0 4 &mpic 2 1
301
302 /* IDSEL 0x12 func 5 - PCI slot 2 */
303 9500 0 0 1 &mpic 3 1
304 9500 0 0 2 &mpic 4 1
305 9500 0 0 3 &mpic 1 1
306 9500 0 0 4 &mpic 2 1
307
308 /* IDSEL 0x12 func 6 - PCI slot 2 */
309 9600 0 0 1 &mpic 3 1
310 9600 0 0 2 &mpic 4 1
311 9600 0 0 3 &mpic 1 1
312 9600 0 0 4 &mpic 2 1
313
314 /* IDSEL 0x12 func 7 - PCI slot 2 */
315 9700 0 0 1 &mpic 3 1
316 9700 0 0 2 &mpic 4 1
317 9700 0 0 3 &mpic 1 1
318 9700 0 0 4 &mpic 2 1
319
236 // IDSEL 0x1c USB 320 // IDSEL 0x1c USB
237 e000 0 0 0 &i8259 c 2 321 e000 0 0 1 &i8259 c 2
238 e100 0 0 0 &i8259 9 2 322 e100 0 0 1 &i8259 9 2
239 e200 0 0 0 &i8259 a 2 323 e200 0 0 1 &i8259 a 2
240 e300 0 0 0 &i8259 b 2 324 e300 0 0 1 &i8259 b 2
241 325
242 // IDSEL 0x1d Audio 326 // IDSEL 0x1d Audio
243 e800 0 0 0 &i8259 6 2 327 e800 0 0 1 &i8259 6 2
244 328
245 // IDSEL 0x1e Legacy 329 // IDSEL 0x1e Legacy
246 f000 0 0 0 &i8259 7 2 330 f000 0 0 1 &i8259 7 2
247 f100 0 0 0 &i8259 7 2 331 f100 0 0 1 &i8259 7 2
248 332
249 // IDSEL 0x1f IDE/SATA 333 // IDSEL 0x1f IDE/SATA
250 f800 0 0 0 &i8259 e 2 334 f800 0 0 1 &i8259 e 2
251 f900 0 0 0 &i8259 5 2 335 f900 0 0 1 &i8259 5 2
252 336
253 >; 337 >;
254 338
diff --git a/arch/powerpc/boot/dts/mpc8641_hpcn.dts b/arch/powerpc/boot/dts/mpc8641_hpcn.dts
index 367765937a..abb26dc425 100644
--- a/arch/powerpc/boot/dts/mpc8641_hpcn.dts
+++ b/arch/powerpc/boot/dts/mpc8641_hpcn.dts
@@ -235,36 +235,120 @@
235 clock-frequency = <1fca055>; 235 clock-frequency = <1fca055>;
236 interrupt-parent = <&mpic>; 236 interrupt-parent = <&mpic>;
237 interrupts = <18 2>; 237 interrupts = <18 2>;
238 interrupt-map-mask = <fb00 0 0 0>; 238 interrupt-map-mask = <ff00 0 0 7>;
239 interrupt-map = < 239 interrupt-map = <
240 /* IDSEL 0x11 */ 240 /* IDSEL 0x11 func 0 - PCI slot 1 */
241 8800 0 0 1 &i8259 9 2 241 8800 0 0 1 &mpic 2 1
242 8800 0 0 2 &i8259 a 2 242 8800 0 0 2 &mpic 3 1
243 8800 0 0 3 &i8259 b 2 243 8800 0 0 3 &mpic 4 1
244 8800 0 0 4 &i8259 c 2 244 8800 0 0 4 &mpic 1 1
245 245
246 /* IDSEL 0x12 */ 246 /* IDSEL 0x11 func 1 - PCI slot 1 */
247 9000 0 0 1 &i8259 a 2 247 8900 0 0 1 &mpic 2 1
248 9000 0 0 2 &i8259 b 2 248 8900 0 0 2 &mpic 3 1
249 9000 0 0 3 &i8259 c 2 249 8900 0 0 3 &mpic 4 1
250 9000 0 0 4 &i8259 9 2 250 8900 0 0 4 &mpic 1 1
251
252 /* IDSEL 0x11 func 2 - PCI slot 1 */
253 8a00 0 0 1 &mpic 2 1
254 8a00 0 0 2 &mpic 3 1
255 8a00 0 0 3 &mpic 4 1
256 8a00 0 0 4 &mpic 1 1
257
258 /* IDSEL 0x11 func 3 - PCI slot 1 */
259 8b00 0 0 1 &mpic 2 1
260 8b00 0 0 2 &mpic 3 1
261 8b00 0 0 3 &mpic 4 1
262 8b00 0 0 4 &mpic 1 1
263
264 /* IDSEL 0x11 func 4 - PCI slot 1 */
265 8c00 0 0 1 &mpic 2 1
266 8c00 0 0 2 &mpic 3 1
267 8c00 0 0 3 &mpic 4 1
268 8c00 0 0 4 &mpic 1 1
269
270 /* IDSEL 0x11 func 5 - PCI slot 1 */
271 8d00 0 0 1 &mpic 2 1
272 8d00 0 0 2 &mpic 3 1
273 8d00 0 0 3 &mpic 4 1
274 8d00 0 0 4 &mpic 1 1
275
276 /* IDSEL 0x11 func 6 - PCI slot 1 */
277 8e00 0 0 1 &mpic 2 1
278 8e00 0 0 2 &mpic 3 1
279 8e00 0 0 3 &mpic 4 1
280 8e00 0 0 4 &mpic 1 1
281
282 /* IDSEL 0x11 func 7 - PCI slot 1 */
283 8f00 0 0 1 &mpic 2 1
284 8f00 0 0 2 &mpic 3 1
285 8f00 0 0 3 &mpic 4 1
286 8f00 0 0 4 &mpic 1 1
287
288 /* IDSEL 0x12 func 0 - PCI slot 2 */
289 9000 0 0 1 &mpic 3 1
290 9000 0 0 2 &mpic 4 1
291 9000 0 0 3 &mpic 1 1
292 9000 0 0 4 &mpic 2 1
293
294 /* IDSEL 0x12 func 1 - PCI slot 2 */
295 9100 0 0 1 &mpic 3 1
296 9100 0 0 2 &mpic 4 1
297 9100 0 0 3 &mpic 1 1
298 9100 0 0 4 &mpic 2 1
299
300 /* IDSEL 0x12 func 2 - PCI slot 2 */
301 9200 0 0 1 &mpic 3 1
302 9200 0 0 2 &mpic 4 1
303 9200 0 0 3 &mpic 1 1
304 9200 0 0 4 &mpic 2 1
305
306 /* IDSEL 0x12 func 3 - PCI slot 2 */
307 9300 0 0 1 &mpic 3 1
308 9300 0 0 2 &mpic 4 1
309 9300 0 0 3 &mpic 1 1
310 9300 0 0 4 &mpic 2 1
311
312 /* IDSEL 0x12 func 4 - PCI slot 2 */
313 9400 0 0 1 &mpic 3 1
314 9400 0 0 2 &mpic 4 1
315 9400 0 0 3 &mpic 1 1
316 9400 0 0 4 &mpic 2 1
317
318 /* IDSEL 0x12 func 5 - PCI slot 2 */
319 9500 0 0 1 &mpic 3 1
320 9500 0 0 2 &mpic 4 1
321 9500 0 0 3 &mpic 1 1
322 9500 0 0 4 &mpic 2 1
323
324 /* IDSEL 0x12 func 6 - PCI slot 2 */
325 9600 0 0 1 &mpic 3 1
326 9600 0 0 2 &mpic 4 1
327 9600 0 0 3 &mpic 1 1
328 9600 0 0 4 &mpic 2 1
329
330 /* IDSEL 0x12 func 7 - PCI slot 2 */
331 9700 0 0 1 &mpic 3 1
332 9700 0 0 2 &mpic 4 1
333 9700 0 0 3 &mpic 1 1
334 9700 0 0 4 &mpic 2 1
251 335
252 // IDSEL 0x1c USB 336 // IDSEL 0x1c USB
253 e000 0 0 0 &i8259 c 2 337 e000 0 0 1 &i8259 c 2
254 e100 0 0 0 &i8259 9 2 338 e100 0 0 1 &i8259 9 2
255 e200 0 0 0 &i8259 a 2 339 e200 0 0 1 &i8259 a 2
256 e300 0 0 0 &i8259 b 2 340 e300 0 0 1 &i8259 b 2
257 341
258 // IDSEL 0x1d Audio 342 // IDSEL 0x1d Audio
259 e800 0 0 0 &i8259 6 2 343 e800 0 0 1 &i8259 6 2
260 344
261 // IDSEL 0x1e Legacy 345 // IDSEL 0x1e Legacy
262 f000 0 0 0 &i8259 7 2 346 f000 0 0 1 &i8259 7 2
263 f100 0 0 0 &i8259 7 2 347 f100 0 0 1 &i8259 7 2
264 348
265 // IDSEL 0x1f IDE/SATA 349 // IDSEL 0x1f IDE/SATA
266 f800 0 0 0 &i8259 e 2 350 f800 0 0 1 &i8259 e 2
267 f900 0 0 0 &i8259 5 2 351 f900 0 0 1 &i8259 5 2
268 >; 352 >;
269 353
270 pcie@0 { 354 pcie@0 {
diff --git a/arch/powerpc/configs/mpc832x_mds_defconfig b/arch/powerpc/configs/mpc832x_mds_defconfig
index dd68d1818d..e069018276 100644
--- a/arch/powerpc/configs/mpc832x_mds_defconfig
+++ b/arch/powerpc/configs/mpc832x_mds_defconfig
@@ -774,7 +774,53 @@ CONFIG_USB_ARCH_HAS_EHCI=y
774# CONFIG_NEW_LEDS is not set 774# CONFIG_NEW_LEDS is not set
775# CONFIG_INFINIBAND is not set 775# CONFIG_INFINIBAND is not set
776# CONFIG_EDAC is not set 776# CONFIG_EDAC is not set
777# CONFIG_RTC_CLASS is not set 777CONFIG_RTC_LIB=y
778CONFIG_RTC_CLASS=y
779CONFIG_RTC_HCTOSYS=y
780CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
781# CONFIG_RTC_DEBUG is not set
782
783#
784# RTC interfaces
785#
786CONFIG_RTC_INTF_SYSFS=y
787CONFIG_RTC_INTF_PROC=y
788CONFIG_RTC_INTF_DEV=y
789# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
790# CONFIG_RTC_DRV_TEST is not set
791
792#
793# I2C RTC drivers
794#
795# CONFIG_RTC_DRV_DS1307 is not set
796CONFIG_RTC_DRV_DS1374=y
797# CONFIG_RTC_DRV_DS1672 is not set
798# CONFIG_RTC_DRV_MAX6900 is not set
799# CONFIG_RTC_DRV_RS5C372 is not set
800# CONFIG_RTC_DRV_ISL1208 is not set
801# CONFIG_RTC_DRV_X1205 is not set
802# CONFIG_RTC_DRV_PCF8563 is not set
803# CONFIG_RTC_DRV_PCF8583 is not set
804# CONFIG_RTC_DRV_M41T80 is not set
805
806#
807# SPI RTC drivers
808#
809
810#
811# Platform RTC drivers
812#
813# CONFIG_RTC_DRV_CMOS is not set
814# CONFIG_RTC_DRV_DS1553 is not set
815# CONFIG_RTC_DRV_STK17TA8 is not set
816# CONFIG_RTC_DRV_DS1742 is not set
817# CONFIG_RTC_DRV_M48T86 is not set
818# CONFIG_RTC_DRV_M48T59 is not set
819# CONFIG_RTC_DRV_V3020 is not set
820
821#
822# on-CPU RTC drivers
823#
778 824
779# 825#
780# DMA Engine support 826# DMA Engine support
diff --git a/arch/powerpc/configs/mpc832x_rdb_defconfig b/arch/powerpc/configs/mpc832x_rdb_defconfig
index 4f391028c7..7a5b13f414 100644
--- a/arch/powerpc/configs/mpc832x_rdb_defconfig
+++ b/arch/powerpc/configs/mpc832x_rdb_defconfig
@@ -685,8 +685,21 @@ CONFIG_I2C_MPC=y
685# 685#
686# SPI support 686# SPI support
687# 687#
688# CONFIG_SPI is not set 688CONFIG_SPI=y
689# CONFIG_SPI_MASTER is not set 689CONFIG_SPI_MASTER=y
690
691#
692# SPI Master Controller Drivers
693#
694CONFIG_SPI_BITBANG=y
695CONFIG_SPI_MPC83xx=y
696
697#
698# SPI Protocol Masters
699#
700# CONFIG_SPI_AT25 is not set
701# CONFIG_SPI_SPIDEV is not set
702# CONFIG_SPI_TLE62X0 is not set
690# CONFIG_W1 is not set 703# CONFIG_W1 is not set
691# CONFIG_POWER_SUPPLY is not set 704# CONFIG_POWER_SUPPLY is not set
692CONFIG_HWMON=y 705CONFIG_HWMON=y
@@ -710,6 +723,7 @@ CONFIG_HWMON=y
710# CONFIG_SENSORS_GL520SM is not set 723# CONFIG_SENSORS_GL520SM is not set
711# CONFIG_SENSORS_IT87 is not set 724# CONFIG_SENSORS_IT87 is not set
712# CONFIG_SENSORS_LM63 is not set 725# CONFIG_SENSORS_LM63 is not set
726# CONFIG_SENSORS_LM70 is not set
713# CONFIG_SENSORS_LM75 is not set 727# CONFIG_SENSORS_LM75 is not set
714# CONFIG_SENSORS_LM77 is not set 728# CONFIG_SENSORS_LM77 is not set
715# CONFIG_SENSORS_LM78 is not set 729# CONFIG_SENSORS_LM78 is not set
@@ -896,7 +910,24 @@ CONFIG_USB_MON=y
896# USB Gadget Support 910# USB Gadget Support
897# 911#
898# CONFIG_USB_GADGET is not set 912# CONFIG_USB_GADGET is not set
899# CONFIG_MMC is not set 913CONFIG_MMC=y
914# CONFIG_MMC_DEBUG is not set
915# CONFIG_MMC_UNSAFE_RESUME is not set
916
917#
918# MMC/SD Card Drivers
919#
920CONFIG_MMC_BLOCK=y
921CONFIG_MMC_BLOCK_BOUNCE=y
922# CONFIG_SDIO_UART is not set
923
924#
925# MMC/SD Host Controller Drivers
926#
927# CONFIG_MMC_SDHCI is not set
928# CONFIG_MMC_WBSD is not set
929# CONFIG_MMC_TIFM_SD is not set
930CONFIG_MMC_SPI=y
900# CONFIG_NEW_LEDS is not set 931# CONFIG_NEW_LEDS is not set
901# CONFIG_INFINIBAND is not set 932# CONFIG_INFINIBAND is not set
902# CONFIG_EDAC is not set 933# CONFIG_EDAC is not set
@@ -1101,9 +1132,9 @@ CONFIG_UCC=y
1101CONFIG_BITREVERSE=y 1132CONFIG_BITREVERSE=y
1102# CONFIG_CRC_CCITT is not set 1133# CONFIG_CRC_CCITT is not set
1103# CONFIG_CRC16 is not set 1134# CONFIG_CRC16 is not set
1104# CONFIG_CRC_ITU_T is not set 1135CONFIG_CRC_ITU_T=y
1105CONFIG_CRC32=y 1136CONFIG_CRC32=y
1106# CONFIG_CRC7 is not set 1137CONFIG_CRC7=y
1107# CONFIG_LIBCRC32C is not set 1138# CONFIG_LIBCRC32C is not set
1108CONFIG_PLIST=y 1139CONFIG_PLIST=y
1109CONFIG_HAS_IOMEM=y 1140CONFIG_HAS_IOMEM=y
diff --git a/arch/powerpc/configs/mpc834x_itx_defconfig b/arch/powerpc/configs/mpc834x_itx_defconfig
index eb28dd85cb..ba512d13f3 100644
--- a/arch/powerpc/configs/mpc834x_itx_defconfig
+++ b/arch/powerpc/configs/mpc834x_itx_defconfig
@@ -867,7 +867,7 @@ CONFIG_USB_EHCI_ROOT_HUB_TT=y
867CONFIG_USB_EHCI_FSL=y 867CONFIG_USB_EHCI_FSL=y
868# CONFIG_USB_ISP116X_HCD is not set 868# CONFIG_USB_ISP116X_HCD is not set
869# CONFIG_USB_OHCI_HCD is not set 869# CONFIG_USB_OHCI_HCD is not set
870# CONFIG_USB_UHCI_HCD is not set 870CONFIG_USB_UHCI_HCD=y
871# CONFIG_USB_SL811_HCD is not set 871# CONFIG_USB_SL811_HCD is not set
872# CONFIG_USB_R8A66597_HCD is not set 872# CONFIG_USB_R8A66597_HCD is not set
873 873
diff --git a/arch/powerpc/configs/mpc834x_itxgp_defconfig b/arch/powerpc/configs/mpc834x_itxgp_defconfig
index 22b95462c9..9faa948c22 100644
--- a/arch/powerpc/configs/mpc834x_itxgp_defconfig
+++ b/arch/powerpc/configs/mpc834x_itxgp_defconfig
@@ -760,15 +760,101 @@ CONFIG_USB_SUPPORT=y
760CONFIG_USB_ARCH_HAS_HCD=y 760CONFIG_USB_ARCH_HAS_HCD=y
761CONFIG_USB_ARCH_HAS_OHCI=y 761CONFIG_USB_ARCH_HAS_OHCI=y
762CONFIG_USB_ARCH_HAS_EHCI=y 762CONFIG_USB_ARCH_HAS_EHCI=y
763# CONFIG_USB is not set 763CONFIG_USB=y
764# CONFIG_USB_DEBUG is not set
765
766#
767# Miscellaneous USB options
768#
769# CONFIG_USB_DEVICEFS is not set
770CONFIG_USB_DEVICE_CLASS=y
771# CONFIG_USB_DYNAMIC_MINORS is not set
772# CONFIG_USB_OTG is not set
773
774#
775# USB Host Controller Drivers
776#
777CONFIG_USB_EHCI_HCD=y
778# CONFIG_USB_EHCI_SPLIT_ISO is not set
764CONFIG_USB_EHCI_ROOT_HUB_TT=y 779CONFIG_USB_EHCI_ROOT_HUB_TT=y
780# CONFIG_USB_EHCI_TT_NEWSCHED is not set
765CONFIG_USB_EHCI_FSL=y 781CONFIG_USB_EHCI_FSL=y
782# CONFIG_USB_ISP116X_HCD is not set
783# CONFIG_USB_OHCI_HCD is not set
784CONFIG_USB_UHCI_HCD=y
785# CONFIG_USB_SL811_HCD is not set
786# CONFIG_USB_R8A66597_HCD is not set
787
788#
789# USB Device Class drivers
790#
791# CONFIG_USB_ACM is not set
792# CONFIG_USB_PRINTER is not set
766 793
767# 794#
768# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' 795# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
769# 796#
770 797
771# 798#
799# may also be needed; see USB_STORAGE Help for more information
800#
801CONFIG_USB_STORAGE=y
802# CONFIG_USB_STORAGE_DEBUG is not set
803# CONFIG_USB_STORAGE_DATAFAB is not set
804# CONFIG_USB_STORAGE_FREECOM is not set
805# CONFIG_USB_STORAGE_DPCM is not set
806# CONFIG_USB_STORAGE_USBAT is not set
807# CONFIG_USB_STORAGE_SDDR09 is not set
808# CONFIG_USB_STORAGE_SDDR55 is not set
809# CONFIG_USB_STORAGE_JUMPSHOT is not set
810# CONFIG_USB_STORAGE_ALAUDA is not set
811# CONFIG_USB_STORAGE_KARMA is not set
812# CONFIG_USB_LIBUSUAL is not set
813
814#
815# USB Imaging devices
816#
817# CONFIG_USB_MDC800 is not set
818# CONFIG_USB_MICROTEK is not set
819CONFIG_USB_MON=y
820
821#
822# USB port drivers
823#
824
825#
826# USB Serial Converter support
827#
828# CONFIG_USB_SERIAL is not set
829
830#
831# USB Miscellaneous drivers
832#
833# CONFIG_USB_EMI62 is not set
834# CONFIG_USB_EMI26 is not set
835# CONFIG_USB_ADUTUX is not set
836# CONFIG_USB_AUERSWALD is not set
837# CONFIG_USB_RIO500 is not set
838# CONFIG_USB_LEGOTOWER is not set
839# CONFIG_USB_LCD is not set
840# CONFIG_USB_BERRY_CHARGE is not set
841# CONFIG_USB_LED is not set
842# CONFIG_USB_CYPRESS_CY7C63 is not set
843# CONFIG_USB_CYTHERM is not set
844# CONFIG_USB_PHIDGET is not set
845# CONFIG_USB_IDMOUSE is not set
846# CONFIG_USB_FTDI_ELAN is not set
847# CONFIG_USB_APPLEDISPLAY is not set
848# CONFIG_USB_SISUSBVGA is not set
849# CONFIG_USB_LD is not set
850# CONFIG_USB_TRANCEVIBRATOR is not set
851# CONFIG_USB_IOWARRIOR is not set
852
853#
854# USB DSL modem support
855#
856
857#
772# USB Gadget Support 858# USB Gadget Support
773# 859#
774# CONFIG_USB_GADGET is not set 860# CONFIG_USB_GADGET is not set
diff --git a/arch/powerpc/configs/mpc834x_mds_defconfig b/arch/powerpc/configs/mpc834x_mds_defconfig
index e59a88e954..356f736a5d 100644
--- a/arch/powerpc/configs/mpc834x_mds_defconfig
+++ b/arch/powerpc/configs/mpc834x_mds_defconfig
@@ -721,7 +721,53 @@ CONFIG_USB_EHCI_FSL=y
721# CONFIG_NEW_LEDS is not set 721# CONFIG_NEW_LEDS is not set
722# CONFIG_INFINIBAND is not set 722# CONFIG_INFINIBAND is not set
723# CONFIG_EDAC is not set 723# CONFIG_EDAC is not set
724# CONFIG_RTC_CLASS is not set 724CONFIG_RTC_LIB=y
725CONFIG_RTC_CLASS=y
726CONFIG_RTC_HCTOSYS=y
727CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
728# CONFIG_RTC_DEBUG is not set
729
730#
731# RTC interfaces
732#
733CONFIG_RTC_INTF_SYSFS=y
734CONFIG_RTC_INTF_PROC=y
735CONFIG_RTC_INTF_DEV=y
736# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
737# CONFIG_RTC_DRV_TEST is not set
738
739#
740# I2C RTC drivers
741#
742# CONFIG_RTC_DRV_DS1307 is not set
743CONFIG_RTC_DRV_DS1374=y
744# CONFIG_RTC_DRV_DS1672 is not set
745# CONFIG_RTC_DRV_MAX6900 is not set
746# CONFIG_RTC_DRV_RS5C372 is not set
747# CONFIG_RTC_DRV_ISL1208 is not set
748# CONFIG_RTC_DRV_X1205 is not set
749# CONFIG_RTC_DRV_PCF8563 is not set
750# CONFIG_RTC_DRV_PCF8583 is not set
751# CONFIG_RTC_DRV_M41T80 is not set
752
753#
754# SPI RTC drivers
755#
756
757#
758# Platform RTC drivers
759#
760# CONFIG_RTC_DRV_CMOS is not set
761# CONFIG_RTC_DRV_DS1553 is not set
762# CONFIG_RTC_DRV_STK17TA8 is not set
763# CONFIG_RTC_DRV_DS1742 is not set
764# CONFIG_RTC_DRV_M48T86 is not set
765# CONFIG_RTC_DRV_M48T59 is not set
766# CONFIG_RTC_DRV_V3020 is not set
767
768#
769# on-CPU RTC drivers
770#
725 771
726# 772#
727# DMA Engine support 773# DMA Engine support
diff --git a/arch/powerpc/configs/mpc836x_mds_defconfig b/arch/powerpc/configs/mpc836x_mds_defconfig
index 7565752851..1b4d37570e 100644
--- a/arch/powerpc/configs/mpc836x_mds_defconfig
+++ b/arch/powerpc/configs/mpc836x_mds_defconfig
@@ -773,7 +773,53 @@ CONFIG_USB_ARCH_HAS_EHCI=y
773# CONFIG_NEW_LEDS is not set 773# CONFIG_NEW_LEDS is not set
774# CONFIG_INFINIBAND is not set 774# CONFIG_INFINIBAND is not set
775# CONFIG_EDAC is not set 775# CONFIG_EDAC is not set
776# CONFIG_RTC_CLASS is not set 776CONFIG_RTC_LIB=y
777CONFIG_RTC_CLASS=y
778CONFIG_RTC_HCTOSYS=y
779CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
780# CONFIG_RTC_DEBUG is not set
781
782#
783# RTC interfaces
784#
785CONFIG_RTC_INTF_SYSFS=y
786CONFIG_RTC_INTF_PROC=y
787CONFIG_RTC_INTF_DEV=y
788# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
789# CONFIG_RTC_DRV_TEST is not set
790
791#
792# I2C RTC drivers
793#
794# CONFIG_RTC_DRV_DS1307 is not set
795CONFIG_RTC_DRV_DS1374=y
796# CONFIG_RTC_DRV_DS1672 is not set
797# CONFIG_RTC_DRV_MAX6900 is not set
798# CONFIG_RTC_DRV_RS5C372 is not set
799# CONFIG_RTC_DRV_ISL1208 is not set
800# CONFIG_RTC_DRV_X1205 is not set
801# CONFIG_RTC_DRV_PCF8563 is not set
802# CONFIG_RTC_DRV_PCF8583 is not set
803# CONFIG_RTC_DRV_M41T80 is not set
804
805#
806# SPI RTC drivers
807#
808
809#
810# Platform RTC drivers
811#
812# CONFIG_RTC_DRV_CMOS is not set
813# CONFIG_RTC_DRV_DS1553 is not set
814# CONFIG_RTC_DRV_STK17TA8 is not set
815# CONFIG_RTC_DRV_DS1742 is not set
816# CONFIG_RTC_DRV_M48T86 is not set
817# CONFIG_RTC_DRV_M48T59 is not set
818# CONFIG_RTC_DRV_V3020 is not set
819
820#
821# on-CPU RTC drivers
822#
777 823
778# 824#
779# DMA Engine support 825# DMA Engine support
diff --git a/arch/powerpc/configs/mpc8568mds_defconfig b/arch/powerpc/configs/mpc8568mds_defconfig
index 883d8af9de..d665e7a797 100644
--- a/arch/powerpc/configs/mpc8568mds_defconfig
+++ b/arch/powerpc/configs/mpc8568mds_defconfig
@@ -768,7 +768,53 @@ CONFIG_USB_ARCH_HAS_EHCI=y
768# CONFIG_NEW_LEDS is not set 768# CONFIG_NEW_LEDS is not set
769# CONFIG_INFINIBAND is not set 769# CONFIG_INFINIBAND is not set
770# CONFIG_EDAC is not set 770# CONFIG_EDAC is not set
771# CONFIG_RTC_CLASS is not set 771CONFIG_RTC_LIB=y
772CONFIG_RTC_CLASS=y
773CONFIG_RTC_HCTOSYS=y
774CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
775# CONFIG_RTC_DEBUG is not set
776
777#
778# RTC interfaces
779#
780CONFIG_RTC_INTF_SYSFS=y
781CONFIG_RTC_INTF_PROC=y
782CONFIG_RTC_INTF_DEV=y
783# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
784# CONFIG_RTC_DRV_TEST is not set
785
786#
787# I2C RTC drivers
788#
789# CONFIG_RTC_DRV_DS1307 is not set
790CONFIG_RTC_DRV_DS1374=y
791# CONFIG_RTC_DRV_DS1672 is not set
792# CONFIG_RTC_DRV_MAX6900 is not set
793# CONFIG_RTC_DRV_RS5C372 is not set
794# CONFIG_RTC_DRV_ISL1208 is not set
795# CONFIG_RTC_DRV_X1205 is not set
796# CONFIG_RTC_DRV_PCF8563 is not set
797# CONFIG_RTC_DRV_PCF8583 is not set
798# CONFIG_RTC_DRV_M41T80 is not set
799
800#
801# SPI RTC drivers
802#
803
804#
805# Platform RTC drivers
806#
807# CONFIG_RTC_DRV_CMOS is not set
808# CONFIG_RTC_DRV_DS1553 is not set
809# CONFIG_RTC_DRV_STK17TA8 is not set
810# CONFIG_RTC_DRV_DS1742 is not set
811# CONFIG_RTC_DRV_M48T86 is not set
812# CONFIG_RTC_DRV_M48T59 is not set
813# CONFIG_RTC_DRV_V3020 is not set
814
815#
816# on-CPU RTC drivers
817#
772 818
773# 819#
774# DMA Engine support 820# DMA Engine support
diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c
index 2c8e756d19..d67bcd84f3 100644
--- a/arch/powerpc/kernel/asm-offsets.c
+++ b/arch/powerpc/kernel/asm-offsets.c
@@ -284,6 +284,10 @@ int main(void)
284 DEFINE(CFG_SYSCALL_MAP32, offsetof(struct vdso_data, syscall_map_32)); 284 DEFINE(CFG_SYSCALL_MAP32, offsetof(struct vdso_data, syscall_map_32));
285 DEFINE(WTOM_CLOCK_SEC, offsetof(struct vdso_data, wtom_clock_sec)); 285 DEFINE(WTOM_CLOCK_SEC, offsetof(struct vdso_data, wtom_clock_sec));
286 DEFINE(WTOM_CLOCK_NSEC, offsetof(struct vdso_data, wtom_clock_nsec)); 286 DEFINE(WTOM_CLOCK_NSEC, offsetof(struct vdso_data, wtom_clock_nsec));
287 DEFINE(CFG_ICACHE_BLOCKSZ, offsetof(struct vdso_data, icache_block_size));
288 DEFINE(CFG_DCACHE_BLOCKSZ, offsetof(struct vdso_data, dcache_block_size));
289 DEFINE(CFG_ICACHE_LOGBLOCKSZ, offsetof(struct vdso_data, icache_log_block_size));
290 DEFINE(CFG_DCACHE_LOGBLOCKSZ, offsetof(struct vdso_data, dcache_log_block_size));
287#ifdef CONFIG_PPC64 291#ifdef CONFIG_PPC64
288 DEFINE(CFG_SYSCALL_MAP64, offsetof(struct vdso_data, syscall_map_64)); 292 DEFINE(CFG_SYSCALL_MAP64, offsetof(struct vdso_data, syscall_map_64));
289 DEFINE(TVAL64_TV_SEC, offsetof(struct timeval, tv_sec)); 293 DEFINE(TVAL64_TV_SEC, offsetof(struct timeval, tv_sec));
diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c
index 2147807982..053cac19f7 100644
--- a/arch/powerpc/kernel/rtas.c
+++ b/arch/powerpc/kernel/rtas.c
@@ -19,6 +19,9 @@
19#include <linux/init.h> 19#include <linux/init.h>
20#include <linux/capability.h> 20#include <linux/capability.h>
21#include <linux/delay.h> 21#include <linux/delay.h>
22#include <linux/smp.h>
23#include <linux/completion.h>
24#include <linux/cpumask.h>
22 25
23#include <asm/prom.h> 26#include <asm/prom.h>
24#include <asm/rtas.h> 27#include <asm/rtas.h>
@@ -34,6 +37,8 @@
34#include <asm/lmb.h> 37#include <asm/lmb.h>
35#include <asm/udbg.h> 38#include <asm/udbg.h>
36#include <asm/syscalls.h> 39#include <asm/syscalls.h>
40#include <asm/smp.h>
41#include <asm/atomic.h>
37 42
38struct rtas_t rtas = { 43struct rtas_t rtas = {
39 .lock = SPIN_LOCK_UNLOCKED 44 .lock = SPIN_LOCK_UNLOCKED
@@ -41,8 +46,10 @@ struct rtas_t rtas = {
41EXPORT_SYMBOL(rtas); 46EXPORT_SYMBOL(rtas);
42 47
43struct rtas_suspend_me_data { 48struct rtas_suspend_me_data {
44 long waiting; 49 atomic_t working; /* number of cpus accessing this struct */
45 struct rtas_args *args; 50 int token; /* ibm,suspend-me */
51 int error;
52 struct completion *complete; /* wait on this until working == 0 */
46}; 53};
47 54
48DEFINE_SPINLOCK(rtas_data_buf_lock); 55DEFINE_SPINLOCK(rtas_data_buf_lock);
@@ -631,18 +638,18 @@ void rtas_halt(void)
631/* Must be in the RMO region, so we place it here */ 638/* Must be in the RMO region, so we place it here */
632static char rtas_os_term_buf[2048]; 639static char rtas_os_term_buf[2048];
633 640
634void rtas_os_term(char *str) 641void rtas_panic_msg(char *str)
635{ 642{
636 int status; 643 snprintf(rtas_os_term_buf, 2048, "OS panic: %s", str);
644}
637 645
638 if (panic_timeout) 646void rtas_os_term(void)
639 return; 647{
648 int status;
640 649
641 if (RTAS_UNKNOWN_SERVICE == rtas_token("ibm,os-term")) 650 if (RTAS_UNKNOWN_SERVICE == rtas_token("ibm,os-term"))
642 return; 651 return;
643 652
644 snprintf(rtas_os_term_buf, 2048, "OS panic: %s", str);
645
646 do { 653 do {
647 status = rtas_call(rtas_token("ibm,os-term"), 1, 1, NULL, 654 status = rtas_call(rtas_token("ibm,os-term"), 1, 1, NULL,
648 __pa(rtas_os_term_buf)); 655 __pa(rtas_os_term_buf));
@@ -657,50 +664,62 @@ static int ibm_suspend_me_token = RTAS_UNKNOWN_SERVICE;
657#ifdef CONFIG_PPC_PSERIES 664#ifdef CONFIG_PPC_PSERIES
658static void rtas_percpu_suspend_me(void *info) 665static void rtas_percpu_suspend_me(void *info)
659{ 666{
660 int i;
661 long rc; 667 long rc;
662 long flags; 668 unsigned long msr_save;
669 int cpu;
663 struct rtas_suspend_me_data *data = 670 struct rtas_suspend_me_data *data =
664 (struct rtas_suspend_me_data *)info; 671 (struct rtas_suspend_me_data *)info;
665 672
666 /* 673 atomic_inc(&data->working);
667 * We use "waiting" to indicate our state. As long 674
668 * as it is >0, we are still trying to all join up. 675 /* really need to ensure MSR.EE is off for H_JOIN */
669 * If it goes to 0, we have successfully joined up and 676 msr_save = mfmsr();
670 * one thread got H_CONTINUE. If any error happens, 677 mtmsr(msr_save & ~(MSR_EE));
671 * we set it to <0. 678
672 */ 679 rc = plpar_hcall_norets(H_JOIN);
673 local_irq_save(flags);
674 do {
675 rc = plpar_hcall_norets(H_JOIN);
676 smp_rmb();
677 } while (rc == H_SUCCESS && data->waiting > 0);
678 if (rc == H_SUCCESS)
679 goto out;
680 680
681 if (rc == H_CONTINUE) { 681 mtmsr(msr_save);
682 data->waiting = 0; 682
683 data->args->args[data->args->nargs] = 683 if (rc == H_SUCCESS) {
684 rtas_call(ibm_suspend_me_token, 0, 1, NULL); 684 /* This cpu was prodded and the suspend is complete. */
685 for_each_possible_cpu(i) 685 goto out;
686 plpar_hcall_norets(H_PROD,i); 686 } else if (rc == H_CONTINUE) {
687 /* All other cpus are in H_JOIN, this cpu does
688 * the suspend.
689 */
690 printk(KERN_DEBUG "calling ibm,suspend-me on cpu %i\n",
691 smp_processor_id());
692 data->error = rtas_call(data->token, 0, 1, NULL);
693
694 if (data->error)
695 printk(KERN_DEBUG "ibm,suspend-me returned %d\n",
696 data->error);
687 } else { 697 } else {
688 data->waiting = -EBUSY; 698 printk(KERN_ERR "H_JOIN on cpu %i failed with rc = %ld\n",
689 printk(KERN_ERR "Error on H_JOIN hypervisor call\n"); 699 smp_processor_id(), rc);
700 data->error = rc;
690 } 701 }
691 702 /* This cpu did the suspend or got an error; in either case,
703 * we need to prod all other other cpus out of join state.
704 * Extra prods are harmless.
705 */
706 for_each_online_cpu(cpu)
707 plpar_hcall_norets(H_PROD, get_hard_smp_processor_id(cpu));
692out: 708out:
693 local_irq_restore(flags); 709 if (atomic_dec_return(&data->working) == 0)
694 return; 710 complete(data->complete);
695} 711}
696 712
697static int rtas_ibm_suspend_me(struct rtas_args *args) 713static int rtas_ibm_suspend_me(struct rtas_args *args)
698{ 714{
699 int i;
700 long state; 715 long state;
701 long rc; 716 long rc;
702 unsigned long retbuf[PLPAR_HCALL_BUFSIZE]; 717 unsigned long retbuf[PLPAR_HCALL_BUFSIZE];
703 struct rtas_suspend_me_data data; 718 struct rtas_suspend_me_data data;
719 DECLARE_COMPLETION_ONSTACK(done);
720
721 if (!rtas_service_present("ibm,suspend-me"))
722 return -ENOSYS;
704 723
705 /* Make sure the state is valid */ 724 /* Make sure the state is valid */
706 rc = plpar_hcall(H_VASI_STATE, retbuf, 725 rc = plpar_hcall(H_VASI_STATE, retbuf,
@@ -721,25 +740,23 @@ static int rtas_ibm_suspend_me(struct rtas_args *args)
721 return 0; 740 return 0;
722 } 741 }
723 742
724 data.waiting = 1; 743 atomic_set(&data.working, 0);
725 data.args = args; 744 data.token = rtas_token("ibm,suspend-me");
745 data.error = 0;
746 data.complete = &done;
726 747
727 /* Call function on all CPUs. One of us will make the 748 /* Call function on all CPUs. One of us will make the
728 * rtas call 749 * rtas call
729 */ 750 */
730 if (on_each_cpu(rtas_percpu_suspend_me, &data, 1, 0)) 751 if (on_each_cpu(rtas_percpu_suspend_me, &data, 1, 0))
731 data.waiting = -EINVAL; 752 data.error = -EINVAL;
732 753
733 if (data.waiting != 0) 754 wait_for_completion(&done);
734 printk(KERN_ERR "Error doing global join\n");
735 755
736 /* Prod each CPU. This won't hurt, and will wake 756 if (data.error != 0)
737 * anyone we successfully put to sleep with H_JOIN. 757 printk(KERN_ERR "Error doing global join\n");
738 */
739 for_each_possible_cpu(i)
740 plpar_hcall_norets(H_PROD, i);
741 758
742 return data.waiting; 759 return data.error;
743} 760}
744#else /* CONFIG_PPC_PSERIES */ 761#else /* CONFIG_PPC_PSERIES */
745static int rtas_ibm_suspend_me(struct rtas_args *args) 762static int rtas_ibm_suspend_me(struct rtas_args *args)
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c
index c0d77723ba..a925a8eae1 100644
--- a/arch/powerpc/kernel/time.c
+++ b/arch/powerpc/kernel/time.c
@@ -241,8 +241,9 @@ void account_system_vtime(struct task_struct *tsk)
241 /* deltascaled includes both user and system time. 241 /* deltascaled includes both user and system time.
242 * Hence scale it based on the purr ratio to estimate 242 * Hence scale it based on the purr ratio to estimate
243 * the system time */ 243 * the system time */
244 deltascaled = deltascaled * get_paca()->system_time / 244 if (get_paca()->user_time)
245 (get_paca()->system_time + get_paca()->user_time); 245 deltascaled = deltascaled * get_paca()->system_time /
246 (get_paca()->system_time + get_paca()->user_time);
246 delta += get_paca()->system_time; 247 delta += get_paca()->system_time;
247 get_paca()->system_time = 0; 248 get_paca()->system_time = 0;
248 } 249 }
diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c
index 2322ba5cce..3702df7dc5 100644
--- a/arch/powerpc/kernel/vdso.c
+++ b/arch/powerpc/kernel/vdso.c
@@ -699,11 +699,22 @@ static int __init vdso_init(void)
699 vdso_data->icache_size = ppc64_caches.isize; 699 vdso_data->icache_size = ppc64_caches.isize;
700 vdso_data->icache_line_size = ppc64_caches.iline_size; 700 vdso_data->icache_line_size = ppc64_caches.iline_size;
701 701
702 /* XXXOJN: Blocks should be added to ppc64_caches and used instead */
703 vdso_data->dcache_block_size = ppc64_caches.dline_size;
704 vdso_data->icache_block_size = ppc64_caches.iline_size;
705 vdso_data->dcache_log_block_size = ppc64_caches.log_dline_size;
706 vdso_data->icache_log_block_size = ppc64_caches.log_iline_size;
707
702 /* 708 /*
703 * Calculate the size of the 64 bits vDSO 709 * Calculate the size of the 64 bits vDSO
704 */ 710 */
705 vdso64_pages = (&vdso64_end - &vdso64_start) >> PAGE_SHIFT; 711 vdso64_pages = (&vdso64_end - &vdso64_start) >> PAGE_SHIFT;
706 DBG("vdso64_kbase: %p, 0x%x pages\n", vdso64_kbase, vdso64_pages); 712 DBG("vdso64_kbase: %p, 0x%x pages\n", vdso64_kbase, vdso64_pages);
713#else
714 vdso_data->dcache_block_size = L1_CACHE_BYTES;
715 vdso_data->dcache_log_block_size = L1_CACHE_SHIFT;
716 vdso_data->icache_block_size = L1_CACHE_BYTES;
717 vdso_data->icache_log_block_size = L1_CACHE_SHIFT;
707#endif /* CONFIG_PPC64 */ 718#endif /* CONFIG_PPC64 */
708 719
709 720
diff --git a/arch/powerpc/kernel/vdso32/cacheflush.S b/arch/powerpc/kernel/vdso32/cacheflush.S
index 9cb319992c..1ba6feb71b 100644
--- a/arch/powerpc/kernel/vdso32/cacheflush.S
+++ b/arch/powerpc/kernel/vdso32/cacheflush.S
@@ -23,29 +23,46 @@
23 * 23 *
24 * Flushes the data cache & invalidate the instruction cache for the 24 * Flushes the data cache & invalidate the instruction cache for the
25 * provided range [start, end[ 25 * provided range [start, end[
26 *
27 * Note: all CPUs supported by this kernel have a 128 bytes cache
28 * line size so we don't have to peek that info from the datapage
29 */ 26 */
30V_FUNCTION_BEGIN(__kernel_sync_dicache) 27V_FUNCTION_BEGIN(__kernel_sync_dicache)
31 .cfi_startproc 28 .cfi_startproc
32 li r5,127 29 mflr r12
33 andc r6,r3,r5 /* round low to line bdy */ 30 .cfi_register lr,r12
31 mr r11,r3
32 bl __get_datapage@local
33 mtlr r12
34 mr r10,r3
35
36 lwz r7,CFG_DCACHE_BLOCKSZ(r10)
37 addi r5,r7,-1
38 andc r6,r11,r5 /* round low to line bdy */
34 subf r8,r6,r4 /* compute length */ 39 subf r8,r6,r4 /* compute length */
35 add r8,r8,r5 /* ensure we get enough */ 40 add r8,r8,r5 /* ensure we get enough */
36 srwi. r8,r8,7 /* compute line count */ 41 lwz r9,CFG_DCACHE_LOGBLOCKSZ(r10)
42 srw. r8,r8,r9 /* compute line count */
37 crclr cr0*4+so 43 crclr cr0*4+so
38 beqlr /* nothing to do? */ 44 beqlr /* nothing to do? */
39 mtctr r8 45 mtctr r8
40 mr r3,r6 461: dcbst 0,r6
411: dcbst 0,r3 47 add r6,r6,r7
42 addi r3,r3,128
43 bdnz 1b 48 bdnz 1b
44 sync 49 sync
50
51/* Now invalidate the instruction cache */
52
53 lwz r7,CFG_ICACHE_BLOCKSZ(r10)
54 addi r5,r7,-1
55 andc r6,r11,r5 /* round low to line bdy */
56 subf r8,r6,r4 /* compute length */
57 add r8,r8,r5
58 lwz r9,CFG_ICACHE_LOGBLOCKSZ(r10)
59 srw. r8,r8,r9 /* compute line count */
60 crclr cr0*4+so
61 beqlr /* nothing to do? */
45 mtctr r8 62 mtctr r8
461: icbi 0,r6 632: icbi 0,r6
47 addi r6,r6,128 64 add r6,r6,r7
48 bdnz 1b 65 bdnz 2b
49 isync 66 isync
50 li r3,0 67 li r3,0
51 blr 68 blr
diff --git a/arch/powerpc/kernel/vdso64/cacheflush.S b/arch/powerpc/kernel/vdso64/cacheflush.S
index 66a36d3cc6..69c5af2b3c 100644
--- a/arch/powerpc/kernel/vdso64/cacheflush.S
+++ b/arch/powerpc/kernel/vdso64/cacheflush.S
@@ -23,29 +23,46 @@
23 * 23 *
24 * Flushes the data cache & invalidate the instruction cache for the 24 * Flushes the data cache & invalidate the instruction cache for the
25 * provided range [start, end[ 25 * provided range [start, end[
26 *
27 * Note: all CPUs supported by this kernel have a 128 bytes cache
28 * line size so we don't have to peek that info from the datapage
29 */ 26 */
30V_FUNCTION_BEGIN(__kernel_sync_dicache) 27V_FUNCTION_BEGIN(__kernel_sync_dicache)
31 .cfi_startproc 28 .cfi_startproc
32 li r5,127 29 mflr r12
33 andc r6,r3,r5 /* round low to line bdy */ 30 .cfi_register lr,r12
31 mr r11,r3
32 bl V_LOCAL_FUNC(__get_datapage)
33 mtlr r12
34 mr r10,r3
35
36 lwz r7,CFG_DCACHE_BLOCKSZ(r10)
37 addi r5,r7,-1
38 andc r6,r11,r5 /* round low to line bdy */
34 subf r8,r6,r4 /* compute length */ 39 subf r8,r6,r4 /* compute length */
35 add r8,r8,r5 /* ensure we get enough */ 40 add r8,r8,r5 /* ensure we get enough */
36 srwi. r8,r8,7 /* compute line count */ 41 lwz r9,CFG_DCACHE_LOGBLOCKSZ(r10)
42 srw. r8,r8,r9 /* compute line count */
37 crclr cr0*4+so 43 crclr cr0*4+so
38 beqlr /* nothing to do? */ 44 beqlr /* nothing to do? */
39 mtctr r8 45 mtctr r8
40 mr r3,r6 461: dcbst 0,r6
411: dcbst 0,r3 47 add r6,r6,r7
42 addi r3,r3,128
43 bdnz 1b 48 bdnz 1b
44 sync 49 sync
50
51/* Now invalidate the instruction cache */
52
53 lwz r7,CFG_ICACHE_BLOCKSZ(r10)
54 addi r5,r7,-1
55 andc r6,r11,r5 /* round low to line bdy */
56 subf r8,r6,r4 /* compute length */
57 add r8,r8,r5
58 lwz r9,CFG_ICACHE_LOGBLOCKSZ(r10)
59 srw. r8,r8,r9 /* compute line count */
60 crclr cr0*4+so
61 beqlr /* nothing to do? */
45 mtctr r8 62 mtctr r8
461: icbi 0,r6 632: icbi 0,r6
47 addi r6,r6,128 64 add r6,r6,r7
48 bdnz 1b 65 bdnz 2b
49 isync 66 isync
50 li r3,0 67 li r3,0
51 blr 68 blr
diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c
index 81eb96ec13..5402fb6b3a 100644
--- a/arch/powerpc/mm/mem.c
+++ b/arch/powerpc/mm/mem.c
@@ -464,7 +464,7 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long address,
464 * we invalidate the TLB here, thus avoiding dcbst 464 * we invalidate the TLB here, thus avoiding dcbst
465 * misbehaviour. 465 * misbehaviour.
466 */ 466 */
467 _tlbie(address); 467 _tlbie(address, 0 /* 8xx doesn't care about PID */);
468#endif 468#endif
469 if (!PageReserved(page) 469 if (!PageReserved(page)
470 && !test_bit(PG_arch_1, &page->flags)) { 470 && !test_bit(PG_arch_1, &page->flags)) {
diff --git a/arch/powerpc/mm/mmu_decl.h b/arch/powerpc/mm/mmu_decl.h
index eb3a732e91..ebfd13dc9d 100644
--- a/arch/powerpc/mm/mmu_decl.h
+++ b/arch/powerpc/mm/mmu_decl.h
@@ -56,7 +56,7 @@ extern unsigned long total_lowmem;
56 * architectures. -- Dan 56 * architectures. -- Dan
57 */ 57 */
58#if defined(CONFIG_8xx) 58#if defined(CONFIG_8xx)
59#define flush_HPTE(X, va, pg) _tlbie(va) 59#define flush_HPTE(X, va, pg) _tlbie(va, 0 /* 8xx doesn't care about PID */)
60#define MMU_init_hw() do { } while(0) 60#define MMU_init_hw() do { } while(0)
61#define mmu_mapin_ram() (0UL) 61#define mmu_mapin_ram() (0UL)
62 62
diff --git a/arch/powerpc/mm/stab.c b/arch/powerpc/mm/stab.c
index 9e85bda762..50448d5de9 100644
--- a/arch/powerpc/mm/stab.c
+++ b/arch/powerpc/mm/stab.c
@@ -20,6 +20,7 @@
20#include <asm/lmb.h> 20#include <asm/lmb.h>
21#include <asm/abs_addr.h> 21#include <asm/abs_addr.h>
22#include <asm/firmware.h> 22#include <asm/firmware.h>
23#include <asm/iseries/hv_call.h>
23 24
24struct stab_entry { 25struct stab_entry {
25 unsigned long esid_data; 26 unsigned long esid_data;
diff --git a/arch/powerpc/platforms/40x/walnut.c b/arch/powerpc/platforms/40x/walnut.c
index eb0c136b1c..ff6db24317 100644
--- a/arch/powerpc/platforms/40x/walnut.c
+++ b/arch/powerpc/platforms/40x/walnut.c
@@ -17,12 +17,13 @@
17 */ 17 */
18 18
19#include <linux/init.h> 19#include <linux/init.h>
20#include <linux/of_platform.h>
21
20#include <asm/machdep.h> 22#include <asm/machdep.h>
21#include <asm/prom.h> 23#include <asm/prom.h>
22#include <asm/udbg.h> 24#include <asm/udbg.h>
23#include <asm/time.h> 25#include <asm/time.h>
24#include <asm/uic.h> 26#include <asm/uic.h>
25#include <asm/of_platform.h>
26 27
27static struct of_device_id walnut_of_bus[] = { 28static struct of_device_id walnut_of_bus[] = {
28 { .compatible = "ibm,plb3", }, 29 { .compatible = "ibm,plb3", },
diff --git a/arch/powerpc/platforms/44x/bamboo.c b/arch/powerpc/platforms/44x/bamboo.c
index 470e1a3fd7..be23f11218 100644
--- a/arch/powerpc/platforms/44x/bamboo.c
+++ b/arch/powerpc/platforms/44x/bamboo.c
@@ -14,12 +14,13 @@
14 * option) any later version. 14 * option) any later version.
15 */ 15 */
16#include <linux/init.h> 16#include <linux/init.h>
17#include <linux/of_platform.h>
18
17#include <asm/machdep.h> 19#include <asm/machdep.h>
18#include <asm/prom.h> 20#include <asm/prom.h>
19#include <asm/udbg.h> 21#include <asm/udbg.h>
20#include <asm/time.h> 22#include <asm/time.h>
21#include <asm/uic.h> 23#include <asm/uic.h>
22#include <asm/of_platform.h>
23#include "44x.h" 24#include "44x.h"
24 25
25static struct of_device_id bamboo_of_bus[] = { 26static struct of_device_id bamboo_of_bus[] = {
diff --git a/arch/powerpc/platforms/44x/ebony.c b/arch/powerpc/platforms/44x/ebony.c
index 40e18fcb66..6cd3476767 100644
--- a/arch/powerpc/platforms/44x/ebony.c
+++ b/arch/powerpc/platforms/44x/ebony.c
@@ -17,12 +17,13 @@
17 */ 17 */
18 18
19#include <linux/init.h> 19#include <linux/init.h>
20#include <linux/of_platform.h>
21
20#include <asm/machdep.h> 22#include <asm/machdep.h>
21#include <asm/prom.h> 23#include <asm/prom.h>
22#include <asm/udbg.h> 24#include <asm/udbg.h>
23#include <asm/time.h> 25#include <asm/time.h>
24#include <asm/uic.h> 26#include <asm/uic.h>
25#include <asm/of_platform.h>
26 27
27#include "44x.h" 28#include "44x.h"
28 29
diff --git a/arch/powerpc/platforms/44x/sequoia.c b/arch/powerpc/platforms/44x/sequoia.c
index 30700b31d4..21a9dd14f2 100644
--- a/arch/powerpc/platforms/44x/sequoia.c
+++ b/arch/powerpc/platforms/44x/sequoia.c
@@ -14,12 +14,13 @@
14 * option) any later version. 14 * option) any later version.
15 */ 15 */
16#include <linux/init.h> 16#include <linux/init.h>
17#include <linux/of_platform.h>
18
17#include <asm/machdep.h> 19#include <asm/machdep.h>
18#include <asm/prom.h> 20#include <asm/prom.h>
19#include <asm/udbg.h> 21#include <asm/udbg.h>
20#include <asm/time.h> 22#include <asm/time.h>
21#include <asm/uic.h> 23#include <asm/uic.h>
22#include <asm/of_platform.h>
23#include "44x.h" 24#include "44x.h"
24 25
25static struct of_device_id sequoia_of_bus[] = { 26static struct of_device_id sequoia_of_bus[] = {
diff --git a/arch/powerpc/platforms/83xx/mpc832x_mds.c b/arch/powerpc/platforms/83xx/mpc832x_mds.c
index 972fa8528a..39ee7a13b2 100644
--- a/arch/powerpc/platforms/83xx/mpc832x_mds.c
+++ b/arch/powerpc/platforms/83xx/mpc832x_mds.c
@@ -90,10 +90,11 @@ static void __init mpc832x_sys_setup_arch(void)
90 90
91 if ((np = of_find_compatible_node(NULL, "network", "ucc_geth")) 91 if ((np = of_find_compatible_node(NULL, "network", "ucc_geth"))
92 != NULL){ 92 != NULL){
93 /* Reset the Ethernet PHY */ 93 /* Reset the Ethernet PHYs */
94 bcsr_regs[9] &= ~0x20; 94#define BCSR8_FETH_RST 0x50
95 bcsr_regs[8] &= ~BCSR8_FETH_RST;
95 udelay(1000); 96 udelay(1000);
96 bcsr_regs[9] |= 0x20; 97 bcsr_regs[8] |= BCSR8_FETH_RST;
97 iounmap(bcsr_regs); 98 iounmap(bcsr_regs);
98 of_node_put(np); 99 of_node_put(np);
99 } 100 }
@@ -145,30 +146,6 @@ static void __init mpc832x_sys_init_IRQ(void)
145#endif /* CONFIG_QUICC_ENGINE */ 146#endif /* CONFIG_QUICC_ENGINE */
146} 147}
147 148
148#if defined(CONFIG_I2C_MPC) && defined(CONFIG_SENSORS_DS1374)
149extern ulong ds1374_get_rtc_time(void);
150extern int ds1374_set_rtc_time(ulong);
151
152static int __init mpc832x_rtc_hookup(void)
153{
154 struct timespec tv;
155
156 if (!machine_is(mpc832x_mds))
157 return 0;
158
159 ppc_md.get_rtc_time = ds1374_get_rtc_time;
160 ppc_md.set_rtc_time = ds1374_set_rtc_time;
161
162 tv.tv_nsec = 0;
163 tv.tv_sec = (ppc_md.get_rtc_time) ();
164 do_settimeofday(&tv);
165
166 return 0;
167}
168
169late_initcall(mpc832x_rtc_hookup);
170#endif
171
172/* 149/*
173 * Called very early, MMU is off, device-tree isn't unflattened 150 * Called very early, MMU is off, device-tree isn't unflattened
174 */ 151 */
diff --git a/arch/powerpc/platforms/83xx/mpc832x_rdb.c b/arch/powerpc/platforms/83xx/mpc832x_rdb.c
index fbca336aa0..d4bd04001b 100644
--- a/arch/powerpc/platforms/83xx/mpc832x_rdb.c
+++ b/arch/powerpc/platforms/83xx/mpc832x_rdb.c
@@ -15,7 +15,10 @@
15 */ 15 */
16 16
17#include <linux/pci.h> 17#include <linux/pci.h>
18#include <linux/interrupt.h>
18#include <linux/spi/spi.h> 19#include <linux/spi/spi.h>
20#include <linux/spi/mmc_spi.h>
21#include <linux/mmc/host.h>
19 22
20#include <asm/of_platform.h> 23#include <asm/of_platform.h>
21#include <asm/time.h> 24#include <asm/time.h>
@@ -46,15 +49,16 @@ static void mpc83xx_spi_deactivate_cs(u8 cs, u8 polarity)
46 par_io_data_set(3, 13, !polarity); 49 par_io_data_set(3, 13, !polarity);
47} 50}
48 51
52static struct mmc_spi_platform_data mpc832x_mmc_pdata = {
53 .ocr_mask = MMC_VDD_33_34,
54};
55
49static struct spi_board_info mpc832x_spi_boardinfo = { 56static struct spi_board_info mpc832x_spi_boardinfo = {
50 .bus_num = 0x4c0, 57 .bus_num = 0x4c0,
51 .chip_select = 0, 58 .chip_select = 0,
52 .max_speed_hz = 50000000, 59 .max_speed_hz = 50000000,
53 /* 60 .modalias = "mmc_spi",
54 * XXX: This is spidev (spi in userspace) stub, should 61 .platform_data = &mpc832x_mmc_pdata,
55 * be replaced by "mmc_spi" when mmc_spi will hit mainline.
56 */
57 .modalias = "spidev",
58}; 62};
59 63
60static int __init mpc832x_spi_init(void) 64static int __init mpc832x_spi_init(void)
diff --git a/arch/powerpc/platforms/83xx/mpc834x_mds.c b/arch/powerpc/platforms/83xx/mpc834x_mds.c
index 00aed7c226..a81bb3ce6b 100644
--- a/arch/powerpc/platforms/83xx/mpc834x_mds.c
+++ b/arch/powerpc/platforms/83xx/mpc834x_mds.c
@@ -106,30 +106,6 @@ static void __init mpc834x_mds_init_IRQ(void)
106 ipic_set_default_priority(); 106 ipic_set_default_priority();
107} 107}
108 108
109#if defined(CONFIG_I2C_MPC) && defined(CONFIG_SENSORS_DS1374)
110extern ulong ds1374_get_rtc_time(void);
111extern int ds1374_set_rtc_time(ulong);
112
113static int __init mpc834x_rtc_hookup(void)
114{
115 struct timespec tv;
116
117 if (!machine_is(mpc834x_mds))
118 return 0;
119
120 ppc_md.get_rtc_time = ds1374_get_rtc_time;
121 ppc_md.set_rtc_time = ds1374_set_rtc_time;
122
123 tv.tv_nsec = 0;
124 tv.tv_sec = (ppc_md.get_rtc_time) ();
125 do_settimeofday(&tv);
126
127 return 0;
128}
129
130late_initcall(mpc834x_rtc_hookup);
131#endif
132
133/* 109/*
134 * Called very early, MMU is off, device-tree isn't unflattened 110 * Called very early, MMU is off, device-tree isn't unflattened
135 */ 111 */
diff --git a/arch/powerpc/platforms/83xx/mpc836x_mds.c b/arch/powerpc/platforms/83xx/mpc836x_mds.c
index 0f3855c95f..e40012f8f4 100644
--- a/arch/powerpc/platforms/83xx/mpc836x_mds.c
+++ b/arch/powerpc/platforms/83xx/mpc836x_mds.c
@@ -96,14 +96,39 @@ static void __init mpc836x_mds_setup_arch(void)
96 96
97 if ((np = of_find_compatible_node(NULL, "network", "ucc_geth")) 97 if ((np = of_find_compatible_node(NULL, "network", "ucc_geth"))
98 != NULL){ 98 != NULL){
99 uint svid;
100
99 /* Reset the Ethernet PHY */ 101 /* Reset the Ethernet PHY */
100 bcsr_regs[9] &= ~0x20; 102#define BCSR9_GETHRST 0x20
103 clrbits8(&bcsr_regs[9], BCSR9_GETHRST);
101 udelay(1000); 104 udelay(1000);
102 bcsr_regs[9] |= 0x20; 105 setbits8(&bcsr_regs[9], BCSR9_GETHRST);
106
107 /* handle mpc8360ea rev.2.1 erratum 2: RGMII Timing */
108 svid = mfspr(SPRN_SVR);
109 if (svid == 0x80480021) {
110 void __iomem *immap;
111
112 immap = ioremap(get_immrbase() + 0x14a8, 8);
113
114 /*
115 * IMMR + 0x14A8[4:5] = 11 (clk delay for UCC 2)
116 * IMMR + 0x14A8[18:19] = 11 (clk delay for UCC 1)
117 */
118 setbits32(immap, 0x0c003000);
119
120 /*
121 * IMMR + 0x14AC[20:27] = 10101010
122 * (data delay for both UCC's)
123 */
124 clrsetbits_be32(immap + 4, 0xff0, 0xaa0);
125
126 iounmap(immap);
127 }
128
103 iounmap(bcsr_regs); 129 iounmap(bcsr_regs);
104 of_node_put(np); 130 of_node_put(np);
105 } 131 }
106
107#endif /* CONFIG_QUICC_ENGINE */ 132#endif /* CONFIG_QUICC_ENGINE */
108} 133}
109 134
@@ -152,30 +177,6 @@ static void __init mpc836x_mds_init_IRQ(void)
152#endif /* CONFIG_QUICC_ENGINE */ 177#endif /* CONFIG_QUICC_ENGINE */
153} 178}
154 179
155#if defined(CONFIG_I2C_MPC) && defined(CONFIG_SENSORS_DS1374)
156extern ulong ds1374_get_rtc_time(void);
157extern int ds1374_set_rtc_time(ulong);
158
159static int __init mpc8360_rtc_hookup(void)
160{
161 struct timespec tv;
162
163 if (!machine_is(mpc836x_mds))
164 return 0;
165
166 ppc_md.get_rtc_time = ds1374_get_rtc_time;
167 ppc_md.set_rtc_time = ds1374_set_rtc_time;
168
169 tv.tv_nsec = 0;
170 tv.tv_sec = (ppc_md.get_rtc_time) ();
171 do_settimeofday(&tv);
172
173 return 0;
174}
175
176late_initcall(mpc8360_rtc_hookup);
177#endif
178
179/* 180/*
180 * Called very early, MMU is off, device-tree isn't unflattened 181 * Called very early, MMU is off, device-tree isn't unflattened
181 */ 182 */
diff --git a/arch/powerpc/platforms/83xx/usb.c b/arch/powerpc/platforms/83xx/usb.c
index eafe7605cd..b45160f8d0 100644
--- a/arch/powerpc/platforms/83xx/usb.c
+++ b/arch/powerpc/platforms/83xx/usb.c
@@ -130,7 +130,7 @@ int mpc831x_usb_cfg(void)
130 out_be32(immap + MPC83XX_SCCR_OFFS, temp); 130 out_be32(immap + MPC83XX_SCCR_OFFS, temp);
131 131
132 /* Configure pin mux for ULPI. There is no pin mux for UTMI */ 132 /* Configure pin mux for ULPI. There is no pin mux for UTMI */
133 if (!strcmp(prop, "ulpi")) { 133 if (prop && !strcmp(prop, "ulpi")) {
134 temp = in_be32(immap + MPC83XX_SICRL_OFFS); 134 temp = in_be32(immap + MPC83XX_SICRL_OFFS);
135 temp &= ~MPC831X_SICRL_USB_MASK; 135 temp &= ~MPC831X_SICRL_USB_MASK;
136 temp |= MPC831X_SICRL_USB_ULPI; 136 temp |= MPC831X_SICRL_USB_ULPI;
@@ -153,13 +153,13 @@ int mpc831x_usb_cfg(void)
153 usb_regs = ioremap(res.start, res.end - res.start + 1); 153 usb_regs = ioremap(res.start, res.end - res.start + 1);
154 154
155 /* Using on-chip PHY */ 155 /* Using on-chip PHY */
156 if (!strcmp(prop, "utmi_wide") || 156 if (prop && (!strcmp(prop, "utmi_wide") ||
157 !strcmp(prop, "utmi")) { 157 !strcmp(prop, "utmi"))) {
158 /* Set UTMI_PHY_EN, REFSEL to 48MHZ */ 158 /* Set UTMI_PHY_EN, REFSEL to 48MHZ */
159 out_be32(usb_regs + FSL_USB2_CONTROL_OFFS, 159 out_be32(usb_regs + FSL_USB2_CONTROL_OFFS,
160 CONTROL_UTMI_PHY_EN | CONTROL_REFSEL_48MHZ); 160 CONTROL_UTMI_PHY_EN | CONTROL_REFSEL_48MHZ);
161 /* Using external UPLI PHY */ 161 /* Using external UPLI PHY */
162 } else if (!strcmp(prop, "ulpi")) { 162 } else if (prop && !strcmp(prop, "ulpi")) {
163 /* Set PHY_CLK_SEL to ULPI */ 163 /* Set PHY_CLK_SEL to ULPI */
164 temp = CONTROL_PHY_CLK_SEL_ULPI; 164 temp = CONTROL_PHY_CLK_SEL_ULPI;
165#ifdef CONFIG_USB_OTG 165#ifdef CONFIG_USB_OTG
diff --git a/arch/powerpc/platforms/cell/spufs/inode.c b/arch/powerpc/platforms/cell/spufs/inode.c
index 0966d093db..c0e968a4c2 100644
--- a/arch/powerpc/platforms/cell/spufs/inode.c
+++ b/arch/powerpc/platforms/cell/spufs/inode.c
@@ -171,6 +171,7 @@ static int spufs_rmdir(struct inode *parent, struct dentry *dir)
171{ 171{
172 /* remove all entries */ 172 /* remove all entries */
173 spufs_prune_dir(dir); 173 spufs_prune_dir(dir);
174 d_drop(dir);
174 175
175 return simple_rmdir(parent, dir); 176 return simple_rmdir(parent, dir);
176} 177}
diff --git a/arch/powerpc/platforms/embedded6xx/prpmc2800.c b/arch/powerpc/platforms/embedded6xx/prpmc2800.c
index e484cac750..653a5eb91c 100644
--- a/arch/powerpc/platforms/embedded6xx/prpmc2800.c
+++ b/arch/powerpc/platforms/embedded6xx/prpmc2800.c
@@ -144,6 +144,7 @@ static int __init prpmc2800_probe(void)
144 strncpy(prpmc2800_platform_name, m, 144 strncpy(prpmc2800_platform_name, m,
145 min((int)len, PLATFORM_NAME_MAX - 1)); 145 min((int)len, PLATFORM_NAME_MAX - 1));
146 146
147 _set_L2CR(_get_L2CR() | L2CR_L2E);
147 return 1; 148 return 1;
148} 149}
149 150
diff --git a/arch/powerpc/platforms/pasemi/setup.c b/arch/powerpc/platforms/pasemi/setup.c
index 3a5d112af5..3d62060498 100644
--- a/arch/powerpc/platforms/pasemi/setup.c
+++ b/arch/powerpc/platforms/pasemi/setup.c
@@ -214,7 +214,7 @@ static __init void pas_init_IRQ(void)
214 printk(KERN_DEBUG "OpenPIC addr: %lx\n", openpic_addr); 214 printk(KERN_DEBUG "OpenPIC addr: %lx\n", openpic_addr);
215 215
216 mpic = mpic_alloc(mpic_node, openpic_addr, 216 mpic = mpic_alloc(mpic_node, openpic_addr,
217 MPIC_PRIMARY|MPIC_LARGE_VECTORS|MPIC_WANTS_RESET, 217 MPIC_PRIMARY|MPIC_LARGE_VECTORS,
218 0, 0, " PAS-OPIC "); 218 0, 0, " PAS-OPIC ");
219 BUG_ON(!mpic); 219 BUG_ON(!mpic);
220 220
diff --git a/arch/powerpc/platforms/pseries/Kconfig b/arch/powerpc/platforms/pseries/Kconfig
index 16e4e401b8..306a9d0749 100644
--- a/arch/powerpc/platforms/pseries/Kconfig
+++ b/arch/powerpc/platforms/pseries/Kconfig
@@ -21,7 +21,7 @@ config PPC_SPLPAR
21 21
22config EEH 22config EEH
23 bool "PCI Extended Error Handling (EEH)" if EMBEDDED 23 bool "PCI Extended Error Handling (EEH)" if EMBEDDED
24 depends on PPC_PSERIES 24 depends on PPC_PSERIES && PCI
25 default y if !EMBEDDED 25 default y if !EMBEDDED
26 26
27config SCANLOG 27config SCANLOG
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
index fdb9b1c8f9..fdeefe54ea 100644
--- a/arch/powerpc/platforms/pseries/setup.c
+++ b/arch/powerpc/platforms/pseries/setup.c
@@ -507,7 +507,8 @@ define_machine(pseries) {
507 .restart = rtas_restart, 507 .restart = rtas_restart,
508 .power_off = pSeries_power_off, 508 .power_off = pSeries_power_off,
509 .halt = rtas_halt, 509 .halt = rtas_halt,
510 .panic = rtas_os_term, 510 .panic = rtas_panic_msg,
511 .machine_shutdown = rtas_os_term,
511 .get_boot_time = rtas_get_boot_time, 512 .get_boot_time = rtas_get_boot_time,
512 .get_rtc_time = rtas_get_rtc_time, 513 .get_rtc_time = rtas_get_rtc_time,
513 .set_rtc_time = rtas_set_rtc_time, 514 .set_rtc_time = rtas_set_rtc_time,
diff --git a/arch/powerpc/sysdev/uic.c b/arch/powerpc/sysdev/uic.c
index 5149716c73..847a5496b8 100644
--- a/arch/powerpc/sysdev/uic.c
+++ b/arch/powerpc/sysdev/uic.c
@@ -97,6 +97,22 @@ static void uic_ack_irq(unsigned int virq)
97 spin_unlock_irqrestore(&uic->lock, flags); 97 spin_unlock_irqrestore(&uic->lock, flags);
98} 98}
99 99
100static void uic_mask_ack_irq(unsigned int virq)
101{
102 struct uic *uic = get_irq_chip_data(virq);
103 unsigned int src = uic_irq_to_hw(virq);
104 unsigned long flags;
105 u32 er, sr;
106
107 sr = 1 << (31-src);
108 spin_lock_irqsave(&uic->lock, flags);
109 er = mfdcr(uic->dcrbase + UIC_ER);
110 er &= ~sr;
111 mtdcr(uic->dcrbase + UIC_ER, er);
112 mtdcr(uic->dcrbase + UIC_SR, sr);
113 spin_unlock_irqrestore(&uic->lock, flags);
114}
115
100static int uic_set_irq_type(unsigned int virq, unsigned int flow_type) 116static int uic_set_irq_type(unsigned int virq, unsigned int flow_type)
101{ 117{
102 struct uic *uic = get_irq_chip_data(virq); 118 struct uic *uic = get_irq_chip_data(virq);
@@ -152,7 +168,7 @@ static struct irq_chip uic_irq_chip = {
152 .typename = " UIC ", 168 .typename = " UIC ",
153 .unmask = uic_unmask_irq, 169 .unmask = uic_unmask_irq,
154 .mask = uic_mask_irq, 170 .mask = uic_mask_irq,
155/* .mask_ack = uic_mask_irq_and_ack, */ 171 .mask_ack = uic_mask_ack_irq,
156 .ack = uic_ack_irq, 172 .ack = uic_ack_irq,
157 .set_type = uic_set_irq_type, 173 .set_type = uic_set_irq_type,
158}; 174};
diff --git a/arch/ppc/kernel/setup.c b/arch/ppc/kernel/setup.c
index aac88c2f3d..5255bd80aa 100644
--- a/arch/ppc/kernel/setup.c
+++ b/arch/ppc/kernel/setup.c
@@ -312,7 +312,14 @@ early_init(int r3, int r4, int r5)
312 * Identify the CPU type and fix up code sections 312 * Identify the CPU type and fix up code sections
313 * that depend on which cpu we have. 313 * that depend on which cpu we have.
314 */ 314 */
315#if defined(CONFIG_440EP) && defined(CONFIG_PPC_FPU)
316 /* We pass the virtual PVR here for 440EP as 440EP and 440GR have
317 * identical PVRs and there is no reliable way to check for the FPU
318 */
319 spec = identify_cpu(offset, (mfspr(SPRN_PVR) | 0x8));
320#else
315 spec = identify_cpu(offset, mfspr(SPRN_PVR)); 321 spec = identify_cpu(offset, mfspr(SPRN_PVR));
322#endif
316 do_feature_fixups(spec->cpu_features, 323 do_feature_fixups(spec->cpu_features,
317 PTRRELOC(&__start___ftr_fixup), 324 PTRRELOC(&__start___ftr_fixup),
318 PTRRELOC(&__stop___ftr_fixup)); 325 PTRRELOC(&__stop___ftr_fixup));
diff --git a/arch/ppc/mm/init.c b/arch/ppc/mm/init.c
index 390dd1995c..dd898d3248 100644
--- a/arch/ppc/mm/init.c
+++ b/arch/ppc/mm/init.c
@@ -561,7 +561,7 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long address,
561 * That means the zeroed TLB has to be invalidated 561 * That means the zeroed TLB has to be invalidated
562 * whenever a page miss occurs. 562 * whenever a page miss occurs.
563 */ 563 */
564 _tlbie(address); 564 _tlbie(address, 0 /* 8xx doesn't care about PID */);
565#endif 565#endif
566 if (!PageReserved(page) 566 if (!PageReserved(page)
567 && !test_bit(PG_arch_1, &page->flags)) { 567 && !test_bit(PG_arch_1, &page->flags)) {
diff --git a/arch/ppc/mm/mmu_decl.h b/arch/ppc/mm/mmu_decl.h
index f1d4f2109a..b298b60c20 100644
--- a/arch/ppc/mm/mmu_decl.h
+++ b/arch/ppc/mm/mmu_decl.h
@@ -49,7 +49,7 @@ extern unsigned int num_tlbcam_entries;
49 * architectures. -- Dan 49 * architectures. -- Dan
50 */ 50 */
51#if defined(CONFIG_8xx) 51#if defined(CONFIG_8xx)
52#define flush_HPTE(X, va, pg) _tlbie(va) 52#define flush_HPTE(X, va, pg) _tlbie(va, 0 /* 8xx doesn't care about PID */)
53#define MMU_init_hw() do { } while(0) 53#define MMU_init_hw() do { } while(0)
54#define mmu_mapin_ram() (0UL) 54#define mmu_mapin_ram() (0UL)
55 55
diff --git a/arch/ppc/platforms/4xx/yucca.c b/arch/ppc/platforms/4xx/yucca.c
index a83b0baea0..66a44ff0d9 100644
--- a/arch/ppc/platforms/4xx/yucca.c
+++ b/arch/ppc/platforms/4xx/yucca.c
@@ -211,6 +211,7 @@ static void __init yucca_setup_pcie_fpga_rootpoint(int port)
211 break; 211 break;
212 212
213 default: 213 default:
214 iounmap(pcie_reg_fpga_base);
214 return; 215 return;
215 } 216 }
216 217
diff --git a/arch/ppc/syslib/virtex_devices.c b/arch/ppc/syslib/virtex_devices.c
index ace4ec08de..f658ff3b38 100644
--- a/arch/ppc/syslib/virtex_devices.c
+++ b/arch/ppc/syslib/virtex_devices.c
@@ -87,6 +87,29 @@
87 }, \ 87 }, \
88} 88}
89 89
90#define XPAR_AC97_CONTROLLER_REFERENCE(num) { \
91 .name = "ml403_ac97cr", \
92 .id = num, \
93 .num_resources = 3, \
94 .resource = (struct resource[]) { \
95 { \
96 .start = XPAR_OPB_AC97_CONTROLLER_REF_##num##_BASEADDR, \
97 .end = XPAR_OPB_AC97_CONTROLLER_REF_##num##_HIGHADDR, \
98 .flags = IORESOURCE_MEM, \
99 }, \
100 { \
101 .start = XPAR_OPB_INTC_0_OPB_AC97_CONTROLLER_REF_##num##_PLAYBACK_INTERRUPT_INTR, \
102 .end = XPAR_OPB_INTC_0_OPB_AC97_CONTROLLER_REF_##num##_PLAYBACK_INTERRUPT_INTR, \
103 .flags = IORESOURCE_IRQ, \
104 }, \
105 { \
106 .start = XPAR_OPB_INTC_0_OPB_AC97_CONTROLLER_REF_##num##_RECORD_INTERRUPT_INTR, \
107 .end = XPAR_OPB_INTC_0_OPB_AC97_CONTROLLER_REF_##num##_RECORD_INTERRUPT_INTR, \
108 .flags = IORESOURCE_IRQ, \
109 }, \
110 }, \
111}
112
90/* UART 8250 driver platform data table */ 113/* UART 8250 driver platform data table */
91struct plat_serial8250_port virtex_serial_platform_data[] = { 114struct plat_serial8250_port virtex_serial_platform_data[] = {
92#if defined(XPAR_UARTNS550_0_BASEADDR) 115#if defined(XPAR_UARTNS550_0_BASEADDR)
@@ -173,6 +196,14 @@ struct platform_device virtex_platform_devices[] = {
173#if defined(XPAR_TFT_3_BASEADDR) 196#if defined(XPAR_TFT_3_BASEADDR)
174 XPAR_TFT(3), 197 XPAR_TFT(3),
175#endif 198#endif
199
200 /* AC97 Controller Reference instances */
201#if defined(XPAR_OPB_AC97_CONTROLLER_REF_0_BASEADDR)
202 XPAR_AC97_CONTROLLER_REFERENCE(0),
203#endif
204#if defined(XPAR_OPB_AC97_CONTROLLER_REF_1_BASEADDR)
205 XPAR_AC97_CONTROLLER_REFERENCE(1),
206#endif
176}; 207};
177 208
178/* Early serial support functions */ 209/* Early serial support functions */