aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2009-04-07 10:40:55 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2009-04-07 10:40:55 -0400
commit44d84afa834b799560d7dbe47250ad7557f5ca2f (patch)
treed18b90078503c956d32f9f0c6524bc43ece96b25 /arch/powerpc
parentf8201abcb2badce7eaa6a3715f9a228cfd88a453 (diff)
parent11b55da700eb77905f1c2dde3a0cbeedc665a753 (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: (28 commits) powerpc: Fix oops when loading modules powerpc: Wire up preadv and pwritev powerpc/ftrace: Fix printf format warning powerpc/ftrace: Fix #if that should be #ifdef powerpc: Fix ptrace compat wrapper for FPU register access powerpc: Print information about mapping hw irqs to virtual irqs powerpc: Correct dependency of KEXEC powerpc: Disable VSX or current process in giveup_fpu/altivec powerpc/pseries: Enable relay in pseries_defconfig powerpc/pseries: Fix ibm,client-architecture comment powerpc/pseries: Scan for all events in rtasd powerpc/pseries: Add dispatch dispersion statistics powerpc: Clean up some prom printouts powerpc: Print progress of ibm,client-architecture method powerpc: Remove duplicated #include's powerpc/pmac: Fix internal modem IRQ on Wallstreet PowerBook powerpc/wdrtas: Update wdrtas_get_interval to use rtas_data_buf fsl-diu-fb: Pass the proper device for dma mapping routines powerpc/pq2fads: Update device tree for use with device-tree-aware u-boot. cpm_uart: Disable CPM udbg when re-initing CPM uart, even if not the console. ...
Diffstat (limited to 'arch/powerpc')
-rw-r--r--arch/powerpc/Kconfig3
-rw-r--r--arch/powerpc/boot/dts/ksi8560.dts4
-rw-r--r--arch/powerpc/boot/dts/pq2fads.dts20
-rw-r--r--arch/powerpc/boot/dts/sbc8548.dts4
-rw-r--r--arch/powerpc/boot/dts/sbc8560.dts4
-rw-r--r--arch/powerpc/boot/dts/socrates.dts1
-rw-r--r--arch/powerpc/boot/dts/stx_gp3_8560.dts4
-rw-r--r--arch/powerpc/boot/dts/tqm8540.dts4
-rw-r--r--arch/powerpc/boot/dts/tqm8541.dts4
-rw-r--r--arch/powerpc/boot/dts/tqm8555.dts4
-rw-r--r--arch/powerpc/boot/dts/tqm8560.dts4
-rw-r--r--arch/powerpc/configs/pseries_defconfig2
-rw-r--r--arch/powerpc/include/asm/lppaca.h2
-rw-r--r--arch/powerpc/include/asm/mpic.h12
-rw-r--r--arch/powerpc/include/asm/ps3fb.h1
-rw-r--r--arch/powerpc/include/asm/pte-common.h6
-rw-r--r--arch/powerpc/include/asm/reg.h30
-rw-r--r--arch/powerpc/include/asm/reg_booke.h30
-rw-r--r--arch/powerpc/include/asm/rtas.h3
-rw-r--r--arch/powerpc/include/asm/sfp-machine.h6
-rw-r--r--arch/powerpc/include/asm/systbl.h3
-rw-r--r--arch/powerpc/include/asm/unistd.h4
-rw-r--r--arch/powerpc/kernel/fpu.S5
-rw-r--r--arch/powerpc/kernel/ftrace.c4
-rw-r--r--arch/powerpc/kernel/irq.c4
-rw-r--r--arch/powerpc/kernel/lparcfg.c16
-rw-r--r--arch/powerpc/kernel/misc_64.S8
-rw-r--r--arch/powerpc/kernel/prom_init.c18
-rw-r--r--arch/powerpc/kernel/ptrace32.c15
-rw-r--r--arch/powerpc/kernel/setup-common.c1
-rw-r--r--arch/powerpc/sysdev/mpic.c34
31 files changed, 181 insertions, 79 deletions
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 9e08d8a69fdf..5b50e1ac6179 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -316,7 +316,7 @@ config ARCH_ENABLE_MEMORY_HOTREMOVE
316 316
317config KEXEC 317config KEXEC
318 bool "kexec system call (EXPERIMENTAL)" 318 bool "kexec system call (EXPERIMENTAL)"
319 depends on BOOK3S && EXPERIMENTAL 319 depends on PPC_BOOK3S && EXPERIMENTAL
320 help 320 help
321 kexec is a system call that implements the ability to shutdown your 321 kexec is a system call that implements the ability to shutdown your
322 current kernel, and to start another kernel. It is like a reboot 322 current kernel, and to start another kernel. It is like a reboot
@@ -775,6 +775,7 @@ config LOWMEM_CAM_NUM_BOOL
775 Say N here unless you know what you are doing. 775 Say N here unless you know what you are doing.
776 776
777config LOWMEM_CAM_NUM 777config LOWMEM_CAM_NUM
778 depends on FSL_BOOKE
778 int "Number of CAMs to use to map low memory" if LOWMEM_CAM_NUM_BOOL 779 int "Number of CAMs to use to map low memory" if LOWMEM_CAM_NUM_BOOL
779 default 3 780 default 3
780 781
diff --git a/arch/powerpc/boot/dts/ksi8560.dts b/arch/powerpc/boot/dts/ksi8560.dts
index 308fe7c29dea..c9cfd374bffb 100644
--- a/arch/powerpc/boot/dts/ksi8560.dts
+++ b/arch/powerpc/boot/dts/ksi8560.dts
@@ -57,14 +57,14 @@
57 bus-frequency = <0>; /* Fixed by bootwrapper */ 57 bus-frequency = <0>; /* Fixed by bootwrapper */
58 58
59 memory-controller@2000 { 59 memory-controller@2000 {
60 compatible = "fsl,8540-memory-controller"; 60 compatible = "fsl,mpc8540-memory-controller";
61 reg = <0x2000 0x1000>; 61 reg = <0x2000 0x1000>;
62 interrupt-parent = <&mpic>; 62 interrupt-parent = <&mpic>;
63 interrupts = <0x12 0x2>; 63 interrupts = <0x12 0x2>;
64 }; 64 };
65 65
66 L2: l2-cache-controller@20000 { 66 L2: l2-cache-controller@20000 {
67 compatible = "fsl,8540-l2-cache-controller"; 67 compatible = "fsl,mpc8540-l2-cache-controller";
68 reg = <0x20000 0x1000>; 68 reg = <0x20000 0x1000>;
69 cache-line-size = <0x20>; /* 32 bytes */ 69 cache-line-size = <0x20>; /* 32 bytes */
70 cache-size = <0x40000>; /* L2, 256K */ 70 cache-size = <0x40000>; /* L2, 256K */
diff --git a/arch/powerpc/boot/dts/pq2fads.dts b/arch/powerpc/boot/dts/pq2fads.dts
index b2d61091b36d..0bb669376743 100644
--- a/arch/powerpc/boot/dts/pq2fads.dts
+++ b/arch/powerpc/boot/dts/pq2fads.dts
@@ -17,6 +17,14 @@
17 #address-cells = <1>; 17 #address-cells = <1>;
18 #size-cells = <1>; 18 #size-cells = <1>;
19 19
20 aliases {
21 ethernet0 = &enet0;
22 ethernet1 = &enet1;
23 serial0 = &serial0;
24 serial1 = &serial1;
25 pci0 = &pci0;
26 };
27
20 cpus { 28 cpus {
21 #address-cells = <1>; 29 #address-cells = <1>;
22 #size-cells = <0>; 30 #size-cells = <0>;
@@ -45,7 +53,7 @@
45 #size-cells = <1>; 53 #size-cells = <1>;
46 reg = <0xf0010100 0x60>; 54 reg = <0xf0010100 0x60>;
47 55
48 ranges = <0x0 0x0 0xfe000000 0x800000 56 ranges = <0x0 0x0 0xff800000 0x800000
49 0x1 0x0 0xf4500000 0x8000 57 0x1 0x0 0xf4500000 0x8000
50 0x8 0x0 0xf8200000 0x8000>; 58 0x8 0x0 0xf8200000 0x8000>;
51 59
@@ -71,7 +79,7 @@
71 }; 79 };
72 }; 80 };
73 81
74 pci@f0010800 { 82 pci0: pci@f0010800 {
75 device_type = "pci"; 83 device_type = "pci";
76 reg = <0xf0010800 0x10c 0xf00101ac 0x8 0xf00101c4 0x8>; 84 reg = <0xf0010800 0x10c 0xf00101ac 0x8 0xf00101c4 0x8>;
77 compatible = "fsl,mpc8280-pci", "fsl,pq2-pci"; 85 compatible = "fsl,mpc8280-pci", "fsl,pq2-pci";
@@ -142,7 +150,7 @@
142 reg = <0x119f0 0x10 0x115f0 0x10>; 150 reg = <0x119f0 0x10 0x115f0 0x10>;
143 }; 151 };
144 152
145 serial@11a00 { 153 serial0: serial@11a00 {
146 device_type = "serial"; 154 device_type = "serial";
147 compatible = "fsl,mpc8280-scc-uart", 155 compatible = "fsl,mpc8280-scc-uart",
148 "fsl,cpm2-scc-uart"; 156 "fsl,cpm2-scc-uart";
@@ -153,7 +161,7 @@
153 fsl,cpm-command = <0x800000>; 161 fsl,cpm-command = <0x800000>;
154 }; 162 };
155 163
156 serial@11a20 { 164 serial1: serial@11a20 {
157 device_type = "serial"; 165 device_type = "serial";
158 compatible = "fsl,mpc8280-scc-uart", 166 compatible = "fsl,mpc8280-scc-uart",
159 "fsl,cpm2-scc-uart"; 167 "fsl,cpm2-scc-uart";
@@ -164,7 +172,7 @@
164 fsl,cpm-command = <0x4a00000>; 172 fsl,cpm-command = <0x4a00000>;
165 }; 173 };
166 174
167 ethernet@11320 { 175 enet0: ethernet@11320 {
168 device_type = "network"; 176 device_type = "network";
169 compatible = "fsl,mpc8280-fcc-enet", 177 compatible = "fsl,mpc8280-fcc-enet",
170 "fsl,cpm2-fcc-enet"; 178 "fsl,cpm2-fcc-enet";
@@ -176,7 +184,7 @@
176 fsl,cpm-command = <0x16200300>; 184 fsl,cpm-command = <0x16200300>;
177 }; 185 };
178 186
179 ethernet@11340 { 187 enet1: ethernet@11340 {
180 device_type = "network"; 188 device_type = "network";
181 compatible = "fsl,mpc8280-fcc-enet", 189 compatible = "fsl,mpc8280-fcc-enet",
182 "fsl,cpm2-fcc-enet"; 190 "fsl,cpm2-fcc-enet";
diff --git a/arch/powerpc/boot/dts/sbc8548.dts b/arch/powerpc/boot/dts/sbc8548.dts
index 9c5079fec4f2..b1f1416ac998 100644
--- a/arch/powerpc/boot/dts/sbc8548.dts
+++ b/arch/powerpc/boot/dts/sbc8548.dts
@@ -156,14 +156,14 @@
156 compatible = "simple-bus"; 156 compatible = "simple-bus";
157 157
158 memory-controller@2000 { 158 memory-controller@2000 {
159 compatible = "fsl,8548-memory-controller"; 159 compatible = "fsl,mpc8548-memory-controller";
160 reg = <0x2000 0x1000>; 160 reg = <0x2000 0x1000>;
161 interrupt-parent = <&mpic>; 161 interrupt-parent = <&mpic>;
162 interrupts = <0x12 0x2>; 162 interrupts = <0x12 0x2>;
163 }; 163 };
164 164
165 L2: l2-cache-controller@20000 { 165 L2: l2-cache-controller@20000 {
166 compatible = "fsl,8548-l2-cache-controller"; 166 compatible = "fsl,mpc8548-l2-cache-controller";
167 reg = <0x20000 0x1000>; 167 reg = <0x20000 0x1000>;
168 cache-line-size = <0x20>; // 32 bytes 168 cache-line-size = <0x20>; // 32 bytes
169 cache-size = <0x80000>; // L2, 512K 169 cache-size = <0x80000>; // L2, 512K
diff --git a/arch/powerpc/boot/dts/sbc8560.dts b/arch/powerpc/boot/dts/sbc8560.dts
index b772405a9a0a..c4564b81e473 100644
--- a/arch/powerpc/boot/dts/sbc8560.dts
+++ b/arch/powerpc/boot/dts/sbc8560.dts
@@ -61,14 +61,14 @@
61 clock-frequency = <0>; 61 clock-frequency = <0>;
62 62
63 memory-controller@2000 { 63 memory-controller@2000 {
64 compatible = "fsl,8560-memory-controller"; 64 compatible = "fsl,mpc8560-memory-controller";
65 reg = <0x2000 0x1000>; 65 reg = <0x2000 0x1000>;
66 interrupt-parent = <&mpic>; 66 interrupt-parent = <&mpic>;
67 interrupts = <0x12 0x2>; 67 interrupts = <0x12 0x2>;
68 }; 68 };
69 69
70 L2: l2-cache-controller@20000 { 70 L2: l2-cache-controller@20000 {
71 compatible = "fsl,8560-l2-cache-controller"; 71 compatible = "fsl,mpc8560-l2-cache-controller";
72 reg = <0x20000 0x1000>; 72 reg = <0x20000 0x1000>;
73 cache-line-size = <0x20>; // 32 bytes 73 cache-line-size = <0x20>; // 32 bytes
74 cache-size = <0x40000>; // L2, 256K 74 cache-size = <0x40000>; // L2, 256K
diff --git a/arch/powerpc/boot/dts/socrates.dts b/arch/powerpc/boot/dts/socrates.dts
index b8d0fc6f0042..04c398862e03 100644
--- a/arch/powerpc/boot/dts/socrates.dts
+++ b/arch/powerpc/boot/dts/socrates.dts
@@ -52,6 +52,7 @@
52 soc8544@e0000000 { 52 soc8544@e0000000 {
53 #address-cells = <1>; 53 #address-cells = <1>;
54 #size-cells = <1>; 54 #size-cells = <1>;
55 device_type = "soc";
55 56
56 ranges = <0x00000000 0xe0000000 0x00100000>; 57 ranges = <0x00000000 0xe0000000 0x00100000>;
57 reg = <0xe0000000 0x00001000>; // CCSRBAR 1M 58 reg = <0xe0000000 0x00001000>; // CCSRBAR 1M
diff --git a/arch/powerpc/boot/dts/stx_gp3_8560.dts b/arch/powerpc/boot/dts/stx_gp3_8560.dts
index 8b173957fb5f..ea6b15152de3 100644
--- a/arch/powerpc/boot/dts/stx_gp3_8560.dts
+++ b/arch/powerpc/boot/dts/stx_gp3_8560.dts
@@ -57,14 +57,14 @@
57 compatible = "fsl,mpc8560-immr", "simple-bus"; 57 compatible = "fsl,mpc8560-immr", "simple-bus";
58 58
59 memory-controller@2000 { 59 memory-controller@2000 {
60 compatible = "fsl,8540-memory-controller"; 60 compatible = "fsl,mpc8540-memory-controller";
61 reg = <0x2000 0x1000>; 61 reg = <0x2000 0x1000>;
62 interrupt-parent = <&mpic>; 62 interrupt-parent = <&mpic>;
63 interrupts = <18 2>; 63 interrupts = <18 2>;
64 }; 64 };
65 65
66 L2: l2-cache-controller@20000 { 66 L2: l2-cache-controller@20000 {
67 compatible = "fsl,8540-l2-cache-controller"; 67 compatible = "fsl,mpc8540-l2-cache-controller";
68 reg = <0x20000 0x1000>; 68 reg = <0x20000 0x1000>;
69 cache-line-size = <32>; 69 cache-line-size = <32>;
70 cache-size = <0x40000>; // L2, 256K 70 cache-size = <0x40000>; // L2, 256K
diff --git a/arch/powerpc/boot/dts/tqm8540.dts b/arch/powerpc/boot/dts/tqm8540.dts
index ac9413a29f9f..231bae756637 100644
--- a/arch/powerpc/boot/dts/tqm8540.dts
+++ b/arch/powerpc/boot/dts/tqm8540.dts
@@ -59,14 +59,14 @@
59 compatible = "fsl,mpc8540-immr", "simple-bus"; 59 compatible = "fsl,mpc8540-immr", "simple-bus";
60 60
61 memory-controller@2000 { 61 memory-controller@2000 {
62 compatible = "fsl,8540-memory-controller"; 62 compatible = "fsl,mpc8540-memory-controller";
63 reg = <0x2000 0x1000>; 63 reg = <0x2000 0x1000>;
64 interrupt-parent = <&mpic>; 64 interrupt-parent = <&mpic>;
65 interrupts = <18 2>; 65 interrupts = <18 2>;
66 }; 66 };
67 67
68 L2: l2-cache-controller@20000 { 68 L2: l2-cache-controller@20000 {
69 compatible = "fsl,8540-l2-cache-controller"; 69 compatible = "fsl,mpc8540-l2-cache-controller";
70 reg = <0x20000 0x1000>; 70 reg = <0x20000 0x1000>;
71 cache-line-size = <32>; 71 cache-line-size = <32>;
72 cache-size = <0x40000>; // L2, 256K 72 cache-size = <0x40000>; // L2, 256K
diff --git a/arch/powerpc/boot/dts/tqm8541.dts b/arch/powerpc/boot/dts/tqm8541.dts
index c71bb5dd5e5e..4356a1f08295 100644
--- a/arch/powerpc/boot/dts/tqm8541.dts
+++ b/arch/powerpc/boot/dts/tqm8541.dts
@@ -58,14 +58,14 @@
58 compatible = "fsl,mpc8541-immr", "simple-bus"; 58 compatible = "fsl,mpc8541-immr", "simple-bus";
59 59
60 memory-controller@2000 { 60 memory-controller@2000 {
61 compatible = "fsl,8540-memory-controller"; 61 compatible = "fsl,mpc8540-memory-controller";
62 reg = <0x2000 0x1000>; 62 reg = <0x2000 0x1000>;
63 interrupt-parent = <&mpic>; 63 interrupt-parent = <&mpic>;
64 interrupts = <18 2>; 64 interrupts = <18 2>;
65 }; 65 };
66 66
67 L2: l2-cache-controller@20000 { 67 L2: l2-cache-controller@20000 {
68 compatible = "fsl,8540-l2-cache-controller"; 68 compatible = "fsl,mpc8540-l2-cache-controller";
69 reg = <0x20000 0x1000>; 69 reg = <0x20000 0x1000>;
70 cache-line-size = <32>; 70 cache-line-size = <32>;
71 cache-size = <0x40000>; // L2, 256K 71 cache-size = <0x40000>; // L2, 256K
diff --git a/arch/powerpc/boot/dts/tqm8555.dts b/arch/powerpc/boot/dts/tqm8555.dts
index a133ded6dddb..06d366ebbda3 100644
--- a/arch/powerpc/boot/dts/tqm8555.dts
+++ b/arch/powerpc/boot/dts/tqm8555.dts
@@ -58,14 +58,14 @@
58 compatible = "fsl,mpc8555-immr", "simple-bus"; 58 compatible = "fsl,mpc8555-immr", "simple-bus";
59 59
60 memory-controller@2000 { 60 memory-controller@2000 {
61 compatible = "fsl,8540-memory-controller"; 61 compatible = "fsl,mpc8540-memory-controller";
62 reg = <0x2000 0x1000>; 62 reg = <0x2000 0x1000>;
63 interrupt-parent = <&mpic>; 63 interrupt-parent = <&mpic>;
64 interrupts = <18 2>; 64 interrupts = <18 2>;
65 }; 65 };
66 66
67 L2: l2-cache-controller@20000 { 67 L2: l2-cache-controller@20000 {
68 compatible = "fsl,8540-l2-cache-controller"; 68 compatible = "fsl,mpc8540-l2-cache-controller";
69 reg = <0x20000 0x1000>; 69 reg = <0x20000 0x1000>;
70 cache-line-size = <32>; 70 cache-line-size = <32>;
71 cache-size = <0x40000>; // L2, 256K 71 cache-size = <0x40000>; // L2, 256K
diff --git a/arch/powerpc/boot/dts/tqm8560.dts b/arch/powerpc/boot/dts/tqm8560.dts
index 649e2e576267..feff915e0492 100644
--- a/arch/powerpc/boot/dts/tqm8560.dts
+++ b/arch/powerpc/boot/dts/tqm8560.dts
@@ -60,14 +60,14 @@
60 compatible = "fsl,mpc8560-immr", "simple-bus"; 60 compatible = "fsl,mpc8560-immr", "simple-bus";
61 61
62 memory-controller@2000 { 62 memory-controller@2000 {
63 compatible = "fsl,8540-memory-controller"; 63 compatible = "fsl,mpc8540-memory-controller";
64 reg = <0x2000 0x1000>; 64 reg = <0x2000 0x1000>;
65 interrupt-parent = <&mpic>; 65 interrupt-parent = <&mpic>;
66 interrupts = <18 2>; 66 interrupts = <18 2>;
67 }; 67 };
68 68
69 L2: l2-cache-controller@20000 { 69 L2: l2-cache-controller@20000 {
70 compatible = "fsl,8540-l2-cache-controller"; 70 compatible = "fsl,mpc8540-l2-cache-controller";
71 reg = <0x20000 0x1000>; 71 reg = <0x20000 0x1000>;
72 cache-line-size = <32>; 72 cache-line-size = <32>;
73 cache-size = <0x40000>; // L2, 256K 73 cache-size = <0x40000>; // L2, 256K
diff --git a/arch/powerpc/configs/pseries_defconfig b/arch/powerpc/configs/pseries_defconfig
index 61b100849715..f1889abb89b1 100644
--- a/arch/powerpc/configs/pseries_defconfig
+++ b/arch/powerpc/configs/pseries_defconfig
@@ -95,7 +95,7 @@ CONFIG_CGROUP_CPUACCT=y
95CONFIG_SYSFS_DEPRECATED=y 95CONFIG_SYSFS_DEPRECATED=y
96CONFIG_SYSFS_DEPRECATED_V2=y 96CONFIG_SYSFS_DEPRECATED_V2=y
97CONFIG_PROC_PID_CPUSET=y 97CONFIG_PROC_PID_CPUSET=y
98# CONFIG_RELAY is not set 98CONFIG_RELAY=y
99CONFIG_NAMESPACES=y 99CONFIG_NAMESPACES=y
100# CONFIG_UTS_NS is not set 100# CONFIG_UTS_NS is not set
101# CONFIG_IPC_NS is not set 101# CONFIG_IPC_NS is not set
diff --git a/arch/powerpc/include/asm/lppaca.h b/arch/powerpc/include/asm/lppaca.h
index 68235f7e4a8f..d2a65e8ca6ae 100644
--- a/arch/powerpc/include/asm/lppaca.h
+++ b/arch/powerpc/include/asm/lppaca.h
@@ -125,7 +125,7 @@ struct lppaca {
125 // NOTE: This value will ALWAYS be zero for dedicated processors and 125 // NOTE: This value will ALWAYS be zero for dedicated processors and
126 // will NEVER be zero for shared processors (ie, initialized to a 1). 126 // will NEVER be zero for shared processors (ie, initialized to a 1).
127 volatile u32 yield_count; // PLIC increments each dispatchx00-x03 127 volatile u32 yield_count; // PLIC increments each dispatchx00-x03
128 u32 reserved6; 128 volatile u32 dispersion_count; // dispatch changed phys cpu x04-x07
129 volatile u64 cmo_faults; // CMO page fault count x08-x0F 129 volatile u64 cmo_faults; // CMO page fault count x08-x0F
130 volatile u64 cmo_fault_time; // CMO page fault time x10-x17 130 volatile u64 cmo_fault_time; // CMO page fault time x10-x17
131 u8 reserved7[104]; // Reserved x18-x7F 131 u8 reserved7[104]; // Reserved x18-x7F
diff --git a/arch/powerpc/include/asm/mpic.h b/arch/powerpc/include/asm/mpic.h
index c2ccca53b991..a002682f3a6d 100644
--- a/arch/powerpc/include/asm/mpic.h
+++ b/arch/powerpc/include/asm/mpic.h
@@ -22,6 +22,14 @@
22#define MPIC_GREG_FEATURE_1 0x00010 22#define MPIC_GREG_FEATURE_1 0x00010
23#define MPIC_GREG_GLOBAL_CONF_0 0x00020 23#define MPIC_GREG_GLOBAL_CONF_0 0x00020
24#define MPIC_GREG_GCONF_RESET 0x80000000 24#define MPIC_GREG_GCONF_RESET 0x80000000
25/* On the FSL mpic implementations the Mode field is expand to be
26 * 2 bits wide:
27 * 0b00 = pass through (interrupts routed to IRQ0)
28 * 0b01 = Mixed mode
29 * 0b10 = reserved
30 * 0b11 = External proxy / coreint
31 */
32#define MPIC_GREG_GCONF_COREINT 0x60000000
25#define MPIC_GREG_GCONF_8259_PTHROU_DIS 0x20000000 33#define MPIC_GREG_GCONF_8259_PTHROU_DIS 0x20000000
26#define MPIC_GREG_GCONF_NO_BIAS 0x10000000 34#define MPIC_GREG_GCONF_NO_BIAS 0x10000000
27#define MPIC_GREG_GCONF_BASE_MASK 0x000fffff 35#define MPIC_GREG_GCONF_BASE_MASK 0x000fffff
@@ -357,6 +365,8 @@ struct mpic
357#define MPIC_BROKEN_FRR_NIRQS 0x00000800 365#define MPIC_BROKEN_FRR_NIRQS 0x00000800
358/* Destination only supports a single CPU at a time */ 366/* Destination only supports a single CPU at a time */
359#define MPIC_SINGLE_DEST_CPU 0x00001000 367#define MPIC_SINGLE_DEST_CPU 0x00001000
368/* Enable CoreInt delivery of interrupts */
369#define MPIC_ENABLE_COREINT 0x00002000
360 370
361/* MPIC HW modification ID */ 371/* MPIC HW modification ID */
362#define MPIC_REGSET_MASK 0xf0000000 372#define MPIC_REGSET_MASK 0xf0000000
@@ -470,6 +480,8 @@ extern void mpic_end_irq(unsigned int irq);
470extern unsigned int mpic_get_one_irq(struct mpic *mpic); 480extern unsigned int mpic_get_one_irq(struct mpic *mpic);
471/* This one gets from the primary mpic */ 481/* This one gets from the primary mpic */
472extern unsigned int mpic_get_irq(void); 482extern unsigned int mpic_get_irq(void);
483/* This one gets from the primary mpic via CoreInt*/
484extern unsigned int mpic_get_coreint_irq(void);
473/* Fetch Machine Check interrupt from primary mpic */ 485/* Fetch Machine Check interrupt from primary mpic */
474extern unsigned int mpic_get_mcirq(void); 486extern unsigned int mpic_get_mcirq(void);
475 487
diff --git a/arch/powerpc/include/asm/ps3fb.h b/arch/powerpc/include/asm/ps3fb.h
index 90dbefb8cfc4..e7233a849680 100644
--- a/arch/powerpc/include/asm/ps3fb.h
+++ b/arch/powerpc/include/asm/ps3fb.h
@@ -21,7 +21,6 @@
21 21
22#include <linux/types.h> 22#include <linux/types.h>
23#include <linux/ioctl.h> 23#include <linux/ioctl.h>
24#include <linux/types.h>
25 24
26/* ioctl */ 25/* ioctl */
27#define PS3FB_IOCTL_SETMODE _IOW('r', 1, int) /* set video mode */ 26#define PS3FB_IOCTL_SETMODE _IOW('r', 1, int) /* set video mode */
diff --git a/arch/powerpc/include/asm/pte-common.h b/arch/powerpc/include/asm/pte-common.h
index d9740e886801..a7e210b6b48c 100644
--- a/arch/powerpc/include/asm/pte-common.h
+++ b/arch/powerpc/include/asm/pte-common.h
@@ -151,9 +151,11 @@ extern unsigned long bad_call_to_PMD_PAGE_SIZE(void);
151 _PAGE_NO_CACHE) 151 _PAGE_NO_CACHE)
152#define PAGE_KERNEL_NCG __pgprot(_PAGE_BASE_NC | _PAGE_KERNEL_RW | \ 152#define PAGE_KERNEL_NCG __pgprot(_PAGE_BASE_NC | _PAGE_KERNEL_RW | \
153 _PAGE_NO_CACHE | _PAGE_GUARDED) 153 _PAGE_NO_CACHE | _PAGE_GUARDED)
154#define PAGE_KERNEL_X __pgprot(_PAGE_BASE | _PAGE_KERNEL_RW | _PAGE_EXEC) 154#define PAGE_KERNEL_X __pgprot(_PAGE_BASE | _PAGE_KERNEL_RW | _PAGE_EXEC | \
155 _PAGE_HWEXEC)
155#define PAGE_KERNEL_RO __pgprot(_PAGE_BASE | _PAGE_KERNEL_RO) 156#define PAGE_KERNEL_RO __pgprot(_PAGE_BASE | _PAGE_KERNEL_RO)
156#define PAGE_KERNEL_ROX __pgprot(_PAGE_BASE | _PAGE_KERNEL_RO | _PAGE_EXEC) 157#define PAGE_KERNEL_ROX __pgprot(_PAGE_BASE | _PAGE_KERNEL_RO | _PAGE_EXEC | \
158 _PAGE_HWEXEC)
157 159
158/* Protection used for kernel text. We want the debuggers to be able to 160/* Protection used for kernel text. We want the debuggers to be able to
159 * set breakpoints anywhere, so don't write protect the kernel text 161 * set breakpoints anywhere, so don't write protect the kernel text
diff --git a/arch/powerpc/include/asm/reg.h b/arch/powerpc/include/asm/reg.h
index c9ff1ec97479..e8018d540e87 100644
--- a/arch/powerpc/include/asm/reg.h
+++ b/arch/powerpc/include/asm/reg.h
@@ -143,6 +143,36 @@
143#define FPSCR_NI 0x00000004 /* FPU non IEEE-Mode */ 143#define FPSCR_NI 0x00000004 /* FPU non IEEE-Mode */
144#define FPSCR_RN 0x00000003 /* FPU rounding control */ 144#define FPSCR_RN 0x00000003 /* FPU rounding control */
145 145
146/* Bit definitions for SPEFSCR. */
147#define SPEFSCR_SOVH 0x80000000 /* Summary integer overflow high */
148#define SPEFSCR_OVH 0x40000000 /* Integer overflow high */
149#define SPEFSCR_FGH 0x20000000 /* Embedded FP guard bit high */
150#define SPEFSCR_FXH 0x10000000 /* Embedded FP sticky bit high */
151#define SPEFSCR_FINVH 0x08000000 /* Embedded FP invalid operation high */
152#define SPEFSCR_FDBZH 0x04000000 /* Embedded FP div by zero high */
153#define SPEFSCR_FUNFH 0x02000000 /* Embedded FP underflow high */
154#define SPEFSCR_FOVFH 0x01000000 /* Embedded FP overflow high */
155#define SPEFSCR_FINXS 0x00200000 /* Embedded FP inexact sticky */
156#define SPEFSCR_FINVS 0x00100000 /* Embedded FP invalid op. sticky */
157#define SPEFSCR_FDBZS 0x00080000 /* Embedded FP div by zero sticky */
158#define SPEFSCR_FUNFS 0x00040000 /* Embedded FP underflow sticky */
159#define SPEFSCR_FOVFS 0x00020000 /* Embedded FP overflow sticky */
160#define SPEFSCR_MODE 0x00010000 /* Embedded FP mode */
161#define SPEFSCR_SOV 0x00008000 /* Integer summary overflow */
162#define SPEFSCR_OV 0x00004000 /* Integer overflow */
163#define SPEFSCR_FG 0x00002000 /* Embedded FP guard bit */
164#define SPEFSCR_FX 0x00001000 /* Embedded FP sticky bit */
165#define SPEFSCR_FINV 0x00000800 /* Embedded FP invalid operation */
166#define SPEFSCR_FDBZ 0x00000400 /* Embedded FP div by zero */
167#define SPEFSCR_FUNF 0x00000200 /* Embedded FP underflow */
168#define SPEFSCR_FOVF 0x00000100 /* Embedded FP overflow */
169#define SPEFSCR_FINXE 0x00000040 /* Embedded FP inexact enable */
170#define SPEFSCR_FINVE 0x00000020 /* Embedded FP invalid op. enable */
171#define SPEFSCR_FDBZE 0x00000010 /* Embedded FP div by zero enable */
172#define SPEFSCR_FUNFE 0x00000008 /* Embedded FP underflow enable */
173#define SPEFSCR_FOVFE 0x00000004 /* Embedded FP overflow enable */
174#define SPEFSCR_FRMC 0x00000003 /* Embedded FP rounding mode control */
175
146/* Special Purpose Registers (SPRNs)*/ 176/* Special Purpose Registers (SPRNs)*/
147#define SPRN_CTR 0x009 /* Count Register */ 177#define SPRN_CTR 0x009 /* Count Register */
148#define SPRN_DSCR 0x11 178#define SPRN_DSCR 0x11
diff --git a/arch/powerpc/include/asm/reg_booke.h b/arch/powerpc/include/asm/reg_booke.h
index a56f4d61aa72..601ddbc46002 100644
--- a/arch/powerpc/include/asm/reg_booke.h
+++ b/arch/powerpc/include/asm/reg_booke.h
@@ -423,36 +423,6 @@
423#define SGR_NORMAL 0 /* Speculative fetching allowed. */ 423#define SGR_NORMAL 0 /* Speculative fetching allowed. */
424#define SGR_GUARDED 1 /* Speculative fetching disallowed. */ 424#define SGR_GUARDED 1 /* Speculative fetching disallowed. */
425 425
426/* Bit definitions for SPEFSCR. */
427#define SPEFSCR_SOVH 0x80000000 /* Summary integer overflow high */
428#define SPEFSCR_OVH 0x40000000 /* Integer overflow high */
429#define SPEFSCR_FGH 0x20000000 /* Embedded FP guard bit high */
430#define SPEFSCR_FXH 0x10000000 /* Embedded FP sticky bit high */
431#define SPEFSCR_FINVH 0x08000000 /* Embedded FP invalid operation high */
432#define SPEFSCR_FDBZH 0x04000000 /* Embedded FP div by zero high */
433#define SPEFSCR_FUNFH 0x02000000 /* Embedded FP underflow high */
434#define SPEFSCR_FOVFH 0x01000000 /* Embedded FP overflow high */
435#define SPEFSCR_FINXS 0x00200000 /* Embedded FP inexact sticky */
436#define SPEFSCR_FINVS 0x00100000 /* Embedded FP invalid op. sticky */
437#define SPEFSCR_FDBZS 0x00080000 /* Embedded FP div by zero sticky */
438#define SPEFSCR_FUNFS 0x00040000 /* Embedded FP underflow sticky */
439#define SPEFSCR_FOVFS 0x00020000 /* Embedded FP overflow sticky */
440#define SPEFSCR_MODE 0x00010000 /* Embedded FP mode */
441#define SPEFSCR_SOV 0x00008000 /* Integer summary overflow */
442#define SPEFSCR_OV 0x00004000 /* Integer overflow */
443#define SPEFSCR_FG 0x00002000 /* Embedded FP guard bit */
444#define SPEFSCR_FX 0x00001000 /* Embedded FP sticky bit */
445#define SPEFSCR_FINV 0x00000800 /* Embedded FP invalid operation */
446#define SPEFSCR_FDBZ 0x00000400 /* Embedded FP div by zero */
447#define SPEFSCR_FUNF 0x00000200 /* Embedded FP underflow */
448#define SPEFSCR_FOVF 0x00000100 /* Embedded FP overflow */
449#define SPEFSCR_FINXE 0x00000040 /* Embedded FP inexact enable */
450#define SPEFSCR_FINVE 0x00000020 /* Embedded FP invalid op. enable */
451#define SPEFSCR_FDBZE 0x00000010 /* Embedded FP div by zero enable */
452#define SPEFSCR_FUNFE 0x00000008 /* Embedded FP underflow enable */
453#define SPEFSCR_FOVFE 0x00000004 /* Embedded FP overflow enable */
454#define SPEFSCR_FRMC 0x00000003 /* Embedded FP rounding mode control */
455
456/* 426/*
457 * The IBM-403 is an even more odd special case, as it is much 427 * The IBM-403 is an even more odd special case, as it is much
458 * older than the IBM-405 series. We put these down here incase someone 428 * older than the IBM-405 series. We put these down here incase someone
diff --git a/arch/powerpc/include/asm/rtas.h b/arch/powerpc/include/asm/rtas.h
index 0aa0315fb7e8..01c12339b304 100644
--- a/arch/powerpc/include/asm/rtas.h
+++ b/arch/powerpc/include/asm/rtas.h
@@ -68,7 +68,8 @@ struct rtas_t {
68#define RTAS_EPOW_WARNING 0x40000000 /* set bit 1 */ 68#define RTAS_EPOW_WARNING 0x40000000 /* set bit 1 */
69#define RTAS_POWERMGM_EVENTS 0x20000000 /* set bit 2 */ 69#define RTAS_POWERMGM_EVENTS 0x20000000 /* set bit 2 */
70#define RTAS_HOTPLUG_EVENTS 0x10000000 /* set bit 3 */ 70#define RTAS_HOTPLUG_EVENTS 0x10000000 /* set bit 3 */
71#define RTAS_EVENT_SCAN_ALL_EVENTS 0xf0000000 71#define RTAS_IO_EVENTS 0x08000000 /* set bit 4 */
72#define RTAS_EVENT_SCAN_ALL_EVENTS 0xffffffff
72 73
73/* RTAS event severity */ 74/* RTAS event severity */
74#define RTAS_SEVERITY_FATAL 0x5 75#define RTAS_SEVERITY_FATAL 0x5
diff --git a/arch/powerpc/include/asm/sfp-machine.h b/arch/powerpc/include/asm/sfp-machine.h
index 3d9f831c3c55..3a7a67a0d006 100644
--- a/arch/powerpc/include/asm/sfp-machine.h
+++ b/arch/powerpc/include/asm/sfp-machine.h
@@ -29,9 +29,9 @@
29 29
30/* basic word size definitions */ 30/* basic word size definitions */
31#define _FP_W_TYPE_SIZE 32 31#define _FP_W_TYPE_SIZE 32
32#define _FP_W_TYPE unsigned long 32#define _FP_W_TYPE unsigned int
33#define _FP_WS_TYPE signed long 33#define _FP_WS_TYPE signed int
34#define _FP_I_TYPE long 34#define _FP_I_TYPE int
35 35
36#define __ll_B ((UWtype) 1 << (W_TYPE_SIZE / 2)) 36#define __ll_B ((UWtype) 1 << (W_TYPE_SIZE / 2))
37#define __ll_lowpart(t) ((UWtype) (t) & (__ll_B - 1)) 37#define __ll_lowpart(t) ((UWtype) (t) & (__ll_B - 1))
diff --git a/arch/powerpc/include/asm/systbl.h b/arch/powerpc/include/asm/systbl.h
index fe166491e9dc..d98a30dfd41c 100644
--- a/arch/powerpc/include/asm/systbl.h
+++ b/arch/powerpc/include/asm/systbl.h
@@ -322,3 +322,6 @@ SYSCALL_SPU(epoll_create1)
322SYSCALL_SPU(dup3) 322SYSCALL_SPU(dup3)
323SYSCALL_SPU(pipe2) 323SYSCALL_SPU(pipe2)
324SYSCALL(inotify_init1) 324SYSCALL(inotify_init1)
325SYSCALL(ni_syscall)
326COMPAT_SYS_SPU(preadv)
327COMPAT_SYS_SPU(pwritev)
diff --git a/arch/powerpc/include/asm/unistd.h b/arch/powerpc/include/asm/unistd.h
index e07d0c76ed77..3f06f8ec81c5 100644
--- a/arch/powerpc/include/asm/unistd.h
+++ b/arch/powerpc/include/asm/unistd.h
@@ -341,10 +341,12 @@
341#define __NR_dup3 316 341#define __NR_dup3 316
342#define __NR_pipe2 317 342#define __NR_pipe2 317
343#define __NR_inotify_init1 318 343#define __NR_inotify_init1 318
344#define __NR_preadv 320
345#define __NR_pwritev 321
344 346
345#ifdef __KERNEL__ 347#ifdef __KERNEL__
346 348
347#define __NR_syscalls 319 349#define __NR_syscalls 322
348 350
349#define __NR__exit __NR_exit 351#define __NR__exit __NR_exit
350#define NR_syscalls __NR_syscalls 352#define NR_syscalls __NR_syscalls
diff --git a/arch/powerpc/kernel/fpu.S b/arch/powerpc/kernel/fpu.S
index a088c064ae40..2436df33c6f4 100644
--- a/arch/powerpc/kernel/fpu.S
+++ b/arch/powerpc/kernel/fpu.S
@@ -145,6 +145,11 @@ END_FTR_SECTION_IFSET(CPU_FTR_VSX)
145 beq 1f 145 beq 1f
146 PPC_LL r4,_MSR-STACK_FRAME_OVERHEAD(r5) 146 PPC_LL r4,_MSR-STACK_FRAME_OVERHEAD(r5)
147 li r3,MSR_FP|MSR_FE0|MSR_FE1 147 li r3,MSR_FP|MSR_FE0|MSR_FE1
148#ifdef CONFIG_VSX
149BEGIN_FTR_SECTION
150 oris r3,r3,MSR_VSX@h
151END_FTR_SECTION_IFSET(CPU_FTR_VSX)
152#endif
148 andc r4,r4,r3 /* disable FP for previous task */ 153 andc r4,r4,r3 /* disable FP for previous task */
149 PPC_STL r4,_MSR-STACK_FRAME_OVERHEAD(r5) 154 PPC_STL r4,_MSR-STACK_FRAME_OVERHEAD(r5)
1501: 1551:
diff --git a/arch/powerpc/kernel/ftrace.c b/arch/powerpc/kernel/ftrace.c
index 5455943f16aa..70e2a736be1f 100644
--- a/arch/powerpc/kernel/ftrace.c
+++ b/arch/powerpc/kernel/ftrace.c
@@ -293,7 +293,7 @@ __ftrace_make_nop(struct module *mod,
293 if (tramp & 0x8000) 293 if (tramp & 0x8000)
294 tramp -= 0x10000; 294 tramp -= 0x10000;
295 295
296 pr_debug(" %x ", tramp); 296 pr_debug(" %lx ", tramp);
297 297
298 if (tramp != addr) { 298 if (tramp != addr) {
299 printk(KERN_ERR 299 printk(KERN_ERR
@@ -564,7 +564,7 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr)
564 if (unlikely(atomic_read(&current->tracing_graph_pause))) 564 if (unlikely(atomic_read(&current->tracing_graph_pause)))
565 return; 565 return;
566 566
567#if CONFIG_PPC64 567#ifdef CONFIG_PPC64
568 /* non core kernel code needs to save and restore the TOC */ 568 /* non core kernel code needs to save and restore the TOC */
569 if (REGION_ID(self_addr) != KERNEL_REGION_ID) 569 if (REGION_ID(self_addr) != KERNEL_REGION_ID)
570 return_hooker = (unsigned long)&mod_return_to_handler; 570 return_hooker = (unsigned long)&mod_return_to_handler;
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index 5576147e57b6..8c1a4966867e 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -672,11 +672,13 @@ unsigned int irq_create_mapping(struct irq_host *host,
672 return NO_IRQ; 672 return NO_IRQ;
673 } 673 }
674 } 674 }
675 pr_debug("irq: -> obtained virq %d\n", virq);
676 675
677 if (irq_setup_virq(host, virq, hwirq)) 676 if (irq_setup_virq(host, virq, hwirq))
678 return NO_IRQ; 677 return NO_IRQ;
679 678
679 printk(KERN_DEBUG "irq: irq %lu on host %s mapped to virtual irq %u\n",
680 hwirq, host->of_node ? host->of_node->full_name : "null", virq);
681
680 return virq; 682 return virq;
681} 683}
682EXPORT_SYMBOL_GPL(irq_create_mapping); 684EXPORT_SYMBOL_GPL(irq_create_mapping);
diff --git a/arch/powerpc/kernel/lparcfg.c b/arch/powerpc/kernel/lparcfg.c
index 182e0f642f36..78b3f7840ade 100644
--- a/arch/powerpc/kernel/lparcfg.c
+++ b/arch/powerpc/kernel/lparcfg.c
@@ -434,6 +434,21 @@ static void pseries_cmo_data(struct seq_file *m)
434 seq_printf(m, "cmo_page_size=%lu\n", cmo_get_page_size()); 434 seq_printf(m, "cmo_page_size=%lu\n", cmo_get_page_size());
435} 435}
436 436
437static void splpar_dispatch_data(struct seq_file *m)
438{
439 int cpu;
440 unsigned long dispatches = 0;
441 unsigned long dispatch_dispersions = 0;
442
443 for_each_possible_cpu(cpu) {
444 dispatches += lppaca[cpu].yield_count;
445 dispatch_dispersions += lppaca[cpu].dispersion_count;
446 }
447
448 seq_printf(m, "dispatches=%lu\n", dispatches);
449 seq_printf(m, "dispatch_dispersions=%lu\n", dispatch_dispersions);
450}
451
437static int pseries_lparcfg_data(struct seq_file *m, void *v) 452static int pseries_lparcfg_data(struct seq_file *m, void *v)
438{ 453{
439 int partition_potential_processors; 454 int partition_potential_processors;
@@ -460,6 +475,7 @@ static int pseries_lparcfg_data(struct seq_file *m, void *v)
460 parse_ppp_data(m); 475 parse_ppp_data(m);
461 parse_mpp_data(m); 476 parse_mpp_data(m);
462 pseries_cmo_data(m); 477 pseries_cmo_data(m);
478 splpar_dispatch_data(m);
463 479
464 seq_printf(m, "purr=%ld\n", get_purr()); 480 seq_printf(m, "purr=%ld\n", get_purr());
465 } else { /* non SPLPAR case */ 481 } else { /* non SPLPAR case */
diff --git a/arch/powerpc/kernel/misc_64.S b/arch/powerpc/kernel/misc_64.S
index 3053fe5c62f2..b9530b2395a2 100644
--- a/arch/powerpc/kernel/misc_64.S
+++ b/arch/powerpc/kernel/misc_64.S
@@ -495,7 +495,15 @@ _GLOBAL(giveup_altivec)
495 stvx vr0,r4,r3 495 stvx vr0,r4,r3
496 beq 1f 496 beq 1f
497 ld r4,_MSR-STACK_FRAME_OVERHEAD(r5) 497 ld r4,_MSR-STACK_FRAME_OVERHEAD(r5)
498#ifdef CONFIG_VSX
499BEGIN_FTR_SECTION
500 lis r3,(MSR_VEC|MSR_VSX)@h
501FTR_SECTION_ELSE
502 lis r3,MSR_VEC@h
503ALT_FTR_SECTION_END_IFSET(CPU_FTR_VSX)
504#else
498 lis r3,MSR_VEC@h 505 lis r3,MSR_VEC@h
506#endif
499 andc r4,r4,r3 /* disable FP for previous task */ 507 andc r4,r4,r3 /* disable FP for previous task */
500 std r4,_MSR-STACK_FRAME_OVERHEAD(r5) 508 std r4,_MSR-STACK_FRAME_OVERHEAD(r5)
5011: 5091:
diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c
index 2e026c0407d4..2f0e64b53642 100644
--- a/arch/powerpc/kernel/prom_init.c
+++ b/arch/powerpc/kernel/prom_init.c
@@ -614,7 +614,7 @@ static unsigned char ibm_architecture_vec[] = {
614 W(0xffffffff), /* virt_base */ 614 W(0xffffffff), /* virt_base */
615 W(0xffffffff), /* virt_size */ 615 W(0xffffffff), /* virt_size */
616 W(0xffffffff), /* load_base */ 616 W(0xffffffff), /* load_base */
617 W(64), /* 128MB min RMA */ 617 W(64), /* 64MB min RMA */
618 W(0xffffffff), /* full client load */ 618 W(0xffffffff), /* full client load */
619 0, /* min RMA percentage of total RAM */ 619 0, /* min RMA percentage of total RAM */
620 48, /* max log_2(hash table size) */ 620 48, /* max log_2(hash table size) */
@@ -732,15 +732,17 @@ static void __init prom_send_capabilities(void)
732 root = call_prom("open", 1, 1, ADDR("/")); 732 root = call_prom("open", 1, 1, ADDR("/"));
733 if (root != 0) { 733 if (root != 0) {
734 /* try calling the ibm,client-architecture-support method */ 734 /* try calling the ibm,client-architecture-support method */
735 prom_printf("Calling ibm,client-architecture...");
735 if (call_prom_ret("call-method", 3, 2, &ret, 736 if (call_prom_ret("call-method", 3, 2, &ret,
736 ADDR("ibm,client-architecture-support"), 737 ADDR("ibm,client-architecture-support"),
737 root, 738 root,
738 ADDR(ibm_architecture_vec)) == 0) { 739 ADDR(ibm_architecture_vec)) == 0) {
739 /* the call exists... */ 740 /* the call exists... */
740 if (ret) 741 if (ret)
741 prom_printf("WARNING: ibm,client-architecture" 742 prom_printf("\nWARNING: ibm,client-architecture"
742 "-support call FAILED!\n"); 743 "-support call FAILED!\n");
743 call_prom("close", 1, 0, root); 744 call_prom("close", 1, 0, root);
745 prom_printf(" done\n");
744 return; 746 return;
745 } 747 }
746 call_prom("close", 1, 0, root); 748 call_prom("close", 1, 0, root);
@@ -1083,7 +1085,7 @@ static void __init prom_instantiate_rtas(void)
1083 return; 1085 return;
1084 } 1086 }
1085 1087
1086 prom_printf("instantiating rtas at 0x%x ...", base); 1088 prom_printf("instantiating rtas at 0x%x...", base);
1087 1089
1088 if (call_prom_ret("call-method", 3, 2, &entry, 1090 if (call_prom_ret("call-method", 3, 2, &entry,
1089 ADDR("instantiate-rtas"), 1091 ADDR("instantiate-rtas"),
@@ -1495,7 +1497,7 @@ static int __init prom_find_machine_type(void)
1495 return PLATFORM_GENERIC; 1497 return PLATFORM_GENERIC;
1496 x = prom_getproplen(rtas, "ibm,hypertas-functions"); 1498 x = prom_getproplen(rtas, "ibm,hypertas-functions");
1497 if (x != PROM_ERROR) { 1499 if (x != PROM_ERROR) {
1498 prom_printf("Hypertas detected, assuming LPAR !\n"); 1500 prom_debug("Hypertas detected, assuming LPAR !\n");
1499 return PLATFORM_PSERIES_LPAR; 1501 return PLATFORM_PSERIES_LPAR;
1500 } 1502 }
1501 return PLATFORM_PSERIES; 1503 return PLATFORM_PSERIES;
@@ -1544,7 +1546,7 @@ static void __init prom_check_displays(void)
1544 }; 1546 };
1545 const unsigned char *clut; 1547 const unsigned char *clut;
1546 1548
1547 prom_printf("Looking for displays\n"); 1549 prom_debug("Looking for displays\n");
1548 for (node = 0; prom_next_node(&node); ) { 1550 for (node = 0; prom_next_node(&node); ) {
1549 memset(type, 0, sizeof(type)); 1551 memset(type, 0, sizeof(type));
1550 prom_getprop(node, "device_type", type, sizeof(type)); 1552 prom_getprop(node, "device_type", type, sizeof(type));
@@ -1562,7 +1564,7 @@ static void __init prom_check_displays(void)
1562 if (call_prom("package-to-path", 3, 1, node, path, 1564 if (call_prom("package-to-path", 3, 1, node, path,
1563 PROM_SCRATCH_SIZE-10) == PROM_ERROR) 1565 PROM_SCRATCH_SIZE-10) == PROM_ERROR)
1564 continue; 1566 continue;
1565 prom_printf("found display : %s, opening ... ", path); 1567 prom_printf("found display : %s, opening... ", path);
1566 1568
1567 ih = call_prom("open", 1, 1, path); 1569 ih = call_prom("open", 1, 1, path);
1568 if (ih == 0) { 1570 if (ih == 0) {
@@ -2387,7 +2389,7 @@ unsigned long __init prom_init(unsigned long r3, unsigned long r4,
2387 /* 2389 /*
2388 * Now finally create the flattened device-tree 2390 * Now finally create the flattened device-tree
2389 */ 2391 */
2390 prom_printf("copying OF device tree ...\n"); 2392 prom_printf("copying OF device tree...\n");
2391 flatten_device_tree(); 2393 flatten_device_tree();
2392 2394
2393 /* 2395 /*
@@ -2402,7 +2404,7 @@ unsigned long __init prom_init(unsigned long r3, unsigned long r4,
2402 * Call OF "quiesce" method to shut down pending DMA's from 2404 * Call OF "quiesce" method to shut down pending DMA's from
2403 * devices etc... 2405 * devices etc...
2404 */ 2406 */
2405 prom_printf("Calling quiesce ...\n"); 2407 prom_printf("Calling quiesce...\n");
2406 call_prom("quiesce", 0, 0); 2408 call_prom("quiesce", 0, 0);
2407 2409
2408 /* 2410 /*
diff --git a/arch/powerpc/kernel/ptrace32.c b/arch/powerpc/kernel/ptrace32.c
index 197d49c790ad..297632cba047 100644
--- a/arch/powerpc/kernel/ptrace32.c
+++ b/arch/powerpc/kernel/ptrace32.c
@@ -67,7 +67,8 @@ static long compat_ptrace_old(struct task_struct *child, long request,
67/* Macros to workout the correct index for the FPR in the thread struct */ 67/* Macros to workout the correct index for the FPR in the thread struct */
68#define FPRNUMBER(i) (((i) - PT_FPR0) >> 1) 68#define FPRNUMBER(i) (((i) - PT_FPR0) >> 1)
69#define FPRHALF(i) (((i) - PT_FPR0) & 1) 69#define FPRHALF(i) (((i) - PT_FPR0) & 1)
70#define FPRINDEX(i) TS_FPRWIDTH * FPRNUMBER(i) + FPRHALF(i) 70#define FPRINDEX(i) TS_FPRWIDTH * FPRNUMBER(i) * 2 + FPRHALF(i)
71#define FPRINDEX_3264(i) (TS_FPRWIDTH * ((i) - PT_FPR0))
71 72
72long compat_arch_ptrace(struct task_struct *child, compat_long_t request, 73long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
73 compat_ulong_t caddr, compat_ulong_t cdata) 74 compat_ulong_t caddr, compat_ulong_t cdata)
@@ -168,8 +169,9 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
168 CHECK_FULL_REGS(child->thread.regs); 169 CHECK_FULL_REGS(child->thread.regs);
169 if (numReg >= PT_FPR0) { 170 if (numReg >= PT_FPR0) {
170 flush_fp_to_thread(child); 171 flush_fp_to_thread(child);
171 tmp = ((unsigned long int *)child->thread.fpr) 172 /* get 64 bit FPR */
172 [FPRINDEX(numReg)]; 173 tmp = ((u64 *)child->thread.fpr)
174 [FPRINDEX_3264(numReg)];
173 } else { /* register within PT_REGS struct */ 175 } else { /* register within PT_REGS struct */
174 tmp = ptrace_get_reg(child, numReg); 176 tmp = ptrace_get_reg(child, numReg);
175 } 177 }
@@ -262,8 +264,13 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
262 freg = (freg & 0xfffffffful) | (data << 32); 264 freg = (freg & 0xfffffffful) | (data << 32);
263 ret = ptrace_put_reg(child, numReg, freg); 265 ret = ptrace_put_reg(child, numReg, freg);
264 } else { 266 } else {
267 u64 *tmp;
265 flush_fp_to_thread(child); 268 flush_fp_to_thread(child);
266 ((unsigned int *)child->thread.regs)[index] = data; 269 /* get 64 bit FPR ... */
270 tmp = &(((u64 *)child->thread.fpr)
271 [FPRINDEX_3264(numReg)]);
272 /* ... write the 32 bit part we want */
273 ((u32 *)tmp)[index % 2] = data;
267 ret = 0; 274 ret = 0;
268 } 275 }
269 break; 276 break;
diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c
index 9774f9fed96e..02fed27af7f6 100644
--- a/arch/powerpc/kernel/setup-common.c
+++ b/arch/powerpc/kernel/setup-common.c
@@ -36,7 +36,6 @@
36#include <linux/percpu.h> 36#include <linux/percpu.h>
37#include <linux/lmb.h> 37#include <linux/lmb.h>
38#include <linux/of_platform.h> 38#include <linux/of_platform.h>
39#include <linux/platform_device.h>
40#include <asm/io.h> 39#include <asm/io.h>
41#include <asm/prom.h> 40#include <asm/prom.h>
42#include <asm/processor.h> 41#include <asm/processor.h>
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c
index 532e205303a2..21b956701596 100644
--- a/arch/powerpc/sysdev/mpic.c
+++ b/arch/powerpc/sysdev/mpic.c
@@ -1170,6 +1170,12 @@ struct mpic * __init mpic_alloc(struct device_node *node,
1170 mb(); 1170 mb();
1171 } 1171 }
1172 1172
1173 /* CoreInt */
1174 if (flags & MPIC_ENABLE_COREINT)
1175 mpic_write(mpic->gregs, MPIC_INFO(GREG_GLOBAL_CONF_0),
1176 mpic_read(mpic->gregs, MPIC_INFO(GREG_GLOBAL_CONF_0))
1177 | MPIC_GREG_GCONF_COREINT);
1178
1173 if (flags & MPIC_ENABLE_MCK) 1179 if (flags & MPIC_ENABLE_MCK)
1174 mpic_write(mpic->gregs, MPIC_INFO(GREG_GLOBAL_CONF_0), 1180 mpic_write(mpic->gregs, MPIC_INFO(GREG_GLOBAL_CONF_0),
1175 mpic_read(mpic->gregs, MPIC_INFO(GREG_GLOBAL_CONF_0)) 1181 mpic_read(mpic->gregs, MPIC_INFO(GREG_GLOBAL_CONF_0))
@@ -1525,6 +1531,34 @@ unsigned int mpic_get_irq(void)
1525 return mpic_get_one_irq(mpic); 1531 return mpic_get_one_irq(mpic);
1526} 1532}
1527 1533
1534unsigned int mpic_get_coreint_irq(void)
1535{
1536#ifdef CONFIG_BOOKE
1537 struct mpic *mpic = mpic_primary;
1538 u32 src;
1539
1540 BUG_ON(mpic == NULL);
1541
1542 src = mfspr(SPRN_EPR);
1543
1544 if (unlikely(src == mpic->spurious_vec)) {
1545 if (mpic->flags & MPIC_SPV_EOI)
1546 mpic_eoi(mpic);
1547 return NO_IRQ;
1548 }
1549 if (unlikely(mpic->protected && test_bit(src, mpic->protected))) {
1550 if (printk_ratelimit())
1551 printk(KERN_WARNING "%s: Got protected source %d !\n",
1552 mpic->name, (int)src);
1553 return NO_IRQ;
1554 }
1555
1556 return irq_linear_revmap(mpic->irqhost, src);
1557#else
1558 return NO_IRQ;
1559#endif
1560}
1561
1528unsigned int mpic_get_mcirq(void) 1562unsigned int mpic_get_mcirq(void)
1529{ 1563{
1530 struct mpic *mpic = mpic_primary; 1564 struct mpic *mpic = mpic_primary;