diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-14 23:00:28 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-14 23:00:28 -0500 |
commit | 5393f780277165f282a37ed82dd878159ec9dad5 (patch) | |
tree | 00df86ebd8b598b5db3c4fe4612c6614409caf94 /arch | |
parent | bca268565fd18f0b36ab8fff6e1623d8dffae2b1 (diff) | |
parent | ea0105ea3881b409e362451690184af494bce6e3 (diff) |
Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc
* 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc: (29 commits)
powerpc/83xx: Move mcu_mpc8349emitx driver out of drivers/i2c/chips/
powerpc/83xx: Make serial ports work on MPC8315E-RDB w/ FSL U-Boots
powerpc/e500mc: Doorbells need to be taken w/exceptions disabled
powerpc: Enable PS3 options and QPACE in ppc64_defconfig
powerpc/powermac: Fix occasional SMP boot failure
powerpc/cacheinfo: Rename cache_dir per-cpu variable
hvc_console: Use kzalloc() instead of kmalloc() + memset()
hvc_console: Do not set low_latency when using interrupts
hvc_console: Call free_irq() only if request_irq() was successful
hvc_console: Change an mb() to smp_mb() and add some comments
powerpc: Cleanup from l64 to ll64 change: drivers/net
powerpc: Cleanup from l64 to ll64 change: drivers/char
powerpc: Cleanup from l64 to ll64 change: arch code
powerpc: Change u64/s64 to a long long integer type
powerpc/kexec: Check crash_base for relocatable kernel
powerpc: Make dummy section a valid note header
Xilinx: SPI: updated driver for device tree
drivers/of: Add the of_find_i2c_device_by_node function.
powerpc/xsysace: add compatible string for non-ipcore instance
powerpc/mpc52xx: remove dead code from GPIO driver
...
Diffstat (limited to 'arch')
45 files changed, 486 insertions, 136 deletions
diff --git a/arch/powerpc/boot/dts/mpc8315erdb.dts b/arch/powerpc/boot/dts/mpc8315erdb.dts index 072c9b0f8c8e..71784165b77e 100644 --- a/arch/powerpc/boot/dts/mpc8315erdb.dts +++ b/arch/powerpc/boot/dts/mpc8315erdb.dts | |||
@@ -255,7 +255,7 @@ | |||
255 | device_type = "serial"; | 255 | device_type = "serial"; |
256 | compatible = "ns16550"; | 256 | compatible = "ns16550"; |
257 | reg = <0x4500 0x100>; | 257 | reg = <0x4500 0x100>; |
258 | clock-frequency = <0>; | 258 | clock-frequency = <133333333>; |
259 | interrupts = <9 0x8>; | 259 | interrupts = <9 0x8>; |
260 | interrupt-parent = <&ipic>; | 260 | interrupt-parent = <&ipic>; |
261 | }; | 261 | }; |
@@ -265,7 +265,7 @@ | |||
265 | device_type = "serial"; | 265 | device_type = "serial"; |
266 | compatible = "ns16550"; | 266 | compatible = "ns16550"; |
267 | reg = <0x4600 0x100>; | 267 | reg = <0x4600 0x100>; |
268 | clock-frequency = <0>; | 268 | clock-frequency = <133333333>; |
269 | interrupts = <10 0x8>; | 269 | interrupts = <10 0x8>; |
270 | interrupt-parent = <&ipic>; | 270 | interrupt-parent = <&ipic>; |
271 | }; | 271 | }; |
diff --git a/arch/powerpc/boot/dts/mpc8544ds.dts b/arch/powerpc/boot/dts/mpc8544ds.dts index b9da42105066..0668d1048779 100644 --- a/arch/powerpc/boot/dts/mpc8544ds.dts +++ b/arch/powerpc/boot/dts/mpc8544ds.dts | |||
@@ -313,7 +313,7 @@ | |||
313 | 0x1000000 0x0 0x0 0xe1010000 0x0 0x10000>; | 313 | 0x1000000 0x0 0x0 0xe1010000 0x0 0x10000>; |
314 | clock-frequency = <33333333>; | 314 | clock-frequency = <33333333>; |
315 | interrupt-parent = <&mpic>; | 315 | interrupt-parent = <&mpic>; |
316 | interrupts = <26 2>; | 316 | interrupts = <25 2>; |
317 | interrupt-map-mask = <0xf800 0x0 0x0 0x7>; | 317 | interrupt-map-mask = <0xf800 0x0 0x0 0x7>; |
318 | interrupt-map = < | 318 | interrupt-map = < |
319 | /* IDSEL 0x0 */ | 319 | /* IDSEL 0x0 */ |
@@ -350,7 +350,7 @@ | |||
350 | 0x1000000 0x0 0x0 0xe1020000 0x0 0x10000>; | 350 | 0x1000000 0x0 0x0 0xe1020000 0x0 0x10000>; |
351 | clock-frequency = <33333333>; | 351 | clock-frequency = <33333333>; |
352 | interrupt-parent = <&mpic>; | 352 | interrupt-parent = <&mpic>; |
353 | interrupts = <25 2>; | 353 | interrupts = <26 2>; |
354 | interrupt-map-mask = <0xf800 0x0 0x0 0x7>; | 354 | interrupt-map-mask = <0xf800 0x0 0x0 0x7>; |
355 | interrupt-map = < | 355 | interrupt-map = < |
356 | /* IDSEL 0x0 */ | 356 | /* IDSEL 0x0 */ |
diff --git a/arch/powerpc/boot/dts/mpc8572ds.dts b/arch/powerpc/boot/dts/mpc8572ds.dts index 21459e161d02..3dcc001b8ed3 100644 --- a/arch/powerpc/boot/dts/mpc8572ds.dts +++ b/arch/powerpc/boot/dts/mpc8572ds.dts | |||
@@ -724,7 +724,7 @@ | |||
724 | 0x1000000 0x0 0x00000000 0 0xffc10000 0x0 0x00010000>; | 724 | 0x1000000 0x0 0x00000000 0 0xffc10000 0x0 0x00010000>; |
725 | clock-frequency = <33333333>; | 725 | clock-frequency = <33333333>; |
726 | interrupt-parent = <&mpic>; | 726 | interrupt-parent = <&mpic>; |
727 | interrupts = <26 2>; | 727 | interrupts = <25 2>; |
728 | interrupt-map-mask = <0xf800 0x0 0x0 0x7>; | 728 | interrupt-map-mask = <0xf800 0x0 0x0 0x7>; |
729 | interrupt-map = < | 729 | interrupt-map = < |
730 | /* IDSEL 0x0 */ | 730 | /* IDSEL 0x0 */ |
@@ -761,7 +761,7 @@ | |||
761 | 0x1000000 0x0 0x00000000 0 0xffc20000 0x0 0x00010000>; | 761 | 0x1000000 0x0 0x00000000 0 0xffc20000 0x0 0x00010000>; |
762 | clock-frequency = <33333333>; | 762 | clock-frequency = <33333333>; |
763 | interrupt-parent = <&mpic>; | 763 | interrupt-parent = <&mpic>; |
764 | interrupts = <27 2>; | 764 | interrupts = <26 2>; |
765 | interrupt-map-mask = <0xf800 0x0 0x0 0x7>; | 765 | interrupt-map-mask = <0xf800 0x0 0x0 0x7>; |
766 | interrupt-map = < | 766 | interrupt-map = < |
767 | /* IDSEL 0x0 */ | 767 | /* IDSEL 0x0 */ |
diff --git a/arch/powerpc/boot/dts/mpc8572ds_camp_core0.dts b/arch/powerpc/boot/dts/mpc8572ds_camp_core0.dts index c114c4ee9931..fd462efa9e61 100644 --- a/arch/powerpc/boot/dts/mpc8572ds_camp_core0.dts +++ b/arch/powerpc/boot/dts/mpc8572ds_camp_core0.dts | |||
@@ -457,7 +457,7 @@ | |||
457 | 0x1000000 0x0 0x0 0xffc10000 0x0 0x10000>; | 457 | 0x1000000 0x0 0x0 0xffc10000 0x0 0x10000>; |
458 | clock-frequency = <33333333>; | 458 | clock-frequency = <33333333>; |
459 | interrupt-parent = <&mpic>; | 459 | interrupt-parent = <&mpic>; |
460 | interrupts = <26 2>; | 460 | interrupts = <25 2>; |
461 | interrupt-map-mask = <0xf800 0x0 0x0 0x7>; | 461 | interrupt-map-mask = <0xf800 0x0 0x0 0x7>; |
462 | interrupt-map = < | 462 | interrupt-map = < |
463 | /* IDSEL 0x0 */ | 463 | /* IDSEL 0x0 */ |
diff --git a/arch/powerpc/boot/dts/mpc8572ds_camp_core1.dts b/arch/powerpc/boot/dts/mpc8572ds_camp_core1.dts index 04ecda18d206..e35230f2ac93 100644 --- a/arch/powerpc/boot/dts/mpc8572ds_camp_core1.dts +++ b/arch/powerpc/boot/dts/mpc8572ds_camp_core1.dts | |||
@@ -208,7 +208,7 @@ | |||
208 | 0x1000000 0x0 0x0 0xffc20000 0x0 0x10000>; | 208 | 0x1000000 0x0 0x0 0xffc20000 0x0 0x10000>; |
209 | clock-frequency = <33333333>; | 209 | clock-frequency = <33333333>; |
210 | interrupt-parent = <&mpic>; | 210 | interrupt-parent = <&mpic>; |
211 | interrupts = <27 2>; | 211 | interrupts = <26 2>; |
212 | interrupt-map-mask = <0xf800 0x0 0x0 0x7>; | 212 | interrupt-map-mask = <0xf800 0x0 0x0 0x7>; |
213 | interrupt-map = < | 213 | interrupt-map = < |
214 | /* IDSEL 0x0 */ | 214 | /* IDSEL 0x0 */ |
diff --git a/arch/powerpc/configs/ppc64_defconfig b/arch/powerpc/configs/ppc64_defconfig index 069ae1bbac29..d4685d1c0be8 100644 --- a/arch/powerpc/configs/ppc64_defconfig +++ b/arch/powerpc/configs/ppc64_defconfig | |||
@@ -211,11 +211,28 @@ CONFIG_PPC_PASEMI=y | |||
211 | CONFIG_PPC_PASEMI_IOMMU=y | 211 | CONFIG_PPC_PASEMI_IOMMU=y |
212 | # CONFIG_PPC_PASEMI_IOMMU_DMA_FORCE is not set | 212 | # CONFIG_PPC_PASEMI_IOMMU_DMA_FORCE is not set |
213 | CONFIG_PPC_PASEMI_MDIO=y | 213 | CONFIG_PPC_PASEMI_MDIO=y |
214 | # CONFIG_PPC_PS3 is not set | 214 | CONFIG_PPC_PS3=y |
215 | |||
216 | # | ||
217 | # PS3 Platform Options | ||
218 | # | ||
219 | # CONFIG_PS3_ADVANCED is not set | ||
220 | CONFIG_PS3_HTAB_SIZE=20 | ||
221 | # CONFIG_PS3_DYNAMIC_DMA is not set | ||
222 | CONFIG_PS3_VUART=y | ||
223 | CONFIG_PS3_PS3AV=y | ||
224 | CONFIG_PS3_SYS_MANAGER=y | ||
225 | CONFIG_PS3_STORAGE=m | ||
226 | CONFIG_PS3_DISK=m | ||
227 | CONFIG_PS3_ROM=m | ||
228 | CONFIG_PS3_FLASH=m | ||
229 | CONFIG_PS3_LPM=m | ||
215 | CONFIG_PPC_CELL=y | 230 | CONFIG_PPC_CELL=y |
231 | CONFIG_PPC_CELL_COMMON=y | ||
216 | CONFIG_PPC_CELL_NATIVE=y | 232 | CONFIG_PPC_CELL_NATIVE=y |
217 | CONFIG_PPC_IBM_CELL_BLADE=y | 233 | CONFIG_PPC_IBM_CELL_BLADE=y |
218 | CONFIG_PPC_CELLEB=y | 234 | CONFIG_PPC_CELLEB=y |
235 | CONFIG_PPC_CELL_QPACE=y | ||
219 | 236 | ||
220 | # | 237 | # |
221 | # Cell Broadband Engine options | 238 | # Cell Broadband Engine options |
@@ -981,6 +998,9 @@ CONFIG_E1000=y | |||
981 | CONFIG_TIGON3=y | 998 | CONFIG_TIGON3=y |
982 | # CONFIG_BNX2 is not set | 999 | # CONFIG_BNX2 is not set |
983 | CONFIG_SPIDER_NET=m | 1000 | CONFIG_SPIDER_NET=m |
1001 | CONFIG_GELIC_NET=m | ||
1002 | CONFIG_GELIC_WIRELESS=y | ||
1003 | # CONFIG_GELIC_WIRELESS_OLD_PSK_INTERFACE is not set | ||
984 | # CONFIG_QLA3XXX is not set | 1004 | # CONFIG_QLA3XXX is not set |
985 | # CONFIG_ATL1 is not set | 1005 | # CONFIG_ATL1 is not set |
986 | # CONFIG_ATL1E is not set | 1006 | # CONFIG_ATL1E is not set |
@@ -1370,6 +1390,8 @@ CONFIG_FB_RADEON_BACKLIGHT=y | |||
1370 | # CONFIG_FB_PM3 is not set | 1390 | # CONFIG_FB_PM3 is not set |
1371 | # CONFIG_FB_CARMINE is not set | 1391 | # CONFIG_FB_CARMINE is not set |
1372 | CONFIG_FB_IBM_GXT4500=y | 1392 | CONFIG_FB_IBM_GXT4500=y |
1393 | CONFIG_FB_PS3=m | ||
1394 | CONFIG_FB_PS3_DEFAULT_SIZE_M=9 | ||
1373 | # CONFIG_FB_VIRTUAL is not set | 1395 | # CONFIG_FB_VIRTUAL is not set |
1374 | # CONFIG_FB_METRONOME is not set | 1396 | # CONFIG_FB_METRONOME is not set |
1375 | CONFIG_BACKLIGHT_LCD_SUPPORT=y | 1397 | CONFIG_BACKLIGHT_LCD_SUPPORT=y |
@@ -1492,6 +1514,8 @@ CONFIG_SND_PCI=y | |||
1492 | CONFIG_SND_PPC=y | 1514 | CONFIG_SND_PPC=y |
1493 | CONFIG_SND_POWERMAC=m | 1515 | CONFIG_SND_POWERMAC=m |
1494 | CONFIG_SND_POWERMAC_AUTO_DRC=y | 1516 | CONFIG_SND_POWERMAC_AUTO_DRC=y |
1517 | CONFIG_SND_PS3=m | ||
1518 | CONFIG_SND_PS3_DEFAULT_START_DELAY=2000 | ||
1495 | CONFIG_SND_AOA=m | 1519 | CONFIG_SND_AOA=m |
1496 | CONFIG_SND_AOA_FABRIC_LAYOUT=m | 1520 | CONFIG_SND_AOA_FABRIC_LAYOUT=m |
1497 | CONFIG_SND_AOA_ONYX=m | 1521 | CONFIG_SND_AOA_ONYX=m |
diff --git a/arch/powerpc/include/asm/qe.h b/arch/powerpc/include/asm/qe.h index a0a15311d0d8..2701753d9937 100644 --- a/arch/powerpc/include/asm/qe.h +++ b/arch/powerpc/include/asm/qe.h | |||
@@ -624,7 +624,7 @@ struct ucc_slow_pram { | |||
624 | #define UCC_GETH_UCCE_RXF1 0x00000002 | 624 | #define UCC_GETH_UCCE_RXF1 0x00000002 |
625 | #define UCC_GETH_UCCE_RXF0 0x00000001 | 625 | #define UCC_GETH_UCCE_RXF0 0x00000001 |
626 | 626 | ||
627 | /* UPSMR, when used as a UART */ | 627 | /* UCC Protocol Specific Mode Register (UPSMR), when used for UART */ |
628 | #define UCC_UART_UPSMR_FLC 0x8000 | 628 | #define UCC_UART_UPSMR_FLC 0x8000 |
629 | #define UCC_UART_UPSMR_SL 0x4000 | 629 | #define UCC_UART_UPSMR_SL 0x4000 |
630 | #define UCC_UART_UPSMR_CL_MASK 0x3000 | 630 | #define UCC_UART_UPSMR_CL_MASK 0x3000 |
@@ -652,6 +652,23 @@ struct ucc_slow_pram { | |||
652 | #define UCC_UART_UPSMR_TPM_EVEN 0x0002 | 652 | #define UCC_UART_UPSMR_TPM_EVEN 0x0002 |
653 | #define UCC_UART_UPSMR_TPM_HIGH 0x0003 | 653 | #define UCC_UART_UPSMR_TPM_HIGH 0x0003 |
654 | 654 | ||
655 | /* UCC Protocol Specific Mode Register (UPSMR), when used for Ethernet */ | ||
656 | #define UCC_GETH_UPSMR_FTFE 0x80000000 | ||
657 | #define UCC_GETH_UPSMR_PTPE 0x40000000 | ||
658 | #define UCC_GETH_UPSMR_ECM 0x04000000 | ||
659 | #define UCC_GETH_UPSMR_HSE 0x02000000 | ||
660 | #define UCC_GETH_UPSMR_PRO 0x00400000 | ||
661 | #define UCC_GETH_UPSMR_CAP 0x00200000 | ||
662 | #define UCC_GETH_UPSMR_RSH 0x00100000 | ||
663 | #define UCC_GETH_UPSMR_RPM 0x00080000 | ||
664 | #define UCC_GETH_UPSMR_R10M 0x00040000 | ||
665 | #define UCC_GETH_UPSMR_RLPB 0x00020000 | ||
666 | #define UCC_GETH_UPSMR_TBIM 0x00010000 | ||
667 | #define UCC_GETH_UPSMR_RES1 0x00002000 | ||
668 | #define UCC_GETH_UPSMR_RMM 0x00001000 | ||
669 | #define UCC_GETH_UPSMR_CAM 0x00000400 | ||
670 | #define UCC_GETH_UPSMR_BRO 0x00000200 | ||
671 | |||
655 | /* UCC Transmit On Demand Register (UTODR) */ | 672 | /* UCC Transmit On Demand Register (UTODR) */ |
656 | #define UCC_SLOW_TOD 0x8000 | 673 | #define UCC_SLOW_TOD 0x8000 |
657 | #define UCC_FAST_TOD 0x8000 | 674 | #define UCC_FAST_TOD 0x8000 |
diff --git a/arch/powerpc/include/asm/rtas.h b/arch/powerpc/include/asm/rtas.h index e0175beb4462..0aa0315fb7e8 100644 --- a/arch/powerpc/include/asm/rtas.h +++ b/arch/powerpc/include/asm/rtas.h | |||
@@ -18,7 +18,7 @@ | |||
18 | */ | 18 | */ |
19 | 19 | ||
20 | #define RTAS_UNKNOWN_SERVICE (-1) | 20 | #define RTAS_UNKNOWN_SERVICE (-1) |
21 | #define RTAS_INSTANTIATE_MAX (1UL<<30) /* Don't instantiate rtas at/above this value */ | 21 | #define RTAS_INSTANTIATE_MAX (1ULL<<30) /* Don't instantiate rtas at/above this value */ |
22 | 22 | ||
23 | /* Buffer size for ppc_rtas system call. */ | 23 | /* Buffer size for ppc_rtas system call. */ |
24 | #define RTAS_RMOBUF_MAX (64 * 1024) | 24 | #define RTAS_RMOBUF_MAX (64 * 1024) |
diff --git a/arch/powerpc/include/asm/types.h b/arch/powerpc/include/asm/types.h index c004c13f291e..7ce27a52bb34 100644 --- a/arch/powerpc/include/asm/types.h +++ b/arch/powerpc/include/asm/types.h | |||
@@ -1,7 +1,12 @@ | |||
1 | #ifndef _ASM_POWERPC_TYPES_H | 1 | #ifndef _ASM_POWERPC_TYPES_H |
2 | #define _ASM_POWERPC_TYPES_H | 2 | #define _ASM_POWERPC_TYPES_H |
3 | 3 | ||
4 | #ifdef __powerpc64__ | 4 | /* |
5 | * This is here because we used to use l64 for 64bit powerpc | ||
6 | * and we don't want to impact user mode with our change to ll64 | ||
7 | * in the kernel. | ||
8 | */ | ||
9 | #if defined(__powerpc64__) && !defined(__KERNEL__) | ||
5 | # include <asm-generic/int-l64.h> | 10 | # include <asm-generic/int-l64.h> |
6 | #else | 11 | #else |
7 | # include <asm-generic/int-ll64.h> | 12 | # include <asm-generic/int-ll64.h> |
diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c index 9937fe44555f..19ee491e9e23 100644 --- a/arch/powerpc/kernel/asm-offsets.c +++ b/arch/powerpc/kernel/asm-offsets.c | |||
@@ -56,6 +56,10 @@ | |||
56 | #include "head_booke.h" | 56 | #include "head_booke.h" |
57 | #endif | 57 | #endif |
58 | 58 | ||
59 | #if defined(CONFIG_FSL_BOOKE) | ||
60 | #include "../mm/mmu_decl.h" | ||
61 | #endif | ||
62 | |||
59 | int main(void) | 63 | int main(void) |
60 | { | 64 | { |
61 | DEFINE(THREAD, offsetof(struct task_struct, thread)); | 65 | DEFINE(THREAD, offsetof(struct task_struct, thread)); |
@@ -382,6 +386,9 @@ int main(void) | |||
382 | DEFINE(PGD_T_LOG2, PGD_T_LOG2); | 386 | DEFINE(PGD_T_LOG2, PGD_T_LOG2); |
383 | DEFINE(PTE_T_LOG2, PTE_T_LOG2); | 387 | DEFINE(PTE_T_LOG2, PTE_T_LOG2); |
384 | #endif | 388 | #endif |
389 | #ifdef CONFIG_FSL_BOOKE | ||
390 | DEFINE(TLBCAM_SIZE, sizeof(struct tlbcam)); | ||
391 | #endif | ||
385 | 392 | ||
386 | #ifdef CONFIG_KVM_EXIT_TIMING | 393 | #ifdef CONFIG_KVM_EXIT_TIMING |
387 | DEFINE(VCPU_TIMING_EXIT_TBU, offsetof(struct kvm_vcpu, | 394 | DEFINE(VCPU_TIMING_EXIT_TBU, offsetof(struct kvm_vcpu, |
diff --git a/arch/powerpc/kernel/cacheinfo.c b/arch/powerpc/kernel/cacheinfo.c index b33f0417a4bf..bb37b1d19a58 100644 --- a/arch/powerpc/kernel/cacheinfo.c +++ b/arch/powerpc/kernel/cacheinfo.c | |||
@@ -113,7 +113,7 @@ struct cache { | |||
113 | struct cache *next_local; /* next cache of >= level */ | 113 | struct cache *next_local; /* next cache of >= level */ |
114 | }; | 114 | }; |
115 | 115 | ||
116 | static DEFINE_PER_CPU(struct cache_dir *, cache_dir); | 116 | static DEFINE_PER_CPU(struct cache_dir *, cache_dir_pcpu); |
117 | 117 | ||
118 | /* traversal/modification of this list occurs only at cpu hotplug time; | 118 | /* traversal/modification of this list occurs only at cpu hotplug time; |
119 | * access is serialized by cpu hotplug locking | 119 | * access is serialized by cpu hotplug locking |
@@ -468,9 +468,9 @@ static struct cache_dir *__cpuinit cacheinfo_create_cache_dir(unsigned int cpu_i | |||
468 | 468 | ||
469 | cache_dir->kobj = kobj; | 469 | cache_dir->kobj = kobj; |
470 | 470 | ||
471 | WARN_ON_ONCE(per_cpu(cache_dir, cpu_id) != NULL); | 471 | WARN_ON_ONCE(per_cpu(cache_dir_pcpu, cpu_id) != NULL); |
472 | 472 | ||
473 | per_cpu(cache_dir, cpu_id) = cache_dir; | 473 | per_cpu(cache_dir_pcpu, cpu_id) = cache_dir; |
474 | 474 | ||
475 | return cache_dir; | 475 | return cache_dir; |
476 | err: | 476 | err: |
@@ -820,13 +820,13 @@ void cacheinfo_cpu_offline(unsigned int cpu_id) | |||
820 | 820 | ||
821 | /* Prevent userspace from seeing inconsistent state - remove | 821 | /* Prevent userspace from seeing inconsistent state - remove |
822 | * the sysfs hierarchy first */ | 822 | * the sysfs hierarchy first */ |
823 | cache_dir = per_cpu(cache_dir, cpu_id); | 823 | cache_dir = per_cpu(cache_dir_pcpu, cpu_id); |
824 | 824 | ||
825 | /* careful, sysfs population may have failed */ | 825 | /* careful, sysfs population may have failed */ |
826 | if (cache_dir) | 826 | if (cache_dir) |
827 | remove_cache_dir(cache_dir); | 827 | remove_cache_dir(cache_dir); |
828 | 828 | ||
829 | per_cpu(cache_dir, cpu_id) = NULL; | 829 | per_cpu(cache_dir_pcpu, cpu_id) = NULL; |
830 | 830 | ||
831 | /* clear the CPU's bit in its cache chain, possibly freeing | 831 | /* clear the CPU's bit in its cache chain, possibly freeing |
832 | * cache objects */ | 832 | * cache objects */ |
diff --git a/arch/powerpc/kernel/dma-iommu.c b/arch/powerpc/kernel/dma-iommu.c index 14183af1b3fb..2983adac8cc3 100644 --- a/arch/powerpc/kernel/dma-iommu.c +++ b/arch/powerpc/kernel/dma-iommu.c | |||
@@ -79,10 +79,10 @@ static int dma_iommu_dma_supported(struct device *dev, u64 mask) | |||
79 | "Warning: IOMMU offset too big for device mask\n"); | 79 | "Warning: IOMMU offset too big for device mask\n"); |
80 | if (tbl) | 80 | if (tbl) |
81 | printk(KERN_INFO | 81 | printk(KERN_INFO |
82 | "mask: 0x%08lx, table offset: 0x%08lx\n", | 82 | "mask: 0x%08llx, table offset: 0x%08lx\n", |
83 | mask, tbl->it_offset); | 83 | mask, tbl->it_offset); |
84 | else | 84 | else |
85 | printk(KERN_INFO "mask: 0x%08lx, table unavailable\n", | 85 | printk(KERN_INFO "mask: 0x%08llx, table unavailable\n", |
86 | mask); | 86 | mask); |
87 | return 0; | 87 | return 0; |
88 | } else | 88 | } else |
diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S index b4bcf5a930fa..ebaedafc8e67 100644 --- a/arch/powerpc/kernel/head_64.S +++ b/arch/powerpc/kernel/head_64.S | |||
@@ -1518,6 +1518,15 @@ _GLOBAL(pmac_secondary_start) | |||
1518 | /* turn on 64-bit mode */ | 1518 | /* turn on 64-bit mode */ |
1519 | bl .enable_64b_mode | 1519 | bl .enable_64b_mode |
1520 | 1520 | ||
1521 | li r0,0 | ||
1522 | mfspr r3,SPRN_HID4 | ||
1523 | rldimi r3,r0,40,23 /* clear bit 23 (rm_ci) */ | ||
1524 | sync | ||
1525 | mtspr SPRN_HID4,r3 | ||
1526 | isync | ||
1527 | sync | ||
1528 | slbia | ||
1529 | |||
1521 | /* get TOC pointer (real address) */ | 1530 | /* get TOC pointer (real address) */ |
1522 | bl .relative_toc | 1531 | bl .relative_toc |
1523 | 1532 | ||
diff --git a/arch/powerpc/kernel/head_fsl_booke.S b/arch/powerpc/kernel/head_fsl_booke.S index 11b549acc034..36ffb3504a4f 100644 --- a/arch/powerpc/kernel/head_fsl_booke.S +++ b/arch/powerpc/kernel/head_fsl_booke.S | |||
@@ -389,10 +389,6 @@ skpinv: addi r6,r6,1 /* Increment */ | |||
389 | #endif | 389 | #endif |
390 | #endif | 390 | #endif |
391 | 391 | ||
392 | mfspr r3,SPRN_TLB1CFG | ||
393 | andi. r3,r3,0xfff | ||
394 | lis r4,num_tlbcam_entries@ha | ||
395 | stw r3,num_tlbcam_entries@l(r4) | ||
396 | /* | 392 | /* |
397 | * Decide what sort of machine this is and initialize the MMU. | 393 | * Decide what sort of machine this is and initialize the MMU. |
398 | */ | 394 | */ |
@@ -711,7 +707,7 @@ interrupt_base: | |||
711 | EXCEPTION(0x2060, PerformanceMonitor, performance_monitor_exception, EXC_XFER_STD) | 707 | EXCEPTION(0x2060, PerformanceMonitor, performance_monitor_exception, EXC_XFER_STD) |
712 | 708 | ||
713 | #ifdef CONFIG_PPC_E500MC | 709 | #ifdef CONFIG_PPC_E500MC |
714 | EXCEPTION(0x2070, Doorbell, unknown_exception, EXC_XFER_EE) | 710 | EXCEPTION(0x2070, Doorbell, unknown_exception, EXC_XFER_STD) |
715 | #endif | 711 | #endif |
716 | 712 | ||
717 | /* Debug Interrupt */ | 713 | /* Debug Interrupt */ |
@@ -909,7 +905,7 @@ KernelSPE: | |||
909 | _GLOBAL(loadcam_entry) | 905 | _GLOBAL(loadcam_entry) |
910 | lis r4,TLBCAM@ha | 906 | lis r4,TLBCAM@ha |
911 | addi r4,r4,TLBCAM@l | 907 | addi r4,r4,TLBCAM@l |
912 | mulli r5,r3,20 | 908 | mulli r5,r3,TLBCAM_SIZE |
913 | add r3,r5,r4 | 909 | add r3,r5,r4 |
914 | lwz r4,0(r3) | 910 | lwz r4,0(r3) |
915 | mtspr SPRN_MAS0,r4 | 911 | mtspr SPRN_MAS0,r4 |
diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c index 1bfa706b96e7..fd51578e29dd 100644 --- a/arch/powerpc/kernel/iommu.c +++ b/arch/powerpc/kernel/iommu.c | |||
@@ -239,12 +239,12 @@ static void __iommu_free(struct iommu_table *tbl, dma_addr_t dma_addr, | |||
239 | if (printk_ratelimit()) { | 239 | if (printk_ratelimit()) { |
240 | printk(KERN_INFO "iommu_free: invalid entry\n"); | 240 | printk(KERN_INFO "iommu_free: invalid entry\n"); |
241 | printk(KERN_INFO "\tentry = 0x%lx\n", entry); | 241 | printk(KERN_INFO "\tentry = 0x%lx\n", entry); |
242 | printk(KERN_INFO "\tdma_addr = 0x%lx\n", (u64)dma_addr); | 242 | printk(KERN_INFO "\tdma_addr = 0x%llx\n", (u64)dma_addr); |
243 | printk(KERN_INFO "\tTable = 0x%lx\n", (u64)tbl); | 243 | printk(KERN_INFO "\tTable = 0x%llx\n", (u64)tbl); |
244 | printk(KERN_INFO "\tbus# = 0x%lx\n", (u64)tbl->it_busno); | 244 | printk(KERN_INFO "\tbus# = 0x%llx\n", (u64)tbl->it_busno); |
245 | printk(KERN_INFO "\tsize = 0x%lx\n", (u64)tbl->it_size); | 245 | printk(KERN_INFO "\tsize = 0x%llx\n", (u64)tbl->it_size); |
246 | printk(KERN_INFO "\tstartOff = 0x%lx\n", (u64)tbl->it_offset); | 246 | printk(KERN_INFO "\tstartOff = 0x%llx\n", (u64)tbl->it_offset); |
247 | printk(KERN_INFO "\tindex = 0x%lx\n", (u64)tbl->it_index); | 247 | printk(KERN_INFO "\tindex = 0x%llx\n", (u64)tbl->it_index); |
248 | WARN_ON(1); | 248 | WARN_ON(1); |
249 | } | 249 | } |
250 | return; | 250 | return; |
diff --git a/arch/powerpc/kernel/lparcfg.c b/arch/powerpc/kernel/lparcfg.c index d051e8cbcd03..182e0f642f36 100644 --- a/arch/powerpc/kernel/lparcfg.c +++ b/arch/powerpc/kernel/lparcfg.c | |||
@@ -240,7 +240,7 @@ static void parse_ppp_data(struct seq_file *m) | |||
240 | if (rc) | 240 | if (rc) |
241 | return; | 241 | return; |
242 | 242 | ||
243 | seq_printf(m, "partition_entitled_capacity=%ld\n", | 243 | seq_printf(m, "partition_entitled_capacity=%lld\n", |
244 | ppp_data.entitlement); | 244 | ppp_data.entitlement); |
245 | seq_printf(m, "group=%d\n", ppp_data.group_num); | 245 | seq_printf(m, "group=%d\n", ppp_data.group_num); |
246 | seq_printf(m, "system_active_processors=%d\n", | 246 | seq_printf(m, "system_active_processors=%d\n", |
@@ -265,7 +265,7 @@ static void parse_ppp_data(struct seq_file *m) | |||
265 | ppp_data.unallocated_weight); | 265 | ppp_data.unallocated_weight); |
266 | seq_printf(m, "capacity_weight=%d\n", ppp_data.weight); | 266 | seq_printf(m, "capacity_weight=%d\n", ppp_data.weight); |
267 | seq_printf(m, "capped=%d\n", ppp_data.capped); | 267 | seq_printf(m, "capped=%d\n", ppp_data.capped); |
268 | seq_printf(m, "unallocated_capacity=%ld\n", | 268 | seq_printf(m, "unallocated_capacity=%lld\n", |
269 | ppp_data.unallocated_entitlement); | 269 | ppp_data.unallocated_entitlement); |
270 | } | 270 | } |
271 | 271 | ||
@@ -509,10 +509,10 @@ static ssize_t update_ppp(u64 *entitlement, u8 *weight) | |||
509 | } else | 509 | } else |
510 | return -EINVAL; | 510 | return -EINVAL; |
511 | 511 | ||
512 | pr_debug("%s: current_entitled = %lu, current_weight = %u\n", | 512 | pr_debug("%s: current_entitled = %llu, current_weight = %u\n", |
513 | __func__, ppp_data.entitlement, ppp_data.weight); | 513 | __func__, ppp_data.entitlement, ppp_data.weight); |
514 | 514 | ||
515 | pr_debug("%s: new_entitled = %lu, new_weight = %u\n", | 515 | pr_debug("%s: new_entitled = %llu, new_weight = %u\n", |
516 | __func__, new_entitled, new_weight); | 516 | __func__, new_entitled, new_weight); |
517 | 517 | ||
518 | retval = plpar_hcall_norets(H_SET_PPP, new_entitled, new_weight); | 518 | retval = plpar_hcall_norets(H_SET_PPP, new_entitled, new_weight); |
@@ -558,7 +558,7 @@ static ssize_t update_mpp(u64 *entitlement, u8 *weight) | |||
558 | pr_debug("%s: current_entitled = %lu, current_weight = %u\n", | 558 | pr_debug("%s: current_entitled = %lu, current_weight = %u\n", |
559 | __func__, mpp_data.entitled_mem, mpp_data.mem_weight); | 559 | __func__, mpp_data.entitled_mem, mpp_data.mem_weight); |
560 | 560 | ||
561 | pr_debug("%s: new_entitled = %lu, new_weight = %u\n", | 561 | pr_debug("%s: new_entitled = %llu, new_weight = %u\n", |
562 | __func__, new_entitled, new_weight); | 562 | __func__, new_entitled, new_weight); |
563 | 563 | ||
564 | rc = plpar_hcall_norets(H_SET_MPP, new_entitled, new_weight); | 564 | rc = plpar_hcall_norets(H_SET_MPP, new_entitled, new_weight); |
diff --git a/arch/powerpc/kernel/machine_kexec.c b/arch/powerpc/kernel/machine_kexec.c index b3abebb7ee64..d59e2b1bdcba 100644 --- a/arch/powerpc/kernel/machine_kexec.c +++ b/arch/powerpc/kernel/machine_kexec.c | |||
@@ -93,10 +93,35 @@ void __init reserve_crashkernel(void) | |||
93 | KDUMP_KERNELBASE); | 93 | KDUMP_KERNELBASE); |
94 | 94 | ||
95 | crashk_res.start = KDUMP_KERNELBASE; | 95 | crashk_res.start = KDUMP_KERNELBASE; |
96 | #else | ||
97 | if (!crashk_res.start) { | ||
98 | /* | ||
99 | * unspecified address, choose a region of specified size | ||
100 | * can overlap with initrd (ignoring corruption when retained) | ||
101 | * ppc64 requires kernel and some stacks to be in first segemnt | ||
102 | */ | ||
103 | crashk_res.start = KDUMP_KERNELBASE; | ||
104 | } | ||
105 | |||
106 | crash_base = PAGE_ALIGN(crashk_res.start); | ||
107 | if (crash_base != crashk_res.start) { | ||
108 | printk("Crash kernel base must be aligned to 0x%lx\n", | ||
109 | PAGE_SIZE); | ||
110 | crashk_res.start = crash_base; | ||
111 | } | ||
112 | |||
96 | #endif | 113 | #endif |
97 | crash_size = PAGE_ALIGN(crash_size); | 114 | crash_size = PAGE_ALIGN(crash_size); |
98 | crashk_res.end = crashk_res.start + crash_size - 1; | 115 | crashk_res.end = crashk_res.start + crash_size - 1; |
99 | 116 | ||
117 | /* The crash region must not overlap the current kernel */ | ||
118 | if (overlaps_crashkernel(__pa(_stext), _end - _stext)) { | ||
119 | printk(KERN_WARNING | ||
120 | "Crash kernel can not overlap current kernel\n"); | ||
121 | crashk_res.start = crashk_res.end = 0; | ||
122 | return; | ||
123 | } | ||
124 | |||
100 | /* Crash kernel trumps memory limit */ | 125 | /* Crash kernel trumps memory limit */ |
101 | if (memory_limit && memory_limit <= crashk_res.end) { | 126 | if (memory_limit && memory_limit <= crashk_res.end) { |
102 | memory_limit = crashk_res.end + 1; | 127 | memory_limit = crashk_res.end + 1; |
diff --git a/arch/powerpc/kernel/pci_64.c b/arch/powerpc/kernel/pci_64.c index 586962f65c2a..ea8eda8c87cf 100644 --- a/arch/powerpc/kernel/pci_64.c +++ b/arch/powerpc/kernel/pci_64.c | |||
@@ -470,7 +470,7 @@ int __devinit pcibios_map_io_space(struct pci_bus *bus) | |||
470 | if (bus->self) { | 470 | if (bus->self) { |
471 | pr_debug("IO mapping for PCI-PCI bridge %s\n", | 471 | pr_debug("IO mapping for PCI-PCI bridge %s\n", |
472 | pci_name(bus->self)); | 472 | pci_name(bus->self)); |
473 | pr_debug(" virt=0x%016lx...0x%016lx\n", | 473 | pr_debug(" virt=0x%016llx...0x%016llx\n", |
474 | bus->resource[0]->start + _IO_BASE, | 474 | bus->resource[0]->start + _IO_BASE, |
475 | bus->resource[0]->end + _IO_BASE); | 475 | bus->resource[0]->end + _IO_BASE); |
476 | return 0; | 476 | return 0; |
@@ -502,7 +502,7 @@ int __devinit pcibios_map_io_space(struct pci_bus *bus) | |||
502 | hose->io_base_phys - phys_page); | 502 | hose->io_base_phys - phys_page); |
503 | 503 | ||
504 | pr_debug("IO mapping for PHB %s\n", hose->dn->full_name); | 504 | pr_debug("IO mapping for PHB %s\n", hose->dn->full_name); |
505 | pr_debug(" phys=0x%016lx, virt=0x%p (alloc=0x%p)\n", | 505 | pr_debug(" phys=0x%016llx, virt=0x%p (alloc=0x%p)\n", |
506 | hose->io_base_phys, hose->io_base_virt, hose->io_base_alloc); | 506 | hose->io_base_phys, hose->io_base_virt, hose->io_base_alloc); |
507 | pr_debug(" size=0x%016lx (alloc=0x%016lx)\n", | 507 | pr_debug(" size=0x%016lx (alloc=0x%016lx)\n", |
508 | hose->pci_io_size, size_page); | 508 | hose->pci_io_size, size_page); |
@@ -517,7 +517,7 @@ int __devinit pcibios_map_io_space(struct pci_bus *bus) | |||
517 | hose->io_resource.start += io_virt_offset; | 517 | hose->io_resource.start += io_virt_offset; |
518 | hose->io_resource.end += io_virt_offset; | 518 | hose->io_resource.end += io_virt_offset; |
519 | 519 | ||
520 | pr_debug(" hose->io_resource=0x%016lx...0x%016lx\n", | 520 | pr_debug(" hose->io_resource=0x%016llx...0x%016llx\n", |
521 | hose->io_resource.start, hose->io_resource.end); | 521 | hose->io_resource.start, hose->io_resource.end); |
522 | 522 | ||
523 | return 0; | 523 | return 0; |
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c index d8bd2161e738..2d34196bba8c 100644 --- a/arch/powerpc/kernel/setup_64.c +++ b/arch/powerpc/kernel/setup_64.c | |||
@@ -434,8 +434,8 @@ void __init setup_system(void) | |||
434 | printk("Starting Linux PPC64 %s\n", init_utsname()->version); | 434 | printk("Starting Linux PPC64 %s\n", init_utsname()->version); |
435 | 435 | ||
436 | printk("-----------------------------------------------------\n"); | 436 | printk("-----------------------------------------------------\n"); |
437 | printk("ppc64_pft_size = 0x%lx\n", ppc64_pft_size); | 437 | printk("ppc64_pft_size = 0x%llx\n", ppc64_pft_size); |
438 | printk("physicalMemorySize = 0x%lx\n", lmb_phys_mem_size()); | 438 | printk("physicalMemorySize = 0x%llx\n", lmb_phys_mem_size()); |
439 | if (ppc64_caches.dline_size != 0x80) | 439 | if (ppc64_caches.dline_size != 0x80) |
440 | printk("ppc64_caches.dcache_line_size = 0x%x\n", | 440 | printk("ppc64_caches.dcache_line_size = 0x%x\n", |
441 | ppc64_caches.dline_size); | 441 | ppc64_caches.dline_size); |
@@ -493,7 +493,7 @@ static void __init emergency_stack_init(void) | |||
493 | * bringup, we need to get at them in real mode. This means they | 493 | * bringup, we need to get at them in real mode. This means they |
494 | * must also be within the RMO region. | 494 | * must also be within the RMO region. |
495 | */ | 495 | */ |
496 | limit = min(0x10000000UL, lmb.rmo_size); | 496 | limit = min(0x10000000ULL, lmb.rmo_size); |
497 | 497 | ||
498 | for_each_possible_cpu(i) { | 498 | for_each_possible_cpu(i) { |
499 | unsigned long sp; | 499 | unsigned long sp; |
diff --git a/arch/powerpc/kernel/vmlinux.lds.S b/arch/powerpc/kernel/vmlinux.lds.S index 47bf15cd2c9e..161b9b9691f0 100644 --- a/arch/powerpc/kernel/vmlinux.lds.S +++ b/arch/powerpc/kernel/vmlinux.lds.S | |||
@@ -87,7 +87,9 @@ SECTIONS | |||
87 | /* The dummy segment contents for the bug workaround mentioned above | 87 | /* The dummy segment contents for the bug workaround mentioned above |
88 | near PHDRS. */ | 88 | near PHDRS. */ |
89 | .dummy : AT(ADDR(.dummy) - LOAD_OFFSET) { | 89 | .dummy : AT(ADDR(.dummy) - LOAD_OFFSET) { |
90 | LONG(0xf177) | 90 | LONG(0) |
91 | LONG(0) | ||
92 | LONG(0) | ||
91 | } :kernel :dummy | 93 | } :kernel :dummy |
92 | 94 | ||
93 | /* | 95 | /* |
diff --git a/arch/powerpc/mm/fsl_booke_mmu.c b/arch/powerpc/mm/fsl_booke_mmu.c index 23cee39534fd..1971e4ee3d6e 100644 --- a/arch/powerpc/mm/fsl_booke_mmu.c +++ b/arch/powerpc/mm/fsl_booke_mmu.c | |||
@@ -56,18 +56,11 @@ | |||
56 | 56 | ||
57 | extern void loadcam_entry(unsigned int index); | 57 | extern void loadcam_entry(unsigned int index); |
58 | unsigned int tlbcam_index; | 58 | unsigned int tlbcam_index; |
59 | unsigned int num_tlbcam_entries; | ||
60 | static unsigned long __cam0, __cam1, __cam2; | 59 | static unsigned long __cam0, __cam1, __cam2; |
61 | 60 | ||
62 | #define NUM_TLBCAMS (16) | 61 | #define NUM_TLBCAMS (16) |
63 | 62 | ||
64 | struct tlbcam { | 63 | struct tlbcam TLBCAM[NUM_TLBCAMS]; |
65 | u32 MAS0; | ||
66 | u32 MAS1; | ||
67 | u32 MAS2; | ||
68 | u32 MAS3; | ||
69 | u32 MAS7; | ||
70 | } TLBCAM[NUM_TLBCAMS]; | ||
71 | 64 | ||
72 | struct tlbcamrange { | 65 | struct tlbcamrange { |
73 | unsigned long start; | 66 | unsigned long start; |
diff --git a/arch/powerpc/mm/mmu_decl.h b/arch/powerpc/mm/mmu_decl.h index ad123bced404..d1f9c62dc177 100644 --- a/arch/powerpc/mm/mmu_decl.h +++ b/arch/powerpc/mm/mmu_decl.h | |||
@@ -75,6 +75,15 @@ extern void _tlbia(void); | |||
75 | #endif /* CONFIG_PPC_MMU_NOHASH */ | 75 | #endif /* CONFIG_PPC_MMU_NOHASH */ |
76 | 76 | ||
77 | #ifdef CONFIG_PPC32 | 77 | #ifdef CONFIG_PPC32 |
78 | |||
79 | struct tlbcam { | ||
80 | u32 MAS0; | ||
81 | u32 MAS1; | ||
82 | u32 MAS2; | ||
83 | u32 MAS3; | ||
84 | u32 MAS7; | ||
85 | }; | ||
86 | |||
78 | extern void mapin_ram(void); | 87 | extern void mapin_ram(void); |
79 | extern int map_page(unsigned long va, phys_addr_t pa, int flags); | 88 | extern int map_page(unsigned long va, phys_addr_t pa, int flags); |
80 | extern void setbat(int index, unsigned long virt, phys_addr_t phys, | 89 | extern void setbat(int index, unsigned long virt, phys_addr_t phys, |
@@ -90,8 +99,6 @@ extern unsigned int rtas_data, rtas_size; | |||
90 | struct hash_pte; | 99 | struct hash_pte; |
91 | extern struct hash_pte *Hash, *Hash_end; | 100 | extern struct hash_pte *Hash, *Hash_end; |
92 | extern unsigned long Hash_size, Hash_mask; | 101 | extern unsigned long Hash_size, Hash_mask; |
93 | |||
94 | extern unsigned int num_tlbcam_entries; | ||
95 | #endif | 102 | #endif |
96 | 103 | ||
97 | extern unsigned long ioremap_bot; | 104 | extern unsigned long ioremap_bot; |
diff --git a/arch/powerpc/mm/stab.c b/arch/powerpc/mm/stab.c index 60e6032a8088..98cd1dc2ae75 100644 --- a/arch/powerpc/mm/stab.c +++ b/arch/powerpc/mm/stab.c | |||
@@ -251,8 +251,8 @@ void __init stabs_alloc(void) | |||
251 | 251 | ||
252 | paca[cpu].stab_addr = newstab; | 252 | paca[cpu].stab_addr = newstab; |
253 | paca[cpu].stab_real = virt_to_abs(newstab); | 253 | paca[cpu].stab_real = virt_to_abs(newstab); |
254 | printk(KERN_INFO "Segment table for CPU %d at 0x%lx " | 254 | printk(KERN_INFO "Segment table for CPU %d at 0x%llx " |
255 | "virtual, 0x%lx absolute\n", | 255 | "virtual, 0x%llx absolute\n", |
256 | cpu, paca[cpu].stab_addr, paca[cpu].stab_real); | 256 | cpu, paca[cpu].stab_addr, paca[cpu].stab_real); |
257 | } | 257 | } |
258 | } | 258 | } |
diff --git a/arch/powerpc/oprofile/op_model_pa6t.c b/arch/powerpc/oprofile/op_model_pa6t.c index c40de461fd4e..42f778dff919 100644 --- a/arch/powerpc/oprofile/op_model_pa6t.c +++ b/arch/powerpc/oprofile/op_model_pa6t.c | |||
@@ -132,7 +132,7 @@ static int pa6t_reg_setup(struct op_counter_config *ctr, | |||
132 | for (pmc = 0; pmc < cur_cpu_spec->num_pmcs; pmc++) { | 132 | for (pmc = 0; pmc < cur_cpu_spec->num_pmcs; pmc++) { |
133 | /* counters are 40 bit. Move to cputable at some point? */ | 133 | /* counters are 40 bit. Move to cputable at some point? */ |
134 | reset_value[pmc] = (0x1UL << 39) - ctr[pmc].count; | 134 | reset_value[pmc] = (0x1UL << 39) - ctr[pmc].count; |
135 | pr_debug("reset_value for pmc%u inited to 0x%lx\n", | 135 | pr_debug("reset_value for pmc%u inited to 0x%llx\n", |
136 | pmc, reset_value[pmc]); | 136 | pmc, reset_value[pmc]); |
137 | } | 137 | } |
138 | 138 | ||
@@ -177,7 +177,7 @@ static int pa6t_start(struct op_counter_config *ctr) | |||
177 | 177 | ||
178 | oprofile_running = 1; | 178 | oprofile_running = 1; |
179 | 179 | ||
180 | pr_debug("start on cpu %d, mmcr0 %lx\n", smp_processor_id(), mmcr0); | 180 | pr_debug("start on cpu %d, mmcr0 %llx\n", smp_processor_id(), mmcr0); |
181 | 181 | ||
182 | return 0; | 182 | return 0; |
183 | } | 183 | } |
@@ -193,7 +193,7 @@ static void pa6t_stop(void) | |||
193 | 193 | ||
194 | oprofile_running = 0; | 194 | oprofile_running = 0; |
195 | 195 | ||
196 | pr_debug("stop on cpu %d, mmcr0 %lx\n", smp_processor_id(), mmcr0); | 196 | pr_debug("stop on cpu %d, mmcr0 %llx\n", smp_processor_id(), mmcr0); |
197 | } | 197 | } |
198 | 198 | ||
199 | /* handle the perfmon overflow vector */ | 199 | /* handle the perfmon overflow vector */ |
diff --git a/arch/powerpc/platforms/512x/clock.c b/arch/powerpc/platforms/512x/clock.c index f416014ee727..1bcff94eb924 100644 --- a/arch/powerpc/platforms/512x/clock.c +++ b/arch/powerpc/platforms/512x/clock.c | |||
@@ -56,12 +56,12 @@ static struct clk *mpc5121_clk_get(struct device *dev, const char *id) | |||
56 | int dev_match = 0; | 56 | int dev_match = 0; |
57 | int id_match = 0; | 57 | int id_match = 0; |
58 | 58 | ||
59 | if (dev == NULL && id == NULL) | 59 | if (dev == NULL || id == NULL) |
60 | return NULL; | 60 | return NULL; |
61 | 61 | ||
62 | mutex_lock(&clocks_mutex); | 62 | mutex_lock(&clocks_mutex); |
63 | list_for_each_entry(p, &clocks, node) { | 63 | list_for_each_entry(p, &clocks, node) { |
64 | if (dev && dev == p->dev) | 64 | if (dev == p->dev) |
65 | dev_match++; | 65 | dev_match++; |
66 | if (strcmp(id, p->name) == 0) | 66 | if (strcmp(id, p->name) == 0) |
67 | id_match++; | 67 | id_match++; |
diff --git a/arch/powerpc/platforms/52xx/mpc52xx_gpio.c b/arch/powerpc/platforms/52xx/mpc52xx_gpio.c index 8a455ebce98d..07f89ae46d04 100644 --- a/arch/powerpc/platforms/52xx/mpc52xx_gpio.c +++ b/arch/powerpc/platforms/52xx/mpc52xx_gpio.c | |||
@@ -363,11 +363,8 @@ static int mpc52xx_gpt_gpio_get(struct gpio_chip *gc, unsigned int gpio) | |||
363 | { | 363 | { |
364 | struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc); | 364 | struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc); |
365 | struct mpc52xx_gpt __iomem *regs = mm_gc->regs; | 365 | struct mpc52xx_gpt __iomem *regs = mm_gc->regs; |
366 | unsigned int ret; | ||
367 | 366 | ||
368 | return (in_be32(®s->status) & (1 << (31 - 23))) ? 1 : 0; | 367 | return (in_be32(®s->status) & (1 << (31 - 23))) ? 1 : 0; |
369 | |||
370 | return ret; | ||
371 | } | 368 | } |
372 | 369 | ||
373 | static void | 370 | static void |
diff --git a/arch/powerpc/platforms/52xx/mpc52xx_pic.c b/arch/powerpc/platforms/52xx/mpc52xx_pic.c index 72865e8e4b51..0a093f03c758 100644 --- a/arch/powerpc/platforms/52xx/mpc52xx_pic.c +++ b/arch/powerpc/platforms/52xx/mpc52xx_pic.c | |||
@@ -196,6 +196,7 @@ static void mpc52xx_extirq_ack(unsigned int virq) | |||
196 | 196 | ||
197 | static int mpc52xx_extirq_set_type(unsigned int virq, unsigned int flow_type) | 197 | static int mpc52xx_extirq_set_type(unsigned int virq, unsigned int flow_type) |
198 | { | 198 | { |
199 | struct irq_desc *desc = get_irq_desc(virq); | ||
199 | u32 ctrl_reg, type; | 200 | u32 ctrl_reg, type; |
200 | int irq; | 201 | int irq; |
201 | int l2irq; | 202 | int l2irq; |
@@ -222,6 +223,11 @@ static int mpc52xx_extirq_set_type(unsigned int virq, unsigned int flow_type) | |||
222 | type = 0; | 223 | type = 0; |
223 | } | 224 | } |
224 | 225 | ||
226 | desc->status &= ~(IRQ_TYPE_SENSE_MASK | IRQ_LEVEL); | ||
227 | desc->status |= flow_type & IRQ_TYPE_SENSE_MASK; | ||
228 | if (flow_type & (IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW)) | ||
229 | desc->status |= IRQ_LEVEL; | ||
230 | |||
225 | ctrl_reg = in_be32(&intr->ctrl); | 231 | ctrl_reg = in_be32(&intr->ctrl); |
226 | ctrl_reg &= ~(0x3 << (22 - (l2irq * 2))); | 232 | ctrl_reg &= ~(0x3 << (22 - (l2irq * 2))); |
227 | ctrl_reg |= (type << (22 - (l2irq * 2))); | 233 | ctrl_reg |= (type << (22 - (l2irq * 2))); |
@@ -231,7 +237,7 @@ static int mpc52xx_extirq_set_type(unsigned int virq, unsigned int flow_type) | |||
231 | } | 237 | } |
232 | 238 | ||
233 | static struct irq_chip mpc52xx_extirq_irqchip = { | 239 | static struct irq_chip mpc52xx_extirq_irqchip = { |
234 | .typename = " MPC52xx IRQ[0-3] ", | 240 | .typename = "MPC52xx External", |
235 | .mask = mpc52xx_extirq_mask, | 241 | .mask = mpc52xx_extirq_mask, |
236 | .unmask = mpc52xx_extirq_unmask, | 242 | .unmask = mpc52xx_extirq_unmask, |
237 | .ack = mpc52xx_extirq_ack, | 243 | .ack = mpc52xx_extirq_ack, |
diff --git a/arch/powerpc/platforms/83xx/Makefile b/arch/powerpc/platforms/83xx/Makefile index ba5028e29890..051777c542c7 100644 --- a/arch/powerpc/platforms/83xx/Makefile +++ b/arch/powerpc/platforms/83xx/Makefile | |||
@@ -3,6 +3,7 @@ | |||
3 | # | 3 | # |
4 | obj-y := misc.o usb.o | 4 | obj-y := misc.o usb.o |
5 | obj-$(CONFIG_SUSPEND) += suspend.o suspend-asm.o | 5 | obj-$(CONFIG_SUSPEND) += suspend.o suspend-asm.o |
6 | obj-$(CONFIG_MCU_MPC8349EMITX) += mcu_mpc8349emitx.o | ||
6 | obj-$(CONFIG_MPC831x_RDB) += mpc831x_rdb.o | 7 | obj-$(CONFIG_MPC831x_RDB) += mpc831x_rdb.o |
7 | obj-$(CONFIG_MPC832x_RDB) += mpc832x_rdb.o | 8 | obj-$(CONFIG_MPC832x_RDB) += mpc832x_rdb.o |
8 | obj-$(CONFIG_MPC834x_MDS) += mpc834x_mds.o | 9 | obj-$(CONFIG_MPC834x_MDS) += mpc834x_mds.o |
diff --git a/arch/powerpc/platforms/83xx/mcu_mpc8349emitx.c b/arch/powerpc/platforms/83xx/mcu_mpc8349emitx.c new file mode 100644 index 000000000000..82a9bcb858b6 --- /dev/null +++ b/arch/powerpc/platforms/83xx/mcu_mpc8349emitx.c | |||
@@ -0,0 +1,209 @@ | |||
1 | /* | ||
2 | * Power Management and GPIO expander driver for MPC8349E-mITX-compatible MCU | ||
3 | * | ||
4 | * Copyright (c) 2008 MontaVista Software, Inc. | ||
5 | * | ||
6 | * Author: Anton Vorontsov <avorontsov@ru.mvista.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | */ | ||
13 | |||
14 | #include <linux/init.h> | ||
15 | #include <linux/kernel.h> | ||
16 | #include <linux/module.h> | ||
17 | #include <linux/device.h> | ||
18 | #include <linux/mutex.h> | ||
19 | #include <linux/i2c.h> | ||
20 | #include <linux/gpio.h> | ||
21 | #include <linux/of.h> | ||
22 | #include <linux/of_gpio.h> | ||
23 | #include <asm/prom.h> | ||
24 | #include <asm/machdep.h> | ||
25 | |||
26 | /* | ||
27 | * I don't have specifications for the MCU firmware, I found this register | ||
28 | * and bits positions by the trial&error method. | ||
29 | */ | ||
30 | #define MCU_REG_CTRL 0x20 | ||
31 | #define MCU_CTRL_POFF 0x40 | ||
32 | |||
33 | #define MCU_NUM_GPIO 2 | ||
34 | |||
35 | struct mcu { | ||
36 | struct mutex lock; | ||
37 | struct device_node *np; | ||
38 | struct i2c_client *client; | ||
39 | struct of_gpio_chip of_gc; | ||
40 | u8 reg_ctrl; | ||
41 | }; | ||
42 | |||
43 | static struct mcu *glob_mcu; | ||
44 | |||
45 | static void mcu_power_off(void) | ||
46 | { | ||
47 | struct mcu *mcu = glob_mcu; | ||
48 | |||
49 | pr_info("Sending power-off request to the MCU...\n"); | ||
50 | mutex_lock(&mcu->lock); | ||
51 | i2c_smbus_write_byte_data(glob_mcu->client, MCU_REG_CTRL, | ||
52 | mcu->reg_ctrl | MCU_CTRL_POFF); | ||
53 | mutex_unlock(&mcu->lock); | ||
54 | } | ||
55 | |||
56 | static void mcu_gpio_set(struct gpio_chip *gc, unsigned int gpio, int val) | ||
57 | { | ||
58 | struct of_gpio_chip *of_gc = to_of_gpio_chip(gc); | ||
59 | struct mcu *mcu = container_of(of_gc, struct mcu, of_gc); | ||
60 | u8 bit = 1 << (4 + gpio); | ||
61 | |||
62 | mutex_lock(&mcu->lock); | ||
63 | if (val) | ||
64 | mcu->reg_ctrl &= ~bit; | ||
65 | else | ||
66 | mcu->reg_ctrl |= bit; | ||
67 | |||
68 | i2c_smbus_write_byte_data(mcu->client, MCU_REG_CTRL, mcu->reg_ctrl); | ||
69 | mutex_unlock(&mcu->lock); | ||
70 | } | ||
71 | |||
72 | static int mcu_gpio_dir_out(struct gpio_chip *gc, unsigned int gpio, int val) | ||
73 | { | ||
74 | mcu_gpio_set(gc, gpio, val); | ||
75 | return 0; | ||
76 | } | ||
77 | |||
78 | static int mcu_gpiochip_add(struct mcu *mcu) | ||
79 | { | ||
80 | struct device_node *np; | ||
81 | struct of_gpio_chip *of_gc = &mcu->of_gc; | ||
82 | struct gpio_chip *gc = &of_gc->gc; | ||
83 | int ret; | ||
84 | |||
85 | np = of_find_compatible_node(NULL, NULL, "fsl,mcu-mpc8349emitx"); | ||
86 | if (!np) | ||
87 | return -ENODEV; | ||
88 | |||
89 | gc->owner = THIS_MODULE; | ||
90 | gc->label = np->full_name; | ||
91 | gc->can_sleep = 1; | ||
92 | gc->ngpio = MCU_NUM_GPIO; | ||
93 | gc->base = -1; | ||
94 | gc->set = mcu_gpio_set; | ||
95 | gc->direction_output = mcu_gpio_dir_out; | ||
96 | of_gc->gpio_cells = 2; | ||
97 | of_gc->xlate = of_gpio_simple_xlate; | ||
98 | |||
99 | np->data = of_gc; | ||
100 | mcu->np = np; | ||
101 | |||
102 | /* | ||
103 | * We don't want to lose the node, its ->data and ->full_name... | ||
104 | * So, if succeeded, we don't put the node here. | ||
105 | */ | ||
106 | ret = gpiochip_add(gc); | ||
107 | if (ret) | ||
108 | of_node_put(np); | ||
109 | return ret; | ||
110 | } | ||
111 | |||
112 | static int mcu_gpiochip_remove(struct mcu *mcu) | ||
113 | { | ||
114 | int ret; | ||
115 | |||
116 | ret = gpiochip_remove(&mcu->of_gc.gc); | ||
117 | if (ret) | ||
118 | return ret; | ||
119 | of_node_put(mcu->np); | ||
120 | |||
121 | return 0; | ||
122 | } | ||
123 | |||
124 | static int __devinit mcu_probe(struct i2c_client *client, | ||
125 | const struct i2c_device_id *id) | ||
126 | { | ||
127 | struct mcu *mcu; | ||
128 | int ret; | ||
129 | |||
130 | mcu = kzalloc(sizeof(*mcu), GFP_KERNEL); | ||
131 | if (!mcu) | ||
132 | return -ENOMEM; | ||
133 | |||
134 | mutex_init(&mcu->lock); | ||
135 | mcu->client = client; | ||
136 | i2c_set_clientdata(client, mcu); | ||
137 | |||
138 | ret = i2c_smbus_read_byte_data(mcu->client, MCU_REG_CTRL); | ||
139 | if (ret < 0) | ||
140 | goto err; | ||
141 | mcu->reg_ctrl = ret; | ||
142 | |||
143 | ret = mcu_gpiochip_add(mcu); | ||
144 | if (ret) | ||
145 | goto err; | ||
146 | |||
147 | /* XXX: this is potentially racy, but there is no lock for ppc_md */ | ||
148 | if (!ppc_md.power_off) { | ||
149 | glob_mcu = mcu; | ||
150 | ppc_md.power_off = mcu_power_off; | ||
151 | dev_info(&client->dev, "will provide power-off service\n"); | ||
152 | } | ||
153 | |||
154 | return 0; | ||
155 | err: | ||
156 | kfree(mcu); | ||
157 | return ret; | ||
158 | } | ||
159 | |||
160 | static int __devexit mcu_remove(struct i2c_client *client) | ||
161 | { | ||
162 | struct mcu *mcu = i2c_get_clientdata(client); | ||
163 | int ret; | ||
164 | |||
165 | if (glob_mcu == mcu) { | ||
166 | ppc_md.power_off = NULL; | ||
167 | glob_mcu = NULL; | ||
168 | } | ||
169 | |||
170 | ret = mcu_gpiochip_remove(mcu); | ||
171 | if (ret) | ||
172 | return ret; | ||
173 | i2c_set_clientdata(client, NULL); | ||
174 | kfree(mcu); | ||
175 | return 0; | ||
176 | } | ||
177 | |||
178 | static const struct i2c_device_id mcu_ids[] = { | ||
179 | { "mcu-mpc8349emitx", }, | ||
180 | {}, | ||
181 | }; | ||
182 | MODULE_DEVICE_TABLE(i2c, mcu_ids); | ||
183 | |||
184 | static struct i2c_driver mcu_driver = { | ||
185 | .driver = { | ||
186 | .name = "mcu-mpc8349emitx", | ||
187 | .owner = THIS_MODULE, | ||
188 | }, | ||
189 | .probe = mcu_probe, | ||
190 | .remove = __devexit_p(mcu_remove), | ||
191 | .id_table = mcu_ids, | ||
192 | }; | ||
193 | |||
194 | static int __init mcu_init(void) | ||
195 | { | ||
196 | return i2c_add_driver(&mcu_driver); | ||
197 | } | ||
198 | module_init(mcu_init); | ||
199 | |||
200 | static void __exit mcu_exit(void) | ||
201 | { | ||
202 | i2c_del_driver(&mcu_driver); | ||
203 | } | ||
204 | module_exit(mcu_exit); | ||
205 | |||
206 | MODULE_DESCRIPTION("Power Management and GPIO expander driver for " | ||
207 | "MPC8349E-mITX-compatible MCU"); | ||
208 | MODULE_AUTHOR("Anton Vorontsov <avorontsov@ru.mvista.com>"); | ||
209 | MODULE_LICENSE("GPL"); | ||
diff --git a/arch/powerpc/platforms/Kconfig b/arch/powerpc/platforms/Kconfig index 47fe2bea9865..200b9cb900ea 100644 --- a/arch/powerpc/platforms/Kconfig +++ b/arch/powerpc/platforms/Kconfig | |||
@@ -323,4 +323,15 @@ config SIMPLE_GPIO | |||
323 | chip-selects, Ethernet/USB PHY's power and various other small | 323 | chip-selects, Ethernet/USB PHY's power and various other small |
324 | on-board peripherals. | 324 | on-board peripherals. |
325 | 325 | ||
326 | config MCU_MPC8349EMITX | ||
327 | tristate "MPC8349E-mITX MCU driver" | ||
328 | depends on I2C && PPC_83xx | ||
329 | select GENERIC_GPIO | ||
330 | select ARCH_REQUIRE_GPIOLIB | ||
331 | help | ||
332 | Say Y here to enable soft power-off functionality on the Freescale | ||
333 | boards with the MPC8349E-mITX-compatible MCU chips. This driver will | ||
334 | also register MCU GPIOs with the generic GPIO API, so you'll able | ||
335 | to use MCU pins as GPIOs. | ||
336 | |||
326 | endmenu | 337 | endmenu |
diff --git a/arch/powerpc/platforms/cell/beat_interrupt.c b/arch/powerpc/platforms/cell/beat_interrupt.c index 192a93509372..72254848a228 100644 --- a/arch/powerpc/platforms/cell/beat_interrupt.c +++ b/arch/powerpc/platforms/cell/beat_interrupt.c | |||
@@ -99,7 +99,7 @@ static void beatic_end_irq(unsigned int irq_plug) | |||
99 | err = beat_downcount_of_interrupt(irq_plug); | 99 | err = beat_downcount_of_interrupt(irq_plug); |
100 | if (err != 0) { | 100 | if (err != 0) { |
101 | if ((err & 0xFFFFFFFF) != 0xFFFFFFF5) /* -11: wrong state */ | 101 | if ((err & 0xFFFFFFFF) != 0xFFFFFFF5) /* -11: wrong state */ |
102 | panic("Failed to downcount IRQ! Error = %16lx", err); | 102 | panic("Failed to downcount IRQ! Error = %16llx", err); |
103 | 103 | ||
104 | printk(KERN_ERR "IRQ over-downcounted, plug %d\n", irq_plug); | 104 | printk(KERN_ERR "IRQ over-downcounted, plug %d\n", irq_plug); |
105 | } | 105 | } |
diff --git a/arch/powerpc/platforms/cell/celleb_scc_epci.c b/arch/powerpc/platforms/cell/celleb_scc_epci.c index 08c285b10e30..48ec88a38a12 100644 --- a/arch/powerpc/platforms/cell/celleb_scc_epci.c +++ b/arch/powerpc/platforms/cell/celleb_scc_epci.c | |||
@@ -405,7 +405,7 @@ static int __init celleb_setup_epci(struct device_node *node, | |||
405 | hose->cfg_addr = ioremap(r.start, (r.end - r.start + 1)); | 405 | hose->cfg_addr = ioremap(r.start, (r.end - r.start + 1)); |
406 | if (!hose->cfg_addr) | 406 | if (!hose->cfg_addr) |
407 | goto error; | 407 | goto error; |
408 | pr_debug("EPCI: cfg_addr map 0x%016lx->0x%016lx + 0x%016lx\n", | 408 | pr_debug("EPCI: cfg_addr map 0x%016llx->0x%016lx + 0x%016llx\n", |
409 | r.start, (unsigned long)hose->cfg_addr, (r.end - r.start + 1)); | 409 | r.start, (unsigned long)hose->cfg_addr, (r.end - r.start + 1)); |
410 | 410 | ||
411 | if (of_address_to_resource(node, 2, &r)) | 411 | if (of_address_to_resource(node, 2, &r)) |
@@ -413,7 +413,7 @@ static int __init celleb_setup_epci(struct device_node *node, | |||
413 | hose->cfg_data = ioremap(r.start, (r.end - r.start + 1)); | 413 | hose->cfg_data = ioremap(r.start, (r.end - r.start + 1)); |
414 | if (!hose->cfg_data) | 414 | if (!hose->cfg_data) |
415 | goto error; | 415 | goto error; |
416 | pr_debug("EPCI: cfg_data map 0x%016lx->0x%016lx + 0x%016lx\n", | 416 | pr_debug("EPCI: cfg_data map 0x%016llx->0x%016lx + 0x%016llx\n", |
417 | r.start, (unsigned long)hose->cfg_data, (r.end - r.start + 1)); | 417 | r.start, (unsigned long)hose->cfg_data, (r.end - r.start + 1)); |
418 | 418 | ||
419 | hose->ops = &celleb_epci_ops; | 419 | hose->ops = &celleb_epci_ops; |
diff --git a/arch/powerpc/platforms/cell/iommu.c b/arch/powerpc/platforms/cell/iommu.c index 88d94b59a7cb..ee5033eddf01 100644 --- a/arch/powerpc/platforms/cell/iommu.c +++ b/arch/powerpc/platforms/cell/iommu.c | |||
@@ -855,7 +855,7 @@ static int __init cell_iommu_init_disabled(void) | |||
855 | */ | 855 | */ |
856 | if (np && size < lmb_end_of_DRAM()) { | 856 | if (np && size < lmb_end_of_DRAM()) { |
857 | printk(KERN_WARNING "iommu: force-enabled, dma window" | 857 | printk(KERN_WARNING "iommu: force-enabled, dma window" |
858 | " (%ldMB) smaller than total memory (%ldMB)\n", | 858 | " (%ldMB) smaller than total memory (%lldMB)\n", |
859 | size >> 20, lmb_end_of_DRAM() >> 20); | 859 | size >> 20, lmb_end_of_DRAM() >> 20); |
860 | return -ENODEV; | 860 | return -ENODEV; |
861 | } | 861 | } |
@@ -985,7 +985,7 @@ static void cell_dma_dev_setup_fixed(struct device *dev) | |||
985 | addr = cell_iommu_get_fixed_address(dev) + dma_iommu_fixed_base; | 985 | addr = cell_iommu_get_fixed_address(dev) + dma_iommu_fixed_base; |
986 | archdata->dma_data = (void *)addr; | 986 | archdata->dma_data = (void *)addr; |
987 | 987 | ||
988 | dev_dbg(dev, "iommu: fixed addr = %lx\n", addr); | 988 | dev_dbg(dev, "iommu: fixed addr = %llx\n", addr); |
989 | } | 989 | } |
990 | 990 | ||
991 | static void insert_16M_pte(unsigned long addr, unsigned long *ptab, | 991 | static void insert_16M_pte(unsigned long addr, unsigned long *ptab, |
diff --git a/arch/powerpc/platforms/cell/ras.c b/arch/powerpc/platforms/cell/ras.c index 7b4cefa2199b..5f961c464cc4 100644 --- a/arch/powerpc/platforms/cell/ras.c +++ b/arch/powerpc/platforms/cell/ras.c | |||
@@ -38,16 +38,16 @@ static void dump_fir(int cpu) | |||
38 | /* Todo: do some nicer parsing of bits and based on them go down | 38 | /* Todo: do some nicer parsing of bits and based on them go down |
39 | * to other sub-units FIRs and not only IIC | 39 | * to other sub-units FIRs and not only IIC |
40 | */ | 40 | */ |
41 | printk(KERN_ERR "Global Checkstop FIR : 0x%016lx\n", | 41 | printk(KERN_ERR "Global Checkstop FIR : 0x%016llx\n", |
42 | in_be64(&pregs->checkstop_fir)); | 42 | in_be64(&pregs->checkstop_fir)); |
43 | printk(KERN_ERR "Global Recoverable FIR : 0x%016lx\n", | 43 | printk(KERN_ERR "Global Recoverable FIR : 0x%016llx\n", |
44 | in_be64(&pregs->checkstop_fir)); | 44 | in_be64(&pregs->checkstop_fir)); |
45 | printk(KERN_ERR "Global MachineCheck FIR : 0x%016lx\n", | 45 | printk(KERN_ERR "Global MachineCheck FIR : 0x%016llx\n", |
46 | in_be64(&pregs->spec_att_mchk_fir)); | 46 | in_be64(&pregs->spec_att_mchk_fir)); |
47 | 47 | ||
48 | if (iregs == NULL) | 48 | if (iregs == NULL) |
49 | return; | 49 | return; |
50 | printk(KERN_ERR "IOC FIR : 0x%016lx\n", | 50 | printk(KERN_ERR "IOC FIR : 0x%016llx\n", |
51 | in_be64(&iregs->ioc_fir)); | 51 | in_be64(&iregs->ioc_fir)); |
52 | 52 | ||
53 | } | 53 | } |
diff --git a/arch/powerpc/platforms/cell/spu_base.c b/arch/powerpc/platforms/cell/spu_base.c index a5bdb89a17c3..e487ad68ac11 100644 --- a/arch/powerpc/platforms/cell/spu_base.c +++ b/arch/powerpc/platforms/cell/spu_base.c | |||
@@ -151,7 +151,7 @@ static inline void spu_load_slb(struct spu *spu, int slbe, struct spu_slb *slb) | |||
151 | { | 151 | { |
152 | struct spu_priv2 __iomem *priv2 = spu->priv2; | 152 | struct spu_priv2 __iomem *priv2 = spu->priv2; |
153 | 153 | ||
154 | pr_debug("%s: adding SLB[%d] 0x%016lx 0x%016lx\n", | 154 | pr_debug("%s: adding SLB[%d] 0x%016llx 0x%016llx\n", |
155 | __func__, slbe, slb->vsid, slb->esid); | 155 | __func__, slbe, slb->vsid, slb->esid); |
156 | 156 | ||
157 | out_be64(&priv2->slb_index_W, slbe); | 157 | out_be64(&priv2->slb_index_W, slbe); |
@@ -221,7 +221,7 @@ static int __spu_trap_data_map(struct spu *spu, unsigned long ea, u64 dsisr) | |||
221 | { | 221 | { |
222 | int ret; | 222 | int ret; |
223 | 223 | ||
224 | pr_debug("%s, %lx, %lx\n", __func__, dsisr, ea); | 224 | pr_debug("%s, %llx, %lx\n", __func__, dsisr, ea); |
225 | 225 | ||
226 | /* | 226 | /* |
227 | * Handle kernel space hash faults immediately. User hash | 227 | * Handle kernel space hash faults immediately. User hash |
diff --git a/arch/powerpc/platforms/cell/spu_callbacks.c b/arch/powerpc/platforms/cell/spu_callbacks.c index 19f6bfdbb933..fec1495e6b12 100644 --- a/arch/powerpc/platforms/cell/spu_callbacks.c +++ b/arch/powerpc/platforms/cell/spu_callbacks.c | |||
@@ -54,7 +54,7 @@ long spu_sys_callback(struct spu_syscall_block *s) | |||
54 | long (*syscall)(u64 a1, u64 a2, u64 a3, u64 a4, u64 a5, u64 a6); | 54 | long (*syscall)(u64 a1, u64 a2, u64 a3, u64 a4, u64 a5, u64 a6); |
55 | 55 | ||
56 | if (s->nr_ret >= ARRAY_SIZE(spu_syscall_table)) { | 56 | if (s->nr_ret >= ARRAY_SIZE(spu_syscall_table)) { |
57 | pr_debug("%s: invalid syscall #%ld", __func__, s->nr_ret); | 57 | pr_debug("%s: invalid syscall #%lld", __func__, s->nr_ret); |
58 | return -ENOSYS; | 58 | return -ENOSYS; |
59 | } | 59 | } |
60 | 60 | ||
diff --git a/arch/powerpc/platforms/cell/spufs/coredump.c b/arch/powerpc/platforms/cell/spufs/coredump.c index af116aadba10..c4d4a19235e0 100644 --- a/arch/powerpc/platforms/cell/spufs/coredump.c +++ b/arch/powerpc/platforms/cell/spufs/coredump.c | |||
@@ -42,7 +42,7 @@ static ssize_t do_coredump_read(int num, struct spu_context *ctx, void *buffer, | |||
42 | return spufs_coredump_read[num].read(ctx, buffer, size, off); | 42 | return spufs_coredump_read[num].read(ctx, buffer, size, off); |
43 | 43 | ||
44 | data = spufs_coredump_read[num].get(ctx); | 44 | data = spufs_coredump_read[num].get(ctx); |
45 | ret = snprintf(buffer, size, "0x%.16lx", data); | 45 | ret = snprintf(buffer, size, "0x%.16llx", data); |
46 | if (ret >= size) | 46 | if (ret >= size) |
47 | return size; | 47 | return size; |
48 | return ++ret; /* count trailing NULL */ | 48 | return ++ret; /* count trailing NULL */ |
diff --git a/arch/powerpc/platforms/cell/spufs/fault.c b/arch/powerpc/platforms/cell/spufs/fault.c index f093a581ac74..a4dd3ae7223a 100644 --- a/arch/powerpc/platforms/cell/spufs/fault.c +++ b/arch/powerpc/platforms/cell/spufs/fault.c | |||
@@ -132,7 +132,7 @@ int spufs_handle_class1(struct spu_context *ctx) | |||
132 | 132 | ||
133 | spuctx_switch_state(ctx, SPU_UTIL_IOWAIT); | 133 | spuctx_switch_state(ctx, SPU_UTIL_IOWAIT); |
134 | 134 | ||
135 | pr_debug("ctx %p: ea %016lx, dsisr %016lx state %d\n", ctx, ea, | 135 | pr_debug("ctx %p: ea %016llx, dsisr %016llx state %d\n", ctx, ea, |
136 | dsisr, ctx->state); | 136 | dsisr, ctx->state); |
137 | 137 | ||
138 | ctx->stats.hash_flt++; | 138 | ctx->stats.hash_flt++; |
diff --git a/arch/powerpc/platforms/cell/spufs/file.c b/arch/powerpc/platforms/cell/spufs/file.c index 7106b63d401b..0da7f2bf5ee1 100644 --- a/arch/powerpc/platforms/cell/spufs/file.c +++ b/arch/powerpc/platforms/cell/spufs/file.c | |||
@@ -1654,7 +1654,7 @@ out: | |||
1654 | 1654 | ||
1655 | static int spufs_check_valid_dma(struct mfc_dma_command *cmd) | 1655 | static int spufs_check_valid_dma(struct mfc_dma_command *cmd) |
1656 | { | 1656 | { |
1657 | pr_debug("queueing DMA %x %lx %x %x %x\n", cmd->lsa, | 1657 | pr_debug("queueing DMA %x %llx %x %x %x\n", cmd->lsa, |
1658 | cmd->ea, cmd->size, cmd->tag, cmd->cmd); | 1658 | cmd->ea, cmd->size, cmd->tag, cmd->cmd); |
1659 | 1659 | ||
1660 | switch (cmd->cmd) { | 1660 | switch (cmd->cmd) { |
@@ -1671,7 +1671,7 @@ static int spufs_check_valid_dma(struct mfc_dma_command *cmd) | |||
1671 | } | 1671 | } |
1672 | 1672 | ||
1673 | if ((cmd->lsa & 0xf) != (cmd->ea &0xf)) { | 1673 | if ((cmd->lsa & 0xf) != (cmd->ea &0xf)) { |
1674 | pr_debug("invalid DMA alignment, ea %lx lsa %x\n", | 1674 | pr_debug("invalid DMA alignment, ea %llx lsa %x\n", |
1675 | cmd->ea, cmd->lsa); | 1675 | cmd->ea, cmd->lsa); |
1676 | return -EIO; | 1676 | return -EIO; |
1677 | } | 1677 | } |
@@ -2633,7 +2633,7 @@ static int spufs_show_ctx(struct seq_file *s, void *private) | |||
2633 | } | 2633 | } |
2634 | 2634 | ||
2635 | seq_printf(s, "%c flgs(%lx) sflgs(%lx) pri(%d) ts(%d) spu(%02d)" | 2635 | seq_printf(s, "%c flgs(%lx) sflgs(%lx) pri(%d) ts(%d) spu(%02d)" |
2636 | " %c %lx %lx %lx %lx %x %x\n", | 2636 | " %c %llx %llx %llx %llx %x %x\n", |
2637 | ctx->state == SPU_STATE_SAVED ? 'S' : 'R', | 2637 | ctx->state == SPU_STATE_SAVED ? 'S' : 'R', |
2638 | ctx->flags, | 2638 | ctx->flags, |
2639 | ctx->sched_flags, | 2639 | ctx->sched_flags, |
diff --git a/arch/powerpc/platforms/fsl_uli1575.c b/arch/powerpc/platforms/fsl_uli1575.c index 8c619963becc..1db6b9e037fc 100644 --- a/arch/powerpc/platforms/fsl_uli1575.c +++ b/arch/powerpc/platforms/fsl_uli1575.c | |||
@@ -249,6 +249,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AL, 0x5288, quirk_uli5288); | |||
249 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AL, 0x5229, quirk_uli5229); | 249 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AL, 0x5229, quirk_uli5229); |
250 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AL, 0x5249, quirk_final_uli5249); | 250 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AL, 0x5249, quirk_final_uli5249); |
251 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AL, 0x1575, quirk_final_uli1575); | 251 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AL, 0x1575, quirk_final_uli1575); |
252 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_AL, 0x5229, quirk_uli5229); | ||
252 | 253 | ||
253 | static void __devinit hpcd_quirk_uli1575(struct pci_dev *dev) | 254 | static void __devinit hpcd_quirk_uli1575(struct pci_dev *dev) |
254 | { | 255 | { |
diff --git a/arch/powerpc/platforms/iseries/iommu.c b/arch/powerpc/platforms/iseries/iommu.c index bbe828f1b885..6ed75bffc8ab 100644 --- a/arch/powerpc/platforms/iseries/iommu.c +++ b/arch/powerpc/platforms/iseries/iommu.c | |||
@@ -66,7 +66,7 @@ static int tce_build_iSeries(struct iommu_table *tbl, long index, long npages, | |||
66 | 66 | ||
67 | rc = HvCallXm_setTce((u64)tbl->it_index, (u64)index, tce); | 67 | rc = HvCallXm_setTce((u64)tbl->it_index, (u64)index, tce); |
68 | if (rc) | 68 | if (rc) |
69 | panic("PCI_DMA: HvCallXm_setTce failed, Rc: 0x%lx\n", | 69 | panic("PCI_DMA: HvCallXm_setTce failed, Rc: 0x%llx\n", |
70 | rc); | 70 | rc); |
71 | index++; | 71 | index++; |
72 | uaddr += TCE_PAGE_SIZE; | 72 | uaddr += TCE_PAGE_SIZE; |
@@ -81,7 +81,7 @@ static void tce_free_iSeries(struct iommu_table *tbl, long index, long npages) | |||
81 | while (npages--) { | 81 | while (npages--) { |
82 | rc = HvCallXm_setTce((u64)tbl->it_index, (u64)index, 0); | 82 | rc = HvCallXm_setTce((u64)tbl->it_index, (u64)index, 0); |
83 | if (rc) | 83 | if (rc) |
84 | panic("PCI_DMA: HvCallXm_setTce failed, Rc: 0x%lx\n", | 84 | panic("PCI_DMA: HvCallXm_setTce failed, Rc: 0x%llx\n", |
85 | rc); | 85 | rc); |
86 | index++; | 86 | index++; |
87 | } | 87 | } |
diff --git a/arch/powerpc/platforms/powermac/smp.c b/arch/powerpc/platforms/powermac/smp.c index 6b0711c15eca..bd8817b00fa4 100644 --- a/arch/powerpc/platforms/powermac/smp.c +++ b/arch/powerpc/platforms/powermac/smp.c | |||
@@ -53,7 +53,7 @@ | |||
53 | #include <asm/pmac_low_i2c.h> | 53 | #include <asm/pmac_low_i2c.h> |
54 | #include <asm/pmac_pfunc.h> | 54 | #include <asm/pmac_pfunc.h> |
55 | 55 | ||
56 | #define DEBUG | 56 | #undef DEBUG |
57 | 57 | ||
58 | #ifdef DEBUG | 58 | #ifdef DEBUG |
59 | #define DBG(fmt...) udbg_printf(fmt) | 59 | #define DBG(fmt...) udbg_printf(fmt) |
diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c index c90817acb472..3ee01b4f4257 100644 --- a/arch/powerpc/platforms/pseries/iommu.c +++ b/arch/powerpc/platforms/pseries/iommu.c | |||
@@ -127,10 +127,10 @@ static int tce_build_pSeriesLP(struct iommu_table *tbl, long tcenum, | |||
127 | } | 127 | } |
128 | 128 | ||
129 | if (rc && printk_ratelimit()) { | 129 | if (rc && printk_ratelimit()) { |
130 | printk("tce_build_pSeriesLP: plpar_tce_put failed. rc=%ld\n", rc); | 130 | printk("tce_build_pSeriesLP: plpar_tce_put failed. rc=%lld\n", rc); |
131 | printk("\tindex = 0x%lx\n", (u64)tbl->it_index); | 131 | printk("\tindex = 0x%llx\n", (u64)tbl->it_index); |
132 | printk("\ttcenum = 0x%lx\n", (u64)tcenum); | 132 | printk("\ttcenum = 0x%llx\n", (u64)tcenum); |
133 | printk("\ttce val = 0x%lx\n", tce ); | 133 | printk("\ttce val = 0x%llx\n", tce ); |
134 | show_stack(current, (unsigned long *)__get_SP()); | 134 | show_stack(current, (unsigned long *)__get_SP()); |
135 | } | 135 | } |
136 | 136 | ||
@@ -210,10 +210,10 @@ static int tce_buildmulti_pSeriesLP(struct iommu_table *tbl, long tcenum, | |||
210 | } | 210 | } |
211 | 211 | ||
212 | if (rc && printk_ratelimit()) { | 212 | if (rc && printk_ratelimit()) { |
213 | printk("tce_buildmulti_pSeriesLP: plpar_tce_put failed. rc=%ld\n", rc); | 213 | printk("tce_buildmulti_pSeriesLP: plpar_tce_put failed. rc=%lld\n", rc); |
214 | printk("\tindex = 0x%lx\n", (u64)tbl->it_index); | 214 | printk("\tindex = 0x%llx\n", (u64)tbl->it_index); |
215 | printk("\tnpages = 0x%lx\n", (u64)npages); | 215 | printk("\tnpages = 0x%llx\n", (u64)npages); |
216 | printk("\ttce[0] val = 0x%lx\n", tcep[0]); | 216 | printk("\ttce[0] val = 0x%llx\n", tcep[0]); |
217 | show_stack(current, (unsigned long *)__get_SP()); | 217 | show_stack(current, (unsigned long *)__get_SP()); |
218 | } | 218 | } |
219 | return ret; | 219 | return ret; |
@@ -227,9 +227,9 @@ static void tce_free_pSeriesLP(struct iommu_table *tbl, long tcenum, long npages | |||
227 | rc = plpar_tce_put((u64)tbl->it_index, (u64)tcenum << 12, 0); | 227 | rc = plpar_tce_put((u64)tbl->it_index, (u64)tcenum << 12, 0); |
228 | 228 | ||
229 | if (rc && printk_ratelimit()) { | 229 | if (rc && printk_ratelimit()) { |
230 | printk("tce_free_pSeriesLP: plpar_tce_put failed. rc=%ld\n", rc); | 230 | printk("tce_free_pSeriesLP: plpar_tce_put failed. rc=%lld\n", rc); |
231 | printk("\tindex = 0x%lx\n", (u64)tbl->it_index); | 231 | printk("\tindex = 0x%llx\n", (u64)tbl->it_index); |
232 | printk("\ttcenum = 0x%lx\n", (u64)tcenum); | 232 | printk("\ttcenum = 0x%llx\n", (u64)tcenum); |
233 | show_stack(current, (unsigned long *)__get_SP()); | 233 | show_stack(current, (unsigned long *)__get_SP()); |
234 | } | 234 | } |
235 | 235 | ||
@@ -246,9 +246,9 @@ static void tce_freemulti_pSeriesLP(struct iommu_table *tbl, long tcenum, long n | |||
246 | 246 | ||
247 | if (rc && printk_ratelimit()) { | 247 | if (rc && printk_ratelimit()) { |
248 | printk("tce_freemulti_pSeriesLP: plpar_tce_stuff failed\n"); | 248 | printk("tce_freemulti_pSeriesLP: plpar_tce_stuff failed\n"); |
249 | printk("\trc = %ld\n", rc); | 249 | printk("\trc = %lld\n", rc); |
250 | printk("\tindex = 0x%lx\n", (u64)tbl->it_index); | 250 | printk("\tindex = 0x%llx\n", (u64)tbl->it_index); |
251 | printk("\tnpages = 0x%lx\n", (u64)npages); | 251 | printk("\tnpages = 0x%llx\n", (u64)npages); |
252 | show_stack(current, (unsigned long *)__get_SP()); | 252 | show_stack(current, (unsigned long *)__get_SP()); |
253 | } | 253 | } |
254 | } | 254 | } |
@@ -261,10 +261,9 @@ static unsigned long tce_get_pSeriesLP(struct iommu_table *tbl, long tcenum) | |||
261 | rc = plpar_tce_get((u64)tbl->it_index, (u64)tcenum << 12, &tce_ret); | 261 | rc = plpar_tce_get((u64)tbl->it_index, (u64)tcenum << 12, &tce_ret); |
262 | 262 | ||
263 | if (rc && printk_ratelimit()) { | 263 | if (rc && printk_ratelimit()) { |
264 | printk("tce_get_pSeriesLP: plpar_tce_get failed. rc=%ld\n", | 264 | printk("tce_get_pSeriesLP: plpar_tce_get failed. rc=%lld\n", rc); |
265 | rc); | 265 | printk("\tindex = 0x%llx\n", (u64)tbl->it_index); |
266 | printk("\tindex = 0x%lx\n", (u64)tbl->it_index); | 266 | printk("\ttcenum = 0x%llx\n", (u64)tcenum); |
267 | printk("\ttcenum = 0x%lx\n", (u64)tcenum); | ||
268 | show_stack(current, (unsigned long *)__get_SP()); | 267 | show_stack(current, (unsigned long *)__get_SP()); |
269 | } | 268 | } |
270 | 269 | ||
diff --git a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c index f611d0369cc8..9817f63723dd 100644 --- a/arch/powerpc/sysdev/fsl_pci.c +++ b/arch/powerpc/sysdev/fsl_pci.c | |||
@@ -28,63 +28,104 @@ | |||
28 | #include <sysdev/fsl_pci.h> | 28 | #include <sysdev/fsl_pci.h> |
29 | 29 | ||
30 | #if defined(CONFIG_PPC_85xx) || defined(CONFIG_PPC_86xx) | 30 | #if defined(CONFIG_PPC_85xx) || defined(CONFIG_PPC_86xx) |
31 | static int __init setup_one_atmu(struct ccsr_pci __iomem *pci, | ||
32 | unsigned int index, const struct resource *res, | ||
33 | resource_size_t offset) | ||
34 | { | ||
35 | resource_size_t pci_addr = res->start - offset; | ||
36 | resource_size_t phys_addr = res->start; | ||
37 | resource_size_t size = res->end - res->start + 1; | ||
38 | u32 flags = 0x80044000; /* enable & mem R/W */ | ||
39 | unsigned int i; | ||
40 | |||
41 | pr_debug("PCI MEM resource start 0x%016llx, size 0x%016llx.\n", | ||
42 | (u64)res->start, (u64)size); | ||
43 | |||
44 | if (res->flags & IORESOURCE_PREFETCH) | ||
45 | flags |= 0x10000000; /* enable relaxed ordering */ | ||
46 | |||
47 | for (i = 0; size > 0; i++) { | ||
48 | unsigned int bits = min(__ilog2(size), | ||
49 | __ffs(pci_addr | phys_addr)); | ||
50 | |||
51 | if (index + i >= 5) | ||
52 | return -1; | ||
53 | |||
54 | out_be32(&pci->pow[index + i].potar, pci_addr >> 12); | ||
55 | out_be32(&pci->pow[index + i].potear, (u64)pci_addr >> 44); | ||
56 | out_be32(&pci->pow[index + i].powbar, phys_addr >> 12); | ||
57 | out_be32(&pci->pow[index + i].powar, flags | (bits - 1)); | ||
58 | |||
59 | pci_addr += (resource_size_t)1U << bits; | ||
60 | phys_addr += (resource_size_t)1U << bits; | ||
61 | size -= (resource_size_t)1U << bits; | ||
62 | } | ||
63 | |||
64 | return i; | ||
65 | } | ||
66 | |||
31 | /* atmu setup for fsl pci/pcie controller */ | 67 | /* atmu setup for fsl pci/pcie controller */ |
32 | static void __init setup_pci_atmu(struct pci_controller *hose, | 68 | static void __init setup_pci_atmu(struct pci_controller *hose, |
33 | struct resource *rsrc) | 69 | struct resource *rsrc) |
34 | { | 70 | { |
35 | struct ccsr_pci __iomem *pci; | 71 | struct ccsr_pci __iomem *pci; |
36 | int i; | 72 | int i, j, n; |
37 | 73 | ||
38 | pr_debug("PCI memory map start 0x%016llx, size 0x%016llx\n", | 74 | pr_debug("PCI memory map start 0x%016llx, size 0x%016llx\n", |
39 | (u64)rsrc->start, (u64)rsrc->end - (u64)rsrc->start + 1); | 75 | (u64)rsrc->start, (u64)rsrc->end - (u64)rsrc->start + 1); |
40 | pci = ioremap(rsrc->start, rsrc->end - rsrc->start + 1); | 76 | pci = ioremap(rsrc->start, rsrc->end - rsrc->start + 1); |
77 | if (!pci) { | ||
78 | dev_err(hose->parent, "Unable to map ATMU registers\n"); | ||
79 | return; | ||
80 | } | ||
41 | 81 | ||
42 | /* Disable all windows (except powar0 since its ignored) */ | 82 | /* Disable all windows (except powar0 since it's ignored) */ |
43 | for(i = 1; i < 5; i++) | 83 | for(i = 1; i < 5; i++) |
44 | out_be32(&pci->pow[i].powar, 0); | 84 | out_be32(&pci->pow[i].powar, 0); |
45 | for(i = 0; i < 3; i++) | 85 | for(i = 0; i < 3; i++) |
46 | out_be32(&pci->piw[i].piwar, 0); | 86 | out_be32(&pci->piw[i].piwar, 0); |
47 | 87 | ||
48 | /* Setup outbound MEM window */ | 88 | /* Setup outbound MEM window */ |
49 | for(i = 0; i < 3; i++) | 89 | for(i = 0, j = 1; i < 3; i++) { |
50 | if (hose->mem_resources[i].flags & IORESOURCE_MEM){ | 90 | if (!(hose->mem_resources[i].flags & IORESOURCE_MEM)) |
51 | resource_size_t pci_addr_start = | 91 | continue; |
52 | hose->mem_resources[i].start - | 92 | |
53 | hose->pci_mem_offset; | 93 | n = setup_one_atmu(pci, j, &hose->mem_resources[i], |
54 | pr_debug("PCI MEM resource start 0x%016llx, size 0x%016llx.\n", | 94 | hose->pci_mem_offset); |
55 | (u64)hose->mem_resources[i].start, | 95 | |
56 | (u64)hose->mem_resources[i].end | 96 | if (n < 0 || j >= 5) { |
57 | - (u64)hose->mem_resources[i].start + 1); | 97 | pr_err("Ran out of outbound PCI ATMUs for resource %d!\n", i); |
58 | out_be32(&pci->pow[i+1].potar, (pci_addr_start >> 12)); | 98 | hose->mem_resources[i].flags |= IORESOURCE_DISABLED; |
59 | out_be32(&pci->pow[i+1].potear, 0); | 99 | } else |
60 | out_be32(&pci->pow[i+1].powbar, | 100 | j += n; |
61 | (hose->mem_resources[i].start >> 12)); | 101 | } |
62 | /* Enable, Mem R/W */ | ||
63 | out_be32(&pci->pow[i+1].powar, 0x80044000 | ||
64 | | (__ilog2(hose->mem_resources[i].end | ||
65 | - hose->mem_resources[i].start + 1) - 1)); | ||
66 | } | ||
67 | 102 | ||
68 | /* Setup outbound IO window */ | 103 | /* Setup outbound IO window */ |
69 | if (hose->io_resource.flags & IORESOURCE_IO){ | 104 | if (hose->io_resource.flags & IORESOURCE_IO) { |
70 | pr_debug("PCI IO resource start 0x%016llx, size 0x%016llx, " | 105 | if (j >= 5) { |
71 | "phy base 0x%016llx.\n", | 106 | pr_err("Ran out of outbound PCI ATMUs for IO resource\n"); |
72 | (u64)hose->io_resource.start, | 107 | } else { |
73 | (u64)hose->io_resource.end - (u64)hose->io_resource.start + 1, | 108 | pr_debug("PCI IO resource start 0x%016llx, size 0x%016llx, " |
74 | (u64)hose->io_base_phys); | 109 | "phy base 0x%016llx.\n", |
75 | out_be32(&pci->pow[i+1].potar, (hose->io_resource.start >> 12)); | 110 | (u64)hose->io_resource.start, |
76 | out_be32(&pci->pow[i+1].potear, 0); | 111 | (u64)hose->io_resource.end - (u64)hose->io_resource.start + 1, |
77 | out_be32(&pci->pow[i+1].powbar, (hose->io_base_phys >> 12)); | 112 | (u64)hose->io_base_phys); |
78 | /* Enable, IO R/W */ | 113 | out_be32(&pci->pow[j].potar, (hose->io_resource.start >> 12)); |
79 | out_be32(&pci->pow[i+1].powar, 0x80088000 | 114 | out_be32(&pci->pow[j].potear, 0); |
80 | | (__ilog2(hose->io_resource.end | 115 | out_be32(&pci->pow[j].powbar, (hose->io_base_phys >> 12)); |
81 | - hose->io_resource.start + 1) - 1)); | 116 | /* Enable, IO R/W */ |
117 | out_be32(&pci->pow[j].powar, 0x80088000 | ||
118 | | (__ilog2(hose->io_resource.end | ||
119 | - hose->io_resource.start + 1) - 1)); | ||
120 | } | ||
82 | } | 121 | } |
83 | 122 | ||
84 | /* Setup 2G inbound Memory Window @ 1 */ | 123 | /* Setup 2G inbound Memory Window @ 1 */ |
85 | out_be32(&pci->piw[2].pitar, 0x00000000); | 124 | out_be32(&pci->piw[2].pitar, 0x00000000); |
86 | out_be32(&pci->piw[2].piwbar,0x00000000); | 125 | out_be32(&pci->piw[2].piwbar,0x00000000); |
87 | out_be32(&pci->piw[2].piwar, PIWAR_2G); | 126 | out_be32(&pci->piw[2].piwar, PIWAR_2G); |
127 | |||
128 | iounmap(pci); | ||
88 | } | 129 | } |
89 | 130 | ||
90 | static void __init setup_pci_cmd(struct pci_controller *hose) | 131 | static void __init setup_pci_cmd(struct pci_controller *hose) |
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c index 3e0d89dcdba2..a35297dbac28 100644 --- a/arch/powerpc/sysdev/mpic.c +++ b/arch/powerpc/sysdev/mpic.c | |||
@@ -435,7 +435,7 @@ static void __init mpic_scan_ht_msi(struct mpic *mpic, u8 __iomem *devbase, | |||
435 | addr = addr | ((u64)readl(base + HT_MSI_ADDR_HI) << 32); | 435 | addr = addr | ((u64)readl(base + HT_MSI_ADDR_HI) << 32); |
436 | } | 436 | } |
437 | 437 | ||
438 | printk(KERN_DEBUG "mpic: - HT:%02x.%x %s MSI mapping found @ 0x%lx\n", | 438 | printk(KERN_DEBUG "mpic: - HT:%02x.%x %s MSI mapping found @ 0x%llx\n", |
439 | PCI_SLOT(devfn), PCI_FUNC(devfn), | 439 | PCI_SLOT(devfn), PCI_FUNC(devfn), |
440 | flags & HT_MSI_FLAGS_ENABLE ? "enabled" : "disabled", addr); | 440 | flags & HT_MSI_FLAGS_ENABLE ? "enabled" : "disabled", addr); |
441 | 441 | ||