diff options
Diffstat (limited to 'arch/powerpc')
60 files changed, 730 insertions, 480 deletions
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index bf6cedfa05db..d00131ca0835 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig | |||
@@ -62,7 +62,6 @@ config HAVE_LATENCYTOP_SUPPORT | |||
62 | 62 | ||
63 | config TRACE_IRQFLAGS_SUPPORT | 63 | config TRACE_IRQFLAGS_SUPPORT |
64 | bool | 64 | bool |
65 | depends on PPC64 | ||
66 | default y | 65 | default y |
67 | 66 | ||
68 | config LOCKDEP_SUPPORT | 67 | config LOCKDEP_SUPPORT |
diff --git a/arch/powerpc/boot/.gitignore b/arch/powerpc/boot/.gitignore index 2f50acd11a60..3d80c3e9cf60 100644 --- a/arch/powerpc/boot/.gitignore +++ b/arch/powerpc/boot/.gitignore | |||
@@ -36,3 +36,13 @@ zImage.pseries | |||
36 | zconf.h | 36 | zconf.h |
37 | zlib.h | 37 | zlib.h |
38 | zutil.h | 38 | zutil.h |
39 | fdt.c | ||
40 | fdt.h | ||
41 | fdt_ro.c | ||
42 | fdt_rw.c | ||
43 | fdt_strerror.c | ||
44 | fdt_sw.c | ||
45 | fdt_wip.c | ||
46 | libfdt.h | ||
47 | libfdt_internal.h | ||
48 | |||
diff --git a/arch/powerpc/boot/dts/amigaone.dts b/arch/powerpc/boot/dts/amigaone.dts index 26549fca2ed4..49ac36b16dd7 100644 --- a/arch/powerpc/boot/dts/amigaone.dts +++ b/arch/powerpc/boot/dts/amigaone.dts | |||
@@ -70,8 +70,8 @@ | |||
70 | devsel-speed = <0x00000001>; | 70 | devsel-speed = <0x00000001>; |
71 | min-grant = <0>; | 71 | min-grant = <0>; |
72 | max-latency = <0>; | 72 | max-latency = <0>; |
73 | /* First 64k for I/O at 0x0 on PCI mapped to 0x0 on ISA. */ | 73 | /* First 4k for I/O at 0x0 on PCI mapped to 0x0 on ISA. */ |
74 | ranges = <0x00000001 0 0x01000000 0 0x00000000 0x00010000>; | 74 | ranges = <0x00000001 0 0x01000000 0 0x00000000 0x00001000>; |
75 | interrupt-parent = <&i8259>; | 75 | interrupt-parent = <&i8259>; |
76 | #interrupt-cells = <2>; | 76 | #interrupt-cells = <2>; |
77 | #address-cells = <2>; | 77 | #address-cells = <2>; |
diff --git a/arch/powerpc/boot/dts/mpc8569mds.dts b/arch/powerpc/boot/dts/mpc8569mds.dts index a8dcb018c4a5..a680165292f2 100644 --- a/arch/powerpc/boot/dts/mpc8569mds.dts +++ b/arch/powerpc/boot/dts/mpc8569mds.dts | |||
@@ -253,6 +253,7 @@ | |||
253 | /* Filled in by U-Boot */ | 253 | /* Filled in by U-Boot */ |
254 | clock-frequency = <0>; | 254 | clock-frequency = <0>; |
255 | status = "disabled"; | 255 | status = "disabled"; |
256 | sdhci,1-bit-only; | ||
256 | }; | 257 | }; |
257 | 258 | ||
258 | crypto@30000 { | 259 | crypto@30000 { |
diff --git a/arch/powerpc/boot/dts/warp.dts b/arch/powerpc/boot/dts/warp.dts index 01bfb56bbe80..31605ee4afb6 100644 --- a/arch/powerpc/boot/dts/warp.dts +++ b/arch/powerpc/boot/dts/warp.dts | |||
@@ -261,10 +261,11 @@ | |||
261 | compatible = "gpio-leds"; | 261 | compatible = "gpio-leds"; |
262 | green { | 262 | green { |
263 | gpios = <&GPIO1 0 0>; | 263 | gpios = <&GPIO1 0 0>; |
264 | default-state = "on"; | 264 | default-state = "keep"; |
265 | }; | 265 | }; |
266 | red { | 266 | red { |
267 | gpios = <&GPIO1 1 0>; | 267 | gpios = <&GPIO1 1 0>; |
268 | default-state = "keep"; | ||
268 | }; | 269 | }; |
269 | }; | 270 | }; |
270 | 271 | ||
diff --git a/arch/powerpc/configs/44x/warp_defconfig b/arch/powerpc/configs/44x/warp_defconfig index 3b77f092abe1..787635f23d8f 100644 --- a/arch/powerpc/configs/44x/warp_defconfig +++ b/arch/powerpc/configs/44x/warp_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.29-rc2 | 3 | # Linux kernel version: 2.6.30 |
4 | # Fri Jan 23 07:57:16 2009 | 4 | # Tue Jun 9 23:35:36 2009 |
5 | # | 5 | # |
6 | # CONFIG_PPC64 is not set | 6 | # CONFIG_PPC64 is not set |
7 | 7 | ||
@@ -41,6 +41,7 @@ CONFIG_ARCH_HAS_ILOG2_U32=y | |||
41 | CONFIG_GENERIC_HWEIGHT=y | 41 | CONFIG_GENERIC_HWEIGHT=y |
42 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 42 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
43 | CONFIG_GENERIC_FIND_NEXT_BIT=y | 43 | CONFIG_GENERIC_FIND_NEXT_BIT=y |
44 | CONFIG_GENERIC_GPIO=y | ||
44 | # CONFIG_ARCH_NO_VIRT_TO_BUS is not set | 45 | # CONFIG_ARCH_NO_VIRT_TO_BUS is not set |
45 | CONFIG_PPC=y | 46 | CONFIG_PPC=y |
46 | CONFIG_EARLY_PRINTK=y | 47 | CONFIG_EARLY_PRINTK=y |
@@ -53,10 +54,12 @@ CONFIG_PPC_UDBG_16550=y | |||
53 | # CONFIG_GENERIC_TBSYNC is not set | 54 | # CONFIG_GENERIC_TBSYNC is not set |
54 | CONFIG_AUDIT_ARCH=y | 55 | CONFIG_AUDIT_ARCH=y |
55 | CONFIG_GENERIC_BUG=y | 56 | CONFIG_GENERIC_BUG=y |
57 | CONFIG_DTC=y | ||
56 | # CONFIG_DEFAULT_UIMAGE is not set | 58 | # CONFIG_DEFAULT_UIMAGE is not set |
57 | CONFIG_PPC_DCR_NATIVE=y | 59 | CONFIG_PPC_DCR_NATIVE=y |
58 | # CONFIG_PPC_DCR_MMIO is not set | 60 | # CONFIG_PPC_DCR_MMIO is not set |
59 | CONFIG_PPC_DCR=y | 61 | CONFIG_PPC_DCR=y |
62 | CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y | ||
60 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 63 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
61 | 64 | ||
62 | # | 65 | # |
@@ -74,7 +77,17 @@ CONFIG_SYSVIPC_SYSCTL=y | |||
74 | # CONFIG_BSD_PROCESS_ACCT is not set | 77 | # CONFIG_BSD_PROCESS_ACCT is not set |
75 | # CONFIG_TASKSTATS is not set | 78 | # CONFIG_TASKSTATS is not set |
76 | # CONFIG_AUDIT is not set | 79 | # CONFIG_AUDIT is not set |
77 | # CONFIG_IKCONFIG is not set | 80 | |
81 | # | ||
82 | # RCU Subsystem | ||
83 | # | ||
84 | CONFIG_CLASSIC_RCU=y | ||
85 | # CONFIG_TREE_RCU is not set | ||
86 | # CONFIG_PREEMPT_RCU is not set | ||
87 | # CONFIG_TREE_RCU_TRACE is not set | ||
88 | # CONFIG_PREEMPT_RCU_TRACE is not set | ||
89 | CONFIG_IKCONFIG=y | ||
90 | CONFIG_IKCONFIG_PROC=y | ||
78 | CONFIG_LOG_BUF_SHIFT=14 | 91 | CONFIG_LOG_BUF_SHIFT=14 |
79 | CONFIG_GROUP_SCHED=y | 92 | CONFIG_GROUP_SCHED=y |
80 | CONFIG_FAIR_GROUP_SCHED=y | 93 | CONFIG_FAIR_GROUP_SCHED=y |
@@ -82,27 +95,29 @@ CONFIG_FAIR_GROUP_SCHED=y | |||
82 | CONFIG_USER_SCHED=y | 95 | CONFIG_USER_SCHED=y |
83 | # CONFIG_CGROUP_SCHED is not set | 96 | # CONFIG_CGROUP_SCHED is not set |
84 | # CONFIG_CGROUPS is not set | 97 | # CONFIG_CGROUPS is not set |
85 | CONFIG_SYSFS_DEPRECATED=y | 98 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
86 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
87 | # CONFIG_RELAY is not set | 99 | # CONFIG_RELAY is not set |
88 | # CONFIG_NAMESPACES is not set | 100 | # CONFIG_NAMESPACES is not set |
89 | CONFIG_BLK_DEV_INITRD=y | 101 | CONFIG_BLK_DEV_INITRD=y |
90 | CONFIG_INITRAMFS_SOURCE="" | 102 | CONFIG_INITRAMFS_SOURCE="" |
103 | CONFIG_RD_GZIP=y | ||
104 | # CONFIG_RD_BZIP2 is not set | ||
105 | # CONFIG_RD_LZMA is not set | ||
91 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 106 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
92 | CONFIG_SYSCTL=y | 107 | CONFIG_SYSCTL=y |
108 | CONFIG_ANON_INODES=y | ||
93 | CONFIG_EMBEDDED=y | 109 | CONFIG_EMBEDDED=y |
94 | CONFIG_SYSCTL_SYSCALL=y | 110 | CONFIG_SYSCTL_SYSCALL=y |
95 | CONFIG_KALLSYMS=y | 111 | CONFIG_KALLSYMS=y |
96 | # CONFIG_KALLSYMS_ALL is not set | 112 | # CONFIG_KALLSYMS_ALL is not set |
97 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 113 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
98 | # CONFIG_HOTPLUG is not set | 114 | # CONFIG_STRIP_ASM_SYMS is not set |
115 | CONFIG_HOTPLUG=y | ||
99 | CONFIG_PRINTK=y | 116 | CONFIG_PRINTK=y |
100 | CONFIG_BUG=y | 117 | CONFIG_BUG=y |
101 | CONFIG_ELF_CORE=y | 118 | CONFIG_ELF_CORE=y |
102 | CONFIG_COMPAT_BRK=y | ||
103 | CONFIG_BASE_FULL=y | 119 | CONFIG_BASE_FULL=y |
104 | CONFIG_FUTEX=y | 120 | CONFIG_FUTEX=y |
105 | CONFIG_ANON_INODES=y | ||
106 | CONFIG_EPOLL=y | 121 | CONFIG_EPOLL=y |
107 | CONFIG_SIGNALFD=y | 122 | CONFIG_SIGNALFD=y |
108 | CONFIG_TIMERFD=y | 123 | CONFIG_TIMERFD=y |
@@ -110,10 +125,13 @@ CONFIG_EVENTFD=y | |||
110 | CONFIG_SHMEM=y | 125 | CONFIG_SHMEM=y |
111 | CONFIG_AIO=y | 126 | CONFIG_AIO=y |
112 | CONFIG_VM_EVENT_COUNTERS=y | 127 | CONFIG_VM_EVENT_COUNTERS=y |
113 | CONFIG_SLAB=y | 128 | CONFIG_SLUB_DEBUG=y |
114 | # CONFIG_SLUB is not set | 129 | CONFIG_COMPAT_BRK=y |
130 | # CONFIG_SLAB is not set | ||
131 | CONFIG_SLUB=y | ||
115 | # CONFIG_SLOB is not set | 132 | # CONFIG_SLOB is not set |
116 | # CONFIG_PROFILING is not set | 133 | # CONFIG_PROFILING is not set |
134 | # CONFIG_MARKERS is not set | ||
117 | CONFIG_HAVE_OPROFILE=y | 135 | CONFIG_HAVE_OPROFILE=y |
118 | # CONFIG_KPROBES is not set | 136 | # CONFIG_KPROBES is not set |
119 | CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y | 137 | CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y |
@@ -121,6 +139,7 @@ CONFIG_HAVE_IOREMAP_PROT=y | |||
121 | CONFIG_HAVE_KPROBES=y | 139 | CONFIG_HAVE_KPROBES=y |
122 | CONFIG_HAVE_KRETPROBES=y | 140 | CONFIG_HAVE_KRETPROBES=y |
123 | CONFIG_HAVE_ARCH_TRACEHOOK=y | 141 | CONFIG_HAVE_ARCH_TRACEHOOK=y |
142 | # CONFIG_SLOW_WORK is not set | ||
124 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | 143 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set |
125 | CONFIG_SLABINFO=y | 144 | CONFIG_SLABINFO=y |
126 | CONFIG_RT_MUTEXES=y | 145 | CONFIG_RT_MUTEXES=y |
@@ -133,7 +152,6 @@ CONFIG_MODULE_UNLOAD=y | |||
133 | # CONFIG_MODULE_SRCVERSION_ALL is not set | 152 | # CONFIG_MODULE_SRCVERSION_ALL is not set |
134 | CONFIG_BLOCK=y | 153 | CONFIG_BLOCK=y |
135 | # CONFIG_LBD is not set | 154 | # CONFIG_LBD is not set |
136 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
137 | # CONFIG_BLK_DEV_BSG is not set | 155 | # CONFIG_BLK_DEV_BSG is not set |
138 | # CONFIG_BLK_DEV_INTEGRITY is not set | 156 | # CONFIG_BLK_DEV_INTEGRITY is not set |
139 | 157 | ||
@@ -149,11 +167,6 @@ CONFIG_DEFAULT_AS=y | |||
149 | # CONFIG_DEFAULT_CFQ is not set | 167 | # CONFIG_DEFAULT_CFQ is not set |
150 | # CONFIG_DEFAULT_NOOP is not set | 168 | # CONFIG_DEFAULT_NOOP is not set |
151 | CONFIG_DEFAULT_IOSCHED="anticipatory" | 169 | CONFIG_DEFAULT_IOSCHED="anticipatory" |
152 | CONFIG_CLASSIC_RCU=y | ||
153 | # CONFIG_TREE_RCU is not set | ||
154 | # CONFIG_PREEMPT_RCU is not set | ||
155 | # CONFIG_TREE_RCU_TRACE is not set | ||
156 | # CONFIG_PREEMPT_RCU_TRACE is not set | ||
157 | # CONFIG_FREEZER is not set | 170 | # CONFIG_FREEZER is not set |
158 | 171 | ||
159 | # | 172 | # |
@@ -173,10 +186,11 @@ CONFIG_WARP=y | |||
173 | # CONFIG_ARCHES is not set | 186 | # CONFIG_ARCHES is not set |
174 | # CONFIG_CANYONLANDS is not set | 187 | # CONFIG_CANYONLANDS is not set |
175 | # CONFIG_GLACIER is not set | 188 | # CONFIG_GLACIER is not set |
189 | # CONFIG_REDWOOD is not set | ||
176 | # CONFIG_YOSEMITE is not set | 190 | # CONFIG_YOSEMITE is not set |
177 | # CONFIG_XILINX_VIRTEX440_GENERIC_BOARD is not set | 191 | # CONFIG_XILINX_VIRTEX440_GENERIC_BOARD is not set |
178 | # CONFIG_PPC44x_SIMPLE is not set | 192 | # CONFIG_PPC44x_SIMPLE is not set |
179 | # CONFIG_PPC4xx_GPIO is not set | 193 | CONFIG_PPC4xx_GPIO=y |
180 | CONFIG_440EP=y | 194 | CONFIG_440EP=y |
181 | CONFIG_IBM440EP_ERR42=y | 195 | CONFIG_IBM440EP_ERR42=y |
182 | # CONFIG_IPIC is not set | 196 | # CONFIG_IPIC is not set |
@@ -235,9 +249,13 @@ CONFIG_ZONE_DMA_FLAG=1 | |||
235 | CONFIG_BOUNCE=y | 249 | CONFIG_BOUNCE=y |
236 | CONFIG_VIRT_TO_BUS=y | 250 | CONFIG_VIRT_TO_BUS=y |
237 | CONFIG_UNEVICTABLE_LRU=y | 251 | CONFIG_UNEVICTABLE_LRU=y |
252 | CONFIG_HAVE_MLOCK=y | ||
253 | CONFIG_HAVE_MLOCKED_PAGE_BIT=y | ||
254 | CONFIG_STDBINUTILS=y | ||
238 | CONFIG_PPC_4K_PAGES=y | 255 | CONFIG_PPC_4K_PAGES=y |
239 | # CONFIG_PPC_16K_PAGES is not set | 256 | # CONFIG_PPC_16K_PAGES is not set |
240 | # CONFIG_PPC_64K_PAGES is not set | 257 | # CONFIG_PPC_64K_PAGES is not set |
258 | # CONFIG_PPC_256K_PAGES is not set | ||
241 | CONFIG_FORCE_MAX_ZONEORDER=11 | 259 | CONFIG_FORCE_MAX_ZONEORDER=11 |
242 | CONFIG_PROC_DEVICETREE=y | 260 | CONFIG_PROC_DEVICETREE=y |
243 | CONFIG_CMDLINE_BOOL=y | 261 | CONFIG_CMDLINE_BOOL=y |
@@ -256,6 +274,7 @@ CONFIG_PPC_PCI_CHOICE=y | |||
256 | # CONFIG_PCI_DOMAINS is not set | 274 | # CONFIG_PCI_DOMAINS is not set |
257 | # CONFIG_PCI_SYSCALL is not set | 275 | # CONFIG_PCI_SYSCALL is not set |
258 | # CONFIG_ARCH_SUPPORTS_MSI is not set | 276 | # CONFIG_ARCH_SUPPORTS_MSI is not set |
277 | # CONFIG_PCCARD is not set | ||
259 | # CONFIG_HAS_RAPIDIO is not set | 278 | # CONFIG_HAS_RAPIDIO is not set |
260 | 279 | ||
261 | # | 280 | # |
@@ -271,14 +290,12 @@ CONFIG_PAGE_OFFSET=0xc0000000 | |||
271 | CONFIG_KERNEL_START=0xc0000000 | 290 | CONFIG_KERNEL_START=0xc0000000 |
272 | CONFIG_PHYSICAL_START=0x00000000 | 291 | CONFIG_PHYSICAL_START=0x00000000 |
273 | CONFIG_TASK_SIZE=0xc0000000 | 292 | CONFIG_TASK_SIZE=0xc0000000 |
274 | CONFIG_CONSISTENT_START=0xff100000 | ||
275 | CONFIG_CONSISTENT_SIZE=0x00200000 | 293 | CONFIG_CONSISTENT_SIZE=0x00200000 |
276 | CONFIG_NET=y | 294 | CONFIG_NET=y |
277 | 295 | ||
278 | # | 296 | # |
279 | # Networking options | 297 | # Networking options |
280 | # | 298 | # |
281 | CONFIG_COMPAT_NET_DEV_OPS=y | ||
282 | CONFIG_PACKET=y | 299 | CONFIG_PACKET=y |
283 | # CONFIG_PACKET_MMAP is not set | 300 | # CONFIG_PACKET_MMAP is not set |
284 | CONFIG_UNIX=y | 301 | CONFIG_UNIX=y |
@@ -353,6 +370,7 @@ CONFIG_VLAN_8021Q=y | |||
353 | # CONFIG_LAPB is not set | 370 | # CONFIG_LAPB is not set |
354 | # CONFIG_ECONET is not set | 371 | # CONFIG_ECONET is not set |
355 | # CONFIG_WAN_ROUTER is not set | 372 | # CONFIG_WAN_ROUTER is not set |
373 | # CONFIG_PHONET is not set | ||
356 | # CONFIG_NET_SCHED is not set | 374 | # CONFIG_NET_SCHED is not set |
357 | # CONFIG_DCB is not set | 375 | # CONFIG_DCB is not set |
358 | 376 | ||
@@ -365,7 +383,6 @@ CONFIG_VLAN_8021Q=y | |||
365 | # CONFIG_IRDA is not set | 383 | # CONFIG_IRDA is not set |
366 | # CONFIG_BT is not set | 384 | # CONFIG_BT is not set |
367 | # CONFIG_AF_RXRPC is not set | 385 | # CONFIG_AF_RXRPC is not set |
368 | # CONFIG_PHONET is not set | ||
369 | # CONFIG_WIRELESS is not set | 386 | # CONFIG_WIRELESS is not set |
370 | # CONFIG_WIMAX is not set | 387 | # CONFIG_WIMAX is not set |
371 | # CONFIG_RFKILL is not set | 388 | # CONFIG_RFKILL is not set |
@@ -378,8 +395,12 @@ CONFIG_VLAN_8021Q=y | |||
378 | # | 395 | # |
379 | # Generic Driver Options | 396 | # Generic Driver Options |
380 | # | 397 | # |
398 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
381 | # CONFIG_STANDALONE is not set | 399 | # CONFIG_STANDALONE is not set |
382 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 400 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
401 | CONFIG_FW_LOADER=y | ||
402 | # CONFIG_FIRMWARE_IN_KERNEL is not set | ||
403 | CONFIG_EXTRA_FIRMWARE="" | ||
383 | # CONFIG_DEBUG_DRIVER is not set | 404 | # CONFIG_DEBUG_DRIVER is not set |
384 | # CONFIG_DEBUG_DEVRES is not set | 405 | # CONFIG_DEBUG_DEVRES is not set |
385 | # CONFIG_SYS_HYPERVISOR is not set | 406 | # CONFIG_SYS_HYPERVISOR is not set |
@@ -471,13 +492,21 @@ CONFIG_MTD_NAND_NDFC=y | |||
471 | # LPDDR flash memory drivers | 492 | # LPDDR flash memory drivers |
472 | # | 493 | # |
473 | # CONFIG_MTD_LPDDR is not set | 494 | # CONFIG_MTD_LPDDR is not set |
474 | # CONFIG_MTD_QINFO_PROBE is not set | ||
475 | 495 | ||
476 | # | 496 | # |
477 | # UBI - Unsorted block images | 497 | # UBI - Unsorted block images |
478 | # | 498 | # |
479 | # CONFIG_MTD_UBI is not set | 499 | CONFIG_MTD_UBI=y |
500 | CONFIG_MTD_UBI_WL_THRESHOLD=4096 | ||
501 | CONFIG_MTD_UBI_BEB_RESERVE=1 | ||
502 | # CONFIG_MTD_UBI_GLUEBI is not set | ||
503 | |||
504 | # | ||
505 | # UBI debugging options | ||
506 | # | ||
507 | # CONFIG_MTD_UBI_DEBUG is not set | ||
480 | CONFIG_OF_DEVICE=y | 508 | CONFIG_OF_DEVICE=y |
509 | CONFIG_OF_GPIO=y | ||
481 | CONFIG_OF_I2C=y | 510 | CONFIG_OF_I2C=y |
482 | # CONFIG_PARPORT is not set | 511 | # CONFIG_PARPORT is not set |
483 | CONFIG_BLK_DEV=y | 512 | CONFIG_BLK_DEV=y |
@@ -495,10 +524,17 @@ CONFIG_BLK_DEV_RAM_SIZE=4096 | |||
495 | # CONFIG_XILINX_SYSACE is not set | 524 | # CONFIG_XILINX_SYSACE is not set |
496 | # CONFIG_BLK_DEV_HD is not set | 525 | # CONFIG_BLK_DEV_HD is not set |
497 | CONFIG_MISC_DEVICES=y | 526 | CONFIG_MISC_DEVICES=y |
498 | # CONFIG_EEPROM_93CX6 is not set | ||
499 | # CONFIG_ICS932S401 is not set | 527 | # CONFIG_ICS932S401 is not set |
500 | # CONFIG_ENCLOSURE_SERVICES is not set | 528 | # CONFIG_ENCLOSURE_SERVICES is not set |
529 | # CONFIG_ISL29003 is not set | ||
501 | # CONFIG_C2PORT is not set | 530 | # CONFIG_C2PORT is not set |
531 | |||
532 | # | ||
533 | # EEPROM support | ||
534 | # | ||
535 | CONFIG_EEPROM_AT24=y | ||
536 | # CONFIG_EEPROM_LEGACY is not set | ||
537 | # CONFIG_EEPROM_93CX6 is not set | ||
502 | CONFIG_HAVE_IDE=y | 538 | CONFIG_HAVE_IDE=y |
503 | # CONFIG_IDE is not set | 539 | # CONFIG_IDE is not set |
504 | 540 | ||
@@ -529,7 +565,7 @@ CONFIG_BLK_DEV_SD=y | |||
529 | # CONFIG_SCSI_CONSTANTS is not set | 565 | # CONFIG_SCSI_CONSTANTS is not set |
530 | # CONFIG_SCSI_LOGGING is not set | 566 | # CONFIG_SCSI_LOGGING is not set |
531 | # CONFIG_SCSI_SCAN_ASYNC is not set | 567 | # CONFIG_SCSI_SCAN_ASYNC is not set |
532 | CONFIG_SCSI_WAIT_SCAN=m | 568 | # CONFIG_SCSI_WAIT_SCAN is not set |
533 | 569 | ||
534 | # | 570 | # |
535 | # SCSI Transports | 571 | # SCSI Transports |
@@ -541,10 +577,12 @@ CONFIG_SCSI_SPI_ATTRS=y | |||
541 | # CONFIG_SCSI_SRP_ATTRS is not set | 577 | # CONFIG_SCSI_SRP_ATTRS is not set |
542 | # CONFIG_SCSI_LOWLEVEL is not set | 578 | # CONFIG_SCSI_LOWLEVEL is not set |
543 | # CONFIG_SCSI_DH is not set | 579 | # CONFIG_SCSI_DH is not set |
580 | # CONFIG_SCSI_OSD_INITIATOR is not set | ||
544 | # CONFIG_ATA is not set | 581 | # CONFIG_ATA is not set |
545 | # CONFIG_MD is not set | 582 | # CONFIG_MD is not set |
546 | # CONFIG_MACINTOSH_DRIVERS is not set | 583 | # CONFIG_MACINTOSH_DRIVERS is not set |
547 | CONFIG_NETDEVICES=y | 584 | CONFIG_NETDEVICES=y |
585 | CONFIG_COMPAT_NET_DEV_OPS=y | ||
548 | # CONFIG_DUMMY is not set | 586 | # CONFIG_DUMMY is not set |
549 | # CONFIG_BONDING is not set | 587 | # CONFIG_BONDING is not set |
550 | # CONFIG_MACVLAN is not set | 588 | # CONFIG_MACVLAN is not set |
@@ -554,6 +592,8 @@ CONFIG_NETDEVICES=y | |||
554 | # CONFIG_PHYLIB is not set | 592 | # CONFIG_PHYLIB is not set |
555 | CONFIG_NET_ETHERNET=y | 593 | CONFIG_NET_ETHERNET=y |
556 | CONFIG_MII=y | 594 | CONFIG_MII=y |
595 | # CONFIG_ETHOC is not set | ||
596 | # CONFIG_DNET is not set | ||
557 | CONFIG_IBM_NEW_EMAC=y | 597 | CONFIG_IBM_NEW_EMAC=y |
558 | CONFIG_IBM_NEW_EMAC_RXB=128 | 598 | CONFIG_IBM_NEW_EMAC_RXB=128 |
559 | CONFIG_IBM_NEW_EMAC_TXB=64 | 599 | CONFIG_IBM_NEW_EMAC_TXB=64 |
@@ -577,7 +617,6 @@ CONFIG_IBM_NEW_EMAC_ZMII=y | |||
577 | # | 617 | # |
578 | # CONFIG_WLAN_PRE80211 is not set | 618 | # CONFIG_WLAN_PRE80211 is not set |
579 | # CONFIG_WLAN_80211 is not set | 619 | # CONFIG_WLAN_80211 is not set |
580 | # CONFIG_IWLWIFI_LEDS is not set | ||
581 | 620 | ||
582 | # | 621 | # |
583 | # Enable WiMAX (Networking options) to see the WiMAX drivers | 622 | # Enable WiMAX (Networking options) to see the WiMAX drivers |
@@ -646,6 +685,7 @@ CONFIG_LEGACY_PTY_COUNT=256 | |||
646 | # CONFIG_HVC_UDBG is not set | 685 | # CONFIG_HVC_UDBG is not set |
647 | # CONFIG_IPMI_HANDLER is not set | 686 | # CONFIG_IPMI_HANDLER is not set |
648 | CONFIG_HW_RANDOM=y | 687 | CONFIG_HW_RANDOM=y |
688 | # CONFIG_HW_RANDOM_TIMERIOMEM is not set | ||
649 | # CONFIG_NVRAM is not set | 689 | # CONFIG_NVRAM is not set |
650 | # CONFIG_GEN_RTC is not set | 690 | # CONFIG_GEN_RTC is not set |
651 | # CONFIG_R3964 is not set | 691 | # CONFIG_R3964 is not set |
@@ -663,6 +703,7 @@ CONFIG_I2C_HELPER_AUTO=y | |||
663 | # | 703 | # |
664 | # I2C system bus drivers (mostly embedded / system-on-chip) | 704 | # I2C system bus drivers (mostly embedded / system-on-chip) |
665 | # | 705 | # |
706 | # CONFIG_I2C_GPIO is not set | ||
666 | CONFIG_I2C_IBM_IIC=y | 707 | CONFIG_I2C_IBM_IIC=y |
667 | # CONFIG_I2C_MPC is not set | 708 | # CONFIG_I2C_MPC is not set |
668 | # CONFIG_I2C_OCORES is not set | 709 | # CONFIG_I2C_OCORES is not set |
@@ -685,12 +726,9 @@ CONFIG_I2C_IBM_IIC=y | |||
685 | # Miscellaneous I2C Chip support | 726 | # Miscellaneous I2C Chip support |
686 | # | 727 | # |
687 | # CONFIG_DS1682 is not set | 728 | # CONFIG_DS1682 is not set |
688 | CONFIG_EEPROM_AT24=y | ||
689 | CONFIG_EEPROM_LEGACY=y | ||
690 | # CONFIG_SENSORS_PCF8574 is not set | 729 | # CONFIG_SENSORS_PCF8574 is not set |
691 | # CONFIG_PCF8575 is not set | 730 | # CONFIG_PCF8575 is not set |
692 | # CONFIG_SENSORS_PCA9539 is not set | 731 | # CONFIG_SENSORS_PCA9539 is not set |
693 | # CONFIG_SENSORS_PCF8591 is not set | ||
694 | # CONFIG_SENSORS_MAX6875 is not set | 732 | # CONFIG_SENSORS_MAX6875 is not set |
695 | # CONFIG_SENSORS_TSL2550 is not set | 733 | # CONFIG_SENSORS_TSL2550 is not set |
696 | # CONFIG_I2C_DEBUG_CORE is not set | 734 | # CONFIG_I2C_DEBUG_CORE is not set |
@@ -699,7 +737,30 @@ CONFIG_EEPROM_LEGACY=y | |||
699 | # CONFIG_I2C_DEBUG_CHIP is not set | 737 | # CONFIG_I2C_DEBUG_CHIP is not set |
700 | # CONFIG_SPI is not set | 738 | # CONFIG_SPI is not set |
701 | CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y | 739 | CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y |
702 | # CONFIG_GPIOLIB is not set | 740 | CONFIG_ARCH_REQUIRE_GPIOLIB=y |
741 | CONFIG_GPIOLIB=y | ||
742 | # CONFIG_DEBUG_GPIO is not set | ||
743 | CONFIG_GPIO_SYSFS=y | ||
744 | |||
745 | # | ||
746 | # Memory mapped GPIO expanders: | ||
747 | # | ||
748 | # CONFIG_GPIO_XILINX is not set | ||
749 | |||
750 | # | ||
751 | # I2C GPIO expanders: | ||
752 | # | ||
753 | # CONFIG_GPIO_MAX732X is not set | ||
754 | # CONFIG_GPIO_PCA953X is not set | ||
755 | # CONFIG_GPIO_PCF857X is not set | ||
756 | |||
757 | # | ||
758 | # PCI GPIO expanders: | ||
759 | # | ||
760 | |||
761 | # | ||
762 | # SPI GPIO expanders: | ||
763 | # | ||
703 | # CONFIG_W1 is not set | 764 | # CONFIG_W1 is not set |
704 | # CONFIG_POWER_SUPPLY is not set | 765 | # CONFIG_POWER_SUPPLY is not set |
705 | CONFIG_HWMON=y | 766 | CONFIG_HWMON=y |
@@ -721,6 +782,7 @@ CONFIG_SENSORS_AD7414=y | |||
721 | # CONFIG_SENSORS_F71805F is not set | 782 | # CONFIG_SENSORS_F71805F is not set |
722 | # CONFIG_SENSORS_F71882FG is not set | 783 | # CONFIG_SENSORS_F71882FG is not set |
723 | # CONFIG_SENSORS_F75375S is not set | 784 | # CONFIG_SENSORS_F75375S is not set |
785 | # CONFIG_SENSORS_G760A is not set | ||
724 | # CONFIG_SENSORS_GL518SM is not set | 786 | # CONFIG_SENSORS_GL518SM is not set |
725 | # CONFIG_SENSORS_GL520SM is not set | 787 | # CONFIG_SENSORS_GL520SM is not set |
726 | # CONFIG_SENSORS_IT87 is not set | 788 | # CONFIG_SENSORS_IT87 is not set |
@@ -735,11 +797,15 @@ CONFIG_SENSORS_AD7414=y | |||
735 | # CONFIG_SENSORS_LM90 is not set | 797 | # CONFIG_SENSORS_LM90 is not set |
736 | # CONFIG_SENSORS_LM92 is not set | 798 | # CONFIG_SENSORS_LM92 is not set |
737 | # CONFIG_SENSORS_LM93 is not set | 799 | # CONFIG_SENSORS_LM93 is not set |
800 | # CONFIG_SENSORS_LTC4215 is not set | ||
738 | # CONFIG_SENSORS_LTC4245 is not set | 801 | # CONFIG_SENSORS_LTC4245 is not set |
802 | # CONFIG_SENSORS_LM95241 is not set | ||
739 | # CONFIG_SENSORS_MAX1619 is not set | 803 | # CONFIG_SENSORS_MAX1619 is not set |
740 | # CONFIG_SENSORS_MAX6650 is not set | 804 | # CONFIG_SENSORS_MAX6650 is not set |
741 | # CONFIG_SENSORS_PC87360 is not set | 805 | # CONFIG_SENSORS_PC87360 is not set |
742 | # CONFIG_SENSORS_PC87427 is not set | 806 | # CONFIG_SENSORS_PC87427 is not set |
807 | # CONFIG_SENSORS_PCF8591 is not set | ||
808 | # CONFIG_SENSORS_SHT15 is not set | ||
743 | # CONFIG_SENSORS_DME1737 is not set | 809 | # CONFIG_SENSORS_DME1737 is not set |
744 | # CONFIG_SENSORS_SMSC47M1 is not set | 810 | # CONFIG_SENSORS_SMSC47M1 is not set |
745 | # CONFIG_SENSORS_SMSC47M192 is not set | 811 | # CONFIG_SENSORS_SMSC47M192 is not set |
@@ -785,6 +851,7 @@ CONFIG_SSB_POSSIBLE=y | |||
785 | # CONFIG_MFD_CORE is not set | 851 | # CONFIG_MFD_CORE is not set |
786 | # CONFIG_MFD_SM501 is not set | 852 | # CONFIG_MFD_SM501 is not set |
787 | # CONFIG_HTC_PASIC3 is not set | 853 | # CONFIG_HTC_PASIC3 is not set |
854 | # CONFIG_TPS65010 is not set | ||
788 | # CONFIG_TWL4030_CORE is not set | 855 | # CONFIG_TWL4030_CORE is not set |
789 | # CONFIG_MFD_TMIO is not set | 856 | # CONFIG_MFD_TMIO is not set |
790 | # CONFIG_PMIC_DA903X is not set | 857 | # CONFIG_PMIC_DA903X is not set |
@@ -870,11 +937,11 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y | |||
870 | # CONFIG_USB_TMC is not set | 937 | # CONFIG_USB_TMC is not set |
871 | 938 | ||
872 | # | 939 | # |
873 | # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed; | 940 | # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may |
874 | # | 941 | # |
875 | 942 | ||
876 | # | 943 | # |
877 | # see USB_STORAGE Help for more information | 944 | # also be needed; see USB_STORAGE Help for more info |
878 | # | 945 | # |
879 | CONFIG_USB_STORAGE=y | 946 | CONFIG_USB_STORAGE=y |
880 | # CONFIG_USB_STORAGE_DEBUG is not set | 947 | # CONFIG_USB_STORAGE_DEBUG is not set |
@@ -915,7 +982,6 @@ CONFIG_USB_STORAGE=y | |||
915 | # CONFIG_USB_LED is not set | 982 | # CONFIG_USB_LED is not set |
916 | # CONFIG_USB_CYPRESS_CY7C63 is not set | 983 | # CONFIG_USB_CYPRESS_CY7C63 is not set |
917 | # CONFIG_USB_CYTHERM is not set | 984 | # CONFIG_USB_CYTHERM is not set |
918 | # CONFIG_USB_PHIDGET is not set | ||
919 | # CONFIG_USB_IDMOUSE is not set | 985 | # CONFIG_USB_IDMOUSE is not set |
920 | # CONFIG_USB_FTDI_ELAN is not set | 986 | # CONFIG_USB_FTDI_ELAN is not set |
921 | # CONFIG_USB_APPLEDISPLAY is not set | 987 | # CONFIG_USB_APPLEDISPLAY is not set |
@@ -929,6 +995,8 @@ CONFIG_USB_STORAGE=y | |||
929 | # | 995 | # |
930 | # OTG and related infrastructure | 996 | # OTG and related infrastructure |
931 | # | 997 | # |
998 | # CONFIG_USB_GPIO_VBUS is not set | ||
999 | # CONFIG_NOP_USB_XCEIV is not set | ||
932 | CONFIG_MMC=y | 1000 | CONFIG_MMC=y |
933 | # CONFIG_MMC_DEBUG is not set | 1001 | # CONFIG_MMC_DEBUG is not set |
934 | # CONFIG_MMC_UNSAFE_RESUME is not set | 1002 | # CONFIG_MMC_UNSAFE_RESUME is not set |
@@ -946,6 +1014,7 @@ CONFIG_MMC_BLOCK_BOUNCE=y | |||
946 | # | 1014 | # |
947 | # CONFIG_MMC_SDHCI is not set | 1015 | # CONFIG_MMC_SDHCI is not set |
948 | # CONFIG_MMC_WBSD is not set | 1016 | # CONFIG_MMC_WBSD is not set |
1017 | CONFIG_MMC_PIKASD=y | ||
949 | # CONFIG_MEMSTICK is not set | 1018 | # CONFIG_MEMSTICK is not set |
950 | CONFIG_NEW_LEDS=y | 1019 | CONFIG_NEW_LEDS=y |
951 | CONFIG_LEDS_CLASS=y | 1020 | CONFIG_LEDS_CLASS=y |
@@ -953,16 +1022,31 @@ CONFIG_LEDS_CLASS=y | |||
953 | # | 1022 | # |
954 | # LED drivers | 1023 | # LED drivers |
955 | # | 1024 | # |
1025 | CONFIG_LEDS_GPIO=y | ||
1026 | # CONFIG_LEDS_GPIO_PLATFORM is not set | ||
1027 | CONFIG_LEDS_GPIO_OF=y | ||
1028 | # CONFIG_LEDS_LP5521 is not set | ||
956 | # CONFIG_LEDS_PCA955X is not set | 1029 | # CONFIG_LEDS_PCA955X is not set |
1030 | # CONFIG_LEDS_BD2802 is not set | ||
957 | 1031 | ||
958 | # | 1032 | # |
959 | # LED Triggers | 1033 | # LED Triggers |
960 | # | 1034 | # |
961 | # CONFIG_LEDS_TRIGGERS is not set | 1035 | CONFIG_LEDS_TRIGGERS=y |
1036 | # CONFIG_LEDS_TRIGGER_TIMER is not set | ||
1037 | # CONFIG_LEDS_TRIGGER_HEARTBEAT is not set | ||
1038 | # CONFIG_LEDS_TRIGGER_BACKLIGHT is not set | ||
1039 | # CONFIG_LEDS_TRIGGER_GPIO is not set | ||
1040 | CONFIG_LEDS_TRIGGER_DEFAULT_ON=y | ||
1041 | |||
1042 | # | ||
1043 | # iptables trigger is under Netfilter config (LED target) | ||
1044 | # | ||
962 | # CONFIG_ACCESSIBILITY is not set | 1045 | # CONFIG_ACCESSIBILITY is not set |
963 | # CONFIG_EDAC is not set | 1046 | # CONFIG_EDAC is not set |
964 | # CONFIG_RTC_CLASS is not set | 1047 | # CONFIG_RTC_CLASS is not set |
965 | # CONFIG_DMADEVICES is not set | 1048 | # CONFIG_DMADEVICES is not set |
1049 | # CONFIG_AUXDISPLAY is not set | ||
966 | # CONFIG_UIO is not set | 1050 | # CONFIG_UIO is not set |
967 | # CONFIG_STAGING is not set | 1051 | # CONFIG_STAGING is not set |
968 | 1052 | ||
@@ -973,6 +1057,7 @@ CONFIG_EXT2_FS=y | |||
973 | # CONFIG_EXT2_FS_XATTR is not set | 1057 | # CONFIG_EXT2_FS_XATTR is not set |
974 | # CONFIG_EXT2_FS_XIP is not set | 1058 | # CONFIG_EXT2_FS_XIP is not set |
975 | CONFIG_EXT3_FS=y | 1059 | CONFIG_EXT3_FS=y |
1060 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | ||
976 | # CONFIG_EXT3_FS_XATTR is not set | 1061 | # CONFIG_EXT3_FS_XATTR is not set |
977 | # CONFIG_EXT4_FS is not set | 1062 | # CONFIG_EXT4_FS is not set |
978 | CONFIG_JBD=y | 1063 | CONFIG_JBD=y |
@@ -993,6 +1078,11 @@ CONFIG_INOTIFY_USER=y | |||
993 | # CONFIG_FUSE_FS is not set | 1078 | # CONFIG_FUSE_FS is not set |
994 | 1079 | ||
995 | # | 1080 | # |
1081 | # Caches | ||
1082 | # | ||
1083 | # CONFIG_FSCACHE is not set | ||
1084 | |||
1085 | # | ||
996 | # CD-ROM/DVD Filesystems | 1086 | # CD-ROM/DVD Filesystems |
997 | # | 1087 | # |
998 | # CONFIG_ISO9660_FS is not set | 1088 | # CONFIG_ISO9660_FS is not set |
@@ -1039,6 +1129,12 @@ CONFIG_JFFS2_ZLIB=y | |||
1039 | # CONFIG_JFFS2_LZO is not set | 1129 | # CONFIG_JFFS2_LZO is not set |
1040 | CONFIG_JFFS2_RTIME=y | 1130 | CONFIG_JFFS2_RTIME=y |
1041 | # CONFIG_JFFS2_RUBIN is not set | 1131 | # CONFIG_JFFS2_RUBIN is not set |
1132 | CONFIG_UBIFS_FS=y | ||
1133 | # CONFIG_UBIFS_FS_XATTR is not set | ||
1134 | # CONFIG_UBIFS_FS_ADVANCED_COMPR is not set | ||
1135 | CONFIG_UBIFS_FS_LZO=y | ||
1136 | CONFIG_UBIFS_FS_ZLIB=y | ||
1137 | # CONFIG_UBIFS_FS_DEBUG is not set | ||
1042 | CONFIG_CRAMFS=y | 1138 | CONFIG_CRAMFS=y |
1043 | # CONFIG_SQUASHFS is not set | 1139 | # CONFIG_SQUASHFS is not set |
1044 | # CONFIG_VXFS_FS is not set | 1140 | # CONFIG_VXFS_FS is not set |
@@ -1049,6 +1145,7 @@ CONFIG_CRAMFS=y | |||
1049 | # CONFIG_ROMFS_FS is not set | 1145 | # CONFIG_ROMFS_FS is not set |
1050 | # CONFIG_SYSV_FS is not set | 1146 | # CONFIG_SYSV_FS is not set |
1051 | # CONFIG_UFS_FS is not set | 1147 | # CONFIG_UFS_FS is not set |
1148 | # CONFIG_NILFS2_FS is not set | ||
1052 | CONFIG_NETWORK_FILESYSTEMS=y | 1149 | CONFIG_NETWORK_FILESYSTEMS=y |
1053 | CONFIG_NFS_FS=y | 1150 | CONFIG_NFS_FS=y |
1054 | CONFIG_NFS_V3=y | 1151 | CONFIG_NFS_V3=y |
@@ -1060,7 +1157,6 @@ CONFIG_LOCKD=y | |||
1060 | CONFIG_LOCKD_V4=y | 1157 | CONFIG_LOCKD_V4=y |
1061 | CONFIG_NFS_COMMON=y | 1158 | CONFIG_NFS_COMMON=y |
1062 | CONFIG_SUNRPC=y | 1159 | CONFIG_SUNRPC=y |
1063 | # CONFIG_SUNRPC_REGISTER_V4 is not set | ||
1064 | # CONFIG_RPCSEC_GSS_KRB5 is not set | 1160 | # CONFIG_RPCSEC_GSS_KRB5 is not set |
1065 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 1161 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
1066 | # CONFIG_SMB_FS is not set | 1162 | # CONFIG_SMB_FS is not set |
@@ -1115,6 +1211,7 @@ CONFIG_NLS_ISO8859_15=y | |||
1115 | # CONFIG_NLS_KOI8_U is not set | 1211 | # CONFIG_NLS_KOI8_U is not set |
1116 | CONFIG_NLS_UTF8=y | 1212 | CONFIG_NLS_UTF8=y |
1117 | # CONFIG_DLM is not set | 1213 | # CONFIG_DLM is not set |
1214 | # CONFIG_BINARY_PRINTF is not set | ||
1118 | 1215 | ||
1119 | # | 1216 | # |
1120 | # Library routines | 1217 | # Library routines |
@@ -1122,7 +1219,7 @@ CONFIG_NLS_UTF8=y | |||
1122 | CONFIG_BITREVERSE=y | 1219 | CONFIG_BITREVERSE=y |
1123 | CONFIG_GENERIC_FIND_LAST_BIT=y | 1220 | CONFIG_GENERIC_FIND_LAST_BIT=y |
1124 | CONFIG_CRC_CCITT=y | 1221 | CONFIG_CRC_CCITT=y |
1125 | # CONFIG_CRC16 is not set | 1222 | CONFIG_CRC16=y |
1126 | CONFIG_CRC_T10DIF=y | 1223 | CONFIG_CRC_T10DIF=y |
1127 | # CONFIG_CRC_ITU_T is not set | 1224 | # CONFIG_CRC_ITU_T is not set |
1128 | CONFIG_CRC32=y | 1225 | CONFIG_CRC32=y |
@@ -1130,16 +1227,19 @@ CONFIG_CRC32=y | |||
1130 | # CONFIG_LIBCRC32C is not set | 1227 | # CONFIG_LIBCRC32C is not set |
1131 | CONFIG_ZLIB_INFLATE=y | 1228 | CONFIG_ZLIB_INFLATE=y |
1132 | CONFIG_ZLIB_DEFLATE=y | 1229 | CONFIG_ZLIB_DEFLATE=y |
1133 | CONFIG_PLIST=y | 1230 | CONFIG_LZO_COMPRESS=y |
1231 | CONFIG_LZO_DECOMPRESS=y | ||
1232 | CONFIG_DECOMPRESS_GZIP=y | ||
1134 | CONFIG_HAS_IOMEM=y | 1233 | CONFIG_HAS_IOMEM=y |
1135 | CONFIG_HAS_IOPORT=y | 1234 | CONFIG_HAS_IOPORT=y |
1136 | CONFIG_HAS_DMA=y | 1235 | CONFIG_HAS_DMA=y |
1137 | CONFIG_HAVE_LMB=y | 1236 | CONFIG_HAVE_LMB=y |
1237 | CONFIG_NLATTR=y | ||
1138 | 1238 | ||
1139 | # | 1239 | # |
1140 | # Kernel hacking | 1240 | # Kernel hacking |
1141 | # | 1241 | # |
1142 | # CONFIG_PRINTK_TIME is not set | 1242 | CONFIG_PRINTK_TIME=y |
1143 | CONFIG_ENABLE_WARN_DEPRECATED=y | 1243 | CONFIG_ENABLE_WARN_DEPRECATED=y |
1144 | CONFIG_ENABLE_MUST_CHECK=y | 1244 | CONFIG_ENABLE_MUST_CHECK=y |
1145 | CONFIG_FRAME_WARN=1024 | 1245 | CONFIG_FRAME_WARN=1024 |
@@ -1152,11 +1252,15 @@ CONFIG_DEBUG_KERNEL=y | |||
1152 | CONFIG_DETECT_SOFTLOCKUP=y | 1252 | CONFIG_DETECT_SOFTLOCKUP=y |
1153 | # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set | 1253 | # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set |
1154 | CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 | 1254 | CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 |
1255 | CONFIG_DETECT_HUNG_TASK=y | ||
1256 | # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set | ||
1257 | CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 | ||
1155 | # CONFIG_SCHED_DEBUG is not set | 1258 | # CONFIG_SCHED_DEBUG is not set |
1156 | # CONFIG_SCHEDSTATS is not set | 1259 | # CONFIG_SCHEDSTATS is not set |
1157 | # CONFIG_TIMER_STATS is not set | 1260 | # CONFIG_TIMER_STATS is not set |
1158 | # CONFIG_DEBUG_OBJECTS is not set | 1261 | # CONFIG_DEBUG_OBJECTS is not set |
1159 | # CONFIG_DEBUG_SLAB is not set | 1262 | # CONFIG_SLUB_DEBUG_ON is not set |
1263 | # CONFIG_SLUB_STATS is not set | ||
1160 | # CONFIG_DEBUG_RT_MUTEXES is not set | 1264 | # CONFIG_DEBUG_RT_MUTEXES is not set |
1161 | # CONFIG_RT_MUTEX_TESTER is not set | 1265 | # CONFIG_RT_MUTEX_TESTER is not set |
1162 | # CONFIG_DEBUG_SPINLOCK is not set | 1266 | # CONFIG_DEBUG_SPINLOCK is not set |
@@ -1180,9 +1284,12 @@ CONFIG_DEBUG_INFO=y | |||
1180 | # CONFIG_FAULT_INJECTION is not set | 1284 | # CONFIG_FAULT_INJECTION is not set |
1181 | # CONFIG_LATENCYTOP is not set | 1285 | # CONFIG_LATENCYTOP is not set |
1182 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 1286 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
1287 | # CONFIG_DEBUG_PAGEALLOC is not set | ||
1183 | CONFIG_HAVE_FUNCTION_TRACER=y | 1288 | CONFIG_HAVE_FUNCTION_TRACER=y |
1289 | CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y | ||
1184 | CONFIG_HAVE_DYNAMIC_FTRACE=y | 1290 | CONFIG_HAVE_DYNAMIC_FTRACE=y |
1185 | CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y | 1291 | CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y |
1292 | CONFIG_TRACING_SUPPORT=y | ||
1186 | 1293 | ||
1187 | # | 1294 | # |
1188 | # Tracers | 1295 | # Tracers |
@@ -1190,24 +1297,27 @@ CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y | |||
1190 | # CONFIG_FUNCTION_TRACER is not set | 1297 | # CONFIG_FUNCTION_TRACER is not set |
1191 | # CONFIG_SCHED_TRACER is not set | 1298 | # CONFIG_SCHED_TRACER is not set |
1192 | # CONFIG_CONTEXT_SWITCH_TRACER is not set | 1299 | # CONFIG_CONTEXT_SWITCH_TRACER is not set |
1300 | # CONFIG_EVENT_TRACER is not set | ||
1193 | # CONFIG_BOOT_TRACER is not set | 1301 | # CONFIG_BOOT_TRACER is not set |
1194 | # CONFIG_TRACE_BRANCH_PROFILING is not set | 1302 | # CONFIG_TRACE_BRANCH_PROFILING is not set |
1195 | # CONFIG_STACK_TRACER is not set | 1303 | # CONFIG_STACK_TRACER is not set |
1196 | # CONFIG_DYNAMIC_PRINTK_DEBUG is not set | 1304 | # CONFIG_KMEMTRACE is not set |
1305 | # CONFIG_WORKQUEUE_TRACER is not set | ||
1306 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
1307 | # CONFIG_DYNAMIC_DEBUG is not set | ||
1197 | # CONFIG_SAMPLES is not set | 1308 | # CONFIG_SAMPLES is not set |
1198 | CONFIG_HAVE_ARCH_KGDB=y | 1309 | CONFIG_HAVE_ARCH_KGDB=y |
1199 | # CONFIG_KGDB is not set | 1310 | # CONFIG_KGDB is not set |
1200 | CONFIG_PRINT_STACK_DEPTH=64 | 1311 | CONFIG_PRINT_STACK_DEPTH=64 |
1201 | # CONFIG_DEBUG_STACKOVERFLOW is not set | 1312 | # CONFIG_DEBUG_STACKOVERFLOW is not set |
1202 | # CONFIG_DEBUG_STACK_USAGE is not set | 1313 | # CONFIG_DEBUG_STACK_USAGE is not set |
1203 | # CONFIG_DEBUG_PAGEALLOC is not set | ||
1204 | # CONFIG_CODE_PATCHING_SELFTEST is not set | 1314 | # CONFIG_CODE_PATCHING_SELFTEST is not set |
1205 | # CONFIG_FTR_FIXUP_SELFTEST is not set | 1315 | # CONFIG_FTR_FIXUP_SELFTEST is not set |
1206 | # CONFIG_MSI_BITMAP_SELFTEST is not set | 1316 | # CONFIG_MSI_BITMAP_SELFTEST is not set |
1207 | # CONFIG_XMON is not set | 1317 | # CONFIG_XMON is not set |
1208 | CONFIG_IRQSTACKS=y | 1318 | CONFIG_IRQSTACKS=y |
1209 | # CONFIG_VIRQ_DEBUG is not set | 1319 | # CONFIG_VIRQ_DEBUG is not set |
1210 | CONFIG_BDI_SWITCH=y | 1320 | # CONFIG_BDI_SWITCH is not set |
1211 | # CONFIG_PPC_EARLY_DEBUG is not set | 1321 | # CONFIG_PPC_EARLY_DEBUG is not set |
1212 | 1322 | ||
1213 | # | 1323 | # |
@@ -1223,6 +1333,8 @@ CONFIG_CRYPTO=y | |||
1223 | # Crypto core or helper | 1333 | # Crypto core or helper |
1224 | # | 1334 | # |
1225 | # CONFIG_CRYPTO_FIPS is not set | 1335 | # CONFIG_CRYPTO_FIPS is not set |
1336 | CONFIG_CRYPTO_ALGAPI=y | ||
1337 | CONFIG_CRYPTO_ALGAPI2=y | ||
1226 | # CONFIG_CRYPTO_MANAGER is not set | 1338 | # CONFIG_CRYPTO_MANAGER is not set |
1227 | # CONFIG_CRYPTO_MANAGER2 is not set | 1339 | # CONFIG_CRYPTO_MANAGER2 is not set |
1228 | # CONFIG_CRYPTO_GF128MUL is not set | 1340 | # CONFIG_CRYPTO_GF128MUL is not set |
@@ -1294,13 +1406,15 @@ CONFIG_CRYPTO=y | |||
1294 | # | 1406 | # |
1295 | # Compression | 1407 | # Compression |
1296 | # | 1408 | # |
1297 | # CONFIG_CRYPTO_DEFLATE is not set | 1409 | CONFIG_CRYPTO_DEFLATE=y |
1298 | # CONFIG_CRYPTO_LZO is not set | 1410 | # CONFIG_CRYPTO_ZLIB is not set |
1411 | CONFIG_CRYPTO_LZO=y | ||
1299 | 1412 | ||
1300 | # | 1413 | # |
1301 | # Random Number Generation | 1414 | # Random Number Generation |
1302 | # | 1415 | # |
1303 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | 1416 | # CONFIG_CRYPTO_ANSI_CPRNG is not set |
1304 | CONFIG_CRYPTO_HW=y | 1417 | CONFIG_CRYPTO_HW=y |
1418 | # CONFIG_CRYPTO_DEV_PPC4XX is not set | ||
1305 | # CONFIG_PPC_CLOCK is not set | 1419 | # CONFIG_PPC_CLOCK is not set |
1306 | # CONFIG_VIRTUALIZATION is not set | 1420 | # CONFIG_VIRTUALIZATION is not set |
diff --git a/arch/powerpc/include/asm/cpm1.h b/arch/powerpc/include/asm/cpm1.h index 2ff798744c1d..7685ffde8821 100644 --- a/arch/powerpc/include/asm/cpm1.h +++ b/arch/powerpc/include/asm/cpm1.h | |||
@@ -598,8 +598,6 @@ typedef struct risc_timer_pram { | |||
598 | #define CICR_IEN ((uint)0x00000080) /* Int. enable */ | 598 | #define CICR_IEN ((uint)0x00000080) /* Int. enable */ |
599 | #define CICR_SPS ((uint)0x00000001) /* SCC Spread */ | 599 | #define CICR_SPS ((uint)0x00000001) /* SCC Spread */ |
600 | 600 | ||
601 | #define IMAP_ADDR (get_immrbase()) | ||
602 | |||
603 | #define CPM_PIN_INPUT 0 | 601 | #define CPM_PIN_INPUT 0 |
604 | #define CPM_PIN_OUTPUT 1 | 602 | #define CPM_PIN_OUTPUT 1 |
605 | #define CPM_PIN_PRIMARY 0 | 603 | #define CPM_PIN_PRIMARY 0 |
diff --git a/arch/powerpc/include/asm/delay.h b/arch/powerpc/include/asm/delay.h index 1e2eb41fa057..52e4d54da2a9 100644 --- a/arch/powerpc/include/asm/delay.h +++ b/arch/powerpc/include/asm/delay.h | |||
@@ -63,6 +63,8 @@ extern void udelay(unsigned long usecs); | |||
63 | udelay(delay); \ | 63 | udelay(delay); \ |
64 | else \ | 64 | else \ |
65 | cpu_relax(); \ | 65 | cpu_relax(); \ |
66 | if (!__ret) \ | ||
67 | __ret = (condition); \ | ||
66 | __ret; \ | 68 | __ret; \ |
67 | }) | 69 | }) |
68 | 70 | ||
diff --git a/arch/powerpc/include/asm/dma-mapping.h b/arch/powerpc/include/asm/dma-mapping.h index 3d9e887c3c0c..b44aaabdd1a6 100644 --- a/arch/powerpc/include/asm/dma-mapping.h +++ b/arch/powerpc/include/asm/dma-mapping.h | |||
@@ -309,7 +309,9 @@ static inline void dma_sync_single_for_cpu(struct device *dev, | |||
309 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); | 309 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); |
310 | 310 | ||
311 | BUG_ON(!dma_ops); | 311 | BUG_ON(!dma_ops); |
312 | dma_ops->sync_single_range_for_cpu(dev, dma_handle, 0, | 312 | |
313 | if (dma_ops->sync_single_range_for_cpu) | ||
314 | dma_ops->sync_single_range_for_cpu(dev, dma_handle, 0, | ||
313 | size, direction); | 315 | size, direction); |
314 | } | 316 | } |
315 | 317 | ||
@@ -320,7 +322,9 @@ static inline void dma_sync_single_for_device(struct device *dev, | |||
320 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); | 322 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); |
321 | 323 | ||
322 | BUG_ON(!dma_ops); | 324 | BUG_ON(!dma_ops); |
323 | dma_ops->sync_single_range_for_device(dev, dma_handle, | 325 | |
326 | if (dma_ops->sync_single_range_for_device) | ||
327 | dma_ops->sync_single_range_for_device(dev, dma_handle, | ||
324 | 0, size, direction); | 328 | 0, size, direction); |
325 | } | 329 | } |
326 | 330 | ||
@@ -331,7 +335,9 @@ static inline void dma_sync_sg_for_cpu(struct device *dev, | |||
331 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); | 335 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); |
332 | 336 | ||
333 | BUG_ON(!dma_ops); | 337 | BUG_ON(!dma_ops); |
334 | dma_ops->sync_sg_for_cpu(dev, sgl, nents, direction); | 338 | |
339 | if (dma_ops->sync_sg_for_cpu) | ||
340 | dma_ops->sync_sg_for_cpu(dev, sgl, nents, direction); | ||
335 | } | 341 | } |
336 | 342 | ||
337 | static inline void dma_sync_sg_for_device(struct device *dev, | 343 | static inline void dma_sync_sg_for_device(struct device *dev, |
@@ -341,7 +347,9 @@ static inline void dma_sync_sg_for_device(struct device *dev, | |||
341 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); | 347 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); |
342 | 348 | ||
343 | BUG_ON(!dma_ops); | 349 | BUG_ON(!dma_ops); |
344 | dma_ops->sync_sg_for_device(dev, sgl, nents, direction); | 350 | |
351 | if (dma_ops->sync_sg_for_device) | ||
352 | dma_ops->sync_sg_for_device(dev, sgl, nents, direction); | ||
345 | } | 353 | } |
346 | 354 | ||
347 | static inline void dma_sync_single_range_for_cpu(struct device *dev, | 355 | static inline void dma_sync_single_range_for_cpu(struct device *dev, |
@@ -351,7 +359,9 @@ static inline void dma_sync_single_range_for_cpu(struct device *dev, | |||
351 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); | 359 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); |
352 | 360 | ||
353 | BUG_ON(!dma_ops); | 361 | BUG_ON(!dma_ops); |
354 | dma_ops->sync_single_range_for_cpu(dev, dma_handle, | 362 | |
363 | if (dma_ops->sync_single_range_for_cpu) | ||
364 | dma_ops->sync_single_range_for_cpu(dev, dma_handle, | ||
355 | offset, size, direction); | 365 | offset, size, direction); |
356 | } | 366 | } |
357 | 367 | ||
@@ -362,7 +372,9 @@ static inline void dma_sync_single_range_for_device(struct device *dev, | |||
362 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); | 372 | struct dma_mapping_ops *dma_ops = get_dma_ops(dev); |
363 | 373 | ||
364 | BUG_ON(!dma_ops); | 374 | BUG_ON(!dma_ops); |
365 | dma_ops->sync_single_range_for_device(dev, dma_handle, offset, | 375 | |
376 | if (dma_ops->sync_single_range_for_device) | ||
377 | dma_ops->sync_single_range_for_device(dev, dma_handle, offset, | ||
366 | size, direction); | 378 | size, direction); |
367 | } | 379 | } |
368 | #else /* CONFIG_PPC_NEED_DMA_SYNC_OPS */ | 380 | #else /* CONFIG_PPC_NEED_DMA_SYNC_OPS */ |
diff --git a/arch/powerpc/include/asm/highmem.h b/arch/powerpc/include/asm/highmem.h index 684a73f4324f..a74c4ee6c020 100644 --- a/arch/powerpc/include/asm/highmem.h +++ b/arch/powerpc/include/asm/highmem.h | |||
@@ -22,9 +22,7 @@ | |||
22 | 22 | ||
23 | #ifdef __KERNEL__ | 23 | #ifdef __KERNEL__ |
24 | 24 | ||
25 | #include <linux/init.h> | ||
26 | #include <linux/interrupt.h> | 25 | #include <linux/interrupt.h> |
27 | #include <linux/highmem.h> | ||
28 | #include <asm/kmap_types.h> | 26 | #include <asm/kmap_types.h> |
29 | #include <asm/tlbflush.h> | 27 | #include <asm/tlbflush.h> |
30 | #include <asm/page.h> | 28 | #include <asm/page.h> |
@@ -62,6 +60,9 @@ extern pte_t *pkmap_page_table; | |||
62 | 60 | ||
63 | extern void *kmap_high(struct page *page); | 61 | extern void *kmap_high(struct page *page); |
64 | extern void kunmap_high(struct page *page); | 62 | extern void kunmap_high(struct page *page); |
63 | extern void *kmap_atomic_prot(struct page *page, enum km_type type, | ||
64 | pgprot_t prot); | ||
65 | extern void kunmap_atomic(void *kvaddr, enum km_type type); | ||
65 | 66 | ||
66 | static inline void *kmap(struct page *page) | 67 | static inline void *kmap(struct page *page) |
67 | { | 68 | { |
@@ -79,62 +80,11 @@ static inline void kunmap(struct page *page) | |||
79 | kunmap_high(page); | 80 | kunmap_high(page); |
80 | } | 81 | } |
81 | 82 | ||
82 | /* | ||
83 | * The use of kmap_atomic/kunmap_atomic is discouraged - kmap/kunmap | ||
84 | * gives a more generic (and caching) interface. But kmap_atomic can | ||
85 | * be used in IRQ contexts, so in some (very limited) cases we need | ||
86 | * it. | ||
87 | */ | ||
88 | static inline void *kmap_atomic_prot(struct page *page, enum km_type type, pgprot_t prot) | ||
89 | { | ||
90 | unsigned int idx; | ||
91 | unsigned long vaddr; | ||
92 | |||
93 | /* even !CONFIG_PREEMPT needs this, for in_atomic in do_page_fault */ | ||
94 | pagefault_disable(); | ||
95 | if (!PageHighMem(page)) | ||
96 | return page_address(page); | ||
97 | |||
98 | debug_kmap_atomic(type); | ||
99 | idx = type + KM_TYPE_NR*smp_processor_id(); | ||
100 | vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx); | ||
101 | #ifdef CONFIG_DEBUG_HIGHMEM | ||
102 | BUG_ON(!pte_none(*(kmap_pte-idx))); | ||
103 | #endif | ||
104 | __set_pte_at(&init_mm, vaddr, kmap_pte-idx, mk_pte(page, prot), 1); | ||
105 | local_flush_tlb_page(NULL, vaddr); | ||
106 | |||
107 | return (void*) vaddr; | ||
108 | } | ||
109 | |||
110 | static inline void *kmap_atomic(struct page *page, enum km_type type) | 83 | static inline void *kmap_atomic(struct page *page, enum km_type type) |
111 | { | 84 | { |
112 | return kmap_atomic_prot(page, type, kmap_prot); | 85 | return kmap_atomic_prot(page, type, kmap_prot); |
113 | } | 86 | } |
114 | 87 | ||
115 | static inline void kunmap_atomic(void *kvaddr, enum km_type type) | ||
116 | { | ||
117 | #ifdef CONFIG_DEBUG_HIGHMEM | ||
118 | unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK; | ||
119 | enum fixed_addresses idx = type + KM_TYPE_NR*smp_processor_id(); | ||
120 | |||
121 | if (vaddr < __fix_to_virt(FIX_KMAP_END)) { | ||
122 | pagefault_enable(); | ||
123 | return; | ||
124 | } | ||
125 | |||
126 | BUG_ON(vaddr != __fix_to_virt(FIX_KMAP_BEGIN + idx)); | ||
127 | |||
128 | /* | ||
129 | * force other mappings to Oops if they'll try to access | ||
130 | * this pte without first remap it | ||
131 | */ | ||
132 | pte_clear(&init_mm, vaddr, kmap_pte-idx); | ||
133 | local_flush_tlb_page(NULL, vaddr); | ||
134 | #endif | ||
135 | pagefault_enable(); | ||
136 | } | ||
137 | |||
138 | static inline struct page *kmap_atomic_to_page(void *ptr) | 88 | static inline struct page *kmap_atomic_to_page(void *ptr) |
139 | { | 89 | { |
140 | unsigned long idx, vaddr = (unsigned long) ptr; | 90 | unsigned long idx, vaddr = (unsigned long) ptr; |
@@ -148,6 +98,7 @@ static inline struct page *kmap_atomic_to_page(void *ptr) | |||
148 | return pte_page(*pte); | 98 | return pte_page(*pte); |
149 | } | 99 | } |
150 | 100 | ||
101 | |||
151 | #define flush_cache_kmaps() flush_cache_all() | 102 | #define flush_cache_kmaps() flush_cache_all() |
152 | 103 | ||
153 | #endif /* __KERNEL__ */ | 104 | #endif /* __KERNEL__ */ |
diff --git a/arch/powerpc/include/asm/hw_irq.h b/arch/powerpc/include/asm/hw_irq.h index 867ab8ed69b3..8b505eaaa38a 100644 --- a/arch/powerpc/include/asm/hw_irq.h +++ b/arch/powerpc/include/asm/hw_irq.h | |||
@@ -68,13 +68,13 @@ static inline int irqs_disabled_flags(unsigned long flags) | |||
68 | 68 | ||
69 | #if defined(CONFIG_BOOKE) | 69 | #if defined(CONFIG_BOOKE) |
70 | #define SET_MSR_EE(x) mtmsr(x) | 70 | #define SET_MSR_EE(x) mtmsr(x) |
71 | #define local_irq_restore(flags) __asm__ __volatile__("wrtee %0" : : "r" (flags) : "memory") | 71 | #define raw_local_irq_restore(flags) __asm__ __volatile__("wrtee %0" : : "r" (flags) : "memory") |
72 | #else | 72 | #else |
73 | #define SET_MSR_EE(x) mtmsr(x) | 73 | #define SET_MSR_EE(x) mtmsr(x) |
74 | #define local_irq_restore(flags) mtmsr(flags) | 74 | #define raw_local_irq_restore(flags) mtmsr(flags) |
75 | #endif | 75 | #endif |
76 | 76 | ||
77 | static inline void local_irq_disable(void) | 77 | static inline void raw_local_irq_disable(void) |
78 | { | 78 | { |
79 | #ifdef CONFIG_BOOKE | 79 | #ifdef CONFIG_BOOKE |
80 | __asm__ __volatile__("wrteei 0": : :"memory"); | 80 | __asm__ __volatile__("wrteei 0": : :"memory"); |
@@ -86,7 +86,7 @@ static inline void local_irq_disable(void) | |||
86 | #endif | 86 | #endif |
87 | } | 87 | } |
88 | 88 | ||
89 | static inline void local_irq_enable(void) | 89 | static inline void raw_local_irq_enable(void) |
90 | { | 90 | { |
91 | #ifdef CONFIG_BOOKE | 91 | #ifdef CONFIG_BOOKE |
92 | __asm__ __volatile__("wrteei 1": : :"memory"); | 92 | __asm__ __volatile__("wrteei 1": : :"memory"); |
@@ -98,7 +98,7 @@ static inline void local_irq_enable(void) | |||
98 | #endif | 98 | #endif |
99 | } | 99 | } |
100 | 100 | ||
101 | static inline void local_irq_save_ptr(unsigned long *flags) | 101 | static inline void raw_local_irq_save_ptr(unsigned long *flags) |
102 | { | 102 | { |
103 | unsigned long msr; | 103 | unsigned long msr; |
104 | msr = mfmsr(); | 104 | msr = mfmsr(); |
@@ -110,12 +110,12 @@ static inline void local_irq_save_ptr(unsigned long *flags) | |||
110 | #endif | 110 | #endif |
111 | } | 111 | } |
112 | 112 | ||
113 | #define local_save_flags(flags) ((flags) = mfmsr()) | 113 | #define raw_local_save_flags(flags) ((flags) = mfmsr()) |
114 | #define local_irq_save(flags) local_irq_save_ptr(&flags) | 114 | #define raw_local_irq_save(flags) raw_local_irq_save_ptr(&flags) |
115 | #define irqs_disabled() ((mfmsr() & MSR_EE) == 0) | 115 | #define raw_irqs_disabled() ((mfmsr() & MSR_EE) == 0) |
116 | #define raw_irqs_disabled_flags(flags) (((flags) & MSR_EE) == 0) | ||
116 | 117 | ||
117 | #define hard_irq_enable() local_irq_enable() | 118 | #define hard_irq_disable() raw_local_irq_disable() |
118 | #define hard_irq_disable() local_irq_disable() | ||
119 | 119 | ||
120 | static inline int irqs_disabled_flags(unsigned long flags) | 120 | static inline int irqs_disabled_flags(unsigned long flags) |
121 | { | 121 | { |
diff --git a/arch/powerpc/include/asm/perf_counter.h b/arch/powerpc/include/asm/perf_counter.h index 8ccd4e155768..0ea0639fcf75 100644 --- a/arch/powerpc/include/asm/perf_counter.h +++ b/arch/powerpc/include/asm/perf_counter.h | |||
@@ -61,6 +61,8 @@ struct pt_regs; | |||
61 | extern unsigned long perf_misc_flags(struct pt_regs *regs); | 61 | extern unsigned long perf_misc_flags(struct pt_regs *regs); |
62 | extern unsigned long perf_instruction_pointer(struct pt_regs *regs); | 62 | extern unsigned long perf_instruction_pointer(struct pt_regs *regs); |
63 | 63 | ||
64 | #define PERF_COUNTER_INDEX_OFFSET 1 | ||
65 | |||
64 | /* | 66 | /* |
65 | * Only override the default definitions in include/linux/perf_counter.h | 67 | * Only override the default definitions in include/linux/perf_counter.h |
66 | * if we have hardware PMU support. | 68 | * if we have hardware PMU support. |
diff --git a/arch/powerpc/include/asm/pte-hash64-64k.h b/arch/powerpc/include/asm/pte-hash64-64k.h index e05d26fa372f..82b72207c51c 100644 --- a/arch/powerpc/include/asm/pte-hash64-64k.h +++ b/arch/powerpc/include/asm/pte-hash64-64k.h | |||
@@ -47,7 +47,8 @@ | |||
47 | * generic accessors and iterators here | 47 | * generic accessors and iterators here |
48 | */ | 48 | */ |
49 | #define __real_pte(e,p) ((real_pte_t) { \ | 49 | #define __real_pte(e,p) ((real_pte_t) { \ |
50 | (e), pte_val(*((p) + PTRS_PER_PTE)) }) | 50 | (e), ((e) & _PAGE_COMBO) ? \ |
51 | (pte_val(*((p) + PTRS_PER_PTE))) : 0 }) | ||
51 | #define __rpte_to_hidx(r,index) ((pte_val((r).pte) & _PAGE_COMBO) ? \ | 52 | #define __rpte_to_hidx(r,index) ((pte_val((r).pte) & _PAGE_COMBO) ? \ |
52 | (((r).hidx >> ((index)<<2)) & 0xf) : ((pte_val((r).pte) >> 12) & 0xf)) | 53 | (((r).hidx >> ((index)<<2)) & 0xf) : ((pte_val((r).pte) >> 12) & 0xf)) |
53 | #define __rpte_to_pte(r) ((r).pte) | 54 | #define __rpte_to_pte(r) ((r).pte) |
diff --git a/arch/powerpc/include/asm/rtas.h b/arch/powerpc/include/asm/rtas.h index 01c12339b304..168fce726201 100644 --- a/arch/powerpc/include/asm/rtas.h +++ b/arch/powerpc/include/asm/rtas.h | |||
@@ -58,7 +58,7 @@ struct rtas_t { | |||
58 | unsigned long entry; /* physical address pointer */ | 58 | unsigned long entry; /* physical address pointer */ |
59 | unsigned long base; /* physical address pointer */ | 59 | unsigned long base; /* physical address pointer */ |
60 | unsigned long size; | 60 | unsigned long size; |
61 | spinlock_t lock; | 61 | raw_spinlock_t lock; |
62 | struct rtas_args args; | 62 | struct rtas_args args; |
63 | struct device_node *dev; /* virtual address pointer */ | 63 | struct device_node *dev; /* virtual address pointer */ |
64 | }; | 64 | }; |
@@ -245,5 +245,8 @@ static inline u32 rtas_config_addr(int busno, int devfn, int reg) | |||
245 | (devfn << 8) | (reg & 0xff); | 245 | (devfn << 8) | (reg & 0xff); |
246 | } | 246 | } |
247 | 247 | ||
248 | extern void __cpuinit rtas_give_timebase(void); | ||
249 | extern void __cpuinit rtas_take_timebase(void); | ||
250 | |||
248 | #endif /* __KERNEL__ */ | 251 | #endif /* __KERNEL__ */ |
249 | #endif /* _POWERPC_RTAS_H */ | 252 | #endif /* _POWERPC_RTAS_H */ |
diff --git a/arch/powerpc/include/asm/thread_info.h b/arch/powerpc/include/asm/thread_info.h index 9aba5a38a7c4..c8b329255678 100644 --- a/arch/powerpc/include/asm/thread_info.h +++ b/arch/powerpc/include/asm/thread_info.h | |||
@@ -46,15 +46,13 @@ struct thread_info { | |||
46 | 46 | ||
47 | /* | 47 | /* |
48 | * macros/functions for gaining access to the thread information structure | 48 | * macros/functions for gaining access to the thread information structure |
49 | * | ||
50 | * preempt_count needs to be 1 initially, until the scheduler is functional. | ||
51 | */ | 49 | */ |
52 | #define INIT_THREAD_INFO(tsk) \ | 50 | #define INIT_THREAD_INFO(tsk) \ |
53 | { \ | 51 | { \ |
54 | .task = &tsk, \ | 52 | .task = &tsk, \ |
55 | .exec_domain = &default_exec_domain, \ | 53 | .exec_domain = &default_exec_domain, \ |
56 | .cpu = 0, \ | 54 | .cpu = 0, \ |
57 | .preempt_count = 1, \ | 55 | .preempt_count = INIT_PREEMPT_COUNT, \ |
58 | .restart_block = { \ | 56 | .restart_block = { \ |
59 | .fn = do_no_restart_syscall, \ | 57 | .fn = do_no_restart_syscall, \ |
60 | }, \ | 58 | }, \ |
diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S index 4dd38f129153..3cadba60a4b6 100644 --- a/arch/powerpc/kernel/entry_32.S +++ b/arch/powerpc/kernel/entry_32.S | |||
@@ -191,11 +191,49 @@ transfer_to_handler_cont: | |||
191 | mflr r9 | 191 | mflr r9 |
192 | lwz r11,0(r9) /* virtual address of handler */ | 192 | lwz r11,0(r9) /* virtual address of handler */ |
193 | lwz r9,4(r9) /* where to go when done */ | 193 | lwz r9,4(r9) /* where to go when done */ |
194 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
195 | lis r12,reenable_mmu@h | ||
196 | ori r12,r12,reenable_mmu@l | ||
197 | mtspr SPRN_SRR0,r12 | ||
198 | mtspr SPRN_SRR1,r10 | ||
199 | SYNC | ||
200 | RFI | ||
201 | reenable_mmu: /* re-enable mmu so we can */ | ||
202 | mfmsr r10 | ||
203 | lwz r12,_MSR(r1) | ||
204 | xor r10,r10,r12 | ||
205 | andi. r10,r10,MSR_EE /* Did EE change? */ | ||
206 | beq 1f | ||
207 | |||
208 | /* Save handler and return address into the 2 unused words | ||
209 | * of the STACK_FRAME_OVERHEAD (sneak sneak sneak). Everything | ||
210 | * else can be recovered from the pt_regs except r3 which for | ||
211 | * normal interrupts has been set to pt_regs and for syscalls | ||
212 | * is an argument, so we temporarily use ORIG_GPR3 to save it | ||
213 | */ | ||
214 | stw r9,8(r1) | ||
215 | stw r11,12(r1) | ||
216 | stw r3,ORIG_GPR3(r1) | ||
217 | bl trace_hardirqs_off | ||
218 | lwz r0,GPR0(r1) | ||
219 | lwz r3,ORIG_GPR3(r1) | ||
220 | lwz r4,GPR4(r1) | ||
221 | lwz r5,GPR5(r1) | ||
222 | lwz r6,GPR6(r1) | ||
223 | lwz r7,GPR7(r1) | ||
224 | lwz r8,GPR8(r1) | ||
225 | lwz r9,8(r1) | ||
226 | lwz r11,12(r1) | ||
227 | 1: mtctr r11 | ||
228 | mtlr r9 | ||
229 | bctr /* jump to handler */ | ||
230 | #else /* CONFIG_TRACE_IRQFLAGS */ | ||
194 | mtspr SPRN_SRR0,r11 | 231 | mtspr SPRN_SRR0,r11 |
195 | mtspr SPRN_SRR1,r10 | 232 | mtspr SPRN_SRR1,r10 |
196 | mtlr r9 | 233 | mtlr r9 |
197 | SYNC | 234 | SYNC |
198 | RFI /* jump to handler, enable MMU */ | 235 | RFI /* jump to handler, enable MMU */ |
236 | #endif /* CONFIG_TRACE_IRQFLAGS */ | ||
199 | 237 | ||
200 | #if defined (CONFIG_6xx) || defined(CONFIG_E500) | 238 | #if defined (CONFIG_6xx) || defined(CONFIG_E500) |
201 | 4: rlwinm r12,r12,0,~_TLF_NAPPING | 239 | 4: rlwinm r12,r12,0,~_TLF_NAPPING |
@@ -251,6 +289,31 @@ _GLOBAL(DoSyscall) | |||
251 | #ifdef SHOW_SYSCALLS | 289 | #ifdef SHOW_SYSCALLS |
252 | bl do_show_syscall | 290 | bl do_show_syscall |
253 | #endif /* SHOW_SYSCALLS */ | 291 | #endif /* SHOW_SYSCALLS */ |
292 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
293 | /* Return from syscalls can (and generally will) hard enable | ||
294 | * interrupts. You aren't supposed to call a syscall with | ||
295 | * interrupts disabled in the first place. However, to ensure | ||
296 | * that we get it right vs. lockdep if it happens, we force | ||
297 | * that hard enable here with appropriate tracing if we see | ||
298 | * that we have been called with interrupts off | ||
299 | */ | ||
300 | mfmsr r11 | ||
301 | andi. r12,r11,MSR_EE | ||
302 | bne+ 1f | ||
303 | /* We came in with interrupts disabled, we enable them now */ | ||
304 | bl trace_hardirqs_on | ||
305 | mfmsr r11 | ||
306 | lwz r0,GPR0(r1) | ||
307 | lwz r3,GPR3(r1) | ||
308 | lwz r4,GPR4(r1) | ||
309 | ori r11,r11,MSR_EE | ||
310 | lwz r5,GPR5(r1) | ||
311 | lwz r6,GPR6(r1) | ||
312 | lwz r7,GPR7(r1) | ||
313 | lwz r8,GPR8(r1) | ||
314 | mtmsr r11 | ||
315 | 1: | ||
316 | #endif /* CONFIG_TRACE_IRQFLAGS */ | ||
254 | rlwinm r10,r1,0,0,(31-THREAD_SHIFT) /* current_thread_info() */ | 317 | rlwinm r10,r1,0,0,(31-THREAD_SHIFT) /* current_thread_info() */ |
255 | lwz r11,TI_FLAGS(r10) | 318 | lwz r11,TI_FLAGS(r10) |
256 | andi. r11,r11,_TIF_SYSCALL_T_OR_A | 319 | andi. r11,r11,_TIF_SYSCALL_T_OR_A |
@@ -275,6 +338,7 @@ ret_from_syscall: | |||
275 | rlwinm r12,r1,0,0,(31-THREAD_SHIFT) /* current_thread_info() */ | 338 | rlwinm r12,r1,0,0,(31-THREAD_SHIFT) /* current_thread_info() */ |
276 | /* disable interrupts so current_thread_info()->flags can't change */ | 339 | /* disable interrupts so current_thread_info()->flags can't change */ |
277 | LOAD_MSR_KERNEL(r10,MSR_KERNEL) /* doesn't include MSR_EE */ | 340 | LOAD_MSR_KERNEL(r10,MSR_KERNEL) /* doesn't include MSR_EE */ |
341 | /* Note: We don't bother telling lockdep about it */ | ||
278 | SYNC | 342 | SYNC |
279 | MTMSRD(r10) | 343 | MTMSRD(r10) |
280 | lwz r9,TI_FLAGS(r12) | 344 | lwz r9,TI_FLAGS(r12) |
@@ -288,6 +352,19 @@ ret_from_syscall: | |||
288 | oris r11,r11,0x1000 /* Set SO bit in CR */ | 352 | oris r11,r11,0x1000 /* Set SO bit in CR */ |
289 | stw r11,_CCR(r1) | 353 | stw r11,_CCR(r1) |
290 | syscall_exit_cont: | 354 | syscall_exit_cont: |
355 | lwz r8,_MSR(r1) | ||
356 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
357 | /* If we are going to return from the syscall with interrupts | ||
358 | * off, we trace that here. It shouldn't happen though but we | ||
359 | * want to catch the bugger if it does right ? | ||
360 | */ | ||
361 | andi. r10,r8,MSR_EE | ||
362 | bne+ 1f | ||
363 | stw r3,GPR3(r1) | ||
364 | bl trace_hardirqs_off | ||
365 | lwz r3,GPR3(r1) | ||
366 | 1: | ||
367 | #endif /* CONFIG_TRACE_IRQFLAGS */ | ||
291 | #if defined(CONFIG_4xx) || defined(CONFIG_BOOKE) | 368 | #if defined(CONFIG_4xx) || defined(CONFIG_BOOKE) |
292 | /* If the process has its own DBCR0 value, load it up. The internal | 369 | /* If the process has its own DBCR0 value, load it up. The internal |
293 | debug mode bit tells us that dbcr0 should be loaded. */ | 370 | debug mode bit tells us that dbcr0 should be loaded. */ |
@@ -311,7 +388,6 @@ END_FTR_SECTION_IFSET(CPU_FTR_NEED_PAIRED_STWCX) | |||
311 | mtlr r4 | 388 | mtlr r4 |
312 | mtcr r5 | 389 | mtcr r5 |
313 | lwz r7,_NIP(r1) | 390 | lwz r7,_NIP(r1) |
314 | lwz r8,_MSR(r1) | ||
315 | FIX_SRR1(r8, r0) | 391 | FIX_SRR1(r8, r0) |
316 | lwz r2,GPR2(r1) | 392 | lwz r2,GPR2(r1) |
317 | lwz r1,GPR1(r1) | 393 | lwz r1,GPR1(r1) |
@@ -394,7 +470,9 @@ syscall_exit_work: | |||
394 | andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP) | 470 | andi. r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP) |
395 | beq ret_from_except | 471 | beq ret_from_except |
396 | 472 | ||
397 | /* Re-enable interrupts */ | 473 | /* Re-enable interrupts. There is no need to trace that with |
474 | * lockdep as we are supposed to have IRQs on at this point | ||
475 | */ | ||
398 | ori r10,r10,MSR_EE | 476 | ori r10,r10,MSR_EE |
399 | SYNC | 477 | SYNC |
400 | MTMSRD(r10) | 478 | MTMSRD(r10) |
@@ -705,6 +783,7 @@ ret_from_except: | |||
705 | /* Hard-disable interrupts so that current_thread_info()->flags | 783 | /* Hard-disable interrupts so that current_thread_info()->flags |
706 | * can't change between when we test it and when we return | 784 | * can't change between when we test it and when we return |
707 | * from the interrupt. */ | 785 | * from the interrupt. */ |
786 | /* Note: We don't bother telling lockdep about it */ | ||
708 | LOAD_MSR_KERNEL(r10,MSR_KERNEL) | 787 | LOAD_MSR_KERNEL(r10,MSR_KERNEL) |
709 | SYNC /* Some chip revs have problems here... */ | 788 | SYNC /* Some chip revs have problems here... */ |
710 | MTMSRD(r10) /* disable interrupts */ | 789 | MTMSRD(r10) /* disable interrupts */ |
@@ -744,11 +823,24 @@ resume_kernel: | |||
744 | beq+ restore | 823 | beq+ restore |
745 | andi. r0,r3,MSR_EE /* interrupts off? */ | 824 | andi. r0,r3,MSR_EE /* interrupts off? */ |
746 | beq restore /* don't schedule if so */ | 825 | beq restore /* don't schedule if so */ |
826 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
827 | /* Lockdep thinks irqs are enabled, we need to call | ||
828 | * preempt_schedule_irq with IRQs off, so we inform lockdep | ||
829 | * now that we -did- turn them off already | ||
830 | */ | ||
831 | bl trace_hardirqs_off | ||
832 | #endif | ||
747 | 1: bl preempt_schedule_irq | 833 | 1: bl preempt_schedule_irq |
748 | rlwinm r9,r1,0,0,(31-THREAD_SHIFT) | 834 | rlwinm r9,r1,0,0,(31-THREAD_SHIFT) |
749 | lwz r3,TI_FLAGS(r9) | 835 | lwz r3,TI_FLAGS(r9) |
750 | andi. r0,r3,_TIF_NEED_RESCHED | 836 | andi. r0,r3,_TIF_NEED_RESCHED |
751 | bne- 1b | 837 | bne- 1b |
838 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
839 | /* And now, to properly rebalance the above, we tell lockdep they | ||
840 | * are being turned back on, which will happen when we return | ||
841 | */ | ||
842 | bl trace_hardirqs_on | ||
843 | #endif | ||
752 | #else | 844 | #else |
753 | resume_kernel: | 845 | resume_kernel: |
754 | #endif /* CONFIG_PREEMPT */ | 846 | #endif /* CONFIG_PREEMPT */ |
@@ -765,6 +857,28 @@ restore: | |||
765 | stw r6,icache_44x_need_flush@l(r4) | 857 | stw r6,icache_44x_need_flush@l(r4) |
766 | 1: | 858 | 1: |
767 | #endif /* CONFIG_44x */ | 859 | #endif /* CONFIG_44x */ |
860 | |||
861 | lwz r9,_MSR(r1) | ||
862 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
863 | /* Lockdep doesn't know about the fact that IRQs are temporarily turned | ||
864 | * off in this assembly code while peeking at TI_FLAGS() and such. However | ||
865 | * we need to inform it if the exception turned interrupts off, and we | ||
866 | * are about to trun them back on. | ||
867 | * | ||
868 | * The problem here sadly is that we don't know whether the exceptions was | ||
869 | * one that turned interrupts off or not. So we always tell lockdep about | ||
870 | * turning them on here when we go back to wherever we came from with EE | ||
871 | * on, even if that may meen some redudant calls being tracked. Maybe later | ||
872 | * we could encode what the exception did somewhere or test the exception | ||
873 | * type in the pt_regs but that sounds overkill | ||
874 | */ | ||
875 | andi. r10,r9,MSR_EE | ||
876 | beq 1f | ||
877 | bl trace_hardirqs_on | ||
878 | lwz r9,_MSR(r1) | ||
879 | 1: | ||
880 | #endif /* CONFIG_TRACE_IRQFLAGS */ | ||
881 | |||
768 | lwz r0,GPR0(r1) | 882 | lwz r0,GPR0(r1) |
769 | lwz r2,GPR2(r1) | 883 | lwz r2,GPR2(r1) |
770 | REST_4GPRS(3, r1) | 884 | REST_4GPRS(3, r1) |
@@ -782,7 +896,6 @@ END_FTR_SECTION_IFSET(CPU_FTR_NEED_PAIRED_STWCX) | |||
782 | stwcx. r0,0,r1 /* to clear the reservation */ | 896 | stwcx. r0,0,r1 /* to clear the reservation */ |
783 | 897 | ||
784 | #if !(defined(CONFIG_4xx) || defined(CONFIG_BOOKE)) | 898 | #if !(defined(CONFIG_4xx) || defined(CONFIG_BOOKE)) |
785 | lwz r9,_MSR(r1) | ||
786 | andi. r10,r9,MSR_RI /* check if this exception occurred */ | 899 | andi. r10,r9,MSR_RI /* check if this exception occurred */ |
787 | beql nonrecoverable /* at a bad place (MSR:RI = 0) */ | 900 | beql nonrecoverable /* at a bad place (MSR:RI = 0) */ |
788 | 901 | ||
@@ -805,7 +918,6 @@ END_FTR_SECTION_IFSET(CPU_FTR_NEED_PAIRED_STWCX) | |||
805 | MTMSRD(r10) /* clear the RI bit */ | 918 | MTMSRD(r10) /* clear the RI bit */ |
806 | .globl exc_exit_restart | 919 | .globl exc_exit_restart |
807 | exc_exit_restart: | 920 | exc_exit_restart: |
808 | lwz r9,_MSR(r1) | ||
809 | lwz r12,_NIP(r1) | 921 | lwz r12,_NIP(r1) |
810 | FIX_SRR1(r9,r10) | 922 | FIX_SRR1(r9,r10) |
811 | mtspr SPRN_SRR0,r12 | 923 | mtspr SPRN_SRR0,r12 |
@@ -1035,11 +1147,18 @@ do_work: /* r10 contains MSR_KERNEL here */ | |||
1035 | beq do_user_signal | 1147 | beq do_user_signal |
1036 | 1148 | ||
1037 | do_resched: /* r10 contains MSR_KERNEL here */ | 1149 | do_resched: /* r10 contains MSR_KERNEL here */ |
1150 | /* Note: We don't need to inform lockdep that we are enabling | ||
1151 | * interrupts here. As far as it knows, they are already enabled | ||
1152 | */ | ||
1038 | ori r10,r10,MSR_EE | 1153 | ori r10,r10,MSR_EE |
1039 | SYNC | 1154 | SYNC |
1040 | MTMSRD(r10) /* hard-enable interrupts */ | 1155 | MTMSRD(r10) /* hard-enable interrupts */ |
1041 | bl schedule | 1156 | bl schedule |
1042 | recheck: | 1157 | recheck: |
1158 | /* Note: And we don't tell it we are disabling them again | ||
1159 | * neither. Those disable/enable cycles used to peek at | ||
1160 | * TI_FLAGS aren't advertised. | ||
1161 | */ | ||
1043 | LOAD_MSR_KERNEL(r10,MSR_KERNEL) | 1162 | LOAD_MSR_KERNEL(r10,MSR_KERNEL) |
1044 | SYNC | 1163 | SYNC |
1045 | MTMSRD(r10) /* disable interrupts */ | 1164 | MTMSRD(r10) /* disable interrupts */ |
diff --git a/arch/powerpc/kernel/head_32.S b/arch/powerpc/kernel/head_32.S index 48469463f89e..fc2132942754 100644 --- a/arch/powerpc/kernel/head_32.S +++ b/arch/powerpc/kernel/head_32.S | |||
@@ -1124,9 +1124,8 @@ mmu_off: | |||
1124 | RFI | 1124 | RFI |
1125 | 1125 | ||
1126 | /* | 1126 | /* |
1127 | * Use the first pair of BAT registers to map the 1st 16MB | 1127 | * On 601, we use 3 BATs to map up to 24M of RAM at _PAGE_OFFSET |
1128 | * of RAM to PAGE_OFFSET. From this point on we can't safely | 1128 | * (we keep one for debugging) and on others, we use one 256M BAT. |
1129 | * call OF any more. | ||
1130 | */ | 1129 | */ |
1131 | initial_bats: | 1130 | initial_bats: |
1132 | lis r11,PAGE_OFFSET@h | 1131 | lis r11,PAGE_OFFSET@h |
@@ -1136,12 +1135,16 @@ initial_bats: | |||
1136 | bne 4f | 1135 | bne 4f |
1137 | ori r11,r11,4 /* set up BAT registers for 601 */ | 1136 | ori r11,r11,4 /* set up BAT registers for 601 */ |
1138 | li r8,0x7f /* valid, block length = 8MB */ | 1137 | li r8,0x7f /* valid, block length = 8MB */ |
1139 | oris r9,r11,0x800000@h /* set up BAT reg for 2nd 8M */ | ||
1140 | oris r10,r8,0x800000@h /* set up BAT reg for 2nd 8M */ | ||
1141 | mtspr SPRN_IBAT0U,r11 /* N.B. 601 has valid bit in */ | 1138 | mtspr SPRN_IBAT0U,r11 /* N.B. 601 has valid bit in */ |
1142 | mtspr SPRN_IBAT0L,r8 /* lower BAT register */ | 1139 | mtspr SPRN_IBAT0L,r8 /* lower BAT register */ |
1143 | mtspr SPRN_IBAT1U,r9 | 1140 | addis r11,r11,0x800000@h |
1144 | mtspr SPRN_IBAT1L,r10 | 1141 | addis r8,r8,0x800000@h |
1142 | mtspr SPRN_IBAT1U,r11 | ||
1143 | mtspr SPRN_IBAT1L,r8 | ||
1144 | addis r11,r11,0x800000@h | ||
1145 | addis r8,r8,0x800000@h | ||
1146 | mtspr SPRN_IBAT2U,r11 | ||
1147 | mtspr SPRN_IBAT2L,r8 | ||
1145 | isync | 1148 | isync |
1146 | blr | 1149 | blr |
1147 | 1150 | ||
diff --git a/arch/powerpc/kernel/mpc7450-pmu.c b/arch/powerpc/kernel/mpc7450-pmu.c index 75ff47fed7bf..c244133c67a6 100644 --- a/arch/powerpc/kernel/mpc7450-pmu.c +++ b/arch/powerpc/kernel/mpc7450-pmu.c | |||
@@ -10,7 +10,6 @@ | |||
10 | */ | 10 | */ |
11 | #include <linux/string.h> | 11 | #include <linux/string.h> |
12 | #include <linux/perf_counter.h> | 12 | #include <linux/perf_counter.h> |
13 | #include <linux/string.h> | ||
14 | #include <asm/reg.h> | 13 | #include <asm/reg.h> |
15 | #include <asm/cputable.h> | 14 | #include <asm/cputable.h> |
16 | 15 | ||
diff --git a/arch/powerpc/kernel/of_device.c b/arch/powerpc/kernel/of_device.c index fa983a59c4ce..a359cb08e900 100644 --- a/arch/powerpc/kernel/of_device.c +++ b/arch/powerpc/kernel/of_device.c | |||
@@ -76,7 +76,7 @@ struct of_device *of_device_alloc(struct device_node *np, | |||
76 | dev->dev.archdata.of_node = np; | 76 | dev->dev.archdata.of_node = np; |
77 | 77 | ||
78 | if (bus_id) | 78 | if (bus_id) |
79 | dev_set_name(&dev->dev, bus_id); | 79 | dev_set_name(&dev->dev, "%s", bus_id); |
80 | else | 80 | else |
81 | of_device_make_bus_id(dev); | 81 | of_device_make_bus_id(dev); |
82 | 82 | ||
diff --git a/arch/powerpc/kernel/power7-pmu.c b/arch/powerpc/kernel/power7-pmu.c index 5d755ef7ac8f..5a9f5cbd40a4 100644 --- a/arch/powerpc/kernel/power7-pmu.c +++ b/arch/powerpc/kernel/power7-pmu.c | |||
@@ -358,6 +358,7 @@ static struct power_pmu power7_pmu = { | |||
358 | .get_constraint = power7_get_constraint, | 358 | .get_constraint = power7_get_constraint, |
359 | .get_alternatives = power7_get_alternatives, | 359 | .get_alternatives = power7_get_alternatives, |
360 | .disable_pmc = power7_disable_pmc, | 360 | .disable_pmc = power7_disable_pmc, |
361 | .flags = PPMU_ALT_SIPR, | ||
361 | .n_generic = ARRAY_SIZE(power7_generic_events), | 362 | .n_generic = ARRAY_SIZE(power7_generic_events), |
362 | .generic_events = power7_generic_events, | 363 | .generic_events = power7_generic_events, |
363 | .cache_events = &power7_cache_events, | 364 | .cache_events = &power7_cache_events, |
diff --git a/arch/powerpc/kernel/ppc970-pmu.c b/arch/powerpc/kernel/ppc970-pmu.c index 6637c87fe70e..833097ac45dc 100644 --- a/arch/powerpc/kernel/ppc970-pmu.c +++ b/arch/powerpc/kernel/ppc970-pmu.c | |||
@@ -10,7 +10,6 @@ | |||
10 | */ | 10 | */ |
11 | #include <linux/string.h> | 11 | #include <linux/string.h> |
12 | #include <linux/perf_counter.h> | 12 | #include <linux/perf_counter.h> |
13 | #include <linux/string.h> | ||
14 | #include <asm/reg.h> | 13 | #include <asm/reg.h> |
15 | #include <asm/cputable.h> | 14 | #include <asm/cputable.h> |
16 | 15 | ||
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index 3e7135bbe40f..892a9f2e6d76 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c | |||
@@ -528,7 +528,7 @@ void show_regs(struct pt_regs * regs) | |||
528 | 528 | ||
529 | for (i = 0; i < 32; i++) { | 529 | for (i = 0; i < 32; i++) { |
530 | if ((i % REGS_PER_LINE) == 0) | 530 | if ((i % REGS_PER_LINE) == 0) |
531 | printk("\n" KERN_INFO "GPR%02d: ", i); | 531 | printk("\nGPR%02d: ", i); |
532 | printk(REG " ", regs->gpr[i]); | 532 | printk(REG " ", regs->gpr[i]); |
533 | if (i == LAST_VOLATILE && !FULL_REGS(regs)) | 533 | if (i == LAST_VOLATILE && !FULL_REGS(regs)) |
534 | break; | 534 | break; |
diff --git a/arch/powerpc/kernel/ptrace32.c b/arch/powerpc/kernel/ptrace32.c index 297632cba047..8a6daf4129f6 100644 --- a/arch/powerpc/kernel/ptrace32.c +++ b/arch/powerpc/kernel/ptrace32.c | |||
@@ -21,7 +21,6 @@ | |||
21 | #include <linux/sched.h> | 21 | #include <linux/sched.h> |
22 | #include <linux/mm.h> | 22 | #include <linux/mm.h> |
23 | #include <linux/smp.h> | 23 | #include <linux/smp.h> |
24 | #include <linux/smp_lock.h> | ||
25 | #include <linux/errno.h> | 24 | #include <linux/errno.h> |
26 | #include <linux/ptrace.h> | 25 | #include <linux/ptrace.h> |
27 | #include <linux/regset.h> | 26 | #include <linux/regset.h> |
diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c index ee4c7609b649..c434823b8c83 100644 --- a/arch/powerpc/kernel/rtas.c +++ b/arch/powerpc/kernel/rtas.c | |||
@@ -38,9 +38,10 @@ | |||
38 | #include <asm/syscalls.h> | 38 | #include <asm/syscalls.h> |
39 | #include <asm/smp.h> | 39 | #include <asm/smp.h> |
40 | #include <asm/atomic.h> | 40 | #include <asm/atomic.h> |
41 | #include <asm/time.h> | ||
41 | 42 | ||
42 | struct rtas_t rtas = { | 43 | struct rtas_t rtas = { |
43 | .lock = SPIN_LOCK_UNLOCKED | 44 | .lock = __RAW_SPIN_LOCK_UNLOCKED |
44 | }; | 45 | }; |
45 | EXPORT_SYMBOL(rtas); | 46 | EXPORT_SYMBOL(rtas); |
46 | 47 | ||
@@ -67,6 +68,28 @@ unsigned long rtas_rmo_buf; | |||
67 | void (*rtas_flash_term_hook)(int); | 68 | void (*rtas_flash_term_hook)(int); |
68 | EXPORT_SYMBOL(rtas_flash_term_hook); | 69 | EXPORT_SYMBOL(rtas_flash_term_hook); |
69 | 70 | ||
71 | /* RTAS use home made raw locking instead of spin_lock_irqsave | ||
72 | * because those can be called from within really nasty contexts | ||
73 | * such as having the timebase stopped which would lockup with | ||
74 | * normal locks and spinlock debugging enabled | ||
75 | */ | ||
76 | static unsigned long lock_rtas(void) | ||
77 | { | ||
78 | unsigned long flags; | ||
79 | |||
80 | local_irq_save(flags); | ||
81 | preempt_disable(); | ||
82 | __raw_spin_lock_flags(&rtas.lock, flags); | ||
83 | return flags; | ||
84 | } | ||
85 | |||
86 | static void unlock_rtas(unsigned long flags) | ||
87 | { | ||
88 | __raw_spin_unlock(&rtas.lock); | ||
89 | local_irq_restore(flags); | ||
90 | preempt_enable(); | ||
91 | } | ||
92 | |||
70 | /* | 93 | /* |
71 | * call_rtas_display_status and call_rtas_display_status_delay | 94 | * call_rtas_display_status and call_rtas_display_status_delay |
72 | * are designed only for very early low-level debugging, which | 95 | * are designed only for very early low-level debugging, which |
@@ -79,7 +102,7 @@ static void call_rtas_display_status(char c) | |||
79 | 102 | ||
80 | if (!rtas.base) | 103 | if (!rtas.base) |
81 | return; | 104 | return; |
82 | spin_lock_irqsave(&rtas.lock, s); | 105 | s = lock_rtas(); |
83 | 106 | ||
84 | args->token = 10; | 107 | args->token = 10; |
85 | args->nargs = 1; | 108 | args->nargs = 1; |
@@ -89,7 +112,7 @@ static void call_rtas_display_status(char c) | |||
89 | 112 | ||
90 | enter_rtas(__pa(args)); | 113 | enter_rtas(__pa(args)); |
91 | 114 | ||
92 | spin_unlock_irqrestore(&rtas.lock, s); | 115 | unlock_rtas(s); |
93 | } | 116 | } |
94 | 117 | ||
95 | static void call_rtas_display_status_delay(char c) | 118 | static void call_rtas_display_status_delay(char c) |
@@ -411,8 +434,7 @@ int rtas_call(int token, int nargs, int nret, int *outputs, ...) | |||
411 | if (!rtas.entry || token == RTAS_UNKNOWN_SERVICE) | 434 | if (!rtas.entry || token == RTAS_UNKNOWN_SERVICE) |
412 | return -1; | 435 | return -1; |
413 | 436 | ||
414 | /* Gotta do something different here, use global lock for now... */ | 437 | s = lock_rtas(); |
415 | spin_lock_irqsave(&rtas.lock, s); | ||
416 | rtas_args = &rtas.args; | 438 | rtas_args = &rtas.args; |
417 | 439 | ||
418 | rtas_args->token = token; | 440 | rtas_args->token = token; |
@@ -439,8 +461,7 @@ int rtas_call(int token, int nargs, int nret, int *outputs, ...) | |||
439 | outputs[i] = rtas_args->rets[i+1]; | 461 | outputs[i] = rtas_args->rets[i+1]; |
440 | ret = (nret > 0)? rtas_args->rets[0]: 0; | 462 | ret = (nret > 0)? rtas_args->rets[0]: 0; |
441 | 463 | ||
442 | /* Gotta do something different here, use global lock for now... */ | 464 | unlock_rtas(s); |
443 | spin_unlock_irqrestore(&rtas.lock, s); | ||
444 | 465 | ||
445 | if (buff_copy) { | 466 | if (buff_copy) { |
446 | log_error(buff_copy, ERR_TYPE_RTAS_LOG, 0); | 467 | log_error(buff_copy, ERR_TYPE_RTAS_LOG, 0); |
@@ -837,7 +858,7 @@ asmlinkage int ppc_rtas(struct rtas_args __user *uargs) | |||
837 | 858 | ||
838 | buff_copy = get_errorlog_buffer(); | 859 | buff_copy = get_errorlog_buffer(); |
839 | 860 | ||
840 | spin_lock_irqsave(&rtas.lock, flags); | 861 | flags = lock_rtas(); |
841 | 862 | ||
842 | rtas.args = args; | 863 | rtas.args = args; |
843 | enter_rtas(__pa(&rtas.args)); | 864 | enter_rtas(__pa(&rtas.args)); |
@@ -848,7 +869,7 @@ asmlinkage int ppc_rtas(struct rtas_args __user *uargs) | |||
848 | if (args.rets[0] == -1) | 869 | if (args.rets[0] == -1) |
849 | errbuf = __fetch_rtas_last_error(buff_copy); | 870 | errbuf = __fetch_rtas_last_error(buff_copy); |
850 | 871 | ||
851 | spin_unlock_irqrestore(&rtas.lock, flags); | 872 | unlock_rtas(flags); |
852 | 873 | ||
853 | if (buff_copy) { | 874 | if (buff_copy) { |
854 | if (errbuf) | 875 | if (errbuf) |
@@ -951,3 +972,33 @@ int __init early_init_dt_scan_rtas(unsigned long node, | |||
951 | /* break now */ | 972 | /* break now */ |
952 | return 1; | 973 | return 1; |
953 | } | 974 | } |
975 | |||
976 | static raw_spinlock_t timebase_lock; | ||
977 | static u64 timebase = 0; | ||
978 | |||
979 | void __cpuinit rtas_give_timebase(void) | ||
980 | { | ||
981 | unsigned long flags; | ||
982 | |||
983 | local_irq_save(flags); | ||
984 | hard_irq_disable(); | ||
985 | __raw_spin_lock(&timebase_lock); | ||
986 | rtas_call(rtas_token("freeze-time-base"), 0, 1, NULL); | ||
987 | timebase = get_tb(); | ||
988 | __raw_spin_unlock(&timebase_lock); | ||
989 | |||
990 | while (timebase) | ||
991 | barrier(); | ||
992 | rtas_call(rtas_token("thaw-time-base"), 0, 1, NULL); | ||
993 | local_irq_restore(flags); | ||
994 | } | ||
995 | |||
996 | void __cpuinit rtas_take_timebase(void) | ||
997 | { | ||
998 | while (!timebase) | ||
999 | barrier(); | ||
1000 | __raw_spin_lock(&timebase_lock); | ||
1001 | set_tb(timebase >> 32, timebase & 0xffffffff); | ||
1002 | timebase = 0; | ||
1003 | __raw_spin_unlock(&timebase_lock); | ||
1004 | } | ||
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c index 1d154248cf40..e1e3059cf34b 100644 --- a/arch/powerpc/kernel/setup_32.c +++ b/arch/powerpc/kernel/setup_32.c | |||
@@ -119,6 +119,8 @@ notrace unsigned long __init early_init(unsigned long dt_ptr) | |||
119 | */ | 119 | */ |
120 | notrace void __init machine_init(unsigned long dt_ptr) | 120 | notrace void __init machine_init(unsigned long dt_ptr) |
121 | { | 121 | { |
122 | lockdep_init(); | ||
123 | |||
122 | /* Enable early debugging if any specified (see udbg.h) */ | 124 | /* Enable early debugging if any specified (see udbg.h) */ |
123 | udbg_early_init(); | 125 | udbg_early_init(); |
124 | 126 | ||
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c index 65484b2200b3..0b47de07302d 100644 --- a/arch/powerpc/kernel/smp.c +++ b/arch/powerpc/kernel/smp.c | |||
@@ -68,7 +68,8 @@ EXPORT_PER_CPU_SYMBOL(cpu_core_map); | |||
68 | /* SMP operations for this machine */ | 68 | /* SMP operations for this machine */ |
69 | struct smp_ops_t *smp_ops; | 69 | struct smp_ops_t *smp_ops; |
70 | 70 | ||
71 | static volatile unsigned int cpu_callin_map[NR_CPUS]; | 71 | /* Can't be static due to PowerMac hackery */ |
72 | volatile unsigned int cpu_callin_map[NR_CPUS]; | ||
72 | 73 | ||
73 | int smt_enabled_at_boot = 1; | 74 | int smt_enabled_at_boot = 1; |
74 | 75 | ||
diff --git a/arch/powerpc/kernel/udbg_16550.c b/arch/powerpc/kernel/udbg_16550.c index 0362a891e54e..acb74a17bbbf 100644 --- a/arch/powerpc/kernel/udbg_16550.c +++ b/arch/powerpc/kernel/udbg_16550.c | |||
@@ -219,7 +219,7 @@ void udbg_init_pas_realmode(void) | |||
219 | #ifdef CONFIG_PPC_EARLY_DEBUG_44x | 219 | #ifdef CONFIG_PPC_EARLY_DEBUG_44x |
220 | #include <platforms/44x/44x.h> | 220 | #include <platforms/44x/44x.h> |
221 | 221 | ||
222 | static int udbg_44x_as1_flush(void) | 222 | static void udbg_44x_as1_flush(void) |
223 | { | 223 | { |
224 | if (udbg_comport) { | 224 | if (udbg_comport) { |
225 | while ((as1_readb(&udbg_comport->lsr) & LSR_THRE) == 0) | 225 | while ((as1_readb(&udbg_comport->lsr) & LSR_THRE) == 0) |
diff --git a/arch/powerpc/mm/Makefile b/arch/powerpc/mm/Makefile index 2d2192e48de7..3e68363405b7 100644 --- a/arch/powerpc/mm/Makefile +++ b/arch/powerpc/mm/Makefile | |||
@@ -30,3 +30,4 @@ obj-$(CONFIG_PPC_MM_SLICES) += slice.o | |||
30 | obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o | 30 | obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o |
31 | obj-$(CONFIG_PPC_SUBPAGE_PROT) += subpage-prot.o | 31 | obj-$(CONFIG_PPC_SUBPAGE_PROT) += subpage-prot.o |
32 | obj-$(CONFIG_NOT_COHERENT_CACHE) += dma-noncoherent.o | 32 | obj-$(CONFIG_NOT_COHERENT_CACHE) += dma-noncoherent.o |
33 | obj-$(CONFIG_HIGHMEM) += highmem.o | ||
diff --git a/arch/powerpc/mm/gup.c b/arch/powerpc/mm/gup.c index bc400c78c97f..bc122a120bf0 100644 --- a/arch/powerpc/mm/gup.c +++ b/arch/powerpc/mm/gup.c | |||
@@ -159,7 +159,7 @@ int get_user_pages_fast(unsigned long start, int nr_pages, int write, | |||
159 | int psize; | 159 | int psize; |
160 | #endif | 160 | #endif |
161 | 161 | ||
162 | pr_debug("%s(%lx,%x,%s)\n", __func__, start, nr_pages, write ? "write" : "read"); | 162 | pr_devel("%s(%lx,%x,%s)\n", __func__, start, nr_pages, write ? "write" : "read"); |
163 | 163 | ||
164 | start &= PAGE_MASK; | 164 | start &= PAGE_MASK; |
165 | addr = start; | 165 | addr = start; |
@@ -170,7 +170,7 @@ int get_user_pages_fast(unsigned long start, int nr_pages, int write, | |||
170 | start, len))) | 170 | start, len))) |
171 | goto slow_irqon; | 171 | goto slow_irqon; |
172 | 172 | ||
173 | pr_debug(" aligned: %lx .. %lx\n", start, end); | 173 | pr_devel(" aligned: %lx .. %lx\n", start, end); |
174 | 174 | ||
175 | #ifdef CONFIG_HUGETLB_PAGE | 175 | #ifdef CONFIG_HUGETLB_PAGE |
176 | /* We bail out on slice boundary crossing when hugetlb is | 176 | /* We bail out on slice boundary crossing when hugetlb is |
@@ -234,7 +234,7 @@ int get_user_pages_fast(unsigned long start, int nr_pages, int write, | |||
234 | do { | 234 | do { |
235 | VM_BUG_ON(shift != mmu_psize_defs[get_slice_psize(mm, a)].shift); | 235 | VM_BUG_ON(shift != mmu_psize_defs[get_slice_psize(mm, a)].shift); |
236 | ptep = huge_pte_offset(mm, a); | 236 | ptep = huge_pte_offset(mm, a); |
237 | pr_debug(" %016lx: huge ptep %p\n", a, ptep); | 237 | pr_devel(" %016lx: huge ptep %p\n", a, ptep); |
238 | if (!ptep || !gup_huge_pte(ptep, hstate, &a, end, write, pages, | 238 | if (!ptep || !gup_huge_pte(ptep, hstate, &a, end, write, pages, |
239 | &nr)) | 239 | &nr)) |
240 | goto slow; | 240 | goto slow; |
@@ -249,7 +249,7 @@ int get_user_pages_fast(unsigned long start, int nr_pages, int write, | |||
249 | #ifdef CONFIG_PPC64 | 249 | #ifdef CONFIG_PPC64 |
250 | VM_BUG_ON(shift != mmu_psize_defs[get_slice_psize(mm, addr)].shift); | 250 | VM_BUG_ON(shift != mmu_psize_defs[get_slice_psize(mm, addr)].shift); |
251 | #endif | 251 | #endif |
252 | pr_debug(" %016lx: normal pgd %p\n", addr, | 252 | pr_devel(" %016lx: normal pgd %p\n", addr, |
253 | (void *)pgd_val(pgd)); | 253 | (void *)pgd_val(pgd)); |
254 | next = pgd_addr_end(addr, end); | 254 | next = pgd_addr_end(addr, end); |
255 | if (pgd_none(pgd)) | 255 | if (pgd_none(pgd)) |
@@ -269,7 +269,7 @@ int get_user_pages_fast(unsigned long start, int nr_pages, int write, | |||
269 | slow: | 269 | slow: |
270 | local_irq_enable(); | 270 | local_irq_enable(); |
271 | slow_irqon: | 271 | slow_irqon: |
272 | pr_debug(" slow path ! nr = %d\n", nr); | 272 | pr_devel(" slow path ! nr = %d\n", nr); |
273 | 273 | ||
274 | /* Try to get the remaining pages with get_user_pages */ | 274 | /* Try to get the remaining pages with get_user_pages */ |
275 | start += nr << PAGE_SHIFT; | 275 | start += nr << PAGE_SHIFT; |
diff --git a/arch/powerpc/mm/highmem.c b/arch/powerpc/mm/highmem.c new file mode 100644 index 000000000000..c2186c74c85a --- /dev/null +++ b/arch/powerpc/mm/highmem.c | |||
@@ -0,0 +1,77 @@ | |||
1 | /* | ||
2 | * highmem.c: virtual kernel memory mappings for high memory | ||
3 | * | ||
4 | * PowerPC version, stolen from the i386 version. | ||
5 | * | ||
6 | * Used in CONFIG_HIGHMEM systems for memory pages which | ||
7 | * are not addressable by direct kernel virtual addresses. | ||
8 | * | ||
9 | * Copyright (C) 1999 Gerhard Wichert, Siemens AG | ||
10 | * Gerhard.Wichert@pdb.siemens.de | ||
11 | * | ||
12 | * | ||
13 | * Redesigned the x86 32-bit VM architecture to deal with | ||
14 | * up to 16 Terrabyte physical memory. With current x86 CPUs | ||
15 | * we now support up to 64 Gigabytes physical RAM. | ||
16 | * | ||
17 | * Copyright (C) 1999 Ingo Molnar <mingo@redhat.com> | ||
18 | * | ||
19 | * Reworked for PowerPC by various contributors. Moved from | ||
20 | * highmem.h by Benjamin Herrenschmidt (c) 2009 IBM Corp. | ||
21 | */ | ||
22 | |||
23 | #include <linux/highmem.h> | ||
24 | #include <linux/module.h> | ||
25 | |||
26 | /* | ||
27 | * The use of kmap_atomic/kunmap_atomic is discouraged - kmap/kunmap | ||
28 | * gives a more generic (and caching) interface. But kmap_atomic can | ||
29 | * be used in IRQ contexts, so in some (very limited) cases we need | ||
30 | * it. | ||
31 | */ | ||
32 | void *kmap_atomic_prot(struct page *page, enum km_type type, pgprot_t prot) | ||
33 | { | ||
34 | unsigned int idx; | ||
35 | unsigned long vaddr; | ||
36 | |||
37 | /* even !CONFIG_PREEMPT needs this, for in_atomic in do_page_fault */ | ||
38 | pagefault_disable(); | ||
39 | if (!PageHighMem(page)) | ||
40 | return page_address(page); | ||
41 | |||
42 | debug_kmap_atomic(type); | ||
43 | idx = type + KM_TYPE_NR*smp_processor_id(); | ||
44 | vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx); | ||
45 | #ifdef CONFIG_DEBUG_HIGHMEM | ||
46 | BUG_ON(!pte_none(*(kmap_pte-idx))); | ||
47 | #endif | ||
48 | __set_pte_at(&init_mm, vaddr, kmap_pte-idx, mk_pte(page, prot), 1); | ||
49 | local_flush_tlb_page(NULL, vaddr); | ||
50 | |||
51 | return (void*) vaddr; | ||
52 | } | ||
53 | EXPORT_SYMBOL(kmap_atomic_prot); | ||
54 | |||
55 | void kunmap_atomic(void *kvaddr, enum km_type type) | ||
56 | { | ||
57 | #ifdef CONFIG_DEBUG_HIGHMEM | ||
58 | unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK; | ||
59 | enum fixed_addresses idx = type + KM_TYPE_NR*smp_processor_id(); | ||
60 | |||
61 | if (vaddr < __fix_to_virt(FIX_KMAP_END)) { | ||
62 | pagefault_enable(); | ||
63 | return; | ||
64 | } | ||
65 | |||
66 | BUG_ON(vaddr != __fix_to_virt(FIX_KMAP_BEGIN + idx)); | ||
67 | |||
68 | /* | ||
69 | * force other mappings to Oops if they'll try to access | ||
70 | * this pte without first remap it | ||
71 | */ | ||
72 | pte_clear(&init_mm, vaddr, kmap_pte-idx); | ||
73 | local_flush_tlb_page(NULL, vaddr); | ||
74 | #endif | ||
75 | pagefault_enable(); | ||
76 | } | ||
77 | EXPORT_SYMBOL(kunmap_atomic); | ||
diff --git a/arch/powerpc/mm/mmu_context_nohash.c b/arch/powerpc/mm/mmu_context_nohash.c index 8343986809c0..92a197117d5b 100644 --- a/arch/powerpc/mm/mmu_context_nohash.c +++ b/arch/powerpc/mm/mmu_context_nohash.c | |||
@@ -89,7 +89,7 @@ static unsigned int steal_context_smp(unsigned int id) | |||
89 | id = first_context; | 89 | id = first_context; |
90 | continue; | 90 | continue; |
91 | } | 91 | } |
92 | pr_debug("[%d] steal context %d from mm @%p\n", | 92 | pr_devel("[%d] steal context %d from mm @%p\n", |
93 | smp_processor_id(), id, mm); | 93 | smp_processor_id(), id, mm); |
94 | 94 | ||
95 | /* Mark this mm has having no context anymore */ | 95 | /* Mark this mm has having no context anymore */ |
@@ -126,7 +126,7 @@ static unsigned int steal_context_up(unsigned int id) | |||
126 | /* Pick up the victim mm */ | 126 | /* Pick up the victim mm */ |
127 | mm = context_mm[id]; | 127 | mm = context_mm[id]; |
128 | 128 | ||
129 | pr_debug("[%d] steal context %d from mm @%p\n", cpu, id, mm); | 129 | pr_devel("[%d] steal context %d from mm @%p\n", cpu, id, mm); |
130 | 130 | ||
131 | /* Flush the TLB for that context */ | 131 | /* Flush the TLB for that context */ |
132 | local_flush_tlb_mm(mm); | 132 | local_flush_tlb_mm(mm); |
@@ -180,7 +180,7 @@ void switch_mmu_context(struct mm_struct *prev, struct mm_struct *next) | |||
180 | spin_lock(&context_lock); | 180 | spin_lock(&context_lock); |
181 | 181 | ||
182 | #ifndef DEBUG_STEAL_ONLY | 182 | #ifndef DEBUG_STEAL_ONLY |
183 | pr_debug("[%d] activating context for mm @%p, active=%d, id=%d\n", | 183 | pr_devel("[%d] activating context for mm @%p, active=%d, id=%d\n", |
184 | cpu, next, next->context.active, next->context.id); | 184 | cpu, next, next->context.active, next->context.id); |
185 | #endif | 185 | #endif |
186 | 186 | ||
@@ -189,7 +189,7 @@ void switch_mmu_context(struct mm_struct *prev, struct mm_struct *next) | |||
189 | next->context.active++; | 189 | next->context.active++; |
190 | if (prev) { | 190 | if (prev) { |
191 | #ifndef DEBUG_STEAL_ONLY | 191 | #ifndef DEBUG_STEAL_ONLY |
192 | pr_debug(" old context %p active was: %d\n", | 192 | pr_devel(" old context %p active was: %d\n", |
193 | prev, prev->context.active); | 193 | prev, prev->context.active); |
194 | #endif | 194 | #endif |
195 | WARN_ON(prev->context.active < 1); | 195 | WARN_ON(prev->context.active < 1); |
@@ -236,7 +236,7 @@ void switch_mmu_context(struct mm_struct *prev, struct mm_struct *next) | |||
236 | next->context.id = id; | 236 | next->context.id = id; |
237 | 237 | ||
238 | #ifndef DEBUG_STEAL_ONLY | 238 | #ifndef DEBUG_STEAL_ONLY |
239 | pr_debug("[%d] picked up new id %d, nrf is now %d\n", | 239 | pr_devel("[%d] picked up new id %d, nrf is now %d\n", |
240 | cpu, id, nr_free_contexts); | 240 | cpu, id, nr_free_contexts); |
241 | #endif | 241 | #endif |
242 | 242 | ||
@@ -247,7 +247,7 @@ void switch_mmu_context(struct mm_struct *prev, struct mm_struct *next) | |||
247 | * local TLB for it and unmark it before we use it | 247 | * local TLB for it and unmark it before we use it |
248 | */ | 248 | */ |
249 | if (test_bit(id, stale_map[cpu])) { | 249 | if (test_bit(id, stale_map[cpu])) { |
250 | pr_debug("[%d] flushing stale context %d for mm @%p !\n", | 250 | pr_devel("[%d] flushing stale context %d for mm @%p !\n", |
251 | cpu, id, next); | 251 | cpu, id, next); |
252 | local_flush_tlb_mm(next); | 252 | local_flush_tlb_mm(next); |
253 | 253 | ||
@@ -314,13 +314,13 @@ static int __cpuinit mmu_context_cpu_notify(struct notifier_block *self, | |||
314 | switch (action) { | 314 | switch (action) { |
315 | case CPU_ONLINE: | 315 | case CPU_ONLINE: |
316 | case CPU_ONLINE_FROZEN: | 316 | case CPU_ONLINE_FROZEN: |
317 | pr_debug("MMU: Allocating stale context map for CPU %d\n", cpu); | 317 | pr_devel("MMU: Allocating stale context map for CPU %d\n", cpu); |
318 | stale_map[cpu] = kzalloc(CTX_MAP_SIZE, GFP_KERNEL); | 318 | stale_map[cpu] = kzalloc(CTX_MAP_SIZE, GFP_KERNEL); |
319 | break; | 319 | break; |
320 | #ifdef CONFIG_HOTPLUG_CPU | 320 | #ifdef CONFIG_HOTPLUG_CPU |
321 | case CPU_DEAD: | 321 | case CPU_DEAD: |
322 | case CPU_DEAD_FROZEN: | 322 | case CPU_DEAD_FROZEN: |
323 | pr_debug("MMU: Freeing stale context map for CPU %d\n", cpu); | 323 | pr_devel("MMU: Freeing stale context map for CPU %d\n", cpu); |
324 | kfree(stale_map[cpu]); | 324 | kfree(stale_map[cpu]); |
325 | stale_map[cpu] = NULL; | 325 | stale_map[cpu] = NULL; |
326 | break; | 326 | break; |
diff --git a/arch/powerpc/mm/pgtable.c b/arch/powerpc/mm/pgtable.c index ae1d67cc090c..627767d6169b 100644 --- a/arch/powerpc/mm/pgtable.c +++ b/arch/powerpc/mm/pgtable.c | |||
@@ -129,12 +129,12 @@ static pte_t do_dcache_icache_coherency(pte_t pte) | |||
129 | page = pfn_to_page(pfn); | 129 | page = pfn_to_page(pfn); |
130 | 130 | ||
131 | if (!PageReserved(page) && !test_bit(PG_arch_1, &page->flags)) { | 131 | if (!PageReserved(page) && !test_bit(PG_arch_1, &page->flags)) { |
132 | pr_debug("do_dcache_icache_coherency... flushing\n"); | 132 | pr_devel("do_dcache_icache_coherency... flushing\n"); |
133 | flush_dcache_icache_page(page); | 133 | flush_dcache_icache_page(page); |
134 | set_bit(PG_arch_1, &page->flags); | 134 | set_bit(PG_arch_1, &page->flags); |
135 | } | 135 | } |
136 | else | 136 | else |
137 | pr_debug("do_dcache_icache_coherency... already clean\n"); | 137 | pr_devel("do_dcache_icache_coherency... already clean\n"); |
138 | return __pte(pte_val(pte) | _PAGE_HWEXEC); | 138 | return __pte(pte_val(pte) | _PAGE_HWEXEC); |
139 | } | 139 | } |
140 | 140 | ||
diff --git a/arch/powerpc/mm/slb.c b/arch/powerpc/mm/slb.c index 3b52c80e5e33..5b7038f248b6 100644 --- a/arch/powerpc/mm/slb.c +++ b/arch/powerpc/mm/slb.c | |||
@@ -14,8 +14,6 @@ | |||
14 | * 2 of the License, or (at your option) any later version. | 14 | * 2 of the License, or (at your option) any later version. |
15 | */ | 15 | */ |
16 | 16 | ||
17 | #undef DEBUG | ||
18 | |||
19 | #include <asm/pgtable.h> | 17 | #include <asm/pgtable.h> |
20 | #include <asm/mmu.h> | 18 | #include <asm/mmu.h> |
21 | #include <asm/mmu_context.h> | 19 | #include <asm/mmu_context.h> |
@@ -27,11 +25,6 @@ | |||
27 | #include <linux/compiler.h> | 25 | #include <linux/compiler.h> |
28 | #include <asm/udbg.h> | 26 | #include <asm/udbg.h> |
29 | 27 | ||
30 | #ifdef DEBUG | ||
31 | #define DBG(fmt...) printk(fmt) | ||
32 | #else | ||
33 | #define DBG pr_debug | ||
34 | #endif | ||
35 | 28 | ||
36 | extern void slb_allocate_realmode(unsigned long ea); | 29 | extern void slb_allocate_realmode(unsigned long ea); |
37 | extern void slb_allocate_user(unsigned long ea); | 30 | extern void slb_allocate_user(unsigned long ea); |
@@ -285,13 +278,13 @@ void slb_initialize(void) | |||
285 | patch_slb_encoding(slb_compare_rr_to_size, | 278 | patch_slb_encoding(slb_compare_rr_to_size, |
286 | mmu_slb_size); | 279 | mmu_slb_size); |
287 | 280 | ||
288 | DBG("SLB: linear LLP = %04lx\n", linear_llp); | 281 | pr_devel("SLB: linear LLP = %04lx\n", linear_llp); |
289 | DBG("SLB: io LLP = %04lx\n", io_llp); | 282 | pr_devel("SLB: io LLP = %04lx\n", io_llp); |
290 | 283 | ||
291 | #ifdef CONFIG_SPARSEMEM_VMEMMAP | 284 | #ifdef CONFIG_SPARSEMEM_VMEMMAP |
292 | patch_slb_encoding(slb_miss_kernel_load_vmemmap, | 285 | patch_slb_encoding(slb_miss_kernel_load_vmemmap, |
293 | SLB_VSID_KERNEL | vmemmap_llp); | 286 | SLB_VSID_KERNEL | vmemmap_llp); |
294 | DBG("SLB: vmemmap LLP = %04lx\n", vmemmap_llp); | 287 | pr_devel("SLB: vmemmap LLP = %04lx\n", vmemmap_llp); |
295 | #endif | 288 | #endif |
296 | } | 289 | } |
297 | 290 | ||
diff --git a/arch/powerpc/mm/tlb_hash64.c b/arch/powerpc/mm/tlb_hash64.c index 1be1b5e59796..937eb90677d9 100644 --- a/arch/powerpc/mm/tlb_hash64.c +++ b/arch/powerpc/mm/tlb_hash64.c | |||
@@ -72,7 +72,7 @@ void hpte_need_flush(struct mm_struct *mm, unsigned long addr, | |||
72 | */ | 72 | */ |
73 | if (huge) { | 73 | if (huge) { |
74 | #ifdef CONFIG_HUGETLB_PAGE | 74 | #ifdef CONFIG_HUGETLB_PAGE |
75 | psize = get_slice_psize(mm, addr);; | 75 | psize = get_slice_psize(mm, addr); |
76 | #else | 76 | #else |
77 | BUG(); | 77 | BUG(); |
78 | psize = pte_pagesize_index(mm, addr, pte); /* shutup gcc */ | 78 | psize = pte_pagesize_index(mm, addr, pte); /* shutup gcc */ |
diff --git a/arch/powerpc/oprofile/cell/vma_map.c b/arch/powerpc/oprofile/cell/vma_map.c index 258fa4411e9e..c591339daf58 100644 --- a/arch/powerpc/oprofile/cell/vma_map.c +++ b/arch/powerpc/oprofile/cell/vma_map.c | |||
@@ -185,7 +185,7 @@ struct vma_to_fileoffset_map *create_vma_map(const struct spu *aSpu, | |||
185 | goto fail; | 185 | goto fail; |
186 | 186 | ||
187 | if (shdr_str.sh_type != SHT_STRTAB) | 187 | if (shdr_str.sh_type != SHT_STRTAB) |
188 | goto fail;; | 188 | goto fail; |
189 | 189 | ||
190 | for (j = 0; j < shdr.sh_size / sizeof (sym); j++) { | 190 | for (j = 0; j < shdr.sh_size / sizeof (sym); j++) { |
191 | if (copy_from_user(&sym, spu_elf_start + | 191 | if (copy_from_user(&sym, spu_elf_start + |
diff --git a/arch/powerpc/platforms/44x/warp.c b/arch/powerpc/platforms/44x/warp.c index 42e09a9f77e2..e5c1b096c3e1 100644 --- a/arch/powerpc/platforms/44x/warp.c +++ b/arch/powerpc/platforms/44x/warp.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/interrupt.h> | 16 | #include <linux/interrupt.h> |
17 | #include <linux/delay.h> | 17 | #include <linux/delay.h> |
18 | #include <linux/of_gpio.h> | 18 | #include <linux/of_gpio.h> |
19 | #include <linux/of_i2c.h> | ||
19 | 20 | ||
20 | #include <asm/machdep.h> | 21 | #include <asm/machdep.h> |
21 | #include <asm/prom.h> | 22 | #include <asm/prom.h> |
@@ -63,9 +64,6 @@ define_machine(warp) { | |||
63 | }; | 64 | }; |
64 | 65 | ||
65 | 66 | ||
66 | static u32 post_info; | ||
67 | |||
68 | /* I am not sure this is the best place for this... */ | ||
69 | static int __init warp_post_info(void) | 67 | static int __init warp_post_info(void) |
70 | { | 68 | { |
71 | struct device_node *np; | 69 | struct device_node *np; |
@@ -87,10 +85,9 @@ static int __init warp_post_info(void) | |||
87 | 85 | ||
88 | iounmap(fpga); | 86 | iounmap(fpga); |
89 | 87 | ||
90 | if (post1 || post2) { | 88 | if (post1 || post2) |
91 | printk(KERN_INFO "Warp POST %08x %08x\n", post1, post2); | 89 | printk(KERN_INFO "Warp POST %08x %08x\n", post1, post2); |
92 | post_info = 1; | 90 | else |
93 | } else | ||
94 | printk(KERN_INFO "Warp POST OK\n"); | 91 | printk(KERN_INFO "Warp POST OK\n"); |
95 | 92 | ||
96 | return 0; | 93 | return 0; |
@@ -166,6 +163,9 @@ static irqreturn_t temp_isr(int irq, void *context) | |||
166 | value ^= 1; | 163 | value ^= 1; |
167 | mdelay(500); | 164 | mdelay(500); |
168 | } | 165 | } |
166 | |||
167 | /* Not reached */ | ||
168 | return IRQ_HANDLED; | ||
169 | } | 169 | } |
170 | 170 | ||
171 | static int pika_setup_leds(void) | 171 | static int pika_setup_leds(void) |
@@ -179,24 +179,19 @@ static int pika_setup_leds(void) | |||
179 | } | 179 | } |
180 | 180 | ||
181 | for_each_child_of_node(np, child) | 181 | for_each_child_of_node(np, child) |
182 | if (strcmp(child->name, "green") == 0) { | 182 | if (strcmp(child->name, "green") == 0) |
183 | green_led = of_get_gpio(child, 0); | 183 | green_led = of_get_gpio(child, 0); |
184 | /* Turn back on the green LED */ | 184 | else if (strcmp(child->name, "red") == 0) |
185 | gpio_set_value(green_led, 1); | ||
186 | } else if (strcmp(child->name, "red") == 0) { | ||
187 | red_led = of_get_gpio(child, 0); | 185 | red_led = of_get_gpio(child, 0); |
188 | /* Set based on post */ | ||
189 | gpio_set_value(red_led, post_info); | ||
190 | } | ||
191 | 186 | ||
192 | of_node_put(np); | 187 | of_node_put(np); |
193 | 188 | ||
194 | return 0; | 189 | return 0; |
195 | } | 190 | } |
196 | 191 | ||
197 | static void pika_setup_critical_temp(struct i2c_client *client) | 192 | static void pika_setup_critical_temp(struct device_node *np, |
193 | struct i2c_client *client) | ||
198 | { | 194 | { |
199 | struct device_node *np; | ||
200 | int irq, rc; | 195 | int irq, rc; |
201 | 196 | ||
202 | /* Do this before enabling critical temp interrupt since we | 197 | /* Do this before enabling critical temp interrupt since we |
@@ -208,14 +203,7 @@ static void pika_setup_critical_temp(struct i2c_client *client) | |||
208 | i2c_smbus_write_byte_data(client, 2, 65); /* Thigh */ | 203 | i2c_smbus_write_byte_data(client, 2, 65); /* Thigh */ |
209 | i2c_smbus_write_byte_data(client, 3, 0); /* Tlow */ | 204 | i2c_smbus_write_byte_data(client, 3, 0); /* Tlow */ |
210 | 205 | ||
211 | np = of_find_compatible_node(NULL, NULL, "adi,ad7414"); | ||
212 | if (np == NULL) { | ||
213 | printk(KERN_ERR __FILE__ ": Unable to find ad7414\n"); | ||
214 | return; | ||
215 | } | ||
216 | |||
217 | irq = irq_of_parse_and_map(np, 0); | 206 | irq = irq_of_parse_and_map(np, 0); |
218 | of_node_put(np); | ||
219 | if (irq == NO_IRQ) { | 207 | if (irq == NO_IRQ) { |
220 | printk(KERN_ERR __FILE__ ": Unable to get ad7414 irq\n"); | 208 | printk(KERN_ERR __FILE__ ": Unable to get ad7414 irq\n"); |
221 | return; | 209 | return; |
@@ -244,32 +232,24 @@ static inline void pika_dtm_check_fan(void __iomem *fpga) | |||
244 | 232 | ||
245 | static int pika_dtm_thread(void __iomem *fpga) | 233 | static int pika_dtm_thread(void __iomem *fpga) |
246 | { | 234 | { |
247 | struct i2c_adapter *adap; | 235 | struct device_node *np; |
248 | struct i2c_client *client; | 236 | struct i2c_client *client; |
249 | 237 | ||
250 | /* We loop in case either driver was compiled as a module and | 238 | np = of_find_compatible_node(NULL, NULL, "adi,ad7414"); |
251 | * has not been insmoded yet. | 239 | if (np == NULL) |
252 | */ | 240 | return -ENOENT; |
253 | while (!(adap = i2c_get_adapter(0))) { | ||
254 | set_current_state(TASK_INTERRUPTIBLE); | ||
255 | schedule_timeout(HZ); | ||
256 | } | ||
257 | |||
258 | while (1) { | ||
259 | list_for_each_entry(client, &adap->clients, list) | ||
260 | if (client->addr == 0x4a) | ||
261 | goto found_it; | ||
262 | 241 | ||
263 | set_current_state(TASK_INTERRUPTIBLE); | 242 | client = of_find_i2c_device_by_node(np); |
264 | schedule_timeout(HZ); | 243 | if (client == NULL) { |
244 | of_node_put(np); | ||
245 | return -ENOENT; | ||
265 | } | 246 | } |
266 | 247 | ||
267 | found_it: | 248 | pika_setup_critical_temp(np, client); |
268 | pika_setup_critical_temp(client); | ||
269 | 249 | ||
270 | i2c_put_adapter(adap); | 250 | of_node_put(np); |
271 | 251 | ||
272 | printk(KERN_INFO "PIKA DTM thread running.\n"); | 252 | printk(KERN_INFO "Warp DTM thread running.\n"); |
273 | 253 | ||
274 | while (!kthread_should_stop()) { | 254 | while (!kthread_should_stop()) { |
275 | int val; | 255 | int val; |
@@ -291,7 +271,6 @@ found_it: | |||
291 | return 0; | 271 | return 0; |
292 | } | 272 | } |
293 | 273 | ||
294 | |||
295 | static int __init pika_dtm_start(void) | 274 | static int __init pika_dtm_start(void) |
296 | { | 275 | { |
297 | struct task_struct *dtm_thread; | 276 | struct task_struct *dtm_thread; |
diff --git a/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c b/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c index ddf0bdc0fc8b..7ee979f323d1 100644 --- a/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c +++ b/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c | |||
@@ -147,7 +147,7 @@ int __init pq2ads_pci_init_irq(void) | |||
147 | goto out; | 147 | goto out; |
148 | } | 148 | } |
149 | 149 | ||
150 | priv = alloc_bootmem(sizeof(struct pq2ads_pci_pic)); | 150 | priv = kzalloc(sizeof(*priv), GFP_KERNEL); |
151 | if (!priv) { | 151 | if (!priv) { |
152 | of_node_put(np); | 152 | of_node_put(np); |
153 | ret = -ENOMEM; | 153 | ret = -ENOMEM; |
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_mds.c b/arch/powerpc/platforms/85xx/mpc85xx_mds.c index 77f90b356356..60ed9c067b1d 100644 --- a/arch/powerpc/platforms/85xx/mpc85xx_mds.c +++ b/arch/powerpc/platforms/85xx/mpc85xx_mds.c | |||
@@ -285,6 +285,7 @@ static struct of_device_id mpc85xx_ids[] = { | |||
285 | { .type = "qe", }, | 285 | { .type = "qe", }, |
286 | { .compatible = "fsl,qe", }, | 286 | { .compatible = "fsl,qe", }, |
287 | { .compatible = "gianfar", }, | 287 | { .compatible = "gianfar", }, |
288 | { .compatible = "fsl,rapidio-delta", }, | ||
288 | {}, | 289 | {}, |
289 | }; | 290 | }; |
290 | 291 | ||
diff --git a/arch/powerpc/platforms/85xx/smp.c b/arch/powerpc/platforms/85xx/smp.c index cc0b0db8a6f3..62c592ede641 100644 --- a/arch/powerpc/platforms/85xx/smp.c +++ b/arch/powerpc/platforms/85xx/smp.c | |||
@@ -52,20 +52,19 @@ smp_85xx_kick_cpu(int nr) | |||
52 | 52 | ||
53 | pr_debug("smp_85xx_kick_cpu: kick CPU #%d\n", nr); | 53 | pr_debug("smp_85xx_kick_cpu: kick CPU #%d\n", nr); |
54 | 54 | ||
55 | local_irq_save(flags); | ||
56 | |||
57 | np = of_get_cpu_node(nr, NULL); | 55 | np = of_get_cpu_node(nr, NULL); |
58 | cpu_rel_addr = of_get_property(np, "cpu-release-addr", NULL); | 56 | cpu_rel_addr = of_get_property(np, "cpu-release-addr", NULL); |
59 | 57 | ||
60 | if (cpu_rel_addr == NULL) { | 58 | if (cpu_rel_addr == NULL) { |
61 | printk(KERN_ERR "No cpu-release-addr for cpu %d\n", nr); | 59 | printk(KERN_ERR "No cpu-release-addr for cpu %d\n", nr); |
62 | local_irq_restore(flags); | ||
63 | return; | 60 | return; |
64 | } | 61 | } |
65 | 62 | ||
66 | /* Map the spin table */ | 63 | /* Map the spin table */ |
67 | bptr_vaddr = ioremap(*cpu_rel_addr, SIZE_BOOT_ENTRY); | 64 | bptr_vaddr = ioremap(*cpu_rel_addr, SIZE_BOOT_ENTRY); |
68 | 65 | ||
66 | local_irq_save(flags); | ||
67 | |||
69 | out_be32(bptr_vaddr + BOOT_ENTRY_PIR, nr); | 68 | out_be32(bptr_vaddr + BOOT_ENTRY_PIR, nr); |
70 | out_be32(bptr_vaddr + BOOT_ENTRY_ADDR_LOWER, __pa(__early_start)); | 69 | out_be32(bptr_vaddr + BOOT_ENTRY_ADDR_LOWER, __pa(__early_start)); |
71 | 70 | ||
@@ -73,10 +72,10 @@ smp_85xx_kick_cpu(int nr) | |||
73 | while ((__secondary_hold_acknowledge != nr) && (++n < 1000)) | 72 | while ((__secondary_hold_acknowledge != nr) && (++n < 1000)) |
74 | mdelay(1); | 73 | mdelay(1); |
75 | 74 | ||
76 | iounmap(bptr_vaddr); | ||
77 | |||
78 | local_irq_restore(flags); | 75 | local_irq_restore(flags); |
79 | 76 | ||
77 | iounmap(bptr_vaddr); | ||
78 | |||
80 | pr_debug("waited %d msecs for CPU #%d.\n", n, nr); | 79 | pr_debug("waited %d msecs for CPU #%d.\n", n, nr); |
81 | } | 80 | } |
82 | 81 | ||
diff --git a/arch/powerpc/platforms/85xx/socrates.c b/arch/powerpc/platforms/85xx/socrates.c index d0e8443b12c6..747d8fb3ab82 100644 --- a/arch/powerpc/platforms/85xx/socrates.c +++ b/arch/powerpc/platforms/85xx/socrates.c | |||
@@ -102,10 +102,11 @@ static struct of_device_id __initdata socrates_of_bus_ids[] = { | |||
102 | {}, | 102 | {}, |
103 | }; | 103 | }; |
104 | 104 | ||
105 | static void __init socrates_init(void) | 105 | static int __init socrates_publish_devices(void) |
106 | { | 106 | { |
107 | of_platform_bus_probe(NULL, socrates_of_bus_ids, NULL); | 107 | return of_platform_bus_probe(NULL, socrates_of_bus_ids, NULL); |
108 | } | 108 | } |
109 | machine_device_initcall(socrates, socrates_publish_devices); | ||
109 | 110 | ||
110 | /* | 111 | /* |
111 | * Called very early, device-tree isn't unflattened | 112 | * Called very early, device-tree isn't unflattened |
@@ -124,7 +125,6 @@ define_machine(socrates) { | |||
124 | .name = "Socrates", | 125 | .name = "Socrates", |
125 | .probe = socrates_probe, | 126 | .probe = socrates_probe, |
126 | .setup_arch = socrates_setup_arch, | 127 | .setup_arch = socrates_setup_arch, |
127 | .init = socrates_init, | ||
128 | .init_IRQ = socrates_pic_init, | 128 | .init_IRQ = socrates_pic_init, |
129 | .get_irq = mpic_get_irq, | 129 | .get_irq = mpic_get_irq, |
130 | .restart = fsl_rstcr_restart, | 130 | .restart = fsl_rstcr_restart, |
diff --git a/arch/powerpc/platforms/85xx/xes_mpc85xx.c b/arch/powerpc/platforms/85xx/xes_mpc85xx.c index ee01532786e4..1b426050a2f9 100644 --- a/arch/powerpc/platforms/85xx/xes_mpc85xx.c +++ b/arch/powerpc/platforms/85xx/xes_mpc85xx.c | |||
@@ -32,7 +32,6 @@ | |||
32 | 32 | ||
33 | #include <sysdev/fsl_soc.h> | 33 | #include <sysdev/fsl_soc.h> |
34 | #include <sysdev/fsl_pci.h> | 34 | #include <sysdev/fsl_pci.h> |
35 | #include <linux/of_platform.h> | ||
36 | 35 | ||
37 | /* A few bit definitions needed for fixups on some boards */ | 36 | /* A few bit definitions needed for fixups on some boards */ |
38 | #define MPC85xx_L2CTL_L2E 0x80000000 /* L2 enable */ | 37 | #define MPC85xx_L2CTL_L2E 0x80000000 /* L2 enable */ |
diff --git a/arch/powerpc/platforms/cell/axon_msi.c b/arch/powerpc/platforms/cell/axon_msi.c index c71498dbf211..aca5741ddc67 100644 --- a/arch/powerpc/platforms/cell/axon_msi.c +++ b/arch/powerpc/platforms/cell/axon_msi.c | |||
@@ -85,7 +85,7 @@ static inline void axon_msi_debug_setup(struct device_node *dn, | |||
85 | 85 | ||
86 | static void msic_dcr_write(struct axon_msic *msic, unsigned int dcr_n, u32 val) | 86 | static void msic_dcr_write(struct axon_msic *msic, unsigned int dcr_n, u32 val) |
87 | { | 87 | { |
88 | pr_debug("axon_msi: dcr_write(0x%x, 0x%x)\n", val, dcr_n); | 88 | pr_devel("axon_msi: dcr_write(0x%x, 0x%x)\n", val, dcr_n); |
89 | 89 | ||
90 | dcr_write(msic->dcr_host, dcr_n, val); | 90 | dcr_write(msic->dcr_host, dcr_n, val); |
91 | } | 91 | } |
@@ -98,7 +98,7 @@ static void axon_msi_cascade(unsigned int irq, struct irq_desc *desc) | |||
98 | int retry = 0; | 98 | int retry = 0; |
99 | 99 | ||
100 | write_offset = dcr_read(msic->dcr_host, MSIC_WRITE_OFFSET_REG); | 100 | write_offset = dcr_read(msic->dcr_host, MSIC_WRITE_OFFSET_REG); |
101 | pr_debug("axon_msi: original write_offset 0x%x\n", write_offset); | 101 | pr_devel("axon_msi: original write_offset 0x%x\n", write_offset); |
102 | 102 | ||
103 | /* write_offset doesn't wrap properly, so we have to mask it */ | 103 | /* write_offset doesn't wrap properly, so we have to mask it */ |
104 | write_offset &= MSIC_FIFO_SIZE_MASK; | 104 | write_offset &= MSIC_FIFO_SIZE_MASK; |
@@ -108,7 +108,7 @@ static void axon_msi_cascade(unsigned int irq, struct irq_desc *desc) | |||
108 | msi = le32_to_cpu(msic->fifo_virt[idx]); | 108 | msi = le32_to_cpu(msic->fifo_virt[idx]); |
109 | msi &= 0xFFFF; | 109 | msi &= 0xFFFF; |
110 | 110 | ||
111 | pr_debug("axon_msi: woff %x roff %x msi %x\n", | 111 | pr_devel("axon_msi: woff %x roff %x msi %x\n", |
112 | write_offset, msic->read_offset, msi); | 112 | write_offset, msic->read_offset, msi); |
113 | 113 | ||
114 | if (msi < NR_IRQS && irq_map[msi].host == msic->irq_host) { | 114 | if (msi < NR_IRQS && irq_map[msi].host == msic->irq_host) { |
@@ -123,12 +123,12 @@ static void axon_msi_cascade(unsigned int irq, struct irq_desc *desc) | |||
123 | */ | 123 | */ |
124 | udelay(1); | 124 | udelay(1); |
125 | retry++; | 125 | retry++; |
126 | pr_debug("axon_msi: invalid irq 0x%x!\n", msi); | 126 | pr_devel("axon_msi: invalid irq 0x%x!\n", msi); |
127 | continue; | 127 | continue; |
128 | } | 128 | } |
129 | 129 | ||
130 | if (retry) { | 130 | if (retry) { |
131 | pr_debug("axon_msi: late irq 0x%x, retry %d\n", | 131 | pr_devel("axon_msi: late irq 0x%x, retry %d\n", |
132 | msi, retry); | 132 | msi, retry); |
133 | retry = 0; | 133 | retry = 0; |
134 | } | 134 | } |
@@ -332,7 +332,7 @@ static int axon_msi_shutdown(struct of_device *device) | |||
332 | struct axon_msic *msic = dev_get_drvdata(&device->dev); | 332 | struct axon_msic *msic = dev_get_drvdata(&device->dev); |
333 | u32 tmp; | 333 | u32 tmp; |
334 | 334 | ||
335 | pr_debug("axon_msi: disabling %s\n", | 335 | pr_devel("axon_msi: disabling %s\n", |
336 | msic->irq_host->of_node->full_name); | 336 | msic->irq_host->of_node->full_name); |
337 | tmp = dcr_read(msic->dcr_host, MSIC_CTRL_REG); | 337 | tmp = dcr_read(msic->dcr_host, MSIC_CTRL_REG); |
338 | tmp &= ~MSIC_CTRL_ENABLE & ~MSIC_CTRL_IRQ_ENABLE; | 338 | tmp &= ~MSIC_CTRL_ENABLE & ~MSIC_CTRL_IRQ_ENABLE; |
@@ -349,7 +349,7 @@ static int axon_msi_probe(struct of_device *device, | |||
349 | unsigned int virq; | 349 | unsigned int virq; |
350 | int dcr_base, dcr_len; | 350 | int dcr_base, dcr_len; |
351 | 351 | ||
352 | pr_debug("axon_msi: setting up dn %s\n", dn->full_name); | 352 | pr_devel("axon_msi: setting up dn %s\n", dn->full_name); |
353 | 353 | ||
354 | msic = kzalloc(sizeof(struct axon_msic), GFP_KERNEL); | 354 | msic = kzalloc(sizeof(struct axon_msic), GFP_KERNEL); |
355 | if (!msic) { | 355 | if (!msic) { |
@@ -403,7 +403,7 @@ static int axon_msi_probe(struct of_device *device, | |||
403 | 403 | ||
404 | set_irq_data(virq, msic); | 404 | set_irq_data(virq, msic); |
405 | set_irq_chained_handler(virq, axon_msi_cascade); | 405 | set_irq_chained_handler(virq, axon_msi_cascade); |
406 | pr_debug("axon_msi: irq 0x%x setup for axon_msi\n", virq); | 406 | pr_devel("axon_msi: irq 0x%x setup for axon_msi\n", virq); |
407 | 407 | ||
408 | /* Enable the MSIC hardware */ | 408 | /* Enable the MSIC hardware */ |
409 | msic_dcr_write(msic, MSIC_BASE_ADDR_HI_REG, msic->fifo_phys >> 32); | 409 | msic_dcr_write(msic, MSIC_BASE_ADDR_HI_REG, msic->fifo_phys >> 32); |
@@ -484,13 +484,13 @@ void axon_msi_debug_setup(struct device_node *dn, struct axon_msic *msic) | |||
484 | 484 | ||
485 | addr = of_translate_address(dn, of_get_property(dn, "reg", NULL)); | 485 | addr = of_translate_address(dn, of_get_property(dn, "reg", NULL)); |
486 | if (addr == OF_BAD_ADDR) { | 486 | if (addr == OF_BAD_ADDR) { |
487 | pr_debug("axon_msi: couldn't translate reg property\n"); | 487 | pr_devel("axon_msi: couldn't translate reg property\n"); |
488 | return; | 488 | return; |
489 | } | 489 | } |
490 | 490 | ||
491 | msic->trigger = ioremap(addr, 0x4); | 491 | msic->trigger = ioremap(addr, 0x4); |
492 | if (!msic->trigger) { | 492 | if (!msic->trigger) { |
493 | pr_debug("axon_msi: ioremap failed\n"); | 493 | pr_devel("axon_msi: ioremap failed\n"); |
494 | return; | 494 | return; |
495 | } | 495 | } |
496 | 496 | ||
@@ -498,7 +498,7 @@ void axon_msi_debug_setup(struct device_node *dn, struct axon_msic *msic) | |||
498 | 498 | ||
499 | if (!debugfs_create_file(name, 0600, powerpc_debugfs_root, | 499 | if (!debugfs_create_file(name, 0600, powerpc_debugfs_root, |
500 | msic, &fops_msic)) { | 500 | msic, &fops_msic)) { |
501 | pr_debug("axon_msi: debugfs_create_file failed!\n"); | 501 | pr_devel("axon_msi: debugfs_create_file failed!\n"); |
502 | return; | 502 | return; |
503 | } | 503 | } |
504 | } | 504 | } |
diff --git a/arch/powerpc/platforms/cell/smp.c b/arch/powerpc/platforms/cell/smp.c index 9046803c8276..bc97fada48c6 100644 --- a/arch/powerpc/platforms/cell/smp.c +++ b/arch/powerpc/platforms/cell/smp.c | |||
@@ -36,7 +36,6 @@ | |||
36 | #include <asm/prom.h> | 36 | #include <asm/prom.h> |
37 | #include <asm/smp.h> | 37 | #include <asm/smp.h> |
38 | #include <asm/paca.h> | 38 | #include <asm/paca.h> |
39 | #include <asm/time.h> | ||
40 | #include <asm/machdep.h> | 39 | #include <asm/machdep.h> |
41 | #include <asm/cputable.h> | 40 | #include <asm/cputable.h> |
42 | #include <asm/firmware.h> | 41 | #include <asm/firmware.h> |
@@ -140,31 +139,6 @@ static void __devinit smp_cell_setup_cpu(int cpu) | |||
140 | mtspr(SPRN_DABRX, DABRX_KERNEL | DABRX_USER); | 139 | mtspr(SPRN_DABRX, DABRX_KERNEL | DABRX_USER); |
141 | } | 140 | } |
142 | 141 | ||
143 | static DEFINE_SPINLOCK(timebase_lock); | ||
144 | static unsigned long timebase = 0; | ||
145 | |||
146 | static void __devinit cell_give_timebase(void) | ||
147 | { | ||
148 | spin_lock(&timebase_lock); | ||
149 | rtas_call(rtas_token("freeze-time-base"), 0, 1, NULL); | ||
150 | timebase = get_tb(); | ||
151 | spin_unlock(&timebase_lock); | ||
152 | |||
153 | while (timebase) | ||
154 | barrier(); | ||
155 | rtas_call(rtas_token("thaw-time-base"), 0, 1, NULL); | ||
156 | } | ||
157 | |||
158 | static void __devinit cell_take_timebase(void) | ||
159 | { | ||
160 | while (!timebase) | ||
161 | barrier(); | ||
162 | spin_lock(&timebase_lock); | ||
163 | set_tb(timebase >> 32, timebase & 0xffffffff); | ||
164 | timebase = 0; | ||
165 | spin_unlock(&timebase_lock); | ||
166 | } | ||
167 | |||
168 | static void __devinit smp_cell_kick_cpu(int nr) | 142 | static void __devinit smp_cell_kick_cpu(int nr) |
169 | { | 143 | { |
170 | BUG_ON(nr < 0 || nr >= NR_CPUS); | 144 | BUG_ON(nr < 0 || nr >= NR_CPUS); |
@@ -224,8 +198,8 @@ void __init smp_init_cell(void) | |||
224 | 198 | ||
225 | /* Non-lpar has additional take/give timebase */ | 199 | /* Non-lpar has additional take/give timebase */ |
226 | if (rtas_token("freeze-time-base") != RTAS_UNKNOWN_SERVICE) { | 200 | if (rtas_token("freeze-time-base") != RTAS_UNKNOWN_SERVICE) { |
227 | smp_ops->give_timebase = cell_give_timebase; | 201 | smp_ops->give_timebase = rtas_give_timebase; |
228 | smp_ops->take_timebase = cell_take_timebase; | 202 | smp_ops->take_timebase = rtas_take_timebase; |
229 | } | 203 | } |
230 | 204 | ||
231 | DBG(" <- smp_init_cell()\n"); | 205 | DBG(" <- smp_init_cell()\n"); |
diff --git a/arch/powerpc/platforms/chrp/smp.c b/arch/powerpc/platforms/chrp/smp.c index 10a4a4d063b6..02cafecc90e3 100644 --- a/arch/powerpc/platforms/chrp/smp.c +++ b/arch/powerpc/platforms/chrp/smp.c | |||
@@ -26,7 +26,6 @@ | |||
26 | #include <asm/io.h> | 26 | #include <asm/io.h> |
27 | #include <asm/prom.h> | 27 | #include <asm/prom.h> |
28 | #include <asm/smp.h> | 28 | #include <asm/smp.h> |
29 | #include <asm/time.h> | ||
30 | #include <asm/machdep.h> | 29 | #include <asm/machdep.h> |
31 | #include <asm/mpic.h> | 30 | #include <asm/mpic.h> |
32 | #include <asm/rtas.h> | 31 | #include <asm/rtas.h> |
@@ -42,40 +41,12 @@ static void __devinit smp_chrp_setup_cpu(int cpu_nr) | |||
42 | mpic_setup_this_cpu(); | 41 | mpic_setup_this_cpu(); |
43 | } | 42 | } |
44 | 43 | ||
45 | static DEFINE_SPINLOCK(timebase_lock); | ||
46 | static unsigned int timebase_upper = 0, timebase_lower = 0; | ||
47 | |||
48 | void __devinit smp_chrp_give_timebase(void) | ||
49 | { | ||
50 | spin_lock(&timebase_lock); | ||
51 | rtas_call(rtas_token("freeze-time-base"), 0, 1, NULL); | ||
52 | timebase_upper = get_tbu(); | ||
53 | timebase_lower = get_tbl(); | ||
54 | spin_unlock(&timebase_lock); | ||
55 | |||
56 | while (timebase_upper || timebase_lower) | ||
57 | barrier(); | ||
58 | rtas_call(rtas_token("thaw-time-base"), 0, 1, NULL); | ||
59 | } | ||
60 | |||
61 | void __devinit smp_chrp_take_timebase(void) | ||
62 | { | ||
63 | while (!(timebase_upper || timebase_lower)) | ||
64 | barrier(); | ||
65 | spin_lock(&timebase_lock); | ||
66 | set_tb(timebase_upper, timebase_lower); | ||
67 | timebase_upper = 0; | ||
68 | timebase_lower = 0; | ||
69 | spin_unlock(&timebase_lock); | ||
70 | printk("CPU %i taken timebase\n", smp_processor_id()); | ||
71 | } | ||
72 | |||
73 | /* CHRP with openpic */ | 44 | /* CHRP with openpic */ |
74 | struct smp_ops_t chrp_smp_ops = { | 45 | struct smp_ops_t chrp_smp_ops = { |
75 | .message_pass = smp_mpic_message_pass, | 46 | .message_pass = smp_mpic_message_pass, |
76 | .probe = smp_mpic_probe, | 47 | .probe = smp_mpic_probe, |
77 | .kick_cpu = smp_chrp_kick_cpu, | 48 | .kick_cpu = smp_chrp_kick_cpu, |
78 | .setup_cpu = smp_chrp_setup_cpu, | 49 | .setup_cpu = smp_chrp_setup_cpu, |
79 | .give_timebase = smp_chrp_give_timebase, | 50 | .give_timebase = rtas_give_timebase, |
80 | .take_timebase = smp_chrp_take_timebase, | 51 | .take_timebase = rtas_take_timebase, |
81 | }; | 52 | }; |
diff --git a/arch/powerpc/platforms/pasemi/setup.c b/arch/powerpc/platforms/pasemi/setup.c index 153051eb6d93..a4619347aa7e 100644 --- a/arch/powerpc/platforms/pasemi/setup.c +++ b/arch/powerpc/platforms/pasemi/setup.c | |||
@@ -71,20 +71,25 @@ static void pas_restart(char *cmd) | |||
71 | } | 71 | } |
72 | 72 | ||
73 | #ifdef CONFIG_SMP | 73 | #ifdef CONFIG_SMP |
74 | static DEFINE_SPINLOCK(timebase_lock); | 74 | static raw_spinlock_t timebase_lock; |
75 | static unsigned long timebase; | 75 | static unsigned long timebase; |
76 | 76 | ||
77 | static void __devinit pas_give_timebase(void) | 77 | static void __devinit pas_give_timebase(void) |
78 | { | 78 | { |
79 | spin_lock(&timebase_lock); | 79 | unsigned long flags; |
80 | |||
81 | local_irq_save(flags); | ||
82 | hard_irq_disable(); | ||
83 | __raw_spin_lock(&timebase_lock); | ||
80 | mtspr(SPRN_TBCTL, TBCTL_FREEZE); | 84 | mtspr(SPRN_TBCTL, TBCTL_FREEZE); |
81 | isync(); | 85 | isync(); |
82 | timebase = get_tb(); | 86 | timebase = get_tb(); |
83 | spin_unlock(&timebase_lock); | 87 | __raw_spin_unlock(&timebase_lock); |
84 | 88 | ||
85 | while (timebase) | 89 | while (timebase) |
86 | barrier(); | 90 | barrier(); |
87 | mtspr(SPRN_TBCTL, TBCTL_RESTART); | 91 | mtspr(SPRN_TBCTL, TBCTL_RESTART); |
92 | local_irq_restore(flags); | ||
88 | } | 93 | } |
89 | 94 | ||
90 | static void __devinit pas_take_timebase(void) | 95 | static void __devinit pas_take_timebase(void) |
@@ -92,10 +97,10 @@ static void __devinit pas_take_timebase(void) | |||
92 | while (!timebase) | 97 | while (!timebase) |
93 | smp_rmb(); | 98 | smp_rmb(); |
94 | 99 | ||
95 | spin_lock(&timebase_lock); | 100 | __raw_spin_lock(&timebase_lock); |
96 | set_tb(timebase >> 32, timebase & 0xffffffff); | 101 | set_tb(timebase >> 32, timebase & 0xffffffff); |
97 | timebase = 0; | 102 | timebase = 0; |
98 | spin_unlock(&timebase_lock); | 103 | __raw_spin_unlock(&timebase_lock); |
99 | } | 104 | } |
100 | 105 | ||
101 | struct smp_ops_t pas_smp_ops = { | 106 | struct smp_ops_t pas_smp_ops = { |
diff --git a/arch/powerpc/platforms/powermac/cpufreq_64.c b/arch/powerpc/platforms/powermac/cpufreq_64.c index 22ecfbe7183d..708c75133377 100644 --- a/arch/powerpc/platforms/powermac/cpufreq_64.c +++ b/arch/powerpc/platforms/powermac/cpufreq_64.c | |||
@@ -251,7 +251,7 @@ static void g5_pfunc_switch_volt(int speed_mode) | |||
251 | static struct pmf_function *pfunc_cpu_setfreq_high; | 251 | static struct pmf_function *pfunc_cpu_setfreq_high; |
252 | static struct pmf_function *pfunc_cpu_setfreq_low; | 252 | static struct pmf_function *pfunc_cpu_setfreq_low; |
253 | static struct pmf_function *pfunc_cpu_getfreq; | 253 | static struct pmf_function *pfunc_cpu_getfreq; |
254 | static struct pmf_function *pfunc_slewing_done;; | 254 | static struct pmf_function *pfunc_slewing_done; |
255 | 255 | ||
256 | static int g5_pfunc_switch_freq(int speed_mode) | 256 | static int g5_pfunc_switch_freq(int speed_mode) |
257 | { | 257 | { |
diff --git a/arch/powerpc/platforms/powermac/pic.c b/arch/powerpc/platforms/powermac/pic.c index dce736349107..d212006a5b3c 100644 --- a/arch/powerpc/platforms/powermac/pic.c +++ b/arch/powerpc/platforms/powermac/pic.c | |||
@@ -609,7 +609,7 @@ static int pmacpic_find_viaint(void) | |||
609 | np = of_find_node_by_name(NULL, "via-pmu"); | 609 | np = of_find_node_by_name(NULL, "via-pmu"); |
610 | if (np == NULL) | 610 | if (np == NULL) |
611 | goto not_found; | 611 | goto not_found; |
612 | viaint = irq_of_parse_and_map(np, 0);; | 612 | viaint = irq_of_parse_and_map(np, 0); |
613 | 613 | ||
614 | not_found: | 614 | not_found: |
615 | #endif /* CONFIG_ADB_PMU */ | 615 | #endif /* CONFIG_ADB_PMU */ |
diff --git a/arch/powerpc/platforms/powermac/setup.c b/arch/powerpc/platforms/powermac/setup.c index 86f69a4eb49b..c20522656367 100644 --- a/arch/powerpc/platforms/powermac/setup.c +++ b/arch/powerpc/platforms/powermac/setup.c | |||
@@ -103,11 +103,6 @@ unsigned long smu_cmdbuf_abs; | |||
103 | EXPORT_SYMBOL(smu_cmdbuf_abs); | 103 | EXPORT_SYMBOL(smu_cmdbuf_abs); |
104 | #endif | 104 | #endif |
105 | 105 | ||
106 | #ifdef CONFIG_SMP | ||
107 | extern struct smp_ops_t psurge_smp_ops; | ||
108 | extern struct smp_ops_t core99_smp_ops; | ||
109 | #endif /* CONFIG_SMP */ | ||
110 | |||
111 | static void pmac_show_cpuinfo(struct seq_file *m) | 106 | static void pmac_show_cpuinfo(struct seq_file *m) |
112 | { | 107 | { |
113 | struct device_node *np; | 108 | struct device_node *np; |
@@ -341,34 +336,6 @@ static void __init pmac_setup_arch(void) | |||
341 | ROOT_DEV = DEFAULT_ROOT_DEVICE; | 336 | ROOT_DEV = DEFAULT_ROOT_DEVICE; |
342 | #endif | 337 | #endif |
343 | 338 | ||
344 | #ifdef CONFIG_SMP | ||
345 | /* Check for Core99 */ | ||
346 | ic = of_find_node_by_name(NULL, "uni-n"); | ||
347 | if (!ic) | ||
348 | ic = of_find_node_by_name(NULL, "u3"); | ||
349 | if (!ic) | ||
350 | ic = of_find_node_by_name(NULL, "u4"); | ||
351 | if (ic) { | ||
352 | of_node_put(ic); | ||
353 | smp_ops = &core99_smp_ops; | ||
354 | } | ||
355 | #ifdef CONFIG_PPC32 | ||
356 | else { | ||
357 | /* | ||
358 | * We have to set bits in cpu_possible_map here since the | ||
359 | * secondary CPU(s) aren't in the device tree, and | ||
360 | * setup_per_cpu_areas only allocates per-cpu data for | ||
361 | * CPUs in the cpu_possible_map. | ||
362 | */ | ||
363 | int cpu; | ||
364 | |||
365 | for (cpu = 1; cpu < 4 && cpu < NR_CPUS; ++cpu) | ||
366 | cpu_set(cpu, cpu_possible_map); | ||
367 | smp_ops = &psurge_smp_ops; | ||
368 | } | ||
369 | #endif | ||
370 | #endif /* CONFIG_SMP */ | ||
371 | |||
372 | #ifdef CONFIG_ADB | 339 | #ifdef CONFIG_ADB |
373 | if (strstr(cmd_line, "adb_sync")) { | 340 | if (strstr(cmd_line, "adb_sync")) { |
374 | extern int __adb_probe_sync; | 341 | extern int __adb_probe_sync; |
@@ -512,6 +479,14 @@ static void __init pmac_init_early(void) | |||
512 | #ifdef CONFIG_PPC64 | 479 | #ifdef CONFIG_PPC64 |
513 | iommu_init_early_dart(); | 480 | iommu_init_early_dart(); |
514 | #endif | 481 | #endif |
482 | |||
483 | /* SMP Init has to be done early as we need to patch up | ||
484 | * cpu_possible_map before interrupt stacks are allocated | ||
485 | * or kaboom... | ||
486 | */ | ||
487 | #ifdef CONFIG_SMP | ||
488 | pmac_setup_smp(); | ||
489 | #endif | ||
515 | } | 490 | } |
516 | 491 | ||
517 | static int __init pmac_declare_of_platform_devices(void) | 492 | static int __init pmac_declare_of_platform_devices(void) |
diff --git a/arch/powerpc/platforms/powermac/smp.c b/arch/powerpc/platforms/powermac/smp.c index cf1dbe758890..6d4da7b46b41 100644 --- a/arch/powerpc/platforms/powermac/smp.c +++ b/arch/powerpc/platforms/powermac/smp.c | |||
@@ -64,10 +64,11 @@ | |||
64 | extern void __secondary_start_pmac_0(void); | 64 | extern void __secondary_start_pmac_0(void); |
65 | extern int pmac_pfunc_base_install(void); | 65 | extern int pmac_pfunc_base_install(void); |
66 | 66 | ||
67 | #ifdef CONFIG_PPC32 | 67 | static void (*pmac_tb_freeze)(int freeze); |
68 | static u64 timebase; | ||
69 | static int tb_req; | ||
68 | 70 | ||
69 | /* Sync flag for HW tb sync */ | 71 | #ifdef CONFIG_PPC32 |
70 | static volatile int sec_tb_reset = 0; | ||
71 | 72 | ||
72 | /* | 73 | /* |
73 | * Powersurge (old powermac SMP) support. | 74 | * Powersurge (old powermac SMP) support. |
@@ -294,6 +295,9 @@ static int __init smp_psurge_probe(void) | |||
294 | psurge_quad_init(); | 295 | psurge_quad_init(); |
295 | /* All released cards using this HW design have 4 CPUs */ | 296 | /* All released cards using this HW design have 4 CPUs */ |
296 | ncpus = 4; | 297 | ncpus = 4; |
298 | /* No sure how timebase sync works on those, let's use SW */ | ||
299 | smp_ops->give_timebase = smp_generic_give_timebase; | ||
300 | smp_ops->take_timebase = smp_generic_take_timebase; | ||
297 | } else { | 301 | } else { |
298 | iounmap(quad_base); | 302 | iounmap(quad_base); |
299 | if ((in_8(hhead_base + HHEAD_CONFIG) & 0x02) == 0) { | 303 | if ((in_8(hhead_base + HHEAD_CONFIG) & 0x02) == 0) { |
@@ -308,18 +312,15 @@ static int __init smp_psurge_probe(void) | |||
308 | psurge_start = ioremap(PSURGE_START, 4); | 312 | psurge_start = ioremap(PSURGE_START, 4); |
309 | psurge_pri_intr = ioremap(PSURGE_PRI_INTR, 4); | 313 | psurge_pri_intr = ioremap(PSURGE_PRI_INTR, 4); |
310 | 314 | ||
311 | /* | 315 | /* This is necessary because OF doesn't know about the |
312 | * This is necessary because OF doesn't know about the | ||
313 | * secondary cpu(s), and thus there aren't nodes in the | 316 | * secondary cpu(s), and thus there aren't nodes in the |
314 | * device tree for them, and smp_setup_cpu_maps hasn't | 317 | * device tree for them, and smp_setup_cpu_maps hasn't |
315 | * set their bits in cpu_possible_map and cpu_present_map. | 318 | * set their bits in cpu_present_map. |
316 | */ | 319 | */ |
317 | if (ncpus > NR_CPUS) | 320 | if (ncpus > NR_CPUS) |
318 | ncpus = NR_CPUS; | 321 | ncpus = NR_CPUS; |
319 | for (i = 1; i < ncpus ; ++i) { | 322 | for (i = 1; i < ncpus ; ++i) |
320 | cpu_set(i, cpu_present_map); | 323 | cpu_set(i, cpu_present_map); |
321 | set_hard_smp_processor_id(i, i); | ||
322 | } | ||
323 | 324 | ||
324 | if (ppc_md.progress) ppc_md.progress("smp_psurge_probe - done", 0x352); | 325 | if (ppc_md.progress) ppc_md.progress("smp_psurge_probe - done", 0x352); |
325 | 326 | ||
@@ -329,8 +330,14 @@ static int __init smp_psurge_probe(void) | |||
329 | static void __init smp_psurge_kick_cpu(int nr) | 330 | static void __init smp_psurge_kick_cpu(int nr) |
330 | { | 331 | { |
331 | unsigned long start = __pa(__secondary_start_pmac_0) + nr * 8; | 332 | unsigned long start = __pa(__secondary_start_pmac_0) + nr * 8; |
332 | unsigned long a; | 333 | unsigned long a, flags; |
333 | int i; | 334 | int i, j; |
335 | |||
336 | /* Defining this here is evil ... but I prefer hiding that | ||
337 | * crap to avoid giving people ideas that they can do the | ||
338 | * same. | ||
339 | */ | ||
340 | extern volatile unsigned int cpu_callin_map[NR_CPUS]; | ||
334 | 341 | ||
335 | /* may need to flush here if secondary bats aren't setup */ | 342 | /* may need to flush here if secondary bats aren't setup */ |
336 | for (a = KERNELBASE; a < KERNELBASE + 0x800000; a += 32) | 343 | for (a = KERNELBASE; a < KERNELBASE + 0x800000; a += 32) |
@@ -339,47 +346,52 @@ static void __init smp_psurge_kick_cpu(int nr) | |||
339 | 346 | ||
340 | if (ppc_md.progress) ppc_md.progress("smp_psurge_kick_cpu", 0x353); | 347 | if (ppc_md.progress) ppc_md.progress("smp_psurge_kick_cpu", 0x353); |
341 | 348 | ||
349 | /* This is going to freeze the timeebase, we disable interrupts */ | ||
350 | local_irq_save(flags); | ||
351 | |||
342 | out_be32(psurge_start, start); | 352 | out_be32(psurge_start, start); |
343 | mb(); | 353 | mb(); |
344 | 354 | ||
345 | psurge_set_ipi(nr); | 355 | psurge_set_ipi(nr); |
356 | |||
346 | /* | 357 | /* |
347 | * We can't use udelay here because the timebase is now frozen. | 358 | * We can't use udelay here because the timebase is now frozen. |
348 | */ | 359 | */ |
349 | for (i = 0; i < 2000; ++i) | 360 | for (i = 0; i < 2000; ++i) |
350 | barrier(); | 361 | asm volatile("nop" : : : "memory"); |
351 | psurge_clr_ipi(nr); | 362 | psurge_clr_ipi(nr); |
352 | 363 | ||
353 | if (ppc_md.progress) ppc_md.progress("smp_psurge_kick_cpu - done", 0x354); | 364 | /* |
354 | } | 365 | * Also, because the timebase is frozen, we must not return to the |
355 | 366 | * caller which will try to do udelay's etc... Instead, we wait -here- | |
356 | /* | 367 | * for the CPU to callin. |
357 | * With the dual-cpu powersurge board, the decrementers and timebases | 368 | */ |
358 | * of both cpus are frozen after the secondary cpu is started up, | 369 | for (i = 0; i < 100000 && !cpu_callin_map[nr]; ++i) { |
359 | * until we give the secondary cpu another interrupt. This routine | 370 | for (j = 1; j < 10000; j++) |
360 | * uses this to get the timebases synchronized. | 371 | asm volatile("nop" : : : "memory"); |
361 | * -- paulus. | 372 | asm volatile("sync" : : : "memory"); |
362 | */ | 373 | } |
363 | static void __init psurge_dual_sync_tb(int cpu_nr) | 374 | if (!cpu_callin_map[nr]) |
364 | { | 375 | goto stuck; |
365 | int t; | 376 | |
366 | 377 | /* And we do the TB sync here too for standard dual CPU cards */ | |
367 | set_dec(tb_ticks_per_jiffy); | 378 | if (psurge_type == PSURGE_DUAL) { |
368 | /* XXX fixme */ | 379 | while(!tb_req) |
369 | set_tb(0, 0); | 380 | barrier(); |
370 | 381 | tb_req = 0; | |
371 | if (cpu_nr > 0) { | 382 | mb(); |
383 | timebase = get_tb(); | ||
384 | mb(); | ||
385 | while (timebase) | ||
386 | barrier(); | ||
372 | mb(); | 387 | mb(); |
373 | sec_tb_reset = 1; | ||
374 | return; | ||
375 | } | 388 | } |
389 | stuck: | ||
390 | /* now interrupt the secondary, restarting both TBs */ | ||
391 | if (psurge_type == PSURGE_DUAL) | ||
392 | psurge_set_ipi(1); | ||
376 | 393 | ||
377 | /* wait for the secondary to have reset its TB before proceeding */ | 394 | if (ppc_md.progress) ppc_md.progress("smp_psurge_kick_cpu - done", 0x354); |
378 | for (t = 10000000; t > 0 && !sec_tb_reset; --t) | ||
379 | ; | ||
380 | |||
381 | /* now interrupt the secondary, starting both TBs */ | ||
382 | psurge_set_ipi(1); | ||
383 | } | 395 | } |
384 | 396 | ||
385 | static struct irqaction psurge_irqaction = { | 397 | static struct irqaction psurge_irqaction = { |
@@ -390,36 +402,35 @@ static struct irqaction psurge_irqaction = { | |||
390 | 402 | ||
391 | static void __init smp_psurge_setup_cpu(int cpu_nr) | 403 | static void __init smp_psurge_setup_cpu(int cpu_nr) |
392 | { | 404 | { |
405 | if (cpu_nr != 0) | ||
406 | return; | ||
393 | 407 | ||
394 | if (cpu_nr == 0) { | 408 | /* reset the entry point so if we get another intr we won't |
395 | /* If we failed to start the second CPU, we should still | 409 | * try to startup again */ |
396 | * send it an IPI to start the timebase & DEC or we might | 410 | out_be32(psurge_start, 0x100); |
397 | * have them stuck. | 411 | if (setup_irq(30, &psurge_irqaction)) |
398 | */ | 412 | printk(KERN_ERR "Couldn't get primary IPI interrupt"); |
399 | if (num_online_cpus() < 2) { | ||
400 | if (psurge_type == PSURGE_DUAL) | ||
401 | psurge_set_ipi(1); | ||
402 | return; | ||
403 | } | ||
404 | /* reset the entry point so if we get another intr we won't | ||
405 | * try to startup again */ | ||
406 | out_be32(psurge_start, 0x100); | ||
407 | if (setup_irq(30, &psurge_irqaction)) | ||
408 | printk(KERN_ERR "Couldn't get primary IPI interrupt"); | ||
409 | } | ||
410 | |||
411 | if (psurge_type == PSURGE_DUAL) | ||
412 | psurge_dual_sync_tb(cpu_nr); | ||
413 | } | 413 | } |
414 | 414 | ||
415 | void __init smp_psurge_take_timebase(void) | 415 | void __init smp_psurge_take_timebase(void) |
416 | { | 416 | { |
417 | /* Dummy implementation */ | 417 | if (psurge_type != PSURGE_DUAL) |
418 | return; | ||
419 | |||
420 | tb_req = 1; | ||
421 | mb(); | ||
422 | while (!timebase) | ||
423 | barrier(); | ||
424 | mb(); | ||
425 | set_tb(timebase >> 32, timebase & 0xffffffff); | ||
426 | timebase = 0; | ||
427 | mb(); | ||
428 | set_dec(tb_ticks_per_jiffy/2); | ||
418 | } | 429 | } |
419 | 430 | ||
420 | void __init smp_psurge_give_timebase(void) | 431 | void __init smp_psurge_give_timebase(void) |
421 | { | 432 | { |
422 | /* Dummy implementation */ | 433 | /* Nothing to do here */ |
423 | } | 434 | } |
424 | 435 | ||
425 | /* PowerSurge-style Macs */ | 436 | /* PowerSurge-style Macs */ |
@@ -437,9 +448,6 @@ struct smp_ops_t psurge_smp_ops = { | |||
437 | * Core 99 and later support | 448 | * Core 99 and later support |
438 | */ | 449 | */ |
439 | 450 | ||
440 | static void (*pmac_tb_freeze)(int freeze); | ||
441 | static u64 timebase; | ||
442 | static int tb_req; | ||
443 | 451 | ||
444 | static void smp_core99_give_timebase(void) | 452 | static void smp_core99_give_timebase(void) |
445 | { | 453 | { |
@@ -478,7 +486,6 @@ static void __devinit smp_core99_take_timebase(void) | |||
478 | set_tb(timebase >> 32, timebase & 0xffffffff); | 486 | set_tb(timebase >> 32, timebase & 0xffffffff); |
479 | timebase = 0; | 487 | timebase = 0; |
480 | mb(); | 488 | mb(); |
481 | set_dec(tb_ticks_per_jiffy/2); | ||
482 | 489 | ||
483 | local_irq_restore(flags); | 490 | local_irq_restore(flags); |
484 | } | 491 | } |
@@ -920,3 +927,34 @@ struct smp_ops_t core99_smp_ops = { | |||
920 | # endif | 927 | # endif |
921 | #endif | 928 | #endif |
922 | }; | 929 | }; |
930 | |||
931 | void __init pmac_setup_smp(void) | ||
932 | { | ||
933 | struct device_node *np; | ||
934 | |||
935 | /* Check for Core99 */ | ||
936 | np = of_find_node_by_name(NULL, "uni-n"); | ||
937 | if (!np) | ||
938 | np = of_find_node_by_name(NULL, "u3"); | ||
939 | if (!np) | ||
940 | np = of_find_node_by_name(NULL, "u4"); | ||
941 | if (np) { | ||
942 | of_node_put(np); | ||
943 | smp_ops = &core99_smp_ops; | ||
944 | } | ||
945 | #ifdef CONFIG_PPC32 | ||
946 | else { | ||
947 | /* We have to set bits in cpu_possible_map here since the | ||
948 | * secondary CPU(s) aren't in the device tree. Various | ||
949 | * things won't be initialized for CPUs not in the possible | ||
950 | * map, so we really need to fix it up here. | ||
951 | */ | ||
952 | int cpu; | ||
953 | |||
954 | for (cpu = 1; cpu < 4 && cpu < NR_CPUS; ++cpu) | ||
955 | cpu_set(cpu, cpu_possible_map); | ||
956 | smp_ops = &psurge_smp_ops; | ||
957 | } | ||
958 | #endif /* CONFIG_PPC32 */ | ||
959 | } | ||
960 | |||
diff --git a/arch/powerpc/platforms/ps3/system-bus.c b/arch/powerpc/platforms/ps3/system-bus.c index 9fead0faf38b..3f763c5284ac 100644 --- a/arch/powerpc/platforms/ps3/system-bus.c +++ b/arch/powerpc/platforms/ps3/system-bus.c | |||
@@ -284,7 +284,6 @@ static int ps3_sb_free_mmio_region(struct ps3_mmio_region *r) | |||
284 | int result; | 284 | int result; |
285 | 285 | ||
286 | dump_mmio_region(r); | 286 | dump_mmio_region(r); |
287 | ; | ||
288 | result = lv1_unmap_device_mmio_region(r->dev->bus_id, r->dev->dev_id, | 287 | result = lv1_unmap_device_mmio_region(r->dev->bus_id, r->dev->dev_id, |
289 | r->lpar_addr); | 288 | r->lpar_addr); |
290 | 289 | ||
diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c index e3139fa5e556..903eb9eec687 100644 --- a/arch/powerpc/platforms/pseries/lpar.c +++ b/arch/powerpc/platforms/pseries/lpar.c | |||
@@ -286,7 +286,7 @@ static long pSeries_lpar_hpte_insert(unsigned long hpte_group, | |||
286 | unsigned long hpte_v, hpte_r; | 286 | unsigned long hpte_v, hpte_r; |
287 | 287 | ||
288 | if (!(vflags & HPTE_V_BOLTED)) | 288 | if (!(vflags & HPTE_V_BOLTED)) |
289 | pr_debug("hpte_insert(group=%lx, va=%016lx, pa=%016lx, " | 289 | pr_devel("hpte_insert(group=%lx, va=%016lx, pa=%016lx, " |
290 | "rflags=%lx, vflags=%lx, psize=%d)\n", | 290 | "rflags=%lx, vflags=%lx, psize=%d)\n", |
291 | hpte_group, va, pa, rflags, vflags, psize); | 291 | hpte_group, va, pa, rflags, vflags, psize); |
292 | 292 | ||
@@ -294,7 +294,7 @@ static long pSeries_lpar_hpte_insert(unsigned long hpte_group, | |||
294 | hpte_r = hpte_encode_r(pa, psize) | rflags; | 294 | hpte_r = hpte_encode_r(pa, psize) | rflags; |
295 | 295 | ||
296 | if (!(vflags & HPTE_V_BOLTED)) | 296 | if (!(vflags & HPTE_V_BOLTED)) |
297 | pr_debug(" hpte_v=%016lx, hpte_r=%016lx\n", hpte_v, hpte_r); | 297 | pr_devel(" hpte_v=%016lx, hpte_r=%016lx\n", hpte_v, hpte_r); |
298 | 298 | ||
299 | /* Now fill in the actual HPTE */ | 299 | /* Now fill in the actual HPTE */ |
300 | /* Set CEC cookie to 0 */ | 300 | /* Set CEC cookie to 0 */ |
@@ -311,7 +311,7 @@ static long pSeries_lpar_hpte_insert(unsigned long hpte_group, | |||
311 | lpar_rc = plpar_pte_enter(flags, hpte_group, hpte_v, hpte_r, &slot); | 311 | lpar_rc = plpar_pte_enter(flags, hpte_group, hpte_v, hpte_r, &slot); |
312 | if (unlikely(lpar_rc == H_PTEG_FULL)) { | 312 | if (unlikely(lpar_rc == H_PTEG_FULL)) { |
313 | if (!(vflags & HPTE_V_BOLTED)) | 313 | if (!(vflags & HPTE_V_BOLTED)) |
314 | pr_debug(" full\n"); | 314 | pr_devel(" full\n"); |
315 | return -1; | 315 | return -1; |
316 | } | 316 | } |
317 | 317 | ||
@@ -322,11 +322,11 @@ static long pSeries_lpar_hpte_insert(unsigned long hpte_group, | |||
322 | */ | 322 | */ |
323 | if (unlikely(lpar_rc != H_SUCCESS)) { | 323 | if (unlikely(lpar_rc != H_SUCCESS)) { |
324 | if (!(vflags & HPTE_V_BOLTED)) | 324 | if (!(vflags & HPTE_V_BOLTED)) |
325 | pr_debug(" lpar err %lu\n", lpar_rc); | 325 | pr_devel(" lpar err %lu\n", lpar_rc); |
326 | return -2; | 326 | return -2; |
327 | } | 327 | } |
328 | if (!(vflags & HPTE_V_BOLTED)) | 328 | if (!(vflags & HPTE_V_BOLTED)) |
329 | pr_debug(" -> slot: %lu\n", slot & 7); | 329 | pr_devel(" -> slot: %lu\n", slot & 7); |
330 | 330 | ||
331 | /* Because of iSeries, we have to pass down the secondary | 331 | /* Because of iSeries, we have to pass down the secondary |
332 | * bucket bit here as well | 332 | * bucket bit here as well |
@@ -418,17 +418,17 @@ static long pSeries_lpar_hpte_updatepp(unsigned long slot, | |||
418 | 418 | ||
419 | want_v = hpte_encode_avpn(va, psize, ssize); | 419 | want_v = hpte_encode_avpn(va, psize, ssize); |
420 | 420 | ||
421 | pr_debug(" update: avpnv=%016lx, hash=%016lx, f=%lx, psize: %d ...", | 421 | pr_devel(" update: avpnv=%016lx, hash=%016lx, f=%lx, psize: %d ...", |
422 | want_v, slot, flags, psize); | 422 | want_v, slot, flags, psize); |
423 | 423 | ||
424 | lpar_rc = plpar_pte_protect(flags, slot, want_v); | 424 | lpar_rc = plpar_pte_protect(flags, slot, want_v); |
425 | 425 | ||
426 | if (lpar_rc == H_NOT_FOUND) { | 426 | if (lpar_rc == H_NOT_FOUND) { |
427 | pr_debug("not found !\n"); | 427 | pr_devel("not found !\n"); |
428 | return -1; | 428 | return -1; |
429 | } | 429 | } |
430 | 430 | ||
431 | pr_debug("ok\n"); | 431 | pr_devel("ok\n"); |
432 | 432 | ||
433 | BUG_ON(lpar_rc != H_SUCCESS); | 433 | BUG_ON(lpar_rc != H_SUCCESS); |
434 | 434 | ||
@@ -503,7 +503,7 @@ static void pSeries_lpar_hpte_invalidate(unsigned long slot, unsigned long va, | |||
503 | unsigned long lpar_rc; | 503 | unsigned long lpar_rc; |
504 | unsigned long dummy1, dummy2; | 504 | unsigned long dummy1, dummy2; |
505 | 505 | ||
506 | pr_debug(" inval : slot=%lx, va=%016lx, psize: %d, local: %d\n", | 506 | pr_devel(" inval : slot=%lx, va=%016lx, psize: %d, local: %d\n", |
507 | slot, va, psize, local); | 507 | slot, va, psize, local); |
508 | 508 | ||
509 | want_v = hpte_encode_avpn(va, psize, ssize); | 509 | want_v = hpte_encode_avpn(va, psize, ssize); |
diff --git a/arch/powerpc/platforms/pseries/smp.c b/arch/powerpc/platforms/pseries/smp.c index 1a231c389ba0..1f8f6cfb94f7 100644 --- a/arch/powerpc/platforms/pseries/smp.c +++ b/arch/powerpc/platforms/pseries/smp.c | |||
@@ -35,7 +35,6 @@ | |||
35 | #include <asm/prom.h> | 35 | #include <asm/prom.h> |
36 | #include <asm/smp.h> | 36 | #include <asm/smp.h> |
37 | #include <asm/paca.h> | 37 | #include <asm/paca.h> |
38 | #include <asm/time.h> | ||
39 | #include <asm/machdep.h> | 38 | #include <asm/machdep.h> |
40 | #include <asm/cputable.h> | 39 | #include <asm/cputable.h> |
41 | #include <asm/firmware.h> | 40 | #include <asm/firmware.h> |
@@ -118,31 +117,6 @@ static void __devinit smp_xics_setup_cpu(int cpu) | |||
118 | } | 117 | } |
119 | #endif /* CONFIG_XICS */ | 118 | #endif /* CONFIG_XICS */ |
120 | 119 | ||
121 | static DEFINE_SPINLOCK(timebase_lock); | ||
122 | static unsigned long timebase = 0; | ||
123 | |||
124 | static void __devinit pSeries_give_timebase(void) | ||
125 | { | ||
126 | spin_lock(&timebase_lock); | ||
127 | rtas_call(rtas_token("freeze-time-base"), 0, 1, NULL); | ||
128 | timebase = get_tb(); | ||
129 | spin_unlock(&timebase_lock); | ||
130 | |||
131 | while (timebase) | ||
132 | barrier(); | ||
133 | rtas_call(rtas_token("thaw-time-base"), 0, 1, NULL); | ||
134 | } | ||
135 | |||
136 | static void __devinit pSeries_take_timebase(void) | ||
137 | { | ||
138 | while (!timebase) | ||
139 | barrier(); | ||
140 | spin_lock(&timebase_lock); | ||
141 | set_tb(timebase >> 32, timebase & 0xffffffff); | ||
142 | timebase = 0; | ||
143 | spin_unlock(&timebase_lock); | ||
144 | } | ||
145 | |||
146 | static void __devinit smp_pSeries_kick_cpu(int nr) | 120 | static void __devinit smp_pSeries_kick_cpu(int nr) |
147 | { | 121 | { |
148 | BUG_ON(nr < 0 || nr >= NR_CPUS); | 122 | BUG_ON(nr < 0 || nr >= NR_CPUS); |
@@ -209,8 +183,8 @@ static void __init smp_init_pseries(void) | |||
209 | 183 | ||
210 | /* Non-lpar has additional take/give timebase */ | 184 | /* Non-lpar has additional take/give timebase */ |
211 | if (rtas_token("freeze-time-base") != RTAS_UNKNOWN_SERVICE) { | 185 | if (rtas_token("freeze-time-base") != RTAS_UNKNOWN_SERVICE) { |
212 | smp_ops->give_timebase = pSeries_give_timebase; | 186 | smp_ops->give_timebase = rtas_give_timebase; |
213 | smp_ops->take_timebase = pSeries_take_timebase; | 187 | smp_ops->take_timebase = rtas_take_timebase; |
214 | } | 188 | } |
215 | 189 | ||
216 | pr_debug(" <- smp_init_pSeries()\n"); | 190 | pr_debug(" <- smp_init_pSeries()\n"); |
diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c index be3581a8c294..419f8a637ffe 100644 --- a/arch/powerpc/platforms/pseries/xics.c +++ b/arch/powerpc/platforms/pseries/xics.c | |||
@@ -190,10 +190,10 @@ static void xics_unmask_irq(unsigned int virq) | |||
190 | int call_status; | 190 | int call_status; |
191 | int server; | 191 | int server; |
192 | 192 | ||
193 | pr_debug("xics: unmask virq %d\n", virq); | 193 | pr_devel("xics: unmask virq %d\n", virq); |
194 | 194 | ||
195 | irq = (unsigned int)irq_map[virq].hwirq; | 195 | irq = (unsigned int)irq_map[virq].hwirq; |
196 | pr_debug(" -> map to hwirq 0x%x\n", irq); | 196 | pr_devel(" -> map to hwirq 0x%x\n", irq); |
197 | if (irq == XICS_IPI || irq == XICS_IRQ_SPURIOUS) | 197 | if (irq == XICS_IPI || irq == XICS_IRQ_SPURIOUS) |
198 | return; | 198 | return; |
199 | 199 | ||
@@ -252,7 +252,7 @@ static void xics_mask_irq(unsigned int virq) | |||
252 | { | 252 | { |
253 | unsigned int irq; | 253 | unsigned int irq; |
254 | 254 | ||
255 | pr_debug("xics: mask virq %d\n", virq); | 255 | pr_devel("xics: mask virq %d\n", virq); |
256 | 256 | ||
257 | irq = (unsigned int)irq_map[virq].hwirq; | 257 | irq = (unsigned int)irq_map[virq].hwirq; |
258 | if (irq == XICS_IPI || irq == XICS_IRQ_SPURIOUS) | 258 | if (irq == XICS_IPI || irq == XICS_IRQ_SPURIOUS) |
@@ -414,7 +414,7 @@ static int xics_host_match(struct irq_host *h, struct device_node *node) | |||
414 | static int xics_host_map(struct irq_host *h, unsigned int virq, | 414 | static int xics_host_map(struct irq_host *h, unsigned int virq, |
415 | irq_hw_number_t hw) | 415 | irq_hw_number_t hw) |
416 | { | 416 | { |
417 | pr_debug("xics: map virq %d, hwirq 0x%lx\n", virq, hw); | 417 | pr_devel("xics: map virq %d, hwirq 0x%lx\n", virq, hw); |
418 | 418 | ||
419 | /* Insert the interrupt mapping into the radix tree for fast lookup */ | 419 | /* Insert the interrupt mapping into the radix tree for fast lookup */ |
420 | irq_radix_revmap_insert(xics_host, virq, hw); | 420 | irq_radix_revmap_insert(xics_host, virq, hw); |
diff --git a/arch/powerpc/sysdev/fsl_rio.c b/arch/powerpc/sysdev/fsl_rio.c index 39db9d1155d2..cbb3bed75d3c 100644 --- a/arch/powerpc/sysdev/fsl_rio.c +++ b/arch/powerpc/sysdev/fsl_rio.c | |||
@@ -965,7 +965,7 @@ static inline void fsl_rio_info(struct device *dev, u32 ccsr) | |||
965 | break; | 965 | break; |
966 | default: | 966 | default: |
967 | str = "Unknown"; | 967 | str = "Unknown"; |
968 | break;; | 968 | break; |
969 | } | 969 | } |
970 | dev_info(dev, "Hardware port width: %s\n", str); | 970 | dev_info(dev, "Hardware port width: %s\n", str); |
971 | 971 | ||
diff --git a/arch/powerpc/sysdev/ipic.c b/arch/powerpc/sysdev/ipic.c index a86d3ce01ead..69e2630c9062 100644 --- a/arch/powerpc/sysdev/ipic.c +++ b/arch/powerpc/sysdev/ipic.c | |||
@@ -728,12 +728,10 @@ struct ipic * __init ipic_init(struct device_node *node, unsigned int flags) | |||
728 | if (ret) | 728 | if (ret) |
729 | return NULL; | 729 | return NULL; |
730 | 730 | ||
731 | ipic = alloc_bootmem(sizeof(struct ipic)); | 731 | ipic = kzalloc(sizeof(*ipic), GFP_KERNEL); |
732 | if (ipic == NULL) | 732 | if (ipic == NULL) |
733 | return NULL; | 733 | return NULL; |
734 | 734 | ||
735 | memset(ipic, 0, sizeof(struct ipic)); | ||
736 | |||
737 | ipic->irqhost = irq_alloc_host(node, IRQ_HOST_MAP_LINEAR, | 735 | ipic->irqhost = irq_alloc_host(node, IRQ_HOST_MAP_LINEAR, |
738 | NR_IPIC_INTS, | 736 | NR_IPIC_INTS, |
739 | &ipic_host_ops, 0); | 737 | &ipic_host_ops, 0); |
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c index 9c3af5045495..3981ae4cb58e 100644 --- a/arch/powerpc/sysdev/mpic.c +++ b/arch/powerpc/sysdev/mpic.c | |||
@@ -279,28 +279,29 @@ static void _mpic_map_mmio(struct mpic *mpic, phys_addr_t phys_addr, | |||
279 | } | 279 | } |
280 | 280 | ||
281 | #ifdef CONFIG_PPC_DCR | 281 | #ifdef CONFIG_PPC_DCR |
282 | static void _mpic_map_dcr(struct mpic *mpic, struct mpic_reg_bank *rb, | 282 | static void _mpic_map_dcr(struct mpic *mpic, struct device_node *node, |
283 | struct mpic_reg_bank *rb, | ||
283 | unsigned int offset, unsigned int size) | 284 | unsigned int offset, unsigned int size) |
284 | { | 285 | { |
285 | const u32 *dbasep; | 286 | const u32 *dbasep; |
286 | 287 | ||
287 | dbasep = of_get_property(mpic->irqhost->of_node, "dcr-reg", NULL); | 288 | dbasep = of_get_property(node, "dcr-reg", NULL); |
288 | 289 | ||
289 | rb->dhost = dcr_map(mpic->irqhost->of_node, *dbasep + offset, size); | 290 | rb->dhost = dcr_map(node, *dbasep + offset, size); |
290 | BUG_ON(!DCR_MAP_OK(rb->dhost)); | 291 | BUG_ON(!DCR_MAP_OK(rb->dhost)); |
291 | } | 292 | } |
292 | 293 | ||
293 | static inline void mpic_map(struct mpic *mpic, phys_addr_t phys_addr, | 294 | static inline void mpic_map(struct mpic *mpic, struct device_node *node, |
294 | struct mpic_reg_bank *rb, unsigned int offset, | 295 | phys_addr_t phys_addr, struct mpic_reg_bank *rb, |
295 | unsigned int size) | 296 | unsigned int offset, unsigned int size) |
296 | { | 297 | { |
297 | if (mpic->flags & MPIC_USES_DCR) | 298 | if (mpic->flags & MPIC_USES_DCR) |
298 | _mpic_map_dcr(mpic, rb, offset, size); | 299 | _mpic_map_dcr(mpic, node, rb, offset, size); |
299 | else | 300 | else |
300 | _mpic_map_mmio(mpic, phys_addr, rb, offset, size); | 301 | _mpic_map_mmio(mpic, phys_addr, rb, offset, size); |
301 | } | 302 | } |
302 | #else /* CONFIG_PPC_DCR */ | 303 | #else /* CONFIG_PPC_DCR */ |
303 | #define mpic_map(m,p,b,o,s) _mpic_map_mmio(m,p,b,o,s) | 304 | #define mpic_map(m,n,p,b,o,s) _mpic_map_mmio(m,p,b,o,s) |
304 | #endif /* !CONFIG_PPC_DCR */ | 305 | #endif /* !CONFIG_PPC_DCR */ |
305 | 306 | ||
306 | 307 | ||
@@ -507,9 +508,8 @@ static void __init mpic_scan_ht_pics(struct mpic *mpic) | |||
507 | printk(KERN_INFO "mpic: Setting up HT PICs workarounds for U3/U4\n"); | 508 | printk(KERN_INFO "mpic: Setting up HT PICs workarounds for U3/U4\n"); |
508 | 509 | ||
509 | /* Allocate fixups array */ | 510 | /* Allocate fixups array */ |
510 | mpic->fixups = alloc_bootmem(128 * sizeof(struct mpic_irq_fixup)); | 511 | mpic->fixups = kzalloc(128 * sizeof(*mpic->fixups), GFP_KERNEL); |
511 | BUG_ON(mpic->fixups == NULL); | 512 | BUG_ON(mpic->fixups == NULL); |
512 | memset(mpic->fixups, 0, 128 * sizeof(struct mpic_irq_fixup)); | ||
513 | 513 | ||
514 | /* Init spinlock */ | 514 | /* Init spinlock */ |
515 | spin_lock_init(&mpic->fixup_lock); | 515 | spin_lock_init(&mpic->fixup_lock); |
@@ -1052,11 +1052,10 @@ struct mpic * __init mpic_alloc(struct device_node *node, | |||
1052 | int intvec_top; | 1052 | int intvec_top; |
1053 | u64 paddr = phys_addr; | 1053 | u64 paddr = phys_addr; |
1054 | 1054 | ||
1055 | mpic = alloc_bootmem(sizeof(struct mpic)); | 1055 | mpic = kzalloc(sizeof(struct mpic), GFP_KERNEL); |
1056 | if (mpic == NULL) | 1056 | if (mpic == NULL) |
1057 | return NULL; | 1057 | return NULL; |
1058 | 1058 | ||
1059 | memset(mpic, 0, sizeof(struct mpic)); | ||
1060 | mpic->name = name; | 1059 | mpic->name = name; |
1061 | 1060 | ||
1062 | mpic->hc_irq = mpic_irq_chip; | 1061 | mpic->hc_irq = mpic_irq_chip; |
@@ -1109,9 +1108,8 @@ struct mpic * __init mpic_alloc(struct device_node *node, | |||
1109 | psize /= 4; | 1108 | psize /= 4; |
1110 | bits = intvec_top + 1; | 1109 | bits = intvec_top + 1; |
1111 | mapsize = BITS_TO_LONGS(bits) * sizeof(unsigned long); | 1110 | mapsize = BITS_TO_LONGS(bits) * sizeof(unsigned long); |
1112 | mpic->protected = alloc_bootmem(mapsize); | 1111 | mpic->protected = kzalloc(mapsize, GFP_KERNEL); |
1113 | BUG_ON(mpic->protected == NULL); | 1112 | BUG_ON(mpic->protected == NULL); |
1114 | memset(mpic->protected, 0, mapsize); | ||
1115 | for (i = 0; i < psize; i++) { | 1113 | for (i = 0; i < psize; i++) { |
1116 | if (psrc[i] > intvec_top) | 1114 | if (psrc[i] > intvec_top) |
1117 | continue; | 1115 | continue; |
@@ -1152,8 +1150,8 @@ struct mpic * __init mpic_alloc(struct device_node *node, | |||
1152 | } | 1150 | } |
1153 | 1151 | ||
1154 | /* Map the global registers */ | 1152 | /* Map the global registers */ |
1155 | mpic_map(mpic, paddr, &mpic->gregs, MPIC_INFO(GREG_BASE), 0x1000); | 1153 | mpic_map(mpic, node, paddr, &mpic->gregs, MPIC_INFO(GREG_BASE), 0x1000); |
1156 | mpic_map(mpic, paddr, &mpic->tmregs, MPIC_INFO(TIMER_BASE), 0x1000); | 1154 | mpic_map(mpic, node, paddr, &mpic->tmregs, MPIC_INFO(TIMER_BASE), 0x1000); |
1157 | 1155 | ||
1158 | /* Reset */ | 1156 | /* Reset */ |
1159 | if (flags & MPIC_WANTS_RESET) { | 1157 | if (flags & MPIC_WANTS_RESET) { |
@@ -1194,7 +1192,7 @@ struct mpic * __init mpic_alloc(struct device_node *node, | |||
1194 | 1192 | ||
1195 | /* Map the per-CPU registers */ | 1193 | /* Map the per-CPU registers */ |
1196 | for (i = 0; i < mpic->num_cpus; i++) { | 1194 | for (i = 0; i < mpic->num_cpus; i++) { |
1197 | mpic_map(mpic, paddr, &mpic->cpuregs[i], | 1195 | mpic_map(mpic, node, paddr, &mpic->cpuregs[i], |
1198 | MPIC_INFO(CPU_BASE) + i * MPIC_INFO(CPU_STRIDE), | 1196 | MPIC_INFO(CPU_BASE) + i * MPIC_INFO(CPU_STRIDE), |
1199 | 0x1000); | 1197 | 0x1000); |
1200 | } | 1198 | } |
@@ -1202,7 +1200,7 @@ struct mpic * __init mpic_alloc(struct device_node *node, | |||
1202 | /* Initialize main ISU if none provided */ | 1200 | /* Initialize main ISU if none provided */ |
1203 | if (mpic->isu_size == 0) { | 1201 | if (mpic->isu_size == 0) { |
1204 | mpic->isu_size = mpic->num_sources; | 1202 | mpic->isu_size = mpic->num_sources; |
1205 | mpic_map(mpic, paddr, &mpic->isus[0], | 1203 | mpic_map(mpic, node, paddr, &mpic->isus[0], |
1206 | MPIC_INFO(IRQ_BASE), MPIC_INFO(IRQ_STRIDE) * mpic->isu_size); | 1204 | MPIC_INFO(IRQ_BASE), MPIC_INFO(IRQ_STRIDE) * mpic->isu_size); |
1207 | } | 1205 | } |
1208 | mpic->isu_shift = 1 + __ilog2(mpic->isu_size - 1); | 1206 | mpic->isu_shift = 1 + __ilog2(mpic->isu_size - 1); |
@@ -1256,8 +1254,10 @@ void __init mpic_assign_isu(struct mpic *mpic, unsigned int isu_num, | |||
1256 | 1254 | ||
1257 | BUG_ON(isu_num >= MPIC_MAX_ISU); | 1255 | BUG_ON(isu_num >= MPIC_MAX_ISU); |
1258 | 1256 | ||
1259 | mpic_map(mpic, paddr, &mpic->isus[isu_num], 0, | 1257 | mpic_map(mpic, mpic->irqhost->of_node, |
1258 | paddr, &mpic->isus[isu_num], 0, | ||
1260 | MPIC_INFO(IRQ_STRIDE) * mpic->isu_size); | 1259 | MPIC_INFO(IRQ_STRIDE) * mpic->isu_size); |
1260 | |||
1261 | if ((isu_first + mpic->isu_size) > mpic->num_sources) | 1261 | if ((isu_first + mpic->isu_size) > mpic->num_sources) |
1262 | mpic->num_sources = isu_first + mpic->isu_size; | 1262 | mpic->num_sources = isu_first + mpic->isu_size; |
1263 | } | 1263 | } |
@@ -1351,7 +1351,8 @@ void __init mpic_init(struct mpic *mpic) | |||
1351 | 1351 | ||
1352 | #ifdef CONFIG_PM | 1352 | #ifdef CONFIG_PM |
1353 | /* allocate memory to save mpic state */ | 1353 | /* allocate memory to save mpic state */ |
1354 | mpic->save_data = alloc_bootmem(mpic->num_sources * sizeof(struct mpic_irq_save)); | 1354 | mpic->save_data = kmalloc(mpic->num_sources * sizeof(*mpic->save_data), |
1355 | GFP_KERNEL); | ||
1355 | BUG_ON(mpic->save_data == NULL); | 1356 | BUG_ON(mpic->save_data == NULL); |
1356 | #endif | 1357 | #endif |
1357 | } | 1358 | } |
diff --git a/arch/powerpc/sysdev/ppc4xx_pci.c b/arch/powerpc/sysdev/ppc4xx_pci.c index daefc93ddffe..6ff9d71b4c0d 100644 --- a/arch/powerpc/sysdev/ppc4xx_pci.c +++ b/arch/powerpc/sysdev/ppc4xx_pci.c | |||
@@ -1531,7 +1531,7 @@ static void __init ppc4xx_configure_pciex_PIMs(struct ppc4xx_pciex_port *port, | |||
1531 | */ | 1531 | */ |
1532 | 1532 | ||
1533 | /* Calculate window size */ | 1533 | /* Calculate window size */ |
1534 | sa = (0xffffffffffffffffull << ilog2(ep_size));; | 1534 | sa = (0xffffffffffffffffull << ilog2(ep_size)); |
1535 | 1535 | ||
1536 | /* Setup BAR0 */ | 1536 | /* Setup BAR0 */ |
1537 | out_le32(mbase + PECFG_BAR0HMPA, RES_TO_U32_HIGH(sa)); | 1537 | out_le32(mbase + PECFG_BAR0HMPA, RES_TO_U32_HIGH(sa)); |
@@ -1550,7 +1550,7 @@ static void __init ppc4xx_configure_pciex_PIMs(struct ppc4xx_pciex_port *port, | |||
1550 | out_le32(mbase + PCI_BASE_ADDRESS_1, RES_TO_U32_HIGH(ep_addr)); | 1550 | out_le32(mbase + PCI_BASE_ADDRESS_1, RES_TO_U32_HIGH(ep_addr)); |
1551 | } else { | 1551 | } else { |
1552 | /* Calculate window size */ | 1552 | /* Calculate window size */ |
1553 | sa = (0xffffffffffffffffull << ilog2(size));; | 1553 | sa = (0xffffffffffffffffull << ilog2(size)); |
1554 | if (res->flags & IORESOURCE_PREFETCH) | 1554 | if (res->flags & IORESOURCE_PREFETCH) |
1555 | sa |= 0x8; | 1555 | sa |= 0x8; |
1556 | 1556 | ||
diff --git a/arch/powerpc/sysdev/qe_lib/qe.c b/arch/powerpc/sysdev/qe_lib/qe.c index b28b0e512d67..237e3654f48c 100644 --- a/arch/powerpc/sysdev/qe_lib/qe.c +++ b/arch/powerpc/sysdev/qe_lib/qe.c | |||
@@ -112,6 +112,7 @@ int qe_issue_cmd(u32 cmd, u32 device, u8 mcn_protocol, u32 cmd_input) | |||
112 | { | 112 | { |
113 | unsigned long flags; | 113 | unsigned long flags; |
114 | u8 mcn_shift = 0, dev_shift = 0; | 114 | u8 mcn_shift = 0, dev_shift = 0; |
115 | u32 ret; | ||
115 | 116 | ||
116 | spin_lock_irqsave(&qe_lock, flags); | 117 | spin_lock_irqsave(&qe_lock, flags); |
117 | if (cmd == QE_RESET) { | 118 | if (cmd == QE_RESET) { |
@@ -139,11 +140,13 @@ int qe_issue_cmd(u32 cmd, u32 device, u8 mcn_protocol, u32 cmd_input) | |||
139 | } | 140 | } |
140 | 141 | ||
141 | /* wait for the QE_CR_FLG to clear */ | 142 | /* wait for the QE_CR_FLG to clear */ |
142 | while(in_be32(&qe_immr->cp.cecr) & QE_CR_FLG) | 143 | ret = spin_event_timeout((in_be32(&qe_immr->cp.cecr) & QE_CR_FLG) == 0, |
143 | cpu_relax(); | 144 | 100, 0); |
145 | /* On timeout (e.g. failure), the expression will be false (ret == 0), | ||
146 | otherwise it will be true (ret == 1). */ | ||
144 | spin_unlock_irqrestore(&qe_lock, flags); | 147 | spin_unlock_irqrestore(&qe_lock, flags); |
145 | 148 | ||
146 | return 0; | 149 | return ret == 1; |
147 | } | 150 | } |
148 | EXPORT_SYMBOL(qe_issue_cmd); | 151 | EXPORT_SYMBOL(qe_issue_cmd); |
149 | 152 | ||
diff --git a/arch/powerpc/sysdev/qe_lib/qe_ic.c b/arch/powerpc/sysdev/qe_lib/qe_ic.c index 63cdf9887f36..074905c3ee5a 100644 --- a/arch/powerpc/sysdev/qe_lib/qe_ic.c +++ b/arch/powerpc/sysdev/qe_lib/qe_ic.c | |||
@@ -333,12 +333,10 @@ void __init qe_ic_init(struct device_node *node, unsigned int flags, | |||
333 | if (ret) | 333 | if (ret) |
334 | return; | 334 | return; |
335 | 335 | ||
336 | qe_ic = alloc_bootmem(sizeof(struct qe_ic)); | 336 | qe_ic = kzalloc(sizeof(*qe_ic), GFP_KERNEL); |
337 | if (qe_ic == NULL) | 337 | if (qe_ic == NULL) |
338 | return; | 338 | return; |
339 | 339 | ||
340 | memset(qe_ic, 0, sizeof(struct qe_ic)); | ||
341 | |||
342 | qe_ic->irqhost = irq_alloc_host(node, IRQ_HOST_MAP_LINEAR, | 340 | qe_ic->irqhost = irq_alloc_host(node, IRQ_HOST_MAP_LINEAR, |
343 | NR_QE_IC_INTS, &qe_ic_host_ops, 0); | 341 | NR_QE_IC_INTS, &qe_ic_host_ops, 0); |
344 | if (qe_ic->irqhost == NULL) | 342 | if (qe_ic->irqhost == NULL) |
diff --git a/arch/powerpc/sysdev/uic.c b/arch/powerpc/sysdev/uic.c index d35405c59434..466ce9ace127 100644 --- a/arch/powerpc/sysdev/uic.c +++ b/arch/powerpc/sysdev/uic.c | |||
@@ -258,11 +258,10 @@ static struct uic * __init uic_init_one(struct device_node *node) | |||
258 | 258 | ||
259 | BUG_ON(! of_device_is_compatible(node, "ibm,uic")); | 259 | BUG_ON(! of_device_is_compatible(node, "ibm,uic")); |
260 | 260 | ||
261 | uic = alloc_bootmem(sizeof(*uic)); | 261 | uic = kzalloc(sizeof(*uic), GFP_KERNEL); |
262 | if (! uic) | 262 | if (! uic) |
263 | return NULL; /* FIXME: panic? */ | 263 | return NULL; /* FIXME: panic? */ |
264 | 264 | ||
265 | memset(uic, 0, sizeof(*uic)); | ||
266 | spin_lock_init(&uic->lock); | 265 | spin_lock_init(&uic->lock); |
267 | indexp = of_get_property(node, "cell-index", &len); | 266 | indexp = of_get_property(node, "cell-index", &len); |
268 | if (!indexp || (len != sizeof(u32))) { | 267 | if (!indexp || (len != sizeof(u32))) { |