diff options
32 files changed, 376 insertions, 127 deletions
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 935d96571515..01feed0e2a15 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig | |||
@@ -71,15 +71,39 @@ config ARCH_MAY_HAVE_PC_FDC | |||
71 | bool | 71 | bool |
72 | default y | 72 | default y |
73 | 73 | ||
74 | config PPC_OF | ||
75 | def_bool y | ||
76 | |||
77 | config PPC_UDBG_16550 | ||
78 | bool | ||
79 | default n | ||
80 | |||
81 | config CRASH_DUMP | ||
82 | bool "kernel crash dumps (EXPERIMENTAL)" | ||
83 | depends on PPC_MULTIPLATFORM | ||
84 | depends on EXPERIMENTAL | ||
85 | help | ||
86 | Build a kernel suitable for use as a kdump capture kernel. | ||
87 | The kernel will be linked at a different address than normal, and | ||
88 | so can only be used for Kdump. | ||
89 | |||
90 | Don't change this unless you know what you are doing. | ||
91 | |||
92 | config GENERIC_TBSYNC | ||
93 | bool | ||
94 | default y if PPC32 && SMP | ||
95 | default n | ||
96 | |||
74 | menu "Processor support" | 97 | menu "Processor support" |
75 | choice | 98 | choice |
76 | prompt "Processor Type" | 99 | prompt "Processor Type" |
77 | depends on PPC32 | 100 | depends on PPC32 |
78 | default 6xx | 101 | default 6xx |
79 | 102 | ||
80 | config 6xx | 103 | config CLASSIC32 |
81 | bool "6xx/7xx/74xx" | 104 | bool "6xx/7xx/74xx" |
82 | select PPC_FPU | 105 | select PPC_FPU |
106 | select 6xx | ||
83 | help | 107 | help |
84 | There are four families of PowerPC chips supported. The more common | 108 | There are four families of PowerPC chips supported. The more common |
85 | types (601, 603, 604, 740, 750, 7400), the Motorola embedded | 109 | types (601, 603, 604, 740, 750, 7400), the Motorola embedded |
@@ -93,12 +117,20 @@ config 6xx | |||
93 | 117 | ||
94 | config PPC_52xx | 118 | config PPC_52xx |
95 | bool "Freescale 52xx" | 119 | bool "Freescale 52xx" |
120 | select 6xx | ||
121 | select PPC_FPU | ||
96 | 122 | ||
97 | config PPC_82xx | 123 | config PPC_82xx |
98 | bool "Freescale 82xx" | 124 | bool "Freescale 82xx" |
125 | select 6xx | ||
126 | select PPC_FPU | ||
99 | 127 | ||
100 | config PPC_83xx | 128 | config PPC_83xx |
101 | bool "Freescale 83xx" | 129 | bool "Freescale 83xx" |
130 | select 6xx | ||
131 | select FSL_SOC | ||
132 | select 83xx | ||
133 | select PPC_FPU | ||
102 | 134 | ||
103 | config 40x | 135 | config 40x |
104 | bool "AMCC 40x" | 136 | bool "AMCC 40x" |
@@ -134,6 +166,13 @@ config POWER4 | |||
134 | depends on PPC64 | 166 | depends on PPC64 |
135 | def_bool y | 167 | def_bool y |
136 | 168 | ||
169 | config 6xx | ||
170 | bool | ||
171 | |||
172 | # this is temp to handle compat with arch=ppc | ||
173 | config 83xx | ||
174 | bool | ||
175 | |||
137 | config PPC_FPU | 176 | config PPC_FPU |
138 | bool | 177 | bool |
139 | default y if PPC64 | 178 | default y if PPC64 |
@@ -166,7 +205,7 @@ config PHYS_64BIT | |||
166 | 205 | ||
167 | config ALTIVEC | 206 | config ALTIVEC |
168 | bool "AltiVec Support" | 207 | bool "AltiVec Support" |
169 | depends on 6xx || POWER4 | 208 | depends on CLASSIC32 || POWER4 |
170 | ---help--- | 209 | ---help--- |
171 | This option enables kernel support for the Altivec extensions to the | 210 | This option enables kernel support for the Altivec extensions to the |
172 | PowerPC processor. The kernel currently supports saving and restoring | 211 | PowerPC processor. The kernel currently supports saving and restoring |
@@ -239,7 +278,7 @@ endmenu | |||
239 | source "init/Kconfig" | 278 | source "init/Kconfig" |
240 | 279 | ||
241 | menu "Platform support" | 280 | menu "Platform support" |
242 | depends on PPC64 || 6xx | 281 | depends on PPC64 || CLASSIC32 |
243 | 282 | ||
244 | choice | 283 | choice |
245 | prompt "Machine type" | 284 | prompt "Machine type" |
@@ -330,9 +369,6 @@ config PPC_CELL | |||
330 | select MMIO_NVRAM | 369 | select MMIO_NVRAM |
331 | select PPC_UDBG_16550 | 370 | select PPC_UDBG_16550 |
332 | 371 | ||
333 | config PPC_OF | ||
334 | def_bool y | ||
335 | |||
336 | config XICS | 372 | config XICS |
337 | depends on PPC_PSERIES | 373 | depends on PPC_PSERIES |
338 | bool | 374 | bool |
@@ -375,26 +411,11 @@ config MPIC_BROKEN_U3 | |||
375 | depends on PPC_MAPLE | 411 | depends on PPC_MAPLE |
376 | default y | 412 | default y |
377 | 413 | ||
378 | config PPC_UDBG_16550 | ||
379 | bool | ||
380 | default n | ||
381 | |||
382 | config CELL_IIC | 414 | config CELL_IIC |
383 | depends on PPC_CELL | 415 | depends on PPC_CELL |
384 | bool | 416 | bool |
385 | default y | 417 | default y |
386 | 418 | ||
387 | config CRASH_DUMP | ||
388 | bool "kernel crash dumps (EXPERIMENTAL)" | ||
389 | depends on PPC_MULTIPLATFORM | ||
390 | depends on EXPERIMENTAL | ||
391 | help | ||
392 | Build a kernel suitable for use as a kdump capture kernel. | ||
393 | The kernel will be linked at a different address than normal, and | ||
394 | so can only be used for Kdump. | ||
395 | |||
396 | Don't change this unless you know what you are doing. | ||
397 | |||
398 | config IBMVIO | 419 | config IBMVIO |
399 | depends on PPC_PSERIES || PPC_ISERIES | 420 | depends on PPC_PSERIES || PPC_ISERIES |
400 | bool | 421 | bool |
@@ -410,11 +431,6 @@ config PPC_MPC106 | |||
410 | bool | 431 | bool |
411 | default n | 432 | default n |
412 | 433 | ||
413 | config GENERIC_TBSYNC | ||
414 | bool | ||
415 | default y if PPC32 && SMP | ||
416 | default n | ||
417 | |||
418 | source "drivers/cpufreq/Kconfig" | 434 | source "drivers/cpufreq/Kconfig" |
419 | 435 | ||
420 | config CPU_FREQ_PMAC | 436 | config CPU_FREQ_PMAC |
@@ -495,6 +511,7 @@ endmenu | |||
495 | 511 | ||
496 | source arch/powerpc/platforms/embedded6xx/Kconfig | 512 | source arch/powerpc/platforms/embedded6xx/Kconfig |
497 | source arch/powerpc/platforms/4xx/Kconfig | 513 | source arch/powerpc/platforms/4xx/Kconfig |
514 | source arch/powerpc/platforms/83xx/Kconfig | ||
498 | source arch/powerpc/platforms/85xx/Kconfig | 515 | source arch/powerpc/platforms/85xx/Kconfig |
499 | source arch/powerpc/platforms/8xx/Kconfig | 516 | source arch/powerpc/platforms/8xx/Kconfig |
500 | source arch/powerpc/platforms/cell/Kconfig | 517 | source arch/powerpc/platforms/cell/Kconfig |
@@ -718,7 +735,7 @@ config PPC_I8259 | |||
718 | config PPC_INDIRECT_PCI | 735 | config PPC_INDIRECT_PCI |
719 | bool | 736 | bool |
720 | depends on PCI | 737 | depends on PCI |
721 | default y if 40x || 44x || 85xx || 83xx | 738 | default y if 40x || 44x || 85xx |
722 | default n | 739 | default n |
723 | 740 | ||
724 | config EISA | 741 | config EISA |
@@ -727,13 +744,16 @@ config EISA | |||
727 | config SBUS | 744 | config SBUS |
728 | bool | 745 | bool |
729 | 746 | ||
747 | config FSL_SOC | ||
748 | bool | ||
749 | |||
730 | # Yes MCA RS/6000s exist but Linux-PPC does not currently support any | 750 | # Yes MCA RS/6000s exist but Linux-PPC does not currently support any |
731 | config MCA | 751 | config MCA |
732 | bool | 752 | bool |
733 | 753 | ||
734 | config PCI | 754 | config PCI |
735 | bool "PCI support" if 40x || CPM2 || 83xx || 85xx || PPC_MPC52xx || (EMBEDDED && PPC_ISERIES) | 755 | bool "PCI support" if 40x || CPM2 || PPC_83xx || 85xx || PPC_MPC52xx || (EMBEDDED && PPC_ISERIES) |
736 | default y if !40x && !CPM2 && !8xx && !APUS && !83xx && !85xx | 756 | default y if !40x && !CPM2 && !8xx && !APUS && !PPC_83xx && !85xx |
737 | default PCI_PERMEDIA if !4xx && !CPM2 && !8xx && APUS | 757 | default PCI_PERMEDIA if !4xx && !CPM2 && !8xx && APUS |
738 | default PCI_QSPAN if !4xx && !CPM2 && 8xx | 758 | default PCI_QSPAN if !4xx && !CPM2 && 8xx |
739 | help | 759 | help |
@@ -746,11 +766,6 @@ config PCI_DOMAINS | |||
746 | bool | 766 | bool |
747 | default PCI | 767 | default PCI |
748 | 768 | ||
749 | config MPC83xx_PCI2 | ||
750 | bool " Supprt for 2nd PCI host controller" | ||
751 | depends on PCI && MPC834x | ||
752 | default y if MPC834x_SYS | ||
753 | |||
754 | config PCI_QSPAN | 769 | config PCI_QSPAN |
755 | bool "QSpan PCI" | 770 | bool "QSpan PCI" |
756 | depends on !4xx && !CPM2 && 8xx | 771 | depends on !4xx && !CPM2 && 8xx |
diff --git a/arch/powerpc/Kconfig.debug b/arch/powerpc/Kconfig.debug index 30a30bf559ea..9254806f7032 100644 --- a/arch/powerpc/Kconfig.debug +++ b/arch/powerpc/Kconfig.debug | |||
@@ -115,4 +115,46 @@ config PPC_OCP | |||
115 | depends on IBM_OCP || XILINX_OCP | 115 | depends on IBM_OCP || XILINX_OCP |
116 | default y | 116 | default y |
117 | 117 | ||
118 | choice | ||
119 | prompt "Early debugging (dangerous)" | ||
120 | bool | ||
121 | optional | ||
122 | help | ||
123 | Enable early debugging. Careful, if you enable debugging for the | ||
124 | wrong type of machine your kernel _will not boot_. | ||
125 | |||
126 | config PPC_EARLY_DEBUG_LPAR | ||
127 | bool "LPAR HV Console" | ||
128 | depends on PPC_PSERIES | ||
129 | help | ||
130 | Select this to enable early debugging for a machine with a HVC | ||
131 | console on vterm 0. | ||
132 | |||
133 | config PPC_EARLY_DEBUG_G5 | ||
134 | bool "Apple G5" | ||
135 | depends on PPC_PMAC64 | ||
136 | help | ||
137 | Select this to enable early debugging for Apple G5 machines. | ||
138 | |||
139 | config PPC_EARLY_DEBUG_RTAS | ||
140 | bool "RTAS Panel" | ||
141 | depends on PPC_RTAS | ||
142 | help | ||
143 | Select this to enable early debugging via the RTAS panel. | ||
144 | |||
145 | config PPC_EARLY_DEBUG_MAPLE | ||
146 | bool "Maple real mode" | ||
147 | depends on PPC_MAPLE | ||
148 | help | ||
149 | Select this to enable early debugging for Maple. | ||
150 | |||
151 | config PPC_EARLY_DEBUG_ISERIES | ||
152 | bool "iSeries HV Console" | ||
153 | depends on PPC_ISERIES | ||
154 | help | ||
155 | Select this to enable early debugging for legacy iSeries. You need | ||
156 | to hit "Ctrl-x Ctrl-x" to see the messages on the console. | ||
157 | |||
158 | endchoice | ||
159 | |||
118 | endmenu | 160 | endmenu |
diff --git a/arch/powerpc/boot/.gitignore b/arch/powerpc/boot/.gitignore new file mode 100644 index 000000000000..45c9ad23526e --- /dev/null +++ b/arch/powerpc/boot/.gitignore | |||
@@ -0,0 +1,20 @@ | |||
1 | addnote | ||
2 | infblock.c | ||
3 | infblock.h | ||
4 | infcodes.c | ||
5 | infcodes.h | ||
6 | inffast.c | ||
7 | inffast.h | ||
8 | inflate.c | ||
9 | inftrees.c | ||
10 | inftrees.h | ||
11 | infutil.c | ||
12 | infutil.h | ||
13 | kernel-vmlinux.strip.c | ||
14 | kernel-vmlinux.strip.gz | ||
15 | uImage | ||
16 | zImage | ||
17 | zImage.vmode | ||
18 | zconf.h | ||
19 | zlib.h | ||
20 | zutil.h | ||
diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile index 22726aefc8ea..b53d677f6742 100644 --- a/arch/powerpc/boot/Makefile +++ b/arch/powerpc/boot/Makefile | |||
@@ -176,4 +176,4 @@ $(obj)/uImage: $(obj)/vmlinux.gz | |||
176 | install: $(CONFIGURE) $(BOOTIMAGE) | 176 | install: $(CONFIGURE) $(BOOTIMAGE) |
177 | sh -x $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" vmlinux System.map "$(INSTALL_PATH)" "$(BOOTIMAGE)" | 177 | sh -x $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" vmlinux System.map "$(INSTALL_PATH)" "$(BOOTIMAGE)" |
178 | 178 | ||
179 | clean-files := $(addprefix $(objtree)/, $(obj-boot) vmlinux.strip) | 179 | clean-files += $(addprefix $(objtree)/, $(obj-boot) vmlinux.strip) |
diff --git a/arch/powerpc/configs/ppc64_defconfig b/arch/powerpc/configs/ppc64_defconfig index 347f4391db8d..0b2b55a79c3c 100644 --- a/arch/powerpc/configs/ppc64_defconfig +++ b/arch/powerpc/configs/ppc64_defconfig | |||
@@ -878,7 +878,7 @@ CONFIG_HVCS=m | |||
878 | # | 878 | # |
879 | # CONFIG_WATCHDOG is not set | 879 | # CONFIG_WATCHDOG is not set |
880 | # CONFIG_RTC is not set | 880 | # CONFIG_RTC is not set |
881 | # CONFIG_GEN_RTC is not set | 881 | CONFIG_GEN_RTC=y |
882 | # CONFIG_DTLK is not set | 882 | # CONFIG_DTLK is not set |
883 | # CONFIG_R3964 is not set | 883 | # CONFIG_R3964 is not set |
884 | # CONFIG_APPLICOM is not set | 884 | # CONFIG_APPLICOM is not set |
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile index 144e284d21dd..bbfa1bdceb4d 100644 --- a/arch/powerpc/kernel/Makefile +++ b/arch/powerpc/kernel/Makefile | |||
@@ -61,9 +61,9 @@ obj-$(CONFIG_MODULES) += $(module-y) | |||
61 | pci64-$(CONFIG_PPC64) += pci_64.o pci_dn.o pci_iommu.o \ | 61 | pci64-$(CONFIG_PPC64) += pci_64.o pci_dn.o pci_iommu.o \ |
62 | pci_direct_iommu.o iomap.o | 62 | pci_direct_iommu.o iomap.o |
63 | obj-$(CONFIG_PCI) += $(pci64-y) | 63 | obj-$(CONFIG_PCI) += $(pci64-y) |
64 | kexec-$(CONFIG_PPC64) := machine_kexec_64.o | 64 | kexec-$(CONFIG_PPC64) := machine_kexec_64.o crash.o |
65 | kexec-$(CONFIG_PPC32) := machine_kexec_32.o | 65 | kexec-$(CONFIG_PPC32) := machine_kexec_32.o |
66 | obj-$(CONFIG_KEXEC) += machine_kexec.o crash.o $(kexec-y) | 66 | obj-$(CONFIG_KEXEC) += machine_kexec.o $(kexec-y) |
67 | 67 | ||
68 | ifeq ($(CONFIG_PPC_ISERIES),y) | 68 | ifeq ($(CONFIG_PPC_ISERIES),y) |
69 | $(obj)/head_64.o: $(obj)/lparmap.s | 69 | $(obj)/head_64.o: $(obj)/lparmap.s |
diff --git a/arch/powerpc/kernel/crash.c b/arch/powerpc/kernel/crash.c index 4681155121ef..5f248e3fdf82 100644 --- a/arch/powerpc/kernel/crash.c +++ b/arch/powerpc/kernel/crash.c | |||
@@ -18,7 +18,6 @@ | |||
18 | #include <linux/kexec.h> | 18 | #include <linux/kexec.h> |
19 | #include <linux/bootmem.h> | 19 | #include <linux/bootmem.h> |
20 | #include <linux/crash_dump.h> | 20 | #include <linux/crash_dump.h> |
21 | #include <linux/irq.h> | ||
22 | #include <linux/delay.h> | 21 | #include <linux/delay.h> |
23 | #include <linux/elf.h> | 22 | #include <linux/elf.h> |
24 | #include <linux/elfcore.h> | 23 | #include <linux/elfcore.h> |
@@ -30,6 +29,7 @@ | |||
30 | #include <asm/kdump.h> | 29 | #include <asm/kdump.h> |
31 | #include <asm/lmb.h> | 30 | #include <asm/lmb.h> |
32 | #include <asm/firmware.h> | 31 | #include <asm/firmware.h> |
32 | #include <asm/smp.h> | ||
33 | 33 | ||
34 | #ifdef DEBUG | 34 | #ifdef DEBUG |
35 | #include <asm/udbg.h> | 35 | #include <asm/udbg.h> |
diff --git a/arch/powerpc/kernel/crash_dump.c b/arch/powerpc/kernel/crash_dump.c index 87effa3f21a7..211d72653ea6 100644 --- a/arch/powerpc/kernel/crash_dump.c +++ b/arch/powerpc/kernel/crash_dump.c | |||
@@ -55,6 +55,7 @@ void __init kdump_setup(void) | |||
55 | DBG(" <- kdump_setup()\n"); | 55 | DBG(" <- kdump_setup()\n"); |
56 | } | 56 | } |
57 | 57 | ||
58 | #ifdef CONFIG_PROC_VMCORE | ||
58 | static int __init parse_elfcorehdr(char *p) | 59 | static int __init parse_elfcorehdr(char *p) |
59 | { | 60 | { |
60 | if (p) | 61 | if (p) |
@@ -63,6 +64,7 @@ static int __init parse_elfcorehdr(char *p) | |||
63 | return 0; | 64 | return 0; |
64 | } | 65 | } |
65 | __setup("elfcorehdr=", parse_elfcorehdr); | 66 | __setup("elfcorehdr=", parse_elfcorehdr); |
67 | #endif | ||
66 | 68 | ||
67 | static int __init parse_savemaxmem(char *p) | 69 | static int __init parse_savemaxmem(char *p) |
68 | { | 70 | { |
diff --git a/arch/powerpc/kernel/machine_kexec.c b/arch/powerpc/kernel/machine_kexec.c index a91e40c9ae45..a81ca1b841ec 100644 --- a/arch/powerpc/kernel/machine_kexec.c +++ b/arch/powerpc/kernel/machine_kexec.c | |||
@@ -14,12 +14,6 @@ | |||
14 | #include <linux/threads.h> | 14 | #include <linux/threads.h> |
15 | #include <asm/machdep.h> | 15 | #include <asm/machdep.h> |
16 | 16 | ||
17 | /* | ||
18 | * Provide a dummy crash_notes definition until crash dump is implemented. | ||
19 | * This prevents breakage of crash_notes attribute in kernel/ksysfs.c. | ||
20 | */ | ||
21 | note_buf_t crash_notes[NR_CPUS]; | ||
22 | |||
23 | void machine_crash_shutdown(struct pt_regs *regs) | 17 | void machine_crash_shutdown(struct pt_regs *regs) |
24 | { | 18 | { |
25 | if (ppc_md.machine_crash_shutdown) | 19 | if (ppc_md.machine_crash_shutdown) |
diff --git a/arch/powerpc/kernel/pci_64.c b/arch/powerpc/kernel/pci_64.c index ba21a6c4f467..24fe70f40b66 100644 --- a/arch/powerpc/kernel/pci_64.c +++ b/arch/powerpc/kernel/pci_64.c | |||
@@ -271,6 +271,9 @@ void __devinit pcibios_claim_one_bus(struct pci_bus *b) | |||
271 | list_for_each_entry(child_bus, &b->children, node) | 271 | list_for_each_entry(child_bus, &b->children, node) |
272 | pcibios_claim_one_bus(child_bus); | 272 | pcibios_claim_one_bus(child_bus); |
273 | } | 273 | } |
274 | #ifdef CONFIG_HOTPLUG | ||
275 | EXPORT_SYMBOL_GPL(pcibios_claim_one_bus); | ||
276 | #endif | ||
274 | 277 | ||
275 | #ifndef CONFIG_PPC_ISERIES | 278 | #ifndef CONFIG_PPC_ISERIES |
276 | static void __init pcibios_claim_of_setup(void) | 279 | static void __init pcibios_claim_of_setup(void) |
diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c index ae2e2a31a705..68bcd2824bc6 100644 --- a/arch/powerpc/kernel/rtas.c +++ b/arch/powerpc/kernel/rtas.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <asm/delay.h> | 29 | #include <asm/delay.h> |
30 | #include <asm/uaccess.h> | 30 | #include <asm/uaccess.h> |
31 | #include <asm/lmb.h> | 31 | #include <asm/lmb.h> |
32 | #include <asm/udbg.h> | ||
32 | 33 | ||
33 | struct rtas_t rtas = { | 34 | struct rtas_t rtas = { |
34 | .lock = SPIN_LOCK_UNLOCKED | 35 | .lock = SPIN_LOCK_UNLOCKED |
@@ -52,7 +53,7 @@ EXPORT_SYMBOL(rtas_flash_term_hook); | |||
52 | * are designed only for very early low-level debugging, which | 53 | * are designed only for very early low-level debugging, which |
53 | * is why the token is hard-coded to 10. | 54 | * is why the token is hard-coded to 10. |
54 | */ | 55 | */ |
55 | void call_rtas_display_status(unsigned char c) | 56 | static void call_rtas_display_status(char c) |
56 | { | 57 | { |
57 | struct rtas_args *args = &rtas.args; | 58 | struct rtas_args *args = &rtas.args; |
58 | unsigned long s; | 59 | unsigned long s; |
@@ -65,14 +66,14 @@ void call_rtas_display_status(unsigned char c) | |||
65 | args->nargs = 1; | 66 | args->nargs = 1; |
66 | args->nret = 1; | 67 | args->nret = 1; |
67 | args->rets = (rtas_arg_t *)&(args->args[1]); | 68 | args->rets = (rtas_arg_t *)&(args->args[1]); |
68 | args->args[0] = (int)c; | 69 | args->args[0] = (unsigned char)c; |
69 | 70 | ||
70 | enter_rtas(__pa(args)); | 71 | enter_rtas(__pa(args)); |
71 | 72 | ||
72 | spin_unlock_irqrestore(&rtas.lock, s); | 73 | spin_unlock_irqrestore(&rtas.lock, s); |
73 | } | 74 | } |
74 | 75 | ||
75 | void call_rtas_display_status_delay(unsigned char c) | 76 | static void call_rtas_display_status_delay(char c) |
76 | { | 77 | { |
77 | static int pending_newline = 0; /* did last write end with unprinted newline? */ | 78 | static int pending_newline = 0; /* did last write end with unprinted newline? */ |
78 | static int width = 16; | 79 | static int width = 16; |
@@ -96,6 +97,11 @@ void call_rtas_display_status_delay(unsigned char c) | |||
96 | } | 97 | } |
97 | } | 98 | } |
98 | 99 | ||
100 | void __init udbg_init_rtas(void) | ||
101 | { | ||
102 | udbg_putc = call_rtas_display_status_delay; | ||
103 | } | ||
104 | |||
99 | void rtas_progress(char *s, unsigned short hex) | 105 | void rtas_progress(char *s, unsigned short hex) |
100 | { | 106 | { |
101 | struct device_node *root; | 107 | struct device_node *root; |
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c index c4b76961d6de..e29b275e09e0 100644 --- a/arch/powerpc/kernel/setup_64.c +++ b/arch/powerpc/kernel/setup_64.c | |||
@@ -33,6 +33,7 @@ | |||
33 | #include <linux/unistd.h> | 33 | #include <linux/unistd.h> |
34 | #include <linux/serial.h> | 34 | #include <linux/serial.h> |
35 | #include <linux/serial_8250.h> | 35 | #include <linux/serial_8250.h> |
36 | #include <linux/bootmem.h> | ||
36 | #include <asm/io.h> | 37 | #include <asm/io.h> |
37 | #include <asm/kdump.h> | 38 | #include <asm/kdump.h> |
38 | #include <asm/prom.h> | 39 | #include <asm/prom.h> |
@@ -70,33 +71,6 @@ | |||
70 | #define DBG(fmt...) | 71 | #define DBG(fmt...) |
71 | #endif | 72 | #endif |
72 | 73 | ||
73 | /* | ||
74 | * Here are some early debugging facilities. You can enable one | ||
75 | * but your kernel will not boot on anything else if you do so | ||
76 | */ | ||
77 | |||
78 | /* This one is for use on LPAR machines that support an HVC console | ||
79 | * on vterm 0 | ||
80 | */ | ||
81 | extern void udbg_init_debug_lpar(void); | ||
82 | /* This one is for use on Apple G5 machines | ||
83 | */ | ||
84 | extern void udbg_init_pmac_realmode(void); | ||
85 | /* That's RTAS panel debug */ | ||
86 | extern void call_rtas_display_status_delay(unsigned char c); | ||
87 | /* Here's maple real mode debug */ | ||
88 | extern void udbg_init_maple_realmode(void); | ||
89 | |||
90 | #define EARLY_DEBUG_INIT() do {} while(0) | ||
91 | |||
92 | #if 0 | ||
93 | #define EARLY_DEBUG_INIT() udbg_init_debug_lpar() | ||
94 | #define EARLY_DEBUG_INIT() udbg_init_maple_realmode() | ||
95 | #define EARLY_DEBUG_INIT() udbg_init_pmac_realmode() | ||
96 | #define EARLY_DEBUG_INIT() \ | ||
97 | do { udbg_putc = call_rtas_display_status_delay; } while(0) | ||
98 | #endif | ||
99 | |||
100 | int have_of = 1; | 74 | int have_of = 1; |
101 | int boot_cpuid = 0; | 75 | int boot_cpuid = 0; |
102 | int boot_cpuid_phys = 0; | 76 | int boot_cpuid_phys = 0; |
@@ -237,11 +211,8 @@ void __init early_setup(unsigned long dt_ptr) | |||
237 | struct paca_struct *lpaca = get_paca(); | 211 | struct paca_struct *lpaca = get_paca(); |
238 | static struct machdep_calls **mach; | 212 | static struct machdep_calls **mach; |
239 | 213 | ||
240 | /* | 214 | /* Enable early debugging if any specified (see udbg.h) */ |
241 | * Enable early debugging if any specified (see top of | 215 | udbg_early_init(); |
242 | * this file) | ||
243 | */ | ||
244 | EARLY_DEBUG_INIT(); | ||
245 | 216 | ||
246 | DBG(" -> early_setup()\n"); | 217 | DBG(" -> early_setup()\n"); |
247 | 218 | ||
@@ -684,3 +655,28 @@ void cpu_die(void) | |||
684 | if (ppc_md.cpu_die) | 655 | if (ppc_md.cpu_die) |
685 | ppc_md.cpu_die(); | 656 | ppc_md.cpu_die(); |
686 | } | 657 | } |
658 | |||
659 | #ifdef CONFIG_SMP | ||
660 | void __init setup_per_cpu_areas(void) | ||
661 | { | ||
662 | int i; | ||
663 | unsigned long size; | ||
664 | char *ptr; | ||
665 | |||
666 | /* Copy section for each CPU (we discard the original) */ | ||
667 | size = ALIGN(__per_cpu_end - __per_cpu_start, SMP_CACHE_BYTES); | ||
668 | #ifdef CONFIG_MODULES | ||
669 | if (size < PERCPU_ENOUGH_ROOM) | ||
670 | size = PERCPU_ENOUGH_ROOM; | ||
671 | #endif | ||
672 | |||
673 | for_each_cpu(i) { | ||
674 | ptr = alloc_bootmem_node(NODE_DATA(cpu_to_node(i)), size); | ||
675 | if (!ptr) | ||
676 | panic("Cannot allocate cpu data for CPU %d\n", i); | ||
677 | |||
678 | paca[i].data_offset = ptr - __per_cpu_start; | ||
679 | memcpy(ptr, __per_cpu_start, __per_cpu_end - __per_cpu_start); | ||
680 | } | ||
681 | } | ||
682 | #endif | ||
diff --git a/arch/powerpc/kernel/udbg.c b/arch/powerpc/kernel/udbg.c index 558c1ceb2b93..3774e80094f5 100644 --- a/arch/powerpc/kernel/udbg.c +++ b/arch/powerpc/kernel/udbg.c | |||
@@ -15,11 +15,36 @@ | |||
15 | #include <linux/sched.h> | 15 | #include <linux/sched.h> |
16 | #include <linux/console.h> | 16 | #include <linux/console.h> |
17 | #include <asm/processor.h> | 17 | #include <asm/processor.h> |
18 | #include <asm/udbg.h> | ||
18 | 19 | ||
19 | void (*udbg_putc)(char c); | 20 | void (*udbg_putc)(char c); |
20 | int (*udbg_getc)(void); | 21 | int (*udbg_getc)(void); |
21 | int (*udbg_getc_poll)(void); | 22 | int (*udbg_getc_poll)(void); |
22 | 23 | ||
24 | /* | ||
25 | * Early debugging facilities. You can enable _one_ of these via .config, | ||
26 | * if you do so your kernel _will not boot_ on anything else. Be careful. | ||
27 | */ | ||
28 | void __init udbg_early_init(void) | ||
29 | { | ||
30 | #if defined(CONFIG_PPC_EARLY_DEBUG_LPAR) | ||
31 | /* For LPAR machines that have an HVC console on vterm 0 */ | ||
32 | udbg_init_debug_lpar(); | ||
33 | #elif defined(CONFIG_PPC_EARLY_DEBUG_G5) | ||
34 | /* For use on Apple G5 machines */ | ||
35 | udbg_init_pmac_realmode(); | ||
36 | #elif defined(CONFIG_PPC_EARLY_DEBUG_RTAS) | ||
37 | /* RTAS panel debug */ | ||
38 | udbg_init_rtas(); | ||
39 | #elif defined(CONFIG_PPC_EARLY_DEBUG_MAPLE) | ||
40 | /* Maple real mode debug */ | ||
41 | udbg_init_maple_realmode(); | ||
42 | #elif defined(CONFIG_PPC_EARLY_DEBUG_ISERIES) | ||
43 | /* For iSeries - hit Ctrl-x Ctrl-x to see the output */ | ||
44 | udbg_init_iseries(); | ||
45 | #endif | ||
46 | } | ||
47 | |||
23 | /* udbg library, used by xmon et al */ | 48 | /* udbg library, used by xmon et al */ |
24 | void udbg_puts(const char *s) | 49 | void udbg_puts(const char *s) |
25 | { | 50 | { |
diff --git a/arch/powerpc/kernel/udbg_16550.c b/arch/powerpc/kernel/udbg_16550.c index 7541bf44d2da..2da65a9c93f6 100644 --- a/arch/powerpc/kernel/udbg_16550.c +++ b/arch/powerpc/kernel/udbg_16550.c | |||
@@ -155,7 +155,7 @@ void udbg_maple_real_putc(unsigned char c) | |||
155 | } | 155 | } |
156 | } | 156 | } |
157 | 157 | ||
158 | void udbg_init_maple_realmode(void) | 158 | void __init udbg_init_maple_realmode(void) |
159 | { | 159 | { |
160 | udbg_comport = (volatile struct NS16550 __iomem *)0xf40003f8; | 160 | udbg_comport = (volatile struct NS16550 __iomem *)0xf40003f8; |
161 | 161 | ||
diff --git a/arch/powerpc/kernel/vdso32/.gitignore b/arch/powerpc/kernel/vdso32/.gitignore new file mode 100644 index 000000000000..e45fba9d0ced --- /dev/null +++ b/arch/powerpc/kernel/vdso32/.gitignore | |||
@@ -0,0 +1 @@ | |||
vdso32.lds | |||
diff --git a/arch/powerpc/kernel/vdso64/.gitignore b/arch/powerpc/kernel/vdso64/.gitignore new file mode 100644 index 000000000000..3fd18cf9fec2 --- /dev/null +++ b/arch/powerpc/kernel/vdso64/.gitignore | |||
@@ -0,0 +1 @@ | |||
vdso64.lds | |||
diff --git a/arch/powerpc/platforms/83xx/Kconfig b/arch/powerpc/platforms/83xx/Kconfig new file mode 100644 index 000000000000..b20812d460e6 --- /dev/null +++ b/arch/powerpc/platforms/83xx/Kconfig | |||
@@ -0,0 +1,26 @@ | |||
1 | menu "Platform support" | ||
2 | depends on PPC_83xx | ||
3 | |||
4 | choice | ||
5 | prompt "Machine Type" | ||
6 | default MPC834x_SYS | ||
7 | |||
8 | config MPC834x_SYS | ||
9 | bool "Freescale MPC834x SYS" | ||
10 | help | ||
11 | This option enables support for the MPC 834x SYS evaluation board. | ||
12 | |||
13 | Be aware that PCI buses can only function when SYS board is plugged | ||
14 | into the PIB (Platform IO Board) board from Freescale which provide | ||
15 | 3 PCI slots. The PIBs PCI initialization is the bootloader's | ||
16 | responsiblilty. | ||
17 | |||
18 | endchoice | ||
19 | |||
20 | config MPC834x | ||
21 | bool | ||
22 | select PPC_UDBG_16550 | ||
23 | select PPC_INDIRECT_PCI | ||
24 | default y if MPC834x_SYS | ||
25 | |||
26 | endmenu | ||
diff --git a/arch/powerpc/platforms/83xx/Makefile b/arch/powerpc/platforms/83xx/Makefile new file mode 100644 index 000000000000..9d8b28ef3343 --- /dev/null +++ b/arch/powerpc/platforms/83xx/Makefile | |||
@@ -0,0 +1,4 @@ | |||
1 | # | ||
2 | # Makefile for the PowerPC 83xx linux kernel. | ||
3 | # | ||
4 | obj-$(CONFIG_MPC834x_SYS) += mpc834x_sys.o pci.o | ||
diff --git a/arch/powerpc/platforms/Makefile b/arch/powerpc/platforms/Makefile index 8836b3a00668..04073fd987ec 100644 --- a/arch/powerpc/platforms/Makefile +++ b/arch/powerpc/platforms/Makefile | |||
@@ -7,6 +7,7 @@ endif | |||
7 | endif | 7 | endif |
8 | obj-$(CONFIG_PPC_CHRP) += chrp/ | 8 | obj-$(CONFIG_PPC_CHRP) += chrp/ |
9 | obj-$(CONFIG_4xx) += 4xx/ | 9 | obj-$(CONFIG_4xx) += 4xx/ |
10 | obj-$(CONFIG_PPC_83xx) += 83xx/ | ||
10 | obj-$(CONFIG_85xx) += 85xx/ | 11 | obj-$(CONFIG_85xx) += 85xx/ |
11 | obj-$(CONFIG_PPC_PSERIES) += pseries/ | 12 | obj-$(CONFIG_PPC_PSERIES) += pseries/ |
12 | obj-$(CONFIG_PPC_ISERIES) += iseries/ | 13 | obj-$(CONFIG_PPC_ISERIES) += iseries/ |
diff --git a/arch/powerpc/platforms/cell/spufs/switch.c b/arch/powerpc/platforms/cell/spufs/switch.c index 1061c12b2edb..212db28531fa 100644 --- a/arch/powerpc/platforms/cell/spufs/switch.c +++ b/arch/powerpc/platforms/cell/spufs/switch.c | |||
@@ -169,11 +169,33 @@ static inline void save_mfc_cntl(struct spu_state *csa, struct spu *spu) | |||
169 | struct spu_priv2 __iomem *priv2 = spu->priv2; | 169 | struct spu_priv2 __iomem *priv2 = spu->priv2; |
170 | 170 | ||
171 | /* Save, Step 8: | 171 | /* Save, Step 8: |
172 | * Read and save MFC_CNTL[Ss]. | 172 | * Suspend DMA and save MFC_CNTL. |
173 | */ | 173 | */ |
174 | if (csa) { | 174 | switch (in_be64(&priv2->mfc_control_RW) & |
175 | csa->priv2.mfc_control_RW = in_be64(&priv2->mfc_control_RW) & | 175 | MFC_CNTL_SUSPEND_DMA_STATUS_MASK) { |
176 | MFC_CNTL_SUSPEND_DMA_STATUS_MASK; | 176 | case MFC_CNTL_SUSPEND_IN_PROGRESS: |
177 | POLL_WHILE_FALSE((in_be64(&priv2->mfc_control_RW) & | ||
178 | MFC_CNTL_SUSPEND_DMA_STATUS_MASK) == | ||
179 | MFC_CNTL_SUSPEND_COMPLETE); | ||
180 | /* fall through */ | ||
181 | case MFC_CNTL_SUSPEND_COMPLETE: | ||
182 | if (csa) { | ||
183 | csa->priv2.mfc_control_RW = | ||
184 | in_be64(&priv2->mfc_control_RW) | | ||
185 | MFC_CNTL_SUSPEND_DMA_QUEUE; | ||
186 | } | ||
187 | break; | ||
188 | case MFC_CNTL_NORMAL_DMA_QUEUE_OPERATION: | ||
189 | out_be64(&priv2->mfc_control_RW, MFC_CNTL_SUSPEND_DMA_QUEUE); | ||
190 | POLL_WHILE_FALSE((in_be64(&priv2->mfc_control_RW) & | ||
191 | MFC_CNTL_SUSPEND_DMA_STATUS_MASK) == | ||
192 | MFC_CNTL_SUSPEND_COMPLETE); | ||
193 | if (csa) { | ||
194 | csa->priv2.mfc_control_RW = | ||
195 | in_be64(&priv2->mfc_control_RW) & | ||
196 | ~MFC_CNTL_SUSPEND_DMA_QUEUE; | ||
197 | } | ||
198 | break; | ||
177 | } | 199 | } |
178 | } | 200 | } |
179 | 201 | ||
@@ -237,6 +259,8 @@ static inline void save_mfc_decr(struct spu_state *csa, struct spu *spu) | |||
237 | eieio(); | 259 | eieio(); |
238 | csa->spu_chnldata_RW[7] = in_be64(&priv2->spu_chnldata_RW); | 260 | csa->spu_chnldata_RW[7] = in_be64(&priv2->spu_chnldata_RW); |
239 | eieio(); | 261 | eieio(); |
262 | } else { | ||
263 | csa->priv2.mfc_control_RW &= ~MFC_CNTL_DECREMENTER_RUNNING; | ||
240 | } | 264 | } |
241 | } | 265 | } |
242 | 266 | ||
diff --git a/arch/powerpc/platforms/embedded6xx/Kconfig b/arch/powerpc/platforms/embedded6xx/Kconfig index 81250090f98d..4fdbc9ae876b 100644 --- a/arch/powerpc/platforms/embedded6xx/Kconfig +++ b/arch/powerpc/platforms/embedded6xx/Kconfig | |||
@@ -144,16 +144,6 @@ config LITE5200 | |||
144 | much but it's only been tested on this board version. I think this | 144 | much but it's only been tested on this board version. I think this |
145 | board is also known as IceCube. | 145 | board is also known as IceCube. |
146 | 146 | ||
147 | config MPC834x_SYS | ||
148 | bool "Freescale MPC834x SYS" | ||
149 | help | ||
150 | This option enables support for the MPC 834x SYS evaluation board. | ||
151 | |||
152 | Be aware that PCI buses can only function when SYS board is plugged | ||
153 | into the PIB (Platform IO Board) board from Freescale which provide | ||
154 | 3 PCI slots. The PIBs PCI initialization is the bootloader's | ||
155 | responsiblilty. | ||
156 | |||
157 | config EV64360 | 147 | config EV64360 |
158 | bool "Marvell-EV64360BP" | 148 | bool "Marvell-EV64360BP" |
159 | help | 149 | help |
@@ -192,14 +182,6 @@ config 8272 | |||
192 | The MPC8272 CPM has a different internal dpram setup than other CPM2 | 182 | The MPC8272 CPM has a different internal dpram setup than other CPM2 |
193 | devices | 183 | devices |
194 | 184 | ||
195 | config 83xx | ||
196 | bool | ||
197 | default y if MPC834x_SYS | ||
198 | |||
199 | config MPC834x | ||
200 | bool | ||
201 | default y if MPC834x_SYS | ||
202 | |||
203 | config CPM2 | 185 | config CPM2 |
204 | bool | 186 | bool |
205 | depends on 8260 || MPC8560 || MPC8555 | 187 | depends on 8260 || MPC8560 || MPC8555 |
diff --git a/arch/powerpc/platforms/iseries/setup.c b/arch/powerpc/platforms/iseries/setup.c index ad5ef80500ce..c6bbe5c25107 100644 --- a/arch/powerpc/platforms/iseries/setup.c +++ b/arch/powerpc/platforms/iseries/setup.c | |||
@@ -52,6 +52,7 @@ | |||
52 | #include <asm/iseries/mf.h> | 52 | #include <asm/iseries/mf.h> |
53 | #include <asm/iseries/hv_lp_event.h> | 53 | #include <asm/iseries/hv_lp_event.h> |
54 | #include <asm/iseries/lpar_map.h> | 54 | #include <asm/iseries/lpar_map.h> |
55 | #include <asm/udbg.h> | ||
55 | 56 | ||
56 | #include "naca.h" | 57 | #include "naca.h" |
57 | #include "setup.h" | 58 | #include "setup.h" |
@@ -62,10 +63,8 @@ | |||
62 | #include "call_sm.h" | 63 | #include "call_sm.h" |
63 | #include "call_hpt.h" | 64 | #include "call_hpt.h" |
64 | 65 | ||
65 | extern void hvlog(char *fmt, ...); | ||
66 | |||
67 | #ifdef DEBUG | 66 | #ifdef DEBUG |
68 | #define DBG(fmt...) hvlog(fmt) | 67 | #define DBG(fmt...) udbg_printf(fmt) |
69 | #else | 68 | #else |
70 | #define DBG(fmt...) | 69 | #define DBG(fmt...) |
71 | #endif | 70 | #endif |
@@ -474,14 +473,6 @@ static unsigned long __init build_iSeries_Memory_Map(void) | |||
474 | printk("HPT absolute addr = %016lx, size = %dK\n", | 473 | printk("HPT absolute addr = %016lx, size = %dK\n", |
475 | chunk_to_addr(hptFirstChunk), hptSizeChunks * 256); | 474 | chunk_to_addr(hptFirstChunk), hptSizeChunks * 256); |
476 | 475 | ||
477 | ppc64_pft_size = __ilog2(hptSizePages * HW_PAGE_SIZE); | ||
478 | |||
479 | /* | ||
480 | * The actual hashed page table is in the hypervisor, | ||
481 | * we have no direct access | ||
482 | */ | ||
483 | htab_address = NULL; | ||
484 | |||
485 | /* | 476 | /* |
486 | * Determine if absolute memory has any | 477 | * Determine if absolute memory has any |
487 | * holes so that we can interpret the | 478 | * holes so that we can interpret the |
@@ -861,6 +852,11 @@ void dt_prop_u64_list(struct iseries_flat_dt *dt, char *name, u64 *data, int n) | |||
861 | dt_prop(dt, name, (char *)data, sizeof(u64) * n); | 852 | dt_prop(dt, name, (char *)data, sizeof(u64) * n); |
862 | } | 853 | } |
863 | 854 | ||
855 | void dt_prop_u32_list(struct iseries_flat_dt *dt, char *name, u32 *data, int n) | ||
856 | { | ||
857 | dt_prop(dt, name, (char *)data, sizeof(u32) * n); | ||
858 | } | ||
859 | |||
864 | void dt_prop_empty(struct iseries_flat_dt *dt, char *name) | 860 | void dt_prop_empty(struct iseries_flat_dt *dt, char *name) |
865 | { | 861 | { |
866 | dt_prop(dt, name, NULL, 0); | 862 | dt_prop(dt, name, NULL, 0); |
@@ -872,6 +868,7 @@ void dt_cpus(struct iseries_flat_dt *dt) | |||
872 | unsigned char *p; | 868 | unsigned char *p; |
873 | unsigned int i, index; | 869 | unsigned int i, index; |
874 | struct IoHriProcessorVpd *d; | 870 | struct IoHriProcessorVpd *d; |
871 | u32 pft_size[2]; | ||
875 | 872 | ||
876 | /* yuck */ | 873 | /* yuck */ |
877 | snprintf(buf, 32, "PowerPC,%s", cur_cpu_spec->cpu_name); | 874 | snprintf(buf, 32, "PowerPC,%s", cur_cpu_spec->cpu_name); |
@@ -882,6 +879,9 @@ void dt_cpus(struct iseries_flat_dt *dt) | |||
882 | dt_prop_u32(dt, "#address-cells", 1); | 879 | dt_prop_u32(dt, "#address-cells", 1); |
883 | dt_prop_u32(dt, "#size-cells", 0); | 880 | dt_prop_u32(dt, "#size-cells", 0); |
884 | 881 | ||
882 | pft_size[0] = 0; /* NUMA CEC cookie, 0 for non NUMA */ | ||
883 | pft_size[1] = __ilog2(HvCallHpt_getHptPages() * HW_PAGE_SIZE); | ||
884 | |||
885 | for (i = 0; i < NR_CPUS; i++) { | 885 | for (i = 0; i < NR_CPUS; i++) { |
886 | if (paca[i].lppaca.dyn_proc_status >= 2) | 886 | if (paca[i].lppaca.dyn_proc_status >= 2) |
887 | continue; | 887 | continue; |
@@ -908,6 +908,8 @@ void dt_cpus(struct iseries_flat_dt *dt) | |||
908 | 908 | ||
909 | dt_prop_u32(dt, "reg", i); | 909 | dt_prop_u32(dt, "reg", i); |
910 | 910 | ||
911 | dt_prop_u32_list(dt, "ibm,pft-size", pft_size, 2); | ||
912 | |||
911 | dt_end_node(dt); | 913 | dt_end_node(dt); |
912 | } | 914 | } |
913 | 915 | ||
@@ -984,3 +986,16 @@ static int __init early_parsemem(char *p) | |||
984 | return 0; | 986 | return 0; |
985 | } | 987 | } |
986 | early_param("mem", early_parsemem); | 988 | early_param("mem", early_parsemem); |
989 | |||
990 | static void hvputc(char c) | ||
991 | { | ||
992 | if (c == '\n') | ||
993 | hvputc('\r'); | ||
994 | |||
995 | HvCall_writeLogBuffer(&c, 1); | ||
996 | } | ||
997 | |||
998 | void __init udbg_init_iseries(void) | ||
999 | { | ||
1000 | udbg_putc = hvputc; | ||
1001 | } | ||
diff --git a/arch/powerpc/platforms/powermac/udbg_scc.c b/arch/powerpc/platforms/powermac/udbg_scc.c index e87d53acfb61..c4352a8db644 100644 --- a/arch/powerpc/platforms/powermac/udbg_scc.c +++ b/arch/powerpc/platforms/powermac/udbg_scc.c | |||
@@ -153,7 +153,7 @@ static void udbg_real_scc_putc(char c) | |||
153 | udbg_real_scc_putc('\r'); | 153 | udbg_real_scc_putc('\r'); |
154 | } | 154 | } |
155 | 155 | ||
156 | void udbg_init_pmac_realmode(void) | 156 | void __init udbg_init_pmac_realmode(void) |
157 | { | 157 | { |
158 | sccc = (volatile u8 __iomem *)0x80013020ul; | 158 | sccc = (volatile u8 __iomem *)0x80013020ul; |
159 | sccd = (volatile u8 __iomem *)0x80013030ul; | 159 | sccd = (volatile u8 __iomem *)0x80013030ul; |
diff --git a/arch/powerpc/sysdev/Makefile b/arch/powerpc/sysdev/Makefile index 14b9abde2d27..0ae841347a09 100644 --- a/arch/powerpc/sysdev/Makefile +++ b/arch/powerpc/sysdev/Makefile | |||
@@ -6,4 +6,4 @@ obj-$(CONFIG_BOOKE) += dcr.o | |||
6 | obj-$(CONFIG_40x) += dcr.o | 6 | obj-$(CONFIG_40x) += dcr.o |
7 | obj-$(CONFIG_U3_DART) += dart_iommu.o | 7 | obj-$(CONFIG_U3_DART) += dart_iommu.o |
8 | obj-$(CONFIG_MMIO_NVRAM) += mmio_nvram.o | 8 | obj-$(CONFIG_MMIO_NVRAM) += mmio_nvram.o |
9 | obj-$(CONFIG_83xx) += ipic.o | 9 | obj-$(CONFIG_PPC_83xx) += ipic.o |
diff --git a/arch/ppc/Kconfig b/arch/ppc/Kconfig index e396f4591d59..d65810108bc3 100644 --- a/arch/ppc/Kconfig +++ b/arch/ppc/Kconfig | |||
@@ -743,6 +743,10 @@ config MPC834x | |||
743 | bool | 743 | bool |
744 | default y if MPC834x_SYS | 744 | default y if MPC834x_SYS |
745 | 745 | ||
746 | config PPC_83xx | ||
747 | bool | ||
748 | default y if 83xx | ||
749 | |||
746 | config CPM1 | 750 | config CPM1 |
747 | bool | 751 | bool |
748 | depends on 8xx | 752 | depends on 8xx |
diff --git a/drivers/char/viocons.c b/drivers/char/viocons.c index cb82ebf4cb07..faee5e7acaf7 100644 --- a/drivers/char/viocons.c +++ b/drivers/char/viocons.c | |||
@@ -131,7 +131,7 @@ static void initDataEvent(struct viocharlpevent *viochar, HvLpIndex lp); | |||
131 | 131 | ||
132 | static struct tty_driver *viotty_driver; | 132 | static struct tty_driver *viotty_driver; |
133 | 133 | ||
134 | void hvlog(char *fmt, ...) | 134 | static void hvlog(char *fmt, ...) |
135 | { | 135 | { |
136 | int i; | 136 | int i; |
137 | unsigned long flags; | 137 | unsigned long flags; |
@@ -147,7 +147,7 @@ void hvlog(char *fmt, ...) | |||
147 | spin_unlock_irqrestore(&consoleloglock, flags); | 147 | spin_unlock_irqrestore(&consoleloglock, flags); |
148 | } | 148 | } |
149 | 149 | ||
150 | void hvlogOutput(const char *buf, int count) | 150 | static void hvlogOutput(const char *buf, int count) |
151 | { | 151 | { |
152 | unsigned long flags; | 152 | unsigned long flags; |
153 | int begin; | 153 | int begin; |
@@ -904,6 +904,7 @@ static void vioHandleData(struct HvLpEvent *event) | |||
904 | struct viocharlpevent *cevent = (struct viocharlpevent *)event; | 904 | struct viocharlpevent *cevent = (struct viocharlpevent *)event; |
905 | struct port_info *pi; | 905 | struct port_info *pi; |
906 | int index; | 906 | int index; |
907 | int num_pushed; | ||
907 | u8 port = cevent->virtual_device; | 908 | u8 port = cevent->virtual_device; |
908 | 909 | ||
909 | if (port >= VTTY_PORTS) { | 910 | if (port >= VTTY_PORTS) { |
@@ -964,6 +965,7 @@ static void vioHandleData(struct HvLpEvent *event) | |||
964 | * functionality will only work if built into the kernel and | 965 | * functionality will only work if built into the kernel and |
965 | * then only if sysrq is enabled through the proc filesystem. | 966 | * then only if sysrq is enabled through the proc filesystem. |
966 | */ | 967 | */ |
968 | num_pushed = 0; | ||
967 | for (index = 0; index < cevent->len; index++) { | 969 | for (index = 0; index < cevent->len; index++) { |
968 | #ifdef CONFIG_MAGIC_SYSRQ | 970 | #ifdef CONFIG_MAGIC_SYSRQ |
969 | if (sysrq_enabled) { | 971 | if (sysrq_enabled) { |
@@ -997,11 +999,10 @@ static void vioHandleData(struct HvLpEvent *event) | |||
997 | printk(VIOCONS_KERN_WARN "input buffer overflow!\n"); | 999 | printk(VIOCONS_KERN_WARN "input buffer overflow!\n"); |
998 | break; | 1000 | break; |
999 | } | 1001 | } |
1002 | num_pushed++; | ||
1000 | } | 1003 | } |
1001 | 1004 | ||
1002 | /* if cevent->len == 0 then no data was added to the buffer and flip.count == 0 */ | 1005 | if (num_pushed) |
1003 | if (tty->flip.count) | ||
1004 | /* The next call resets flip.count when the data is flushed. */ | ||
1005 | tty_flip_buffer_push(tty); | 1006 | tty_flip_buffer_push(tty); |
1006 | } | 1007 | } |
1007 | 1008 | ||
diff --git a/include/asm-powerpc/paca.h b/include/asm-powerpc/paca.h index 3ae52d9dc9ff..a64b4d425dab 100644 --- a/include/asm-powerpc/paca.h +++ b/include/asm-powerpc/paca.h | |||
@@ -65,6 +65,7 @@ struct paca_struct { | |||
65 | u64 stab_real; /* Absolute address of segment table */ | 65 | u64 stab_real; /* Absolute address of segment table */ |
66 | u64 stab_addr; /* Virtual address of segment table */ | 66 | u64 stab_addr; /* Virtual address of segment table */ |
67 | void *emergency_sp; /* pointer to emergency stack */ | 67 | void *emergency_sp; /* pointer to emergency stack */ |
68 | u64 data_offset; /* per cpu data offset */ | ||
68 | s16 hw_cpu_id; /* Physical processor number */ | 69 | s16 hw_cpu_id; /* Physical processor number */ |
69 | u8 cpu_start; /* At startup, processor spins until */ | 70 | u8 cpu_start; /* At startup, processor spins until */ |
70 | /* this becomes non-zero. */ | 71 | /* this becomes non-zero. */ |
diff --git a/include/asm-powerpc/page.h b/include/asm-powerpc/page.h index 76d7cb4b4ffc..0b82df483f7f 100644 --- a/include/asm-powerpc/page.h +++ b/include/asm-powerpc/page.h | |||
@@ -178,7 +178,7 @@ typedef unsigned long pmd_t; | |||
178 | #define pmd_val(x) (x) | 178 | #define pmd_val(x) (x) |
179 | #define __pmd(x) (x) | 179 | #define __pmd(x) (x) |
180 | 180 | ||
181 | #ifndef CONFIG_PPC_64K_PAGES | 181 | #if defined(CONFIG_PPC64) && !defined(CONFIG_PPC_64K_PAGES) |
182 | typedef unsigned long pud_t; | 182 | typedef unsigned long pud_t; |
183 | #define pud_val(x) (x) | 183 | #define pud_val(x) (x) |
184 | #define __pud(x) (x) | 184 | #define __pud(x) (x) |
diff --git a/include/asm-powerpc/parport.h b/include/asm-powerpc/parport.h index 897e49a88a6b..3fca21ddf546 100644 --- a/include/asm-powerpc/parport.h +++ b/include/asm-powerpc/parport.h | |||
@@ -10,10 +10,34 @@ | |||
10 | #define _ASM_POWERPC_PARPORT_H | 10 | #define _ASM_POWERPC_PARPORT_H |
11 | #ifdef __KERNEL__ | 11 | #ifdef __KERNEL__ |
12 | 12 | ||
13 | static int __devinit parport_pc_find_isa_ports (int autoirq, int autodma); | 13 | #include <asm/prom.h> |
14 | |||
15 | extern struct parport *parport_pc_probe_port (unsigned long int base, | ||
16 | unsigned long int base_hi, | ||
17 | int irq, int dma, | ||
18 | struct pci_dev *dev); | ||
19 | |||
14 | static int __devinit parport_pc_find_nonpci_ports (int autoirq, int autodma) | 20 | static int __devinit parport_pc_find_nonpci_ports (int autoirq, int autodma) |
15 | { | 21 | { |
16 | return parport_pc_find_isa_ports (autoirq, autodma); | 22 | struct device_node *np; |
23 | u32 *prop; | ||
24 | u32 io1, io2; | ||
25 | int propsize; | ||
26 | int count = 0; | ||
27 | for (np = NULL; (np = of_find_compatible_node(np, | ||
28 | "parallel", | ||
29 | "pnpPNP,400")) != NULL;) { | ||
30 | prop = (u32 *)get_property(np, "reg", &propsize); | ||
31 | if (!prop || propsize > 6*sizeof(u32)) | ||
32 | continue; | ||
33 | io1 = prop[1]; io2 = prop[2]; | ||
34 | prop = (u32 *)get_property(np, "interrupts", NULL); | ||
35 | if (!prop) | ||
36 | continue; | ||
37 | if (parport_pc_probe_port(io1, io2, prop[0], autodma, NULL) != NULL) | ||
38 | count++; | ||
39 | } | ||
40 | return count; | ||
17 | } | 41 | } |
18 | 42 | ||
19 | #endif /* __KERNEL__ */ | 43 | #endif /* __KERNEL__ */ |
diff --git a/include/asm-powerpc/percpu.h b/include/asm-powerpc/percpu.h index 06a959d67234..e31922c50e53 100644 --- a/include/asm-powerpc/percpu.h +++ b/include/asm-powerpc/percpu.h | |||
@@ -1 +1,57 @@ | |||
1 | #ifndef _ASM_POWERPC_PERCPU_H_ | ||
2 | #define _ASM_POWERPC_PERCPU_H_ | ||
3 | #ifdef __powerpc64__ | ||
4 | #include <linux/compiler.h> | ||
5 | |||
6 | /* | ||
7 | * Same as asm-generic/percpu.h, except that we store the per cpu offset | ||
8 | * in the paca. Based on the x86-64 implementation. | ||
9 | */ | ||
10 | |||
11 | #ifdef CONFIG_SMP | ||
12 | |||
13 | #include <asm/paca.h> | ||
14 | |||
15 | #define __per_cpu_offset(cpu) (paca[cpu].data_offset) | ||
16 | #define __my_cpu_offset() get_paca()->data_offset | ||
17 | |||
18 | /* Separate out the type, so (int[3], foo) works. */ | ||
19 | #define DEFINE_PER_CPU(type, name) \ | ||
20 | __attribute__((__section__(".data.percpu"))) __typeof__(type) per_cpu__##name | ||
21 | |||
22 | /* var is in discarded region: offset to particular copy we want */ | ||
23 | #define per_cpu(var, cpu) (*RELOC_HIDE(&per_cpu__##var, __per_cpu_offset(cpu))) | ||
24 | #define __get_cpu_var(var) (*RELOC_HIDE(&per_cpu__##var, __my_cpu_offset())) | ||
25 | |||
26 | /* A macro to avoid #include hell... */ | ||
27 | #define percpu_modcopy(pcpudst, src, size) \ | ||
28 | do { \ | ||
29 | unsigned int __i; \ | ||
30 | for (__i = 0; __i < NR_CPUS; __i++) \ | ||
31 | if (cpu_possible(__i)) \ | ||
32 | memcpy((pcpudst)+__per_cpu_offset(__i), \ | ||
33 | (src), (size)); \ | ||
34 | } while (0) | ||
35 | |||
36 | extern void setup_per_cpu_areas(void); | ||
37 | |||
38 | #else /* ! SMP */ | ||
39 | |||
40 | #define DEFINE_PER_CPU(type, name) \ | ||
41 | __typeof__(type) per_cpu__##name | ||
42 | |||
43 | #define per_cpu(var, cpu) (*((void)(cpu), &per_cpu__##var)) | ||
44 | #define __get_cpu_var(var) per_cpu__##var | ||
45 | |||
46 | #endif /* SMP */ | ||
47 | |||
48 | #define DECLARE_PER_CPU(type, name) extern __typeof__(type) per_cpu__##name | ||
49 | |||
50 | #define EXPORT_PER_CPU_SYMBOL(var) EXPORT_SYMBOL(per_cpu__##var) | ||
51 | #define EXPORT_PER_CPU_SYMBOL_GPL(var) EXPORT_SYMBOL_GPL(per_cpu__##var) | ||
52 | |||
53 | #else | ||
1 | #include <asm-generic/percpu.h> | 54 | #include <asm-generic/percpu.h> |
55 | #endif | ||
56 | |||
57 | #endif /* _ASM_POWERPC_PERCPU_H_ */ | ||
diff --git a/include/asm-powerpc/rtas.h b/include/asm-powerpc/rtas.h index 3428889e27b7..f43c6835e62a 100644 --- a/include/asm-powerpc/rtas.h +++ b/include/asm-powerpc/rtas.h | |||
@@ -161,7 +161,6 @@ extern struct rtas_t rtas; | |||
161 | extern void enter_rtas(unsigned long); | 161 | extern void enter_rtas(unsigned long); |
162 | extern int rtas_token(const char *service); | 162 | extern int rtas_token(const char *service); |
163 | extern int rtas_call(int token, int, int, int *, ...); | 163 | extern int rtas_call(int token, int, int, int *, ...); |
164 | extern void call_rtas_display_status(unsigned char); | ||
165 | extern void rtas_restart(char *cmd); | 164 | extern void rtas_restart(char *cmd); |
166 | extern void rtas_power_off(void); | 165 | extern void rtas_power_off(void); |
167 | extern void rtas_halt(void); | 166 | extern void rtas_halt(void); |
diff --git a/include/asm-powerpc/udbg.h b/include/asm-powerpc/udbg.h index 479f2d8ff74a..5c4236c342bb 100644 --- a/include/asm-powerpc/udbg.h +++ b/include/asm-powerpc/udbg.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * c 2001 PPC 64 Team, IBM Corp | 2 | * (c) 2001, 2006 IBM Corporation. |
3 | * | 3 | * |
4 | * This program is free software; you can redistribute it and/or | 4 | * This program is free software; you can redistribute it and/or |
5 | * modify it under the terms of the GNU General Public License | 5 | * modify it under the terms of the GNU General Public License |
@@ -36,5 +36,12 @@ extern void udbg_scc_init(int force_scc); | |||
36 | extern int udbg_adb_init(int force_btext); | 36 | extern int udbg_adb_init(int force_btext); |
37 | extern void udbg_adb_init_early(void); | 37 | extern void udbg_adb_init_early(void); |
38 | 38 | ||
39 | extern void __init udbg_early_init(void); | ||
40 | extern void __init udbg_init_debug_lpar(void); | ||
41 | extern void __init udbg_init_pmac_realmode(void); | ||
42 | extern void __init udbg_init_maple_realmode(void); | ||
43 | extern void __init udbg_init_iseries(void); | ||
44 | extern void __init udbg_init_rtas(void); | ||
45 | |||
39 | #endif /* __KERNEL__ */ | 46 | #endif /* __KERNEL__ */ |
40 | #endif /* _ASM_POWERPC_UDBG_H */ | 47 | #endif /* _ASM_POWERPC_UDBG_H */ |