diff options
Diffstat (limited to 'arch/powerpc')
144 files changed, 17784 insertions, 1456 deletions
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index d6abe495c6b0..f08e80a0bf0a 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig | |||
@@ -173,6 +173,11 @@ config PPC_86xx | |||
173 | help | 173 | help |
174 | The Freescale E600 SoCs have 74xx cores. | 174 | The Freescale E600 SoCs have 74xx cores. |
175 | 175 | ||
176 | config PPC_8xx | ||
177 | bool "Freescale 8xx" | ||
178 | select FSL_SOC | ||
179 | select 8xx | ||
180 | |||
176 | config 40x | 181 | config 40x |
177 | bool "AMCC 40x" | 182 | bool "AMCC 40x" |
178 | select PPC_DCR_NATIVE | 183 | select PPC_DCR_NATIVE |
@@ -181,8 +186,6 @@ config 44x | |||
181 | bool "AMCC 44x" | 186 | bool "AMCC 44x" |
182 | select PPC_DCR_NATIVE | 187 | select PPC_DCR_NATIVE |
183 | 188 | ||
184 | config 8xx | ||
185 | bool "Freescale 8xx" | ||
186 | 189 | ||
187 | config E200 | 190 | config E200 |
188 | bool "Freescale e200" | 191 | bool "Freescale e200" |
@@ -211,6 +214,10 @@ config 6xx | |||
211 | bool | 214 | bool |
212 | 215 | ||
213 | # this is temp to handle compat with arch=ppc | 216 | # this is temp to handle compat with arch=ppc |
217 | config 8xx | ||
218 | bool | ||
219 | |||
220 | # this is temp to handle compat with arch=ppc | ||
214 | config 83xx | 221 | config 83xx |
215 | bool | 222 | bool |
216 | 223 | ||
@@ -429,6 +436,21 @@ config PPC_MPC52xx | |||
429 | bool | 436 | bool |
430 | default n | 437 | default n |
431 | 438 | ||
439 | config PPC_MPC5200 | ||
440 | bool | ||
441 | select PPC_MPC52xx | ||
442 | default n | ||
443 | |||
444 | config PPC_MPC5200_BUGFIX | ||
445 | bool "MPC5200 (L25R) bugfix support" | ||
446 | depends on PPC_MPC5200 | ||
447 | default n | ||
448 | help | ||
449 | Enable workarounds for original MPC5200 errata. This is not required | ||
450 | for MPC5200B based boards. | ||
451 | |||
452 | It is safe to say 'Y' here | ||
453 | |||
432 | config PPC_EFIKA | 454 | config PPC_EFIKA |
433 | bool "bPlan Efika 5k2. MPC5200B based computer" | 455 | bool "bPlan Efika 5k2. MPC5200B based computer" |
434 | depends on PPC_MULTIPLATFORM && PPC32 | 456 | depends on PPC_MULTIPLATFORM && PPC32 |
@@ -441,7 +463,7 @@ config PPC_EFIKA | |||
441 | config PPC_LITE5200 | 463 | config PPC_LITE5200 |
442 | bool "Freescale Lite5200 Eval Board" | 464 | bool "Freescale Lite5200 Eval Board" |
443 | depends on PPC_MULTIPLATFORM && PPC32 | 465 | depends on PPC_MULTIPLATFORM && PPC32 |
444 | select PPC_MPC52xx | 466 | select PPC_MPC5200 |
445 | default n | 467 | default n |
446 | 468 | ||
447 | config PPC_PMAC | 469 | config PPC_PMAC |
@@ -484,6 +506,7 @@ config PPC_MAPLE | |||
484 | select PPC_970_NAP | 506 | select PPC_970_NAP |
485 | select PPC_NATIVE | 507 | select PPC_NATIVE |
486 | select PPC_RTAS | 508 | select PPC_RTAS |
509 | select MMIO_NVRAM | ||
487 | select ATA_NONSTANDARD if ATA | 510 | select ATA_NONSTANDARD if ATA |
488 | default n | 511 | default n |
489 | help | 512 | help |
@@ -529,6 +552,11 @@ config PPC_PS3 | |||
529 | bool "Sony PS3 (incomplete)" | 552 | bool "Sony PS3 (incomplete)" |
530 | depends on PPC_MULTIPLATFORM && PPC64 | 553 | depends on PPC_MULTIPLATFORM && PPC64 |
531 | select PPC_CELL | 554 | select PPC_CELL |
555 | select USB_ARCH_HAS_OHCI | ||
556 | select USB_OHCI_LITTLE_ENDIAN | ||
557 | select USB_OHCI_BIG_ENDIAN_MMIO | ||
558 | select USB_ARCH_HAS_EHCI | ||
559 | select USB_EHCI_BIG_ENDIAN_MMIO | ||
532 | help | 560 | help |
533 | This option enables support for the Sony PS3 game console | 561 | This option enables support for the Sony PS3 game console |
534 | and other platforms using the PS3 hypervisor. | 562 | and other platforms using the PS3 hypervisor. |
@@ -536,6 +564,16 @@ config PPC_PS3 | |||
536 | enabling this will not result in a bootable kernel on a | 564 | enabling this will not result in a bootable kernel on a |
537 | PS3 system. | 565 | PS3 system. |
538 | 566 | ||
567 | config PPC_CELLEB | ||
568 | bool "Toshiba's Cell Reference Set 'Celleb' Architecture" | ||
569 | depends on PPC_MULTIPLATFORM && PPC64 | ||
570 | select PPC_CELL | ||
571 | select PPC_OF_PLATFORM_PCI | ||
572 | select HAS_TXX9_SERIAL | ||
573 | select PPC_UDBG_BEAT | ||
574 | select USB_OHCI_BIG_ENDIAN_MMIO | ||
575 | select USB_EHCI_BIG_ENDIAN_MMIO | ||
576 | |||
539 | config PPC_NATIVE | 577 | config PPC_NATIVE |
540 | bool | 578 | bool |
541 | depends on PPC_MULTIPLATFORM | 579 | depends on PPC_MULTIPLATFORM |
@@ -549,6 +587,11 @@ config UDBG_RTAS_CONSOLE | |||
549 | depends on PPC_RTAS | 587 | depends on PPC_RTAS |
550 | default n | 588 | default n |
551 | 589 | ||
590 | config PPC_UDBG_BEAT | ||
591 | bool "BEAT based debug console" | ||
592 | depends on PPC_CELLEB | ||
593 | default n | ||
594 | |||
552 | config XICS | 595 | config XICS |
553 | depends on PPC_PSERIES | 596 | depends on PPC_PSERIES |
554 | bool | 597 | bool |
@@ -702,6 +745,7 @@ source arch/powerpc/platforms/86xx/Kconfig | |||
702 | source arch/powerpc/platforms/8xx/Kconfig | 745 | source arch/powerpc/platforms/8xx/Kconfig |
703 | source arch/powerpc/platforms/cell/Kconfig | 746 | source arch/powerpc/platforms/cell/Kconfig |
704 | source arch/powerpc/platforms/ps3/Kconfig | 747 | source arch/powerpc/platforms/ps3/Kconfig |
748 | source arch/powerpc/platforms/pasemi/Kconfig | ||
705 | 749 | ||
706 | menu "Kernel options" | 750 | menu "Kernel options" |
707 | 751 | ||
@@ -724,7 +768,7 @@ config FORCE_MAX_ZONEORDER | |||
724 | 768 | ||
725 | config MATH_EMULATION | 769 | config MATH_EMULATION |
726 | bool "Math emulation" | 770 | bool "Math emulation" |
727 | depends on 4xx || 8xx || E200 || PPC_83xx || E500 | 771 | depends on 4xx || 8xx || E200 || PPC_MPC832x || E500 |
728 | ---help--- | 772 | ---help--- |
729 | Some PowerPC chips designed for embedded applications do not have | 773 | Some PowerPC chips designed for embedded applications do not have |
730 | a floating-point unit and therefore do not implement the | 774 | a floating-point unit and therefore do not implement the |
@@ -1182,7 +1226,7 @@ source "arch/powerpc/oprofile/Kconfig" | |||
1182 | 1226 | ||
1183 | config KPROBES | 1227 | config KPROBES |
1184 | bool "Kprobes (EXPERIMENTAL)" | 1228 | bool "Kprobes (EXPERIMENTAL)" |
1185 | depends on PPC64 && KALLSYMS && EXPERIMENTAL && MODULES | 1229 | depends on !BOOKE && !4xx && KALLSYMS && EXPERIMENTAL && MODULES |
1186 | help | 1230 | help |
1187 | Kprobes allows you to trap at almost any kernel address and | 1231 | Kprobes allows you to trap at almost any kernel address and |
1188 | execute a callback function. register_kprobe() establishes | 1232 | execute a callback function. register_kprobe() establishes |
diff --git a/arch/powerpc/Kconfig.debug b/arch/powerpc/Kconfig.debug index f0e51edde022..d39d13327e6d 100644 --- a/arch/powerpc/Kconfig.debug +++ b/arch/powerpc/Kconfig.debug | |||
@@ -4,14 +4,14 @@ source "lib/Kconfig.debug" | |||
4 | 4 | ||
5 | config DEBUG_STACKOVERFLOW | 5 | config DEBUG_STACKOVERFLOW |
6 | bool "Check for stack overflows" | 6 | bool "Check for stack overflows" |
7 | depends on DEBUG_KERNEL && PPC64 | 7 | depends on DEBUG_KERNEL |
8 | help | 8 | help |
9 | This option will cause messages to be printed if free stack space | 9 | This option will cause messages to be printed if free stack space |
10 | drops below a certain limit. | 10 | drops below a certain limit. |
11 | 11 | ||
12 | config DEBUG_STACK_USAGE | 12 | config DEBUG_STACK_USAGE |
13 | bool "Stack utilization instrumentation" | 13 | bool "Stack utilization instrumentation" |
14 | depends on DEBUG_KERNEL && PPC64 | 14 | depends on DEBUG_KERNEL |
15 | help | 15 | help |
16 | Enables the display of the minimum amount of free stack which each | 16 | Enables the display of the minimum amount of free stack which each |
17 | task has ever had available in the sysrq-T and sysrq-P debug output. | 17 | task has ever had available in the sysrq-T and sysrq-P debug output. |
@@ -185,6 +185,20 @@ config PPC_EARLY_DEBUG_ISERIES | |||
185 | Select this to enable early debugging for legacy iSeries. You need | 185 | Select this to enable early debugging for legacy iSeries. You need |
186 | to hit "Ctrl-x Ctrl-x" to see the messages on the console. | 186 | to hit "Ctrl-x Ctrl-x" to see the messages on the console. |
187 | 187 | ||
188 | config PPC_EARLY_DEBUG_PAS_REALMODE | ||
189 | bool "PA Semi real mode" | ||
190 | depends on PPC_PASEMI | ||
191 | help | ||
192 | Select this to enable early debugging for PA Semi. | ||
193 | Output will be on UART0. | ||
194 | |||
195 | config PPC_EARLY_DEBUG_BEAT | ||
196 | bool "Beat HV Console" | ||
197 | depends on PPC_CELLEB | ||
198 | select PPC_UDBG_BEAT | ||
199 | help | ||
200 | Select this to enable early debugging for Celleb with Beat. | ||
201 | |||
188 | endchoice | 202 | endchoice |
189 | 203 | ||
190 | endmenu | 204 | endmenu |
diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile index 98392fb5f581..dc779407de14 100644 --- a/arch/powerpc/boot/Makefile +++ b/arch/powerpc/boot/Makefile | |||
@@ -162,6 +162,7 @@ image-$(CONFIG_PPC_PSERIES) += zImage.pseries | |||
162 | image-$(CONFIG_PPC_MAPLE) += zImage.pseries | 162 | image-$(CONFIG_PPC_MAPLE) += zImage.pseries |
163 | image-$(CONFIG_PPC_IBM_CELL_BLADE) += zImage.pseries | 163 | image-$(CONFIG_PPC_IBM_CELL_BLADE) += zImage.pseries |
164 | image-$(CONFIG_PPC_PS3) += zImage.ps3 | 164 | image-$(CONFIG_PPC_PS3) += zImage.ps3 |
165 | image-$(CONFIG_PPC_CELLEB) += zImage.pseries | ||
165 | image-$(CONFIG_PPC_CHRP) += zImage.chrp | 166 | image-$(CONFIG_PPC_CHRP) += zImage.chrp |
166 | image-$(CONFIG_PPC_EFIKA) += zImage.chrp | 167 | image-$(CONFIG_PPC_EFIKA) += zImage.chrp |
167 | image-$(CONFIG_PPC_PMAC) += zImage.pmac | 168 | image-$(CONFIG_PPC_PMAC) += zImage.pmac |
diff --git a/arch/powerpc/boot/dts/mpc8272ads.dts b/arch/powerpc/boot/dts/mpc8272ads.dts index 34efdd028c4f..26b44f7513dc 100644 --- a/arch/powerpc/boot/dts/mpc8272ads.dts +++ b/arch/powerpc/boot/dts/mpc8272ads.dts | |||
@@ -53,13 +53,20 @@ | |||
53 | reg = <00000000 4000000 f4500000 00000020>; | 53 | reg = <00000000 4000000 f4500000 00000020>; |
54 | }; | 54 | }; |
55 | 55 | ||
56 | chosen { | ||
57 | name = "chosen"; | ||
58 | linux,platform = <0>; | ||
59 | interrupt-controller = <10c00>; | ||
60 | linux,phandle = <400>; | ||
61 | }; | ||
62 | |||
56 | soc8272@f0000000 { | 63 | soc8272@f0000000 { |
57 | #address-cells = <1>; | 64 | #address-cells = <1>; |
58 | #size-cells = <1>; | 65 | #size-cells = <1>; |
59 | #interrupt-cells = <2>; | 66 | #interrupt-cells = <2>; |
60 | device_type = "soc"; | 67 | device_type = "soc"; |
61 | ranges = < 0 0 2 00000000 f0000000 00053000>; | 68 | ranges = <00000000 f0000000 00053000>; |
62 | reg = <f0000000 0>; | 69 | reg = <f0000000 10000>; |
63 | 70 | ||
64 | mdio@0 { | 71 | mdio@0 { |
65 | device_type = "mdio"; | 72 | device_type = "mdio"; |
@@ -71,7 +78,7 @@ | |||
71 | ethernet-phy@0 { | 78 | ethernet-phy@0 { |
72 | linux,phandle = <2452000>; | 79 | linux,phandle = <2452000>; |
73 | interrupt-parent = <10c00>; | 80 | interrupt-parent = <10c00>; |
74 | interrupts = <19 1>; | 81 | interrupts = <17 4>; |
75 | reg = <0>; | 82 | reg = <0>; |
76 | bitbang = [ 12 12 13 02 02 01 ]; | 83 | bitbang = [ 12 12 13 02 02 01 ]; |
77 | device_type = "ethernet-phy"; | 84 | device_type = "ethernet-phy"; |
@@ -79,7 +86,7 @@ | |||
79 | ethernet-phy@1 { | 86 | ethernet-phy@1 { |
80 | linux,phandle = <2452001>; | 87 | linux,phandle = <2452001>; |
81 | interrupt-parent = <10c00>; | 88 | interrupt-parent = <10c00>; |
82 | interrupts = <19 1>; | 89 | interrupts = <17 4>; |
83 | bitbang = [ 12 12 13 02 02 01 ]; | 90 | bitbang = [ 12 12 13 02 02 01 ]; |
84 | reg = <3>; | 91 | reg = <3>; |
85 | device_type = "ethernet-phy"; | 92 | device_type = "ethernet-phy"; |
@@ -90,7 +97,7 @@ | |||
90 | #address-cells = <1>; | 97 | #address-cells = <1>; |
91 | #size-cells = <0>; | 98 | #size-cells = <0>; |
92 | device_type = "network"; | 99 | device_type = "network"; |
93 | device-id = <2>; | 100 | device-id = <1>; |
94 | compatible = "fs_enet"; | 101 | compatible = "fs_enet"; |
95 | model = "FCC"; | 102 | model = "FCC"; |
96 | reg = <11300 20 8400 100 11380 30>; | 103 | reg = <11300 20 8400 100 11380 30>; |
@@ -104,7 +111,7 @@ | |||
104 | 111 | ||
105 | ethernet@25000 { | 112 | ethernet@25000 { |
106 | device_type = "network"; | 113 | device_type = "network"; |
107 | device-id = <3>; | 114 | device-id = <2>; |
108 | compatible = "fs_enet"; | 115 | compatible = "fs_enet"; |
109 | model = "FCC"; | 116 | model = "FCC"; |
110 | reg = <11320 20 8500 100 113b0 30>; | 117 | reg = <11320 20 8500 100 113b0 30>; |
@@ -123,8 +130,8 @@ | |||
123 | #interrupt-cells = <2>; | 130 | #interrupt-cells = <2>; |
124 | device_type = "cpm"; | 131 | device_type = "cpm"; |
125 | model = "CPM2"; | 132 | model = "CPM2"; |
126 | ranges = <00000000 00000000 3ffff>; | 133 | ranges = <00000000 00000000 20000>; |
127 | reg = <10d80 3280>; | 134 | reg = <0 20000>; |
128 | command-proc = <119c0>; | 135 | command-proc = <119c0>; |
129 | brg-frequency = <17D7840>; | 136 | brg-frequency = <17D7840>; |
130 | cpm_clk = <BEBC200>; | 137 | cpm_clk = <BEBC200>; |
@@ -133,7 +140,7 @@ | |||
133 | device_type = "serial"; | 140 | device_type = "serial"; |
134 | compatible = "cpm_uart"; | 141 | compatible = "cpm_uart"; |
135 | model = "SCC"; | 142 | model = "SCC"; |
136 | device-id = <2>; | 143 | device-id = <1>; |
137 | reg = <11a00 20 8000 100>; | 144 | reg = <11a00 20 8000 100>; |
138 | current-speed = <1c200>; | 145 | current-speed = <1c200>; |
139 | interrupts = <28 2>; | 146 | interrupts = <28 2>; |
@@ -147,7 +154,7 @@ | |||
147 | device_type = "serial"; | 154 | device_type = "serial"; |
148 | compatible = "cpm_uart"; | 155 | compatible = "cpm_uart"; |
149 | model = "SCC"; | 156 | model = "SCC"; |
150 | device-id = <5>; | 157 | device-id = <4>; |
151 | reg = <11a60 20 8300 100>; | 158 | reg = <11a60 20 8300 100>; |
152 | current-speed = <1c200>; | 159 | current-speed = <1c200>; |
153 | interrupts = <2b 2>; | 160 | interrupts = <2b 2>; |
@@ -181,24 +188,24 @@ | |||
181 | interrupt-map = < | 188 | interrupt-map = < |
182 | 189 | ||
183 | /* IDSEL 0x16 */ | 190 | /* IDSEL 0x16 */ |
184 | b000 0 0 1 f8200000 40 0 | 191 | b000 0 0 1 f8200000 40 8 |
185 | b000 0 0 2 f8200000 41 0 | 192 | b000 0 0 2 f8200000 41 8 |
186 | b000 0 0 3 f8200000 42 0 | 193 | b000 0 0 3 f8200000 42 8 |
187 | b000 0 0 4 f8200000 43 0 | 194 | b000 0 0 4 f8200000 43 8 |
188 | 195 | ||
189 | /* IDSEL 0x17 */ | 196 | /* IDSEL 0x17 */ |
190 | b800 0 0 1 f8200000 43 0 | 197 | b800 0 0 1 f8200000 43 8 |
191 | b800 0 0 2 f8200000 40 0 | 198 | b800 0 0 2 f8200000 40 8 |
192 | b800 0 0 3 f8200000 41 0 | 199 | b800 0 0 3 f8200000 41 8 |
193 | b800 0 0 4 f8200000 42 0 | 200 | b800 0 0 4 f8200000 42 8 |
194 | 201 | ||
195 | /* IDSEL 0x18 */ | 202 | /* IDSEL 0x18 */ |
196 | c000 0 0 1 f8200000 42 0 | 203 | c000 0 0 1 f8200000 42 8 |
197 | c000 0 0 2 f8200000 43 0 | 204 | c000 0 0 2 f8200000 43 8 |
198 | c000 0 0 3 f8200000 40 0 | 205 | c000 0 0 3 f8200000 40 8 |
199 | c000 0 0 4 f8200000 41 0>; | 206 | c000 0 0 4 f8200000 41 8>; |
200 | interrupt-parent = <10c00>; | 207 | interrupt-parent = <10c00>; |
201 | interrupts = <14 3>; | 208 | interrupts = <14 8>; |
202 | bus-range = <0 0>; | 209 | bus-range = <0 0>; |
203 | ranges = <02000000 0 80000000 80000000 0 40000000 | 210 | ranges = <02000000 0 80000000 80000000 0 40000000 |
204 | 01000000 0 00000000 f6000000 0 02000000>; | 211 | 01000000 0 00000000 f6000000 0 02000000>; |
@@ -210,7 +217,7 @@ | |||
210 | model = "SEC2"; | 217 | model = "SEC2"; |
211 | compatible = "talitos"; | 218 | compatible = "talitos"; |
212 | reg = <30000 10000>; | 219 | reg = <30000 10000>; |
213 | interrupts = <b 0>; | 220 | interrupts = <b 2>; |
214 | interrupt-parent = <10c00>; | 221 | interrupt-parent = <10c00>; |
215 | num-channels = <4>; | 222 | num-channels = <4>; |
216 | channel-fifo-len = <18>; | 223 | channel-fifo-len = <18>; |
diff --git a/arch/powerpc/boot/dts/mpc8323emds.dts b/arch/powerpc/boot/dts/mpc8323emds.dts new file mode 100644 index 000000000000..fa7ef24d205b --- /dev/null +++ b/arch/powerpc/boot/dts/mpc8323emds.dts | |||
@@ -0,0 +1,345 @@ | |||
1 | /* | ||
2 | * MPC8323E EMDS Device Tree Source | ||
3 | * | ||
4 | * Copyright 2006 Freescale Semiconductor Inc. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify it | ||
7 | * under the terms of the GNU General Public License as published by the | ||
8 | * Free Software Foundation; either version 2 of the License, or (at your | ||
9 | * option) any later version. | ||
10 | */ | ||
11 | |||
12 | / { | ||
13 | model = "MPC8323EMDS"; | ||
14 | compatible = "MPC83xx"; | ||
15 | #address-cells = <1>; | ||
16 | #size-cells = <1>; | ||
17 | linux,phandle = <100>; | ||
18 | |||
19 | cpus { | ||
20 | #cpus = <1>; | ||
21 | #address-cells = <1>; | ||
22 | #size-cells = <0>; | ||
23 | linux,phandle = <200>; | ||
24 | |||
25 | PowerPC,8323@0 { | ||
26 | device_type = "cpu"; | ||
27 | reg = <0>; | ||
28 | d-cache-line-size = <20>; // 32 bytes | ||
29 | i-cache-line-size = <20>; // 32 bytes | ||
30 | d-cache-size = <4000>; // L1, 16K | ||
31 | i-cache-size = <4000>; // L1, 16K | ||
32 | timebase-frequency = <0>; | ||
33 | bus-frequency = <0>; | ||
34 | clock-frequency = <0>; | ||
35 | 32-bit; | ||
36 | linux,phandle = <201>; | ||
37 | linux,boot-cpu; | ||
38 | }; | ||
39 | }; | ||
40 | |||
41 | memory { | ||
42 | device_type = "memory"; | ||
43 | linux,phandle = <300>; | ||
44 | reg = <00000000 08000000>; | ||
45 | }; | ||
46 | |||
47 | bcsr@f8000000 { | ||
48 | device_type = "board-control"; | ||
49 | reg = <f8000000 8000>; | ||
50 | }; | ||
51 | |||
52 | soc8323@e0000000 { | ||
53 | #address-cells = <1>; | ||
54 | #size-cells = <1>; | ||
55 | #interrupt-cells = <2>; | ||
56 | device_type = "soc"; | ||
57 | ranges = <0 e0000000 00100000>; | ||
58 | reg = <e0000000 00000200>; | ||
59 | bus-frequency = <7DE2900>; | ||
60 | |||
61 | wdt@200 { | ||
62 | device_type = "watchdog"; | ||
63 | compatible = "mpc83xx_wdt"; | ||
64 | reg = <200 100>; | ||
65 | }; | ||
66 | |||
67 | i2c@3000 { | ||
68 | device_type = "i2c"; | ||
69 | compatible = "fsl-i2c"; | ||
70 | reg = <3000 100>; | ||
71 | interrupts = <e 8>; | ||
72 | interrupt-parent = <700>; | ||
73 | dfsrr; | ||
74 | }; | ||
75 | |||
76 | serial@4500 { | ||
77 | device_type = "serial"; | ||
78 | compatible = "ns16550"; | ||
79 | reg = <4500 100>; | ||
80 | clock-frequency = <0>; | ||
81 | interrupts = <9 8>; | ||
82 | interrupt-parent = <700>; | ||
83 | }; | ||
84 | |||
85 | serial@4600 { | ||
86 | device_type = "serial"; | ||
87 | compatible = "ns16550"; | ||
88 | reg = <4600 100>; | ||
89 | clock-frequency = <0>; | ||
90 | interrupts = <a 8>; | ||
91 | interrupt-parent = <700>; | ||
92 | }; | ||
93 | |||
94 | crypto@30000 { | ||
95 | device_type = "crypto"; | ||
96 | model = "SEC2"; | ||
97 | compatible = "talitos"; | ||
98 | reg = <30000 7000>; | ||
99 | interrupts = <b 8>; | ||
100 | interrupt-parent = <700>; | ||
101 | /* Rev. 2.2 */ | ||
102 | num-channels = <1>; | ||
103 | channel-fifo-len = <18>; | ||
104 | exec-units-mask = <0000004c>; | ||
105 | descriptor-types-mask = <0122003f>; | ||
106 | }; | ||
107 | |||
108 | pci@8500 { | ||
109 | linux,phandle = <8500>; | ||
110 | interrupt-map-mask = <f800 0 0 7>; | ||
111 | interrupt-map = < | ||
112 | /* IDSEL 0x11 AD17 */ | ||
113 | 8800 0 0 1 700 14 8 | ||
114 | 8800 0 0 2 700 15 8 | ||
115 | 8800 0 0 3 700 16 8 | ||
116 | 8800 0 0 4 700 17 8 | ||
117 | |||
118 | /* IDSEL 0x12 AD18 */ | ||
119 | 9000 0 0 1 700 16 8 | ||
120 | 9000 0 0 2 700 17 8 | ||
121 | 9000 0 0 3 700 14 8 | ||
122 | 9000 0 0 4 700 15 8 | ||
123 | |||
124 | /* IDSEL 0x13 AD19 */ | ||
125 | 9800 0 0 1 700 17 8 | ||
126 | 9800 0 0 2 700 14 8 | ||
127 | 9800 0 0 3 700 15 8 | ||
128 | 9800 0 0 4 700 16 8 | ||
129 | |||
130 | /* IDSEL 0x15 AD21*/ | ||
131 | a800 0 0 1 700 14 8 | ||
132 | a800 0 0 2 700 15 8 | ||
133 | a800 0 0 3 700 16 8 | ||
134 | a800 0 0 4 700 17 8 | ||
135 | |||
136 | /* IDSEL 0x16 AD22*/ | ||
137 | b000 0 0 1 700 17 8 | ||
138 | b000 0 0 2 700 14 8 | ||
139 | b000 0 0 3 700 15 8 | ||
140 | b000 0 0 4 700 16 8 | ||
141 | |||
142 | /* IDSEL 0x17 AD23*/ | ||
143 | b800 0 0 1 700 16 8 | ||
144 | b800 0 0 2 700 17 8 | ||
145 | b800 0 0 3 700 14 8 | ||
146 | b800 0 0 4 700 15 8 | ||
147 | |||
148 | /* IDSEL 0x18 AD24*/ | ||
149 | c000 0 0 1 700 15 8 | ||
150 | c000 0 0 2 700 16 8 | ||
151 | c000 0 0 3 700 17 8 | ||
152 | c000 0 0 4 700 14 8>; | ||
153 | interrupt-parent = <700>; | ||
154 | interrupts = <42 8>; | ||
155 | bus-range = <0 0>; | ||
156 | ranges = <02000000 0 a0000000 90000000 0 10000000 | ||
157 | 42000000 0 80000000 80000000 0 10000000 | ||
158 | 01000000 0 00000000 d0000000 0 00100000>; | ||
159 | clock-frequency = <0>; | ||
160 | #interrupt-cells = <1>; | ||
161 | #size-cells = <2>; | ||
162 | #address-cells = <3>; | ||
163 | reg = <8500 100>; | ||
164 | compatible = "83xx"; | ||
165 | device_type = "pci"; | ||
166 | }; | ||
167 | |||
168 | pic@700 { | ||
169 | linux,phandle = <700>; | ||
170 | interrupt-controller; | ||
171 | #address-cells = <0>; | ||
172 | #interrupt-cells = <2>; | ||
173 | reg = <700 100>; | ||
174 | built-in; | ||
175 | device_type = "ipic"; | ||
176 | }; | ||
177 | |||
178 | par_io@1400 { | ||
179 | reg = <1400 100>; | ||
180 | device_type = "par_io"; | ||
181 | num-ports = <7>; | ||
182 | |||
183 | ucc_pin@03 { | ||
184 | linux,phandle = <140003>; | ||
185 | pio-map = < | ||
186 | /* port pin dir open_drain assignment has_irq */ | ||
187 | 3 4 3 0 2 0 /* MDIO */ | ||
188 | 3 5 1 0 2 0 /* MDC */ | ||
189 | 0 d 2 0 1 0 /* RX_CLK (CLK9) */ | ||
190 | 3 18 2 0 1 0 /* TX_CLK (CLK10) */ | ||
191 | 1 1 1 0 1 0 /* TxD1 */ | ||
192 | 1 0 1 0 1 0 /* TxD0 */ | ||
193 | 1 1 1 0 1 0 /* TxD1 */ | ||
194 | 1 2 1 0 1 0 /* TxD2 */ | ||
195 | 1 3 1 0 1 0 /* TxD3 */ | ||
196 | 1 4 2 0 1 0 /* RxD0 */ | ||
197 | 1 5 2 0 1 0 /* RxD1 */ | ||
198 | 1 6 2 0 1 0 /* RxD2 */ | ||
199 | 1 7 2 0 1 0 /* RxD3 */ | ||
200 | 1 8 2 0 1 0 /* RX_ER */ | ||
201 | 1 9 1 0 1 0 /* TX_ER */ | ||
202 | 1 a 2 0 1 0 /* RX_DV */ | ||
203 | 1 b 2 0 1 0 /* COL */ | ||
204 | 1 c 1 0 1 0 /* TX_EN */ | ||
205 | 1 d 2 0 1 0>;/* CRS */ | ||
206 | }; | ||
207 | ucc_pin@04 { | ||
208 | linux,phandle = <140004>; | ||
209 | pio-map = < | ||
210 | /* port pin dir open_drain assignment has_irq */ | ||
211 | 3 1f 2 0 1 0 /* RX_CLK (CLK7) */ | ||
212 | 3 6 2 0 1 0 /* TX_CLK (CLK8) */ | ||
213 | 1 12 1 0 1 0 /* TxD0 */ | ||
214 | 1 13 1 0 1 0 /* TxD1 */ | ||
215 | 1 14 1 0 1 0 /* TxD2 */ | ||
216 | 1 15 1 0 1 0 /* TxD3 */ | ||
217 | 1 16 2 0 1 0 /* RxD0 */ | ||
218 | 1 17 2 0 1 0 /* RxD1 */ | ||
219 | 1 18 2 0 1 0 /* RxD2 */ | ||
220 | 1 19 2 0 1 0 /* RxD3 */ | ||
221 | 1 1a 2 0 1 0 /* RX_ER */ | ||
222 | 1 1b 1 0 1 0 /* TX_ER */ | ||
223 | 1 1c 2 0 1 0 /* RX_DV */ | ||
224 | 1 1d 2 0 1 0 /* COL */ | ||
225 | 1 1e 1 0 1 0 /* TX_EN */ | ||
226 | 1 1f 2 0 1 0>;/* CRS */ | ||
227 | }; | ||
228 | }; | ||
229 | }; | ||
230 | |||
231 | qe@e0100000 { | ||
232 | #address-cells = <1>; | ||
233 | #size-cells = <1>; | ||
234 | device_type = "qe"; | ||
235 | model = "QE"; | ||
236 | ranges = <0 e0100000 00100000>; | ||
237 | reg = <e0100000 480>; | ||
238 | brg-frequency = <0>; | ||
239 | bus-frequency = <BCD3D80>; | ||
240 | |||
241 | muram@10000 { | ||
242 | device_type = "muram"; | ||
243 | ranges = <0 00010000 00004000>; | ||
244 | |||
245 | data-only@0 { | ||
246 | reg = <0 4000>; | ||
247 | }; | ||
248 | }; | ||
249 | |||
250 | spi@4c0 { | ||
251 | device_type = "spi"; | ||
252 | compatible = "fsl_spi"; | ||
253 | reg = <4c0 40>; | ||
254 | interrupts = <2>; | ||
255 | interrupt-parent = <80>; | ||
256 | mode = "cpu"; | ||
257 | }; | ||
258 | |||
259 | spi@500 { | ||
260 | device_type = "spi"; | ||
261 | compatible = "fsl_spi"; | ||
262 | reg = <500 40>; | ||
263 | interrupts = <1>; | ||
264 | interrupt-parent = <80>; | ||
265 | mode = "cpu"; | ||
266 | }; | ||
267 | |||
268 | usb@6c0 { | ||
269 | device_type = "usb"; | ||
270 | compatible = "qe_udc"; | ||
271 | reg = <6c0 40 8B00 100>; | ||
272 | interrupts = <b>; | ||
273 | interrupt-parent = <80>; | ||
274 | mode = "slave"; | ||
275 | }; | ||
276 | |||
277 | ucc@2200 { | ||
278 | device_type = "network"; | ||
279 | compatible = "ucc_geth"; | ||
280 | model = "UCC"; | ||
281 | device-id = <3>; | ||
282 | reg = <2200 200>; | ||
283 | interrupts = <22>; | ||
284 | interrupt-parent = <80>; | ||
285 | mac-address = [ 00 04 9f 00 23 23 ]; | ||
286 | rx-clock = <19>; | ||
287 | tx-clock = <1a>; | ||
288 | phy-handle = <212003>; | ||
289 | pio-handle = <140003>; | ||
290 | }; | ||
291 | |||
292 | ucc@3200 { | ||
293 | device_type = "network"; | ||
294 | compatible = "ucc_geth"; | ||
295 | model = "UCC"; | ||
296 | device-id = <4>; | ||
297 | reg = <3000 200>; | ||
298 | interrupts = <23>; | ||
299 | interrupt-parent = <80>; | ||
300 | mac-address = [ 00 11 22 33 44 55 ]; | ||
301 | rx-clock = <17>; | ||
302 | tx-clock = <18>; | ||
303 | phy-handle = <212004>; | ||
304 | pio-handle = <140004>; | ||
305 | }; | ||
306 | |||
307 | mdio@2320 { | ||
308 | #address-cells = <1>; | ||
309 | #size-cells = <0>; | ||
310 | reg = <2320 18>; | ||
311 | device_type = "mdio"; | ||
312 | compatible = "ucc_geth_phy"; | ||
313 | |||
314 | ethernet-phy@03 { | ||
315 | linux,phandle = <212003>; | ||
316 | interrupt-parent = <700>; | ||
317 | interrupts = <11 2>; | ||
318 | reg = <3>; | ||
319 | device_type = "ethernet-phy"; | ||
320 | interface = <3>; //ENET_100_MII | ||
321 | }; | ||
322 | ethernet-phy@04 { | ||
323 | linux,phandle = <212004>; | ||
324 | interrupt-parent = <700>; | ||
325 | interrupts = <12 2>; | ||
326 | reg = <4>; | ||
327 | device_type = "ethernet-phy"; | ||
328 | interface = <3>; | ||
329 | }; | ||
330 | }; | ||
331 | |||
332 | qeic@80 { | ||
333 | linux,phandle = <80>; | ||
334 | interrupt-controller; | ||
335 | device_type = "qeic"; | ||
336 | #address-cells = <0>; | ||
337 | #interrupt-cells = <1>; | ||
338 | reg = <80 80>; | ||
339 | built-in; | ||
340 | big-endian; | ||
341 | interrupts = <20 8 21 8>; //high:32 low:33 | ||
342 | interrupt-parent = <700>; | ||
343 | }; | ||
344 | }; | ||
345 | }; | ||
diff --git a/arch/powerpc/boot/dts/mpc8560ads.dts b/arch/powerpc/boot/dts/mpc8560ads.dts index 2b168486aeba..119bd5d3a834 100644 --- a/arch/powerpc/boot/dts/mpc8560ads.dts +++ b/arch/powerpc/boot/dts/mpc8560ads.dts | |||
@@ -200,7 +200,7 @@ | |||
200 | a800 0 0 4 40000 31 1>; | 200 | a800 0 0 4 40000 31 1>; |
201 | 201 | ||
202 | interrupt-parent = <40000>; | 202 | interrupt-parent = <40000>; |
203 | interrupts = <42 0>; | 203 | interrupts = <8 0>; |
204 | bus-range = <0 0>; | 204 | bus-range = <0 0>; |
205 | ranges = <02000000 0 80000000 80000000 0 20000000 | 205 | ranges = <02000000 0 80000000 80000000 0 20000000 |
206 | 01000000 0 00000000 e2000000 0 01000000>; | 206 | 01000000 0 00000000 e2000000 0 01000000>; |
@@ -250,7 +250,7 @@ | |||
250 | rx-clock = <1>; | 250 | rx-clock = <1>; |
251 | tx-clock = <1>; | 251 | tx-clock = <1>; |
252 | current-speed = <1c200>; | 252 | current-speed = <1c200>; |
253 | interrupts = <64 1>; | 253 | interrupts = <28 8>; |
254 | interrupt-parent = <90c00>; | 254 | interrupt-parent = <90c00>; |
255 | }; | 255 | }; |
256 | 256 | ||
@@ -264,7 +264,7 @@ | |||
264 | rx-clock = <2>; | 264 | rx-clock = <2>; |
265 | tx-clock = <2>; | 265 | tx-clock = <2>; |
266 | current-speed = <1c200>; | 266 | current-speed = <1c200>; |
267 | interrupts = <65 1>; | 267 | interrupts = <29 8>; |
268 | interrupt-parent = <90c00>; | 268 | interrupt-parent = <90c00>; |
269 | }; | 269 | }; |
270 | 270 | ||
@@ -278,7 +278,7 @@ | |||
278 | clock-setup = <ff00ffff 250000>; | 278 | clock-setup = <ff00ffff 250000>; |
279 | rx-clock = <15>; | 279 | rx-clock = <15>; |
280 | tx-clock = <16>; | 280 | tx-clock = <16>; |
281 | interrupts = <5d 1>; | 281 | interrupts = <21 8>; |
282 | interrupt-parent = <90c00>; | 282 | interrupt-parent = <90c00>; |
283 | phy-handle = <2452002>; | 283 | phy-handle = <2452002>; |
284 | }; | 284 | }; |
@@ -293,7 +293,7 @@ | |||
293 | clock-setup = <ffff00ff 3700>; | 293 | clock-setup = <ffff00ff 3700>; |
294 | rx-clock = <17>; | 294 | rx-clock = <17>; |
295 | tx-clock = <18>; | 295 | tx-clock = <18>; |
296 | interrupts = <5e 1>; | 296 | interrupts = <22 8>; |
297 | interrupt-parent = <90c00>; | 297 | interrupt-parent = <90c00>; |
298 | phy-handle = <2452003>; | 298 | phy-handle = <2452003>; |
299 | }; | 299 | }; |
diff --git a/arch/powerpc/boot/dts/mpc866ads.dts b/arch/powerpc/boot/dts/mpc866ads.dts new file mode 100644 index 000000000000..5d4005239b83 --- /dev/null +++ b/arch/powerpc/boot/dts/mpc866ads.dts | |||
@@ -0,0 +1,162 @@ | |||
1 | /* | ||
2 | * MPC866 ADS Device Tree Source | ||
3 | * | ||
4 | * Copyright 2006 MontaVista Software, Inc. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify it | ||
7 | * under the terms of the GNU General Public License as published by the | ||
8 | * Free Software Foundation; either version 2 of the License, or (at your | ||
9 | * option) any later version. | ||
10 | */ | ||
11 | |||
12 | |||
13 | / { | ||
14 | model = "MPC866ADS"; | ||
15 | compatible = "mpc8xx"; | ||
16 | #address-cells = <1>; | ||
17 | #size-cells = <1>; | ||
18 | linux,phandle = <100>; | ||
19 | |||
20 | cpus { | ||
21 | #cpus = <1>; | ||
22 | #address-cells = <1>; | ||
23 | #size-cells = <0>; | ||
24 | linux,phandle = <200>; | ||
25 | |||
26 | PowerPC,866@0 { | ||
27 | device_type = "cpu"; | ||
28 | reg = <0>; | ||
29 | d-cache-line-size = <20>; // 32 bytes | ||
30 | i-cache-line-size = <20>; // 32 bytes | ||
31 | d-cache-size = <2000>; // L1, 8K | ||
32 | i-cache-size = <4000>; // L1, 16K | ||
33 | timebase-frequency = <0>; | ||
34 | bus-frequency = <0>; | ||
35 | clock-frequency = <0>; | ||
36 | 32-bit; | ||
37 | interrupts = <f 2>; // decrementer interrupt | ||
38 | interrupt-parent = <ff000000>; | ||
39 | linux,phandle = <201>; | ||
40 | linux,boot-cpu; | ||
41 | }; | ||
42 | }; | ||
43 | |||
44 | memory { | ||
45 | device_type = "memory"; | ||
46 | linux,phandle = <300>; | ||
47 | reg = <00000000 800000>; | ||
48 | }; | ||
49 | |||
50 | soc866@ff000000 { | ||
51 | #address-cells = <1>; | ||
52 | #size-cells = <1>; | ||
53 | #interrupt-cells = <2>; | ||
54 | device_type = "soc"; | ||
55 | ranges = <0 ff000000 00100000>; | ||
56 | reg = <ff000000 00000200>; | ||
57 | bus-frequency = <0>; | ||
58 | mdio@e80 { | ||
59 | device_type = "mdio"; | ||
60 | compatible = "fs_enet"; | ||
61 | reg = <e80 8>; | ||
62 | linux,phandle = <e80>; | ||
63 | #address-cells = <1>; | ||
64 | #size-cells = <0>; | ||
65 | ethernet-phy@f { | ||
66 | linux,phandle = <e800f>; | ||
67 | reg = <f>; | ||
68 | device_type = "ethernet-phy"; | ||
69 | }; | ||
70 | }; | ||
71 | |||
72 | fec@e00 { | ||
73 | device_type = "network"; | ||
74 | compatible = "fs_enet"; | ||
75 | model = "FEC"; | ||
76 | device-id = <1>; | ||
77 | reg = <e00 188>; | ||
78 | mac-address = [ 00 00 0C 00 01 FD ]; | ||
79 | interrupts = <3 1>; | ||
80 | interrupt-parent = <ff000000>; | ||
81 | phy-handle = <e800f>; | ||
82 | }; | ||
83 | |||
84 | pic@ff000000 { | ||
85 | linux,phandle = <ff000000>; | ||
86 | interrupt-controller; | ||
87 | #address-cells = <0>; | ||
88 | #interrupt-cells = <2>; | ||
89 | reg = <0 24>; | ||
90 | built-in; | ||
91 | device_type = "mpc8xx-pic"; | ||
92 | compatible = "CPM"; | ||
93 | }; | ||
94 | |||
95 | cpm@ff000000 { | ||
96 | linux,phandle = <ff000000>; | ||
97 | #address-cells = <1>; | ||
98 | #size-cells = <1>; | ||
99 | #interrupt-cells = <2>; | ||
100 | device_type = "cpm"; | ||
101 | model = "CPM"; | ||
102 | ranges = <0 0 4000>; | ||
103 | reg = <860 f0>; | ||
104 | command-proc = <9c0>; | ||
105 | brg-frequency = <0>; | ||
106 | interrupts = <0 2>; // cpm error interrupt | ||
107 | interrupt-parent = <930>; | ||
108 | |||
109 | pic@930 { | ||
110 | linux,phandle = <930>; | ||
111 | interrupt-controller; | ||
112 | #address-cells = <0>; | ||
113 | #interrupt-cells = <2>; | ||
114 | interrupts = <5 2 0 2>; | ||
115 | interrupt-parent = <ff000000>; | ||
116 | reg = <930 20>; | ||
117 | built-in; | ||
118 | device_type = "cpm-pic"; | ||
119 | compatible = "CPM"; | ||
120 | }; | ||
121 | |||
122 | smc@a80 { | ||
123 | device_type = "serial"; | ||
124 | compatible = "cpm_uart"; | ||
125 | model = "SMC"; | ||
126 | device-id = <1>; | ||
127 | reg = <a80 10 3e80 40>; | ||
128 | clock-setup = <00ffffff 0>; | ||
129 | rx-clock = <1>; | ||
130 | tx-clock = <1>; | ||
131 | current-speed = <0>; | ||
132 | interrupts = <4 3>; | ||
133 | interrupt-parent = <930>; | ||
134 | }; | ||
135 | |||
136 | smc@a90 { | ||
137 | device_type = "serial"; | ||
138 | compatible = "cpm_uart"; | ||
139 | model = "SMC"; | ||
140 | device-id = <2>; | ||
141 | reg = <a90 20 3f80 40>; | ||
142 | clock-setup = <ff00ffff 90000>; | ||
143 | rx-clock = <2>; | ||
144 | tx-clock = <2>; | ||
145 | current-speed = <0>; | ||
146 | interrupts = <3 3>; | ||
147 | interrupt-parent = <930>; | ||
148 | }; | ||
149 | |||
150 | scc@a00 { | ||
151 | device_type = "network"; | ||
152 | compatible = "fs_enet"; | ||
153 | model = "SCC"; | ||
154 | device-id = <1>; | ||
155 | reg = <a00 18 3c00 80>; | ||
156 | mac-address = [ 00 00 0C 00 03 FD ]; | ||
157 | interrupts = <1e 3>; | ||
158 | interrupt-parent = <930>; | ||
159 | }; | ||
160 | }; | ||
161 | }; | ||
162 | }; | ||
diff --git a/arch/powerpc/boot/dts/mpc885ads.dts b/arch/powerpc/boot/dts/mpc885ads.dts new file mode 100644 index 000000000000..cf1a19f962c5 --- /dev/null +++ b/arch/powerpc/boot/dts/mpc885ads.dts | |||
@@ -0,0 +1,185 @@ | |||
1 | /* | ||
2 | * MPC885 ADS Device Tree Source | ||
3 | * | ||
4 | * Copyright 2006 MontaVista Software, Inc. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify it | ||
7 | * under the terms of the GNU General Public License as published by the | ||
8 | * Free Software Foundation; either version 2 of the License, or (at your | ||
9 | * option) any later version. | ||
10 | */ | ||
11 | |||
12 | |||
13 | / { | ||
14 | model = "MPC885ADS"; | ||
15 | compatible = "mpc8xx"; | ||
16 | #address-cells = <1>; | ||
17 | #size-cells = <1>; | ||
18 | linux,phandle = <100>; | ||
19 | |||
20 | cpus { | ||
21 | #cpus = <1>; | ||
22 | #address-cells = <1>; | ||
23 | #size-cells = <0>; | ||
24 | linux,phandle = <200>; | ||
25 | |||
26 | PowerPC,885@0 { | ||
27 | device_type = "cpu"; | ||
28 | reg = <0>; | ||
29 | d-cache-line-size = <20>; // 32 bytes | ||
30 | i-cache-line-size = <20>; // 32 bytes | ||
31 | d-cache-size = <2000>; // L1, 8K | ||
32 | i-cache-size = <2000>; // L1, 8K | ||
33 | timebase-frequency = <0>; | ||
34 | bus-frequency = <0>; | ||
35 | clock-frequency = <0>; | ||
36 | 32-bit; | ||
37 | interrupts = <f 2>; // decrementer interrupt | ||
38 | interrupt-parent = <ff000000>; | ||
39 | linux,phandle = <201>; | ||
40 | linux,boot-cpu; | ||
41 | }; | ||
42 | }; | ||
43 | |||
44 | memory { | ||
45 | device_type = "memory"; | ||
46 | linux,phandle = <300>; | ||
47 | reg = <00000000 800000>; | ||
48 | }; | ||
49 | |||
50 | soc885@ff000000 { | ||
51 | #address-cells = <1>; | ||
52 | #size-cells = <1>; | ||
53 | #interrupt-cells = <2>; | ||
54 | device_type = "soc"; | ||
55 | ranges = <0 ff000000 00100000>; | ||
56 | reg = <ff000000 00000200>; | ||
57 | bus-frequency = <0>; | ||
58 | mdio@e80 { | ||
59 | device_type = "mdio"; | ||
60 | compatible = "fs_enet"; | ||
61 | reg = <e80 8>; | ||
62 | linux,phandle = <e80>; | ||
63 | #address-cells = <1>; | ||
64 | #size-cells = <0>; | ||
65 | ethernet-phy@0 { | ||
66 | linux,phandle = <e8000>; | ||
67 | reg = <0>; | ||
68 | device_type = "ethernet-phy"; | ||
69 | }; | ||
70 | ethernet-phy@1 { | ||
71 | linux,phandle = <e8001>; | ||
72 | reg = <1>; | ||
73 | device_type = "ethernet-phy"; | ||
74 | }; | ||
75 | ethernet-phy@2 { | ||
76 | linux,phandle = <e8002>; | ||
77 | reg = <2>; | ||
78 | device_type = "ethernet-phy"; | ||
79 | }; | ||
80 | }; | ||
81 | |||
82 | fec@e00 { | ||
83 | device_type = "network"; | ||
84 | compatible = "fs_enet"; | ||
85 | model = "FEC"; | ||
86 | device-id = <1>; | ||
87 | reg = <e00 188>; | ||
88 | mac-address = [ 00 00 0C 00 01 FD ]; | ||
89 | interrupts = <3 1>; | ||
90 | interrupt-parent = <ff000000>; | ||
91 | phy-handle = <e8000>; | ||
92 | }; | ||
93 | |||
94 | fec@1e00 { | ||
95 | device_type = "network"; | ||
96 | compatible = "fs_enet"; | ||
97 | model = "FEC"; | ||
98 | device-id = <2>; | ||
99 | reg = <1e00 188>; | ||
100 | mac-address = [ 00 00 0C 00 02 FD ]; | ||
101 | interrupts = <7 1>; | ||
102 | interrupt-parent = <ff000000>; | ||
103 | phy-handle = <e8001>; | ||
104 | }; | ||
105 | |||
106 | pic@ff000000 { | ||
107 | linux,phandle = <ff000000>; | ||
108 | interrupt-controller; | ||
109 | #address-cells = <0>; | ||
110 | #interrupt-cells = <2>; | ||
111 | reg = <0 24>; | ||
112 | built-in; | ||
113 | device_type = "mpc8xx-pic"; | ||
114 | compatible = "CPM"; | ||
115 | }; | ||
116 | |||
117 | cpm@ff000000 { | ||
118 | linux,phandle = <ff000000>; | ||
119 | #address-cells = <1>; | ||
120 | #size-cells = <1>; | ||
121 | #interrupt-cells = <2>; | ||
122 | device_type = "cpm"; | ||
123 | model = "CPM"; | ||
124 | ranges = <0 0 4000>; | ||
125 | reg = <860 f0>; | ||
126 | command-proc = <9c0>; | ||
127 | brg-frequency = <0>; | ||
128 | interrupts = <0 2>; // cpm error interrupt | ||
129 | interrupt-parent = <930>; | ||
130 | |||
131 | pic@930 { | ||
132 | linux,phandle = <930>; | ||
133 | interrupt-controller; | ||
134 | #address-cells = <0>; | ||
135 | #interrupt-cells = <2>; | ||
136 | interrupts = <5 2 0 2>; | ||
137 | interrupt-parent = <ff000000>; | ||
138 | reg = <930 20>; | ||
139 | built-in; | ||
140 | device_type = "cpm-pic"; | ||
141 | compatible = "CPM"; | ||
142 | }; | ||
143 | |||
144 | smc@a80 { | ||
145 | device_type = "serial"; | ||
146 | compatible = "cpm_uart"; | ||
147 | model = "SMC"; | ||
148 | device-id = <1>; | ||
149 | reg = <a80 10 3e80 40>; | ||
150 | clock-setup = <00ffffff 0>; | ||
151 | rx-clock = <1>; | ||
152 | tx-clock = <1>; | ||
153 | current-speed = <0>; | ||
154 | interrupts = <4 3>; | ||
155 | interrupt-parent = <930>; | ||
156 | }; | ||
157 | |||
158 | smc@a90 { | ||
159 | device_type = "serial"; | ||
160 | compatible = "cpm_uart"; | ||
161 | model = "SMC"; | ||
162 | device-id = <2>; | ||
163 | reg = <a90 20 3f80 40>; | ||
164 | clock-setup = <ff00ffff 90000>; | ||
165 | rx-clock = <2>; | ||
166 | tx-clock = <2>; | ||
167 | current-speed = <0>; | ||
168 | interrupts = <3 3>; | ||
169 | interrupt-parent = <930>; | ||
170 | }; | ||
171 | |||
172 | scc@a40 { | ||
173 | device_type = "network"; | ||
174 | compatible = "fs_enet"; | ||
175 | model = "SCC"; | ||
176 | device-id = <3>; | ||
177 | reg = <a40 18 3e00 80>; | ||
178 | mac-address = [ 00 00 0C 00 03 FD ]; | ||
179 | interrupts = <1c 3>; | ||
180 | interrupt-parent = <930>; | ||
181 | phy-handle = <e8002>; | ||
182 | }; | ||
183 | }; | ||
184 | }; | ||
185 | }; | ||
diff --git a/arch/powerpc/configs/celleb_defconfig b/arch/powerpc/configs/celleb_defconfig new file mode 100644 index 000000000000..a1fe97197ead --- /dev/null +++ b/arch/powerpc/configs/celleb_defconfig | |||
@@ -0,0 +1,1408 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.20-rc4 | ||
4 | # Thu Jan 11 20:55:33 2007 | ||
5 | # | ||
6 | CONFIG_PPC64=y | ||
7 | CONFIG_64BIT=y | ||
8 | CONFIG_PPC_MERGE=y | ||
9 | CONFIG_MMU=y | ||
10 | CONFIG_GENERIC_HARDIRQS=y | ||
11 | CONFIG_IRQ_PER_CPU=y | ||
12 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | ||
13 | CONFIG_ARCH_HAS_ILOG2_U32=y | ||
14 | CONFIG_ARCH_HAS_ILOG2_U64=y | ||
15 | CONFIG_GENERIC_HWEIGHT=y | ||
16 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
17 | CONFIG_GENERIC_FIND_NEXT_BIT=y | ||
18 | CONFIG_PPC=y | ||
19 | CONFIG_EARLY_PRINTK=y | ||
20 | CONFIG_COMPAT=y | ||
21 | CONFIG_SYSVIPC_COMPAT=y | ||
22 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | ||
23 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y | ||
24 | CONFIG_PPC_OF=y | ||
25 | # CONFIG_PPC_UDBG_16550 is not set | ||
26 | # CONFIG_GENERIC_TBSYNC is not set | ||
27 | CONFIG_AUDIT_ARCH=y | ||
28 | CONFIG_GENERIC_BUG=y | ||
29 | # CONFIG_DEFAULT_UIMAGE is not set | ||
30 | |||
31 | # | ||
32 | # Processor support | ||
33 | # | ||
34 | # CONFIG_POWER4_ONLY is not set | ||
35 | CONFIG_POWER3=y | ||
36 | CONFIG_POWER4=y | ||
37 | CONFIG_PPC_FPU=y | ||
38 | # CONFIG_PPC_DCR_NATIVE is not set | ||
39 | # CONFIG_PPC_DCR_MMIO is not set | ||
40 | CONFIG_PPC_OF_PLATFORM_PCI=y | ||
41 | CONFIG_ALTIVEC=y | ||
42 | CONFIG_PPC_STD_MMU=y | ||
43 | CONFIG_VIRT_CPU_ACCOUNTING=y | ||
44 | CONFIG_SMP=y | ||
45 | CONFIG_NR_CPUS=4 | ||
46 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
47 | |||
48 | # | ||
49 | # Code maturity level options | ||
50 | # | ||
51 | CONFIG_EXPERIMENTAL=y | ||
52 | CONFIG_LOCK_KERNEL=y | ||
53 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
54 | |||
55 | # | ||
56 | # General setup | ||
57 | # | ||
58 | CONFIG_LOCALVERSION="" | ||
59 | CONFIG_LOCALVERSION_AUTO=y | ||
60 | CONFIG_SWAP=y | ||
61 | CONFIG_SYSVIPC=y | ||
62 | # CONFIG_IPC_NS is not set | ||
63 | # CONFIG_POSIX_MQUEUE is not set | ||
64 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
65 | # CONFIG_TASKSTATS is not set | ||
66 | # CONFIG_UTS_NS is not set | ||
67 | # CONFIG_AUDIT is not set | ||
68 | CONFIG_IKCONFIG=y | ||
69 | CONFIG_IKCONFIG_PROC=y | ||
70 | # CONFIG_CPUSETS is not set | ||
71 | CONFIG_SYSFS_DEPRECATED=y | ||
72 | # CONFIG_RELAY is not set | ||
73 | CONFIG_INITRAMFS_SOURCE="" | ||
74 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
75 | CONFIG_SYSCTL=y | ||
76 | # CONFIG_EMBEDDED is not set | ||
77 | CONFIG_SYSCTL_SYSCALL=y | ||
78 | CONFIG_KALLSYMS=y | ||
79 | # CONFIG_KALLSYMS_ALL is not set | ||
80 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
81 | CONFIG_HOTPLUG=y | ||
82 | CONFIG_PRINTK=y | ||
83 | CONFIG_BUG=y | ||
84 | CONFIG_ELF_CORE=y | ||
85 | CONFIG_BASE_FULL=y | ||
86 | CONFIG_FUTEX=y | ||
87 | CONFIG_EPOLL=y | ||
88 | CONFIG_SHMEM=y | ||
89 | CONFIG_SLAB=y | ||
90 | CONFIG_VM_EVENT_COUNTERS=y | ||
91 | CONFIG_RT_MUTEXES=y | ||
92 | # CONFIG_TINY_SHMEM is not set | ||
93 | CONFIG_BASE_SMALL=0 | ||
94 | # CONFIG_SLOB is not set | ||
95 | |||
96 | # | ||
97 | # Loadable module support | ||
98 | # | ||
99 | CONFIG_MODULES=y | ||
100 | CONFIG_MODULE_UNLOAD=y | ||
101 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
102 | CONFIG_MODVERSIONS=y | ||
103 | CONFIG_MODULE_SRCVERSION_ALL=y | ||
104 | CONFIG_KMOD=y | ||
105 | CONFIG_STOP_MACHINE=y | ||
106 | |||
107 | # | ||
108 | # Block layer | ||
109 | # | ||
110 | CONFIG_BLOCK=y | ||
111 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
112 | |||
113 | # | ||
114 | # IO Schedulers | ||
115 | # | ||
116 | CONFIG_IOSCHED_NOOP=y | ||
117 | CONFIG_IOSCHED_AS=y | ||
118 | CONFIG_IOSCHED_DEADLINE=y | ||
119 | CONFIG_IOSCHED_CFQ=y | ||
120 | CONFIG_DEFAULT_AS=y | ||
121 | # CONFIG_DEFAULT_DEADLINE is not set | ||
122 | # CONFIG_DEFAULT_CFQ is not set | ||
123 | # CONFIG_DEFAULT_NOOP is not set | ||
124 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
125 | |||
126 | # | ||
127 | # Platform support | ||
128 | # | ||
129 | CONFIG_PPC_MULTIPLATFORM=y | ||
130 | # CONFIG_EMBEDDED6xx is not set | ||
131 | # CONFIG_APUS is not set | ||
132 | # CONFIG_PPC_PSERIES is not set | ||
133 | # CONFIG_PPC_ISERIES is not set | ||
134 | # CONFIG_PPC_MPC52xx is not set | ||
135 | # CONFIG_PPC_PMAC is not set | ||
136 | # CONFIG_PPC_MAPLE is not set | ||
137 | # CONFIG_PPC_PASEMI is not set | ||
138 | CONFIG_PPC_CELL=y | ||
139 | # CONFIG_PPC_CELL_NATIVE is not set | ||
140 | # CONFIG_PPC_IBM_CELL_BLADE is not set | ||
141 | # CONFIG_PPC_PS3 is not set | ||
142 | CONFIG_PPC_CELLEB=y | ||
143 | CONFIG_PPC_UDBG_BEAT=y | ||
144 | # CONFIG_U3_DART is not set | ||
145 | # CONFIG_PPC_RTAS is not set | ||
146 | # CONFIG_MMIO_NVRAM is not set | ||
147 | # CONFIG_PPC_MPC106 is not set | ||
148 | # CONFIG_PPC_970_NAP is not set | ||
149 | # CONFIG_PPC_INDIRECT_IO is not set | ||
150 | # CONFIG_GENERIC_IOMAP is not set | ||
151 | # CONFIG_CPU_FREQ is not set | ||
152 | # CONFIG_WANT_EARLY_SERIAL is not set | ||
153 | # CONFIG_MPIC is not set | ||
154 | |||
155 | # | ||
156 | # Cell Broadband Engine options | ||
157 | # | ||
158 | CONFIG_SPU_FS=y | ||
159 | CONFIG_SPU_BASE=y | ||
160 | # CONFIG_CBE_RAS is not set | ||
161 | |||
162 | # | ||
163 | # Kernel options | ||
164 | # | ||
165 | # CONFIG_HZ_100 is not set | ||
166 | CONFIG_HZ_250=y | ||
167 | # CONFIG_HZ_300 is not set | ||
168 | # CONFIG_HZ_1000 is not set | ||
169 | CONFIG_HZ=250 | ||
170 | CONFIG_PREEMPT_NONE=y | ||
171 | # CONFIG_PREEMPT_VOLUNTARY is not set | ||
172 | # CONFIG_PREEMPT is not set | ||
173 | CONFIG_PREEMPT_BKL=y | ||
174 | CONFIG_BINFMT_ELF=y | ||
175 | CONFIG_BINFMT_MISC=m | ||
176 | CONFIG_FORCE_MAX_ZONEORDER=13 | ||
177 | # CONFIG_IOMMU_VMERGE is not set | ||
178 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | ||
179 | CONFIG_KEXEC=y | ||
180 | # CONFIG_CRASH_DUMP is not set | ||
181 | # CONFIG_IRQ_ALL_CPUS is not set | ||
182 | CONFIG_NUMA=y | ||
183 | CONFIG_NODES_SHIFT=4 | ||
184 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
185 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | ||
186 | CONFIG_ARCH_SPARSEMEM_DEFAULT=y | ||
187 | CONFIG_ARCH_POPULATES_NODE_MAP=y | ||
188 | CONFIG_SELECT_MEMORY_MODEL=y | ||
189 | # CONFIG_FLATMEM_MANUAL is not set | ||
190 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
191 | CONFIG_SPARSEMEM_MANUAL=y | ||
192 | CONFIG_SPARSEMEM=y | ||
193 | CONFIG_NEED_MULTIPLE_NODES=y | ||
194 | CONFIG_HAVE_MEMORY_PRESENT=y | ||
195 | # CONFIG_SPARSEMEM_STATIC is not set | ||
196 | CONFIG_SPARSEMEM_EXTREME=y | ||
197 | CONFIG_MEMORY_HOTPLUG=y | ||
198 | CONFIG_MEMORY_HOTPLUG_SPARSE=y | ||
199 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
200 | CONFIG_MIGRATION=y | ||
201 | CONFIG_RESOURCES_64BIT=y | ||
202 | CONFIG_ARCH_MEMORY_PROBE=y | ||
203 | CONFIG_NODES_SPAN_OTHER_NODES=y | ||
204 | # CONFIG_PPC_64K_PAGES is not set | ||
205 | # CONFIG_SCHED_SMT is not set | ||
206 | CONFIG_PROC_DEVICETREE=y | ||
207 | # CONFIG_CMDLINE_BOOL is not set | ||
208 | # CONFIG_PM is not set | ||
209 | CONFIG_SECCOMP=y | ||
210 | CONFIG_ISA_DMA_API=y | ||
211 | |||
212 | # | ||
213 | # Bus options | ||
214 | # | ||
215 | CONFIG_GENERIC_ISA_DMA=y | ||
216 | # CONFIG_MPIC_WEIRD is not set | ||
217 | # CONFIG_PPC_I8259 is not set | ||
218 | # CONFIG_PPC_INDIRECT_PCI is not set | ||
219 | CONFIG_PCI=y | ||
220 | CONFIG_PCI_DOMAINS=y | ||
221 | # CONFIG_PCIEPORTBUS is not set | ||
222 | # CONFIG_PCI_DEBUG is not set | ||
223 | |||
224 | # | ||
225 | # PCCARD (PCMCIA/CardBus) support | ||
226 | # | ||
227 | # CONFIG_PCCARD is not set | ||
228 | |||
229 | # | ||
230 | # PCI Hotplug Support | ||
231 | # | ||
232 | # CONFIG_HOTPLUG_PCI is not set | ||
233 | CONFIG_KERNEL_START=0xc000000000000000 | ||
234 | |||
235 | # | ||
236 | # Networking | ||
237 | # | ||
238 | CONFIG_NET=y | ||
239 | |||
240 | # | ||
241 | # Networking options | ||
242 | # | ||
243 | # CONFIG_NETDEBUG is not set | ||
244 | CONFIG_PACKET=y | ||
245 | # CONFIG_PACKET_MMAP is not set | ||
246 | CONFIG_UNIX=y | ||
247 | CONFIG_XFRM=y | ||
248 | # CONFIG_XFRM_USER is not set | ||
249 | # CONFIG_XFRM_SUB_POLICY is not set | ||
250 | # CONFIG_NET_KEY is not set | ||
251 | CONFIG_INET=y | ||
252 | CONFIG_IP_MULTICAST=y | ||
253 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
254 | CONFIG_IP_FIB_HASH=y | ||
255 | # CONFIG_IP_PNP is not set | ||
256 | # CONFIG_NET_IPIP is not set | ||
257 | # CONFIG_NET_IPGRE is not set | ||
258 | # CONFIG_IP_MROUTE is not set | ||
259 | # CONFIG_ARPD is not set | ||
260 | CONFIG_SYN_COOKIES=y | ||
261 | # CONFIG_INET_AH is not set | ||
262 | # CONFIG_INET_ESP is not set | ||
263 | # CONFIG_INET_IPCOMP is not set | ||
264 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
265 | # CONFIG_INET_TUNNEL is not set | ||
266 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | ||
267 | CONFIG_INET_XFRM_MODE_TUNNEL=y | ||
268 | CONFIG_INET_XFRM_MODE_BEET=y | ||
269 | CONFIG_INET_DIAG=y | ||
270 | CONFIG_INET_TCP_DIAG=y | ||
271 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
272 | CONFIG_TCP_CONG_CUBIC=y | ||
273 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
274 | # CONFIG_TCP_MD5SIG is not set | ||
275 | |||
276 | # | ||
277 | # IP: Virtual Server Configuration | ||
278 | # | ||
279 | # CONFIG_IP_VS is not set | ||
280 | CONFIG_IPV6=y | ||
281 | # CONFIG_IPV6_PRIVACY is not set | ||
282 | # CONFIG_IPV6_ROUTER_PREF is not set | ||
283 | CONFIG_INET6_AH=m | ||
284 | CONFIG_INET6_ESP=m | ||
285 | CONFIG_INET6_IPCOMP=m | ||
286 | # CONFIG_IPV6_MIP6 is not set | ||
287 | CONFIG_INET6_XFRM_TUNNEL=m | ||
288 | CONFIG_INET6_TUNNEL=m | ||
289 | CONFIG_INET6_XFRM_MODE_TRANSPORT=y | ||
290 | CONFIG_INET6_XFRM_MODE_TUNNEL=y | ||
291 | CONFIG_INET6_XFRM_MODE_BEET=y | ||
292 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set | ||
293 | CONFIG_IPV6_SIT=y | ||
294 | CONFIG_IPV6_TUNNEL=m | ||
295 | # CONFIG_IPV6_MULTIPLE_TABLES is not set | ||
296 | # CONFIG_NETWORK_SECMARK is not set | ||
297 | CONFIG_NETFILTER=y | ||
298 | # CONFIG_NETFILTER_DEBUG is not set | ||
299 | |||
300 | # | ||
301 | # Core Netfilter Configuration | ||
302 | # | ||
303 | # CONFIG_NETFILTER_NETLINK is not set | ||
304 | # CONFIG_NF_CONNTRACK_ENABLED is not set | ||
305 | # CONFIG_NETFILTER_XTABLES is not set | ||
306 | |||
307 | # | ||
308 | # IP: Netfilter Configuration | ||
309 | # | ||
310 | CONFIG_IP_NF_QUEUE=m | ||
311 | |||
312 | # | ||
313 | # IPv6: Netfilter Configuration (EXPERIMENTAL) | ||
314 | # | ||
315 | # CONFIG_IP6_NF_QUEUE is not set | ||
316 | |||
317 | # | ||
318 | # DCCP Configuration (EXPERIMENTAL) | ||
319 | # | ||
320 | # CONFIG_IP_DCCP is not set | ||
321 | |||
322 | # | ||
323 | # SCTP Configuration (EXPERIMENTAL) | ||
324 | # | ||
325 | # CONFIG_IP_SCTP is not set | ||
326 | |||
327 | # | ||
328 | # TIPC Configuration (EXPERIMENTAL) | ||
329 | # | ||
330 | # CONFIG_TIPC is not set | ||
331 | # CONFIG_ATM is not set | ||
332 | # CONFIG_BRIDGE is not set | ||
333 | # CONFIG_VLAN_8021Q is not set | ||
334 | # CONFIG_DECNET is not set | ||
335 | # CONFIG_LLC2 is not set | ||
336 | # CONFIG_IPX is not set | ||
337 | # CONFIG_ATALK is not set | ||
338 | # CONFIG_X25 is not set | ||
339 | # CONFIG_LAPB is not set | ||
340 | # CONFIG_ECONET is not set | ||
341 | # CONFIG_WAN_ROUTER is not set | ||
342 | |||
343 | # | ||
344 | # QoS and/or fair queueing | ||
345 | # | ||
346 | # CONFIG_NET_SCHED is not set | ||
347 | |||
348 | # | ||
349 | # Network testing | ||
350 | # | ||
351 | # CONFIG_NET_PKTGEN is not set | ||
352 | # CONFIG_HAMRADIO is not set | ||
353 | # CONFIG_IRDA is not set | ||
354 | # CONFIG_BT is not set | ||
355 | # CONFIG_IEEE80211 is not set | ||
356 | |||
357 | # | ||
358 | # Device Drivers | ||
359 | # | ||
360 | |||
361 | # | ||
362 | # Generic Driver Options | ||
363 | # | ||
364 | CONFIG_STANDALONE=y | ||
365 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
366 | CONFIG_FW_LOADER=y | ||
367 | # CONFIG_DEBUG_DRIVER is not set | ||
368 | # CONFIG_SYS_HYPERVISOR is not set | ||
369 | |||
370 | # | ||
371 | # Connector - unified userspace <-> kernelspace linker | ||
372 | # | ||
373 | # CONFIG_CONNECTOR is not set | ||
374 | |||
375 | # | ||
376 | # Memory Technology Devices (MTD) | ||
377 | # | ||
378 | # CONFIG_MTD is not set | ||
379 | |||
380 | # | ||
381 | # Parallel port support | ||
382 | # | ||
383 | # CONFIG_PARPORT is not set | ||
384 | |||
385 | # | ||
386 | # Plug and Play support | ||
387 | # | ||
388 | |||
389 | # | ||
390 | # Block devices | ||
391 | # | ||
392 | # CONFIG_BLK_DEV_FD is not set | ||
393 | # CONFIG_BLK_CPQ_DA is not set | ||
394 | # CONFIG_BLK_CPQ_CISS_DA is not set | ||
395 | # CONFIG_BLK_DEV_DAC960 is not set | ||
396 | # CONFIG_BLK_DEV_UMEM is not set | ||
397 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
398 | CONFIG_BLK_DEV_LOOP=y | ||
399 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | ||
400 | # CONFIG_BLK_DEV_NBD is not set | ||
401 | # CONFIG_BLK_DEV_SX8 is not set | ||
402 | # CONFIG_BLK_DEV_UB is not set | ||
403 | CONFIG_BLK_DEV_RAM=y | ||
404 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
405 | CONFIG_BLK_DEV_RAM_SIZE=131072 | ||
406 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | ||
407 | CONFIG_BLK_DEV_INITRD=y | ||
408 | # CONFIG_CDROM_PKTCDVD is not set | ||
409 | # CONFIG_ATA_OVER_ETH is not set | ||
410 | |||
411 | # | ||
412 | # Misc devices | ||
413 | # | ||
414 | # CONFIG_SGI_IOC4 is not set | ||
415 | # CONFIG_TIFM_CORE is not set | ||
416 | |||
417 | # | ||
418 | # ATA/ATAPI/MFM/RLL support | ||
419 | # | ||
420 | CONFIG_IDE=y | ||
421 | CONFIG_BLK_DEV_IDE=y | ||
422 | |||
423 | # | ||
424 | # Please see Documentation/ide.txt for help/info on IDE drives | ||
425 | # | ||
426 | # CONFIG_BLK_DEV_IDE_SATA is not set | ||
427 | CONFIG_BLK_DEV_IDEDISK=y | ||
428 | CONFIG_IDEDISK_MULTI_MODE=y | ||
429 | CONFIG_BLK_DEV_IDECD=m | ||
430 | # CONFIG_BLK_DEV_IDETAPE is not set | ||
431 | # CONFIG_BLK_DEV_IDEFLOPPY is not set | ||
432 | # CONFIG_BLK_DEV_IDESCSI is not set | ||
433 | # CONFIG_IDE_TASK_IOCTL is not set | ||
434 | |||
435 | # | ||
436 | # IDE chipset support/bugfixes | ||
437 | # | ||
438 | CONFIG_IDE_GENERIC=y | ||
439 | CONFIG_BLK_DEV_IDEPCI=y | ||
440 | CONFIG_IDEPCI_SHARE_IRQ=y | ||
441 | # CONFIG_BLK_DEV_OFFBOARD is not set | ||
442 | CONFIG_BLK_DEV_GENERIC=y | ||
443 | # CONFIG_BLK_DEV_OPTI621 is not set | ||
444 | CONFIG_BLK_DEV_IDEDMA_PCI=y | ||
445 | # CONFIG_BLK_DEV_IDEDMA_FORCED is not set | ||
446 | CONFIG_IDEDMA_PCI_AUTO=y | ||
447 | # CONFIG_IDEDMA_ONLYDISK is not set | ||
448 | # CONFIG_BLK_DEV_AEC62XX is not set | ||
449 | # CONFIG_BLK_DEV_ALI15X3 is not set | ||
450 | # CONFIG_BLK_DEV_AMD74XX is not set | ||
451 | # CONFIG_BLK_DEV_CMD64X is not set | ||
452 | # CONFIG_BLK_DEV_TRIFLEX is not set | ||
453 | # CONFIG_BLK_DEV_CY82C693 is not set | ||
454 | # CONFIG_BLK_DEV_CS5520 is not set | ||
455 | # CONFIG_BLK_DEV_CS5530 is not set | ||
456 | # CONFIG_BLK_DEV_HPT34X is not set | ||
457 | # CONFIG_BLK_DEV_HPT366 is not set | ||
458 | # CONFIG_BLK_DEV_JMICRON is not set | ||
459 | # CONFIG_BLK_DEV_SC1200 is not set | ||
460 | # CONFIG_BLK_DEV_PIIX is not set | ||
461 | # CONFIG_BLK_DEV_IT821X is not set | ||
462 | # CONFIG_BLK_DEV_NS87415 is not set | ||
463 | # CONFIG_BLK_DEV_PDC202XX_OLD is not set | ||
464 | # CONFIG_BLK_DEV_PDC202XX_NEW is not set | ||
465 | # CONFIG_BLK_DEV_SVWKS is not set | ||
466 | # CONFIG_BLK_DEV_SIIMAGE is not set | ||
467 | # CONFIG_BLK_DEV_SL82C105 is not set | ||
468 | # CONFIG_BLK_DEV_SLC90E66 is not set | ||
469 | # CONFIG_BLK_DEV_TRM290 is not set | ||
470 | # CONFIG_BLK_DEV_VIA82CXXX is not set | ||
471 | CONFIG_BLK_DEV_IDE_CELLEB=y | ||
472 | # CONFIG_IDE_ARM is not set | ||
473 | CONFIG_BLK_DEV_IDEDMA=y | ||
474 | # CONFIG_IDEDMA_IVB is not set | ||
475 | CONFIG_IDEDMA_AUTO=y | ||
476 | # CONFIG_BLK_DEV_HD is not set | ||
477 | |||
478 | # | ||
479 | # SCSI device support | ||
480 | # | ||
481 | # CONFIG_RAID_ATTRS is not set | ||
482 | CONFIG_SCSI=m | ||
483 | # CONFIG_SCSI_TGT is not set | ||
484 | # CONFIG_SCSI_NETLINK is not set | ||
485 | # CONFIG_SCSI_PROC_FS is not set | ||
486 | |||
487 | # | ||
488 | # SCSI support type (disk, tape, CD-ROM) | ||
489 | # | ||
490 | CONFIG_BLK_DEV_SD=m | ||
491 | # CONFIG_CHR_DEV_ST is not set | ||
492 | # CONFIG_CHR_DEV_OSST is not set | ||
493 | CONFIG_BLK_DEV_SR=m | ||
494 | # CONFIG_BLK_DEV_SR_VENDOR is not set | ||
495 | CONFIG_CHR_DEV_SG=m | ||
496 | # CONFIG_CHR_DEV_SCH is not set | ||
497 | |||
498 | # | ||
499 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | ||
500 | # | ||
501 | CONFIG_SCSI_MULTI_LUN=y | ||
502 | # CONFIG_SCSI_CONSTANTS is not set | ||
503 | # CONFIG_SCSI_LOGGING is not set | ||
504 | # CONFIG_SCSI_SCAN_ASYNC is not set | ||
505 | |||
506 | # | ||
507 | # SCSI Transports | ||
508 | # | ||
509 | # CONFIG_SCSI_SPI_ATTRS is not set | ||
510 | # CONFIG_SCSI_FC_ATTRS is not set | ||
511 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
512 | # CONFIG_SCSI_SAS_ATTRS is not set | ||
513 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
514 | |||
515 | # | ||
516 | # SCSI low-level drivers | ||
517 | # | ||
518 | # CONFIG_ISCSI_TCP is not set | ||
519 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set | ||
520 | # CONFIG_SCSI_3W_9XXX is not set | ||
521 | # CONFIG_SCSI_ACARD is not set | ||
522 | # CONFIG_SCSI_AACRAID is not set | ||
523 | # CONFIG_SCSI_AIC7XXX is not set | ||
524 | # CONFIG_SCSI_AIC7XXX_OLD is not set | ||
525 | # CONFIG_SCSI_AIC79XX is not set | ||
526 | # CONFIG_SCSI_AIC94XX is not set | ||
527 | # CONFIG_SCSI_ARCMSR is not set | ||
528 | # CONFIG_MEGARAID_NEWGEN is not set | ||
529 | # CONFIG_MEGARAID_LEGACY is not set | ||
530 | # CONFIG_MEGARAID_SAS is not set | ||
531 | # CONFIG_SCSI_HPTIOP is not set | ||
532 | # CONFIG_SCSI_BUSLOGIC is not set | ||
533 | # CONFIG_SCSI_DMX3191D is not set | ||
534 | # CONFIG_SCSI_EATA is not set | ||
535 | # CONFIG_SCSI_FUTURE_DOMAIN is not set | ||
536 | # CONFIG_SCSI_GDTH is not set | ||
537 | # CONFIG_SCSI_IPS is not set | ||
538 | # CONFIG_SCSI_INITIO is not set | ||
539 | # CONFIG_SCSI_INIA100 is not set | ||
540 | # CONFIG_SCSI_STEX is not set | ||
541 | # CONFIG_SCSI_SYM53C8XX_2 is not set | ||
542 | # CONFIG_SCSI_QLOGIC_1280 is not set | ||
543 | # CONFIG_SCSI_QLA_FC is not set | ||
544 | # CONFIG_SCSI_QLA_ISCSI is not set | ||
545 | # CONFIG_SCSI_LPFC is not set | ||
546 | # CONFIG_SCSI_DC395x is not set | ||
547 | # CONFIG_SCSI_DC390T is not set | ||
548 | # CONFIG_SCSI_DEBUG is not set | ||
549 | # CONFIG_SCSI_SRP is not set | ||
550 | |||
551 | # | ||
552 | # Serial ATA (prod) and Parallel ATA (experimental) drivers | ||
553 | # | ||
554 | # CONFIG_ATA is not set | ||
555 | |||
556 | # | ||
557 | # Multi-device support (RAID and LVM) | ||
558 | # | ||
559 | CONFIG_MD=y | ||
560 | CONFIG_BLK_DEV_MD=m | ||
561 | CONFIG_MD_LINEAR=m | ||
562 | CONFIG_MD_RAID0=m | ||
563 | CONFIG_MD_RAID1=m | ||
564 | # CONFIG_MD_RAID10 is not set | ||
565 | # CONFIG_MD_RAID456 is not set | ||
566 | # CONFIG_MD_MULTIPATH is not set | ||
567 | # CONFIG_MD_FAULTY is not set | ||
568 | CONFIG_BLK_DEV_DM=m | ||
569 | # CONFIG_DM_DEBUG is not set | ||
570 | CONFIG_DM_CRYPT=m | ||
571 | CONFIG_DM_SNAPSHOT=m | ||
572 | CONFIG_DM_MIRROR=m | ||
573 | CONFIG_DM_ZERO=m | ||
574 | CONFIG_DM_MULTIPATH=m | ||
575 | # CONFIG_DM_MULTIPATH_EMC is not set | ||
576 | |||
577 | # | ||
578 | # Fusion MPT device support | ||
579 | # | ||
580 | # CONFIG_FUSION is not set | ||
581 | # CONFIG_FUSION_SPI is not set | ||
582 | # CONFIG_FUSION_FC is not set | ||
583 | # CONFIG_FUSION_SAS is not set | ||
584 | |||
585 | # | ||
586 | # IEEE 1394 (FireWire) support | ||
587 | # | ||
588 | # CONFIG_IEEE1394 is not set | ||
589 | |||
590 | # | ||
591 | # I2O device support | ||
592 | # | ||
593 | # CONFIG_I2O is not set | ||
594 | |||
595 | # | ||
596 | # Macintosh device drivers | ||
597 | # | ||
598 | # CONFIG_MAC_EMUMOUSEBTN is not set | ||
599 | # CONFIG_WINDFARM is not set | ||
600 | |||
601 | # | ||
602 | # Network device support | ||
603 | # | ||
604 | CONFIG_NETDEVICES=y | ||
605 | # CONFIG_DUMMY is not set | ||
606 | # CONFIG_BONDING is not set | ||
607 | # CONFIG_EQUALIZER is not set | ||
608 | # CONFIG_TUN is not set | ||
609 | |||
610 | # | ||
611 | # ARCnet devices | ||
612 | # | ||
613 | # CONFIG_ARCNET is not set | ||
614 | |||
615 | # | ||
616 | # PHY device support | ||
617 | # | ||
618 | # CONFIG_PHYLIB is not set | ||
619 | |||
620 | # | ||
621 | # Ethernet (10 or 100Mbit) | ||
622 | # | ||
623 | CONFIG_NET_ETHERNET=y | ||
624 | CONFIG_MII=y | ||
625 | # CONFIG_HAPPYMEAL is not set | ||
626 | # CONFIG_SUNGEM is not set | ||
627 | # CONFIG_CASSINI is not set | ||
628 | # CONFIG_NET_VENDOR_3COM is not set | ||
629 | |||
630 | # | ||
631 | # Tulip family network device support | ||
632 | # | ||
633 | # CONFIG_NET_TULIP is not set | ||
634 | # CONFIG_HP100 is not set | ||
635 | # CONFIG_NET_PCI is not set | ||
636 | |||
637 | # | ||
638 | # Ethernet (1000 Mbit) | ||
639 | # | ||
640 | # CONFIG_ACENIC is not set | ||
641 | # CONFIG_DL2K is not set | ||
642 | # CONFIG_E1000 is not set | ||
643 | # CONFIG_NS83820 is not set | ||
644 | # CONFIG_HAMACHI is not set | ||
645 | # CONFIG_YELLOWFIN is not set | ||
646 | # CONFIG_R8169 is not set | ||
647 | # CONFIG_SIS190 is not set | ||
648 | # CONFIG_SKGE is not set | ||
649 | # CONFIG_SKY2 is not set | ||
650 | # CONFIG_SK98LIN is not set | ||
651 | # CONFIG_TIGON3 is not set | ||
652 | # CONFIG_BNX2 is not set | ||
653 | CONFIG_SPIDER_NET=y | ||
654 | # CONFIG_QLA3XXX is not set | ||
655 | |||
656 | # | ||
657 | # Ethernet (10000 Mbit) | ||
658 | # | ||
659 | # CONFIG_CHELSIO_T1 is not set | ||
660 | # CONFIG_IXGB is not set | ||
661 | # CONFIG_S2IO is not set | ||
662 | # CONFIG_MYRI10GE is not set | ||
663 | # CONFIG_NETXEN_NIC is not set | ||
664 | |||
665 | # | ||
666 | # Token Ring devices | ||
667 | # | ||
668 | # CONFIG_TR is not set | ||
669 | |||
670 | # | ||
671 | # Wireless LAN (non-hamradio) | ||
672 | # | ||
673 | # CONFIG_NET_RADIO is not set | ||
674 | |||
675 | # | ||
676 | # Wan interfaces | ||
677 | # | ||
678 | # CONFIG_WAN is not set | ||
679 | # CONFIG_FDDI is not set | ||
680 | # CONFIG_HIPPI is not set | ||
681 | # CONFIG_PPP is not set | ||
682 | # CONFIG_SLIP is not set | ||
683 | # CONFIG_NET_FC is not set | ||
684 | # CONFIG_SHAPER is not set | ||
685 | # CONFIG_NETCONSOLE is not set | ||
686 | # CONFIG_NETPOLL is not set | ||
687 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
688 | |||
689 | # | ||
690 | # ISDN subsystem | ||
691 | # | ||
692 | # CONFIG_ISDN is not set | ||
693 | |||
694 | # | ||
695 | # Telephony Support | ||
696 | # | ||
697 | # CONFIG_PHONE is not set | ||
698 | |||
699 | # | ||
700 | # Input device support | ||
701 | # | ||
702 | CONFIG_INPUT=y | ||
703 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
704 | |||
705 | # | ||
706 | # Userland interfaces | ||
707 | # | ||
708 | CONFIG_INPUT_MOUSEDEV=y | ||
709 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
710 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
711 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
712 | # CONFIG_INPUT_JOYDEV is not set | ||
713 | # CONFIG_INPUT_TSDEV is not set | ||
714 | # CONFIG_INPUT_EVDEV is not set | ||
715 | # CONFIG_INPUT_EVBUG is not set | ||
716 | |||
717 | # | ||
718 | # Input Device Drivers | ||
719 | # | ||
720 | # CONFIG_INPUT_KEYBOARD is not set | ||
721 | # CONFIG_INPUT_MOUSE is not set | ||
722 | # CONFIG_INPUT_JOYSTICK is not set | ||
723 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
724 | # CONFIG_INPUT_MISC is not set | ||
725 | |||
726 | # | ||
727 | # Hardware I/O ports | ||
728 | # | ||
729 | CONFIG_SERIO=y | ||
730 | # CONFIG_SERIO_I8042 is not set | ||
731 | CONFIG_SERIO_SERPORT=y | ||
732 | # CONFIG_SERIO_PCIPS2 is not set | ||
733 | # CONFIG_SERIO_RAW is not set | ||
734 | # CONFIG_GAMEPORT is not set | ||
735 | |||
736 | # | ||
737 | # Character devices | ||
738 | # | ||
739 | CONFIG_VT=y | ||
740 | CONFIG_VT_CONSOLE=y | ||
741 | CONFIG_HW_CONSOLE=y | ||
742 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||
743 | CONFIG_SERIAL_NONSTANDARD=y | ||
744 | # CONFIG_COMPUTONE is not set | ||
745 | # CONFIG_ROCKETPORT is not set | ||
746 | # CONFIG_CYCLADES is not set | ||
747 | # CONFIG_DIGIEPCA is not set | ||
748 | # CONFIG_MOXA_INTELLIO is not set | ||
749 | # CONFIG_MOXA_SMARTIO is not set | ||
750 | # CONFIG_MOXA_SMARTIO_NEW is not set | ||
751 | # CONFIG_ISI is not set | ||
752 | # CONFIG_SYNCLINK is not set | ||
753 | # CONFIG_SYNCLINKMP is not set | ||
754 | # CONFIG_SYNCLINK_GT is not set | ||
755 | # CONFIG_N_HDLC is not set | ||
756 | # CONFIG_SPECIALIX is not set | ||
757 | # CONFIG_SX is not set | ||
758 | # CONFIG_RIO is not set | ||
759 | # CONFIG_STALDRV is not set | ||
760 | |||
761 | # | ||
762 | # Serial drivers | ||
763 | # | ||
764 | # CONFIG_SERIAL_8250 is not set | ||
765 | |||
766 | # | ||
767 | # Non-8250 serial port support | ||
768 | # | ||
769 | CONFIG_SERIAL_CORE=y | ||
770 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
771 | CONFIG_SERIAL_TXX9=y | ||
772 | CONFIG_HAS_TXX9_SERIAL=y | ||
773 | CONFIG_SERIAL_TXX9_CONSOLE=y | ||
774 | # CONFIG_SERIAL_TXX9_STDSERIAL is not set | ||
775 | # CONFIG_SERIAL_JSM is not set | ||
776 | CONFIG_UNIX98_PTYS=y | ||
777 | # CONFIG_LEGACY_PTYS is not set | ||
778 | CONFIG_HVC_DRIVER=y | ||
779 | CONFIG_HVC_BEAT=y | ||
780 | |||
781 | # | ||
782 | # IPMI | ||
783 | # | ||
784 | # CONFIG_IPMI_HANDLER is not set | ||
785 | |||
786 | # | ||
787 | # Watchdog Cards | ||
788 | # | ||
789 | CONFIG_WATCHDOG=y | ||
790 | # CONFIG_WATCHDOG_NOWAYOUT is not set | ||
791 | |||
792 | # | ||
793 | # Watchdog Device Drivers | ||
794 | # | ||
795 | # CONFIG_SOFT_WATCHDOG is not set | ||
796 | |||
797 | # | ||
798 | # PCI-based Watchdog Cards | ||
799 | # | ||
800 | # CONFIG_PCIPCWATCHDOG is not set | ||
801 | # CONFIG_WDTPCI is not set | ||
802 | |||
803 | # | ||
804 | # USB-based Watchdog Cards | ||
805 | # | ||
806 | # CONFIG_USBPCWATCHDOG is not set | ||
807 | # CONFIG_HW_RANDOM is not set | ||
808 | CONFIG_GEN_RTC=y | ||
809 | # CONFIG_GEN_RTC_X is not set | ||
810 | # CONFIG_DTLK is not set | ||
811 | # CONFIG_R3964 is not set | ||
812 | # CONFIG_APPLICOM is not set | ||
813 | # CONFIG_AGP is not set | ||
814 | # CONFIG_DRM is not set | ||
815 | # CONFIG_RAW_DRIVER is not set | ||
816 | # CONFIG_HANGCHECK_TIMER is not set | ||
817 | |||
818 | # | ||
819 | # TPM devices | ||
820 | # | ||
821 | # CONFIG_TCG_TPM is not set | ||
822 | |||
823 | # | ||
824 | # I2C support | ||
825 | # | ||
826 | CONFIG_I2C=y | ||
827 | # CONFIG_I2C_CHARDEV is not set | ||
828 | |||
829 | # | ||
830 | # I2C Algorithms | ||
831 | # | ||
832 | CONFIG_I2C_ALGOBIT=y | ||
833 | # CONFIG_I2C_ALGOPCF is not set | ||
834 | # CONFIG_I2C_ALGOPCA is not set | ||
835 | |||
836 | # | ||
837 | # I2C Hardware Bus support | ||
838 | # | ||
839 | # CONFIG_I2C_ALI1535 is not set | ||
840 | # CONFIG_I2C_ALI1563 is not set | ||
841 | # CONFIG_I2C_ALI15X3 is not set | ||
842 | # CONFIG_I2C_AMD756 is not set | ||
843 | # CONFIG_I2C_AMD8111 is not set | ||
844 | # CONFIG_I2C_I801 is not set | ||
845 | # CONFIG_I2C_I810 is not set | ||
846 | # CONFIG_I2C_PIIX4 is not set | ||
847 | # CONFIG_I2C_NFORCE2 is not set | ||
848 | # CONFIG_I2C_OCORES is not set | ||
849 | # CONFIG_I2C_PARPORT_LIGHT is not set | ||
850 | # CONFIG_I2C_PROSAVAGE is not set | ||
851 | # CONFIG_I2C_SAVAGE4 is not set | ||
852 | # CONFIG_I2C_SIS5595 is not set | ||
853 | # CONFIG_I2C_SIS630 is not set | ||
854 | # CONFIG_I2C_SIS96X is not set | ||
855 | # CONFIG_I2C_STUB is not set | ||
856 | # CONFIG_I2C_VIA is not set | ||
857 | # CONFIG_I2C_VIAPRO is not set | ||
858 | # CONFIG_I2C_VOODOO3 is not set | ||
859 | # CONFIG_I2C_PCA_ISA is not set | ||
860 | |||
861 | # | ||
862 | # Miscellaneous I2C Chip support | ||
863 | # | ||
864 | # CONFIG_SENSORS_DS1337 is not set | ||
865 | # CONFIG_SENSORS_DS1374 is not set | ||
866 | # CONFIG_SENSORS_EEPROM is not set | ||
867 | # CONFIG_SENSORS_PCF8574 is not set | ||
868 | # CONFIG_SENSORS_PCA9539 is not set | ||
869 | # CONFIG_SENSORS_PCF8591 is not set | ||
870 | # CONFIG_SENSORS_MAX6875 is not set | ||
871 | # CONFIG_I2C_DEBUG_CORE is not set | ||
872 | # CONFIG_I2C_DEBUG_ALGO is not set | ||
873 | # CONFIG_I2C_DEBUG_BUS is not set | ||
874 | # CONFIG_I2C_DEBUG_CHIP is not set | ||
875 | |||
876 | # | ||
877 | # SPI support | ||
878 | # | ||
879 | # CONFIG_SPI is not set | ||
880 | # CONFIG_SPI_MASTER is not set | ||
881 | |||
882 | # | ||
883 | # Dallas's 1-wire bus | ||
884 | # | ||
885 | # CONFIG_W1 is not set | ||
886 | |||
887 | # | ||
888 | # Hardware Monitoring support | ||
889 | # | ||
890 | # CONFIG_HWMON is not set | ||
891 | # CONFIG_HWMON_VID is not set | ||
892 | |||
893 | # | ||
894 | # Multimedia devices | ||
895 | # | ||
896 | # CONFIG_VIDEO_DEV is not set | ||
897 | |||
898 | # | ||
899 | # Digital Video Broadcasting Devices | ||
900 | # | ||
901 | # CONFIG_DVB is not set | ||
902 | # CONFIG_USB_DABUSB is not set | ||
903 | |||
904 | # | ||
905 | # Graphics support | ||
906 | # | ||
907 | # CONFIG_FIRMWARE_EDID is not set | ||
908 | # CONFIG_FB is not set | ||
909 | # CONFIG_FB_IBM_GXT4500 is not set | ||
910 | |||
911 | # | ||
912 | # Console display driver support | ||
913 | # | ||
914 | # CONFIG_VGA_CONSOLE is not set | ||
915 | CONFIG_DUMMY_CONSOLE=y | ||
916 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
917 | |||
918 | # | ||
919 | # Sound | ||
920 | # | ||
921 | # CONFIG_SOUND is not set | ||
922 | |||
923 | # | ||
924 | # HID Devices | ||
925 | # | ||
926 | CONFIG_HID=y | ||
927 | |||
928 | # | ||
929 | # USB support | ||
930 | # | ||
931 | CONFIG_USB_ARCH_HAS_HCD=y | ||
932 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
933 | CONFIG_USB_ARCH_HAS_EHCI=y | ||
934 | CONFIG_USB=y | ||
935 | # CONFIG_USB_DEBUG is not set | ||
936 | |||
937 | # | ||
938 | # Miscellaneous USB options | ||
939 | # | ||
940 | CONFIG_USB_DEVICEFS=y | ||
941 | # CONFIG_USB_BANDWIDTH is not set | ||
942 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
943 | # CONFIG_USB_MULTITHREAD_PROBE is not set | ||
944 | # CONFIG_USB_OTG is not set | ||
945 | |||
946 | # | ||
947 | # USB Host Controller Drivers | ||
948 | # | ||
949 | CONFIG_USB_EHCI_HCD=m | ||
950 | # CONFIG_USB_EHCI_SPLIT_ISO is not set | ||
951 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set | ||
952 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set | ||
953 | CONFIG_USB_EHCI_BIG_ENDIAN_MMIO=y | ||
954 | # CONFIG_USB_ISP116X_HCD is not set | ||
955 | CONFIG_USB_OHCI_HCD=m | ||
956 | # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set | ||
957 | CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y | ||
958 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y | ||
959 | # CONFIG_USB_UHCI_HCD is not set | ||
960 | # CONFIG_USB_SL811_HCD is not set | ||
961 | |||
962 | # | ||
963 | # USB Device Class drivers | ||
964 | # | ||
965 | # CONFIG_USB_ACM is not set | ||
966 | # CONFIG_USB_PRINTER is not set | ||
967 | |||
968 | # | ||
969 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||
970 | # | ||
971 | |||
972 | # | ||
973 | # may also be needed; see USB_STORAGE Help for more information | ||
974 | # | ||
975 | CONFIG_USB_STORAGE=m | ||
976 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
977 | # CONFIG_USB_STORAGE_DATAFAB is not set | ||
978 | # CONFIG_USB_STORAGE_FREECOM is not set | ||
979 | # CONFIG_USB_STORAGE_ISD200 is not set | ||
980 | # CONFIG_USB_STORAGE_DPCM is not set | ||
981 | # CONFIG_USB_STORAGE_USBAT is not set | ||
982 | # CONFIG_USB_STORAGE_SDDR09 is not set | ||
983 | # CONFIG_USB_STORAGE_SDDR55 is not set | ||
984 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | ||
985 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
986 | # CONFIG_USB_STORAGE_KARMA is not set | ||
987 | # CONFIG_USB_LIBUSUAL is not set | ||
988 | |||
989 | # | ||
990 | # USB Input Devices | ||
991 | # | ||
992 | CONFIG_USB_HID=y | ||
993 | # CONFIG_USB_HIDINPUT_POWERBOOK is not set | ||
994 | # CONFIG_HID_FF is not set | ||
995 | CONFIG_USB_HIDDEV=y | ||
996 | # CONFIG_USB_AIPTEK is not set | ||
997 | # CONFIG_USB_WACOM is not set | ||
998 | # CONFIG_USB_ACECAD is not set | ||
999 | # CONFIG_USB_KBTAB is not set | ||
1000 | # CONFIG_USB_POWERMATE is not set | ||
1001 | # CONFIG_USB_TOUCHSCREEN is not set | ||
1002 | # CONFIG_USB_YEALINK is not set | ||
1003 | # CONFIG_USB_XPAD is not set | ||
1004 | # CONFIG_USB_ATI_REMOTE is not set | ||
1005 | # CONFIG_USB_ATI_REMOTE2 is not set | ||
1006 | # CONFIG_USB_KEYSPAN_REMOTE is not set | ||
1007 | # CONFIG_USB_APPLETOUCH is not set | ||
1008 | |||
1009 | # | ||
1010 | # USB Imaging devices | ||
1011 | # | ||
1012 | # CONFIG_USB_MDC800 is not set | ||
1013 | # CONFIG_USB_MICROTEK is not set | ||
1014 | |||
1015 | # | ||
1016 | # USB Network Adapters | ||
1017 | # | ||
1018 | # CONFIG_USB_CATC is not set | ||
1019 | # CONFIG_USB_KAWETH is not set | ||
1020 | # CONFIG_USB_PEGASUS is not set | ||
1021 | # CONFIG_USB_RTL8150 is not set | ||
1022 | # CONFIG_USB_USBNET_MII is not set | ||
1023 | # CONFIG_USB_USBNET is not set | ||
1024 | CONFIG_USB_MON=y | ||
1025 | |||
1026 | # | ||
1027 | # USB port drivers | ||
1028 | # | ||
1029 | |||
1030 | # | ||
1031 | # USB Serial Converter support | ||
1032 | # | ||
1033 | # CONFIG_USB_SERIAL is not set | ||
1034 | |||
1035 | # | ||
1036 | # USB Miscellaneous drivers | ||
1037 | # | ||
1038 | # CONFIG_USB_EMI62 is not set | ||
1039 | # CONFIG_USB_EMI26 is not set | ||
1040 | # CONFIG_USB_ADUTUX is not set | ||
1041 | # CONFIG_USB_AUERSWALD is not set | ||
1042 | # CONFIG_USB_RIO500 is not set | ||
1043 | # CONFIG_USB_LEGOTOWER is not set | ||
1044 | # CONFIG_USB_LCD is not set | ||
1045 | # CONFIG_USB_LED is not set | ||
1046 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
1047 | # CONFIG_USB_CYTHERM is not set | ||
1048 | # CONFIG_USB_PHIDGET is not set | ||
1049 | # CONFIG_USB_IDMOUSE is not set | ||
1050 | # CONFIG_USB_FTDI_ELAN is not set | ||
1051 | # CONFIG_USB_APPLEDISPLAY is not set | ||
1052 | # CONFIG_USB_SISUSBVGA is not set | ||
1053 | # CONFIG_USB_LD is not set | ||
1054 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
1055 | # CONFIG_USB_TEST is not set | ||
1056 | |||
1057 | # | ||
1058 | # USB DSL modem support | ||
1059 | # | ||
1060 | |||
1061 | # | ||
1062 | # USB Gadget Support | ||
1063 | # | ||
1064 | # CONFIG_USB_GADGET is not set | ||
1065 | |||
1066 | # | ||
1067 | # MMC/SD Card support | ||
1068 | # | ||
1069 | # CONFIG_MMC is not set | ||
1070 | |||
1071 | # | ||
1072 | # LED devices | ||
1073 | # | ||
1074 | # CONFIG_NEW_LEDS is not set | ||
1075 | |||
1076 | # | ||
1077 | # LED drivers | ||
1078 | # | ||
1079 | |||
1080 | # | ||
1081 | # LED Triggers | ||
1082 | # | ||
1083 | |||
1084 | # | ||
1085 | # InfiniBand support | ||
1086 | # | ||
1087 | # CONFIG_INFINIBAND is not set | ||
1088 | |||
1089 | # | ||
1090 | # EDAC - error detection and reporting (RAS) (EXPERIMENTAL) | ||
1091 | # | ||
1092 | |||
1093 | # | ||
1094 | # Real Time Clock | ||
1095 | # | ||
1096 | # CONFIG_RTC_CLASS is not set | ||
1097 | |||
1098 | # | ||
1099 | # DMA Engine support | ||
1100 | # | ||
1101 | # CONFIG_DMA_ENGINE is not set | ||
1102 | |||
1103 | # | ||
1104 | # DMA Clients | ||
1105 | # | ||
1106 | |||
1107 | # | ||
1108 | # DMA Devices | ||
1109 | # | ||
1110 | |||
1111 | # | ||
1112 | # Virtualization | ||
1113 | # | ||
1114 | |||
1115 | # | ||
1116 | # File systems | ||
1117 | # | ||
1118 | CONFIG_EXT2_FS=y | ||
1119 | CONFIG_EXT2_FS_XATTR=y | ||
1120 | CONFIG_EXT2_FS_POSIX_ACL=y | ||
1121 | CONFIG_EXT2_FS_SECURITY=y | ||
1122 | CONFIG_EXT2_FS_XIP=y | ||
1123 | CONFIG_FS_XIP=y | ||
1124 | CONFIG_EXT3_FS=y | ||
1125 | CONFIG_EXT3_FS_XATTR=y | ||
1126 | CONFIG_EXT3_FS_POSIX_ACL=y | ||
1127 | CONFIG_EXT3_FS_SECURITY=y | ||
1128 | # CONFIG_EXT4DEV_FS is not set | ||
1129 | CONFIG_JBD=y | ||
1130 | # CONFIG_JBD_DEBUG is not set | ||
1131 | CONFIG_FS_MBCACHE=y | ||
1132 | # CONFIG_REISERFS_FS is not set | ||
1133 | # CONFIG_JFS_FS is not set | ||
1134 | CONFIG_FS_POSIX_ACL=y | ||
1135 | # CONFIG_XFS_FS is not set | ||
1136 | # CONFIG_GFS2_FS is not set | ||
1137 | # CONFIG_OCFS2_FS is not set | ||
1138 | # CONFIG_MINIX_FS is not set | ||
1139 | # CONFIG_ROMFS_FS is not set | ||
1140 | CONFIG_INOTIFY=y | ||
1141 | CONFIG_INOTIFY_USER=y | ||
1142 | # CONFIG_QUOTA is not set | ||
1143 | CONFIG_DNOTIFY=y | ||
1144 | # CONFIG_AUTOFS_FS is not set | ||
1145 | # CONFIG_AUTOFS4_FS is not set | ||
1146 | # CONFIG_FUSE_FS is not set | ||
1147 | |||
1148 | # | ||
1149 | # CD-ROM/DVD Filesystems | ||
1150 | # | ||
1151 | CONFIG_ISO9660_FS=m | ||
1152 | CONFIG_JOLIET=y | ||
1153 | # CONFIG_ZISOFS is not set | ||
1154 | CONFIG_UDF_FS=m | ||
1155 | CONFIG_UDF_NLS=y | ||
1156 | |||
1157 | # | ||
1158 | # DOS/FAT/NT Filesystems | ||
1159 | # | ||
1160 | CONFIG_FAT_FS=m | ||
1161 | CONFIG_MSDOS_FS=m | ||
1162 | CONFIG_VFAT_FS=m | ||
1163 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | ||
1164 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | ||
1165 | # CONFIG_NTFS_FS is not set | ||
1166 | |||
1167 | # | ||
1168 | # Pseudo filesystems | ||
1169 | # | ||
1170 | CONFIG_PROC_FS=y | ||
1171 | CONFIG_PROC_KCORE=y | ||
1172 | CONFIG_PROC_SYSCTL=y | ||
1173 | CONFIG_SYSFS=y | ||
1174 | CONFIG_TMPFS=y | ||
1175 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
1176 | CONFIG_HUGETLBFS=y | ||
1177 | CONFIG_HUGETLB_PAGE=y | ||
1178 | CONFIG_RAMFS=y | ||
1179 | # CONFIG_CONFIGFS_FS is not set | ||
1180 | |||
1181 | # | ||
1182 | # Miscellaneous filesystems | ||
1183 | # | ||
1184 | # CONFIG_ADFS_FS is not set | ||
1185 | # CONFIG_AFFS_FS is not set | ||
1186 | # CONFIG_HFS_FS is not set | ||
1187 | # CONFIG_HFSPLUS_FS is not set | ||
1188 | # CONFIG_BEFS_FS is not set | ||
1189 | # CONFIG_BFS_FS is not set | ||
1190 | # CONFIG_EFS_FS is not set | ||
1191 | # CONFIG_CRAMFS is not set | ||
1192 | # CONFIG_VXFS_FS is not set | ||
1193 | # CONFIG_HPFS_FS is not set | ||
1194 | # CONFIG_QNX4FS_FS is not set | ||
1195 | # CONFIG_SYSV_FS is not set | ||
1196 | # CONFIG_UFS_FS is not set | ||
1197 | |||
1198 | # | ||
1199 | # Network File Systems | ||
1200 | # | ||
1201 | CONFIG_NFS_FS=m | ||
1202 | CONFIG_NFS_V3=y | ||
1203 | CONFIG_NFS_V3_ACL=y | ||
1204 | # CONFIG_NFS_V4 is not set | ||
1205 | # CONFIG_NFS_DIRECTIO is not set | ||
1206 | CONFIG_NFSD=m | ||
1207 | CONFIG_NFSD_V2_ACL=y | ||
1208 | CONFIG_NFSD_V3=y | ||
1209 | CONFIG_NFSD_V3_ACL=y | ||
1210 | # CONFIG_NFSD_V4 is not set | ||
1211 | CONFIG_NFSD_TCP=y | ||
1212 | CONFIG_LOCKD=m | ||
1213 | CONFIG_LOCKD_V4=y | ||
1214 | CONFIG_EXPORTFS=m | ||
1215 | CONFIG_NFS_ACL_SUPPORT=m | ||
1216 | CONFIG_NFS_COMMON=y | ||
1217 | CONFIG_SUNRPC=m | ||
1218 | # CONFIG_RPCSEC_GSS_KRB5 is not set | ||
1219 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
1220 | # CONFIG_SMB_FS is not set | ||
1221 | # CONFIG_CIFS is not set | ||
1222 | # CONFIG_NCP_FS is not set | ||
1223 | # CONFIG_CODA_FS is not set | ||
1224 | # CONFIG_AFS_FS is not set | ||
1225 | # CONFIG_9P_FS is not set | ||
1226 | |||
1227 | # | ||
1228 | # Partition Types | ||
1229 | # | ||
1230 | CONFIG_PARTITION_ADVANCED=y | ||
1231 | # CONFIG_ACORN_PARTITION is not set | ||
1232 | # CONFIG_OSF_PARTITION is not set | ||
1233 | # CONFIG_AMIGA_PARTITION is not set | ||
1234 | # CONFIG_ATARI_PARTITION is not set | ||
1235 | # CONFIG_MAC_PARTITION is not set | ||
1236 | CONFIG_MSDOS_PARTITION=y | ||
1237 | # CONFIG_BSD_DISKLABEL is not set | ||
1238 | # CONFIG_MINIX_SUBPARTITION is not set | ||
1239 | # CONFIG_SOLARIS_X86_PARTITION is not set | ||
1240 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
1241 | # CONFIG_LDM_PARTITION is not set | ||
1242 | # CONFIG_SGI_PARTITION is not set | ||
1243 | # CONFIG_ULTRIX_PARTITION is not set | ||
1244 | # CONFIG_SUN_PARTITION is not set | ||
1245 | # CONFIG_KARMA_PARTITION is not set | ||
1246 | CONFIG_EFI_PARTITION=y | ||
1247 | |||
1248 | # | ||
1249 | # Native Language Support | ||
1250 | # | ||
1251 | CONFIG_NLS=m | ||
1252 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
1253 | # CONFIG_NLS_CODEPAGE_437 is not set | ||
1254 | # CONFIG_NLS_CODEPAGE_737 is not set | ||
1255 | # CONFIG_NLS_CODEPAGE_775 is not set | ||
1256 | # CONFIG_NLS_CODEPAGE_850 is not set | ||
1257 | # CONFIG_NLS_CODEPAGE_852 is not set | ||
1258 | # CONFIG_NLS_CODEPAGE_855 is not set | ||
1259 | # CONFIG_NLS_CODEPAGE_857 is not set | ||
1260 | # CONFIG_NLS_CODEPAGE_860 is not set | ||
1261 | # CONFIG_NLS_CODEPAGE_861 is not set | ||
1262 | # CONFIG_NLS_CODEPAGE_862 is not set | ||
1263 | # CONFIG_NLS_CODEPAGE_863 is not set | ||
1264 | # CONFIG_NLS_CODEPAGE_864 is not set | ||
1265 | # CONFIG_NLS_CODEPAGE_865 is not set | ||
1266 | # CONFIG_NLS_CODEPAGE_866 is not set | ||
1267 | # CONFIG_NLS_CODEPAGE_869 is not set | ||
1268 | # CONFIG_NLS_CODEPAGE_936 is not set | ||
1269 | # CONFIG_NLS_CODEPAGE_950 is not set | ||
1270 | # CONFIG_NLS_CODEPAGE_932 is not set | ||
1271 | # CONFIG_NLS_CODEPAGE_949 is not set | ||
1272 | # CONFIG_NLS_CODEPAGE_874 is not set | ||
1273 | # CONFIG_NLS_ISO8859_8 is not set | ||
1274 | # CONFIG_NLS_CODEPAGE_1250 is not set | ||
1275 | # CONFIG_NLS_CODEPAGE_1251 is not set | ||
1276 | # CONFIG_NLS_ASCII is not set | ||
1277 | CONFIG_NLS_ISO8859_1=m | ||
1278 | CONFIG_NLS_ISO8859_2=m | ||
1279 | CONFIG_NLS_ISO8859_3=m | ||
1280 | CONFIG_NLS_ISO8859_4=m | ||
1281 | CONFIG_NLS_ISO8859_5=m | ||
1282 | CONFIG_NLS_ISO8859_6=m | ||
1283 | CONFIG_NLS_ISO8859_7=m | ||
1284 | CONFIG_NLS_ISO8859_9=m | ||
1285 | CONFIG_NLS_ISO8859_13=m | ||
1286 | CONFIG_NLS_ISO8859_14=m | ||
1287 | CONFIG_NLS_ISO8859_15=m | ||
1288 | # CONFIG_NLS_KOI8_R is not set | ||
1289 | # CONFIG_NLS_KOI8_U is not set | ||
1290 | # CONFIG_NLS_UTF8 is not set | ||
1291 | |||
1292 | # | ||
1293 | # Distributed Lock Manager | ||
1294 | # | ||
1295 | # CONFIG_DLM is not set | ||
1296 | |||
1297 | # | ||
1298 | # Library routines | ||
1299 | # | ||
1300 | CONFIG_BITREVERSE=y | ||
1301 | # CONFIG_CRC_CCITT is not set | ||
1302 | # CONFIG_CRC16 is not set | ||
1303 | CONFIG_CRC32=y | ||
1304 | CONFIG_LIBCRC32C=m | ||
1305 | CONFIG_ZLIB_INFLATE=m | ||
1306 | CONFIG_ZLIB_DEFLATE=m | ||
1307 | CONFIG_PLIST=y | ||
1308 | CONFIG_IOMAP_COPY=y | ||
1309 | |||
1310 | # | ||
1311 | # Instrumentation Support | ||
1312 | # | ||
1313 | # CONFIG_PROFILING is not set | ||
1314 | # CONFIG_KPROBES is not set | ||
1315 | |||
1316 | # | ||
1317 | # Kernel hacking | ||
1318 | # | ||
1319 | # CONFIG_PRINTK_TIME is not set | ||
1320 | CONFIG_ENABLE_MUST_CHECK=y | ||
1321 | CONFIG_MAGIC_SYSRQ=y | ||
1322 | # CONFIG_UNUSED_SYMBOLS is not set | ||
1323 | CONFIG_DEBUG_FS=y | ||
1324 | # CONFIG_HEADERS_CHECK is not set | ||
1325 | CONFIG_DEBUG_KERNEL=y | ||
1326 | CONFIG_LOG_BUF_SHIFT=15 | ||
1327 | CONFIG_DETECT_SOFTLOCKUP=y | ||
1328 | # CONFIG_SCHEDSTATS is not set | ||
1329 | # CONFIG_DEBUG_SLAB is not set | ||
1330 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
1331 | # CONFIG_RT_MUTEX_TESTER is not set | ||
1332 | # CONFIG_DEBUG_SPINLOCK is not set | ||
1333 | CONFIG_DEBUG_MUTEXES=y | ||
1334 | # CONFIG_DEBUG_RWSEMS is not set | ||
1335 | CONFIG_DEBUG_SPINLOCK_SLEEP=y | ||
1336 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
1337 | # CONFIG_DEBUG_KOBJECT is not set | ||
1338 | CONFIG_DEBUG_BUGVERBOSE=y | ||
1339 | # CONFIG_DEBUG_INFO is not set | ||
1340 | # CONFIG_DEBUG_VM is not set | ||
1341 | # CONFIG_DEBUG_LIST is not set | ||
1342 | # CONFIG_FORCED_INLINING is not set | ||
1343 | # CONFIG_RCU_TORTURE_TEST is not set | ||
1344 | # CONFIG_DEBUG_STACKOVERFLOW is not set | ||
1345 | # CONFIG_DEBUG_STACK_USAGE is not set | ||
1346 | CONFIG_DEBUGGER=y | ||
1347 | CONFIG_XMON=y | ||
1348 | CONFIG_XMON_DEFAULT=y | ||
1349 | CONFIG_XMON_DISASSEMBLY=y | ||
1350 | CONFIG_IRQSTACKS=y | ||
1351 | # CONFIG_BOOTX_TEXT is not set | ||
1352 | CONFIG_PPC_EARLY_DEBUG=y | ||
1353 | # CONFIG_PPC_EARLY_DEBUG_LPAR is not set | ||
1354 | # CONFIG_PPC_EARLY_DEBUG_G5 is not set | ||
1355 | # CONFIG_PPC_EARLY_DEBUG_RTAS_PANEL is not set | ||
1356 | # CONFIG_PPC_EARLY_DEBUG_RTAS_CONSOLE is not set | ||
1357 | # CONFIG_PPC_EARLY_DEBUG_MAPLE is not set | ||
1358 | # CONFIG_PPC_EARLY_DEBUG_ISERIES is not set | ||
1359 | CONFIG_PPC_EARLY_DEBUG_BEAT=y | ||
1360 | |||
1361 | # | ||
1362 | # Security options | ||
1363 | # | ||
1364 | # CONFIG_KEYS is not set | ||
1365 | # CONFIG_SECURITY is not set | ||
1366 | |||
1367 | # | ||
1368 | # Cryptographic options | ||
1369 | # | ||
1370 | CONFIG_CRYPTO=y | ||
1371 | CONFIG_CRYPTO_ALGAPI=y | ||
1372 | CONFIG_CRYPTO_BLKCIPHER=m | ||
1373 | CONFIG_CRYPTO_HASH=y | ||
1374 | CONFIG_CRYPTO_MANAGER=y | ||
1375 | CONFIG_CRYPTO_HMAC=y | ||
1376 | # CONFIG_CRYPTO_XCBC is not set | ||
1377 | CONFIG_CRYPTO_NULL=m | ||
1378 | CONFIG_CRYPTO_MD4=m | ||
1379 | CONFIG_CRYPTO_MD5=y | ||
1380 | CONFIG_CRYPTO_SHA1=m | ||
1381 | CONFIG_CRYPTO_SHA256=m | ||
1382 | CONFIG_CRYPTO_SHA512=m | ||
1383 | CONFIG_CRYPTO_WP512=m | ||
1384 | CONFIG_CRYPTO_TGR192=m | ||
1385 | # CONFIG_CRYPTO_GF128MUL is not set | ||
1386 | CONFIG_CRYPTO_ECB=m | ||
1387 | CONFIG_CRYPTO_CBC=m | ||
1388 | # CONFIG_CRYPTO_LRW is not set | ||
1389 | CONFIG_CRYPTO_DES=m | ||
1390 | CONFIG_CRYPTO_BLOWFISH=m | ||
1391 | CONFIG_CRYPTO_TWOFISH=m | ||
1392 | CONFIG_CRYPTO_TWOFISH_COMMON=m | ||
1393 | CONFIG_CRYPTO_SERPENT=m | ||
1394 | CONFIG_CRYPTO_AES=m | ||
1395 | CONFIG_CRYPTO_CAST5=m | ||
1396 | CONFIG_CRYPTO_CAST6=m | ||
1397 | CONFIG_CRYPTO_TEA=m | ||
1398 | CONFIG_CRYPTO_ARC4=m | ||
1399 | CONFIG_CRYPTO_KHAZAD=m | ||
1400 | CONFIG_CRYPTO_ANUBIS=m | ||
1401 | CONFIG_CRYPTO_DEFLATE=m | ||
1402 | CONFIG_CRYPTO_MICHAEL_MIC=m | ||
1403 | CONFIG_CRYPTO_CRC32C=m | ||
1404 | CONFIG_CRYPTO_TEST=m | ||
1405 | |||
1406 | # | ||
1407 | # Hardware crypto devices | ||
1408 | # | ||
diff --git a/arch/powerpc/configs/mpc8272_ads_defconfig b/arch/powerpc/configs/mpc8272_ads_defconfig new file mode 100644 index 000000000000..2af45025082f --- /dev/null +++ b/arch/powerpc/configs/mpc8272_ads_defconfig | |||
@@ -0,0 +1,848 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.17-rc5 | ||
4 | # Fri Jul 14 20:36:35 2006 | ||
5 | # | ||
6 | # CONFIG_PPC64 is not set | ||
7 | CONFIG_PPC32=y | ||
8 | CONFIG_PPC_MERGE=y | ||
9 | CONFIG_MMU=y | ||
10 | CONFIG_GENERIC_HARDIRQS=y | ||
11 | CONFIG_IRQ_PER_CPU=y | ||
12 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | ||
13 | CONFIG_GENERIC_HWEIGHT=y | ||
14 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
15 | CONFIG_GENERIC_FIND_NEXT_BIT=y | ||
16 | CONFIG_PPC=y | ||
17 | CONFIG_EARLY_PRINTK=y | ||
18 | CONFIG_GENERIC_NVRAM=y | ||
19 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | ||
20 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y | ||
21 | CONFIG_PPC_OF=y | ||
22 | # CONFIG_PPC_UDBG_16550 is not set | ||
23 | # CONFIG_GENERIC_TBSYNC is not set | ||
24 | # CONFIG_DEFAULT_UIMAGE is not set | ||
25 | |||
26 | # | ||
27 | # Processor support | ||
28 | # | ||
29 | # CONFIG_CLASSIC32 is not set | ||
30 | # CONFIG_PPC_52xx is not set | ||
31 | CONFIG_PPC_82xx=y | ||
32 | # CONFIG_PPC_83xx is not set | ||
33 | # CONFIG_PPC_85xx is not set | ||
34 | # CONFIG_40x is not set | ||
35 | # CONFIG_44x is not set | ||
36 | # CONFIG_8xx is not set | ||
37 | # CONFIG_E200 is not set | ||
38 | CONFIG_6xx=y | ||
39 | CONFIG_PPC_FPU=y | ||
40 | CONFIG_PPC_STD_MMU=y | ||
41 | CONFIG_PPC_STD_MMU_32=y | ||
42 | # CONFIG_SMP is not set | ||
43 | |||
44 | # | ||
45 | # Code maturity level options | ||
46 | # | ||
47 | # CONFIG_EXPERIMENTAL is not set | ||
48 | CONFIG_BROKEN_ON_SMP=y | ||
49 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
50 | |||
51 | # | ||
52 | # General setup | ||
53 | # | ||
54 | CONFIG_LOCALVERSION="powerpc8272" | ||
55 | CONFIG_LOCALVERSION_AUTO=y | ||
56 | CONFIG_SWAP=y | ||
57 | CONFIG_SYSVIPC=y | ||
58 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
59 | CONFIG_SYSCTL=y | ||
60 | # CONFIG_AUDIT is not set | ||
61 | CONFIG_IKCONFIG=y | ||
62 | CONFIG_IKCONFIG_PROC=y | ||
63 | # CONFIG_RELAY is not set | ||
64 | CONFIG_INITRAMFS_SOURCE="" | ||
65 | CONFIG_EMBEDDED=y | ||
66 | CONFIG_KALLSYMS=y | ||
67 | CONFIG_KALLSYMS_ALL=y | ||
68 | CONFIG_KALLSYMS_EXTRA_PASS=y | ||
69 | CONFIG_HOTPLUG=y | ||
70 | CONFIG_PRINTK=y | ||
71 | CONFIG_BUG=y | ||
72 | CONFIG_ELF_CORE=y | ||
73 | CONFIG_BASE_FULL=y | ||
74 | CONFIG_FUTEX=y | ||
75 | CONFIG_EPOLL=y | ||
76 | CONFIG_SHMEM=y | ||
77 | CONFIG_SLAB=y | ||
78 | # CONFIG_TINY_SHMEM is not set | ||
79 | CONFIG_BASE_SMALL=0 | ||
80 | # CONFIG_SLOB is not set | ||
81 | |||
82 | # | ||
83 | # Loadable module support | ||
84 | # | ||
85 | # CONFIG_MODULES is not set | ||
86 | |||
87 | # | ||
88 | # Block layer | ||
89 | # | ||
90 | # CONFIG_LBD is not set | ||
91 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
92 | # CONFIG_LSF is not set | ||
93 | |||
94 | # | ||
95 | # IO Schedulers | ||
96 | # | ||
97 | CONFIG_IOSCHED_NOOP=y | ||
98 | CONFIG_IOSCHED_AS=y | ||
99 | CONFIG_IOSCHED_DEADLINE=y | ||
100 | CONFIG_IOSCHED_CFQ=y | ||
101 | CONFIG_DEFAULT_AS=y | ||
102 | # CONFIG_DEFAULT_DEADLINE is not set | ||
103 | # CONFIG_DEFAULT_CFQ is not set | ||
104 | # CONFIG_DEFAULT_NOOP is not set | ||
105 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
106 | CONFIG_PQ2ADS=y | ||
107 | CONFIG_8260=y | ||
108 | CONFIG_8272=y | ||
109 | CONFIG_CPM2=y | ||
110 | # CONFIG_WANT_EARLY_SERIAL is not set | ||
111 | CONFIG_EMBEDDEDBOOT=y | ||
112 | |||
113 | # | ||
114 | # Platform support | ||
115 | # | ||
116 | CONFIG_ADS8272=y | ||
117 | |||
118 | # | ||
119 | # Kernel options | ||
120 | # | ||
121 | # CONFIG_HIGHMEM is not set | ||
122 | # CONFIG_HZ_100 is not set | ||
123 | CONFIG_HZ_250=y | ||
124 | # CONFIG_HZ_1000 is not set | ||
125 | CONFIG_HZ=250 | ||
126 | CONFIG_PREEMPT_NONE=y | ||
127 | # CONFIG_PREEMPT_VOLUNTARY is not set | ||
128 | # CONFIG_PREEMPT is not set | ||
129 | CONFIG_BINFMT_ELF=y | ||
130 | CONFIG_BINFMT_MISC=y | ||
131 | # CONFIG_PC_KEYBOARD is not set | ||
132 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
133 | CONFIG_FLATMEM=y | ||
134 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
135 | # CONFIG_SPARSEMEM_STATIC is not set | ||
136 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
137 | CONFIG_PROC_DEVICETREE=y | ||
138 | # CONFIG_CMDLINE_BOOL is not set | ||
139 | # CONFIG_PM is not set | ||
140 | # CONFIG_SOFTWARE_SUSPEND is not set | ||
141 | CONFIG_SECCOMP=y | ||
142 | CONFIG_ISA_DMA_API=y | ||
143 | |||
144 | # | ||
145 | # Bus options | ||
146 | # | ||
147 | # CONFIG_PPC_I8259 is not set | ||
148 | CONFIG_FSL_SOC=y | ||
149 | # CONFIG_PCI is not set | ||
150 | # CONFIG_PCI_DOMAINS is not set | ||
151 | |||
152 | # | ||
153 | # PCCARD (PCMCIA/CardBus) support | ||
154 | # | ||
155 | # CONFIG_PCCARD is not set | ||
156 | |||
157 | # | ||
158 | # PCI Hotplug Support | ||
159 | # | ||
160 | |||
161 | # | ||
162 | # Advanced setup | ||
163 | # | ||
164 | # CONFIG_ADVANCED_OPTIONS is not set | ||
165 | |||
166 | # | ||
167 | # Default settings for advanced configuration options are used | ||
168 | # | ||
169 | CONFIG_HIGHMEM_START=0xfe000000 | ||
170 | CONFIG_LOWMEM_SIZE=0x30000000 | ||
171 | CONFIG_KERNEL_START=0xc0000000 | ||
172 | CONFIG_TASK_SIZE=0x80000000 | ||
173 | CONFIG_BOOT_LOAD=0x00400000 | ||
174 | |||
175 | # | ||
176 | # Networking | ||
177 | # | ||
178 | CONFIG_NET=y | ||
179 | |||
180 | # | ||
181 | # Networking options | ||
182 | # | ||
183 | # CONFIG_NETDEBUG is not set | ||
184 | CONFIG_PACKET=y | ||
185 | # CONFIG_PACKET_MMAP is not set | ||
186 | CONFIG_UNIX=y | ||
187 | # CONFIG_NET_KEY is not set | ||
188 | CONFIG_INET=y | ||
189 | CONFIG_IP_MULTICAST=y | ||
190 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
191 | CONFIG_IP_FIB_HASH=y | ||
192 | CONFIG_IP_PNP=y | ||
193 | CONFIG_IP_PNP_DHCP=y | ||
194 | CONFIG_IP_PNP_BOOTP=y | ||
195 | # CONFIG_IP_PNP_RARP is not set | ||
196 | # CONFIG_NET_IPIP is not set | ||
197 | # CONFIG_NET_IPGRE is not set | ||
198 | # CONFIG_IP_MROUTE is not set | ||
199 | CONFIG_SYN_COOKIES=y | ||
200 | # CONFIG_INET_AH is not set | ||
201 | # CONFIG_INET_ESP is not set | ||
202 | # CONFIG_INET_IPCOMP is not set | ||
203 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
204 | # CONFIG_INET_TUNNEL is not set | ||
205 | CONFIG_INET_DIAG=y | ||
206 | CONFIG_INET_TCP_DIAG=y | ||
207 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
208 | CONFIG_TCP_CONG_BIC=y | ||
209 | |||
210 | # | ||
211 | # IP: Virtual Server Configuration | ||
212 | # | ||
213 | # CONFIG_IP_VS is not set | ||
214 | CONFIG_IPV6=y | ||
215 | # CONFIG_IPV6_PRIVACY is not set | ||
216 | # CONFIG_IPV6_ROUTER_PREF is not set | ||
217 | # CONFIG_INET6_AH is not set | ||
218 | # CONFIG_INET6_ESP is not set | ||
219 | # CONFIG_INET6_IPCOMP is not set | ||
220 | # CONFIG_INET6_XFRM_TUNNEL is not set | ||
221 | # CONFIG_INET6_TUNNEL is not set | ||
222 | # CONFIG_IPV6_TUNNEL is not set | ||
223 | CONFIG_NETFILTER=y | ||
224 | # CONFIG_NETFILTER_DEBUG is not set | ||
225 | |||
226 | # | ||
227 | # Core Netfilter Configuration | ||
228 | # | ||
229 | # CONFIG_NETFILTER_NETLINK is not set | ||
230 | # CONFIG_NETFILTER_XTABLES is not set | ||
231 | |||
232 | # | ||
233 | # IP: Netfilter Configuration | ||
234 | # | ||
235 | # CONFIG_IP_NF_CONNTRACK is not set | ||
236 | # CONFIG_IP_NF_QUEUE is not set | ||
237 | # CONFIG_BRIDGE is not set | ||
238 | # CONFIG_VLAN_8021Q is not set | ||
239 | # CONFIG_DECNET is not set | ||
240 | # CONFIG_LLC2 is not set | ||
241 | # CONFIG_IPX is not set | ||
242 | # CONFIG_ATALK is not set | ||
243 | |||
244 | # | ||
245 | # QoS and/or fair queueing | ||
246 | # | ||
247 | # CONFIG_NET_SCHED is not set | ||
248 | |||
249 | # | ||
250 | # Network testing | ||
251 | # | ||
252 | # CONFIG_NET_PKTGEN is not set | ||
253 | # CONFIG_HAMRADIO is not set | ||
254 | # CONFIG_IRDA is not set | ||
255 | # CONFIG_BT is not set | ||
256 | # CONFIG_IEEE80211 is not set | ||
257 | |||
258 | # | ||
259 | # Device Drivers | ||
260 | # | ||
261 | |||
262 | # | ||
263 | # Generic Driver Options | ||
264 | # | ||
265 | CONFIG_STANDALONE=y | ||
266 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
267 | # CONFIG_FW_LOADER is not set | ||
268 | # CONFIG_DEBUG_DRIVER is not set | ||
269 | |||
270 | # | ||
271 | # Connector - unified userspace <-> kernelspace linker | ||
272 | # | ||
273 | # CONFIG_CONNECTOR is not set | ||
274 | |||
275 | # | ||
276 | # Memory Technology Devices (MTD) | ||
277 | # | ||
278 | # CONFIG_MTD is not set | ||
279 | |||
280 | # | ||
281 | # Parallel port support | ||
282 | # | ||
283 | # CONFIG_PARPORT is not set | ||
284 | |||
285 | # | ||
286 | # Plug and Play support | ||
287 | # | ||
288 | |||
289 | # | ||
290 | # Block devices | ||
291 | # | ||
292 | # CONFIG_BLK_DEV_FD is not set | ||
293 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
294 | CONFIG_BLK_DEV_LOOP=y | ||
295 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | ||
296 | # CONFIG_BLK_DEV_NBD is not set | ||
297 | # CONFIG_BLK_DEV_RAM is not set | ||
298 | # CONFIG_BLK_DEV_INITRD is not set | ||
299 | # CONFIG_CDROM_PKTCDVD is not set | ||
300 | # CONFIG_ATA_OVER_ETH is not set | ||
301 | |||
302 | # | ||
303 | # ATA/ATAPI/MFM/RLL support | ||
304 | # | ||
305 | CONFIG_IDE=y | ||
306 | CONFIG_BLK_DEV_IDE=y | ||
307 | |||
308 | # | ||
309 | # Please see Documentation/ide.txt for help/info on IDE drives | ||
310 | # | ||
311 | # CONFIG_BLK_DEV_IDE_SATA is not set | ||
312 | CONFIG_BLK_DEV_IDEDISK=y | ||
313 | # CONFIG_IDEDISK_MULTI_MODE is not set | ||
314 | # CONFIG_BLK_DEV_IDECD is not set | ||
315 | # CONFIG_BLK_DEV_IDEFLOPPY is not set | ||
316 | # CONFIG_IDE_TASK_IOCTL is not set | ||
317 | |||
318 | # | ||
319 | # IDE chipset support/bugfixes | ||
320 | # | ||
321 | # CONFIG_IDE_GENERIC is not set | ||
322 | # CONFIG_IDE_ARM is not set | ||
323 | # CONFIG_BLK_DEV_IDEDMA is not set | ||
324 | # CONFIG_IDEDMA_AUTO is not set | ||
325 | # CONFIG_BLK_DEV_HD is not set | ||
326 | |||
327 | # | ||
328 | # SCSI device support | ||
329 | # | ||
330 | # CONFIG_RAID_ATTRS is not set | ||
331 | # CONFIG_SCSI is not set | ||
332 | |||
333 | # | ||
334 | # Multi-device support (RAID and LVM) | ||
335 | # | ||
336 | # CONFIG_MD is not set | ||
337 | |||
338 | # | ||
339 | # Fusion MPT device support | ||
340 | # | ||
341 | # CONFIG_FUSION is not set | ||
342 | |||
343 | # | ||
344 | # IEEE 1394 (FireWire) support | ||
345 | # | ||
346 | |||
347 | # | ||
348 | # I2O device support | ||
349 | # | ||
350 | |||
351 | # | ||
352 | # Macintosh device drivers | ||
353 | # | ||
354 | # CONFIG_WINDFARM is not set | ||
355 | |||
356 | # | ||
357 | # Network device support | ||
358 | # | ||
359 | CONFIG_NETDEVICES=y | ||
360 | # CONFIG_DUMMY is not set | ||
361 | # CONFIG_BONDING is not set | ||
362 | # CONFIG_EQUALIZER is not set | ||
363 | CONFIG_TUN=y | ||
364 | |||
365 | # | ||
366 | # PHY device support | ||
367 | # | ||
368 | CONFIG_PHYLIB=y | ||
369 | |||
370 | # | ||
371 | # MII PHY device drivers | ||
372 | # | ||
373 | # CONFIG_MARVELL_PHY is not set | ||
374 | CONFIG_DAVICOM_PHY=y | ||
375 | # CONFIG_QSEMI_PHY is not set | ||
376 | # CONFIG_LXT_PHY is not set | ||
377 | # CONFIG_CICADA_PHY is not set | ||
378 | # CONFIG_FIXED_PHY is not set | ||
379 | |||
380 | # | ||
381 | # Ethernet (10 or 100Mbit) | ||
382 | # | ||
383 | CONFIG_NET_ETHERNET=y | ||
384 | CONFIG_MII=y | ||
385 | CONFIG_FS_ENET=y | ||
386 | # CONFIG_FS_ENET_HAS_SCC is not set | ||
387 | CONFIG_FS_ENET_HAS_FCC=y | ||
388 | |||
389 | # | ||
390 | # Ethernet (1000 Mbit) | ||
391 | # | ||
392 | |||
393 | # | ||
394 | # Ethernet (10000 Mbit) | ||
395 | # | ||
396 | |||
397 | # | ||
398 | # Token Ring devices | ||
399 | # | ||
400 | |||
401 | # | ||
402 | # Wireless LAN (non-hamradio) | ||
403 | # | ||
404 | # CONFIG_NET_RADIO is not set | ||
405 | |||
406 | # | ||
407 | # Wan interfaces | ||
408 | # | ||
409 | # CONFIG_WAN is not set | ||
410 | CONFIG_PPP=y | ||
411 | # CONFIG_PPP_FILTER is not set | ||
412 | CONFIG_PPP_ASYNC=y | ||
413 | CONFIG_PPP_SYNC_TTY=y | ||
414 | CONFIG_PPP_DEFLATE=y | ||
415 | # CONFIG_PPP_BSDCOMP is not set | ||
416 | # CONFIG_SLIP is not set | ||
417 | # CONFIG_NETPOLL is not set | ||
418 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
419 | |||
420 | # | ||
421 | # ISDN subsystem | ||
422 | # | ||
423 | # CONFIG_ISDN is not set | ||
424 | |||
425 | # | ||
426 | # Telephony Support | ||
427 | # | ||
428 | # CONFIG_PHONE is not set | ||
429 | |||
430 | # | ||
431 | # Input device support | ||
432 | # | ||
433 | CONFIG_INPUT=y | ||
434 | |||
435 | # | ||
436 | # Userland interfaces | ||
437 | # | ||
438 | CONFIG_INPUT_MOUSEDEV=y | ||
439 | CONFIG_INPUT_MOUSEDEV_PSAUX=y | ||
440 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
441 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
442 | # CONFIG_INPUT_JOYDEV is not set | ||
443 | # CONFIG_INPUT_TSDEV is not set | ||
444 | CONFIG_INPUT_EVDEV=y | ||
445 | # CONFIG_INPUT_EVBUG is not set | ||
446 | |||
447 | # | ||
448 | # Input Device Drivers | ||
449 | # | ||
450 | CONFIG_INPUT_KEYBOARD=y | ||
451 | CONFIG_KEYBOARD_ATKBD=y | ||
452 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
453 | # CONFIG_KEYBOARD_LKKBD is not set | ||
454 | # CONFIG_KEYBOARD_XTKBD is not set | ||
455 | # CONFIG_KEYBOARD_NEWTON is not set | ||
456 | CONFIG_INPUT_MOUSE=y | ||
457 | CONFIG_MOUSE_PS2=y | ||
458 | # CONFIG_MOUSE_SERIAL is not set | ||
459 | # CONFIG_MOUSE_VSXXXAA is not set | ||
460 | # CONFIG_INPUT_JOYSTICK is not set | ||
461 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
462 | # CONFIG_INPUT_MISC is not set | ||
463 | |||
464 | # | ||
465 | # Hardware I/O ports | ||
466 | # | ||
467 | CONFIG_SERIO=y | ||
468 | # CONFIG_SERIO_I8042 is not set | ||
469 | CONFIG_SERIO_SERPORT=y | ||
470 | CONFIG_SERIO_LIBPS2=y | ||
471 | # CONFIG_SERIO_RAW is not set | ||
472 | # CONFIG_GAMEPORT is not set | ||
473 | |||
474 | # | ||
475 | # Character devices | ||
476 | # | ||
477 | # CONFIG_VT is not set | ||
478 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
479 | |||
480 | # | ||
481 | # Serial drivers | ||
482 | # | ||
483 | # CONFIG_SERIAL_8250 is not set | ||
484 | |||
485 | # | ||
486 | # Non-8250 serial port support | ||
487 | # | ||
488 | CONFIG_SERIAL_CORE=y | ||
489 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
490 | CONFIG_SERIAL_CPM=y | ||
491 | CONFIG_SERIAL_CPM_CONSOLE=y | ||
492 | CONFIG_SERIAL_CPM_SCC1=y | ||
493 | # CONFIG_SERIAL_CPM_SCC2 is not set | ||
494 | # CONFIG_SERIAL_CPM_SCC3 is not set | ||
495 | CONFIG_SERIAL_CPM_SCC4=y | ||
496 | # CONFIG_SERIAL_CPM_SMC1 is not set | ||
497 | # CONFIG_SERIAL_CPM_SMC2 is not set | ||
498 | CONFIG_UNIX98_PTYS=y | ||
499 | CONFIG_LEGACY_PTYS=y | ||
500 | CONFIG_LEGACY_PTY_COUNT=256 | ||
501 | |||
502 | # | ||
503 | # IPMI | ||
504 | # | ||
505 | # CONFIG_IPMI_HANDLER is not set | ||
506 | |||
507 | # | ||
508 | # Watchdog Cards | ||
509 | # | ||
510 | # CONFIG_WATCHDOG is not set | ||
511 | # CONFIG_NVRAM is not set | ||
512 | # CONFIG_GEN_RTC is not set | ||
513 | # CONFIG_DTLK is not set | ||
514 | # CONFIG_R3964 is not set | ||
515 | |||
516 | # | ||
517 | # Ftape, the floppy tape device driver | ||
518 | # | ||
519 | # CONFIG_AGP is not set | ||
520 | # CONFIG_RAW_DRIVER is not set | ||
521 | |||
522 | # | ||
523 | # TPM devices | ||
524 | # | ||
525 | |||
526 | # | ||
527 | # I2C support | ||
528 | # | ||
529 | # CONFIG_I2C is not set | ||
530 | |||
531 | # | ||
532 | # SPI support | ||
533 | # | ||
534 | # CONFIG_SPI is not set | ||
535 | # CONFIG_SPI_MASTER is not set | ||
536 | |||
537 | # | ||
538 | # Dallas's 1-wire bus | ||
539 | # | ||
540 | # CONFIG_W1 is not set | ||
541 | |||
542 | # | ||
543 | # Hardware Monitoring support | ||
544 | # | ||
545 | # CONFIG_HWMON is not set | ||
546 | # CONFIG_HWMON_VID is not set | ||
547 | |||
548 | # | ||
549 | # Misc devices | ||
550 | # | ||
551 | |||
552 | # | ||
553 | # Multimedia devices | ||
554 | # | ||
555 | # CONFIG_VIDEO_DEV is not set | ||
556 | CONFIG_VIDEO_V4L2=y | ||
557 | |||
558 | # | ||
559 | # Digital Video Broadcasting Devices | ||
560 | # | ||
561 | # CONFIG_DVB is not set | ||
562 | |||
563 | # | ||
564 | # Graphics support | ||
565 | # | ||
566 | # CONFIG_FB is not set | ||
567 | |||
568 | # | ||
569 | # Sound | ||
570 | # | ||
571 | # CONFIG_SOUND is not set | ||
572 | |||
573 | # | ||
574 | # USB support | ||
575 | # | ||
576 | # CONFIG_USB_ARCH_HAS_HCD is not set | ||
577 | # CONFIG_USB_ARCH_HAS_OHCI is not set | ||
578 | # CONFIG_USB_ARCH_HAS_EHCI is not set | ||
579 | |||
580 | # | ||
581 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||
582 | # | ||
583 | |||
584 | # | ||
585 | # USB Gadget Support | ||
586 | # | ||
587 | CONFIG_USB_GADGET=y | ||
588 | # CONFIG_USB_GADGET_DEBUG_FILES is not set | ||
589 | # CONFIG_USB_GADGET_NET2280 is not set | ||
590 | # CONFIG_USB_GADGET_PXA2XX is not set | ||
591 | # CONFIG_USB_GADGET_GOKU is not set | ||
592 | # CONFIG_USB_GADGET_LH7A40X is not set | ||
593 | # CONFIG_USB_GADGET_OMAP is not set | ||
594 | # CONFIG_USB_GADGET_AT91 is not set | ||
595 | # CONFIG_USB_GADGET_DUMMY_HCD is not set | ||
596 | # CONFIG_USB_GADGET_DUALSPEED is not set | ||
597 | |||
598 | # | ||
599 | # MMC/SD Card support | ||
600 | # | ||
601 | # CONFIG_MMC is not set | ||
602 | |||
603 | # | ||
604 | # LED devices | ||
605 | # | ||
606 | # CONFIG_NEW_LEDS is not set | ||
607 | |||
608 | # | ||
609 | # LED drivers | ||
610 | # | ||
611 | |||
612 | # | ||
613 | # LED Triggers | ||
614 | # | ||
615 | |||
616 | # | ||
617 | # InfiniBand support | ||
618 | # | ||
619 | |||
620 | # | ||
621 | # EDAC - error detection and reporting (RAS) (EXPERIMENTAL) | ||
622 | # | ||
623 | |||
624 | # | ||
625 | # Real Time Clock | ||
626 | # | ||
627 | |||
628 | # | ||
629 | # File systems | ||
630 | # | ||
631 | CONFIG_EXT2_FS=y | ||
632 | # CONFIG_EXT2_FS_XATTR is not set | ||
633 | # CONFIG_EXT2_FS_XIP is not set | ||
634 | CONFIG_EXT3_FS=y | ||
635 | CONFIG_EXT3_FS_XATTR=y | ||
636 | # CONFIG_EXT3_FS_POSIX_ACL is not set | ||
637 | # CONFIG_EXT3_FS_SECURITY is not set | ||
638 | CONFIG_JBD=y | ||
639 | # CONFIG_JBD_DEBUG is not set | ||
640 | CONFIG_FS_MBCACHE=y | ||
641 | # CONFIG_REISERFS_FS is not set | ||
642 | # CONFIG_JFS_FS is not set | ||
643 | CONFIG_FS_POSIX_ACL=y | ||
644 | CONFIG_XFS_FS=y | ||
645 | # CONFIG_XFS_QUOTA is not set | ||
646 | # CONFIG_XFS_SECURITY is not set | ||
647 | # CONFIG_XFS_POSIX_ACL is not set | ||
648 | # CONFIG_MINIX_FS is not set | ||
649 | # CONFIG_ROMFS_FS is not set | ||
650 | CONFIG_INOTIFY=y | ||
651 | # CONFIG_QUOTA is not set | ||
652 | CONFIG_DNOTIFY=y | ||
653 | # CONFIG_AUTOFS_FS is not set | ||
654 | CONFIG_AUTOFS4_FS=y | ||
655 | # CONFIG_FUSE_FS is not set | ||
656 | |||
657 | # | ||
658 | # CD-ROM/DVD Filesystems | ||
659 | # | ||
660 | # CONFIG_ISO9660_FS is not set | ||
661 | # CONFIG_UDF_FS is not set | ||
662 | |||
663 | # | ||
664 | # DOS/FAT/NT Filesystems | ||
665 | # | ||
666 | # CONFIG_MSDOS_FS is not set | ||
667 | # CONFIG_VFAT_FS is not set | ||
668 | # CONFIG_NTFS_FS is not set | ||
669 | |||
670 | # | ||
671 | # Pseudo filesystems | ||
672 | # | ||
673 | CONFIG_PROC_FS=y | ||
674 | CONFIG_PROC_KCORE=y | ||
675 | CONFIG_SYSFS=y | ||
676 | CONFIG_TMPFS=y | ||
677 | # CONFIG_HUGETLB_PAGE is not set | ||
678 | CONFIG_RAMFS=y | ||
679 | |||
680 | # | ||
681 | # Miscellaneous filesystems | ||
682 | # | ||
683 | # CONFIG_HFSPLUS_FS is not set | ||
684 | CONFIG_CRAMFS=y | ||
685 | # CONFIG_VXFS_FS is not set | ||
686 | # CONFIG_HPFS_FS is not set | ||
687 | # CONFIG_QNX4FS_FS is not set | ||
688 | # CONFIG_SYSV_FS is not set | ||
689 | # CONFIG_UFS_FS is not set | ||
690 | |||
691 | # | ||
692 | # Network File Systems | ||
693 | # | ||
694 | CONFIG_NFS_FS=y | ||
695 | CONFIG_NFS_V3=y | ||
696 | CONFIG_NFS_V3_ACL=y | ||
697 | # CONFIG_NFSD is not set | ||
698 | CONFIG_ROOT_NFS=y | ||
699 | CONFIG_LOCKD=y | ||
700 | CONFIG_LOCKD_V4=y | ||
701 | CONFIG_NFS_ACL_SUPPORT=y | ||
702 | CONFIG_NFS_COMMON=y | ||
703 | CONFIG_SUNRPC=y | ||
704 | CONFIG_SMB_FS=y | ||
705 | # CONFIG_SMB_NLS_DEFAULT is not set | ||
706 | # CONFIG_CIFS is not set | ||
707 | # CONFIG_NCP_FS is not set | ||
708 | # CONFIG_CODA_FS is not set | ||
709 | |||
710 | # | ||
711 | # Partition Types | ||
712 | # | ||
713 | CONFIG_PARTITION_ADVANCED=y | ||
714 | # CONFIG_ACORN_PARTITION is not set | ||
715 | # CONFIG_OSF_PARTITION is not set | ||
716 | # CONFIG_AMIGA_PARTITION is not set | ||
717 | # CONFIG_ATARI_PARTITION is not set | ||
718 | # CONFIG_MAC_PARTITION is not set | ||
719 | CONFIG_MSDOS_PARTITION=y | ||
720 | # CONFIG_BSD_DISKLABEL is not set | ||
721 | # CONFIG_MINIX_SUBPARTITION is not set | ||
722 | # CONFIG_SOLARIS_X86_PARTITION is not set | ||
723 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
724 | # CONFIG_LDM_PARTITION is not set | ||
725 | # CONFIG_SGI_PARTITION is not set | ||
726 | # CONFIG_ULTRIX_PARTITION is not set | ||
727 | # CONFIG_SUN_PARTITION is not set | ||
728 | # CONFIG_KARMA_PARTITION is not set | ||
729 | # CONFIG_EFI_PARTITION is not set | ||
730 | |||
731 | # | ||
732 | # Native Language Support | ||
733 | # | ||
734 | CONFIG_NLS=y | ||
735 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
736 | CONFIG_NLS_CODEPAGE_437=y | ||
737 | # CONFIG_NLS_CODEPAGE_737 is not set | ||
738 | # CONFIG_NLS_CODEPAGE_775 is not set | ||
739 | # CONFIG_NLS_CODEPAGE_850 is not set | ||
740 | # CONFIG_NLS_CODEPAGE_852 is not set | ||
741 | # CONFIG_NLS_CODEPAGE_855 is not set | ||
742 | # CONFIG_NLS_CODEPAGE_857 is not set | ||
743 | # CONFIG_NLS_CODEPAGE_860 is not set | ||
744 | # CONFIG_NLS_CODEPAGE_861 is not set | ||
745 | # CONFIG_NLS_CODEPAGE_862 is not set | ||
746 | # CONFIG_NLS_CODEPAGE_863 is not set | ||
747 | # CONFIG_NLS_CODEPAGE_864 is not set | ||
748 | # CONFIG_NLS_CODEPAGE_865 is not set | ||
749 | # CONFIG_NLS_CODEPAGE_866 is not set | ||
750 | # CONFIG_NLS_CODEPAGE_869 is not set | ||
751 | # CONFIG_NLS_CODEPAGE_936 is not set | ||
752 | # CONFIG_NLS_CODEPAGE_950 is not set | ||
753 | # CONFIG_NLS_CODEPAGE_932 is not set | ||
754 | # CONFIG_NLS_CODEPAGE_949 is not set | ||
755 | # CONFIG_NLS_CODEPAGE_874 is not set | ||
756 | # CONFIG_NLS_ISO8859_8 is not set | ||
757 | # CONFIG_NLS_CODEPAGE_1250 is not set | ||
758 | # CONFIG_NLS_CODEPAGE_1251 is not set | ||
759 | CONFIG_NLS_ASCII=y | ||
760 | CONFIG_NLS_ISO8859_1=y | ||
761 | # CONFIG_NLS_ISO8859_2 is not set | ||
762 | # CONFIG_NLS_ISO8859_3 is not set | ||
763 | # CONFIG_NLS_ISO8859_4 is not set | ||
764 | # CONFIG_NLS_ISO8859_5 is not set | ||
765 | # CONFIG_NLS_ISO8859_6 is not set | ||
766 | # CONFIG_NLS_ISO8859_7 is not set | ||
767 | # CONFIG_NLS_ISO8859_9 is not set | ||
768 | # CONFIG_NLS_ISO8859_13 is not set | ||
769 | # CONFIG_NLS_ISO8859_14 is not set | ||
770 | # CONFIG_NLS_ISO8859_15 is not set | ||
771 | # CONFIG_NLS_KOI8_R is not set | ||
772 | # CONFIG_NLS_KOI8_U is not set | ||
773 | CONFIG_NLS_UTF8=y | ||
774 | |||
775 | # | ||
776 | # Library routines | ||
777 | # | ||
778 | CONFIG_CRC_CCITT=y | ||
779 | # CONFIG_CRC16 is not set | ||
780 | CONFIG_CRC32=y | ||
781 | # CONFIG_LIBCRC32C is not set | ||
782 | CONFIG_ZLIB_INFLATE=y | ||
783 | CONFIG_ZLIB_DEFLATE=y | ||
784 | |||
785 | # | ||
786 | # Kernel hacking | ||
787 | # | ||
788 | # CONFIG_PRINTK_TIME is not set | ||
789 | # CONFIG_MAGIC_SYSRQ is not set | ||
790 | CONFIG_DEBUG_KERNEL=y | ||
791 | CONFIG_LOG_BUF_SHIFT=14 | ||
792 | CONFIG_DETECT_SOFTLOCKUP=y | ||
793 | # CONFIG_SCHEDSTATS is not set | ||
794 | # CONFIG_DEBUG_SLAB is not set | ||
795 | # CONFIG_DEBUG_MUTEXES is not set | ||
796 | # CONFIG_DEBUG_SPINLOCK is not set | ||
797 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||
798 | # CONFIG_DEBUG_KOBJECT is not set | ||
799 | CONFIG_DEBUG_INFO=y | ||
800 | # CONFIG_DEBUG_FS is not set | ||
801 | # CONFIG_DEBUG_VM is not set | ||
802 | # CONFIG_UNWIND_INFO is not set | ||
803 | CONFIG_FORCED_INLINING=y | ||
804 | # CONFIG_RCU_TORTURE_TEST is not set | ||
805 | # CONFIG_DEBUGGER is not set | ||
806 | # CONFIG_KGDB_CONSOLE is not set | ||
807 | CONFIG_BDI_SWITCH=y | ||
808 | # CONFIG_BOOTX_TEXT is not set | ||
809 | # CONFIG_PPC_EARLY_DEBUG is not set | ||
810 | |||
811 | # | ||
812 | # Security options | ||
813 | # | ||
814 | # CONFIG_KEYS is not set | ||
815 | # CONFIG_SECURITY is not set | ||
816 | |||
817 | # | ||
818 | # Cryptographic options | ||
819 | # | ||
820 | CONFIG_CRYPTO=y | ||
821 | # CONFIG_CRYPTO_HMAC is not set | ||
822 | # CONFIG_CRYPTO_NULL is not set | ||
823 | # CONFIG_CRYPTO_MD4 is not set | ||
824 | CONFIG_CRYPTO_MD5=y | ||
825 | # CONFIG_CRYPTO_SHA1 is not set | ||
826 | # CONFIG_CRYPTO_SHA256 is not set | ||
827 | # CONFIG_CRYPTO_SHA512 is not set | ||
828 | # CONFIG_CRYPTO_WP512 is not set | ||
829 | # CONFIG_CRYPTO_TGR192 is not set | ||
830 | CONFIG_CRYPTO_DES=y | ||
831 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
832 | # CONFIG_CRYPTO_TWOFISH is not set | ||
833 | # CONFIG_CRYPTO_SERPENT is not set | ||
834 | # CONFIG_CRYPTO_AES is not set | ||
835 | # CONFIG_CRYPTO_CAST5 is not set | ||
836 | # CONFIG_CRYPTO_CAST6 is not set | ||
837 | # CONFIG_CRYPTO_TEA is not set | ||
838 | # CONFIG_CRYPTO_ARC4 is not set | ||
839 | # CONFIG_CRYPTO_KHAZAD is not set | ||
840 | # CONFIG_CRYPTO_ANUBIS is not set | ||
841 | # CONFIG_CRYPTO_DEFLATE is not set | ||
842 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
843 | # CONFIG_CRYPTO_CRC32C is not set | ||
844 | # CONFIG_CRYPTO_TEST is not set | ||
845 | |||
846 | # | ||
847 | # Hardware crypto devices | ||
848 | # | ||
diff --git a/arch/powerpc/configs/mpc832xemds_defconfig b/arch/powerpc/configs/mpc832xemds_defconfig new file mode 100644 index 000000000000..e1b36de6b38c --- /dev/null +++ b/arch/powerpc/configs/mpc832xemds_defconfig | |||
@@ -0,0 +1,1083 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.20-rc5 | ||
4 | # Tue Jan 30 14:27:25 2007 | ||
5 | # | ||
6 | # CONFIG_PPC64 is not set | ||
7 | CONFIG_PPC32=y | ||
8 | CONFIG_PPC_MERGE=y | ||
9 | CONFIG_MMU=y | ||
10 | CONFIG_GENERIC_HARDIRQS=y | ||
11 | CONFIG_IRQ_PER_CPU=y | ||
12 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | ||
13 | CONFIG_ARCH_HAS_ILOG2_U32=y | ||
14 | CONFIG_GENERIC_HWEIGHT=y | ||
15 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
16 | CONFIG_GENERIC_FIND_NEXT_BIT=y | ||
17 | CONFIG_PPC=y | ||
18 | CONFIG_EARLY_PRINTK=y | ||
19 | CONFIG_GENERIC_NVRAM=y | ||
20 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | ||
21 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y | ||
22 | CONFIG_PPC_OF=y | ||
23 | CONFIG_PPC_UDBG_16550=y | ||
24 | # CONFIG_GENERIC_TBSYNC is not set | ||
25 | CONFIG_AUDIT_ARCH=y | ||
26 | CONFIG_GENERIC_BUG=y | ||
27 | CONFIG_DEFAULT_UIMAGE=y | ||
28 | |||
29 | # | ||
30 | # Processor support | ||
31 | # | ||
32 | # CONFIG_CLASSIC32 is not set | ||
33 | # CONFIG_PPC_82xx is not set | ||
34 | CONFIG_PPC_83xx=y | ||
35 | # CONFIG_PPC_85xx is not set | ||
36 | # CONFIG_PPC_86xx is not set | ||
37 | # CONFIG_40x is not set | ||
38 | # CONFIG_44x is not set | ||
39 | # CONFIG_8xx is not set | ||
40 | # CONFIG_E200 is not set | ||
41 | CONFIG_6xx=y | ||
42 | CONFIG_83xx=y | ||
43 | CONFIG_PPC_FPU=y | ||
44 | # CONFIG_PPC_DCR_NATIVE is not set | ||
45 | # CONFIG_PPC_DCR_MMIO is not set | ||
46 | CONFIG_PPC_STD_MMU=y | ||
47 | CONFIG_PPC_STD_MMU_32=y | ||
48 | # CONFIG_SMP is not set | ||
49 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
50 | |||
51 | # | ||
52 | # Code maturity level options | ||
53 | # | ||
54 | CONFIG_EXPERIMENTAL=y | ||
55 | CONFIG_BROKEN_ON_SMP=y | ||
56 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
57 | |||
58 | # | ||
59 | # General setup | ||
60 | # | ||
61 | CONFIG_LOCALVERSION="" | ||
62 | CONFIG_LOCALVERSION_AUTO=y | ||
63 | CONFIG_SWAP=y | ||
64 | CONFIG_SYSVIPC=y | ||
65 | # CONFIG_IPC_NS is not set | ||
66 | # CONFIG_POSIX_MQUEUE is not set | ||
67 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
68 | # CONFIG_TASKSTATS is not set | ||
69 | # CONFIG_UTS_NS is not set | ||
70 | # CONFIG_AUDIT is not set | ||
71 | # CONFIG_IKCONFIG is not set | ||
72 | CONFIG_SYSFS_DEPRECATED=y | ||
73 | # CONFIG_RELAY is not set | ||
74 | CONFIG_INITRAMFS_SOURCE="" | ||
75 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
76 | CONFIG_SYSCTL=y | ||
77 | CONFIG_EMBEDDED=y | ||
78 | CONFIG_SYSCTL_SYSCALL=y | ||
79 | # CONFIG_KALLSYMS is not set | ||
80 | CONFIG_HOTPLUG=y | ||
81 | CONFIG_PRINTK=y | ||
82 | CONFIG_BUG=y | ||
83 | CONFIG_ELF_CORE=y | ||
84 | CONFIG_BASE_FULL=y | ||
85 | CONFIG_FUTEX=y | ||
86 | # CONFIG_EPOLL is not set | ||
87 | CONFIG_SHMEM=y | ||
88 | CONFIG_SLAB=y | ||
89 | CONFIG_VM_EVENT_COUNTERS=y | ||
90 | CONFIG_RT_MUTEXES=y | ||
91 | # CONFIG_TINY_SHMEM is not set | ||
92 | CONFIG_BASE_SMALL=0 | ||
93 | # CONFIG_SLOB is not set | ||
94 | |||
95 | # | ||
96 | # Loadable module support | ||
97 | # | ||
98 | CONFIG_MODULES=y | ||
99 | CONFIG_MODULE_UNLOAD=y | ||
100 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
101 | # CONFIG_MODVERSIONS is not set | ||
102 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
103 | # CONFIG_KMOD is not set | ||
104 | |||
105 | # | ||
106 | # Block layer | ||
107 | # | ||
108 | CONFIG_BLOCK=y | ||
109 | # CONFIG_LBD is not set | ||
110 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
111 | # CONFIG_LSF is not set | ||
112 | |||
113 | # | ||
114 | # IO Schedulers | ||
115 | # | ||
116 | CONFIG_IOSCHED_NOOP=y | ||
117 | CONFIG_IOSCHED_AS=y | ||
118 | CONFIG_IOSCHED_DEADLINE=y | ||
119 | CONFIG_IOSCHED_CFQ=y | ||
120 | CONFIG_DEFAULT_AS=y | ||
121 | # CONFIG_DEFAULT_DEADLINE is not set | ||
122 | # CONFIG_DEFAULT_CFQ is not set | ||
123 | # CONFIG_DEFAULT_NOOP is not set | ||
124 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
125 | CONFIG_QUICC_ENGINE=y | ||
126 | CONFIG_PPC_GEN550=y | ||
127 | # CONFIG_WANT_EARLY_SERIAL is not set | ||
128 | |||
129 | # | ||
130 | # Platform support | ||
131 | # | ||
132 | CONFIG_MPC832x_MDS=y | ||
133 | # CONFIG_MPC834x_SYS is not set | ||
134 | # CONFIG_MPC834x_ITX is not set | ||
135 | # CONFIG_MPC8360E_PB is not set | ||
136 | CONFIG_PPC_MPC832x=y | ||
137 | # CONFIG_MPIC is not set | ||
138 | |||
139 | # | ||
140 | # Kernel options | ||
141 | # | ||
142 | # CONFIG_HIGHMEM is not set | ||
143 | # CONFIG_HZ_100 is not set | ||
144 | CONFIG_HZ_250=y | ||
145 | # CONFIG_HZ_300 is not set | ||
146 | # CONFIG_HZ_1000 is not set | ||
147 | CONFIG_HZ=250 | ||
148 | CONFIG_PREEMPT_NONE=y | ||
149 | # CONFIG_PREEMPT_VOLUNTARY is not set | ||
150 | # CONFIG_PREEMPT is not set | ||
151 | CONFIG_BINFMT_ELF=y | ||
152 | # CONFIG_BINFMT_MISC is not set | ||
153 | CONFIG_MATH_EMULATION=y | ||
154 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | ||
155 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
156 | CONFIG_ARCH_POPULATES_NODE_MAP=y | ||
157 | CONFIG_SELECT_MEMORY_MODEL=y | ||
158 | CONFIG_FLATMEM_MANUAL=y | ||
159 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
160 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
161 | CONFIG_FLATMEM=y | ||
162 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
163 | # CONFIG_SPARSEMEM_STATIC is not set | ||
164 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
165 | # CONFIG_RESOURCES_64BIT is not set | ||
166 | CONFIG_PROC_DEVICETREE=y | ||
167 | # CONFIG_CMDLINE_BOOL is not set | ||
168 | # CONFIG_PM is not set | ||
169 | CONFIG_SECCOMP=y | ||
170 | CONFIG_ISA_DMA_API=y | ||
171 | |||
172 | # | ||
173 | # Bus options | ||
174 | # | ||
175 | CONFIG_GENERIC_ISA_DMA=y | ||
176 | # CONFIG_MPIC_WEIRD is not set | ||
177 | # CONFIG_PPC_I8259 is not set | ||
178 | CONFIG_PPC_INDIRECT_PCI=y | ||
179 | CONFIG_FSL_SOC=y | ||
180 | CONFIG_PCI=y | ||
181 | CONFIG_PCI_DOMAINS=y | ||
182 | # CONFIG_PCIEPORTBUS is not set | ||
183 | |||
184 | # | ||
185 | # PCCARD (PCMCIA/CardBus) support | ||
186 | # | ||
187 | # CONFIG_PCCARD is not set | ||
188 | |||
189 | # | ||
190 | # PCI Hotplug Support | ||
191 | # | ||
192 | # CONFIG_HOTPLUG_PCI is not set | ||
193 | |||
194 | # | ||
195 | # Advanced setup | ||
196 | # | ||
197 | # CONFIG_ADVANCED_OPTIONS is not set | ||
198 | |||
199 | # | ||
200 | # Default settings for advanced configuration options are used | ||
201 | # | ||
202 | CONFIG_HIGHMEM_START=0xfe000000 | ||
203 | CONFIG_LOWMEM_SIZE=0x30000000 | ||
204 | CONFIG_KERNEL_START=0xc0000000 | ||
205 | CONFIG_TASK_SIZE=0x80000000 | ||
206 | CONFIG_BOOT_LOAD=0x00800000 | ||
207 | |||
208 | # | ||
209 | # Networking | ||
210 | # | ||
211 | CONFIG_NET=y | ||
212 | |||
213 | # | ||
214 | # Networking options | ||
215 | # | ||
216 | # CONFIG_NETDEBUG is not set | ||
217 | CONFIG_PACKET=y | ||
218 | # CONFIG_PACKET_MMAP is not set | ||
219 | CONFIG_UNIX=y | ||
220 | CONFIG_XFRM=y | ||
221 | # CONFIG_XFRM_USER is not set | ||
222 | # CONFIG_XFRM_SUB_POLICY is not set | ||
223 | # CONFIG_NET_KEY is not set | ||
224 | CONFIG_INET=y | ||
225 | CONFIG_IP_MULTICAST=y | ||
226 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
227 | CONFIG_IP_FIB_HASH=y | ||
228 | CONFIG_IP_PNP=y | ||
229 | CONFIG_IP_PNP_DHCP=y | ||
230 | CONFIG_IP_PNP_BOOTP=y | ||
231 | # CONFIG_IP_PNP_RARP is not set | ||
232 | # CONFIG_NET_IPIP is not set | ||
233 | # CONFIG_NET_IPGRE is not set | ||
234 | # CONFIG_IP_MROUTE is not set | ||
235 | # CONFIG_ARPD is not set | ||
236 | CONFIG_SYN_COOKIES=y | ||
237 | # CONFIG_INET_AH is not set | ||
238 | # CONFIG_INET_ESP is not set | ||
239 | # CONFIG_INET_IPCOMP is not set | ||
240 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
241 | # CONFIG_INET_TUNNEL is not set | ||
242 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | ||
243 | CONFIG_INET_XFRM_MODE_TUNNEL=y | ||
244 | CONFIG_INET_XFRM_MODE_BEET=y | ||
245 | CONFIG_INET_DIAG=y | ||
246 | CONFIG_INET_TCP_DIAG=y | ||
247 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
248 | CONFIG_TCP_CONG_CUBIC=y | ||
249 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
250 | # CONFIG_TCP_MD5SIG is not set | ||
251 | # CONFIG_IPV6 is not set | ||
252 | # CONFIG_INET6_XFRM_TUNNEL is not set | ||
253 | # CONFIG_INET6_TUNNEL is not set | ||
254 | # CONFIG_NETWORK_SECMARK is not set | ||
255 | # CONFIG_NETFILTER is not set | ||
256 | |||
257 | # | ||
258 | # DCCP Configuration (EXPERIMENTAL) | ||
259 | # | ||
260 | # CONFIG_IP_DCCP is not set | ||
261 | |||
262 | # | ||
263 | # SCTP Configuration (EXPERIMENTAL) | ||
264 | # | ||
265 | # CONFIG_IP_SCTP is not set | ||
266 | |||
267 | # | ||
268 | # TIPC Configuration (EXPERIMENTAL) | ||
269 | # | ||
270 | # CONFIG_TIPC is not set | ||
271 | # CONFIG_ATM is not set | ||
272 | # CONFIG_BRIDGE is not set | ||
273 | # CONFIG_VLAN_8021Q is not set | ||
274 | # CONFIG_DECNET is not set | ||
275 | # CONFIG_LLC2 is not set | ||
276 | # CONFIG_IPX is not set | ||
277 | # CONFIG_ATALK is not set | ||
278 | # CONFIG_X25 is not set | ||
279 | # CONFIG_LAPB is not set | ||
280 | # CONFIG_ECONET is not set | ||
281 | # CONFIG_WAN_ROUTER is not set | ||
282 | |||
283 | # | ||
284 | # QoS and/or fair queueing | ||
285 | # | ||
286 | # CONFIG_NET_SCHED is not set | ||
287 | |||
288 | # | ||
289 | # Network testing | ||
290 | # | ||
291 | # CONFIG_NET_PKTGEN is not set | ||
292 | # CONFIG_HAMRADIO is not set | ||
293 | # CONFIG_IRDA is not set | ||
294 | # CONFIG_BT is not set | ||
295 | # CONFIG_IEEE80211 is not set | ||
296 | |||
297 | # | ||
298 | # Device Drivers | ||
299 | # | ||
300 | |||
301 | # | ||
302 | # Generic Driver Options | ||
303 | # | ||
304 | CONFIG_STANDALONE=y | ||
305 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
306 | # CONFIG_FW_LOADER is not set | ||
307 | # CONFIG_SYS_HYPERVISOR is not set | ||
308 | |||
309 | # | ||
310 | # Connector - unified userspace <-> kernelspace linker | ||
311 | # | ||
312 | # CONFIG_CONNECTOR is not set | ||
313 | |||
314 | # | ||
315 | # Memory Technology Devices (MTD) | ||
316 | # | ||
317 | # CONFIG_MTD is not set | ||
318 | |||
319 | # | ||
320 | # Parallel port support | ||
321 | # | ||
322 | # CONFIG_PARPORT is not set | ||
323 | |||
324 | # | ||
325 | # Plug and Play support | ||
326 | # | ||
327 | |||
328 | # | ||
329 | # Block devices | ||
330 | # | ||
331 | # CONFIG_BLK_DEV_FD is not set | ||
332 | # CONFIG_BLK_CPQ_DA is not set | ||
333 | # CONFIG_BLK_CPQ_CISS_DA is not set | ||
334 | # CONFIG_BLK_DEV_DAC960 is not set | ||
335 | # CONFIG_BLK_DEV_UMEM is not set | ||
336 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
337 | CONFIG_BLK_DEV_LOOP=y | ||
338 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | ||
339 | # CONFIG_BLK_DEV_NBD is not set | ||
340 | # CONFIG_BLK_DEV_SX8 is not set | ||
341 | CONFIG_BLK_DEV_RAM=y | ||
342 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
343 | CONFIG_BLK_DEV_RAM_SIZE=32768 | ||
344 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | ||
345 | CONFIG_BLK_DEV_INITRD=y | ||
346 | # CONFIG_CDROM_PKTCDVD is not set | ||
347 | # CONFIG_ATA_OVER_ETH is not set | ||
348 | |||
349 | # | ||
350 | # Misc devices | ||
351 | # | ||
352 | # CONFIG_SGI_IOC4 is not set | ||
353 | # CONFIG_TIFM_CORE is not set | ||
354 | |||
355 | # | ||
356 | # ATA/ATAPI/MFM/RLL support | ||
357 | # | ||
358 | # CONFIG_IDE is not set | ||
359 | |||
360 | # | ||
361 | # SCSI device support | ||
362 | # | ||
363 | # CONFIG_RAID_ATTRS is not set | ||
364 | CONFIG_SCSI=y | ||
365 | # CONFIG_SCSI_TGT is not set | ||
366 | # CONFIG_SCSI_NETLINK is not set | ||
367 | CONFIG_SCSI_PROC_FS=y | ||
368 | |||
369 | # | ||
370 | # SCSI support type (disk, tape, CD-ROM) | ||
371 | # | ||
372 | # CONFIG_BLK_DEV_SD is not set | ||
373 | # CONFIG_CHR_DEV_ST is not set | ||
374 | # CONFIG_CHR_DEV_OSST is not set | ||
375 | # CONFIG_BLK_DEV_SR is not set | ||
376 | # CONFIG_CHR_DEV_SG is not set | ||
377 | # CONFIG_CHR_DEV_SCH is not set | ||
378 | |||
379 | # | ||
380 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | ||
381 | # | ||
382 | # CONFIG_SCSI_MULTI_LUN is not set | ||
383 | # CONFIG_SCSI_CONSTANTS is not set | ||
384 | # CONFIG_SCSI_LOGGING is not set | ||
385 | # CONFIG_SCSI_SCAN_ASYNC is not set | ||
386 | |||
387 | # | ||
388 | # SCSI Transports | ||
389 | # | ||
390 | # CONFIG_SCSI_SPI_ATTRS is not set | ||
391 | # CONFIG_SCSI_FC_ATTRS is not set | ||
392 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
393 | # CONFIG_SCSI_SAS_ATTRS is not set | ||
394 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
395 | |||
396 | # | ||
397 | # SCSI low-level drivers | ||
398 | # | ||
399 | # CONFIG_ISCSI_TCP is not set | ||
400 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set | ||
401 | # CONFIG_SCSI_3W_9XXX is not set | ||
402 | # CONFIG_SCSI_ACARD is not set | ||
403 | # CONFIG_SCSI_AACRAID is not set | ||
404 | # CONFIG_SCSI_AIC7XXX is not set | ||
405 | # CONFIG_SCSI_AIC7XXX_OLD is not set | ||
406 | # CONFIG_SCSI_AIC79XX is not set | ||
407 | # CONFIG_SCSI_AIC94XX is not set | ||
408 | # CONFIG_SCSI_DPT_I2O is not set | ||
409 | # CONFIG_SCSI_ARCMSR is not set | ||
410 | # CONFIG_MEGARAID_NEWGEN is not set | ||
411 | # CONFIG_MEGARAID_LEGACY is not set | ||
412 | # CONFIG_MEGARAID_SAS is not set | ||
413 | # CONFIG_SCSI_HPTIOP is not set | ||
414 | # CONFIG_SCSI_BUSLOGIC is not set | ||
415 | # CONFIG_SCSI_DMX3191D is not set | ||
416 | # CONFIG_SCSI_EATA is not set | ||
417 | # CONFIG_SCSI_FUTURE_DOMAIN is not set | ||
418 | # CONFIG_SCSI_GDTH is not set | ||
419 | # CONFIG_SCSI_IPS is not set | ||
420 | # CONFIG_SCSI_INITIO is not set | ||
421 | # CONFIG_SCSI_INIA100 is not set | ||
422 | # CONFIG_SCSI_STEX is not set | ||
423 | # CONFIG_SCSI_SYM53C8XX_2 is not set | ||
424 | # CONFIG_SCSI_QLOGIC_1280 is not set | ||
425 | # CONFIG_SCSI_QLA_FC is not set | ||
426 | # CONFIG_SCSI_QLA_ISCSI is not set | ||
427 | # CONFIG_SCSI_LPFC is not set | ||
428 | # CONFIG_SCSI_DC395x is not set | ||
429 | # CONFIG_SCSI_DC390T is not set | ||
430 | # CONFIG_SCSI_NSP32 is not set | ||
431 | # CONFIG_SCSI_DEBUG is not set | ||
432 | # CONFIG_SCSI_SRP is not set | ||
433 | |||
434 | # | ||
435 | # Serial ATA (prod) and Parallel ATA (experimental) drivers | ||
436 | # | ||
437 | # CONFIG_ATA is not set | ||
438 | |||
439 | # | ||
440 | # Multi-device support (RAID and LVM) | ||
441 | # | ||
442 | # CONFIG_MD is not set | ||
443 | |||
444 | # | ||
445 | # Fusion MPT device support | ||
446 | # | ||
447 | # CONFIG_FUSION is not set | ||
448 | # CONFIG_FUSION_SPI is not set | ||
449 | # CONFIG_FUSION_FC is not set | ||
450 | # CONFIG_FUSION_SAS is not set | ||
451 | |||
452 | # | ||
453 | # IEEE 1394 (FireWire) support | ||
454 | # | ||
455 | # CONFIG_IEEE1394 is not set | ||
456 | |||
457 | # | ||
458 | # I2O device support | ||
459 | # | ||
460 | # CONFIG_I2O is not set | ||
461 | |||
462 | # | ||
463 | # Macintosh device drivers | ||
464 | # | ||
465 | # CONFIG_MAC_EMUMOUSEBTN is not set | ||
466 | # CONFIG_WINDFARM is not set | ||
467 | |||
468 | # | ||
469 | # Network device support | ||
470 | # | ||
471 | CONFIG_NETDEVICES=y | ||
472 | # CONFIG_DUMMY is not set | ||
473 | # CONFIG_BONDING is not set | ||
474 | # CONFIG_EQUALIZER is not set | ||
475 | # CONFIG_TUN is not set | ||
476 | |||
477 | # | ||
478 | # ARCnet devices | ||
479 | # | ||
480 | # CONFIG_ARCNET is not set | ||
481 | |||
482 | # | ||
483 | # PHY device support | ||
484 | # | ||
485 | # CONFIG_PHYLIB is not set | ||
486 | |||
487 | # | ||
488 | # Ethernet (10 or 100Mbit) | ||
489 | # | ||
490 | CONFIG_NET_ETHERNET=y | ||
491 | CONFIG_MII=y | ||
492 | # CONFIG_HAPPYMEAL is not set | ||
493 | # CONFIG_SUNGEM is not set | ||
494 | # CONFIG_CASSINI is not set | ||
495 | # CONFIG_NET_VENDOR_3COM is not set | ||
496 | |||
497 | # | ||
498 | # Tulip family network device support | ||
499 | # | ||
500 | # CONFIG_NET_TULIP is not set | ||
501 | # CONFIG_HP100 is not set | ||
502 | # CONFIG_NET_PCI is not set | ||
503 | |||
504 | # | ||
505 | # Ethernet (1000 Mbit) | ||
506 | # | ||
507 | # CONFIG_ACENIC is not set | ||
508 | # CONFIG_DL2K is not set | ||
509 | # CONFIG_E1000 is not set | ||
510 | # CONFIG_NS83820 is not set | ||
511 | # CONFIG_HAMACHI is not set | ||
512 | # CONFIG_YELLOWFIN is not set | ||
513 | # CONFIG_R8169 is not set | ||
514 | # CONFIG_SIS190 is not set | ||
515 | # CONFIG_SKGE is not set | ||
516 | # CONFIG_SKY2 is not set | ||
517 | # CONFIG_SK98LIN is not set | ||
518 | # CONFIG_TIGON3 is not set | ||
519 | # CONFIG_BNX2 is not set | ||
520 | # CONFIG_GIANFAR is not set | ||
521 | CONFIG_UCC_GETH=y | ||
522 | # CONFIG_UGETH_NAPI is not set | ||
523 | # CONFIG_UGETH_MAGIC_PACKET is not set | ||
524 | # CONFIG_UGETH_FILTERING is not set | ||
525 | # CONFIG_UGETH_TX_ON_DEMOND is not set | ||
526 | # CONFIG_QLA3XXX is not set | ||
527 | |||
528 | # | ||
529 | # Ethernet (10000 Mbit) | ||
530 | # | ||
531 | # CONFIG_CHELSIO_T1 is not set | ||
532 | # CONFIG_IXGB is not set | ||
533 | # CONFIG_S2IO is not set | ||
534 | # CONFIG_MYRI10GE is not set | ||
535 | # CONFIG_NETXEN_NIC is not set | ||
536 | |||
537 | # | ||
538 | # Token Ring devices | ||
539 | # | ||
540 | # CONFIG_TR is not set | ||
541 | |||
542 | # | ||
543 | # Wireless LAN (non-hamradio) | ||
544 | # | ||
545 | # CONFIG_NET_RADIO is not set | ||
546 | |||
547 | # | ||
548 | # Wan interfaces | ||
549 | # | ||
550 | # CONFIG_WAN is not set | ||
551 | # CONFIG_FDDI is not set | ||
552 | # CONFIG_HIPPI is not set | ||
553 | # CONFIG_PPP is not set | ||
554 | # CONFIG_SLIP is not set | ||
555 | # CONFIG_NET_FC is not set | ||
556 | # CONFIG_SHAPER is not set | ||
557 | # CONFIG_NETCONSOLE is not set | ||
558 | # CONFIG_NETPOLL is not set | ||
559 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
560 | |||
561 | # | ||
562 | # ISDN subsystem | ||
563 | # | ||
564 | # CONFIG_ISDN is not set | ||
565 | |||
566 | # | ||
567 | # Telephony Support | ||
568 | # | ||
569 | # CONFIG_PHONE is not set | ||
570 | |||
571 | # | ||
572 | # Input device support | ||
573 | # | ||
574 | CONFIG_INPUT=y | ||
575 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
576 | |||
577 | # | ||
578 | # Userland interfaces | ||
579 | # | ||
580 | # CONFIG_INPUT_MOUSEDEV is not set | ||
581 | # CONFIG_INPUT_JOYDEV is not set | ||
582 | # CONFIG_INPUT_TSDEV is not set | ||
583 | # CONFIG_INPUT_EVDEV is not set | ||
584 | # CONFIG_INPUT_EVBUG is not set | ||
585 | |||
586 | # | ||
587 | # Input Device Drivers | ||
588 | # | ||
589 | # CONFIG_INPUT_KEYBOARD is not set | ||
590 | # CONFIG_INPUT_MOUSE is not set | ||
591 | # CONFIG_INPUT_JOYSTICK is not set | ||
592 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
593 | # CONFIG_INPUT_MISC is not set | ||
594 | |||
595 | # | ||
596 | # Hardware I/O ports | ||
597 | # | ||
598 | # CONFIG_SERIO is not set | ||
599 | # CONFIG_GAMEPORT is not set | ||
600 | |||
601 | # | ||
602 | # Character devices | ||
603 | # | ||
604 | # CONFIG_VT is not set | ||
605 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
606 | |||
607 | # | ||
608 | # Serial drivers | ||
609 | # | ||
610 | CONFIG_SERIAL_8250=y | ||
611 | CONFIG_SERIAL_8250_CONSOLE=y | ||
612 | CONFIG_SERIAL_8250_PCI=y | ||
613 | CONFIG_SERIAL_8250_NR_UARTS=4 | ||
614 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
615 | # CONFIG_SERIAL_8250_EXTENDED is not set | ||
616 | |||
617 | # | ||
618 | # Non-8250 serial port support | ||
619 | # | ||
620 | # CONFIG_SERIAL_UARTLITE is not set | ||
621 | CONFIG_SERIAL_CORE=y | ||
622 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
623 | # CONFIG_SERIAL_JSM is not set | ||
624 | CONFIG_UNIX98_PTYS=y | ||
625 | CONFIG_LEGACY_PTYS=y | ||
626 | CONFIG_LEGACY_PTY_COUNT=256 | ||
627 | |||
628 | # | ||
629 | # IPMI | ||
630 | # | ||
631 | # CONFIG_IPMI_HANDLER is not set | ||
632 | |||
633 | # | ||
634 | # Watchdog Cards | ||
635 | # | ||
636 | CONFIG_WATCHDOG=y | ||
637 | # CONFIG_WATCHDOG_NOWAYOUT is not set | ||
638 | |||
639 | # | ||
640 | # Watchdog Device Drivers | ||
641 | # | ||
642 | # CONFIG_SOFT_WATCHDOG is not set | ||
643 | CONFIG_83xx_WDT=y | ||
644 | |||
645 | # | ||
646 | # PCI-based Watchdog Cards | ||
647 | # | ||
648 | # CONFIG_PCIPCWATCHDOG is not set | ||
649 | # CONFIG_WDTPCI is not set | ||
650 | CONFIG_HW_RANDOM=y | ||
651 | # CONFIG_NVRAM is not set | ||
652 | CONFIG_GEN_RTC=y | ||
653 | # CONFIG_GEN_RTC_X is not set | ||
654 | # CONFIG_DTLK is not set | ||
655 | # CONFIG_R3964 is not set | ||
656 | # CONFIG_APPLICOM is not set | ||
657 | # CONFIG_AGP is not set | ||
658 | # CONFIG_DRM is not set | ||
659 | # CONFIG_RAW_DRIVER is not set | ||
660 | |||
661 | # | ||
662 | # TPM devices | ||
663 | # | ||
664 | # CONFIG_TCG_TPM is not set | ||
665 | |||
666 | # | ||
667 | # I2C support | ||
668 | # | ||
669 | CONFIG_I2C=y | ||
670 | CONFIG_I2C_CHARDEV=y | ||
671 | |||
672 | # | ||
673 | # I2C Algorithms | ||
674 | # | ||
675 | # CONFIG_I2C_ALGOBIT is not set | ||
676 | # CONFIG_I2C_ALGOPCF is not set | ||
677 | # CONFIG_I2C_ALGOPCA is not set | ||
678 | |||
679 | # | ||
680 | # I2C Hardware Bus support | ||
681 | # | ||
682 | # CONFIG_I2C_ALI1535 is not set | ||
683 | # CONFIG_I2C_ALI1563 is not set | ||
684 | # CONFIG_I2C_ALI15X3 is not set | ||
685 | # CONFIG_I2C_AMD756 is not set | ||
686 | # CONFIG_I2C_AMD8111 is not set | ||
687 | # CONFIG_I2C_I801 is not set | ||
688 | # CONFIG_I2C_I810 is not set | ||
689 | # CONFIG_I2C_PIIX4 is not set | ||
690 | CONFIG_I2C_MPC=y | ||
691 | # CONFIG_I2C_NFORCE2 is not set | ||
692 | # CONFIG_I2C_OCORES is not set | ||
693 | # CONFIG_I2C_PARPORT_LIGHT is not set | ||
694 | # CONFIG_I2C_PROSAVAGE is not set | ||
695 | # CONFIG_I2C_SAVAGE4 is not set | ||
696 | # CONFIG_I2C_SIS5595 is not set | ||
697 | # CONFIG_I2C_SIS630 is not set | ||
698 | # CONFIG_I2C_SIS96X is not set | ||
699 | # CONFIG_I2C_STUB is not set | ||
700 | # CONFIG_I2C_VIA is not set | ||
701 | # CONFIG_I2C_VIAPRO is not set | ||
702 | # CONFIG_I2C_VOODOO3 is not set | ||
703 | # CONFIG_I2C_PCA_ISA is not set | ||
704 | |||
705 | # | ||
706 | # Miscellaneous I2C Chip support | ||
707 | # | ||
708 | # CONFIG_SENSORS_DS1337 is not set | ||
709 | # CONFIG_SENSORS_DS1374 is not set | ||
710 | # CONFIG_SENSORS_EEPROM is not set | ||
711 | # CONFIG_SENSORS_PCF8574 is not set | ||
712 | # CONFIG_SENSORS_PCA9539 is not set | ||
713 | # CONFIG_SENSORS_PCF8591 is not set | ||
714 | # CONFIG_SENSORS_M41T00 is not set | ||
715 | # CONFIG_SENSORS_MAX6875 is not set | ||
716 | # CONFIG_I2C_DEBUG_CORE is not set | ||
717 | # CONFIG_I2C_DEBUG_ALGO is not set | ||
718 | # CONFIG_I2C_DEBUG_BUS is not set | ||
719 | # CONFIG_I2C_DEBUG_CHIP is not set | ||
720 | |||
721 | # | ||
722 | # SPI support | ||
723 | # | ||
724 | # CONFIG_SPI is not set | ||
725 | # CONFIG_SPI_MASTER is not set | ||
726 | |||
727 | # | ||
728 | # Dallas's 1-wire bus | ||
729 | # | ||
730 | # CONFIG_W1 is not set | ||
731 | |||
732 | # | ||
733 | # Hardware Monitoring support | ||
734 | # | ||
735 | CONFIG_HWMON=y | ||
736 | # CONFIG_HWMON_VID is not set | ||
737 | # CONFIG_SENSORS_ABITUGURU is not set | ||
738 | # CONFIG_SENSORS_ADM1021 is not set | ||
739 | # CONFIG_SENSORS_ADM1025 is not set | ||
740 | # CONFIG_SENSORS_ADM1026 is not set | ||
741 | # CONFIG_SENSORS_ADM1031 is not set | ||
742 | # CONFIG_SENSORS_ADM9240 is not set | ||
743 | # CONFIG_SENSORS_ASB100 is not set | ||
744 | # CONFIG_SENSORS_ATXP1 is not set | ||
745 | # CONFIG_SENSORS_DS1621 is not set | ||
746 | # CONFIG_SENSORS_F71805F is not set | ||
747 | # CONFIG_SENSORS_FSCHER is not set | ||
748 | # CONFIG_SENSORS_FSCPOS is not set | ||
749 | # CONFIG_SENSORS_GL518SM is not set | ||
750 | # CONFIG_SENSORS_GL520SM is not set | ||
751 | # CONFIG_SENSORS_IT87 is not set | ||
752 | # CONFIG_SENSORS_LM63 is not set | ||
753 | # CONFIG_SENSORS_LM75 is not set | ||
754 | # CONFIG_SENSORS_LM77 is not set | ||
755 | # CONFIG_SENSORS_LM78 is not set | ||
756 | # CONFIG_SENSORS_LM80 is not set | ||
757 | # CONFIG_SENSORS_LM83 is not set | ||
758 | # CONFIG_SENSORS_LM85 is not set | ||
759 | # CONFIG_SENSORS_LM87 is not set | ||
760 | # CONFIG_SENSORS_LM90 is not set | ||
761 | # CONFIG_SENSORS_LM92 is not set | ||
762 | # CONFIG_SENSORS_MAX1619 is not set | ||
763 | # CONFIG_SENSORS_PC87360 is not set | ||
764 | # CONFIG_SENSORS_PC87427 is not set | ||
765 | # CONFIG_SENSORS_SIS5595 is not set | ||
766 | # CONFIG_SENSORS_SMSC47M1 is not set | ||
767 | # CONFIG_SENSORS_SMSC47M192 is not set | ||
768 | # CONFIG_SENSORS_SMSC47B397 is not set | ||
769 | # CONFIG_SENSORS_VIA686A is not set | ||
770 | # CONFIG_SENSORS_VT1211 is not set | ||
771 | # CONFIG_SENSORS_VT8231 is not set | ||
772 | # CONFIG_SENSORS_W83781D is not set | ||
773 | # CONFIG_SENSORS_W83791D is not set | ||
774 | # CONFIG_SENSORS_W83792D is not set | ||
775 | # CONFIG_SENSORS_W83793 is not set | ||
776 | # CONFIG_SENSORS_W83L785TS is not set | ||
777 | # CONFIG_SENSORS_W83627HF is not set | ||
778 | # CONFIG_SENSORS_W83627EHF is not set | ||
779 | # CONFIG_HWMON_DEBUG_CHIP is not set | ||
780 | |||
781 | # | ||
782 | # Multimedia devices | ||
783 | # | ||
784 | # CONFIG_VIDEO_DEV is not set | ||
785 | |||
786 | # | ||
787 | # Digital Video Broadcasting Devices | ||
788 | # | ||
789 | # CONFIG_DVB is not set | ||
790 | |||
791 | # | ||
792 | # Graphics support | ||
793 | # | ||
794 | CONFIG_FIRMWARE_EDID=y | ||
795 | # CONFIG_FB is not set | ||
796 | # CONFIG_FB_IBM_GXT4500 is not set | ||
797 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
798 | |||
799 | # | ||
800 | # Sound | ||
801 | # | ||
802 | # CONFIG_SOUND is not set | ||
803 | |||
804 | # | ||
805 | # HID Devices | ||
806 | # | ||
807 | CONFIG_HID=y | ||
808 | |||
809 | # | ||
810 | # USB support | ||
811 | # | ||
812 | CONFIG_USB_ARCH_HAS_HCD=y | ||
813 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
814 | CONFIG_USB_ARCH_HAS_EHCI=y | ||
815 | # CONFIG_USB is not set | ||
816 | |||
817 | # | ||
818 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||
819 | # | ||
820 | |||
821 | # | ||
822 | # USB Gadget Support | ||
823 | # | ||
824 | # CONFIG_USB_GADGET is not set | ||
825 | |||
826 | # | ||
827 | # MMC/SD Card support | ||
828 | # | ||
829 | # CONFIG_MMC is not set | ||
830 | |||
831 | # | ||
832 | # LED devices | ||
833 | # | ||
834 | # CONFIG_NEW_LEDS is not set | ||
835 | |||
836 | # | ||
837 | # LED drivers | ||
838 | # | ||
839 | |||
840 | # | ||
841 | # LED Triggers | ||
842 | # | ||
843 | |||
844 | # | ||
845 | # InfiniBand support | ||
846 | # | ||
847 | # CONFIG_INFINIBAND is not set | ||
848 | |||
849 | # | ||
850 | # EDAC - error detection and reporting (RAS) (EXPERIMENTAL) | ||
851 | # | ||
852 | |||
853 | # | ||
854 | # Real Time Clock | ||
855 | # | ||
856 | # CONFIG_RTC_CLASS is not set | ||
857 | |||
858 | # | ||
859 | # DMA Engine support | ||
860 | # | ||
861 | # CONFIG_DMA_ENGINE is not set | ||
862 | |||
863 | # | ||
864 | # DMA Clients | ||
865 | # | ||
866 | |||
867 | # | ||
868 | # DMA Devices | ||
869 | # | ||
870 | |||
871 | # | ||
872 | # Virtualization | ||
873 | # | ||
874 | |||
875 | # | ||
876 | # File systems | ||
877 | # | ||
878 | CONFIG_EXT2_FS=y | ||
879 | # CONFIG_EXT2_FS_XATTR is not set | ||
880 | # CONFIG_EXT2_FS_XIP is not set | ||
881 | CONFIG_EXT3_FS=y | ||
882 | CONFIG_EXT3_FS_XATTR=y | ||
883 | # CONFIG_EXT3_FS_POSIX_ACL is not set | ||
884 | # CONFIG_EXT3_FS_SECURITY is not set | ||
885 | # CONFIG_EXT4DEV_FS is not set | ||
886 | CONFIG_JBD=y | ||
887 | # CONFIG_JBD_DEBUG is not set | ||
888 | CONFIG_FS_MBCACHE=y | ||
889 | # CONFIG_REISERFS_FS is not set | ||
890 | # CONFIG_JFS_FS is not set | ||
891 | # CONFIG_FS_POSIX_ACL is not set | ||
892 | # CONFIG_XFS_FS is not set | ||
893 | # CONFIG_GFS2_FS is not set | ||
894 | # CONFIG_OCFS2_FS is not set | ||
895 | # CONFIG_MINIX_FS is not set | ||
896 | # CONFIG_ROMFS_FS is not set | ||
897 | CONFIG_INOTIFY=y | ||
898 | CONFIG_INOTIFY_USER=y | ||
899 | # CONFIG_QUOTA is not set | ||
900 | CONFIG_DNOTIFY=y | ||
901 | # CONFIG_AUTOFS_FS is not set | ||
902 | # CONFIG_AUTOFS4_FS is not set | ||
903 | # CONFIG_FUSE_FS is not set | ||
904 | |||
905 | # | ||
906 | # CD-ROM/DVD Filesystems | ||
907 | # | ||
908 | # CONFIG_ISO9660_FS is not set | ||
909 | # CONFIG_UDF_FS is not set | ||
910 | |||
911 | # | ||
912 | # DOS/FAT/NT Filesystems | ||
913 | # | ||
914 | # CONFIG_MSDOS_FS is not set | ||
915 | # CONFIG_VFAT_FS is not set | ||
916 | # CONFIG_NTFS_FS is not set | ||
917 | |||
918 | # | ||
919 | # Pseudo filesystems | ||
920 | # | ||
921 | CONFIG_PROC_FS=y | ||
922 | CONFIG_PROC_KCORE=y | ||
923 | CONFIG_PROC_SYSCTL=y | ||
924 | CONFIG_SYSFS=y | ||
925 | CONFIG_TMPFS=y | ||
926 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
927 | # CONFIG_HUGETLB_PAGE is not set | ||
928 | CONFIG_RAMFS=y | ||
929 | # CONFIG_CONFIGFS_FS is not set | ||
930 | |||
931 | # | ||
932 | # Miscellaneous filesystems | ||
933 | # | ||
934 | # CONFIG_ADFS_FS is not set | ||
935 | # CONFIG_AFFS_FS is not set | ||
936 | # CONFIG_HFS_FS is not set | ||
937 | # CONFIG_HFSPLUS_FS is not set | ||
938 | # CONFIG_BEFS_FS is not set | ||
939 | # CONFIG_BFS_FS is not set | ||
940 | # CONFIG_EFS_FS is not set | ||
941 | # CONFIG_CRAMFS is not set | ||
942 | # CONFIG_VXFS_FS is not set | ||
943 | # CONFIG_HPFS_FS is not set | ||
944 | # CONFIG_QNX4FS_FS is not set | ||
945 | # CONFIG_SYSV_FS is not set | ||
946 | # CONFIG_UFS_FS is not set | ||
947 | |||
948 | # | ||
949 | # Network File Systems | ||
950 | # | ||
951 | CONFIG_NFS_FS=y | ||
952 | CONFIG_NFS_V3=y | ||
953 | # CONFIG_NFS_V3_ACL is not set | ||
954 | CONFIG_NFS_V4=y | ||
955 | # CONFIG_NFS_DIRECTIO is not set | ||
956 | # CONFIG_NFSD is not set | ||
957 | CONFIG_ROOT_NFS=y | ||
958 | CONFIG_LOCKD=y | ||
959 | CONFIG_LOCKD_V4=y | ||
960 | CONFIG_NFS_COMMON=y | ||
961 | CONFIG_SUNRPC=y | ||
962 | CONFIG_SUNRPC_GSS=y | ||
963 | CONFIG_RPCSEC_GSS_KRB5=y | ||
964 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
965 | # CONFIG_SMB_FS is not set | ||
966 | # CONFIG_CIFS is not set | ||
967 | # CONFIG_NCP_FS is not set | ||
968 | # CONFIG_CODA_FS is not set | ||
969 | # CONFIG_AFS_FS is not set | ||
970 | # CONFIG_9P_FS is not set | ||
971 | |||
972 | # | ||
973 | # Partition Types | ||
974 | # | ||
975 | CONFIG_PARTITION_ADVANCED=y | ||
976 | # CONFIG_ACORN_PARTITION is not set | ||
977 | # CONFIG_OSF_PARTITION is not set | ||
978 | # CONFIG_AMIGA_PARTITION is not set | ||
979 | # CONFIG_ATARI_PARTITION is not set | ||
980 | # CONFIG_MAC_PARTITION is not set | ||
981 | # CONFIG_MSDOS_PARTITION is not set | ||
982 | # CONFIG_LDM_PARTITION is not set | ||
983 | # CONFIG_SGI_PARTITION is not set | ||
984 | # CONFIG_ULTRIX_PARTITION is not set | ||
985 | # CONFIG_SUN_PARTITION is not set | ||
986 | # CONFIG_KARMA_PARTITION is not set | ||
987 | # CONFIG_EFI_PARTITION is not set | ||
988 | |||
989 | # | ||
990 | # Native Language Support | ||
991 | # | ||
992 | # CONFIG_NLS is not set | ||
993 | |||
994 | # | ||
995 | # Distributed Lock Manager | ||
996 | # | ||
997 | # CONFIG_DLM is not set | ||
998 | |||
999 | # | ||
1000 | # QE Options | ||
1001 | # | ||
1002 | CONFIG_UCC_SLOW=y | ||
1003 | CONFIG_UCC_FAST=y | ||
1004 | CONFIG_UCC=y | ||
1005 | |||
1006 | # | ||
1007 | # Library routines | ||
1008 | # | ||
1009 | CONFIG_BITREVERSE=y | ||
1010 | # CONFIG_CRC_CCITT is not set | ||
1011 | # CONFIG_CRC16 is not set | ||
1012 | CONFIG_CRC32=y | ||
1013 | # CONFIG_LIBCRC32C is not set | ||
1014 | CONFIG_PLIST=y | ||
1015 | CONFIG_IOMAP_COPY=y | ||
1016 | |||
1017 | # | ||
1018 | # Instrumentation Support | ||
1019 | # | ||
1020 | # CONFIG_PROFILING is not set | ||
1021 | |||
1022 | # | ||
1023 | # Kernel hacking | ||
1024 | # | ||
1025 | # CONFIG_PRINTK_TIME is not set | ||
1026 | CONFIG_ENABLE_MUST_CHECK=y | ||
1027 | # CONFIG_MAGIC_SYSRQ is not set | ||
1028 | # CONFIG_UNUSED_SYMBOLS is not set | ||
1029 | # CONFIG_DEBUG_FS is not set | ||
1030 | # CONFIG_HEADERS_CHECK is not set | ||
1031 | # CONFIG_DEBUG_KERNEL is not set | ||
1032 | CONFIG_LOG_BUF_SHIFT=14 | ||
1033 | # CONFIG_DEBUG_BUGVERBOSE is not set | ||
1034 | # CONFIG_BOOTX_TEXT is not set | ||
1035 | # CONFIG_SERIAL_TEXT_DEBUG is not set | ||
1036 | # CONFIG_PPC_EARLY_DEBUG is not set | ||
1037 | |||
1038 | # | ||
1039 | # Security options | ||
1040 | # | ||
1041 | # CONFIG_KEYS is not set | ||
1042 | # CONFIG_SECURITY is not set | ||
1043 | |||
1044 | # | ||
1045 | # Cryptographic options | ||
1046 | # | ||
1047 | CONFIG_CRYPTO=y | ||
1048 | CONFIG_CRYPTO_ALGAPI=y | ||
1049 | CONFIG_CRYPTO_BLKCIPHER=y | ||
1050 | CONFIG_CRYPTO_MANAGER=y | ||
1051 | # CONFIG_CRYPTO_HMAC is not set | ||
1052 | # CONFIG_CRYPTO_XCBC is not set | ||
1053 | # CONFIG_CRYPTO_NULL is not set | ||
1054 | # CONFIG_CRYPTO_MD4 is not set | ||
1055 | CONFIG_CRYPTO_MD5=y | ||
1056 | # CONFIG_CRYPTO_SHA1 is not set | ||
1057 | # CONFIG_CRYPTO_SHA256 is not set | ||
1058 | # CONFIG_CRYPTO_SHA512 is not set | ||
1059 | # CONFIG_CRYPTO_WP512 is not set | ||
1060 | # CONFIG_CRYPTO_TGR192 is not set | ||
1061 | # CONFIG_CRYPTO_GF128MUL is not set | ||
1062 | CONFIG_CRYPTO_ECB=m | ||
1063 | CONFIG_CRYPTO_CBC=y | ||
1064 | # CONFIG_CRYPTO_LRW is not set | ||
1065 | CONFIG_CRYPTO_DES=y | ||
1066 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
1067 | # CONFIG_CRYPTO_TWOFISH is not set | ||
1068 | # CONFIG_CRYPTO_SERPENT is not set | ||
1069 | # CONFIG_CRYPTO_AES is not set | ||
1070 | # CONFIG_CRYPTO_CAST5 is not set | ||
1071 | # CONFIG_CRYPTO_CAST6 is not set | ||
1072 | # CONFIG_CRYPTO_TEA is not set | ||
1073 | # CONFIG_CRYPTO_ARC4 is not set | ||
1074 | # CONFIG_CRYPTO_KHAZAD is not set | ||
1075 | # CONFIG_CRYPTO_ANUBIS is not set | ||
1076 | # CONFIG_CRYPTO_DEFLATE is not set | ||
1077 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
1078 | # CONFIG_CRYPTO_CRC32C is not set | ||
1079 | # CONFIG_CRYPTO_TEST is not set | ||
1080 | |||
1081 | # | ||
1082 | # Hardware crypto devices | ||
1083 | # | ||
diff --git a/arch/powerpc/configs/mpc834x_itx_defconfig b/arch/powerpc/configs/mpc834x_itx_defconfig index 45757b613702..7902806429f8 100644 --- a/arch/powerpc/configs/mpc834x_itx_defconfig +++ b/arch/powerpc/configs/mpc834x_itx_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.20-rc5 | 3 | # Linux kernel version: 2.6.20-rc5 |
4 | # Mon Jan 22 22:23:43 2007 | 4 | # Fri Jan 26 00:19:02 2007 |
5 | # | 5 | # |
6 | # CONFIG_PPC64 is not set | 6 | # CONFIG_PPC64 is not set |
7 | CONFIG_PPC32=y | 7 | CONFIG_PPC32=y |
@@ -149,7 +149,6 @@ CONFIG_PREEMPT_NONE=y | |||
149 | # CONFIG_PREEMPT is not set | 149 | # CONFIG_PREEMPT is not set |
150 | CONFIG_BINFMT_ELF=y | 150 | CONFIG_BINFMT_ELF=y |
151 | # CONFIG_BINFMT_MISC is not set | 151 | # CONFIG_BINFMT_MISC is not set |
152 | CONFIG_MATH_EMULATION=y | ||
153 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | 152 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y |
154 | CONFIG_ARCH_FLATMEM_ENABLE=y | 153 | CONFIG_ARCH_FLATMEM_ENABLE=y |
155 | CONFIG_ARCH_POPULATES_NODE_MAP=y | 154 | CONFIG_ARCH_POPULATES_NODE_MAP=y |
@@ -324,6 +323,7 @@ CONFIG_MTD=y | |||
324 | # User Modules And Translation Layers | 323 | # User Modules And Translation Layers |
325 | # | 324 | # |
326 | CONFIG_MTD_CHAR=y | 325 | CONFIG_MTD_CHAR=y |
326 | # CONFIG_MTD_BLKDEVS is not set | ||
327 | # CONFIG_MTD_BLOCK is not set | 327 | # CONFIG_MTD_BLOCK is not set |
328 | # CONFIG_MTD_BLOCK_RO is not set | 328 | # CONFIG_MTD_BLOCK_RO is not set |
329 | # CONFIG_FTL is not set | 329 | # CONFIG_FTL is not set |
@@ -366,6 +366,7 @@ CONFIG_MTD_PHYSMAP=y | |||
366 | CONFIG_MTD_PHYSMAP_START=0xfe000000 | 366 | CONFIG_MTD_PHYSMAP_START=0xfe000000 |
367 | CONFIG_MTD_PHYSMAP_LEN=0x1000000 | 367 | CONFIG_MTD_PHYSMAP_LEN=0x1000000 |
368 | CONFIG_MTD_PHYSMAP_BANKWIDTH=2 | 368 | CONFIG_MTD_PHYSMAP_BANKWIDTH=2 |
369 | # CONFIG_MTD_PHYSMAP_OF is not set | ||
369 | # CONFIG_MTD_PLATRAM is not set | 370 | # CONFIG_MTD_PLATRAM is not set |
370 | 371 | ||
371 | # | 372 | # |
@@ -390,6 +391,7 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=2 | |||
390 | # NAND Flash Device Drivers | 391 | # NAND Flash Device Drivers |
391 | # | 392 | # |
392 | # CONFIG_MTD_NAND is not set | 393 | # CONFIG_MTD_NAND is not set |
394 | # CONFIG_MTD_NAND_CAFE is not set | ||
393 | 395 | ||
394 | # | 396 | # |
395 | # OneNAND Flash Device Drivers | 397 | # OneNAND Flash Device Drivers |
@@ -1011,7 +1013,6 @@ CONFIG_USB=y | |||
1011 | CONFIG_USB_DEVICEFS=y | 1013 | CONFIG_USB_DEVICEFS=y |
1012 | # CONFIG_USB_BANDWIDTH is not set | 1014 | # CONFIG_USB_BANDWIDTH is not set |
1013 | # CONFIG_USB_DYNAMIC_MINORS is not set | 1015 | # CONFIG_USB_DYNAMIC_MINORS is not set |
1014 | # CONFIG_USB_MULTITHREAD_PROBE is not set | ||
1015 | # CONFIG_USB_OTG is not set | 1016 | # CONFIG_USB_OTG is not set |
1016 | 1017 | ||
1017 | # | 1018 | # |
diff --git a/arch/powerpc/configs/mpc834x_mds_defconfig b/arch/powerpc/configs/mpc834x_mds_defconfig index c24db58be457..9eaed3a36983 100644 --- a/arch/powerpc/configs/mpc834x_mds_defconfig +++ b/arch/powerpc/configs/mpc834x_mds_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.20-rc5 | 3 | # Linux kernel version: 2.6.20-rc5 |
4 | # Mon Jan 22 22:24:10 2007 | 4 | # Fri Jan 26 00:19:27 2007 |
5 | # | 5 | # |
6 | # CONFIG_PPC64 is not set | 6 | # CONFIG_PPC64 is not set |
7 | CONFIG_PPC32=y | 7 | CONFIG_PPC32=y |
@@ -149,7 +149,6 @@ CONFIG_PREEMPT_NONE=y | |||
149 | # CONFIG_PREEMPT is not set | 149 | # CONFIG_PREEMPT is not set |
150 | CONFIG_BINFMT_ELF=y | 150 | CONFIG_BINFMT_ELF=y |
151 | # CONFIG_BINFMT_MISC is not set | 151 | # CONFIG_BINFMT_MISC is not set |
152 | CONFIG_MATH_EMULATION=y | ||
153 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | 152 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y |
154 | CONFIG_ARCH_FLATMEM_ENABLE=y | 153 | CONFIG_ARCH_FLATMEM_ENABLE=y |
155 | CONFIG_ARCH_POPULATES_NODE_MAP=y | 154 | CONFIG_ARCH_POPULATES_NODE_MAP=y |
diff --git a/arch/powerpc/configs/mpc8360emds_defconfig b/arch/powerpc/configs/mpc8360emds_defconfig index 58e6795dbfe5..bbe38ccc3d86 100644 --- a/arch/powerpc/configs/mpc8360emds_defconfig +++ b/arch/powerpc/configs/mpc8360emds_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.20-rc5 | 3 | # Linux kernel version: 2.6.20-rc5 |
4 | # Mon Jan 22 22:24:40 2007 | 4 | # Fri Jan 26 00:19:45 2007 |
5 | # | 5 | # |
6 | # CONFIG_PPC64 is not set | 6 | # CONFIG_PPC64 is not set |
7 | CONFIG_PPC32=y | 7 | CONFIG_PPC32=y |
@@ -150,7 +150,6 @@ CONFIG_PREEMPT_NONE=y | |||
150 | # CONFIG_PREEMPT is not set | 150 | # CONFIG_PREEMPT is not set |
151 | CONFIG_BINFMT_ELF=y | 151 | CONFIG_BINFMT_ELF=y |
152 | # CONFIG_BINFMT_MISC is not set | 152 | # CONFIG_BINFMT_MISC is not set |
153 | CONFIG_MATH_EMULATION=y | ||
154 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | 153 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y |
155 | CONFIG_ARCH_FLATMEM_ENABLE=y | 154 | CONFIG_ARCH_FLATMEM_ENABLE=y |
156 | CONFIG_ARCH_POPULATES_NODE_MAP=y | 155 | CONFIG_ARCH_POPULATES_NODE_MAP=y |
diff --git a/arch/powerpc/configs/mpc866_ads_defconfig b/arch/powerpc/configs/mpc866_ads_defconfig new file mode 100644 index 000000000000..539d9e3d3668 --- /dev/null +++ b/arch/powerpc/configs/mpc866_ads_defconfig | |||
@@ -0,0 +1,829 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.19-rc6 | ||
4 | # Fri Nov 24 21:13:55 2006 | ||
5 | # | ||
6 | # CONFIG_PPC64 is not set | ||
7 | CONFIG_PPC32=y | ||
8 | CONFIG_PPC_MERGE=y | ||
9 | CONFIG_MMU=y | ||
10 | CONFIG_GENERIC_HARDIRQS=y | ||
11 | CONFIG_IRQ_PER_CPU=y | ||
12 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | ||
13 | CONFIG_GENERIC_HWEIGHT=y | ||
14 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
15 | CONFIG_GENERIC_FIND_NEXT_BIT=y | ||
16 | CONFIG_PPC=y | ||
17 | CONFIG_EARLY_PRINTK=y | ||
18 | CONFIG_GENERIC_NVRAM=y | ||
19 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | ||
20 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y | ||
21 | CONFIG_PPC_OF=y | ||
22 | # CONFIG_PPC_UDBG_16550 is not set | ||
23 | # CONFIG_GENERIC_TBSYNC is not set | ||
24 | CONFIG_AUDIT_ARCH=y | ||
25 | # CONFIG_DEFAULT_UIMAGE is not set | ||
26 | |||
27 | # | ||
28 | # Processor support | ||
29 | # | ||
30 | # CONFIG_CLASSIC32 is not set | ||
31 | # CONFIG_PPC_52xx is not set | ||
32 | # CONFIG_PPC_82xx is not set | ||
33 | # CONFIG_PPC_83xx is not set | ||
34 | # CONFIG_PPC_85xx is not set | ||
35 | # CONFIG_PPC_86xx is not set | ||
36 | CONFIG_PPC_8xx=y | ||
37 | # CONFIG_40x is not set | ||
38 | # CONFIG_44x is not set | ||
39 | # CONFIG_E200 is not set | ||
40 | CONFIG_8xx=y | ||
41 | # CONFIG_PPC_DCR_NATIVE is not set | ||
42 | # CONFIG_PPC_DCR_MMIO is not set | ||
43 | CONFIG_NOT_COHERENT_CACHE=y | ||
44 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
45 | |||
46 | # | ||
47 | # Code maturity level options | ||
48 | # | ||
49 | CONFIG_EXPERIMENTAL=y | ||
50 | CONFIG_BROKEN_ON_SMP=y | ||
51 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
52 | |||
53 | # | ||
54 | # General setup | ||
55 | # | ||
56 | CONFIG_LOCALVERSION="" | ||
57 | CONFIG_LOCALVERSION_AUTO=y | ||
58 | # CONFIG_SWAP is not set | ||
59 | CONFIG_SYSVIPC=y | ||
60 | # CONFIG_IPC_NS is not set | ||
61 | # CONFIG_POSIX_MQUEUE is not set | ||
62 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
63 | # CONFIG_TASKSTATS is not set | ||
64 | # CONFIG_UTS_NS is not set | ||
65 | # CONFIG_AUDIT is not set | ||
66 | # CONFIG_IKCONFIG is not set | ||
67 | # CONFIG_RELAY is not set | ||
68 | CONFIG_INITRAMFS_SOURCE="" | ||
69 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
70 | CONFIG_SYSCTL=y | ||
71 | CONFIG_EMBEDDED=y | ||
72 | # CONFIG_SYSCTL_SYSCALL is not set | ||
73 | CONFIG_KALLSYMS=y | ||
74 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
75 | # CONFIG_HOTPLUG is not set | ||
76 | CONFIG_PRINTK=y | ||
77 | # CONFIG_BUG is not set | ||
78 | CONFIG_ELF_CORE=y | ||
79 | # CONFIG_BASE_FULL is not set | ||
80 | CONFIG_FUTEX=y | ||
81 | # CONFIG_EPOLL is not set | ||
82 | CONFIG_SHMEM=y | ||
83 | CONFIG_SLAB=y | ||
84 | # CONFIG_VM_EVENT_COUNTERS is not set | ||
85 | CONFIG_RT_MUTEXES=y | ||
86 | # CONFIG_TINY_SHMEM is not set | ||
87 | CONFIG_BASE_SMALL=1 | ||
88 | # CONFIG_SLOB is not set | ||
89 | |||
90 | # | ||
91 | # Loadable module support | ||
92 | # | ||
93 | # CONFIG_MODULES is not set | ||
94 | |||
95 | # | ||
96 | # Block layer | ||
97 | # | ||
98 | CONFIG_BLOCK=y | ||
99 | # CONFIG_LBD is not set | ||
100 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
101 | # CONFIG_LSF is not set | ||
102 | |||
103 | # | ||
104 | # IO Schedulers | ||
105 | # | ||
106 | CONFIG_IOSCHED_NOOP=y | ||
107 | CONFIG_IOSCHED_AS=y | ||
108 | CONFIG_IOSCHED_DEADLINE=y | ||
109 | CONFIG_IOSCHED_CFQ=y | ||
110 | CONFIG_DEFAULT_AS=y | ||
111 | # CONFIG_DEFAULT_DEADLINE is not set | ||
112 | # CONFIG_DEFAULT_CFQ is not set | ||
113 | # CONFIG_DEFAULT_NOOP is not set | ||
114 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
115 | # CONFIG_WANT_EARLY_SERIAL is not set | ||
116 | CONFIG_EMBEDDEDBOOT=y | ||
117 | # CONFIG_MPIC is not set | ||
118 | |||
119 | # | ||
120 | # Platform support | ||
121 | # | ||
122 | CONFIG_CPM1=y | ||
123 | # CONFIG_MPC8XXFADS is not set | ||
124 | CONFIG_MPC86XADS=y | ||
125 | # CONFIG_MPC885ADS is not set | ||
126 | |||
127 | # | ||
128 | # MPC8xx CPM Options | ||
129 | # | ||
130 | |||
131 | # | ||
132 | # Generic MPC8xx Options | ||
133 | # | ||
134 | CONFIG_8xx_COPYBACK=y | ||
135 | CONFIG_8xx_CPU6=y | ||
136 | CONFIG_NO_UCODE_PATCH=y | ||
137 | # CONFIG_USB_SOF_UCODE_PATCH is not set | ||
138 | # CONFIG_I2C_SPI_UCODE_PATCH is not set | ||
139 | # CONFIG_I2C_SPI_SMC1_UCODE_PATCH is not set | ||
140 | |||
141 | # | ||
142 | # Kernel options | ||
143 | # | ||
144 | # CONFIG_HIGHMEM is not set | ||
145 | # CONFIG_HZ_100 is not set | ||
146 | # CONFIG_HZ_250 is not set | ||
147 | CONFIG_HZ_1000=y | ||
148 | CONFIG_HZ=1000 | ||
149 | CONFIG_PREEMPT_NONE=y | ||
150 | # CONFIG_PREEMPT_VOLUNTARY is not set | ||
151 | # CONFIG_PREEMPT is not set | ||
152 | CONFIG_BINFMT_ELF=y | ||
153 | # CONFIG_BINFMT_MISC is not set | ||
154 | CONFIG_MATH_EMULATION=y | ||
155 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | ||
156 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
157 | CONFIG_ARCH_POPULATES_NODE_MAP=y | ||
158 | CONFIG_SELECT_MEMORY_MODEL=y | ||
159 | CONFIG_FLATMEM_MANUAL=y | ||
160 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
161 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
162 | CONFIG_FLATMEM=y | ||
163 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
164 | # CONFIG_SPARSEMEM_STATIC is not set | ||
165 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
166 | # CONFIG_RESOURCES_64BIT is not set | ||
167 | # CONFIG_PROC_DEVICETREE is not set | ||
168 | # CONFIG_CMDLINE_BOOL is not set | ||
169 | # CONFIG_PM is not set | ||
170 | # CONFIG_SECCOMP is not set | ||
171 | CONFIG_ISA_DMA_API=y | ||
172 | |||
173 | # | ||
174 | # Bus options | ||
175 | # | ||
176 | # CONFIG_MPIC_WEIRD is not set | ||
177 | # CONFIG_PPC_I8259 is not set | ||
178 | CONFIG_FSL_SOC=y | ||
179 | # CONFIG_PCI is not set | ||
180 | # CONFIG_PCI_DOMAINS is not set | ||
181 | # CONFIG_PCI_QSPAN is not set | ||
182 | |||
183 | # | ||
184 | # PCCARD (PCMCIA/CardBus) support | ||
185 | # | ||
186 | |||
187 | # | ||
188 | # PCI Hotplug Support | ||
189 | # | ||
190 | |||
191 | # | ||
192 | # Advanced setup | ||
193 | # | ||
194 | # CONFIG_ADVANCED_OPTIONS is not set | ||
195 | |||
196 | # | ||
197 | # Default settings for advanced configuration options are used | ||
198 | # | ||
199 | CONFIG_HIGHMEM_START=0xfe000000 | ||
200 | CONFIG_LOWMEM_SIZE=0x30000000 | ||
201 | CONFIG_KERNEL_START=0xc0000000 | ||
202 | CONFIG_TASK_SIZE=0x80000000 | ||
203 | CONFIG_CONSISTENT_START=0xff100000 | ||
204 | CONFIG_CONSISTENT_SIZE=0x00200000 | ||
205 | CONFIG_BOOT_LOAD=0x00400000 | ||
206 | |||
207 | # | ||
208 | # Networking | ||
209 | # | ||
210 | CONFIG_NET=y | ||
211 | |||
212 | # | ||
213 | # Networking options | ||
214 | # | ||
215 | # CONFIG_NETDEBUG is not set | ||
216 | CONFIG_PACKET=y | ||
217 | # CONFIG_PACKET_MMAP is not set | ||
218 | CONFIG_UNIX=y | ||
219 | CONFIG_XFRM=y | ||
220 | # CONFIG_XFRM_USER is not set | ||
221 | # CONFIG_XFRM_SUB_POLICY is not set | ||
222 | # CONFIG_NET_KEY is not set | ||
223 | CONFIG_INET=y | ||
224 | CONFIG_IP_MULTICAST=y | ||
225 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
226 | CONFIG_IP_FIB_HASH=y | ||
227 | CONFIG_IP_PNP=y | ||
228 | # CONFIG_IP_PNP_DHCP is not set | ||
229 | # CONFIG_IP_PNP_BOOTP is not set | ||
230 | # CONFIG_IP_PNP_RARP is not set | ||
231 | # CONFIG_NET_IPIP is not set | ||
232 | # CONFIG_NET_IPGRE is not set | ||
233 | # CONFIG_IP_MROUTE is not set | ||
234 | # CONFIG_ARPD is not set | ||
235 | CONFIG_SYN_COOKIES=y | ||
236 | # CONFIG_INET_AH is not set | ||
237 | # CONFIG_INET_ESP is not set | ||
238 | # CONFIG_INET_IPCOMP is not set | ||
239 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
240 | # CONFIG_INET_TUNNEL is not set | ||
241 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | ||
242 | CONFIG_INET_XFRM_MODE_TUNNEL=y | ||
243 | CONFIG_INET_XFRM_MODE_BEET=y | ||
244 | CONFIG_INET_DIAG=y | ||
245 | CONFIG_INET_TCP_DIAG=y | ||
246 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
247 | CONFIG_TCP_CONG_CUBIC=y | ||
248 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
249 | # CONFIG_IPV6 is not set | ||
250 | # CONFIG_INET6_XFRM_TUNNEL is not set | ||
251 | # CONFIG_INET6_TUNNEL is not set | ||
252 | # CONFIG_NETWORK_SECMARK is not set | ||
253 | # CONFIG_NETFILTER is not set | ||
254 | |||
255 | # | ||
256 | # DCCP Configuration (EXPERIMENTAL) | ||
257 | # | ||
258 | # CONFIG_IP_DCCP is not set | ||
259 | |||
260 | # | ||
261 | # SCTP Configuration (EXPERIMENTAL) | ||
262 | # | ||
263 | # CONFIG_IP_SCTP is not set | ||
264 | |||
265 | # | ||
266 | # TIPC Configuration (EXPERIMENTAL) | ||
267 | # | ||
268 | # CONFIG_TIPC is not set | ||
269 | # CONFIG_ATM is not set | ||
270 | # CONFIG_BRIDGE is not set | ||
271 | # CONFIG_VLAN_8021Q is not set | ||
272 | # CONFIG_DECNET is not set | ||
273 | # CONFIG_LLC2 is not set | ||
274 | # CONFIG_IPX is not set | ||
275 | # CONFIG_ATALK is not set | ||
276 | # CONFIG_X25 is not set | ||
277 | # CONFIG_LAPB is not set | ||
278 | # CONFIG_ECONET is not set | ||
279 | # CONFIG_WAN_ROUTER is not set | ||
280 | |||
281 | # | ||
282 | # QoS and/or fair queueing | ||
283 | # | ||
284 | # CONFIG_NET_SCHED is not set | ||
285 | |||
286 | # | ||
287 | # Network testing | ||
288 | # | ||
289 | # CONFIG_NET_PKTGEN is not set | ||
290 | # CONFIG_HAMRADIO is not set | ||
291 | # CONFIG_IRDA is not set | ||
292 | # CONFIG_BT is not set | ||
293 | # CONFIG_IEEE80211 is not set | ||
294 | |||
295 | # | ||
296 | # Device Drivers | ||
297 | # | ||
298 | |||
299 | # | ||
300 | # Generic Driver Options | ||
301 | # | ||
302 | CONFIG_STANDALONE=y | ||
303 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
304 | # CONFIG_SYS_HYPERVISOR is not set | ||
305 | |||
306 | # | ||
307 | # Connector - unified userspace <-> kernelspace linker | ||
308 | # | ||
309 | # CONFIG_CONNECTOR is not set | ||
310 | |||
311 | # | ||
312 | # Memory Technology Devices (MTD) | ||
313 | # | ||
314 | # CONFIG_MTD is not set | ||
315 | |||
316 | # | ||
317 | # Parallel port support | ||
318 | # | ||
319 | # CONFIG_PARPORT is not set | ||
320 | |||
321 | # | ||
322 | # Plug and Play support | ||
323 | # | ||
324 | |||
325 | # | ||
326 | # Block devices | ||
327 | # | ||
328 | # CONFIG_BLK_DEV_FD is not set | ||
329 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
330 | CONFIG_BLK_DEV_LOOP=y | ||
331 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | ||
332 | # CONFIG_BLK_DEV_NBD is not set | ||
333 | # CONFIG_BLK_DEV_RAM is not set | ||
334 | # CONFIG_BLK_DEV_INITRD is not set | ||
335 | # CONFIG_CDROM_PKTCDVD is not set | ||
336 | # CONFIG_ATA_OVER_ETH is not set | ||
337 | |||
338 | # | ||
339 | # Misc devices | ||
340 | # | ||
341 | # CONFIG_TIFM_CORE is not set | ||
342 | |||
343 | # | ||
344 | # ATA/ATAPI/MFM/RLL support | ||
345 | # | ||
346 | # CONFIG_IDE is not set | ||
347 | |||
348 | # | ||
349 | # SCSI device support | ||
350 | # | ||
351 | # CONFIG_RAID_ATTRS is not set | ||
352 | # CONFIG_SCSI is not set | ||
353 | # CONFIG_SCSI_NETLINK is not set | ||
354 | |||
355 | # | ||
356 | # Serial ATA (prod) and Parallel ATA (experimental) drivers | ||
357 | # | ||
358 | # CONFIG_ATA is not set | ||
359 | |||
360 | # | ||
361 | # Multi-device support (RAID and LVM) | ||
362 | # | ||
363 | # CONFIG_MD is not set | ||
364 | |||
365 | # | ||
366 | # Fusion MPT device support | ||
367 | # | ||
368 | # CONFIG_FUSION is not set | ||
369 | |||
370 | # | ||
371 | # IEEE 1394 (FireWire) support | ||
372 | # | ||
373 | |||
374 | # | ||
375 | # I2O device support | ||
376 | # | ||
377 | |||
378 | # | ||
379 | # Macintosh device drivers | ||
380 | # | ||
381 | # CONFIG_WINDFARM is not set | ||
382 | |||
383 | # | ||
384 | # Network device support | ||
385 | # | ||
386 | CONFIG_NETDEVICES=y | ||
387 | # CONFIG_DUMMY is not set | ||
388 | # CONFIG_BONDING is not set | ||
389 | # CONFIG_EQUALIZER is not set | ||
390 | # CONFIG_TUN is not set | ||
391 | |||
392 | # | ||
393 | # PHY device support | ||
394 | # | ||
395 | CONFIG_PHYLIB=y | ||
396 | |||
397 | # | ||
398 | # MII PHY device drivers | ||
399 | # | ||
400 | # CONFIG_MARVELL_PHY is not set | ||
401 | # CONFIG_DAVICOM_PHY is not set | ||
402 | # CONFIG_QSEMI_PHY is not set | ||
403 | # CONFIG_LXT_PHY is not set | ||
404 | # CONFIG_CICADA_PHY is not set | ||
405 | # CONFIG_VITESSE_PHY is not set | ||
406 | # CONFIG_SMSC_PHY is not set | ||
407 | CONFIG_FIXED_PHY=y | ||
408 | CONFIG_FIXED_MII_10_FDX=y | ||
409 | CONFIG_FIXED_MII_100_FDX=y | ||
410 | |||
411 | # | ||
412 | # Ethernet (10 or 100Mbit) | ||
413 | # | ||
414 | CONFIG_NET_ETHERNET=y | ||
415 | CONFIG_MII=y | ||
416 | # CONFIG_FEC_8XX is not set | ||
417 | CONFIG_FS_ENET=y | ||
418 | CONFIG_FS_ENET_HAS_SCC=y | ||
419 | CONFIG_FS_ENET_HAS_FEC=y | ||
420 | |||
421 | # | ||
422 | # Ethernet (1000 Mbit) | ||
423 | # | ||
424 | |||
425 | # | ||
426 | # Ethernet (10000 Mbit) | ||
427 | # | ||
428 | |||
429 | # | ||
430 | # Token Ring devices | ||
431 | # | ||
432 | |||
433 | # | ||
434 | # Wireless LAN (non-hamradio) | ||
435 | # | ||
436 | # CONFIG_NET_RADIO is not set | ||
437 | |||
438 | # | ||
439 | # Wan interfaces | ||
440 | # | ||
441 | # CONFIG_WAN is not set | ||
442 | # CONFIG_PPP is not set | ||
443 | # CONFIG_SLIP is not set | ||
444 | # CONFIG_SHAPER is not set | ||
445 | # CONFIG_NETCONSOLE is not set | ||
446 | # CONFIG_NETPOLL is not set | ||
447 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
448 | |||
449 | # | ||
450 | # ISDN subsystem | ||
451 | # | ||
452 | # CONFIG_ISDN is not set | ||
453 | |||
454 | # | ||
455 | # Telephony Support | ||
456 | # | ||
457 | # CONFIG_PHONE is not set | ||
458 | |||
459 | # | ||
460 | # Input device support | ||
461 | # | ||
462 | CONFIG_INPUT=y | ||
463 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
464 | |||
465 | # | ||
466 | # Userland interfaces | ||
467 | # | ||
468 | CONFIG_INPUT_MOUSEDEV=y | ||
469 | CONFIG_INPUT_MOUSEDEV_PSAUX=y | ||
470 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
471 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
472 | # CONFIG_INPUT_JOYDEV is not set | ||
473 | # CONFIG_INPUT_TSDEV is not set | ||
474 | # CONFIG_INPUT_EVDEV is not set | ||
475 | # CONFIG_INPUT_EVBUG is not set | ||
476 | |||
477 | # | ||
478 | # Input Device Drivers | ||
479 | # | ||
480 | CONFIG_INPUT_KEYBOARD=y | ||
481 | CONFIG_KEYBOARD_ATKBD=y | ||
482 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
483 | # CONFIG_KEYBOARD_LKKBD is not set | ||
484 | # CONFIG_KEYBOARD_XTKBD is not set | ||
485 | # CONFIG_KEYBOARD_NEWTON is not set | ||
486 | # CONFIG_KEYBOARD_STOWAWAY is not set | ||
487 | CONFIG_INPUT_MOUSE=y | ||
488 | CONFIG_MOUSE_PS2=y | ||
489 | # CONFIG_MOUSE_SERIAL is not set | ||
490 | # CONFIG_MOUSE_VSXXXAA is not set | ||
491 | # CONFIG_INPUT_JOYSTICK is not set | ||
492 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
493 | # CONFIG_INPUT_MISC is not set | ||
494 | |||
495 | # | ||
496 | # Hardware I/O ports | ||
497 | # | ||
498 | CONFIG_SERIO=y | ||
499 | CONFIG_SERIO_I8042=y | ||
500 | CONFIG_SERIO_SERPORT=y | ||
501 | CONFIG_SERIO_LIBPS2=y | ||
502 | # CONFIG_SERIO_RAW is not set | ||
503 | # CONFIG_GAMEPORT is not set | ||
504 | |||
505 | # | ||
506 | # Character devices | ||
507 | # | ||
508 | # CONFIG_VT is not set | ||
509 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
510 | |||
511 | # | ||
512 | # Serial drivers | ||
513 | # | ||
514 | # CONFIG_SERIAL_8250 is not set | ||
515 | |||
516 | # | ||
517 | # Non-8250 serial port support | ||
518 | # | ||
519 | CONFIG_SERIAL_CORE=y | ||
520 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
521 | CONFIG_SERIAL_CPM=y | ||
522 | CONFIG_SERIAL_CPM_CONSOLE=y | ||
523 | # CONFIG_SERIAL_CPM_SCC1 is not set | ||
524 | # CONFIG_SERIAL_CPM_SCC2 is not set | ||
525 | # CONFIG_SERIAL_CPM_SCC3 is not set | ||
526 | # CONFIG_SERIAL_CPM_SCC4 is not set | ||
527 | CONFIG_SERIAL_CPM_SMC1=y | ||
528 | CONFIG_SERIAL_CPM_SMC2=y | ||
529 | CONFIG_UNIX98_PTYS=y | ||
530 | # CONFIG_LEGACY_PTYS is not set | ||
531 | |||
532 | # | ||
533 | # IPMI | ||
534 | # | ||
535 | # CONFIG_IPMI_HANDLER is not set | ||
536 | |||
537 | # | ||
538 | # Watchdog Cards | ||
539 | # | ||
540 | # CONFIG_WATCHDOG is not set | ||
541 | CONFIG_HW_RANDOM=y | ||
542 | # CONFIG_NVRAM is not set | ||
543 | CONFIG_GEN_RTC=y | ||
544 | # CONFIG_GEN_RTC_X is not set | ||
545 | # CONFIG_DTLK is not set | ||
546 | # CONFIG_R3964 is not set | ||
547 | |||
548 | # | ||
549 | # Ftape, the floppy tape device driver | ||
550 | # | ||
551 | # CONFIG_RAW_DRIVER is not set | ||
552 | |||
553 | # | ||
554 | # TPM devices | ||
555 | # | ||
556 | # CONFIG_TCG_TPM is not set | ||
557 | |||
558 | # | ||
559 | # I2C support | ||
560 | # | ||
561 | # CONFIG_I2C is not set | ||
562 | |||
563 | # | ||
564 | # SPI support | ||
565 | # | ||
566 | # CONFIG_SPI is not set | ||
567 | # CONFIG_SPI_MASTER is not set | ||
568 | |||
569 | # | ||
570 | # Dallas's 1-wire bus | ||
571 | # | ||
572 | # CONFIG_W1 is not set | ||
573 | |||
574 | # | ||
575 | # Hardware Monitoring support | ||
576 | # | ||
577 | CONFIG_HWMON=y | ||
578 | # CONFIG_HWMON_VID is not set | ||
579 | # CONFIG_SENSORS_ABITUGURU is not set | ||
580 | # CONFIG_SENSORS_F71805F is not set | ||
581 | # CONFIG_SENSORS_VT1211 is not set | ||
582 | # CONFIG_HWMON_DEBUG_CHIP is not set | ||
583 | |||
584 | # | ||
585 | # Multimedia devices | ||
586 | # | ||
587 | # CONFIG_VIDEO_DEV is not set | ||
588 | |||
589 | # | ||
590 | # Digital Video Broadcasting Devices | ||
591 | # | ||
592 | # CONFIG_DVB is not set | ||
593 | |||
594 | # | ||
595 | # Graphics support | ||
596 | # | ||
597 | CONFIG_FIRMWARE_EDID=y | ||
598 | # CONFIG_FB is not set | ||
599 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
600 | |||
601 | # | ||
602 | # Sound | ||
603 | # | ||
604 | # CONFIG_SOUND is not set | ||
605 | |||
606 | # | ||
607 | # USB support | ||
608 | # | ||
609 | # CONFIG_USB_ARCH_HAS_HCD is not set | ||
610 | # CONFIG_USB_ARCH_HAS_OHCI is not set | ||
611 | # CONFIG_USB_ARCH_HAS_EHCI is not set | ||
612 | |||
613 | # | ||
614 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||
615 | # | ||
616 | |||
617 | # | ||
618 | # USB Gadget Support | ||
619 | # | ||
620 | # CONFIG_USB_GADGET is not set | ||
621 | |||
622 | # | ||
623 | # MMC/SD Card support | ||
624 | # | ||
625 | # CONFIG_MMC is not set | ||
626 | |||
627 | # | ||
628 | # LED devices | ||
629 | # | ||
630 | # CONFIG_NEW_LEDS is not set | ||
631 | |||
632 | # | ||
633 | # LED drivers | ||
634 | # | ||
635 | |||
636 | # | ||
637 | # LED Triggers | ||
638 | # | ||
639 | |||
640 | # | ||
641 | # InfiniBand support | ||
642 | # | ||
643 | |||
644 | # | ||
645 | # EDAC - error detection and reporting (RAS) (EXPERIMENTAL) | ||
646 | # | ||
647 | |||
648 | # | ||
649 | # Real Time Clock | ||
650 | # | ||
651 | # CONFIG_RTC_CLASS is not set | ||
652 | |||
653 | # | ||
654 | # DMA Engine support | ||
655 | # | ||
656 | # CONFIG_DMA_ENGINE is not set | ||
657 | |||
658 | # | ||
659 | # DMA Clients | ||
660 | # | ||
661 | |||
662 | # | ||
663 | # DMA Devices | ||
664 | # | ||
665 | |||
666 | # | ||
667 | # File systems | ||
668 | # | ||
669 | CONFIG_EXT2_FS=y | ||
670 | CONFIG_EXT2_FS_XATTR=y | ||
671 | # CONFIG_EXT2_FS_POSIX_ACL is not set | ||
672 | # CONFIG_EXT2_FS_SECURITY is not set | ||
673 | # CONFIG_EXT2_FS_XIP is not set | ||
674 | CONFIG_EXT3_FS=y | ||
675 | CONFIG_EXT3_FS_XATTR=y | ||
676 | # CONFIG_EXT3_FS_POSIX_ACL is not set | ||
677 | # CONFIG_EXT3_FS_SECURITY is not set | ||
678 | # CONFIG_EXT4DEV_FS is not set | ||
679 | CONFIG_JBD=y | ||
680 | # CONFIG_JBD_DEBUG is not set | ||
681 | CONFIG_FS_MBCACHE=y | ||
682 | # CONFIG_REISERFS_FS is not set | ||
683 | # CONFIG_JFS_FS is not set | ||
684 | # CONFIG_FS_POSIX_ACL is not set | ||
685 | # CONFIG_XFS_FS is not set | ||
686 | # CONFIG_GFS2_FS is not set | ||
687 | # CONFIG_OCFS2_FS is not set | ||
688 | # CONFIG_MINIX_FS is not set | ||
689 | # CONFIG_ROMFS_FS is not set | ||
690 | CONFIG_INOTIFY=y | ||
691 | CONFIG_INOTIFY_USER=y | ||
692 | # CONFIG_QUOTA is not set | ||
693 | CONFIG_DNOTIFY=y | ||
694 | # CONFIG_AUTOFS_FS is not set | ||
695 | # CONFIG_AUTOFS4_FS is not set | ||
696 | # CONFIG_FUSE_FS is not set | ||
697 | |||
698 | # | ||
699 | # CD-ROM/DVD Filesystems | ||
700 | # | ||
701 | # CONFIG_ISO9660_FS is not set | ||
702 | # CONFIG_UDF_FS is not set | ||
703 | |||
704 | # | ||
705 | # DOS/FAT/NT Filesystems | ||
706 | # | ||
707 | # CONFIG_MSDOS_FS is not set | ||
708 | # CONFIG_VFAT_FS is not set | ||
709 | # CONFIG_NTFS_FS is not set | ||
710 | |||
711 | # | ||
712 | # Pseudo filesystems | ||
713 | # | ||
714 | CONFIG_PROC_FS=y | ||
715 | # CONFIG_PROC_KCORE is not set | ||
716 | CONFIG_PROC_SYSCTL=y | ||
717 | CONFIG_SYSFS=y | ||
718 | CONFIG_TMPFS=y | ||
719 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
720 | # CONFIG_HUGETLB_PAGE is not set | ||
721 | CONFIG_RAMFS=y | ||
722 | # CONFIG_CONFIGFS_FS is not set | ||
723 | |||
724 | # | ||
725 | # Miscellaneous filesystems | ||
726 | # | ||
727 | # CONFIG_ADFS_FS is not set | ||
728 | # CONFIG_AFFS_FS is not set | ||
729 | # CONFIG_HFS_FS is not set | ||
730 | # CONFIG_HFSPLUS_FS is not set | ||
731 | # CONFIG_BEFS_FS is not set | ||
732 | # CONFIG_BFS_FS is not set | ||
733 | # CONFIG_EFS_FS is not set | ||
734 | CONFIG_CRAMFS=y | ||
735 | # CONFIG_VXFS_FS is not set | ||
736 | # CONFIG_HPFS_FS is not set | ||
737 | # CONFIG_QNX4FS_FS is not set | ||
738 | # CONFIG_SYSV_FS is not set | ||
739 | # CONFIG_UFS_FS is not set | ||
740 | |||
741 | # | ||
742 | # Network File Systems | ||
743 | # | ||
744 | CONFIG_NFS_FS=y | ||
745 | CONFIG_NFS_V3=y | ||
746 | # CONFIG_NFS_V3_ACL is not set | ||
747 | # CONFIG_NFS_V4 is not set | ||
748 | # CONFIG_NFS_DIRECTIO is not set | ||
749 | # CONFIG_NFSD is not set | ||
750 | CONFIG_ROOT_NFS=y | ||
751 | CONFIG_LOCKD=y | ||
752 | CONFIG_LOCKD_V4=y | ||
753 | CONFIG_NFS_COMMON=y | ||
754 | CONFIG_SUNRPC=y | ||
755 | # CONFIG_RPCSEC_GSS_KRB5 is not set | ||
756 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
757 | # CONFIG_SMB_FS is not set | ||
758 | # CONFIG_CIFS is not set | ||
759 | # CONFIG_NCP_FS is not set | ||
760 | # CONFIG_CODA_FS is not set | ||
761 | # CONFIG_AFS_FS is not set | ||
762 | # CONFIG_9P_FS is not set | ||
763 | |||
764 | # | ||
765 | # Partition Types | ||
766 | # | ||
767 | CONFIG_PARTITION_ADVANCED=y | ||
768 | # CONFIG_ACORN_PARTITION is not set | ||
769 | # CONFIG_OSF_PARTITION is not set | ||
770 | # CONFIG_AMIGA_PARTITION is not set | ||
771 | # CONFIG_ATARI_PARTITION is not set | ||
772 | # CONFIG_MAC_PARTITION is not set | ||
773 | CONFIG_MSDOS_PARTITION=y | ||
774 | # CONFIG_BSD_DISKLABEL is not set | ||
775 | # CONFIG_MINIX_SUBPARTITION is not set | ||
776 | # CONFIG_SOLARIS_X86_PARTITION is not set | ||
777 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
778 | # CONFIG_LDM_PARTITION is not set | ||
779 | # CONFIG_SGI_PARTITION is not set | ||
780 | # CONFIG_ULTRIX_PARTITION is not set | ||
781 | # CONFIG_SUN_PARTITION is not set | ||
782 | # CONFIG_KARMA_PARTITION is not set | ||
783 | # CONFIG_EFI_PARTITION is not set | ||
784 | |||
785 | # | ||
786 | # Native Language Support | ||
787 | # | ||
788 | # CONFIG_NLS is not set | ||
789 | |||
790 | # | ||
791 | # Library routines | ||
792 | # | ||
793 | CONFIG_CRC_CCITT=y | ||
794 | # CONFIG_CRC16 is not set | ||
795 | CONFIG_CRC32=y | ||
796 | # CONFIG_LIBCRC32C is not set | ||
797 | CONFIG_ZLIB_INFLATE=y | ||
798 | CONFIG_PLIST=y | ||
799 | |||
800 | # | ||
801 | # Instrumentation Support | ||
802 | # | ||
803 | # CONFIG_PROFILING is not set | ||
804 | |||
805 | # | ||
806 | # Kernel hacking | ||
807 | # | ||
808 | # CONFIG_PRINTK_TIME is not set | ||
809 | CONFIG_ENABLE_MUST_CHECK=y | ||
810 | # CONFIG_MAGIC_SYSRQ is not set | ||
811 | # CONFIG_UNUSED_SYMBOLS is not set | ||
812 | # CONFIG_DEBUG_KERNEL is not set | ||
813 | CONFIG_LOG_BUF_SHIFT=14 | ||
814 | # CONFIG_DEBUG_FS is not set | ||
815 | # CONFIG_UNWIND_INFO is not set | ||
816 | # CONFIG_HEADERS_CHECK is not set | ||
817 | # CONFIG_BOOTX_TEXT is not set | ||
818 | # CONFIG_PPC_EARLY_DEBUG is not set | ||
819 | |||
820 | # | ||
821 | # Security options | ||
822 | # | ||
823 | # CONFIG_KEYS is not set | ||
824 | # CONFIG_SECURITY is not set | ||
825 | |||
826 | # | ||
827 | # Cryptographic options | ||
828 | # | ||
829 | # CONFIG_CRYPTO is not set | ||
diff --git a/arch/powerpc/configs/mpc885_ads_defconfig b/arch/powerpc/configs/mpc885_ads_defconfig new file mode 100644 index 000000000000..e2c17d8da4fc --- /dev/null +++ b/arch/powerpc/configs/mpc885_ads_defconfig | |||
@@ -0,0 +1,827 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.19-rc4 | ||
4 | # Fri Nov 10 21:30:40 2006 | ||
5 | # | ||
6 | # CONFIG_PPC64 is not set | ||
7 | CONFIG_PPC32=y | ||
8 | CONFIG_PPC_MERGE=y | ||
9 | CONFIG_MMU=y | ||
10 | CONFIG_GENERIC_HARDIRQS=y | ||
11 | CONFIG_IRQ_PER_CPU=y | ||
12 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | ||
13 | CONFIG_GENERIC_HWEIGHT=y | ||
14 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
15 | CONFIG_GENERIC_FIND_NEXT_BIT=y | ||
16 | CONFIG_PPC=y | ||
17 | CONFIG_EARLY_PRINTK=y | ||
18 | CONFIG_GENERIC_NVRAM=y | ||
19 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | ||
20 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y | ||
21 | CONFIG_PPC_OF=y | ||
22 | # CONFIG_PPC_UDBG_16550 is not set | ||
23 | # CONFIG_GENERIC_TBSYNC is not set | ||
24 | CONFIG_AUDIT_ARCH=y | ||
25 | # CONFIG_DEFAULT_UIMAGE is not set | ||
26 | |||
27 | # | ||
28 | # Processor support | ||
29 | # | ||
30 | # CONFIG_CLASSIC32 is not set | ||
31 | # CONFIG_PPC_52xx is not set | ||
32 | # CONFIG_PPC_82xx is not set | ||
33 | # CONFIG_PPC_83xx is not set | ||
34 | # CONFIG_PPC_85xx is not set | ||
35 | # CONFIG_PPC_86xx is not set | ||
36 | CONFIG_PPC_8xx=y | ||
37 | # CONFIG_40x is not set | ||
38 | # CONFIG_44x is not set | ||
39 | # CONFIG_E200 is not set | ||
40 | CONFIG_8xx=y | ||
41 | CONFIG_NOT_COHERENT_CACHE=y | ||
42 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
43 | |||
44 | # | ||
45 | # Code maturity level options | ||
46 | # | ||
47 | CONFIG_EXPERIMENTAL=y | ||
48 | CONFIG_BROKEN_ON_SMP=y | ||
49 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
50 | |||
51 | # | ||
52 | # General setup | ||
53 | # | ||
54 | CONFIG_LOCALVERSION="" | ||
55 | CONFIG_LOCALVERSION_AUTO=y | ||
56 | # CONFIG_SWAP is not set | ||
57 | CONFIG_SYSVIPC=y | ||
58 | # CONFIG_IPC_NS is not set | ||
59 | # CONFIG_POSIX_MQUEUE is not set | ||
60 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
61 | # CONFIG_TASKSTATS is not set | ||
62 | # CONFIG_UTS_NS is not set | ||
63 | # CONFIG_AUDIT is not set | ||
64 | # CONFIG_IKCONFIG is not set | ||
65 | # CONFIG_RELAY is not set | ||
66 | CONFIG_INITRAMFS_SOURCE="" | ||
67 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
68 | CONFIG_SYSCTL=y | ||
69 | CONFIG_EMBEDDED=y | ||
70 | # CONFIG_SYSCTL_SYSCALL is not set | ||
71 | CONFIG_KALLSYMS=y | ||
72 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
73 | # CONFIG_HOTPLUG is not set | ||
74 | CONFIG_PRINTK=y | ||
75 | # CONFIG_BUG is not set | ||
76 | CONFIG_ELF_CORE=y | ||
77 | # CONFIG_BASE_FULL is not set | ||
78 | CONFIG_FUTEX=y | ||
79 | # CONFIG_EPOLL is not set | ||
80 | CONFIG_SHMEM=y | ||
81 | CONFIG_SLAB=y | ||
82 | # CONFIG_VM_EVENT_COUNTERS is not set | ||
83 | CONFIG_RT_MUTEXES=y | ||
84 | # CONFIG_TINY_SHMEM is not set | ||
85 | CONFIG_BASE_SMALL=1 | ||
86 | # CONFIG_SLOB is not set | ||
87 | |||
88 | # | ||
89 | # Loadable module support | ||
90 | # | ||
91 | # CONFIG_MODULES is not set | ||
92 | |||
93 | # | ||
94 | # Block layer | ||
95 | # | ||
96 | CONFIG_BLOCK=y | ||
97 | # CONFIG_LBD is not set | ||
98 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
99 | # CONFIG_LSF is not set | ||
100 | |||
101 | # | ||
102 | # IO Schedulers | ||
103 | # | ||
104 | CONFIG_IOSCHED_NOOP=y | ||
105 | CONFIG_IOSCHED_AS=y | ||
106 | CONFIG_IOSCHED_DEADLINE=y | ||
107 | CONFIG_IOSCHED_CFQ=y | ||
108 | CONFIG_DEFAULT_AS=y | ||
109 | # CONFIG_DEFAULT_DEADLINE is not set | ||
110 | # CONFIG_DEFAULT_CFQ is not set | ||
111 | # CONFIG_DEFAULT_NOOP is not set | ||
112 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
113 | # CONFIG_WANT_EARLY_SERIAL is not set | ||
114 | CONFIG_EMBEDDEDBOOT=y | ||
115 | # CONFIG_MPIC is not set | ||
116 | |||
117 | # | ||
118 | # Platform support | ||
119 | # | ||
120 | CONFIG_CPM1=y | ||
121 | # CONFIG_MPC8XXFADS is not set | ||
122 | # CONFIG_MPC86XADS is not set | ||
123 | CONFIG_MPC885ADS=y | ||
124 | |||
125 | # | ||
126 | # MPC8xx CPM Options | ||
127 | # | ||
128 | |||
129 | # | ||
130 | # Generic MPC8xx Options | ||
131 | # | ||
132 | CONFIG_8xx_COPYBACK=y | ||
133 | # CONFIG_8xx_CPU6 is not set | ||
134 | CONFIG_NO_UCODE_PATCH=y | ||
135 | # CONFIG_USB_SOF_UCODE_PATCH is not set | ||
136 | # CONFIG_I2C_SPI_UCODE_PATCH is not set | ||
137 | # CONFIG_I2C_SPI_SMC1_UCODE_PATCH is not set | ||
138 | |||
139 | # | ||
140 | # Kernel options | ||
141 | # | ||
142 | # CONFIG_HIGHMEM is not set | ||
143 | # CONFIG_HZ_100 is not set | ||
144 | # CONFIG_HZ_250 is not set | ||
145 | CONFIG_HZ_1000=y | ||
146 | CONFIG_HZ=1000 | ||
147 | CONFIG_PREEMPT_NONE=y | ||
148 | # CONFIG_PREEMPT_VOLUNTARY is not set | ||
149 | # CONFIG_PREEMPT is not set | ||
150 | CONFIG_BINFMT_ELF=y | ||
151 | # CONFIG_BINFMT_MISC is not set | ||
152 | CONFIG_MATH_EMULATION=y | ||
153 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | ||
154 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
155 | CONFIG_ARCH_POPULATES_NODE_MAP=y | ||
156 | CONFIG_SELECT_MEMORY_MODEL=y | ||
157 | CONFIG_FLATMEM_MANUAL=y | ||
158 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
159 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
160 | CONFIG_FLATMEM=y | ||
161 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
162 | # CONFIG_SPARSEMEM_STATIC is not set | ||
163 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
164 | # CONFIG_RESOURCES_64BIT is not set | ||
165 | # CONFIG_PROC_DEVICETREE is not set | ||
166 | # CONFIG_CMDLINE_BOOL is not set | ||
167 | # CONFIG_PM is not set | ||
168 | # CONFIG_SECCOMP is not set | ||
169 | CONFIG_ISA_DMA_API=y | ||
170 | |||
171 | # | ||
172 | # Bus options | ||
173 | # | ||
174 | # CONFIG_MPIC_WEIRD is not set | ||
175 | # CONFIG_PPC_I8259 is not set | ||
176 | CONFIG_FSL_SOC=y | ||
177 | # CONFIG_PCI is not set | ||
178 | # CONFIG_PCI_DOMAINS is not set | ||
179 | # CONFIG_PCI_QSPAN is not set | ||
180 | |||
181 | # | ||
182 | # PCCARD (PCMCIA/CardBus) support | ||
183 | # | ||
184 | |||
185 | # | ||
186 | # PCI Hotplug Support | ||
187 | # | ||
188 | |||
189 | # | ||
190 | # Advanced setup | ||
191 | # | ||
192 | # CONFIG_ADVANCED_OPTIONS is not set | ||
193 | |||
194 | # | ||
195 | # Default settings for advanced configuration options are used | ||
196 | # | ||
197 | CONFIG_HIGHMEM_START=0xfe000000 | ||
198 | CONFIG_LOWMEM_SIZE=0x30000000 | ||
199 | CONFIG_KERNEL_START=0xc0000000 | ||
200 | CONFIG_TASK_SIZE=0x80000000 | ||
201 | CONFIG_CONSISTENT_START=0xff100000 | ||
202 | CONFIG_CONSISTENT_SIZE=0x00200000 | ||
203 | CONFIG_BOOT_LOAD=0x00400000 | ||
204 | |||
205 | # | ||
206 | # Networking | ||
207 | # | ||
208 | CONFIG_NET=y | ||
209 | |||
210 | # | ||
211 | # Networking options | ||
212 | # | ||
213 | # CONFIG_NETDEBUG is not set | ||
214 | CONFIG_PACKET=y | ||
215 | # CONFIG_PACKET_MMAP is not set | ||
216 | CONFIG_UNIX=y | ||
217 | CONFIG_XFRM=y | ||
218 | # CONFIG_XFRM_USER is not set | ||
219 | # CONFIG_XFRM_SUB_POLICY is not set | ||
220 | # CONFIG_NET_KEY is not set | ||
221 | CONFIG_INET=y | ||
222 | CONFIG_IP_MULTICAST=y | ||
223 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
224 | CONFIG_IP_FIB_HASH=y | ||
225 | CONFIG_IP_PNP=y | ||
226 | # CONFIG_IP_PNP_DHCP is not set | ||
227 | # CONFIG_IP_PNP_BOOTP is not set | ||
228 | # CONFIG_IP_PNP_RARP is not set | ||
229 | # CONFIG_NET_IPIP is not set | ||
230 | # CONFIG_NET_IPGRE is not set | ||
231 | # CONFIG_IP_MROUTE is not set | ||
232 | # CONFIG_ARPD is not set | ||
233 | CONFIG_SYN_COOKIES=y | ||
234 | # CONFIG_INET_AH is not set | ||
235 | # CONFIG_INET_ESP is not set | ||
236 | # CONFIG_INET_IPCOMP is not set | ||
237 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
238 | # CONFIG_INET_TUNNEL is not set | ||
239 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | ||
240 | CONFIG_INET_XFRM_MODE_TUNNEL=y | ||
241 | CONFIG_INET_XFRM_MODE_BEET=y | ||
242 | CONFIG_INET_DIAG=y | ||
243 | CONFIG_INET_TCP_DIAG=y | ||
244 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
245 | CONFIG_TCP_CONG_CUBIC=y | ||
246 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
247 | # CONFIG_IPV6 is not set | ||
248 | # CONFIG_INET6_XFRM_TUNNEL is not set | ||
249 | # CONFIG_INET6_TUNNEL is not set | ||
250 | # CONFIG_NETWORK_SECMARK is not set | ||
251 | # CONFIG_NETFILTER is not set | ||
252 | |||
253 | # | ||
254 | # DCCP Configuration (EXPERIMENTAL) | ||
255 | # | ||
256 | # CONFIG_IP_DCCP is not set | ||
257 | |||
258 | # | ||
259 | # SCTP Configuration (EXPERIMENTAL) | ||
260 | # | ||
261 | # CONFIG_IP_SCTP is not set | ||
262 | |||
263 | # | ||
264 | # TIPC Configuration (EXPERIMENTAL) | ||
265 | # | ||
266 | # CONFIG_TIPC is not set | ||
267 | # CONFIG_ATM is not set | ||
268 | # CONFIG_BRIDGE is not set | ||
269 | # CONFIG_VLAN_8021Q is not set | ||
270 | # CONFIG_DECNET is not set | ||
271 | # CONFIG_LLC2 is not set | ||
272 | # CONFIG_IPX is not set | ||
273 | # CONFIG_ATALK is not set | ||
274 | # CONFIG_X25 is not set | ||
275 | # CONFIG_LAPB is not set | ||
276 | # CONFIG_ECONET is not set | ||
277 | # CONFIG_WAN_ROUTER is not set | ||
278 | |||
279 | # | ||
280 | # QoS and/or fair queueing | ||
281 | # | ||
282 | # CONFIG_NET_SCHED is not set | ||
283 | |||
284 | # | ||
285 | # Network testing | ||
286 | # | ||
287 | # CONFIG_NET_PKTGEN is not set | ||
288 | # CONFIG_HAMRADIO is not set | ||
289 | # CONFIG_IRDA is not set | ||
290 | # CONFIG_BT is not set | ||
291 | # CONFIG_IEEE80211 is not set | ||
292 | |||
293 | # | ||
294 | # Device Drivers | ||
295 | # | ||
296 | |||
297 | # | ||
298 | # Generic Driver Options | ||
299 | # | ||
300 | CONFIG_STANDALONE=y | ||
301 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
302 | # CONFIG_SYS_HYPERVISOR is not set | ||
303 | |||
304 | # | ||
305 | # Connector - unified userspace <-> kernelspace linker | ||
306 | # | ||
307 | # CONFIG_CONNECTOR is not set | ||
308 | |||
309 | # | ||
310 | # Memory Technology Devices (MTD) | ||
311 | # | ||
312 | # CONFIG_MTD is not set | ||
313 | |||
314 | # | ||
315 | # Parallel port support | ||
316 | # | ||
317 | # CONFIG_PARPORT is not set | ||
318 | |||
319 | # | ||
320 | # Plug and Play support | ||
321 | # | ||
322 | |||
323 | # | ||
324 | # Block devices | ||
325 | # | ||
326 | # CONFIG_BLK_DEV_FD is not set | ||
327 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
328 | CONFIG_BLK_DEV_LOOP=y | ||
329 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | ||
330 | # CONFIG_BLK_DEV_NBD is not set | ||
331 | # CONFIG_BLK_DEV_RAM is not set | ||
332 | # CONFIG_BLK_DEV_INITRD is not set | ||
333 | # CONFIG_CDROM_PKTCDVD is not set | ||
334 | # CONFIG_ATA_OVER_ETH is not set | ||
335 | |||
336 | # | ||
337 | # Misc devices | ||
338 | # | ||
339 | # CONFIG_TIFM_CORE is not set | ||
340 | |||
341 | # | ||
342 | # ATA/ATAPI/MFM/RLL support | ||
343 | # | ||
344 | # CONFIG_IDE is not set | ||
345 | |||
346 | # | ||
347 | # SCSI device support | ||
348 | # | ||
349 | # CONFIG_RAID_ATTRS is not set | ||
350 | # CONFIG_SCSI is not set | ||
351 | # CONFIG_SCSI_NETLINK is not set | ||
352 | |||
353 | # | ||
354 | # Serial ATA (prod) and Parallel ATA (experimental) drivers | ||
355 | # | ||
356 | # CONFIG_ATA is not set | ||
357 | |||
358 | # | ||
359 | # Multi-device support (RAID and LVM) | ||
360 | # | ||
361 | # CONFIG_MD is not set | ||
362 | |||
363 | # | ||
364 | # Fusion MPT device support | ||
365 | # | ||
366 | # CONFIG_FUSION is not set | ||
367 | |||
368 | # | ||
369 | # IEEE 1394 (FireWire) support | ||
370 | # | ||
371 | |||
372 | # | ||
373 | # I2O device support | ||
374 | # | ||
375 | |||
376 | # | ||
377 | # Macintosh device drivers | ||
378 | # | ||
379 | # CONFIG_WINDFARM is not set | ||
380 | |||
381 | # | ||
382 | # Network device support | ||
383 | # | ||
384 | CONFIG_NETDEVICES=y | ||
385 | # CONFIG_DUMMY is not set | ||
386 | # CONFIG_BONDING is not set | ||
387 | # CONFIG_EQUALIZER is not set | ||
388 | # CONFIG_TUN is not set | ||
389 | |||
390 | # | ||
391 | # PHY device support | ||
392 | # | ||
393 | CONFIG_PHYLIB=y | ||
394 | |||
395 | # | ||
396 | # MII PHY device drivers | ||
397 | # | ||
398 | # CONFIG_MARVELL_PHY is not set | ||
399 | CONFIG_DAVICOM_PHY=y | ||
400 | # CONFIG_QSEMI_PHY is not set | ||
401 | # CONFIG_LXT_PHY is not set | ||
402 | # CONFIG_CICADA_PHY is not set | ||
403 | # CONFIG_VITESSE_PHY is not set | ||
404 | # CONFIG_SMSC_PHY is not set | ||
405 | CONFIG_FIXED_PHY=y | ||
406 | CONFIG_FIXED_MII_10_FDX=y | ||
407 | # CONFIG_FIXED_MII_100_FDX is not set | ||
408 | |||
409 | # | ||
410 | # Ethernet (10 or 100Mbit) | ||
411 | # | ||
412 | CONFIG_NET_ETHERNET=y | ||
413 | CONFIG_MII=y | ||
414 | # CONFIG_FEC_8XX is not set | ||
415 | CONFIG_FS_ENET=y | ||
416 | CONFIG_FS_ENET_HAS_SCC=y | ||
417 | CONFIG_FS_ENET_HAS_FEC=y | ||
418 | |||
419 | # | ||
420 | # Ethernet (1000 Mbit) | ||
421 | # | ||
422 | |||
423 | # | ||
424 | # Ethernet (10000 Mbit) | ||
425 | # | ||
426 | |||
427 | # | ||
428 | # Token Ring devices | ||
429 | # | ||
430 | |||
431 | # | ||
432 | # Wireless LAN (non-hamradio) | ||
433 | # | ||
434 | # CONFIG_NET_RADIO is not set | ||
435 | |||
436 | # | ||
437 | # Wan interfaces | ||
438 | # | ||
439 | # CONFIG_WAN is not set | ||
440 | # CONFIG_PPP is not set | ||
441 | # CONFIG_SLIP is not set | ||
442 | # CONFIG_SHAPER is not set | ||
443 | # CONFIG_NETCONSOLE is not set | ||
444 | # CONFIG_NETPOLL is not set | ||
445 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
446 | |||
447 | # | ||
448 | # ISDN subsystem | ||
449 | # | ||
450 | # CONFIG_ISDN is not set | ||
451 | |||
452 | # | ||
453 | # Telephony Support | ||
454 | # | ||
455 | # CONFIG_PHONE is not set | ||
456 | |||
457 | # | ||
458 | # Input device support | ||
459 | # | ||
460 | CONFIG_INPUT=y | ||
461 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
462 | |||
463 | # | ||
464 | # Userland interfaces | ||
465 | # | ||
466 | CONFIG_INPUT_MOUSEDEV=y | ||
467 | CONFIG_INPUT_MOUSEDEV_PSAUX=y | ||
468 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
469 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
470 | # CONFIG_INPUT_JOYDEV is not set | ||
471 | # CONFIG_INPUT_TSDEV is not set | ||
472 | # CONFIG_INPUT_EVDEV is not set | ||
473 | # CONFIG_INPUT_EVBUG is not set | ||
474 | |||
475 | # | ||
476 | # Input Device Drivers | ||
477 | # | ||
478 | CONFIG_INPUT_KEYBOARD=y | ||
479 | CONFIG_KEYBOARD_ATKBD=y | ||
480 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
481 | # CONFIG_KEYBOARD_LKKBD is not set | ||
482 | # CONFIG_KEYBOARD_XTKBD is not set | ||
483 | # CONFIG_KEYBOARD_NEWTON is not set | ||
484 | # CONFIG_KEYBOARD_STOWAWAY is not set | ||
485 | CONFIG_INPUT_MOUSE=y | ||
486 | CONFIG_MOUSE_PS2=y | ||
487 | # CONFIG_MOUSE_SERIAL is not set | ||
488 | # CONFIG_MOUSE_VSXXXAA is not set | ||
489 | # CONFIG_INPUT_JOYSTICK is not set | ||
490 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
491 | # CONFIG_INPUT_MISC is not set | ||
492 | |||
493 | # | ||
494 | # Hardware I/O ports | ||
495 | # | ||
496 | CONFIG_SERIO=y | ||
497 | CONFIG_SERIO_I8042=y | ||
498 | CONFIG_SERIO_SERPORT=y | ||
499 | CONFIG_SERIO_LIBPS2=y | ||
500 | # CONFIG_SERIO_RAW is not set | ||
501 | # CONFIG_GAMEPORT is not set | ||
502 | |||
503 | # | ||
504 | # Character devices | ||
505 | # | ||
506 | # CONFIG_VT is not set | ||
507 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
508 | |||
509 | # | ||
510 | # Serial drivers | ||
511 | # | ||
512 | # CONFIG_SERIAL_8250 is not set | ||
513 | |||
514 | # | ||
515 | # Non-8250 serial port support | ||
516 | # | ||
517 | CONFIG_SERIAL_CORE=y | ||
518 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
519 | CONFIG_SERIAL_CPM=y | ||
520 | CONFIG_SERIAL_CPM_CONSOLE=y | ||
521 | # CONFIG_SERIAL_CPM_SCC1 is not set | ||
522 | # CONFIG_SERIAL_CPM_SCC2 is not set | ||
523 | # CONFIG_SERIAL_CPM_SCC3 is not set | ||
524 | # CONFIG_SERIAL_CPM_SCC4 is not set | ||
525 | CONFIG_SERIAL_CPM_SMC1=y | ||
526 | CONFIG_SERIAL_CPM_SMC2=y | ||
527 | CONFIG_UNIX98_PTYS=y | ||
528 | # CONFIG_LEGACY_PTYS is not set | ||
529 | |||
530 | # | ||
531 | # IPMI | ||
532 | # | ||
533 | # CONFIG_IPMI_HANDLER is not set | ||
534 | |||
535 | # | ||
536 | # Watchdog Cards | ||
537 | # | ||
538 | # CONFIG_WATCHDOG is not set | ||
539 | CONFIG_HW_RANDOM=y | ||
540 | # CONFIG_NVRAM is not set | ||
541 | CONFIG_GEN_RTC=y | ||
542 | # CONFIG_GEN_RTC_X is not set | ||
543 | # CONFIG_DTLK is not set | ||
544 | # CONFIG_R3964 is not set | ||
545 | |||
546 | # | ||
547 | # Ftape, the floppy tape device driver | ||
548 | # | ||
549 | # CONFIG_RAW_DRIVER is not set | ||
550 | |||
551 | # | ||
552 | # TPM devices | ||
553 | # | ||
554 | # CONFIG_TCG_TPM is not set | ||
555 | |||
556 | # | ||
557 | # I2C support | ||
558 | # | ||
559 | # CONFIG_I2C is not set | ||
560 | |||
561 | # | ||
562 | # SPI support | ||
563 | # | ||
564 | # CONFIG_SPI is not set | ||
565 | # CONFIG_SPI_MASTER is not set | ||
566 | |||
567 | # | ||
568 | # Dallas's 1-wire bus | ||
569 | # | ||
570 | # CONFIG_W1 is not set | ||
571 | |||
572 | # | ||
573 | # Hardware Monitoring support | ||
574 | # | ||
575 | CONFIG_HWMON=y | ||
576 | # CONFIG_HWMON_VID is not set | ||
577 | # CONFIG_SENSORS_ABITUGURU is not set | ||
578 | # CONFIG_SENSORS_F71805F is not set | ||
579 | # CONFIG_SENSORS_VT1211 is not set | ||
580 | # CONFIG_HWMON_DEBUG_CHIP is not set | ||
581 | |||
582 | # | ||
583 | # Multimedia devices | ||
584 | # | ||
585 | # CONFIG_VIDEO_DEV is not set | ||
586 | |||
587 | # | ||
588 | # Digital Video Broadcasting Devices | ||
589 | # | ||
590 | # CONFIG_DVB is not set | ||
591 | |||
592 | # | ||
593 | # Graphics support | ||
594 | # | ||
595 | CONFIG_FIRMWARE_EDID=y | ||
596 | # CONFIG_FB is not set | ||
597 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
598 | |||
599 | # | ||
600 | # Sound | ||
601 | # | ||
602 | # CONFIG_SOUND is not set | ||
603 | |||
604 | # | ||
605 | # USB support | ||
606 | # | ||
607 | # CONFIG_USB_ARCH_HAS_HCD is not set | ||
608 | # CONFIG_USB_ARCH_HAS_OHCI is not set | ||
609 | # CONFIG_USB_ARCH_HAS_EHCI is not set | ||
610 | |||
611 | # | ||
612 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||
613 | # | ||
614 | |||
615 | # | ||
616 | # USB Gadget Support | ||
617 | # | ||
618 | # CONFIG_USB_GADGET is not set | ||
619 | |||
620 | # | ||
621 | # MMC/SD Card support | ||
622 | # | ||
623 | # CONFIG_MMC is not set | ||
624 | |||
625 | # | ||
626 | # LED devices | ||
627 | # | ||
628 | # CONFIG_NEW_LEDS is not set | ||
629 | |||
630 | # | ||
631 | # LED drivers | ||
632 | # | ||
633 | |||
634 | # | ||
635 | # LED Triggers | ||
636 | # | ||
637 | |||
638 | # | ||
639 | # InfiniBand support | ||
640 | # | ||
641 | |||
642 | # | ||
643 | # EDAC - error detection and reporting (RAS) (EXPERIMENTAL) | ||
644 | # | ||
645 | |||
646 | # | ||
647 | # Real Time Clock | ||
648 | # | ||
649 | # CONFIG_RTC_CLASS is not set | ||
650 | |||
651 | # | ||
652 | # DMA Engine support | ||
653 | # | ||
654 | # CONFIG_DMA_ENGINE is not set | ||
655 | |||
656 | # | ||
657 | # DMA Clients | ||
658 | # | ||
659 | |||
660 | # | ||
661 | # DMA Devices | ||
662 | # | ||
663 | |||
664 | # | ||
665 | # File systems | ||
666 | # | ||
667 | CONFIG_EXT2_FS=y | ||
668 | CONFIG_EXT2_FS_XATTR=y | ||
669 | # CONFIG_EXT2_FS_POSIX_ACL is not set | ||
670 | # CONFIG_EXT2_FS_SECURITY is not set | ||
671 | # CONFIG_EXT2_FS_XIP is not set | ||
672 | CONFIG_EXT3_FS=y | ||
673 | CONFIG_EXT3_FS_XATTR=y | ||
674 | # CONFIG_EXT3_FS_POSIX_ACL is not set | ||
675 | # CONFIG_EXT3_FS_SECURITY is not set | ||
676 | # CONFIG_EXT4DEV_FS is not set | ||
677 | CONFIG_JBD=y | ||
678 | # CONFIG_JBD_DEBUG is not set | ||
679 | CONFIG_FS_MBCACHE=y | ||
680 | # CONFIG_REISERFS_FS is not set | ||
681 | # CONFIG_JFS_FS is not set | ||
682 | # CONFIG_FS_POSIX_ACL is not set | ||
683 | # CONFIG_XFS_FS is not set | ||
684 | # CONFIG_GFS2_FS is not set | ||
685 | # CONFIG_OCFS2_FS is not set | ||
686 | # CONFIG_MINIX_FS is not set | ||
687 | # CONFIG_ROMFS_FS is not set | ||
688 | CONFIG_INOTIFY=y | ||
689 | CONFIG_INOTIFY_USER=y | ||
690 | # CONFIG_QUOTA is not set | ||
691 | CONFIG_DNOTIFY=y | ||
692 | # CONFIG_AUTOFS_FS is not set | ||
693 | # CONFIG_AUTOFS4_FS is not set | ||
694 | # CONFIG_FUSE_FS is not set | ||
695 | |||
696 | # | ||
697 | # CD-ROM/DVD Filesystems | ||
698 | # | ||
699 | # CONFIG_ISO9660_FS is not set | ||
700 | # CONFIG_UDF_FS is not set | ||
701 | |||
702 | # | ||
703 | # DOS/FAT/NT Filesystems | ||
704 | # | ||
705 | # CONFIG_MSDOS_FS is not set | ||
706 | # CONFIG_VFAT_FS is not set | ||
707 | # CONFIG_NTFS_FS is not set | ||
708 | |||
709 | # | ||
710 | # Pseudo filesystems | ||
711 | # | ||
712 | CONFIG_PROC_FS=y | ||
713 | # CONFIG_PROC_KCORE is not set | ||
714 | CONFIG_PROC_SYSCTL=y | ||
715 | CONFIG_SYSFS=y | ||
716 | CONFIG_TMPFS=y | ||
717 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
718 | # CONFIG_HUGETLB_PAGE is not set | ||
719 | CONFIG_RAMFS=y | ||
720 | # CONFIG_CONFIGFS_FS is not set | ||
721 | |||
722 | # | ||
723 | # Miscellaneous filesystems | ||
724 | # | ||
725 | # CONFIG_ADFS_FS is not set | ||
726 | # CONFIG_AFFS_FS is not set | ||
727 | # CONFIG_HFS_FS is not set | ||
728 | # CONFIG_HFSPLUS_FS is not set | ||
729 | # CONFIG_BEFS_FS is not set | ||
730 | # CONFIG_BFS_FS is not set | ||
731 | # CONFIG_EFS_FS is not set | ||
732 | CONFIG_CRAMFS=y | ||
733 | # CONFIG_VXFS_FS is not set | ||
734 | # CONFIG_HPFS_FS is not set | ||
735 | # CONFIG_QNX4FS_FS is not set | ||
736 | # CONFIG_SYSV_FS is not set | ||
737 | # CONFIG_UFS_FS is not set | ||
738 | |||
739 | # | ||
740 | # Network File Systems | ||
741 | # | ||
742 | CONFIG_NFS_FS=y | ||
743 | CONFIG_NFS_V3=y | ||
744 | # CONFIG_NFS_V3_ACL is not set | ||
745 | # CONFIG_NFS_V4 is not set | ||
746 | # CONFIG_NFS_DIRECTIO is not set | ||
747 | # CONFIG_NFSD is not set | ||
748 | CONFIG_ROOT_NFS=y | ||
749 | CONFIG_LOCKD=y | ||
750 | CONFIG_LOCKD_V4=y | ||
751 | CONFIG_NFS_COMMON=y | ||
752 | CONFIG_SUNRPC=y | ||
753 | # CONFIG_RPCSEC_GSS_KRB5 is not set | ||
754 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
755 | # CONFIG_SMB_FS is not set | ||
756 | # CONFIG_CIFS is not set | ||
757 | # CONFIG_NCP_FS is not set | ||
758 | # CONFIG_CODA_FS is not set | ||
759 | # CONFIG_AFS_FS is not set | ||
760 | # CONFIG_9P_FS is not set | ||
761 | |||
762 | # | ||
763 | # Partition Types | ||
764 | # | ||
765 | CONFIG_PARTITION_ADVANCED=y | ||
766 | # CONFIG_ACORN_PARTITION is not set | ||
767 | # CONFIG_OSF_PARTITION is not set | ||
768 | # CONFIG_AMIGA_PARTITION is not set | ||
769 | # CONFIG_ATARI_PARTITION is not set | ||
770 | # CONFIG_MAC_PARTITION is not set | ||
771 | CONFIG_MSDOS_PARTITION=y | ||
772 | # CONFIG_BSD_DISKLABEL is not set | ||
773 | # CONFIG_MINIX_SUBPARTITION is not set | ||
774 | # CONFIG_SOLARIS_X86_PARTITION is not set | ||
775 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
776 | # CONFIG_LDM_PARTITION is not set | ||
777 | # CONFIG_SGI_PARTITION is not set | ||
778 | # CONFIG_ULTRIX_PARTITION is not set | ||
779 | # CONFIG_SUN_PARTITION is not set | ||
780 | # CONFIG_KARMA_PARTITION is not set | ||
781 | # CONFIG_EFI_PARTITION is not set | ||
782 | |||
783 | # | ||
784 | # Native Language Support | ||
785 | # | ||
786 | # CONFIG_NLS is not set | ||
787 | |||
788 | # | ||
789 | # Library routines | ||
790 | # | ||
791 | CONFIG_CRC_CCITT=y | ||
792 | # CONFIG_CRC16 is not set | ||
793 | CONFIG_CRC32=y | ||
794 | # CONFIG_LIBCRC32C is not set | ||
795 | CONFIG_ZLIB_INFLATE=y | ||
796 | CONFIG_PLIST=y | ||
797 | |||
798 | # | ||
799 | # Instrumentation Support | ||
800 | # | ||
801 | # CONFIG_PROFILING is not set | ||
802 | |||
803 | # | ||
804 | # Kernel hacking | ||
805 | # | ||
806 | # CONFIG_PRINTK_TIME is not set | ||
807 | CONFIG_ENABLE_MUST_CHECK=y | ||
808 | # CONFIG_MAGIC_SYSRQ is not set | ||
809 | # CONFIG_UNUSED_SYMBOLS is not set | ||
810 | # CONFIG_DEBUG_KERNEL is not set | ||
811 | CONFIG_LOG_BUF_SHIFT=14 | ||
812 | # CONFIG_DEBUG_FS is not set | ||
813 | # CONFIG_UNWIND_INFO is not set | ||
814 | # CONFIG_HEADERS_CHECK is not set | ||
815 | # CONFIG_BOOTX_TEXT is not set | ||
816 | # CONFIG_PPC_EARLY_DEBUG is not set | ||
817 | |||
818 | # | ||
819 | # Security options | ||
820 | # | ||
821 | # CONFIG_KEYS is not set | ||
822 | # CONFIG_SECURITY is not set | ||
823 | |||
824 | # | ||
825 | # Cryptographic options | ||
826 | # | ||
827 | # CONFIG_CRYPTO is not set | ||
diff --git a/arch/powerpc/configs/pasemi_defconfig b/arch/powerpc/configs/pasemi_defconfig new file mode 100644 index 000000000000..97a57e996663 --- /dev/null +++ b/arch/powerpc/configs/pasemi_defconfig | |||
@@ -0,0 +1,1722 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.20-rc6 | ||
4 | # Thu Feb 1 22:54:15 2007 | ||
5 | # | ||
6 | CONFIG_PPC64=y | ||
7 | CONFIG_64BIT=y | ||
8 | CONFIG_PPC_MERGE=y | ||
9 | CONFIG_MMU=y | ||
10 | CONFIG_GENERIC_HARDIRQS=y | ||
11 | CONFIG_IRQ_PER_CPU=y | ||
12 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | ||
13 | CONFIG_ARCH_HAS_ILOG2_U32=y | ||
14 | CONFIG_ARCH_HAS_ILOG2_U64=y | ||
15 | CONFIG_GENERIC_HWEIGHT=y | ||
16 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
17 | CONFIG_GENERIC_FIND_NEXT_BIT=y | ||
18 | CONFIG_PPC=y | ||
19 | CONFIG_EARLY_PRINTK=y | ||
20 | CONFIG_COMPAT=y | ||
21 | CONFIG_SYSVIPC_COMPAT=y | ||
22 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | ||
23 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y | ||
24 | CONFIG_PPC_OF=y | ||
25 | CONFIG_PPC_UDBG_16550=y | ||
26 | CONFIG_GENERIC_TBSYNC=y | ||
27 | CONFIG_AUDIT_ARCH=y | ||
28 | CONFIG_GENERIC_BUG=y | ||
29 | # CONFIG_DEFAULT_UIMAGE is not set | ||
30 | |||
31 | # | ||
32 | # Processor support | ||
33 | # | ||
34 | CONFIG_POWER4_ONLY=y | ||
35 | CONFIG_POWER4=y | ||
36 | CONFIG_PPC_FPU=y | ||
37 | # CONFIG_PPC_DCR_NATIVE is not set | ||
38 | # CONFIG_PPC_DCR_MMIO is not set | ||
39 | # CONFIG_PPC_OF_PLATFORM_PCI is not set | ||
40 | CONFIG_ALTIVEC=y | ||
41 | CONFIG_PPC_STD_MMU=y | ||
42 | # CONFIG_VIRT_CPU_ACCOUNTING is not set | ||
43 | CONFIG_SMP=y | ||
44 | CONFIG_NR_CPUS=2 | ||
45 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
46 | |||
47 | # | ||
48 | # Code maturity level options | ||
49 | # | ||
50 | CONFIG_EXPERIMENTAL=y | ||
51 | CONFIG_LOCK_KERNEL=y | ||
52 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
53 | |||
54 | # | ||
55 | # General setup | ||
56 | # | ||
57 | CONFIG_LOCALVERSION="" | ||
58 | CONFIG_LOCALVERSION_AUTO=y | ||
59 | CONFIG_SWAP=y | ||
60 | CONFIG_SYSVIPC=y | ||
61 | # CONFIG_IPC_NS is not set | ||
62 | # CONFIG_POSIX_MQUEUE is not set | ||
63 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
64 | # CONFIG_TASKSTATS is not set | ||
65 | # CONFIG_UTS_NS is not set | ||
66 | # CONFIG_AUDIT is not set | ||
67 | # CONFIG_IKCONFIG is not set | ||
68 | # CONFIG_CPUSETS is not set | ||
69 | CONFIG_SYSFS_DEPRECATED=y | ||
70 | # CONFIG_RELAY is not set | ||
71 | CONFIG_INITRAMFS_SOURCE="" | ||
72 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
73 | CONFIG_SYSCTL=y | ||
74 | # CONFIG_EMBEDDED is not set | ||
75 | CONFIG_SYSCTL_SYSCALL=y | ||
76 | CONFIG_KALLSYMS=y | ||
77 | # CONFIG_KALLSYMS_ALL is not set | ||
78 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
79 | CONFIG_HOTPLUG=y | ||
80 | CONFIG_PRINTK=y | ||
81 | CONFIG_BUG=y | ||
82 | CONFIG_ELF_CORE=y | ||
83 | CONFIG_BASE_FULL=y | ||
84 | CONFIG_FUTEX=y | ||
85 | CONFIG_EPOLL=y | ||
86 | CONFIG_SHMEM=y | ||
87 | CONFIG_SLAB=y | ||
88 | CONFIG_VM_EVENT_COUNTERS=y | ||
89 | CONFIG_RT_MUTEXES=y | ||
90 | # CONFIG_TINY_SHMEM is not set | ||
91 | CONFIG_BASE_SMALL=0 | ||
92 | # CONFIG_SLOB is not set | ||
93 | |||
94 | # | ||
95 | # Loadable module support | ||
96 | # | ||
97 | CONFIG_MODULES=y | ||
98 | CONFIG_MODULE_UNLOAD=y | ||
99 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
100 | # CONFIG_MODVERSIONS is not set | ||
101 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
102 | # CONFIG_KMOD is not set | ||
103 | CONFIG_STOP_MACHINE=y | ||
104 | |||
105 | # | ||
106 | # Block layer | ||
107 | # | ||
108 | CONFIG_BLOCK=y | ||
109 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
110 | |||
111 | # | ||
112 | # IO Schedulers | ||
113 | # | ||
114 | CONFIG_IOSCHED_NOOP=y | ||
115 | CONFIG_IOSCHED_AS=y | ||
116 | # CONFIG_IOSCHED_DEADLINE is not set | ||
117 | # CONFIG_IOSCHED_CFQ is not set | ||
118 | CONFIG_DEFAULT_AS=y | ||
119 | # CONFIG_DEFAULT_DEADLINE is not set | ||
120 | # CONFIG_DEFAULT_CFQ is not set | ||
121 | # CONFIG_DEFAULT_NOOP is not set | ||
122 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
123 | |||
124 | # | ||
125 | # Platform support | ||
126 | # | ||
127 | CONFIG_PPC_MULTIPLATFORM=y | ||
128 | # CONFIG_EMBEDDED6xx is not set | ||
129 | # CONFIG_APUS is not set | ||
130 | CONFIG_PPC_PSERIES=y | ||
131 | # CONFIG_PPC_ISERIES is not set | ||
132 | # CONFIG_PPC_MPC52xx is not set | ||
133 | # CONFIG_PPC_PMAC is not set | ||
134 | # CONFIG_PPC_MAPLE is not set | ||
135 | CONFIG_PPC_PASEMI=y | ||
136 | # CONFIG_PPC_CELL is not set | ||
137 | # CONFIG_PPC_CELL_NATIVE is not set | ||
138 | # CONFIG_PPC_IBM_CELL_BLADE is not set | ||
139 | # CONFIG_PPC_PS3 is not set | ||
140 | CONFIG_PPC_NATIVE=y | ||
141 | # CONFIG_UDBG_RTAS_CONSOLE is not set | ||
142 | CONFIG_XICS=y | ||
143 | # CONFIG_U3_DART is not set | ||
144 | CONFIG_PPC_RTAS=y | ||
145 | CONFIG_RTAS_ERROR_LOGGING=y | ||
146 | CONFIG_RTAS_PROC=y | ||
147 | # CONFIG_RTAS_FLASH is not set | ||
148 | # CONFIG_MMIO_NVRAM is not set | ||
149 | CONFIG_IBMVIO=y | ||
150 | # CONFIG_IBMEBUS is not set | ||
151 | # CONFIG_PPC_MPC106 is not set | ||
152 | # CONFIG_PPC_970_NAP is not set | ||
153 | # CONFIG_PPC_INDIRECT_IO is not set | ||
154 | # CONFIG_GENERIC_IOMAP is not set | ||
155 | # CONFIG_CPU_FREQ is not set | ||
156 | # CONFIG_WANT_EARLY_SERIAL is not set | ||
157 | CONFIG_MPIC=y | ||
158 | |||
159 | # | ||
160 | # PA Semi PWRficient options | ||
161 | # | ||
162 | CONFIG_PPC_PASEMI_IOMMU=y | ||
163 | |||
164 | # | ||
165 | # Kernel options | ||
166 | # | ||
167 | CONFIG_HZ_100=y | ||
168 | # CONFIG_HZ_250 is not set | ||
169 | # CONFIG_HZ_300 is not set | ||
170 | # CONFIG_HZ_1000 is not set | ||
171 | CONFIG_HZ=100 | ||
172 | CONFIG_PREEMPT_NONE=y | ||
173 | # CONFIG_PREEMPT_VOLUNTARY is not set | ||
174 | # CONFIG_PREEMPT is not set | ||
175 | CONFIG_PREEMPT_BKL=y | ||
176 | CONFIG_BINFMT_ELF=y | ||
177 | # CONFIG_BINFMT_MISC is not set | ||
178 | CONFIG_FORCE_MAX_ZONEORDER=13 | ||
179 | CONFIG_IOMMU_VMERGE=y | ||
180 | # CONFIG_HOTPLUG_CPU is not set | ||
181 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | ||
182 | # CONFIG_KEXEC is not set | ||
183 | # CONFIG_CRASH_DUMP is not set | ||
184 | # CONFIG_IRQ_ALL_CPUS is not set | ||
185 | # CONFIG_PPC_SPLPAR is not set | ||
186 | CONFIG_EEH=y | ||
187 | # CONFIG_SCANLOG is not set | ||
188 | # CONFIG_LPARCFG is not set | ||
189 | # CONFIG_NUMA is not set | ||
190 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
191 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
192 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | ||
193 | CONFIG_ARCH_SPARSEMEM_DEFAULT=y | ||
194 | CONFIG_ARCH_POPULATES_NODE_MAP=y | ||
195 | CONFIG_SELECT_MEMORY_MODEL=y | ||
196 | CONFIG_FLATMEM_MANUAL=y | ||
197 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
198 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
199 | CONFIG_FLATMEM=y | ||
200 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
201 | # CONFIG_SPARSEMEM_STATIC is not set | ||
202 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
203 | CONFIG_RESOURCES_64BIT=y | ||
204 | # CONFIG_PPC_64K_PAGES is not set | ||
205 | # CONFIG_SCHED_SMT is not set | ||
206 | CONFIG_PROC_DEVICETREE=y | ||
207 | # CONFIG_CMDLINE_BOOL is not set | ||
208 | # CONFIG_PM is not set | ||
209 | # CONFIG_SECCOMP is not set | ||
210 | CONFIG_ISA_DMA_API=y | ||
211 | |||
212 | # | ||
213 | # Bus options | ||
214 | # | ||
215 | CONFIG_GENERIC_ISA_DMA=y | ||
216 | # CONFIG_MPIC_WEIRD is not set | ||
217 | CONFIG_PPC_I8259=y | ||
218 | # CONFIG_PPC_INDIRECT_PCI is not set | ||
219 | CONFIG_PCI=y | ||
220 | CONFIG_PCI_DOMAINS=y | ||
221 | # CONFIG_PCIEPORTBUS is not set | ||
222 | # CONFIG_PCI_DEBUG is not set | ||
223 | |||
224 | # | ||
225 | # PCCARD (PCMCIA/CardBus) support | ||
226 | # | ||
227 | CONFIG_PCCARD=y | ||
228 | CONFIG_PCMCIA_DEBUG=y | ||
229 | CONFIG_PCMCIA=y | ||
230 | CONFIG_PCMCIA_LOAD_CIS=y | ||
231 | CONFIG_PCMCIA_IOCTL=y | ||
232 | CONFIG_CARDBUS=y | ||
233 | |||
234 | # | ||
235 | # PC-card bridges | ||
236 | # | ||
237 | # CONFIG_YENTA is not set | ||
238 | # CONFIG_PD6729 is not set | ||
239 | # CONFIG_I82092 is not set | ||
240 | |||
241 | # | ||
242 | # PCI Hotplug Support | ||
243 | # | ||
244 | # CONFIG_HOTPLUG_PCI is not set | ||
245 | CONFIG_KERNEL_START=0xc000000000000000 | ||
246 | |||
247 | # | ||
248 | # Networking | ||
249 | # | ||
250 | CONFIG_NET=y | ||
251 | |||
252 | # | ||
253 | # Networking options | ||
254 | # | ||
255 | # CONFIG_NETDEBUG is not set | ||
256 | CONFIG_PACKET=y | ||
257 | # CONFIG_PACKET_MMAP is not set | ||
258 | CONFIG_UNIX=y | ||
259 | CONFIG_XFRM=y | ||
260 | # CONFIG_XFRM_USER is not set | ||
261 | # CONFIG_XFRM_SUB_POLICY is not set | ||
262 | CONFIG_NET_KEY=y | ||
263 | CONFIG_INET=y | ||
264 | CONFIG_IP_MULTICAST=y | ||
265 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
266 | CONFIG_IP_FIB_HASH=y | ||
267 | CONFIG_IP_PNP=y | ||
268 | CONFIG_IP_PNP_DHCP=y | ||
269 | CONFIG_IP_PNP_BOOTP=y | ||
270 | CONFIG_IP_PNP_RARP=y | ||
271 | CONFIG_NET_IPIP=y | ||
272 | # CONFIG_NET_IPGRE is not set | ||
273 | # CONFIG_IP_MROUTE is not set | ||
274 | # CONFIG_ARPD is not set | ||
275 | CONFIG_SYN_COOKIES=y | ||
276 | CONFIG_INET_AH=y | ||
277 | CONFIG_INET_ESP=y | ||
278 | # CONFIG_INET_IPCOMP is not set | ||
279 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
280 | CONFIG_INET_TUNNEL=y | ||
281 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | ||
282 | CONFIG_INET_XFRM_MODE_TUNNEL=y | ||
283 | CONFIG_INET_XFRM_MODE_BEET=y | ||
284 | CONFIG_INET_DIAG=y | ||
285 | CONFIG_INET_TCP_DIAG=y | ||
286 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
287 | CONFIG_TCP_CONG_CUBIC=y | ||
288 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
289 | # CONFIG_TCP_MD5SIG is not set | ||
290 | # CONFIG_IPV6 is not set | ||
291 | # CONFIG_INET6_XFRM_TUNNEL is not set | ||
292 | # CONFIG_INET6_TUNNEL is not set | ||
293 | # CONFIG_NETWORK_SECMARK is not set | ||
294 | # CONFIG_NETFILTER is not set | ||
295 | |||
296 | # | ||
297 | # DCCP Configuration (EXPERIMENTAL) | ||
298 | # | ||
299 | # CONFIG_IP_DCCP is not set | ||
300 | |||
301 | # | ||
302 | # SCTP Configuration (EXPERIMENTAL) | ||
303 | # | ||
304 | # CONFIG_IP_SCTP is not set | ||
305 | |||
306 | # | ||
307 | # TIPC Configuration (EXPERIMENTAL) | ||
308 | # | ||
309 | # CONFIG_TIPC is not set | ||
310 | # CONFIG_ATM is not set | ||
311 | # CONFIG_BRIDGE is not set | ||
312 | # CONFIG_VLAN_8021Q is not set | ||
313 | # CONFIG_DECNET is not set | ||
314 | # CONFIG_LLC2 is not set | ||
315 | # CONFIG_IPX is not set | ||
316 | # CONFIG_ATALK is not set | ||
317 | # CONFIG_X25 is not set | ||
318 | # CONFIG_LAPB is not set | ||
319 | # CONFIG_ECONET is not set | ||
320 | # CONFIG_WAN_ROUTER is not set | ||
321 | |||
322 | # | ||
323 | # QoS and/or fair queueing | ||
324 | # | ||
325 | # CONFIG_NET_SCHED is not set | ||
326 | |||
327 | # | ||
328 | # Network testing | ||
329 | # | ||
330 | # CONFIG_NET_PKTGEN is not set | ||
331 | # CONFIG_HAMRADIO is not set | ||
332 | # CONFIG_IRDA is not set | ||
333 | # CONFIG_BT is not set | ||
334 | # CONFIG_IEEE80211 is not set | ||
335 | |||
336 | # | ||
337 | # Device Drivers | ||
338 | # | ||
339 | |||
340 | # | ||
341 | # Generic Driver Options | ||
342 | # | ||
343 | CONFIG_STANDALONE=y | ||
344 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
345 | CONFIG_FW_LOADER=y | ||
346 | # CONFIG_DEBUG_DRIVER is not set | ||
347 | # CONFIG_SYS_HYPERVISOR is not set | ||
348 | |||
349 | # | ||
350 | # Connector - unified userspace <-> kernelspace linker | ||
351 | # | ||
352 | # CONFIG_CONNECTOR is not set | ||
353 | |||
354 | # | ||
355 | # Memory Technology Devices (MTD) | ||
356 | # | ||
357 | CONFIG_MTD=y | ||
358 | # CONFIG_MTD_DEBUG is not set | ||
359 | CONFIG_MTD_CONCAT=y | ||
360 | # CONFIG_MTD_PARTITIONS is not set | ||
361 | |||
362 | # | ||
363 | # User Modules And Translation Layers | ||
364 | # | ||
365 | CONFIG_MTD_CHAR=y | ||
366 | CONFIG_MTD_BLKDEVS=y | ||
367 | CONFIG_MTD_BLOCK=y | ||
368 | # CONFIG_FTL is not set | ||
369 | # CONFIG_NFTL is not set | ||
370 | # CONFIG_INFTL is not set | ||
371 | # CONFIG_RFD_FTL is not set | ||
372 | # CONFIG_SSFDC is not set | ||
373 | |||
374 | # | ||
375 | # RAM/ROM/Flash chip drivers | ||
376 | # | ||
377 | # CONFIG_MTD_CFI is not set | ||
378 | # CONFIG_MTD_JEDECPROBE is not set | ||
379 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
380 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
381 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
382 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
383 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||
384 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
385 | CONFIG_MTD_CFI_I1=y | ||
386 | CONFIG_MTD_CFI_I2=y | ||
387 | # CONFIG_MTD_CFI_I4 is not set | ||
388 | # CONFIG_MTD_CFI_I8 is not set | ||
389 | # CONFIG_MTD_RAM is not set | ||
390 | # CONFIG_MTD_ROM is not set | ||
391 | # CONFIG_MTD_ABSENT is not set | ||
392 | # CONFIG_MTD_OBSOLETE_CHIPS is not set | ||
393 | |||
394 | # | ||
395 | # Mapping drivers for chip access | ||
396 | # | ||
397 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||
398 | # CONFIG_MTD_PLATRAM is not set | ||
399 | |||
400 | # | ||
401 | # Self-contained MTD device drivers | ||
402 | # | ||
403 | # CONFIG_MTD_PMC551 is not set | ||
404 | CONFIG_MTD_SLRAM=y | ||
405 | CONFIG_MTD_PHRAM=y | ||
406 | # CONFIG_MTD_MTDRAM is not set | ||
407 | # CONFIG_MTD_BLOCK2MTD is not set | ||
408 | |||
409 | # | ||
410 | # Disk-On-Chip Device Drivers | ||
411 | # | ||
412 | # CONFIG_MTD_DOC2000 is not set | ||
413 | # CONFIG_MTD_DOC2001 is not set | ||
414 | # CONFIG_MTD_DOC2001PLUS is not set | ||
415 | |||
416 | # | ||
417 | # NAND Flash Device Drivers | ||
418 | # | ||
419 | # CONFIG_MTD_NAND is not set | ||
420 | # CONFIG_MTD_NAND_CAFE is not set | ||
421 | |||
422 | # | ||
423 | # OneNAND Flash Device Drivers | ||
424 | # | ||
425 | # CONFIG_MTD_ONENAND is not set | ||
426 | |||
427 | # | ||
428 | # Parallel port support | ||
429 | # | ||
430 | # CONFIG_PARPORT is not set | ||
431 | |||
432 | # | ||
433 | # Plug and Play support | ||
434 | # | ||
435 | |||
436 | # | ||
437 | # Block devices | ||
438 | # | ||
439 | # CONFIG_BLK_DEV_FD is not set | ||
440 | # CONFIG_BLK_CPQ_DA is not set | ||
441 | # CONFIG_BLK_CPQ_CISS_DA is not set | ||
442 | # CONFIG_BLK_DEV_DAC960 is not set | ||
443 | # CONFIG_BLK_DEV_UMEM is not set | ||
444 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
445 | CONFIG_BLK_DEV_LOOP=y | ||
446 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | ||
447 | # CONFIG_BLK_DEV_NBD is not set | ||
448 | # CONFIG_BLK_DEV_SX8 is not set | ||
449 | # CONFIG_BLK_DEV_UB is not set | ||
450 | CONFIG_BLK_DEV_RAM=y | ||
451 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
452 | CONFIG_BLK_DEV_RAM_SIZE=16384 | ||
453 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | ||
454 | CONFIG_BLK_DEV_INITRD=y | ||
455 | # CONFIG_CDROM_PKTCDVD is not set | ||
456 | # CONFIG_ATA_OVER_ETH is not set | ||
457 | |||
458 | # | ||
459 | # Misc devices | ||
460 | # | ||
461 | # CONFIG_SGI_IOC4 is not set | ||
462 | # CONFIG_TIFM_CORE is not set | ||
463 | |||
464 | # | ||
465 | # ATA/ATAPI/MFM/RLL support | ||
466 | # | ||
467 | CONFIG_IDE=y | ||
468 | CONFIG_BLK_DEV_IDE=y | ||
469 | |||
470 | # | ||
471 | # Please see Documentation/ide.txt for help/info on IDE drives | ||
472 | # | ||
473 | # CONFIG_BLK_DEV_IDE_SATA is not set | ||
474 | CONFIG_BLK_DEV_IDEDISK=y | ||
475 | CONFIG_IDEDISK_MULTI_MODE=y | ||
476 | # CONFIG_BLK_DEV_IDECS is not set | ||
477 | CONFIG_BLK_DEV_IDECD=y | ||
478 | # CONFIG_BLK_DEV_IDETAPE is not set | ||
479 | # CONFIG_BLK_DEV_IDEFLOPPY is not set | ||
480 | CONFIG_BLK_DEV_IDESCSI=y | ||
481 | CONFIG_IDE_TASK_IOCTL=y | ||
482 | |||
483 | # | ||
484 | # IDE chipset support/bugfixes | ||
485 | # | ||
486 | # CONFIG_IDE_GENERIC is not set | ||
487 | # CONFIG_BLK_DEV_IDEPCI is not set | ||
488 | # CONFIG_IDE_ARM is not set | ||
489 | # CONFIG_BLK_DEV_IDEDMA is not set | ||
490 | # CONFIG_IDEDMA_AUTO is not set | ||
491 | # CONFIG_BLK_DEV_HD is not set | ||
492 | |||
493 | # | ||
494 | # SCSI device support | ||
495 | # | ||
496 | # CONFIG_RAID_ATTRS is not set | ||
497 | CONFIG_SCSI=y | ||
498 | # CONFIG_SCSI_TGT is not set | ||
499 | # CONFIG_SCSI_NETLINK is not set | ||
500 | CONFIG_SCSI_PROC_FS=y | ||
501 | |||
502 | # | ||
503 | # SCSI support type (disk, tape, CD-ROM) | ||
504 | # | ||
505 | CONFIG_BLK_DEV_SD=y | ||
506 | CONFIG_CHR_DEV_ST=y | ||
507 | CONFIG_CHR_DEV_OSST=y | ||
508 | CONFIG_BLK_DEV_SR=y | ||
509 | CONFIG_BLK_DEV_SR_VENDOR=y | ||
510 | CONFIG_CHR_DEV_SG=y | ||
511 | CONFIG_CHR_DEV_SCH=y | ||
512 | |||
513 | # | ||
514 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | ||
515 | # | ||
516 | CONFIG_SCSI_MULTI_LUN=y | ||
517 | CONFIG_SCSI_CONSTANTS=y | ||
518 | CONFIG_SCSI_LOGGING=y | ||
519 | # CONFIG_SCSI_SCAN_ASYNC is not set | ||
520 | |||
521 | # | ||
522 | # SCSI Transports | ||
523 | # | ||
524 | # CONFIG_SCSI_SPI_ATTRS is not set | ||
525 | # CONFIG_SCSI_FC_ATTRS is not set | ||
526 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
527 | # CONFIG_SCSI_SAS_ATTRS is not set | ||
528 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
529 | |||
530 | # | ||
531 | # SCSI low-level drivers | ||
532 | # | ||
533 | # CONFIG_ISCSI_TCP is not set | ||
534 | CONFIG_BLK_DEV_3W_XXXX_RAID=y | ||
535 | CONFIG_SCSI_3W_9XXX=y | ||
536 | # CONFIG_SCSI_ACARD is not set | ||
537 | # CONFIG_SCSI_AACRAID is not set | ||
538 | # CONFIG_SCSI_AIC7XXX is not set | ||
539 | # CONFIG_SCSI_AIC7XXX_OLD is not set | ||
540 | # CONFIG_SCSI_AIC79XX is not set | ||
541 | # CONFIG_SCSI_AIC94XX is not set | ||
542 | # CONFIG_SCSI_ARCMSR is not set | ||
543 | # CONFIG_MEGARAID_NEWGEN is not set | ||
544 | # CONFIG_MEGARAID_LEGACY is not set | ||
545 | # CONFIG_MEGARAID_SAS is not set | ||
546 | # CONFIG_SCSI_HPTIOP is not set | ||
547 | # CONFIG_SCSI_BUSLOGIC is not set | ||
548 | # CONFIG_SCSI_DMX3191D is not set | ||
549 | # CONFIG_SCSI_EATA is not set | ||
550 | # CONFIG_SCSI_FUTURE_DOMAIN is not set | ||
551 | # CONFIG_SCSI_GDTH is not set | ||
552 | # CONFIG_SCSI_IPS is not set | ||
553 | # CONFIG_SCSI_IBMVSCSI is not set | ||
554 | # CONFIG_SCSI_INITIO is not set | ||
555 | # CONFIG_SCSI_INIA100 is not set | ||
556 | # CONFIG_SCSI_STEX is not set | ||
557 | # CONFIG_SCSI_SYM53C8XX_2 is not set | ||
558 | # CONFIG_SCSI_IPR is not set | ||
559 | # CONFIG_SCSI_QLOGIC_1280 is not set | ||
560 | # CONFIG_SCSI_QLA_FC is not set | ||
561 | # CONFIG_SCSI_QLA_ISCSI is not set | ||
562 | # CONFIG_SCSI_LPFC is not set | ||
563 | # CONFIG_SCSI_DC395x is not set | ||
564 | # CONFIG_SCSI_DC390T is not set | ||
565 | # CONFIG_SCSI_DEBUG is not set | ||
566 | # CONFIG_SCSI_SRP is not set | ||
567 | |||
568 | # | ||
569 | # PCMCIA SCSI adapter support | ||
570 | # | ||
571 | # CONFIG_PCMCIA_FDOMAIN is not set | ||
572 | # CONFIG_PCMCIA_QLOGIC is not set | ||
573 | # CONFIG_PCMCIA_SYM53C500 is not set | ||
574 | |||
575 | # | ||
576 | # Serial ATA (prod) and Parallel ATA (experimental) drivers | ||
577 | # | ||
578 | CONFIG_ATA=y | ||
579 | # CONFIG_ATA_NONSTANDARD is not set | ||
580 | # CONFIG_SATA_AHCI is not set | ||
581 | CONFIG_SATA_SVW=y | ||
582 | # CONFIG_ATA_PIIX is not set | ||
583 | CONFIG_SATA_MV=y | ||
584 | # CONFIG_SATA_NV is not set | ||
585 | # CONFIG_PDC_ADMA is not set | ||
586 | # CONFIG_SATA_QSTOR is not set | ||
587 | # CONFIG_SATA_PROMISE is not set | ||
588 | # CONFIG_SATA_SX4 is not set | ||
589 | CONFIG_SATA_SIL=y | ||
590 | CONFIG_SATA_SIL24=y | ||
591 | # CONFIG_SATA_SIS is not set | ||
592 | # CONFIG_SATA_ULI is not set | ||
593 | # CONFIG_SATA_VIA is not set | ||
594 | # CONFIG_SATA_VITESSE is not set | ||
595 | # CONFIG_PATA_ALI is not set | ||
596 | # CONFIG_PATA_AMD is not set | ||
597 | # CONFIG_PATA_ARTOP is not set | ||
598 | # CONFIG_PATA_ATIIXP is not set | ||
599 | # CONFIG_PATA_CMD64X is not set | ||
600 | # CONFIG_PATA_CS5520 is not set | ||
601 | # CONFIG_PATA_CS5530 is not set | ||
602 | # CONFIG_PATA_CYPRESS is not set | ||
603 | # CONFIG_PATA_EFAR is not set | ||
604 | CONFIG_ATA_GENERIC=y | ||
605 | # CONFIG_PATA_HPT366 is not set | ||
606 | # CONFIG_PATA_HPT37X is not set | ||
607 | # CONFIG_PATA_HPT3X2N is not set | ||
608 | # CONFIG_PATA_HPT3X3 is not set | ||
609 | # CONFIG_PATA_IT821X is not set | ||
610 | # CONFIG_PATA_JMICRON is not set | ||
611 | # CONFIG_PATA_TRIFLEX is not set | ||
612 | # CONFIG_PATA_MARVELL is not set | ||
613 | # CONFIG_PATA_MPIIX is not set | ||
614 | # CONFIG_PATA_OLDPIIX is not set | ||
615 | # CONFIG_PATA_NETCELL is not set | ||
616 | # CONFIG_PATA_NS87410 is not set | ||
617 | # CONFIG_PATA_OPTI is not set | ||
618 | # CONFIG_PATA_OPTIDMA is not set | ||
619 | # CONFIG_PATA_PCMCIA is not set | ||
620 | # CONFIG_PATA_PDC_OLD is not set | ||
621 | # CONFIG_PATA_RADISYS is not set | ||
622 | # CONFIG_PATA_RZ1000 is not set | ||
623 | # CONFIG_PATA_SC1200 is not set | ||
624 | # CONFIG_PATA_SERVERWORKS is not set | ||
625 | # CONFIG_PATA_PDC2027X is not set | ||
626 | # CONFIG_PATA_SIL680 is not set | ||
627 | # CONFIG_PATA_SIS is not set | ||
628 | # CONFIG_PATA_VIA is not set | ||
629 | # CONFIG_PATA_WINBOND is not set | ||
630 | |||
631 | # | ||
632 | # Multi-device support (RAID and LVM) | ||
633 | # | ||
634 | # CONFIG_MD is not set | ||
635 | |||
636 | # | ||
637 | # Fusion MPT device support | ||
638 | # | ||
639 | # CONFIG_FUSION is not set | ||
640 | # CONFIG_FUSION_SPI is not set | ||
641 | # CONFIG_FUSION_FC is not set | ||
642 | # CONFIG_FUSION_SAS is not set | ||
643 | |||
644 | # | ||
645 | # IEEE 1394 (FireWire) support | ||
646 | # | ||
647 | CONFIG_IEEE1394=y | ||
648 | |||
649 | # | ||
650 | # Subsystem Options | ||
651 | # | ||
652 | # CONFIG_IEEE1394_VERBOSEDEBUG is not set | ||
653 | # CONFIG_IEEE1394_OUI_DB is not set | ||
654 | # CONFIG_IEEE1394_EXTRA_CONFIG_ROMS is not set | ||
655 | # CONFIG_IEEE1394_EXPORT_FULL_API is not set | ||
656 | |||
657 | # | ||
658 | # Device Drivers | ||
659 | # | ||
660 | CONFIG_IEEE1394_PCILYNX=y | ||
661 | CONFIG_IEEE1394_OHCI1394=y | ||
662 | |||
663 | # | ||
664 | # Protocol Drivers | ||
665 | # | ||
666 | # CONFIG_IEEE1394_VIDEO1394 is not set | ||
667 | CONFIG_IEEE1394_SBP2=y | ||
668 | # CONFIG_IEEE1394_ETH1394 is not set | ||
669 | # CONFIG_IEEE1394_DV1394 is not set | ||
670 | CONFIG_IEEE1394_RAWIO=y | ||
671 | |||
672 | # | ||
673 | # I2O device support | ||
674 | # | ||
675 | # CONFIG_I2O is not set | ||
676 | |||
677 | # | ||
678 | # Macintosh device drivers | ||
679 | # | ||
680 | # CONFIG_MAC_EMUMOUSEBTN is not set | ||
681 | # CONFIG_WINDFARM is not set | ||
682 | |||
683 | # | ||
684 | # Network device support | ||
685 | # | ||
686 | CONFIG_NETDEVICES=y | ||
687 | CONFIG_DUMMY=y | ||
688 | # CONFIG_BONDING is not set | ||
689 | # CONFIG_EQUALIZER is not set | ||
690 | # CONFIG_TUN is not set | ||
691 | |||
692 | # | ||
693 | # ARCnet devices | ||
694 | # | ||
695 | # CONFIG_ARCNET is not set | ||
696 | |||
697 | # | ||
698 | # PHY device support | ||
699 | # | ||
700 | # CONFIG_PHYLIB is not set | ||
701 | |||
702 | # | ||
703 | # Ethernet (10 or 100Mbit) | ||
704 | # | ||
705 | CONFIG_NET_ETHERNET=y | ||
706 | CONFIG_MII=y | ||
707 | # CONFIG_HAPPYMEAL is not set | ||
708 | # CONFIG_SUNGEM is not set | ||
709 | # CONFIG_CASSINI is not set | ||
710 | # CONFIG_NET_VENDOR_3COM is not set | ||
711 | |||
712 | # | ||
713 | # Tulip family network device support | ||
714 | # | ||
715 | # CONFIG_NET_TULIP is not set | ||
716 | # CONFIG_HP100 is not set | ||
717 | CONFIG_IBMVETH=y | ||
718 | CONFIG_NET_PCI=y | ||
719 | # CONFIG_PCNET32 is not set | ||
720 | # CONFIG_AMD8111_ETH is not set | ||
721 | # CONFIG_ADAPTEC_STARFIRE is not set | ||
722 | # CONFIG_B44 is not set | ||
723 | # CONFIG_FORCEDETH is not set | ||
724 | # CONFIG_DGRS is not set | ||
725 | CONFIG_EEPRO100=y | ||
726 | # CONFIG_E100 is not set | ||
727 | # CONFIG_FEALNX is not set | ||
728 | # CONFIG_NATSEMI is not set | ||
729 | # CONFIG_NE2K_PCI is not set | ||
730 | # CONFIG_8139CP is not set | ||
731 | # CONFIG_8139TOO is not set | ||
732 | # CONFIG_SIS900 is not set | ||
733 | # CONFIG_EPIC100 is not set | ||
734 | # CONFIG_SUNDANCE is not set | ||
735 | # CONFIG_VIA_RHINE is not set | ||
736 | |||
737 | # | ||
738 | # Ethernet (1000 Mbit) | ||
739 | # | ||
740 | # CONFIG_ACENIC is not set | ||
741 | # CONFIG_DL2K is not set | ||
742 | CONFIG_E1000=y | ||
743 | CONFIG_E1000_NAPI=y | ||
744 | # CONFIG_E1000_DISABLE_PACKET_SPLIT is not set | ||
745 | # CONFIG_NS83820 is not set | ||
746 | # CONFIG_HAMACHI is not set | ||
747 | # CONFIG_YELLOWFIN is not set | ||
748 | # CONFIG_R8169 is not set | ||
749 | # CONFIG_SIS190 is not set | ||
750 | # CONFIG_SKGE is not set | ||
751 | # CONFIG_SKY2 is not set | ||
752 | # CONFIG_SK98LIN is not set | ||
753 | # CONFIG_VIA_VELOCITY is not set | ||
754 | CONFIG_TIGON3=y | ||
755 | # CONFIG_BNX2 is not set | ||
756 | # CONFIG_QLA3XXX is not set | ||
757 | |||
758 | # | ||
759 | # Ethernet (10000 Mbit) | ||
760 | # | ||
761 | # CONFIG_CHELSIO_T1 is not set | ||
762 | # CONFIG_IXGB is not set | ||
763 | # CONFIG_S2IO is not set | ||
764 | # CONFIG_MYRI10GE is not set | ||
765 | # CONFIG_NETXEN_NIC is not set | ||
766 | |||
767 | # | ||
768 | # Token Ring devices | ||
769 | # | ||
770 | # CONFIG_TR is not set | ||
771 | |||
772 | # | ||
773 | # Wireless LAN (non-hamradio) | ||
774 | # | ||
775 | # CONFIG_NET_RADIO is not set | ||
776 | |||
777 | # | ||
778 | # PCMCIA network device support | ||
779 | # | ||
780 | # CONFIG_NET_PCMCIA is not set | ||
781 | |||
782 | # | ||
783 | # Wan interfaces | ||
784 | # | ||
785 | # CONFIG_WAN is not set | ||
786 | # CONFIG_FDDI is not set | ||
787 | # CONFIG_HIPPI is not set | ||
788 | # CONFIG_PPP is not set | ||
789 | # CONFIG_SLIP is not set | ||
790 | # CONFIG_NET_FC is not set | ||
791 | # CONFIG_SHAPER is not set | ||
792 | # CONFIG_NETCONSOLE is not set | ||
793 | # CONFIG_NETPOLL is not set | ||
794 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
795 | |||
796 | # | ||
797 | # ISDN subsystem | ||
798 | # | ||
799 | # CONFIG_ISDN is not set | ||
800 | |||
801 | # | ||
802 | # Telephony Support | ||
803 | # | ||
804 | # CONFIG_PHONE is not set | ||
805 | |||
806 | # | ||
807 | # Input device support | ||
808 | # | ||
809 | CONFIG_INPUT=y | ||
810 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
811 | |||
812 | # | ||
813 | # Userland interfaces | ||
814 | # | ||
815 | CONFIG_INPUT_MOUSEDEV=y | ||
816 | CONFIG_INPUT_MOUSEDEV_PSAUX=y | ||
817 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
818 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
819 | CONFIG_INPUT_JOYDEV=y | ||
820 | # CONFIG_INPUT_TSDEV is not set | ||
821 | CONFIG_INPUT_EVDEV=y | ||
822 | # CONFIG_INPUT_EVBUG is not set | ||
823 | |||
824 | # | ||
825 | # Input Device Drivers | ||
826 | # | ||
827 | CONFIG_INPUT_KEYBOARD=y | ||
828 | # CONFIG_KEYBOARD_ATKBD is not set | ||
829 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
830 | # CONFIG_KEYBOARD_LKKBD is not set | ||
831 | # CONFIG_KEYBOARD_XTKBD is not set | ||
832 | # CONFIG_KEYBOARD_NEWTON is not set | ||
833 | # CONFIG_KEYBOARD_STOWAWAY is not set | ||
834 | CONFIG_INPUT_MOUSE=y | ||
835 | # CONFIG_MOUSE_PS2 is not set | ||
836 | # CONFIG_MOUSE_SERIAL is not set | ||
837 | # CONFIG_MOUSE_VSXXXAA is not set | ||
838 | # CONFIG_INPUT_JOYSTICK is not set | ||
839 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
840 | # CONFIG_INPUT_MISC is not set | ||
841 | |||
842 | # | ||
843 | # Hardware I/O ports | ||
844 | # | ||
845 | # CONFIG_SERIO is not set | ||
846 | # CONFIG_GAMEPORT is not set | ||
847 | |||
848 | # | ||
849 | # Character devices | ||
850 | # | ||
851 | CONFIG_VT=y | ||
852 | CONFIG_VT_CONSOLE=y | ||
853 | CONFIG_HW_CONSOLE=y | ||
854 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||
855 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
856 | |||
857 | # | ||
858 | # Serial drivers | ||
859 | # | ||
860 | CONFIG_SERIAL_8250=y | ||
861 | CONFIG_SERIAL_8250_CONSOLE=y | ||
862 | CONFIG_SERIAL_8250_PCI=y | ||
863 | # CONFIG_SERIAL_8250_CS is not set | ||
864 | CONFIG_SERIAL_8250_NR_UARTS=4 | ||
865 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
866 | # CONFIG_SERIAL_8250_EXTENDED is not set | ||
867 | |||
868 | # | ||
869 | # Non-8250 serial port support | ||
870 | # | ||
871 | CONFIG_SERIAL_CORE=y | ||
872 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
873 | # CONFIG_SERIAL_ICOM is not set | ||
874 | # CONFIG_SERIAL_JSM is not set | ||
875 | CONFIG_UNIX98_PTYS=y | ||
876 | CONFIG_LEGACY_PTYS=y | ||
877 | CONFIG_LEGACY_PTY_COUNT=4 | ||
878 | CONFIG_HVC_DRIVER=y | ||
879 | CONFIG_HVC_CONSOLE=y | ||
880 | CONFIG_HVC_RTAS=y | ||
881 | # CONFIG_HVCS is not set | ||
882 | |||
883 | # | ||
884 | # IPMI | ||
885 | # | ||
886 | # CONFIG_IPMI_HANDLER is not set | ||
887 | |||
888 | # | ||
889 | # Watchdog Cards | ||
890 | # | ||
891 | # CONFIG_WATCHDOG is not set | ||
892 | CONFIG_HW_RANDOM=y | ||
893 | CONFIG_GEN_RTC=y | ||
894 | CONFIG_GEN_RTC_X=y | ||
895 | # CONFIG_DTLK is not set | ||
896 | # CONFIG_R3964 is not set | ||
897 | # CONFIG_APPLICOM is not set | ||
898 | # CONFIG_AGP is not set | ||
899 | # CONFIG_DRM is not set | ||
900 | |||
901 | # | ||
902 | # PCMCIA character devices | ||
903 | # | ||
904 | # CONFIG_SYNCLINK_CS is not set | ||
905 | # CONFIG_CARDMAN_4000 is not set | ||
906 | # CONFIG_CARDMAN_4040 is not set | ||
907 | CONFIG_RAW_DRIVER=y | ||
908 | CONFIG_MAX_RAW_DEVS=256 | ||
909 | # CONFIG_HANGCHECK_TIMER is not set | ||
910 | |||
911 | # | ||
912 | # TPM devices | ||
913 | # | ||
914 | # CONFIG_TCG_TPM is not set | ||
915 | |||
916 | # | ||
917 | # I2C support | ||
918 | # | ||
919 | CONFIG_I2C=y | ||
920 | CONFIG_I2C_CHARDEV=y | ||
921 | |||
922 | # | ||
923 | # I2C Algorithms | ||
924 | # | ||
925 | CONFIG_I2C_ALGOBIT=y | ||
926 | CONFIG_I2C_ALGOPCF=y | ||
927 | CONFIG_I2C_ALGOPCA=y | ||
928 | |||
929 | # | ||
930 | # I2C Hardware Bus support | ||
931 | # | ||
932 | # CONFIG_I2C_ALI1535 is not set | ||
933 | # CONFIG_I2C_ALI1563 is not set | ||
934 | # CONFIG_I2C_ALI15X3 is not set | ||
935 | # CONFIG_I2C_AMD756 is not set | ||
936 | # CONFIG_I2C_AMD8111 is not set | ||
937 | # CONFIG_I2C_I801 is not set | ||
938 | # CONFIG_I2C_I810 is not set | ||
939 | # CONFIG_I2C_PIIX4 is not set | ||
940 | # CONFIG_I2C_NFORCE2 is not set | ||
941 | # CONFIG_I2C_OCORES is not set | ||
942 | # CONFIG_I2C_PARPORT_LIGHT is not set | ||
943 | # CONFIG_I2C_PROSAVAGE is not set | ||
944 | # CONFIG_I2C_SAVAGE4 is not set | ||
945 | # CONFIG_I2C_SIS5595 is not set | ||
946 | # CONFIG_I2C_SIS630 is not set | ||
947 | # CONFIG_I2C_SIS96X is not set | ||
948 | # CONFIG_I2C_STUB is not set | ||
949 | # CONFIG_I2C_VIA is not set | ||
950 | # CONFIG_I2C_VIAPRO is not set | ||
951 | # CONFIG_I2C_VOODOO3 is not set | ||
952 | # CONFIG_I2C_PCA_ISA is not set | ||
953 | |||
954 | # | ||
955 | # Miscellaneous I2C Chip support | ||
956 | # | ||
957 | # CONFIG_SENSORS_DS1337 is not set | ||
958 | # CONFIG_SENSORS_DS1374 is not set | ||
959 | CONFIG_SENSORS_EEPROM=y | ||
960 | # CONFIG_SENSORS_PCF8574 is not set | ||
961 | # CONFIG_SENSORS_PCA9539 is not set | ||
962 | # CONFIG_SENSORS_PCF8591 is not set | ||
963 | # CONFIG_SENSORS_MAX6875 is not set | ||
964 | # CONFIG_I2C_DEBUG_CORE is not set | ||
965 | # CONFIG_I2C_DEBUG_ALGO is not set | ||
966 | CONFIG_I2C_DEBUG_BUS=y | ||
967 | # CONFIG_I2C_DEBUG_CHIP is not set | ||
968 | |||
969 | # | ||
970 | # SPI support | ||
971 | # | ||
972 | # CONFIG_SPI is not set | ||
973 | # CONFIG_SPI_MASTER is not set | ||
974 | |||
975 | # | ||
976 | # Dallas's 1-wire bus | ||
977 | # | ||
978 | # CONFIG_W1 is not set | ||
979 | |||
980 | # | ||
981 | # Hardware Monitoring support | ||
982 | # | ||
983 | CONFIG_HWMON=y | ||
984 | CONFIG_HWMON_VID=y | ||
985 | # CONFIG_SENSORS_ABITUGURU is not set | ||
986 | # CONFIG_SENSORS_ADM1021 is not set | ||
987 | # CONFIG_SENSORS_ADM1025 is not set | ||
988 | # CONFIG_SENSORS_ADM1026 is not set | ||
989 | # CONFIG_SENSORS_ADM1031 is not set | ||
990 | # CONFIG_SENSORS_ADM9240 is not set | ||
991 | # CONFIG_SENSORS_ASB100 is not set | ||
992 | # CONFIG_SENSORS_ATXP1 is not set | ||
993 | # CONFIG_SENSORS_DS1621 is not set | ||
994 | # CONFIG_SENSORS_F71805F is not set | ||
995 | # CONFIG_SENSORS_FSCHER is not set | ||
996 | # CONFIG_SENSORS_FSCPOS is not set | ||
997 | # CONFIG_SENSORS_GL518SM is not set | ||
998 | # CONFIG_SENSORS_GL520SM is not set | ||
999 | # CONFIG_SENSORS_IT87 is not set | ||
1000 | # CONFIG_SENSORS_LM63 is not set | ||
1001 | # CONFIG_SENSORS_LM75 is not set | ||
1002 | # CONFIG_SENSORS_LM77 is not set | ||
1003 | # CONFIG_SENSORS_LM78 is not set | ||
1004 | # CONFIG_SENSORS_LM80 is not set | ||
1005 | # CONFIG_SENSORS_LM83 is not set | ||
1006 | CONFIG_SENSORS_LM85=y | ||
1007 | # CONFIG_SENSORS_LM87 is not set | ||
1008 | CONFIG_SENSORS_LM90=y | ||
1009 | # CONFIG_SENSORS_LM92 is not set | ||
1010 | # CONFIG_SENSORS_MAX1619 is not set | ||
1011 | # CONFIG_SENSORS_PC87360 is not set | ||
1012 | # CONFIG_SENSORS_PC87427 is not set | ||
1013 | # CONFIG_SENSORS_SIS5595 is not set | ||
1014 | # CONFIG_SENSORS_SMSC47M1 is not set | ||
1015 | # CONFIG_SENSORS_SMSC47M192 is not set | ||
1016 | # CONFIG_SENSORS_SMSC47B397 is not set | ||
1017 | # CONFIG_SENSORS_VIA686A is not set | ||
1018 | # CONFIG_SENSORS_VT1211 is not set | ||
1019 | # CONFIG_SENSORS_VT8231 is not set | ||
1020 | # CONFIG_SENSORS_W83781D is not set | ||
1021 | # CONFIG_SENSORS_W83791D is not set | ||
1022 | # CONFIG_SENSORS_W83792D is not set | ||
1023 | # CONFIG_SENSORS_W83793 is not set | ||
1024 | # CONFIG_SENSORS_W83L785TS is not set | ||
1025 | # CONFIG_SENSORS_W83627HF is not set | ||
1026 | # CONFIG_SENSORS_W83627EHF is not set | ||
1027 | # CONFIG_HWMON_DEBUG_CHIP is not set | ||
1028 | |||
1029 | # | ||
1030 | # Multimedia devices | ||
1031 | # | ||
1032 | # CONFIG_VIDEO_DEV is not set | ||
1033 | |||
1034 | # | ||
1035 | # Digital Video Broadcasting Devices | ||
1036 | # | ||
1037 | # CONFIG_DVB is not set | ||
1038 | # CONFIG_USB_DABUSB is not set | ||
1039 | |||
1040 | # | ||
1041 | # Graphics support | ||
1042 | # | ||
1043 | CONFIG_FIRMWARE_EDID=y | ||
1044 | CONFIG_FB=y | ||
1045 | CONFIG_FB_DDC=y | ||
1046 | CONFIG_FB_CFB_FILLRECT=y | ||
1047 | CONFIG_FB_CFB_COPYAREA=y | ||
1048 | CONFIG_FB_CFB_IMAGEBLIT=y | ||
1049 | CONFIG_FB_MACMODES=y | ||
1050 | # CONFIG_FB_BACKLIGHT is not set | ||
1051 | CONFIG_FB_MODE_HELPERS=y | ||
1052 | CONFIG_FB_TILEBLITTING=y | ||
1053 | # CONFIG_FB_CIRRUS is not set | ||
1054 | # CONFIG_FB_PM2 is not set | ||
1055 | # CONFIG_FB_CYBER2000 is not set | ||
1056 | # CONFIG_FB_OF is not set | ||
1057 | # CONFIG_FB_ASILIANT is not set | ||
1058 | # CONFIG_FB_IMSTT is not set | ||
1059 | CONFIG_FB_VGA16=y | ||
1060 | # CONFIG_FB_S1D13XXX is not set | ||
1061 | CONFIG_FB_NVIDIA=y | ||
1062 | CONFIG_FB_NVIDIA_I2C=y | ||
1063 | CONFIG_FB_RIVA=y | ||
1064 | CONFIG_FB_RIVA_I2C=y | ||
1065 | # CONFIG_FB_RIVA_DEBUG is not set | ||
1066 | CONFIG_FB_MATROX=y | ||
1067 | CONFIG_FB_MATROX_MILLENIUM=y | ||
1068 | CONFIG_FB_MATROX_MYSTIQUE=y | ||
1069 | CONFIG_FB_MATROX_G=y | ||
1070 | CONFIG_FB_MATROX_I2C=y | ||
1071 | CONFIG_FB_MATROX_MAVEN=y | ||
1072 | CONFIG_FB_MATROX_MULTIHEAD=y | ||
1073 | CONFIG_FB_RADEON=y | ||
1074 | CONFIG_FB_RADEON_I2C=y | ||
1075 | # CONFIG_FB_RADEON_DEBUG is not set | ||
1076 | # CONFIG_FB_ATY128 is not set | ||
1077 | # CONFIG_FB_ATY is not set | ||
1078 | # CONFIG_FB_SAVAGE is not set | ||
1079 | # CONFIG_FB_SIS is not set | ||
1080 | # CONFIG_FB_NEOMAGIC is not set | ||
1081 | # CONFIG_FB_KYRO is not set | ||
1082 | # CONFIG_FB_3DFX is not set | ||
1083 | # CONFIG_FB_VOODOO1 is not set | ||
1084 | # CONFIG_FB_TRIDENT is not set | ||
1085 | # CONFIG_FB_IBM_GXT4500 is not set | ||
1086 | # CONFIG_FB_VIRTUAL is not set | ||
1087 | |||
1088 | # | ||
1089 | # Console display driver support | ||
1090 | # | ||
1091 | CONFIG_VGA_CONSOLE=y | ||
1092 | CONFIG_VGACON_SOFT_SCROLLBACK=y | ||
1093 | CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64 | ||
1094 | CONFIG_DUMMY_CONSOLE=y | ||
1095 | CONFIG_FRAMEBUFFER_CONSOLE=y | ||
1096 | # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set | ||
1097 | # CONFIG_FONTS is not set | ||
1098 | CONFIG_FONT_8x8=y | ||
1099 | CONFIG_FONT_8x16=y | ||
1100 | |||
1101 | # | ||
1102 | # Logo configuration | ||
1103 | # | ||
1104 | CONFIG_LOGO=y | ||
1105 | CONFIG_LOGO_LINUX_MONO=y | ||
1106 | CONFIG_LOGO_LINUX_VGA16=y | ||
1107 | CONFIG_LOGO_LINUX_CLUT224=y | ||
1108 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
1109 | |||
1110 | # | ||
1111 | # Sound | ||
1112 | # | ||
1113 | CONFIG_SOUND=y | ||
1114 | |||
1115 | # | ||
1116 | # Advanced Linux Sound Architecture | ||
1117 | # | ||
1118 | CONFIG_SND=y | ||
1119 | CONFIG_SND_TIMER=y | ||
1120 | CONFIG_SND_PCM=y | ||
1121 | CONFIG_SND_HWDEP=y | ||
1122 | CONFIG_SND_RAWMIDI=y | ||
1123 | CONFIG_SND_SEQUENCER=y | ||
1124 | # CONFIG_SND_SEQ_DUMMY is not set | ||
1125 | CONFIG_SND_OSSEMUL=y | ||
1126 | CONFIG_SND_MIXER_OSS=y | ||
1127 | CONFIG_SND_PCM_OSS=y | ||
1128 | CONFIG_SND_PCM_OSS_PLUGINS=y | ||
1129 | CONFIG_SND_SEQUENCER_OSS=y | ||
1130 | # CONFIG_SND_DYNAMIC_MINORS is not set | ||
1131 | CONFIG_SND_SUPPORT_OLD_API=y | ||
1132 | CONFIG_SND_VERBOSE_PROCFS=y | ||
1133 | # CONFIG_SND_VERBOSE_PRINTK is not set | ||
1134 | # CONFIG_SND_DEBUG is not set | ||
1135 | |||
1136 | # | ||
1137 | # Generic devices | ||
1138 | # | ||
1139 | # CONFIG_SND_DUMMY is not set | ||
1140 | # CONFIG_SND_VIRMIDI is not set | ||
1141 | # CONFIG_SND_MTPAV is not set | ||
1142 | # CONFIG_SND_SERIAL_U16550 is not set | ||
1143 | # CONFIG_SND_MPU401 is not set | ||
1144 | |||
1145 | # | ||
1146 | # PCI devices | ||
1147 | # | ||
1148 | # CONFIG_SND_AD1889 is not set | ||
1149 | # CONFIG_SND_ALS300 is not set | ||
1150 | # CONFIG_SND_ALS4000 is not set | ||
1151 | # CONFIG_SND_ALI5451 is not set | ||
1152 | # CONFIG_SND_ATIIXP is not set | ||
1153 | # CONFIG_SND_ATIIXP_MODEM is not set | ||
1154 | # CONFIG_SND_AU8810 is not set | ||
1155 | # CONFIG_SND_AU8820 is not set | ||
1156 | # CONFIG_SND_AU8830 is not set | ||
1157 | # CONFIG_SND_AZT3328 is not set | ||
1158 | # CONFIG_SND_BT87X is not set | ||
1159 | # CONFIG_SND_CA0106 is not set | ||
1160 | # CONFIG_SND_CMIPCI is not set | ||
1161 | # CONFIG_SND_CS4281 is not set | ||
1162 | # CONFIG_SND_CS46XX is not set | ||
1163 | # CONFIG_SND_DARLA20 is not set | ||
1164 | # CONFIG_SND_GINA20 is not set | ||
1165 | # CONFIG_SND_LAYLA20 is not set | ||
1166 | # CONFIG_SND_DARLA24 is not set | ||
1167 | # CONFIG_SND_GINA24 is not set | ||
1168 | # CONFIG_SND_LAYLA24 is not set | ||
1169 | # CONFIG_SND_MONA is not set | ||
1170 | # CONFIG_SND_MIA is not set | ||
1171 | # CONFIG_SND_ECHO3G is not set | ||
1172 | # CONFIG_SND_INDIGO is not set | ||
1173 | # CONFIG_SND_INDIGOIO is not set | ||
1174 | # CONFIG_SND_INDIGODJ is not set | ||
1175 | # CONFIG_SND_EMU10K1 is not set | ||
1176 | # CONFIG_SND_EMU10K1X is not set | ||
1177 | # CONFIG_SND_ENS1370 is not set | ||
1178 | # CONFIG_SND_ENS1371 is not set | ||
1179 | # CONFIG_SND_ES1938 is not set | ||
1180 | # CONFIG_SND_ES1968 is not set | ||
1181 | # CONFIG_SND_FM801 is not set | ||
1182 | # CONFIG_SND_HDA_INTEL is not set | ||
1183 | # CONFIG_SND_HDSP is not set | ||
1184 | # CONFIG_SND_HDSPM is not set | ||
1185 | # CONFIG_SND_ICE1712 is not set | ||
1186 | # CONFIG_SND_ICE1724 is not set | ||
1187 | # CONFIG_SND_INTEL8X0 is not set | ||
1188 | # CONFIG_SND_INTEL8X0M is not set | ||
1189 | # CONFIG_SND_KORG1212 is not set | ||
1190 | # CONFIG_SND_MAESTRO3 is not set | ||
1191 | # CONFIG_SND_MIXART is not set | ||
1192 | # CONFIG_SND_NM256 is not set | ||
1193 | # CONFIG_SND_PCXHR is not set | ||
1194 | # CONFIG_SND_RIPTIDE is not set | ||
1195 | # CONFIG_SND_RME32 is not set | ||
1196 | # CONFIG_SND_RME96 is not set | ||
1197 | # CONFIG_SND_RME9652 is not set | ||
1198 | # CONFIG_SND_SONICVIBES is not set | ||
1199 | # CONFIG_SND_TRIDENT is not set | ||
1200 | # CONFIG_SND_VIA82XX is not set | ||
1201 | # CONFIG_SND_VIA82XX_MODEM is not set | ||
1202 | # CONFIG_SND_VX222 is not set | ||
1203 | # CONFIG_SND_YMFPCI is not set | ||
1204 | |||
1205 | # | ||
1206 | # ALSA PowerMac devices | ||
1207 | # | ||
1208 | |||
1209 | # | ||
1210 | # USB devices | ||
1211 | # | ||
1212 | CONFIG_SND_USB_AUDIO=y | ||
1213 | CONFIG_SND_USB_USX2Y=y | ||
1214 | |||
1215 | # | ||
1216 | # PCMCIA devices | ||
1217 | # | ||
1218 | # CONFIG_SND_VXPOCKET is not set | ||
1219 | # CONFIG_SND_PDAUDIOCF is not set | ||
1220 | |||
1221 | # | ||
1222 | # Open Sound System | ||
1223 | # | ||
1224 | # CONFIG_SOUND_PRIME is not set | ||
1225 | |||
1226 | # | ||
1227 | # HID Devices | ||
1228 | # | ||
1229 | CONFIG_HID=y | ||
1230 | |||
1231 | # | ||
1232 | # USB support | ||
1233 | # | ||
1234 | CONFIG_USB_ARCH_HAS_HCD=y | ||
1235 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
1236 | CONFIG_USB_ARCH_HAS_EHCI=y | ||
1237 | CONFIG_USB=y | ||
1238 | # CONFIG_USB_DEBUG is not set | ||
1239 | |||
1240 | # | ||
1241 | # Miscellaneous USB options | ||
1242 | # | ||
1243 | CONFIG_USB_DEVICEFS=y | ||
1244 | # CONFIG_USB_BANDWIDTH is not set | ||
1245 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
1246 | # CONFIG_USB_OTG is not set | ||
1247 | |||
1248 | # | ||
1249 | # USB Host Controller Drivers | ||
1250 | # | ||
1251 | CONFIG_USB_EHCI_HCD=y | ||
1252 | # CONFIG_USB_EHCI_SPLIT_ISO is not set | ||
1253 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set | ||
1254 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set | ||
1255 | # CONFIG_USB_ISP116X_HCD is not set | ||
1256 | CONFIG_USB_OHCI_HCD=y | ||
1257 | # CONFIG_USB_OHCI_BIG_ENDIAN is not set | ||
1258 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y | ||
1259 | CONFIG_USB_UHCI_HCD=y | ||
1260 | CONFIG_USB_SL811_HCD=y | ||
1261 | # CONFIG_USB_SL811_CS is not set | ||
1262 | |||
1263 | # | ||
1264 | # USB Device Class drivers | ||
1265 | # | ||
1266 | # CONFIG_USB_ACM is not set | ||
1267 | # CONFIG_USB_PRINTER is not set | ||
1268 | |||
1269 | # | ||
1270 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||
1271 | # | ||
1272 | |||
1273 | # | ||
1274 | # may also be needed; see USB_STORAGE Help for more information | ||
1275 | # | ||
1276 | CONFIG_USB_STORAGE=y | ||
1277 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
1278 | # CONFIG_USB_STORAGE_DATAFAB is not set | ||
1279 | # CONFIG_USB_STORAGE_FREECOM is not set | ||
1280 | # CONFIG_USB_STORAGE_ISD200 is not set | ||
1281 | # CONFIG_USB_STORAGE_DPCM is not set | ||
1282 | # CONFIG_USB_STORAGE_USBAT is not set | ||
1283 | # CONFIG_USB_STORAGE_SDDR09 is not set | ||
1284 | # CONFIG_USB_STORAGE_SDDR55 is not set | ||
1285 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | ||
1286 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
1287 | # CONFIG_USB_STORAGE_ONETOUCH is not set | ||
1288 | # CONFIG_USB_STORAGE_KARMA is not set | ||
1289 | CONFIG_USB_LIBUSUAL=y | ||
1290 | |||
1291 | # | ||
1292 | # USB Input Devices | ||
1293 | # | ||
1294 | CONFIG_USB_HID=y | ||
1295 | # CONFIG_USB_HIDINPUT_POWERBOOK is not set | ||
1296 | # CONFIG_HID_FF is not set | ||
1297 | # CONFIG_USB_HIDDEV is not set | ||
1298 | # CONFIG_USB_AIPTEK is not set | ||
1299 | # CONFIG_USB_WACOM is not set | ||
1300 | # CONFIG_USB_ACECAD is not set | ||
1301 | # CONFIG_USB_KBTAB is not set | ||
1302 | # CONFIG_USB_POWERMATE is not set | ||
1303 | # CONFIG_USB_TOUCHSCREEN is not set | ||
1304 | # CONFIG_USB_YEALINK is not set | ||
1305 | # CONFIG_USB_XPAD is not set | ||
1306 | # CONFIG_USB_ATI_REMOTE is not set | ||
1307 | # CONFIG_USB_ATI_REMOTE2 is not set | ||
1308 | # CONFIG_USB_KEYSPAN_REMOTE is not set | ||
1309 | # CONFIG_USB_APPLETOUCH is not set | ||
1310 | |||
1311 | # | ||
1312 | # USB Imaging devices | ||
1313 | # | ||
1314 | # CONFIG_USB_MDC800 is not set | ||
1315 | # CONFIG_USB_MICROTEK is not set | ||
1316 | |||
1317 | # | ||
1318 | # USB Network Adapters | ||
1319 | # | ||
1320 | # CONFIG_USB_CATC is not set | ||
1321 | # CONFIG_USB_KAWETH is not set | ||
1322 | # CONFIG_USB_PEGASUS is not set | ||
1323 | # CONFIG_USB_RTL8150 is not set | ||
1324 | # CONFIG_USB_USBNET_MII is not set | ||
1325 | # CONFIG_USB_USBNET is not set | ||
1326 | CONFIG_USB_MON=y | ||
1327 | |||
1328 | # | ||
1329 | # USB port drivers | ||
1330 | # | ||
1331 | |||
1332 | # | ||
1333 | # USB Serial Converter support | ||
1334 | # | ||
1335 | # CONFIG_USB_SERIAL is not set | ||
1336 | |||
1337 | # | ||
1338 | # USB Miscellaneous drivers | ||
1339 | # | ||
1340 | # CONFIG_USB_EMI62 is not set | ||
1341 | # CONFIG_USB_EMI26 is not set | ||
1342 | # CONFIG_USB_ADUTUX is not set | ||
1343 | # CONFIG_USB_AUERSWALD is not set | ||
1344 | # CONFIG_USB_RIO500 is not set | ||
1345 | # CONFIG_USB_LEGOTOWER is not set | ||
1346 | # CONFIG_USB_LCD is not set | ||
1347 | # CONFIG_USB_LED is not set | ||
1348 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
1349 | # CONFIG_USB_CYTHERM is not set | ||
1350 | # CONFIG_USB_PHIDGET is not set | ||
1351 | # CONFIG_USB_IDMOUSE is not set | ||
1352 | # CONFIG_USB_FTDI_ELAN is not set | ||
1353 | # CONFIG_USB_APPLEDISPLAY is not set | ||
1354 | # CONFIG_USB_SISUSBVGA is not set | ||
1355 | # CONFIG_USB_LD is not set | ||
1356 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
1357 | # CONFIG_USB_TEST is not set | ||
1358 | |||
1359 | # | ||
1360 | # USB DSL modem support | ||
1361 | # | ||
1362 | |||
1363 | # | ||
1364 | # USB Gadget Support | ||
1365 | # | ||
1366 | # CONFIG_USB_GADGET is not set | ||
1367 | |||
1368 | # | ||
1369 | # MMC/SD Card support | ||
1370 | # | ||
1371 | # CONFIG_MMC is not set | ||
1372 | |||
1373 | # | ||
1374 | # LED devices | ||
1375 | # | ||
1376 | # CONFIG_NEW_LEDS is not set | ||
1377 | |||
1378 | # | ||
1379 | # LED drivers | ||
1380 | # | ||
1381 | |||
1382 | # | ||
1383 | # LED Triggers | ||
1384 | # | ||
1385 | |||
1386 | # | ||
1387 | # InfiniBand support | ||
1388 | # | ||
1389 | # CONFIG_INFINIBAND is not set | ||
1390 | |||
1391 | # | ||
1392 | # EDAC - error detection and reporting (RAS) (EXPERIMENTAL) | ||
1393 | # | ||
1394 | |||
1395 | # | ||
1396 | # Real Time Clock | ||
1397 | # | ||
1398 | CONFIG_RTC_LIB=y | ||
1399 | CONFIG_RTC_CLASS=y | ||
1400 | CONFIG_RTC_HCTOSYS=y | ||
1401 | CONFIG_RTC_HCTOSYS_DEVICE="rtc0" | ||
1402 | # CONFIG_RTC_DEBUG is not set | ||
1403 | |||
1404 | # | ||
1405 | # RTC interfaces | ||
1406 | # | ||
1407 | CONFIG_RTC_INTF_SYSFS=y | ||
1408 | CONFIG_RTC_INTF_PROC=y | ||
1409 | CONFIG_RTC_INTF_DEV=y | ||
1410 | # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set | ||
1411 | |||
1412 | # | ||
1413 | # RTC drivers | ||
1414 | # | ||
1415 | # CONFIG_RTC_DRV_X1205 is not set | ||
1416 | CONFIG_RTC_DRV_DS1307=y | ||
1417 | # CONFIG_RTC_DRV_DS1553 is not set | ||
1418 | # CONFIG_RTC_DRV_ISL1208 is not set | ||
1419 | # CONFIG_RTC_DRV_DS1672 is not set | ||
1420 | # CONFIG_RTC_DRV_DS1742 is not set | ||
1421 | # CONFIG_RTC_DRV_PCF8563 is not set | ||
1422 | # CONFIG_RTC_DRV_PCF8583 is not set | ||
1423 | # CONFIG_RTC_DRV_RS5C372 is not set | ||
1424 | # CONFIG_RTC_DRV_M48T86 is not set | ||
1425 | # CONFIG_RTC_DRV_TEST is not set | ||
1426 | # CONFIG_RTC_DRV_V3020 is not set | ||
1427 | |||
1428 | # | ||
1429 | # DMA Engine support | ||
1430 | # | ||
1431 | # CONFIG_DMA_ENGINE is not set | ||
1432 | |||
1433 | # | ||
1434 | # DMA Clients | ||
1435 | # | ||
1436 | |||
1437 | # | ||
1438 | # DMA Devices | ||
1439 | # | ||
1440 | |||
1441 | # | ||
1442 | # Virtualization | ||
1443 | # | ||
1444 | |||
1445 | # | ||
1446 | # File systems | ||
1447 | # | ||
1448 | CONFIG_EXT2_FS=y | ||
1449 | CONFIG_EXT2_FS_XATTR=y | ||
1450 | CONFIG_EXT2_FS_POSIX_ACL=y | ||
1451 | # CONFIG_EXT2_FS_SECURITY is not set | ||
1452 | # CONFIG_EXT2_FS_XIP is not set | ||
1453 | CONFIG_EXT3_FS=y | ||
1454 | CONFIG_EXT3_FS_XATTR=y | ||
1455 | # CONFIG_EXT3_FS_POSIX_ACL is not set | ||
1456 | # CONFIG_EXT3_FS_SECURITY is not set | ||
1457 | # CONFIG_EXT4DEV_FS is not set | ||
1458 | CONFIG_JBD=y | ||
1459 | # CONFIG_JBD_DEBUG is not set | ||
1460 | CONFIG_FS_MBCACHE=y | ||
1461 | # CONFIG_REISERFS_FS is not set | ||
1462 | # CONFIG_JFS_FS is not set | ||
1463 | CONFIG_FS_POSIX_ACL=y | ||
1464 | # CONFIG_XFS_FS is not set | ||
1465 | # CONFIG_GFS2_FS is not set | ||
1466 | # CONFIG_OCFS2_FS is not set | ||
1467 | # CONFIG_MINIX_FS is not set | ||
1468 | # CONFIG_ROMFS_FS is not set | ||
1469 | # CONFIG_INOTIFY is not set | ||
1470 | # CONFIG_QUOTA is not set | ||
1471 | CONFIG_DNOTIFY=y | ||
1472 | CONFIG_AUTOFS_FS=y | ||
1473 | CONFIG_AUTOFS4_FS=y | ||
1474 | # CONFIG_FUSE_FS is not set | ||
1475 | |||
1476 | # | ||
1477 | # CD-ROM/DVD Filesystems | ||
1478 | # | ||
1479 | CONFIG_ISO9660_FS=y | ||
1480 | # CONFIG_JOLIET is not set | ||
1481 | # CONFIG_ZISOFS is not set | ||
1482 | CONFIG_UDF_FS=y | ||
1483 | CONFIG_UDF_NLS=y | ||
1484 | |||
1485 | # | ||
1486 | # DOS/FAT/NT Filesystems | ||
1487 | # | ||
1488 | CONFIG_FAT_FS=y | ||
1489 | CONFIG_MSDOS_FS=y | ||
1490 | CONFIG_VFAT_FS=y | ||
1491 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | ||
1492 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | ||
1493 | # CONFIG_NTFS_FS is not set | ||
1494 | |||
1495 | # | ||
1496 | # Pseudo filesystems | ||
1497 | # | ||
1498 | CONFIG_PROC_FS=y | ||
1499 | CONFIG_PROC_KCORE=y | ||
1500 | CONFIG_PROC_SYSCTL=y | ||
1501 | CONFIG_SYSFS=y | ||
1502 | CONFIG_TMPFS=y | ||
1503 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
1504 | CONFIG_HUGETLBFS=y | ||
1505 | CONFIG_HUGETLB_PAGE=y | ||
1506 | CONFIG_RAMFS=y | ||
1507 | CONFIG_CONFIGFS_FS=y | ||
1508 | |||
1509 | # | ||
1510 | # Miscellaneous filesystems | ||
1511 | # | ||
1512 | # CONFIG_ADFS_FS is not set | ||
1513 | # CONFIG_AFFS_FS is not set | ||
1514 | # CONFIG_HFS_FS is not set | ||
1515 | # CONFIG_HFSPLUS_FS is not set | ||
1516 | # CONFIG_BEFS_FS is not set | ||
1517 | # CONFIG_BFS_FS is not set | ||
1518 | # CONFIG_EFS_FS is not set | ||
1519 | # CONFIG_JFFS2_FS is not set | ||
1520 | # CONFIG_CRAMFS is not set | ||
1521 | # CONFIG_VXFS_FS is not set | ||
1522 | # CONFIG_HPFS_FS is not set | ||
1523 | # CONFIG_QNX4FS_FS is not set | ||
1524 | # CONFIG_SYSV_FS is not set | ||
1525 | # CONFIG_UFS_FS is not set | ||
1526 | |||
1527 | # | ||
1528 | # Network File Systems | ||
1529 | # | ||
1530 | CONFIG_NFS_FS=y | ||
1531 | CONFIG_NFS_V3=y | ||
1532 | # CONFIG_NFS_V3_ACL is not set | ||
1533 | # CONFIG_NFS_V4 is not set | ||
1534 | # CONFIG_NFS_DIRECTIO is not set | ||
1535 | # CONFIG_NFSD is not set | ||
1536 | CONFIG_ROOT_NFS=y | ||
1537 | CONFIG_LOCKD=y | ||
1538 | CONFIG_LOCKD_V4=y | ||
1539 | CONFIG_NFS_COMMON=y | ||
1540 | CONFIG_SUNRPC=y | ||
1541 | # CONFIG_RPCSEC_GSS_KRB5 is not set | ||
1542 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
1543 | # CONFIG_SMB_FS is not set | ||
1544 | # CONFIG_CIFS is not set | ||
1545 | # CONFIG_NCP_FS is not set | ||
1546 | # CONFIG_CODA_FS is not set | ||
1547 | # CONFIG_AFS_FS is not set | ||
1548 | # CONFIG_9P_FS is not set | ||
1549 | |||
1550 | # | ||
1551 | # Partition Types | ||
1552 | # | ||
1553 | CONFIG_PARTITION_ADVANCED=y | ||
1554 | # CONFIG_ACORN_PARTITION is not set | ||
1555 | # CONFIG_OSF_PARTITION is not set | ||
1556 | # CONFIG_AMIGA_PARTITION is not set | ||
1557 | # CONFIG_ATARI_PARTITION is not set | ||
1558 | CONFIG_MAC_PARTITION=y | ||
1559 | CONFIG_MSDOS_PARTITION=y | ||
1560 | # CONFIG_BSD_DISKLABEL is not set | ||
1561 | # CONFIG_MINIX_SUBPARTITION is not set | ||
1562 | # CONFIG_SOLARIS_X86_PARTITION is not set | ||
1563 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
1564 | # CONFIG_LDM_PARTITION is not set | ||
1565 | # CONFIG_SGI_PARTITION is not set | ||
1566 | # CONFIG_ULTRIX_PARTITION is not set | ||
1567 | # CONFIG_SUN_PARTITION is not set | ||
1568 | # CONFIG_KARMA_PARTITION is not set | ||
1569 | # CONFIG_EFI_PARTITION is not set | ||
1570 | |||
1571 | # | ||
1572 | # Native Language Support | ||
1573 | # | ||
1574 | CONFIG_NLS=y | ||
1575 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
1576 | CONFIG_NLS_CODEPAGE_437=y | ||
1577 | # CONFIG_NLS_CODEPAGE_737 is not set | ||
1578 | # CONFIG_NLS_CODEPAGE_775 is not set | ||
1579 | # CONFIG_NLS_CODEPAGE_850 is not set | ||
1580 | # CONFIG_NLS_CODEPAGE_852 is not set | ||
1581 | # CONFIG_NLS_CODEPAGE_855 is not set | ||
1582 | # CONFIG_NLS_CODEPAGE_857 is not set | ||
1583 | # CONFIG_NLS_CODEPAGE_860 is not set | ||
1584 | # CONFIG_NLS_CODEPAGE_861 is not set | ||
1585 | # CONFIG_NLS_CODEPAGE_862 is not set | ||
1586 | # CONFIG_NLS_CODEPAGE_863 is not set | ||
1587 | # CONFIG_NLS_CODEPAGE_864 is not set | ||
1588 | # CONFIG_NLS_CODEPAGE_865 is not set | ||
1589 | # CONFIG_NLS_CODEPAGE_866 is not set | ||
1590 | # CONFIG_NLS_CODEPAGE_869 is not set | ||
1591 | # CONFIG_NLS_CODEPAGE_936 is not set | ||
1592 | # CONFIG_NLS_CODEPAGE_950 is not set | ||
1593 | # CONFIG_NLS_CODEPAGE_932 is not set | ||
1594 | # CONFIG_NLS_CODEPAGE_949 is not set | ||
1595 | # CONFIG_NLS_CODEPAGE_874 is not set | ||
1596 | # CONFIG_NLS_ISO8859_8 is not set | ||
1597 | # CONFIG_NLS_CODEPAGE_1250 is not set | ||
1598 | # CONFIG_NLS_CODEPAGE_1251 is not set | ||
1599 | # CONFIG_NLS_ASCII is not set | ||
1600 | CONFIG_NLS_ISO8859_1=y | ||
1601 | # CONFIG_NLS_ISO8859_2 is not set | ||
1602 | # CONFIG_NLS_ISO8859_3 is not set | ||
1603 | # CONFIG_NLS_ISO8859_4 is not set | ||
1604 | # CONFIG_NLS_ISO8859_5 is not set | ||
1605 | # CONFIG_NLS_ISO8859_6 is not set | ||
1606 | # CONFIG_NLS_ISO8859_7 is not set | ||
1607 | # CONFIG_NLS_ISO8859_9 is not set | ||
1608 | # CONFIG_NLS_ISO8859_13 is not set | ||
1609 | # CONFIG_NLS_ISO8859_14 is not set | ||
1610 | # CONFIG_NLS_ISO8859_15 is not set | ||
1611 | # CONFIG_NLS_KOI8_R is not set | ||
1612 | # CONFIG_NLS_KOI8_U is not set | ||
1613 | # CONFIG_NLS_UTF8 is not set | ||
1614 | |||
1615 | # | ||
1616 | # Distributed Lock Manager | ||
1617 | # | ||
1618 | # CONFIG_DLM is not set | ||
1619 | |||
1620 | # | ||
1621 | # Library routines | ||
1622 | # | ||
1623 | CONFIG_BITREVERSE=y | ||
1624 | CONFIG_CRC_CCITT=y | ||
1625 | # CONFIG_CRC16 is not set | ||
1626 | CONFIG_CRC32=y | ||
1627 | # CONFIG_LIBCRC32C is not set | ||
1628 | CONFIG_PLIST=y | ||
1629 | CONFIG_IOMAP_COPY=y | ||
1630 | |||
1631 | # | ||
1632 | # Instrumentation Support | ||
1633 | # | ||
1634 | CONFIG_PROFILING=y | ||
1635 | CONFIG_OPROFILE=y | ||
1636 | # CONFIG_KPROBES is not set | ||
1637 | |||
1638 | # | ||
1639 | # Kernel hacking | ||
1640 | # | ||
1641 | # CONFIG_PRINTK_TIME is not set | ||
1642 | CONFIG_ENABLE_MUST_CHECK=y | ||
1643 | CONFIG_MAGIC_SYSRQ=y | ||
1644 | # CONFIG_UNUSED_SYMBOLS is not set | ||
1645 | # CONFIG_DEBUG_FS is not set | ||
1646 | # CONFIG_HEADERS_CHECK is not set | ||
1647 | CONFIG_DEBUG_KERNEL=y | ||
1648 | CONFIG_LOG_BUF_SHIFT=17 | ||
1649 | CONFIG_DETECT_SOFTLOCKUP=y | ||
1650 | # CONFIG_SCHEDSTATS is not set | ||
1651 | # CONFIG_DEBUG_SLAB is not set | ||
1652 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
1653 | # CONFIG_RT_MUTEX_TESTER is not set | ||
1654 | # CONFIG_DEBUG_SPINLOCK is not set | ||
1655 | # CONFIG_DEBUG_MUTEXES is not set | ||
1656 | # CONFIG_DEBUG_RWSEMS is not set | ||
1657 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||
1658 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
1659 | # CONFIG_DEBUG_KOBJECT is not set | ||
1660 | CONFIG_DEBUG_BUGVERBOSE=y | ||
1661 | CONFIG_DEBUG_INFO=y | ||
1662 | # CONFIG_DEBUG_VM is not set | ||
1663 | # CONFIG_DEBUG_LIST is not set | ||
1664 | CONFIG_FORCED_INLINING=y | ||
1665 | # CONFIG_RCU_TORTURE_TEST is not set | ||
1666 | # CONFIG_DEBUG_STACKOVERFLOW is not set | ||
1667 | # CONFIG_DEBUG_STACK_USAGE is not set | ||
1668 | CONFIG_DEBUGGER=y | ||
1669 | CONFIG_XMON=y | ||
1670 | CONFIG_XMON_DEFAULT=y | ||
1671 | CONFIG_XMON_DISASSEMBLY=y | ||
1672 | # CONFIG_IRQSTACKS is not set | ||
1673 | CONFIG_BOOTX_TEXT=y | ||
1674 | # CONFIG_PPC_EARLY_DEBUG is not set | ||
1675 | |||
1676 | # | ||
1677 | # Security options | ||
1678 | # | ||
1679 | # CONFIG_KEYS is not set | ||
1680 | # CONFIG_SECURITY is not set | ||
1681 | |||
1682 | # | ||
1683 | # Cryptographic options | ||
1684 | # | ||
1685 | CONFIG_CRYPTO=y | ||
1686 | CONFIG_CRYPTO_ALGAPI=y | ||
1687 | CONFIG_CRYPTO_BLKCIPHER=y | ||
1688 | CONFIG_CRYPTO_HASH=y | ||
1689 | CONFIG_CRYPTO_MANAGER=y | ||
1690 | CONFIG_CRYPTO_HMAC=y | ||
1691 | # CONFIG_CRYPTO_XCBC is not set | ||
1692 | # CONFIG_CRYPTO_NULL is not set | ||
1693 | # CONFIG_CRYPTO_MD4 is not set | ||
1694 | CONFIG_CRYPTO_MD5=y | ||
1695 | CONFIG_CRYPTO_SHA1=y | ||
1696 | # CONFIG_CRYPTO_SHA256 is not set | ||
1697 | # CONFIG_CRYPTO_SHA512 is not set | ||
1698 | # CONFIG_CRYPTO_WP512 is not set | ||
1699 | # CONFIG_CRYPTO_TGR192 is not set | ||
1700 | # CONFIG_CRYPTO_GF128MUL is not set | ||
1701 | CONFIG_CRYPTO_ECB=m | ||
1702 | CONFIG_CRYPTO_CBC=y | ||
1703 | # CONFIG_CRYPTO_LRW is not set | ||
1704 | CONFIG_CRYPTO_DES=y | ||
1705 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
1706 | # CONFIG_CRYPTO_TWOFISH is not set | ||
1707 | # CONFIG_CRYPTO_SERPENT is not set | ||
1708 | # CONFIG_CRYPTO_AES is not set | ||
1709 | # CONFIG_CRYPTO_CAST5 is not set | ||
1710 | # CONFIG_CRYPTO_CAST6 is not set | ||
1711 | # CONFIG_CRYPTO_TEA is not set | ||
1712 | # CONFIG_CRYPTO_ARC4 is not set | ||
1713 | # CONFIG_CRYPTO_KHAZAD is not set | ||
1714 | # CONFIG_CRYPTO_ANUBIS is not set | ||
1715 | # CONFIG_CRYPTO_DEFLATE is not set | ||
1716 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
1717 | # CONFIG_CRYPTO_CRC32C is not set | ||
1718 | # CONFIG_CRYPTO_TEST is not set | ||
1719 | |||
1720 | # | ||
1721 | # Hardware crypto devices | ||
1722 | # | ||
diff --git a/arch/powerpc/configs/ps3_defconfig b/arch/powerpc/configs/ps3_defconfig index 32560876c3dc..ec644b34a082 100644 --- a/arch/powerpc/configs/ps3_defconfig +++ b/arch/powerpc/configs/ps3_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.20-rc5 | 3 | # Linux kernel version: 2.6.20-rc6 |
4 | # Mon Jan 22 22:29:11 2007 | 4 | # Thu Jan 25 13:35:34 2007 |
5 | # | 5 | # |
6 | CONFIG_PPC64=y | 6 | CONFIG_PPC64=y |
7 | CONFIG_64BIT=y | 7 | CONFIG_64BIT=y |
@@ -70,10 +70,10 @@ CONFIG_SYSVIPC=y | |||
70 | CONFIG_SYSFS_DEPRECATED=y | 70 | CONFIG_SYSFS_DEPRECATED=y |
71 | # CONFIG_RELAY is not set | 71 | # CONFIG_RELAY is not set |
72 | CONFIG_INITRAMFS_SOURCE="" | 72 | CONFIG_INITRAMFS_SOURCE="" |
73 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 73 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y |
74 | CONFIG_SYSCTL=y | 74 | CONFIG_SYSCTL=y |
75 | CONFIG_EMBEDDED=y | 75 | # CONFIG_EMBEDDED is not set |
76 | # CONFIG_SYSCTL_SYSCALL is not set | 76 | CONFIG_SYSCTL_SYSCALL=y |
77 | CONFIG_KALLSYMS=y | 77 | CONFIG_KALLSYMS=y |
78 | CONFIG_KALLSYMS_ALL=y | 78 | CONFIG_KALLSYMS_ALL=y |
79 | CONFIG_KALLSYMS_EXTRA_PASS=y | 79 | CONFIG_KALLSYMS_EXTRA_PASS=y |
@@ -160,7 +160,7 @@ CONFIG_SPU_BASE=y | |||
160 | # PS3 Platform Options | 160 | # PS3 Platform Options |
161 | # | 161 | # |
162 | CONFIG_PS3_HTAB_SIZE=20 | 162 | CONFIG_PS3_HTAB_SIZE=20 |
163 | CONFIG_PS3_DYNAMIC_DMA=y | 163 | # CONFIG_PS3_DYNAMIC_DMA is not set |
164 | CONFIG_PS3_USE_LPAR_ADDR=y | 164 | CONFIG_PS3_USE_LPAR_ADDR=y |
165 | CONFIG_PS3_VUART=y | 165 | CONFIG_PS3_VUART=y |
166 | 166 | ||
@@ -207,7 +207,7 @@ CONFIG_PPC_64K_PAGES=y | |||
207 | # CONFIG_SCHED_SMT is not set | 207 | # CONFIG_SCHED_SMT is not set |
208 | CONFIG_PROC_DEVICETREE=y | 208 | CONFIG_PROC_DEVICETREE=y |
209 | CONFIG_CMDLINE_BOOL=y | 209 | CONFIG_CMDLINE_BOOL=y |
210 | CONFIG_CMDLINE="root=/dev/nfs rw ip=dhcp" | 210 | CONFIG_CMDLINE="root=/dev/sda1 ip=dhcp" |
211 | # CONFIG_PM is not set | 211 | # CONFIG_PM is not set |
212 | # CONFIG_SECCOMP is not set | 212 | # CONFIG_SECCOMP is not set |
213 | CONFIG_ISA_DMA_API=y | 213 | CONFIG_ISA_DMA_API=y |
@@ -240,7 +240,8 @@ CONFIG_NET=y | |||
240 | # Networking options | 240 | # Networking options |
241 | # | 241 | # |
242 | # CONFIG_NETDEBUG is not set | 242 | # CONFIG_NETDEBUG is not set |
243 | # CONFIG_PACKET is not set | 243 | CONFIG_PACKET=y |
244 | CONFIG_PACKET_MMAP=y | ||
244 | CONFIG_UNIX=y | 245 | CONFIG_UNIX=y |
245 | # CONFIG_NET_KEY is not set | 246 | # CONFIG_NET_KEY is not set |
246 | CONFIG_INET=y | 247 | CONFIG_INET=y |
@@ -353,6 +354,7 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y | |||
353 | # CONFIG_BLK_DEV_COW_COMMON is not set | 354 | # CONFIG_BLK_DEV_COW_COMMON is not set |
354 | # CONFIG_BLK_DEV_LOOP is not set | 355 | # CONFIG_BLK_DEV_LOOP is not set |
355 | # CONFIG_BLK_DEV_NBD is not set | 356 | # CONFIG_BLK_DEV_NBD is not set |
357 | # CONFIG_BLK_DEV_UB is not set | ||
356 | # CONFIG_BLK_DEV_RAM is not set | 358 | # CONFIG_BLK_DEV_RAM is not set |
357 | # CONFIG_BLK_DEV_INITRD is not set | 359 | # CONFIG_BLK_DEV_INITRD is not set |
358 | # CONFIG_CDROM_PKTCDVD is not set | 360 | # CONFIG_CDROM_PKTCDVD is not set |
@@ -380,10 +382,11 @@ CONFIG_SCSI_PROC_FS=y | |||
380 | # | 382 | # |
381 | # SCSI support type (disk, tape, CD-ROM) | 383 | # SCSI support type (disk, tape, CD-ROM) |
382 | # | 384 | # |
383 | # CONFIG_BLK_DEV_SD is not set | 385 | CONFIG_BLK_DEV_SD=y |
384 | # CONFIG_CHR_DEV_ST is not set | 386 | # CONFIG_CHR_DEV_ST is not set |
385 | # CONFIG_CHR_DEV_OSST is not set | 387 | # CONFIG_CHR_DEV_OSST is not set |
386 | # CONFIG_BLK_DEV_SR is not set | 388 | CONFIG_BLK_DEV_SR=y |
389 | # CONFIG_BLK_DEV_SR_VENDOR is not set | ||
387 | # CONFIG_CHR_DEV_SG is not set | 390 | # CONFIG_CHR_DEV_SG is not set |
388 | # CONFIG_CHR_DEV_SCH is not set | 391 | # CONFIG_CHR_DEV_SCH is not set |
389 | 392 | ||
@@ -456,6 +459,7 @@ CONFIG_NETDEVICES=y | |||
456 | # Ethernet (10 or 100Mbit) | 459 | # Ethernet (10 or 100Mbit) |
457 | # | 460 | # |
458 | # CONFIG_NET_ETHERNET is not set | 461 | # CONFIG_NET_ETHERNET is not set |
462 | CONFIG_MII=y | ||
459 | 463 | ||
460 | # | 464 | # |
461 | # Ethernet (1000 Mbit) | 465 | # Ethernet (1000 Mbit) |
@@ -504,10 +508,13 @@ CONFIG_INPUT=y | |||
504 | # | 508 | # |
505 | # Userland interfaces | 509 | # Userland interfaces |
506 | # | 510 | # |
507 | # CONFIG_INPUT_MOUSEDEV is not set | 511 | CONFIG_INPUT_MOUSEDEV=y |
512 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
513 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
514 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
508 | # CONFIG_INPUT_JOYDEV is not set | 515 | # CONFIG_INPUT_JOYDEV is not set |
509 | # CONFIG_INPUT_TSDEV is not set | 516 | # CONFIG_INPUT_TSDEV is not set |
510 | CONFIG_INPUT_EVDEV=y | 517 | # CONFIG_INPUT_EVDEV is not set |
511 | # CONFIG_INPUT_EVBUG is not set | 518 | # CONFIG_INPUT_EVBUG is not set |
512 | 519 | ||
513 | # | 520 | # |
@@ -598,6 +605,7 @@ CONFIG_GEN_RTC=y | |||
598 | # Digital Video Broadcasting Devices | 605 | # Digital Video Broadcasting Devices |
599 | # | 606 | # |
600 | # CONFIG_DVB is not set | 607 | # CONFIG_DVB is not set |
608 | # CONFIG_USB_DABUSB is not set | ||
601 | 609 | ||
602 | # | 610 | # |
603 | # Graphics support | 611 | # Graphics support |
@@ -626,15 +634,142 @@ CONFIG_HID=y | |||
626 | # | 634 | # |
627 | # USB support | 635 | # USB support |
628 | # | 636 | # |
629 | # CONFIG_USB_ARCH_HAS_HCD is not set | 637 | CONFIG_USB_ARCH_HAS_HCD=y |
630 | # CONFIG_USB_ARCH_HAS_OHCI is not set | 638 | CONFIG_USB_ARCH_HAS_OHCI=y |
631 | # CONFIG_USB_ARCH_HAS_EHCI is not set | 639 | CONFIG_USB_ARCH_HAS_EHCI=y |
640 | CONFIG_USB=y | ||
641 | CONFIG_USB_DEBUG=y | ||
642 | |||
643 | # | ||
644 | # Miscellaneous USB options | ||
645 | # | ||
646 | # CONFIG_USB_DEVICEFS is not set | ||
647 | # CONFIG_USB_BANDWIDTH is not set | ||
648 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
649 | # CONFIG_USB_OTG is not set | ||
650 | |||
651 | # | ||
652 | # USB Host Controller Drivers | ||
653 | # | ||
654 | CONFIG_USB_EHCI_HCD=y | ||
655 | # CONFIG_USB_EHCI_SPLIT_ISO is not set | ||
656 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set | ||
657 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set | ||
658 | CONFIG_USB_EHCI_BIG_ENDIAN_MMIO=y | ||
659 | # CONFIG_USB_ISP116X_HCD is not set | ||
660 | CONFIG_USB_OHCI_HCD=y | ||
661 | # CONFIG_USB_OHCI_HCD_PPC_OF is not set | ||
662 | # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set | ||
663 | CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y | ||
664 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y | ||
665 | # CONFIG_USB_SL811_HCD is not set | ||
666 | |||
667 | # | ||
668 | # USB Device Class drivers | ||
669 | # | ||
670 | # CONFIG_USB_ACM is not set | ||
671 | # CONFIG_USB_PRINTER is not set | ||
632 | 672 | ||
633 | # | 673 | # |
634 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | 674 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' |
635 | # | 675 | # |
636 | 676 | ||
637 | # | 677 | # |
678 | # may also be needed; see USB_STORAGE Help for more information | ||
679 | # | ||
680 | CONFIG_USB_STORAGE=y | ||
681 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
682 | # CONFIG_USB_STORAGE_DATAFAB is not set | ||
683 | # CONFIG_USB_STORAGE_FREECOM is not set | ||
684 | # CONFIG_USB_STORAGE_DPCM is not set | ||
685 | # CONFIG_USB_STORAGE_USBAT is not set | ||
686 | # CONFIG_USB_STORAGE_SDDR09 is not set | ||
687 | # CONFIG_USB_STORAGE_SDDR55 is not set | ||
688 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | ||
689 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
690 | # CONFIG_USB_STORAGE_KARMA is not set | ||
691 | # CONFIG_USB_LIBUSUAL is not set | ||
692 | |||
693 | # | ||
694 | # USB Input Devices | ||
695 | # | ||
696 | CONFIG_USB_HID=y | ||
697 | # CONFIG_USB_HIDINPUT_POWERBOOK is not set | ||
698 | # CONFIG_HID_FF is not set | ||
699 | # CONFIG_USB_HIDDEV is not set | ||
700 | # CONFIG_USB_AIPTEK is not set | ||
701 | # CONFIG_USB_WACOM is not set | ||
702 | # CONFIG_USB_ACECAD is not set | ||
703 | # CONFIG_USB_KBTAB is not set | ||
704 | # CONFIG_USB_POWERMATE is not set | ||
705 | # CONFIG_USB_TOUCHSCREEN is not set | ||
706 | # CONFIG_USB_YEALINK is not set | ||
707 | # CONFIG_USB_XPAD is not set | ||
708 | # CONFIG_USB_ATI_REMOTE is not set | ||
709 | # CONFIG_USB_ATI_REMOTE2 is not set | ||
710 | # CONFIG_USB_KEYSPAN_REMOTE is not set | ||
711 | # CONFIG_USB_APPLETOUCH is not set | ||
712 | |||
713 | # | ||
714 | # USB Imaging devices | ||
715 | # | ||
716 | # CONFIG_USB_MDC800 is not set | ||
717 | # CONFIG_USB_MICROTEK is not set | ||
718 | |||
719 | # | ||
720 | # USB Network Adapters | ||
721 | # | ||
722 | # CONFIG_USB_CATC is not set | ||
723 | # CONFIG_USB_KAWETH is not set | ||
724 | # CONFIG_USB_PEGASUS is not set | ||
725 | # CONFIG_USB_RTL8150 is not set | ||
726 | CONFIG_USB_USBNET_MII=y | ||
727 | CONFIG_USB_USBNET=y | ||
728 | CONFIG_USB_NET_CDCETHER=y | ||
729 | # CONFIG_USB_NET_GL620A is not set | ||
730 | # CONFIG_USB_NET_NET1080 is not set | ||
731 | # CONFIG_USB_NET_PLUSB is not set | ||
732 | CONFIG_USB_NET_MCS7830=y | ||
733 | # CONFIG_USB_NET_RNDIS_HOST is not set | ||
734 | # CONFIG_USB_NET_CDC_SUBSET is not set | ||
735 | # CONFIG_USB_NET_ZAURUS is not set | ||
736 | CONFIG_USB_MON=y | ||
737 | |||
738 | # | ||
739 | # USB port drivers | ||
740 | # | ||
741 | |||
742 | # | ||
743 | # USB Serial Converter support | ||
744 | # | ||
745 | # CONFIG_USB_SERIAL is not set | ||
746 | |||
747 | # | ||
748 | # USB Miscellaneous drivers | ||
749 | # | ||
750 | # CONFIG_USB_EMI62 is not set | ||
751 | # CONFIG_USB_EMI26 is not set | ||
752 | # CONFIG_USB_ADUTUX is not set | ||
753 | # CONFIG_USB_AUERSWALD is not set | ||
754 | # CONFIG_USB_RIO500 is not set | ||
755 | # CONFIG_USB_LEGOTOWER is not set | ||
756 | # CONFIG_USB_LCD is not set | ||
757 | # CONFIG_USB_LED is not set | ||
758 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
759 | # CONFIG_USB_CYTHERM is not set | ||
760 | # CONFIG_USB_PHIDGET is not set | ||
761 | # CONFIG_USB_IDMOUSE is not set | ||
762 | # CONFIG_USB_FTDI_ELAN is not set | ||
763 | # CONFIG_USB_APPLEDISPLAY is not set | ||
764 | # CONFIG_USB_SISUSBVGA is not set | ||
765 | # CONFIG_USB_LD is not set | ||
766 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
767 | |||
768 | # | ||
769 | # USB DSL modem support | ||
770 | # | ||
771 | |||
772 | # | ||
638 | # USB Gadget Support | 773 | # USB Gadget Support |
639 | # | 774 | # |
640 | # CONFIG_USB_GADGET is not set | 775 | # CONFIG_USB_GADGET is not set |
@@ -691,8 +826,14 @@ CONFIG_HID=y | |||
691 | # File systems | 826 | # File systems |
692 | # | 827 | # |
693 | # CONFIG_EXT2_FS is not set | 828 | # CONFIG_EXT2_FS is not set |
694 | # CONFIG_EXT3_FS is not set | 829 | CONFIG_EXT3_FS=y |
830 | CONFIG_EXT3_FS_XATTR=y | ||
831 | # CONFIG_EXT3_FS_POSIX_ACL is not set | ||
832 | # CONFIG_EXT3_FS_SECURITY is not set | ||
695 | # CONFIG_EXT4DEV_FS is not set | 833 | # CONFIG_EXT4DEV_FS is not set |
834 | CONFIG_JBD=y | ||
835 | # CONFIG_JBD_DEBUG is not set | ||
836 | CONFIG_FS_MBCACHE=y | ||
696 | # CONFIG_REISERFS_FS is not set | 837 | # CONFIG_REISERFS_FS is not set |
697 | # CONFIG_JFS_FS is not set | 838 | # CONFIG_JFS_FS is not set |
698 | # CONFIG_FS_POSIX_ACL is not set | 839 | # CONFIG_FS_POSIX_ACL is not set |
@@ -712,14 +853,20 @@ CONFIG_DNOTIFY=y | |||
712 | # | 853 | # |
713 | # CD-ROM/DVD Filesystems | 854 | # CD-ROM/DVD Filesystems |
714 | # | 855 | # |
715 | # CONFIG_ISO9660_FS is not set | 856 | CONFIG_ISO9660_FS=y |
716 | # CONFIG_UDF_FS is not set | 857 | CONFIG_JOLIET=y |
858 | # CONFIG_ZISOFS is not set | ||
859 | CONFIG_UDF_FS=y | ||
860 | CONFIG_UDF_NLS=y | ||
717 | 861 | ||
718 | # | 862 | # |
719 | # DOS/FAT/NT Filesystems | 863 | # DOS/FAT/NT Filesystems |
720 | # | 864 | # |
865 | CONFIG_FAT_FS=y | ||
721 | # CONFIG_MSDOS_FS is not set | 866 | # CONFIG_MSDOS_FS is not set |
722 | # CONFIG_VFAT_FS is not set | 867 | CONFIG_VFAT_FS=y |
868 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | ||
869 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | ||
723 | # CONFIG_NTFS_FS is not set | 870 | # CONFIG_NTFS_FS is not set |
724 | 871 | ||
725 | # | 872 | # |
@@ -785,7 +932,46 @@ CONFIG_MSDOS_PARTITION=y | |||
785 | # | 932 | # |
786 | # Native Language Support | 933 | # Native Language Support |
787 | # | 934 | # |
788 | # CONFIG_NLS is not set | 935 | CONFIG_NLS=y |
936 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
937 | CONFIG_NLS_CODEPAGE_437=y | ||
938 | # CONFIG_NLS_CODEPAGE_737 is not set | ||
939 | # CONFIG_NLS_CODEPAGE_775 is not set | ||
940 | # CONFIG_NLS_CODEPAGE_850 is not set | ||
941 | # CONFIG_NLS_CODEPAGE_852 is not set | ||
942 | # CONFIG_NLS_CODEPAGE_855 is not set | ||
943 | # CONFIG_NLS_CODEPAGE_857 is not set | ||
944 | # CONFIG_NLS_CODEPAGE_860 is not set | ||
945 | # CONFIG_NLS_CODEPAGE_861 is not set | ||
946 | # CONFIG_NLS_CODEPAGE_862 is not set | ||
947 | # CONFIG_NLS_CODEPAGE_863 is not set | ||
948 | # CONFIG_NLS_CODEPAGE_864 is not set | ||
949 | # CONFIG_NLS_CODEPAGE_865 is not set | ||
950 | # CONFIG_NLS_CODEPAGE_866 is not set | ||
951 | # CONFIG_NLS_CODEPAGE_869 is not set | ||
952 | # CONFIG_NLS_CODEPAGE_936 is not set | ||
953 | # CONFIG_NLS_CODEPAGE_950 is not set | ||
954 | # CONFIG_NLS_CODEPAGE_932 is not set | ||
955 | # CONFIG_NLS_CODEPAGE_949 is not set | ||
956 | # CONFIG_NLS_CODEPAGE_874 is not set | ||
957 | # CONFIG_NLS_ISO8859_8 is not set | ||
958 | # CONFIG_NLS_CODEPAGE_1250 is not set | ||
959 | # CONFIG_NLS_CODEPAGE_1251 is not set | ||
960 | # CONFIG_NLS_ASCII is not set | ||
961 | CONFIG_NLS_ISO8859_1=y | ||
962 | # CONFIG_NLS_ISO8859_2 is not set | ||
963 | # CONFIG_NLS_ISO8859_3 is not set | ||
964 | # CONFIG_NLS_ISO8859_4 is not set | ||
965 | # CONFIG_NLS_ISO8859_5 is not set | ||
966 | # CONFIG_NLS_ISO8859_6 is not set | ||
967 | # CONFIG_NLS_ISO8859_7 is not set | ||
968 | # CONFIG_NLS_ISO8859_9 is not set | ||
969 | # CONFIG_NLS_ISO8859_13 is not set | ||
970 | # CONFIG_NLS_ISO8859_14 is not set | ||
971 | # CONFIG_NLS_ISO8859_15 is not set | ||
972 | # CONFIG_NLS_KOI8_R is not set | ||
973 | # CONFIG_NLS_KOI8_U is not set | ||
974 | # CONFIG_NLS_UTF8 is not set | ||
789 | 975 | ||
790 | # | 976 | # |
791 | # Distributed Lock Manager | 977 | # Distributed Lock Manager |
@@ -795,9 +981,10 @@ CONFIG_MSDOS_PARTITION=y | |||
795 | # | 981 | # |
796 | # Library routines | 982 | # Library routines |
797 | # | 983 | # |
984 | CONFIG_BITREVERSE=y | ||
798 | # CONFIG_CRC_CCITT is not set | 985 | # CONFIG_CRC_CCITT is not set |
799 | # CONFIG_CRC16 is not set | 986 | # CONFIG_CRC16 is not set |
800 | # CONFIG_CRC32 is not set | 987 | CONFIG_CRC32=y |
801 | # CONFIG_LIBCRC32C is not set | 988 | # CONFIG_LIBCRC32C is not set |
802 | CONFIG_PLIST=y | 989 | CONFIG_PLIST=y |
803 | CONFIG_IOMAP_COPY=y | 990 | CONFIG_IOMAP_COPY=y |
@@ -821,22 +1008,23 @@ CONFIG_DEBUG_KERNEL=y | |||
821 | CONFIG_LOG_BUF_SHIFT=17 | 1008 | CONFIG_LOG_BUF_SHIFT=17 |
822 | CONFIG_DETECT_SOFTLOCKUP=y | 1009 | CONFIG_DETECT_SOFTLOCKUP=y |
823 | # CONFIG_SCHEDSTATS is not set | 1010 | # CONFIG_SCHEDSTATS is not set |
824 | # CONFIG_DEBUG_SLAB is not set | 1011 | CONFIG_DEBUG_SLAB=y |
1012 | # CONFIG_DEBUG_SLAB_LEAK is not set | ||
825 | # CONFIG_DEBUG_RT_MUTEXES is not set | 1013 | # CONFIG_DEBUG_RT_MUTEXES is not set |
826 | # CONFIG_RT_MUTEX_TESTER is not set | 1014 | # CONFIG_RT_MUTEX_TESTER is not set |
827 | CONFIG_DEBUG_SPINLOCK=y | 1015 | CONFIG_DEBUG_SPINLOCK=y |
828 | # CONFIG_DEBUG_MUTEXES is not set | 1016 | CONFIG_DEBUG_MUTEXES=y |
829 | # CONFIG_DEBUG_RWSEMS is not set | 1017 | CONFIG_DEBUG_RWSEMS=y |
830 | CONFIG_DEBUG_SPINLOCK_SLEEP=y | 1018 | CONFIG_DEBUG_SPINLOCK_SLEEP=y |
831 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | 1019 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set |
832 | # CONFIG_DEBUG_KOBJECT is not set | 1020 | # CONFIG_DEBUG_KOBJECT is not set |
833 | # CONFIG_DEBUG_BUGVERBOSE is not set | 1021 | CONFIG_DEBUG_BUGVERBOSE=y |
834 | CONFIG_DEBUG_INFO=y | 1022 | CONFIG_DEBUG_INFO=y |
835 | # CONFIG_DEBUG_VM is not set | 1023 | # CONFIG_DEBUG_VM is not set |
836 | CONFIG_DEBUG_LIST=y | 1024 | CONFIG_DEBUG_LIST=y |
837 | CONFIG_FORCED_INLINING=y | 1025 | CONFIG_FORCED_INLINING=y |
838 | # CONFIG_RCU_TORTURE_TEST is not set | 1026 | # CONFIG_RCU_TORTURE_TEST is not set |
839 | # CONFIG_DEBUG_STACKOVERFLOW is not set | 1027 | CONFIG_DEBUG_STACKOVERFLOW=y |
840 | # CONFIG_DEBUG_STACK_USAGE is not set | 1028 | # CONFIG_DEBUG_STACK_USAGE is not set |
841 | # CONFIG_DEBUGGER is not set | 1029 | # CONFIG_DEBUGGER is not set |
842 | CONFIG_IRQSTACKS=y | 1030 | CONFIG_IRQSTACKS=y |
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile index d2ded19e4064..8120d428ebfd 100644 --- a/arch/powerpc/kernel/Makefile +++ b/arch/powerpc/kernel/Makefile | |||
@@ -17,6 +17,7 @@ obj-y += vdso32/ | |||
17 | obj-$(CONFIG_PPC64) += setup_64.o binfmt_elf32.o sys_ppc32.o \ | 17 | obj-$(CONFIG_PPC64) += setup_64.o binfmt_elf32.o sys_ppc32.o \ |
18 | signal_64.o ptrace32.o \ | 18 | signal_64.o ptrace32.o \ |
19 | paca.o cpu_setup_ppc970.o \ | 19 | paca.o cpu_setup_ppc970.o \ |
20 | cpu_setup_pa6t.o \ | ||
20 | firmware.o sysfs.o nvram_64.o | 21 | firmware.o sysfs.o nvram_64.o |
21 | obj-$(CONFIG_PPC64) += vdso64/ | 22 | obj-$(CONFIG_PPC64) += vdso64/ |
22 | obj-$(CONFIG_ALTIVEC) += vecemu.o vector.o | 23 | obj-$(CONFIG_ALTIVEC) += vecemu.o vector.o |
diff --git a/arch/powerpc/kernel/cpu_setup_pa6t.S b/arch/powerpc/kernel/cpu_setup_pa6t.S new file mode 100644 index 000000000000..4047be25c4d2 --- /dev/null +++ b/arch/powerpc/kernel/cpu_setup_pa6t.S | |||
@@ -0,0 +1,44 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2006-2007 PA Semi, Inc | ||
3 | * | ||
4 | * Maintained by: Olof Johansson <olof@lixom.net> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #include <asm/processor.h> | ||
22 | #include <asm/page.h> | ||
23 | #include <asm/cputable.h> | ||
24 | #include <asm/ppc_asm.h> | ||
25 | #include <asm/asm-offsets.h> | ||
26 | #include <asm/cache.h> | ||
27 | |||
28 | /* Right now, restore and setup are the same thing */ | ||
29 | _GLOBAL(__restore_cpu_pa6t) | ||
30 | _GLOBAL(__setup_cpu_pa6t) | ||
31 | /* Do nothing if not running in HV mode */ | ||
32 | mfmsr r0 | ||
33 | rldicl. r0,r0,4,63 | ||
34 | beqlr | ||
35 | |||
36 | mfspr r0,SPRN_HID5 | ||
37 | ori r0,r0,0x30 | ||
38 | mtspr SPRN_HID5,r0 | ||
39 | |||
40 | mfspr r0,SPRN_LPCR | ||
41 | ori r0,r0,0x7000 | ||
42 | mtspr SPRN_LPCR,r0 | ||
43 | |||
44 | blr | ||
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c index b742013bb9da..dd17dffbf058 100644 --- a/arch/powerpc/kernel/cputable.c +++ b/arch/powerpc/kernel/cputable.c | |||
@@ -43,6 +43,8 @@ extern void __setup_cpu_745x(unsigned long offset, struct cpu_spec* spec); | |||
43 | #ifdef CONFIG_PPC64 | 43 | #ifdef CONFIG_PPC64 |
44 | extern void __setup_cpu_ppc970(unsigned long offset, struct cpu_spec* spec); | 44 | extern void __setup_cpu_ppc970(unsigned long offset, struct cpu_spec* spec); |
45 | extern void __setup_cpu_ppc970MP(unsigned long offset, struct cpu_spec* spec); | 45 | extern void __setup_cpu_ppc970MP(unsigned long offset, struct cpu_spec* spec); |
46 | extern void __setup_cpu_pa6t(unsigned long offset, struct cpu_spec* spec); | ||
47 | extern void __restore_cpu_pa6t(unsigned long offset, struct cpu_spec* spec); | ||
46 | extern void __restore_cpu_ppc970(void); | 48 | extern void __restore_cpu_ppc970(void); |
47 | #endif /* CONFIG_PPC64 */ | 49 | #endif /* CONFIG_PPC64 */ |
48 | 50 | ||
@@ -86,6 +88,7 @@ static struct cpu_spec cpu_specs[] = { | |||
86 | .icache_bsize = 128, | 88 | .icache_bsize = 128, |
87 | .dcache_bsize = 128, | 89 | .dcache_bsize = 128, |
88 | .num_pmcs = 8, | 90 | .num_pmcs = 8, |
91 | .pmc_type = PPC_PMC_IBM, | ||
89 | .oprofile_cpu_type = "ppc64/power3", | 92 | .oprofile_cpu_type = "ppc64/power3", |
90 | .oprofile_type = PPC_OPROFILE_RS64, | 93 | .oprofile_type = PPC_OPROFILE_RS64, |
91 | .platform = "power3", | 94 | .platform = "power3", |
@@ -99,6 +102,7 @@ static struct cpu_spec cpu_specs[] = { | |||
99 | .icache_bsize = 128, | 102 | .icache_bsize = 128, |
100 | .dcache_bsize = 128, | 103 | .dcache_bsize = 128, |
101 | .num_pmcs = 8, | 104 | .num_pmcs = 8, |
105 | .pmc_type = PPC_PMC_IBM, | ||
102 | .oprofile_cpu_type = "ppc64/power3", | 106 | .oprofile_cpu_type = "ppc64/power3", |
103 | .oprofile_type = PPC_OPROFILE_RS64, | 107 | .oprofile_type = PPC_OPROFILE_RS64, |
104 | .platform = "power3", | 108 | .platform = "power3", |
@@ -112,6 +116,7 @@ static struct cpu_spec cpu_specs[] = { | |||
112 | .icache_bsize = 128, | 116 | .icache_bsize = 128, |
113 | .dcache_bsize = 128, | 117 | .dcache_bsize = 128, |
114 | .num_pmcs = 8, | 118 | .num_pmcs = 8, |
119 | .pmc_type = PPC_PMC_IBM, | ||
115 | .oprofile_cpu_type = "ppc64/rs64", | 120 | .oprofile_cpu_type = "ppc64/rs64", |
116 | .oprofile_type = PPC_OPROFILE_RS64, | 121 | .oprofile_type = PPC_OPROFILE_RS64, |
117 | .platform = "rs64", | 122 | .platform = "rs64", |
@@ -125,6 +130,7 @@ static struct cpu_spec cpu_specs[] = { | |||
125 | .icache_bsize = 128, | 130 | .icache_bsize = 128, |
126 | .dcache_bsize = 128, | 131 | .dcache_bsize = 128, |
127 | .num_pmcs = 8, | 132 | .num_pmcs = 8, |
133 | .pmc_type = PPC_PMC_IBM, | ||
128 | .oprofile_cpu_type = "ppc64/rs64", | 134 | .oprofile_cpu_type = "ppc64/rs64", |
129 | .oprofile_type = PPC_OPROFILE_RS64, | 135 | .oprofile_type = PPC_OPROFILE_RS64, |
130 | .platform = "rs64", | 136 | .platform = "rs64", |
@@ -138,6 +144,7 @@ static struct cpu_spec cpu_specs[] = { | |||
138 | .icache_bsize = 128, | 144 | .icache_bsize = 128, |
139 | .dcache_bsize = 128, | 145 | .dcache_bsize = 128, |
140 | .num_pmcs = 8, | 146 | .num_pmcs = 8, |
147 | .pmc_type = PPC_PMC_IBM, | ||
141 | .oprofile_cpu_type = "ppc64/rs64", | 148 | .oprofile_cpu_type = "ppc64/rs64", |
142 | .oprofile_type = PPC_OPROFILE_RS64, | 149 | .oprofile_type = PPC_OPROFILE_RS64, |
143 | .platform = "rs64", | 150 | .platform = "rs64", |
@@ -151,6 +158,7 @@ static struct cpu_spec cpu_specs[] = { | |||
151 | .icache_bsize = 128, | 158 | .icache_bsize = 128, |
152 | .dcache_bsize = 128, | 159 | .dcache_bsize = 128, |
153 | .num_pmcs = 8, | 160 | .num_pmcs = 8, |
161 | .pmc_type = PPC_PMC_IBM, | ||
154 | .oprofile_cpu_type = "ppc64/rs64", | 162 | .oprofile_cpu_type = "ppc64/rs64", |
155 | .oprofile_type = PPC_OPROFILE_RS64, | 163 | .oprofile_type = PPC_OPROFILE_RS64, |
156 | .platform = "rs64", | 164 | .platform = "rs64", |
@@ -164,6 +172,7 @@ static struct cpu_spec cpu_specs[] = { | |||
164 | .icache_bsize = 128, | 172 | .icache_bsize = 128, |
165 | .dcache_bsize = 128, | 173 | .dcache_bsize = 128, |
166 | .num_pmcs = 8, | 174 | .num_pmcs = 8, |
175 | .pmc_type = PPC_PMC_IBM, | ||
167 | .oprofile_cpu_type = "ppc64/power4", | 176 | .oprofile_cpu_type = "ppc64/power4", |
168 | .oprofile_type = PPC_OPROFILE_POWER4, | 177 | .oprofile_type = PPC_OPROFILE_POWER4, |
169 | .platform = "power4", | 178 | .platform = "power4", |
@@ -177,6 +186,7 @@ static struct cpu_spec cpu_specs[] = { | |||
177 | .icache_bsize = 128, | 186 | .icache_bsize = 128, |
178 | .dcache_bsize = 128, | 187 | .dcache_bsize = 128, |
179 | .num_pmcs = 8, | 188 | .num_pmcs = 8, |
189 | .pmc_type = PPC_PMC_IBM, | ||
180 | .oprofile_cpu_type = "ppc64/power4", | 190 | .oprofile_cpu_type = "ppc64/power4", |
181 | .oprofile_type = PPC_OPROFILE_POWER4, | 191 | .oprofile_type = PPC_OPROFILE_POWER4, |
182 | .platform = "power4", | 192 | .platform = "power4", |
@@ -191,6 +201,7 @@ static struct cpu_spec cpu_specs[] = { | |||
191 | .icache_bsize = 128, | 201 | .icache_bsize = 128, |
192 | .dcache_bsize = 128, | 202 | .dcache_bsize = 128, |
193 | .num_pmcs = 8, | 203 | .num_pmcs = 8, |
204 | .pmc_type = PPC_PMC_IBM, | ||
194 | .cpu_setup = __setup_cpu_ppc970, | 205 | .cpu_setup = __setup_cpu_ppc970, |
195 | .cpu_restore = __restore_cpu_ppc970, | 206 | .cpu_restore = __restore_cpu_ppc970, |
196 | .oprofile_cpu_type = "ppc64/970", | 207 | .oprofile_cpu_type = "ppc64/970", |
@@ -207,6 +218,7 @@ static struct cpu_spec cpu_specs[] = { | |||
207 | .icache_bsize = 128, | 218 | .icache_bsize = 128, |
208 | .dcache_bsize = 128, | 219 | .dcache_bsize = 128, |
209 | .num_pmcs = 8, | 220 | .num_pmcs = 8, |
221 | .pmc_type = PPC_PMC_IBM, | ||
210 | .cpu_setup = __setup_cpu_ppc970, | 222 | .cpu_setup = __setup_cpu_ppc970, |
211 | .cpu_restore = __restore_cpu_ppc970, | 223 | .cpu_restore = __restore_cpu_ppc970, |
212 | .oprofile_cpu_type = "ppc64/970", | 224 | .oprofile_cpu_type = "ppc64/970", |
@@ -239,6 +251,7 @@ static struct cpu_spec cpu_specs[] = { | |||
239 | .icache_bsize = 128, | 251 | .icache_bsize = 128, |
240 | .dcache_bsize = 128, | 252 | .dcache_bsize = 128, |
241 | .num_pmcs = 8, | 253 | .num_pmcs = 8, |
254 | .pmc_type = PPC_PMC_IBM, | ||
242 | .cpu_setup = __setup_cpu_ppc970, | 255 | .cpu_setup = __setup_cpu_ppc970, |
243 | .oprofile_cpu_type = "ppc64/970", | 256 | .oprofile_cpu_type = "ppc64/970", |
244 | .oprofile_type = PPC_OPROFILE_POWER4, | 257 | .oprofile_type = PPC_OPROFILE_POWER4, |
@@ -253,6 +266,7 @@ static struct cpu_spec cpu_specs[] = { | |||
253 | .icache_bsize = 128, | 266 | .icache_bsize = 128, |
254 | .dcache_bsize = 128, | 267 | .dcache_bsize = 128, |
255 | .num_pmcs = 6, | 268 | .num_pmcs = 6, |
269 | .pmc_type = PPC_PMC_IBM, | ||
256 | .oprofile_cpu_type = "ppc64/power5", | 270 | .oprofile_cpu_type = "ppc64/power5", |
257 | .oprofile_type = PPC_OPROFILE_POWER4, | 271 | .oprofile_type = PPC_OPROFILE_POWER4, |
258 | /* SIHV / SIPR bits are implemented on POWER4+ (GQ) | 272 | /* SIHV / SIPR bits are implemented on POWER4+ (GQ) |
@@ -271,6 +285,7 @@ static struct cpu_spec cpu_specs[] = { | |||
271 | .icache_bsize = 128, | 285 | .icache_bsize = 128, |
272 | .dcache_bsize = 128, | 286 | .dcache_bsize = 128, |
273 | .num_pmcs = 6, | 287 | .num_pmcs = 6, |
288 | .pmc_type = PPC_PMC_IBM, | ||
274 | .oprofile_cpu_type = "ppc64/power5+", | 289 | .oprofile_cpu_type = "ppc64/power5+", |
275 | .oprofile_type = PPC_OPROFILE_POWER4, | 290 | .oprofile_type = PPC_OPROFILE_POWER4, |
276 | .oprofile_mmcra_sihv = MMCRA_SIHV, | 291 | .oprofile_mmcra_sihv = MMCRA_SIHV, |
@@ -321,6 +336,7 @@ static struct cpu_spec cpu_specs[] = { | |||
321 | .icache_bsize = 128, | 336 | .icache_bsize = 128, |
322 | .dcache_bsize = 128, | 337 | .dcache_bsize = 128, |
323 | .num_pmcs = 6, | 338 | .num_pmcs = 6, |
339 | .pmc_type = PPC_PMC_IBM, | ||
324 | .oprofile_cpu_type = "ppc64/power6", | 340 | .oprofile_cpu_type = "ppc64/power6", |
325 | .oprofile_type = PPC_OPROFILE_POWER4, | 341 | .oprofile_type = PPC_OPROFILE_POWER4, |
326 | .oprofile_mmcra_sihv = POWER6_MMCRA_SIHV, | 342 | .oprofile_mmcra_sihv = POWER6_MMCRA_SIHV, |
@@ -340,6 +356,7 @@ static struct cpu_spec cpu_specs[] = { | |||
340 | .icache_bsize = 128, | 356 | .icache_bsize = 128, |
341 | .dcache_bsize = 128, | 357 | .dcache_bsize = 128, |
342 | .num_pmcs = 4, | 358 | .num_pmcs = 4, |
359 | .pmc_type = PPC_PMC_IBM, | ||
343 | .oprofile_cpu_type = "ppc64/cell-be", | 360 | .oprofile_cpu_type = "ppc64/cell-be", |
344 | .oprofile_type = PPC_OPROFILE_CELL, | 361 | .oprofile_type = PPC_OPROFILE_CELL, |
345 | .platform = "ppc-cell-be", | 362 | .platform = "ppc-cell-be", |
@@ -353,6 +370,9 @@ static struct cpu_spec cpu_specs[] = { | |||
353 | .icache_bsize = 64, | 370 | .icache_bsize = 64, |
354 | .dcache_bsize = 64, | 371 | .dcache_bsize = 64, |
355 | .num_pmcs = 6, | 372 | .num_pmcs = 6, |
373 | .pmc_type = PPC_PMC_PA6T, | ||
374 | .cpu_setup = __setup_cpu_pa6t, | ||
375 | .cpu_restore = __restore_cpu_pa6t, | ||
356 | .platform = "pa6t", | 376 | .platform = "pa6t", |
357 | }, | 377 | }, |
358 | { /* default match */ | 378 | { /* default match */ |
@@ -364,6 +384,7 @@ static struct cpu_spec cpu_specs[] = { | |||
364 | .icache_bsize = 128, | 384 | .icache_bsize = 128, |
365 | .dcache_bsize = 128, | 385 | .dcache_bsize = 128, |
366 | .num_pmcs = 6, | 386 | .num_pmcs = 6, |
387 | .pmc_type = PPC_PMC_IBM, | ||
367 | .platform = "power4", | 388 | .platform = "power4", |
368 | } | 389 | } |
369 | #endif /* CONFIG_PPC64 */ | 390 | #endif /* CONFIG_PPC64 */ |
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S index 2551c0884afc..2b66d53dcc55 100644 --- a/arch/powerpc/kernel/entry_64.S +++ b/arch/powerpc/kernel/entry_64.S | |||
@@ -172,13 +172,18 @@ syscall_error_cont: | |||
172 | stdcx. r0,0,r1 /* to clear the reservation */ | 172 | stdcx. r0,0,r1 /* to clear the reservation */ |
173 | andi. r6,r8,MSR_PR | 173 | andi. r6,r8,MSR_PR |
174 | ld r4,_LINK(r1) | 174 | ld r4,_LINK(r1) |
175 | /* | ||
176 | * Clear RI before restoring r13. If we are returning to | ||
177 | * userspace and we take an exception after restoring r13, | ||
178 | * we end up corrupting the userspace r13 value. | ||
179 | */ | ||
180 | li r12,MSR_RI | ||
181 | andc r11,r10,r12 | ||
182 | mtmsrd r11,1 /* clear MSR.RI */ | ||
175 | beq- 1f | 183 | beq- 1f |
176 | ACCOUNT_CPU_USER_EXIT(r11, r12) | 184 | ACCOUNT_CPU_USER_EXIT(r11, r12) |
177 | ld r13,GPR13(r1) /* only restore r13 if returning to usermode */ | 185 | ld r13,GPR13(r1) /* only restore r13 if returning to usermode */ |
178 | 1: ld r2,GPR2(r1) | 186 | 1: ld r2,GPR2(r1) |
179 | li r12,MSR_RI | ||
180 | andc r11,r10,r12 | ||
181 | mtmsrd r11,1 /* clear MSR.RI */ | ||
182 | ld r1,GPR1(r1) | 187 | ld r1,GPR1(r1) |
183 | mtlr r4 | 188 | mtlr r4 |
184 | mtcr r5 | 189 | mtcr r5 |
@@ -488,42 +493,44 @@ END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES) | |||
488 | #endif | 493 | #endif |
489 | stb r5,PACASOFTIRQEN(r13) | 494 | stb r5,PACASOFTIRQEN(r13) |
490 | 495 | ||
496 | /* extract EE bit and use it to restore paca->hard_enabled */ | ||
491 | ld r3,_MSR(r1) | 497 | ld r3,_MSR(r1) |
498 | rldicl r4,r3,49,63 /* r0 = (r3 >> 15) & 1 */ | ||
499 | stb r4,PACAHARDIRQEN(r13) | ||
500 | |||
501 | ld r4,_CTR(r1) | ||
502 | ld r0,_LINK(r1) | ||
503 | mtctr r4 | ||
504 | mtlr r0 | ||
505 | ld r4,_XER(r1) | ||
506 | mtspr SPRN_XER,r4 | ||
507 | |||
508 | REST_8GPRS(5, r1) | ||
509 | |||
492 | andi. r0,r3,MSR_RI | 510 | andi. r0,r3,MSR_RI |
493 | beq- unrecov_restore | 511 | beq- unrecov_restore |
494 | 512 | ||
495 | /* extract EE bit and use it to restore paca->hard_enabled */ | 513 | stdcx. r0,0,r1 /* to clear the reservation */ |
496 | rldicl r4,r3,49,63 /* r0 = (r3 >> 15) & 1 */ | ||
497 | stb r4,PACAHARDIRQEN(r13) | ||
498 | 514 | ||
499 | andi. r0,r3,MSR_PR | 515 | /* |
516 | * Clear RI before restoring r13. If we are returning to | ||
517 | * userspace and we take an exception after restoring r13, | ||
518 | * we end up corrupting the userspace r13 value. | ||
519 | */ | ||
520 | mfmsr r4 | ||
521 | andc r4,r4,r0 /* r0 contains MSR_RI here */ | ||
522 | mtmsrd r4,1 | ||
500 | 523 | ||
501 | /* | 524 | /* |
502 | * r13 is our per cpu area, only restore it if we are returning to | 525 | * r13 is our per cpu area, only restore it if we are returning to |
503 | * userspace | 526 | * userspace |
504 | */ | 527 | */ |
528 | andi. r0,r3,MSR_PR | ||
505 | beq 1f | 529 | beq 1f |
506 | ACCOUNT_CPU_USER_EXIT(r3, r4) | 530 | ACCOUNT_CPU_USER_EXIT(r2, r4) |
507 | REST_GPR(13, r1) | 531 | REST_GPR(13, r1) |
508 | 1: | 532 | 1: |
509 | ld r3,_CTR(r1) | 533 | mtspr SPRN_SRR1,r3 |
510 | ld r0,_LINK(r1) | ||
511 | mtctr r3 | ||
512 | mtlr r0 | ||
513 | ld r3,_XER(r1) | ||
514 | mtspr SPRN_XER,r3 | ||
515 | |||
516 | REST_8GPRS(5, r1) | ||
517 | |||
518 | stdcx. r0,0,r1 /* to clear the reservation */ | ||
519 | |||
520 | mfmsr r0 | ||
521 | li r2, MSR_RI | ||
522 | andc r0,r0,r2 | ||
523 | mtmsrd r0,1 | ||
524 | |||
525 | ld r0,_MSR(r1) | ||
526 | mtspr SPRN_SRR1,r0 | ||
527 | 534 | ||
528 | ld r2,_CCR(r1) | 535 | ld r2,_CCR(r1) |
529 | mtcrf 0xFF,r2 | 536 | mtcrf 0xFF,r2 |
diff --git a/arch/powerpc/kernel/head_32.S b/arch/powerpc/kernel/head_32.S index 9417cf5b4b7e..c897203198b1 100644 --- a/arch/powerpc/kernel/head_32.S +++ b/arch/powerpc/kernel/head_32.S | |||
@@ -344,12 +344,7 @@ i##n: \ | |||
344 | /* System reset */ | 344 | /* System reset */ |
345 | /* core99 pmac starts the seconary here by changing the vector, and | 345 | /* core99 pmac starts the seconary here by changing the vector, and |
346 | putting it back to what it was (unknown_exception) when done. */ | 346 | putting it back to what it was (unknown_exception) when done. */ |
347 | #if defined(CONFIG_GEMINI) && defined(CONFIG_SMP) | ||
348 | . = 0x100 | ||
349 | b __secondary_start_gemini | ||
350 | #else | ||
351 | EXCEPTION(0x100, Reset, unknown_exception, EXC_XFER_STD) | 347 | EXCEPTION(0x100, Reset, unknown_exception, EXC_XFER_STD) |
352 | #endif | ||
353 | 348 | ||
354 | /* Machine check */ | 349 | /* Machine check */ |
355 | /* | 350 | /* |
diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S index 71b1fe58e9e4..97cedcd6c9b4 100644 --- a/arch/powerpc/kernel/head_64.S +++ b/arch/powerpc/kernel/head_64.S | |||
@@ -613,7 +613,7 @@ system_call_pSeries: | |||
613 | /*** pSeries interrupt support ***/ | 613 | /*** pSeries interrupt support ***/ |
614 | 614 | ||
615 | /* moved from 0xf00 */ | 615 | /* moved from 0xf00 */ |
616 | MASKABLE_EXCEPTION_PSERIES(., performance_monitor) | 616 | STD_EXCEPTION_PSERIES(., performance_monitor) |
617 | 617 | ||
618 | /* | 618 | /* |
619 | * An interrupt came in while soft-disabled; clear EE in SRR1, | 619 | * An interrupt came in while soft-disabled; clear EE in SRR1, |
diff --git a/arch/powerpc/kernel/iomap.c b/arch/powerpc/kernel/iomap.c index c68113371050..601ef79a5916 100644 --- a/arch/powerpc/kernel/iomap.c +++ b/arch/powerpc/kernel/iomap.c | |||
@@ -12,23 +12,23 @@ | |||
12 | * Here comes the ppc64 implementation of the IOMAP | 12 | * Here comes the ppc64 implementation of the IOMAP |
13 | * interfaces. | 13 | * interfaces. |
14 | */ | 14 | */ |
15 | unsigned int fastcall ioread8(void __iomem *addr) | 15 | unsigned int ioread8(void __iomem *addr) |
16 | { | 16 | { |
17 | return readb(addr); | 17 | return readb(addr); |
18 | } | 18 | } |
19 | unsigned int fastcall ioread16(void __iomem *addr) | 19 | unsigned int ioread16(void __iomem *addr) |
20 | { | 20 | { |
21 | return readw(addr); | 21 | return readw(addr); |
22 | } | 22 | } |
23 | unsigned int fastcall ioread16be(void __iomem *addr) | 23 | unsigned int ioread16be(void __iomem *addr) |
24 | { | 24 | { |
25 | return in_be16(addr); | 25 | return in_be16(addr); |
26 | } | 26 | } |
27 | unsigned int fastcall ioread32(void __iomem *addr) | 27 | unsigned int ioread32(void __iomem *addr) |
28 | { | 28 | { |
29 | return readl(addr); | 29 | return readl(addr); |
30 | } | 30 | } |
31 | unsigned int fastcall ioread32be(void __iomem *addr) | 31 | unsigned int ioread32be(void __iomem *addr) |
32 | { | 32 | { |
33 | return in_be32(addr); | 33 | return in_be32(addr); |
34 | } | 34 | } |
@@ -38,23 +38,23 @@ EXPORT_SYMBOL(ioread16be); | |||
38 | EXPORT_SYMBOL(ioread32); | 38 | EXPORT_SYMBOL(ioread32); |
39 | EXPORT_SYMBOL(ioread32be); | 39 | EXPORT_SYMBOL(ioread32be); |
40 | 40 | ||
41 | void fastcall iowrite8(u8 val, void __iomem *addr) | 41 | void iowrite8(u8 val, void __iomem *addr) |
42 | { | 42 | { |
43 | writeb(val, addr); | 43 | writeb(val, addr); |
44 | } | 44 | } |
45 | void fastcall iowrite16(u16 val, void __iomem *addr) | 45 | void iowrite16(u16 val, void __iomem *addr) |
46 | { | 46 | { |
47 | writew(val, addr); | 47 | writew(val, addr); |
48 | } | 48 | } |
49 | void fastcall iowrite16be(u16 val, void __iomem *addr) | 49 | void iowrite16be(u16 val, void __iomem *addr) |
50 | { | 50 | { |
51 | out_be16(addr, val); | 51 | out_be16(addr, val); |
52 | } | 52 | } |
53 | void fastcall iowrite32(u32 val, void __iomem *addr) | 53 | void iowrite32(u32 val, void __iomem *addr) |
54 | { | 54 | { |
55 | writel(val, addr); | 55 | writel(val, addr); |
56 | } | 56 | } |
57 | void fastcall iowrite32be(u32 val, void __iomem *addr) | 57 | void iowrite32be(u32 val, void __iomem *addr) |
58 | { | 58 | { |
59 | out_be32(addr, val); | 59 | out_be32(addr, val); |
60 | } | 60 | } |
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c index 0bd8c7665834..919fbf568495 100644 --- a/arch/powerpc/kernel/irq.c +++ b/arch/powerpc/kernel/irq.c | |||
@@ -281,10 +281,10 @@ void do_IRQ(struct pt_regs *regs) | |||
281 | 281 | ||
282 | /* | 282 | /* |
283 | * Every platform is required to implement ppc_md.get_irq. | 283 | * Every platform is required to implement ppc_md.get_irq. |
284 | * This function will either return an irq number or -1 to | 284 | * This function will either return an irq number or NO_IRQ to |
285 | * indicate there are no more pending. | 285 | * indicate there are no more pending. |
286 | * The value -2 is for buggy hardware and means that this IRQ | 286 | * The value NO_IRQ_IGNORE is for buggy hardware and means that this |
287 | * has already been handled. -- Tom | 287 | * IRQ has already been handled. -- Tom |
288 | */ | 288 | */ |
289 | irq = ppc_md.get_irq(); | 289 | irq = ppc_md.get_irq(); |
290 | 290 | ||
@@ -604,6 +604,8 @@ unsigned int irq_create_mapping(struct irq_host *host, | |||
604 | */ | 604 | */ |
605 | virq = irq_find_mapping(host, hwirq); | 605 | virq = irq_find_mapping(host, hwirq); |
606 | if (virq != IRQ_NONE) { | 606 | if (virq != IRQ_NONE) { |
607 | if (host->ops->remap) | ||
608 | host->ops->remap(host, virq, hwirq); | ||
607 | pr_debug("irq: -> existing mapping on virq %d\n", virq); | 609 | pr_debug("irq: -> existing mapping on virq %d\n", virq); |
608 | return virq; | 610 | return virq; |
609 | } | 611 | } |
diff --git a/arch/powerpc/kernel/kprobes.c b/arch/powerpc/kernel/kprobes.c index 4657563f8813..dd2886f97e98 100644 --- a/arch/powerpc/kernel/kprobes.c +++ b/arch/powerpc/kernel/kprobes.c | |||
@@ -46,8 +46,8 @@ int __kprobes arch_prepare_kprobe(struct kprobe *p) | |||
46 | if ((unsigned long)p->addr & 0x03) { | 46 | if ((unsigned long)p->addr & 0x03) { |
47 | printk("Attempt to register kprobe at an unaligned address\n"); | 47 | printk("Attempt to register kprobe at an unaligned address\n"); |
48 | ret = -EINVAL; | 48 | ret = -EINVAL; |
49 | } else if (IS_MTMSRD(insn) || IS_RFID(insn)) { | 49 | } else if (IS_MTMSRD(insn) || IS_RFID(insn) || IS_RFI(insn)) { |
50 | printk("Cannot register a kprobe on rfid or mtmsrd\n"); | 50 | printk("Cannot register a kprobe on rfi/rfid or mtmsr[d]\n"); |
51 | ret = -EINVAL; | 51 | ret = -EINVAL; |
52 | } | 52 | } |
53 | 53 | ||
@@ -483,8 +483,12 @@ int __kprobes setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs) | |||
483 | memcpy(&kcb->jprobe_saved_regs, regs, sizeof(struct pt_regs)); | 483 | memcpy(&kcb->jprobe_saved_regs, regs, sizeof(struct pt_regs)); |
484 | 484 | ||
485 | /* setup return addr to the jprobe handler routine */ | 485 | /* setup return addr to the jprobe handler routine */ |
486 | #ifdef CONFIG_PPC64 | ||
486 | regs->nip = (unsigned long)(((func_descr_t *)jp->entry)->entry); | 487 | regs->nip = (unsigned long)(((func_descr_t *)jp->entry)->entry); |
487 | regs->gpr[2] = (unsigned long)(((func_descr_t *)jp->entry)->toc); | 488 | regs->gpr[2] = (unsigned long)(((func_descr_t *)jp->entry)->toc); |
489 | #else | ||
490 | regs->nip = (unsigned long)jp->entry; | ||
491 | #endif | ||
488 | 492 | ||
489 | return 1; | 493 | return 1; |
490 | } | 494 | } |
diff --git a/arch/powerpc/kernel/lparcfg.c b/arch/powerpc/kernel/lparcfg.c index 41c05dcd68f4..0de5a08cf9b0 100644 --- a/arch/powerpc/kernel/lparcfg.c +++ b/arch/powerpc/kernel/lparcfg.c | |||
@@ -439,6 +439,10 @@ static ssize_t lparcfg_write(struct file *file, const char __user * buf, | |||
439 | 439 | ||
440 | ssize_t retval = -ENOMEM; | 440 | ssize_t retval = -ENOMEM; |
441 | 441 | ||
442 | if (!firmware_has_feature(FW_FEATURE_SPLPAR) || | ||
443 | firmware_has_feature(FW_FEATURE_ISERIES)) | ||
444 | return -EINVAL; | ||
445 | |||
442 | kbuf = kmalloc(count, GFP_KERNEL); | 446 | kbuf = kmalloc(count, GFP_KERNEL); |
443 | if (!kbuf) | 447 | if (!kbuf) |
444 | goto out; | 448 | goto out; |
@@ -517,7 +521,7 @@ static int pseries_lparcfg_data(struct seq_file *m, void *v) | |||
517 | static ssize_t lparcfg_write(struct file *file, const char __user * buf, | 521 | static ssize_t lparcfg_write(struct file *file, const char __user * buf, |
518 | size_t count, loff_t * off) | 522 | size_t count, loff_t * off) |
519 | { | 523 | { |
520 | return count; | 524 | return -EINVAL; |
521 | } | 525 | } |
522 | 526 | ||
523 | #endif /* CONFIG_PPC_PSERIES */ | 527 | #endif /* CONFIG_PPC_PSERIES */ |
@@ -570,6 +574,7 @@ static int lparcfg_open(struct inode *inode, struct file *file) | |||
570 | struct file_operations lparcfg_fops = { | 574 | struct file_operations lparcfg_fops = { |
571 | .owner = THIS_MODULE, | 575 | .owner = THIS_MODULE, |
572 | .read = seq_read, | 576 | .read = seq_read, |
577 | .write = lparcfg_write, | ||
573 | .open = lparcfg_open, | 578 | .open = lparcfg_open, |
574 | .release = single_release, | 579 | .release = single_release, |
575 | }; | 580 | }; |
@@ -581,10 +586,8 @@ int __init lparcfg_init(void) | |||
581 | 586 | ||
582 | /* Allow writing if we have FW_FEATURE_SPLPAR */ | 587 | /* Allow writing if we have FW_FEATURE_SPLPAR */ |
583 | if (firmware_has_feature(FW_FEATURE_SPLPAR) && | 588 | if (firmware_has_feature(FW_FEATURE_SPLPAR) && |
584 | !firmware_has_feature(FW_FEATURE_ISERIES)) { | 589 | !firmware_has_feature(FW_FEATURE_ISERIES)) |
585 | lparcfg_fops.write = lparcfg_write; | ||
586 | mode |= S_IWUSR; | 590 | mode |= S_IWUSR; |
587 | } | ||
588 | 591 | ||
589 | ent = create_proc_entry("ppc64/lparcfg", mode, NULL); | 592 | ent = create_proc_entry("ppc64/lparcfg", mode, NULL); |
590 | if (ent) { | 593 | if (ent) { |
diff --git a/arch/powerpc/kernel/misc_64.S b/arch/powerpc/kernel/misc_64.S index 21fd2c662a99..519861da0423 100644 --- a/arch/powerpc/kernel/misc_64.S +++ b/arch/powerpc/kernel/misc_64.S | |||
@@ -311,6 +311,46 @@ _GLOBAL(real_writeb) | |||
311 | blr | 311 | blr |
312 | #endif /* defined(CONFIG_PPC_PMAC) || defined(CONFIG_PPC_MAPLE) */ | 312 | #endif /* defined(CONFIG_PPC_PMAC) || defined(CONFIG_PPC_MAPLE) */ |
313 | 313 | ||
314 | #ifdef CONFIG_PPC_PASEMI | ||
315 | |||
316 | /* No support in all binutils for these yet, so use defines */ | ||
317 | #define LBZCIX(RT,RA,RB) .long (0x7c0006aa|(RT<<21)|(RA<<16)|(RB << 11)) | ||
318 | #define STBCIX(RS,RA,RB) .long (0x7c0007aa|(RS<<21)|(RA<<16)|(RB << 11)) | ||
319 | |||
320 | |||
321 | _GLOBAL(real_205_readb) | ||
322 | mfmsr r7 | ||
323 | ori r0,r7,MSR_DR | ||
324 | xori r0,r0,MSR_DR | ||
325 | sync | ||
326 | mtmsrd r0 | ||
327 | sync | ||
328 | isync | ||
329 | LBZCIX(r3,0,r3) | ||
330 | isync | ||
331 | mtmsrd r7 | ||
332 | sync | ||
333 | isync | ||
334 | blr | ||
335 | |||
336 | _GLOBAL(real_205_writeb) | ||
337 | mfmsr r7 | ||
338 | ori r0,r7,MSR_DR | ||
339 | xori r0,r0,MSR_DR | ||
340 | sync | ||
341 | mtmsrd r0 | ||
342 | sync | ||
343 | isync | ||
344 | STBCIX(r3,0,r4) | ||
345 | isync | ||
346 | mtmsrd r7 | ||
347 | sync | ||
348 | isync | ||
349 | blr | ||
350 | |||
351 | #endif /* CONFIG_PPC_PASEMI */ | ||
352 | |||
353 | |||
314 | #ifdef CONFIG_CPU_FREQ_PMAC64 | 354 | #ifdef CONFIG_CPU_FREQ_PMAC64 |
315 | /* | 355 | /* |
316 | * SCOM access functions for 970 (FX only for now) | 356 | * SCOM access functions for 970 (FX only for now) |
diff --git a/arch/powerpc/kernel/module_32.c b/arch/powerpc/kernel/module_32.c index 8339fd609de0..07a89a398639 100644 --- a/arch/powerpc/kernel/module_32.c +++ b/arch/powerpc/kernel/module_32.c | |||
@@ -224,7 +224,12 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, | |||
224 | /* Low half of the symbol */ | 224 | /* Low half of the symbol */ |
225 | *(uint16_t *)location = value; | 225 | *(uint16_t *)location = value; |
226 | break; | 226 | break; |
227 | 227 | ||
228 | case R_PPC_ADDR16_HI: | ||
229 | /* Higher half of the symbol */ | ||
230 | *(uint16_t *)location = (value >> 16); | ||
231 | break; | ||
232 | |||
228 | case R_PPC_ADDR16_HA: | 233 | case R_PPC_ADDR16_HA: |
229 | /* Sign-adjusted lower 16 bits: PPC ELF ABI says: | 234 | /* Sign-adjusted lower 16 bits: PPC ELF ABI says: |
230 | (((x >> 16) + ((x & 0x8000) ? 1 : 0))) & 0xFFFF. | 235 | (((x >> 16) + ((x & 0x8000) ? 1 : 0))) & 0xFFFF. |
diff --git a/arch/powerpc/kernel/pci_32.c b/arch/powerpc/kernel/pci_32.c index c54f3639c5ad..d8ef2e100505 100644 --- a/arch/powerpc/kernel/pci_32.c +++ b/arch/powerpc/kernel/pci_32.c | |||
@@ -1450,7 +1450,6 @@ int pci_read_irq_line(struct pci_dev *pci_dev) | |||
1450 | return -1; | 1450 | return -1; |
1451 | } | 1451 | } |
1452 | pci_dev->irq = virq; | 1452 | pci_dev->irq = virq; |
1453 | pci_write_config_byte(pci_dev, PCI_INTERRUPT_LINE, virq); | ||
1454 | 1453 | ||
1455 | return 0; | 1454 | return 0; |
1456 | } | 1455 | } |
diff --git a/arch/powerpc/kernel/pci_64.c b/arch/powerpc/kernel/pci_64.c index 01f18c683407..7e97d71a5f8f 100644 --- a/arch/powerpc/kernel/pci_64.c +++ b/arch/powerpc/kernel/pci_64.c | |||
@@ -381,8 +381,6 @@ struct pci_dev *of_create_pci_dev(struct device_node *node, | |||
381 | 381 | ||
382 | pci_device_add(dev, bus); | 382 | pci_device_add(dev, bus); |
383 | 383 | ||
384 | /* XXX pci_scan_msi_device(dev); */ | ||
385 | |||
386 | return dev; | 384 | return dev; |
387 | } | 385 | } |
388 | EXPORT_SYMBOL(of_create_pci_dev); | 386 | EXPORT_SYMBOL(of_create_pci_dev); |
@@ -1325,7 +1323,6 @@ int pci_read_irq_line(struct pci_dev *pci_dev) | |||
1325 | DBG(" -> mapped to linux irq %d\n", virq); | 1323 | DBG(" -> mapped to linux irq %d\n", virq); |
1326 | 1324 | ||
1327 | pci_dev->irq = virq; | 1325 | pci_dev->irq = virq; |
1328 | pci_write_config_byte(pci_dev, PCI_INTERRUPT_LINE, virq); | ||
1329 | 1326 | ||
1330 | return 0; | 1327 | return 0; |
1331 | } | 1328 | } |
diff --git a/arch/powerpc/kernel/pmc.c b/arch/powerpc/kernel/pmc.c index 3d8f6f44641e..24d7b7c99bb9 100644 --- a/arch/powerpc/kernel/pmc.c +++ b/arch/powerpc/kernel/pmc.c | |||
@@ -17,40 +17,25 @@ | |||
17 | #include <linux/module.h> | 17 | #include <linux/module.h> |
18 | 18 | ||
19 | #include <asm/processor.h> | 19 | #include <asm/processor.h> |
20 | #include <asm/cputable.h> | ||
20 | #include <asm/pmc.h> | 21 | #include <asm/pmc.h> |
21 | 22 | ||
22 | #if defined(CONFIG_FSL_BOOKE) && !defined(CONFIG_E200) | 23 | #ifndef MMCR0_PMA0 |
23 | static void dummy_perf(struct pt_regs *regs) | 24 | #define MMCR0_PMA0 0 |
24 | { | ||
25 | unsigned int pmgc0 = mfpmr(PMRN_PMGC0); | ||
26 | |||
27 | pmgc0 &= ~PMGC0_PMIE; | ||
28 | mtpmr(PMRN_PMGC0, pmgc0); | ||
29 | } | ||
30 | #elif defined(CONFIG_PPC64) || defined(CONFIG_6xx) | ||
31 | |||
32 | #ifndef MMCR0_PMAO | ||
33 | #define MMCR0_PMAO 0 | ||
34 | #endif | 25 | #endif |
35 | 26 | ||
36 | /* Ensure exceptions are disabled */ | ||
37 | static void dummy_perf(struct pt_regs *regs) | 27 | static void dummy_perf(struct pt_regs *regs) |
38 | { | 28 | { |
39 | unsigned int mmcr0 = mfspr(SPRN_MMCR0); | 29 | #if defined(CONFIG_FSL_BOOKE) && !defined(CONFIG_E200) |
40 | 30 | mtpmr(PMRN_PMGC0, mfpmr(PMRN_PMGC0) & ~PMGC0_PMIE); | |
41 | mmcr0 &= ~(MMCR0_PMXE|MMCR0_PMAO); | 31 | #elif defined(CONFIG_PPC64) || defined(CONFIG_6xx) |
42 | mtspr(SPRN_MMCR0, mmcr0); | 32 | if (cur_cpu_spec->pmc_type == PPC_PMC_IBM) |
43 | } | 33 | mtspr(SPRN_MMCR0, mfspr(SPRN_MMCR0) & ~(MMCR0_PMXE|MMCR0_PMA0)); |
44 | #else | 34 | #else |
45 | /* Ensure exceptions are disabled */ | 35 | mtspr(SPRN_MMCR0, mfspr(SPRN_MMCR0) & ~MMCR0_PMXE); |
46 | static void dummy_perf(struct pt_regs *regs) | ||
47 | { | ||
48 | unsigned int mmcr0 = mfspr(SPRN_MMCR0); | ||
49 | |||
50 | mmcr0 &= ~(MMCR0_PMXE); | ||
51 | mtspr(SPRN_MMCR0, mmcr0); | ||
52 | } | ||
53 | #endif | 36 | #endif |
37 | } | ||
38 | |||
54 | 39 | ||
55 | static DEFINE_SPINLOCK(pmc_owner_lock); | 40 | static DEFINE_SPINLOCK(pmc_owner_lock); |
56 | static void *pmc_owner_caller; /* mostly for debugging */ | 41 | static void *pmc_owner_caller; /* mostly for debugging */ |
diff --git a/arch/powerpc/kernel/ppc_ksyms.c b/arch/powerpc/kernel/ppc_ksyms.c index 95776b6af4e2..ecee596d28f6 100644 --- a/arch/powerpc/kernel/ppc_ksyms.c +++ b/arch/powerpc/kernel/ppc_ksyms.c | |||
@@ -44,6 +44,7 @@ | |||
44 | #include <asm/btext.h> | 44 | #include <asm/btext.h> |
45 | #include <asm/div64.h> | 45 | #include <asm/div64.h> |
46 | #include <asm/signal.h> | 46 | #include <asm/signal.h> |
47 | #include <asm/dcr.h> | ||
47 | 48 | ||
48 | #ifdef CONFIG_8xx | 49 | #ifdef CONFIG_8xx |
49 | #include <asm/commproc.h> | 50 | #include <asm/commproc.h> |
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c index 1fc732a552db..3be52d693eca 100644 --- a/arch/powerpc/kernel/prom.c +++ b/arch/powerpc/kernel/prom.c | |||
@@ -1221,8 +1221,7 @@ struct device_node *of_find_node_by_name(struct device_node *from, | |||
1221 | if (np->name != NULL && strcasecmp(np->name, name) == 0 | 1221 | if (np->name != NULL && strcasecmp(np->name, name) == 0 |
1222 | && of_node_get(np)) | 1222 | && of_node_get(np)) |
1223 | break; | 1223 | break; |
1224 | if (from) | 1224 | of_node_put(from); |
1225 | of_node_put(from); | ||
1226 | read_unlock(&devtree_lock); | 1225 | read_unlock(&devtree_lock); |
1227 | return np; | 1226 | return np; |
1228 | } | 1227 | } |
@@ -1250,8 +1249,7 @@ struct device_node *of_find_node_by_type(struct device_node *from, | |||
1250 | if (np->type != 0 && strcasecmp(np->type, type) == 0 | 1249 | if (np->type != 0 && strcasecmp(np->type, type) == 0 |
1251 | && of_node_get(np)) | 1250 | && of_node_get(np)) |
1252 | break; | 1251 | break; |
1253 | if (from) | 1252 | of_node_put(from); |
1254 | of_node_put(from); | ||
1255 | read_unlock(&devtree_lock); | 1253 | read_unlock(&devtree_lock); |
1256 | return np; | 1254 | return np; |
1257 | } | 1255 | } |
@@ -1285,8 +1283,7 @@ struct device_node *of_find_compatible_node(struct device_node *from, | |||
1285 | if (device_is_compatible(np, compatible) && of_node_get(np)) | 1283 | if (device_is_compatible(np, compatible) && of_node_get(np)) |
1286 | break; | 1284 | break; |
1287 | } | 1285 | } |
1288 | if (from) | 1286 | of_node_put(from); |
1289 | of_node_put(from); | ||
1290 | read_unlock(&devtree_lock); | 1287 | read_unlock(&devtree_lock); |
1291 | return np; | 1288 | return np; |
1292 | } | 1289 | } |
@@ -1329,8 +1326,7 @@ struct device_node *of_find_node_by_phandle(phandle handle) | |||
1329 | for (np = allnodes; np != 0; np = np->allnext) | 1326 | for (np = allnodes; np != 0; np = np->allnext) |
1330 | if (np->linux_phandle == handle) | 1327 | if (np->linux_phandle == handle) |
1331 | break; | 1328 | break; |
1332 | if (np) | 1329 | of_node_get(np); |
1333 | of_node_get(np); | ||
1334 | read_unlock(&devtree_lock); | 1330 | read_unlock(&devtree_lock); |
1335 | return np; | 1331 | return np; |
1336 | } | 1332 | } |
@@ -1353,8 +1349,7 @@ struct device_node *of_find_all_nodes(struct device_node *prev) | |||
1353 | for (; np != 0; np = np->allnext) | 1349 | for (; np != 0; np = np->allnext) |
1354 | if (of_node_get(np)) | 1350 | if (of_node_get(np)) |
1355 | break; | 1351 | break; |
1356 | if (prev) | 1352 | of_node_put(prev); |
1357 | of_node_put(prev); | ||
1358 | read_unlock(&devtree_lock); | 1353 | read_unlock(&devtree_lock); |
1359 | return np; | 1354 | return np; |
1360 | } | 1355 | } |
@@ -1399,8 +1394,7 @@ struct device_node *of_get_next_child(const struct device_node *node, | |||
1399 | for (; next != 0; next = next->sibling) | 1394 | for (; next != 0; next = next->sibling) |
1400 | if (of_node_get(next)) | 1395 | if (of_node_get(next)) |
1401 | break; | 1396 | break; |
1402 | if (prev) | 1397 | of_node_put(prev); |
1403 | of_node_put(prev); | ||
1404 | read_unlock(&devtree_lock); | 1398 | read_unlock(&devtree_lock); |
1405 | return next; | 1399 | return next; |
1406 | } | 1400 | } |
diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c index 975102a020d9..cc44c7b975aa 100644 --- a/arch/powerpc/kernel/ptrace.c +++ b/arch/powerpc/kernel/ptrace.c | |||
@@ -532,16 +532,22 @@ void do_syscall_trace_enter(struct pt_regs *regs) | |||
532 | && (current->ptrace & PT_PTRACED)) | 532 | && (current->ptrace & PT_PTRACED)) |
533 | do_syscall_trace(); | 533 | do_syscall_trace(); |
534 | 534 | ||
535 | if (unlikely(current->audit_context)) | 535 | if (unlikely(current->audit_context)) { |
536 | audit_syscall_entry( | 536 | #ifdef CONFIG_PPC64 |
537 | #ifdef CONFIG_PPC32 | 537 | if (!test_thread_flag(TIF_32BIT)) |
538 | AUDIT_ARCH_PPC, | 538 | audit_syscall_entry(AUDIT_ARCH_PPC64, |
539 | #else | 539 | regs->gpr[0], |
540 | test_thread_flag(TIF_32BIT)?AUDIT_ARCH_PPC:AUDIT_ARCH_PPC64, | 540 | regs->gpr[3], regs->gpr[4], |
541 | regs->gpr[5], regs->gpr[6]); | ||
542 | else | ||
541 | #endif | 543 | #endif |
542 | regs->gpr[0], | 544 | audit_syscall_entry(AUDIT_ARCH_PPC, |
543 | regs->gpr[3], regs->gpr[4], | 545 | regs->gpr[0], |
544 | regs->gpr[5], regs->gpr[6]); | 546 | regs->gpr[3] & 0xffffffff, |
547 | regs->gpr[4] & 0xffffffff, | ||
548 | regs->gpr[5] & 0xffffffff, | ||
549 | regs->gpr[6] & 0xffffffff); | ||
550 | } | ||
545 | } | 551 | } |
546 | 552 | ||
547 | void do_syscall_trace_leave(struct pt_regs *regs) | 553 | void do_syscall_trace_leave(struct pt_regs *regs) |
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c index 61c65d19ef06..6a19fa40dcee 100644 --- a/arch/powerpc/kernel/setup_32.c +++ b/arch/powerpc/kernel/setup_32.c | |||
@@ -65,6 +65,7 @@ int have_of = 1; | |||
65 | 65 | ||
66 | #ifdef CONFIG_VGA_CONSOLE | 66 | #ifdef CONFIG_VGA_CONSOLE |
67 | unsigned long vgacon_remap_base; | 67 | unsigned long vgacon_remap_base; |
68 | EXPORT_SYMBOL(vgacon_remap_base); | ||
68 | #endif | 69 | #endif |
69 | 70 | ||
70 | /* | 71 | /* |
diff --git a/arch/powerpc/kernel/sysfs.c b/arch/powerpc/kernel/sysfs.c index 400ab2b946e7..d57818aea081 100644 --- a/arch/powerpc/kernel/sysfs.c +++ b/arch/powerpc/kernel/sysfs.c | |||
@@ -169,6 +169,11 @@ static ssize_t __attribute_used__ \ | |||
169 | return count; \ | 169 | return count; \ |
170 | } | 170 | } |
171 | 171 | ||
172 | |||
173 | /* Let's define all possible registers, we'll only hook up the ones | ||
174 | * that are implemented on the current processor | ||
175 | */ | ||
176 | |||
172 | SYSFS_PMCSETUP(mmcr0, SPRN_MMCR0); | 177 | SYSFS_PMCSETUP(mmcr0, SPRN_MMCR0); |
173 | SYSFS_PMCSETUP(mmcr1, SPRN_MMCR1); | 178 | SYSFS_PMCSETUP(mmcr1, SPRN_MMCR1); |
174 | SYSFS_PMCSETUP(mmcra, SPRN_MMCRA); | 179 | SYSFS_PMCSETUP(mmcra, SPRN_MMCRA); |
@@ -184,55 +189,87 @@ SYSFS_PMCSETUP(purr, SPRN_PURR); | |||
184 | SYSFS_PMCSETUP(spurr, SPRN_SPURR); | 189 | SYSFS_PMCSETUP(spurr, SPRN_SPURR); |
185 | SYSFS_PMCSETUP(dscr, SPRN_DSCR); | 190 | SYSFS_PMCSETUP(dscr, SPRN_DSCR); |
186 | 191 | ||
187 | static SYSDEV_ATTR(mmcr0, 0600, show_mmcr0, store_mmcr0); | 192 | SYSFS_PMCSETUP(pa6t_pmc0, PA6T_SPRN_PMC0); |
188 | static SYSDEV_ATTR(mmcr1, 0600, show_mmcr1, store_mmcr1); | 193 | SYSFS_PMCSETUP(pa6t_pmc1, PA6T_SPRN_PMC1); |
194 | SYSFS_PMCSETUP(pa6t_pmc2, PA6T_SPRN_PMC2); | ||
195 | SYSFS_PMCSETUP(pa6t_pmc3, PA6T_SPRN_PMC3); | ||
196 | SYSFS_PMCSETUP(pa6t_pmc4, PA6T_SPRN_PMC4); | ||
197 | SYSFS_PMCSETUP(pa6t_pmc5, PA6T_SPRN_PMC5); | ||
198 | |||
199 | |||
189 | static SYSDEV_ATTR(mmcra, 0600, show_mmcra, store_mmcra); | 200 | static SYSDEV_ATTR(mmcra, 0600, show_mmcra, store_mmcra); |
190 | static SYSDEV_ATTR(pmc1, 0600, show_pmc1, store_pmc1); | ||
191 | static SYSDEV_ATTR(pmc2, 0600, show_pmc2, store_pmc2); | ||
192 | static SYSDEV_ATTR(pmc3, 0600, show_pmc3, store_pmc3); | ||
193 | static SYSDEV_ATTR(pmc4, 0600, show_pmc4, store_pmc4); | ||
194 | static SYSDEV_ATTR(pmc5, 0600, show_pmc5, store_pmc5); | ||
195 | static SYSDEV_ATTR(pmc6, 0600, show_pmc6, store_pmc6); | ||
196 | static SYSDEV_ATTR(pmc7, 0600, show_pmc7, store_pmc7); | ||
197 | static SYSDEV_ATTR(pmc8, 0600, show_pmc8, store_pmc8); | ||
198 | static SYSDEV_ATTR(purr, 0600, show_purr, NULL); | ||
199 | static SYSDEV_ATTR(spurr, 0600, show_spurr, NULL); | 201 | static SYSDEV_ATTR(spurr, 0600, show_spurr, NULL); |
200 | static SYSDEV_ATTR(dscr, 0600, show_dscr, store_dscr); | 202 | static SYSDEV_ATTR(dscr, 0600, show_dscr, store_dscr); |
203 | static SYSDEV_ATTR(purr, 0600, show_purr, store_purr); | ||
204 | |||
205 | static struct sysdev_attribute ibm_common_attrs[] = { | ||
206 | _SYSDEV_ATTR(mmcr0, 0600, show_mmcr0, store_mmcr0), | ||
207 | _SYSDEV_ATTR(mmcr1, 0600, show_mmcr1, store_mmcr1), | ||
208 | }; | ||
209 | |||
210 | static struct sysdev_attribute ibm_pmc_attrs[] = { | ||
211 | _SYSDEV_ATTR(pmc1, 0600, show_pmc1, store_pmc1), | ||
212 | _SYSDEV_ATTR(pmc2, 0600, show_pmc2, store_pmc2), | ||
213 | _SYSDEV_ATTR(pmc3, 0600, show_pmc3, store_pmc3), | ||
214 | _SYSDEV_ATTR(pmc4, 0600, show_pmc4, store_pmc4), | ||
215 | _SYSDEV_ATTR(pmc5, 0600, show_pmc5, store_pmc5), | ||
216 | _SYSDEV_ATTR(pmc6, 0600, show_pmc6, store_pmc6), | ||
217 | _SYSDEV_ATTR(pmc7, 0600, show_pmc7, store_pmc7), | ||
218 | _SYSDEV_ATTR(pmc8, 0600, show_pmc8, store_pmc8), | ||
219 | }; | ||
220 | |||
221 | static struct sysdev_attribute pa6t_attrs[] = { | ||
222 | _SYSDEV_ATTR(mmcr0, 0600, show_mmcr0, store_mmcr0), | ||
223 | _SYSDEV_ATTR(mmcr1, 0600, show_mmcr1, store_mmcr1), | ||
224 | _SYSDEV_ATTR(pmc0, 0600, show_pa6t_pmc0, store_pa6t_pmc0), | ||
225 | _SYSDEV_ATTR(pmc1, 0600, show_pa6t_pmc1, store_pa6t_pmc1), | ||
226 | _SYSDEV_ATTR(pmc2, 0600, show_pa6t_pmc2, store_pa6t_pmc2), | ||
227 | _SYSDEV_ATTR(pmc3, 0600, show_pa6t_pmc3, store_pa6t_pmc3), | ||
228 | _SYSDEV_ATTR(pmc4, 0600, show_pa6t_pmc4, store_pa6t_pmc4), | ||
229 | _SYSDEV_ATTR(pmc5, 0600, show_pa6t_pmc5, store_pa6t_pmc5), | ||
230 | }; | ||
231 | |||
201 | 232 | ||
202 | static void register_cpu_online(unsigned int cpu) | 233 | static void register_cpu_online(unsigned int cpu) |
203 | { | 234 | { |
204 | struct cpu *c = &per_cpu(cpu_devices, cpu); | 235 | struct cpu *c = &per_cpu(cpu_devices, cpu); |
205 | struct sys_device *s = &c->sysdev; | 236 | struct sys_device *s = &c->sysdev; |
237 | struct sysdev_attribute *attrs, *pmc_attrs; | ||
238 | int i, nattrs; | ||
206 | 239 | ||
207 | if (!firmware_has_feature(FW_FEATURE_ISERIES) && | 240 | if (!firmware_has_feature(FW_FEATURE_ISERIES) && |
208 | cpu_has_feature(CPU_FTR_SMT)) | 241 | cpu_has_feature(CPU_FTR_SMT)) |
209 | sysdev_create_file(s, &attr_smt_snooze_delay); | 242 | sysdev_create_file(s, &attr_smt_snooze_delay); |
210 | 243 | ||
211 | /* PMC stuff */ | 244 | /* PMC stuff */ |
245 | switch (cur_cpu_spec->pmc_type) { | ||
246 | case PPC_PMC_IBM: | ||
247 | attrs = ibm_common_attrs; | ||
248 | nattrs = sizeof(ibm_common_attrs) / sizeof(struct sysdev_attribute); | ||
249 | pmc_attrs = ibm_pmc_attrs; | ||
250 | break; | ||
251 | case PPC_PMC_PA6T: | ||
252 | /* PA Semi starts counting at PMC0 */ | ||
253 | attrs = pa6t_attrs; | ||
254 | nattrs = sizeof(pa6t_attrs) / sizeof(struct sysdev_attribute); | ||
255 | pmc_attrs = NULL; | ||
256 | break; | ||
257 | default: | ||
258 | attrs = NULL; | ||
259 | nattrs = 0; | ||
260 | pmc_attrs = NULL; | ||
261 | } | ||
262 | |||
263 | for (i = 0; i < nattrs; i++) | ||
264 | sysdev_create_file(s, &attrs[i]); | ||
212 | 265 | ||
213 | sysdev_create_file(s, &attr_mmcr0); | 266 | if (pmc_attrs) |
214 | sysdev_create_file(s, &attr_mmcr1); | 267 | for (i = 0; i < cur_cpu_spec->num_pmcs; i++) |
268 | sysdev_create_file(s, &pmc_attrs[i]); | ||
215 | 269 | ||
216 | if (cpu_has_feature(CPU_FTR_MMCRA)) | 270 | if (cpu_has_feature(CPU_FTR_MMCRA)) |
217 | sysdev_create_file(s, &attr_mmcra); | 271 | sysdev_create_file(s, &attr_mmcra); |
218 | 272 | ||
219 | if (cur_cpu_spec->num_pmcs >= 1) | ||
220 | sysdev_create_file(s, &attr_pmc1); | ||
221 | if (cur_cpu_spec->num_pmcs >= 2) | ||
222 | sysdev_create_file(s, &attr_pmc2); | ||
223 | if (cur_cpu_spec->num_pmcs >= 3) | ||
224 | sysdev_create_file(s, &attr_pmc3); | ||
225 | if (cur_cpu_spec->num_pmcs >= 4) | ||
226 | sysdev_create_file(s, &attr_pmc4); | ||
227 | if (cur_cpu_spec->num_pmcs >= 5) | ||
228 | sysdev_create_file(s, &attr_pmc5); | ||
229 | if (cur_cpu_spec->num_pmcs >= 6) | ||
230 | sysdev_create_file(s, &attr_pmc6); | ||
231 | if (cur_cpu_spec->num_pmcs >= 7) | ||
232 | sysdev_create_file(s, &attr_pmc7); | ||
233 | if (cur_cpu_spec->num_pmcs >= 8) | ||
234 | sysdev_create_file(s, &attr_pmc8); | ||
235 | |||
236 | if (cpu_has_feature(CPU_FTR_PURR)) | 273 | if (cpu_has_feature(CPU_FTR_PURR)) |
237 | sysdev_create_file(s, &attr_purr); | 274 | sysdev_create_file(s, &attr_purr); |
238 | 275 | ||
@@ -248,6 +285,8 @@ static void unregister_cpu_online(unsigned int cpu) | |||
248 | { | 285 | { |
249 | struct cpu *c = &per_cpu(cpu_devices, cpu); | 286 | struct cpu *c = &per_cpu(cpu_devices, cpu); |
250 | struct sys_device *s = &c->sysdev; | 287 | struct sys_device *s = &c->sysdev; |
288 | struct sysdev_attribute *attrs, *pmc_attrs; | ||
289 | int i, nattrs; | ||
251 | 290 | ||
252 | BUG_ON(!c->hotpluggable); | 291 | BUG_ON(!c->hotpluggable); |
253 | 292 | ||
@@ -256,30 +295,34 @@ static void unregister_cpu_online(unsigned int cpu) | |||
256 | sysdev_remove_file(s, &attr_smt_snooze_delay); | 295 | sysdev_remove_file(s, &attr_smt_snooze_delay); |
257 | 296 | ||
258 | /* PMC stuff */ | 297 | /* PMC stuff */ |
298 | switch (cur_cpu_spec->pmc_type) { | ||
299 | case PPC_PMC_IBM: | ||
300 | attrs = ibm_common_attrs; | ||
301 | nattrs = sizeof(ibm_common_attrs) / sizeof(struct sysdev_attribute); | ||
302 | pmc_attrs = ibm_pmc_attrs; | ||
303 | break; | ||
304 | case PPC_PMC_PA6T: | ||
305 | /* PA Semi starts counting at PMC0 */ | ||
306 | attrs = pa6t_attrs; | ||
307 | nattrs = sizeof(pa6t_attrs) / sizeof(struct sysdev_attribute); | ||
308 | pmc_attrs = NULL; | ||
309 | break; | ||
310 | default: | ||
311 | attrs = NULL; | ||
312 | nattrs = 0; | ||
313 | pmc_attrs = NULL; | ||
314 | } | ||
259 | 315 | ||
260 | sysdev_remove_file(s, &attr_mmcr0); | 316 | for (i = 0; i < nattrs; i++) |
261 | sysdev_remove_file(s, &attr_mmcr1); | 317 | sysdev_remove_file(s, &attrs[i]); |
318 | |||
319 | if (pmc_attrs) | ||
320 | for (i = 0; i < cur_cpu_spec->num_pmcs; i++) | ||
321 | sysdev_remove_file(s, &pmc_attrs[i]); | ||
262 | 322 | ||
263 | if (cpu_has_feature(CPU_FTR_MMCRA)) | 323 | if (cpu_has_feature(CPU_FTR_MMCRA)) |
264 | sysdev_remove_file(s, &attr_mmcra); | 324 | sysdev_remove_file(s, &attr_mmcra); |
265 | 325 | ||
266 | if (cur_cpu_spec->num_pmcs >= 1) | ||
267 | sysdev_remove_file(s, &attr_pmc1); | ||
268 | if (cur_cpu_spec->num_pmcs >= 2) | ||
269 | sysdev_remove_file(s, &attr_pmc2); | ||
270 | if (cur_cpu_spec->num_pmcs >= 3) | ||
271 | sysdev_remove_file(s, &attr_pmc3); | ||
272 | if (cur_cpu_spec->num_pmcs >= 4) | ||
273 | sysdev_remove_file(s, &attr_pmc4); | ||
274 | if (cur_cpu_spec->num_pmcs >= 5) | ||
275 | sysdev_remove_file(s, &attr_pmc5); | ||
276 | if (cur_cpu_spec->num_pmcs >= 6) | ||
277 | sysdev_remove_file(s, &attr_pmc6); | ||
278 | if (cur_cpu_spec->num_pmcs >= 7) | ||
279 | sysdev_remove_file(s, &attr_pmc7); | ||
280 | if (cur_cpu_spec->num_pmcs >= 8) | ||
281 | sysdev_remove_file(s, &attr_pmc8); | ||
282 | |||
283 | if (cpu_has_feature(CPU_FTR_PURR)) | 326 | if (cpu_has_feature(CPU_FTR_PURR)) |
284 | sysdev_remove_file(s, &attr_purr); | 327 | sysdev_remove_file(s, &attr_purr); |
285 | 328 | ||
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index 535f50665647..dcc6f159fd94 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c | |||
@@ -174,7 +174,7 @@ void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr) | |||
174 | * generate the same exception over and over again and we get | 174 | * generate the same exception over and over again and we get |
175 | * nowhere. Better to kill it and let the kernel panic. | 175 | * nowhere. Better to kill it and let the kernel panic. |
176 | */ | 176 | */ |
177 | if (current->pid == 1) { | 177 | if (is_init(current)) { |
178 | __sighandler_t handler; | 178 | __sighandler_t handler; |
179 | 179 | ||
180 | spin_lock_irq(¤t->sighand->siglock); | 180 | spin_lock_irq(¤t->sighand->siglock); |
@@ -535,34 +535,40 @@ static void emulate_single_step(struct pt_regs *regs) | |||
535 | } | 535 | } |
536 | } | 536 | } |
537 | 537 | ||
538 | static void parse_fpe(struct pt_regs *regs) | 538 | static inline int __parse_fpscr(unsigned long fpscr) |
539 | { | 539 | { |
540 | int code = 0; | 540 | int ret = 0; |
541 | unsigned long fpscr; | ||
542 | |||
543 | flush_fp_to_thread(current); | ||
544 | |||
545 | fpscr = current->thread.fpscr.val; | ||
546 | 541 | ||
547 | /* Invalid operation */ | 542 | /* Invalid operation */ |
548 | if ((fpscr & FPSCR_VE) && (fpscr & FPSCR_VX)) | 543 | if ((fpscr & FPSCR_VE) && (fpscr & FPSCR_VX)) |
549 | code = FPE_FLTINV; | 544 | ret = FPE_FLTINV; |
550 | 545 | ||
551 | /* Overflow */ | 546 | /* Overflow */ |
552 | else if ((fpscr & FPSCR_OE) && (fpscr & FPSCR_OX)) | 547 | else if ((fpscr & FPSCR_OE) && (fpscr & FPSCR_OX)) |
553 | code = FPE_FLTOVF; | 548 | ret = FPE_FLTOVF; |
554 | 549 | ||
555 | /* Underflow */ | 550 | /* Underflow */ |
556 | else if ((fpscr & FPSCR_UE) && (fpscr & FPSCR_UX)) | 551 | else if ((fpscr & FPSCR_UE) && (fpscr & FPSCR_UX)) |
557 | code = FPE_FLTUND; | 552 | ret = FPE_FLTUND; |
558 | 553 | ||
559 | /* Divide by zero */ | 554 | /* Divide by zero */ |
560 | else if ((fpscr & FPSCR_ZE) && (fpscr & FPSCR_ZX)) | 555 | else if ((fpscr & FPSCR_ZE) && (fpscr & FPSCR_ZX)) |
561 | code = FPE_FLTDIV; | 556 | ret = FPE_FLTDIV; |
562 | 557 | ||
563 | /* Inexact result */ | 558 | /* Inexact result */ |
564 | else if ((fpscr & FPSCR_XE) && (fpscr & FPSCR_XX)) | 559 | else if ((fpscr & FPSCR_XE) && (fpscr & FPSCR_XX)) |
565 | code = FPE_FLTRES; | 560 | ret = FPE_FLTRES; |
561 | |||
562 | return ret; | ||
563 | } | ||
564 | |||
565 | static void parse_fpe(struct pt_regs *regs) | ||
566 | { | ||
567 | int code = 0; | ||
568 | |||
569 | flush_fp_to_thread(current); | ||
570 | |||
571 | code = __parse_fpscr(current->thread.fpscr.val); | ||
566 | 572 | ||
567 | _exception(SIGFPE, regs, code, regs->nip); | 573 | _exception(SIGFPE, regs, code, regs->nip); |
568 | } | 574 | } |
@@ -739,20 +745,7 @@ void __kprobes program_check_exception(struct pt_regs *regs) | |||
739 | extern int do_mathemu(struct pt_regs *regs); | 745 | extern int do_mathemu(struct pt_regs *regs); |
740 | 746 | ||
741 | /* We can now get here via a FP Unavailable exception if the core | 747 | /* We can now get here via a FP Unavailable exception if the core |
742 | * has no FPU, in that case no reason flags will be set */ | 748 | * has no FPU, in that case the reason flags will be 0 */ |
743 | #ifdef CONFIG_MATH_EMULATION | ||
744 | /* (reason & REASON_ILLEGAL) would be the obvious thing here, | ||
745 | * but there seems to be a hardware bug on the 405GP (RevD) | ||
746 | * that means ESR is sometimes set incorrectly - either to | ||
747 | * ESR_DST (!?) or 0. In the process of chasing this with the | ||
748 | * hardware people - not sure if it can happen on any illegal | ||
749 | * instruction or only on FP instructions, whether there is a | ||
750 | * pattern to occurences etc. -dgibson 31/Mar/2003 */ | ||
751 | if (!(reason & REASON_TRAP) && do_mathemu(regs) == 0) { | ||
752 | emulate_single_step(regs); | ||
753 | return; | ||
754 | } | ||
755 | #endif /* CONFIG_MATH_EMULATION */ | ||
756 | 749 | ||
757 | if (reason & REASON_FP) { | 750 | if (reason & REASON_FP) { |
758 | /* IEEE FP exception */ | 751 | /* IEEE FP exception */ |
@@ -778,6 +771,31 @@ void __kprobes program_check_exception(struct pt_regs *regs) | |||
778 | 771 | ||
779 | local_irq_enable(); | 772 | local_irq_enable(); |
780 | 773 | ||
774 | #ifdef CONFIG_MATH_EMULATION | ||
775 | /* (reason & REASON_ILLEGAL) would be the obvious thing here, | ||
776 | * but there seems to be a hardware bug on the 405GP (RevD) | ||
777 | * that means ESR is sometimes set incorrectly - either to | ||
778 | * ESR_DST (!?) or 0. In the process of chasing this with the | ||
779 | * hardware people - not sure if it can happen on any illegal | ||
780 | * instruction or only on FP instructions, whether there is a | ||
781 | * pattern to occurences etc. -dgibson 31/Mar/2003 */ | ||
782 | switch (do_mathemu(regs)) { | ||
783 | case 0: | ||
784 | emulate_single_step(regs); | ||
785 | return; | ||
786 | case 1: { | ||
787 | int code = 0; | ||
788 | code = __parse_fpscr(current->thread.fpscr.val); | ||
789 | _exception(SIGFPE, regs, code, regs->nip); | ||
790 | return; | ||
791 | } | ||
792 | case -EFAULT: | ||
793 | _exception(SIGSEGV, regs, SEGV_MAPERR, regs->nip); | ||
794 | return; | ||
795 | } | ||
796 | /* fall through on any other errors */ | ||
797 | #endif /* CONFIG_MATH_EMULATION */ | ||
798 | |||
781 | /* Try to emulate it if we should. */ | 799 | /* Try to emulate it if we should. */ |
782 | if (reason & (REASON_ILLEGAL | REASON_PRIVILEGED)) { | 800 | if (reason & (REASON_ILLEGAL | REASON_PRIVILEGED)) { |
783 | switch (emulate_instruction(regs)) { | 801 | switch (emulate_instruction(regs)) { |
@@ -891,18 +909,39 @@ void SoftwareEmulation(struct pt_regs *regs) | |||
891 | 909 | ||
892 | #ifdef CONFIG_MATH_EMULATION | 910 | #ifdef CONFIG_MATH_EMULATION |
893 | errcode = do_mathemu(regs); | 911 | errcode = do_mathemu(regs); |
912 | |||
913 | switch (errcode) { | ||
914 | case 0: | ||
915 | emulate_single_step(regs); | ||
916 | return; | ||
917 | case 1: { | ||
918 | int code = 0; | ||
919 | code = __parse_fpscr(current->thread.fpscr.val); | ||
920 | _exception(SIGFPE, regs, code, regs->nip); | ||
921 | return; | ||
922 | } | ||
923 | case -EFAULT: | ||
924 | _exception(SIGSEGV, regs, SEGV_MAPERR, regs->nip); | ||
925 | return; | ||
926 | default: | ||
927 | _exception(SIGILL, regs, ILL_ILLOPC, regs->nip); | ||
928 | return; | ||
929 | } | ||
930 | |||
894 | #else | 931 | #else |
895 | errcode = Soft_emulate_8xx(regs); | 932 | errcode = Soft_emulate_8xx(regs); |
896 | #endif | 933 | switch (errcode) { |
897 | if (errcode) { | 934 | case 0: |
898 | if (errcode > 0) | ||
899 | _exception(SIGFPE, regs, 0, 0); | ||
900 | else if (errcode == -EFAULT) | ||
901 | _exception(SIGSEGV, regs, 0, 0); | ||
902 | else | ||
903 | _exception(SIGILL, regs, ILL_ILLOPC, regs->nip); | ||
904 | } else | ||
905 | emulate_single_step(regs); | 935 | emulate_single_step(regs); |
936 | return; | ||
937 | case 1: | ||
938 | _exception(SIGILL, regs, ILL_ILLOPC, regs->nip); | ||
939 | return; | ||
940 | case -EFAULT: | ||
941 | _exception(SIGSEGV, regs, SEGV_MAPERR, regs->nip); | ||
942 | return; | ||
943 | } | ||
944 | #endif | ||
906 | } | 945 | } |
907 | #endif /* CONFIG_8xx */ | 946 | #endif /* CONFIG_8xx */ |
908 | 947 | ||
diff --git a/arch/powerpc/kernel/udbg.c b/arch/powerpc/kernel/udbg.c index 5730906b23d5..8f5afdbad0d5 100644 --- a/arch/powerpc/kernel/udbg.c +++ b/arch/powerpc/kernel/udbg.c | |||
@@ -45,6 +45,10 @@ void __init udbg_early_init(void) | |||
45 | #elif defined(CONFIG_PPC_EARLY_DEBUG_ISERIES) | 45 | #elif defined(CONFIG_PPC_EARLY_DEBUG_ISERIES) |
46 | /* For iSeries - hit Ctrl-x Ctrl-x to see the output */ | 46 | /* For iSeries - hit Ctrl-x Ctrl-x to see the output */ |
47 | udbg_init_iseries(); | 47 | udbg_init_iseries(); |
48 | #elif defined(CONFIG_PPC_EARLY_DEBUG_BEAT) | ||
49 | udbg_init_debug_beat(); | ||
50 | #elif defined(CONFIG_PPC_EARLY_DEBUG_PAS_REALMODE) | ||
51 | udbg_init_pas_realmode(); | ||
48 | #endif | 52 | #endif |
49 | } | 53 | } |
50 | 54 | ||
diff --git a/arch/powerpc/kernel/udbg_16550.c b/arch/powerpc/kernel/udbg_16550.c index 2d17f2b8eda7..e738f93b42fe 100644 --- a/arch/powerpc/kernel/udbg_16550.c +++ b/arch/powerpc/kernel/udbg_16550.c | |||
@@ -14,6 +14,8 @@ | |||
14 | 14 | ||
15 | extern u8 real_readb(volatile u8 __iomem *addr); | 15 | extern u8 real_readb(volatile u8 __iomem *addr); |
16 | extern void real_writeb(u8 data, volatile u8 __iomem *addr); | 16 | extern void real_writeb(u8 data, volatile u8 __iomem *addr); |
17 | extern u8 real_205_readb(volatile u8 __iomem *addr); | ||
18 | extern void real_205_writeb(u8 data, volatile u8 __iomem *addr); | ||
17 | 19 | ||
18 | struct NS16550 { | 20 | struct NS16550 { |
19 | /* this struct must be packed */ | 21 | /* this struct must be packed */ |
@@ -167,3 +169,25 @@ void __init udbg_init_maple_realmode(void) | |||
167 | udbg_getc_poll = NULL; | 169 | udbg_getc_poll = NULL; |
168 | } | 170 | } |
169 | #endif /* CONFIG_PPC_MAPLE */ | 171 | #endif /* CONFIG_PPC_MAPLE */ |
172 | |||
173 | #ifdef CONFIG_PPC_PASEMI | ||
174 | void udbg_pas_real_putc(char c) | ||
175 | { | ||
176 | if (udbg_comport) { | ||
177 | while ((real_205_readb(&udbg_comport->lsr) & LSR_THRE) == 0) | ||
178 | /* wait for idle */; | ||
179 | real_205_writeb(c, &udbg_comport->thr); eieio(); | ||
180 | if (c == '\n') | ||
181 | udbg_pas_real_putc('\r'); | ||
182 | } | ||
183 | } | ||
184 | |||
185 | void udbg_init_pas_realmode(void) | ||
186 | { | ||
187 | udbg_comport = (volatile struct NS16550 __iomem *)0xfcff03f8; | ||
188 | |||
189 | udbg_putc = udbg_pas_real_putc; | ||
190 | udbg_getc = NULL; | ||
191 | udbg_getc_poll = NULL; | ||
192 | } | ||
193 | #endif /* CONFIG_PPC_MAPLE */ | ||
diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c index ae0ede19879d..50149ec6efa4 100644 --- a/arch/powerpc/kernel/vdso.c +++ b/arch/powerpc/kernel/vdso.c | |||
@@ -49,9 +49,13 @@ | |||
49 | /* Max supported size for symbol names */ | 49 | /* Max supported size for symbol names */ |
50 | #define MAX_SYMNAME 64 | 50 | #define MAX_SYMNAME 64 |
51 | 51 | ||
52 | #define VDSO32_MAXPAGES (((0x3000 + PAGE_MASK) >> PAGE_SHIFT) + 2) | ||
53 | #define VDSO64_MAXPAGES (((0x3000 + PAGE_MASK) >> PAGE_SHIFT) + 2) | ||
54 | |||
52 | extern char vdso32_start, vdso32_end; | 55 | extern char vdso32_start, vdso32_end; |
53 | static void *vdso32_kbase = &vdso32_start; | 56 | static void *vdso32_kbase = &vdso32_start; |
54 | unsigned int vdso32_pages; | 57 | unsigned int vdso32_pages; |
58 | static struct page *vdso32_pagelist[VDSO32_MAXPAGES]; | ||
55 | unsigned long vdso32_sigtramp; | 59 | unsigned long vdso32_sigtramp; |
56 | unsigned long vdso32_rt_sigtramp; | 60 | unsigned long vdso32_rt_sigtramp; |
57 | 61 | ||
@@ -59,6 +63,7 @@ unsigned long vdso32_rt_sigtramp; | |||
59 | extern char vdso64_start, vdso64_end; | 63 | extern char vdso64_start, vdso64_end; |
60 | static void *vdso64_kbase = &vdso64_start; | 64 | static void *vdso64_kbase = &vdso64_start; |
61 | unsigned int vdso64_pages; | 65 | unsigned int vdso64_pages; |
66 | static struct page *vdso64_pagelist[VDSO64_MAXPAGES]; | ||
62 | unsigned long vdso64_rt_sigtramp; | 67 | unsigned long vdso64_rt_sigtramp; |
63 | #endif /* CONFIG_PPC64 */ | 68 | #endif /* CONFIG_PPC64 */ |
64 | 69 | ||
@@ -165,55 +170,6 @@ static void dump_vdso_pages(struct vm_area_struct * vma) | |||
165 | #endif /* DEBUG */ | 170 | #endif /* DEBUG */ |
166 | 171 | ||
167 | /* | 172 | /* |
168 | * Keep a dummy vma_close for now, it will prevent VMA merging. | ||
169 | */ | ||
170 | static void vdso_vma_close(struct vm_area_struct * vma) | ||
171 | { | ||
172 | } | ||
173 | |||
174 | /* | ||
175 | * Our nopage() function, maps in the actual vDSO kernel pages, they will | ||
176 | * be mapped read-only by do_no_page(), and eventually COW'ed, either | ||
177 | * right away for an initial write access, or by do_wp_page(). | ||
178 | */ | ||
179 | static struct page * vdso_vma_nopage(struct vm_area_struct * vma, | ||
180 | unsigned long address, int *type) | ||
181 | { | ||
182 | unsigned long offset = address - vma->vm_start; | ||
183 | struct page *pg; | ||
184 | #ifdef CONFIG_PPC64 | ||
185 | void *vbase = (vma->vm_mm->task_size > TASK_SIZE_USER32) ? | ||
186 | vdso64_kbase : vdso32_kbase; | ||
187 | #else | ||
188 | void *vbase = vdso32_kbase; | ||
189 | #endif | ||
190 | |||
191 | DBG("vdso_vma_nopage(current: %s, address: %016lx, off: %lx)\n", | ||
192 | current->comm, address, offset); | ||
193 | |||
194 | if (address < vma->vm_start || address > vma->vm_end) | ||
195 | return NOPAGE_SIGBUS; | ||
196 | |||
197 | /* | ||
198 | * Last page is systemcfg. | ||
199 | */ | ||
200 | if ((vma->vm_end - address) <= PAGE_SIZE) | ||
201 | pg = virt_to_page(vdso_data); | ||
202 | else | ||
203 | pg = virt_to_page(vbase + offset); | ||
204 | |||
205 | get_page(pg); | ||
206 | DBG(" ->page count: %d\n", page_count(pg)); | ||
207 | |||
208 | return pg; | ||
209 | } | ||
210 | |||
211 | static struct vm_operations_struct vdso_vmops = { | ||
212 | .close = vdso_vma_close, | ||
213 | .nopage = vdso_vma_nopage, | ||
214 | }; | ||
215 | |||
216 | /* | ||
217 | * This is called from binfmt_elf, we create the special vma for the | 173 | * This is called from binfmt_elf, we create the special vma for the |
218 | * vDSO and insert it into the mm struct tree | 174 | * vDSO and insert it into the mm struct tree |
219 | */ | 175 | */ |
@@ -221,20 +177,23 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, | |||
221 | int executable_stack) | 177 | int executable_stack) |
222 | { | 178 | { |
223 | struct mm_struct *mm = current->mm; | 179 | struct mm_struct *mm = current->mm; |
224 | struct vm_area_struct *vma; | 180 | struct page **vdso_pagelist; |
225 | unsigned long vdso_pages; | 181 | unsigned long vdso_pages; |
226 | unsigned long vdso_base; | 182 | unsigned long vdso_base; |
227 | int rc; | 183 | int rc; |
228 | 184 | ||
229 | #ifdef CONFIG_PPC64 | 185 | #ifdef CONFIG_PPC64 |
230 | if (test_thread_flag(TIF_32BIT)) { | 186 | if (test_thread_flag(TIF_32BIT)) { |
187 | vdso_pagelist = vdso32_pagelist; | ||
231 | vdso_pages = vdso32_pages; | 188 | vdso_pages = vdso32_pages; |
232 | vdso_base = VDSO32_MBASE; | 189 | vdso_base = VDSO32_MBASE; |
233 | } else { | 190 | } else { |
191 | vdso_pagelist = vdso64_pagelist; | ||
234 | vdso_pages = vdso64_pages; | 192 | vdso_pages = vdso64_pages; |
235 | vdso_base = VDSO64_MBASE; | 193 | vdso_base = VDSO64_MBASE; |
236 | } | 194 | } |
237 | #else | 195 | #else |
196 | vdso_pagelist = vdso32_pagelist; | ||
238 | vdso_pages = vdso32_pages; | 197 | vdso_pages = vdso32_pages; |
239 | vdso_base = VDSO32_MBASE; | 198 | vdso_base = VDSO32_MBASE; |
240 | #endif | 199 | #endif |
@@ -262,17 +221,6 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, | |||
262 | goto fail_mmapsem; | 221 | goto fail_mmapsem; |
263 | } | 222 | } |
264 | 223 | ||
265 | |||
266 | /* Allocate a VMA structure and fill it up */ | ||
267 | vma = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL); | ||
268 | if (vma == NULL) { | ||
269 | rc = -ENOMEM; | ||
270 | goto fail_mmapsem; | ||
271 | } | ||
272 | vma->vm_mm = mm; | ||
273 | vma->vm_start = vdso_base; | ||
274 | vma->vm_end = vma->vm_start + (vdso_pages << PAGE_SHIFT); | ||
275 | |||
276 | /* | 224 | /* |
277 | * our vma flags don't have VM_WRITE so by default, the process isn't | 225 | * our vma flags don't have VM_WRITE so by default, the process isn't |
278 | * allowed to write those pages. | 226 | * allowed to write those pages. |
@@ -282,32 +230,26 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, | |||
282 | * and your nice userland gettimeofday will be totally dead. | 230 | * and your nice userland gettimeofday will be totally dead. |
283 | * It's fine to use that for setting breakpoints in the vDSO code | 231 | * It's fine to use that for setting breakpoints in the vDSO code |
284 | * pages though | 232 | * pages though |
285 | */ | 233 | * |
286 | vma->vm_flags = VM_READ|VM_EXEC|VM_MAYREAD|VM_MAYWRITE|VM_MAYEXEC; | ||
287 | /* | ||
288 | * Make sure the vDSO gets into every core dump. | 234 | * Make sure the vDSO gets into every core dump. |
289 | * Dumping its contents makes post-mortem fully interpretable later | 235 | * Dumping its contents makes post-mortem fully interpretable later |
290 | * without matching up the same kernel and hardware config to see | 236 | * without matching up the same kernel and hardware config to see |
291 | * what PC values meant. | 237 | * what PC values meant. |
292 | */ | 238 | */ |
293 | vma->vm_flags |= VM_ALWAYSDUMP; | 239 | rc = install_special_mapping(mm, vdso_base, vdso_pages << PAGE_SHIFT, |
294 | vma->vm_flags |= mm->def_flags; | 240 | VM_READ|VM_EXEC| |
295 | vma->vm_page_prot = protection_map[vma->vm_flags & 0x7]; | 241 | VM_MAYREAD|VM_MAYWRITE|VM_MAYEXEC| |
296 | vma->vm_ops = &vdso_vmops; | 242 | VM_ALWAYSDUMP, |
297 | 243 | vdso_pagelist); | |
298 | /* Insert new VMA */ | ||
299 | rc = insert_vm_struct(mm, vma); | ||
300 | if (rc) | 244 | if (rc) |
301 | goto fail_vma; | 245 | goto fail_mmapsem; |
302 | 246 | ||
303 | /* Put vDSO base into mm struct and account for memory usage */ | 247 | /* Put vDSO base into mm struct */ |
304 | current->mm->context.vdso_base = vdso_base; | 248 | current->mm->context.vdso_base = vdso_base; |
305 | mm->total_vm += (vma->vm_end - vma->vm_start) >> PAGE_SHIFT; | 249 | |
306 | up_write(&mm->mmap_sem); | 250 | up_write(&mm->mmap_sem); |
307 | return 0; | 251 | return 0; |
308 | 252 | ||
309 | fail_vma: | ||
310 | kmem_cache_free(vm_area_cachep, vma); | ||
311 | fail_mmapsem: | 253 | fail_mmapsem: |
312 | up_write(&mm->mmap_sem); | 254 | up_write(&mm->mmap_sem); |
313 | return rc; | 255 | return rc; |
@@ -778,18 +720,26 @@ void __init vdso_init(void) | |||
778 | } | 720 | } |
779 | 721 | ||
780 | /* Make sure pages are in the correct state */ | 722 | /* Make sure pages are in the correct state */ |
723 | BUG_ON(vdso32_pages + 2 > VDSO32_MAXPAGES); | ||
781 | for (i = 0; i < vdso32_pages; i++) { | 724 | for (i = 0; i < vdso32_pages; i++) { |
782 | struct page *pg = virt_to_page(vdso32_kbase + i*PAGE_SIZE); | 725 | struct page *pg = virt_to_page(vdso32_kbase + i*PAGE_SIZE); |
783 | ClearPageReserved(pg); | 726 | ClearPageReserved(pg); |
784 | get_page(pg); | 727 | get_page(pg); |
785 | 728 | vdso32_pagelist[i] = pg; | |
786 | } | 729 | } |
730 | vdso32_pagelist[i++] = virt_to_page(vdso_data); | ||
731 | vdso32_pagelist[i] = NULL; | ||
732 | |||
787 | #ifdef CONFIG_PPC64 | 733 | #ifdef CONFIG_PPC64 |
734 | BUG_ON(vdso64_pages + 2 > VDSO64_MAXPAGES); | ||
788 | for (i = 0; i < vdso64_pages; i++) { | 735 | for (i = 0; i < vdso64_pages; i++) { |
789 | struct page *pg = virt_to_page(vdso64_kbase + i*PAGE_SIZE); | 736 | struct page *pg = virt_to_page(vdso64_kbase + i*PAGE_SIZE); |
790 | ClearPageReserved(pg); | 737 | ClearPageReserved(pg); |
791 | get_page(pg); | 738 | get_page(pg); |
739 | vdso64_pagelist[i] = pg; | ||
792 | } | 740 | } |
741 | vdso64_pagelist[i++] = virt_to_page(vdso_data); | ||
742 | vdso64_pagelist[i] = NULL; | ||
793 | #endif /* CONFIG_PPC64 */ | 743 | #endif /* CONFIG_PPC64 */ |
794 | 744 | ||
795 | get_page(virt_to_page(vdso_data)); | 745 | get_page(virt_to_page(vdso_data)); |
diff --git a/arch/powerpc/kernel/vio.c b/arch/powerpc/kernel/vio.c index a80f8f1d2e5d..2968ffeafdb6 100644 --- a/arch/powerpc/kernel/vio.c +++ b/arch/powerpc/kernel/vio.c | |||
@@ -199,10 +199,8 @@ EXPORT_SYMBOL(vio_unregister_driver); | |||
199 | /* vio_dev refcount hit 0 */ | 199 | /* vio_dev refcount hit 0 */ |
200 | static void __devinit vio_dev_release(struct device *dev) | 200 | static void __devinit vio_dev_release(struct device *dev) |
201 | { | 201 | { |
202 | if (dev->archdata.of_node) { | 202 | /* XXX should free TCE table */ |
203 | /* XXX should free TCE table */ | 203 | of_node_put(dev->archdata.of_node); |
204 | of_node_put(dev->archdata.of_node); | ||
205 | } | ||
206 | kfree(to_vio_dev(dev)); | 204 | kfree(to_vio_dev(dev)); |
207 | } | 205 | } |
208 | 206 | ||
diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile index a0360ae10d0c..4b1ba49fbd9e 100644 --- a/arch/powerpc/lib/Makefile +++ b/arch/powerpc/lib/Makefile | |||
@@ -16,13 +16,15 @@ obj-$(CONFIG_PPC64) += checksum_64.o copypage_64.o copyuser_64.o \ | |||
16 | strcase.o | 16 | strcase.o |
17 | obj-$(CONFIG_QUICC_ENGINE) += rheap.o | 17 | obj-$(CONFIG_QUICC_ENGINE) += rheap.o |
18 | obj-$(CONFIG_XMON) += sstep.o | 18 | obj-$(CONFIG_XMON) += sstep.o |
19 | obj-$(CONFIG_KPROBES) += sstep.o | ||
20 | obj-$(CONFIG_NOT_COHERENT_CACHE) += dma-noncoherent.o | ||
19 | 21 | ||
20 | ifeq ($(CONFIG_PPC64),y) | 22 | ifeq ($(CONFIG_PPC64),y) |
21 | obj-$(CONFIG_SMP) += locks.o | 23 | obj-$(CONFIG_SMP) += locks.o |
22 | obj-$(CONFIG_DEBUG_KERNEL) += sstep.o | ||
23 | endif | 24 | endif |
24 | 25 | ||
25 | # Temporary hack until we have migrated to asm-powerpc | 26 | # Temporary hack until we have migrated to asm-powerpc |
26 | ifeq ($(CONFIG_PPC_MERGE),y) | 27 | ifeq ($(CONFIG_PPC_MERGE),y) |
28 | obj-$(CONFIG_8xx) += rheap.o | ||
27 | obj-$(CONFIG_CPM2) += rheap.o | 29 | obj-$(CONFIG_CPM2) += rheap.o |
28 | endif | 30 | endif |
diff --git a/arch/powerpc/lib/dma-noncoherent.c b/arch/powerpc/lib/dma-noncoherent.c new file mode 100644 index 000000000000..48f3d13a3de5 --- /dev/null +++ b/arch/powerpc/lib/dma-noncoherent.c | |||
@@ -0,0 +1,418 @@ | |||
1 | /* | ||
2 | * PowerPC version derived from arch/arm/mm/consistent.c | ||
3 | * Copyright (C) 2001 Dan Malek (dmalek@jlc.net) | ||
4 | * | ||
5 | * Copyright (C) 2000 Russell King | ||
6 | * | ||
7 | * Consistent memory allocators. Used for DMA devices that want to | ||
8 | * share uncached memory with the processor core. The function return | ||
9 | * is the virtual address and 'dma_handle' is the physical address. | ||
10 | * Mostly stolen from the ARM port, with some changes for PowerPC. | ||
11 | * -- Dan | ||
12 | * | ||
13 | * Reorganized to get rid of the arch-specific consistent_* functions | ||
14 | * and provide non-coherent implementations for the DMA API. -Matt | ||
15 | * | ||
16 | * Added in_interrupt() safe dma_alloc_coherent()/dma_free_coherent() | ||
17 | * implementation. This is pulled straight from ARM and barely | ||
18 | * modified. -Matt | ||
19 | * | ||
20 | * This program is free software; you can redistribute it and/or modify | ||
21 | * it under the terms of the GNU General Public License version 2 as | ||
22 | * published by the Free Software Foundation. | ||
23 | */ | ||
24 | |||
25 | #include <linux/sched.h> | ||
26 | #include <linux/kernel.h> | ||
27 | #include <linux/errno.h> | ||
28 | #include <linux/string.h> | ||
29 | #include <linux/types.h> | ||
30 | #include <linux/highmem.h> | ||
31 | #include <linux/dma-mapping.h> | ||
32 | |||
33 | #include <asm/tlbflush.h> | ||
34 | |||
35 | /* | ||
36 | * This address range defaults to a value that is safe for all | ||
37 | * platforms which currently set CONFIG_NOT_COHERENT_CACHE. It | ||
38 | * can be further configured for specific applications under | ||
39 | * the "Advanced Setup" menu. -Matt | ||
40 | */ | ||
41 | #define CONSISTENT_BASE (CONFIG_CONSISTENT_START) | ||
42 | #define CONSISTENT_END (CONFIG_CONSISTENT_START + CONFIG_CONSISTENT_SIZE) | ||
43 | #define CONSISTENT_OFFSET(x) (((unsigned long)(x) - CONSISTENT_BASE) >> PAGE_SHIFT) | ||
44 | |||
45 | /* | ||
46 | * This is the page table (2MB) covering uncached, DMA consistent allocations | ||
47 | */ | ||
48 | static pte_t *consistent_pte; | ||
49 | static DEFINE_SPINLOCK(consistent_lock); | ||
50 | |||
51 | /* | ||
52 | * VM region handling support. | ||
53 | * | ||
54 | * This should become something generic, handling VM region allocations for | ||
55 | * vmalloc and similar (ioremap, module space, etc). | ||
56 | * | ||
57 | * I envisage vmalloc()'s supporting vm_struct becoming: | ||
58 | * | ||
59 | * struct vm_struct { | ||
60 | * struct vm_region region; | ||
61 | * unsigned long flags; | ||
62 | * struct page **pages; | ||
63 | * unsigned int nr_pages; | ||
64 | * unsigned long phys_addr; | ||
65 | * }; | ||
66 | * | ||
67 | * get_vm_area() would then call vm_region_alloc with an appropriate | ||
68 | * struct vm_region head (eg): | ||
69 | * | ||
70 | * struct vm_region vmalloc_head = { | ||
71 | * .vm_list = LIST_HEAD_INIT(vmalloc_head.vm_list), | ||
72 | * .vm_start = VMALLOC_START, | ||
73 | * .vm_end = VMALLOC_END, | ||
74 | * }; | ||
75 | * | ||
76 | * However, vmalloc_head.vm_start is variable (typically, it is dependent on | ||
77 | * the amount of RAM found at boot time.) I would imagine that get_vm_area() | ||
78 | * would have to initialise this each time prior to calling vm_region_alloc(). | ||
79 | */ | ||
80 | struct vm_region { | ||
81 | struct list_head vm_list; | ||
82 | unsigned long vm_start; | ||
83 | unsigned long vm_end; | ||
84 | }; | ||
85 | |||
86 | static struct vm_region consistent_head = { | ||
87 | .vm_list = LIST_HEAD_INIT(consistent_head.vm_list), | ||
88 | .vm_start = CONSISTENT_BASE, | ||
89 | .vm_end = CONSISTENT_END, | ||
90 | }; | ||
91 | |||
92 | static struct vm_region * | ||
93 | vm_region_alloc(struct vm_region *head, size_t size, gfp_t gfp) | ||
94 | { | ||
95 | unsigned long addr = head->vm_start, end = head->vm_end - size; | ||
96 | unsigned long flags; | ||
97 | struct vm_region *c, *new; | ||
98 | |||
99 | new = kmalloc(sizeof(struct vm_region), gfp); | ||
100 | if (!new) | ||
101 | goto out; | ||
102 | |||
103 | spin_lock_irqsave(&consistent_lock, flags); | ||
104 | |||
105 | list_for_each_entry(c, &head->vm_list, vm_list) { | ||
106 | if ((addr + size) < addr) | ||
107 | goto nospc; | ||
108 | if ((addr + size) <= c->vm_start) | ||
109 | goto found; | ||
110 | addr = c->vm_end; | ||
111 | if (addr > end) | ||
112 | goto nospc; | ||
113 | } | ||
114 | |||
115 | found: | ||
116 | /* | ||
117 | * Insert this entry _before_ the one we found. | ||
118 | */ | ||
119 | list_add_tail(&new->vm_list, &c->vm_list); | ||
120 | new->vm_start = addr; | ||
121 | new->vm_end = addr + size; | ||
122 | |||
123 | spin_unlock_irqrestore(&consistent_lock, flags); | ||
124 | return new; | ||
125 | |||
126 | nospc: | ||
127 | spin_unlock_irqrestore(&consistent_lock, flags); | ||
128 | kfree(new); | ||
129 | out: | ||
130 | return NULL; | ||
131 | } | ||
132 | |||
133 | static struct vm_region *vm_region_find(struct vm_region *head, unsigned long addr) | ||
134 | { | ||
135 | struct vm_region *c; | ||
136 | |||
137 | list_for_each_entry(c, &head->vm_list, vm_list) { | ||
138 | if (c->vm_start == addr) | ||
139 | goto out; | ||
140 | } | ||
141 | c = NULL; | ||
142 | out: | ||
143 | return c; | ||
144 | } | ||
145 | |||
146 | /* | ||
147 | * Allocate DMA-coherent memory space and return both the kernel remapped | ||
148 | * virtual and bus address for that space. | ||
149 | */ | ||
150 | void * | ||
151 | __dma_alloc_coherent(size_t size, dma_addr_t *handle, gfp_t gfp) | ||
152 | { | ||
153 | struct page *page; | ||
154 | struct vm_region *c; | ||
155 | unsigned long order; | ||
156 | u64 mask = 0x00ffffff, limit; /* ISA default */ | ||
157 | |||
158 | if (!consistent_pte) { | ||
159 | printk(KERN_ERR "%s: not initialised\n", __func__); | ||
160 | dump_stack(); | ||
161 | return NULL; | ||
162 | } | ||
163 | |||
164 | size = PAGE_ALIGN(size); | ||
165 | limit = (mask + 1) & ~mask; | ||
166 | if ((limit && size >= limit) || size >= (CONSISTENT_END - CONSISTENT_BASE)) { | ||
167 | printk(KERN_WARNING "coherent allocation too big (requested %#x mask %#Lx)\n", | ||
168 | size, mask); | ||
169 | return NULL; | ||
170 | } | ||
171 | |||
172 | order = get_order(size); | ||
173 | |||
174 | if (mask != 0xffffffff) | ||
175 | gfp |= GFP_DMA; | ||
176 | |||
177 | page = alloc_pages(gfp, order); | ||
178 | if (!page) | ||
179 | goto no_page; | ||
180 | |||
181 | /* | ||
182 | * Invalidate any data that might be lurking in the | ||
183 | * kernel direct-mapped region for device DMA. | ||
184 | */ | ||
185 | { | ||
186 | unsigned long kaddr = (unsigned long)page_address(page); | ||
187 | memset(page_address(page), 0, size); | ||
188 | flush_dcache_range(kaddr, kaddr + size); | ||
189 | } | ||
190 | |||
191 | /* | ||
192 | * Allocate a virtual address in the consistent mapping region. | ||
193 | */ | ||
194 | c = vm_region_alloc(&consistent_head, size, | ||
195 | gfp & ~(__GFP_DMA | __GFP_HIGHMEM)); | ||
196 | if (c) { | ||
197 | unsigned long vaddr = c->vm_start; | ||
198 | pte_t *pte = consistent_pte + CONSISTENT_OFFSET(vaddr); | ||
199 | struct page *end = page + (1 << order); | ||
200 | |||
201 | split_page(page, order); | ||
202 | |||
203 | /* | ||
204 | * Set the "dma handle" | ||
205 | */ | ||
206 | *handle = page_to_bus(page); | ||
207 | |||
208 | do { | ||
209 | BUG_ON(!pte_none(*pte)); | ||
210 | |||
211 | SetPageReserved(page); | ||
212 | set_pte_at(&init_mm, vaddr, | ||
213 | pte, mk_pte(page, pgprot_noncached(PAGE_KERNEL))); | ||
214 | page++; | ||
215 | pte++; | ||
216 | vaddr += PAGE_SIZE; | ||
217 | } while (size -= PAGE_SIZE); | ||
218 | |||
219 | /* | ||
220 | * Free the otherwise unused pages. | ||
221 | */ | ||
222 | while (page < end) { | ||
223 | __free_page(page); | ||
224 | page++; | ||
225 | } | ||
226 | |||
227 | return (void *)c->vm_start; | ||
228 | } | ||
229 | |||
230 | if (page) | ||
231 | __free_pages(page, order); | ||
232 | no_page: | ||
233 | return NULL; | ||
234 | } | ||
235 | EXPORT_SYMBOL(__dma_alloc_coherent); | ||
236 | |||
237 | /* | ||
238 | * free a page as defined by the above mapping. | ||
239 | */ | ||
240 | void __dma_free_coherent(size_t size, void *vaddr) | ||
241 | { | ||
242 | struct vm_region *c; | ||
243 | unsigned long flags, addr; | ||
244 | pte_t *ptep; | ||
245 | |||
246 | size = PAGE_ALIGN(size); | ||
247 | |||
248 | spin_lock_irqsave(&consistent_lock, flags); | ||
249 | |||
250 | c = vm_region_find(&consistent_head, (unsigned long)vaddr); | ||
251 | if (!c) | ||
252 | goto no_area; | ||
253 | |||
254 | if ((c->vm_end - c->vm_start) != size) { | ||
255 | printk(KERN_ERR "%s: freeing wrong coherent size (%ld != %d)\n", | ||
256 | __func__, c->vm_end - c->vm_start, size); | ||
257 | dump_stack(); | ||
258 | size = c->vm_end - c->vm_start; | ||
259 | } | ||
260 | |||
261 | ptep = consistent_pte + CONSISTENT_OFFSET(c->vm_start); | ||
262 | addr = c->vm_start; | ||
263 | do { | ||
264 | pte_t pte = ptep_get_and_clear(&init_mm, addr, ptep); | ||
265 | unsigned long pfn; | ||
266 | |||
267 | ptep++; | ||
268 | addr += PAGE_SIZE; | ||
269 | |||
270 | if (!pte_none(pte) && pte_present(pte)) { | ||
271 | pfn = pte_pfn(pte); | ||
272 | |||
273 | if (pfn_valid(pfn)) { | ||
274 | struct page *page = pfn_to_page(pfn); | ||
275 | ClearPageReserved(page); | ||
276 | |||
277 | __free_page(page); | ||
278 | continue; | ||
279 | } | ||
280 | } | ||
281 | |||
282 | printk(KERN_CRIT "%s: bad page in kernel page table\n", | ||
283 | __func__); | ||
284 | } while (size -= PAGE_SIZE); | ||
285 | |||
286 | flush_tlb_kernel_range(c->vm_start, c->vm_end); | ||
287 | |||
288 | list_del(&c->vm_list); | ||
289 | |||
290 | spin_unlock_irqrestore(&consistent_lock, flags); | ||
291 | |||
292 | kfree(c); | ||
293 | return; | ||
294 | |||
295 | no_area: | ||
296 | spin_unlock_irqrestore(&consistent_lock, flags); | ||
297 | printk(KERN_ERR "%s: trying to free invalid coherent area: %p\n", | ||
298 | __func__, vaddr); | ||
299 | dump_stack(); | ||
300 | } | ||
301 | EXPORT_SYMBOL(__dma_free_coherent); | ||
302 | |||
303 | /* | ||
304 | * Initialise the consistent memory allocation. | ||
305 | */ | ||
306 | static int __init dma_alloc_init(void) | ||
307 | { | ||
308 | pgd_t *pgd; | ||
309 | pmd_t *pmd; | ||
310 | pte_t *pte; | ||
311 | int ret = 0; | ||
312 | |||
313 | do { | ||
314 | pgd = pgd_offset(&init_mm, CONSISTENT_BASE); | ||
315 | pmd = pmd_alloc(&init_mm, pgd, CONSISTENT_BASE); | ||
316 | if (!pmd) { | ||
317 | printk(KERN_ERR "%s: no pmd tables\n", __func__); | ||
318 | ret = -ENOMEM; | ||
319 | break; | ||
320 | } | ||
321 | WARN_ON(!pmd_none(*pmd)); | ||
322 | |||
323 | pte = pte_alloc_kernel(pmd, CONSISTENT_BASE); | ||
324 | if (!pte) { | ||
325 | printk(KERN_ERR "%s: no pte tables\n", __func__); | ||
326 | ret = -ENOMEM; | ||
327 | break; | ||
328 | } | ||
329 | |||
330 | consistent_pte = pte; | ||
331 | } while (0); | ||
332 | |||
333 | return ret; | ||
334 | } | ||
335 | |||
336 | core_initcall(dma_alloc_init); | ||
337 | |||
338 | /* | ||
339 | * make an area consistent. | ||
340 | */ | ||
341 | void __dma_sync(void *vaddr, size_t size, int direction) | ||
342 | { | ||
343 | unsigned long start = (unsigned long)vaddr; | ||
344 | unsigned long end = start + size; | ||
345 | |||
346 | switch (direction) { | ||
347 | case DMA_NONE: | ||
348 | BUG(); | ||
349 | case DMA_FROM_DEVICE: /* invalidate only */ | ||
350 | invalidate_dcache_range(start, end); | ||
351 | break; | ||
352 | case DMA_TO_DEVICE: /* writeback only */ | ||
353 | clean_dcache_range(start, end); | ||
354 | break; | ||
355 | case DMA_BIDIRECTIONAL: /* writeback and invalidate */ | ||
356 | flush_dcache_range(start, end); | ||
357 | break; | ||
358 | } | ||
359 | } | ||
360 | EXPORT_SYMBOL(__dma_sync); | ||
361 | |||
362 | #ifdef CONFIG_HIGHMEM | ||
363 | /* | ||
364 | * __dma_sync_page() implementation for systems using highmem. | ||
365 | * In this case, each page of a buffer must be kmapped/kunmapped | ||
366 | * in order to have a virtual address for __dma_sync(). This must | ||
367 | * not sleep so kmap_atomic()/kunmap_atomic() are used. | ||
368 | * | ||
369 | * Note: yes, it is possible and correct to have a buffer extend | ||
370 | * beyond the first page. | ||
371 | */ | ||
372 | static inline void __dma_sync_page_highmem(struct page *page, | ||
373 | unsigned long offset, size_t size, int direction) | ||
374 | { | ||
375 | size_t seg_size = min((size_t)(PAGE_SIZE - offset), size); | ||
376 | size_t cur_size = seg_size; | ||
377 | unsigned long flags, start, seg_offset = offset; | ||
378 | int nr_segs = 1 + ((size - seg_size) + PAGE_SIZE - 1)/PAGE_SIZE; | ||
379 | int seg_nr = 0; | ||
380 | |||
381 | local_irq_save(flags); | ||
382 | |||
383 | do { | ||
384 | start = (unsigned long)kmap_atomic(page + seg_nr, | ||
385 | KM_PPC_SYNC_PAGE) + seg_offset; | ||
386 | |||
387 | /* Sync this buffer segment */ | ||
388 | __dma_sync((void *)start, seg_size, direction); | ||
389 | kunmap_atomic((void *)start, KM_PPC_SYNC_PAGE); | ||
390 | seg_nr++; | ||
391 | |||
392 | /* Calculate next buffer segment size */ | ||
393 | seg_size = min((size_t)PAGE_SIZE, size - cur_size); | ||
394 | |||
395 | /* Add the segment size to our running total */ | ||
396 | cur_size += seg_size; | ||
397 | seg_offset = 0; | ||
398 | } while (seg_nr < nr_segs); | ||
399 | |||
400 | local_irq_restore(flags); | ||
401 | } | ||
402 | #endif /* CONFIG_HIGHMEM */ | ||
403 | |||
404 | /* | ||
405 | * __dma_sync_page makes memory consistent. identical to __dma_sync, but | ||
406 | * takes a struct page instead of a virtual address | ||
407 | */ | ||
408 | void __dma_sync_page(struct page *page, unsigned long offset, | ||
409 | size_t size, int direction) | ||
410 | { | ||
411 | #ifdef CONFIG_HIGHMEM | ||
412 | __dma_sync_page_highmem(page, offset, size, direction); | ||
413 | #else | ||
414 | unsigned long start = (unsigned long)page_address(page) + offset; | ||
415 | __dma_sync((void *)start, size, direction); | ||
416 | #endif | ||
417 | } | ||
418 | EXPORT_SYMBOL(__dma_sync_page); | ||
diff --git a/arch/powerpc/lib/rheap.c b/arch/powerpc/lib/rheap.c index 57bf991ccd6e..6c5c5dd183ee 100644 --- a/arch/powerpc/lib/rheap.c +++ b/arch/powerpc/lib/rheap.c | |||
@@ -14,6 +14,7 @@ | |||
14 | */ | 14 | */ |
15 | #include <linux/types.h> | 15 | #include <linux/types.h> |
16 | #include <linux/errno.h> | 16 | #include <linux/errno.h> |
17 | #include <linux/kernel.h> | ||
17 | #include <linux/mm.h> | 18 | #include <linux/mm.h> |
18 | #include <linux/slab.h> | 19 | #include <linux/slab.h> |
19 | 20 | ||
@@ -85,7 +86,8 @@ static int grow(rh_info_t * info, int max_blocks) | |||
85 | info->flags &= ~RHIF_STATIC_BLOCK; | 86 | info->flags &= ~RHIF_STATIC_BLOCK; |
86 | 87 | ||
87 | /* add all new blocks to the free list */ | 88 | /* add all new blocks to the free list */ |
88 | for (i = 0, blk = block + info->max_blocks; i < new_blocks; i++, blk++) | 89 | blk = block + info->max_blocks - new_blocks; |
90 | for (i = 0; i < new_blocks; i++, blk++) | ||
89 | list_add(&blk->list, &info->empty_list); | 91 | list_add(&blk->list, &info->empty_list); |
90 | 92 | ||
91 | return 0; | 93 | return 0; |
@@ -670,7 +672,7 @@ void rh_dump(rh_info_t * info) | |||
670 | int maxnr; | 672 | int maxnr; |
671 | int i, nr; | 673 | int i, nr; |
672 | 674 | ||
673 | maxnr = sizeof(st) / sizeof(st[0]); | 675 | maxnr = ARRAY_SIZE(st); |
674 | 676 | ||
675 | printk(KERN_INFO | 677 | printk(KERN_INFO |
676 | "info @0x%p (%d slots empty / %d max)\n", | 678 | "info @0x%p (%d slots empty / %d max)\n", |
diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c index 1bb20d841080..8c77c791f87e 100644 --- a/arch/powerpc/mm/hugetlbpage.c +++ b/arch/powerpc/mm/hugetlbpage.c | |||
@@ -1014,7 +1014,6 @@ repeat: | |||
1014 | 1014 | ||
1015 | /* Primary is full, try the secondary */ | 1015 | /* Primary is full, try the secondary */ |
1016 | if (unlikely(slot == -1)) { | 1016 | if (unlikely(slot == -1)) { |
1017 | new_pte |= _PAGE_F_SECOND; | ||
1018 | hpte_group = ((~hash & htab_hash_mask) * | 1017 | hpte_group = ((~hash & htab_hash_mask) * |
1019 | HPTES_PER_GROUP) & ~0x7UL; | 1018 | HPTES_PER_GROUP) & ~0x7UL; |
1020 | slot = ppc_md.hpte_insert(hpte_group, va, pa, rflags, | 1019 | slot = ppc_md.hpte_insert(hpte_group, va, pa, rflags, |
@@ -1033,7 +1032,7 @@ repeat: | |||
1033 | if (unlikely(slot == -2)) | 1032 | if (unlikely(slot == -2)) |
1034 | panic("hash_huge_page: pte_insert failed\n"); | 1033 | panic("hash_huge_page: pte_insert failed\n"); |
1035 | 1034 | ||
1036 | new_pte |= (slot << 12) & _PAGE_F_GIX; | 1035 | new_pte |= (slot << 12) & (_PAGE_F_SECOND | _PAGE_F_GIX); |
1037 | } | 1036 | } |
1038 | 1037 | ||
1039 | /* | 1038 | /* |
diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c index d1c0758c5611..77b4637097e9 100644 --- a/arch/powerpc/mm/mem.c +++ b/arch/powerpc/mm/mem.c | |||
@@ -61,10 +61,6 @@ unsigned long memory_limit; | |||
61 | extern void hash_preload(struct mm_struct *mm, unsigned long ea, | 61 | extern void hash_preload(struct mm_struct *mm, unsigned long ea, |
62 | unsigned long access, unsigned long trap); | 62 | unsigned long access, unsigned long trap); |
63 | 63 | ||
64 | /* | ||
65 | * This is called by /dev/mem to know if a given address has to | ||
66 | * be mapped non-cacheable or not | ||
67 | */ | ||
68 | int page_is_ram(unsigned long pfn) | 64 | int page_is_ram(unsigned long pfn) |
69 | { | 65 | { |
70 | unsigned long paddr = (pfn << PAGE_SHIFT); | 66 | unsigned long paddr = (pfn << PAGE_SHIFT); |
@@ -490,19 +486,19 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long address, | |||
490 | !cpu_has_feature(CPU_FTR_NOEXECUTE) && | 486 | !cpu_has_feature(CPU_FTR_NOEXECUTE) && |
491 | pfn_valid(pfn)) { | 487 | pfn_valid(pfn)) { |
492 | struct page *page = pfn_to_page(pfn); | 488 | struct page *page = pfn_to_page(pfn); |
489 | #ifdef CONFIG_8xx | ||
490 | /* On 8xx, cache control instructions (particularly | ||
491 | * "dcbst" from flush_dcache_icache) fault as write | ||
492 | * operation if there is an unpopulated TLB entry | ||
493 | * for the address in question. To workaround that, | ||
494 | * we invalidate the TLB here, thus avoiding dcbst | ||
495 | * misbehaviour. | ||
496 | */ | ||
497 | _tlbie(address); | ||
498 | #endif | ||
493 | if (!PageReserved(page) | 499 | if (!PageReserved(page) |
494 | && !test_bit(PG_arch_1, &page->flags)) { | 500 | && !test_bit(PG_arch_1, &page->flags)) { |
495 | if (vma->vm_mm == current->active_mm) { | 501 | if (vma->vm_mm == current->active_mm) { |
496 | #ifdef CONFIG_8xx | ||
497 | /* On 8xx, cache control instructions (particularly | ||
498 | * "dcbst" from flush_dcache_icache) fault as write | ||
499 | * operation if there is an unpopulated TLB entry | ||
500 | * for the address in question. To workaround that, | ||
501 | * we invalidate the TLB here, thus avoiding dcbst | ||
502 | * misbehaviour. | ||
503 | */ | ||
504 | _tlbie(address); | ||
505 | #endif | ||
506 | __flush_dcache_icache((void *) address); | 502 | __flush_dcache_icache((void *) address); |
507 | } else | 503 | } else |
508 | flush_dcache_icache_page(page); | 504 | flush_dcache_icache_page(page); |
diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c index 1891dbeeb8e9..bd02272bcb0f 100644 --- a/arch/powerpc/mm/pgtable_32.c +++ b/arch/powerpc/mm/pgtable_32.c | |||
@@ -294,11 +294,8 @@ void __init mapin_ram(void) | |||
294 | } | 294 | } |
295 | } | 295 | } |
296 | 296 | ||
297 | /* is x a power of 2? */ | ||
298 | #define is_power_of_2(x) ((x) != 0 && (((x) & ((x) - 1)) == 0)) | ||
299 | |||
300 | /* is x a power of 4? */ | 297 | /* is x a power of 4? */ |
301 | #define is_power_of_4(x) ((x) != 0 && (((x) & (x-1)) == 0) && (ffs(x) & 1)) | 298 | #define is_power_of_4(x) is_power_of_2(x) && (ffs(x) & 1)) |
302 | 299 | ||
303 | /* | 300 | /* |
304 | * Set up a mapping for a block of I/O. | 301 | * Set up a mapping for a block of I/O. |
diff --git a/arch/powerpc/oprofile/common.c b/arch/powerpc/oprofile/common.c index b6d82390b6a6..fbd62eacfdf4 100644 --- a/arch/powerpc/oprofile/common.c +++ b/arch/powerpc/oprofile/common.c | |||
@@ -149,6 +149,8 @@ int __init oprofile_arch_init(struct oprofile_operations *ops) | |||
149 | #ifdef CONFIG_PPC64 | 149 | #ifdef CONFIG_PPC64 |
150 | #ifdef CONFIG_PPC_CELL_NATIVE | 150 | #ifdef CONFIG_PPC_CELL_NATIVE |
151 | case PPC_OPROFILE_CELL: | 151 | case PPC_OPROFILE_CELL: |
152 | if (firmware_has_feature(FW_FEATURE_LPAR)) | ||
153 | return -ENODEV; | ||
152 | model = &op_model_cell; | 154 | model = &op_model_cell; |
153 | break; | 155 | break; |
154 | #endif | 156 | #endif |
diff --git a/arch/powerpc/oprofile/op_model_7450.c b/arch/powerpc/oprofile/op_model_7450.c index f481c0ed5e67..5d1bbaf35ccb 100644 --- a/arch/powerpc/oprofile/op_model_7450.c +++ b/arch/powerpc/oprofile/op_model_7450.c | |||
@@ -137,9 +137,9 @@ static void fsl7450_start(struct op_counter_config *ctr) | |||
137 | 137 | ||
138 | for (i = 0; i < NUM_CTRS; ++i) { | 138 | for (i = 0; i < NUM_CTRS; ++i) { |
139 | if (ctr[i].enabled) | 139 | if (ctr[i].enabled) |
140 | ctr_write(i, reset_value[i]); | 140 | classic_ctr_write(i, reset_value[i]); |
141 | else | 141 | else |
142 | ctr_write(i, 0); | 142 | classic_ctr_write(i, 0); |
143 | } | 143 | } |
144 | 144 | ||
145 | /* Clear the freeze bit, and enable the interrupt. | 145 | /* Clear the freeze bit, and enable the interrupt. |
@@ -179,13 +179,13 @@ static void fsl7450_handle_interrupt(struct pt_regs *regs, | |||
179 | is_kernel = is_kernel_addr(pc); | 179 | is_kernel = is_kernel_addr(pc); |
180 | 180 | ||
181 | for (i = 0; i < NUM_CTRS; ++i) { | 181 | for (i = 0; i < NUM_CTRS; ++i) { |
182 | val = ctr_read(i); | 182 | val = classic_ctr_read(i); |
183 | if (val < 0) { | 183 | if (val < 0) { |
184 | if (oprofile_running && ctr[i].enabled) { | 184 | if (oprofile_running && ctr[i].enabled) { |
185 | oprofile_add_ext_sample(pc, regs, i, is_kernel); | 185 | oprofile_add_ext_sample(pc, regs, i, is_kernel); |
186 | ctr_write(i, reset_value[i]); | 186 | classic_ctr_write(i, reset_value[i]); |
187 | } else { | 187 | } else { |
188 | ctr_write(i, 0); | 188 | classic_ctr_write(i, 0); |
189 | } | 189 | } |
190 | } | 190 | } |
191 | } | 191 | } |
diff --git a/arch/powerpc/oprofile/op_model_fsl_booke.c b/arch/powerpc/oprofile/op_model_fsl_booke.c index 0b3c31f5209e..2267eb8c661b 100644 --- a/arch/powerpc/oprofile/op_model_fsl_booke.c +++ b/arch/powerpc/oprofile/op_model_fsl_booke.c | |||
@@ -32,6 +32,87 @@ static unsigned long reset_value[OP_MAX_COUNTER]; | |||
32 | static int num_counters; | 32 | static int num_counters; |
33 | static int oprofile_running; | 33 | static int oprofile_running; |
34 | 34 | ||
35 | static inline u32 get_pmlca(int ctr) | ||
36 | { | ||
37 | u32 pmlca; | ||
38 | |||
39 | switch (ctr) { | ||
40 | case 0: | ||
41 | pmlca = mfpmr(PMRN_PMLCA0); | ||
42 | break; | ||
43 | case 1: | ||
44 | pmlca = mfpmr(PMRN_PMLCA1); | ||
45 | break; | ||
46 | case 2: | ||
47 | pmlca = mfpmr(PMRN_PMLCA2); | ||
48 | break; | ||
49 | case 3: | ||
50 | pmlca = mfpmr(PMRN_PMLCA3); | ||
51 | break; | ||
52 | default: | ||
53 | panic("Bad ctr number\n"); | ||
54 | } | ||
55 | |||
56 | return pmlca; | ||
57 | } | ||
58 | |||
59 | static inline void set_pmlca(int ctr, u32 pmlca) | ||
60 | { | ||
61 | switch (ctr) { | ||
62 | case 0: | ||
63 | mtpmr(PMRN_PMLCA0, pmlca); | ||
64 | break; | ||
65 | case 1: | ||
66 | mtpmr(PMRN_PMLCA1, pmlca); | ||
67 | break; | ||
68 | case 2: | ||
69 | mtpmr(PMRN_PMLCA2, pmlca); | ||
70 | break; | ||
71 | case 3: | ||
72 | mtpmr(PMRN_PMLCA3, pmlca); | ||
73 | break; | ||
74 | default: | ||
75 | panic("Bad ctr number\n"); | ||
76 | } | ||
77 | } | ||
78 | |||
79 | static inline unsigned int ctr_read(unsigned int i) | ||
80 | { | ||
81 | switch(i) { | ||
82 | case 0: | ||
83 | return mfpmr(PMRN_PMC0); | ||
84 | case 1: | ||
85 | return mfpmr(PMRN_PMC1); | ||
86 | case 2: | ||
87 | return mfpmr(PMRN_PMC2); | ||
88 | case 3: | ||
89 | return mfpmr(PMRN_PMC3); | ||
90 | default: | ||
91 | return 0; | ||
92 | } | ||
93 | } | ||
94 | |||
95 | static inline void ctr_write(unsigned int i, unsigned int val) | ||
96 | { | ||
97 | switch(i) { | ||
98 | case 0: | ||
99 | mtpmr(PMRN_PMC0, val); | ||
100 | break; | ||
101 | case 1: | ||
102 | mtpmr(PMRN_PMC1, val); | ||
103 | break; | ||
104 | case 2: | ||
105 | mtpmr(PMRN_PMC2, val); | ||
106 | break; | ||
107 | case 3: | ||
108 | mtpmr(PMRN_PMC3, val); | ||
109 | break; | ||
110 | default: | ||
111 | break; | ||
112 | } | ||
113 | } | ||
114 | |||
115 | |||
35 | static void init_pmc_stop(int ctr) | 116 | static void init_pmc_stop(int ctr) |
36 | { | 117 | { |
37 | u32 pmlca = (PMLCA_FC | PMLCA_FCS | PMLCA_FCU | | 118 | u32 pmlca = (PMLCA_FC | PMLCA_FCS | PMLCA_FCU | |
diff --git a/arch/powerpc/oprofile/op_model_power4.c b/arch/powerpc/oprofile/op_model_power4.c index 356709d515b9..fe597a154d4f 100644 --- a/arch/powerpc/oprofile/op_model_power4.c +++ b/arch/powerpc/oprofile/op_model_power4.c | |||
@@ -121,9 +121,9 @@ static void power4_start(struct op_counter_config *ctr) | |||
121 | 121 | ||
122 | for (i = 0; i < cur_cpu_spec->num_pmcs; ++i) { | 122 | for (i = 0; i < cur_cpu_spec->num_pmcs; ++i) { |
123 | if (ctr[i].enabled) { | 123 | if (ctr[i].enabled) { |
124 | ctr_write(i, reset_value[i]); | 124 | classic_ctr_write(i, reset_value[i]); |
125 | } else { | 125 | } else { |
126 | ctr_write(i, 0); | 126 | classic_ctr_write(i, 0); |
127 | } | 127 | } |
128 | } | 128 | } |
129 | 129 | ||
@@ -254,13 +254,13 @@ static void power4_handle_interrupt(struct pt_regs *regs, | |||
254 | mtmsrd(mfmsr() | MSR_PMM); | 254 | mtmsrd(mfmsr() | MSR_PMM); |
255 | 255 | ||
256 | for (i = 0; i < cur_cpu_spec->num_pmcs; ++i) { | 256 | for (i = 0; i < cur_cpu_spec->num_pmcs; ++i) { |
257 | val = ctr_read(i); | 257 | val = classic_ctr_read(i); |
258 | if (val < 0) { | 258 | if (val < 0) { |
259 | if (oprofile_running && ctr[i].enabled) { | 259 | if (oprofile_running && ctr[i].enabled) { |
260 | oprofile_add_ext_sample(pc, regs, i, is_kernel); | 260 | oprofile_add_ext_sample(pc, regs, i, is_kernel); |
261 | ctr_write(i, reset_value[i]); | 261 | classic_ctr_write(i, reset_value[i]); |
262 | } else { | 262 | } else { |
263 | ctr_write(i, 0); | 263 | classic_ctr_write(i, 0); |
264 | } | 264 | } |
265 | } | 265 | } |
266 | } | 266 | } |
diff --git a/arch/powerpc/oprofile/op_model_rs64.c b/arch/powerpc/oprofile/op_model_rs64.c index 19c5ee089bc9..c731acbfb2a5 100644 --- a/arch/powerpc/oprofile/op_model_rs64.c +++ b/arch/powerpc/oprofile/op_model_rs64.c | |||
@@ -137,10 +137,10 @@ static void rs64_start(struct op_counter_config *ctr) | |||
137 | 137 | ||
138 | for (i = 0; i < num_counters; ++i) { | 138 | for (i = 0; i < num_counters; ++i) { |
139 | if (ctr[i].enabled) { | 139 | if (ctr[i].enabled) { |
140 | ctr_write(i, reset_value[i]); | 140 | classic_ctr_write(i, reset_value[i]); |
141 | ctrl_write(i, ctr[i].event); | 141 | ctrl_write(i, ctr[i].event); |
142 | } else { | 142 | } else { |
143 | ctr_write(i, 0); | 143 | classic_ctr_write(i, 0); |
144 | } | 144 | } |
145 | } | 145 | } |
146 | 146 | ||
@@ -186,13 +186,13 @@ static void rs64_handle_interrupt(struct pt_regs *regs, | |||
186 | mtmsrd(mfmsr() | MSR_PMM); | 186 | mtmsrd(mfmsr() | MSR_PMM); |
187 | 187 | ||
188 | for (i = 0; i < num_counters; ++i) { | 188 | for (i = 0; i < num_counters; ++i) { |
189 | val = ctr_read(i); | 189 | val = classic_ctr_read(i); |
190 | if (val < 0) { | 190 | if (val < 0) { |
191 | if (ctr[i].enabled) { | 191 | if (ctr[i].enabled) { |
192 | oprofile_add_ext_sample(pc, regs, i, is_kernel); | 192 | oprofile_add_ext_sample(pc, regs, i, is_kernel); |
193 | ctr_write(i, reset_value[i]); | 193 | classic_ctr_write(i, reset_value[i]); |
194 | } else { | 194 | } else { |
195 | ctr_write(i, 0); | 195 | classic_ctr_write(i, 0); |
196 | } | 196 | } |
197 | } | 197 | } |
198 | } | 198 | } |
diff --git a/arch/powerpc/platforms/52xx/Makefile b/arch/powerpc/platforms/52xx/Makefile index a46184a0c750..795b713ec9ee 100644 --- a/arch/powerpc/platforms/52xx/Makefile +++ b/arch/powerpc/platforms/52xx/Makefile | |||
@@ -3,6 +3,7 @@ | |||
3 | # | 3 | # |
4 | ifeq ($(CONFIG_PPC_MERGE),y) | 4 | ifeq ($(CONFIG_PPC_MERGE),y) |
5 | obj-y += mpc52xx_pic.o mpc52xx_common.o | 5 | obj-y += mpc52xx_pic.o mpc52xx_common.o |
6 | obj-$(CONFIG_PCI) += mpc52xx_pci.o | ||
6 | endif | 7 | endif |
7 | 8 | ||
8 | obj-$(CONFIG_PPC_EFIKA) += efika-setup.o efika-pci.o | 9 | obj-$(CONFIG_PPC_EFIKA) += efika-setup.o efika-pci.o |
diff --git a/arch/powerpc/platforms/52xx/lite5200.c b/arch/powerpc/platforms/52xx/lite5200.c index 0f21bab33f6c..cdb16bfa6ca6 100644 --- a/arch/powerpc/platforms/52xx/lite5200.c +++ b/arch/powerpc/platforms/52xx/lite5200.c | |||
@@ -107,6 +107,12 @@ static void __init lite52xx_setup_arch(void) | |||
107 | mpc52xx_setup_cpu(); /* Generic */ | 107 | mpc52xx_setup_cpu(); /* Generic */ |
108 | lite52xx_setup_cpu(); /* Platorm specific */ | 108 | lite52xx_setup_cpu(); /* Platorm specific */ |
109 | 109 | ||
110 | #ifdef CONFIG_PCI | ||
111 | np = of_find_node_by_type(np, "pci"); | ||
112 | if (np) | ||
113 | mpc52xx_add_bridge(np); | ||
114 | #endif | ||
115 | |||
110 | #ifdef CONFIG_BLK_DEV_INITRD | 116 | #ifdef CONFIG_BLK_DEV_INITRD |
111 | if (initrd_start) | 117 | if (initrd_start) |
112 | ROOT_DEV = Root_RAM0; | 118 | ROOT_DEV = Root_RAM0; |
diff --git a/arch/powerpc/platforms/52xx/mpc52xx_pci.c b/arch/powerpc/platforms/52xx/mpc52xx_pci.c new file mode 100644 index 000000000000..faf161bdbc1c --- /dev/null +++ b/arch/powerpc/platforms/52xx/mpc52xx_pci.c | |||
@@ -0,0 +1,412 @@ | |||
1 | /* | ||
2 | * PCI code for the Freescale MPC52xx embedded CPU. | ||
3 | * | ||
4 | * Copyright (C) 2006 Secret Lab Technologies Ltd. | ||
5 | * Grant Likely <grant.likely@secretlab.ca> | ||
6 | * Copyright (C) 2004 Sylvain Munaut <tnt@246tNt.com> | ||
7 | * | ||
8 | * This file is licensed under the terms of the GNU General Public License | ||
9 | * version 2. This program is licensed "as is" without any warranty of any | ||
10 | * kind, whether express or implied. | ||
11 | */ | ||
12 | |||
13 | #undef DEBUG | ||
14 | |||
15 | #include <asm/pci.h> | ||
16 | #include <asm/mpc52xx.h> | ||
17 | #include <asm/delay.h> | ||
18 | #include <asm/machdep.h> | ||
19 | #include <linux/kernel.h> | ||
20 | |||
21 | |||
22 | /* ======================================================================== */ | ||
23 | /* PCI windows config */ | ||
24 | /* ======================================================================== */ | ||
25 | |||
26 | #define MPC52xx_PCI_TARGET_IO 0xf0000000 | ||
27 | #define MPC52xx_PCI_TARGET_MEM 0x00000000 | ||
28 | |||
29 | |||
30 | /* ======================================================================== */ | ||
31 | /* Structures mapping & Defines for PCI Unit */ | ||
32 | /* ======================================================================== */ | ||
33 | |||
34 | #define MPC52xx_PCI_GSCR_BM 0x40000000 | ||
35 | #define MPC52xx_PCI_GSCR_PE 0x20000000 | ||
36 | #define MPC52xx_PCI_GSCR_SE 0x10000000 | ||
37 | #define MPC52xx_PCI_GSCR_XLB2PCI_MASK 0x07000000 | ||
38 | #define MPC52xx_PCI_GSCR_XLB2PCI_SHIFT 24 | ||
39 | #define MPC52xx_PCI_GSCR_IPG2PCI_MASK 0x00070000 | ||
40 | #define MPC52xx_PCI_GSCR_IPG2PCI_SHIFT 16 | ||
41 | #define MPC52xx_PCI_GSCR_BME 0x00004000 | ||
42 | #define MPC52xx_PCI_GSCR_PEE 0x00002000 | ||
43 | #define MPC52xx_PCI_GSCR_SEE 0x00001000 | ||
44 | #define MPC52xx_PCI_GSCR_PR 0x00000001 | ||
45 | |||
46 | |||
47 | #define MPC52xx_PCI_IWBTAR_TRANSLATION(proc_ad,pci_ad,size) \ | ||
48 | ( ( (proc_ad) & 0xff000000 ) | \ | ||
49 | ( (((size) - 1) >> 8) & 0x00ff0000 ) | \ | ||
50 | ( ((pci_ad) >> 16) & 0x0000ff00 ) ) | ||
51 | |||
52 | #define MPC52xx_PCI_IWCR_PACK(win0,win1,win2) (((win0) << 24) | \ | ||
53 | ((win1) << 16) | \ | ||
54 | ((win2) << 8)) | ||
55 | |||
56 | #define MPC52xx_PCI_IWCR_DISABLE 0x0 | ||
57 | #define MPC52xx_PCI_IWCR_ENABLE 0x1 | ||
58 | #define MPC52xx_PCI_IWCR_READ 0x0 | ||
59 | #define MPC52xx_PCI_IWCR_READ_LINE 0x2 | ||
60 | #define MPC52xx_PCI_IWCR_READ_MULTI 0x4 | ||
61 | #define MPC52xx_PCI_IWCR_MEM 0x0 | ||
62 | #define MPC52xx_PCI_IWCR_IO 0x8 | ||
63 | |||
64 | #define MPC52xx_PCI_TCR_P 0x01000000 | ||
65 | #define MPC52xx_PCI_TCR_LD 0x00010000 | ||
66 | |||
67 | #define MPC52xx_PCI_TBATR_DISABLE 0x0 | ||
68 | #define MPC52xx_PCI_TBATR_ENABLE 0x1 | ||
69 | |||
70 | struct mpc52xx_pci { | ||
71 | u32 idr; /* PCI + 0x00 */ | ||
72 | u32 scr; /* PCI + 0x04 */ | ||
73 | u32 ccrir; /* PCI + 0x08 */ | ||
74 | u32 cr1; /* PCI + 0x0C */ | ||
75 | u32 bar0; /* PCI + 0x10 */ | ||
76 | u32 bar1; /* PCI + 0x14 */ | ||
77 | u8 reserved1[16]; /* PCI + 0x18 */ | ||
78 | u32 ccpr; /* PCI + 0x28 */ | ||
79 | u32 sid; /* PCI + 0x2C */ | ||
80 | u32 erbar; /* PCI + 0x30 */ | ||
81 | u32 cpr; /* PCI + 0x34 */ | ||
82 | u8 reserved2[4]; /* PCI + 0x38 */ | ||
83 | u32 cr2; /* PCI + 0x3C */ | ||
84 | u8 reserved3[32]; /* PCI + 0x40 */ | ||
85 | u32 gscr; /* PCI + 0x60 */ | ||
86 | u32 tbatr0; /* PCI + 0x64 */ | ||
87 | u32 tbatr1; /* PCI + 0x68 */ | ||
88 | u32 tcr; /* PCI + 0x6C */ | ||
89 | u32 iw0btar; /* PCI + 0x70 */ | ||
90 | u32 iw1btar; /* PCI + 0x74 */ | ||
91 | u32 iw2btar; /* PCI + 0x78 */ | ||
92 | u8 reserved4[4]; /* PCI + 0x7C */ | ||
93 | u32 iwcr; /* PCI + 0x80 */ | ||
94 | u32 icr; /* PCI + 0x84 */ | ||
95 | u32 isr; /* PCI + 0x88 */ | ||
96 | u32 arb; /* PCI + 0x8C */ | ||
97 | u8 reserved5[104]; /* PCI + 0x90 */ | ||
98 | u32 car; /* PCI + 0xF8 */ | ||
99 | u8 reserved6[4]; /* PCI + 0xFC */ | ||
100 | }; | ||
101 | |||
102 | |||
103 | /* ======================================================================== */ | ||
104 | /* PCI configuration acess */ | ||
105 | /* ======================================================================== */ | ||
106 | |||
107 | static int | ||
108 | mpc52xx_pci_read_config(struct pci_bus *bus, unsigned int devfn, | ||
109 | int offset, int len, u32 *val) | ||
110 | { | ||
111 | struct pci_controller *hose = bus->sysdata; | ||
112 | u32 value; | ||
113 | |||
114 | if (ppc_md.pci_exclude_device) | ||
115 | if (ppc_md.pci_exclude_device(bus->number, devfn)) | ||
116 | return PCIBIOS_DEVICE_NOT_FOUND; | ||
117 | |||
118 | out_be32(hose->cfg_addr, | ||
119 | (1 << 31) | | ||
120 | ((bus->number - hose->bus_offset) << 16) | | ||
121 | (devfn << 8) | | ||
122 | (offset & 0xfc)); | ||
123 | mb(); | ||
124 | |||
125 | #if defined(CONFIG_PPC_MPC5200_BUGFIX) | ||
126 | if (bus->number != hose->bus_offset) { | ||
127 | /* workaround for the bug 435 of the MPC5200 (L25R); | ||
128 | * Don't do 32 bits config access during type-1 cycles */ | ||
129 | switch (len) { | ||
130 | case 1: | ||
131 | value = in_8(((u8 __iomem *)hose->cfg_data) + | ||
132 | (offset & 3)); | ||
133 | break; | ||
134 | case 2: | ||
135 | value = in_le16(((u16 __iomem *)hose->cfg_data) + | ||
136 | ((offset>>1) & 1)); | ||
137 | break; | ||
138 | |||
139 | default: | ||
140 | value = in_le16((u16 __iomem *)hose->cfg_data) | | ||
141 | (in_le16(((u16 __iomem *)hose->cfg_data) + 1) << 16); | ||
142 | break; | ||
143 | } | ||
144 | } | ||
145 | else | ||
146 | #endif | ||
147 | { | ||
148 | value = in_le32(hose->cfg_data); | ||
149 | |||
150 | if (len != 4) { | ||
151 | value >>= ((offset & 0x3) << 3); | ||
152 | value &= 0xffffffff >> (32 - (len << 3)); | ||
153 | } | ||
154 | } | ||
155 | |||
156 | *val = value; | ||
157 | |||
158 | out_be32(hose->cfg_addr, 0); | ||
159 | mb(); | ||
160 | |||
161 | return PCIBIOS_SUCCESSFUL; | ||
162 | } | ||
163 | |||
164 | static int | ||
165 | mpc52xx_pci_write_config(struct pci_bus *bus, unsigned int devfn, | ||
166 | int offset, int len, u32 val) | ||
167 | { | ||
168 | struct pci_controller *hose = bus->sysdata; | ||
169 | u32 value, mask; | ||
170 | |||
171 | if (ppc_md.pci_exclude_device) | ||
172 | if (ppc_md.pci_exclude_device(bus->number, devfn)) | ||
173 | return PCIBIOS_DEVICE_NOT_FOUND; | ||
174 | |||
175 | out_be32(hose->cfg_addr, | ||
176 | (1 << 31) | | ||
177 | ((bus->number - hose->bus_offset) << 16) | | ||
178 | (devfn << 8) | | ||
179 | (offset & 0xfc)); | ||
180 | mb(); | ||
181 | |||
182 | #if defined(CONFIG_PPC_MPC5200_BUGFIX) | ||
183 | if (bus->number != hose->bus_offset) { | ||
184 | /* workaround for the bug 435 of the MPC5200 (L25R); | ||
185 | * Don't do 32 bits config access during type-1 cycles */ | ||
186 | switch (len) { | ||
187 | case 1: | ||
188 | out_8(((u8 __iomem *)hose->cfg_data) + | ||
189 | (offset & 3), val); | ||
190 | break; | ||
191 | case 2: | ||
192 | out_le16(((u16 __iomem *)hose->cfg_data) + | ||
193 | ((offset>>1) & 1), val); | ||
194 | break; | ||
195 | |||
196 | default: | ||
197 | out_le16((u16 __iomem *)hose->cfg_data, | ||
198 | (u16)val); | ||
199 | out_le16(((u16 __iomem *)hose->cfg_data) + 1, | ||
200 | (u16)(val>>16)); | ||
201 | break; | ||
202 | } | ||
203 | } | ||
204 | else | ||
205 | #endif | ||
206 | { | ||
207 | if (len != 4) { | ||
208 | value = in_le32(hose->cfg_data); | ||
209 | |||
210 | offset = (offset & 0x3) << 3; | ||
211 | mask = (0xffffffff >> (32 - (len << 3))); | ||
212 | mask <<= offset; | ||
213 | |||
214 | value &= ~mask; | ||
215 | val = value | ((val << offset) & mask); | ||
216 | } | ||
217 | |||
218 | out_le32(hose->cfg_data, val); | ||
219 | } | ||
220 | mb(); | ||
221 | |||
222 | out_be32(hose->cfg_addr, 0); | ||
223 | mb(); | ||
224 | |||
225 | return PCIBIOS_SUCCESSFUL; | ||
226 | } | ||
227 | |||
228 | static struct pci_ops mpc52xx_pci_ops = { | ||
229 | .read = mpc52xx_pci_read_config, | ||
230 | .write = mpc52xx_pci_write_config | ||
231 | }; | ||
232 | |||
233 | |||
234 | /* ======================================================================== */ | ||
235 | /* PCI setup */ | ||
236 | /* ======================================================================== */ | ||
237 | |||
238 | static void __init | ||
239 | mpc52xx_pci_setup(struct pci_controller *hose, | ||
240 | struct mpc52xx_pci __iomem *pci_regs) | ||
241 | { | ||
242 | struct resource *res; | ||
243 | u32 tmp; | ||
244 | int iwcr0 = 0, iwcr1 = 0, iwcr2 = 0; | ||
245 | |||
246 | pr_debug("mpc52xx_pci_setup(hose=%p, pci_regs=%p)\n", hose, pci_regs); | ||
247 | |||
248 | /* pci_process_bridge_OF_ranges() found all our addresses for us; | ||
249 | * now store them in the right places */ | ||
250 | hose->cfg_addr = &pci_regs->car; | ||
251 | hose->cfg_data = hose->io_base_virt; | ||
252 | |||
253 | /* Control regs */ | ||
254 | tmp = in_be32(&pci_regs->scr); | ||
255 | tmp |= PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY; | ||
256 | out_be32(&pci_regs->scr, tmp); | ||
257 | |||
258 | /* Memory windows */ | ||
259 | res = &hose->mem_resources[0]; | ||
260 | if (res->flags) { | ||
261 | pr_debug("mem_resource[0] = {.start=%x, .end=%x, .flags=%lx}\n", | ||
262 | res->start, res->end, res->flags); | ||
263 | out_be32(&pci_regs->iw0btar, | ||
264 | MPC52xx_PCI_IWBTAR_TRANSLATION(res->start, res->start, | ||
265 | res->end - res->start + 1)); | ||
266 | iwcr0 = MPC52xx_PCI_IWCR_ENABLE | MPC52xx_PCI_IWCR_MEM; | ||
267 | if (res->flags & IORESOURCE_PREFETCH) | ||
268 | iwcr0 |= MPC52xx_PCI_IWCR_READ_MULTI; | ||
269 | else | ||
270 | iwcr0 |= MPC52xx_PCI_IWCR_READ; | ||
271 | } | ||
272 | |||
273 | res = &hose->mem_resources[1]; | ||
274 | if (res->flags) { | ||
275 | pr_debug("mem_resource[1] = {.start=%x, .end=%x, .flags=%lx}\n", | ||
276 | res->start, res->end, res->flags); | ||
277 | out_be32(&pci_regs->iw1btar, | ||
278 | MPC52xx_PCI_IWBTAR_TRANSLATION(res->start, res->start, | ||
279 | res->end - res->start + 1)); | ||
280 | iwcr1 = MPC52xx_PCI_IWCR_ENABLE | MPC52xx_PCI_IWCR_MEM; | ||
281 | if (res->flags & IORESOURCE_PREFETCH) | ||
282 | iwcr1 |= MPC52xx_PCI_IWCR_READ_MULTI; | ||
283 | else | ||
284 | iwcr1 |= MPC52xx_PCI_IWCR_READ; | ||
285 | } | ||
286 | |||
287 | /* IO resources */ | ||
288 | res = &hose->io_resource; | ||
289 | if (!res) { | ||
290 | printk(KERN_ERR "%s: Didn't find IO resources\n", __FILE__); | ||
291 | return; | ||
292 | } | ||
293 | pr_debug(".io_resource={.start=%x,.end=%x,.flags=%lx} " | ||
294 | ".io_base_phys=0x%p\n", | ||
295 | res->start, res->end, res->flags, (void*)hose->io_base_phys); | ||
296 | out_be32(&pci_regs->iw2btar, | ||
297 | MPC52xx_PCI_IWBTAR_TRANSLATION(hose->io_base_phys, | ||
298 | res->start, | ||
299 | res->end - res->start + 1)); | ||
300 | iwcr2 = MPC52xx_PCI_IWCR_ENABLE | MPC52xx_PCI_IWCR_IO; | ||
301 | |||
302 | /* Set all the IWCR fields at once; they're in the same reg */ | ||
303 | out_be32(&pci_regs->iwcr, MPC52xx_PCI_IWCR_PACK(iwcr0, iwcr1, iwcr2)); | ||
304 | |||
305 | out_be32(&pci_regs->tbatr0, | ||
306 | MPC52xx_PCI_TBATR_ENABLE | MPC52xx_PCI_TARGET_IO ); | ||
307 | out_be32(&pci_regs->tbatr1, | ||
308 | MPC52xx_PCI_TBATR_ENABLE | MPC52xx_PCI_TARGET_MEM ); | ||
309 | |||
310 | out_be32(&pci_regs->tcr, MPC52xx_PCI_TCR_LD); | ||
311 | |||
312 | tmp = in_be32(&pci_regs->gscr); | ||
313 | #if 0 | ||
314 | /* Reset the exteral bus ( internal PCI controller is NOT resetted ) */ | ||
315 | /* Not necessary and can be a bad thing if for example the bootloader | ||
316 | is displaying a splash screen or ... Just left here for | ||
317 | documentation purpose if anyone need it */ | ||
318 | out_be32(&pci_regs->gscr, tmp | MPC52xx_PCI_GSCR_PR); | ||
319 | udelay(50); | ||
320 | #endif | ||
321 | |||
322 | /* Make sure the PCI bridge is out of reset */ | ||
323 | out_be32(&pci_regs->gscr, tmp & ~MPC52xx_PCI_GSCR_PR); | ||
324 | } | ||
325 | |||
326 | static void | ||
327 | mpc52xx_pci_fixup_resources(struct pci_dev *dev) | ||
328 | { | ||
329 | int i; | ||
330 | |||
331 | pr_debug("mpc52xx_pci_fixup_resources() %.4x:%.4x\n", | ||
332 | dev->vendor, dev->device); | ||
333 | |||
334 | /* We don't rely on boot loader for PCI and resets all | ||
335 | devices */ | ||
336 | for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) { | ||
337 | struct resource *res = &dev->resource[i]; | ||
338 | if (res->end > res->start) { /* Only valid resources */ | ||
339 | res->end -= res->start; | ||
340 | res->start = 0; | ||
341 | res->flags |= IORESOURCE_UNSET; | ||
342 | } | ||
343 | } | ||
344 | |||
345 | /* The PCI Host bridge of MPC52xx has a prefetch memory resource | ||
346 | fixed to 1Gb. Doesn't fit in the resource system so we remove it */ | ||
347 | if ( (dev->vendor == PCI_VENDOR_ID_MOTOROLA) && | ||
348 | ( dev->device == PCI_DEVICE_ID_MOTOROLA_MPC5200 | ||
349 | || dev->device == PCI_DEVICE_ID_MOTOROLA_MPC5200B) ) { | ||
350 | struct resource *res = &dev->resource[1]; | ||
351 | res->start = res->end = res->flags = 0; | ||
352 | } | ||
353 | } | ||
354 | |||
355 | int __init | ||
356 | mpc52xx_add_bridge(struct device_node *node) | ||
357 | { | ||
358 | int len; | ||
359 | struct mpc52xx_pci __iomem *pci_regs; | ||
360 | struct pci_controller *hose; | ||
361 | const int *bus_range; | ||
362 | struct resource rsrc; | ||
363 | |||
364 | pr_debug("Adding MPC52xx PCI host bridge %s\n", node->full_name); | ||
365 | |||
366 | pci_assign_all_buses = 1; | ||
367 | |||
368 | if (of_address_to_resource(node, 0, &rsrc) != 0) { | ||
369 | printk(KERN_ERR "Can't get %s resources\n", node->full_name); | ||
370 | return -EINVAL; | ||
371 | } | ||
372 | |||
373 | bus_range = get_property(node, "bus-range", &len); | ||
374 | if (bus_range == NULL || len < 2 * sizeof(int)) { | ||
375 | printk(KERN_WARNING "Can't get %s bus-range, assume bus 0\n", | ||
376 | node->full_name); | ||
377 | bus_range = NULL; | ||
378 | } | ||
379 | |||
380 | /* There are some PCI quirks on the 52xx, register the hook to | ||
381 | * fix them. */ | ||
382 | ppc_md.pcibios_fixup_resources = mpc52xx_pci_fixup_resources; | ||
383 | |||
384 | /* Alloc and initialize the pci controller. Values in the device | ||
385 | * tree are needed to configure the 52xx PCI controller. Rather | ||
386 | * than parse the tree here, let pci_process_bridge_OF_ranges() | ||
387 | * do it for us and extract the values after the fact */ | ||
388 | hose = pcibios_alloc_controller(); | ||
389 | if (!hose) | ||
390 | return -ENOMEM; | ||
391 | |||
392 | hose->arch_data = node; | ||
393 | hose->set_cfg_type = 1; | ||
394 | |||
395 | hose->first_busno = bus_range ? bus_range[0] : 0; | ||
396 | hose->last_busno = bus_range ? bus_range[1] : 0xff; | ||
397 | |||
398 | hose->bus_offset = 0; | ||
399 | hose->ops = &mpc52xx_pci_ops; | ||
400 | |||
401 | pci_regs = ioremap(rsrc.start, rsrc.end - rsrc.start + 1); | ||
402 | if (!pci_regs) | ||
403 | return -ENOMEM; | ||
404 | |||
405 | pci_process_bridge_OF_ranges(hose, node, 1); | ||
406 | |||
407 | /* Finish setting up PCI using values obtained by | ||
408 | * pci_proces_bridge_OF_ranges */ | ||
409 | mpc52xx_pci_setup(hose, pci_regs); | ||
410 | |||
411 | return 0; | ||
412 | } | ||
diff --git a/arch/powerpc/platforms/82xx/mpc82xx.c b/arch/powerpc/platforms/82xx/mpc82xx.c index 0f5b30dc60da..74e7892cdfcf 100644 --- a/arch/powerpc/platforms/82xx/mpc82xx.c +++ b/arch/powerpc/platforms/82xx/mpc82xx.c | |||
@@ -50,7 +50,7 @@ | |||
50 | #include <sysdev/fsl_soc.h> | 50 | #include <sysdev/fsl_soc.h> |
51 | #include <sysdev/cpm2_pic.h> | 51 | #include <sysdev/cpm2_pic.h> |
52 | 52 | ||
53 | #include "pq2ads_pd.h" | 53 | #include "pq2ads.h" |
54 | 54 | ||
55 | static int __init get_freq(char *name, unsigned long *val) | 55 | static int __init get_freq(char *name, unsigned long *val) |
56 | { | 56 | { |
diff --git a/arch/powerpc/platforms/82xx/mpc82xx_ads.c b/arch/powerpc/platforms/82xx/mpc82xx_ads.c index ea880f1f0dcd..7334c1a15b90 100644 --- a/arch/powerpc/platforms/82xx/mpc82xx_ads.c +++ b/arch/powerpc/platforms/82xx/mpc82xx_ads.c | |||
@@ -51,7 +51,7 @@ | |||
51 | #include <sysdev/fsl_soc.h> | 51 | #include <sysdev/fsl_soc.h> |
52 | #include <../sysdev/cpm2_pic.h> | 52 | #include <../sysdev/cpm2_pic.h> |
53 | 53 | ||
54 | #include "pq2ads_pd.h" | 54 | #include "pq2ads.h" |
55 | 55 | ||
56 | #ifdef CONFIG_PCI | 56 | #ifdef CONFIG_PCI |
57 | static uint pci_clk_frq; | 57 | static uint pci_clk_frq; |
diff --git a/arch/powerpc/platforms/82xx/pq2ads.h b/arch/powerpc/platforms/82xx/pq2ads.h index fb2f92bcd770..5b5cca6c8c88 100644 --- a/arch/powerpc/platforms/82xx/pq2ads.h +++ b/arch/powerpc/platforms/82xx/pq2ads.h | |||
@@ -22,6 +22,7 @@ | |||
22 | #ifndef __MACH_ADS8260_DEFS | 22 | #ifndef __MACH_ADS8260_DEFS |
23 | #define __MACH_ADS8260_DEFS | 23 | #define __MACH_ADS8260_DEFS |
24 | 24 | ||
25 | #include <linux/seq_file.h> | ||
25 | #include <asm/ppcboot.h> | 26 | #include <asm/ppcboot.h> |
26 | 27 | ||
27 | /* For our show_cpuinfo hooks. */ | 28 | /* For our show_cpuinfo hooks. */ |
@@ -46,12 +47,12 @@ | |||
46 | #define BCSR1_RS232_EN1 ((uint)0x02000000) /* 0 ==enable */ | 47 | #define BCSR1_RS232_EN1 ((uint)0x02000000) /* 0 ==enable */ |
47 | #define BCSR1_RS232_EN2 ((uint)0x01000000) /* 0 ==enable */ | 48 | #define BCSR1_RS232_EN2 ((uint)0x01000000) /* 0 ==enable */ |
48 | #define BCSR3_FETHIEN2 ((uint)0x10000000) /* 0 == enable*/ | 49 | #define BCSR3_FETHIEN2 ((uint)0x10000000) /* 0 == enable*/ |
49 | #define BCSR3_FETH2_RS ((uint)0x80000000) /* 0 == reset */ | 50 | #define BCSR3_FETH2_RST ((uint)0x80000000) /* 0 == reset */ |
50 | 51 | ||
51 | /* cpm serial driver works with constants below */ | 52 | /* cpm serial driver works with constants below */ |
52 | 53 | ||
53 | #define SIU_INT_SMC1 ((uint)0x04+CPM_IRQ_OFFSET) | 54 | #define SIU_INT_SMC1 ((uint)0x04+CPM_IRQ_OFFSET) |
54 | #define SIU_INT_SMC2i ((uint)0x05+CPM_IRQ_OFFSET) | 55 | #define SIU_INT_SMC2 ((uint)0x05+CPM_IRQ_OFFSET) |
55 | #define SIU_INT_SCC1 ((uint)0x28+CPM_IRQ_OFFSET) | 56 | #define SIU_INT_SCC1 ((uint)0x28+CPM_IRQ_OFFSET) |
56 | #define SIU_INT_SCC2 ((uint)0x29+CPM_IRQ_OFFSET) | 57 | #define SIU_INT_SCC2 ((uint)0x29+CPM_IRQ_OFFSET) |
57 | #define SIU_INT_SCC3 ((uint)0x2a+CPM_IRQ_OFFSET) | 58 | #define SIU_INT_SCC3 ((uint)0x2a+CPM_IRQ_OFFSET) |
diff --git a/arch/powerpc/platforms/83xx/misc.c b/arch/powerpc/platforms/83xx/misc.c index f0c6df61faa9..f01806c940e1 100644 --- a/arch/powerpc/platforms/83xx/misc.c +++ b/arch/powerpc/platforms/83xx/misc.c | |||
@@ -18,23 +18,36 @@ | |||
18 | 18 | ||
19 | #include "mpc83xx.h" | 19 | #include "mpc83xx.h" |
20 | 20 | ||
21 | static __be32 __iomem *restart_reg_base; | ||
22 | |||
23 | static int __init mpc83xx_restart_init(void) | ||
24 | { | ||
25 | /* map reset restart_reg_baseister space */ | ||
26 | restart_reg_base = ioremap(get_immrbase() + 0x900, 0xff); | ||
27 | |||
28 | return 0; | ||
29 | } | ||
30 | |||
31 | arch_initcall(mpc83xx_restart_init); | ||
32 | |||
21 | void mpc83xx_restart(char *cmd) | 33 | void mpc83xx_restart(char *cmd) |
22 | { | 34 | { |
23 | #define RST_OFFSET 0x00000900 | 35 | #define RST_OFFSET 0x00000900 |
24 | #define RST_PROT_REG 0x00000018 | 36 | #define RST_PROT_REG 0x00000018 |
25 | #define RST_CTRL_REG 0x0000001c | 37 | #define RST_CTRL_REG 0x0000001c |
26 | __be32 __iomem *reg; | ||
27 | |||
28 | /* map reset register space */ | ||
29 | reg = ioremap(get_immrbase() + 0x900, 0xff); | ||
30 | 38 | ||
31 | local_irq_disable(); | 39 | local_irq_disable(); |
32 | 40 | ||
33 | /* enable software reset "RSTE" */ | 41 | if (restart_reg_base) { |
34 | out_be32(reg + (RST_PROT_REG >> 2), 0x52535445); | 42 | /* enable software reset "RSTE" */ |
43 | out_be32(restart_reg_base + (RST_PROT_REG >> 2), 0x52535445); | ||
44 | |||
45 | /* set software hard reset */ | ||
46 | out_be32(restart_reg_base + (RST_CTRL_REG >> 2), 0x2); | ||
47 | } else { | ||
48 | printk (KERN_EMERG "Error: Restart registers not mapped, spinning!\n"); | ||
49 | } | ||
35 | 50 | ||
36 | /* set software hard reset */ | ||
37 | out_be32(reg + (RST_CTRL_REG >> 2), 0x2); | ||
38 | for (;;) ; | 51 | for (;;) ; |
39 | } | 52 | } |
40 | 53 | ||
diff --git a/arch/powerpc/platforms/83xx/mpc832x_mds.c b/arch/powerpc/platforms/83xx/mpc832x_mds.c index 4d471190be8d..3ecb55f8a6e2 100644 --- a/arch/powerpc/platforms/83xx/mpc832x_mds.c +++ b/arch/powerpc/platforms/83xx/mpc832x_mds.c | |||
@@ -25,6 +25,7 @@ | |||
25 | #include <linux/initrd.h> | 25 | #include <linux/initrd.h> |
26 | 26 | ||
27 | #include <asm/of_device.h> | 27 | #include <asm/of_device.h> |
28 | #include <asm/of_platform.h> | ||
28 | #include <asm/system.h> | 29 | #include <asm/system.h> |
29 | #include <asm/atomic.h> | 30 | #include <asm/atomic.h> |
30 | #include <asm/time.h> | 31 | #include <asm/time.h> |
@@ -153,7 +154,7 @@ static int __init mpc832x_declare_of_platform_devices(void) | |||
153 | } | 154 | } |
154 | device_initcall(mpc832x_declare_of_platform_devices); | 155 | device_initcall(mpc832x_declare_of_platform_devices); |
155 | 156 | ||
156 | void __init mpc832x_sys_init_IRQ(void) | 157 | static void __init mpc832x_sys_init_IRQ(void) |
157 | { | 158 | { |
158 | 159 | ||
159 | struct device_node *np; | 160 | struct device_node *np; |
diff --git a/arch/powerpc/platforms/83xx/mpc834x_itx.c b/arch/powerpc/platforms/83xx/mpc834x_itx.c index 314c42ac6048..2446dea9407e 100644 --- a/arch/powerpc/platforms/83xx/mpc834x_itx.c +++ b/arch/powerpc/platforms/83xx/mpc834x_itx.c | |||
@@ -81,7 +81,7 @@ static void __init mpc834x_itx_setup_arch(void) | |||
81 | #endif | 81 | #endif |
82 | } | 82 | } |
83 | 83 | ||
84 | void __init mpc834x_itx_init_IRQ(void) | 84 | static void __init mpc834x_itx_init_IRQ(void) |
85 | { | 85 | { |
86 | struct device_node *np; | 86 | struct device_node *np; |
87 | 87 | ||
diff --git a/arch/powerpc/platforms/83xx/mpc834x_sys.c b/arch/powerpc/platforms/83xx/mpc834x_sys.c index 80b735a414d9..f30393f0b832 100644 --- a/arch/powerpc/platforms/83xx/mpc834x_sys.c +++ b/arch/powerpc/platforms/83xx/mpc834x_sys.c | |||
@@ -79,7 +79,7 @@ static void __init mpc834x_sys_setup_arch(void) | |||
79 | #endif | 79 | #endif |
80 | } | 80 | } |
81 | 81 | ||
82 | void __init mpc834x_sys_init_IRQ(void) | 82 | static void __init mpc834x_sys_init_IRQ(void) |
83 | { | 83 | { |
84 | struct device_node *np; | 84 | struct device_node *np; |
85 | 85 | ||
diff --git a/arch/powerpc/platforms/83xx/mpc8360e_pb.c b/arch/powerpc/platforms/83xx/mpc8360e_pb.c index 53b92a904e8e..ccce2f9f283d 100644 --- a/arch/powerpc/platforms/83xx/mpc8360e_pb.c +++ b/arch/powerpc/platforms/83xx/mpc8360e_pb.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <linux/initrd.h> | 31 | #include <linux/initrd.h> |
32 | 32 | ||
33 | #include <asm/of_device.h> | 33 | #include <asm/of_device.h> |
34 | #include <asm/of_platform.h> | ||
34 | #include <asm/system.h> | 35 | #include <asm/system.h> |
35 | #include <asm/atomic.h> | 36 | #include <asm/atomic.h> |
36 | #include <asm/time.h> | 37 | #include <asm/time.h> |
@@ -158,7 +159,7 @@ static int __init mpc8360_declare_of_platform_devices(void) | |||
158 | } | 159 | } |
159 | device_initcall(mpc8360_declare_of_platform_devices); | 160 | device_initcall(mpc8360_declare_of_platform_devices); |
160 | 161 | ||
161 | void __init mpc8360_sys_init_IRQ(void) | 162 | static void __init mpc8360_sys_init_IRQ(void) |
162 | { | 163 | { |
163 | 164 | ||
164 | struct device_node *np; | 165 | struct device_node *np; |
diff --git a/arch/powerpc/platforms/86xx/Kconfig b/arch/powerpc/platforms/86xx/Kconfig index d1ecc0f9ab58..0c70944d0e37 100644 --- a/arch/powerpc/platforms/86xx/Kconfig +++ b/arch/powerpc/platforms/86xx/Kconfig | |||
@@ -8,6 +8,7 @@ choice | |||
8 | config MPC8641_HPCN | 8 | config MPC8641_HPCN |
9 | bool "Freescale MPC8641 HPCN" | 9 | bool "Freescale MPC8641 HPCN" |
10 | select PPC_I8259 | 10 | select PPC_I8259 |
11 | select DEFAULT_UIMAGE | ||
11 | help | 12 | help |
12 | This option enables support for the MPC8641 HPCN board. | 13 | This option enables support for the MPC8641 HPCN board. |
13 | 14 | ||
diff --git a/arch/powerpc/platforms/86xx/mpc86xx_smp.c b/arch/powerpc/platforms/86xx/mpc86xx_smp.c index bb7fb41933ad..7ef0c6854799 100644 --- a/arch/powerpc/platforms/86xx/mpc86xx_smp.c +++ b/arch/powerpc/platforms/86xx/mpc86xx_smp.c | |||
@@ -65,7 +65,6 @@ smp_86xx_kick_cpu(int nr) | |||
65 | pr_debug("smp_86xx_kick_cpu: kick CPU #%d\n", nr); | 65 | pr_debug("smp_86xx_kick_cpu: kick CPU #%d\n", nr); |
66 | 66 | ||
67 | local_irq_save(flags); | 67 | local_irq_save(flags); |
68 | local_irq_disable(); | ||
69 | 68 | ||
70 | /* Save reset vector */ | 69 | /* Save reset vector */ |
71 | save_vector = *vector; | 70 | save_vector = *vector; |
diff --git a/arch/powerpc/platforms/8xx/Kconfig b/arch/powerpc/platforms/8xx/Kconfig index c8c0ba3cf8e8..beea6834bb7e 100644 --- a/arch/powerpc/platforms/8xx/Kconfig +++ b/arch/powerpc/platforms/8xx/Kconfig | |||
@@ -1,105 +1,16 @@ | |||
1 | menu "Platform support" | ||
2 | depends on PPC_8xx | ||
3 | |||
1 | config FADS | 4 | config FADS |
2 | bool | 5 | bool |
3 | 6 | ||
7 | config CPM1 | ||
8 | bool | ||
9 | |||
4 | choice | 10 | choice |
5 | prompt "8xx Machine Type" | 11 | prompt "8xx Machine Type" |
6 | depends on 8xx | 12 | depends on 8xx |
7 | default RPXLITE | 13 | default MPC885ADS |
8 | |||
9 | config RPXLITE | ||
10 | bool "RPX-Lite" | ||
11 | ---help--- | ||
12 | Single-board computers based around the PowerPC MPC8xx chips and | ||
13 | intended for embedded applications. The following types are | ||
14 | supported: | ||
15 | |||
16 | RPX-Lite: | ||
17 | Embedded Planet RPX Lite. PC104 form-factor SBC based on the MPC823. | ||
18 | |||
19 | RPX-Classic: | ||
20 | Embedded Planet RPX Classic Low-fat. Credit-card-size SBC based on | ||
21 | the MPC 860 | ||
22 | |||
23 | BSE-IP: | ||
24 | Bright Star Engineering ip-Engine. | ||
25 | |||
26 | TQM823L: | ||
27 | TQM850L: | ||
28 | TQM855L: | ||
29 | TQM860L: | ||
30 | MPC8xx based family of mini modules, half credit card size, | ||
31 | up to 64 MB of RAM, 8 MB Flash, (Fast) Ethernet, 2 x serial ports, | ||
32 | 2 x CAN bus interface, ... | ||
33 | Manufacturer: TQ Components, www.tq-group.de | ||
34 | Date of Release: October (?) 1999 | ||
35 | End of Life: not yet :-) | ||
36 | URL: | ||
37 | - module: <http://www.denx.de/PDF/TQM8xxLHWM201.pdf> | ||
38 | - starter kit: <http://www.denx.de/PDF/STK8xxLHWM201.pdf> | ||
39 | - images: <http://www.denx.de/embedded-ppc-en.html> | ||
40 | |||
41 | FPS850L: | ||
42 | FingerPrint Sensor System (based on TQM850L) | ||
43 | Manufacturer: IKENDI AG, <http://www.ikendi.com/> | ||
44 | Date of Release: November 1999 | ||
45 | End of life: end 2000 ? | ||
46 | URL: see TQM850L | ||
47 | |||
48 | IVMS8: | ||
49 | MPC860 based board used in the "Integrated Voice Mail System", | ||
50 | Small Version (8 voice channels) | ||
51 | Manufacturer: Speech Design, <http://www.speech-design.de/> | ||
52 | Date of Release: December 2000 (?) | ||
53 | End of life: - | ||
54 | URL: <http://www.speech-design.de/> | ||
55 | |||
56 | IVML24: | ||
57 | MPC860 based board used in the "Integrated Voice Mail System", | ||
58 | Large Version (24 voice channels) | ||
59 | Manufacturer: Speech Design, <http://www.speech-design.de/> | ||
60 | Date of Release: March 2001 (?) | ||
61 | End of life: - | ||
62 | URL: <http://www.speech-design.de/> | ||
63 | |||
64 | HERMES: | ||
65 | Hermes-Pro ISDN/LAN router with integrated 8 x hub | ||
66 | Manufacturer: Multidata Gesellschaft fur Datentechnik und Informatik | ||
67 | <http://www.multidata.de/> | ||
68 | Date of Release: 2000 (?) | ||
69 | End of life: - | ||
70 | URL: <http://www.multidata.de/english/products/hpro.htm> | ||
71 | |||
72 | IP860: | ||
73 | VMEBus IP (Industry Pack) carrier board with MPC860 | ||
74 | Manufacturer: MicroSys GmbH, <http://www.microsys.de/> | ||
75 | Date of Release: ? | ||
76 | End of life: - | ||
77 | URL: <http://www.microsys.de/html/ip860.html> | ||
78 | |||
79 | PCU_E: | ||
80 | PCU = Peripheral Controller Unit, Extended | ||
81 | Manufacturer: Siemens AG, ICN (Information and Communication Networks) | ||
82 | <http://www.siemens.de/page/1,3771,224315-1-999_2_226207-0,00.html> | ||
83 | Date of Release: April 2001 | ||
84 | End of life: August 2001 | ||
85 | URL: n. a. | ||
86 | |||
87 | config RPXCLASSIC | ||
88 | bool "RPX-Classic" | ||
89 | help | ||
90 | The RPX-Classic is a single-board computer based on the Motorola | ||
91 | MPC860. It features 16MB of DRAM and a variable amount of flash, | ||
92 | I2C EEPROM, thermal monitoring, a PCMCIA slot, a DIP switch and two | ||
93 | LEDs. Variants with Ethernet ports exist. Say Y here to support it | ||
94 | directly. | ||
95 | |||
96 | config BSEIP | ||
97 | bool "BSE-IP" | ||
98 | help | ||
99 | Say Y here to support the Bright Star Engineering ipEngine SBC. | ||
100 | This is a credit-card-sized device featuring a MPC823 processor, | ||
101 | 26MB DRAM, 4MB flash, Ethernet, a 16K-gate FPGA, USB, an LCD/video | ||
102 | controller, and two RS232 ports. | ||
103 | 14 | ||
104 | config MPC8XXFADS | 15 | config MPC8XXFADS |
105 | bool "FADS" | 16 | bool "FADS" |
@@ -107,110 +18,58 @@ config MPC8XXFADS | |||
107 | 18 | ||
108 | config MPC86XADS | 19 | config MPC86XADS |
109 | bool "MPC86XADS" | 20 | bool "MPC86XADS" |
21 | select CPM1 | ||
110 | help | 22 | help |
111 | MPC86x Application Development System by Freescale Semiconductor. | 23 | MPC86x Application Development System by Freescale Semiconductor. |
112 | The MPC86xADS is meant to serve as a platform for s/w and h/w | 24 | The MPC86xADS is meant to serve as a platform for s/w and h/w |
113 | development around the MPC86X processor families. | 25 | development around the MPC86X processor families. |
114 | select FADS | ||
115 | 26 | ||
116 | config MPC885ADS | 27 | config MPC885ADS |
117 | bool "MPC885ADS" | 28 | bool "MPC885ADS" |
29 | select CPM1 | ||
118 | help | 30 | help |
119 | Freescale Semiconductor MPC885 Application Development System (ADS). | 31 | Freescale Semiconductor MPC885 Application Development System (ADS). |
120 | Also known as DUET. | 32 | Also known as DUET. |
121 | The MPC885ADS is meant to serve as a platform for s/w and h/w | 33 | The MPC885ADS is meant to serve as a platform for s/w and h/w |
122 | development around the MPC885 processor family. | 34 | development around the MPC885 processor family. |
123 | 35 | ||
124 | config TQM823L | 36 | endchoice |
125 | bool "TQM823L" | ||
126 | help | ||
127 | Say Y here to support the TQM823L, one of an MPC8xx-based family of | ||
128 | mini SBCs (half credit-card size) from TQ Components first released | ||
129 | in late 1999. Technical references are at | ||
130 | <http://www.denx.de/PDF/TQM8xxLHWM201.pdf>, and | ||
131 | <http://www.denx.de/PDF/STK8xxLHWM201.pdf>, and an image at | ||
132 | <http://www.denx.de/embedded-ppc-en.html>. | ||
133 | |||
134 | config TQM850L | ||
135 | bool "TQM850L" | ||
136 | help | ||
137 | Say Y here to support the TQM850L, one of an MPC8xx-based family of | ||
138 | mini SBCs (half credit-card size) from TQ Components first released | ||
139 | in late 1999. Technical references are at | ||
140 | <http://www.denx.de/PDF/TQM8xxLHWM201.pdf>, and | ||
141 | <http://www.denx.de/PDF/STK8xxLHWM201.pdf>, and an image at | ||
142 | <http://www.denx.de/embedded-ppc-en.html>. | ||
143 | |||
144 | config TQM855L | ||
145 | bool "TQM855L" | ||
146 | help | ||
147 | Say Y here to support the TQM855L, one of an MPC8xx-based family of | ||
148 | mini SBCs (half credit-card size) from TQ Components first released | ||
149 | in late 1999. Technical references are at | ||
150 | <http://www.denx.de/PDF/TQM8xxLHWM201.pdf>, and | ||
151 | <http://www.denx.de/PDF/STK8xxLHWM201.pdf>, and an image at | ||
152 | <http://www.denx.de/embedded-ppc-en.html>. | ||
153 | |||
154 | config TQM860L | ||
155 | bool "TQM860L" | ||
156 | help | ||
157 | Say Y here to support the TQM860L, one of an MPC8xx-based family of | ||
158 | mini SBCs (half credit-card size) from TQ Components first released | ||
159 | in late 1999. Technical references are at | ||
160 | <http://www.denx.de/PDF/TQM8xxLHWM201.pdf>, and | ||
161 | <http://www.denx.de/PDF/STK8xxLHWM201.pdf>, and an image at | ||
162 | <http://www.denx.de/embedded-ppc-en.html>. | ||
163 | |||
164 | config FPS850L | ||
165 | bool "FPS850L" | ||
166 | |||
167 | config IVMS8 | ||
168 | bool "IVMS8" | ||
169 | help | ||
170 | Say Y here to support the Integrated Voice-Mail Small 8-channel SBC | ||
171 | from Speech Design, released March 2001. The manufacturer's website | ||
172 | is at <http://www.speech-design.de/>. | ||
173 | |||
174 | config IVML24 | ||
175 | bool "IVML24" | ||
176 | help | ||
177 | Say Y here to support the Integrated Voice-Mail Large 24-channel SBC | ||
178 | from Speech Design, released March 2001. The manufacturer's website | ||
179 | is at <http://www.speech-design.de/>. | ||
180 | |||
181 | config HERMES_PRO | ||
182 | bool "HERMES" | ||
183 | |||
184 | config IP860 | ||
185 | bool "IP860" | ||
186 | |||
187 | config LWMON | ||
188 | bool "LWMON" | ||
189 | |||
190 | config PCU_E | ||
191 | bool "PCU_E" | ||
192 | |||
193 | config CCM | ||
194 | bool "CCM" | ||
195 | |||
196 | config LANTEC | ||
197 | bool "LANTEC" | ||
198 | 37 | ||
199 | config MBX | 38 | menu "Freescale Ethernet driver platform-specific options" |
200 | bool "MBX" | 39 | depends on (FS_ENET && MPC885ADS) |
201 | help | 40 | |
202 | MBX is a line of Motorola single-board computer based around the | 41 | config MPC8xx_SECOND_ETH |
203 | MPC821 and MPC860 processors, and intended for embedded-controller | 42 | bool "Second Ethernet channel" |
204 | applications. Say Y here to support these boards directly. | 43 | depends on MPC885ADS |
44 | default y | ||
45 | help | ||
46 | This enables support for second Ethernet on MPC885ADS and MPC86xADS boards. | ||
47 | The latter will use SCC1, for 885ADS you can select it below. | ||
48 | |||
49 | choice | ||
50 | prompt "Second Ethernet channel" | ||
51 | depends on MPC8xx_SECOND_ETH | ||
52 | default MPC8xx_SECOND_ETH_FEC2 | ||
53 | |||
54 | config MPC8xx_SECOND_ETH_FEC2 | ||
55 | bool "FEC2" | ||
56 | depends on MPC885ADS | ||
57 | help | ||
58 | Enable FEC2 to serve as 2-nd Ethernet channel. Note that SMC2 | ||
59 | (often 2-nd UART) will not work if this is enabled. | ||
60 | |||
61 | config MPC8xx_SECOND_ETH_SCC3 | ||
62 | bool "SCC3" | ||
63 | depends on MPC885ADS | ||
64 | help | ||
65 | Enable SCC3 to serve as 2-nd Ethernet channel. Note that SMC1 | ||
66 | (often 1-nd UART) will not work if this is enabled. | ||
67 | |||
68 | endchoice | ||
205 | 69 | ||
206 | config WINCEPT | 70 | endmenu |
207 | bool "WinCept" | ||
208 | help | ||
209 | The Wincept 100/110 is a Motorola single-board computer based on the | ||
210 | MPC821 PowerPC, introduced in 1998 and designed to be used in | ||
211 | thin-client machines. Say Y to support it directly. | ||
212 | 71 | ||
213 | endchoice | 72 | endmenu |
214 | 73 | ||
215 | # | 74 | # |
216 | # MPC8xx Communication options | 75 | # MPC8xx Communication options |
@@ -219,79 +78,6 @@ endchoice | |||
219 | menu "MPC8xx CPM Options" | 78 | menu "MPC8xx CPM Options" |
220 | depends on 8xx | 79 | depends on 8xx |
221 | 80 | ||
222 | config SCC_ENET | ||
223 | bool "CPM SCC Ethernet" | ||
224 | depends on NET_ETHERNET | ||
225 | help | ||
226 | Enable Ethernet support via the Motorola MPC8xx serial | ||
227 | communications controller. | ||
228 | |||
229 | choice | ||
230 | prompt "SCC used for Ethernet" | ||
231 | depends on SCC_ENET | ||
232 | default SCC1_ENET | ||
233 | |||
234 | config SCC1_ENET | ||
235 | bool "SCC1" | ||
236 | help | ||
237 | Use MPC8xx serial communications controller 1 to drive Ethernet | ||
238 | (default). | ||
239 | |||
240 | config SCC2_ENET | ||
241 | bool "SCC2" | ||
242 | help | ||
243 | Use MPC8xx serial communications controller 2 to drive Ethernet. | ||
244 | |||
245 | config SCC3_ENET | ||
246 | bool "SCC3" | ||
247 | help | ||
248 | Use MPC8xx serial communications controller 3 to drive Ethernet. | ||
249 | |||
250 | endchoice | ||
251 | |||
252 | config FEC_ENET | ||
253 | bool "860T FEC Ethernet" | ||
254 | depends on NET_ETHERNET | ||
255 | help | ||
256 | Enable Ethernet support via the Fast Ethernet Controller (FCC) on | ||
257 | the Motorola MPC8260. | ||
258 | |||
259 | config USE_MDIO | ||
260 | bool "Use MDIO for PHY configuration" | ||
261 | depends on FEC_ENET | ||
262 | help | ||
263 | On some boards the hardware configuration of the ethernet PHY can be | ||
264 | used without any software interaction over the MDIO interface, so | ||
265 | all MII code can be omitted. Say N here if unsure or if you don't | ||
266 | need link status reports. | ||
267 | |||
268 | config FEC_AM79C874 | ||
269 | bool "Support AMD79C874 PHY" | ||
270 | depends on USE_MDIO | ||
271 | |||
272 | config FEC_LXT970 | ||
273 | bool "Support LXT970 PHY" | ||
274 | depends on USE_MDIO | ||
275 | |||
276 | config FEC_LXT971 | ||
277 | bool "Support LXT971 PHY" | ||
278 | depends on USE_MDIO | ||
279 | |||
280 | config FEC_QS6612 | ||
281 | bool "Support QS6612 PHY" | ||
282 | depends on USE_MDIO | ||
283 | |||
284 | config ENET_BIG_BUFFERS | ||
285 | bool "Use Big CPM Ethernet Buffers" | ||
286 | depends on SCC_ENET || FEC_ENET | ||
287 | help | ||
288 | Allocate large buffers for MPC8xx Ethernet. Increases throughput | ||
289 | and decreases the likelihood of dropped packets, but costs memory. | ||
290 | |||
291 | config HTDMSOUND | ||
292 | bool "Embedded Planet HIOX Audio" | ||
293 | depends on SOUND=y | ||
294 | |||
295 | # This doesn't really belong here, but it is convenient to ask | 81 | # This doesn't really belong here, but it is convenient to ask |
296 | # 8xx specific questions. | 82 | # 8xx specific questions. |
297 | comment "Generic MPC8xx Options" | 83 | comment "Generic MPC8xx Options" |
diff --git a/arch/powerpc/platforms/8xx/Makefile b/arch/powerpc/platforms/8xx/Makefile new file mode 100644 index 000000000000..5e2dae3afd2f --- /dev/null +++ b/arch/powerpc/platforms/8xx/Makefile | |||
@@ -0,0 +1,6 @@ | |||
1 | # | ||
2 | # Makefile for the PowerPC 8xx linux kernel. | ||
3 | # | ||
4 | obj-$(CONFIG_PPC_8xx) += m8xx_setup.o | ||
5 | obj-$(CONFIG_MPC885ADS) += mpc885ads_setup.o | ||
6 | obj-$(CONFIG_MPC86XADS) += mpc86xads_setup.o | ||
diff --git a/arch/powerpc/platforms/8xx/m8xx_setup.c b/arch/powerpc/platforms/8xx/m8xx_setup.c new file mode 100644 index 000000000000..9ed7125f0150 --- /dev/null +++ b/arch/powerpc/platforms/8xx/m8xx_setup.c | |||
@@ -0,0 +1,303 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1995 Linus Torvalds | ||
3 | * Adapted from 'alpha' version by Gary Thomas | ||
4 | * Modified by Cort Dougan (cort@cs.nmt.edu) | ||
5 | * Modified for MBX using prep/chrp/pmac functions by Dan (dmalek@jlc.net) | ||
6 | * Further modified for generic 8xx by Dan. | ||
7 | */ | ||
8 | |||
9 | /* | ||
10 | * bootup setup stuff.. | ||
11 | */ | ||
12 | |||
13 | #include <linux/errno.h> | ||
14 | #include <linux/sched.h> | ||
15 | #include <linux/kernel.h> | ||
16 | #include <linux/mm.h> | ||
17 | #include <linux/stddef.h> | ||
18 | #include <linux/unistd.h> | ||
19 | #include <linux/ptrace.h> | ||
20 | #include <linux/slab.h> | ||
21 | #include <linux/user.h> | ||
22 | #include <linux/a.out.h> | ||
23 | #include <linux/tty.h> | ||
24 | #include <linux/major.h> | ||
25 | #include <linux/interrupt.h> | ||
26 | #include <linux/reboot.h> | ||
27 | #include <linux/init.h> | ||
28 | #include <linux/initrd.h> | ||
29 | #include <linux/ioport.h> | ||
30 | #include <linux/bootmem.h> | ||
31 | #include <linux/seq_file.h> | ||
32 | #include <linux/root_dev.h> | ||
33 | #include <linux/time.h> | ||
34 | #include <linux/rtc.h> | ||
35 | |||
36 | #include <asm/mmu.h> | ||
37 | #include <asm/reg.h> | ||
38 | #include <asm/residual.h> | ||
39 | #include <asm/io.h> | ||
40 | #include <asm/pgtable.h> | ||
41 | #include <asm/mpc8xx.h> | ||
42 | #include <asm/8xx_immap.h> | ||
43 | #include <asm/machdep.h> | ||
44 | #include <asm/bootinfo.h> | ||
45 | #include <asm/time.h> | ||
46 | #include <asm/prom.h> | ||
47 | #include <asm/fs_pd.h> | ||
48 | #include <mm/mmu_decl.h> | ||
49 | |||
50 | #include "sysdev/mpc8xx_pic.h" | ||
51 | |||
52 | void m8xx_calibrate_decr(void); | ||
53 | extern void m8xx_wdt_handler_install(bd_t *bp); | ||
54 | extern int cpm_pic_init(void); | ||
55 | extern int cpm_get_irq(void); | ||
56 | |||
57 | /* A place holder for time base interrupts, if they are ever enabled. */ | ||
58 | irqreturn_t timebase_interrupt(int irq, void * dev) | ||
59 | { | ||
60 | printk ("timebase_interrupt()\n"); | ||
61 | |||
62 | return IRQ_HANDLED; | ||
63 | } | ||
64 | |||
65 | static struct irqaction tbint_irqaction = { | ||
66 | .handler = timebase_interrupt, | ||
67 | .mask = CPU_MASK_NONE, | ||
68 | .name = "tbint", | ||
69 | }; | ||
70 | |||
71 | /* per-board overridable init_internal_rtc() function. */ | ||
72 | void __init __attribute__ ((weak)) | ||
73 | init_internal_rtc(void) | ||
74 | { | ||
75 | sit8xx_t *sys_tmr = (sit8xx_t *) immr_map(im_sit); | ||
76 | |||
77 | /* Disable the RTC one second and alarm interrupts. */ | ||
78 | clrbits16(&sys_tmr->sit_rtcsc, (RTCSC_SIE | RTCSC_ALE)); | ||
79 | |||
80 | /* Enable the RTC */ | ||
81 | setbits16(&sys_tmr->sit_rtcsc, (RTCSC_RTF | RTCSC_RTE)); | ||
82 | immr_unmap(sys_tmr); | ||
83 | } | ||
84 | |||
85 | static int __init get_freq(char *name, unsigned long *val) | ||
86 | { | ||
87 | struct device_node *cpu; | ||
88 | unsigned int *fp; | ||
89 | int found = 0; | ||
90 | |||
91 | /* The cpu node should have timebase and clock frequency properties */ | ||
92 | cpu = of_find_node_by_type(NULL, "cpu"); | ||
93 | |||
94 | if (cpu) { | ||
95 | fp = (unsigned int *)get_property(cpu, name, NULL); | ||
96 | if (fp) { | ||
97 | found = 1; | ||
98 | *val = *fp++; | ||
99 | } | ||
100 | |||
101 | of_node_put(cpu); | ||
102 | } | ||
103 | |||
104 | return found; | ||
105 | } | ||
106 | |||
107 | /* The decrementer counts at the system (internal) clock frequency divided by | ||
108 | * sixteen, or external oscillator divided by four. We force the processor | ||
109 | * to use system clock divided by sixteen. | ||
110 | */ | ||
111 | void __init mpc8xx_calibrate_decr(void) | ||
112 | { | ||
113 | struct device_node *cpu; | ||
114 | cark8xx_t *clk_r1; | ||
115 | car8xx_t *clk_r2; | ||
116 | sitk8xx_t *sys_tmr1; | ||
117 | sit8xx_t *sys_tmr2; | ||
118 | int irq, virq; | ||
119 | |||
120 | clk_r1 = (cark8xx_t *) immr_map(im_clkrstk); | ||
121 | |||
122 | /* Unlock the SCCR. */ | ||
123 | out_be32(&clk_r1->cark_sccrk, ~KAPWR_KEY); | ||
124 | out_be32(&clk_r1->cark_sccrk, KAPWR_KEY); | ||
125 | immr_unmap(clk_r1); | ||
126 | |||
127 | /* Force all 8xx processors to use divide by 16 processor clock. */ | ||
128 | clk_r2 = (car8xx_t *) immr_map(im_clkrst); | ||
129 | setbits32(&clk_r2->car_sccr, 0x02000000); | ||
130 | immr_unmap(clk_r2); | ||
131 | |||
132 | /* Processor frequency is MHz. | ||
133 | */ | ||
134 | ppc_tb_freq = 50000000; | ||
135 | if (!get_freq("bus-frequency", &ppc_tb_freq)) { | ||
136 | printk(KERN_ERR "WARNING: Estimating decrementer frequency " | ||
137 | "(not found)\n"); | ||
138 | } | ||
139 | ppc_tb_freq /= 16; | ||
140 | ppc_proc_freq = 50000000; | ||
141 | if (!get_freq("clock-frequency", &ppc_proc_freq)) | ||
142 | printk(KERN_ERR "WARNING: Estimating processor frequency" | ||
143 | "(not found)\n"); | ||
144 | |||
145 | printk("Decrementer Frequency = 0x%lx\n", ppc_tb_freq); | ||
146 | |||
147 | /* Perform some more timer/timebase initialization. This used | ||
148 | * to be done elsewhere, but other changes caused it to get | ||
149 | * called more than once....that is a bad thing. | ||
150 | * | ||
151 | * First, unlock all of the registers we are going to modify. | ||
152 | * To protect them from corruption during power down, registers | ||
153 | * that are maintained by keep alive power are "locked". To | ||
154 | * modify these registers we have to write the key value to | ||
155 | * the key location associated with the register. | ||
156 | * Some boards power up with these unlocked, while others | ||
157 | * are locked. Writing anything (including the unlock code?) | ||
158 | * to the unlocked registers will lock them again. So, here | ||
159 | * we guarantee the registers are locked, then we unlock them | ||
160 | * for our use. | ||
161 | */ | ||
162 | sys_tmr1 = (sitk8xx_t *) immr_map(im_sitk); | ||
163 | out_be32(&sys_tmr1->sitk_tbscrk, ~KAPWR_KEY); | ||
164 | out_be32(&sys_tmr1->sitk_rtcsck, ~KAPWR_KEY); | ||
165 | out_be32(&sys_tmr1->sitk_tbk, ~KAPWR_KEY); | ||
166 | out_be32(&sys_tmr1->sitk_tbscrk, KAPWR_KEY); | ||
167 | out_be32(&sys_tmr1->sitk_rtcsck, KAPWR_KEY); | ||
168 | out_be32(&sys_tmr1->sitk_tbk, KAPWR_KEY); | ||
169 | immr_unmap(sys_tmr1); | ||
170 | |||
171 | init_internal_rtc(); | ||
172 | |||
173 | /* Enabling the decrementer also enables the timebase interrupts | ||
174 | * (or from the other point of view, to get decrementer interrupts | ||
175 | * we have to enable the timebase). The decrementer interrupt | ||
176 | * is wired into the vector table, nothing to do here for that. | ||
177 | */ | ||
178 | cpu = of_find_node_by_type(NULL, "cpu"); | ||
179 | virq= irq_of_parse_and_map(cpu, 0); | ||
180 | irq = irq_map[virq].hwirq; | ||
181 | |||
182 | sys_tmr2 = (sit8xx_t *) immr_map(im_sit); | ||
183 | out_be16(&sys_tmr2->sit_tbscr, ((1 << (7 - (irq/2))) << 8) | | ||
184 | (TBSCR_TBF | TBSCR_TBE)); | ||
185 | immr_unmap(sys_tmr2); | ||
186 | |||
187 | if (setup_irq(virq, &tbint_irqaction)) | ||
188 | panic("Could not allocate timer IRQ!"); | ||
189 | |||
190 | #ifdef CONFIG_8xx_WDT | ||
191 | /* Install watchdog timer handler early because it might be | ||
192 | * already enabled by the bootloader | ||
193 | */ | ||
194 | m8xx_wdt_handler_install(binfo); | ||
195 | #endif | ||
196 | } | ||
197 | |||
198 | /* The RTC on the MPC8xx is an internal register. | ||
199 | * We want to protect this during power down, so we need to unlock, | ||
200 | * modify, and re-lock. | ||
201 | */ | ||
202 | |||
203 | int mpc8xx_set_rtc_time(struct rtc_time *tm) | ||
204 | { | ||
205 | sitk8xx_t *sys_tmr1; | ||
206 | sit8xx_t *sys_tmr2; | ||
207 | int time; | ||
208 | |||
209 | sys_tmr1 = (sitk8xx_t *) immr_map(im_sitk); | ||
210 | sys_tmr2 = (sit8xx_t *) immr_map(im_sit); | ||
211 | time = mktime(tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday, | ||
212 | tm->tm_hour, tm->tm_min, tm->tm_sec); | ||
213 | |||
214 | out_be32(&sys_tmr1->sitk_rtck, KAPWR_KEY); | ||
215 | out_be32(&sys_tmr2->sit_rtc, time); | ||
216 | out_be32(&sys_tmr1->sitk_rtck, ~KAPWR_KEY); | ||
217 | |||
218 | immr_unmap(sys_tmr2); | ||
219 | immr_unmap(sys_tmr1); | ||
220 | return 0; | ||
221 | } | ||
222 | |||
223 | void mpc8xx_get_rtc_time(struct rtc_time *tm) | ||
224 | { | ||
225 | unsigned long data; | ||
226 | sit8xx_t *sys_tmr = (sit8xx_t *) immr_map(im_sit); | ||
227 | |||
228 | /* Get time from the RTC. */ | ||
229 | data = in_be32(&sys_tmr->sit_rtc); | ||
230 | to_tm(data, tm); | ||
231 | tm->tm_year -= 1900; | ||
232 | tm->tm_mon -= 1; | ||
233 | immr_unmap(sys_tmr); | ||
234 | return; | ||
235 | } | ||
236 | |||
237 | void mpc8xx_restart(char *cmd) | ||
238 | { | ||
239 | __volatile__ unsigned char dummy; | ||
240 | car8xx_t * clk_r = (car8xx_t *) immr_map(im_clkrst); | ||
241 | |||
242 | |||
243 | local_irq_disable(); | ||
244 | |||
245 | setbits32(&clk_r->car_plprcr, 0x00000080); | ||
246 | /* Clear the ME bit in MSR to cause checkstop on machine check | ||
247 | */ | ||
248 | mtmsr(mfmsr() & ~0x1000); | ||
249 | |||
250 | dummy = in_8(&clk_r->res[0]); | ||
251 | printk("Restart failed\n"); | ||
252 | while(1); | ||
253 | } | ||
254 | |||
255 | void mpc8xx_show_cpuinfo(struct seq_file *m) | ||
256 | { | ||
257 | struct device_node *root; | ||
258 | uint memsize = total_memory; | ||
259 | const char *model = ""; | ||
260 | |||
261 | seq_printf(m, "Vendor\t\t: Freescale Semiconductor\n"); | ||
262 | |||
263 | root = of_find_node_by_path("/"); | ||
264 | if (root) | ||
265 | model = get_property(root, "model", NULL); | ||
266 | seq_printf(m, "Machine\t\t: %s\n", model); | ||
267 | of_node_put(root); | ||
268 | |||
269 | seq_printf(m, "Memory\t\t: %d MB\n", memsize / (1024 * 1024)); | ||
270 | } | ||
271 | |||
272 | static void cpm_cascade(unsigned int irq, struct irq_desc *desc) | ||
273 | { | ||
274 | int cascade_irq; | ||
275 | |||
276 | if ((cascade_irq = cpm_get_irq()) >= 0) { | ||
277 | struct irq_desc *cdesc = irq_desc + cascade_irq; | ||
278 | |||
279 | generic_handle_irq(cascade_irq); | ||
280 | cdesc->chip->eoi(cascade_irq); | ||
281 | } | ||
282 | desc->chip->eoi(irq); | ||
283 | } | ||
284 | |||
285 | /* Initialize the internal interrupt controller. The number of | ||
286 | * interrupts supported can vary with the processor type, and the | ||
287 | * 82xx family can have up to 64. | ||
288 | * External interrupts can be either edge or level triggered, and | ||
289 | * need to be initialized by the appropriate driver. | ||
290 | */ | ||
291 | void __init m8xx_pic_init(void) | ||
292 | { | ||
293 | int irq; | ||
294 | |||
295 | if (mpc8xx_pic_init()) { | ||
296 | printk(KERN_ERR "Failed interrupt 8xx controller initialization\n"); | ||
297 | return; | ||
298 | } | ||
299 | |||
300 | irq = cpm_pic_init(); | ||
301 | if (irq != NO_IRQ) | ||
302 | set_irq_chained_handler(irq, cpm_cascade); | ||
303 | } | ||
diff --git a/arch/powerpc/platforms/8xx/mpc86xads.h b/arch/powerpc/platforms/8xx/mpc86xads.h new file mode 100644 index 000000000000..b5d19dd0619c --- /dev/null +++ b/arch/powerpc/platforms/8xx/mpc86xads.h | |||
@@ -0,0 +1,95 @@ | |||
1 | /* | ||
2 | * A collection of structures, addresses, and values associated with | ||
3 | * the Freescale MPC86xADS board. | ||
4 | * Copied from the FADS stuff. | ||
5 | * | ||
6 | * Author: MontaVista Software, Inc. | ||
7 | * source@mvista.com | ||
8 | * | ||
9 | * 2005 (c) MontaVista Software, Inc. This file is licensed under the | ||
10 | * terms of the GNU General Public License version 2. This program is licensed | ||
11 | * "as is" without any warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #ifdef __KERNEL__ | ||
15 | #ifndef __ASM_MPC86XADS_H__ | ||
16 | #define __ASM_MPC86XADS_H__ | ||
17 | |||
18 | #include <asm/ppcboot.h> | ||
19 | #include <sysdev/fsl_soc.h> | ||
20 | |||
21 | /* U-Boot maps BCSR to 0xff080000 */ | ||
22 | #define BCSR_ADDR ((uint)0xff080000) | ||
23 | #define BCSR_SIZE ((uint)32) | ||
24 | #define BCSR0 ((uint)(BCSR_ADDR + 0x00)) | ||
25 | #define BCSR1 ((uint)(BCSR_ADDR + 0x04)) | ||
26 | #define BCSR2 ((uint)(BCSR_ADDR + 0x08)) | ||
27 | #define BCSR3 ((uint)(BCSR_ADDR + 0x0c)) | ||
28 | #define BCSR4 ((uint)(BCSR_ADDR + 0x10)) | ||
29 | |||
30 | #define CFG_PHYDEV_ADDR ((uint)0xff0a0000) | ||
31 | #define BCSR5 ((uint)(CFG_PHYDEV_ADDR + 0x300)) | ||
32 | |||
33 | #define IMAP_ADDR (get_immrbase()) | ||
34 | #define IMAP_SIZE ((uint)(64 * 1024)) | ||
35 | |||
36 | #define MPC8xx_CPM_OFFSET (0x9c0) | ||
37 | #define CPM_MAP_ADDR (get_immrbase() + MPC8xx_CPM_OFFSET) | ||
38 | #define CPM_IRQ_OFFSET 16 // for compability with cpm_uart driver | ||
39 | |||
40 | #define PCMCIA_MEM_ADDR (uint)0xff020000) | ||
41 | #define PCMCIA_MEM_SIZE ((uint)(64 * 1024)) | ||
42 | |||
43 | /* Bits of interest in the BCSRs. | ||
44 | */ | ||
45 | #define BCSR1_ETHEN ((uint)0x20000000) | ||
46 | #define BCSR1_IRDAEN ((uint)0x10000000) | ||
47 | #define BCSR1_RS232EN_1 ((uint)0x01000000) | ||
48 | #define BCSR1_PCCEN ((uint)0x00800000) | ||
49 | #define BCSR1_PCCVCC0 ((uint)0x00400000) | ||
50 | #define BCSR1_PCCVPP0 ((uint)0x00200000) | ||
51 | #define BCSR1_PCCVPP1 ((uint)0x00100000) | ||
52 | #define BCSR1_PCCVPP_MASK (BCSR1_PCCVPP0 | BCSR1_PCCVPP1) | ||
53 | #define BCSR1_RS232EN_2 ((uint)0x00040000) | ||
54 | #define BCSR1_PCCVCC1 ((uint)0x00010000) | ||
55 | #define BCSR1_PCCVCC_MASK (BCSR1_PCCVCC0 | BCSR1_PCCVCC1) | ||
56 | |||
57 | #define BCSR4_ETH10_RST ((uint)0x80000000) /* 10Base-T PHY reset*/ | ||
58 | #define BCSR4_USB_LO_SPD ((uint)0x04000000) | ||
59 | #define BCSR4_USB_VCC ((uint)0x02000000) | ||
60 | #define BCSR4_USB_FULL_SPD ((uint)0x00040000) | ||
61 | #define BCSR4_USB_EN ((uint)0x00020000) | ||
62 | |||
63 | #define BCSR5_MII2_EN 0x40 | ||
64 | #define BCSR5_MII2_RST 0x20 | ||
65 | #define BCSR5_T1_RST 0x10 | ||
66 | #define BCSR5_ATM155_RST 0x08 | ||
67 | #define BCSR5_ATM25_RST 0x04 | ||
68 | #define BCSR5_MII1_EN 0x02 | ||
69 | #define BCSR5_MII1_RST 0x01 | ||
70 | |||
71 | /* Interrupt level assignments */ | ||
72 | #define PHY_INTERRUPT SIU_IRQ7 /* PHY link change interrupt */ | ||
73 | #define SIU_INT_FEC1 SIU_LEVEL1 /* FEC1 interrupt */ | ||
74 | #define FEC_INTERRUPT SIU_INT_FEC1 /* FEC interrupt */ | ||
75 | |||
76 | /* We don't use the 8259 */ | ||
77 | #define NR_8259_INTS 0 | ||
78 | |||
79 | /* CPM Ethernet through SCC1 */ | ||
80 | #define PA_ENET_RXD ((ushort)0x0001) | ||
81 | #define PA_ENET_TXD ((ushort)0x0002) | ||
82 | #define PA_ENET_TCLK ((ushort)0x0100) | ||
83 | #define PA_ENET_RCLK ((ushort)0x0200) | ||
84 | #define PB_ENET_TENA ((uint)0x00001000) | ||
85 | #define PC_ENET_CLSN ((ushort)0x0010) | ||
86 | #define PC_ENET_RENA ((ushort)0x0020) | ||
87 | |||
88 | /* Control bits in the SICR to route TCLK (CLK1) and RCLK (CLK2) to | ||
89 | * SCC1. Also, make sure GR1 (bit 24) and SC1 (bit 25) are zero. | ||
90 | */ | ||
91 | #define SICR_ENET_MASK ((uint)0x000000ff) | ||
92 | #define SICR_ENET_CLKRT ((uint)0x0000002c) | ||
93 | |||
94 | #endif /* __ASM_MPC86XADS_H__ */ | ||
95 | #endif /* __KERNEL__ */ | ||
diff --git a/arch/powerpc/platforms/8xx/mpc86xads_setup.c b/arch/powerpc/platforms/8xx/mpc86xads_setup.c new file mode 100644 index 000000000000..ef52ce701b0e --- /dev/null +++ b/arch/powerpc/platforms/8xx/mpc86xads_setup.c | |||
@@ -0,0 +1,301 @@ | |||
1 | /*arch/ppc/platforms/mpc86xads-setup.c | ||
2 | * | ||
3 | * Platform setup for the Freescale mpc86xads board | ||
4 | * | ||
5 | * Vitaly Bordug <vbordug@ru.mvista.com> | ||
6 | * | ||
7 | * Copyright 2005 MontaVista Software Inc. | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public License | ||
10 | * version 2. This program is licensed "as is" without any warranty of any | ||
11 | * kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #include <linux/init.h> | ||
15 | #include <linux/module.h> | ||
16 | #include <linux/param.h> | ||
17 | #include <linux/string.h> | ||
18 | #include <linux/ioport.h> | ||
19 | #include <linux/device.h> | ||
20 | #include <linux/delay.h> | ||
21 | #include <linux/root_dev.h> | ||
22 | |||
23 | #include <linux/fs_enet_pd.h> | ||
24 | #include <linux/fs_uart_pd.h> | ||
25 | #include <linux/mii.h> | ||
26 | |||
27 | #include <asm/delay.h> | ||
28 | #include <asm/io.h> | ||
29 | #include <asm/machdep.h> | ||
30 | #include <asm/page.h> | ||
31 | #include <asm/processor.h> | ||
32 | #include <asm/system.h> | ||
33 | #include <asm/time.h> | ||
34 | #include <asm/ppcboot.h> | ||
35 | #include <asm/mpc8xx.h> | ||
36 | #include <asm/8xx_immap.h> | ||
37 | #include <asm/commproc.h> | ||
38 | #include <asm/fs_pd.h> | ||
39 | #include <asm/prom.h> | ||
40 | |||
41 | extern void cpm_reset(void); | ||
42 | extern void mpc8xx_show_cpuinfo(struct seq_file*); | ||
43 | extern void mpc8xx_restart(char *cmd); | ||
44 | extern void mpc8xx_calibrate_decr(void); | ||
45 | extern int mpc8xx_set_rtc_time(struct rtc_time *tm); | ||
46 | extern void mpc8xx_get_rtc_time(struct rtc_time *tm); | ||
47 | extern void m8xx_pic_init(void); | ||
48 | extern unsigned int mpc8xx_get_irq(void); | ||
49 | |||
50 | static void init_smc1_uart_ioports(struct fs_uart_platform_info* fpi); | ||
51 | static void init_smc2_uart_ioports(struct fs_uart_platform_info* fpi); | ||
52 | static void init_scc1_ioports(struct fs_platform_info* ptr); | ||
53 | |||
54 | void __init mpc86xads_board_setup(void) | ||
55 | { | ||
56 | cpm8xx_t *cp; | ||
57 | unsigned int *bcsr_io; | ||
58 | u8 tmpval8; | ||
59 | |||
60 | bcsr_io = ioremap(BCSR1, sizeof(unsigned long)); | ||
61 | cp = (cpm8xx_t *)immr_map(im_cpm); | ||
62 | |||
63 | if (bcsr_io == NULL) { | ||
64 | printk(KERN_CRIT "Could not remap BCSR\n"); | ||
65 | return; | ||
66 | } | ||
67 | #ifdef CONFIG_SERIAL_CPM_SMC1 | ||
68 | clrbits32(bcsr_io, BCSR1_RS232EN_1); | ||
69 | clrbits32(&cp->cp_simode, 0xe0000000 >> 17); /* brg1 */ | ||
70 | tmpval8 = in_8(&(cp->cp_smc[0].smc_smcm)) | (SMCM_RX | SMCM_TX); | ||
71 | out_8(&(cp->cp_smc[0].smc_smcm), tmpval8); | ||
72 | clrbits16(&cp->cp_smc[0].smc_smcmr, SMCMR_REN | SMCMR_TEN); | ||
73 | #else | ||
74 | setbits32(bcsr_io,BCSR1_RS232EN_1); | ||
75 | out_be16(&cp->cp_smc[0].smc_smcmr, 0); | ||
76 | out_8(&cp->cp_smc[0].smc_smce, 0); | ||
77 | #endif | ||
78 | |||
79 | #ifdef CONFIG_SERIAL_CPM_SMC2 | ||
80 | clrbits32(bcsr_io,BCSR1_RS232EN_2); | ||
81 | clrbits32(&cp->cp_simode, 0xe0000000 >> 1); | ||
82 | setbits32(&cp->cp_simode, 0x20000000 >> 1); /* brg2 */ | ||
83 | tmpval8 = in_8(&(cp->cp_smc[1].smc_smcm)) | (SMCM_RX | SMCM_TX); | ||
84 | out_8(&(cp->cp_smc[1].smc_smcm), tmpval8); | ||
85 | clrbits16(&cp->cp_smc[1].smc_smcmr, SMCMR_REN | SMCMR_TEN); | ||
86 | |||
87 | init_smc2_uart_ioports(0); | ||
88 | #else | ||
89 | setbits32(bcsr_io,BCSR1_RS232EN_2); | ||
90 | out_be16(&cp->cp_smc[1].smc_smcmr, 0); | ||
91 | out_8(&cp->cp_smc[1].smc_smce, 0); | ||
92 | #endif | ||
93 | immr_unmap(cp); | ||
94 | iounmap(bcsr_io); | ||
95 | } | ||
96 | |||
97 | |||
98 | static void init_fec1_ioports(struct fs_platform_info* ptr) | ||
99 | { | ||
100 | iop8xx_t *io_port = (iop8xx_t *)immr_map(im_ioport); | ||
101 | |||
102 | /* configure FEC1 pins */ | ||
103 | |||
104 | setbits16(&io_port->iop_pdpar, 0x1fff); | ||
105 | setbits16(&io_port->iop_pddir, 0x1fff); | ||
106 | |||
107 | immr_unmap(io_port); | ||
108 | } | ||
109 | |||
110 | void init_fec_ioports(struct fs_platform_info *fpi) | ||
111 | { | ||
112 | int fec_no = fs_get_fec_index(fpi->fs_no); | ||
113 | |||
114 | switch (fec_no) { | ||
115 | case 0: | ||
116 | init_fec1_ioports(fpi); | ||
117 | break; | ||
118 | default: | ||
119 | printk(KERN_ERR "init_fec_ioports: invalid FEC number\n"); | ||
120 | return; | ||
121 | } | ||
122 | } | ||
123 | |||
124 | static void init_scc1_ioports(struct fs_platform_info* fpi) | ||
125 | { | ||
126 | unsigned *bcsr_io; | ||
127 | iop8xx_t *io_port; | ||
128 | cpm8xx_t *cp; | ||
129 | |||
130 | bcsr_io = ioremap(BCSR_ADDR, BCSR_SIZE); | ||
131 | io_port = (iop8xx_t *)immr_map(im_ioport); | ||
132 | cp = (cpm8xx_t *)immr_map(im_cpm); | ||
133 | |||
134 | if (bcsr_io == NULL) { | ||
135 | printk(KERN_CRIT "Could not remap BCSR\n"); | ||
136 | return; | ||
137 | } | ||
138 | |||
139 | /* Configure port A pins for Txd and Rxd. | ||
140 | */ | ||
141 | setbits16(&io_port->iop_papar, PA_ENET_RXD | PA_ENET_TXD); | ||
142 | clrbits16(&io_port->iop_padir, PA_ENET_RXD | PA_ENET_TXD); | ||
143 | clrbits16(&io_port->iop_paodr, PA_ENET_TXD); | ||
144 | |||
145 | /* Configure port C pins to enable CLSN and RENA. | ||
146 | */ | ||
147 | clrbits16(&io_port->iop_pcpar, PC_ENET_CLSN | PC_ENET_RENA); | ||
148 | clrbits16(&io_port->iop_pcdir, PC_ENET_CLSN | PC_ENET_RENA); | ||
149 | setbits16(&io_port->iop_pcso, PC_ENET_CLSN | PC_ENET_RENA); | ||
150 | |||
151 | /* Configure port A for TCLK and RCLK. | ||
152 | */ | ||
153 | setbits16(&io_port->iop_papar, PA_ENET_TCLK | PA_ENET_RCLK); | ||
154 | clrbits16(&io_port->iop_padir, PA_ENET_TCLK | PA_ENET_RCLK); | ||
155 | clrbits32(&cp->cp_pbpar, PB_ENET_TENA); | ||
156 | clrbits32(&cp->cp_pbdir, PB_ENET_TENA); | ||
157 | |||
158 | /* Configure Serial Interface clock routing. | ||
159 | * First, clear all SCC bits to zero, then set the ones we want. | ||
160 | */ | ||
161 | clrbits32(&cp->cp_sicr, SICR_ENET_MASK); | ||
162 | setbits32(&cp->cp_sicr, SICR_ENET_CLKRT); | ||
163 | |||
164 | /* In the original SCC enet driver the following code is placed at | ||
165 | the end of the initialization */ | ||
166 | setbits32(&cp->cp_pbpar, PB_ENET_TENA); | ||
167 | setbits32(&cp->cp_pbdir, PB_ENET_TENA); | ||
168 | |||
169 | clrbits32(bcsr_io+1, BCSR1_ETHEN); | ||
170 | iounmap(bcsr_io); | ||
171 | immr_unmap(cp); | ||
172 | immr_unmap(io_port); | ||
173 | } | ||
174 | |||
175 | void init_scc_ioports(struct fs_platform_info *fpi) | ||
176 | { | ||
177 | int scc_no = fs_get_scc_index(fpi->fs_no); | ||
178 | |||
179 | switch (scc_no) { | ||
180 | case 0: | ||
181 | init_scc1_ioports(fpi); | ||
182 | break; | ||
183 | default: | ||
184 | printk(KERN_ERR "init_scc_ioports: invalid SCC number\n"); | ||
185 | return; | ||
186 | } | ||
187 | } | ||
188 | |||
189 | |||
190 | |||
191 | static void init_smc1_uart_ioports(struct fs_uart_platform_info* ptr) | ||
192 | { | ||
193 | unsigned *bcsr_io; | ||
194 | cpm8xx_t *cp = (cpm8xx_t *)immr_map(im_cpm); | ||
195 | |||
196 | setbits32(&cp->cp_pbpar, 0x000000c0); | ||
197 | clrbits32(&cp->cp_pbdir, 0x000000c0); | ||
198 | clrbits16(&cp->cp_pbodr, 0x00c0); | ||
199 | immr_unmap(cp); | ||
200 | |||
201 | bcsr_io = ioremap(BCSR1, sizeof(unsigned long)); | ||
202 | |||
203 | if (bcsr_io == NULL) { | ||
204 | printk(KERN_CRIT "Could not remap BCSR1\n"); | ||
205 | return; | ||
206 | } | ||
207 | clrbits32(bcsr_io,BCSR1_RS232EN_1); | ||
208 | iounmap(bcsr_io); | ||
209 | } | ||
210 | |||
211 | static void init_smc2_uart_ioports(struct fs_uart_platform_info* fpi) | ||
212 | { | ||
213 | unsigned *bcsr_io; | ||
214 | cpm8xx_t *cp = (cpm8xx_t *)immr_map(im_cpm); | ||
215 | |||
216 | setbits32(&cp->cp_pbpar, 0x00000c00); | ||
217 | clrbits32(&cp->cp_pbdir, 0x00000c00); | ||
218 | clrbits16(&cp->cp_pbodr, 0x0c00); | ||
219 | immr_unmap(cp); | ||
220 | |||
221 | bcsr_io = ioremap(BCSR1, sizeof(unsigned long)); | ||
222 | |||
223 | if (bcsr_io == NULL) { | ||
224 | printk(KERN_CRIT "Could not remap BCSR1\n"); | ||
225 | return; | ||
226 | } | ||
227 | clrbits32(bcsr_io,BCSR1_RS232EN_2); | ||
228 | iounmap(bcsr_io); | ||
229 | } | ||
230 | |||
231 | void init_smc_ioports(struct fs_uart_platform_info *data) | ||
232 | { | ||
233 | int smc_no = fs_uart_id_fsid2smc(data->fs_no); | ||
234 | |||
235 | switch (smc_no) { | ||
236 | case 0: | ||
237 | init_smc1_uart_ioports(data); | ||
238 | data->brg = data->clk_rx; | ||
239 | break; | ||
240 | case 1: | ||
241 | init_smc2_uart_ioports(data); | ||
242 | data->brg = data->clk_rx; | ||
243 | break; | ||
244 | default: | ||
245 | printk(KERN_ERR "init_scc_ioports: invalid SCC number\n"); | ||
246 | return; | ||
247 | } | ||
248 | } | ||
249 | |||
250 | int platform_device_skip(char *model, int id) | ||
251 | { | ||
252 | return 0; | ||
253 | } | ||
254 | |||
255 | static void __init mpc86xads_setup_arch(void) | ||
256 | { | ||
257 | struct device_node *cpu; | ||
258 | |||
259 | cpu = of_find_node_by_type(NULL, "cpu"); | ||
260 | if (cpu != 0) { | ||
261 | const unsigned int *fp; | ||
262 | |||
263 | fp = get_property(cpu, "clock-frequency", NULL); | ||
264 | if (fp != 0) | ||
265 | loops_per_jiffy = *fp / HZ; | ||
266 | else | ||
267 | loops_per_jiffy = 50000000 / HZ; | ||
268 | of_node_put(cpu); | ||
269 | } | ||
270 | |||
271 | cpm_reset(); | ||
272 | |||
273 | mpc86xads_board_setup(); | ||
274 | |||
275 | ROOT_DEV = Root_NFS; | ||
276 | } | ||
277 | |||
278 | static int __init mpc86xads_probe(void) | ||
279 | { | ||
280 | char *model = of_get_flat_dt_prop(of_get_flat_dt_root(), | ||
281 | "model", NULL); | ||
282 | if (model == NULL) | ||
283 | return 0; | ||
284 | if (strcmp(model, "MPC866ADS")) | ||
285 | return 0; | ||
286 | |||
287 | return 1; | ||
288 | } | ||
289 | |||
290 | define_machine(mpc86x_ads) { | ||
291 | .name = "MPC86x ADS", | ||
292 | .probe = mpc86xads_probe, | ||
293 | .setup_arch = mpc86xads_setup_arch, | ||
294 | .init_IRQ = m8xx_pic_init, | ||
295 | .show_cpuinfo = mpc8xx_show_cpuinfo, | ||
296 | .get_irq = mpc8xx_get_irq, | ||
297 | .restart = mpc8xx_restart, | ||
298 | .calibrate_decr = mpc8xx_calibrate_decr, | ||
299 | .set_rtc_time = mpc8xx_set_rtc_time, | ||
300 | .get_rtc_time = mpc8xx_get_rtc_time, | ||
301 | }; | ||
diff --git a/arch/powerpc/platforms/8xx/mpc885ads.h b/arch/powerpc/platforms/8xx/mpc885ads.h new file mode 100644 index 000000000000..30cbebfe84c5 --- /dev/null +++ b/arch/powerpc/platforms/8xx/mpc885ads.h | |||
@@ -0,0 +1,95 @@ | |||
1 | /* | ||
2 | * A collection of structures, addresses, and values associated with | ||
3 | * the Freescale MPC885ADS board. | ||
4 | * Copied from the FADS stuff. | ||
5 | * | ||
6 | * Author: MontaVista Software, Inc. | ||
7 | * source@mvista.com | ||
8 | * | ||
9 | * 2005 (c) MontaVista Software, Inc. This file is licensed under the | ||
10 | * terms of the GNU General Public License version 2. This program is licensed | ||
11 | * "as is" without any warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #ifdef __KERNEL__ | ||
15 | #ifndef __ASM_MPC885ADS_H__ | ||
16 | #define __ASM_MPC885ADS_H__ | ||
17 | |||
18 | #include <asm/ppcboot.h> | ||
19 | #include <sysdev/fsl_soc.h> | ||
20 | |||
21 | /* U-Boot maps BCSR to 0xff080000 */ | ||
22 | #define BCSR_ADDR ((uint)0xff080000) | ||
23 | #define BCSR_SIZE ((uint)32) | ||
24 | #define BCSR0 ((uint)(BCSR_ADDR + 0x00)) | ||
25 | #define BCSR1 ((uint)(BCSR_ADDR + 0x04)) | ||
26 | #define BCSR2 ((uint)(BCSR_ADDR + 0x08)) | ||
27 | #define BCSR3 ((uint)(BCSR_ADDR + 0x0c)) | ||
28 | #define BCSR4 ((uint)(BCSR_ADDR + 0x10)) | ||
29 | |||
30 | #define CFG_PHYDEV_ADDR ((uint)0xff0a0000) | ||
31 | #define BCSR5 ((uint)(CFG_PHYDEV_ADDR + 0x300)) | ||
32 | |||
33 | #define IMAP_ADDR (get_immrbase()) | ||
34 | #define IMAP_SIZE ((uint)(64 * 1024)) | ||
35 | |||
36 | #define MPC8xx_CPM_OFFSET (0x9c0) | ||
37 | #define CPM_MAP_ADDR (get_immrbase() + MPC8xx_CPM_OFFSET) | ||
38 | #define CPM_IRQ_OFFSET 16 // for compability with cpm_uart driver | ||
39 | |||
40 | #define PCMCIA_MEM_ADDR (uint)0xff020000) | ||
41 | #define PCMCIA_MEM_SIZE ((uint)(64 * 1024)) | ||
42 | |||
43 | /* Bits of interest in the BCSRs. | ||
44 | */ | ||
45 | #define BCSR1_ETHEN ((uint)0x20000000) | ||
46 | #define BCSR1_IRDAEN ((uint)0x10000000) | ||
47 | #define BCSR1_RS232EN_1 ((uint)0x01000000) | ||
48 | #define BCSR1_PCCEN ((uint)0x00800000) | ||
49 | #define BCSR1_PCCVCC0 ((uint)0x00400000) | ||
50 | #define BCSR1_PCCVPP0 ((uint)0x00200000) | ||
51 | #define BCSR1_PCCVPP1 ((uint)0x00100000) | ||
52 | #define BCSR1_PCCVPP_MASK (BCSR1_PCCVPP0 | BCSR1_PCCVPP1) | ||
53 | #define BCSR1_RS232EN_2 ((uint)0x00040000) | ||
54 | #define BCSR1_PCCVCC1 ((uint)0x00010000) | ||
55 | #define BCSR1_PCCVCC_MASK (BCSR1_PCCVCC0 | BCSR1_PCCVCC1) | ||
56 | |||
57 | #define BCSR4_ETH10_RST ((uint)0x80000000) /* 10Base-T PHY reset*/ | ||
58 | #define BCSR4_USB_LO_SPD ((uint)0x04000000) | ||
59 | #define BCSR4_USB_VCC ((uint)0x02000000) | ||
60 | #define BCSR4_USB_FULL_SPD ((uint)0x00040000) | ||
61 | #define BCSR4_USB_EN ((uint)0x00020000) | ||
62 | |||
63 | #define BCSR5_MII2_EN 0x40 | ||
64 | #define BCSR5_MII2_RST 0x20 | ||
65 | #define BCSR5_T1_RST 0x10 | ||
66 | #define BCSR5_ATM155_RST 0x08 | ||
67 | #define BCSR5_ATM25_RST 0x04 | ||
68 | #define BCSR5_MII1_EN 0x02 | ||
69 | #define BCSR5_MII1_RST 0x01 | ||
70 | |||
71 | /* Interrupt level assignments */ | ||
72 | #define PHY_INTERRUPT SIU_IRQ7 /* PHY link change interrupt */ | ||
73 | #define SIU_INT_FEC1 SIU_LEVEL1 /* FEC1 interrupt */ | ||
74 | #define SIU_INT_FEC2 SIU_LEVEL3 /* FEC2 interrupt */ | ||
75 | #define FEC_INTERRUPT SIU_INT_FEC1 /* FEC interrupt */ | ||
76 | |||
77 | /* We don't use the 8259 */ | ||
78 | #define NR_8259_INTS 0 | ||
79 | |||
80 | /* CPM Ethernet through SCC3 */ | ||
81 | #define PA_ENET_RXD ((ushort)0x0040) | ||
82 | #define PA_ENET_TXD ((ushort)0x0080) | ||
83 | #define PE_ENET_TCLK ((uint)0x00004000) | ||
84 | #define PE_ENET_RCLK ((uint)0x00008000) | ||
85 | #define PE_ENET_TENA ((uint)0x00000010) | ||
86 | #define PC_ENET_CLSN ((ushort)0x0400) | ||
87 | #define PC_ENET_RENA ((ushort)0x0800) | ||
88 | |||
89 | /* Control bits in the SICR to route TCLK (CLK5) and RCLK (CLK6) to | ||
90 | * SCC3. Also, make sure GR3 (bit 8) and SC3 (bit 9) are zero */ | ||
91 | #define SICR_ENET_MASK ((uint)0x00ff0000) | ||
92 | #define SICR_ENET_CLKRT ((uint)0x002c0000) | ||
93 | |||
94 | #endif /* __ASM_MPC885ADS_H__ */ | ||
95 | #endif /* __KERNEL__ */ | ||
diff --git a/arch/powerpc/platforms/8xx/mpc885ads_setup.c b/arch/powerpc/platforms/8xx/mpc885ads_setup.c new file mode 100644 index 000000000000..c5fefdf66c0a --- /dev/null +++ b/arch/powerpc/platforms/8xx/mpc885ads_setup.c | |||
@@ -0,0 +1,387 @@ | |||
1 | /*arch/ppc/platforms/mpc885ads-setup.c | ||
2 | * | ||
3 | * Platform setup for the Freescale mpc885ads board | ||
4 | * | ||
5 | * Vitaly Bordug <vbordug@ru.mvista.com> | ||
6 | * | ||
7 | * Copyright 2005 MontaVista Software Inc. | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public License | ||
10 | * version 2. This program is licensed "as is" without any warranty of any | ||
11 | * kind, whether express or implied. | ||
12 | */ | ||
13 | |||
14 | #include <linux/init.h> | ||
15 | #include <linux/module.h> | ||
16 | #include <linux/param.h> | ||
17 | #include <linux/string.h> | ||
18 | #include <linux/ioport.h> | ||
19 | #include <linux/device.h> | ||
20 | #include <linux/delay.h> | ||
21 | #include <linux/root_dev.h> | ||
22 | |||
23 | #include <linux/fs_enet_pd.h> | ||
24 | #include <linux/fs_uart_pd.h> | ||
25 | #include <linux/mii.h> | ||
26 | |||
27 | #include <asm/delay.h> | ||
28 | #include <asm/io.h> | ||
29 | #include <asm/machdep.h> | ||
30 | #include <asm/page.h> | ||
31 | #include <asm/processor.h> | ||
32 | #include <asm/system.h> | ||
33 | #include <asm/time.h> | ||
34 | #include <asm/ppcboot.h> | ||
35 | #include <asm/mpc8xx.h> | ||
36 | #include <asm/8xx_immap.h> | ||
37 | #include <asm/commproc.h> | ||
38 | #include <asm/fs_pd.h> | ||
39 | #include <asm/prom.h> | ||
40 | |||
41 | extern void cpm_reset(void); | ||
42 | extern void mpc8xx_show_cpuinfo(struct seq_file*); | ||
43 | extern void mpc8xx_restart(char *cmd); | ||
44 | extern void mpc8xx_calibrate_decr(void); | ||
45 | extern int mpc8xx_set_rtc_time(struct rtc_time *tm); | ||
46 | extern void mpc8xx_get_rtc_time(struct rtc_time *tm); | ||
47 | extern void m8xx_pic_init(void); | ||
48 | extern unsigned int mpc8xx_get_irq(void); | ||
49 | |||
50 | static void init_smc1_uart_ioports(struct fs_uart_platform_info* fpi); | ||
51 | static void init_smc2_uart_ioports(struct fs_uart_platform_info* fpi); | ||
52 | static void init_scc3_ioports(struct fs_platform_info* ptr); | ||
53 | |||
54 | void __init mpc885ads_board_setup(void) | ||
55 | { | ||
56 | cpm8xx_t *cp; | ||
57 | unsigned int *bcsr_io; | ||
58 | u8 tmpval8; | ||
59 | |||
60 | #ifdef CONFIG_FS_ENET | ||
61 | iop8xx_t *io_port; | ||
62 | #endif | ||
63 | |||
64 | bcsr_io = ioremap(BCSR1, sizeof(unsigned long)); | ||
65 | cp = (cpm8xx_t *)immr_map(im_cpm); | ||
66 | |||
67 | if (bcsr_io == NULL) { | ||
68 | printk(KERN_CRIT "Could not remap BCSR\n"); | ||
69 | return; | ||
70 | } | ||
71 | #ifdef CONFIG_SERIAL_CPM_SMC1 | ||
72 | clrbits32(bcsr_io, BCSR1_RS232EN_1); | ||
73 | clrbits32(&cp->cp_simode, 0xe0000000 >> 17); /* brg1 */ | ||
74 | tmpval8 = in_8(&(cp->cp_smc[0].smc_smcm)) | (SMCM_RX | SMCM_TX); | ||
75 | out_8(&(cp->cp_smc[0].smc_smcm), tmpval8); | ||
76 | clrbits16(&cp->cp_smc[0].smc_smcmr, SMCMR_REN | SMCMR_TEN); /* brg1 */ | ||
77 | #else | ||
78 | setbits32(bcsr_io,BCSR1_RS232EN_1); | ||
79 | out_be16(&cp->cp_smc[0].smc_smcmr, 0); | ||
80 | out_8(&cp->cp_smc[0].smc_smce, 0); | ||
81 | #endif | ||
82 | |||
83 | #ifdef CONFIG_SERIAL_CPM_SMC2 | ||
84 | clrbits32(bcsr_io,BCSR1_RS232EN_2); | ||
85 | clrbits32(&cp->cp_simode, 0xe0000000 >> 1); | ||
86 | setbits32(&cp->cp_simode, 0x20000000 >> 1); /* brg2 */ | ||
87 | tmpval8 = in_8(&(cp->cp_smc[1].smc_smcm)) | (SMCM_RX | SMCM_TX); | ||
88 | out_8(&(cp->cp_smc[1].smc_smcm), tmpval8); | ||
89 | clrbits16(&cp->cp_smc[1].smc_smcmr, SMCMR_REN | SMCMR_TEN); | ||
90 | |||
91 | init_smc2_uart_ioports(0); | ||
92 | #else | ||
93 | setbits32(bcsr_io,BCSR1_RS232EN_2); | ||
94 | out_be16(&cp->cp_smc[1].smc_smcmr, 0); | ||
95 | out_8(&cp->cp_smc[1].smc_smce, 0); | ||
96 | #endif | ||
97 | immr_unmap(cp); | ||
98 | iounmap(bcsr_io); | ||
99 | |||
100 | #ifdef CONFIG_FS_ENET | ||
101 | /* use MDC for MII (common) */ | ||
102 | io_port = (iop8xx_t*)immr_map(im_ioport); | ||
103 | setbits16(&io_port->iop_pdpar, 0x0080); | ||
104 | clrbits16(&io_port->iop_pddir, 0x0080); | ||
105 | |||
106 | bcsr_io = ioremap(BCSR5, sizeof(unsigned long)); | ||
107 | clrbits32(bcsr_io,BCSR5_MII1_EN); | ||
108 | clrbits32(bcsr_io,BCSR5_MII1_RST); | ||
109 | #ifndef CONFIG_FC_ENET_HAS_SCC | ||
110 | clrbits32(bcsr_io,BCSR5_MII2_EN); | ||
111 | clrbits32(bcsr_io,BCSR5_MII2_RST); | ||
112 | |||
113 | #endif | ||
114 | iounmap(bcsr_io); | ||
115 | immr_unmap(io_port); | ||
116 | |||
117 | #endif | ||
118 | } | ||
119 | |||
120 | |||
121 | static void init_fec1_ioports(struct fs_platform_info* ptr) | ||
122 | { | ||
123 | cpm8xx_t *cp = (cpm8xx_t *)immr_map(im_cpm); | ||
124 | iop8xx_t *io_port = (iop8xx_t *)immr_map(im_ioport); | ||
125 | |||
126 | /* configure FEC1 pins */ | ||
127 | setbits16(&io_port->iop_papar, 0xf830); | ||
128 | setbits16(&io_port->iop_padir, 0x0830); | ||
129 | clrbits16(&io_port->iop_padir, 0xf000); | ||
130 | |||
131 | setbits32(&cp->cp_pbpar, 0x00001001); | ||
132 | clrbits32(&cp->cp_pbdir, 0x00001001); | ||
133 | |||
134 | setbits16(&io_port->iop_pcpar, 0x000c); | ||
135 | clrbits16(&io_port->iop_pcdir, 0x000c); | ||
136 | |||
137 | setbits32(&cp->cp_pepar, 0x00000003); | ||
138 | setbits32(&cp->cp_pedir, 0x00000003); | ||
139 | clrbits32(&cp->cp_peso, 0x00000003); | ||
140 | clrbits32(&cp->cp_cptr, 0x00000100); | ||
141 | |||
142 | immr_unmap(io_port); | ||
143 | immr_unmap(cp); | ||
144 | } | ||
145 | |||
146 | |||
147 | static void init_fec2_ioports(struct fs_platform_info* ptr) | ||
148 | { | ||
149 | cpm8xx_t *cp = (cpm8xx_t *)immr_map(im_cpm); | ||
150 | iop8xx_t *io_port = (iop8xx_t *)immr_map(im_ioport); | ||
151 | |||
152 | /* configure FEC2 pins */ | ||
153 | setbits32(&cp->cp_pepar, 0x0003fffc); | ||
154 | setbits32(&cp->cp_pedir, 0x0003fffc); | ||
155 | clrbits32(&cp->cp_peso, 0x000087fc); | ||
156 | setbits32(&cp->cp_peso, 0x00037800); | ||
157 | clrbits32(&cp->cp_cptr, 0x00000080); | ||
158 | |||
159 | immr_unmap(io_port); | ||
160 | immr_unmap(cp); | ||
161 | } | ||
162 | |||
163 | void init_fec_ioports(struct fs_platform_info *fpi) | ||
164 | { | ||
165 | int fec_no = fs_get_fec_index(fpi->fs_no); | ||
166 | |||
167 | switch (fec_no) { | ||
168 | case 0: | ||
169 | init_fec1_ioports(fpi); | ||
170 | break; | ||
171 | case 1: | ||
172 | init_fec2_ioports(fpi); | ||
173 | break; | ||
174 | default: | ||
175 | printk(KERN_ERR "init_fec_ioports: invalid FEC number\n"); | ||
176 | return; | ||
177 | } | ||
178 | } | ||
179 | |||
180 | static void init_scc3_ioports(struct fs_platform_info* fpi) | ||
181 | { | ||
182 | unsigned *bcsr_io; | ||
183 | iop8xx_t *io_port; | ||
184 | cpm8xx_t *cp; | ||
185 | |||
186 | bcsr_io = ioremap(BCSR_ADDR, BCSR_SIZE); | ||
187 | io_port = (iop8xx_t *)immr_map(im_ioport); | ||
188 | cp = (cpm8xx_t *)immr_map(im_cpm); | ||
189 | |||
190 | if (bcsr_io == NULL) { | ||
191 | printk(KERN_CRIT "Could not remap BCSR\n"); | ||
192 | return; | ||
193 | } | ||
194 | |||
195 | /* Enable the PHY. | ||
196 | */ | ||
197 | clrbits32(bcsr_io+4, BCSR4_ETH10_RST); | ||
198 | udelay(1000); | ||
199 | setbits32(bcsr_io+4, BCSR4_ETH10_RST); | ||
200 | /* Configure port A pins for Txd and Rxd. | ||
201 | */ | ||
202 | setbits16(&io_port->iop_papar, PA_ENET_RXD | PA_ENET_TXD); | ||
203 | clrbits16(&io_port->iop_padir, PA_ENET_RXD | PA_ENET_TXD); | ||
204 | |||
205 | /* Configure port C pins to enable CLSN and RENA. | ||
206 | */ | ||
207 | clrbits16(&io_port->iop_pcpar, PC_ENET_CLSN | PC_ENET_RENA); | ||
208 | clrbits16(&io_port->iop_pcdir, PC_ENET_CLSN | PC_ENET_RENA); | ||
209 | setbits16(&io_port->iop_pcso, PC_ENET_CLSN | PC_ENET_RENA); | ||
210 | |||
211 | /* Configure port E for TCLK and RCLK. | ||
212 | */ | ||
213 | setbits32(&cp->cp_pepar, PE_ENET_TCLK | PE_ENET_RCLK); | ||
214 | clrbits32(&cp->cp_pepar, PE_ENET_TENA); | ||
215 | clrbits32(&cp->cp_pedir, | ||
216 | PE_ENET_TCLK | PE_ENET_RCLK | PE_ENET_TENA); | ||
217 | clrbits32(&cp->cp_peso, PE_ENET_TCLK | PE_ENET_RCLK); | ||
218 | setbits32(&cp->cp_peso, PE_ENET_TENA); | ||
219 | |||
220 | /* Configure Serial Interface clock routing. | ||
221 | * First, clear all SCC bits to zero, then set the ones we want. | ||
222 | */ | ||
223 | clrbits32(&cp->cp_sicr, SICR_ENET_MASK); | ||
224 | setbits32(&cp->cp_sicr, SICR_ENET_CLKRT); | ||
225 | |||
226 | /* Disable Rx and Tx. SMC1 sshould be stopped if SCC3 eternet are used. | ||
227 | */ | ||
228 | clrbits16(&cp->cp_smc[0].smc_smcmr, SMCMR_REN | SMCMR_TEN); | ||
229 | /* On the MPC885ADS SCC ethernet PHY is initialized in the full duplex mode | ||
230 | * by H/W setting after reset. SCC ethernet controller support only half duplex. | ||
231 | * This discrepancy of modes causes a lot of carrier lost errors. | ||
232 | */ | ||
233 | |||
234 | /* In the original SCC enet driver the following code is placed at | ||
235 | the end of the initialization */ | ||
236 | setbits32(&cp->cp_pepar, PE_ENET_TENA); | ||
237 | clrbits32(&cp->cp_pedir, PE_ENET_TENA); | ||
238 | setbits32(&cp->cp_peso, PE_ENET_TENA); | ||
239 | |||
240 | setbits32(bcsr_io+4, BCSR1_ETHEN); | ||
241 | iounmap(bcsr_io); | ||
242 | immr_unmap(io_port); | ||
243 | immr_unmap(cp); | ||
244 | } | ||
245 | |||
246 | void init_scc_ioports(struct fs_platform_info *fpi) | ||
247 | { | ||
248 | int scc_no = fs_get_scc_index(fpi->fs_no); | ||
249 | |||
250 | switch (scc_no) { | ||
251 | case 2: | ||
252 | init_scc3_ioports(fpi); | ||
253 | break; | ||
254 | default: | ||
255 | printk(KERN_ERR "init_scc_ioports: invalid SCC number\n"); | ||
256 | return; | ||
257 | } | ||
258 | } | ||
259 | |||
260 | |||
261 | |||
262 | static void init_smc1_uart_ioports(struct fs_uart_platform_info* ptr) | ||
263 | { | ||
264 | unsigned *bcsr_io; | ||
265 | cpm8xx_t *cp; | ||
266 | |||
267 | cp = (cpm8xx_t *)immr_map(im_cpm); | ||
268 | setbits32(&cp->cp_pepar, 0x000000c0); | ||
269 | clrbits32(&cp->cp_pedir, 0x000000c0); | ||
270 | clrbits32(&cp->cp_peso, 0x00000040); | ||
271 | setbits32(&cp->cp_peso, 0x00000080); | ||
272 | immr_unmap(cp); | ||
273 | |||
274 | bcsr_io = ioremap(BCSR1, sizeof(unsigned long)); | ||
275 | |||
276 | if (bcsr_io == NULL) { | ||
277 | printk(KERN_CRIT "Could not remap BCSR1\n"); | ||
278 | return; | ||
279 | } | ||
280 | clrbits32(bcsr_io,BCSR1_RS232EN_1); | ||
281 | iounmap(bcsr_io); | ||
282 | } | ||
283 | |||
284 | static void init_smc2_uart_ioports(struct fs_uart_platform_info* fpi) | ||
285 | { | ||
286 | unsigned *bcsr_io; | ||
287 | cpm8xx_t *cp; | ||
288 | |||
289 | cp = (cpm8xx_t *)immr_map(im_cpm); | ||
290 | setbits32(&cp->cp_pepar, 0x00000c00); | ||
291 | clrbits32(&cp->cp_pedir, 0x00000c00); | ||
292 | clrbits32(&cp->cp_peso, 0x00000400); | ||
293 | setbits32(&cp->cp_peso, 0x00000800); | ||
294 | immr_unmap(cp); | ||
295 | |||
296 | bcsr_io = ioremap(BCSR1, sizeof(unsigned long)); | ||
297 | |||
298 | if (bcsr_io == NULL) { | ||
299 | printk(KERN_CRIT "Could not remap BCSR1\n"); | ||
300 | return; | ||
301 | } | ||
302 | clrbits32(bcsr_io,BCSR1_RS232EN_2); | ||
303 | iounmap(bcsr_io); | ||
304 | } | ||
305 | |||
306 | void init_smc_ioports(struct fs_uart_platform_info *data) | ||
307 | { | ||
308 | int smc_no = fs_uart_id_fsid2smc(data->fs_no); | ||
309 | |||
310 | switch (smc_no) { | ||
311 | case 0: | ||
312 | init_smc1_uart_ioports(data); | ||
313 | data->brg = data->clk_rx; | ||
314 | break; | ||
315 | case 1: | ||
316 | init_smc2_uart_ioports(data); | ||
317 | data->brg = data->clk_rx; | ||
318 | break; | ||
319 | default: | ||
320 | printk(KERN_ERR "init_scc_ioports: invalid SCC number\n"); | ||
321 | return; | ||
322 | } | ||
323 | } | ||
324 | |||
325 | int platform_device_skip(char *model, int id) | ||
326 | { | ||
327 | #ifdef CONFIG_MPC8xx_SECOND_ETH_SCC3 | ||
328 | const char *dev = "FEC"; | ||
329 | int n = 2; | ||
330 | #else | ||
331 | const char *dev = "SCC"; | ||
332 | int n = 3; | ||
333 | #endif | ||
334 | |||
335 | if (!strcmp(model, dev) && n == id) | ||
336 | return 1; | ||
337 | |||
338 | return 0; | ||
339 | } | ||
340 | |||
341 | static void __init mpc885ads_setup_arch(void) | ||
342 | { | ||
343 | struct device_node *cpu; | ||
344 | |||
345 | cpu = of_find_node_by_type(NULL, "cpu"); | ||
346 | if (cpu != 0) { | ||
347 | const unsigned int *fp; | ||
348 | |||
349 | fp = get_property(cpu, "clock-frequency", NULL); | ||
350 | if (fp != 0) | ||
351 | loops_per_jiffy = *fp / HZ; | ||
352 | else | ||
353 | loops_per_jiffy = 50000000 / HZ; | ||
354 | of_node_put(cpu); | ||
355 | } | ||
356 | |||
357 | cpm_reset(); | ||
358 | |||
359 | mpc885ads_board_setup(); | ||
360 | |||
361 | ROOT_DEV = Root_NFS; | ||
362 | } | ||
363 | |||
364 | static int __init mpc885ads_probe(void) | ||
365 | { | ||
366 | char *model = of_get_flat_dt_prop(of_get_flat_dt_root(), | ||
367 | "model", NULL); | ||
368 | if (model == NULL) | ||
369 | return 0; | ||
370 | if (strcmp(model, "MPC885ADS")) | ||
371 | return 0; | ||
372 | |||
373 | return 1; | ||
374 | } | ||
375 | |||
376 | define_machine(mpc885_ads) { | ||
377 | .name = "MPC885 ADS", | ||
378 | .probe = mpc885ads_probe, | ||
379 | .setup_arch = mpc885ads_setup_arch, | ||
380 | .init_IRQ = m8xx_pic_init, | ||
381 | .show_cpuinfo = mpc8xx_show_cpuinfo, | ||
382 | .get_irq = mpc8xx_get_irq, | ||
383 | .restart = mpc8xx_restart, | ||
384 | .calibrate_decr = mpc8xx_calibrate_decr, | ||
385 | .set_rtc_time = mpc8xx_set_rtc_time, | ||
386 | .get_rtc_time = mpc8xx_get_rtc_time, | ||
387 | }; | ||
diff --git a/arch/powerpc/platforms/Makefile b/arch/powerpc/platforms/Makefile index 507d1b98f270..65e612315b9b 100644 --- a/arch/powerpc/platforms/Makefile +++ b/arch/powerpc/platforms/Makefile | |||
@@ -8,6 +8,8 @@ endif | |||
8 | obj-$(CONFIG_PPC_MPC52xx) += 52xx/ | 8 | obj-$(CONFIG_PPC_MPC52xx) += 52xx/ |
9 | obj-$(CONFIG_PPC_CHRP) += chrp/ | 9 | obj-$(CONFIG_PPC_CHRP) += chrp/ |
10 | obj-$(CONFIG_4xx) += 4xx/ | 10 | obj-$(CONFIG_4xx) += 4xx/ |
11 | obj-$(CONFIG_PPC_8xx) += 8xx/ | ||
12 | obj-$(CONFIG_PPC_82xx) += 82xx/ | ||
11 | obj-$(CONFIG_PPC_83xx) += 83xx/ | 13 | obj-$(CONFIG_PPC_83xx) += 83xx/ |
12 | obj-$(CONFIG_PPC_85xx) += 85xx/ | 14 | obj-$(CONFIG_PPC_85xx) += 85xx/ |
13 | obj-$(CONFIG_PPC_86xx) += 86xx/ | 15 | obj-$(CONFIG_PPC_86xx) += 86xx/ |
@@ -17,4 +19,5 @@ obj-$(CONFIG_PPC_MAPLE) += maple/ | |||
17 | obj-$(CONFIG_PPC_PASEMI) += pasemi/ | 19 | obj-$(CONFIG_PPC_PASEMI) += pasemi/ |
18 | obj-$(CONFIG_PPC_CELL) += cell/ | 20 | obj-$(CONFIG_PPC_CELL) += cell/ |
19 | obj-$(CONFIG_PPC_PS3) += ps3/ | 21 | obj-$(CONFIG_PPC_PS3) += ps3/ |
22 | obj-$(CONFIG_PPC_CELLEB) += celleb/ | ||
20 | obj-$(CONFIG_EMBEDDED6xx) += embedded6xx/ | 23 | obj-$(CONFIG_EMBEDDED6xx) += embedded6xx/ |
diff --git a/arch/powerpc/platforms/cell/Makefile b/arch/powerpc/platforms/cell/Makefile index f90e8337796c..869af89df6ff 100644 --- a/arch/powerpc/platforms/cell/Makefile +++ b/arch/powerpc/platforms/cell/Makefile | |||
@@ -14,7 +14,12 @@ endif | |||
14 | spufs-modular-$(CONFIG_SPU_FS) += spu_syscalls.o | 14 | spufs-modular-$(CONFIG_SPU_FS) += spu_syscalls.o |
15 | spu-priv1-$(CONFIG_PPC_CELL_NATIVE) += spu_priv1_mmio.o | 15 | spu-priv1-$(CONFIG_PPC_CELL_NATIVE) += spu_priv1_mmio.o |
16 | 16 | ||
17 | spu-manage-$(CONFIG_PPC_CELLEB) += spu_manage.o | ||
18 | spu-manage-$(CONFIG_PPC_CELL_NATIVE) += spu_manage.o | ||
19 | |||
17 | obj-$(CONFIG_SPU_BASE) += spu_callbacks.o spu_base.o \ | 20 | obj-$(CONFIG_SPU_BASE) += spu_callbacks.o spu_base.o \ |
18 | spu_coredump.o \ | 21 | spu_coredump.o \ |
19 | $(spufs-modular-m) \ | 22 | $(spufs-modular-m) \ |
20 | $(spu-priv1-y) spufs/ | 23 | $(spu-priv1-y) \ |
24 | $(spu-manage-y) \ | ||
25 | spufs/ | ||
diff --git a/arch/powerpc/platforms/cell/iommu.c b/arch/powerpc/platforms/cell/iommu.c index b43466ba8096..67d617b60a23 100644 --- a/arch/powerpc/platforms/cell/iommu.c +++ b/arch/powerpc/platforms/cell/iommu.c | |||
@@ -149,7 +149,8 @@ static int cbe_nr_iommus; | |||
149 | static void invalidate_tce_cache(struct cbe_iommu *iommu, unsigned long *pte, | 149 | static void invalidate_tce_cache(struct cbe_iommu *iommu, unsigned long *pte, |
150 | long n_ptes) | 150 | long n_ptes) |
151 | { | 151 | { |
152 | unsigned long *reg, val; | 152 | unsigned long __iomem *reg; |
153 | unsigned long val; | ||
153 | long n; | 154 | long n; |
154 | 155 | ||
155 | reg = iommu->xlate_regs + IOC_IOPT_CacheInvd; | 156 | reg = iommu->xlate_regs + IOC_IOPT_CacheInvd; |
@@ -592,7 +593,7 @@ static void __init cell_iommu_init_one(struct device_node *np, unsigned long off | |||
592 | /* Init base fields */ | 593 | /* Init base fields */ |
593 | i = cbe_nr_iommus++; | 594 | i = cbe_nr_iommus++; |
594 | iommu = &iommus[i]; | 595 | iommu = &iommus[i]; |
595 | iommu->stab = 0; | 596 | iommu->stab = NULL; |
596 | iommu->nid = nid; | 597 | iommu->nid = nid; |
597 | snprintf(iommu->name, sizeof(iommu->name), "iommu%d", i); | 598 | snprintf(iommu->name, sizeof(iommu->name), "iommu%d", i); |
598 | INIT_LIST_HEAD(&iommu->windows); | 599 | INIT_LIST_HEAD(&iommu->windows); |
diff --git a/arch/powerpc/platforms/cell/spu_base.c b/arch/powerpc/platforms/cell/spu_base.c index bd7bffc3ddd0..c43999a10deb 100644 --- a/arch/powerpc/platforms/cell/spu_base.c +++ b/arch/powerpc/platforms/cell/spu_base.c | |||
@@ -170,9 +170,11 @@ int | |||
170 | spu_irq_class_0_bottom(struct spu *spu) | 170 | spu_irq_class_0_bottom(struct spu *spu) |
171 | { | 171 | { |
172 | unsigned long stat, mask; | 172 | unsigned long stat, mask; |
173 | unsigned long flags; | ||
173 | 174 | ||
174 | spu->class_0_pending = 0; | 175 | spu->class_0_pending = 0; |
175 | 176 | ||
177 | spin_lock_irqsave(&spu->register_lock, flags); | ||
176 | mask = spu_int_mask_get(spu, 0); | 178 | mask = spu_int_mask_get(spu, 0); |
177 | stat = spu_int_stat_get(spu, 0); | 179 | stat = spu_int_stat_get(spu, 0); |
178 | 180 | ||
@@ -188,6 +190,7 @@ spu_irq_class_0_bottom(struct spu *spu) | |||
188 | __spu_trap_error(spu); | 190 | __spu_trap_error(spu); |
189 | 191 | ||
190 | spu_int_stat_clear(spu, 0, stat); | 192 | spu_int_stat_clear(spu, 0, stat); |
193 | spin_unlock_irqrestore(&spu->register_lock, flags); | ||
191 | 194 | ||
192 | return (stat & 0x7) ? -EIO : 0; | 195 | return (stat & 0x7) ? -EIO : 0; |
193 | } | 196 | } |
diff --git a/arch/powerpc/platforms/cell/spu_manage.c b/arch/powerpc/platforms/cell/spu_manage.c new file mode 100644 index 000000000000..d8b39fe39cdd --- /dev/null +++ b/arch/powerpc/platforms/cell/spu_manage.c | |||
@@ -0,0 +1,420 @@ | |||
1 | /* | ||
2 | * spu management operations for of based platforms | ||
3 | * | ||
4 | * (C) Copyright IBM Deutschland Entwicklung GmbH 2005 | ||
5 | * Copyright 2006 Sony Corp. | ||
6 | * (C) Copyright 2007 TOSHIBA CORPORATION | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; version 2 of the License. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License along | ||
18 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
19 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
20 | */ | ||
21 | |||
22 | #include <linux/interrupt.h> | ||
23 | #include <linux/list.h> | ||
24 | #include <linux/module.h> | ||
25 | #include <linux/ptrace.h> | ||
26 | #include <linux/slab.h> | ||
27 | #include <linux/wait.h> | ||
28 | #include <linux/mm.h> | ||
29 | #include <linux/io.h> | ||
30 | #include <linux/mutex.h> | ||
31 | #include <linux/device.h> | ||
32 | |||
33 | #include <asm/spu.h> | ||
34 | #include <asm/spu_priv1.h> | ||
35 | #include <asm/firmware.h> | ||
36 | #include <asm/prom.h> | ||
37 | |||
38 | #include "interrupt.h" | ||
39 | |||
40 | struct device_node *spu_devnode(struct spu *spu) | ||
41 | { | ||
42 | return spu->devnode; | ||
43 | } | ||
44 | |||
45 | EXPORT_SYMBOL_GPL(spu_devnode); | ||
46 | |||
47 | static u64 __init find_spu_unit_number(struct device_node *spe) | ||
48 | { | ||
49 | const unsigned int *prop; | ||
50 | int proplen; | ||
51 | prop = get_property(spe, "unit-id", &proplen); | ||
52 | if (proplen == 4) | ||
53 | return (u64)*prop; | ||
54 | |||
55 | prop = get_property(spe, "reg", &proplen); | ||
56 | if (proplen == 4) | ||
57 | return (u64)*prop; | ||
58 | |||
59 | return 0; | ||
60 | } | ||
61 | |||
62 | static int __init cell_spuprop_present(struct spu *spu, struct device_node *spe, | ||
63 | const char *prop) | ||
64 | { | ||
65 | const struct address_prop { | ||
66 | unsigned long address; | ||
67 | unsigned int len; | ||
68 | } __attribute__((packed)) *p; | ||
69 | int proplen; | ||
70 | |||
71 | unsigned long start_pfn, nr_pages; | ||
72 | struct pglist_data *pgdata; | ||
73 | struct zone *zone; | ||
74 | int ret; | ||
75 | |||
76 | p = get_property(spe, prop, &proplen); | ||
77 | WARN_ON(proplen != sizeof (*p)); | ||
78 | |||
79 | start_pfn = p->address >> PAGE_SHIFT; | ||
80 | nr_pages = ((unsigned long)p->len + PAGE_SIZE - 1) >> PAGE_SHIFT; | ||
81 | |||
82 | pgdata = NODE_DATA(spu->node); | ||
83 | zone = pgdata->node_zones; | ||
84 | |||
85 | ret = __add_pages(zone, start_pfn, nr_pages); | ||
86 | |||
87 | return ret; | ||
88 | } | ||
89 | |||
90 | static void __iomem * __init map_spe_prop(struct spu *spu, | ||
91 | struct device_node *n, const char *name) | ||
92 | { | ||
93 | const struct address_prop { | ||
94 | unsigned long address; | ||
95 | unsigned int len; | ||
96 | } __attribute__((packed)) *prop; | ||
97 | |||
98 | const void *p; | ||
99 | int proplen; | ||
100 | void __iomem *ret = NULL; | ||
101 | int err = 0; | ||
102 | |||
103 | p = get_property(n, name, &proplen); | ||
104 | if (proplen != sizeof (struct address_prop)) | ||
105 | return NULL; | ||
106 | |||
107 | prop = p; | ||
108 | |||
109 | err = cell_spuprop_present(spu, n, name); | ||
110 | if (err && (err != -EEXIST)) | ||
111 | goto out; | ||
112 | |||
113 | ret = ioremap(prop->address, prop->len); | ||
114 | |||
115 | out: | ||
116 | return ret; | ||
117 | } | ||
118 | |||
119 | static void spu_unmap(struct spu *spu) | ||
120 | { | ||
121 | if (!firmware_has_feature(FW_FEATURE_LPAR)) | ||
122 | iounmap(spu->priv1); | ||
123 | iounmap(spu->priv2); | ||
124 | iounmap(spu->problem); | ||
125 | iounmap((__force u8 __iomem *)spu->local_store); | ||
126 | } | ||
127 | |||
128 | static int __init spu_map_interrupts_old(struct spu *spu, | ||
129 | struct device_node *np) | ||
130 | { | ||
131 | unsigned int isrc; | ||
132 | const u32 *tmp; | ||
133 | int nid; | ||
134 | |||
135 | /* Get the interrupt source unit from the device-tree */ | ||
136 | tmp = get_property(np, "isrc", NULL); | ||
137 | if (!tmp) | ||
138 | return -ENODEV; | ||
139 | isrc = tmp[0]; | ||
140 | |||
141 | tmp = get_property(np->parent->parent, "node-id", NULL); | ||
142 | if (!tmp) { | ||
143 | printk(KERN_WARNING "%s: can't find node-id\n", __FUNCTION__); | ||
144 | nid = spu->node; | ||
145 | } else | ||
146 | nid = tmp[0]; | ||
147 | |||
148 | /* Add the node number */ | ||
149 | isrc |= nid << IIC_IRQ_NODE_SHIFT; | ||
150 | |||
151 | /* Now map interrupts of all 3 classes */ | ||
152 | spu->irqs[0] = irq_create_mapping(NULL, IIC_IRQ_CLASS_0 | isrc); | ||
153 | spu->irqs[1] = irq_create_mapping(NULL, IIC_IRQ_CLASS_1 | isrc); | ||
154 | spu->irqs[2] = irq_create_mapping(NULL, IIC_IRQ_CLASS_2 | isrc); | ||
155 | |||
156 | /* Right now, we only fail if class 2 failed */ | ||
157 | return spu->irqs[2] == NO_IRQ ? -EINVAL : 0; | ||
158 | } | ||
159 | |||
160 | static int __init spu_map_device_old(struct spu *spu) | ||
161 | { | ||
162 | struct device_node *node = spu->devnode; | ||
163 | const char *prop; | ||
164 | int ret; | ||
165 | |||
166 | ret = -ENODEV; | ||
167 | spu->name = get_property(node, "name", NULL); | ||
168 | if (!spu->name) | ||
169 | goto out; | ||
170 | |||
171 | prop = get_property(node, "local-store", NULL); | ||
172 | if (!prop) | ||
173 | goto out; | ||
174 | spu->local_store_phys = *(unsigned long *)prop; | ||
175 | |||
176 | /* we use local store as ram, not io memory */ | ||
177 | spu->local_store = (void __force *) | ||
178 | map_spe_prop(spu, node, "local-store"); | ||
179 | if (!spu->local_store) | ||
180 | goto out; | ||
181 | |||
182 | prop = get_property(node, "problem", NULL); | ||
183 | if (!prop) | ||
184 | goto out_unmap; | ||
185 | spu->problem_phys = *(unsigned long *)prop; | ||
186 | |||
187 | spu->problem = map_spe_prop(spu, node, "problem"); | ||
188 | if (!spu->problem) | ||
189 | goto out_unmap; | ||
190 | |||
191 | spu->priv2 = map_spe_prop(spu, node, "priv2"); | ||
192 | if (!spu->priv2) | ||
193 | goto out_unmap; | ||
194 | |||
195 | if (!firmware_has_feature(FW_FEATURE_LPAR)) { | ||
196 | spu->priv1 = map_spe_prop(spu, node, "priv1"); | ||
197 | if (!spu->priv1) | ||
198 | goto out_unmap; | ||
199 | } | ||
200 | |||
201 | ret = 0; | ||
202 | goto out; | ||
203 | |||
204 | out_unmap: | ||
205 | spu_unmap(spu); | ||
206 | out: | ||
207 | return ret; | ||
208 | } | ||
209 | |||
210 | static int __init spu_map_interrupts(struct spu *spu, struct device_node *np) | ||
211 | { | ||
212 | struct of_irq oirq; | ||
213 | int ret; | ||
214 | int i; | ||
215 | |||
216 | for (i=0; i < 3; i++) { | ||
217 | ret = of_irq_map_one(np, i, &oirq); | ||
218 | if (ret) { | ||
219 | pr_debug("spu_new: failed to get irq %d\n", i); | ||
220 | goto err; | ||
221 | } | ||
222 | ret = -EINVAL; | ||
223 | pr_debug(" irq %d no 0x%x on %s\n", i, oirq.specifier[0], | ||
224 | oirq.controller->full_name); | ||
225 | spu->irqs[i] = irq_create_of_mapping(oirq.controller, | ||
226 | oirq.specifier, oirq.size); | ||
227 | if (spu->irqs[i] == NO_IRQ) { | ||
228 | pr_debug("spu_new: failed to map it !\n"); | ||
229 | goto err; | ||
230 | } | ||
231 | } | ||
232 | return 0; | ||
233 | |||
234 | err: | ||
235 | pr_debug("failed to map irq %x for spu %s\n", *oirq.specifier, | ||
236 | spu->name); | ||
237 | for (; i >= 0; i--) { | ||
238 | if (spu->irqs[i] != NO_IRQ) | ||
239 | irq_dispose_mapping(spu->irqs[i]); | ||
240 | } | ||
241 | return ret; | ||
242 | } | ||
243 | |||
244 | static int spu_map_resource(struct spu *spu, int nr, | ||
245 | void __iomem** virt, unsigned long *phys) | ||
246 | { | ||
247 | struct device_node *np = spu->devnode; | ||
248 | unsigned long start_pfn, nr_pages; | ||
249 | struct pglist_data *pgdata; | ||
250 | struct zone *zone; | ||
251 | struct resource resource = { }; | ||
252 | unsigned long len; | ||
253 | int ret; | ||
254 | |||
255 | ret = of_address_to_resource(np, nr, &resource); | ||
256 | if (ret) | ||
257 | goto out; | ||
258 | |||
259 | if (phys) | ||
260 | *phys = resource.start; | ||
261 | len = resource.end - resource.start + 1; | ||
262 | *virt = ioremap(resource.start, len); | ||
263 | if (!*virt) | ||
264 | ret = -EINVAL; | ||
265 | |||
266 | start_pfn = resource.start >> PAGE_SHIFT; | ||
267 | nr_pages = (len + PAGE_SIZE - 1) >> PAGE_SHIFT; | ||
268 | |||
269 | pgdata = NODE_DATA(spu->node); | ||
270 | zone = pgdata->node_zones; | ||
271 | |||
272 | ret = __add_pages(zone, start_pfn, nr_pages); | ||
273 | |||
274 | out: | ||
275 | return ret; | ||
276 | } | ||
277 | |||
278 | static int __init spu_map_device(struct spu *spu) | ||
279 | { | ||
280 | struct device_node *np = spu->devnode; | ||
281 | int ret = -ENODEV; | ||
282 | |||
283 | spu->name = get_property(np, "name", NULL); | ||
284 | if (!spu->name) | ||
285 | goto out; | ||
286 | |||
287 | ret = spu_map_resource(spu, 0, (void __iomem**)&spu->local_store, | ||
288 | &spu->local_store_phys); | ||
289 | if (ret) { | ||
290 | pr_debug("spu_new: failed to map %s resource 0\n", | ||
291 | np->full_name); | ||
292 | goto out; | ||
293 | } | ||
294 | ret = spu_map_resource(spu, 1, (void __iomem**)&spu->problem, | ||
295 | &spu->problem_phys); | ||
296 | if (ret) { | ||
297 | pr_debug("spu_new: failed to map %s resource 1\n", | ||
298 | np->full_name); | ||
299 | goto out_unmap; | ||
300 | } | ||
301 | ret = spu_map_resource(spu, 2, (void __iomem**)&spu->priv2, NULL); | ||
302 | if (ret) { | ||
303 | pr_debug("spu_new: failed to map %s resource 2\n", | ||
304 | np->full_name); | ||
305 | goto out_unmap; | ||
306 | } | ||
307 | if (!firmware_has_feature(FW_FEATURE_LPAR)) | ||
308 | ret = spu_map_resource(spu, 3, | ||
309 | (void __iomem**)&spu->priv1, NULL); | ||
310 | if (ret) { | ||
311 | pr_debug("spu_new: failed to map %s resource 3\n", | ||
312 | np->full_name); | ||
313 | goto out_unmap; | ||
314 | } | ||
315 | pr_debug("spu_new: %s maps:\n", np->full_name); | ||
316 | pr_debug(" local store : 0x%016lx -> 0x%p\n", | ||
317 | spu->local_store_phys, spu->local_store); | ||
318 | pr_debug(" problem state : 0x%016lx -> 0x%p\n", | ||
319 | spu->problem_phys, spu->problem); | ||
320 | pr_debug(" priv2 : 0x%p\n", spu->priv2); | ||
321 | pr_debug(" priv1 : 0x%p\n", spu->priv1); | ||
322 | |||
323 | return 0; | ||
324 | |||
325 | out_unmap: | ||
326 | spu_unmap(spu); | ||
327 | out: | ||
328 | pr_debug("failed to map spe %s: %d\n", spu->name, ret); | ||
329 | return ret; | ||
330 | } | ||
331 | |||
332 | static int __init of_enumerate_spus(int (*fn)(void *data)) | ||
333 | { | ||
334 | int ret; | ||
335 | struct device_node *node; | ||
336 | |||
337 | ret = -ENODEV; | ||
338 | for (node = of_find_node_by_type(NULL, "spe"); | ||
339 | node; node = of_find_node_by_type(node, "spe")) { | ||
340 | ret = fn(node); | ||
341 | if (ret) { | ||
342 | printk(KERN_WARNING "%s: Error initializing %s\n", | ||
343 | __FUNCTION__, node->name); | ||
344 | break; | ||
345 | } | ||
346 | } | ||
347 | return ret; | ||
348 | } | ||
349 | |||
350 | static int __init of_create_spu(struct spu *spu, void *data) | ||
351 | { | ||
352 | int ret; | ||
353 | struct device_node *spe = (struct device_node *)data; | ||
354 | static int legacy_map = 0, legacy_irq = 0; | ||
355 | |||
356 | spu->devnode = of_node_get(spe); | ||
357 | spu->spe_id = find_spu_unit_number(spe); | ||
358 | |||
359 | spu->node = of_node_to_nid(spe); | ||
360 | if (spu->node >= MAX_NUMNODES) { | ||
361 | printk(KERN_WARNING "SPE %s on node %d ignored," | ||
362 | " node number too big\n", spe->full_name, spu->node); | ||
363 | printk(KERN_WARNING "Check if CONFIG_NUMA is enabled.\n"); | ||
364 | ret = -ENODEV; | ||
365 | goto out; | ||
366 | } | ||
367 | |||
368 | ret = spu_map_device(spu); | ||
369 | if (ret) { | ||
370 | if (!legacy_map) { | ||
371 | legacy_map = 1; | ||
372 | printk(KERN_WARNING "%s: Legacy device tree found, " | ||
373 | "trying to map old style\n", __FUNCTION__); | ||
374 | } | ||
375 | ret = spu_map_device_old(spu); | ||
376 | if (ret) { | ||
377 | printk(KERN_ERR "Unable to map %s\n", | ||
378 | spu->name); | ||
379 | goto out; | ||
380 | } | ||
381 | } | ||
382 | |||
383 | ret = spu_map_interrupts(spu, spe); | ||
384 | if (ret) { | ||
385 | if (!legacy_irq) { | ||
386 | legacy_irq = 1; | ||
387 | printk(KERN_WARNING "%s: Legacy device tree found, " | ||
388 | "trying old style irq\n", __FUNCTION__); | ||
389 | } | ||
390 | ret = spu_map_interrupts_old(spu, spe); | ||
391 | if (ret) { | ||
392 | printk(KERN_ERR "%s: could not map interrupts", | ||
393 | spu->name); | ||
394 | goto out_unmap; | ||
395 | } | ||
396 | } | ||
397 | |||
398 | pr_debug("Using SPE %s %p %p %p %p %d\n", spu->name, | ||
399 | spu->local_store, spu->problem, spu->priv1, | ||
400 | spu->priv2, spu->number); | ||
401 | goto out; | ||
402 | |||
403 | out_unmap: | ||
404 | spu_unmap(spu); | ||
405 | out: | ||
406 | return ret; | ||
407 | } | ||
408 | |||
409 | static int of_destroy_spu(struct spu *spu) | ||
410 | { | ||
411 | spu_unmap(spu); | ||
412 | of_node_put(spu->devnode); | ||
413 | return 0; | ||
414 | } | ||
415 | |||
416 | const struct spu_management_ops spu_management_of_ops = { | ||
417 | .enumerate_spus = of_enumerate_spus, | ||
418 | .create_spu = of_create_spu, | ||
419 | .destroy_spu = of_destroy_spu, | ||
420 | }; | ||
diff --git a/arch/powerpc/platforms/cell/spu_priv1_mmio.c b/arch/powerpc/platforms/cell/spu_priv1_mmio.c index 910a926b61a2..67fa7247b80a 100644 --- a/arch/powerpc/platforms/cell/spu_priv1_mmio.c +++ b/arch/powerpc/platforms/cell/spu_priv1_mmio.c | |||
@@ -37,490 +37,112 @@ | |||
37 | #include "interrupt.h" | 37 | #include "interrupt.h" |
38 | #include "spu_priv1_mmio.h" | 38 | #include "spu_priv1_mmio.h" |
39 | 39 | ||
40 | static DEFINE_MUTEX(add_spumem_mutex); | ||
41 | |||
42 | struct spu_pdata { | ||
43 | struct device_node *devnode; | ||
44 | struct spu_priv1 __iomem *priv1; | ||
45 | }; | ||
46 | |||
47 | static struct spu_pdata *spu_get_pdata(struct spu *spu) | ||
48 | { | ||
49 | BUG_ON(!spu->pdata); | ||
50 | return spu->pdata; | ||
51 | } | ||
52 | |||
53 | struct device_node *spu_devnode(struct spu *spu) | ||
54 | { | ||
55 | return spu_get_pdata(spu)->devnode; | ||
56 | } | ||
57 | |||
58 | EXPORT_SYMBOL_GPL(spu_devnode); | ||
59 | |||
60 | static int __init cell_spuprop_present(struct spu *spu, struct device_node *spe, | ||
61 | const char *prop) | ||
62 | { | ||
63 | const struct address_prop { | ||
64 | unsigned long address; | ||
65 | unsigned int len; | ||
66 | } __attribute__((packed)) *p; | ||
67 | int proplen; | ||
68 | |||
69 | unsigned long start_pfn, nr_pages; | ||
70 | struct pglist_data *pgdata; | ||
71 | struct zone *zone; | ||
72 | int ret; | ||
73 | |||
74 | p = get_property(spe, prop, &proplen); | ||
75 | WARN_ON(proplen != sizeof (*p)); | ||
76 | |||
77 | start_pfn = p->address >> PAGE_SHIFT; | ||
78 | nr_pages = ((unsigned long)p->len + PAGE_SIZE - 1) >> PAGE_SHIFT; | ||
79 | |||
80 | pgdata = NODE_DATA(spu->node); | ||
81 | zone = pgdata->node_zones; | ||
82 | |||
83 | /* XXX rethink locking here */ | ||
84 | mutex_lock(&add_spumem_mutex); | ||
85 | ret = __add_pages(zone, start_pfn, nr_pages); | ||
86 | mutex_unlock(&add_spumem_mutex); | ||
87 | |||
88 | return ret; | ||
89 | } | ||
90 | |||
91 | static void __iomem * __init map_spe_prop(struct spu *spu, | ||
92 | struct device_node *n, const char *name) | ||
93 | { | ||
94 | const struct address_prop { | ||
95 | unsigned long address; | ||
96 | unsigned int len; | ||
97 | } __attribute__((packed)) *prop; | ||
98 | |||
99 | const void *p; | ||
100 | int proplen; | ||
101 | void __iomem *ret = NULL; | ||
102 | int err = 0; | ||
103 | |||
104 | p = get_property(n, name, &proplen); | ||
105 | if (proplen != sizeof (struct address_prop)) | ||
106 | return NULL; | ||
107 | |||
108 | prop = p; | ||
109 | |||
110 | err = cell_spuprop_present(spu, n, name); | ||
111 | if (err && (err != -EEXIST)) | ||
112 | goto out; | ||
113 | |||
114 | ret = ioremap(prop->address, prop->len); | ||
115 | |||
116 | out: | ||
117 | return ret; | ||
118 | } | ||
119 | |||
120 | static void spu_unmap(struct spu *spu) | ||
121 | { | ||
122 | iounmap(spu->priv2); | ||
123 | iounmap(spu_get_pdata(spu)->priv1); | ||
124 | iounmap(spu->problem); | ||
125 | iounmap((__force u8 __iomem *)spu->local_store); | ||
126 | } | ||
127 | |||
128 | static int __init spu_map_interrupts_old(struct spu *spu, | ||
129 | struct device_node *np) | ||
130 | { | ||
131 | unsigned int isrc; | ||
132 | const u32 *tmp; | ||
133 | int nid; | ||
134 | |||
135 | /* Get the interrupt source unit from the device-tree */ | ||
136 | tmp = get_property(np, "isrc", NULL); | ||
137 | if (!tmp) | ||
138 | return -ENODEV; | ||
139 | isrc = tmp[0]; | ||
140 | |||
141 | tmp = get_property(np->parent->parent, "node-id", NULL); | ||
142 | if (!tmp) { | ||
143 | printk(KERN_WARNING "%s: can't find node-id\n", __FUNCTION__); | ||
144 | nid = spu->node; | ||
145 | } else | ||
146 | nid = tmp[0]; | ||
147 | |||
148 | /* Add the node number */ | ||
149 | isrc |= nid << IIC_IRQ_NODE_SHIFT; | ||
150 | |||
151 | /* Now map interrupts of all 3 classes */ | ||
152 | spu->irqs[0] = irq_create_mapping(NULL, IIC_IRQ_CLASS_0 | isrc); | ||
153 | spu->irqs[1] = irq_create_mapping(NULL, IIC_IRQ_CLASS_1 | isrc); | ||
154 | spu->irqs[2] = irq_create_mapping(NULL, IIC_IRQ_CLASS_2 | isrc); | ||
155 | |||
156 | /* Right now, we only fail if class 2 failed */ | ||
157 | return spu->irqs[2] == NO_IRQ ? -EINVAL : 0; | ||
158 | } | ||
159 | |||
160 | static int __init spu_map_device_old(struct spu *spu, struct device_node *node) | ||
161 | { | ||
162 | const char *prop; | ||
163 | int ret; | ||
164 | |||
165 | ret = -ENODEV; | ||
166 | spu->name = get_property(node, "name", NULL); | ||
167 | if (!spu->name) | ||
168 | goto out; | ||
169 | |||
170 | prop = get_property(node, "local-store", NULL); | ||
171 | if (!prop) | ||
172 | goto out; | ||
173 | spu->local_store_phys = *(unsigned long *)prop; | ||
174 | |||
175 | /* we use local store as ram, not io memory */ | ||
176 | spu->local_store = (void __force *) | ||
177 | map_spe_prop(spu, node, "local-store"); | ||
178 | if (!spu->local_store) | ||
179 | goto out; | ||
180 | |||
181 | prop = get_property(node, "problem", NULL); | ||
182 | if (!prop) | ||
183 | goto out_unmap; | ||
184 | spu->problem_phys = *(unsigned long *)prop; | ||
185 | |||
186 | spu->problem= map_spe_prop(spu, node, "problem"); | ||
187 | if (!spu->problem) | ||
188 | goto out_unmap; | ||
189 | |||
190 | spu_get_pdata(spu)->priv1= map_spe_prop(spu, node, "priv1"); | ||
191 | |||
192 | spu->priv2= map_spe_prop(spu, node, "priv2"); | ||
193 | if (!spu->priv2) | ||
194 | goto out_unmap; | ||
195 | ret = 0; | ||
196 | goto out; | ||
197 | |||
198 | out_unmap: | ||
199 | spu_unmap(spu); | ||
200 | out: | ||
201 | return ret; | ||
202 | } | ||
203 | |||
204 | static int __init spu_map_interrupts(struct spu *spu, struct device_node *np) | ||
205 | { | ||
206 | struct of_irq oirq; | ||
207 | int ret; | ||
208 | int i; | ||
209 | |||
210 | for (i=0; i < 3; i++) { | ||
211 | ret = of_irq_map_one(np, i, &oirq); | ||
212 | if (ret) { | ||
213 | pr_debug("spu_new: failed to get irq %d\n", i); | ||
214 | goto err; | ||
215 | } | ||
216 | ret = -EINVAL; | ||
217 | pr_debug(" irq %d no 0x%x on %s\n", i, oirq.specifier[0], | ||
218 | oirq.controller->full_name); | ||
219 | spu->irqs[i] = irq_create_of_mapping(oirq.controller, | ||
220 | oirq.specifier, oirq.size); | ||
221 | if (spu->irqs[i] == NO_IRQ) { | ||
222 | pr_debug("spu_new: failed to map it !\n"); | ||
223 | goto err; | ||
224 | } | ||
225 | } | ||
226 | return 0; | ||
227 | |||
228 | err: | ||
229 | pr_debug("failed to map irq %x for spu %s\n", *oirq.specifier, | ||
230 | spu->name); | ||
231 | for (; i >= 0; i--) { | ||
232 | if (spu->irqs[i] != NO_IRQ) | ||
233 | irq_dispose_mapping(spu->irqs[i]); | ||
234 | } | ||
235 | return ret; | ||
236 | } | ||
237 | |||
238 | static int spu_map_resource(struct spu *spu, int nr, | ||
239 | void __iomem** virt, unsigned long *phys) | ||
240 | { | ||
241 | struct device_node *np = spu_get_pdata(spu)->devnode; | ||
242 | unsigned long start_pfn, nr_pages; | ||
243 | struct pglist_data *pgdata; | ||
244 | struct zone *zone; | ||
245 | struct resource resource = { }; | ||
246 | unsigned long len; | ||
247 | int ret; | ||
248 | |||
249 | ret = of_address_to_resource(np, nr, &resource); | ||
250 | if (ret) | ||
251 | goto out; | ||
252 | |||
253 | if (phys) | ||
254 | *phys = resource.start; | ||
255 | len = resource.end - resource.start + 1; | ||
256 | *virt = ioremap(resource.start, len); | ||
257 | if (!*virt) | ||
258 | ret = -EINVAL; | ||
259 | |||
260 | start_pfn = resource.start >> PAGE_SHIFT; | ||
261 | nr_pages = (len + PAGE_SIZE - 1) >> PAGE_SHIFT; | ||
262 | |||
263 | pgdata = NODE_DATA(spu->node); | ||
264 | zone = pgdata->node_zones; | ||
265 | |||
266 | /* XXX rethink locking here */ | ||
267 | mutex_lock(&add_spumem_mutex); | ||
268 | ret = __add_pages(zone, start_pfn, nr_pages); | ||
269 | mutex_unlock(&add_spumem_mutex); | ||
270 | |||
271 | out: | ||
272 | return ret; | ||
273 | } | ||
274 | |||
275 | static int __init spu_map_device(struct spu *spu) | ||
276 | { | ||
277 | struct device_node *np = spu_get_pdata(spu)->devnode; | ||
278 | int ret = -ENODEV; | ||
279 | |||
280 | spu->name = get_property(np, "name", NULL); | ||
281 | if (!spu->name) | ||
282 | goto out; | ||
283 | |||
284 | ret = spu_map_resource(spu, 0, (void __iomem**)&spu->local_store, | ||
285 | &spu->local_store_phys); | ||
286 | if (ret) { | ||
287 | pr_debug("spu_new: failed to map %s resource 0\n", | ||
288 | np->full_name); | ||
289 | goto out; | ||
290 | } | ||
291 | ret = spu_map_resource(spu, 1, (void __iomem**)&spu->problem, | ||
292 | &spu->problem_phys); | ||
293 | if (ret) { | ||
294 | pr_debug("spu_new: failed to map %s resource 1\n", | ||
295 | np->full_name); | ||
296 | goto out_unmap; | ||
297 | } | ||
298 | ret = spu_map_resource(spu, 2, (void __iomem**)&spu->priv2, NULL); | ||
299 | if (ret) { | ||
300 | pr_debug("spu_new: failed to map %s resource 2\n", | ||
301 | np->full_name); | ||
302 | goto out_unmap; | ||
303 | } | ||
304 | if (!firmware_has_feature(FW_FEATURE_LPAR)) | ||
305 | ret = spu_map_resource(spu, 3, | ||
306 | (void __iomem**)&spu_get_pdata(spu)->priv1, NULL); | ||
307 | if (ret) { | ||
308 | pr_debug("spu_new: failed to map %s resource 3\n", | ||
309 | np->full_name); | ||
310 | goto out_unmap; | ||
311 | } | ||
312 | pr_debug("spu_new: %s maps:\n", np->full_name); | ||
313 | pr_debug(" local store : 0x%016lx -> 0x%p\n", | ||
314 | spu->local_store_phys, spu->local_store); | ||
315 | pr_debug(" problem state : 0x%016lx -> 0x%p\n", | ||
316 | spu->problem_phys, spu->problem); | ||
317 | pr_debug(" priv2 : 0x%p\n", spu->priv2); | ||
318 | pr_debug(" priv1 : 0x%p\n", | ||
319 | spu_get_pdata(spu)->priv1); | ||
320 | |||
321 | return 0; | ||
322 | |||
323 | out_unmap: | ||
324 | spu_unmap(spu); | ||
325 | out: | ||
326 | pr_debug("failed to map spe %s: %d\n", spu->name, ret); | ||
327 | return ret; | ||
328 | } | ||
329 | |||
330 | static int __init of_enumerate_spus(int (*fn)(void *data)) | ||
331 | { | ||
332 | int ret; | ||
333 | struct device_node *node; | ||
334 | |||
335 | ret = -ENODEV; | ||
336 | for (node = of_find_node_by_type(NULL, "spe"); | ||
337 | node; node = of_find_node_by_type(node, "spe")) { | ||
338 | ret = fn(node); | ||
339 | if (ret) { | ||
340 | printk(KERN_WARNING "%s: Error initializing %s\n", | ||
341 | __FUNCTION__, node->name); | ||
342 | break; | ||
343 | } | ||
344 | } | ||
345 | return ret; | ||
346 | } | ||
347 | |||
348 | static int __init of_create_spu(struct spu *spu, void *data) | ||
349 | { | ||
350 | int ret; | ||
351 | struct device_node *spe = (struct device_node *)data; | ||
352 | |||
353 | spu->pdata = kzalloc(sizeof(struct spu_pdata), | ||
354 | GFP_KERNEL); | ||
355 | if (!spu->pdata) { | ||
356 | ret = -ENOMEM; | ||
357 | goto out; | ||
358 | } | ||
359 | spu_get_pdata(spu)->devnode = of_node_get(spe); | ||
360 | |||
361 | spu->node = of_node_to_nid(spe); | ||
362 | if (spu->node >= MAX_NUMNODES) { | ||
363 | printk(KERN_WARNING "SPE %s on node %d ignored," | ||
364 | " node number too big\n", spe->full_name, spu->node); | ||
365 | printk(KERN_WARNING "Check if CONFIG_NUMA is enabled.\n"); | ||
366 | ret = -ENODEV; | ||
367 | goto out_free; | ||
368 | } | ||
369 | |||
370 | ret = spu_map_device(spu); | ||
371 | /* try old method */ | ||
372 | if (ret) | ||
373 | ret = spu_map_device_old(spu, spe); | ||
374 | if (ret) | ||
375 | goto out_free; | ||
376 | |||
377 | ret = spu_map_interrupts(spu, spe); | ||
378 | if (ret) | ||
379 | ret = spu_map_interrupts_old(spu, spe); | ||
380 | if (ret) | ||
381 | goto out_unmap; | ||
382 | |||
383 | pr_debug(KERN_DEBUG "Using SPE %s %p %p %p %p %d\n", spu->name, | ||
384 | spu->local_store, spu->problem, spu_get_pdata(spu)->priv1, | ||
385 | spu->priv2, spu->number); | ||
386 | goto out; | ||
387 | |||
388 | out_unmap: | ||
389 | spu_unmap(spu); | ||
390 | out_free: | ||
391 | kfree(spu->pdata); | ||
392 | spu->pdata = NULL; | ||
393 | out: | ||
394 | return ret; | ||
395 | } | ||
396 | |||
397 | static int of_destroy_spu(struct spu *spu) | ||
398 | { | ||
399 | spu_unmap(spu); | ||
400 | of_node_put(spu_get_pdata(spu)->devnode); | ||
401 | kfree(spu->pdata); | ||
402 | spu->pdata = NULL; | ||
403 | return 0; | ||
404 | } | ||
405 | |||
406 | const struct spu_management_ops spu_management_of_ops = { | ||
407 | .enumerate_spus = of_enumerate_spus, | ||
408 | .create_spu = of_create_spu, | ||
409 | .destroy_spu = of_destroy_spu, | ||
410 | }; | ||
411 | |||
412 | static void int_mask_and(struct spu *spu, int class, u64 mask) | 40 | static void int_mask_and(struct spu *spu, int class, u64 mask) |
413 | { | 41 | { |
414 | u64 old_mask; | 42 | u64 old_mask; |
415 | 43 | ||
416 | old_mask = in_be64(&spu_get_pdata(spu)->priv1->int_mask_RW[class]); | 44 | old_mask = in_be64(&spu->priv1->int_mask_RW[class]); |
417 | out_be64(&spu_get_pdata(spu)->priv1->int_mask_RW[class], | 45 | out_be64(&spu->priv1->int_mask_RW[class], old_mask & mask); |
418 | old_mask & mask); | ||
419 | } | 46 | } |
420 | 47 | ||
421 | static void int_mask_or(struct spu *spu, int class, u64 mask) | 48 | static void int_mask_or(struct spu *spu, int class, u64 mask) |
422 | { | 49 | { |
423 | u64 old_mask; | 50 | u64 old_mask; |
424 | 51 | ||
425 | old_mask = in_be64(&spu_get_pdata(spu)->priv1->int_mask_RW[class]); | 52 | old_mask = in_be64(&spu->priv1->int_mask_RW[class]); |
426 | out_be64(&spu_get_pdata(spu)->priv1->int_mask_RW[class], | 53 | out_be64(&spu->priv1->int_mask_RW[class], old_mask | mask); |
427 | old_mask | mask); | ||
428 | } | 54 | } |
429 | 55 | ||
430 | static void int_mask_set(struct spu *spu, int class, u64 mask) | 56 | static void int_mask_set(struct spu *spu, int class, u64 mask) |
431 | { | 57 | { |
432 | out_be64(&spu_get_pdata(spu)->priv1->int_mask_RW[class], mask); | 58 | out_be64(&spu->priv1->int_mask_RW[class], mask); |
433 | } | 59 | } |
434 | 60 | ||
435 | static u64 int_mask_get(struct spu *spu, int class) | 61 | static u64 int_mask_get(struct spu *spu, int class) |
436 | { | 62 | { |
437 | return in_be64(&spu_get_pdata(spu)->priv1->int_mask_RW[class]); | 63 | return in_be64(&spu->priv1->int_mask_RW[class]); |
438 | } | 64 | } |
439 | 65 | ||
440 | static void int_stat_clear(struct spu *spu, int class, u64 stat) | 66 | static void int_stat_clear(struct spu *spu, int class, u64 stat) |
441 | { | 67 | { |
442 | out_be64(&spu_get_pdata(spu)->priv1->int_stat_RW[class], stat); | 68 | out_be64(&spu->priv1->int_stat_RW[class], stat); |
443 | } | 69 | } |
444 | 70 | ||
445 | static u64 int_stat_get(struct spu *spu, int class) | 71 | static u64 int_stat_get(struct spu *spu, int class) |
446 | { | 72 | { |
447 | return in_be64(&spu_get_pdata(spu)->priv1->int_stat_RW[class]); | 73 | return in_be64(&spu->priv1->int_stat_RW[class]); |
448 | } | 74 | } |
449 | 75 | ||
450 | static void cpu_affinity_set(struct spu *spu, int cpu) | 76 | static void cpu_affinity_set(struct spu *spu, int cpu) |
451 | { | 77 | { |
452 | u64 target = iic_get_target_id(cpu); | 78 | u64 target = iic_get_target_id(cpu); |
453 | u64 route = target << 48 | target << 32 | target << 16; | 79 | u64 route = target << 48 | target << 32 | target << 16; |
454 | out_be64(&spu_get_pdata(spu)->priv1->int_route_RW, route); | 80 | out_be64(&spu->priv1->int_route_RW, route); |
455 | } | 81 | } |
456 | 82 | ||
457 | static u64 mfc_dar_get(struct spu *spu) | 83 | static u64 mfc_dar_get(struct spu *spu) |
458 | { | 84 | { |
459 | return in_be64(&spu_get_pdata(spu)->priv1->mfc_dar_RW); | 85 | return in_be64(&spu->priv1->mfc_dar_RW); |
460 | } | 86 | } |
461 | 87 | ||
462 | static u64 mfc_dsisr_get(struct spu *spu) | 88 | static u64 mfc_dsisr_get(struct spu *spu) |
463 | { | 89 | { |
464 | return in_be64(&spu_get_pdata(spu)->priv1->mfc_dsisr_RW); | 90 | return in_be64(&spu->priv1->mfc_dsisr_RW); |
465 | } | 91 | } |
466 | 92 | ||
467 | static void mfc_dsisr_set(struct spu *spu, u64 dsisr) | 93 | static void mfc_dsisr_set(struct spu *spu, u64 dsisr) |
468 | { | 94 | { |
469 | out_be64(&spu_get_pdata(spu)->priv1->mfc_dsisr_RW, dsisr); | 95 | out_be64(&spu->priv1->mfc_dsisr_RW, dsisr); |
470 | } | 96 | } |
471 | 97 | ||
472 | static void mfc_sdr_setup(struct spu *spu) | 98 | static void mfc_sdr_setup(struct spu *spu) |
473 | { | 99 | { |
474 | out_be64(&spu_get_pdata(spu)->priv1->mfc_sdr_RW, mfspr(SPRN_SDR1)); | 100 | out_be64(&spu->priv1->mfc_sdr_RW, mfspr(SPRN_SDR1)); |
475 | } | 101 | } |
476 | 102 | ||
477 | static void mfc_sr1_set(struct spu *spu, u64 sr1) | 103 | static void mfc_sr1_set(struct spu *spu, u64 sr1) |
478 | { | 104 | { |
479 | out_be64(&spu_get_pdata(spu)->priv1->mfc_sr1_RW, sr1); | 105 | out_be64(&spu->priv1->mfc_sr1_RW, sr1); |
480 | } | 106 | } |
481 | 107 | ||
482 | static u64 mfc_sr1_get(struct spu *spu) | 108 | static u64 mfc_sr1_get(struct spu *spu) |
483 | { | 109 | { |
484 | return in_be64(&spu_get_pdata(spu)->priv1->mfc_sr1_RW); | 110 | return in_be64(&spu->priv1->mfc_sr1_RW); |
485 | } | 111 | } |
486 | 112 | ||
487 | static void mfc_tclass_id_set(struct spu *spu, u64 tclass_id) | 113 | static void mfc_tclass_id_set(struct spu *spu, u64 tclass_id) |
488 | { | 114 | { |
489 | out_be64(&spu_get_pdata(spu)->priv1->mfc_tclass_id_RW, tclass_id); | 115 | out_be64(&spu->priv1->mfc_tclass_id_RW, tclass_id); |
490 | } | 116 | } |
491 | 117 | ||
492 | static u64 mfc_tclass_id_get(struct spu *spu) | 118 | static u64 mfc_tclass_id_get(struct spu *spu) |
493 | { | 119 | { |
494 | return in_be64(&spu_get_pdata(spu)->priv1->mfc_tclass_id_RW); | 120 | return in_be64(&spu->priv1->mfc_tclass_id_RW); |
495 | } | 121 | } |
496 | 122 | ||
497 | static void tlb_invalidate(struct spu *spu) | 123 | static void tlb_invalidate(struct spu *spu) |
498 | { | 124 | { |
499 | out_be64(&spu_get_pdata(spu)->priv1->tlb_invalidate_entry_W, 0ul); | 125 | out_be64(&spu->priv1->tlb_invalidate_entry_W, 0ul); |
500 | } | 126 | } |
501 | 127 | ||
502 | static void resource_allocation_groupID_set(struct spu *spu, u64 id) | 128 | static void resource_allocation_groupID_set(struct spu *spu, u64 id) |
503 | { | 129 | { |
504 | out_be64(&spu_get_pdata(spu)->priv1->resource_allocation_groupID_RW, | 130 | out_be64(&spu->priv1->resource_allocation_groupID_RW, id); |
505 | id); | ||
506 | } | 131 | } |
507 | 132 | ||
508 | static u64 resource_allocation_groupID_get(struct spu *spu) | 133 | static u64 resource_allocation_groupID_get(struct spu *spu) |
509 | { | 134 | { |
510 | return in_be64( | 135 | return in_be64(&spu->priv1->resource_allocation_groupID_RW); |
511 | &spu_get_pdata(spu)->priv1->resource_allocation_groupID_RW); | ||
512 | } | 136 | } |
513 | 137 | ||
514 | static void resource_allocation_enable_set(struct spu *spu, u64 enable) | 138 | static void resource_allocation_enable_set(struct spu *spu, u64 enable) |
515 | { | 139 | { |
516 | out_be64(&spu_get_pdata(spu)->priv1->resource_allocation_enable_RW, | 140 | out_be64(&spu->priv1->resource_allocation_enable_RW, enable); |
517 | enable); | ||
518 | } | 141 | } |
519 | 142 | ||
520 | static u64 resource_allocation_enable_get(struct spu *spu) | 143 | static u64 resource_allocation_enable_get(struct spu *spu) |
521 | { | 144 | { |
522 | return in_be64( | 145 | return in_be64(&spu->priv1->resource_allocation_enable_RW); |
523 | &spu_get_pdata(spu)->priv1->resource_allocation_enable_RW); | ||
524 | } | 146 | } |
525 | 147 | ||
526 | const struct spu_priv1_ops spu_priv1_mmio_ops = | 148 | const struct spu_priv1_ops spu_priv1_mmio_ops = |
diff --git a/arch/powerpc/platforms/celleb/Makefile b/arch/powerpc/platforms/celleb/Makefile new file mode 100644 index 000000000000..3baf658ac543 --- /dev/null +++ b/arch/powerpc/platforms/celleb/Makefile | |||
@@ -0,0 +1,9 @@ | |||
1 | obj-y += interrupt.o iommu.o setup.o \ | ||
2 | htab.o beat.o pci.o \ | ||
3 | scc_epci.o hvCall.o | ||
4 | |||
5 | obj-$(CONFIG_SMP) += smp.o | ||
6 | obj-$(CONFIG_PPC_UDBG_BEAT) += udbg_beat.o | ||
7 | obj-$(CONFIG_USB) += scc_uhc.o | ||
8 | obj-$(CONFIG_HAS_TXX9_SERIAL) += scc_sio.o | ||
9 | obj-$(CONFIG_SPU_BASE) += spu_priv1.o | ||
diff --git a/arch/powerpc/platforms/celleb/beat.c b/arch/powerpc/platforms/celleb/beat.c new file mode 100644 index 000000000000..99341ce8a697 --- /dev/null +++ b/arch/powerpc/platforms/celleb/beat.c | |||
@@ -0,0 +1,163 @@ | |||
1 | /* | ||
2 | * Simple routines for Celleb/Beat | ||
3 | * | ||
4 | * (C) Copyright 2006-2007 TOSHIBA CORPORATION | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License along | ||
17 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
19 | */ | ||
20 | |||
21 | #include <linux/module.h> | ||
22 | #include <linux/init.h> | ||
23 | #include <linux/err.h> | ||
24 | #include <linux/rtc.h> | ||
25 | |||
26 | #include <asm/hvconsole.h> | ||
27 | #include <asm/time.h> | ||
28 | |||
29 | #include "beat_wrapper.h" | ||
30 | #include "beat.h" | ||
31 | |||
32 | void beat_restart(char *cmd) | ||
33 | { | ||
34 | beat_shutdown_logical_partition(1); | ||
35 | } | ||
36 | |||
37 | void beat_power_off(void) | ||
38 | { | ||
39 | beat_shutdown_logical_partition(0); | ||
40 | } | ||
41 | |||
42 | u64 beat_halt_code = 0x1000000000000000UL; | ||
43 | |||
44 | void beat_halt(void) | ||
45 | { | ||
46 | beat_shutdown_logical_partition(beat_halt_code); | ||
47 | } | ||
48 | |||
49 | int beat_set_rtc_time(struct rtc_time *rtc_time) | ||
50 | { | ||
51 | u64 tim; | ||
52 | tim = mktime(rtc_time->tm_year+1900, | ||
53 | rtc_time->tm_mon+1, rtc_time->tm_mday, | ||
54 | rtc_time->tm_hour, rtc_time->tm_min, rtc_time->tm_sec); | ||
55 | if (beat_rtc_write(tim)) | ||
56 | return -1; | ||
57 | return 0; | ||
58 | } | ||
59 | |||
60 | void beat_get_rtc_time(struct rtc_time *rtc_time) | ||
61 | { | ||
62 | u64 tim; | ||
63 | |||
64 | if (beat_rtc_read(&tim)) | ||
65 | tim = 0; | ||
66 | to_tm(tim, rtc_time); | ||
67 | rtc_time->tm_year -= 1900; | ||
68 | rtc_time->tm_mon -= 1; | ||
69 | } | ||
70 | |||
71 | #define BEAT_NVRAM_SIZE 4096 | ||
72 | |||
73 | ssize_t beat_nvram_read(char *buf, size_t count, loff_t *index) | ||
74 | { | ||
75 | unsigned int i; | ||
76 | unsigned long len; | ||
77 | char *p = buf; | ||
78 | |||
79 | if (*index >= BEAT_NVRAM_SIZE) | ||
80 | return -ENODEV; | ||
81 | i = *index; | ||
82 | if (i + count > BEAT_NVRAM_SIZE) | ||
83 | count = BEAT_NVRAM_SIZE - i; | ||
84 | |||
85 | for (; count != 0; count -= len) { | ||
86 | len = count; | ||
87 | if (len > BEAT_NVRW_CNT) | ||
88 | len = BEAT_NVRW_CNT; | ||
89 | if (beat_eeprom_read(i, len, p)) { | ||
90 | return -EIO; | ||
91 | } | ||
92 | |||
93 | p += len; | ||
94 | i += len; | ||
95 | } | ||
96 | *index = i; | ||
97 | return p - buf; | ||
98 | } | ||
99 | |||
100 | ssize_t beat_nvram_write(char *buf, size_t count, loff_t *index) | ||
101 | { | ||
102 | unsigned int i; | ||
103 | unsigned long len; | ||
104 | char *p = buf; | ||
105 | |||
106 | if (*index >= BEAT_NVRAM_SIZE) | ||
107 | return -ENODEV; | ||
108 | i = *index; | ||
109 | if (i + count > BEAT_NVRAM_SIZE) | ||
110 | count = BEAT_NVRAM_SIZE - i; | ||
111 | |||
112 | for (; count != 0; count -= len) { | ||
113 | len = count; | ||
114 | if (len > BEAT_NVRW_CNT) | ||
115 | len = BEAT_NVRW_CNT; | ||
116 | if (beat_eeprom_write(i, len, p)) { | ||
117 | return -EIO; | ||
118 | } | ||
119 | |||
120 | p += len; | ||
121 | i += len; | ||
122 | } | ||
123 | *index = i; | ||
124 | return p - buf; | ||
125 | } | ||
126 | |||
127 | ssize_t beat_nvram_get_size(void) | ||
128 | { | ||
129 | return BEAT_NVRAM_SIZE; | ||
130 | } | ||
131 | |||
132 | int beat_set_xdabr(unsigned long dabr) | ||
133 | { | ||
134 | if (beat_set_dabr(dabr, DABRX_KERNEL | DABRX_USER)) | ||
135 | return -1; | ||
136 | return 0; | ||
137 | } | ||
138 | |||
139 | int64_t beat_get_term_char(u64 vterm, u64 *len, u64 *t1, u64 *t2) | ||
140 | { | ||
141 | u64 db[2]; | ||
142 | s64 ret; | ||
143 | |||
144 | ret = beat_get_characters_from_console(vterm, len, (u8*)db); | ||
145 | if (ret == 0) { | ||
146 | *t1 = db[0]; | ||
147 | *t2 = db[1]; | ||
148 | } | ||
149 | return ret; | ||
150 | } | ||
151 | |||
152 | int64_t beat_put_term_char(u64 vterm, u64 len, u64 t1, u64 t2) | ||
153 | { | ||
154 | u64 db[2]; | ||
155 | |||
156 | db[0] = t1; | ||
157 | db[1] = t2; | ||
158 | return beat_put_characters_to_console(vterm, len, (u8*)db); | ||
159 | } | ||
160 | |||
161 | EXPORT_SYMBOL(beat_get_term_char); | ||
162 | EXPORT_SYMBOL(beat_put_term_char); | ||
163 | EXPORT_SYMBOL(beat_halt_code); | ||
diff --git a/arch/powerpc/platforms/celleb/beat.h b/arch/powerpc/platforms/celleb/beat.h new file mode 100644 index 000000000000..2b16bf3bee89 --- /dev/null +++ b/arch/powerpc/platforms/celleb/beat.h | |||
@@ -0,0 +1,40 @@ | |||
1 | /* | ||
2 | * Guest OS Interfaces. | ||
3 | * | ||
4 | * (C) Copyright 2006 TOSHIBA CORPORATION | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License along | ||
17 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
19 | */ | ||
20 | |||
21 | #ifndef _CELLEB_BEAT_H | ||
22 | #define _CELLEB_BEAT_H | ||
23 | |||
24 | #define DABRX_KERNEL (1UL<<1) | ||
25 | #define DABRX_USER (1UL<<0) | ||
26 | |||
27 | int64_t beat_get_term_char(uint64_t,uint64_t*,uint64_t*,uint64_t*); | ||
28 | int64_t beat_put_term_char(uint64_t,uint64_t,uint64_t,uint64_t); | ||
29 | int64_t beat_repository_encode(int, const char *, uint64_t[4]); | ||
30 | void beat_restart(char *); | ||
31 | void beat_power_off(void); | ||
32 | void beat_halt(void); | ||
33 | int beat_set_rtc_time(struct rtc_time *); | ||
34 | void beat_get_rtc_time(struct rtc_time *); | ||
35 | ssize_t beat_nvram_get_size(void); | ||
36 | ssize_t beat_nvram_read(char *, size_t, loff_t *); | ||
37 | ssize_t beat_nvram_write(char *, size_t, loff_t *); | ||
38 | int beat_set_xdabr(unsigned long); | ||
39 | |||
40 | #endif /* _CELLEB_BEAT_H */ | ||
diff --git a/arch/powerpc/platforms/celleb/beat_syscall.h b/arch/powerpc/platforms/celleb/beat_syscall.h new file mode 100644 index 000000000000..14e16974773f --- /dev/null +++ b/arch/powerpc/platforms/celleb/beat_syscall.h | |||
@@ -0,0 +1,160 @@ | |||
1 | /* | ||
2 | * Beat hypervisor call numbers | ||
3 | * | ||
4 | * (C) Copyright 2004-2007 TOSHIBA CORPORATION | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License along | ||
17 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
19 | */ | ||
20 | |||
21 | #ifndef BEAT_BEAT_syscall_H | ||
22 | #define BEAT_BEAT_syscall_H | ||
23 | |||
24 | #ifdef __ASSEMBLY__ | ||
25 | #define __BEAT_ADD_VENDOR_ID(__x, __v) ((__v)<<60|(__x)) | ||
26 | #else | ||
27 | #define __BEAT_ADD_VENDOR_ID(__x, __v) ((u64)(__v)<<60|(__x)) | ||
28 | #endif | ||
29 | #define HV_allocate_memory __BEAT_ADD_VENDOR_ID(0, 0) | ||
30 | #define HV_construct_virtual_address_space __BEAT_ADD_VENDOR_ID(2, 0) | ||
31 | #define HV_destruct_virtual_address_space __BEAT_ADD_VENDOR_ID(10, 0) | ||
32 | #define HV_get_virtual_address_space_id_of_ppe __BEAT_ADD_VENDOR_ID(4, 0) | ||
33 | #define HV_query_logical_partition_address_region_info \ | ||
34 | __BEAT_ADD_VENDOR_ID(6, 0) | ||
35 | #define HV_release_memory __BEAT_ADD_VENDOR_ID(13, 0) | ||
36 | #define HV_select_virtual_address_space __BEAT_ADD_VENDOR_ID(7, 0) | ||
37 | #define HV_load_range_registers __BEAT_ADD_VENDOR_ID(68, 0) | ||
38 | #define HV_set_ppe_l2cache_rmt_entry __BEAT_ADD_VENDOR_ID(70, 0) | ||
39 | #define HV_set_ppe_tlb_rmt_entry __BEAT_ADD_VENDOR_ID(71, 0) | ||
40 | #define HV_set_spe_tlb_rmt_entry __BEAT_ADD_VENDOR_ID(72, 0) | ||
41 | #define HV_get_io_address_translation_fault_info __BEAT_ADD_VENDOR_ID(14, 0) | ||
42 | #define HV_get_iopte __BEAT_ADD_VENDOR_ID(16, 0) | ||
43 | #define HV_preload_iopt_cache __BEAT_ADD_VENDOR_ID(17, 0) | ||
44 | #define HV_put_iopte __BEAT_ADD_VENDOR_ID(15, 0) | ||
45 | #define HV_connect_event_ports __BEAT_ADD_VENDOR_ID(21, 0) | ||
46 | #define HV_construct_event_receive_port __BEAT_ADD_VENDOR_ID(18, 0) | ||
47 | #define HV_destruct_event_receive_port __BEAT_ADD_VENDOR_ID(19, 0) | ||
48 | #define HV_destruct_event_send_port __BEAT_ADD_VENDOR_ID(22, 0) | ||
49 | #define HV_get_state_of_event_send_port __BEAT_ADD_VENDOR_ID(25, 0) | ||
50 | #define HV_request_to_connect_event_ports __BEAT_ADD_VENDOR_ID(20, 0) | ||
51 | #define HV_send_event_externally __BEAT_ADD_VENDOR_ID(23, 0) | ||
52 | #define HV_send_event_locally __BEAT_ADD_VENDOR_ID(24, 0) | ||
53 | #define HV_construct_and_connect_irq_plug __BEAT_ADD_VENDOR_ID(28, 0) | ||
54 | #define HV_destruct_irq_plug __BEAT_ADD_VENDOR_ID(29, 0) | ||
55 | #define HV_detect_pending_interrupts __BEAT_ADD_VENDOR_ID(26, 0) | ||
56 | #define HV_end_of_interrupt __BEAT_ADD_VENDOR_ID(27, 0) | ||
57 | #define HV_assign_control_signal_notification_port __BEAT_ADD_VENDOR_ID(45, 0) | ||
58 | #define HV_end_of_control_signal_processing __BEAT_ADD_VENDOR_ID(48, 0) | ||
59 | #define HV_get_control_signal __BEAT_ADD_VENDOR_ID(46, 0) | ||
60 | #define HV_set_irq_mask_for_spe __BEAT_ADD_VENDOR_ID(61, 0) | ||
61 | #define HV_shutdown_logical_partition __BEAT_ADD_VENDOR_ID(44, 0) | ||
62 | #define HV_connect_message_ports __BEAT_ADD_VENDOR_ID(35, 0) | ||
63 | #define HV_destruct_message_port __BEAT_ADD_VENDOR_ID(36, 0) | ||
64 | #define HV_receive_message __BEAT_ADD_VENDOR_ID(37, 0) | ||
65 | #define HV_get_message_port_info __BEAT_ADD_VENDOR_ID(34, 0) | ||
66 | #define HV_request_to_connect_message_ports __BEAT_ADD_VENDOR_ID(33, 0) | ||
67 | #define HV_send_message __BEAT_ADD_VENDOR_ID(32, 0) | ||
68 | #define HV_get_logical_ppe_id __BEAT_ADD_VENDOR_ID(69, 0) | ||
69 | #define HV_pause __BEAT_ADD_VENDOR_ID(9, 0) | ||
70 | #define HV_destruct_shared_memory_handle __BEAT_ADD_VENDOR_ID(51, 0) | ||
71 | #define HV_get_shared_memory_info __BEAT_ADD_VENDOR_ID(52, 0) | ||
72 | #define HV_permit_sharing_memory __BEAT_ADD_VENDOR_ID(50, 0) | ||
73 | #define HV_request_to_attach_shared_memory __BEAT_ADD_VENDOR_ID(49, 0) | ||
74 | #define HV_enable_logical_spe_execution __BEAT_ADD_VENDOR_ID(55, 0) | ||
75 | #define HV_construct_logical_spe __BEAT_ADD_VENDOR_ID(53, 0) | ||
76 | #define HV_disable_logical_spe_execution __BEAT_ADD_VENDOR_ID(56, 0) | ||
77 | #define HV_destruct_logical_spe __BEAT_ADD_VENDOR_ID(54, 0) | ||
78 | #define HV_sense_spe_execution_status __BEAT_ADD_VENDOR_ID(58, 0) | ||
79 | #define HV_insert_htab_entry __BEAT_ADD_VENDOR_ID(101, 0) | ||
80 | #define HV_read_htab_entries __BEAT_ADD_VENDOR_ID(95, 0) | ||
81 | #define HV_write_htab_entry __BEAT_ADD_VENDOR_ID(94, 0) | ||
82 | #define HV_assign_io_address_translation_fault_port \ | ||
83 | __BEAT_ADD_VENDOR_ID(100, 0) | ||
84 | #define HV_set_interrupt_mask __BEAT_ADD_VENDOR_ID(73, 0) | ||
85 | #define HV_get_logical_partition_id __BEAT_ADD_VENDOR_ID(74, 0) | ||
86 | #define HV_create_repository_node2 __BEAT_ADD_VENDOR_ID(90, 0) | ||
87 | #define HV_create_repository_node __BEAT_ADD_VENDOR_ID(90, 0) /* alias */ | ||
88 | #define HV_get_repository_node_value2 __BEAT_ADD_VENDOR_ID(91, 0) | ||
89 | #define HV_get_repository_node_value __BEAT_ADD_VENDOR_ID(91, 0) /* alias */ | ||
90 | #define HV_modify_repository_node_value2 __BEAT_ADD_VENDOR_ID(92, 0) | ||
91 | #define HV_modify_repository_node_value __BEAT_ADD_VENDOR_ID(92, 0) /* alias */ | ||
92 | #define HV_remove_repository_node2 __BEAT_ADD_VENDOR_ID(93, 0) | ||
93 | #define HV_remove_repository_node __BEAT_ADD_VENDOR_ID(93, 0) /* alias */ | ||
94 | #define HV_cancel_shared_memory __BEAT_ADD_VENDOR_ID(104, 0) | ||
95 | #define HV_clear_interrupt_status_of_spe __BEAT_ADD_VENDOR_ID(206, 0) | ||
96 | #define HV_construct_spe_irq_outlet __BEAT_ADD_VENDOR_ID(80, 0) | ||
97 | #define HV_destruct_spe_irq_outlet __BEAT_ADD_VENDOR_ID(81, 0) | ||
98 | #define HV_disconnect_ipspc_service __BEAT_ADD_VENDOR_ID(88, 0) | ||
99 | #define HV_execute_ipspc_command __BEAT_ADD_VENDOR_ID(86, 0) | ||
100 | #define HV_get_interrupt_status_of_spe __BEAT_ADD_VENDOR_ID(205, 0) | ||
101 | #define HV_get_spe_privileged_state_1_registers __BEAT_ADD_VENDOR_ID(208, 0) | ||
102 | #define HV_permit_use_of_ipspc_service __BEAT_ADD_VENDOR_ID(85, 0) | ||
103 | #define HV_reinitialize_logical_spe __BEAT_ADD_VENDOR_ID(82, 0) | ||
104 | #define HV_request_ipspc_service __BEAT_ADD_VENDOR_ID(84, 0) | ||
105 | #define HV_stop_ipspc_command __BEAT_ADD_VENDOR_ID(87, 0) | ||
106 | #define HV_set_spe_privileged_state_1_registers __BEAT_ADD_VENDOR_ID(204, 0) | ||
107 | #define HV_get_status_of_ipspc_service __BEAT_ADD_VENDOR_ID(203, 0) | ||
108 | #define HV_put_characters_to_console __BEAT_ADD_VENDOR_ID(0x101, 1) | ||
109 | #define HV_get_characters_from_console __BEAT_ADD_VENDOR_ID(0x102, 1) | ||
110 | #define HV_get_base_clock __BEAT_ADD_VENDOR_ID(0x111, 1) | ||
111 | #define HV_set_base_clock __BEAT_ADD_VENDOR_ID(0x112, 1) | ||
112 | #define HV_get_frame_cycle __BEAT_ADD_VENDOR_ID(0x114, 1) | ||
113 | #define HV_disable_console __BEAT_ADD_VENDOR_ID(0x115, 1) | ||
114 | #define HV_disable_all_console __BEAT_ADD_VENDOR_ID(0x116, 1) | ||
115 | #define HV_oneshot_timer __BEAT_ADD_VENDOR_ID(0x117, 1) | ||
116 | #define HV_set_dabr __BEAT_ADD_VENDOR_ID(0x118, 1) | ||
117 | #define HV_get_dabr __BEAT_ADD_VENDOR_ID(0x119, 1) | ||
118 | #define HV_start_hv_stats __BEAT_ADD_VENDOR_ID(0x21c, 1) | ||
119 | #define HV_stop_hv_stats __BEAT_ADD_VENDOR_ID(0x21d, 1) | ||
120 | #define HV_get_hv_stats __BEAT_ADD_VENDOR_ID(0x21e, 1) | ||
121 | #define HV_get_hv_error_stats __BEAT_ADD_VENDOR_ID(0x221, 1) | ||
122 | #define HV_get_stats __BEAT_ADD_VENDOR_ID(0x224, 1) | ||
123 | #define HV_get_heap_stats __BEAT_ADD_VENDOR_ID(0x225, 1) | ||
124 | #define HV_get_memory_stats __BEAT_ADD_VENDOR_ID(0x227, 1) | ||
125 | #define HV_get_memory_detail __BEAT_ADD_VENDOR_ID(0x228, 1) | ||
126 | #define HV_set_priority_of_irq_outlet __BEAT_ADD_VENDOR_ID(0x122, 1) | ||
127 | #define HV_get_physical_spe_by_reservation_id __BEAT_ADD_VENDOR_ID(0x128, 1) | ||
128 | #define HV_get_spe_context __BEAT_ADD_VENDOR_ID(0x129, 1) | ||
129 | #define HV_set_spe_context __BEAT_ADD_VENDOR_ID(0x12a, 1) | ||
130 | #define HV_downcount_of_interrupt __BEAT_ADD_VENDOR_ID(0x12e, 1) | ||
131 | #define HV_peek_spe_context __BEAT_ADD_VENDOR_ID(0x12f, 1) | ||
132 | #define HV_read_bpa_register __BEAT_ADD_VENDOR_ID(0x131, 1) | ||
133 | #define HV_write_bpa_register __BEAT_ADD_VENDOR_ID(0x132, 1) | ||
134 | #define HV_map_context_table_of_spe __BEAT_ADD_VENDOR_ID(0x137, 1) | ||
135 | #define HV_get_slb_for_logical_spe __BEAT_ADD_VENDOR_ID(0x138, 1) | ||
136 | #define HV_set_slb_for_logical_spe __BEAT_ADD_VENDOR_ID(0x139, 1) | ||
137 | #define HV_init_pm __BEAT_ADD_VENDOR_ID(0x150, 1) | ||
138 | #define HV_set_pm_signal __BEAT_ADD_VENDOR_ID(0x151, 1) | ||
139 | #define HV_get_pm_signal __BEAT_ADD_VENDOR_ID(0x152, 1) | ||
140 | #define HV_set_pm_config __BEAT_ADD_VENDOR_ID(0x153, 1) | ||
141 | #define HV_get_pm_config __BEAT_ADD_VENDOR_ID(0x154, 1) | ||
142 | #define HV_get_inner_trace_data __BEAT_ADD_VENDOR_ID(0x155, 1) | ||
143 | #define HV_set_ext_trace_buffer __BEAT_ADD_VENDOR_ID(0x156, 1) | ||
144 | #define HV_get_ext_trace_buffer __BEAT_ADD_VENDOR_ID(0x157, 1) | ||
145 | #define HV_set_pm_interrupt __BEAT_ADD_VENDOR_ID(0x158, 1) | ||
146 | #define HV_get_pm_interrupt __BEAT_ADD_VENDOR_ID(0x159, 1) | ||
147 | #define HV_kick_pm __BEAT_ADD_VENDOR_ID(0x160, 1) | ||
148 | #define HV_construct_pm_context __BEAT_ADD_VENDOR_ID(0x164, 1) | ||
149 | #define HV_destruct_pm_context __BEAT_ADD_VENDOR_ID(0x165, 1) | ||
150 | #define HV_be_slow __BEAT_ADD_VENDOR_ID(0x170, 1) | ||
151 | #define HV_assign_ipspc_server_connection_status_notification_port \ | ||
152 | __BEAT_ADD_VENDOR_ID(0x173, 1) | ||
153 | #define HV_get_raid_of_physical_spe __BEAT_ADD_VENDOR_ID(0x174, 1) | ||
154 | #define HV_set_physical_spe_to_rag __BEAT_ADD_VENDOR_ID(0x175, 1) | ||
155 | #define HV_release_physical_spe_from_rag __BEAT_ADD_VENDOR_ID(0x176, 1) | ||
156 | #define HV_rtc_read __BEAT_ADD_VENDOR_ID(0x190, 1) | ||
157 | #define HV_rtc_write __BEAT_ADD_VENDOR_ID(0x191, 1) | ||
158 | #define HV_eeprom_read __BEAT_ADD_VENDOR_ID(0x192, 1) | ||
159 | #define HV_eeprom_write __BEAT_ADD_VENDOR_ID(0x193, 1) | ||
160 | #endif | ||
diff --git a/arch/powerpc/platforms/celleb/beat_wrapper.h b/arch/powerpc/platforms/celleb/beat_wrapper.h new file mode 100644 index 000000000000..76ea0a6a9011 --- /dev/null +++ b/arch/powerpc/platforms/celleb/beat_wrapper.h | |||
@@ -0,0 +1,220 @@ | |||
1 | /* | ||
2 | * Beat hypervisor call I/F | ||
3 | * | ||
4 | * (C) Copyright 2007 TOSHIBA CORPORATION | ||
5 | * | ||
6 | * This code is based on arch/powerpc/platforms/pseries/plpar_wrapper.h. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License along | ||
19 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
20 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
21 | */ | ||
22 | #ifndef BEAT_HCALL | ||
23 | #include "beat_syscall.h" | ||
24 | |||
25 | /* defined in hvCall.S */ | ||
26 | extern s64 beat_hcall_norets(u64 opcode, ...); | ||
27 | extern s64 beat_hcall_norets8(u64 opcode, u64 arg1, u64 arg2, u64 arg3, | ||
28 | u64 arg4, u64 arg5, u64 arg6, u64 arg7, u64 arg8); | ||
29 | extern s64 beat_hcall1(u64 opcode, u64 retbuf[1], ...); | ||
30 | extern s64 beat_hcall2(u64 opcode, u64 retbuf[2], ...); | ||
31 | extern s64 beat_hcall3(u64 opcode, u64 retbuf[3], ...); | ||
32 | extern s64 beat_hcall4(u64 opcode, u64 retbuf[4], ...); | ||
33 | extern s64 beat_hcall5(u64 opcode, u64 retbuf[5], ...); | ||
34 | extern s64 beat_hcall6(u64 opcode, u64 retbuf[6], ...); | ||
35 | |||
36 | static inline s64 beat_downcount_of_interrupt(u64 plug_id) | ||
37 | { | ||
38 | return beat_hcall_norets(HV_downcount_of_interrupt, plug_id); | ||
39 | } | ||
40 | |||
41 | static inline s64 beat_set_interrupt_mask(u64 index, | ||
42 | u64 val0, u64 val1, u64 val2, u64 val3) | ||
43 | { | ||
44 | return beat_hcall_norets(HV_set_interrupt_mask, index, | ||
45 | val0, val1, val2, val3); | ||
46 | } | ||
47 | |||
48 | static inline s64 beat_destruct_irq_plug(u64 plug_id) | ||
49 | { | ||
50 | return beat_hcall_norets(HV_destruct_irq_plug, plug_id); | ||
51 | } | ||
52 | |||
53 | static inline s64 beat_construct_and_connect_irq_plug(u64 plug_id, | ||
54 | u64 outlet_id) | ||
55 | { | ||
56 | return beat_hcall_norets(HV_construct_and_connect_irq_plug, plug_id, | ||
57 | outlet_id); | ||
58 | } | ||
59 | |||
60 | static inline s64 beat_detect_pending_interrupts(u64 index, u64 *retbuf) | ||
61 | { | ||
62 | return beat_hcall4(HV_detect_pending_interrupts, retbuf, index); | ||
63 | } | ||
64 | |||
65 | static inline s64 beat_pause(u64 style) | ||
66 | { | ||
67 | return beat_hcall_norets(HV_pause, style); | ||
68 | } | ||
69 | |||
70 | static inline s64 beat_read_htab_entries(u64 htab_id, u64 index, u64 *retbuf) | ||
71 | { | ||
72 | return beat_hcall5(HV_read_htab_entries, retbuf, htab_id, index); | ||
73 | } | ||
74 | |||
75 | static inline s64 beat_insert_htab_entry(u64 htab_id, u64 group, | ||
76 | u64 bitmask, u64 hpte_v, u64 hpte_r, u64 *slot) | ||
77 | { | ||
78 | u64 dummy[3]; | ||
79 | s64 ret; | ||
80 | |||
81 | ret = beat_hcall3(HV_insert_htab_entry, dummy, htab_id, group, | ||
82 | bitmask, hpte_v, hpte_r); | ||
83 | *slot = dummy[0]; | ||
84 | return ret; | ||
85 | } | ||
86 | |||
87 | static inline s64 beat_write_htab_entry(u64 htab_id, u64 slot, | ||
88 | u64 hpte_v, u64 hpte_r, u64 mask_v, u64 mask_r, | ||
89 | u64 *ret_v, u64 *ret_r) | ||
90 | { | ||
91 | u64 dummy[2]; | ||
92 | s64 ret; | ||
93 | |||
94 | ret = beat_hcall2(HV_write_htab_entry, dummy, htab_id, slot, | ||
95 | hpte_v, hpte_r, mask_v, mask_r); | ||
96 | *ret_v = dummy[0]; | ||
97 | *ret_r = dummy[1]; | ||
98 | return ret; | ||
99 | } | ||
100 | |||
101 | static inline void beat_shutdown_logical_partition(u64 code) | ||
102 | { | ||
103 | (void)beat_hcall_norets(HV_shutdown_logical_partition, code); | ||
104 | } | ||
105 | |||
106 | static inline s64 beat_rtc_write(u64 time_from_epoch) | ||
107 | { | ||
108 | return beat_hcall_norets(HV_rtc_write, time_from_epoch); | ||
109 | } | ||
110 | |||
111 | static inline s64 beat_rtc_read(u64 *time_from_epoch) | ||
112 | { | ||
113 | u64 dummy[1]; | ||
114 | s64 ret; | ||
115 | |||
116 | ret = beat_hcall1(HV_rtc_read, dummy); | ||
117 | *time_from_epoch = dummy[0]; | ||
118 | return ret; | ||
119 | } | ||
120 | |||
121 | #define BEAT_NVRW_CNT (sizeof(u64) * 6) | ||
122 | |||
123 | static inline s64 beat_eeprom_write(u64 index, u64 length, u8 *buffer) | ||
124 | { | ||
125 | u64 b[6]; | ||
126 | |||
127 | if (length > BEAT_NVRW_CNT) | ||
128 | return -1; | ||
129 | memcpy(b, buffer, sizeof(b)); | ||
130 | return beat_hcall_norets8(HV_eeprom_write, index, length, | ||
131 | b[0], b[1], b[2], b[3], b[4], b[5]); | ||
132 | } | ||
133 | |||
134 | static inline s64 beat_eeprom_read(u64 index, u64 length, u8 *buffer) | ||
135 | { | ||
136 | u64 b[6]; | ||
137 | s64 ret; | ||
138 | |||
139 | if (length > BEAT_NVRW_CNT) | ||
140 | return -1; | ||
141 | ret = beat_hcall6(HV_eeprom_read, b, index, length); | ||
142 | memcpy(buffer, b, length); | ||
143 | return ret; | ||
144 | } | ||
145 | |||
146 | static inline s64 beat_set_dabr(u64 value, u64 style) | ||
147 | { | ||
148 | return beat_hcall_norets(HV_set_dabr, value, style); | ||
149 | } | ||
150 | |||
151 | static inline s64 beat_get_characters_from_console(u64 termno, u64 *len, | ||
152 | u8 *buffer) | ||
153 | { | ||
154 | u64 dummy[3]; | ||
155 | s64 ret; | ||
156 | |||
157 | ret = beat_hcall3(HV_get_characters_from_console, dummy, termno, len); | ||
158 | *len = dummy[0]; | ||
159 | memcpy(buffer, dummy + 1, *len); | ||
160 | return ret; | ||
161 | } | ||
162 | |||
163 | static inline s64 beat_put_characters_to_console(u64 termno, u64 len, | ||
164 | u8 *buffer) | ||
165 | { | ||
166 | u64 b[2]; | ||
167 | |||
168 | memcpy(b, buffer, len); | ||
169 | return beat_hcall_norets(HV_put_characters_to_console, termno, len, b[0], b[1]); | ||
170 | } | ||
171 | |||
172 | static inline s64 beat_get_spe_privileged_state_1_registers( | ||
173 | u64 id, u64 offsetof, u64 *value) | ||
174 | { | ||
175 | u64 dummy[1]; | ||
176 | s64 ret; | ||
177 | |||
178 | ret = beat_hcall1(HV_get_spe_privileged_state_1_registers, dummy, id, | ||
179 | offsetof); | ||
180 | *value = dummy[0]; | ||
181 | return ret; | ||
182 | } | ||
183 | |||
184 | static inline s64 beat_set_irq_mask_for_spe(u64 id, u64 class, u64 mask) | ||
185 | { | ||
186 | return beat_hcall_norets(HV_set_irq_mask_for_spe, id, class, mask); | ||
187 | } | ||
188 | |||
189 | static inline s64 beat_clear_interrupt_status_of_spe(u64 id, u64 class, | ||
190 | u64 mask) | ||
191 | { | ||
192 | return beat_hcall_norets(HV_clear_interrupt_status_of_spe, | ||
193 | id, class, mask); | ||
194 | } | ||
195 | |||
196 | static inline s64 beat_set_spe_privileged_state_1_registers( | ||
197 | u64 id, u64 offsetof, u64 value) | ||
198 | { | ||
199 | return beat_hcall_norets(HV_set_spe_privileged_state_1_registers, | ||
200 | id, offsetof, value); | ||
201 | } | ||
202 | |||
203 | static inline s64 beat_get_interrupt_status_of_spe(u64 id, u64 class, u64 *val) | ||
204 | { | ||
205 | u64 dummy[1]; | ||
206 | s64 ret; | ||
207 | |||
208 | ret = beat_hcall1(HV_get_interrupt_status_of_spe, dummy, id, class); | ||
209 | *val = dummy[0]; | ||
210 | return ret; | ||
211 | } | ||
212 | |||
213 | static inline s64 beat_put_iopte(u64 ioas_id, u64 io_addr, u64 real_addr, | ||
214 | u64 ioid, u64 flags) | ||
215 | { | ||
216 | return beat_hcall_norets(HV_put_iopte, ioas_id, io_addr, real_addr, | ||
217 | ioid, flags); | ||
218 | } | ||
219 | |||
220 | #endif | ||
diff --git a/arch/powerpc/platforms/celleb/htab.c b/arch/powerpc/platforms/celleb/htab.c new file mode 100644 index 000000000000..ffa7c2c2030d --- /dev/null +++ b/arch/powerpc/platforms/celleb/htab.c | |||
@@ -0,0 +1,311 @@ | |||
1 | /* | ||
2 | * "Cell Reference Set" HTAB support. | ||
3 | * | ||
4 | * (C) Copyright 2006-2007 TOSHIBA CORPORATION | ||
5 | * | ||
6 | * This code is based on arch/powerpc/platforms/pseries/lpar.c: | ||
7 | * Copyright (C) 2001 Todd Inglett, IBM Corporation | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License as published by | ||
11 | * the Free Software Foundation; either version 2 of the License, or | ||
12 | * (at your option) any later version. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License along | ||
20 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
21 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
22 | */ | ||
23 | |||
24 | #undef DEBUG_LOW | ||
25 | |||
26 | #include <linux/kernel.h> | ||
27 | #include <linux/spinlock.h> | ||
28 | |||
29 | #include <asm/mmu.h> | ||
30 | #include <asm/page.h> | ||
31 | #include <asm/pgtable.h> | ||
32 | #include <asm/machdep.h> | ||
33 | #include <asm/udbg.h> | ||
34 | |||
35 | #include "beat_wrapper.h" | ||
36 | |||
37 | #ifdef DEBUG_LOW | ||
38 | #define DBG_LOW(fmt...) do { udbg_printf(fmt); } while(0) | ||
39 | #else | ||
40 | #define DBG_LOW(fmt...) do { } while(0) | ||
41 | #endif | ||
42 | |||
43 | static DEFINE_SPINLOCK(beat_htab_lock); | ||
44 | |||
45 | static inline unsigned int beat_read_mask(unsigned hpte_group) | ||
46 | { | ||
47 | unsigned long hpte_v[5]; | ||
48 | unsigned long rmask = 0; | ||
49 | |||
50 | beat_read_htab_entries(0, hpte_group + 0, hpte_v); | ||
51 | if (!(hpte_v[0] & HPTE_V_BOLTED)) | ||
52 | rmask |= 0x8000; | ||
53 | if (!(hpte_v[1] & HPTE_V_BOLTED)) | ||
54 | rmask |= 0x4000; | ||
55 | if (!(hpte_v[2] & HPTE_V_BOLTED)) | ||
56 | rmask |= 0x2000; | ||
57 | if (!(hpte_v[3] & HPTE_V_BOLTED)) | ||
58 | rmask |= 0x1000; | ||
59 | beat_read_htab_entries(0, hpte_group + 4, hpte_v); | ||
60 | if (!(hpte_v[0] & HPTE_V_BOLTED)) | ||
61 | rmask |= 0x0800; | ||
62 | if (!(hpte_v[1] & HPTE_V_BOLTED)) | ||
63 | rmask |= 0x0400; | ||
64 | if (!(hpte_v[2] & HPTE_V_BOLTED)) | ||
65 | rmask |= 0x0200; | ||
66 | if (!(hpte_v[3] & HPTE_V_BOLTED)) | ||
67 | rmask |= 0x0100; | ||
68 | hpte_group = ~hpte_group & (htab_hash_mask * HPTES_PER_GROUP); | ||
69 | beat_read_htab_entries(0, hpte_group + 0, hpte_v); | ||
70 | if (!(hpte_v[0] & HPTE_V_BOLTED)) | ||
71 | rmask |= 0x80; | ||
72 | if (!(hpte_v[1] & HPTE_V_BOLTED)) | ||
73 | rmask |= 0x40; | ||
74 | if (!(hpte_v[2] & HPTE_V_BOLTED)) | ||
75 | rmask |= 0x20; | ||
76 | if (!(hpte_v[3] & HPTE_V_BOLTED)) | ||
77 | rmask |= 0x10; | ||
78 | beat_read_htab_entries(0, hpte_group + 4, hpte_v); | ||
79 | if (!(hpte_v[0] & HPTE_V_BOLTED)) | ||
80 | rmask |= 0x08; | ||
81 | if (!(hpte_v[1] & HPTE_V_BOLTED)) | ||
82 | rmask |= 0x04; | ||
83 | if (!(hpte_v[2] & HPTE_V_BOLTED)) | ||
84 | rmask |= 0x02; | ||
85 | if (!(hpte_v[3] & HPTE_V_BOLTED)) | ||
86 | rmask |= 0x01; | ||
87 | return rmask; | ||
88 | } | ||
89 | |||
90 | static long beat_lpar_hpte_insert(unsigned long hpte_group, | ||
91 | unsigned long va, unsigned long pa, | ||
92 | unsigned long rflags, unsigned long vflags, | ||
93 | int psize) | ||
94 | { | ||
95 | unsigned long lpar_rc; | ||
96 | unsigned long slot; | ||
97 | unsigned long hpte_v, hpte_r; | ||
98 | unsigned long flags; | ||
99 | |||
100 | /* same as iseries */ | ||
101 | if (vflags & HPTE_V_SECONDARY) | ||
102 | return -1; | ||
103 | |||
104 | if (!(vflags & HPTE_V_BOLTED)) | ||
105 | DBG_LOW("hpte_insert(group=%lx, va=%016lx, pa=%016lx, " | ||
106 | "rflags=%lx, vflags=%lx, psize=%d)\n", | ||
107 | hpte_group, va, pa, rflags, vflags, psize); | ||
108 | |||
109 | hpte_v = hpte_encode_v(va, psize) | vflags | HPTE_V_VALID; | ||
110 | hpte_r = hpte_encode_r(pa, psize) | rflags; | ||
111 | |||
112 | if (!(vflags & HPTE_V_BOLTED)) | ||
113 | DBG_LOW(" hpte_v=%016lx, hpte_r=%016lx\n", hpte_v, hpte_r); | ||
114 | |||
115 | if (rflags & (_PAGE_GUARDED|_PAGE_NO_CACHE)) | ||
116 | hpte_r &= ~_PAGE_COHERENT; | ||
117 | |||
118 | spin_lock_irqsave(&beat_htab_lock, flags); | ||
119 | if ((lpar_rc = beat_read_mask(hpte_group)) == 0) { | ||
120 | if (!(vflags & HPTE_V_BOLTED)) | ||
121 | DBG_LOW(" full\n"); | ||
122 | spin_unlock_irqrestore(&beat_htab_lock, flags); | ||
123 | return -1; | ||
124 | } | ||
125 | |||
126 | lpar_rc = beat_insert_htab_entry(0, hpte_group, lpar_rc << 48, | ||
127 | hpte_v, hpte_r, &slot); | ||
128 | spin_unlock_irqrestore(&beat_htab_lock, flags); | ||
129 | |||
130 | /* | ||
131 | * Since we try and ioremap PHBs we don't own, the pte insert | ||
132 | * will fail. However we must catch the failure in hash_page | ||
133 | * or we will loop forever, so return -2 in this case. | ||
134 | */ | ||
135 | if (unlikely(lpar_rc != 0)) { | ||
136 | if (!(vflags & HPTE_V_BOLTED)) | ||
137 | DBG_LOW(" lpar err %lx\n", lpar_rc); | ||
138 | return -2; | ||
139 | } | ||
140 | if (!(vflags & HPTE_V_BOLTED)) | ||
141 | DBG_LOW(" -> slot: %lx\n", slot); | ||
142 | |||
143 | /* We have to pass down the secondary bucket bit here as well */ | ||
144 | return (slot ^ hpte_group) & 15; | ||
145 | } | ||
146 | |||
147 | static long beat_lpar_hpte_remove(unsigned long hpte_group) | ||
148 | { | ||
149 | DBG_LOW("hpte_remove(group=%lx)\n", hpte_group); | ||
150 | return -1; | ||
151 | } | ||
152 | |||
153 | static unsigned long beat_lpar_hpte_getword0(unsigned long slot) | ||
154 | { | ||
155 | unsigned long dword0, dword[5]; | ||
156 | unsigned long lpar_rc; | ||
157 | |||
158 | lpar_rc = beat_read_htab_entries(0, slot & ~3UL, dword); | ||
159 | |||
160 | dword0 = dword[slot&3]; | ||
161 | |||
162 | BUG_ON(lpar_rc != 0); | ||
163 | |||
164 | return dword0; | ||
165 | } | ||
166 | |||
167 | static void beat_lpar_hptab_clear(void) | ||
168 | { | ||
169 | unsigned long size_bytes = 1UL << ppc64_pft_size; | ||
170 | unsigned long hpte_count = size_bytes >> 4; | ||
171 | int i; | ||
172 | unsigned long dummy0, dummy1; | ||
173 | |||
174 | /* TODO: Use bulk call */ | ||
175 | for (i = 0; i < hpte_count; i++) | ||
176 | beat_write_htab_entry(0, i, 0, 0, -1UL, -1UL, &dummy0, &dummy1); | ||
177 | } | ||
178 | |||
179 | /* | ||
180 | * NOTE: for updatepp ops we are fortunate that the linux "newpp" bits and | ||
181 | * the low 3 bits of flags happen to line up. So no transform is needed. | ||
182 | * We can probably optimize here and assume the high bits of newpp are | ||
183 | * already zero. For now I am paranoid. | ||
184 | */ | ||
185 | static long beat_lpar_hpte_updatepp(unsigned long slot, | ||
186 | unsigned long newpp, | ||
187 | unsigned long va, | ||
188 | int psize, int local) | ||
189 | { | ||
190 | unsigned long lpar_rc; | ||
191 | unsigned long dummy0, dummy1, want_v; | ||
192 | unsigned long flags; | ||
193 | |||
194 | want_v = hpte_encode_v(va, psize); | ||
195 | |||
196 | DBG_LOW(" update: " | ||
197 | "avpnv=%016lx, slot=%016lx, psize: %d, newpp %016lx ... ", | ||
198 | want_v & HPTE_V_AVPN, slot, psize, newpp); | ||
199 | |||
200 | spin_lock_irqsave(&beat_htab_lock, flags); | ||
201 | dummy0 = beat_lpar_hpte_getword0(slot); | ||
202 | if ((dummy0 & ~0x7FUL) != (want_v & ~0x7FUL)) { | ||
203 | DBG_LOW("not found !\n"); | ||
204 | spin_unlock_irqrestore(&beat_htab_lock, flags); | ||
205 | return -1; | ||
206 | } | ||
207 | |||
208 | lpar_rc = beat_write_htab_entry(0, slot, 0, newpp, 0, 7, &dummy0, | ||
209 | &dummy1); | ||
210 | spin_unlock_irqrestore(&beat_htab_lock, flags); | ||
211 | if (lpar_rc != 0 || dummy0 == 0) { | ||
212 | DBG_LOW("not found !\n"); | ||
213 | return -1; | ||
214 | } | ||
215 | |||
216 | DBG_LOW("ok %lx %lx\n", dummy0, dummy1); | ||
217 | |||
218 | BUG_ON(lpar_rc != 0); | ||
219 | |||
220 | return 0; | ||
221 | } | ||
222 | |||
223 | static long beat_lpar_hpte_find(unsigned long va, int psize) | ||
224 | { | ||
225 | unsigned long hash; | ||
226 | unsigned long i, j; | ||
227 | long slot; | ||
228 | unsigned long want_v, hpte_v; | ||
229 | |||
230 | hash = hpt_hash(va, mmu_psize_defs[psize].shift); | ||
231 | want_v = hpte_encode_v(va, psize); | ||
232 | |||
233 | for (j = 0; j < 2; j++) { | ||
234 | slot = (hash & htab_hash_mask) * HPTES_PER_GROUP; | ||
235 | for (i = 0; i < HPTES_PER_GROUP; i++) { | ||
236 | hpte_v = beat_lpar_hpte_getword0(slot); | ||
237 | |||
238 | if (HPTE_V_COMPARE(hpte_v, want_v) | ||
239 | && (hpte_v & HPTE_V_VALID) | ||
240 | && (!!(hpte_v & HPTE_V_SECONDARY) == j)) { | ||
241 | /* HPTE matches */ | ||
242 | if (j) | ||
243 | slot = -slot; | ||
244 | return slot; | ||
245 | } | ||
246 | ++slot; | ||
247 | } | ||
248 | hash = ~hash; | ||
249 | } | ||
250 | |||
251 | return -1; | ||
252 | } | ||
253 | |||
254 | static void beat_lpar_hpte_updateboltedpp(unsigned long newpp, | ||
255 | unsigned long ea, | ||
256 | int psize) | ||
257 | { | ||
258 | unsigned long lpar_rc, slot, vsid, va, dummy0, dummy1; | ||
259 | unsigned long flags; | ||
260 | |||
261 | vsid = get_kernel_vsid(ea); | ||
262 | va = (vsid << 28) | (ea & 0x0fffffff); | ||
263 | |||
264 | spin_lock_irqsave(&beat_htab_lock, flags); | ||
265 | slot = beat_lpar_hpte_find(va, psize); | ||
266 | BUG_ON(slot == -1); | ||
267 | |||
268 | lpar_rc = beat_write_htab_entry(0, slot, 0, newpp, 0, 7, | ||
269 | &dummy0, &dummy1); | ||
270 | spin_unlock_irqrestore(&beat_htab_lock, flags); | ||
271 | |||
272 | BUG_ON(lpar_rc != 0); | ||
273 | } | ||
274 | |||
275 | static void beat_lpar_hpte_invalidate(unsigned long slot, unsigned long va, | ||
276 | int psize, int local) | ||
277 | { | ||
278 | unsigned long want_v; | ||
279 | unsigned long lpar_rc; | ||
280 | unsigned long dummy1, dummy2; | ||
281 | unsigned long flags; | ||
282 | |||
283 | DBG_LOW(" inval : slot=%lx, va=%016lx, psize: %d, local: %d\n", | ||
284 | slot, va, psize, local); | ||
285 | want_v = hpte_encode_v(va, psize); | ||
286 | |||
287 | spin_lock_irqsave(&beat_htab_lock, flags); | ||
288 | dummy1 = beat_lpar_hpte_getword0(slot); | ||
289 | |||
290 | if ((dummy1 & ~0x7FUL) != (want_v & ~0x7FUL)) { | ||
291 | DBG_LOW("not found !\n"); | ||
292 | spin_unlock_irqrestore(&beat_htab_lock, flags); | ||
293 | return; | ||
294 | } | ||
295 | |||
296 | lpar_rc = beat_write_htab_entry(0, slot, 0, 0, HPTE_V_VALID, 0, | ||
297 | &dummy1, &dummy2); | ||
298 | spin_unlock_irqrestore(&beat_htab_lock, flags); | ||
299 | |||
300 | BUG_ON(lpar_rc != 0); | ||
301 | } | ||
302 | |||
303 | void __init hpte_init_beat(void) | ||
304 | { | ||
305 | ppc_md.hpte_invalidate = beat_lpar_hpte_invalidate; | ||
306 | ppc_md.hpte_updatepp = beat_lpar_hpte_updatepp; | ||
307 | ppc_md.hpte_updateboltedpp = beat_lpar_hpte_updateboltedpp; | ||
308 | ppc_md.hpte_insert = beat_lpar_hpte_insert; | ||
309 | ppc_md.hpte_remove = beat_lpar_hpte_remove; | ||
310 | ppc_md.hpte_clear_all = beat_lpar_hptab_clear; | ||
311 | } | ||
diff --git a/arch/powerpc/platforms/celleb/hvCall.S b/arch/powerpc/platforms/celleb/hvCall.S new file mode 100644 index 000000000000..74c817448948 --- /dev/null +++ b/arch/powerpc/platforms/celleb/hvCall.S | |||
@@ -0,0 +1,287 @@ | |||
1 | /* | ||
2 | * Beat hypervisor call I/F | ||
3 | * | ||
4 | * (C) Copyright 2007 TOSHIBA CORPORATION | ||
5 | * | ||
6 | * This code is based on arch/powerpc/platforms/pseries/hvCall.S. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License along | ||
19 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
20 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
21 | */ | ||
22 | |||
23 | #include <asm/ppc_asm.h> | ||
24 | |||
25 | #define STK_PARM(i) (48 + ((i)-3)*8) | ||
26 | |||
27 | /* Not implemented on Beat, now */ | ||
28 | #define HCALL_INST_PRECALL | ||
29 | #define HCALL_INST_POSTCALL | ||
30 | |||
31 | .text | ||
32 | |||
33 | #define HVSC .long 0x44000022 | ||
34 | |||
35 | /* Note: takes only 7 input parameters at maximum */ | ||
36 | _GLOBAL(beat_hcall_norets) | ||
37 | HMT_MEDIUM | ||
38 | |||
39 | mfcr r0 | ||
40 | stw r0,8(r1) | ||
41 | |||
42 | HCALL_INST_PRECALL | ||
43 | |||
44 | mr r11,r3 | ||
45 | mr r3,r4 | ||
46 | mr r4,r5 | ||
47 | mr r5,r6 | ||
48 | mr r6,r7 | ||
49 | mr r7,r8 | ||
50 | mr r8,r9 | ||
51 | |||
52 | HVSC /* invoke the hypervisor */ | ||
53 | |||
54 | HCALL_INST_POSTCALL | ||
55 | |||
56 | lwz r0,8(r1) | ||
57 | mtcrf 0xff,r0 | ||
58 | |||
59 | blr /* return r3 = status */ | ||
60 | |||
61 | /* Note: takes 8 input parameters at maximum */ | ||
62 | _GLOBAL(beat_hcall_norets8) | ||
63 | HMT_MEDIUM | ||
64 | |||
65 | mfcr r0 | ||
66 | stw r0,8(r1) | ||
67 | |||
68 | HCALL_INST_PRECALL | ||
69 | |||
70 | mr r11,r3 | ||
71 | mr r3,r4 | ||
72 | mr r4,r5 | ||
73 | mr r5,r6 | ||
74 | mr r6,r7 | ||
75 | mr r7,r8 | ||
76 | mr r8,r9 | ||
77 | ld r10,STK_PARM(r10)(r1) | ||
78 | |||
79 | HVSC /* invoke the hypervisor */ | ||
80 | |||
81 | HCALL_INST_POSTCALL | ||
82 | |||
83 | lwz r0,8(r1) | ||
84 | mtcrf 0xff,r0 | ||
85 | |||
86 | blr /* return r3 = status */ | ||
87 | |||
88 | /* Note: takes only 6 input parameters, 1 output parameters at maximum */ | ||
89 | _GLOBAL(beat_hcall1) | ||
90 | HMT_MEDIUM | ||
91 | |||
92 | mfcr r0 | ||
93 | stw r0,8(r1) | ||
94 | |||
95 | HCALL_INST_PRECALL | ||
96 | |||
97 | std r4,STK_PARM(r4)(r1) /* save ret buffer */ | ||
98 | |||
99 | mr r11,r3 | ||
100 | mr r3,r5 | ||
101 | mr r4,r6 | ||
102 | mr r5,r7 | ||
103 | mr r6,r8 | ||
104 | mr r7,r9 | ||
105 | mr r8,r10 | ||
106 | |||
107 | HVSC /* invoke the hypervisor */ | ||
108 | |||
109 | HCALL_INST_POSTCALL | ||
110 | |||
111 | ld r12,STK_PARM(r4)(r1) | ||
112 | std r4, 0(r12) | ||
113 | |||
114 | lwz r0,8(r1) | ||
115 | mtcrf 0xff,r0 | ||
116 | |||
117 | blr /* return r3 = status */ | ||
118 | |||
119 | /* Note: takes only 6 input parameters, 2 output parameters at maximum */ | ||
120 | _GLOBAL(beat_hcall2) | ||
121 | HMT_MEDIUM | ||
122 | |||
123 | mfcr r0 | ||
124 | stw r0,8(r1) | ||
125 | |||
126 | HCALL_INST_PRECALL | ||
127 | |||
128 | std r4,STK_PARM(r4)(r1) /* save ret buffer */ | ||
129 | |||
130 | mr r11,r3 | ||
131 | mr r3,r5 | ||
132 | mr r4,r6 | ||
133 | mr r5,r7 | ||
134 | mr r6,r8 | ||
135 | mr r7,r9 | ||
136 | mr r8,r10 | ||
137 | |||
138 | HVSC /* invoke the hypervisor */ | ||
139 | |||
140 | HCALL_INST_POSTCALL | ||
141 | |||
142 | ld r12,STK_PARM(r4)(r1) | ||
143 | std r4, 0(r12) | ||
144 | std r5, 8(r12) | ||
145 | |||
146 | lwz r0,8(r1) | ||
147 | mtcrf 0xff,r0 | ||
148 | |||
149 | blr /* return r3 = status */ | ||
150 | |||
151 | /* Note: takes only 6 input parameters, 3 output parameters at maximum */ | ||
152 | _GLOBAL(beat_hcall3) | ||
153 | HMT_MEDIUM | ||
154 | |||
155 | mfcr r0 | ||
156 | stw r0,8(r1) | ||
157 | |||
158 | HCALL_INST_PRECALL | ||
159 | |||
160 | std r4,STK_PARM(r4)(r1) /* save ret buffer */ | ||
161 | |||
162 | mr r11,r3 | ||
163 | mr r3,r5 | ||
164 | mr r4,r6 | ||
165 | mr r5,r7 | ||
166 | mr r6,r8 | ||
167 | mr r7,r9 | ||
168 | mr r8,r10 | ||
169 | |||
170 | HVSC /* invoke the hypervisor */ | ||
171 | |||
172 | HCALL_INST_POSTCALL | ||
173 | |||
174 | ld r12,STK_PARM(r4)(r1) | ||
175 | std r4, 0(r12) | ||
176 | std r5, 8(r12) | ||
177 | std r6, 16(r12) | ||
178 | |||
179 | lwz r0,8(r1) | ||
180 | mtcrf 0xff,r0 | ||
181 | |||
182 | blr /* return r3 = status */ | ||
183 | |||
184 | /* Note: takes only 6 input parameters, 4 output parameters at maximum */ | ||
185 | _GLOBAL(beat_hcall4) | ||
186 | HMT_MEDIUM | ||
187 | |||
188 | mfcr r0 | ||
189 | stw r0,8(r1) | ||
190 | |||
191 | HCALL_INST_PRECALL | ||
192 | |||
193 | std r4,STK_PARM(r4)(r1) /* save ret buffer */ | ||
194 | |||
195 | mr r11,r3 | ||
196 | mr r3,r5 | ||
197 | mr r4,r6 | ||
198 | mr r5,r7 | ||
199 | mr r6,r8 | ||
200 | mr r7,r9 | ||
201 | mr r8,r10 | ||
202 | |||
203 | HVSC /* invoke the hypervisor */ | ||
204 | |||
205 | HCALL_INST_POSTCALL | ||
206 | |||
207 | ld r12,STK_PARM(r4)(r1) | ||
208 | std r4, 0(r12) | ||
209 | std r5, 8(r12) | ||
210 | std r6, 16(r12) | ||
211 | std r7, 24(r12) | ||
212 | |||
213 | lwz r0,8(r1) | ||
214 | mtcrf 0xff,r0 | ||
215 | |||
216 | blr /* return r3 = status */ | ||
217 | |||
218 | /* Note: takes only 6 input parameters, 5 output parameters at maximum */ | ||
219 | _GLOBAL(beat_hcall5) | ||
220 | HMT_MEDIUM | ||
221 | |||
222 | mfcr r0 | ||
223 | stw r0,8(r1) | ||
224 | |||
225 | HCALL_INST_PRECALL | ||
226 | |||
227 | std r4,STK_PARM(r4)(r1) /* save ret buffer */ | ||
228 | |||
229 | mr r11,r3 | ||
230 | mr r3,r5 | ||
231 | mr r4,r6 | ||
232 | mr r5,r7 | ||
233 | mr r6,r8 | ||
234 | mr r7,r9 | ||
235 | mr r8,r10 | ||
236 | |||
237 | HVSC /* invoke the hypervisor */ | ||
238 | |||
239 | HCALL_INST_POSTCALL | ||
240 | |||
241 | ld r12,STK_PARM(r4)(r1) | ||
242 | std r4, 0(r12) | ||
243 | std r5, 8(r12) | ||
244 | std r6, 16(r12) | ||
245 | std r7, 24(r12) | ||
246 | std r8, 32(r12) | ||
247 | |||
248 | lwz r0,8(r1) | ||
249 | mtcrf 0xff,r0 | ||
250 | |||
251 | blr /* return r3 = status */ | ||
252 | |||
253 | /* Note: takes only 6 input parameters, 6 output parameters at maximum */ | ||
254 | _GLOBAL(beat_hcall6) | ||
255 | HMT_MEDIUM | ||
256 | |||
257 | mfcr r0 | ||
258 | stw r0,8(r1) | ||
259 | |||
260 | HCALL_INST_PRECALL | ||
261 | |||
262 | std r4,STK_PARM(r4)(r1) /* save ret buffer */ | ||
263 | |||
264 | mr r11,r3 | ||
265 | mr r3,r5 | ||
266 | mr r4,r6 | ||
267 | mr r5,r7 | ||
268 | mr r6,r8 | ||
269 | mr r7,r9 | ||
270 | mr r8,r10 | ||
271 | |||
272 | HVSC /* invoke the hypervisor */ | ||
273 | |||
274 | HCALL_INST_POSTCALL | ||
275 | |||
276 | ld r12,STK_PARM(r4)(r1) | ||
277 | std r4, 0(r12) | ||
278 | std r5, 8(r12) | ||
279 | std r6, 16(r12) | ||
280 | std r7, 24(r12) | ||
281 | std r8, 32(r12) | ||
282 | std r9, 40(r12) | ||
283 | |||
284 | lwz r0,8(r1) | ||
285 | mtcrf 0xff,r0 | ||
286 | |||
287 | blr /* return r3 = status */ | ||
diff --git a/arch/powerpc/platforms/celleb/interrupt.c b/arch/powerpc/platforms/celleb/interrupt.c new file mode 100644 index 000000000000..98e6665681d3 --- /dev/null +++ b/arch/powerpc/platforms/celleb/interrupt.c | |||
@@ -0,0 +1,274 @@ | |||
1 | /* | ||
2 | * Celleb/Beat Interrupt controller | ||
3 | * | ||
4 | * (C) Copyright 2006-2007 TOSHIBA CORPORATION | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License along | ||
17 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
19 | */ | ||
20 | |||
21 | #include <linux/init.h> | ||
22 | #include <linux/interrupt.h> | ||
23 | #include <linux/irq.h> | ||
24 | #include <linux/percpu.h> | ||
25 | #include <linux/types.h> | ||
26 | |||
27 | #include <asm/machdep.h> | ||
28 | |||
29 | #include "interrupt.h" | ||
30 | #include "beat_wrapper.h" | ||
31 | |||
32 | #define MAX_IRQS NR_IRQS | ||
33 | static DEFINE_SPINLOCK(beatic_irq_mask_lock); | ||
34 | static uint64_t beatic_irq_mask_enable[(MAX_IRQS+255)/64]; | ||
35 | static uint64_t beatic_irq_mask_ack[(MAX_IRQS+255)/64]; | ||
36 | |||
37 | static struct irq_host *beatic_host = NULL; | ||
38 | |||
39 | /* | ||
40 | * In this implementation, "virq" == "IRQ plug number", | ||
41 | * "(irq_hw_number_t)hwirq" == "IRQ outlet number". | ||
42 | */ | ||
43 | |||
44 | /* assumption: locked */ | ||
45 | static inline void beatic_update_irq_mask(unsigned int irq_plug) | ||
46 | { | ||
47 | int off; | ||
48 | unsigned long masks[4]; | ||
49 | |||
50 | off = (irq_plug / 256) * 4; | ||
51 | masks[0] = beatic_irq_mask_enable[off + 0] | ||
52 | & beatic_irq_mask_ack[off + 0]; | ||
53 | masks[1] = beatic_irq_mask_enable[off + 1] | ||
54 | & beatic_irq_mask_ack[off + 1]; | ||
55 | masks[2] = beatic_irq_mask_enable[off + 2] | ||
56 | & beatic_irq_mask_ack[off + 2]; | ||
57 | masks[3] = beatic_irq_mask_enable[off + 3] | ||
58 | & beatic_irq_mask_ack[off + 3]; | ||
59 | if (beat_set_interrupt_mask(irq_plug&~255UL, | ||
60 | masks[0], masks[1], masks[2], masks[3]) != 0) | ||
61 | panic("Failed to set mask IRQ!"); | ||
62 | } | ||
63 | |||
64 | static void beatic_mask_irq(unsigned int irq_plug) | ||
65 | { | ||
66 | unsigned long flags; | ||
67 | |||
68 | spin_lock_irqsave(&beatic_irq_mask_lock, flags); | ||
69 | beatic_irq_mask_enable[irq_plug/64] &= ~(1UL << (63 - (irq_plug%64))); | ||
70 | beatic_update_irq_mask(irq_plug); | ||
71 | spin_unlock_irqrestore(&beatic_irq_mask_lock, flags); | ||
72 | } | ||
73 | |||
74 | static void beatic_unmask_irq(unsigned int irq_plug) | ||
75 | { | ||
76 | unsigned long flags; | ||
77 | |||
78 | spin_lock_irqsave(&beatic_irq_mask_lock, flags); | ||
79 | beatic_irq_mask_enable[irq_plug/64] |= 1UL << (63 - (irq_plug%64)); | ||
80 | beatic_update_irq_mask(irq_plug); | ||
81 | spin_unlock_irqrestore(&beatic_irq_mask_lock, flags); | ||
82 | } | ||
83 | |||
84 | static void beatic_ack_irq(unsigned int irq_plug) | ||
85 | { | ||
86 | unsigned long flags; | ||
87 | |||
88 | spin_lock_irqsave(&beatic_irq_mask_lock, flags); | ||
89 | beatic_irq_mask_ack[irq_plug/64] &= ~(1UL << (63 - (irq_plug%64))); | ||
90 | beatic_update_irq_mask(irq_plug); | ||
91 | spin_unlock_irqrestore(&beatic_irq_mask_lock, flags); | ||
92 | } | ||
93 | |||
94 | static void beatic_end_irq(unsigned int irq_plug) | ||
95 | { | ||
96 | s64 err; | ||
97 | unsigned long flags; | ||
98 | |||
99 | if ((err = beat_downcount_of_interrupt(irq_plug)) != 0) { | ||
100 | if ((err & 0xFFFFFFFF) != 0xFFFFFFF5) /* -11: wrong state */ | ||
101 | panic("Failed to downcount IRQ! Error = %16lx", err); | ||
102 | |||
103 | printk(KERN_ERR "IRQ over-downcounted, plug %d\n", irq_plug); | ||
104 | } | ||
105 | spin_lock_irqsave(&beatic_irq_mask_lock, flags); | ||
106 | beatic_irq_mask_ack[irq_plug/64] |= 1UL << (63 - (irq_plug%64)); | ||
107 | beatic_update_irq_mask(irq_plug); | ||
108 | spin_unlock_irqrestore(&beatic_irq_mask_lock, flags); | ||
109 | } | ||
110 | |||
111 | static struct irq_chip beatic_pic = { | ||
112 | .typename = " CELL-BEAT ", | ||
113 | .unmask = beatic_unmask_irq, | ||
114 | .mask = beatic_mask_irq, | ||
115 | .eoi = beatic_end_irq, | ||
116 | }; | ||
117 | |||
118 | /* | ||
119 | * Dispose binding hardware IRQ number (hw) and Virtuql IRQ number (virq), | ||
120 | * update flags. | ||
121 | * | ||
122 | * Note that the number (virq) is already assigned at upper layer. | ||
123 | */ | ||
124 | static void beatic_pic_host_unmap(struct irq_host *h, unsigned int virq) | ||
125 | { | ||
126 | beat_destruct_irq_plug(virq); | ||
127 | } | ||
128 | |||
129 | /* | ||
130 | * Create or update binding hardware IRQ number (hw) and Virtuql | ||
131 | * IRQ number (virq). This is called only once for a given mapping. | ||
132 | * | ||
133 | * Note that the number (virq) is already assigned at upper layer. | ||
134 | */ | ||
135 | static int beatic_pic_host_map(struct irq_host *h, unsigned int virq, | ||
136 | irq_hw_number_t hw) | ||
137 | { | ||
138 | struct irq_desc *desc = get_irq_desc(virq); | ||
139 | int64_t err; | ||
140 | |||
141 | if ((err = beat_construct_and_connect_irq_plug(virq, hw)) < 0) | ||
142 | return -EIO; | ||
143 | |||
144 | desc->status |= IRQ_LEVEL; | ||
145 | set_irq_chip_and_handler(virq, &beatic_pic, handle_fasteoi_irq); | ||
146 | return 0; | ||
147 | } | ||
148 | |||
149 | /* | ||
150 | * Update binding hardware IRQ number (hw) and Virtuql | ||
151 | * IRQ number (virq). This is called only once for a given mapping. | ||
152 | */ | ||
153 | static void beatic_pic_host_remap(struct irq_host *h, unsigned int virq, | ||
154 | irq_hw_number_t hw) | ||
155 | { | ||
156 | beat_construct_and_connect_irq_plug(virq, hw); | ||
157 | } | ||
158 | |||
159 | /* | ||
160 | * Translate device-tree interrupt spec to irq_hw_number_t style (ulong), | ||
161 | * to pass away to irq_create_mapping(). | ||
162 | * | ||
163 | * Called from irq_create_of_mapping() only. | ||
164 | * Note: We have only 1 entry to translate. | ||
165 | */ | ||
166 | static int beatic_pic_host_xlate(struct irq_host *h, struct device_node *ct, | ||
167 | u32 *intspec, unsigned int intsize, | ||
168 | irq_hw_number_t *out_hwirq, | ||
169 | unsigned int *out_flags) | ||
170 | { | ||
171 | u64 *intspec2 = (u64 *)intspec; | ||
172 | |||
173 | *out_hwirq = *intspec2; | ||
174 | *out_flags |= IRQ_TYPE_LEVEL_LOW; | ||
175 | return 0; | ||
176 | } | ||
177 | |||
178 | static struct irq_host_ops beatic_pic_host_ops = { | ||
179 | .map = beatic_pic_host_map, | ||
180 | .remap = beatic_pic_host_remap, | ||
181 | .unmap = beatic_pic_host_unmap, | ||
182 | .xlate = beatic_pic_host_xlate, | ||
183 | }; | ||
184 | |||
185 | /* | ||
186 | * Get an IRQ number | ||
187 | * Note: returns VIRQ | ||
188 | */ | ||
189 | static inline unsigned int beatic_get_irq_plug(void) | ||
190 | { | ||
191 | int i; | ||
192 | uint64_t pending[4], ub; | ||
193 | |||
194 | for (i = 0; i < MAX_IRQS; i += 256) { | ||
195 | beat_detect_pending_interrupts(i, pending); | ||
196 | __asm__ ("cntlzd %0,%1":"=r"(ub): | ||
197 | "r"(pending[0] & beatic_irq_mask_enable[i/64+0] | ||
198 | & beatic_irq_mask_ack[i/64+0])); | ||
199 | if (ub != 64) | ||
200 | return i + ub + 0; | ||
201 | __asm__ ("cntlzd %0,%1":"=r"(ub): | ||
202 | "r"(pending[1] & beatic_irq_mask_enable[i/64+1] | ||
203 | & beatic_irq_mask_ack[i/64+1])); | ||
204 | if (ub != 64) | ||
205 | return i + ub + 64; | ||
206 | __asm__ ("cntlzd %0,%1":"=r"(ub): | ||
207 | "r"(pending[2] & beatic_irq_mask_enable[i/64+2] | ||
208 | & beatic_irq_mask_ack[i/64+2])); | ||
209 | if (ub != 64) | ||
210 | return i + ub + 128; | ||
211 | __asm__ ("cntlzd %0,%1":"=r"(ub): | ||
212 | "r"(pending[3] & beatic_irq_mask_enable[i/64+3] | ||
213 | & beatic_irq_mask_ack[i/64+3])); | ||
214 | if (ub != 64) | ||
215 | return i + ub + 192; | ||
216 | } | ||
217 | |||
218 | return NO_IRQ; | ||
219 | } | ||
220 | unsigned int beatic_get_irq(void) | ||
221 | { | ||
222 | unsigned int ret; | ||
223 | |||
224 | ret = beatic_get_irq_plug(); | ||
225 | if (ret != NO_IRQ) | ||
226 | beatic_ack_irq(ret); | ||
227 | return ret; | ||
228 | } | ||
229 | |||
230 | /* | ||
231 | */ | ||
232 | void __init beatic_init_IRQ(void) | ||
233 | { | ||
234 | int i; | ||
235 | |||
236 | memset(beatic_irq_mask_enable, 0, sizeof(beatic_irq_mask_enable)); | ||
237 | memset(beatic_irq_mask_ack, 255, sizeof(beatic_irq_mask_ack)); | ||
238 | for (i = 0; i < MAX_IRQS; i += 256) | ||
239 | beat_set_interrupt_mask(i, 0L, 0L, 0L, 0L); | ||
240 | |||
241 | /* Set out get_irq function */ | ||
242 | ppc_md.get_irq = beatic_get_irq; | ||
243 | |||
244 | /* Allocate an irq host */ | ||
245 | beatic_host = irq_alloc_host(IRQ_HOST_MAP_NOMAP, 0, | ||
246 | &beatic_pic_host_ops, | ||
247 | 0); | ||
248 | BUG_ON(beatic_host == NULL); | ||
249 | irq_set_default_host(beatic_host); | ||
250 | } | ||
251 | |||
252 | #ifdef CONFIG_SMP | ||
253 | |||
254 | /* Nullified to compile with SMP mode */ | ||
255 | void beatic_setup_cpu(int cpu) | ||
256 | { | ||
257 | } | ||
258 | |||
259 | void beatic_cause_IPI(int cpu, int mesg) | ||
260 | { | ||
261 | } | ||
262 | |||
263 | void beatic_request_IPIs(void) | ||
264 | { | ||
265 | } | ||
266 | #endif /* CONFIG_SMP */ | ||
267 | |||
268 | void beatic_deinit_IRQ(void) | ||
269 | { | ||
270 | int i; | ||
271 | |||
272 | for (i = 1; i < NR_IRQS; i++) | ||
273 | beat_destruct_irq_plug(i); | ||
274 | } | ||
diff --git a/arch/powerpc/platforms/celleb/interrupt.h b/arch/powerpc/platforms/celleb/interrupt.h new file mode 100644 index 000000000000..b470fd0051f1 --- /dev/null +++ b/arch/powerpc/platforms/celleb/interrupt.h | |||
@@ -0,0 +1,33 @@ | |||
1 | /* | ||
2 | * Celleb/Beat Interrupt controller | ||
3 | * | ||
4 | * (C) Copyright 2006 TOSHIBA CORPORATION | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License along | ||
17 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
19 | */ | ||
20 | |||
21 | #ifndef ASM_BEAT_PIC_H | ||
22 | #define ASM_BEAT_PIC_H | ||
23 | #ifdef __KERNEL__ | ||
24 | |||
25 | extern void beatic_init_IRQ(void); | ||
26 | extern unsigned int beatic_get_irq(void); | ||
27 | extern void beatic_cause_IPI(int cpu, int mesg); | ||
28 | extern void beatic_request_IPIs(void); | ||
29 | extern void beatic_setup_cpu(int); | ||
30 | extern void beatic_deinit_IRQ(void); | ||
31 | |||
32 | #endif | ||
33 | #endif /* ASM_BEAT_PIC_H */ | ||
diff --git a/arch/powerpc/platforms/celleb/iommu.c b/arch/powerpc/platforms/celleb/iommu.c new file mode 100644 index 000000000000..f63b94c65353 --- /dev/null +++ b/arch/powerpc/platforms/celleb/iommu.c | |||
@@ -0,0 +1,104 @@ | |||
1 | /* | ||
2 | * Support for IOMMU on Celleb platform. | ||
3 | * | ||
4 | * (C) Copyright 2006-2007 TOSHIBA CORPORATION | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License along | ||
17 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
19 | */ | ||
20 | |||
21 | #include <linux/kernel.h> | ||
22 | #include <linux/init.h> | ||
23 | #include <linux/dma-mapping.h> | ||
24 | #include <linux/pci.h> | ||
25 | |||
26 | #include <asm/of_platform.h> | ||
27 | |||
28 | #include "beat_wrapper.h" | ||
29 | |||
30 | #define DMA_FLAGS 0xf800000000000000UL /* r/w permitted, coherency required, | ||
31 | strongest order */ | ||
32 | |||
33 | static int __init find_dma_window(u64 *io_space_id, u64 *ioid, | ||
34 | u64 *base, u64 *size, u64 *io_page_size) | ||
35 | { | ||
36 | struct device_node *dn; | ||
37 | const unsigned long *dma_window; | ||
38 | |||
39 | for_each_node_by_type(dn, "ioif") { | ||
40 | dma_window = get_property(dn, "toshiba,dma-window", NULL); | ||
41 | if (dma_window) { | ||
42 | *io_space_id = (dma_window[0] >> 32) & 0xffffffffUL; | ||
43 | *ioid = dma_window[0] & 0x7ffUL; | ||
44 | *base = dma_window[1]; | ||
45 | *size = dma_window[2]; | ||
46 | *io_page_size = 1 << dma_window[3]; | ||
47 | of_node_put(dn); | ||
48 | return 1; | ||
49 | } | ||
50 | } | ||
51 | return 0; | ||
52 | } | ||
53 | |||
54 | static void __init celleb_init_direct_mapping(void) | ||
55 | { | ||
56 | u64 lpar_addr, io_addr; | ||
57 | u64 io_space_id, ioid, dma_base, dma_size, io_page_size; | ||
58 | |||
59 | if (!find_dma_window(&io_space_id, &ioid, &dma_base, &dma_size, | ||
60 | &io_page_size)) { | ||
61 | pr_info("No dma window found !\n"); | ||
62 | return; | ||
63 | } | ||
64 | |||
65 | for (lpar_addr = 0; lpar_addr < dma_size; lpar_addr += io_page_size) { | ||
66 | io_addr = lpar_addr + dma_base; | ||
67 | (void)beat_put_iopte(io_space_id, io_addr, lpar_addr, | ||
68 | ioid, DMA_FLAGS); | ||
69 | } | ||
70 | |||
71 | dma_direct_offset = dma_base; | ||
72 | } | ||
73 | |||
74 | static int celleb_of_bus_notify(struct notifier_block *nb, | ||
75 | unsigned long action, void *data) | ||
76 | { | ||
77 | struct device *dev = data; | ||
78 | |||
79 | /* We are only intereted in device addition */ | ||
80 | if (action != BUS_NOTIFY_ADD_DEVICE) | ||
81 | return 0; | ||
82 | |||
83 | dev->archdata.dma_ops = pci_dma_ops; | ||
84 | |||
85 | return 0; | ||
86 | } | ||
87 | |||
88 | static struct notifier_block celleb_of_bus_notifier = { | ||
89 | .notifier_call = celleb_of_bus_notify | ||
90 | }; | ||
91 | |||
92 | static int __init celleb_init_iommu(void) | ||
93 | { | ||
94 | if (!machine_is(celleb)) | ||
95 | return -ENODEV; | ||
96 | |||
97 | celleb_init_direct_mapping(); | ||
98 | pci_dma_ops = &dma_direct_ops; | ||
99 | bus_register_notifier(&of_platform_bus_type, &celleb_of_bus_notifier); | ||
100 | |||
101 | return 0; | ||
102 | } | ||
103 | |||
104 | arch_initcall(celleb_init_iommu); | ||
diff --git a/arch/powerpc/platforms/celleb/pci.c b/arch/powerpc/platforms/celleb/pci.c new file mode 100644 index 000000000000..98de836dfed3 --- /dev/null +++ b/arch/powerpc/platforms/celleb/pci.c | |||
@@ -0,0 +1,481 @@ | |||
1 | /* | ||
2 | * Support for PCI on Celleb platform. | ||
3 | * | ||
4 | * (C) Copyright 2006-2007 TOSHIBA CORPORATION | ||
5 | * | ||
6 | * This code is based on arch/powerpc/kernel/rtas_pci.c: | ||
7 | * Copyright (C) 2001 Dave Engebretsen, IBM Corporation | ||
8 | * Copyright (C) 2003 Anton Blanchard <anton@au.ibm.com>, IBM | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License as published by | ||
12 | * the Free Software Foundation; either version 2 of the License, or | ||
13 | * (at your option) any later version. | ||
14 | * | ||
15 | * This program is distributed in the hope that it will be useful, | ||
16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
18 | * GNU General Public License for more details. | ||
19 | * | ||
20 | * You should have received a copy of the GNU General Public License along | ||
21 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
22 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
23 | */ | ||
24 | |||
25 | #undef DEBUG | ||
26 | |||
27 | #include <linux/kernel.h> | ||
28 | #include <linux/threads.h> | ||
29 | #include <linux/pci.h> | ||
30 | #include <linux/string.h> | ||
31 | #include <linux/init.h> | ||
32 | #include <linux/bootmem.h> | ||
33 | #include <linux/pci_regs.h> | ||
34 | |||
35 | #include <asm/io.h> | ||
36 | #include <asm/irq.h> | ||
37 | #include <asm/prom.h> | ||
38 | #include <asm/machdep.h> | ||
39 | #include <asm/pci-bridge.h> | ||
40 | #include <asm/ppc-pci.h> | ||
41 | |||
42 | #include "pci.h" | ||
43 | #include "interrupt.h" | ||
44 | |||
45 | #define MAX_PCI_DEVICES 32 | ||
46 | #define MAX_PCI_FUNCTIONS 8 | ||
47 | #define MAX_PCI_BASE_ADDRS 3 /* use 64 bit address */ | ||
48 | |||
49 | /* definition for fake pci configuration area for GbE, .... ,and etc. */ | ||
50 | |||
51 | struct celleb_pci_resource { | ||
52 | struct resource r[MAX_PCI_BASE_ADDRS]; | ||
53 | }; | ||
54 | |||
55 | struct celleb_pci_private { | ||
56 | unsigned char *fake_config[MAX_PCI_DEVICES][MAX_PCI_FUNCTIONS]; | ||
57 | struct celleb_pci_resource *res[MAX_PCI_DEVICES][MAX_PCI_FUNCTIONS]; | ||
58 | }; | ||
59 | |||
60 | static inline u8 celleb_fake_config_readb(void *addr) | ||
61 | { | ||
62 | u8 *p = addr; | ||
63 | return *p; | ||
64 | } | ||
65 | |||
66 | static inline u16 celleb_fake_config_readw(void *addr) | ||
67 | { | ||
68 | __le16 *p = addr; | ||
69 | return le16_to_cpu(*p); | ||
70 | } | ||
71 | |||
72 | static inline u32 celleb_fake_config_readl(void *addr) | ||
73 | { | ||
74 | __le32 *p = addr; | ||
75 | return le32_to_cpu(*p); | ||
76 | } | ||
77 | |||
78 | static inline void celleb_fake_config_writeb(u32 val, void *addr) | ||
79 | { | ||
80 | u8 *p = addr; | ||
81 | *p = val; | ||
82 | } | ||
83 | |||
84 | static inline void celleb_fake_config_writew(u32 val, void *addr) | ||
85 | { | ||
86 | __le16 val16; | ||
87 | __le16 *p = addr; | ||
88 | val16 = cpu_to_le16(val); | ||
89 | *p = val16; | ||
90 | } | ||
91 | |||
92 | static inline void celleb_fake_config_writel(u32 val, void *addr) | ||
93 | { | ||
94 | __le32 val32; | ||
95 | __le32 *p = addr; | ||
96 | val32 = cpu_to_le32(val); | ||
97 | *p = val32; | ||
98 | } | ||
99 | |||
100 | static unsigned char *get_fake_config_start(struct pci_controller *hose, | ||
101 | int devno, int fn) | ||
102 | { | ||
103 | struct celleb_pci_private *private = hose->private_data; | ||
104 | |||
105 | if (private == NULL) | ||
106 | return NULL; | ||
107 | |||
108 | return private->fake_config[devno][fn]; | ||
109 | } | ||
110 | |||
111 | static struct celleb_pci_resource *get_resource_start( | ||
112 | struct pci_controller *hose, | ||
113 | int devno, int fn) | ||
114 | { | ||
115 | struct celleb_pci_private *private = hose->private_data; | ||
116 | |||
117 | if (private == NULL) | ||
118 | return NULL; | ||
119 | |||
120 | return private->res[devno][fn]; | ||
121 | } | ||
122 | |||
123 | |||
124 | static void celleb_config_read_fake(unsigned char *config, int where, | ||
125 | int size, u32 *val) | ||
126 | { | ||
127 | char *p = config + where; | ||
128 | |||
129 | switch (size) { | ||
130 | case 1: | ||
131 | *val = celleb_fake_config_readb(p); | ||
132 | break; | ||
133 | case 2: | ||
134 | *val = celleb_fake_config_readw(p); | ||
135 | break; | ||
136 | case 4: | ||
137 | *val = celleb_fake_config_readl(p); | ||
138 | break; | ||
139 | } | ||
140 | |||
141 | return; | ||
142 | } | ||
143 | |||
144 | static void celleb_config_write_fake(unsigned char *config, int where, | ||
145 | int size, u32 val) | ||
146 | { | ||
147 | char *p = config + where; | ||
148 | |||
149 | switch (size) { | ||
150 | case 1: | ||
151 | celleb_fake_config_writeb(val, p); | ||
152 | break; | ||
153 | case 2: | ||
154 | celleb_fake_config_writew(val, p); | ||
155 | break; | ||
156 | case 4: | ||
157 | celleb_fake_config_writel(val, p); | ||
158 | break; | ||
159 | } | ||
160 | return; | ||
161 | } | ||
162 | |||
163 | static int celleb_fake_pci_read_config(struct pci_bus *bus, | ||
164 | unsigned int devfn, int where, int size, u32 *val) | ||
165 | { | ||
166 | char *config; | ||
167 | struct device_node *node; | ||
168 | struct pci_controller *hose; | ||
169 | unsigned int devno = devfn >> 3; | ||
170 | unsigned int fn = devfn & 0x7; | ||
171 | |||
172 | /* allignment check */ | ||
173 | BUG_ON(where % size); | ||
174 | |||
175 | pr_debug(" fake read: bus=0x%x, ", bus->number); | ||
176 | node = (struct device_node *)bus->sysdata; | ||
177 | hose = pci_find_hose_for_OF_device(node); | ||
178 | config = get_fake_config_start(hose, devno, fn); | ||
179 | |||
180 | pr_debug("devno=0x%x, where=0x%x, size=0x%x, ", devno, where, size); | ||
181 | if (!config) { | ||
182 | pr_debug("failed\n"); | ||
183 | return PCIBIOS_DEVICE_NOT_FOUND; | ||
184 | } | ||
185 | |||
186 | celleb_config_read_fake(config, where, size, val); | ||
187 | pr_debug("val=0x%x\n", *val); | ||
188 | |||
189 | return PCIBIOS_SUCCESSFUL; | ||
190 | } | ||
191 | |||
192 | |||
193 | static int celleb_fake_pci_write_config(struct pci_bus *bus, | ||
194 | unsigned int devfn, int where, int size, u32 val) | ||
195 | { | ||
196 | char *config; | ||
197 | struct device_node *node; | ||
198 | struct pci_controller *hose; | ||
199 | struct celleb_pci_resource *res; | ||
200 | unsigned int devno = devfn >> 3; | ||
201 | unsigned int fn = devfn & 0x7; | ||
202 | |||
203 | /* allignment check */ | ||
204 | BUG_ON(where % size); | ||
205 | |||
206 | node = (struct device_node *)bus->sysdata; | ||
207 | hose = pci_find_hose_for_OF_device(node); | ||
208 | config = get_fake_config_start(hose, devno, fn); | ||
209 | |||
210 | if (!config) | ||
211 | return PCIBIOS_DEVICE_NOT_FOUND; | ||
212 | |||
213 | if (val == ~0) { | ||
214 | int i = (where - PCI_BASE_ADDRESS_0) >> 3; | ||
215 | |||
216 | switch (where) { | ||
217 | case PCI_BASE_ADDRESS_0: | ||
218 | case PCI_BASE_ADDRESS_2: | ||
219 | if (size != 4) | ||
220 | return PCIBIOS_DEVICE_NOT_FOUND; | ||
221 | res = get_resource_start(hose, devno, fn); | ||
222 | if (!res) | ||
223 | return PCIBIOS_DEVICE_NOT_FOUND; | ||
224 | celleb_config_write_fake(config, where, size, | ||
225 | (res->r[i].end - res->r[i].start)); | ||
226 | return PCIBIOS_SUCCESSFUL; | ||
227 | case PCI_BASE_ADDRESS_1: | ||
228 | case PCI_BASE_ADDRESS_3: | ||
229 | case PCI_BASE_ADDRESS_4: | ||
230 | case PCI_BASE_ADDRESS_5: | ||
231 | break; | ||
232 | default: | ||
233 | break; | ||
234 | } | ||
235 | } | ||
236 | |||
237 | celleb_config_write_fake(config, where, size, val); | ||
238 | pr_debug(" fake write: where=%x, size=%d, val=%x\n", | ||
239 | where, size, val); | ||
240 | |||
241 | return PCIBIOS_SUCCESSFUL; | ||
242 | } | ||
243 | |||
244 | static struct pci_ops celleb_fake_pci_ops = { | ||
245 | celleb_fake_pci_read_config, | ||
246 | celleb_fake_pci_write_config | ||
247 | }; | ||
248 | |||
249 | static inline void celleb_setup_pci_base_addrs(struct pci_controller *hose, | ||
250 | unsigned int devno, unsigned int fn, | ||
251 | unsigned int num_base_addr) | ||
252 | { | ||
253 | u32 val; | ||
254 | unsigned char *config; | ||
255 | struct celleb_pci_resource *res; | ||
256 | |||
257 | config = get_fake_config_start(hose, devno, fn); | ||
258 | res = get_resource_start(hose, devno, fn); | ||
259 | |||
260 | if (!config || !res) | ||
261 | return; | ||
262 | |||
263 | switch (num_base_addr) { | ||
264 | case 3: | ||
265 | val = (res->r[2].start & 0xfffffff0) | ||
266 | | PCI_BASE_ADDRESS_MEM_TYPE_64; | ||
267 | celleb_config_write_fake(config, PCI_BASE_ADDRESS_4, 4, val); | ||
268 | val = res->r[2].start >> 32; | ||
269 | celleb_config_write_fake(config, PCI_BASE_ADDRESS_5, 4, val); | ||
270 | /* FALLTHROUGH */ | ||
271 | case 2: | ||
272 | val = (res->r[1].start & 0xfffffff0) | ||
273 | | PCI_BASE_ADDRESS_MEM_TYPE_64; | ||
274 | celleb_config_write_fake(config, PCI_BASE_ADDRESS_2, 4, val); | ||
275 | val = res->r[1].start >> 32; | ||
276 | celleb_config_write_fake(config, PCI_BASE_ADDRESS_3, 4, val); | ||
277 | /* FALLTHROUGH */ | ||
278 | case 1: | ||
279 | val = (res->r[0].start & 0xfffffff0) | ||
280 | | PCI_BASE_ADDRESS_MEM_TYPE_64; | ||
281 | celleb_config_write_fake(config, PCI_BASE_ADDRESS_0, 4, val); | ||
282 | val = res->r[0].start >> 32; | ||
283 | celleb_config_write_fake(config, PCI_BASE_ADDRESS_1, 4, val); | ||
284 | break; | ||
285 | } | ||
286 | |||
287 | val = PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER; | ||
288 | celleb_config_write_fake(config, PCI_COMMAND, 2, val); | ||
289 | } | ||
290 | |||
291 | static int __devinit celleb_setup_fake_pci_device(struct device_node *node, | ||
292 | struct pci_controller *hose) | ||
293 | { | ||
294 | unsigned int rlen; | ||
295 | int num_base_addr = 0; | ||
296 | u32 val; | ||
297 | const u32 *wi0, *wi1, *wi2, *wi3, *wi4; | ||
298 | unsigned int devno, fn; | ||
299 | struct celleb_pci_private *private = hose->private_data; | ||
300 | unsigned char **config = NULL; | ||
301 | struct celleb_pci_resource **res = NULL; | ||
302 | const char *name; | ||
303 | const unsigned long *li; | ||
304 | int size, result; | ||
305 | |||
306 | if (private == NULL) { | ||
307 | printk(KERN_ERR "PCI: " | ||
308 | "memory space for pci controller is not assigned\n"); | ||
309 | goto error; | ||
310 | } | ||
311 | |||
312 | name = get_property(node, "model", &rlen); | ||
313 | if (!name) { | ||
314 | printk(KERN_ERR "PCI: model property not found.\n"); | ||
315 | goto error; | ||
316 | } | ||
317 | |||
318 | wi4 = get_property(node, "reg", &rlen); | ||
319 | if (wi4 == NULL) | ||
320 | goto error; | ||
321 | |||
322 | devno = ((wi4[0] >> 8) & 0xff) >> 3; | ||
323 | fn = (wi4[0] >> 8) & 0x7; | ||
324 | |||
325 | pr_debug("PCI: celleb_setup_fake_pci() %s devno=%x fn=%x\n", name, | ||
326 | devno, fn); | ||
327 | |||
328 | size = 256; | ||
329 | config = &private->fake_config[devno][fn]; | ||
330 | if (mem_init_done) | ||
331 | *config = kzalloc(size, GFP_KERNEL); | ||
332 | else | ||
333 | *config = alloc_bootmem(size); | ||
334 | if (*config == NULL) { | ||
335 | printk(KERN_ERR "PCI: " | ||
336 | "not enough memory for fake configuration space\n"); | ||
337 | goto error; | ||
338 | } | ||
339 | pr_debug("PCI: fake config area assigned 0x%016lx\n", | ||
340 | (unsigned long)*config); | ||
341 | |||
342 | size = sizeof(struct celleb_pci_resource); | ||
343 | res = &private->res[devno][fn]; | ||
344 | if (mem_init_done) | ||
345 | *res = kzalloc(size, GFP_KERNEL); | ||
346 | else | ||
347 | *res = alloc_bootmem(size); | ||
348 | if (*res == NULL) { | ||
349 | printk(KERN_ERR | ||
350 | "PCI: not enough memory for resource data space\n"); | ||
351 | goto error; | ||
352 | } | ||
353 | pr_debug("PCI: res assigned 0x%016lx\n", (unsigned long)*res); | ||
354 | |||
355 | wi0 = get_property(node, "device-id", NULL); | ||
356 | wi1 = get_property(node, "vendor-id", NULL); | ||
357 | wi2 = get_property(node, "class-code", NULL); | ||
358 | wi3 = get_property(node, "revision-id", NULL); | ||
359 | |||
360 | celleb_config_write_fake(*config, PCI_DEVICE_ID, 2, wi0[0] & 0xffff); | ||
361 | celleb_config_write_fake(*config, PCI_VENDOR_ID, 2, wi1[0] & 0xffff); | ||
362 | pr_debug("class-code = 0x%08x\n", wi2[0]); | ||
363 | |||
364 | celleb_config_write_fake(*config, PCI_CLASS_PROG, 1, wi2[0] & 0xff); | ||
365 | celleb_config_write_fake(*config, PCI_CLASS_DEVICE, 2, | ||
366 | (wi2[0] >> 8) & 0xffff); | ||
367 | celleb_config_write_fake(*config, PCI_REVISION_ID, 1, wi3[0]); | ||
368 | |||
369 | while (num_base_addr < MAX_PCI_BASE_ADDRS) { | ||
370 | result = of_address_to_resource(node, | ||
371 | num_base_addr, &(*res)->r[num_base_addr]); | ||
372 | if (result) | ||
373 | break; | ||
374 | num_base_addr++; | ||
375 | } | ||
376 | |||
377 | celleb_setup_pci_base_addrs(hose, devno, fn, num_base_addr); | ||
378 | |||
379 | li = get_property(node, "interrupts", &rlen); | ||
380 | val = li[0]; | ||
381 | celleb_config_write_fake(*config, PCI_INTERRUPT_PIN, 1, 1); | ||
382 | celleb_config_write_fake(*config, PCI_INTERRUPT_LINE, 1, val); | ||
383 | |||
384 | #ifdef DEBUG | ||
385 | pr_debug("PCI: %s irq=%ld\n", name, li[0]); | ||
386 | for (i = 0; i < 6; i++) { | ||
387 | celleb_config_read_fake(*config, | ||
388 | PCI_BASE_ADDRESS_0 + 0x4 * i, 4, | ||
389 | &val); | ||
390 | pr_debug("PCI: %s fn=%d base_address_%d=0x%x\n", | ||
391 | name, fn, i, val); | ||
392 | } | ||
393 | #endif | ||
394 | |||
395 | celleb_config_write_fake(*config, PCI_HEADER_TYPE, 1, | ||
396 | PCI_HEADER_TYPE_NORMAL); | ||
397 | |||
398 | return 0; | ||
399 | |||
400 | error: | ||
401 | if (mem_init_done) { | ||
402 | if (config && *config) | ||
403 | kfree(*config); | ||
404 | if (res && *res) | ||
405 | kfree(*res); | ||
406 | |||
407 | } else { | ||
408 | if (config && *config) { | ||
409 | size = 256; | ||
410 | free_bootmem((unsigned long)(*config), size); | ||
411 | } | ||
412 | if (res && *res) { | ||
413 | size = sizeof(struct celleb_pci_resource); | ||
414 | free_bootmem((unsigned long)(*res), size); | ||
415 | } | ||
416 | } | ||
417 | |||
418 | return 1; | ||
419 | } | ||
420 | |||
421 | static int __devinit phb_set_bus_ranges(struct device_node *dev, | ||
422 | struct pci_controller *phb) | ||
423 | { | ||
424 | const int *bus_range; | ||
425 | unsigned int len; | ||
426 | |||
427 | bus_range = get_property(dev, "bus-range", &len); | ||
428 | if (bus_range == NULL || len < 2 * sizeof(int)) | ||
429 | return 1; | ||
430 | |||
431 | phb->first_busno = bus_range[0]; | ||
432 | phb->last_busno = bus_range[1]; | ||
433 | |||
434 | return 0; | ||
435 | } | ||
436 | |||
437 | static void __devinit celleb_alloc_private_mem(struct pci_controller *hose) | ||
438 | { | ||
439 | if (mem_init_done) | ||
440 | hose->private_data = | ||
441 | kzalloc(sizeof(struct celleb_pci_private), GFP_KERNEL); | ||
442 | else | ||
443 | hose->private_data = | ||
444 | alloc_bootmem(sizeof(struct celleb_pci_private)); | ||
445 | } | ||
446 | |||
447 | int __devinit celleb_setup_phb(struct pci_controller *phb) | ||
448 | { | ||
449 | const char *name; | ||
450 | struct device_node *dev = phb->arch_data; | ||
451 | struct device_node *node; | ||
452 | unsigned int rlen; | ||
453 | |||
454 | name = get_property(dev, "name", &rlen); | ||
455 | if (!name) | ||
456 | return 1; | ||
457 | |||
458 | pr_debug("PCI: celleb_setup_phb() %s\n", name); | ||
459 | phb_set_bus_ranges(dev, phb); | ||
460 | |||
461 | if (strcmp(name, "epci") == 0) { | ||
462 | phb->ops = &celleb_epci_ops; | ||
463 | return celleb_setup_epci(dev, phb); | ||
464 | |||
465 | } else if (strcmp(name, "pci-pseudo") == 0) { | ||
466 | phb->ops = &celleb_fake_pci_ops; | ||
467 | celleb_alloc_private_mem(phb); | ||
468 | for (node = of_get_next_child(dev, NULL); | ||
469 | node != NULL; node = of_get_next_child(dev, node)) | ||
470 | celleb_setup_fake_pci_device(node, phb); | ||
471 | |||
472 | } else | ||
473 | return 1; | ||
474 | |||
475 | return 0; | ||
476 | } | ||
477 | |||
478 | int celleb_pci_probe_mode(struct pci_bus *bus) | ||
479 | { | ||
480 | return PCI_PROBE_DEVTREE; | ||
481 | } | ||
diff --git a/arch/powerpc/platforms/celleb/pci.h b/arch/powerpc/platforms/celleb/pci.h new file mode 100644 index 000000000000..5340e348e297 --- /dev/null +++ b/arch/powerpc/platforms/celleb/pci.h | |||
@@ -0,0 +1,35 @@ | |||
1 | /* | ||
2 | * pci prototypes for Celleb platform | ||
3 | * | ||
4 | * (C) Copyright 2006-2007 TOSHIBA CORPORATION | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License along | ||
17 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
19 | */ | ||
20 | |||
21 | #ifndef _CELLEB_PCI_H | ||
22 | #define _CELLEB_PCI_H | ||
23 | |||
24 | #include <linux/pci.h> | ||
25 | |||
26 | #include <asm/pci-bridge.h> | ||
27 | #include <asm/prom.h> | ||
28 | |||
29 | extern int celleb_setup_phb(struct pci_controller *); | ||
30 | extern int celleb_pci_probe_mode(struct pci_bus *); | ||
31 | |||
32 | extern struct pci_ops celleb_epci_ops; | ||
33 | extern int celleb_setup_epci(struct device_node *, struct pci_controller *); | ||
34 | |||
35 | #endif /* _CELLEB_PCI_H */ | ||
diff --git a/arch/powerpc/platforms/celleb/scc.h b/arch/powerpc/platforms/celleb/scc.h new file mode 100644 index 000000000000..e9ce8a7c1882 --- /dev/null +++ b/arch/powerpc/platforms/celleb/scc.h | |||
@@ -0,0 +1,145 @@ | |||
1 | /* | ||
2 | * SCC (Super Companion Chip) definitions | ||
3 | * | ||
4 | * (C) Copyright 2004-2006 TOSHIBA CORPORATION | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License along | ||
17 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
19 | */ | ||
20 | |||
21 | #ifndef _CELLEB_SCC_H | ||
22 | #define _CELLEB_SCC_H | ||
23 | |||
24 | #define PCI_VENDOR_ID_TOSHIBA_2 0x102f | ||
25 | #define PCI_DEVICE_ID_TOSHIBA_SCC_PCIEXC_BRIDGE 0x01b0 | ||
26 | #define PCI_DEVICE_ID_TOSHIBA_SCC_EPCI_BRIDGE 0x01b1 | ||
27 | #define PCI_DEVICE_ID_TOSHIBA_SCC_BRIDGE 0x01b2 | ||
28 | #define PCI_DEVICE_ID_TOSHIBA_SCC_GBE 0x01b3 | ||
29 | #define PCI_DEVICE_ID_TOSHIBA_SCC_ATA 0x01b4 | ||
30 | #define PCI_DEVICE_ID_TOSHIBA_SCC_USB2 0x01b5 | ||
31 | #define PCI_DEVICE_ID_TOSHIBA_SCC_USB 0x01b6 | ||
32 | #define PCI_DEVICE_ID_TOSHIBA_SCC_ENCDEC 0x01b7 | ||
33 | |||
34 | #define SCC_EPCI_REG 0x0000d000 | ||
35 | |||
36 | /* EPCI registers */ | ||
37 | #define SCC_EPCI_CNF10_REG 0x010 | ||
38 | #define SCC_EPCI_CNF14_REG 0x014 | ||
39 | #define SCC_EPCI_CNF18_REG 0x018 | ||
40 | #define SCC_EPCI_PVBAT 0x100 | ||
41 | #define SCC_EPCI_VPMBAT 0x104 | ||
42 | #define SCC_EPCI_VPIBAT 0x108 | ||
43 | #define SCC_EPCI_VCSR 0x110 | ||
44 | #define SCC_EPCI_VIENAB 0x114 | ||
45 | #define SCC_EPCI_VISTAT 0x118 | ||
46 | #define SCC_EPCI_VRDCOUNT 0x124 | ||
47 | #define SCC_EPCI_BAM0 0x12c | ||
48 | #define SCC_EPCI_BAM1 0x134 | ||
49 | #define SCC_EPCI_BAM2 0x13c | ||
50 | #define SCC_EPCI_IADR 0x164 | ||
51 | #define SCC_EPCI_CLKRST 0x800 | ||
52 | #define SCC_EPCI_INTSET 0x804 | ||
53 | #define SCC_EPCI_STATUS 0x808 | ||
54 | #define SCC_EPCI_ABTSET 0x80c | ||
55 | #define SCC_EPCI_WATRP 0x810 | ||
56 | #define SCC_EPCI_DUMMYRADR 0x814 | ||
57 | #define SCC_EPCI_SWRESP 0x818 | ||
58 | #define SCC_EPCI_CNTOPT 0x81c | ||
59 | #define SCC_EPCI_ECMODE 0xf00 | ||
60 | #define SCC_EPCI_IOM_AC_NUM 5 | ||
61 | #define SCC_EPCI_IOM_ACTE(n) (0xf10 + (n) * 4) | ||
62 | #define SCC_EPCI_IOT_AC_NUM 4 | ||
63 | #define SCC_EPCI_IOT_ACTE(n) (0xf30 + (n) * 4) | ||
64 | #define SCC_EPCI_MAEA 0xf50 | ||
65 | #define SCC_EPCI_MAEC 0xf54 | ||
66 | #define SCC_EPCI_CKCTRL 0xff0 | ||
67 | |||
68 | /* bits for SCC_EPCI_VCSR */ | ||
69 | #define SCC_EPCI_VCSR_FRE 0x00020000 | ||
70 | #define SCC_EPCI_VCSR_FWE 0x00010000 | ||
71 | #define SCC_EPCI_VCSR_DR 0x00000400 | ||
72 | #define SCC_EPCI_VCSR_SR 0x00000008 | ||
73 | #define SCC_EPCI_VCSR_AT 0x00000004 | ||
74 | |||
75 | /* bits for SCC_EPCI_VIENAB/SCC_EPCI_VISTAT */ | ||
76 | #define SCC_EPCI_VISTAT_PMPE 0x00000008 | ||
77 | #define SCC_EPCI_VISTAT_PMFE 0x00000004 | ||
78 | #define SCC_EPCI_VISTAT_PRA 0x00000002 | ||
79 | #define SCC_EPCI_VISTAT_PRD 0x00000001 | ||
80 | #define SCC_EPCI_VISTAT_ALL 0x0000000f | ||
81 | |||
82 | #define SCC_EPCI_VIENAB_PMPEE 0x00000008 | ||
83 | #define SCC_EPCI_VIENAB_PMFEE 0x00000004 | ||
84 | #define SCC_EPCI_VIENAB_PRA 0x00000002 | ||
85 | #define SCC_EPCI_VIENAB_PRD 0x00000001 | ||
86 | #define SCC_EPCI_VIENAB_ALL 0x0000000f | ||
87 | |||
88 | /* bits for SCC_EPCI_CLKRST */ | ||
89 | #define SCC_EPCI_CLKRST_CKS_MASK 0x00030000 | ||
90 | #define SCC_EPCI_CLKRST_CKS_2 0x00000000 | ||
91 | #define SCC_EPCI_CLKRST_CKS_4 0x00010000 | ||
92 | #define SCC_EPCI_CLKRST_CKS_8 0x00020000 | ||
93 | #define SCC_EPCI_CLKRST_PCICRST 0x00000400 | ||
94 | #define SCC_EPCI_CLKRST_BC 0x00000200 | ||
95 | #define SCC_EPCI_CLKRST_PCIRST 0x00000100 | ||
96 | #define SCC_EPCI_CLKRST_PCKEN 0x00000001 | ||
97 | |||
98 | /* bits for SCC_EPCI_INTSET/SCC_EPCI_STATUS */ | ||
99 | #define SCC_EPCI_INT_2M 0x01000000 | ||
100 | #define SCC_EPCI_INT_RERR 0x00200000 | ||
101 | #define SCC_EPCI_INT_SERR 0x00100000 | ||
102 | #define SCC_EPCI_INT_PRTER 0x00080000 | ||
103 | #define SCC_EPCI_INT_SER 0x00040000 | ||
104 | #define SCC_EPCI_INT_PER 0x00020000 | ||
105 | #define SCC_EPCI_INT_PAI 0x00010000 | ||
106 | #define SCC_EPCI_INT_1M 0x00000100 | ||
107 | #define SCC_EPCI_INT_PME 0x00000010 | ||
108 | #define SCC_EPCI_INT_INTD 0x00000008 | ||
109 | #define SCC_EPCI_INT_INTC 0x00000004 | ||
110 | #define SCC_EPCI_INT_INTB 0x00000002 | ||
111 | #define SCC_EPCI_INT_INTA 0x00000001 | ||
112 | #define SCC_EPCI_INT_DEVINT 0x0000000f | ||
113 | #define SCC_EPCI_INT_ALL 0x003f001f | ||
114 | #define SCC_EPCI_INT_ALLERR 0x003f0000 | ||
115 | |||
116 | /* bits for SCC_EPCI_CKCTRL */ | ||
117 | #define SCC_EPCI_CKCTRL_CRST0 0x00010000 | ||
118 | #define SCC_EPCI_CKCTRL_CRST1 0x00020000 | ||
119 | #define SCC_EPCI_CKCTRL_OCLKEN 0x00000100 | ||
120 | #define SCC_EPCI_CKCTRL_LCLKEN 0x00000001 | ||
121 | |||
122 | #define SCC_EPCI_IDSEL_AD_TO_SLOT(ad) ((ad) - 10) | ||
123 | #define SCC_EPCI_MAX_DEVNU SCC_EPCI_IDSEL_AD_TO_SLOT(32) | ||
124 | |||
125 | /* bits for SCC_EPCI_CNTOPT */ | ||
126 | #define SCC_EPCI_CNTOPT_O2PMB 0x00000002 | ||
127 | |||
128 | /* UHC registers */ | ||
129 | #define SCC_UHC_CKRCTRL 0xff0 | ||
130 | #define SCC_UHC_ECMODE 0xf00 | ||
131 | |||
132 | /* bits for SCC_UHC_CKRCTRL */ | ||
133 | #define SCC_UHC_F48MCKLEN 0x00000001 | ||
134 | #define SCC_UHC_P_SUSPEND 0x00000002 | ||
135 | #define SCC_UHC_PHY_SUSPEND_SEL 0x00000004 | ||
136 | #define SCC_UHC_HCLKEN 0x00000100 | ||
137 | #define SCC_UHC_USBEN 0x00010000 | ||
138 | #define SCC_UHC_USBCEN 0x00020000 | ||
139 | #define SCC_UHC_PHYEN 0x00040000 | ||
140 | |||
141 | /* bits for SCC_UHC_ECMODE */ | ||
142 | #define SCC_UHC_ECMODE_BY_BYTE 0x00000555 | ||
143 | #define SCC_UHC_ECMODE_BY_WORD 0x00000aaa | ||
144 | |||
145 | #endif /* _CELLEB_SCC_H */ | ||
diff --git a/arch/powerpc/platforms/celleb/scc_epci.c b/arch/powerpc/platforms/celleb/scc_epci.c new file mode 100644 index 000000000000..c11b39c3776a --- /dev/null +++ b/arch/powerpc/platforms/celleb/scc_epci.c | |||
@@ -0,0 +1,409 @@ | |||
1 | /* | ||
2 | * Support for SCC external PCI | ||
3 | * | ||
4 | * (C) Copyright 2004-2007 TOSHIBA CORPORATION | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License along | ||
17 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
19 | */ | ||
20 | |||
21 | #undef DEBUG | ||
22 | |||
23 | #include <linux/kernel.h> | ||
24 | #include <linux/threads.h> | ||
25 | #include <linux/pci.h> | ||
26 | #include <linux/init.h> | ||
27 | #include <linux/pci_regs.h> | ||
28 | #include <linux/bootmem.h> | ||
29 | |||
30 | #include <asm/io.h> | ||
31 | #include <asm/irq.h> | ||
32 | #include <asm/prom.h> | ||
33 | #include <asm/machdep.h> | ||
34 | #include <asm/pci-bridge.h> | ||
35 | #include <asm/ppc-pci.h> | ||
36 | |||
37 | #include "scc.h" | ||
38 | #include "pci.h" | ||
39 | #include "interrupt.h" | ||
40 | |||
41 | #define MAX_PCI_DEVICES 32 | ||
42 | #define MAX_PCI_FUNCTIONS 8 | ||
43 | |||
44 | #define iob() __asm__ __volatile__("eieio; sync":::"memory") | ||
45 | |||
46 | |||
47 | #if 0 /* test code for epci dummy read */ | ||
48 | static void celleb_epci_dummy_read(struct pci_dev *dev) | ||
49 | { | ||
50 | void __iomem *epci_base; | ||
51 | struct device_node *node; | ||
52 | struct pci_controller *hose; | ||
53 | u32 val; | ||
54 | |||
55 | node = (struct device_node *)dev->bus->sysdata; | ||
56 | hose = pci_find_hose_for_OF_device(node); | ||
57 | |||
58 | if (!hose) | ||
59 | return; | ||
60 | |||
61 | epci_base = hose->cfg_addr; | ||
62 | |||
63 | val = in_be32(epci_base + SCC_EPCI_WATRP); | ||
64 | iosync(); | ||
65 | |||
66 | return; | ||
67 | } | ||
68 | #endif | ||
69 | |||
70 | static inline void clear_and_disable_master_abort_interrupt( | ||
71 | struct pci_controller *hose) | ||
72 | { | ||
73 | void __iomem *addr; | ||
74 | addr = hose->cfg_addr + PCI_COMMAND; | ||
75 | out_be32(addr, in_be32(addr) | (PCI_STATUS_REC_MASTER_ABORT << 16)); | ||
76 | } | ||
77 | |||
78 | static int celleb_epci_check_abort(struct pci_controller *hose, | ||
79 | void __iomem *addr) | ||
80 | { | ||
81 | void __iomem *reg, *epci_base; | ||
82 | u32 val; | ||
83 | |||
84 | iob(); | ||
85 | epci_base = hose->cfg_addr; | ||
86 | |||
87 | reg = epci_base + PCI_COMMAND; | ||
88 | val = in_be32(reg); | ||
89 | |||
90 | if (val & (PCI_STATUS_REC_MASTER_ABORT << 16)) { | ||
91 | out_be32(reg, | ||
92 | (val & 0xffff) | (PCI_STATUS_REC_MASTER_ABORT << 16)); | ||
93 | |||
94 | /* clear PCI Controller error, FRE, PMFE */ | ||
95 | reg = epci_base + SCC_EPCI_STATUS; | ||
96 | out_be32(reg, SCC_EPCI_INT_PAI); | ||
97 | |||
98 | reg = epci_base + SCC_EPCI_VCSR; | ||
99 | val = in_be32(reg) & 0xffff; | ||
100 | val |= SCC_EPCI_VCSR_FRE; | ||
101 | out_be32(reg, val); | ||
102 | |||
103 | reg = epci_base + SCC_EPCI_VISTAT; | ||
104 | out_be32(reg, SCC_EPCI_VISTAT_PMFE); | ||
105 | return PCIBIOS_DEVICE_NOT_FOUND; | ||
106 | } | ||
107 | |||
108 | return PCIBIOS_SUCCESSFUL; | ||
109 | } | ||
110 | |||
111 | static void __iomem *celleb_epci_make_config_addr(struct pci_controller *hose, | ||
112 | unsigned int devfn, int where) | ||
113 | { | ||
114 | void __iomem *addr; | ||
115 | struct pci_bus *bus = hose->bus; | ||
116 | |||
117 | if (bus->self) | ||
118 | addr = hose->cfg_data + | ||
119 | (((bus->number & 0xff) << 16) | ||
120 | | ((devfn & 0xff) << 8) | ||
121 | | (where & 0xff) | ||
122 | | 0x01000000); | ||
123 | else | ||
124 | addr = hose->cfg_data + | ||
125 | (((devfn & 0xff) << 8) | (where & 0xff)); | ||
126 | |||
127 | pr_debug("EPCI: config_addr = 0x%p\n", addr); | ||
128 | |||
129 | return addr; | ||
130 | } | ||
131 | |||
132 | static int celleb_epci_read_config(struct pci_bus *bus, | ||
133 | unsigned int devfn, int where, int size, u32 * val) | ||
134 | { | ||
135 | void __iomem *addr; | ||
136 | struct device_node *node; | ||
137 | struct pci_controller *hose; | ||
138 | |||
139 | /* allignment check */ | ||
140 | BUG_ON(where % size); | ||
141 | |||
142 | node = (struct device_node *)bus->sysdata; | ||
143 | hose = pci_find_hose_for_OF_device(node); | ||
144 | |||
145 | if (!hose->cfg_data) | ||
146 | return PCIBIOS_DEVICE_NOT_FOUND; | ||
147 | |||
148 | if (bus->number == hose->first_busno && devfn == 0) { | ||
149 | /* EPCI controller self */ | ||
150 | |||
151 | addr = hose->cfg_addr + where; | ||
152 | |||
153 | switch (size) { | ||
154 | case 1: | ||
155 | *val = in_8(addr); | ||
156 | break; | ||
157 | case 2: | ||
158 | *val = in_be16(addr); | ||
159 | break; | ||
160 | case 4: | ||
161 | *val = in_be32(addr); | ||
162 | break; | ||
163 | default: | ||
164 | return PCIBIOS_DEVICE_NOT_FOUND; | ||
165 | } | ||
166 | |||
167 | } else { | ||
168 | |||
169 | clear_and_disable_master_abort_interrupt(hose); | ||
170 | addr = celleb_epci_make_config_addr(hose, devfn, where); | ||
171 | |||
172 | switch (size) { | ||
173 | case 1: | ||
174 | *val = in_8(addr); | ||
175 | break; | ||
176 | case 2: | ||
177 | *val = in_le16(addr); | ||
178 | break; | ||
179 | case 4: | ||
180 | *val = in_le32(addr); | ||
181 | break; | ||
182 | default: | ||
183 | return PCIBIOS_DEVICE_NOT_FOUND; | ||
184 | } | ||
185 | } | ||
186 | |||
187 | pr_debug("EPCI: " | ||
188 | "addr=0x%lx, devfn=0x%x, where=0x%x, size=0x%x, val=0x%x\n", | ||
189 | addr, devfn, where, size, *val); | ||
190 | |||
191 | return celleb_epci_check_abort(hose, NULL); | ||
192 | } | ||
193 | |||
194 | static int celleb_epci_write_config(struct pci_bus *bus, | ||
195 | unsigned int devfn, int where, int size, u32 val) | ||
196 | { | ||
197 | void __iomem *addr; | ||
198 | struct device_node *node; | ||
199 | struct pci_controller *hose; | ||
200 | |||
201 | /* allignment check */ | ||
202 | BUG_ON(where % size); | ||
203 | |||
204 | node = (struct device_node *)bus->sysdata; | ||
205 | hose = pci_find_hose_for_OF_device(node); | ||
206 | |||
207 | if (!hose->cfg_data) | ||
208 | return PCIBIOS_DEVICE_NOT_FOUND; | ||
209 | |||
210 | if (bus->number == hose->first_busno && devfn == 0) { | ||
211 | /* EPCI controller self */ | ||
212 | |||
213 | addr = hose->cfg_addr + where; | ||
214 | |||
215 | switch (size) { | ||
216 | case 1: | ||
217 | out_8(addr, val); | ||
218 | break; | ||
219 | case 2: | ||
220 | out_be16(addr, val); | ||
221 | break; | ||
222 | case 4: | ||
223 | out_be32(addr, val); | ||
224 | break; | ||
225 | default: | ||
226 | return PCIBIOS_DEVICE_NOT_FOUND; | ||
227 | } | ||
228 | |||
229 | } else { | ||
230 | |||
231 | clear_and_disable_master_abort_interrupt(hose); | ||
232 | addr = celleb_epci_make_config_addr(hose, devfn, where); | ||
233 | |||
234 | switch (size) { | ||
235 | case 1: | ||
236 | out_8(addr, val); | ||
237 | break; | ||
238 | case 2: | ||
239 | out_le16(addr, val); | ||
240 | break; | ||
241 | case 4: | ||
242 | out_le32(addr, val); | ||
243 | break; | ||
244 | default: | ||
245 | return PCIBIOS_DEVICE_NOT_FOUND; | ||
246 | } | ||
247 | } | ||
248 | |||
249 | return celleb_epci_check_abort(hose, addr); | ||
250 | } | ||
251 | |||
252 | struct pci_ops celleb_epci_ops = { | ||
253 | celleb_epci_read_config, | ||
254 | celleb_epci_write_config, | ||
255 | }; | ||
256 | |||
257 | /* to be moved in FW */ | ||
258 | static int __devinit celleb_epci_init(struct pci_controller *hose) | ||
259 | { | ||
260 | u32 val; | ||
261 | void __iomem *reg, *epci_base; | ||
262 | int hwres = 0; | ||
263 | |||
264 | epci_base = hose->cfg_addr; | ||
265 | |||
266 | /* PCI core reset(Internal bus and PCI clock) */ | ||
267 | reg = epci_base + SCC_EPCI_CKCTRL; | ||
268 | val = in_be32(reg); | ||
269 | if (val == 0x00030101) | ||
270 | hwres = 1; | ||
271 | else { | ||
272 | val &= ~(SCC_EPCI_CKCTRL_CRST0 | SCC_EPCI_CKCTRL_CRST1); | ||
273 | out_be32(reg, val); | ||
274 | |||
275 | /* set PCI core clock */ | ||
276 | val = in_be32(reg); | ||
277 | val |= (SCC_EPCI_CKCTRL_OCLKEN | SCC_EPCI_CKCTRL_LCLKEN); | ||
278 | out_be32(reg, val); | ||
279 | |||
280 | /* release PCI core reset (internal bus) */ | ||
281 | val = in_be32(reg); | ||
282 | val |= SCC_EPCI_CKCTRL_CRST0; | ||
283 | out_be32(reg, val); | ||
284 | |||
285 | /* set PCI clock select */ | ||
286 | reg = epci_base + SCC_EPCI_CLKRST; | ||
287 | val = in_be32(reg); | ||
288 | val &= ~SCC_EPCI_CLKRST_CKS_MASK; | ||
289 | val |= SCC_EPCI_CLKRST_CKS_2; | ||
290 | out_be32(reg, val); | ||
291 | |||
292 | /* set arbiter */ | ||
293 | reg = epci_base + SCC_EPCI_ABTSET; | ||
294 | out_be32(reg, 0x0f1f001f); /* temporary value */ | ||
295 | |||
296 | /* buffer on */ | ||
297 | reg = epci_base + SCC_EPCI_CLKRST; | ||
298 | val = in_be32(reg); | ||
299 | val |= SCC_EPCI_CLKRST_BC; | ||
300 | out_be32(reg, val); | ||
301 | |||
302 | /* PCI clock enable */ | ||
303 | val = in_be32(reg); | ||
304 | val |= SCC_EPCI_CLKRST_PCKEN; | ||
305 | out_be32(reg, val); | ||
306 | |||
307 | /* release PCI core reset (all) */ | ||
308 | reg = epci_base + SCC_EPCI_CKCTRL; | ||
309 | val = in_be32(reg); | ||
310 | val |= (SCC_EPCI_CKCTRL_CRST0 | SCC_EPCI_CKCTRL_CRST1); | ||
311 | out_be32(reg, val); | ||
312 | |||
313 | /* set base translation registers. (already set by Beat) */ | ||
314 | |||
315 | /* set base address masks. (already set by Beat) */ | ||
316 | } | ||
317 | |||
318 | /* release interrupt masks and clear all interrupts */ | ||
319 | reg = epci_base + SCC_EPCI_INTSET; | ||
320 | out_be32(reg, 0x013f011f); /* all interrupts enable */ | ||
321 | reg = epci_base + SCC_EPCI_VIENAB; | ||
322 | val = SCC_EPCI_VIENAB_PMPEE | SCC_EPCI_VIENAB_PMFEE; | ||
323 | out_be32(reg, val); | ||
324 | reg = epci_base + SCC_EPCI_STATUS; | ||
325 | out_be32(reg, 0xffffffff); | ||
326 | reg = epci_base + SCC_EPCI_VISTAT; | ||
327 | out_be32(reg, 0xffffffff); | ||
328 | |||
329 | /* disable PCI->IB address translation */ | ||
330 | reg = epci_base + SCC_EPCI_VCSR; | ||
331 | val = in_be32(reg); | ||
332 | val &= ~(SCC_EPCI_VCSR_DR | SCC_EPCI_VCSR_AT); | ||
333 | out_be32(reg, val); | ||
334 | |||
335 | /* set base addresses. (no need to set?) */ | ||
336 | |||
337 | /* memory space, bus master enable */ | ||
338 | reg = epci_base + PCI_COMMAND; | ||
339 | val = PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER; | ||
340 | out_be32(reg, val); | ||
341 | |||
342 | /* endian mode setup */ | ||
343 | reg = epci_base + SCC_EPCI_ECMODE; | ||
344 | val = 0x00550155; | ||
345 | out_be32(reg, val); | ||
346 | |||
347 | /* set control option */ | ||
348 | reg = epci_base + SCC_EPCI_CNTOPT; | ||
349 | val = in_be32(reg); | ||
350 | val |= SCC_EPCI_CNTOPT_O2PMB; | ||
351 | out_be32(reg, val); | ||
352 | |||
353 | /* XXX: temporay: set registers for address conversion setup */ | ||
354 | reg = epci_base + SCC_EPCI_CNF10_REG; | ||
355 | out_be32(reg, 0x80000008); | ||
356 | reg = epci_base + SCC_EPCI_CNF14_REG; | ||
357 | out_be32(reg, 0x40000008); | ||
358 | |||
359 | reg = epci_base + SCC_EPCI_BAM0; | ||
360 | out_be32(reg, 0x80000000); | ||
361 | reg = epci_base + SCC_EPCI_BAM1; | ||
362 | out_be32(reg, 0xe0000000); | ||
363 | |||
364 | reg = epci_base + SCC_EPCI_PVBAT; | ||
365 | out_be32(reg, 0x80000000); | ||
366 | |||
367 | if (!hwres) { | ||
368 | /* release external PCI reset */ | ||
369 | reg = epci_base + SCC_EPCI_CLKRST; | ||
370 | val = in_be32(reg); | ||
371 | val |= SCC_EPCI_CLKRST_PCIRST; | ||
372 | out_be32(reg, val); | ||
373 | } | ||
374 | |||
375 | return 0; | ||
376 | } | ||
377 | |||
378 | int __devinit celleb_setup_epci(struct device_node *node, | ||
379 | struct pci_controller *hose) | ||
380 | { | ||
381 | struct resource r; | ||
382 | |||
383 | pr_debug("PCI: celleb_setup_epci()\n"); | ||
384 | |||
385 | if (of_address_to_resource(node, 0, &r)) | ||
386 | goto error; | ||
387 | hose->cfg_addr = ioremap(r.start, (r.end - r.start + 1)); | ||
388 | if (!hose->cfg_addr) | ||
389 | goto error; | ||
390 | pr_debug("EPCI: cfg_addr map 0x%016lx->0x%016lx + 0x%016lx\n", | ||
391 | r.start, (unsigned long)hose->cfg_addr, | ||
392 | (r.end - r.start + 1)); | ||
393 | |||
394 | if (of_address_to_resource(node, 2, &r)) | ||
395 | goto error; | ||
396 | hose->cfg_data = ioremap(r.start, (r.end - r.start + 1)); | ||
397 | if (!hose->cfg_data) | ||
398 | goto error; | ||
399 | pr_debug("EPCI: cfg_data map 0x%016lx->0x%016lx + 0x%016lx\n", | ||
400 | r.start, (unsigned long)hose->cfg_data, | ||
401 | (r.end - r.start + 1)); | ||
402 | |||
403 | celleb_epci_init(hose); | ||
404 | |||
405 | return 0; | ||
406 | |||
407 | error: | ||
408 | return 1; | ||
409 | } | ||
diff --git a/arch/powerpc/platforms/celleb/scc_sio.c b/arch/powerpc/platforms/celleb/scc_sio.c new file mode 100644 index 000000000000..bcd25f54d986 --- /dev/null +++ b/arch/powerpc/platforms/celleb/scc_sio.c | |||
@@ -0,0 +1,101 @@ | |||
1 | /* | ||
2 | * setup serial port in SCC | ||
3 | * | ||
4 | * (C) Copyright 2006 TOSHIBA CORPORATION | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License along | ||
17 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
19 | */ | ||
20 | |||
21 | #include <linux/tty.h> | ||
22 | #include <linux/serial.h> | ||
23 | #include <linux/serial_core.h> | ||
24 | #include <linux/console.h> | ||
25 | |||
26 | #include <asm/io.h> | ||
27 | #include <asm/prom.h> | ||
28 | |||
29 | /* sio irq0=0xb00010022 irq0=0xb00010023 irq2=0xb00010024 | ||
30 | mmio=0xfff000-0x1000,0xff2000-0x1000 */ | ||
31 | static int txx9_serial_bitmap = 0; | ||
32 | |||
33 | static struct { | ||
34 | uint32_t offset; | ||
35 | uint32_t index; | ||
36 | } txx9_scc_tab[3] = { | ||
37 | { 0x300, 0 }, /* 0xFFF300 */ | ||
38 | { 0x400, 0 }, /* 0xFFF400 */ | ||
39 | { 0x800, 1 } /* 0xFF2800 */ | ||
40 | }; | ||
41 | |||
42 | static int txx9_serial_init(void) | ||
43 | { | ||
44 | extern int early_serial_txx9_setup(struct uart_port *port); | ||
45 | struct device_node *node; | ||
46 | int i; | ||
47 | struct uart_port req; | ||
48 | struct of_irq irq; | ||
49 | struct resource res; | ||
50 | |||
51 | node = of_find_node_by_path("/ioif1/sio"); | ||
52 | if (!node) | ||
53 | return 0; | ||
54 | |||
55 | for(i = 0; i < sizeof(txx9_scc_tab)/sizeof(txx9_scc_tab[0]); i++) { | ||
56 | if (!(txx9_serial_bitmap & (1<<i))) | ||
57 | continue; | ||
58 | |||
59 | if (of_irq_map_one(node, i, &irq)) | ||
60 | continue; | ||
61 | if (of_address_to_resource(node, txx9_scc_tab[i].index, &res)) | ||
62 | continue; | ||
63 | |||
64 | memset(&req, 0, sizeof(req)); | ||
65 | req.line = i; | ||
66 | req.iotype = UPIO_MEM; | ||
67 | req.mapbase = res.start + txx9_scc_tab[i].offset; | ||
68 | #ifdef CONFIG_SERIAL_TXX9_CONSOLE | ||
69 | req.membase = ioremap(req.mapbase, 0x24); | ||
70 | #endif | ||
71 | req.irq = irq_create_of_mapping(irq.controller, | ||
72 | irq.specifier, irq.size); | ||
73 | req.flags |= UPF_IOREMAP | UPF_BUGGY_UART /*HAVE_CTS_LINE*/; | ||
74 | req.uartclk = 83300000; | ||
75 | early_serial_txx9_setup(&req); | ||
76 | } | ||
77 | |||
78 | of_node_put(node); | ||
79 | return 0; | ||
80 | } | ||
81 | |||
82 | static int txx9_serial_config(char *ptr) | ||
83 | { | ||
84 | int i; | ||
85 | |||
86 | for (;;) { | ||
87 | switch(get_option(&ptr, &i)) { | ||
88 | default: | ||
89 | return 0; | ||
90 | case 2: | ||
91 | txx9_serial_bitmap |= 1 << i; | ||
92 | break; | ||
93 | case 1: | ||
94 | txx9_serial_bitmap |= 1 << i; | ||
95 | return 0; | ||
96 | } | ||
97 | } | ||
98 | } | ||
99 | __setup("txx9_serial=", txx9_serial_config); | ||
100 | |||
101 | console_initcall(txx9_serial_init); | ||
diff --git a/arch/powerpc/platforms/celleb/scc_uhc.c b/arch/powerpc/platforms/celleb/scc_uhc.c new file mode 100644 index 000000000000..a7c548bde2e3 --- /dev/null +++ b/arch/powerpc/platforms/celleb/scc_uhc.c | |||
@@ -0,0 +1,94 @@ | |||
1 | /* | ||
2 | * SCC (Super Companion Chip) UHC setup | ||
3 | * | ||
4 | * (C) Copyright 2006-2007 TOSHIBA CORPORATION | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License along | ||
17 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
19 | */ | ||
20 | |||
21 | #include <linux/kernel.h> | ||
22 | #include <linux/pci.h> | ||
23 | |||
24 | #include <asm/delay.h> | ||
25 | #include <asm/io.h> | ||
26 | #include <asm/machdep.h> | ||
27 | |||
28 | #include "scc.h" | ||
29 | |||
30 | #define UHC_RESET_WAIT_MAX 10000 | ||
31 | |||
32 | static inline int uhc_clkctrl_ready(u32 val) | ||
33 | { | ||
34 | const u32 mask = SCC_UHC_USBCEN | SCC_UHC_USBCEN; | ||
35 | return((val & mask) == mask); | ||
36 | } | ||
37 | |||
38 | /* | ||
39 | * UHC(usb host controler) enable function. | ||
40 | * affect to both of OHCI and EHCI core module. | ||
41 | */ | ||
42 | static void enable_scc_uhc(struct pci_dev *dev) | ||
43 | { | ||
44 | void __iomem *uhc_base; | ||
45 | u32 __iomem *uhc_clkctrl; | ||
46 | u32 __iomem *uhc_ecmode; | ||
47 | u32 val = 0; | ||
48 | int i; | ||
49 | |||
50 | if (!machine_is(celleb)) | ||
51 | return; | ||
52 | |||
53 | uhc_base = ioremap(pci_resource_start(dev, 0), | ||
54 | pci_resource_len(dev, 0)); | ||
55 | if (!uhc_base) { | ||
56 | printk(KERN_ERR "failed to map UHC register base.\n"); | ||
57 | return; | ||
58 | } | ||
59 | uhc_clkctrl = uhc_base + SCC_UHC_CKRCTRL; | ||
60 | uhc_ecmode = uhc_base + SCC_UHC_ECMODE; | ||
61 | |||
62 | /* setup for normal mode */ | ||
63 | val |= SCC_UHC_F48MCKLEN; | ||
64 | out_be32(uhc_clkctrl, val); | ||
65 | val |= SCC_UHC_PHY_SUSPEND_SEL; | ||
66 | out_be32(uhc_clkctrl, val); | ||
67 | udelay(10); | ||
68 | val |= SCC_UHC_PHYEN; | ||
69 | out_be32(uhc_clkctrl, val); | ||
70 | udelay(50); | ||
71 | |||
72 | /* disable reset */ | ||
73 | val |= SCC_UHC_HCLKEN; | ||
74 | out_be32(uhc_clkctrl, val); | ||
75 | val |= (SCC_UHC_USBCEN | SCC_UHC_USBEN); | ||
76 | out_be32(uhc_clkctrl, val); | ||
77 | i = 0; | ||
78 | while (!uhc_clkctrl_ready(in_be32(uhc_clkctrl))) { | ||
79 | udelay(10); | ||
80 | if (i++ > UHC_RESET_WAIT_MAX) { | ||
81 | printk(KERN_ERR "Failed to disable UHC reset %x\n", | ||
82 | in_be32(uhc_clkctrl)); | ||
83 | break; | ||
84 | } | ||
85 | } | ||
86 | |||
87 | /* Endian Conversion Mode for Master ALL area */ | ||
88 | out_be32(uhc_ecmode, SCC_UHC_ECMODE_BY_BYTE); | ||
89 | |||
90 | iounmap(uhc_base); | ||
91 | } | ||
92 | |||
93 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_TOSHIBA_2, | ||
94 | PCI_DEVICE_ID_TOSHIBA_SCC_USB, enable_scc_uhc); | ||
diff --git a/arch/powerpc/platforms/celleb/setup.c b/arch/powerpc/platforms/celleb/setup.c new file mode 100644 index 000000000000..1de63acfda87 --- /dev/null +++ b/arch/powerpc/platforms/celleb/setup.c | |||
@@ -0,0 +1,191 @@ | |||
1 | /* | ||
2 | * Celleb setup code | ||
3 | * | ||
4 | * (C) Copyright 2006-2007 TOSHIBA CORPORATION | ||
5 | * | ||
6 | * This code is based on arch/powerpc/platforms/cell/setup.c: | ||
7 | * Copyright (C) 1995 Linus Torvalds | ||
8 | * Adapted from 'alpha' version by Gary Thomas | ||
9 | * Modified by Cort Dougan (cort@cs.nmt.edu) | ||
10 | * Modified by PPC64 Team, IBM Corp | ||
11 | * Modified by Cell Team, IBM Deutschland Entwicklung GmbH | ||
12 | * | ||
13 | * This program is free software; you can redistribute it and/or modify | ||
14 | * it under the terms of the GNU General Public License as published by | ||
15 | * the Free Software Foundation; either version 2 of the License, or | ||
16 | * (at your option) any later version. | ||
17 | * | ||
18 | * This program is distributed in the hope that it will be useful, | ||
19 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
20 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
21 | * GNU General Public License for more details. | ||
22 | * | ||
23 | * You should have received a copy of the GNU General Public License along | ||
24 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
25 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
26 | */ | ||
27 | |||
28 | #undef DEBUG | ||
29 | |||
30 | #include <linux/cpu.h> | ||
31 | #include <linux/sched.h> | ||
32 | #include <linux/kernel.h> | ||
33 | #include <linux/mm.h> | ||
34 | #include <linux/stddef.h> | ||
35 | #include <linux/unistd.h> | ||
36 | #include <linux/reboot.h> | ||
37 | #include <linux/init.h> | ||
38 | #include <linux/delay.h> | ||
39 | #include <linux/irq.h> | ||
40 | #include <linux/seq_file.h> | ||
41 | #include <linux/root_dev.h> | ||
42 | #include <linux/console.h> | ||
43 | |||
44 | #include <asm/mmu.h> | ||
45 | #include <asm/processor.h> | ||
46 | #include <asm/io.h> | ||
47 | #include <asm/kexec.h> | ||
48 | #include <asm/prom.h> | ||
49 | #include <asm/machdep.h> | ||
50 | #include <asm/cputable.h> | ||
51 | #include <asm/irq.h> | ||
52 | #include <asm/spu_priv1.h> | ||
53 | #include <asm/firmware.h> | ||
54 | #include <asm/of_platform.h> | ||
55 | |||
56 | #include "interrupt.h" | ||
57 | #include "beat_wrapper.h" | ||
58 | #include "beat.h" | ||
59 | #include "pci.h" | ||
60 | |||
61 | static char celleb_machine_type[128] = "Celleb"; | ||
62 | |||
63 | static void celleb_show_cpuinfo(struct seq_file *m) | ||
64 | { | ||
65 | struct device_node *root; | ||
66 | const char *model = ""; | ||
67 | |||
68 | root = of_find_node_by_path("/"); | ||
69 | if (root) | ||
70 | model = get_property(root, "model", NULL); | ||
71 | /* using "CHRP" is to trick anaconda into installing FCx into Celleb */ | ||
72 | seq_printf(m, "machine\t\t: %s %s\n", celleb_machine_type, model); | ||
73 | of_node_put(root); | ||
74 | } | ||
75 | |||
76 | static int celleb_machine_type_hack(char *ptr) | ||
77 | { | ||
78 | strncpy(celleb_machine_type, ptr, sizeof(celleb_machine_type)); | ||
79 | celleb_machine_type[sizeof(celleb_machine_type)-1] = 0; | ||
80 | return 0; | ||
81 | } | ||
82 | |||
83 | __setup("celleb_machine_type_hack", celleb_machine_type_hack); | ||
84 | |||
85 | static void celleb_progress(char *s, unsigned short hex) | ||
86 | { | ||
87 | printk("*** %04x : %s\n", hex, s ? s : ""); | ||
88 | } | ||
89 | |||
90 | static void __init celleb_setup_arch(void) | ||
91 | { | ||
92 | #ifdef CONFIG_SPU_BASE | ||
93 | spu_priv1_ops = &spu_priv1_beat_ops; | ||
94 | spu_management_ops = &spu_management_of_ops; | ||
95 | #endif | ||
96 | |||
97 | #ifdef CONFIG_SMP | ||
98 | smp_init_celleb(); | ||
99 | #endif | ||
100 | |||
101 | /* init to some ~sane value until calibrate_delay() runs */ | ||
102 | loops_per_jiffy = 50000000; | ||
103 | |||
104 | if (ROOT_DEV == 0) { | ||
105 | printk("No ramdisk, default root is /dev/hda2\n"); | ||
106 | ROOT_DEV = Root_HDA2; | ||
107 | } | ||
108 | |||
109 | #ifdef CONFIG_DUMMY_CONSOLE | ||
110 | conswitchp = &dummy_con; | ||
111 | #endif | ||
112 | } | ||
113 | |||
114 | static void beat_power_save(void) | ||
115 | { | ||
116 | beat_pause(0); | ||
117 | } | ||
118 | |||
119 | static int __init celleb_probe(void) | ||
120 | { | ||
121 | unsigned long root = of_get_flat_dt_root(); | ||
122 | |||
123 | if (!of_flat_dt_is_compatible(root, "Beat")) | ||
124 | return 0; | ||
125 | |||
126 | powerpc_firmware_features |= FW_FEATURE_CELLEB_POSSIBLE; | ||
127 | hpte_init_beat(); | ||
128 | return 1; | ||
129 | } | ||
130 | |||
131 | /* | ||
132 | * Cell has no legacy IO; anything calling this function has to | ||
133 | * fail or bad things will happen | ||
134 | */ | ||
135 | static int celleb_check_legacy_ioport(unsigned int baseport) | ||
136 | { | ||
137 | return -ENODEV; | ||
138 | } | ||
139 | |||
140 | static void celleb_kexec_cpu_down(int crash, int secondary) | ||
141 | { | ||
142 | beatic_deinit_IRQ(); | ||
143 | } | ||
144 | |||
145 | static struct of_device_id celleb_bus_ids[] = { | ||
146 | { .type = "scc", }, | ||
147 | { .type = "ioif", }, /* old style */ | ||
148 | {}, | ||
149 | }; | ||
150 | |||
151 | static int __init celleb_publish_devices(void) | ||
152 | { | ||
153 | if (!machine_is(celleb)) | ||
154 | return 0; | ||
155 | |||
156 | /* Publish OF platform devices for southbridge IOs */ | ||
157 | of_platform_bus_probe(NULL, celleb_bus_ids, NULL); | ||
158 | |||
159 | return 0; | ||
160 | } | ||
161 | device_initcall(celleb_publish_devices); | ||
162 | |||
163 | define_machine(celleb) { | ||
164 | .name = "Cell Reference Set", | ||
165 | .probe = celleb_probe, | ||
166 | .setup_arch = celleb_setup_arch, | ||
167 | .show_cpuinfo = celleb_show_cpuinfo, | ||
168 | .restart = beat_restart, | ||
169 | .power_off = beat_power_off, | ||
170 | .halt = beat_halt, | ||
171 | .get_rtc_time = beat_get_rtc_time, | ||
172 | .set_rtc_time = beat_set_rtc_time, | ||
173 | .calibrate_decr = generic_calibrate_decr, | ||
174 | .check_legacy_ioport = celleb_check_legacy_ioport, | ||
175 | .progress = celleb_progress, | ||
176 | .power_save = beat_power_save, | ||
177 | .nvram_size = beat_nvram_get_size, | ||
178 | .nvram_read = beat_nvram_read, | ||
179 | .nvram_write = beat_nvram_write, | ||
180 | .set_dabr = beat_set_xdabr, | ||
181 | .init_IRQ = beatic_init_IRQ, | ||
182 | .get_irq = beatic_get_irq, | ||
183 | .pci_probe_mode = celleb_pci_probe_mode, | ||
184 | .pci_setup_phb = celleb_setup_phb, | ||
185 | #ifdef CONFIG_KEXEC | ||
186 | .kexec_cpu_down = celleb_kexec_cpu_down, | ||
187 | .machine_kexec = default_machine_kexec, | ||
188 | .machine_kexec_prepare = default_machine_kexec_prepare, | ||
189 | .machine_crash_shutdown = default_machine_crash_shutdown, | ||
190 | #endif | ||
191 | }; | ||
diff --git a/arch/powerpc/platforms/celleb/smp.c b/arch/powerpc/platforms/celleb/smp.c new file mode 100644 index 000000000000..a7631250aeb4 --- /dev/null +++ b/arch/powerpc/platforms/celleb/smp.c | |||
@@ -0,0 +1,124 @@ | |||
1 | /* | ||
2 | * SMP support for Celleb platform. (Incomplete) | ||
3 | * | ||
4 | * (C) Copyright 2006 TOSHIBA CORPORATION | ||
5 | * | ||
6 | * This code is based on arch/powerpc/platforms/cell/smp.c: | ||
7 | * Dave Engebretsen, Peter Bergner, and | ||
8 | * Mike Corrigan {engebret|bergner|mikec}@us.ibm.com | ||
9 | * Plus various changes from other IBM teams... | ||
10 | * | ||
11 | * This program is free software; you can redistribute it and/or modify | ||
12 | * it under the terms of the GNU General Public License as published by | ||
13 | * the Free Software Foundation; either version 2 of the License, or | ||
14 | * (at your option) any later version. | ||
15 | * | ||
16 | * This program is distributed in the hope that it will be useful, | ||
17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
19 | * GNU General Public License for more details. | ||
20 | * | ||
21 | * You should have received a copy of the GNU General Public License along | ||
22 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
23 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
24 | */ | ||
25 | |||
26 | #undef DEBUG | ||
27 | |||
28 | #include <linux/kernel.h> | ||
29 | #include <linux/smp.h> | ||
30 | #include <linux/interrupt.h> | ||
31 | #include <linux/init.h> | ||
32 | #include <linux/threads.h> | ||
33 | #include <linux/cpu.h> | ||
34 | |||
35 | #include <asm/irq.h> | ||
36 | #include <asm/smp.h> | ||
37 | #include <asm/machdep.h> | ||
38 | #include <asm/udbg.h> | ||
39 | |||
40 | #include "interrupt.h" | ||
41 | |||
42 | #ifdef DEBUG | ||
43 | #define DBG(fmt...) udbg_printf(fmt) | ||
44 | #else | ||
45 | #define DBG(fmt...) | ||
46 | #endif | ||
47 | |||
48 | /* | ||
49 | * The primary thread of each non-boot processor is recorded here before | ||
50 | * smp init. | ||
51 | */ | ||
52 | /* static cpumask_t of_spin_map; */ | ||
53 | |||
54 | /** | ||
55 | * smp_startup_cpu() - start the given cpu | ||
56 | * | ||
57 | * At boot time, there is nothing to do for primary threads which were | ||
58 | * started from Open Firmware. For anything else, call RTAS with the | ||
59 | * appropriate start location. | ||
60 | * | ||
61 | * Returns: | ||
62 | * 0 - failure | ||
63 | * 1 - success | ||
64 | */ | ||
65 | static inline int __devinit smp_startup_cpu(unsigned int lcpu) | ||
66 | { | ||
67 | return 0; | ||
68 | } | ||
69 | |||
70 | static void smp_beatic_message_pass(int target, int msg) | ||
71 | { | ||
72 | unsigned int i; | ||
73 | |||
74 | if (target < NR_CPUS) { | ||
75 | beatic_cause_IPI(target, msg); | ||
76 | } else { | ||
77 | for_each_online_cpu(i) { | ||
78 | if (target == MSG_ALL_BUT_SELF | ||
79 | && i == smp_processor_id()) | ||
80 | continue; | ||
81 | beatic_cause_IPI(i, msg); | ||
82 | } | ||
83 | } | ||
84 | } | ||
85 | |||
86 | static int __init smp_beatic_probe(void) | ||
87 | { | ||
88 | return cpus_weight(cpu_possible_map); | ||
89 | } | ||
90 | |||
91 | static void __devinit smp_beatic_setup_cpu(int cpu) | ||
92 | { | ||
93 | beatic_setup_cpu(cpu); | ||
94 | } | ||
95 | |||
96 | static void __devinit smp_celleb_kick_cpu(int nr) | ||
97 | { | ||
98 | BUG_ON(nr < 0 || nr >= NR_CPUS); | ||
99 | |||
100 | if (!smp_startup_cpu(nr)) | ||
101 | return; | ||
102 | } | ||
103 | |||
104 | static int smp_celleb_cpu_bootable(unsigned int nr) | ||
105 | { | ||
106 | return 1; | ||
107 | } | ||
108 | static struct smp_ops_t bpa_beatic_smp_ops = { | ||
109 | .message_pass = smp_beatic_message_pass, | ||
110 | .probe = smp_beatic_probe, | ||
111 | .kick_cpu = smp_celleb_kick_cpu, | ||
112 | .setup_cpu = smp_beatic_setup_cpu, | ||
113 | .cpu_bootable = smp_celleb_cpu_bootable, | ||
114 | }; | ||
115 | |||
116 | /* This is called very early */ | ||
117 | void __init smp_init_celleb(void) | ||
118 | { | ||
119 | DBG(" -> smp_init_celleb()\n"); | ||
120 | |||
121 | smp_ops = &bpa_beatic_smp_ops; | ||
122 | |||
123 | DBG(" <- smp_init_celleb()\n"); | ||
124 | } | ||
diff --git a/arch/powerpc/platforms/celleb/spu_priv1.c b/arch/powerpc/platforms/celleb/spu_priv1.c new file mode 100644 index 000000000000..2bf6700f747a --- /dev/null +++ b/arch/powerpc/platforms/celleb/spu_priv1.c | |||
@@ -0,0 +1,208 @@ | |||
1 | /* | ||
2 | * spu hypervisor abstraction for Beat | ||
3 | * | ||
4 | * (C) Copyright 2006-2007 TOSHIBA CORPORATION | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License along | ||
17 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
19 | */ | ||
20 | |||
21 | #include <linux/module.h> | ||
22 | |||
23 | #include <asm/types.h> | ||
24 | #include <asm/spu.h> | ||
25 | #include <asm/spu_priv1.h> | ||
26 | |||
27 | #include "beat_wrapper.h" | ||
28 | |||
29 | static inline void _int_mask_set(struct spu *spu, int class, u64 mask) | ||
30 | { | ||
31 | spu->shadow_int_mask_RW[class] = mask; | ||
32 | beat_set_irq_mask_for_spe(spu->spe_id, class, mask); | ||
33 | } | ||
34 | |||
35 | static inline u64 _int_mask_get(struct spu *spu, int class) | ||
36 | { | ||
37 | return spu->shadow_int_mask_RW[class]; | ||
38 | } | ||
39 | |||
40 | static void int_mask_set(struct spu *spu, int class, u64 mask) | ||
41 | { | ||
42 | _int_mask_set(spu, class, mask); | ||
43 | } | ||
44 | |||
45 | static u64 int_mask_get(struct spu *spu, int class) | ||
46 | { | ||
47 | return _int_mask_get(spu, class); | ||
48 | } | ||
49 | |||
50 | static void int_mask_and(struct spu *spu, int class, u64 mask) | ||
51 | { | ||
52 | u64 old_mask; | ||
53 | old_mask = _int_mask_get(spu, class); | ||
54 | _int_mask_set(spu, class, old_mask & mask); | ||
55 | } | ||
56 | |||
57 | static void int_mask_or(struct spu *spu, int class, u64 mask) | ||
58 | { | ||
59 | u64 old_mask; | ||
60 | old_mask = _int_mask_get(spu, class); | ||
61 | _int_mask_set(spu, class, old_mask | mask); | ||
62 | } | ||
63 | |||
64 | static void int_stat_clear(struct spu *spu, int class, u64 stat) | ||
65 | { | ||
66 | beat_clear_interrupt_status_of_spe(spu->spe_id, class, stat); | ||
67 | } | ||
68 | |||
69 | static u64 int_stat_get(struct spu *spu, int class) | ||
70 | { | ||
71 | u64 int_stat; | ||
72 | beat_get_interrupt_status_of_spe(spu->spe_id, class, &int_stat); | ||
73 | return int_stat; | ||
74 | } | ||
75 | |||
76 | static void cpu_affinity_set(struct spu *spu, int cpu) | ||
77 | { | ||
78 | return; | ||
79 | } | ||
80 | |||
81 | static u64 mfc_dar_get(struct spu *spu) | ||
82 | { | ||
83 | u64 dar; | ||
84 | beat_get_spe_privileged_state_1_registers( | ||
85 | spu->spe_id, | ||
86 | offsetof(struct spu_priv1, mfc_dar_RW), &dar); | ||
87 | return dar; | ||
88 | } | ||
89 | |||
90 | static u64 mfc_dsisr_get(struct spu *spu) | ||
91 | { | ||
92 | u64 dsisr; | ||
93 | beat_get_spe_privileged_state_1_registers( | ||
94 | spu->spe_id, | ||
95 | offsetof(struct spu_priv1, mfc_dsisr_RW), &dsisr); | ||
96 | return dsisr; | ||
97 | } | ||
98 | |||
99 | static void mfc_dsisr_set(struct spu *spu, u64 dsisr) | ||
100 | { | ||
101 | beat_set_spe_privileged_state_1_registers( | ||
102 | spu->spe_id, | ||
103 | offsetof(struct spu_priv1, mfc_dsisr_RW), dsisr); | ||
104 | } | ||
105 | |||
106 | static void mfc_sdr_setup(struct spu *spu) | ||
107 | { | ||
108 | return; | ||
109 | } | ||
110 | |||
111 | static void mfc_sr1_set(struct spu *spu, u64 sr1) | ||
112 | { | ||
113 | beat_set_spe_privileged_state_1_registers( | ||
114 | spu->spe_id, | ||
115 | offsetof(struct spu_priv1, mfc_sr1_RW), sr1); | ||
116 | } | ||
117 | |||
118 | static u64 mfc_sr1_get(struct spu *spu) | ||
119 | { | ||
120 | u64 sr1; | ||
121 | beat_get_spe_privileged_state_1_registers( | ||
122 | spu->spe_id, | ||
123 | offsetof(struct spu_priv1, mfc_sr1_RW), &sr1); | ||
124 | return sr1; | ||
125 | } | ||
126 | |||
127 | static void mfc_tclass_id_set(struct spu *spu, u64 tclass_id) | ||
128 | { | ||
129 | beat_set_spe_privileged_state_1_registers( | ||
130 | spu->spe_id, | ||
131 | offsetof(struct spu_priv1, mfc_tclass_id_RW), tclass_id); | ||
132 | } | ||
133 | |||
134 | static u64 mfc_tclass_id_get(struct spu *spu) | ||
135 | { | ||
136 | u64 tclass_id; | ||
137 | beat_get_spe_privileged_state_1_registers( | ||
138 | spu->spe_id, | ||
139 | offsetof(struct spu_priv1, mfc_tclass_id_RW), &tclass_id); | ||
140 | return tclass_id; | ||
141 | } | ||
142 | |||
143 | static void tlb_invalidate(struct spu *spu) | ||
144 | { | ||
145 | beat_set_spe_privileged_state_1_registers( | ||
146 | spu->spe_id, | ||
147 | offsetof(struct spu_priv1, tlb_invalidate_entry_W), 0ul); | ||
148 | } | ||
149 | |||
150 | static void resource_allocation_groupID_set(struct spu *spu, u64 id) | ||
151 | { | ||
152 | beat_set_spe_privileged_state_1_registers( | ||
153 | spu->spe_id, | ||
154 | offsetof(struct spu_priv1, resource_allocation_groupID_RW), | ||
155 | id); | ||
156 | } | ||
157 | |||
158 | static u64 resource_allocation_groupID_get(struct spu *spu) | ||
159 | { | ||
160 | u64 id; | ||
161 | beat_get_spe_privileged_state_1_registers( | ||
162 | spu->spe_id, | ||
163 | offsetof(struct spu_priv1, resource_allocation_groupID_RW), | ||
164 | &id); | ||
165 | return id; | ||
166 | } | ||
167 | |||
168 | static void resource_allocation_enable_set(struct spu *spu, u64 enable) | ||
169 | { | ||
170 | beat_set_spe_privileged_state_1_registers( | ||
171 | spu->spe_id, | ||
172 | offsetof(struct spu_priv1, resource_allocation_enable_RW), | ||
173 | enable); | ||
174 | } | ||
175 | |||
176 | static u64 resource_allocation_enable_get(struct spu *spu) | ||
177 | { | ||
178 | u64 enable; | ||
179 | beat_get_spe_privileged_state_1_registers( | ||
180 | spu->spe_id, | ||
181 | offsetof(struct spu_priv1, resource_allocation_enable_RW), | ||
182 | &enable); | ||
183 | return enable; | ||
184 | } | ||
185 | |||
186 | const struct spu_priv1_ops spu_priv1_beat_ops = | ||
187 | { | ||
188 | .int_mask_and = int_mask_and, | ||
189 | .int_mask_or = int_mask_or, | ||
190 | .int_mask_set = int_mask_set, | ||
191 | .int_mask_get = int_mask_get, | ||
192 | .int_stat_clear = int_stat_clear, | ||
193 | .int_stat_get = int_stat_get, | ||
194 | .cpu_affinity_set = cpu_affinity_set, | ||
195 | .mfc_dar_get = mfc_dar_get, | ||
196 | .mfc_dsisr_get = mfc_dsisr_get, | ||
197 | .mfc_dsisr_set = mfc_dsisr_set, | ||
198 | .mfc_sdr_setup = mfc_sdr_setup, | ||
199 | .mfc_sr1_set = mfc_sr1_set, | ||
200 | .mfc_sr1_get = mfc_sr1_get, | ||
201 | .mfc_tclass_id_set = mfc_tclass_id_set, | ||
202 | .mfc_tclass_id_get = mfc_tclass_id_get, | ||
203 | .tlb_invalidate = tlb_invalidate, | ||
204 | .resource_allocation_groupID_set = resource_allocation_groupID_set, | ||
205 | .resource_allocation_groupID_get = resource_allocation_groupID_get, | ||
206 | .resource_allocation_enable_set = resource_allocation_enable_set, | ||
207 | .resource_allocation_enable_get = resource_allocation_enable_get, | ||
208 | }; | ||
diff --git a/arch/powerpc/platforms/celleb/udbg_beat.c b/arch/powerpc/platforms/celleb/udbg_beat.c new file mode 100644 index 000000000000..d888c4674c62 --- /dev/null +++ b/arch/powerpc/platforms/celleb/udbg_beat.c | |||
@@ -0,0 +1,97 @@ | |||
1 | /* | ||
2 | * udbg function for Beat | ||
3 | * | ||
4 | * (C) Copyright 2006 TOSHIBA CORPORATION | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License along | ||
17 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
19 | */ | ||
20 | |||
21 | #include <linux/kernel.h> | ||
22 | #include <linux/console.h> | ||
23 | |||
24 | #include <asm/machdep.h> | ||
25 | #include <asm/prom.h> | ||
26 | #include <asm/udbg.h> | ||
27 | |||
28 | #include "beat.h" | ||
29 | |||
30 | #define celleb_vtermno 0 | ||
31 | |||
32 | static void udbg_putc_beat(char c) | ||
33 | { | ||
34 | unsigned long rc; | ||
35 | |||
36 | if (c == '\n') | ||
37 | udbg_putc_beat('\r'); | ||
38 | |||
39 | rc = beat_put_term_char(celleb_vtermno, 1, (uint64_t)c << 56, 0); | ||
40 | } | ||
41 | |||
42 | /* Buffered chars getc */ | ||
43 | static long inbuflen; | ||
44 | static long inbuf[2]; /* must be 2 longs */ | ||
45 | |||
46 | static int udbg_getc_poll_beat(void) | ||
47 | { | ||
48 | /* The interface is tricky because it may return up to 16 chars. | ||
49 | * We save them statically for future calls to udbg_getc(). | ||
50 | */ | ||
51 | char ch, *buf = (char *)inbuf; | ||
52 | int i; | ||
53 | long rc; | ||
54 | if (inbuflen == 0) { | ||
55 | /* get some more chars. */ | ||
56 | inbuflen = 0; | ||
57 | rc = beat_get_term_char(celleb_vtermno, &inbuflen, inbuf+0, inbuf+1); | ||
58 | if (rc != 0) | ||
59 | inbuflen = 0; /* otherwise inbuflen is garbage */ | ||
60 | } | ||
61 | if (inbuflen <= 0 || inbuflen > 16) { | ||
62 | /* Catch error case as well as other oddities (corruption) */ | ||
63 | inbuflen = 0; | ||
64 | return -1; | ||
65 | } | ||
66 | ch = buf[0]; | ||
67 | for (i = 1; i < inbuflen; i++) /* shuffle them down. */ | ||
68 | buf[i-1] = buf[i]; | ||
69 | inbuflen--; | ||
70 | return ch; | ||
71 | } | ||
72 | |||
73 | static int udbg_getc_beat(void) | ||
74 | { | ||
75 | int ch; | ||
76 | for (;;) { | ||
77 | ch = udbg_getc_poll_beat(); | ||
78 | if (ch == -1) { | ||
79 | /* This shouldn't be needed...but... */ | ||
80 | volatile unsigned long delay; | ||
81 | for (delay=0; delay < 2000000; delay++) | ||
82 | ; | ||
83 | } else { | ||
84 | return ch; | ||
85 | } | ||
86 | } | ||
87 | } | ||
88 | |||
89 | /* call this from early_init() for a working debug console on | ||
90 | * vterm capable LPAR machines | ||
91 | */ | ||
92 | void __init udbg_init_debug_beat(void) | ||
93 | { | ||
94 | udbg_putc = udbg_putc_beat; | ||
95 | udbg_getc = udbg_getc_beat; | ||
96 | udbg_getc_poll = udbg_getc_poll_beat; | ||
97 | } | ||
diff --git a/arch/powerpc/platforms/chrp/setup.c b/arch/powerpc/platforms/chrp/setup.c index e1f51d455984..117c9a0055bd 100644 --- a/arch/powerpc/platforms/chrp/setup.c +++ b/arch/powerpc/platforms/chrp/setup.c | |||
@@ -75,7 +75,7 @@ extern irqreturn_t xmon_irq(int, void *); | |||
75 | extern unsigned long loops_per_jiffy; | 75 | extern unsigned long loops_per_jiffy; |
76 | 76 | ||
77 | /* To be replaced by RTAS when available */ | 77 | /* To be replaced by RTAS when available */ |
78 | static unsigned int *briq_SPOR; | 78 | static unsigned int __iomem *briq_SPOR; |
79 | 79 | ||
80 | #ifdef CONFIG_SMP | 80 | #ifdef CONFIG_SMP |
81 | extern struct smp_ops_t chrp_smp_ops; | 81 | extern struct smp_ops_t chrp_smp_ops; |
@@ -267,7 +267,7 @@ void __init chrp_setup_arch(void) | |||
267 | } else if (machine && strncmp(machine, "TotalImpact,BRIQ-1", 18) == 0) { | 267 | } else if (machine && strncmp(machine, "TotalImpact,BRIQ-1", 18) == 0) { |
268 | _chrp_type = _CHRP_briq; | 268 | _chrp_type = _CHRP_briq; |
269 | /* Map the SPOR register on briq and change the restart hook */ | 269 | /* Map the SPOR register on briq and change the restart hook */ |
270 | briq_SPOR = (unsigned int *)ioremap(0xff0000e8, 4); | 270 | briq_SPOR = ioremap(0xff0000e8, 4); |
271 | ppc_md.restart = briq_restart; | 271 | ppc_md.restart = briq_restart; |
272 | } else { | 272 | } else { |
273 | /* Let's assume it is an IBM chrp if all else fails */ | 273 | /* Let's assume it is an IBM chrp if all else fails */ |
diff --git a/arch/powerpc/platforms/embedded6xx/Kconfig b/arch/powerpc/platforms/embedded6xx/Kconfig index b3c2ce4cb7a8..886c522d78e9 100644 --- a/arch/powerpc/platforms/embedded6xx/Kconfig +++ b/arch/powerpc/platforms/embedded6xx/Kconfig | |||
@@ -104,15 +104,6 @@ config RADSTONE_PPC7D | |||
104 | config PAL4 | 104 | config PAL4 |
105 | bool "SBS-Palomar4" | 105 | bool "SBS-Palomar4" |
106 | 106 | ||
107 | config GEMINI | ||
108 | bool "Synergy-Gemini" | ||
109 | select PPC_INDIRECT_PCI | ||
110 | depends on BROKEN | ||
111 | help | ||
112 | Select Gemini if configuring for a Synergy Microsystems' Gemini | ||
113 | series Single Board Computer. More information is available at: | ||
114 | <http://www.synergymicro.com/PressRel/97_10_15.html>. | ||
115 | |||
116 | config EST8260 | 107 | config EST8260 |
117 | bool "EST8260" | 108 | bool "EST8260" |
118 | ---help--- | 109 | ---help--- |
diff --git a/arch/powerpc/platforms/maple/pci.c b/arch/powerpc/platforms/maple/pci.c index 3f6a69f67195..73c59904697f 100644 --- a/arch/powerpc/platforms/maple/pci.c +++ b/arch/powerpc/platforms/maple/pci.c | |||
@@ -425,14 +425,6 @@ static void __init setup_u4_pcie(struct pci_controller* hose) | |||
425 | hose->cfg_addr = ioremap(0xf0000000 + 0x800000, 0x1000); | 425 | hose->cfg_addr = ioremap(0xf0000000 + 0x800000, 0x1000); |
426 | hose->cfg_data = ioremap(0xf0000000 + 0xc00000, 0x1000); | 426 | hose->cfg_data = ioremap(0xf0000000 + 0xc00000, 0x1000); |
427 | 427 | ||
428 | /* The bus contains a bridge from root -> device, we need to | ||
429 | * make it visible on bus 0 so that we pick the right type | ||
430 | * of config cycles. If we didn't, we would have to force all | ||
431 | * config cycles to be type 1. So we override the "bus-range" | ||
432 | * property here | ||
433 | */ | ||
434 | hose->first_busno = 0x00; | ||
435 | hose->last_busno = 0xff; | ||
436 | u4_pcie = hose; | 428 | u4_pcie = hose; |
437 | } | 429 | } |
438 | 430 | ||
@@ -560,13 +552,16 @@ void __init maple_pci_init(void) | |||
560 | return; | 552 | return; |
561 | } | 553 | } |
562 | for (np = NULL; (np = of_get_next_child(root, np)) != NULL;) { | 554 | for (np = NULL; (np = of_get_next_child(root, np)) != NULL;) { |
563 | if (np->name == NULL) | 555 | if (!np->type) |
564 | continue; | 556 | continue; |
565 | if (!strcmp(np->name, "pci") || !strcmp(np->name, "pcie")) { | 557 | if (strcmp(np->type, "pci") && strcmp(np->type, "ht")) |
566 | if (add_bridge(np) == 0) | 558 | continue; |
567 | of_node_get(np); | 559 | if ((device_is_compatible(np, "u4-pcie") || |
568 | } | 560 | device_is_compatible(np, "u3-agp")) && |
569 | if (strcmp(np->name, "ht") == 0) { | 561 | add_bridge(np) == 0) |
562 | of_node_get(np); | ||
563 | |||
564 | if (device_is_compatible(np, "u3-ht")) { | ||
570 | of_node_get(np); | 565 | of_node_get(np); |
571 | ht = np; | 566 | ht = np; |
572 | } | 567 | } |
diff --git a/arch/powerpc/platforms/maple/setup.c b/arch/powerpc/platforms/maple/setup.c index 50855d4fd5a0..82d3f9e28d7c 100644 --- a/arch/powerpc/platforms/maple/setup.c +++ b/arch/powerpc/platforms/maple/setup.c | |||
@@ -62,6 +62,7 @@ | |||
62 | #include <asm/mpic.h> | 62 | #include <asm/mpic.h> |
63 | #include <asm/rtas.h> | 63 | #include <asm/rtas.h> |
64 | #include <asm/udbg.h> | 64 | #include <asm/udbg.h> |
65 | #include <asm/nvram.h> | ||
65 | 66 | ||
66 | #include "maple.h" | 67 | #include "maple.h" |
67 | 68 | ||
@@ -195,6 +196,8 @@ void __init maple_setup_arch(void) | |||
195 | maple_use_rtas_reboot_and_halt_if_present(); | 196 | maple_use_rtas_reboot_and_halt_if_present(); |
196 | 197 | ||
197 | printk(KERN_DEBUG "Using native/NAP idle loop\n"); | 198 | printk(KERN_DEBUG "Using native/NAP idle loop\n"); |
199 | |||
200 | mmio_nvram_init(); | ||
198 | } | 201 | } |
199 | 202 | ||
200 | /* | 203 | /* |
diff --git a/arch/powerpc/platforms/pasemi/Kconfig b/arch/powerpc/platforms/pasemi/Kconfig new file mode 100644 index 000000000000..68dc529dfd2f --- /dev/null +++ b/arch/powerpc/platforms/pasemi/Kconfig | |||
@@ -0,0 +1,10 @@ | |||
1 | menu "PA Semi PWRficient options" | ||
2 | depends on PPC_PASEMI | ||
3 | |||
4 | config PPC_PASEMI_IOMMU | ||
5 | bool "PA Semi IOMMU support" | ||
6 | depends on PPC_PASEMI | ||
7 | help | ||
8 | IOMMU support for PA6T-1682M | ||
9 | |||
10 | endmenu | ||
diff --git a/arch/powerpc/platforms/pasemi/Makefile b/arch/powerpc/platforms/pasemi/Makefile index 1be1a993c5f5..e657ccae90a9 100644 --- a/arch/powerpc/platforms/pasemi/Makefile +++ b/arch/powerpc/platforms/pasemi/Makefile | |||
@@ -1 +1,2 @@ | |||
1 | obj-y += setup.o pci.o time.o | 1 | obj-y += setup.o pci.o time.o idle.o powersave.o iommu.o |
2 | |||
diff --git a/arch/powerpc/platforms/pasemi/idle.c b/arch/powerpc/platforms/pasemi/idle.c new file mode 100644 index 000000000000..1ca3ff381591 --- /dev/null +++ b/arch/powerpc/platforms/pasemi/idle.c | |||
@@ -0,0 +1,88 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2006-2007 PA Semi, Inc | ||
3 | * | ||
4 | * Maintained by: Olof Johansson <olof@lixom.net> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #undef DEBUG | ||
22 | |||
23 | #include <linux/kernel.h> | ||
24 | #include <linux/string.h> | ||
25 | |||
26 | #include <asm/machdep.h> | ||
27 | #include <asm/reg.h> | ||
28 | |||
29 | #include "pasemi.h" | ||
30 | |||
31 | struct sleep_mode { | ||
32 | char *name; | ||
33 | void (*entry)(void); | ||
34 | }; | ||
35 | |||
36 | static struct sleep_mode modes[] = { | ||
37 | { .name = "spin", .entry = &idle_spin }, | ||
38 | { .name = "doze", .entry = &idle_doze }, | ||
39 | }; | ||
40 | |||
41 | static int current_mode = 0; | ||
42 | |||
43 | static int pasemi_system_reset_exception(struct pt_regs *regs) | ||
44 | { | ||
45 | /* If we were woken up from power savings, we need to return | ||
46 | * to the calling function, since nip is not saved across | ||
47 | * all modes. | ||
48 | */ | ||
49 | |||
50 | if (regs->msr & SRR1_WAKEMASK) | ||
51 | regs->nip = regs->link; | ||
52 | |||
53 | switch (regs->msr & SRR1_WAKEMASK) { | ||
54 | case SRR1_WAKEEE: | ||
55 | do_IRQ(regs); | ||
56 | break; | ||
57 | case SRR1_WAKEDEC: | ||
58 | timer_interrupt(regs); | ||
59 | break; | ||
60 | default: | ||
61 | /* do system reset */ | ||
62 | return 0; | ||
63 | } | ||
64 | /* everything handled */ | ||
65 | regs->msr |= MSR_RI; | ||
66 | return 1; | ||
67 | } | ||
68 | |||
69 | void __init pasemi_idle_init(void) | ||
70 | { | ||
71 | ppc_md.system_reset_exception = pasemi_system_reset_exception; | ||
72 | ppc_md.power_save = modes[current_mode].entry; | ||
73 | printk(KERN_INFO "Using PA6T idle loop (%s)\n", modes[current_mode].name); | ||
74 | } | ||
75 | |||
76 | static int __init idle_param(char *p) | ||
77 | { | ||
78 | int i; | ||
79 | for (i = 0; i < sizeof(modes)/sizeof(struct sleep_mode); i++) { | ||
80 | if (!strcmp(modes[i].name, p)) { | ||
81 | current_mode = i; | ||
82 | break; | ||
83 | } | ||
84 | } | ||
85 | return 0; | ||
86 | } | ||
87 | |||
88 | early_param("idle", idle_param); | ||
diff --git a/arch/powerpc/platforms/pasemi/iommu.c b/arch/powerpc/platforms/pasemi/iommu.c new file mode 100644 index 000000000000..459a53b7d24d --- /dev/null +++ b/arch/powerpc/platforms/pasemi/iommu.c | |||
@@ -0,0 +1,281 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2005-2007, PA Semi, Inc | ||
3 | * | ||
4 | * Maintained by: Olof Johansson <olof@lixom.net> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
18 | */ | ||
19 | |||
20 | #undef DEBUG | ||
21 | |||
22 | #include <linux/types.h> | ||
23 | #include <linux/spinlock.h> | ||
24 | #include <linux/pci.h> | ||
25 | #include <asm/iommu.h> | ||
26 | #include <asm/machdep.h> | ||
27 | #include <asm/abs_addr.h> | ||
28 | |||
29 | |||
30 | #define IOBMAP_PAGE_SHIFT 12 | ||
31 | #define IOBMAP_PAGE_SIZE (1 << IOBMAP_PAGE_SHIFT) | ||
32 | #define IOBMAP_PAGE_MASK (IOBMAP_PAGE_SIZE - 1) | ||
33 | |||
34 | #define IOBMAP_PAGE_FACTOR (PAGE_SHIFT - IOBMAP_PAGE_SHIFT) | ||
35 | |||
36 | #define IOB_BASE 0xe0000000 | ||
37 | #define IOB_SIZE 0x3000 | ||
38 | /* Configuration registers */ | ||
39 | #define IOBCAP_REG 0x10 | ||
40 | #define IOBCOM_REG 0x40 | ||
41 | /* Enable IOB address translation */ | ||
42 | #define IOBCOM_ATEN 0x00000100 | ||
43 | |||
44 | /* Address decode configuration register */ | ||
45 | #define IOB_AD_REG 0x53 | ||
46 | /* IOBCOM_AD_REG fields */ | ||
47 | #define IOB_AD_VGPRT 0x00000e00 | ||
48 | #define IOB_AD_VGAEN 0x00000100 | ||
49 | /* Direct mapping settings */ | ||
50 | #define IOB_AD_MPSEL_MASK 0x00000030 | ||
51 | #define IOB_AD_MPSEL_B38 0x00000000 | ||
52 | #define IOB_AD_MPSEL_B40 0x00000010 | ||
53 | #define IOB_AD_MPSEL_B42 0x00000020 | ||
54 | /* Translation window size / enable */ | ||
55 | #define IOB_AD_TRNG_MASK 0x00000003 | ||
56 | #define IOB_AD_TRNG_256M 0x00000000 | ||
57 | #define IOB_AD_TRNG_2G 0x00000001 | ||
58 | #define IOB_AD_TRNG_128G 0x00000003 | ||
59 | |||
60 | #define IOB_TABLEBASE_REG 0x55 | ||
61 | |||
62 | /* Base of the 64 4-byte L1 registers */ | ||
63 | #define IOB_XLT_L1_REGBASE 0xac0 | ||
64 | |||
65 | /* Register to invalidate TLB entries */ | ||
66 | #define IOB_AT_INVAL_TLB_REG 0xb40 | ||
67 | |||
68 | /* The top two bits of the level 1 entry contains valid and type flags */ | ||
69 | #define IOBMAP_L1E_V 0x40000000 | ||
70 | #define IOBMAP_L1E_V_B 0x80000000 | ||
71 | |||
72 | /* For big page entries, the bottom two bits contains flags */ | ||
73 | #define IOBMAP_L1E_BIG_CACHED 0x00000002 | ||
74 | #define IOBMAP_L1E_BIG_PRIORITY 0x00000001 | ||
75 | |||
76 | /* For regular level 2 entries, top 2 bits contain valid and cache flags */ | ||
77 | #define IOBMAP_L2E_V 0x80000000 | ||
78 | #define IOBMAP_L2E_V_CACHED 0xc0000000 | ||
79 | |||
80 | static u32 *iob; | ||
81 | static u32 iob_l1_emptyval; | ||
82 | static u32 iob_l2_emptyval; | ||
83 | static u32 *iob_l2_base; | ||
84 | |||
85 | static struct iommu_table iommu_table_iobmap; | ||
86 | static int iommu_table_iobmap_inited; | ||
87 | |||
88 | static void iobmap_build(struct iommu_table *tbl, long index, | ||
89 | long npages, unsigned long uaddr, | ||
90 | enum dma_data_direction direction) | ||
91 | { | ||
92 | u32 *ip; | ||
93 | u32 rpn; | ||
94 | unsigned long bus_addr; | ||
95 | |||
96 | pr_debug("iobmap: build at: %lx, %lx, addr: %lx\n", index, npages, uaddr); | ||
97 | |||
98 | bus_addr = (tbl->it_offset + index) << PAGE_SHIFT; | ||
99 | |||
100 | npages <<= IOBMAP_PAGE_FACTOR; | ||
101 | index <<= IOBMAP_PAGE_FACTOR; | ||
102 | |||
103 | ip = ((u32 *)tbl->it_base) + index; | ||
104 | |||
105 | while (npages--) { | ||
106 | rpn = virt_to_abs(uaddr) >> IOBMAP_PAGE_SHIFT; | ||
107 | |||
108 | *(ip++) = IOBMAP_L2E_V | rpn; | ||
109 | /* invalidate tlb, can be optimized more */ | ||
110 | out_le32(iob+IOB_AT_INVAL_TLB_REG, bus_addr >> 14); | ||
111 | |||
112 | uaddr += IOBMAP_PAGE_SIZE; | ||
113 | bus_addr += IOBMAP_PAGE_SIZE; | ||
114 | } | ||
115 | } | ||
116 | |||
117 | |||
118 | static void iobmap_free(struct iommu_table *tbl, long index, | ||
119 | long npages) | ||
120 | { | ||
121 | u32 *ip; | ||
122 | unsigned long bus_addr; | ||
123 | |||
124 | pr_debug("iobmap: free at: %lx, %lx\n", index, npages); | ||
125 | |||
126 | bus_addr = (tbl->it_offset + index) << PAGE_SHIFT; | ||
127 | |||
128 | npages <<= IOBMAP_PAGE_FACTOR; | ||
129 | index <<= IOBMAP_PAGE_FACTOR; | ||
130 | |||
131 | ip = ((u32 *)tbl->it_base) + index; | ||
132 | |||
133 | while (npages--) { | ||
134 | *(ip++) = iob_l2_emptyval; | ||
135 | /* invalidate tlb, can be optimized more */ | ||
136 | out_le32(iob+IOB_AT_INVAL_TLB_REG, bus_addr >> 14); | ||
137 | bus_addr += IOBMAP_PAGE_SIZE; | ||
138 | } | ||
139 | } | ||
140 | |||
141 | |||
142 | static void iommu_table_iobmap_setup(void) | ||
143 | { | ||
144 | pr_debug(" -> %s\n", __func__); | ||
145 | iommu_table_iobmap.it_busno = 0; | ||
146 | iommu_table_iobmap.it_offset = 0; | ||
147 | /* it_size is in number of entries */ | ||
148 | iommu_table_iobmap.it_size = 0x80000000 >> PAGE_SHIFT; | ||
149 | |||
150 | /* Initialize the common IOMMU code */ | ||
151 | iommu_table_iobmap.it_base = (unsigned long)iob_l2_base; | ||
152 | iommu_table_iobmap.it_index = 0; | ||
153 | /* XXXOJN tune this to avoid IOB cache invals. | ||
154 | * Should probably be 8 (64 bytes) | ||
155 | */ | ||
156 | iommu_table_iobmap.it_blocksize = 4; | ||
157 | iommu_init_table(&iommu_table_iobmap, 0); | ||
158 | pr_debug(" <- %s\n", __func__); | ||
159 | } | ||
160 | |||
161 | |||
162 | |||
163 | static void pci_dma_bus_setup_pasemi(struct pci_bus *bus) | ||
164 | { | ||
165 | struct device_node *dn; | ||
166 | |||
167 | pr_debug("pci_dma_bus_setup, bus %p, bus->self %p\n", bus, bus->self); | ||
168 | |||
169 | if (!iommu_table_iobmap_inited) { | ||
170 | iommu_table_iobmap_inited = 1; | ||
171 | iommu_table_iobmap_setup(); | ||
172 | } | ||
173 | |||
174 | dn = pci_bus_to_OF_node(bus); | ||
175 | |||
176 | if (dn) | ||
177 | PCI_DN(dn)->iommu_table = &iommu_table_iobmap; | ||
178 | |||
179 | } | ||
180 | |||
181 | |||
182 | static void pci_dma_dev_setup_pasemi(struct pci_dev *dev) | ||
183 | { | ||
184 | pr_debug("pci_dma_dev_setup, dev %p (%s)\n", dev, pci_name(dev)); | ||
185 | |||
186 | /* DMA device is untranslated, but all other PCI-e goes through | ||
187 | * the IOMMU | ||
188 | */ | ||
189 | if (dev->vendor == 0x1959 && dev->device == 0xa007) | ||
190 | dev->dev.archdata.dma_ops = &dma_direct_ops; | ||
191 | else | ||
192 | dev->dev.archdata.dma_data = &iommu_table_iobmap; | ||
193 | } | ||
194 | |||
195 | static void pci_dma_bus_setup_null(struct pci_bus *b) { } | ||
196 | static void pci_dma_dev_setup_null(struct pci_dev *d) { } | ||
197 | |||
198 | int iob_init(struct device_node *dn) | ||
199 | { | ||
200 | unsigned long tmp; | ||
201 | u32 regword; | ||
202 | int i; | ||
203 | |||
204 | pr_debug(" -> %s\n", __func__); | ||
205 | |||
206 | /* Allocate a spare page to map all invalid IOTLB pages. */ | ||
207 | tmp = lmb_alloc(IOBMAP_PAGE_SIZE, IOBMAP_PAGE_SIZE); | ||
208 | if (!tmp) | ||
209 | panic("IOBMAP: Cannot allocate spare page!"); | ||
210 | /* Empty l1 is marked invalid */ | ||
211 | iob_l1_emptyval = 0; | ||
212 | /* Empty l2 is mapped to dummy page */ | ||
213 | iob_l2_emptyval = IOBMAP_L2E_V | (tmp >> IOBMAP_PAGE_SHIFT); | ||
214 | |||
215 | iob = ioremap(IOB_BASE, IOB_SIZE); | ||
216 | if (!iob) | ||
217 | panic("IOBMAP: Cannot map registers!"); | ||
218 | |||
219 | /* setup direct mapping of the L1 entries */ | ||
220 | for (i = 0; i < 64; i++) { | ||
221 | /* Each L1 covers 32MB, i.e. 8K entries = 32K of ram */ | ||
222 | regword = IOBMAP_L1E_V | (__pa(iob_l2_base + i*0x2000) >> 12); | ||
223 | out_le32(iob+IOB_XLT_L1_REGBASE+i, regword); | ||
224 | } | ||
225 | |||
226 | /* set 2GB translation window, based at 0 */ | ||
227 | regword = in_le32(iob+IOB_AD_REG); | ||
228 | regword &= ~IOB_AD_TRNG_MASK; | ||
229 | regword |= IOB_AD_TRNG_2G; | ||
230 | out_le32(iob+IOB_AD_REG, regword); | ||
231 | |||
232 | /* Enable translation */ | ||
233 | regword = in_le32(iob+IOBCOM_REG); | ||
234 | regword |= IOBCOM_ATEN; | ||
235 | out_le32(iob+IOBCOM_REG, regword); | ||
236 | |||
237 | pr_debug(" <- %s\n", __func__); | ||
238 | |||
239 | return 0; | ||
240 | } | ||
241 | |||
242 | |||
243 | /* These are called very early. */ | ||
244 | void iommu_init_early_pasemi(void) | ||
245 | { | ||
246 | int iommu_off; | ||
247 | |||
248 | #ifndef CONFIG_PPC_PASEMI_IOMMU | ||
249 | iommu_off = 1; | ||
250 | #else | ||
251 | iommu_off = of_chosen && | ||
252 | get_property(of_chosen, "linux,iommu-off", NULL); | ||
253 | #endif | ||
254 | if (iommu_off) { | ||
255 | /* Direct I/O, IOMMU off */ | ||
256 | ppc_md.pci_dma_dev_setup = pci_dma_dev_setup_null; | ||
257 | ppc_md.pci_dma_bus_setup = pci_dma_bus_setup_null; | ||
258 | pci_dma_ops = &dma_direct_ops; | ||
259 | |||
260 | return; | ||
261 | } | ||
262 | |||
263 | iob_init(NULL); | ||
264 | |||
265 | ppc_md.pci_dma_dev_setup = pci_dma_dev_setup_pasemi; | ||
266 | ppc_md.pci_dma_bus_setup = pci_dma_bus_setup_pasemi; | ||
267 | ppc_md.tce_build = iobmap_build; | ||
268 | ppc_md.tce_free = iobmap_free; | ||
269 | pci_dma_ops = &dma_iommu_ops; | ||
270 | } | ||
271 | |||
272 | void __init alloc_iobmap_l2(void) | ||
273 | { | ||
274 | #ifndef CONFIG_PPC_PASEMI_IOMMU | ||
275 | return; | ||
276 | #endif | ||
277 | /* For 2G space, 8x64 pages (2^21 bytes) is max total l2 size */ | ||
278 | iob_l2_base = (u32 *)abs_to_virt(lmb_alloc_base(1UL<<21, 1UL<<21, 0x80000000)); | ||
279 | |||
280 | printk(KERN_INFO "IOBMAP L2 allocated at: %p\n", iob_l2_base); | ||
281 | } | ||
diff --git a/arch/powerpc/platforms/pasemi/pasemi.h b/arch/powerpc/platforms/pasemi/pasemi.h index 51c2a2397ecf..2d3927e6edb0 100644 --- a/arch/powerpc/platforms/pasemi/pasemi.h +++ b/arch/powerpc/platforms/pasemi/pasemi.h | |||
@@ -3,5 +3,17 @@ | |||
3 | 3 | ||
4 | extern unsigned long pas_get_boot_time(void); | 4 | extern unsigned long pas_get_boot_time(void); |
5 | extern void pas_pci_init(void); | 5 | extern void pas_pci_init(void); |
6 | extern void __devinit pas_pci_irq_fixup(struct pci_dev *dev); | ||
7 | extern void __devinit pas_pci_dma_dev_setup(struct pci_dev *dev); | ||
8 | |||
9 | extern void __init alloc_iobmap_l2(void); | ||
10 | |||
11 | extern void __init pasemi_idle_init(void); | ||
12 | |||
13 | /* Power savings modes, implemented in asm */ | ||
14 | extern void idle_spin(void); | ||
15 | extern void idle_doze(void); | ||
16 | |||
17 | |||
6 | 18 | ||
7 | #endif /* _PASEMI_PASEMI_H */ | 19 | #endif /* _PASEMI_PASEMI_H */ |
diff --git a/arch/powerpc/platforms/pasemi/pci.c b/arch/powerpc/platforms/pasemi/pci.c index faa618e04047..7ecb2ba24db9 100644 --- a/arch/powerpc/platforms/pasemi/pci.c +++ b/arch/powerpc/platforms/pasemi/pci.c | |||
@@ -163,6 +163,19 @@ static void __init pas_fixup_phb_resources(void) | |||
163 | } | 163 | } |
164 | 164 | ||
165 | 165 | ||
166 | void __devinit pas_pci_irq_fixup(struct pci_dev *dev) | ||
167 | { | ||
168 | /* DMA is special, 84 interrupts (128 -> 211), all but 128 | ||
169 | * need to be mapped by hand here. | ||
170 | */ | ||
171 | if (dev->vendor == 0x1959 && dev->device == 0xa007) { | ||
172 | int i; | ||
173 | for (i = 129; i < 212; i++) | ||
174 | irq_create_mapping(NULL, i); | ||
175 | } | ||
176 | } | ||
177 | |||
178 | |||
166 | void __init pas_pci_init(void) | 179 | void __init pas_pci_init(void) |
167 | { | 180 | { |
168 | struct device_node *np, *root; | 181 | struct device_node *np, *root; |
diff --git a/arch/powerpc/platforms/pasemi/powersave.S b/arch/powerpc/platforms/pasemi/powersave.S new file mode 100644 index 000000000000..6d0fba6aab17 --- /dev/null +++ b/arch/powerpc/platforms/pasemi/powersave.S | |||
@@ -0,0 +1,80 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2006-2007 PA Semi, Inc | ||
3 | * | ||
4 | * Maintained by: Olof Johansson <olof@lixom.net> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #include <asm/processor.h> | ||
22 | #include <asm/page.h> | ||
23 | #include <asm/ppc_asm.h> | ||
24 | #include <asm/cputable.h> | ||
25 | #include <asm/cache.h> | ||
26 | #include <asm/thread_info.h> | ||
27 | #include <asm/asm-offsets.h> | ||
28 | |||
29 | /* Power savings opcodes since not all binutils have them at this time */ | ||
30 | #define DOZE .long 0x4c000324 | ||
31 | #define NAP .long 0x4c000364 | ||
32 | #define SLEEP .long 0x4c0003a4 | ||
33 | #define RVW .long 0x4c0003e4 | ||
34 | |||
35 | /* Common sequence to do before going to any of the | ||
36 | * powersavings modes. | ||
37 | */ | ||
38 | |||
39 | #define PRE_SLEEP_SEQUENCE \ | ||
40 | std r3,8(r1); \ | ||
41 | ptesync ; \ | ||
42 | ld r3,8(r1); \ | ||
43 | 1: cmpd r3,r3; \ | ||
44 | bne 1b | ||
45 | |||
46 | _doze: | ||
47 | PRE_SLEEP_SEQUENCE | ||
48 | DOZE | ||
49 | b . | ||
50 | |||
51 | |||
52 | _GLOBAL(idle_spin) | ||
53 | blr | ||
54 | |||
55 | _GLOBAL(idle_doze) | ||
56 | LOAD_REG_ADDR(r3, _doze) | ||
57 | b sleep_common | ||
58 | |||
59 | /* Add more modes here later */ | ||
60 | |||
61 | sleep_common: | ||
62 | mflr r0 | ||
63 | std r0, 16(r1) | ||
64 | stdu r1,-64(r1) | ||
65 | |||
66 | LOAD_REG_IMMEDIATE(r6,MSR_DR|MSR_IR|MSR_ME|MSR_EE) | ||
67 | mfmsr r4 | ||
68 | andc r5,r4,r6 | ||
69 | mtmsrd r5,0 | ||
70 | |||
71 | mtctr r3 | ||
72 | bctrl | ||
73 | |||
74 | mtmsrd r4,0 | ||
75 | |||
76 | addi r1,r1,64 | ||
77 | ld r0,16(r1) | ||
78 | mtlr r0 | ||
79 | blr | ||
80 | |||
diff --git a/arch/powerpc/platforms/pasemi/setup.c b/arch/powerpc/platforms/pasemi/setup.c index bea7d1bb1a3b..449cf1a08291 100644 --- a/arch/powerpc/platforms/pasemi/setup.c +++ b/arch/powerpc/platforms/pasemi/setup.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (C) 2006 PA Semi, Inc | 2 | * Copyright (C) 2006-2007 PA Semi, Inc |
3 | * | 3 | * |
4 | * Authors: Kip Walker, PA Semi | 4 | * Authors: Kip Walker, PA Semi |
5 | * Olof Johansson, PA Semi | 5 | * Olof Johansson, PA Semi |
@@ -38,31 +38,46 @@ | |||
38 | 38 | ||
39 | #include "pasemi.h" | 39 | #include "pasemi.h" |
40 | 40 | ||
41 | static void __iomem *reset_reg; | ||
42 | |||
41 | static void pas_restart(char *cmd) | 43 | static void pas_restart(char *cmd) |
42 | { | 44 | { |
43 | printk("restart unimplemented, looping...\n"); | 45 | printk("Restarting...\n"); |
44 | for (;;) ; | 46 | while (1) |
47 | out_le32(reset_reg, 0x6000000); | ||
45 | } | 48 | } |
46 | 49 | ||
47 | static void pas_power_off(void) | 50 | #ifdef CONFIG_SMP |
51 | static DEFINE_SPINLOCK(timebase_lock); | ||
52 | |||
53 | static void __devinit pas_give_timebase(void) | ||
48 | { | 54 | { |
49 | printk("power off unimplemented, looping...\n"); | 55 | unsigned long tb; |
50 | for (;;) ; | 56 | |
57 | spin_lock(&timebase_lock); | ||
58 | mtspr(SPRN_TBCTL, TBCTL_FREEZE); | ||
59 | tb = mftb(); | ||
60 | mtspr(SPRN_TBCTL, TBCTL_UPDATE_LOWER | (tb & 0xffffffff)); | ||
61 | mtspr(SPRN_TBCTL, TBCTL_UPDATE_UPPER | (tb >> 32)); | ||
62 | mtspr(SPRN_TBCTL, TBCTL_RESTART); | ||
63 | spin_unlock(&timebase_lock); | ||
64 | pr_debug("pas_give_timebase: cpu %d gave tb %lx\n", | ||
65 | smp_processor_id(), tb); | ||
51 | } | 66 | } |
52 | 67 | ||
53 | static void pas_halt(void) | 68 | static void __devinit pas_take_timebase(void) |
54 | { | 69 | { |
55 | pas_power_off(); | 70 | pr_debug("pas_take_timebase: cpu %d has tb %lx\n", |
71 | smp_processor_id(), mftb()); | ||
56 | } | 72 | } |
57 | 73 | ||
58 | #ifdef CONFIG_SMP | ||
59 | struct smp_ops_t pas_smp_ops = { | 74 | struct smp_ops_t pas_smp_ops = { |
60 | .probe = smp_mpic_probe, | 75 | .probe = smp_mpic_probe, |
61 | .message_pass = smp_mpic_message_pass, | 76 | .message_pass = smp_mpic_message_pass, |
62 | .kick_cpu = smp_generic_kick_cpu, | 77 | .kick_cpu = smp_generic_kick_cpu, |
63 | .setup_cpu = smp_mpic_setup_cpu, | 78 | .setup_cpu = smp_mpic_setup_cpu, |
64 | .give_timebase = smp_generic_give_timebase, | 79 | .give_timebase = pas_give_timebase, |
65 | .take_timebase = smp_generic_take_timebase, | 80 | .take_timebase = pas_take_timebase, |
66 | }; | 81 | }; |
67 | #endif /* CONFIG_SMP */ | 82 | #endif /* CONFIG_SMP */ |
68 | 83 | ||
@@ -72,9 +87,6 @@ void __init pas_setup_arch(void) | |||
72 | /* Setup SMP callback */ | 87 | /* Setup SMP callback */ |
73 | smp_ops = &pas_smp_ops; | 88 | smp_ops = &pas_smp_ops; |
74 | #endif | 89 | #endif |
75 | /* no iommu yet */ | ||
76 | pci_dma_ops = &dma_direct_ops; | ||
77 | |||
78 | /* Lookup PCI hosts */ | 90 | /* Lookup PCI hosts */ |
79 | pas_pci_init(); | 91 | pas_pci_init(); |
80 | 92 | ||
@@ -82,7 +94,11 @@ void __init pas_setup_arch(void) | |||
82 | conswitchp = &dummy_con; | 94 | conswitchp = &dummy_con; |
83 | #endif | 95 | #endif |
84 | 96 | ||
85 | printk(KERN_DEBUG "Using default idle loop\n"); | 97 | /* Remap SDC register for doing reset */ |
98 | /* XXXOJN This should maybe come out of the device tree */ | ||
99 | reset_reg = ioremap(0xfc101100, 4); | ||
100 | |||
101 | pasemi_idle_init(); | ||
86 | } | 102 | } |
87 | 103 | ||
88 | /* No legacy IO on our parts */ | 104 | /* No legacy IO on our parts */ |
@@ -130,8 +146,9 @@ static __init void pas_init_IRQ(void) | |||
130 | openpic_addr = of_read_number(opprop, naddr); | 146 | openpic_addr = of_read_number(opprop, naddr); |
131 | printk(KERN_DEBUG "OpenPIC addr: %lx\n", openpic_addr); | 147 | printk(KERN_DEBUG "OpenPIC addr: %lx\n", openpic_addr); |
132 | 148 | ||
133 | mpic = mpic_alloc(mpic_node, openpic_addr, MPIC_PRIMARY, 0, 0, | 149 | mpic = mpic_alloc(mpic_node, openpic_addr, |
134 | " PAS-OPIC "); | 150 | MPIC_PRIMARY|MPIC_LARGE_VECTORS, |
151 | 0, 0, " PAS-OPIC "); | ||
135 | BUG_ON(!mpic); | 152 | BUG_ON(!mpic); |
136 | 153 | ||
137 | mpic_assign_isu(mpic, 0, openpic_addr + 0x10000); | 154 | mpic_assign_isu(mpic, 0, openpic_addr + 0x10000); |
@@ -146,6 +163,53 @@ static void __init pas_progress(char *s, unsigned short hex) | |||
146 | } | 163 | } |
147 | 164 | ||
148 | 165 | ||
166 | static int pas_machine_check_handler(struct pt_regs *regs) | ||
167 | { | ||
168 | int cpu = smp_processor_id(); | ||
169 | unsigned long srr0, srr1, dsisr; | ||
170 | |||
171 | srr0 = regs->nip; | ||
172 | srr1 = regs->msr; | ||
173 | dsisr = mfspr(SPRN_DSISR); | ||
174 | printk(KERN_ERR "Machine Check on CPU %d\n", cpu); | ||
175 | printk(KERN_ERR "SRR0 0x%016lx SRR1 0x%016lx\n", srr0, srr1); | ||
176 | printk(KERN_ERR "DSISR 0x%016lx DAR 0x%016lx\n", dsisr, regs->dar); | ||
177 | printk(KERN_ERR "Cause:\n"); | ||
178 | |||
179 | if (srr1 & 0x200000) | ||
180 | printk(KERN_ERR "Signalled by SDC\n"); | ||
181 | if (srr1 & 0x100000) { | ||
182 | printk(KERN_ERR "Load/Store detected error:\n"); | ||
183 | if (dsisr & 0x8000) | ||
184 | printk(KERN_ERR "D-cache ECC double-bit error or bus error\n"); | ||
185 | if (dsisr & 0x4000) | ||
186 | printk(KERN_ERR "LSU snoop response error\n"); | ||
187 | if (dsisr & 0x2000) | ||
188 | printk(KERN_ERR "MMU SLB multi-hit or invalid B field\n"); | ||
189 | if (dsisr & 0x1000) | ||
190 | printk(KERN_ERR "Recoverable Duptags\n"); | ||
191 | if (dsisr & 0x800) | ||
192 | printk(KERN_ERR "Recoverable D-cache parity error count overflow\n"); | ||
193 | if (dsisr & 0x400) | ||
194 | printk(KERN_ERR "TLB parity error count overflow\n"); | ||
195 | } | ||
196 | if (srr1 & 0x80000) | ||
197 | printk(KERN_ERR "Bus Error\n"); | ||
198 | if (srr1 & 0x40000) | ||
199 | printk(KERN_ERR "I-side SLB multiple hit\n"); | ||
200 | if (srr1 & 0x20000) | ||
201 | printk(KERN_ERR "I-cache parity error hit\n"); | ||
202 | |||
203 | /* SRR1[62] is from MSR[62] if recoverable, so pass that back */ | ||
204 | return !!(srr1 & 0x2); | ||
205 | } | ||
206 | |||
207 | static void __init pas_init_early(void) | ||
208 | { | ||
209 | iommu_init_early_pasemi(); | ||
210 | } | ||
211 | |||
212 | |||
149 | /* | 213 | /* |
150 | * Called very early, MMU is off, device-tree isn't unflattened | 214 | * Called very early, MMU is off, device-tree isn't unflattened |
151 | */ | 215 | */ |
@@ -158,6 +222,8 @@ static int __init pas_probe(void) | |||
158 | 222 | ||
159 | hpte_init_native(); | 223 | hpte_init_native(); |
160 | 224 | ||
225 | alloc_iobmap_l2(); | ||
226 | |||
161 | return 1; | 227 | return 1; |
162 | } | 228 | } |
163 | 229 | ||
@@ -165,13 +231,14 @@ define_machine(pas) { | |||
165 | .name = "PA Semi PA6T-1682M", | 231 | .name = "PA Semi PA6T-1682M", |
166 | .probe = pas_probe, | 232 | .probe = pas_probe, |
167 | .setup_arch = pas_setup_arch, | 233 | .setup_arch = pas_setup_arch, |
234 | .init_early = pas_init_early, | ||
168 | .init_IRQ = pas_init_IRQ, | 235 | .init_IRQ = pas_init_IRQ, |
169 | .get_irq = mpic_get_irq, | 236 | .get_irq = mpic_get_irq, |
170 | .restart = pas_restart, | 237 | .restart = pas_restart, |
171 | .power_off = pas_power_off, | ||
172 | .halt = pas_halt, | ||
173 | .get_boot_time = pas_get_boot_time, | 238 | .get_boot_time = pas_get_boot_time, |
174 | .calibrate_decr = generic_calibrate_decr, | 239 | .calibrate_decr = generic_calibrate_decr, |
175 | .check_legacy_ioport = pas_check_legacy_ioport, | 240 | .check_legacy_ioport = pas_check_legacy_ioport, |
176 | .progress = pas_progress, | 241 | .progress = pas_progress, |
242 | .machine_check_exception = pas_machine_check_handler, | ||
243 | .pci_irq_fixup = pas_pci_irq_fixup, | ||
177 | }; | 244 | }; |
diff --git a/arch/powerpc/platforms/powermac/smp.c b/arch/powerpc/platforms/powermac/smp.c index eeb2ae5ffc58..d73fb73802bb 100644 --- a/arch/powerpc/platforms/powermac/smp.c +++ b/arch/powerpc/platforms/powermac/smp.c | |||
@@ -795,7 +795,6 @@ static void __devinit smp_core99_kick_cpu(int nr) | |||
795 | ppc_md.progress("smp_core99_kick_cpu", 0x346); | 795 | ppc_md.progress("smp_core99_kick_cpu", 0x346); |
796 | 796 | ||
797 | local_irq_save(flags); | 797 | local_irq_save(flags); |
798 | local_irq_disable(); | ||
799 | 798 | ||
800 | /* Save reset vector */ | 799 | /* Save reset vector */ |
801 | save_vector = *vector; | 800 | save_vector = *vector; |
diff --git a/arch/powerpc/platforms/ps3/Makefile b/arch/powerpc/platforms/ps3/Makefile index 1994904f580f..a0048fcf0866 100644 --- a/arch/powerpc/platforms/ps3/Makefile +++ b/arch/powerpc/platforms/ps3/Makefile | |||
@@ -1,5 +1,6 @@ | |||
1 | obj-y += setup.o mm.o time.o hvcall.o htab.o repository.o | 1 | obj-y += setup.o mm.o time.o hvcall.o htab.o repository.o |
2 | obj-y += interrupt.o exports.o os-area.o | 2 | obj-y += interrupt.o exports.o os-area.o |
3 | obj-y += system-bus.o | ||
3 | 4 | ||
4 | obj-$(CONFIG_SMP) += smp.o | 5 | obj-$(CONFIG_SMP) += smp.o |
5 | obj-$(CONFIG_SPU_BASE) += spu.o | 6 | obj-$(CONFIG_SPU_BASE) += spu.o |
diff --git a/arch/powerpc/platforms/ps3/htab.c b/arch/powerpc/platforms/ps3/htab.c index 8fe1769655a3..a4b5a1bc60f4 100644 --- a/arch/powerpc/platforms/ps3/htab.c +++ b/arch/powerpc/platforms/ps3/htab.c | |||
@@ -23,7 +23,6 @@ | |||
23 | #include <asm/machdep.h> | 23 | #include <asm/machdep.h> |
24 | #include <asm/lmb.h> | 24 | #include <asm/lmb.h> |
25 | #include <asm/udbg.h> | 25 | #include <asm/udbg.h> |
26 | #include <asm/ps3.h> | ||
27 | #include <asm/lv1call.h> | 26 | #include <asm/lv1call.h> |
28 | 27 | ||
29 | #include "platform.h" | 28 | #include "platform.h" |
diff --git a/arch/powerpc/platforms/ps3/interrupt.c b/arch/powerpc/platforms/ps3/interrupt.c index 6f5de438b980..631c30095617 100644 --- a/arch/powerpc/platforms/ps3/interrupt.c +++ b/arch/powerpc/platforms/ps3/interrupt.c | |||
@@ -24,7 +24,6 @@ | |||
24 | 24 | ||
25 | #include <asm/machdep.h> | 25 | #include <asm/machdep.h> |
26 | #include <asm/udbg.h> | 26 | #include <asm/udbg.h> |
27 | #include <asm/ps3.h> | ||
28 | #include <asm/lv1call.h> | 27 | #include <asm/lv1call.h> |
29 | 28 | ||
30 | #include "platform.h" | 29 | #include "platform.h" |
@@ -36,15 +35,148 @@ | |||
36 | #endif | 35 | #endif |
37 | 36 | ||
38 | /** | 37 | /** |
38 | * struct ps3_bmp - a per cpu irq status and mask bitmap structure | ||
39 | * @status: 256 bit status bitmap indexed by plug | ||
40 | * @unused_1: | ||
41 | * @mask: 256 bit mask bitmap indexed by plug | ||
42 | * @unused_2: | ||
43 | * @lock: | ||
44 | * @ipi_debug_brk_mask: | ||
45 | * | ||
46 | * The HV mantains per SMT thread mappings of HV outlet to HV plug on | ||
47 | * behalf of the guest. These mappings are implemented as 256 bit guest | ||
48 | * supplied bitmaps indexed by plug number. The addresses of the bitmaps | ||
49 | * are registered with the HV through lv1_configure_irq_state_bitmap(). | ||
50 | * The HV requires that the 512 bits of status + mask not cross a page | ||
51 | * boundary. PS3_BMP_MINALIGN is used to define this minimal 64 byte | ||
52 | * alignment. | ||
53 | * | ||
54 | * The HV supports 256 plugs per thread, assigned as {0..255}, for a total | ||
55 | * of 512 plugs supported on a processor. To simplify the logic this | ||
56 | * implementation equates HV plug value to Linux virq value, constrains each | ||
57 | * interrupt to have a system wide unique plug number, and limits the range | ||
58 | * of the plug values to map into the first dword of the bitmaps. This | ||
59 | * gives a usable range of plug values of {NUM_ISA_INTERRUPTS..63}. Note | ||
60 | * that there is no constraint on how many in this set an individual thread | ||
61 | * can acquire. | ||
62 | */ | ||
63 | |||
64 | #define PS3_BMP_MINALIGN 64 | ||
65 | |||
66 | struct ps3_bmp { | ||
67 | struct { | ||
68 | u64 status; | ||
69 | u64 unused_1[3]; | ||
70 | u64 mask; | ||
71 | u64 unused_2[3]; | ||
72 | }; | ||
73 | u64 ipi_debug_brk_mask; | ||
74 | spinlock_t lock; | ||
75 | }; | ||
76 | |||
77 | /** | ||
78 | * struct ps3_private - a per cpu data structure | ||
79 | * @bmp: ps3_bmp structure | ||
80 | * @node: HV logical_ppe_id | ||
81 | * @cpu: HV thread_id | ||
82 | */ | ||
83 | |||
84 | struct ps3_private { | ||
85 | struct ps3_bmp bmp __attribute__ ((aligned (PS3_BMP_MINALIGN))); | ||
86 | u64 node; | ||
87 | unsigned int cpu; | ||
88 | }; | ||
89 | |||
90 | static DEFINE_PER_CPU(struct ps3_private, ps3_private); | ||
91 | |||
92 | int ps3_alloc_irq(enum ps3_cpu_binding cpu, unsigned long outlet, | ||
93 | unsigned int *virq) | ||
94 | { | ||
95 | int result; | ||
96 | struct ps3_private *pd; | ||
97 | |||
98 | /* This defines the default interrupt distribution policy. */ | ||
99 | |||
100 | if (cpu == PS3_BINDING_CPU_ANY) | ||
101 | cpu = 0; | ||
102 | |||
103 | pd = &per_cpu(ps3_private, cpu); | ||
104 | |||
105 | *virq = irq_create_mapping(NULL, outlet); | ||
106 | |||
107 | if (*virq == NO_IRQ) { | ||
108 | pr_debug("%s:%d: irq_create_mapping failed: outlet %lu\n", | ||
109 | __func__, __LINE__, outlet); | ||
110 | result = -ENOMEM; | ||
111 | goto fail_create; | ||
112 | } | ||
113 | |||
114 | /* Binds outlet to cpu + virq. */ | ||
115 | |||
116 | result = lv1_connect_irq_plug_ext(pd->node, pd->cpu, *virq, outlet, 0); | ||
117 | |||
118 | if (result) { | ||
119 | pr_info("%s:%d: lv1_connect_irq_plug_ext failed: %s\n", | ||
120 | __func__, __LINE__, ps3_result(result)); | ||
121 | result = -EPERM; | ||
122 | goto fail_connect; | ||
123 | } | ||
124 | |||
125 | pr_debug("%s:%d: outlet %lu => cpu %u, virq %u\n", __func__, __LINE__, | ||
126 | outlet, cpu, *virq); | ||
127 | |||
128 | result = set_irq_chip_data(*virq, pd); | ||
129 | |||
130 | if (result) { | ||
131 | pr_debug("%s:%d: set_irq_chip_data failed\n", | ||
132 | __func__, __LINE__); | ||
133 | goto fail_set; | ||
134 | } | ||
135 | |||
136 | return result; | ||
137 | |||
138 | fail_set: | ||
139 | lv1_disconnect_irq_plug_ext(pd->node, pd->cpu, *virq); | ||
140 | fail_connect: | ||
141 | irq_dispose_mapping(*virq); | ||
142 | fail_create: | ||
143 | return result; | ||
144 | } | ||
145 | EXPORT_SYMBOL_GPL(ps3_alloc_irq); | ||
146 | |||
147 | int ps3_free_irq(unsigned int virq) | ||
148 | { | ||
149 | int result; | ||
150 | const struct ps3_private *pd = get_irq_chip_data(virq); | ||
151 | |||
152 | pr_debug("%s:%d: node %lu, cpu %d, virq %u\n", __func__, __LINE__, | ||
153 | pd->node, pd->cpu, virq); | ||
154 | |||
155 | result = lv1_disconnect_irq_plug_ext(pd->node, pd->cpu, virq); | ||
156 | |||
157 | if (result) | ||
158 | pr_info("%s:%d: lv1_disconnect_irq_plug_ext failed: %s\n", | ||
159 | __func__, __LINE__, ps3_result(result)); | ||
160 | |||
161 | set_irq_chip_data(virq, NULL); | ||
162 | irq_dispose_mapping(virq); | ||
163 | return result; | ||
164 | } | ||
165 | EXPORT_SYMBOL_GPL(ps3_free_irq); | ||
166 | |||
167 | /** | ||
39 | * ps3_alloc_io_irq - Assign a virq to a system bus device. | 168 | * ps3_alloc_io_irq - Assign a virq to a system bus device. |
40 | * interrupt_id: The device interrupt id read from the system repository. | 169 | * @cpu: enum ps3_cpu_binding indicating the cpu the interrupt should be |
170 | * serviced on. | ||
171 | * @interrupt_id: The device interrupt id read from the system repository. | ||
41 | * @virq: The assigned Linux virq. | 172 | * @virq: The assigned Linux virq. |
42 | * | 173 | * |
43 | * An io irq represents a non-virtualized device interrupt. interrupt_id | 174 | * An io irq represents a non-virtualized device interrupt. interrupt_id |
44 | * coresponds to the interrupt number of the interrupt controller. | 175 | * coresponds to the interrupt number of the interrupt controller. |
45 | */ | 176 | */ |
46 | 177 | ||
47 | int ps3_alloc_io_irq(unsigned int interrupt_id, unsigned int *virq) | 178 | int ps3_alloc_io_irq(enum ps3_cpu_binding cpu, unsigned int interrupt_id, |
179 | unsigned int *virq) | ||
48 | { | 180 | { |
49 | int result; | 181 | int result; |
50 | unsigned long outlet; | 182 | unsigned long outlet; |
@@ -57,13 +189,12 @@ int ps3_alloc_io_irq(unsigned int interrupt_id, unsigned int *virq) | |||
57 | return result; | 189 | return result; |
58 | } | 190 | } |
59 | 191 | ||
60 | *virq = irq_create_mapping(NULL, outlet); | 192 | result = ps3_alloc_irq(cpu, outlet, virq); |
61 | 193 | BUG_ON(result); | |
62 | pr_debug("%s:%d: interrupt_id %u => outlet %lu, virq %u\n", | ||
63 | __func__, __LINE__, interrupt_id, outlet, *virq); | ||
64 | 194 | ||
65 | return 0; | 195 | return result; |
66 | } | 196 | } |
197 | EXPORT_SYMBOL_GPL(ps3_alloc_io_irq); | ||
67 | 198 | ||
68 | int ps3_free_io_irq(unsigned int virq) | 199 | int ps3_free_io_irq(unsigned int virq) |
69 | { | 200 | { |
@@ -75,13 +206,16 @@ int ps3_free_io_irq(unsigned int virq) | |||
75 | pr_debug("%s:%d: lv1_destruct_io_irq_outlet failed: %s\n", | 206 | pr_debug("%s:%d: lv1_destruct_io_irq_outlet failed: %s\n", |
76 | __func__, __LINE__, ps3_result(result)); | 207 | __func__, __LINE__, ps3_result(result)); |
77 | 208 | ||
78 | irq_dispose_mapping(virq); | 209 | ps3_free_irq(virq); |
79 | 210 | ||
80 | return result; | 211 | return result; |
81 | } | 212 | } |
213 | EXPORT_SYMBOL_GPL(ps3_free_io_irq); | ||
82 | 214 | ||
83 | /** | 215 | /** |
84 | * ps3_alloc_event_irq - Allocate a virq for use with a system event. | 216 | * ps3_alloc_event_irq - Allocate a virq for use with a system event. |
217 | * @cpu: enum ps3_cpu_binding indicating the cpu the interrupt should be | ||
218 | * serviced on. | ||
85 | * @virq: The assigned Linux virq. | 219 | * @virq: The assigned Linux virq. |
86 | * | 220 | * |
87 | * The virq can be used with lv1_connect_interrupt_event_receive_port() to | 221 | * The virq can be used with lv1_connect_interrupt_event_receive_port() to |
@@ -89,7 +223,7 @@ int ps3_free_io_irq(unsigned int virq) | |||
89 | * events. | 223 | * events. |
90 | */ | 224 | */ |
91 | 225 | ||
92 | int ps3_alloc_event_irq(unsigned int *virq) | 226 | int ps3_alloc_event_irq(enum ps3_cpu_binding cpu, unsigned int *virq) |
93 | { | 227 | { |
94 | int result; | 228 | int result; |
95 | unsigned long outlet; | 229 | unsigned long outlet; |
@@ -103,12 +237,10 @@ int ps3_alloc_event_irq(unsigned int *virq) | |||
103 | return result; | 237 | return result; |
104 | } | 238 | } |
105 | 239 | ||
106 | *virq = irq_create_mapping(NULL, outlet); | 240 | result = ps3_alloc_irq(cpu, outlet, virq); |
107 | 241 | BUG_ON(result); | |
108 | pr_debug("%s:%d: outlet %lu, virq %u\n", __func__, __LINE__, outlet, | ||
109 | *virq); | ||
110 | 242 | ||
111 | return 0; | 243 | return result; |
112 | } | 244 | } |
113 | 245 | ||
114 | int ps3_free_event_irq(unsigned int virq) | 246 | int ps3_free_event_irq(unsigned int virq) |
@@ -123,7 +255,7 @@ int ps3_free_event_irq(unsigned int virq) | |||
123 | pr_debug("%s:%d: lv1_destruct_event_receive_port failed: %s\n", | 255 | pr_debug("%s:%d: lv1_destruct_event_receive_port failed: %s\n", |
124 | __func__, __LINE__, ps3_result(result)); | 256 | __func__, __LINE__, ps3_result(result)); |
125 | 257 | ||
126 | irq_dispose_mapping(virq); | 258 | ps3_free_irq(virq); |
127 | 259 | ||
128 | pr_debug(" <- %s:%d\n", __func__, __LINE__); | 260 | pr_debug(" <- %s:%d\n", __func__, __LINE__); |
129 | return result; | 261 | return result; |
@@ -136,6 +268,8 @@ int ps3_send_event_locally(unsigned int virq) | |||
136 | 268 | ||
137 | /** | 269 | /** |
138 | * ps3_connect_event_irq - Assign a virq to a system bus device. | 270 | * ps3_connect_event_irq - Assign a virq to a system bus device. |
271 | * @cpu: enum ps3_cpu_binding indicating the cpu the interrupt should be | ||
272 | * serviced on. | ||
139 | * @did: The HV device identifier read from the system repository. | 273 | * @did: The HV device identifier read from the system repository. |
140 | * @interrupt_id: The device interrupt id read from the system repository. | 274 | * @interrupt_id: The device interrupt id read from the system repository. |
141 | * @virq: The assigned Linux virq. | 275 | * @virq: The assigned Linux virq. |
@@ -144,12 +278,13 @@ int ps3_send_event_locally(unsigned int virq) | |||
144 | * coresponds to the software interrupt number. | 278 | * coresponds to the software interrupt number. |
145 | */ | 279 | */ |
146 | 280 | ||
147 | int ps3_connect_event_irq(const struct ps3_device_id *did, | 281 | int ps3_connect_event_irq(enum ps3_cpu_binding cpu, |
148 | unsigned int interrupt_id, unsigned int *virq) | 282 | const struct ps3_device_id *did, unsigned int interrupt_id, |
283 | unsigned int *virq) | ||
149 | { | 284 | { |
150 | int result; | 285 | int result; |
151 | 286 | ||
152 | result = ps3_alloc_event_irq(virq); | 287 | result = ps3_alloc_event_irq(cpu, virq); |
153 | 288 | ||
154 | if (result) | 289 | if (result) |
155 | return result; | 290 | return result; |
@@ -196,6 +331,8 @@ int ps3_disconnect_event_irq(const struct ps3_device_id *did, | |||
196 | 331 | ||
197 | /** | 332 | /** |
198 | * ps3_alloc_vuart_irq - Configure the system virtual uart virq. | 333 | * ps3_alloc_vuart_irq - Configure the system virtual uart virq. |
334 | * @cpu: enum ps3_cpu_binding indicating the cpu the interrupt should be | ||
335 | * serviced on. | ||
199 | * @virt_addr_bmp: The caller supplied virtual uart interrupt bitmap. | 336 | * @virt_addr_bmp: The caller supplied virtual uart interrupt bitmap. |
200 | * @virq: The assigned Linux virq. | 337 | * @virq: The assigned Linux virq. |
201 | * | 338 | * |
@@ -203,13 +340,14 @@ int ps3_disconnect_event_irq(const struct ps3_device_id *did, | |||
203 | * freeing the interrupt will return a wrong state error. | 340 | * freeing the interrupt will return a wrong state error. |
204 | */ | 341 | */ |
205 | 342 | ||
206 | int ps3_alloc_vuart_irq(void* virt_addr_bmp, unsigned int *virq) | 343 | int ps3_alloc_vuart_irq(enum ps3_cpu_binding cpu, void* virt_addr_bmp, |
344 | unsigned int *virq) | ||
207 | { | 345 | { |
208 | int result; | 346 | int result; |
209 | unsigned long outlet; | 347 | unsigned long outlet; |
210 | unsigned long lpar_addr; | 348 | u64 lpar_addr; |
211 | 349 | ||
212 | BUG_ON(!is_kernel_addr((unsigned long)virt_addr_bmp)); | 350 | BUG_ON(!is_kernel_addr((u64)virt_addr_bmp)); |
213 | 351 | ||
214 | lpar_addr = ps3_mm_phys_to_lpar(__pa(virt_addr_bmp)); | 352 | lpar_addr = ps3_mm_phys_to_lpar(__pa(virt_addr_bmp)); |
215 | 353 | ||
@@ -221,12 +359,10 @@ int ps3_alloc_vuart_irq(void* virt_addr_bmp, unsigned int *virq) | |||
221 | return result; | 359 | return result; |
222 | } | 360 | } |
223 | 361 | ||
224 | *virq = irq_create_mapping(NULL, outlet); | 362 | result = ps3_alloc_irq(cpu, outlet, virq); |
225 | 363 | BUG_ON(result); | |
226 | pr_debug("%s:%d: outlet %lu, virq %u\n", __func__, __LINE__, | ||
227 | outlet, *virq); | ||
228 | 364 | ||
229 | return 0; | 365 | return result; |
230 | } | 366 | } |
231 | 367 | ||
232 | int ps3_free_vuart_irq(unsigned int virq) | 368 | int ps3_free_vuart_irq(unsigned int virq) |
@@ -241,21 +377,23 @@ int ps3_free_vuart_irq(unsigned int virq) | |||
241 | return result; | 377 | return result; |
242 | } | 378 | } |
243 | 379 | ||
244 | irq_dispose_mapping(virq); | 380 | ps3_free_irq(virq); |
245 | 381 | ||
246 | return result; | 382 | return result; |
247 | } | 383 | } |
248 | 384 | ||
249 | /** | 385 | /** |
250 | * ps3_alloc_spe_irq - Configure an spe virq. | 386 | * ps3_alloc_spe_irq - Configure an spe virq. |
387 | * @cpu: enum ps3_cpu_binding indicating the cpu the interrupt should be | ||
388 | * serviced on. | ||
251 | * @spe_id: The spe_id returned from lv1_construct_logical_spe(). | 389 | * @spe_id: The spe_id returned from lv1_construct_logical_spe(). |
252 | * @class: The spe interrupt class {0,1,2}. | 390 | * @class: The spe interrupt class {0,1,2}. |
253 | * @virq: The assigned Linux virq. | 391 | * @virq: The assigned Linux virq. |
254 | * | 392 | * |
255 | */ | 393 | */ |
256 | 394 | ||
257 | int ps3_alloc_spe_irq(unsigned long spe_id, unsigned int class, | 395 | int ps3_alloc_spe_irq(enum ps3_cpu_binding cpu, unsigned long spe_id, |
258 | unsigned int *virq) | 396 | unsigned int class, unsigned int *virq) |
259 | { | 397 | { |
260 | int result; | 398 | int result; |
261 | unsigned long outlet; | 399 | unsigned long outlet; |
@@ -270,73 +408,24 @@ int ps3_alloc_spe_irq(unsigned long spe_id, unsigned int class, | |||
270 | return result; | 408 | return result; |
271 | } | 409 | } |
272 | 410 | ||
273 | *virq = irq_create_mapping(NULL, outlet); | 411 | result = ps3_alloc_irq(cpu, outlet, virq); |
274 | 412 | BUG_ON(result); | |
275 | pr_debug("%s:%d: spe_id %lu, class %u, outlet %lu, virq %u\n", | ||
276 | __func__, __LINE__, spe_id, class, outlet, *virq); | ||
277 | 413 | ||
278 | return 0; | 414 | return result; |
279 | } | 415 | } |
280 | 416 | ||
281 | int ps3_free_spe_irq(unsigned int virq) | 417 | int ps3_free_spe_irq(unsigned int virq) |
282 | { | 418 | { |
283 | irq_dispose_mapping(virq); | 419 | ps3_free_irq(virq); |
284 | return 0; | 420 | return 0; |
285 | } | 421 | } |
286 | 422 | ||
423 | |||
287 | #define PS3_INVALID_OUTLET ((irq_hw_number_t)-1) | 424 | #define PS3_INVALID_OUTLET ((irq_hw_number_t)-1) |
288 | #define PS3_PLUG_MAX 63 | 425 | #define PS3_PLUG_MAX 63 |
289 | 426 | ||
290 | /** | ||
291 | * struct bmp - a per cpu irq status and mask bitmap structure | ||
292 | * @status: 256 bit status bitmap indexed by plug | ||
293 | * @unused_1: | ||
294 | * @mask: 256 bit mask bitmap indexed by plug | ||
295 | * @unused_2: | ||
296 | * @lock: | ||
297 | * @ipi_debug_brk_mask: | ||
298 | * | ||
299 | * The HV mantains per SMT thread mappings of HV outlet to HV plug on | ||
300 | * behalf of the guest. These mappings are implemented as 256 bit guest | ||
301 | * supplied bitmaps indexed by plug number. The address of the bitmaps are | ||
302 | * registered with the HV through lv1_configure_irq_state_bitmap(). | ||
303 | * | ||
304 | * The HV supports 256 plugs per thread, assigned as {0..255}, for a total | ||
305 | * of 512 plugs supported on a processor. To simplify the logic this | ||
306 | * implementation equates HV plug value to linux virq value, constrains each | ||
307 | * interrupt to have a system wide unique plug number, and limits the range | ||
308 | * of the plug values to map into the first dword of the bitmaps. This | ||
309 | * gives a usable range of plug values of {NUM_ISA_INTERRUPTS..63}. Note | ||
310 | * that there is no constraint on how many in this set an individual thread | ||
311 | * can aquire. | ||
312 | */ | ||
313 | |||
314 | struct bmp { | ||
315 | struct { | ||
316 | unsigned long status; | ||
317 | unsigned long unused_1[3]; | ||
318 | unsigned long mask; | ||
319 | unsigned long unused_2[3]; | ||
320 | } __attribute__ ((packed)); | ||
321 | spinlock_t lock; | ||
322 | unsigned long ipi_debug_brk_mask; | ||
323 | }; | ||
324 | |||
325 | /** | ||
326 | * struct private - a per cpu data structure | ||
327 | * @node: HV node id | ||
328 | * @cpu: HV thread id | ||
329 | * @bmp: an HV bmp structure | ||
330 | */ | ||
331 | |||
332 | struct private { | ||
333 | unsigned long node; | ||
334 | unsigned int cpu; | ||
335 | struct bmp bmp; | ||
336 | }; | ||
337 | |||
338 | #if defined(DEBUG) | 427 | #if defined(DEBUG) |
339 | static void _dump_64_bmp(const char *header, const unsigned long *p, unsigned cpu, | 428 | static void _dump_64_bmp(const char *header, const u64 *p, unsigned cpu, |
340 | const char* func, int line) | 429 | const char* func, int line) |
341 | { | 430 | { |
342 | pr_debug("%s:%d: %s %u {%04lx_%04lx_%04lx_%04lx}\n", | 431 | pr_debug("%s:%d: %s %u {%04lx_%04lx_%04lx_%04lx}\n", |
@@ -346,14 +435,14 @@ static void _dump_64_bmp(const char *header, const unsigned long *p, unsigned cp | |||
346 | } | 435 | } |
347 | 436 | ||
348 | static void __attribute__ ((unused)) _dump_256_bmp(const char *header, | 437 | static void __attribute__ ((unused)) _dump_256_bmp(const char *header, |
349 | const unsigned long *p, unsigned cpu, const char* func, int line) | 438 | const u64 *p, unsigned cpu, const char* func, int line) |
350 | { | 439 | { |
351 | pr_debug("%s:%d: %s %u {%016lx:%016lx:%016lx:%016lx}\n", | 440 | pr_debug("%s:%d: %s %u {%016lx:%016lx:%016lx:%016lx}\n", |
352 | func, line, header, cpu, p[0], p[1], p[2], p[3]); | 441 | func, line, header, cpu, p[0], p[1], p[2], p[3]); |
353 | } | 442 | } |
354 | 443 | ||
355 | #define dump_bmp(_x) _dump_bmp(_x, __func__, __LINE__) | 444 | #define dump_bmp(_x) _dump_bmp(_x, __func__, __LINE__) |
356 | static void _dump_bmp(struct private* pd, const char* func, int line) | 445 | static void _dump_bmp(struct ps3_private* pd, const char* func, int line) |
357 | { | 446 | { |
358 | unsigned long flags; | 447 | unsigned long flags; |
359 | 448 | ||
@@ -364,7 +453,7 @@ static void _dump_bmp(struct private* pd, const char* func, int line) | |||
364 | } | 453 | } |
365 | 454 | ||
366 | #define dump_mask(_x) _dump_mask(_x, __func__, __LINE__) | 455 | #define dump_mask(_x) _dump_mask(_x, __func__, __LINE__) |
367 | static void __attribute__ ((unused)) _dump_mask(struct private* pd, | 456 | static void __attribute__ ((unused)) _dump_mask(struct ps3_private* pd, |
368 | const char* func, int line) | 457 | const char* func, int line) |
369 | { | 458 | { |
370 | unsigned long flags; | 459 | unsigned long flags; |
@@ -374,109 +463,94 @@ static void __attribute__ ((unused)) _dump_mask(struct private* pd, | |||
374 | spin_unlock_irqrestore(&pd->bmp.lock, flags); | 463 | spin_unlock_irqrestore(&pd->bmp.lock, flags); |
375 | } | 464 | } |
376 | #else | 465 | #else |
377 | static void dump_bmp(struct private* pd) {}; | 466 | static void dump_bmp(struct ps3_private* pd) {}; |
378 | #endif /* defined(DEBUG) */ | 467 | #endif /* defined(DEBUG) */ |
379 | 468 | ||
380 | static void chip_mask(unsigned int virq) | 469 | static void ps3_chip_mask(unsigned int virq) |
381 | { | 470 | { |
471 | struct ps3_private *pd = get_irq_chip_data(virq); | ||
472 | u64 bit = 0x8000000000000000UL >> virq; | ||
473 | u64 *p = &pd->bmp.mask; | ||
474 | u64 old; | ||
382 | unsigned long flags; | 475 | unsigned long flags; |
383 | struct private *pd = get_irq_chip_data(virq); | ||
384 | 476 | ||
385 | pr_debug("%s:%d: cpu %u, virq %d\n", __func__, __LINE__, pd->cpu, virq); | 477 | pr_debug("%s:%d: cpu %u, virq %d\n", __func__, __LINE__, pd->cpu, virq); |
386 | 478 | ||
387 | BUG_ON(virq < NUM_ISA_INTERRUPTS); | 479 | local_irq_save(flags); |
388 | BUG_ON(virq > PS3_PLUG_MAX); | 480 | asm volatile( |
389 | 481 | "1: ldarx %0,0,%3\n" | |
390 | spin_lock_irqsave(&pd->bmp.lock, flags); | 482 | "andc %0,%0,%2\n" |
391 | pd->bmp.mask &= ~(0x8000000000000000UL >> virq); | 483 | "stdcx. %0,0,%3\n" |
392 | spin_unlock_irqrestore(&pd->bmp.lock, flags); | 484 | "bne- 1b" |
485 | : "=&r" (old), "+m" (*p) | ||
486 | : "r" (bit), "r" (p) | ||
487 | : "cc" ); | ||
393 | 488 | ||
394 | lv1_did_update_interrupt_mask(pd->node, pd->cpu); | 489 | lv1_did_update_interrupt_mask(pd->node, pd->cpu); |
490 | local_irq_restore(flags); | ||
395 | } | 491 | } |
396 | 492 | ||
397 | static void chip_unmask(unsigned int virq) | 493 | static void ps3_chip_unmask(unsigned int virq) |
398 | { | 494 | { |
495 | struct ps3_private *pd = get_irq_chip_data(virq); | ||
496 | u64 bit = 0x8000000000000000UL >> virq; | ||
497 | u64 *p = &pd->bmp.mask; | ||
498 | u64 old; | ||
399 | unsigned long flags; | 499 | unsigned long flags; |
400 | struct private *pd = get_irq_chip_data(virq); | ||
401 | 500 | ||
402 | pr_debug("%s:%d: cpu %u, virq %d\n", __func__, __LINE__, pd->cpu, virq); | 501 | pr_debug("%s:%d: cpu %u, virq %d\n", __func__, __LINE__, pd->cpu, virq); |
403 | 502 | ||
404 | BUG_ON(virq < NUM_ISA_INTERRUPTS); | 503 | local_irq_save(flags); |
405 | BUG_ON(virq > PS3_PLUG_MAX); | 504 | asm volatile( |
406 | 505 | "1: ldarx %0,0,%3\n" | |
407 | spin_lock_irqsave(&pd->bmp.lock, flags); | 506 | "or %0,%0,%2\n" |
408 | pd->bmp.mask |= (0x8000000000000000UL >> virq); | 507 | "stdcx. %0,0,%3\n" |
409 | spin_unlock_irqrestore(&pd->bmp.lock, flags); | 508 | "bne- 1b" |
509 | : "=&r" (old), "+m" (*p) | ||
510 | : "r" (bit), "r" (p) | ||
511 | : "cc" ); | ||
410 | 512 | ||
411 | lv1_did_update_interrupt_mask(pd->node, pd->cpu); | 513 | lv1_did_update_interrupt_mask(pd->node, pd->cpu); |
514 | local_irq_restore(flags); | ||
412 | } | 515 | } |
413 | 516 | ||
414 | static void chip_eoi(unsigned int virq) | 517 | static void ps3_chip_eoi(unsigned int virq) |
415 | { | 518 | { |
416 | lv1_end_of_interrupt(virq); | 519 | const struct ps3_private *pd = get_irq_chip_data(virq); |
520 | lv1_end_of_interrupt_ext(pd->node, pd->cpu, virq); | ||
417 | } | 521 | } |
418 | 522 | ||
419 | static struct irq_chip irq_chip = { | 523 | static struct irq_chip irq_chip = { |
420 | .typename = "ps3", | 524 | .typename = "ps3", |
421 | .mask = chip_mask, | 525 | .mask = ps3_chip_mask, |
422 | .unmask = chip_unmask, | 526 | .unmask = ps3_chip_unmask, |
423 | .eoi = chip_eoi, | 527 | .eoi = ps3_chip_eoi, |
424 | }; | 528 | }; |
425 | 529 | ||
426 | static void host_unmap(struct irq_host *h, unsigned int virq) | 530 | static void ps3_host_unmap(struct irq_host *h, unsigned int virq) |
427 | { | 531 | { |
428 | int result; | 532 | set_irq_chip_data(virq, NULL); |
429 | |||
430 | pr_debug("%s:%d: virq %d\n", __func__, __LINE__, virq); | ||
431 | |||
432 | lv1_disconnect_irq_plug(virq); | ||
433 | |||
434 | result = set_irq_chip_data(virq, NULL); | ||
435 | BUG_ON(result); | ||
436 | } | 533 | } |
437 | 534 | ||
438 | static DEFINE_PER_CPU(struct private, private); | 535 | static int ps3_host_map(struct irq_host *h, unsigned int virq, |
439 | |||
440 | static int host_map(struct irq_host *h, unsigned int virq, | ||
441 | irq_hw_number_t hwirq) | 536 | irq_hw_number_t hwirq) |
442 | { | 537 | { |
443 | int result; | 538 | pr_debug("%s:%d: hwirq %lu, virq %u\n", __func__, __LINE__, hwirq, |
444 | unsigned int cpu; | ||
445 | |||
446 | pr_debug(" -> %s:%d\n", __func__, __LINE__); | ||
447 | pr_debug("%s:%d: hwirq %lu => virq %u\n", __func__, __LINE__, hwirq, | ||
448 | virq); | 539 | virq); |
449 | 540 | ||
450 | /* bind this virq to a cpu */ | ||
451 | |||
452 | preempt_disable(); | ||
453 | cpu = smp_processor_id(); | ||
454 | result = lv1_connect_irq_plug(virq, hwirq); | ||
455 | preempt_enable(); | ||
456 | |||
457 | if (result) { | ||
458 | pr_info("%s:%d: lv1_connect_irq_plug failed:" | ||
459 | " %s\n", __func__, __LINE__, ps3_result(result)); | ||
460 | return -EPERM; | ||
461 | } | ||
462 | |||
463 | result = set_irq_chip_data(virq, &per_cpu(private, cpu)); | ||
464 | BUG_ON(result); | ||
465 | |||
466 | set_irq_chip_and_handler(virq, &irq_chip, handle_fasteoi_irq); | 541 | set_irq_chip_and_handler(virq, &irq_chip, handle_fasteoi_irq); |
467 | 542 | ||
468 | pr_debug(" <- %s:%d\n", __func__, __LINE__); | 543 | return 0; |
469 | return result; | ||
470 | } | 544 | } |
471 | 545 | ||
472 | static struct irq_host_ops host_ops = { | 546 | static struct irq_host_ops ps3_host_ops = { |
473 | .map = host_map, | 547 | .map = ps3_host_map, |
474 | .unmap = host_unmap, | 548 | .unmap = ps3_host_unmap, |
475 | }; | 549 | }; |
476 | 550 | ||
477 | void __init ps3_register_ipi_debug_brk(unsigned int cpu, unsigned int virq) | 551 | void __init ps3_register_ipi_debug_brk(unsigned int cpu, unsigned int virq) |
478 | { | 552 | { |
479 | struct private *pd = &per_cpu(private, cpu); | 553 | struct ps3_private *pd = &per_cpu(ps3_private, cpu); |
480 | 554 | ||
481 | pd->bmp.ipi_debug_brk_mask = 0x8000000000000000UL >> virq; | 555 | pd->bmp.ipi_debug_brk_mask = 0x8000000000000000UL >> virq; |
482 | 556 | ||
@@ -484,57 +558,32 @@ void __init ps3_register_ipi_debug_brk(unsigned int cpu, unsigned int virq) | |||
484 | cpu, virq, pd->bmp.ipi_debug_brk_mask); | 558 | cpu, virq, pd->bmp.ipi_debug_brk_mask); |
485 | } | 559 | } |
486 | 560 | ||
487 | static int bmp_get_and_clear_status_bit(struct bmp *m) | 561 | unsigned int ps3_get_irq(void) |
488 | { | 562 | { |
489 | unsigned long flags; | 563 | struct ps3_private *pd = &__get_cpu_var(ps3_private); |
490 | unsigned int bit; | 564 | u64 x = (pd->bmp.status & pd->bmp.mask); |
491 | unsigned long x; | 565 | unsigned int plug; |
492 | |||
493 | spin_lock_irqsave(&m->lock, flags); | ||
494 | 566 | ||
495 | /* check for ipi break first to stop this cpu ASAP */ | 567 | /* check for ipi break first to stop this cpu ASAP */ |
496 | 568 | ||
497 | if (m->status & m->ipi_debug_brk_mask) { | 569 | if (x & pd->bmp.ipi_debug_brk_mask) |
498 | m->status &= ~m->ipi_debug_brk_mask; | 570 | x &= pd->bmp.ipi_debug_brk_mask; |
499 | spin_unlock_irqrestore(&m->lock, flags); | ||
500 | return __ilog2(m->ipi_debug_brk_mask); | ||
501 | } | ||
502 | |||
503 | x = (m->status & m->mask); | ||
504 | 571 | ||
505 | for (bit = NUM_ISA_INTERRUPTS, x <<= bit; x; bit++, x <<= 1) | 572 | asm volatile("cntlzd %0,%1" : "=r" (plug) : "r" (x)); |
506 | if (x & 0x8000000000000000UL) { | 573 | plug &= 0x3f; |
507 | m->status &= ~(0x8000000000000000UL >> bit); | ||
508 | spin_unlock_irqrestore(&m->lock, flags); | ||
509 | return bit; | ||
510 | } | ||
511 | 574 | ||
512 | spin_unlock_irqrestore(&m->lock, flags); | 575 | if (unlikely(plug) == NO_IRQ) { |
513 | |||
514 | pr_debug("%s:%d: not found\n", __func__, __LINE__); | ||
515 | return -1; | ||
516 | } | ||
517 | |||
518 | unsigned int ps3_get_irq(void) | ||
519 | { | ||
520 | int plug; | ||
521 | |||
522 | struct private *pd = &__get_cpu_var(private); | ||
523 | |||
524 | plug = bmp_get_and_clear_status_bit(&pd->bmp); | ||
525 | |||
526 | if (plug < 1) { | ||
527 | pr_debug("%s:%d: no plug found: cpu %u\n", __func__, __LINE__, | 576 | pr_debug("%s:%d: no plug found: cpu %u\n", __func__, __LINE__, |
528 | pd->cpu); | 577 | pd->cpu); |
529 | dump_bmp(&per_cpu(private, 0)); | 578 | dump_bmp(&per_cpu(ps3_private, 0)); |
530 | dump_bmp(&per_cpu(private, 1)); | 579 | dump_bmp(&per_cpu(ps3_private, 1)); |
531 | return NO_IRQ; | 580 | return NO_IRQ; |
532 | } | 581 | } |
533 | 582 | ||
534 | #if defined(DEBUG) | 583 | #if defined(DEBUG) |
535 | if (plug < NUM_ISA_INTERRUPTS || plug > PS3_PLUG_MAX) { | 584 | if (unlikely(plug < NUM_ISA_INTERRUPTS || plug > PS3_PLUG_MAX)) { |
536 | dump_bmp(&per_cpu(private, 0)); | 585 | dump_bmp(&per_cpu(ps3_private, 0)); |
537 | dump_bmp(&per_cpu(private, 1)); | 586 | dump_bmp(&per_cpu(ps3_private, 1)); |
538 | BUG(); | 587 | BUG(); |
539 | } | 588 | } |
540 | #endif | 589 | #endif |
@@ -544,26 +593,27 @@ unsigned int ps3_get_irq(void) | |||
544 | void __init ps3_init_IRQ(void) | 593 | void __init ps3_init_IRQ(void) |
545 | { | 594 | { |
546 | int result; | 595 | int result; |
547 | unsigned long node; | ||
548 | unsigned cpu; | 596 | unsigned cpu; |
549 | struct irq_host *host; | 597 | struct irq_host *host; |
550 | 598 | ||
551 | lv1_get_logical_ppe_id(&node); | 599 | host = irq_alloc_host(IRQ_HOST_MAP_NOMAP, 0, &ps3_host_ops, |
552 | |||
553 | host = irq_alloc_host(IRQ_HOST_MAP_NOMAP, 0, &host_ops, | ||
554 | PS3_INVALID_OUTLET); | 600 | PS3_INVALID_OUTLET); |
555 | irq_set_default_host(host); | 601 | irq_set_default_host(host); |
556 | irq_set_virq_count(PS3_PLUG_MAX + 1); | 602 | irq_set_virq_count(PS3_PLUG_MAX + 1); |
557 | 603 | ||
558 | for_each_possible_cpu(cpu) { | 604 | for_each_possible_cpu(cpu) { |
559 | struct private *pd = &per_cpu(private, cpu); | 605 | struct ps3_private *pd = &per_cpu(ps3_private, cpu); |
560 | 606 | ||
561 | pd->node = node; | 607 | lv1_get_logical_ppe_id(&pd->node); |
562 | pd->cpu = cpu; | 608 | pd->cpu = get_hard_smp_processor_id(cpu); |
563 | spin_lock_init(&pd->bmp.lock); | 609 | spin_lock_init(&pd->bmp.lock); |
564 | 610 | ||
565 | result = lv1_configure_irq_state_bitmap(node, cpu, | 611 | pr_debug("%s:%d: node %lu, cpu %d, bmp %lxh\n", __func__, |
566 | ps3_mm_phys_to_lpar(__pa(&pd->bmp.status))); | 612 | __LINE__, pd->node, pd->cpu, |
613 | ps3_mm_phys_to_lpar(__pa(&pd->bmp))); | ||
614 | |||
615 | result = lv1_configure_irq_state_bitmap(pd->node, pd->cpu, | ||
616 | ps3_mm_phys_to_lpar(__pa(&pd->bmp))); | ||
567 | 617 | ||
568 | if (result) | 618 | if (result) |
569 | pr_debug("%s:%d: lv1_configure_irq_state_bitmap failed:" | 619 | pr_debug("%s:%d: lv1_configure_irq_state_bitmap failed:" |
diff --git a/arch/powerpc/platforms/ps3/mm.c b/arch/powerpc/platforms/ps3/mm.c index 49c0d010d491..42354de3f557 100644 --- a/arch/powerpc/platforms/ps3/mm.c +++ b/arch/powerpc/platforms/ps3/mm.c | |||
@@ -25,7 +25,6 @@ | |||
25 | #include <asm/firmware.h> | 25 | #include <asm/firmware.h> |
26 | #include <asm/lmb.h> | 26 | #include <asm/lmb.h> |
27 | #include <asm/udbg.h> | 27 | #include <asm/udbg.h> |
28 | #include <asm/ps3.h> | ||
29 | #include <asm/lv1call.h> | 28 | #include <asm/lv1call.h> |
30 | 29 | ||
31 | #include "platform.h" | 30 | #include "platform.h" |
diff --git a/arch/powerpc/platforms/ps3/os-area.c b/arch/powerpc/platforms/ps3/os-area.c index 58358305dc10..5c3da08bc0c4 100644 --- a/arch/powerpc/platforms/ps3/os-area.c +++ b/arch/powerpc/platforms/ps3/os-area.c | |||
@@ -22,7 +22,6 @@ | |||
22 | #include <linux/io.h> | 22 | #include <linux/io.h> |
23 | 23 | ||
24 | #include <asm/lmb.h> | 24 | #include <asm/lmb.h> |
25 | #include <asm/ps3.h> | ||
26 | 25 | ||
27 | #include "platform.h" | 26 | #include "platform.h" |
28 | 27 | ||
@@ -59,7 +58,7 @@ struct os_area_header { | |||
59 | u32 ldr_format; | 58 | u32 ldr_format; |
60 | u32 ldr_size; | 59 | u32 ldr_size; |
61 | u32 _reserved_2[6]; | 60 | u32 _reserved_2[6]; |
62 | } __attribute__ ((packed)); | 61 | }; |
63 | 62 | ||
64 | enum { | 63 | enum { |
65 | PARAM_BOOT_FLAG_GAME_OS = 0, | 64 | PARAM_BOOT_FLAG_GAME_OS = 0, |
@@ -67,13 +66,6 @@ enum { | |||
67 | }; | 66 | }; |
68 | 67 | ||
69 | enum { | 68 | enum { |
70 | PARAM_AV_MULTI_OUT_NTSC = 0, | ||
71 | PARAM_AV_MULTI_OUT_PAL_RGB = 1, | ||
72 | PARAM_AV_MULTI_OUT_PAL_YCBCR = 2, | ||
73 | PARAM_AV_MULTI_OUT_SECAM = 3, | ||
74 | }; | ||
75 | |||
76 | enum { | ||
77 | PARAM_CTRL_BUTTON_O_IS_YES = 0, | 69 | PARAM_CTRL_BUTTON_O_IS_YES = 0, |
78 | PARAM_CTRL_BUTTON_X_IS_YES = 1, | 70 | PARAM_CTRL_BUTTON_X_IS_YES = 1, |
79 | }; | 71 | }; |
@@ -114,7 +106,7 @@ struct os_area_params { | |||
114 | u8 dns_primary[4]; | 106 | u8 dns_primary[4]; |
115 | u8 dns_secondary[4]; | 107 | u8 dns_secondary[4]; |
116 | u8 _reserved_5[8]; | 108 | u8 _reserved_5[8]; |
117 | } __attribute__ ((packed)); | 109 | }; |
118 | 110 | ||
119 | /** | 111 | /** |
120 | * struct saved_params - Static working copies of data from the 'Other OS' area. | 112 | * struct saved_params - Static working copies of data from the 'Other OS' area. |
@@ -257,3 +249,13 @@ u64 ps3_os_area_rtc_diff(void) | |||
257 | { | 249 | { |
258 | return saved_params.rtc_diff ? saved_params.rtc_diff : 946684800UL; | 250 | return saved_params.rtc_diff ? saved_params.rtc_diff : 946684800UL; |
259 | } | 251 | } |
252 | |||
253 | /** | ||
254 | * ps3_os_area_get_av_multi_out - Returns the default video mode. | ||
255 | */ | ||
256 | |||
257 | enum ps3_param_av_multi_out ps3_os_area_get_av_multi_out(void) | ||
258 | { | ||
259 | return saved_params.av_multi_out; | ||
260 | } | ||
261 | EXPORT_SYMBOL_GPL(ps3_os_area_get_av_multi_out); | ||
diff --git a/arch/powerpc/platforms/ps3/platform.h b/arch/powerpc/platforms/ps3/platform.h index 23b111bea9d0..ca04f03305c7 100644 --- a/arch/powerpc/platforms/ps3/platform.h +++ b/arch/powerpc/platforms/ps3/platform.h | |||
@@ -22,6 +22,9 @@ | |||
22 | #define _PS3_PLATFORM_H | 22 | #define _PS3_PLATFORM_H |
23 | 23 | ||
24 | #include <linux/rtc.h> | 24 | #include <linux/rtc.h> |
25 | #include <scsi/scsi.h> | ||
26 | |||
27 | #include <asm/ps3.h> | ||
25 | 28 | ||
26 | /* htab */ | 29 | /* htab */ |
27 | 30 | ||
@@ -65,4 +68,152 @@ void ps3_spu_set_platform (void); | |||
65 | static inline void ps3_spu_set_platform (void) {} | 68 | static inline void ps3_spu_set_platform (void) {} |
66 | #endif | 69 | #endif |
67 | 70 | ||
71 | /* repository bus info */ | ||
72 | |||
73 | enum ps3_bus_type { | ||
74 | PS3_BUS_TYPE_SB = 4, | ||
75 | PS3_BUS_TYPE_STORAGE = 5, | ||
76 | }; | ||
77 | |||
78 | enum ps3_dev_type { | ||
79 | PS3_DEV_TYPE_STOR_DISK = TYPE_DISK, /* 0 */ | ||
80 | PS3_DEV_TYPE_SB_GELIC = 3, | ||
81 | PS3_DEV_TYPE_SB_USB = 4, | ||
82 | PS3_DEV_TYPE_STOR_ROM = TYPE_ROM, /* 5 */ | ||
83 | PS3_DEV_TYPE_SB_GPIO = 6, | ||
84 | PS3_DEV_TYPE_STOR_FLASH = TYPE_RBC, /* 14 */ | ||
85 | }; | ||
86 | |||
87 | int ps3_repository_read_bus_str(unsigned int bus_index, const char *bus_str, | ||
88 | u64 *value); | ||
89 | int ps3_repository_read_bus_id(unsigned int bus_index, unsigned int *bus_id); | ||
90 | int ps3_repository_read_bus_type(unsigned int bus_index, | ||
91 | enum ps3_bus_type *bus_type); | ||
92 | int ps3_repository_read_bus_num_dev(unsigned int bus_index, | ||
93 | unsigned int *num_dev); | ||
94 | |||
95 | /* repository bus device info */ | ||
96 | |||
97 | enum ps3_interrupt_type { | ||
98 | PS3_INTERRUPT_TYPE_EVENT_PORT = 2, | ||
99 | PS3_INTERRUPT_TYPE_SB_OHCI = 3, | ||
100 | PS3_INTERRUPT_TYPE_SB_EHCI = 4, | ||
101 | PS3_INTERRUPT_TYPE_OTHER = 5, | ||
102 | }; | ||
103 | |||
104 | enum ps3_reg_type { | ||
105 | PS3_REG_TYPE_SB_OHCI = 3, | ||
106 | PS3_REG_TYPE_SB_EHCI = 4, | ||
107 | PS3_REG_TYPE_SB_GPIO = 5, | ||
108 | }; | ||
109 | |||
110 | int ps3_repository_read_dev_str(unsigned int bus_index, | ||
111 | unsigned int dev_index, const char *dev_str, u64 *value); | ||
112 | int ps3_repository_read_dev_id(unsigned int bus_index, unsigned int dev_index, | ||
113 | unsigned int *dev_id); | ||
114 | int ps3_repository_read_dev_type(unsigned int bus_index, | ||
115 | unsigned int dev_index, enum ps3_dev_type *dev_type); | ||
116 | int ps3_repository_read_dev_intr(unsigned int bus_index, | ||
117 | unsigned int dev_index, unsigned int intr_index, | ||
118 | enum ps3_interrupt_type *intr_type, unsigned int *interrupt_id); | ||
119 | int ps3_repository_read_dev_reg_type(unsigned int bus_index, | ||
120 | unsigned int dev_index, unsigned int reg_index, | ||
121 | enum ps3_reg_type *reg_type); | ||
122 | int ps3_repository_read_dev_reg_addr(unsigned int bus_index, | ||
123 | unsigned int dev_index, unsigned int reg_index, u64 *bus_addr, | ||
124 | u64 *len); | ||
125 | int ps3_repository_read_dev_reg(unsigned int bus_index, | ||
126 | unsigned int dev_index, unsigned int reg_index, | ||
127 | enum ps3_reg_type *reg_type, u64 *bus_addr, u64 *len); | ||
128 | |||
129 | /* repository bus enumerators */ | ||
130 | |||
131 | struct ps3_repository_device { | ||
132 | unsigned int bus_index; | ||
133 | unsigned int dev_index; | ||
134 | struct ps3_device_id did; | ||
135 | }; | ||
136 | |||
137 | int ps3_repository_find_device(enum ps3_bus_type bus_type, | ||
138 | enum ps3_dev_type dev_type, | ||
139 | const struct ps3_repository_device *start_dev, | ||
140 | struct ps3_repository_device *dev); | ||
141 | static inline int ps3_repository_find_first_device( | ||
142 | enum ps3_bus_type bus_type, enum ps3_dev_type dev_type, | ||
143 | struct ps3_repository_device *dev) | ||
144 | { | ||
145 | return ps3_repository_find_device(bus_type, dev_type, NULL, dev); | ||
146 | } | ||
147 | int ps3_repository_find_interrupt(const struct ps3_repository_device *dev, | ||
148 | enum ps3_interrupt_type intr_type, unsigned int *interrupt_id); | ||
149 | int ps3_repository_find_reg(const struct ps3_repository_device *dev, | ||
150 | enum ps3_reg_type reg_type, u64 *bus_addr, u64 *len); | ||
151 | |||
152 | /* repository block device info */ | ||
153 | |||
154 | int ps3_repository_read_stor_dev_port(unsigned int bus_index, | ||
155 | unsigned int dev_index, u64 *port); | ||
156 | int ps3_repository_read_stor_dev_blk_size(unsigned int bus_index, | ||
157 | unsigned int dev_index, u64 *blk_size); | ||
158 | int ps3_repository_read_stor_dev_num_blocks(unsigned int bus_index, | ||
159 | unsigned int dev_index, u64 *num_blocks); | ||
160 | int ps3_repository_read_stor_dev_num_regions(unsigned int bus_index, | ||
161 | unsigned int dev_index, unsigned int *num_regions); | ||
162 | int ps3_repository_read_stor_dev_region_id(unsigned int bus_index, | ||
163 | unsigned int dev_index, unsigned int region_index, | ||
164 | unsigned int *region_id); | ||
165 | int ps3_repository_read_stor_dev_region_size(unsigned int bus_index, | ||
166 | unsigned int dev_index, unsigned int region_index, u64 *region_size); | ||
167 | int ps3_repository_read_stor_dev_region_start(unsigned int bus_index, | ||
168 | unsigned int dev_index, unsigned int region_index, u64 *region_start); | ||
169 | int ps3_repository_read_stor_dev_info(unsigned int bus_index, | ||
170 | unsigned int dev_index, u64 *port, u64 *blk_size, | ||
171 | u64 *num_blocks, unsigned int *num_regions); | ||
172 | int ps3_repository_read_stor_dev_region(unsigned int bus_index, | ||
173 | unsigned int dev_index, unsigned int region_index, | ||
174 | unsigned int *region_id, u64 *region_start, u64 *region_size); | ||
175 | |||
176 | /* repository pu and memory info */ | ||
177 | |||
178 | int ps3_repository_read_num_pu(unsigned int *num_pu); | ||
179 | int ps3_repository_read_ppe_id(unsigned int *pu_index, unsigned int *ppe_id); | ||
180 | int ps3_repository_read_rm_base(unsigned int ppe_id, u64 *rm_base); | ||
181 | int ps3_repository_read_rm_size(unsigned int ppe_id, u64 *rm_size); | ||
182 | int ps3_repository_read_region_total(u64 *region_total); | ||
183 | int ps3_repository_read_mm_info(u64 *rm_base, u64 *rm_size, | ||
184 | u64 *region_total); | ||
185 | |||
186 | /* repository pme info */ | ||
187 | |||
188 | int ps3_repository_read_num_be(unsigned int *num_be); | ||
189 | int ps3_repository_read_be_node_id(unsigned int be_index, u64 *node_id); | ||
190 | int ps3_repository_read_tb_freq(u64 node_id, u64 *tb_freq); | ||
191 | int ps3_repository_read_be_tb_freq(unsigned int be_index, u64 *tb_freq); | ||
192 | |||
193 | /* repository 'Other OS' area */ | ||
194 | |||
195 | int ps3_repository_read_boot_dat_addr(u64 *lpar_addr); | ||
196 | int ps3_repository_read_boot_dat_size(unsigned int *size); | ||
197 | int ps3_repository_read_boot_dat_info(u64 *lpar_addr, unsigned int *size); | ||
198 | |||
199 | /* repository spu info */ | ||
200 | |||
201 | /** | ||
202 | * enum spu_resource_type - Type of spu resource. | ||
203 | * @spu_resource_type_shared: Logical spu is shared with other partions. | ||
204 | * @spu_resource_type_exclusive: Logical spu is not shared with other partions. | ||
205 | * | ||
206 | * Returned by ps3_repository_read_spu_resource_id(). | ||
207 | */ | ||
208 | |||
209 | enum ps3_spu_resource_type { | ||
210 | PS3_SPU_RESOURCE_TYPE_SHARED = 0, | ||
211 | PS3_SPU_RESOURCE_TYPE_EXCLUSIVE = 0x8000000000000000UL, | ||
212 | }; | ||
213 | |||
214 | int ps3_repository_read_num_spu_reserved(unsigned int *num_spu_reserved); | ||
215 | int ps3_repository_read_num_spu_resource_id(unsigned int *num_resource_id); | ||
216 | int ps3_repository_read_spu_resource_id(unsigned int res_index, | ||
217 | enum ps3_spu_resource_type* resource_type, unsigned int *resource_id); | ||
218 | |||
68 | #endif | 219 | #endif |
diff --git a/arch/powerpc/platforms/ps3/repository.c b/arch/powerpc/platforms/ps3/repository.c index 273a0d621bdd..ae586a0e5d3f 100644 --- a/arch/powerpc/platforms/ps3/repository.c +++ b/arch/powerpc/platforms/ps3/repository.c | |||
@@ -18,9 +18,10 @@ | |||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
19 | */ | 19 | */ |
20 | 20 | ||
21 | #include <asm/ps3.h> | ||
22 | #include <asm/lv1call.h> | 21 | #include <asm/lv1call.h> |
23 | 22 | ||
23 | #include "platform.h" | ||
24 | |||
24 | enum ps3_vendor_id { | 25 | enum ps3_vendor_id { |
25 | PS3_VENDOR_ID_NONE = 0, | 26 | PS3_VENDOR_ID_NONE = 0, |
26 | PS3_VENDOR_ID_SONY = 0x8000000000000000UL, | 27 | PS3_VENDOR_ID_SONY = 0x8000000000000000UL, |
@@ -257,7 +258,7 @@ int ps3_repository_read_dev_type(unsigned int bus_index, | |||
257 | 258 | ||
258 | int ps3_repository_read_dev_intr(unsigned int bus_index, | 259 | int ps3_repository_read_dev_intr(unsigned int bus_index, |
259 | unsigned int dev_index, unsigned int intr_index, | 260 | unsigned int dev_index, unsigned int intr_index, |
260 | unsigned int *intr_type, unsigned int* interrupt_id) | 261 | enum ps3_interrupt_type *intr_type, unsigned int* interrupt_id) |
261 | { | 262 | { |
262 | int result; | 263 | int result; |
263 | u64 v1; | 264 | u64 v1; |
@@ -275,7 +276,8 @@ int ps3_repository_read_dev_intr(unsigned int bus_index, | |||
275 | } | 276 | } |
276 | 277 | ||
277 | int ps3_repository_read_dev_reg_type(unsigned int bus_index, | 278 | int ps3_repository_read_dev_reg_type(unsigned int bus_index, |
278 | unsigned int dev_index, unsigned int reg_index, unsigned int *reg_type) | 279 | unsigned int dev_index, unsigned int reg_index, |
280 | enum ps3_reg_type *reg_type) | ||
279 | { | 281 | { |
280 | int result; | 282 | int result; |
281 | u64 v1; | 283 | u64 v1; |
@@ -302,8 +304,8 @@ int ps3_repository_read_dev_reg_addr(unsigned int bus_index, | |||
302 | } | 304 | } |
303 | 305 | ||
304 | int ps3_repository_read_dev_reg(unsigned int bus_index, | 306 | int ps3_repository_read_dev_reg(unsigned int bus_index, |
305 | unsigned int dev_index, unsigned int reg_index, unsigned int *reg_type, | 307 | unsigned int dev_index, unsigned int reg_index, |
306 | u64 *bus_addr, u64 *len) | 308 | enum ps3_reg_type *reg_type, u64 *bus_addr, u64 *len) |
307 | { | 309 | { |
308 | int result = ps3_repository_read_dev_reg_type(bus_index, dev_index, | 310 | int result = ps3_repository_read_dev_reg_type(bus_index, dev_index, |
309 | reg_index, reg_type); | 311 | reg_index, reg_type); |
@@ -343,7 +345,7 @@ int ps3_repository_dump_resource_info(unsigned int bus_index, | |||
343 | } | 345 | } |
344 | 346 | ||
345 | for (res_index = 0; res_index < 10; res_index++) { | 347 | for (res_index = 0; res_index < 10; res_index++) { |
346 | enum ps3_region_type reg_type; | 348 | enum ps3_reg_type reg_type; |
347 | u64 bus_addr; | 349 | u64 bus_addr; |
348 | u64 len; | 350 | u64 len; |
349 | 351 | ||
@@ -367,7 +369,55 @@ int ps3_repository_dump_resource_info(unsigned int bus_index, | |||
367 | return result; | 369 | return result; |
368 | } | 370 | } |
369 | 371 | ||
370 | static int dump_device_info(unsigned int bus_index, unsigned int num_dev) | 372 | static int dump_stor_dev_info(unsigned int bus_index, unsigned int dev_index) |
373 | { | ||
374 | int result = 0; | ||
375 | unsigned int num_regions, region_index; | ||
376 | u64 port, blk_size, num_blocks; | ||
377 | |||
378 | pr_debug(" -> %s:%d: (%u:%u)\n", __func__, __LINE__, | ||
379 | bus_index, dev_index); | ||
380 | |||
381 | result = ps3_repository_read_stor_dev_info(bus_index, dev_index, &port, | ||
382 | &blk_size, &num_blocks, &num_regions); | ||
383 | if (result) { | ||
384 | pr_debug("%s:%d ps3_repository_read_stor_dev_info" | ||
385 | " (%u:%u) failed\n", __func__, __LINE__, | ||
386 | bus_index, dev_index); | ||
387 | goto out; | ||
388 | } | ||
389 | |||
390 | pr_debug("%s:%d (%u:%u): port %lu, blk_size %lu, num_blocks " | ||
391 | "%lu, num_regions %u\n", | ||
392 | __func__, __LINE__, bus_index, dev_index, port, | ||
393 | blk_size, num_blocks, num_regions); | ||
394 | |||
395 | for (region_index = 0; region_index < num_regions; region_index++) { | ||
396 | unsigned int region_id; | ||
397 | u64 region_start, region_size; | ||
398 | |||
399 | result = ps3_repository_read_stor_dev_region(bus_index, | ||
400 | dev_index, region_index, ®ion_id, ®ion_start, | ||
401 | ®ion_size); | ||
402 | if (result) { | ||
403 | pr_debug("%s:%d ps3_repository_read_stor_dev_region" | ||
404 | " (%u:%u) failed\n", __func__, __LINE__, | ||
405 | bus_index, dev_index); | ||
406 | break; | ||
407 | } | ||
408 | |||
409 | pr_debug("%s:%d (%u:%u) region_id %u, start %lxh, size %lxh\n", | ||
410 | __func__, __LINE__, bus_index, dev_index, region_id, | ||
411 | region_start, region_size); | ||
412 | } | ||
413 | |||
414 | out: | ||
415 | pr_debug(" <- %s:%d\n", __func__, __LINE__); | ||
416 | return result; | ||
417 | } | ||
418 | |||
419 | static int dump_device_info(unsigned int bus_index, enum ps3_bus_type bus_type, | ||
420 | unsigned int num_dev) | ||
371 | { | 421 | { |
372 | int result = 0; | 422 | int result = 0; |
373 | unsigned int dev_index; | 423 | unsigned int dev_index; |
@@ -402,6 +452,9 @@ static int dump_device_info(unsigned int bus_index, unsigned int num_dev) | |||
402 | __LINE__, bus_index, dev_index, dev_type, dev_id); | 452 | __LINE__, bus_index, dev_index, dev_type, dev_id); |
403 | 453 | ||
404 | ps3_repository_dump_resource_info(bus_index, dev_index); | 454 | ps3_repository_dump_resource_info(bus_index, dev_index); |
455 | |||
456 | if (bus_type == PS3_BUS_TYPE_STORAGE) | ||
457 | dump_stor_dev_info(bus_index, dev_index); | ||
405 | } | 458 | } |
406 | 459 | ||
407 | pr_debug(" <- %s:%d\n", __func__, __LINE__); | 460 | pr_debug(" <- %s:%d\n", __func__, __LINE__); |
@@ -452,7 +505,7 @@ int ps3_repository_dump_bus_info(void) | |||
452 | __func__, __LINE__, bus_index, bus_type, bus_id, | 505 | __func__, __LINE__, bus_index, bus_type, bus_id, |
453 | num_dev); | 506 | num_dev); |
454 | 507 | ||
455 | dump_device_info(bus_index, num_dev); | 508 | dump_device_info(bus_index, bus_type, num_dev); |
456 | } | 509 | } |
457 | 510 | ||
458 | pr_debug(" <- %s:%d\n", __func__, __LINE__); | 511 | pr_debug(" <- %s:%d\n", __func__, __LINE__); |
@@ -487,7 +540,8 @@ static int find_device(unsigned int bus_index, unsigned int num_dev, | |||
487 | break; | 540 | break; |
488 | } | 541 | } |
489 | 542 | ||
490 | BUG_ON(dev_index == num_dev); | 543 | if (dev_index == num_dev) |
544 | return -1; | ||
491 | 545 | ||
492 | pr_debug("%s:%d: found dev_type %u at dev_index %u\n", | 546 | pr_debug("%s:%d: found dev_type %u at dev_index %u\n", |
493 | __func__, __LINE__, dev_type, dev_index); | 547 | __func__, __LINE__, dev_type, dev_index); |
@@ -521,7 +575,7 @@ int ps3_repository_find_device (enum ps3_bus_type bus_type, | |||
521 | pr_debug("%s:%d: find bus_type %u, dev_type %u\n", __func__, __LINE__, | 575 | pr_debug("%s:%d: find bus_type %u, dev_type %u\n", __func__, __LINE__, |
522 | bus_type, dev_type); | 576 | bus_type, dev_type); |
523 | 577 | ||
524 | dev->bus_index = UINT_MAX; | 578 | BUG_ON(start_dev && start_dev->bus_index > 10); |
525 | 579 | ||
526 | for (bus_index = start_dev ? start_dev->bus_index : 0; bus_index < 10; | 580 | for (bus_index = start_dev ? start_dev->bus_index : 0; bus_index < 10; |
527 | bus_index++) { | 581 | bus_index++) { |
@@ -532,13 +586,15 @@ int ps3_repository_find_device (enum ps3_bus_type bus_type, | |||
532 | if (result) { | 586 | if (result) { |
533 | pr_debug("%s:%d read_bus_type failed\n", | 587 | pr_debug("%s:%d read_bus_type failed\n", |
534 | __func__, __LINE__); | 588 | __func__, __LINE__); |
589 | dev->bus_index = UINT_MAX; | ||
535 | return result; | 590 | return result; |
536 | } | 591 | } |
537 | if (x == bus_type) | 592 | if (x == bus_type) |
538 | break; | 593 | break; |
539 | } | 594 | } |
540 | 595 | ||
541 | BUG_ON(bus_index == 10); | 596 | if (bus_index >= 10) |
597 | return -ENODEV; | ||
542 | 598 | ||
543 | pr_debug("%s:%d: found bus_type %u at bus_index %u\n", | 599 | pr_debug("%s:%d: found bus_type %u at bus_index %u\n", |
544 | __func__, __LINE__, bus_type, bus_index); | 600 | __func__, __LINE__, bus_type, bus_index); |
@@ -604,7 +660,8 @@ int ps3_repository_find_interrupt(const struct ps3_repository_device *dev, | |||
604 | } | 660 | } |
605 | } | 661 | } |
606 | 662 | ||
607 | BUG_ON(res_index == 10); | 663 | if (res_index == 10) |
664 | return -ENODEV; | ||
608 | 665 | ||
609 | pr_debug("%s:%d: found intr_type %u at res_index %u\n", | 666 | pr_debug("%s:%d: found intr_type %u at res_index %u\n", |
610 | __func__, __LINE__, intr_type, res_index); | 667 | __func__, __LINE__, intr_type, res_index); |
@@ -612,8 +669,8 @@ int ps3_repository_find_interrupt(const struct ps3_repository_device *dev, | |||
612 | return result; | 669 | return result; |
613 | } | 670 | } |
614 | 671 | ||
615 | int ps3_repository_find_region(const struct ps3_repository_device *dev, | 672 | int ps3_repository_find_reg(const struct ps3_repository_device *dev, |
616 | enum ps3_region_type reg_type, u64 *bus_addr, u64 *len) | 673 | enum ps3_reg_type reg_type, u64 *bus_addr, u64 *len) |
617 | { | 674 | { |
618 | int result = 0; | 675 | int result = 0; |
619 | unsigned int res_index; | 676 | unsigned int res_index; |
@@ -623,7 +680,7 @@ int ps3_repository_find_region(const struct ps3_repository_device *dev, | |||
623 | *bus_addr = *len = 0; | 680 | *bus_addr = *len = 0; |
624 | 681 | ||
625 | for (res_index = 0; res_index < 10; res_index++) { | 682 | for (res_index = 0; res_index < 10; res_index++) { |
626 | enum ps3_region_type t; | 683 | enum ps3_reg_type t; |
627 | u64 a; | 684 | u64 a; |
628 | u64 l; | 685 | u64 l; |
629 | 686 | ||
@@ -643,7 +700,8 @@ int ps3_repository_find_region(const struct ps3_repository_device *dev, | |||
643 | } | 700 | } |
644 | } | 701 | } |
645 | 702 | ||
646 | BUG_ON(res_index == 10); | 703 | if (res_index == 10) |
704 | return -ENODEV; | ||
647 | 705 | ||
648 | pr_debug("%s:%d: found reg_type %u at res_index %u\n", | 706 | pr_debug("%s:%d: found reg_type %u at res_index %u\n", |
649 | __func__, __LINE__, reg_type, res_index); | 707 | __func__, __LINE__, reg_type, res_index); |
@@ -651,6 +709,136 @@ int ps3_repository_find_region(const struct ps3_repository_device *dev, | |||
651 | return result; | 709 | return result; |
652 | } | 710 | } |
653 | 711 | ||
712 | int ps3_repository_read_stor_dev_port(unsigned int bus_index, | ||
713 | unsigned int dev_index, u64 *port) | ||
714 | { | ||
715 | return read_node(PS3_LPAR_ID_PME, | ||
716 | make_first_field("bus", bus_index), | ||
717 | make_field("dev", dev_index), | ||
718 | make_field("port", 0), | ||
719 | 0, port, 0); | ||
720 | } | ||
721 | |||
722 | int ps3_repository_read_stor_dev_blk_size(unsigned int bus_index, | ||
723 | unsigned int dev_index, u64 *blk_size) | ||
724 | { | ||
725 | return read_node(PS3_LPAR_ID_PME, | ||
726 | make_first_field("bus", bus_index), | ||
727 | make_field("dev", dev_index), | ||
728 | make_field("blk_size", 0), | ||
729 | 0, blk_size, 0); | ||
730 | } | ||
731 | |||
732 | int ps3_repository_read_stor_dev_num_blocks(unsigned int bus_index, | ||
733 | unsigned int dev_index, u64 *num_blocks) | ||
734 | { | ||
735 | return read_node(PS3_LPAR_ID_PME, | ||
736 | make_first_field("bus", bus_index), | ||
737 | make_field("dev", dev_index), | ||
738 | make_field("n_blocks", 0), | ||
739 | 0, num_blocks, 0); | ||
740 | } | ||
741 | |||
742 | int ps3_repository_read_stor_dev_num_regions(unsigned int bus_index, | ||
743 | unsigned int dev_index, unsigned int *num_regions) | ||
744 | { | ||
745 | int result; | ||
746 | u64 v1; | ||
747 | |||
748 | result = read_node(PS3_LPAR_ID_PME, | ||
749 | make_first_field("bus", bus_index), | ||
750 | make_field("dev", dev_index), | ||
751 | make_field("n_regs", 0), | ||
752 | 0, &v1, 0); | ||
753 | *num_regions = v1; | ||
754 | return result; | ||
755 | } | ||
756 | |||
757 | int ps3_repository_read_stor_dev_region_id(unsigned int bus_index, | ||
758 | unsigned int dev_index, unsigned int region_index, | ||
759 | unsigned int *region_id) | ||
760 | { | ||
761 | int result; | ||
762 | u64 v1; | ||
763 | |||
764 | result = read_node(PS3_LPAR_ID_PME, | ||
765 | make_first_field("bus", bus_index), | ||
766 | make_field("dev", dev_index), | ||
767 | make_field("region", region_index), | ||
768 | make_field("id", 0), | ||
769 | &v1, 0); | ||
770 | *region_id = v1; | ||
771 | return result; | ||
772 | } | ||
773 | |||
774 | int ps3_repository_read_stor_dev_region_size(unsigned int bus_index, | ||
775 | unsigned int dev_index, unsigned int region_index, u64 *region_size) | ||
776 | { | ||
777 | return read_node(PS3_LPAR_ID_PME, | ||
778 | make_first_field("bus", bus_index), | ||
779 | make_field("dev", dev_index), | ||
780 | make_field("region", region_index), | ||
781 | make_field("size", 0), | ||
782 | region_size, 0); | ||
783 | } | ||
784 | |||
785 | int ps3_repository_read_stor_dev_region_start(unsigned int bus_index, | ||
786 | unsigned int dev_index, unsigned int region_index, u64 *region_start) | ||
787 | { | ||
788 | return read_node(PS3_LPAR_ID_PME, | ||
789 | make_first_field("bus", bus_index), | ||
790 | make_field("dev", dev_index), | ||
791 | make_field("region", region_index), | ||
792 | make_field("start", 0), | ||
793 | region_start, 0); | ||
794 | } | ||
795 | |||
796 | int ps3_repository_read_stor_dev_info(unsigned int bus_index, | ||
797 | unsigned int dev_index, u64 *port, u64 *blk_size, | ||
798 | u64 *num_blocks, unsigned int *num_regions) | ||
799 | { | ||
800 | int result; | ||
801 | |||
802 | result = ps3_repository_read_stor_dev_port(bus_index, dev_index, port); | ||
803 | if (result) | ||
804 | return result; | ||
805 | |||
806 | result = ps3_repository_read_stor_dev_blk_size(bus_index, dev_index, | ||
807 | blk_size); | ||
808 | if (result) | ||
809 | return result; | ||
810 | |||
811 | result = ps3_repository_read_stor_dev_num_blocks(bus_index, dev_index, | ||
812 | num_blocks); | ||
813 | if (result) | ||
814 | return result; | ||
815 | |||
816 | result = ps3_repository_read_stor_dev_num_regions(bus_index, dev_index, | ||
817 | num_regions); | ||
818 | return result; | ||
819 | } | ||
820 | |||
821 | int ps3_repository_read_stor_dev_region(unsigned int bus_index, | ||
822 | unsigned int dev_index, unsigned int region_index, | ||
823 | unsigned int *region_id, u64 *region_start, u64 *region_size) | ||
824 | { | ||
825 | int result; | ||
826 | |||
827 | result = ps3_repository_read_stor_dev_region_id(bus_index, dev_index, | ||
828 | region_index, region_id); | ||
829 | if (result) | ||
830 | return result; | ||
831 | |||
832 | result = ps3_repository_read_stor_dev_region_start(bus_index, dev_index, | ||
833 | region_index, region_start); | ||
834 | if (result) | ||
835 | return result; | ||
836 | |||
837 | result = ps3_repository_read_stor_dev_region_size(bus_index, dev_index, | ||
838 | region_index, region_size); | ||
839 | return result; | ||
840 | } | ||
841 | |||
654 | int ps3_repository_read_rm_size(unsigned int ppe_id, u64 *rm_size) | 842 | int ps3_repository_read_rm_size(unsigned int ppe_id, u64 *rm_size) |
655 | { | 843 | { |
656 | return read_node(PS3_LPAR_ID_CURRENT, | 844 | return read_node(PS3_LPAR_ID_CURRENT, |
diff --git a/arch/powerpc/platforms/ps3/setup.c b/arch/powerpc/platforms/ps3/setup.c index d8b5cadbe80e..e62505e18813 100644 --- a/arch/powerpc/platforms/ps3/setup.c +++ b/arch/powerpc/platforms/ps3/setup.c | |||
@@ -41,10 +41,18 @@ | |||
41 | #define DBG(fmt...) do{if(0)printk(fmt);}while(0) | 41 | #define DBG(fmt...) do{if(0)printk(fmt);}while(0) |
42 | #endif | 42 | #endif |
43 | 43 | ||
44 | static void ps3_show_cpuinfo(struct seq_file *m) | 44 | int ps3_get_firmware_version(union ps3_firmware_version *v) |
45 | { | 45 | { |
46 | seq_printf(m, "machine\t\t: %s\n", ppc_md.name); | 46 | int result = lv1_get_version_info(&v->raw); |
47 | |||
48 | if (result) { | ||
49 | v->raw = 0; | ||
50 | return -1; | ||
51 | } | ||
52 | |||
53 | return result; | ||
47 | } | 54 | } |
55 | EXPORT_SYMBOL_GPL(ps3_get_firmware_version); | ||
48 | 56 | ||
49 | static void ps3_power_save(void) | 57 | static void ps3_power_save(void) |
50 | { | 58 | { |
@@ -74,8 +82,14 @@ static void ps3_panic(char *str) | |||
74 | 82 | ||
75 | static void __init ps3_setup_arch(void) | 83 | static void __init ps3_setup_arch(void) |
76 | { | 84 | { |
85 | union ps3_firmware_version v; | ||
86 | |||
77 | DBG(" -> %s:%d\n", __func__, __LINE__); | 87 | DBG(" -> %s:%d\n", __func__, __LINE__); |
78 | 88 | ||
89 | ps3_get_firmware_version(&v); | ||
90 | printk(KERN_INFO "PS3 firmware version %u.%u.%u\n", v.major, v.minor, | ||
91 | v.rev); | ||
92 | |||
79 | ps3_spu_set_platform(); | 93 | ps3_spu_set_platform(); |
80 | ps3_map_htab(); | 94 | ps3_map_htab(); |
81 | 95 | ||
@@ -156,7 +170,6 @@ define_machine(ps3) { | |||
156 | .name = "PS3", | 170 | .name = "PS3", |
157 | .probe = ps3_probe, | 171 | .probe = ps3_probe, |
158 | .setup_arch = ps3_setup_arch, | 172 | .setup_arch = ps3_setup_arch, |
159 | .show_cpuinfo = ps3_show_cpuinfo, | ||
160 | .init_IRQ = ps3_init_IRQ, | 173 | .init_IRQ = ps3_init_IRQ, |
161 | .panic = ps3_panic, | 174 | .panic = ps3_panic, |
162 | .get_boot_time = ps3_get_boot_time, | 175 | .get_boot_time = ps3_get_boot_time, |
diff --git a/arch/powerpc/platforms/ps3/smp.c b/arch/powerpc/platforms/ps3/smp.c index 11d2080607ed..6fb887961a6d 100644 --- a/arch/powerpc/platforms/ps3/smp.c +++ b/arch/powerpc/platforms/ps3/smp.c | |||
@@ -23,7 +23,6 @@ | |||
23 | 23 | ||
24 | #include <asm/machdep.h> | 24 | #include <asm/machdep.h> |
25 | #include <asm/udbg.h> | 25 | #include <asm/udbg.h> |
26 | #include <asm/ps3.h> | ||
27 | 26 | ||
28 | #include "platform.h" | 27 | #include "platform.h" |
29 | 28 | ||
@@ -111,7 +110,7 @@ static void __init ps3_smp_setup_cpu(int cpu) | |||
111 | BUILD_BUG_ON(PPC_MSG_DEBUGGER_BREAK != 3); | 110 | BUILD_BUG_ON(PPC_MSG_DEBUGGER_BREAK != 3); |
112 | 111 | ||
113 | for (i = 0; i < MSG_COUNT; i++) { | 112 | for (i = 0; i < MSG_COUNT; i++) { |
114 | result = ps3_alloc_event_irq(&virqs[i]); | 113 | result = ps3_alloc_event_irq(cpu, &virqs[i]); |
115 | 114 | ||
116 | if (result) | 115 | if (result) |
117 | continue; | 116 | continue; |
diff --git a/arch/powerpc/platforms/ps3/spu.c b/arch/powerpc/platforms/ps3/spu.c index 644532c3b7c4..d1929721b0e4 100644 --- a/arch/powerpc/platforms/ps3/spu.c +++ b/arch/powerpc/platforms/ps3/spu.c | |||
@@ -26,9 +26,10 @@ | |||
26 | 26 | ||
27 | #include <asm/spu.h> | 27 | #include <asm/spu.h> |
28 | #include <asm/spu_priv1.h> | 28 | #include <asm/spu_priv1.h> |
29 | #include <asm/ps3.h> | ||
30 | #include <asm/lv1call.h> | 29 | #include <asm/lv1call.h> |
31 | 30 | ||
31 | #include "platform.h" | ||
32 | |||
32 | /* spu_management_ops */ | 33 | /* spu_management_ops */ |
33 | 34 | ||
34 | /** | 35 | /** |
@@ -50,7 +51,7 @@ enum spe_type { | |||
50 | */ | 51 | */ |
51 | 52 | ||
52 | struct spe_shadow { | 53 | struct spe_shadow { |
53 | u8 padding_0000[0x0140]; | 54 | u8 padding_0140[0x0140]; |
54 | u64 int_status_class0_RW; /* 0x0140 */ | 55 | u64 int_status_class0_RW; /* 0x0140 */ |
55 | u64 int_status_class1_RW; /* 0x0148 */ | 56 | u64 int_status_class1_RW; /* 0x0148 */ |
56 | u64 int_status_class2_RW; /* 0x0150 */ | 57 | u64 int_status_class2_RW; /* 0x0150 */ |
@@ -67,8 +68,7 @@ struct spe_shadow { | |||
67 | u8 padding_0c08[0x0f00-0x0c08]; | 68 | u8 padding_0c08[0x0f00-0x0c08]; |
68 | u64 spe_execution_status; /* 0x0f00 */ | 69 | u64 spe_execution_status; /* 0x0f00 */ |
69 | u8 padding_0f08[0x1000-0x0f08]; | 70 | u8 padding_0f08[0x1000-0x0f08]; |
70 | } __attribute__ ((packed)); | 71 | }; |
71 | |||
72 | 72 | ||
73 | /** | 73 | /** |
74 | * enum spe_ex_state - Logical spe execution state. | 74 | * enum spe_ex_state - Logical spe execution state. |
@@ -268,20 +268,20 @@ static int __init setup_interrupts(struct spu *spu) | |||
268 | { | 268 | { |
269 | int result; | 269 | int result; |
270 | 270 | ||
271 | result = ps3_alloc_spe_irq(spu_pdata(spu)->spe_id, 0, | 271 | result = ps3_alloc_spe_irq(PS3_BINDING_CPU_ANY, spu_pdata(spu)->spe_id, |
272 | &spu->irqs[0]); | 272 | 0, &spu->irqs[0]); |
273 | 273 | ||
274 | if (result) | 274 | if (result) |
275 | goto fail_alloc_0; | 275 | goto fail_alloc_0; |
276 | 276 | ||
277 | result = ps3_alloc_spe_irq(spu_pdata(spu)->spe_id, 1, | 277 | result = ps3_alloc_spe_irq(PS3_BINDING_CPU_ANY, spu_pdata(spu)->spe_id, |
278 | &spu->irqs[1]); | 278 | 1, &spu->irqs[1]); |
279 | 279 | ||
280 | if (result) | 280 | if (result) |
281 | goto fail_alloc_1; | 281 | goto fail_alloc_1; |
282 | 282 | ||
283 | result = ps3_alloc_spe_irq(spu_pdata(spu)->spe_id, 2, | 283 | result = ps3_alloc_spe_irq(PS3_BINDING_CPU_ANY, spu_pdata(spu)->spe_id, |
284 | &spu->irqs[2]); | 284 | 2, &spu->irqs[2]); |
285 | 285 | ||
286 | if (result) | 286 | if (result) |
287 | goto fail_alloc_2; | 287 | goto fail_alloc_2; |
diff --git a/arch/powerpc/platforms/ps3/system-bus.c b/arch/powerpc/platforms/ps3/system-bus.c new file mode 100644 index 000000000000..a9f7e4a39a2a --- /dev/null +++ b/arch/powerpc/platforms/ps3/system-bus.c | |||
@@ -0,0 +1,384 @@ | |||
1 | /* | ||
2 | * PS3 system bus driver. | ||
3 | * | ||
4 | * Copyright (C) 2006 Sony Computer Entertainment Inc. | ||
5 | * Copyright 2006 Sony Corp. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; version 2 of the License. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | |||
21 | #include <linux/kernel.h> | ||
22 | #include <linux/init.h> | ||
23 | #include <linux/module.h> | ||
24 | #include <linux/dma-mapping.h> | ||
25 | #include <linux/err.h> | ||
26 | |||
27 | #include <asm/udbg.h> | ||
28 | #include <asm/lv1call.h> | ||
29 | #include <asm/firmware.h> | ||
30 | |||
31 | #include "platform.h" | ||
32 | |||
33 | #define dump_mmio_region(_a) _dump_mmio_region(_a, __func__, __LINE__) | ||
34 | static void _dump_mmio_region(const struct ps3_mmio_region* r, | ||
35 | const char* func, int line) | ||
36 | { | ||
37 | pr_debug("%s:%d: dev %u:%u\n", func, line, r->did.bus_id, | ||
38 | r->did.dev_id); | ||
39 | pr_debug("%s:%d: bus_addr %lxh\n", func, line, r->bus_addr); | ||
40 | pr_debug("%s:%d: len %lxh\n", func, line, r->len); | ||
41 | pr_debug("%s:%d: lpar_addr %lxh\n", func, line, r->lpar_addr); | ||
42 | } | ||
43 | |||
44 | int ps3_mmio_region_create(struct ps3_mmio_region *r) | ||
45 | { | ||
46 | int result; | ||
47 | |||
48 | result = lv1_map_device_mmio_region(r->did.bus_id, r->did.dev_id, | ||
49 | r->bus_addr, r->len, r->page_size, &r->lpar_addr); | ||
50 | |||
51 | if (result) { | ||
52 | pr_debug("%s:%d: lv1_map_device_mmio_region failed: %s\n", | ||
53 | __func__, __LINE__, ps3_result(result)); | ||
54 | r->lpar_addr = 0; | ||
55 | } | ||
56 | |||
57 | dump_mmio_region(r); | ||
58 | return result; | ||
59 | } | ||
60 | EXPORT_SYMBOL_GPL(ps3_mmio_region_create); | ||
61 | |||
62 | int ps3_free_mmio_region(struct ps3_mmio_region *r) | ||
63 | { | ||
64 | int result; | ||
65 | |||
66 | result = lv1_unmap_device_mmio_region(r->did.bus_id, r->did.dev_id, | ||
67 | r->lpar_addr); | ||
68 | |||
69 | if (result) | ||
70 | pr_debug("%s:%d: lv1_unmap_device_mmio_region failed: %s\n", | ||
71 | __func__, __LINE__, ps3_result(result)); | ||
72 | |||
73 | r->lpar_addr = 0; | ||
74 | return result; | ||
75 | } | ||
76 | EXPORT_SYMBOL_GPL(ps3_free_mmio_region); | ||
77 | |||
78 | static int ps3_system_bus_match(struct device *_dev, | ||
79 | struct device_driver *_drv) | ||
80 | { | ||
81 | int result; | ||
82 | struct ps3_system_bus_driver *drv = to_ps3_system_bus_driver(_drv); | ||
83 | struct ps3_system_bus_device *dev = to_ps3_system_bus_device(_dev); | ||
84 | |||
85 | result = dev->match_id == drv->match_id; | ||
86 | |||
87 | pr_info("%s:%d: dev=%u(%s), drv=%u(%s): %s\n", __func__, __LINE__, | ||
88 | dev->match_id, dev->core.bus_id, drv->match_id, drv->core.name, | ||
89 | (result ? "match" : "miss")); | ||
90 | return result; | ||
91 | } | ||
92 | |||
93 | static int ps3_system_bus_probe(struct device *_dev) | ||
94 | { | ||
95 | int result; | ||
96 | struct ps3_system_bus_device *dev = to_ps3_system_bus_device(_dev); | ||
97 | struct ps3_system_bus_driver *drv = | ||
98 | to_ps3_system_bus_driver(_dev->driver); | ||
99 | |||
100 | result = lv1_open_device(dev->did.bus_id, dev->did.dev_id, 0); | ||
101 | |||
102 | if (result) { | ||
103 | pr_debug("%s:%d: lv1_open_device failed (%d)\n", | ||
104 | __func__, __LINE__, result); | ||
105 | result = -EACCES; | ||
106 | goto clean_none; | ||
107 | } | ||
108 | |||
109 | if (dev->d_region->did.bus_id) { | ||
110 | result = ps3_dma_region_create(dev->d_region); | ||
111 | |||
112 | if (result) { | ||
113 | pr_debug("%s:%d: ps3_dma_region_create failed (%d)\n", | ||
114 | __func__, __LINE__, result); | ||
115 | BUG_ON("check region type"); | ||
116 | result = -EINVAL; | ||
117 | goto clean_device; | ||
118 | } | ||
119 | } | ||
120 | |||
121 | BUG_ON(!drv); | ||
122 | |||
123 | if (drv->probe) | ||
124 | result = drv->probe(dev); | ||
125 | else | ||
126 | pr_info("%s:%d: %s no probe method\n", __func__, __LINE__, | ||
127 | dev->core.bus_id); | ||
128 | |||
129 | if (result) { | ||
130 | pr_debug("%s:%d: drv->probe failed\n", __func__, __LINE__); | ||
131 | goto clean_dma; | ||
132 | } | ||
133 | |||
134 | return result; | ||
135 | |||
136 | clean_dma: | ||
137 | ps3_dma_region_free(dev->d_region); | ||
138 | clean_device: | ||
139 | lv1_close_device(dev->did.bus_id, dev->did.dev_id); | ||
140 | clean_none: | ||
141 | return result; | ||
142 | } | ||
143 | |||
144 | static int ps3_system_bus_remove(struct device *_dev) | ||
145 | { | ||
146 | struct ps3_system_bus_device *dev = to_ps3_system_bus_device(_dev); | ||
147 | struct ps3_system_bus_driver *drv = | ||
148 | to_ps3_system_bus_driver(_dev->driver); | ||
149 | |||
150 | if (drv->remove) | ||
151 | drv->remove(dev); | ||
152 | else | ||
153 | pr_info("%s:%d: %s no remove method\n", __func__, __LINE__, | ||
154 | dev->core.bus_id); | ||
155 | |||
156 | ps3_dma_region_free(dev->d_region); | ||
157 | ps3_free_mmio_region(dev->m_region); | ||
158 | lv1_close_device(dev->did.bus_id, dev->did.dev_id); | ||
159 | |||
160 | return 0; | ||
161 | } | ||
162 | |||
163 | struct bus_type ps3_system_bus_type = { | ||
164 | .name = "ps3_system_bus", | ||
165 | .match = ps3_system_bus_match, | ||
166 | .probe = ps3_system_bus_probe, | ||
167 | .remove = ps3_system_bus_remove, | ||
168 | }; | ||
169 | |||
170 | int __init ps3_system_bus_init(void) | ||
171 | { | ||
172 | int result; | ||
173 | |||
174 | if (!firmware_has_feature(FW_FEATURE_PS3_LV1)) | ||
175 | return 0; | ||
176 | |||
177 | result = bus_register(&ps3_system_bus_type); | ||
178 | BUG_ON(result); | ||
179 | return result; | ||
180 | } | ||
181 | |||
182 | core_initcall(ps3_system_bus_init); | ||
183 | |||
184 | /* Allocates a contiguous real buffer and creates mappings over it. | ||
185 | * Returns the virtual address of the buffer and sets dma_handle | ||
186 | * to the dma address (mapping) of the first page. | ||
187 | */ | ||
188 | |||
189 | static void * ps3_alloc_coherent(struct device *_dev, size_t size, | ||
190 | dma_addr_t *dma_handle, gfp_t flag) | ||
191 | { | ||
192 | int result; | ||
193 | struct ps3_system_bus_device *dev = to_ps3_system_bus_device(_dev); | ||
194 | unsigned long virt_addr; | ||
195 | |||
196 | BUG_ON(!dev->d_region->bus_addr); | ||
197 | |||
198 | flag &= ~(__GFP_DMA | __GFP_HIGHMEM); | ||
199 | flag |= __GFP_ZERO; | ||
200 | |||
201 | virt_addr = __get_free_pages(flag, get_order(size)); | ||
202 | |||
203 | if (!virt_addr) { | ||
204 | pr_debug("%s:%d: get_free_pages failed\n", __func__, __LINE__); | ||
205 | goto clean_none; | ||
206 | } | ||
207 | |||
208 | result = ps3_dma_map(dev->d_region, virt_addr, size, dma_handle); | ||
209 | |||
210 | if (result) { | ||
211 | pr_debug("%s:%d: ps3_dma_map failed (%d)\n", | ||
212 | __func__, __LINE__, result); | ||
213 | BUG_ON("check region type"); | ||
214 | goto clean_alloc; | ||
215 | } | ||
216 | |||
217 | return (void*)virt_addr; | ||
218 | |||
219 | clean_alloc: | ||
220 | free_pages(virt_addr, get_order(size)); | ||
221 | clean_none: | ||
222 | dma_handle = NULL; | ||
223 | return NULL; | ||
224 | } | ||
225 | |||
226 | static void ps3_free_coherent(struct device *_dev, size_t size, void *vaddr, | ||
227 | dma_addr_t dma_handle) | ||
228 | { | ||
229 | struct ps3_system_bus_device *dev = to_ps3_system_bus_device(_dev); | ||
230 | |||
231 | ps3_dma_unmap(dev->d_region, dma_handle, size); | ||
232 | free_pages((unsigned long)vaddr, get_order(size)); | ||
233 | } | ||
234 | |||
235 | /* Creates TCEs for a user provided buffer. The user buffer must be | ||
236 | * contiguous real kernel storage (not vmalloc). The address of the buffer | ||
237 | * passed here is the kernel (virtual) address of the buffer. The buffer | ||
238 | * need not be page aligned, the dma_addr_t returned will point to the same | ||
239 | * byte within the page as vaddr. | ||
240 | */ | ||
241 | |||
242 | static dma_addr_t ps3_map_single(struct device *_dev, void *ptr, size_t size, | ||
243 | enum dma_data_direction direction) | ||
244 | { | ||
245 | struct ps3_system_bus_device *dev = to_ps3_system_bus_device(_dev); | ||
246 | int result; | ||
247 | unsigned long bus_addr; | ||
248 | |||
249 | result = ps3_dma_map(dev->d_region, (unsigned long)ptr, size, | ||
250 | &bus_addr); | ||
251 | |||
252 | if (result) { | ||
253 | pr_debug("%s:%d: ps3_dma_map failed (%d)\n", | ||
254 | __func__, __LINE__, result); | ||
255 | } | ||
256 | |||
257 | return bus_addr; | ||
258 | } | ||
259 | |||
260 | static void ps3_unmap_single(struct device *_dev, dma_addr_t dma_addr, | ||
261 | size_t size, enum dma_data_direction direction) | ||
262 | { | ||
263 | struct ps3_system_bus_device *dev = to_ps3_system_bus_device(_dev); | ||
264 | int result; | ||
265 | |||
266 | result = ps3_dma_unmap(dev->d_region, dma_addr, size); | ||
267 | |||
268 | if (result) { | ||
269 | pr_debug("%s:%d: ps3_dma_unmap failed (%d)\n", | ||
270 | __func__, __LINE__, result); | ||
271 | } | ||
272 | } | ||
273 | |||
274 | static int ps3_map_sg(struct device *_dev, struct scatterlist *sg, int nents, | ||
275 | enum dma_data_direction direction) | ||
276 | { | ||
277 | struct ps3_system_bus_device *dev = to_ps3_system_bus_device(_dev); | ||
278 | int i; | ||
279 | |||
280 | #if defined(CONFIG_PS3_DYNAMIC_DMA) | ||
281 | BUG_ON("do"); | ||
282 | return -EPERM; | ||
283 | #else | ||
284 | for (i = 0; i < nents; i++, sg++) { | ||
285 | int result = ps3_dma_map(dev->d_region, | ||
286 | page_to_phys(sg->page) + sg->offset, sg->length, | ||
287 | &sg->dma_address); | ||
288 | |||
289 | if (result) { | ||
290 | pr_debug("%s:%d: ps3_dma_map failed (%d)\n", | ||
291 | __func__, __LINE__, result); | ||
292 | return -EINVAL; | ||
293 | } | ||
294 | |||
295 | sg->dma_length = sg->length; | ||
296 | } | ||
297 | |||
298 | return nents; | ||
299 | #endif | ||
300 | } | ||
301 | |||
302 | static void ps3_unmap_sg(struct device *_dev, struct scatterlist *sg, | ||
303 | int nents, enum dma_data_direction direction) | ||
304 | { | ||
305 | #if defined(CONFIG_PS3_DYNAMIC_DMA) | ||
306 | BUG_ON("do"); | ||
307 | #endif | ||
308 | } | ||
309 | |||
310 | static int ps3_dma_supported(struct device *_dev, u64 mask) | ||
311 | { | ||
312 | return mask >= DMA_32BIT_MASK; | ||
313 | } | ||
314 | |||
315 | static struct dma_mapping_ops ps3_dma_ops = { | ||
316 | .alloc_coherent = ps3_alloc_coherent, | ||
317 | .free_coherent = ps3_free_coherent, | ||
318 | .map_single = ps3_map_single, | ||
319 | .unmap_single = ps3_unmap_single, | ||
320 | .map_sg = ps3_map_sg, | ||
321 | .unmap_sg = ps3_unmap_sg, | ||
322 | .dma_supported = ps3_dma_supported | ||
323 | }; | ||
324 | |||
325 | /** | ||
326 | * ps3_system_bus_release_device - remove a device from the system bus | ||
327 | */ | ||
328 | |||
329 | static void ps3_system_bus_release_device(struct device *_dev) | ||
330 | { | ||
331 | struct ps3_system_bus_device *dev = to_ps3_system_bus_device(_dev); | ||
332 | kfree(dev); | ||
333 | } | ||
334 | |||
335 | /** | ||
336 | * ps3_system_bus_device_register - add a device to the system bus | ||
337 | * | ||
338 | * ps3_system_bus_device_register() expects the dev object to be allocated | ||
339 | * dynamically by the caller. The system bus takes ownership of the dev | ||
340 | * object and frees the object in ps3_system_bus_release_device(). | ||
341 | */ | ||
342 | |||
343 | int ps3_system_bus_device_register(struct ps3_system_bus_device *dev) | ||
344 | { | ||
345 | int result; | ||
346 | static unsigned int dev_count = 1; | ||
347 | |||
348 | dev->core.parent = NULL; | ||
349 | dev->core.bus = &ps3_system_bus_type; | ||
350 | dev->core.release = ps3_system_bus_release_device; | ||
351 | |||
352 | dev->core.archdata.of_node = NULL; | ||
353 | dev->core.archdata.dma_ops = &ps3_dma_ops; | ||
354 | dev->core.archdata.numa_node = 0; | ||
355 | |||
356 | snprintf(dev->core.bus_id, sizeof(dev->core.bus_id), "sb_%02x", | ||
357 | dev_count++); | ||
358 | |||
359 | pr_debug("%s:%d add %s\n", __func__, __LINE__, dev->core.bus_id); | ||
360 | |||
361 | result = device_register(&dev->core); | ||
362 | return result; | ||
363 | } | ||
364 | |||
365 | EXPORT_SYMBOL_GPL(ps3_system_bus_device_register); | ||
366 | |||
367 | int ps3_system_bus_driver_register(struct ps3_system_bus_driver *drv) | ||
368 | { | ||
369 | int result; | ||
370 | |||
371 | drv->core.bus = &ps3_system_bus_type; | ||
372 | |||
373 | result = driver_register(&drv->core); | ||
374 | return result; | ||
375 | } | ||
376 | |||
377 | EXPORT_SYMBOL_GPL(ps3_system_bus_driver_register); | ||
378 | |||
379 | void ps3_system_bus_driver_unregister(struct ps3_system_bus_driver *drv) | ||
380 | { | ||
381 | driver_unregister(&drv->core); | ||
382 | } | ||
383 | |||
384 | EXPORT_SYMBOL_GPL(ps3_system_bus_driver_unregister); | ||
diff --git a/arch/powerpc/platforms/pseries/eeh.c b/arch/powerpc/platforms/pseries/eeh.c index da6e5362e7cd..9437f48cc9e7 100644 --- a/arch/powerpc/platforms/pseries/eeh.c +++ b/arch/powerpc/platforms/pseries/eeh.c | |||
@@ -747,6 +747,7 @@ struct eeh_early_enable_info { | |||
747 | /* Enable eeh for the given device node. */ | 747 | /* Enable eeh for the given device node. */ |
748 | static void *early_enable_eeh(struct device_node *dn, void *data) | 748 | static void *early_enable_eeh(struct device_node *dn, void *data) |
749 | { | 749 | { |
750 | unsigned int rets[3]; | ||
750 | struct eeh_early_enable_info *info = data; | 751 | struct eeh_early_enable_info *info = data; |
751 | int ret; | 752 | int ret; |
752 | const char *status = get_property(dn, "status", NULL); | 753 | const char *status = get_property(dn, "status", NULL); |
@@ -803,16 +804,14 @@ static void *early_enable_eeh(struct device_node *dn, void *data) | |||
803 | regs[0], info->buid_hi, info->buid_lo, | 804 | regs[0], info->buid_hi, info->buid_lo, |
804 | EEH_ENABLE); | 805 | EEH_ENABLE); |
805 | 806 | ||
807 | enable = 0; | ||
806 | if (ret == 0) { | 808 | if (ret == 0) { |
807 | eeh_subsystem_enabled = 1; | ||
808 | pdn->eeh_mode |= EEH_MODE_SUPPORTED; | ||
809 | pdn->eeh_config_addr = regs[0]; | 809 | pdn->eeh_config_addr = regs[0]; |
810 | 810 | ||
811 | /* If the newer, better, ibm,get-config-addr-info is supported, | 811 | /* If the newer, better, ibm,get-config-addr-info is supported, |
812 | * then use that instead. */ | 812 | * then use that instead. */ |
813 | pdn->eeh_pe_config_addr = 0; | 813 | pdn->eeh_pe_config_addr = 0; |
814 | if (ibm_get_config_addr_info != RTAS_UNKNOWN_SERVICE) { | 814 | if (ibm_get_config_addr_info != RTAS_UNKNOWN_SERVICE) { |
815 | unsigned int rets[2]; | ||
816 | ret = rtas_call (ibm_get_config_addr_info, 4, 2, rets, | 815 | ret = rtas_call (ibm_get_config_addr_info, 4, 2, rets, |
817 | pdn->eeh_config_addr, | 816 | pdn->eeh_config_addr, |
818 | info->buid_hi, info->buid_lo, | 817 | info->buid_hi, info->buid_lo, |
@@ -820,6 +819,20 @@ static void *early_enable_eeh(struct device_node *dn, void *data) | |||
820 | if (ret == 0) | 819 | if (ret == 0) |
821 | pdn->eeh_pe_config_addr = rets[0]; | 820 | pdn->eeh_pe_config_addr = rets[0]; |
822 | } | 821 | } |
822 | |||
823 | /* Some older systems (Power4) allow the | ||
824 | * ibm,set-eeh-option call to succeed even on nodes | ||
825 | * where EEH is not supported. Verify support | ||
826 | * explicitly. */ | ||
827 | ret = read_slot_reset_state(pdn, rets); | ||
828 | if ((ret == 0) && (rets[1] == 1)) | ||
829 | enable = 1; | ||
830 | } | ||
831 | |||
832 | if (enable) { | ||
833 | eeh_subsystem_enabled = 1; | ||
834 | pdn->eeh_mode |= EEH_MODE_SUPPORTED; | ||
835 | |||
823 | #ifdef DEBUG | 836 | #ifdef DEBUG |
824 | printk(KERN_DEBUG "EEH: %s: eeh enabled, config=%x pe_config=%x\n", | 837 | printk(KERN_DEBUG "EEH: %s: eeh enabled, config=%x pe_config=%x\n", |
825 | dn->full_name, pdn->eeh_config_addr, pdn->eeh_pe_config_addr); | 838 | dn->full_name, pdn->eeh_config_addr, pdn->eeh_pe_config_addr); |
diff --git a/arch/powerpc/platforms/pseries/eeh_driver.c b/arch/powerpc/platforms/pseries/eeh_driver.c index cbd6b0711ab4..a4c0bf84ef2e 100644 --- a/arch/powerpc/platforms/pseries/eeh_driver.c +++ b/arch/powerpc/platforms/pseries/eeh_driver.c | |||
@@ -446,7 +446,8 @@ excess_failures: | |||
446 | */ | 446 | */ |
447 | printk(KERN_ERR | 447 | printk(KERN_ERR |
448 | "EEH: PCI device at location=%s driver=%s pci addr=%s \n" | 448 | "EEH: PCI device at location=%s driver=%s pci addr=%s \n" |
449 | "has failed %d times and has been permanently disabled. \n" | 449 | "has failed %d times in the last hour " |
450 | "and has been permanently disabled. \n" | ||
450 | "Please try reseating this device or replacing it.\n", | 451 | "Please try reseating this device or replacing it.\n", |
451 | location, drv_str, pci_str, frozen_pdn->eeh_freeze_count); | 452 | location, drv_str, pci_str, frozen_pdn->eeh_freeze_count); |
452 | goto perm_error; | 453 | goto perm_error; |
diff --git a/arch/powerpc/platforms/pseries/firmware.c b/arch/powerpc/platforms/pseries/firmware.c index 1c7b2baa5f73..90522e3c9d46 100644 --- a/arch/powerpc/platforms/pseries/firmware.c +++ b/arch/powerpc/platforms/pseries/firmware.c | |||
@@ -59,6 +59,7 @@ firmware_features_table[FIRMWARE_MAX_FEATURES] = { | |||
59 | {FW_FEATURE_XDABR, "hcall-xdabr"}, | 59 | {FW_FEATURE_XDABR, "hcall-xdabr"}, |
60 | {FW_FEATURE_MULTITCE, "hcall-multi-tce"}, | 60 | {FW_FEATURE_MULTITCE, "hcall-multi-tce"}, |
61 | {FW_FEATURE_SPLPAR, "hcall-splpar"}, | 61 | {FW_FEATURE_SPLPAR, "hcall-splpar"}, |
62 | {FW_FEATURE_BULK_REMOVE, "hcall-bulk"}, | ||
62 | }; | 63 | }; |
63 | 64 | ||
64 | /* Build up the firmware features bitmask using the contents of | 65 | /* Build up the firmware features bitmask using the contents of |
diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c index 721436db3ef0..7496005566ef 100644 --- a/arch/powerpc/platforms/pseries/lpar.c +++ b/arch/powerpc/platforms/pseries/lpar.c | |||
@@ -502,23 +502,70 @@ static void pSeries_lpar_hpte_invalidate(unsigned long slot, unsigned long va, | |||
502 | BUG_ON(lpar_rc != H_SUCCESS); | 502 | BUG_ON(lpar_rc != H_SUCCESS); |
503 | } | 503 | } |
504 | 504 | ||
505 | /* Flag bits for H_BULK_REMOVE */ | ||
506 | #define HBR_REQUEST 0x4000000000000000UL | ||
507 | #define HBR_RESPONSE 0x8000000000000000UL | ||
508 | #define HBR_END 0xc000000000000000UL | ||
509 | #define HBR_AVPN 0x0200000000000000UL | ||
510 | #define HBR_ANDCOND 0x0100000000000000UL | ||
511 | |||
505 | /* | 512 | /* |
506 | * Take a spinlock around flushes to avoid bouncing the hypervisor tlbie | 513 | * Take a spinlock around flushes to avoid bouncing the hypervisor tlbie |
507 | * lock. | 514 | * lock. |
508 | */ | 515 | */ |
509 | static void pSeries_lpar_flush_hash_range(unsigned long number, int local) | 516 | static void pSeries_lpar_flush_hash_range(unsigned long number, int local) |
510 | { | 517 | { |
511 | int i; | 518 | unsigned long i, pix, rc; |
512 | unsigned long flags = 0; | 519 | unsigned long flags = 0; |
513 | struct ppc64_tlb_batch *batch = &__get_cpu_var(ppc64_tlb_batch); | 520 | struct ppc64_tlb_batch *batch = &__get_cpu_var(ppc64_tlb_batch); |
514 | int lock_tlbie = !cpu_has_feature(CPU_FTR_LOCKLESS_TLBIE); | 521 | int lock_tlbie = !cpu_has_feature(CPU_FTR_LOCKLESS_TLBIE); |
522 | unsigned long param[9]; | ||
523 | unsigned long va; | ||
524 | unsigned long hash, index, shift, hidx, slot; | ||
525 | real_pte_t pte; | ||
526 | int psize; | ||
515 | 527 | ||
516 | if (lock_tlbie) | 528 | if (lock_tlbie) |
517 | spin_lock_irqsave(&pSeries_lpar_tlbie_lock, flags); | 529 | spin_lock_irqsave(&pSeries_lpar_tlbie_lock, flags); |
518 | 530 | ||
519 | for (i = 0; i < number; i++) | 531 | psize = batch->psize; |
520 | flush_hash_page(batch->vaddr[i], batch->pte[i], | 532 | pix = 0; |
521 | batch->psize, local); | 533 | for (i = 0; i < number; i++) { |
534 | va = batch->vaddr[i]; | ||
535 | pte = batch->pte[i]; | ||
536 | pte_iterate_hashed_subpages(pte, psize, va, index, shift) { | ||
537 | hash = hpt_hash(va, shift); | ||
538 | hidx = __rpte_to_hidx(pte, index); | ||
539 | if (hidx & _PTEIDX_SECONDARY) | ||
540 | hash = ~hash; | ||
541 | slot = (hash & htab_hash_mask) * HPTES_PER_GROUP; | ||
542 | slot += hidx & _PTEIDX_GROUP_IX; | ||
543 | if (!firmware_has_feature(FW_FEATURE_BULK_REMOVE)) { | ||
544 | pSeries_lpar_hpte_invalidate(slot, va, psize, | ||
545 | local); | ||
546 | } else { | ||
547 | param[pix] = HBR_REQUEST | HBR_AVPN | slot; | ||
548 | param[pix+1] = hpte_encode_v(va, psize) & | ||
549 | HPTE_V_AVPN; | ||
550 | pix += 2; | ||
551 | if (pix == 8) { | ||
552 | rc = plpar_hcall9(H_BULK_REMOVE, param, | ||
553 | param[0], param[1], param[2], | ||
554 | param[3], param[4], param[5], | ||
555 | param[6], param[7]); | ||
556 | BUG_ON(rc != H_SUCCESS); | ||
557 | pix = 0; | ||
558 | } | ||
559 | } | ||
560 | } pte_iterate_hashed_end(); | ||
561 | } | ||
562 | if (pix) { | ||
563 | param[pix] = HBR_END; | ||
564 | rc = plpar_hcall9(H_BULK_REMOVE, param, param[0], param[1], | ||
565 | param[2], param[3], param[4], param[5], | ||
566 | param[6], param[7]); | ||
567 | BUG_ON(rc != H_SUCCESS); | ||
568 | } | ||
522 | 569 | ||
523 | if (lock_tlbie) | 570 | if (lock_tlbie) |
524 | spin_unlock_irqrestore(&pSeries_lpar_tlbie_lock, flags); | 571 | spin_unlock_irqrestore(&pSeries_lpar_tlbie_lock, flags); |
diff --git a/arch/powerpc/platforms/pseries/pci.c b/arch/powerpc/platforms/pseries/pci.c index 715db5c89908..c69bd15ced9c 100644 --- a/arch/powerpc/platforms/pseries/pci.c +++ b/arch/powerpc/platforms/pseries/pci.c | |||
@@ -77,7 +77,7 @@ void __init pSeries_final_fixup(void) | |||
77 | 77 | ||
78 | /* | 78 | /* |
79 | * Assume the winbond 82c105 is the IDE controller on a | 79 | * Assume the winbond 82c105 is the IDE controller on a |
80 | * p610. We should probably be more careful in case | 80 | * p610/p615/p630. We should probably be more careful in case |
81 | * someone tries to plug in a similar adapter. | 81 | * someone tries to plug in a similar adapter. |
82 | */ | 82 | */ |
83 | static void fixup_winbond_82c105(struct pci_dev* dev) | 83 | static void fixup_winbond_82c105(struct pci_dev* dev) |
diff --git a/arch/powerpc/sysdev/Makefile b/arch/powerpc/sysdev/Makefile index 2621a7e72d2d..85dcdf178415 100644 --- a/arch/powerpc/sysdev/Makefile +++ b/arch/powerpc/sysdev/Makefile | |||
@@ -22,4 +22,6 @@ endif | |||
22 | ifeq ($(ARCH),powerpc) | 22 | ifeq ($(ARCH),powerpc) |
23 | obj-$(CONFIG_MTD) += rom.o | 23 | obj-$(CONFIG_MTD) += rom.o |
24 | obj-$(CONFIG_CPM2) += cpm2_common.o cpm2_pic.o | 24 | obj-$(CONFIG_CPM2) += cpm2_common.o cpm2_pic.o |
25 | obj-$(CONFIG_8xx) += mpc8xx_pic.o commproc.o | ||
26 | obj-$(CONFIG_UCODE_PATCH) += micropatch.o | ||
25 | endif | 27 | endif |
diff --git a/arch/powerpc/sysdev/commproc.c b/arch/powerpc/sysdev/commproc.c new file mode 100644 index 000000000000..9b4fafd9a840 --- /dev/null +++ b/arch/powerpc/sysdev/commproc.c | |||
@@ -0,0 +1,398 @@ | |||
1 | /* | ||
2 | * General Purpose functions for the global management of the | ||
3 | * Communication Processor Module. | ||
4 | * Copyright (c) 1997 Dan error_act (dmalek@jlc.net) | ||
5 | * | ||
6 | * In addition to the individual control of the communication | ||
7 | * channels, there are a few functions that globally affect the | ||
8 | * communication processor. | ||
9 | * | ||
10 | * Buffer descriptors must be allocated from the dual ported memory | ||
11 | * space. The allocator for that is here. When the communication | ||
12 | * process is reset, we reclaim the memory available. There is | ||
13 | * currently no deallocator for this memory. | ||
14 | * The amount of space available is platform dependent. On the | ||
15 | * MBX, the EPPC software loads additional microcode into the | ||
16 | * communication processor, and uses some of the DP ram for this | ||
17 | * purpose. Current, the first 512 bytes and the last 256 bytes of | ||
18 | * memory are used. Right now I am conservative and only use the | ||
19 | * memory that can never be used for microcode. If there are | ||
20 | * applications that require more DP ram, we can expand the boundaries | ||
21 | * but then we have to be careful of any downloaded microcode. | ||
22 | */ | ||
23 | #include <linux/errno.h> | ||
24 | #include <linux/sched.h> | ||
25 | #include <linux/kernel.h> | ||
26 | #include <linux/dma-mapping.h> | ||
27 | #include <linux/param.h> | ||
28 | #include <linux/string.h> | ||
29 | #include <linux/mm.h> | ||
30 | #include <linux/interrupt.h> | ||
31 | #include <linux/irq.h> | ||
32 | #include <linux/module.h> | ||
33 | #include <asm/mpc8xx.h> | ||
34 | #include <asm/page.h> | ||
35 | #include <asm/pgtable.h> | ||
36 | #include <asm/8xx_immap.h> | ||
37 | #include <asm/commproc.h> | ||
38 | #include <asm/io.h> | ||
39 | #include <asm/tlbflush.h> | ||
40 | #include <asm/rheap.h> | ||
41 | #include <asm/prom.h> | ||
42 | |||
43 | #include <asm/fs_pd.h> | ||
44 | |||
45 | #define CPM_MAP_SIZE (0x4000) | ||
46 | |||
47 | static void m8xx_cpm_dpinit(void); | ||
48 | static uint host_buffer; /* One page of host buffer */ | ||
49 | static uint host_end; /* end + 1 */ | ||
50 | cpm8xx_t *cpmp; /* Pointer to comm processor space */ | ||
51 | cpic8xx_t *cpic_reg; | ||
52 | |||
53 | static struct device_node *cpm_pic_node; | ||
54 | static struct irq_host *cpm_pic_host; | ||
55 | |||
56 | static void cpm_mask_irq(unsigned int irq) | ||
57 | { | ||
58 | unsigned int cpm_vec = (unsigned int)irq_map[irq].hwirq; | ||
59 | |||
60 | clrbits32(&cpic_reg->cpic_cimr, (1 << cpm_vec)); | ||
61 | } | ||
62 | |||
63 | static void cpm_unmask_irq(unsigned int irq) | ||
64 | { | ||
65 | unsigned int cpm_vec = (unsigned int)irq_map[irq].hwirq; | ||
66 | |||
67 | setbits32(&cpic_reg->cpic_cimr, (1 << cpm_vec)); | ||
68 | } | ||
69 | |||
70 | static void cpm_end_irq(unsigned int irq) | ||
71 | { | ||
72 | unsigned int cpm_vec = (unsigned int)irq_map[irq].hwirq; | ||
73 | |||
74 | out_be32(&cpic_reg->cpic_cisr, (1 << cpm_vec)); | ||
75 | } | ||
76 | |||
77 | static struct irq_chip cpm_pic = { | ||
78 | .typename = " CPM PIC ", | ||
79 | .mask = cpm_mask_irq, | ||
80 | .unmask = cpm_unmask_irq, | ||
81 | .eoi = cpm_end_irq, | ||
82 | }; | ||
83 | |||
84 | int cpm_get_irq(void) | ||
85 | { | ||
86 | int cpm_vec; | ||
87 | |||
88 | /* Get the vector by setting the ACK bit and then reading | ||
89 | * the register. | ||
90 | */ | ||
91 | out_be16(&cpic_reg->cpic_civr, 1); | ||
92 | cpm_vec = in_be16(&cpic_reg->cpic_civr); | ||
93 | cpm_vec >>= 11; | ||
94 | |||
95 | return irq_linear_revmap(cpm_pic_host, cpm_vec); | ||
96 | } | ||
97 | |||
98 | static int cpm_pic_host_match(struct irq_host *h, struct device_node *node) | ||
99 | { | ||
100 | return cpm_pic_node == node; | ||
101 | } | ||
102 | |||
103 | static int cpm_pic_host_map(struct irq_host *h, unsigned int virq, | ||
104 | irq_hw_number_t hw) | ||
105 | { | ||
106 | pr_debug("cpm_pic_host_map(%d, 0x%lx)\n", virq, hw); | ||
107 | |||
108 | get_irq_desc(virq)->status |= IRQ_LEVEL; | ||
109 | set_irq_chip_and_handler(virq, &cpm_pic, handle_fasteoi_irq); | ||
110 | return 0; | ||
111 | } | ||
112 | |||
113 | /* The CPM can generate the error interrupt when there is a race condition | ||
114 | * between generating and masking interrupts. All we have to do is ACK it | ||
115 | * and return. This is a no-op function so we don't need any special | ||
116 | * tests in the interrupt handler. | ||
117 | */ | ||
118 | static irqreturn_t cpm_error_interrupt(int irq, void *dev) | ||
119 | { | ||
120 | return IRQ_HANDLED; | ||
121 | } | ||
122 | |||
123 | static struct irqaction cpm_error_irqaction = { | ||
124 | .handler = cpm_error_interrupt, | ||
125 | .mask = CPU_MASK_NONE, | ||
126 | .name = "error", | ||
127 | }; | ||
128 | |||
129 | static struct irq_host_ops cpm_pic_host_ops = { | ||
130 | .match = cpm_pic_host_match, | ||
131 | .map = cpm_pic_host_map, | ||
132 | }; | ||
133 | |||
134 | unsigned int cpm_pic_init(void) | ||
135 | { | ||
136 | struct device_node *np = NULL; | ||
137 | struct resource res; | ||
138 | unsigned int sirq = NO_IRQ, hwirq, eirq; | ||
139 | int ret; | ||
140 | |||
141 | pr_debug("cpm_pic_init\n"); | ||
142 | |||
143 | np = of_find_compatible_node(NULL, "cpm-pic", "CPM"); | ||
144 | if (np == NULL) { | ||
145 | printk(KERN_ERR "CPM PIC init: can not find cpm-pic node\n"); | ||
146 | return sirq; | ||
147 | } | ||
148 | ret = of_address_to_resource(np, 0, &res); | ||
149 | if (ret) | ||
150 | goto end; | ||
151 | |||
152 | cpic_reg = (void *)ioremap(res.start, res.end - res.start + 1); | ||
153 | if (cpic_reg == NULL) | ||
154 | goto end; | ||
155 | |||
156 | sirq = irq_of_parse_and_map(np, 0); | ||
157 | if (sirq == NO_IRQ) | ||
158 | goto end; | ||
159 | |||
160 | /* Initialize the CPM interrupt controller. */ | ||
161 | hwirq = (unsigned int)irq_map[sirq].hwirq; | ||
162 | out_be32(&cpic_reg->cpic_cicr, | ||
163 | (CICR_SCD_SCC4 | CICR_SCC_SCC3 | CICR_SCB_SCC2 | CICR_SCA_SCC1) | | ||
164 | ((hwirq/2) << 13) | CICR_HP_MASK); | ||
165 | |||
166 | out_be32(&cpic_reg->cpic_cimr, 0); | ||
167 | |||
168 | cpm_pic_node = of_node_get(np); | ||
169 | |||
170 | cpm_pic_host = irq_alloc_host(IRQ_HOST_MAP_LINEAR, 64, &cpm_pic_host_ops, 64); | ||
171 | if (cpm_pic_host == NULL) { | ||
172 | printk(KERN_ERR "CPM2 PIC: failed to allocate irq host!\n"); | ||
173 | sirq = NO_IRQ; | ||
174 | goto end; | ||
175 | } | ||
176 | of_node_put(np); | ||
177 | |||
178 | /* Install our own error handler. */ | ||
179 | np = of_find_node_by_type(NULL, "cpm"); | ||
180 | if (np == NULL) { | ||
181 | printk(KERN_ERR "CPM PIC init: can not find cpm node\n"); | ||
182 | goto end; | ||
183 | } | ||
184 | eirq= irq_of_parse_and_map(np, 0); | ||
185 | if (eirq == NO_IRQ) | ||
186 | goto end; | ||
187 | |||
188 | if (setup_irq(eirq, &cpm_error_irqaction)) | ||
189 | printk(KERN_ERR "Could not allocate CPM error IRQ!"); | ||
190 | |||
191 | setbits32(&cpic_reg->cpic_cicr, CICR_IEN); | ||
192 | |||
193 | end: | ||
194 | of_node_put(np); | ||
195 | return sirq; | ||
196 | } | ||
197 | |||
198 | void cpm_reset(void) | ||
199 | { | ||
200 | cpm8xx_t *commproc; | ||
201 | sysconf8xx_t *siu_conf; | ||
202 | |||
203 | commproc = (cpm8xx_t *)ioremap(CPM_MAP_ADDR, CPM_MAP_SIZE); | ||
204 | |||
205 | #ifdef CONFIG_UCODE_PATCH | ||
206 | /* Perform a reset. | ||
207 | */ | ||
208 | out_be16(&commproc->cp_cpcr, CPM_CR_RST | CPM_CR_FLG); | ||
209 | |||
210 | /* Wait for it. | ||
211 | */ | ||
212 | while (in_be16(&commproc->cp_cpcr) & CPM_CR_FLG); | ||
213 | |||
214 | cpm_load_patch(commproc); | ||
215 | #endif | ||
216 | |||
217 | /* Set SDMA Bus Request priority 5. | ||
218 | * On 860T, this also enables FEC priority 6. I am not sure | ||
219 | * this is what we realy want for some applications, but the | ||
220 | * manual recommends it. | ||
221 | * Bit 25, FAM can also be set to use FEC aggressive mode (860T). | ||
222 | */ | ||
223 | siu_conf = (sysconf8xx_t*)immr_map(im_siu_conf); | ||
224 | out_be32(&siu_conf->sc_sdcr, 1); | ||
225 | immr_unmap(siu_conf); | ||
226 | |||
227 | /* Reclaim the DP memory for our use. */ | ||
228 | m8xx_cpm_dpinit(); | ||
229 | |||
230 | /* Tell everyone where the comm processor resides. | ||
231 | */ | ||
232 | cpmp = commproc; | ||
233 | } | ||
234 | |||
235 | /* We used to do this earlier, but have to postpone as long as possible | ||
236 | * to ensure the kernel VM is now running. | ||
237 | */ | ||
238 | static void | ||
239 | alloc_host_memory(void) | ||
240 | { | ||
241 | dma_addr_t physaddr; | ||
242 | |||
243 | /* Set the host page for allocation. | ||
244 | */ | ||
245 | host_buffer = (uint)dma_alloc_coherent(NULL, PAGE_SIZE, &physaddr, | ||
246 | GFP_KERNEL); | ||
247 | host_end = host_buffer + PAGE_SIZE; | ||
248 | } | ||
249 | |||
250 | /* We also own one page of host buffer space for the allocation of | ||
251 | * UART "fifos" and the like. | ||
252 | */ | ||
253 | uint | ||
254 | m8xx_cpm_hostalloc(uint size) | ||
255 | { | ||
256 | uint retloc; | ||
257 | |||
258 | if (host_buffer == 0) | ||
259 | alloc_host_memory(); | ||
260 | |||
261 | if ((host_buffer + size) >= host_end) | ||
262 | return(0); | ||
263 | |||
264 | retloc = host_buffer; | ||
265 | host_buffer += size; | ||
266 | |||
267 | return(retloc); | ||
268 | } | ||
269 | |||
270 | /* Set a baud rate generator. This needs lots of work. There are | ||
271 | * four BRGs, any of which can be wired to any channel. | ||
272 | * The internal baud rate clock is the system clock divided by 16. | ||
273 | * This assumes the baudrate is 16x oversampled by the uart. | ||
274 | */ | ||
275 | #define BRG_INT_CLK (get_brgfreq()) | ||
276 | #define BRG_UART_CLK (BRG_INT_CLK/16) | ||
277 | #define BRG_UART_CLK_DIV16 (BRG_UART_CLK/16) | ||
278 | |||
279 | void | ||
280 | cpm_setbrg(uint brg, uint rate) | ||
281 | { | ||
282 | volatile uint *bp; | ||
283 | |||
284 | /* This is good enough to get SMCs running..... | ||
285 | */ | ||
286 | bp = (uint *)&cpmp->cp_brgc1; | ||
287 | bp += brg; | ||
288 | /* The BRG has a 12-bit counter. For really slow baud rates (or | ||
289 | * really fast processors), we may have to further divide by 16. | ||
290 | */ | ||
291 | if (((BRG_UART_CLK / rate) - 1) < 4096) | ||
292 | *bp = (((BRG_UART_CLK / rate) - 1) << 1) | CPM_BRG_EN; | ||
293 | else | ||
294 | *bp = (((BRG_UART_CLK_DIV16 / rate) - 1) << 1) | | ||
295 | CPM_BRG_EN | CPM_BRG_DIV16; | ||
296 | } | ||
297 | |||
298 | /* | ||
299 | * dpalloc / dpfree bits. | ||
300 | */ | ||
301 | static spinlock_t cpm_dpmem_lock; | ||
302 | /* | ||
303 | * 16 blocks should be enough to satisfy all requests | ||
304 | * until the memory subsystem goes up... | ||
305 | */ | ||
306 | static rh_block_t cpm_boot_dpmem_rh_block[16]; | ||
307 | static rh_info_t cpm_dpmem_info; | ||
308 | |||
309 | #define CPM_DPMEM_ALIGNMENT 8 | ||
310 | static u8* dpram_vbase; | ||
311 | static uint dpram_pbase; | ||
312 | |||
313 | void m8xx_cpm_dpinit(void) | ||
314 | { | ||
315 | spin_lock_init(&cpm_dpmem_lock); | ||
316 | |||
317 | dpram_vbase = immr_map_size(im_cpm.cp_dpmem, CPM_DATAONLY_BASE + CPM_DATAONLY_SIZE); | ||
318 | dpram_pbase = (uint)&((immap_t *)IMAP_ADDR)->im_cpm.cp_dpmem; | ||
319 | |||
320 | /* Initialize the info header */ | ||
321 | rh_init(&cpm_dpmem_info, CPM_DPMEM_ALIGNMENT, | ||
322 | sizeof(cpm_boot_dpmem_rh_block) / | ||
323 | sizeof(cpm_boot_dpmem_rh_block[0]), | ||
324 | cpm_boot_dpmem_rh_block); | ||
325 | |||
326 | /* | ||
327 | * Attach the usable dpmem area. | ||
328 | * XXX: This is actually crap. CPM_DATAONLY_BASE and | ||
329 | * CPM_DATAONLY_SIZE are a subset of the available dparm. It varies | ||
330 | * with the processor and the microcode patches applied / activated. | ||
331 | * But the following should be at least safe. | ||
332 | */ | ||
333 | rh_attach_region(&cpm_dpmem_info, (void *)CPM_DATAONLY_BASE, CPM_DATAONLY_SIZE); | ||
334 | } | ||
335 | |||
336 | /* | ||
337 | * Allocate the requested size worth of DP memory. | ||
338 | * This function returns an offset into the DPRAM area. | ||
339 | * Use cpm_dpram_addr() to get the virtual address of the area. | ||
340 | */ | ||
341 | uint cpm_dpalloc(uint size, uint align) | ||
342 | { | ||
343 | void *start; | ||
344 | unsigned long flags; | ||
345 | |||
346 | spin_lock_irqsave(&cpm_dpmem_lock, flags); | ||
347 | cpm_dpmem_info.alignment = align; | ||
348 | start = rh_alloc(&cpm_dpmem_info, size, "commproc"); | ||
349 | spin_unlock_irqrestore(&cpm_dpmem_lock, flags); | ||
350 | |||
351 | return (uint)start; | ||
352 | } | ||
353 | EXPORT_SYMBOL(cpm_dpalloc); | ||
354 | |||
355 | int cpm_dpfree(uint offset) | ||
356 | { | ||
357 | int ret; | ||
358 | unsigned long flags; | ||
359 | |||
360 | spin_lock_irqsave(&cpm_dpmem_lock, flags); | ||
361 | ret = rh_free(&cpm_dpmem_info, (void *)offset); | ||
362 | spin_unlock_irqrestore(&cpm_dpmem_lock, flags); | ||
363 | |||
364 | return ret; | ||
365 | } | ||
366 | EXPORT_SYMBOL(cpm_dpfree); | ||
367 | |||
368 | uint cpm_dpalloc_fixed(uint offset, uint size, uint align) | ||
369 | { | ||
370 | void *start; | ||
371 | unsigned long flags; | ||
372 | |||
373 | spin_lock_irqsave(&cpm_dpmem_lock, flags); | ||
374 | cpm_dpmem_info.alignment = align; | ||
375 | start = rh_alloc_fixed(&cpm_dpmem_info, (void *)offset, size, "commproc"); | ||
376 | spin_unlock_irqrestore(&cpm_dpmem_lock, flags); | ||
377 | |||
378 | return (uint)start; | ||
379 | } | ||
380 | EXPORT_SYMBOL(cpm_dpalloc_fixed); | ||
381 | |||
382 | void cpm_dpdump(void) | ||
383 | { | ||
384 | rh_dump(&cpm_dpmem_info); | ||
385 | } | ||
386 | EXPORT_SYMBOL(cpm_dpdump); | ||
387 | |||
388 | void *cpm_dpram_addr(uint offset) | ||
389 | { | ||
390 | return (void *)(dpram_vbase + offset); | ||
391 | } | ||
392 | EXPORT_SYMBOL(cpm_dpram_addr); | ||
393 | |||
394 | uint cpm_dpram_phys(u8* addr) | ||
395 | { | ||
396 | return (dpram_pbase + (uint)(addr - dpram_vbase)); | ||
397 | } | ||
398 | EXPORT_SYMBOL(cpm_dpram_addr); | ||
diff --git a/arch/powerpc/sysdev/cpm2_pic.c b/arch/powerpc/sysdev/cpm2_pic.c index 767ee6651adc..eabfe06fe05c 100644 --- a/arch/powerpc/sysdev/cpm2_pic.c +++ b/arch/powerpc/sysdev/cpm2_pic.c | |||
@@ -36,9 +36,20 @@ | |||
36 | #include <asm/mpc8260.h> | 36 | #include <asm/mpc8260.h> |
37 | #include <asm/io.h> | 37 | #include <asm/io.h> |
38 | #include <asm/prom.h> | 38 | #include <asm/prom.h> |
39 | #include <asm/fs_pd.h> | ||
39 | 40 | ||
40 | #include "cpm2_pic.h" | 41 | #include "cpm2_pic.h" |
41 | 42 | ||
43 | /* External IRQS */ | ||
44 | #define CPM2_IRQ_EXT1 19 | ||
45 | #define CPM2_IRQ_EXT7 25 | ||
46 | |||
47 | /* Port C IRQS */ | ||
48 | #define CPM2_IRQ_PORTC15 48 | ||
49 | #define CPM2_IRQ_PORTC0 63 | ||
50 | |||
51 | static intctl_cpm2_t *cpm2_intctl; | ||
52 | |||
42 | static struct device_node *cpm2_pic_node; | 53 | static struct device_node *cpm2_pic_node; |
43 | static struct irq_host *cpm2_pic_host; | 54 | static struct irq_host *cpm2_pic_host; |
44 | #define NR_MASK_WORDS ((NR_IRQS + 31) / 32) | 55 | #define NR_MASK_WORDS ((NR_IRQS + 31) / 32) |
@@ -68,68 +79,55 @@ static const u_char irq_to_siubit[] = { | |||
68 | 24, 25, 26, 27, 28, 29, 30, 31, | 79 | 24, 25, 26, 27, 28, 29, 30, 31, |
69 | }; | 80 | }; |
70 | 81 | ||
71 | static void cpm2_mask_irq(unsigned int irq_nr) | 82 | static void cpm2_mask_irq(unsigned int virq) |
72 | { | 83 | { |
73 | int bit, word; | 84 | int bit, word; |
74 | volatile uint *simr; | 85 | unsigned int irq_nr = virq_to_hw(virq); |
75 | |||
76 | irq_nr -= CPM_IRQ_OFFSET; | ||
77 | 86 | ||
78 | bit = irq_to_siubit[irq_nr]; | 87 | bit = irq_to_siubit[irq_nr]; |
79 | word = irq_to_siureg[irq_nr]; | 88 | word = irq_to_siureg[irq_nr]; |
80 | 89 | ||
81 | simr = &(cpm2_intctl->ic_simrh); | ||
82 | ppc_cached_irq_mask[word] &= ~(1 << bit); | 90 | ppc_cached_irq_mask[word] &= ~(1 << bit); |
83 | simr[word] = ppc_cached_irq_mask[word]; | 91 | out_be32(&cpm2_intctl->ic_simrh + word, ppc_cached_irq_mask[word]); |
84 | } | 92 | } |
85 | 93 | ||
86 | static void cpm2_unmask_irq(unsigned int irq_nr) | 94 | static void cpm2_unmask_irq(unsigned int virq) |
87 | { | 95 | { |
88 | int bit, word; | 96 | int bit, word; |
89 | volatile uint *simr; | 97 | unsigned int irq_nr = virq_to_hw(virq); |
90 | |||
91 | irq_nr -= CPM_IRQ_OFFSET; | ||
92 | 98 | ||
93 | bit = irq_to_siubit[irq_nr]; | 99 | bit = irq_to_siubit[irq_nr]; |
94 | word = irq_to_siureg[irq_nr]; | 100 | word = irq_to_siureg[irq_nr]; |
95 | 101 | ||
96 | simr = &(cpm2_intctl->ic_simrh); | ||
97 | ppc_cached_irq_mask[word] |= 1 << bit; | 102 | ppc_cached_irq_mask[word] |= 1 << bit; |
98 | simr[word] = ppc_cached_irq_mask[word]; | 103 | out_be32(&cpm2_intctl->ic_simrh + word, ppc_cached_irq_mask[word]); |
99 | } | 104 | } |
100 | 105 | ||
101 | static void cpm2_mask_and_ack(unsigned int irq_nr) | 106 | static void cpm2_ack(unsigned int virq) |
102 | { | 107 | { |
103 | int bit, word; | 108 | int bit, word; |
104 | volatile uint *simr, *sipnr; | 109 | unsigned int irq_nr = virq_to_hw(virq); |
105 | |||
106 | irq_nr -= CPM_IRQ_OFFSET; | ||
107 | 110 | ||
108 | bit = irq_to_siubit[irq_nr]; | 111 | bit = irq_to_siubit[irq_nr]; |
109 | word = irq_to_siureg[irq_nr]; | 112 | word = irq_to_siureg[irq_nr]; |
110 | 113 | ||
111 | simr = &(cpm2_intctl->ic_simrh); | 114 | out_be32(&cpm2_intctl->ic_sipnrh + word, 1 << bit); |
112 | sipnr = &(cpm2_intctl->ic_sipnrh); | ||
113 | ppc_cached_irq_mask[word] &= ~(1 << bit); | ||
114 | simr[word] = ppc_cached_irq_mask[word]; | ||
115 | sipnr[word] = 1 << bit; | ||
116 | } | 115 | } |
117 | 116 | ||
118 | static void cpm2_end_irq(unsigned int irq_nr) | 117 | static void cpm2_end_irq(unsigned int virq) |
119 | { | 118 | { |
120 | int bit, word; | 119 | int bit, word; |
121 | volatile uint *simr; | 120 | unsigned int irq_nr = virq_to_hw(virq); |
122 | 121 | ||
123 | if (!(irq_desc[irq_nr].status & (IRQ_DISABLED|IRQ_INPROGRESS)) | 122 | if (!(irq_desc[irq_nr].status & (IRQ_DISABLED|IRQ_INPROGRESS)) |
124 | && irq_desc[irq_nr].action) { | 123 | && irq_desc[irq_nr].action) { |
125 | 124 | ||
126 | irq_nr -= CPM_IRQ_OFFSET; | ||
127 | bit = irq_to_siubit[irq_nr]; | 125 | bit = irq_to_siubit[irq_nr]; |
128 | word = irq_to_siureg[irq_nr]; | 126 | word = irq_to_siureg[irq_nr]; |
129 | 127 | ||
130 | simr = &(cpm2_intctl->ic_simrh); | ||
131 | ppc_cached_irq_mask[word] |= 1 << bit; | 128 | ppc_cached_irq_mask[word] |= 1 << bit; |
132 | simr[word] = ppc_cached_irq_mask[word]; | 129 | out_be32(&cpm2_intctl->ic_simrh + word, ppc_cached_irq_mask[word]); |
130 | |||
133 | /* | 131 | /* |
134 | * Work around large numbers of spurious IRQs on PowerPC 82xx | 132 | * Work around large numbers of spurious IRQs on PowerPC 82xx |
135 | * systems. | 133 | * systems. |
@@ -138,13 +136,59 @@ static void cpm2_end_irq(unsigned int irq_nr) | |||
138 | } | 136 | } |
139 | } | 137 | } |
140 | 138 | ||
139 | static int cpm2_set_irq_type(unsigned int virq, unsigned int flow_type) | ||
140 | { | ||
141 | unsigned int src = virq_to_hw(virq); | ||
142 | struct irq_desc *desc = get_irq_desc(virq); | ||
143 | unsigned int vold, vnew, edibit; | ||
144 | |||
145 | if (flow_type == IRQ_TYPE_NONE) | ||
146 | flow_type = IRQ_TYPE_LEVEL_LOW; | ||
147 | |||
148 | if (flow_type & IRQ_TYPE_EDGE_RISING) { | ||
149 | printk(KERN_ERR "CPM2 PIC: sense type 0x%x not supported\n", | ||
150 | flow_type); | ||
151 | return -EINVAL; | ||
152 | } | ||
153 | |||
154 | desc->status &= ~(IRQ_TYPE_SENSE_MASK | IRQ_LEVEL); | ||
155 | desc->status |= flow_type & IRQ_TYPE_SENSE_MASK; | ||
156 | if (flow_type & IRQ_TYPE_LEVEL_LOW) { | ||
157 | desc->status |= IRQ_LEVEL; | ||
158 | desc->handle_irq = handle_level_irq; | ||
159 | } else | ||
160 | desc->handle_irq = handle_edge_irq; | ||
161 | |||
162 | /* internal IRQ senses are LEVEL_LOW | ||
163 | * EXT IRQ and Port C IRQ senses are programmable | ||
164 | */ | ||
165 | if (src >= CPM2_IRQ_EXT1 && src <= CPM2_IRQ_EXT7) | ||
166 | edibit = (14 - (src - CPM2_IRQ_EXT1)); | ||
167 | else | ||
168 | if (src >= CPM2_IRQ_PORTC15 && src <= CPM2_IRQ_PORTC0) | ||
169 | edibit = (31 - (src - CPM2_IRQ_PORTC15)); | ||
170 | else | ||
171 | return (flow_type & IRQ_TYPE_LEVEL_LOW) ? 0 : -EINVAL; | ||
172 | |||
173 | vold = in_be32(&cpm2_intctl->ic_siexr); | ||
174 | |||
175 | if ((flow_type & IRQ_TYPE_SENSE_MASK) == IRQ_TYPE_EDGE_FALLING) | ||
176 | vnew = vold | (1 << edibit); | ||
177 | else | ||
178 | vnew = vold & ~(1 << edibit); | ||
179 | |||
180 | if (vold != vnew) | ||
181 | out_be32(&cpm2_intctl->ic_siexr, vnew); | ||
182 | return 0; | ||
183 | } | ||
184 | |||
141 | static struct irq_chip cpm2_pic = { | 185 | static struct irq_chip cpm2_pic = { |
142 | .typename = " CPM2 SIU ", | 186 | .typename = " CPM2 SIU ", |
143 | .enable = cpm2_unmask_irq, | 187 | .mask = cpm2_mask_irq, |
144 | .disable = cpm2_mask_irq, | ||
145 | .unmask = cpm2_unmask_irq, | 188 | .unmask = cpm2_unmask_irq, |
146 | .mask_ack = cpm2_mask_and_ack, | 189 | .ack = cpm2_ack, |
147 | .end = cpm2_end_irq, | 190 | .eoi = cpm2_end_irq, |
191 | .set_type = cpm2_set_irq_type, | ||
148 | }; | 192 | }; |
149 | 193 | ||
150 | unsigned int cpm2_get_irq(void) | 194 | unsigned int cpm2_get_irq(void) |
@@ -154,17 +198,17 @@ unsigned int cpm2_get_irq(void) | |||
154 | 198 | ||
155 | /* For CPM2, read the SIVEC register and shift the bits down | 199 | /* For CPM2, read the SIVEC register and shift the bits down |
156 | * to get the irq number. */ | 200 | * to get the irq number. */ |
157 | bits = cpm2_intctl->ic_sivec; | 201 | bits = in_be32(&cpm2_intctl->ic_sivec); |
158 | irq = bits >> 26; | 202 | irq = bits >> 26; |
159 | 203 | ||
160 | if (irq == 0) | 204 | if (irq == 0) |
161 | return(-1); | 205 | return(-1); |
162 | return irq+CPM_IRQ_OFFSET; | 206 | return irq_linear_revmap(cpm2_pic_host, irq); |
163 | } | 207 | } |
164 | 208 | ||
165 | static int cpm2_pic_host_match(struct irq_host *h, struct device_node *node) | 209 | static int cpm2_pic_host_match(struct irq_host *h, struct device_node *node) |
166 | { | 210 | { |
167 | return cpm2_pic_node == NULL || cpm2_pic_node == node; | 211 | return cpm2_pic_node == node; |
168 | } | 212 | } |
169 | 213 | ||
170 | static int cpm2_pic_host_map(struct irq_host *h, unsigned int virq, | 214 | static int cpm2_pic_host_map(struct irq_host *h, unsigned int virq, |
@@ -177,39 +221,21 @@ static int cpm2_pic_host_map(struct irq_host *h, unsigned int virq, | |||
177 | return 0; | 221 | return 0; |
178 | } | 222 | } |
179 | 223 | ||
180 | static void cpm2_host_unmap(struct irq_host *h, unsigned int virq) | ||
181 | { | ||
182 | /* Make sure irq is masked in hardware */ | ||
183 | cpm2_mask_irq(virq); | ||
184 | |||
185 | /* remove chip and handler */ | ||
186 | set_irq_chip_and_handler(virq, NULL, NULL); | ||
187 | } | ||
188 | |||
189 | static int cpm2_pic_host_xlate(struct irq_host *h, struct device_node *ct, | 224 | static int cpm2_pic_host_xlate(struct irq_host *h, struct device_node *ct, |
190 | u32 *intspec, unsigned int intsize, | 225 | u32 *intspec, unsigned int intsize, |
191 | irq_hw_number_t *out_hwirq, unsigned int *out_flags) | 226 | irq_hw_number_t *out_hwirq, unsigned int *out_flags) |
192 | { | 227 | { |
193 | static const unsigned char map_cpm2_senses[4] = { | ||
194 | IRQ_TYPE_LEVEL_LOW, | ||
195 | IRQ_TYPE_LEVEL_HIGH, | ||
196 | IRQ_TYPE_EDGE_FALLING, | ||
197 | IRQ_TYPE_EDGE_RISING, | ||
198 | }; | ||
199 | |||
200 | *out_hwirq = intspec[0]; | 228 | *out_hwirq = intspec[0]; |
201 | if (intsize > 1 && intspec[1] < 4) | 229 | if (intsize > 1) |
202 | *out_flags = map_cpm2_senses[intspec[1]]; | 230 | *out_flags = intspec[1]; |
203 | else | 231 | else |
204 | *out_flags = IRQ_TYPE_NONE; | 232 | *out_flags = IRQ_TYPE_NONE; |
205 | |||
206 | return 0; | 233 | return 0; |
207 | } | 234 | } |
208 | 235 | ||
209 | static struct irq_host_ops cpm2_pic_host_ops = { | 236 | static struct irq_host_ops cpm2_pic_host_ops = { |
210 | .match = cpm2_pic_host_match, | 237 | .match = cpm2_pic_host_match, |
211 | .map = cpm2_pic_host_map, | 238 | .map = cpm2_pic_host_map, |
212 | .unmap = cpm2_host_unmap, | ||
213 | .xlate = cpm2_pic_host_xlate, | 239 | .xlate = cpm2_pic_host_xlate, |
214 | }; | 240 | }; |
215 | 241 | ||
@@ -217,37 +243,37 @@ void cpm2_pic_init(struct device_node *node) | |||
217 | { | 243 | { |
218 | int i; | 244 | int i; |
219 | 245 | ||
246 | cpm2_intctl = cpm2_map(im_intctl); | ||
247 | |||
220 | /* Clear the CPM IRQ controller, in case it has any bits set | 248 | /* Clear the CPM IRQ controller, in case it has any bits set |
221 | * from the bootloader | 249 | * from the bootloader |
222 | */ | 250 | */ |
223 | 251 | ||
224 | /* Mask out everything */ | 252 | /* Mask out everything */ |
225 | 253 | ||
226 | cpm2_intctl->ic_simrh = 0x00000000; | 254 | out_be32(&cpm2_intctl->ic_simrh, 0x00000000); |
227 | cpm2_intctl->ic_simrl = 0x00000000; | 255 | out_be32(&cpm2_intctl->ic_simrl, 0x00000000); |
228 | 256 | ||
229 | wmb(); | 257 | wmb(); |
230 | 258 | ||
231 | /* Ack everything */ | 259 | /* Ack everything */ |
232 | cpm2_intctl->ic_sipnrh = 0xffffffff; | 260 | out_be32(&cpm2_intctl->ic_sipnrh, 0xffffffff); |
233 | cpm2_intctl->ic_sipnrl = 0xffffffff; | 261 | out_be32(&cpm2_intctl->ic_sipnrl, 0xffffffff); |
234 | wmb(); | 262 | wmb(); |
235 | 263 | ||
236 | /* Dummy read of the vector */ | 264 | /* Dummy read of the vector */ |
237 | i = cpm2_intctl->ic_sivec; | 265 | i = in_be32(&cpm2_intctl->ic_sivec); |
238 | rmb(); | 266 | rmb(); |
239 | 267 | ||
240 | /* Initialize the default interrupt mapping priorities, | 268 | /* Initialize the default interrupt mapping priorities, |
241 | * in case the boot rom changed something on us. | 269 | * in case the boot rom changed something on us. |
242 | */ | 270 | */ |
243 | cpm2_intctl->ic_sicr = 0; | 271 | out_be16(&cpm2_intctl->ic_sicr, 0); |
244 | cpm2_intctl->ic_scprrh = 0x05309770; | 272 | out_be32(&cpm2_intctl->ic_scprrh, 0x05309770); |
245 | cpm2_intctl->ic_scprrl = 0x05309770; | 273 | out_be32(&cpm2_intctl->ic_scprrl, 0x05309770); |
246 | 274 | ||
247 | /* create a legacy host */ | 275 | /* create a legacy host */ |
248 | if (node) | 276 | cpm2_pic_node = of_node_get(node); |
249 | cpm2_pic_node = of_node_get(node); | ||
250 | |||
251 | cpm2_pic_host = irq_alloc_host(IRQ_HOST_MAP_LINEAR, 64, &cpm2_pic_host_ops, 64); | 277 | cpm2_pic_host = irq_alloc_host(IRQ_HOST_MAP_LINEAR, 64, &cpm2_pic_host_ops, 64); |
252 | if (cpm2_pic_host == NULL) { | 278 | if (cpm2_pic_host == NULL) { |
253 | printk(KERN_ERR "CPM2 PIC: failed to allocate irq host!\n"); | 279 | printk(KERN_ERR "CPM2 PIC: failed to allocate irq host!\n"); |
diff --git a/arch/powerpc/sysdev/cpm2_pic.h b/arch/powerpc/sysdev/cpm2_pic.h index 2840616529e4..30e5828a2781 100644 --- a/arch/powerpc/sysdev/cpm2_pic.h +++ b/arch/powerpc/sysdev/cpm2_pic.h | |||
@@ -1,8 +1,6 @@ | |||
1 | #ifndef _PPC_KERNEL_CPM2_H | 1 | #ifndef _PPC_KERNEL_CPM2_H |
2 | #define _PPC_KERNEL_CPM2_H | 2 | #define _PPC_KERNEL_CPM2_H |
3 | 3 | ||
4 | extern intctl_cpm2_t *cpm2_intctl; | ||
5 | |||
6 | extern unsigned int cpm2_get_irq(void); | 4 | extern unsigned int cpm2_get_irq(void); |
7 | 5 | ||
8 | extern void cpm2_pic_init(struct device_node*); | 6 | extern void cpm2_pic_init(struct device_node*); |
diff --git a/arch/powerpc/sysdev/fsl_soc.c b/arch/powerpc/sysdev/fsl_soc.c index ad31e56e892b..9f2a9a444bfb 100644 --- a/arch/powerpc/sysdev/fsl_soc.c +++ b/arch/powerpc/sysdev/fsl_soc.c | |||
@@ -38,7 +38,8 @@ | |||
38 | #include <asm/cpm2.h> | 38 | #include <asm/cpm2.h> |
39 | 39 | ||
40 | extern void init_fcc_ioports(struct fs_platform_info*); | 40 | extern void init_fcc_ioports(struct fs_platform_info*); |
41 | extern void init_scc_ioports(struct fs_uart_platform_info*); | 41 | extern void init_fec_ioports(struct fs_platform_info*); |
42 | extern void init_smc_ioports(struct fs_uart_platform_info*); | ||
42 | static phys_addr_t immrbase = -1; | 43 | static phys_addr_t immrbase = -1; |
43 | 44 | ||
44 | phys_addr_t get_immrbase(void) | 45 | phys_addr_t get_immrbase(void) |
@@ -63,7 +64,7 @@ phys_addr_t get_immrbase(void) | |||
63 | 64 | ||
64 | EXPORT_SYMBOL(get_immrbase); | 65 | EXPORT_SYMBOL(get_immrbase); |
65 | 66 | ||
66 | #ifdef CONFIG_CPM2 | 67 | #if defined(CONFIG_CPM2) || defined(CONFIG_8xx) |
67 | 68 | ||
68 | static u32 brgfreq = -1; | 69 | static u32 brgfreq = -1; |
69 | 70 | ||
@@ -544,6 +545,8 @@ arch_initcall(fsl_usb_of_init); | |||
544 | 545 | ||
545 | #ifdef CONFIG_CPM2 | 546 | #ifdef CONFIG_CPM2 |
546 | 547 | ||
548 | extern void init_scc_ioports(struct fs_uart_platform_info*); | ||
549 | |||
547 | static const char fcc_regs[] = "fcc_regs"; | 550 | static const char fcc_regs[] = "fcc_regs"; |
548 | static const char fcc_regs_c[] = "fcc_regs_c"; | 551 | static const char fcc_regs_c[] = "fcc_regs_c"; |
549 | static const char fcc_pram[] = "fcc_pram"; | 552 | static const char fcc_pram[] = "fcc_pram"; |
@@ -792,3 +795,270 @@ err: | |||
792 | 795 | ||
793 | arch_initcall(cpm_uart_of_init); | 796 | arch_initcall(cpm_uart_of_init); |
794 | #endif /* CONFIG_CPM2 */ | 797 | #endif /* CONFIG_CPM2 */ |
798 | |||
799 | #ifdef CONFIG_8xx | ||
800 | |||
801 | extern void init_scc_ioports(struct fs_platform_info*); | ||
802 | extern int platform_device_skip(char *model, int id); | ||
803 | |||
804 | static int __init fs_enet_mdio_of_init(void) | ||
805 | { | ||
806 | struct device_node *np; | ||
807 | unsigned int i; | ||
808 | struct platform_device *mdio_dev; | ||
809 | struct resource res; | ||
810 | int ret; | ||
811 | |||
812 | for (np = NULL, i = 0; | ||
813 | (np = of_find_compatible_node(np, "mdio", "fs_enet")) != NULL; | ||
814 | i++) { | ||
815 | struct fs_mii_fec_platform_info mdio_data; | ||
816 | |||
817 | memset(&res, 0, sizeof(res)); | ||
818 | memset(&mdio_data, 0, sizeof(mdio_data)); | ||
819 | |||
820 | ret = of_address_to_resource(np, 0, &res); | ||
821 | if (ret) | ||
822 | goto err; | ||
823 | |||
824 | mdio_dev = | ||
825 | platform_device_register_simple("fsl-cpm-fec-mdio", | ||
826 | res.start, &res, 1); | ||
827 | if (IS_ERR(mdio_dev)) { | ||
828 | ret = PTR_ERR(mdio_dev); | ||
829 | goto err; | ||
830 | } | ||
831 | |||
832 | mdio_data.mii_speed = ((((ppc_proc_freq + 4999999) / 2500000) / 2) & 0x3F) << 1; | ||
833 | |||
834 | ret = | ||
835 | platform_device_add_data(mdio_dev, &mdio_data, | ||
836 | sizeof(struct fs_mii_fec_platform_info)); | ||
837 | if (ret) | ||
838 | goto unreg; | ||
839 | } | ||
840 | return 0; | ||
841 | |||
842 | unreg: | ||
843 | platform_device_unregister(mdio_dev); | ||
844 | err: | ||
845 | return ret; | ||
846 | } | ||
847 | |||
848 | arch_initcall(fs_enet_mdio_of_init); | ||
849 | |||
850 | static const char *enet_regs = "regs"; | ||
851 | static const char *enet_pram = "pram"; | ||
852 | static const char *enet_irq = "interrupt"; | ||
853 | static char bus_id[9][BUS_ID_SIZE]; | ||
854 | |||
855 | static int __init fs_enet_of_init(void) | ||
856 | { | ||
857 | struct device_node *np; | ||
858 | unsigned int i; | ||
859 | struct platform_device *fs_enet_dev = NULL; | ||
860 | struct resource res; | ||
861 | int ret; | ||
862 | |||
863 | for (np = NULL, i = 0; | ||
864 | (np = of_find_compatible_node(np, "network", "fs_enet")) != NULL; | ||
865 | i++) { | ||
866 | struct resource r[4]; | ||
867 | struct device_node *phy = NULL, *mdio = NULL; | ||
868 | struct fs_platform_info fs_enet_data; | ||
869 | unsigned int *id, *phy_addr; | ||
870 | void *mac_addr; | ||
871 | phandle *ph; | ||
872 | char *model; | ||
873 | |||
874 | memset(r, 0, sizeof(r)); | ||
875 | memset(&fs_enet_data, 0, sizeof(fs_enet_data)); | ||
876 | |||
877 | model = (char *)get_property(np, "model", NULL); | ||
878 | if (model == NULL) { | ||
879 | ret = -ENODEV; | ||
880 | goto unreg; | ||
881 | } | ||
882 | |||
883 | id = (u32 *) get_property(np, "device-id", NULL); | ||
884 | fs_enet_data.fs_no = *id; | ||
885 | |||
886 | if (platform_device_skip(model, *id)) | ||
887 | continue; | ||
888 | |||
889 | ret = of_address_to_resource(np, 0, &r[0]); | ||
890 | if (ret) | ||
891 | goto err; | ||
892 | r[0].name = enet_regs; | ||
893 | |||
894 | mac_addr = (void *)get_property(np, "mac-address", NULL); | ||
895 | memcpy(fs_enet_data.macaddr, mac_addr, 6); | ||
896 | |||
897 | ph = (phandle *) get_property(np, "phy-handle", NULL); | ||
898 | if (ph != NULL) | ||
899 | phy = of_find_node_by_phandle(*ph); | ||
900 | |||
901 | if (phy != NULL) { | ||
902 | phy_addr = (u32 *) get_property(phy, "reg", NULL); | ||
903 | fs_enet_data.phy_addr = *phy_addr; | ||
904 | fs_enet_data.has_phy = 1; | ||
905 | |||
906 | mdio = of_get_parent(phy); | ||
907 | ret = of_address_to_resource(mdio, 0, &res); | ||
908 | if (ret) { | ||
909 | of_node_put(phy); | ||
910 | of_node_put(mdio); | ||
911 | goto unreg; | ||
912 | } | ||
913 | } | ||
914 | |||
915 | model = (char*)get_property(np, "model", NULL); | ||
916 | strcpy(fs_enet_data.fs_type, model); | ||
917 | |||
918 | if (strstr(model, "FEC")) { | ||
919 | r[1].start = r[1].end = irq_of_parse_and_map(np, 0); | ||
920 | r[1].flags = IORESOURCE_IRQ; | ||
921 | r[1].name = enet_irq; | ||
922 | |||
923 | fs_enet_dev = | ||
924 | platform_device_register_simple("fsl-cpm-fec", i, &r[0], 2); | ||
925 | |||
926 | if (IS_ERR(fs_enet_dev)) { | ||
927 | ret = PTR_ERR(fs_enet_dev); | ||
928 | goto err; | ||
929 | } | ||
930 | |||
931 | fs_enet_data.rx_ring = 128; | ||
932 | fs_enet_data.tx_ring = 16; | ||
933 | fs_enet_data.rx_copybreak = 240; | ||
934 | fs_enet_data.use_napi = 1; | ||
935 | fs_enet_data.napi_weight = 17; | ||
936 | |||
937 | snprintf((char*)&bus_id[i], BUS_ID_SIZE, "%x:%02x", | ||
938 | (u32)res.start, fs_enet_data.phy_addr); | ||
939 | fs_enet_data.bus_id = (char*)&bus_id[i]; | ||
940 | fs_enet_data.init_ioports = init_fec_ioports; | ||
941 | } | ||
942 | if (strstr(model, "SCC")) { | ||
943 | ret = of_address_to_resource(np, 1, &r[1]); | ||
944 | if (ret) | ||
945 | goto err; | ||
946 | r[1].name = enet_pram; | ||
947 | |||
948 | r[2].start = r[2].end = irq_of_parse_and_map(np, 0); | ||
949 | r[2].flags = IORESOURCE_IRQ; | ||
950 | r[2].name = enet_irq; | ||
951 | |||
952 | fs_enet_dev = | ||
953 | platform_device_register_simple("fsl-cpm-scc", i, &r[0], 3); | ||
954 | |||
955 | if (IS_ERR(fs_enet_dev)) { | ||
956 | ret = PTR_ERR(fs_enet_dev); | ||
957 | goto err; | ||
958 | } | ||
959 | |||
960 | fs_enet_data.rx_ring = 64; | ||
961 | fs_enet_data.tx_ring = 8; | ||
962 | fs_enet_data.rx_copybreak = 240; | ||
963 | fs_enet_data.use_napi = 1; | ||
964 | fs_enet_data.napi_weight = 17; | ||
965 | |||
966 | snprintf((char*)&bus_id[i], BUS_ID_SIZE, "%s", "fixed@10:1"); | ||
967 | fs_enet_data.bus_id = (char*)&bus_id[i]; | ||
968 | fs_enet_data.init_ioports = init_scc_ioports; | ||
969 | } | ||
970 | |||
971 | of_node_put(phy); | ||
972 | of_node_put(mdio); | ||
973 | |||
974 | ret = platform_device_add_data(fs_enet_dev, &fs_enet_data, | ||
975 | sizeof(struct | ||
976 | fs_platform_info)); | ||
977 | if (ret) | ||
978 | goto unreg; | ||
979 | } | ||
980 | return 0; | ||
981 | |||
982 | unreg: | ||
983 | platform_device_unregister(fs_enet_dev); | ||
984 | err: | ||
985 | return ret; | ||
986 | } | ||
987 | |||
988 | arch_initcall(fs_enet_of_init); | ||
989 | |||
990 | |||
991 | static const char *smc_regs = "regs"; | ||
992 | static const char *smc_pram = "pram"; | ||
993 | |||
994 | static int __init cpm_smc_uart_of_init(void) | ||
995 | { | ||
996 | struct device_node *np; | ||
997 | unsigned int i; | ||
998 | struct platform_device *cpm_uart_dev; | ||
999 | int ret; | ||
1000 | |||
1001 | for (np = NULL, i = 0; | ||
1002 | (np = of_find_compatible_node(np, "serial", "cpm_uart")) != NULL; | ||
1003 | i++) { | ||
1004 | struct resource r[3]; | ||
1005 | struct fs_uart_platform_info cpm_uart_data; | ||
1006 | int *id; | ||
1007 | char *model; | ||
1008 | |||
1009 | memset(r, 0, sizeof(r)); | ||
1010 | memset(&cpm_uart_data, 0, sizeof(cpm_uart_data)); | ||
1011 | |||
1012 | ret = of_address_to_resource(np, 0, &r[0]); | ||
1013 | if (ret) | ||
1014 | goto err; | ||
1015 | |||
1016 | r[0].name = smc_regs; | ||
1017 | |||
1018 | ret = of_address_to_resource(np, 1, &r[1]); | ||
1019 | if (ret) | ||
1020 | goto err; | ||
1021 | r[1].name = smc_pram; | ||
1022 | |||
1023 | r[2].start = r[2].end = irq_of_parse_and_map(np, 0); | ||
1024 | r[2].flags = IORESOURCE_IRQ; | ||
1025 | |||
1026 | cpm_uart_dev = | ||
1027 | platform_device_register_simple("fsl-cpm-smc:uart", i, &r[0], 3); | ||
1028 | |||
1029 | if (IS_ERR(cpm_uart_dev)) { | ||
1030 | ret = PTR_ERR(cpm_uart_dev); | ||
1031 | goto err; | ||
1032 | } | ||
1033 | |||
1034 | model = (char*)get_property(np, "model", NULL); | ||
1035 | strcpy(cpm_uart_data.fs_type, model); | ||
1036 | |||
1037 | id = (int*)get_property(np, "device-id", NULL); | ||
1038 | cpm_uart_data.fs_no = *id; | ||
1039 | cpm_uart_data.uart_clk = ppc_proc_freq; | ||
1040 | |||
1041 | cpm_uart_data.tx_num_fifo = 4; | ||
1042 | cpm_uart_data.tx_buf_size = 32; | ||
1043 | cpm_uart_data.rx_num_fifo = 4; | ||
1044 | cpm_uart_data.rx_buf_size = 32; | ||
1045 | |||
1046 | ret = | ||
1047 | platform_device_add_data(cpm_uart_dev, &cpm_uart_data, | ||
1048 | sizeof(struct | ||
1049 | fs_uart_platform_info)); | ||
1050 | if (ret) | ||
1051 | goto unreg; | ||
1052 | } | ||
1053 | |||
1054 | return 0; | ||
1055 | |||
1056 | unreg: | ||
1057 | platform_device_unregister(cpm_uart_dev); | ||
1058 | err: | ||
1059 | return ret; | ||
1060 | } | ||
1061 | |||
1062 | arch_initcall(cpm_smc_uart_of_init); | ||
1063 | |||
1064 | #endif /* CONFIG_8xx */ | ||
diff --git a/arch/powerpc/sysdev/grackle.c b/arch/powerpc/sysdev/grackle.c index b6ec793a23be..42053625f498 100644 --- a/arch/powerpc/sysdev/grackle.c +++ b/arch/powerpc/sysdev/grackle.c | |||
@@ -56,6 +56,8 @@ static inline void grackle_set_loop_snoop(struct pci_controller *bp, int enable) | |||
56 | void __init setup_grackle(struct pci_controller *hose) | 56 | void __init setup_grackle(struct pci_controller *hose) |
57 | { | 57 | { |
58 | setup_indirect_pci(hose, 0xfec00000, 0xfee00000); | 58 | setup_indirect_pci(hose, 0xfec00000, 0xfee00000); |
59 | if (machine_is_compatible("PowerMac1,1")) | ||
60 | pci_assign_all_buses = 1; | ||
59 | if (machine_is_compatible("AAPL,PowerBook1998")) | 61 | if (machine_is_compatible("AAPL,PowerBook1998")) |
60 | grackle_set_loop_snoop(hose, 1); | 62 | grackle_set_loop_snoop(hose, 1); |
61 | #if 0 /* Disabled for now, HW problems ??? */ | 63 | #if 0 /* Disabled for now, HW problems ??? */ |
diff --git a/arch/powerpc/sysdev/ipic.c b/arch/powerpc/sysdev/ipic.c index 746f78c15375..473c415e9e25 100644 --- a/arch/powerpc/sysdev/ipic.c +++ b/arch/powerpc/sysdev/ipic.c | |||
@@ -557,8 +557,7 @@ static struct irq_host_ops ipic_host_ops = { | |||
557 | .xlate = ipic_host_xlate, | 557 | .xlate = ipic_host_xlate, |
558 | }; | 558 | }; |
559 | 559 | ||
560 | void __init ipic_init(struct device_node *node, | 560 | struct ipic * __init ipic_init(struct device_node *node, unsigned int flags) |
561 | unsigned int flags) | ||
562 | { | 561 | { |
563 | struct ipic *ipic; | 562 | struct ipic *ipic; |
564 | struct resource res; | 563 | struct resource res; |
@@ -566,22 +565,24 @@ void __init ipic_init(struct device_node *node, | |||
566 | 565 | ||
567 | ipic = alloc_bootmem(sizeof(struct ipic)); | 566 | ipic = alloc_bootmem(sizeof(struct ipic)); |
568 | if (ipic == NULL) | 567 | if (ipic == NULL) |
569 | return; | 568 | return NULL; |
570 | 569 | ||
571 | memset(ipic, 0, sizeof(struct ipic)); | 570 | memset(ipic, 0, sizeof(struct ipic)); |
572 | ipic->of_node = node ? of_node_get(node) : NULL; | 571 | ipic->of_node = of_node_get(node); |
573 | 572 | ||
574 | ipic->irqhost = irq_alloc_host(IRQ_HOST_MAP_LINEAR, | 573 | ipic->irqhost = irq_alloc_host(IRQ_HOST_MAP_LINEAR, |
575 | NR_IPIC_INTS, | 574 | NR_IPIC_INTS, |
576 | &ipic_host_ops, 0); | 575 | &ipic_host_ops, 0); |
577 | if (ipic->irqhost == NULL) { | 576 | if (ipic->irqhost == NULL) { |
578 | of_node_put(node); | 577 | of_node_put(node); |
579 | return; | 578 | return NULL; |
580 | } | 579 | } |
581 | 580 | ||
582 | ret = of_address_to_resource(node, 0, &res); | 581 | ret = of_address_to_resource(node, 0, &res); |
583 | if (ret) | 582 | if (ret) { |
584 | return; | 583 | of_node_put(node); |
584 | return NULL; | ||
585 | } | ||
585 | 586 | ||
586 | ipic->regs = ioremap(res.start, res.end - res.start + 1); | 587 | ipic->regs = ioremap(res.start, res.end - res.start + 1); |
587 | 588 | ||
@@ -625,6 +626,8 @@ void __init ipic_init(struct device_node *node, | |||
625 | 626 | ||
626 | printk ("IPIC (%d IRQ sources) at %p\n", NR_IPIC_INTS, | 627 | printk ("IPIC (%d IRQ sources) at %p\n", NR_IPIC_INTS, |
627 | primary_ipic->regs); | 628 | primary_ipic->regs); |
629 | |||
630 | return ipic; | ||
628 | } | 631 | } |
629 | 632 | ||
630 | int ipic_set_priority(unsigned int virq, unsigned int priority) | 633 | int ipic_set_priority(unsigned int virq, unsigned int priority) |
diff --git a/arch/powerpc/sysdev/micropatch.c b/arch/powerpc/sysdev/micropatch.c new file mode 100644 index 000000000000..712b10a55f87 --- /dev/null +++ b/arch/powerpc/sysdev/micropatch.c | |||
@@ -0,0 +1,743 @@ | |||
1 | |||
2 | /* Microcode patches for the CPM as supplied by Motorola. | ||
3 | * This is the one for IIC/SPI. There is a newer one that | ||
4 | * also relocates SMC2, but this would require additional changes | ||
5 | * to uart.c, so I am holding off on that for a moment. | ||
6 | */ | ||
7 | #include <linux/errno.h> | ||
8 | #include <linux/sched.h> | ||
9 | #include <linux/kernel.h> | ||
10 | #include <linux/param.h> | ||
11 | #include <linux/string.h> | ||
12 | #include <linux/mm.h> | ||
13 | #include <linux/interrupt.h> | ||
14 | #include <asm/irq.h> | ||
15 | #include <asm/mpc8xx.h> | ||
16 | #include <asm/page.h> | ||
17 | #include <asm/pgtable.h> | ||
18 | #include <asm/8xx_immap.h> | ||
19 | #include <asm/commproc.h> | ||
20 | |||
21 | /* | ||
22 | * I2C/SPI relocation patch arrays. | ||
23 | */ | ||
24 | |||
25 | #ifdef CONFIG_I2C_SPI_UCODE_PATCH | ||
26 | |||
27 | uint patch_2000[] = { | ||
28 | 0x7FFFEFD9, | ||
29 | 0x3FFD0000, | ||
30 | 0x7FFB49F7, | ||
31 | 0x7FF90000, | ||
32 | 0x5FEFADF7, | ||
33 | 0x5F89ADF7, | ||
34 | 0x5FEFAFF7, | ||
35 | 0x5F89AFF7, | ||
36 | 0x3A9CFBC8, | ||
37 | 0xE7C0EDF0, | ||
38 | 0x77C1E1BB, | ||
39 | 0xF4DC7F1D, | ||
40 | 0xABAD932F, | ||
41 | 0x4E08FDCF, | ||
42 | 0x6E0FAFF8, | ||
43 | 0x7CCF76CF, | ||
44 | 0xFD1FF9CF, | ||
45 | 0xABF88DC6, | ||
46 | 0xAB5679F7, | ||
47 | 0xB0937383, | ||
48 | 0xDFCE79F7, | ||
49 | 0xB091E6BB, | ||
50 | 0xE5BBE74F, | ||
51 | 0xB3FA6F0F, | ||
52 | 0x6FFB76CE, | ||
53 | 0xEE0DF9CF, | ||
54 | 0x2BFBEFEF, | ||
55 | 0xCFEEF9CF, | ||
56 | 0x76CEAD24, | ||
57 | 0x90B2DF9A, | ||
58 | 0x7FDDD0BF, | ||
59 | 0x4BF847FD, | ||
60 | 0x7CCF76CE, | ||
61 | 0xCFEF7E1F, | ||
62 | 0x7F1D7DFD, | ||
63 | 0xF0B6EF71, | ||
64 | 0x7FC177C1, | ||
65 | 0xFBC86079, | ||
66 | 0xE722FBC8, | ||
67 | 0x5FFFDFFF, | ||
68 | 0x5FB2FFFB, | ||
69 | 0xFBC8F3C8, | ||
70 | 0x94A67F01, | ||
71 | 0x7F1D5F39, | ||
72 | 0xAFE85F5E, | ||
73 | 0xFFDFDF96, | ||
74 | 0xCB9FAF7D, | ||
75 | 0x5FC1AFED, | ||
76 | 0x8C1C5FC1, | ||
77 | 0xAFDD5FC3, | ||
78 | 0xDF9A7EFD, | ||
79 | 0xB0B25FB2, | ||
80 | 0xFFFEABAD, | ||
81 | 0x5FB2FFFE, | ||
82 | 0x5FCE600B, | ||
83 | 0xE6BB600B, | ||
84 | 0x5FCEDFC6, | ||
85 | 0x27FBEFDF, | ||
86 | 0x5FC8CFDE, | ||
87 | 0x3A9CE7C0, | ||
88 | 0xEDF0F3C8, | ||
89 | 0x7F0154CD, | ||
90 | 0x7F1D2D3D, | ||
91 | 0x363A7570, | ||
92 | 0x7E0AF1CE, | ||
93 | 0x37EF2E68, | ||
94 | 0x7FEE10EC, | ||
95 | 0xADF8EFDE, | ||
96 | 0xCFEAE52F, | ||
97 | 0x7D0FE12B, | ||
98 | 0xF1CE5F65, | ||
99 | 0x7E0A4DF8, | ||
100 | 0xCFEA5F72, | ||
101 | 0x7D0BEFEE, | ||
102 | 0xCFEA5F74, | ||
103 | 0xE522EFDE, | ||
104 | 0x5F74CFDA, | ||
105 | 0x0B627385, | ||
106 | 0xDF627E0A, | ||
107 | 0x30D8145B, | ||
108 | 0xBFFFF3C8, | ||
109 | 0x5FFFDFFF, | ||
110 | 0xA7F85F5E, | ||
111 | 0xBFFE7F7D, | ||
112 | 0x10D31450, | ||
113 | 0x5F36BFFF, | ||
114 | 0xAF785F5E, | ||
115 | 0xBFFDA7F8, | ||
116 | 0x5F36BFFE, | ||
117 | 0x77FD30C0, | ||
118 | 0x4E08FDCF, | ||
119 | 0xE5FF6E0F, | ||
120 | 0xAFF87E1F, | ||
121 | 0x7E0FFD1F, | ||
122 | 0xF1CF5F1B, | ||
123 | 0xABF80D5E, | ||
124 | 0x5F5EFFEF, | ||
125 | 0x79F730A2, | ||
126 | 0xAFDD5F34, | ||
127 | 0x47F85F34, | ||
128 | 0xAFED7FDD, | ||
129 | 0x50B24978, | ||
130 | 0x47FD7F1D, | ||
131 | 0x7DFD70AD, | ||
132 | 0xEF717EC1, | ||
133 | 0x6BA47F01, | ||
134 | 0x2D267EFD, | ||
135 | 0x30DE5F5E, | ||
136 | 0xFFFD5F5E, | ||
137 | 0xFFEF5F5E, | ||
138 | 0xFFDF0CA0, | ||
139 | 0xAFED0A9E, | ||
140 | 0xAFDD0C3A, | ||
141 | 0x5F3AAFBD, | ||
142 | 0x7FBDB082, | ||
143 | 0x5F8247F8 | ||
144 | }; | ||
145 | |||
146 | uint patch_2f00[] = { | ||
147 | 0x3E303430, | ||
148 | 0x34343737, | ||
149 | 0xABF7BF9B, | ||
150 | 0x994B4FBD, | ||
151 | 0xBD599493, | ||
152 | 0x349FFF37, | ||
153 | 0xFB9B177D, | ||
154 | 0xD9936956, | ||
155 | 0xBBFDD697, | ||
156 | 0xBDD2FD11, | ||
157 | 0x31DB9BB3, | ||
158 | 0x63139637, | ||
159 | 0x93733693, | ||
160 | 0x193137F7, | ||
161 | 0x331737AF, | ||
162 | 0x7BB9B999, | ||
163 | 0xBB197957, | ||
164 | 0x7FDFD3D5, | ||
165 | 0x73B773F7, | ||
166 | 0x37933B99, | ||
167 | 0x1D115316, | ||
168 | 0x99315315, | ||
169 | 0x31694BF4, | ||
170 | 0xFBDBD359, | ||
171 | 0x31497353, | ||
172 | 0x76956D69, | ||
173 | 0x7B9D9693, | ||
174 | 0x13131979, | ||
175 | 0x79376935 | ||
176 | }; | ||
177 | #endif | ||
178 | |||
179 | /* | ||
180 | * I2C/SPI/SMC1 relocation patch arrays. | ||
181 | */ | ||
182 | |||
183 | #ifdef CONFIG_I2C_SPI_SMC1_UCODE_PATCH | ||
184 | |||
185 | uint patch_2000[] = { | ||
186 | 0x3fff0000, | ||
187 | 0x3ffd0000, | ||
188 | 0x3ffb0000, | ||
189 | 0x3ff90000, | ||
190 | 0x5f13eff8, | ||
191 | 0x5eb5eff8, | ||
192 | 0x5f88adf7, | ||
193 | 0x5fefadf7, | ||
194 | 0x3a9cfbc8, | ||
195 | 0x77cae1bb, | ||
196 | 0xf4de7fad, | ||
197 | 0xabae9330, | ||
198 | 0x4e08fdcf, | ||
199 | 0x6e0faff8, | ||
200 | 0x7ccf76cf, | ||
201 | 0xfdaff9cf, | ||
202 | 0xabf88dc8, | ||
203 | 0xab5879f7, | ||
204 | 0xb0925d8d, | ||
205 | 0xdfd079f7, | ||
206 | 0xb090e6bb, | ||
207 | 0xe5bbe74f, | ||
208 | 0x9e046f0f, | ||
209 | 0x6ffb76ce, | ||
210 | 0xee0cf9cf, | ||
211 | 0x2bfbefef, | ||
212 | 0xcfeef9cf, | ||
213 | 0x76cead23, | ||
214 | 0x90b3df99, | ||
215 | 0x7fddd0c1, | ||
216 | 0x4bf847fd, | ||
217 | 0x7ccf76ce, | ||
218 | 0xcfef77ca, | ||
219 | 0x7eaf7fad, | ||
220 | 0x7dfdf0b7, | ||
221 | 0xef7a7fca, | ||
222 | 0x77cafbc8, | ||
223 | 0x6079e722, | ||
224 | 0xfbc85fff, | ||
225 | 0xdfff5fb3, | ||
226 | 0xfffbfbc8, | ||
227 | 0xf3c894a5, | ||
228 | 0xe7c9edf9, | ||
229 | 0x7f9a7fad, | ||
230 | 0x5f36afe8, | ||
231 | 0x5f5bffdf, | ||
232 | 0xdf95cb9e, | ||
233 | 0xaf7d5fc3, | ||
234 | 0xafed8c1b, | ||
235 | 0x5fc3afdd, | ||
236 | 0x5fc5df99, | ||
237 | 0x7efdb0b3, | ||
238 | 0x5fb3fffe, | ||
239 | 0xabae5fb3, | ||
240 | 0xfffe5fd0, | ||
241 | 0x600be6bb, | ||
242 | 0x600b5fd0, | ||
243 | 0xdfc827fb, | ||
244 | 0xefdf5fca, | ||
245 | 0xcfde3a9c, | ||
246 | 0xe7c9edf9, | ||
247 | 0xf3c87f9e, | ||
248 | 0x54ca7fed, | ||
249 | 0x2d3a3637, | ||
250 | 0x756f7e9a, | ||
251 | 0xf1ce37ef, | ||
252 | 0x2e677fee, | ||
253 | 0x10ebadf8, | ||
254 | 0xefdecfea, | ||
255 | 0xe52f7d9f, | ||
256 | 0xe12bf1ce, | ||
257 | 0x5f647e9a, | ||
258 | 0x4df8cfea, | ||
259 | 0x5f717d9b, | ||
260 | 0xefeecfea, | ||
261 | 0x5f73e522, | ||
262 | 0xefde5f73, | ||
263 | 0xcfda0b61, | ||
264 | 0x5d8fdf61, | ||
265 | 0xe7c9edf9, | ||
266 | 0x7e9a30d5, | ||
267 | 0x1458bfff, | ||
268 | 0xf3c85fff, | ||
269 | 0xdfffa7f8, | ||
270 | 0x5f5bbffe, | ||
271 | 0x7f7d10d0, | ||
272 | 0x144d5f33, | ||
273 | 0xbfffaf78, | ||
274 | 0x5f5bbffd, | ||
275 | 0xa7f85f33, | ||
276 | 0xbffe77fd, | ||
277 | 0x30bd4e08, | ||
278 | 0xfdcfe5ff, | ||
279 | 0x6e0faff8, | ||
280 | 0x7eef7e9f, | ||
281 | 0xfdeff1cf, | ||
282 | 0x5f17abf8, | ||
283 | 0x0d5b5f5b, | ||
284 | 0xffef79f7, | ||
285 | 0x309eafdd, | ||
286 | 0x5f3147f8, | ||
287 | 0x5f31afed, | ||
288 | 0x7fdd50af, | ||
289 | 0x497847fd, | ||
290 | 0x7f9e7fed, | ||
291 | 0x7dfd70a9, | ||
292 | 0xef7e7ece, | ||
293 | 0x6ba07f9e, | ||
294 | 0x2d227efd, | ||
295 | 0x30db5f5b, | ||
296 | 0xfffd5f5b, | ||
297 | 0xffef5f5b, | ||
298 | 0xffdf0c9c, | ||
299 | 0xafed0a9a, | ||
300 | 0xafdd0c37, | ||
301 | 0x5f37afbd, | ||
302 | 0x7fbdb081, | ||
303 | 0x5f8147f8, | ||
304 | 0x3a11e710, | ||
305 | 0xedf0ccdd, | ||
306 | 0xf3186d0a, | ||
307 | 0x7f0e5f06, | ||
308 | 0x7fedbb38, | ||
309 | 0x3afe7468, | ||
310 | 0x7fedf4fc, | ||
311 | 0x8ffbb951, | ||
312 | 0xb85f77fd, | ||
313 | 0xb0df5ddd, | ||
314 | 0xdefe7fed, | ||
315 | 0x90e1e74d, | ||
316 | 0x6f0dcbf7, | ||
317 | 0xe7decfed, | ||
318 | 0xcb74cfed, | ||
319 | 0xcfeddf6d, | ||
320 | 0x91714f74, | ||
321 | 0x5dd2deef, | ||
322 | 0x9e04e7df, | ||
323 | 0xefbb6ffb, | ||
324 | 0xe7ef7f0e, | ||
325 | 0x9e097fed, | ||
326 | 0xebdbeffa, | ||
327 | 0xeb54affb, | ||
328 | 0x7fea90d7, | ||
329 | 0x7e0cf0c3, | ||
330 | 0xbffff318, | ||
331 | 0x5fffdfff, | ||
332 | 0xac59efea, | ||
333 | 0x7fce1ee5, | ||
334 | 0xe2ff5ee1, | ||
335 | 0xaffbe2ff, | ||
336 | 0x5ee3affb, | ||
337 | 0xf9cc7d0f, | ||
338 | 0xaef8770f, | ||
339 | 0x7d0fb0c6, | ||
340 | 0xeffbbfff, | ||
341 | 0xcfef5ede, | ||
342 | 0x7d0fbfff, | ||
343 | 0x5ede4cf8, | ||
344 | 0x7fddd0bf, | ||
345 | 0x49f847fd, | ||
346 | 0x7efdf0bb, | ||
347 | 0x7fedfffd, | ||
348 | 0x7dfdf0b7, | ||
349 | 0xef7e7e1e, | ||
350 | 0x5ede7f0e, | ||
351 | 0x3a11e710, | ||
352 | 0xedf0ccab, | ||
353 | 0xfb18ad2e, | ||
354 | 0x1ea9bbb8, | ||
355 | 0x74283b7e, | ||
356 | 0x73c2e4bb, | ||
357 | 0x2ada4fb8, | ||
358 | 0xdc21e4bb, | ||
359 | 0xb2a1ffbf, | ||
360 | 0x5e2c43f8, | ||
361 | 0xfc87e1bb, | ||
362 | 0xe74ffd91, | ||
363 | 0x6f0f4fe8, | ||
364 | 0xc7ba32e2, | ||
365 | 0xf396efeb, | ||
366 | 0x600b4f78, | ||
367 | 0xe5bb760b, | ||
368 | 0x53acaef8, | ||
369 | 0x4ef88b0e, | ||
370 | 0xcfef9e09, | ||
371 | 0xabf8751f, | ||
372 | 0xefef5bac, | ||
373 | 0x741f4fe8, | ||
374 | 0x751e760d, | ||
375 | 0x7fdbf081, | ||
376 | 0x741cafce, | ||
377 | 0xefcc7fce, | ||
378 | 0x751e70ac, | ||
379 | 0x741ce7bb, | ||
380 | 0x3372cfed, | ||
381 | 0xafdbefeb, | ||
382 | 0xe5bb760b, | ||
383 | 0x53f2aef8, | ||
384 | 0xafe8e7eb, | ||
385 | 0x4bf8771e, | ||
386 | 0x7e247fed, | ||
387 | 0x4fcbe2cc, | ||
388 | 0x7fbc30a9, | ||
389 | 0x7b0f7a0f, | ||
390 | 0x34d577fd, | ||
391 | 0x308b5db7, | ||
392 | 0xde553e5f, | ||
393 | 0xaf78741f, | ||
394 | 0x741f30f0, | ||
395 | 0xcfef5e2c, | ||
396 | 0x741f3eac, | ||
397 | 0xafb8771e, | ||
398 | 0x5e677fed, | ||
399 | 0x0bd3e2cc, | ||
400 | 0x741ccfec, | ||
401 | 0xe5ca53cd, | ||
402 | 0x6fcb4f74, | ||
403 | 0x5dadde4b, | ||
404 | 0x2ab63d38, | ||
405 | 0x4bb3de30, | ||
406 | 0x751f741c, | ||
407 | 0x6c42effa, | ||
408 | 0xefea7fce, | ||
409 | 0x6ffc30be, | ||
410 | 0xefec3fca, | ||
411 | 0x30b3de2e, | ||
412 | 0xadf85d9e, | ||
413 | 0xaf7daefd, | ||
414 | 0x5d9ede2e, | ||
415 | 0x5d9eafdd, | ||
416 | 0x761f10ac, | ||
417 | 0x1da07efd, | ||
418 | 0x30adfffe, | ||
419 | 0x4908fb18, | ||
420 | 0x5fffdfff, | ||
421 | 0xafbb709b, | ||
422 | 0x4ef85e67, | ||
423 | 0xadf814ad, | ||
424 | 0x7a0f70ad, | ||
425 | 0xcfef50ad, | ||
426 | 0x7a0fde30, | ||
427 | 0x5da0afed, | ||
428 | 0x3c12780f, | ||
429 | 0xefef780f, | ||
430 | 0xefef790f, | ||
431 | 0xa7f85e0f, | ||
432 | 0xffef790f, | ||
433 | 0xefef790f, | ||
434 | 0x14adde2e, | ||
435 | 0x5d9eadfd, | ||
436 | 0x5e2dfffb, | ||
437 | 0xe79addfd, | ||
438 | 0xeff96079, | ||
439 | 0x607ae79a, | ||
440 | 0xddfceff9, | ||
441 | 0x60795dff, | ||
442 | 0x607acfef, | ||
443 | 0xefefefdf, | ||
444 | 0xefbfef7f, | ||
445 | 0xeeffedff, | ||
446 | 0xebffe7ff, | ||
447 | 0xafefafdf, | ||
448 | 0xafbfaf7f, | ||
449 | 0xaeffadff, | ||
450 | 0xabffa7ff, | ||
451 | 0x6fef6fdf, | ||
452 | 0x6fbf6f7f, | ||
453 | 0x6eff6dff, | ||
454 | 0x6bff67ff, | ||
455 | 0x2fef2fdf, | ||
456 | 0x2fbf2f7f, | ||
457 | 0x2eff2dff, | ||
458 | 0x2bff27ff, | ||
459 | 0x4e08fd1f, | ||
460 | 0xe5ff6e0f, | ||
461 | 0xaff87eef, | ||
462 | 0x7e0ffdef, | ||
463 | 0xf11f6079, | ||
464 | 0xabf8f542, | ||
465 | 0x7e0af11c, | ||
466 | 0x37cfae3a, | ||
467 | 0x7fec90be, | ||
468 | 0xadf8efdc, | ||
469 | 0xcfeae52f, | ||
470 | 0x7d0fe12b, | ||
471 | 0xf11c6079, | ||
472 | 0x7e0a4df8, | ||
473 | 0xcfea5dc4, | ||
474 | 0x7d0befec, | ||
475 | 0xcfea5dc6, | ||
476 | 0xe522efdc, | ||
477 | 0x5dc6cfda, | ||
478 | 0x4e08fd1f, | ||
479 | 0x6e0faff8, | ||
480 | 0x7c1f761f, | ||
481 | 0xfdeff91f, | ||
482 | 0x6079abf8, | ||
483 | 0x761cee24, | ||
484 | 0xf91f2bfb, | ||
485 | 0xefefcfec, | ||
486 | 0xf91f6079, | ||
487 | 0x761c27fb, | ||
488 | 0xefdf5da7, | ||
489 | 0xcfdc7fdd, | ||
490 | 0xd09c4bf8, | ||
491 | 0x47fd7c1f, | ||
492 | 0x761ccfcf, | ||
493 | 0x7eef7fed, | ||
494 | 0x7dfdf093, | ||
495 | 0xef7e7f1e, | ||
496 | 0x771efb18, | ||
497 | 0x6079e722, | ||
498 | 0xe6bbe5bb, | ||
499 | 0xae0ae5bb, | ||
500 | 0x600bae85, | ||
501 | 0xe2bbe2bb, | ||
502 | 0xe2bbe2bb, | ||
503 | 0xaf02e2bb, | ||
504 | 0xe2bb2ff9, | ||
505 | 0x6079e2bb | ||
506 | }; | ||
507 | |||
508 | uint patch_2f00[] = { | ||
509 | 0x30303030, | ||
510 | 0x3e3e3434, | ||
511 | 0xabbf9b99, | ||
512 | 0x4b4fbdbd, | ||
513 | 0x59949334, | ||
514 | 0x9fff37fb, | ||
515 | 0x9b177dd9, | ||
516 | 0x936956bb, | ||
517 | 0xfbdd697b, | ||
518 | 0xdd2fd113, | ||
519 | 0x1db9f7bb, | ||
520 | 0x36313963, | ||
521 | 0x79373369, | ||
522 | 0x3193137f, | ||
523 | 0x7331737a, | ||
524 | 0xf7bb9b99, | ||
525 | 0x9bb19795, | ||
526 | 0x77fdfd3d, | ||
527 | 0x573b773f, | ||
528 | 0x737933f7, | ||
529 | 0xb991d115, | ||
530 | 0x31699315, | ||
531 | 0x31531694, | ||
532 | 0xbf4fbdbd, | ||
533 | 0x35931497, | ||
534 | 0x35376956, | ||
535 | 0xbd697b9d, | ||
536 | 0x96931313, | ||
537 | 0x19797937, | ||
538 | 0x6935af78, | ||
539 | 0xb9b3baa3, | ||
540 | 0xb8788683, | ||
541 | 0x368f78f7, | ||
542 | 0x87778733, | ||
543 | 0x3ffffb3b, | ||
544 | 0x8e8f78b8, | ||
545 | 0x1d118e13, | ||
546 | 0xf3ff3f8b, | ||
547 | 0x6bd8e173, | ||
548 | 0xd1366856, | ||
549 | 0x68d1687b, | ||
550 | 0x3daf78b8, | ||
551 | 0x3a3a3f87, | ||
552 | 0x8f81378f, | ||
553 | 0xf876f887, | ||
554 | 0x77fd8778, | ||
555 | 0x737de8d6, | ||
556 | 0xbbf8bfff, | ||
557 | 0xd8df87f7, | ||
558 | 0xfd876f7b, | ||
559 | 0x8bfff8bd, | ||
560 | 0x8683387d, | ||
561 | 0xb873d87b, | ||
562 | 0x3b8fd7f8, | ||
563 | 0xf7338883, | ||
564 | 0xbb8ee1f8, | ||
565 | 0xef837377, | ||
566 | 0x3337b836, | ||
567 | 0x817d11f8, | ||
568 | 0x7378b878, | ||
569 | 0xd3368b7d, | ||
570 | 0xed731b7d, | ||
571 | 0x833731f3, | ||
572 | 0xf22f3f23 | ||
573 | }; | ||
574 | |||
575 | uint patch_2e00[] = { | ||
576 | 0x27eeeeee, | ||
577 | 0xeeeeeeee, | ||
578 | 0xeeeeeeee, | ||
579 | 0xeeeeeeee, | ||
580 | 0xee4bf4fb, | ||
581 | 0xdbd259bb, | ||
582 | 0x1979577f, | ||
583 | 0xdfd2d573, | ||
584 | 0xb773f737, | ||
585 | 0x4b4fbdbd, | ||
586 | 0x25b9b177, | ||
587 | 0xd2d17376, | ||
588 | 0x956bbfdd, | ||
589 | 0x697bdd2f, | ||
590 | 0xff9f79ff, | ||
591 | 0xff9ff22f | ||
592 | }; | ||
593 | #endif | ||
594 | |||
595 | /* | ||
596 | * USB SOF patch arrays. | ||
597 | */ | ||
598 | |||
599 | #ifdef CONFIG_USB_SOF_UCODE_PATCH | ||
600 | |||
601 | uint patch_2000[] = { | ||
602 | 0x7fff0000, | ||
603 | 0x7ffd0000, | ||
604 | 0x7ffb0000, | ||
605 | 0x49f7ba5b, | ||
606 | 0xba383ffb, | ||
607 | 0xf9b8b46d, | ||
608 | 0xe5ab4e07, | ||
609 | 0xaf77bffe, | ||
610 | 0x3f7bbf79, | ||
611 | 0xba5bba38, | ||
612 | 0xe7676076, | ||
613 | 0x60750000 | ||
614 | }; | ||
615 | |||
616 | uint patch_2f00[] = { | ||
617 | 0x3030304c, | ||
618 | 0xcab9e441, | ||
619 | 0xa1aaf220 | ||
620 | }; | ||
621 | #endif | ||
622 | |||
623 | void | ||
624 | cpm_load_patch(cpm8xx_t *cp) | ||
625 | { | ||
626 | volatile uint *dp; /* Dual-ported RAM. */ | ||
627 | volatile cpm8xx_t *commproc; | ||
628 | volatile iic_t *iip; | ||
629 | volatile spi_t *spp; | ||
630 | volatile smc_uart_t *smp; | ||
631 | int i; | ||
632 | |||
633 | commproc = cp; | ||
634 | |||
635 | #ifdef CONFIG_USB_SOF_UCODE_PATCH | ||
636 | commproc->cp_rccr = 0; | ||
637 | |||
638 | dp = (uint *)(commproc->cp_dpmem); | ||
639 | for (i=0; i<(sizeof(patch_2000)/4); i++) | ||
640 | *dp++ = patch_2000[i]; | ||
641 | |||
642 | dp = (uint *)&(commproc->cp_dpmem[0x0f00]); | ||
643 | for (i=0; i<(sizeof(patch_2f00)/4); i++) | ||
644 | *dp++ = patch_2f00[i]; | ||
645 | |||
646 | commproc->cp_rccr = 0x0009; | ||
647 | |||
648 | printk("USB SOF microcode patch installed\n"); | ||
649 | #endif /* CONFIG_USB_SOF_UCODE_PATCH */ | ||
650 | |||
651 | #if defined(CONFIG_I2C_SPI_UCODE_PATCH) || \ | ||
652 | defined(CONFIG_I2C_SPI_SMC1_UCODE_PATCH) | ||
653 | |||
654 | commproc->cp_rccr = 0; | ||
655 | |||
656 | dp = (uint *)(commproc->cp_dpmem); | ||
657 | for (i=0; i<(sizeof(patch_2000)/4); i++) | ||
658 | *dp++ = patch_2000[i]; | ||
659 | |||
660 | dp = (uint *)&(commproc->cp_dpmem[0x0f00]); | ||
661 | for (i=0; i<(sizeof(patch_2f00)/4); i++) | ||
662 | *dp++ = patch_2f00[i]; | ||
663 | |||
664 | iip = (iic_t *)&commproc->cp_dparam[PROFF_IIC]; | ||
665 | # define RPBASE 0x0500 | ||
666 | iip->iic_rpbase = RPBASE; | ||
667 | |||
668 | /* Put SPI above the IIC, also 32-byte aligned. | ||
669 | */ | ||
670 | i = (RPBASE + sizeof(iic_t) + 31) & ~31; | ||
671 | spp = (spi_t *)&commproc->cp_dparam[PROFF_SPI]; | ||
672 | spp->spi_rpbase = i; | ||
673 | |||
674 | # if defined(CONFIG_I2C_SPI_UCODE_PATCH) | ||
675 | commproc->cp_cpmcr1 = 0x802a; | ||
676 | commproc->cp_cpmcr2 = 0x8028; | ||
677 | commproc->cp_cpmcr3 = 0x802e; | ||
678 | commproc->cp_cpmcr4 = 0x802c; | ||
679 | commproc->cp_rccr = 1; | ||
680 | |||
681 | printk("I2C/SPI microcode patch installed.\n"); | ||
682 | # endif /* CONFIG_I2C_SPI_UCODE_PATCH */ | ||
683 | |||
684 | # if defined(CONFIG_I2C_SPI_SMC1_UCODE_PATCH) | ||
685 | |||
686 | dp = (uint *)&(commproc->cp_dpmem[0x0e00]); | ||
687 | for (i=0; i<(sizeof(patch_2e00)/4); i++) | ||
688 | *dp++ = patch_2e00[i]; | ||
689 | |||
690 | commproc->cp_cpmcr1 = 0x8080; | ||
691 | commproc->cp_cpmcr2 = 0x808a; | ||
692 | commproc->cp_cpmcr3 = 0x8028; | ||
693 | commproc->cp_cpmcr4 = 0x802a; | ||
694 | commproc->cp_rccr = 3; | ||
695 | |||
696 | smp = (smc_uart_t *)&commproc->cp_dparam[PROFF_SMC1]; | ||
697 | smp->smc_rpbase = 0x1FC0; | ||
698 | |||
699 | printk("I2C/SPI/SMC1 microcode patch installed.\n"); | ||
700 | # endif /* CONFIG_I2C_SPI_SMC1_UCODE_PATCH) */ | ||
701 | |||
702 | #endif /* some variation of the I2C/SPI patch was selected */ | ||
703 | } | ||
704 | |||
705 | /* | ||
706 | * Take this entire routine out, since no one calls it and its | ||
707 | * logic is suspect. | ||
708 | */ | ||
709 | |||
710 | #if 0 | ||
711 | void | ||
712 | verify_patch(volatile immap_t *immr) | ||
713 | { | ||
714 | volatile uint *dp; | ||
715 | volatile cpm8xx_t *commproc; | ||
716 | int i; | ||
717 | |||
718 | commproc = (cpm8xx_t *)&immr->im_cpm; | ||
719 | |||
720 | printk("cp_rccr %x\n", commproc->cp_rccr); | ||
721 | commproc->cp_rccr = 0; | ||
722 | |||
723 | dp = (uint *)(commproc->cp_dpmem); | ||
724 | for (i=0; i<(sizeof(patch_2000)/4); i++) | ||
725 | if (*dp++ != patch_2000[i]) { | ||
726 | printk("patch_2000 bad at %d\n", i); | ||
727 | dp--; | ||
728 | printk("found 0x%X, wanted 0x%X\n", *dp, patch_2000[i]); | ||
729 | break; | ||
730 | } | ||
731 | |||
732 | dp = (uint *)&(commproc->cp_dpmem[0x0f00]); | ||
733 | for (i=0; i<(sizeof(patch_2f00)/4); i++) | ||
734 | if (*dp++ != patch_2f00[i]) { | ||
735 | printk("patch_2f00 bad at %d\n", i); | ||
736 | dp--; | ||
737 | printk("found 0x%X, wanted 0x%X\n", *dp, patch_2f00[i]); | ||
738 | break; | ||
739 | } | ||
740 | |||
741 | commproc->cp_rccr = 0x0009; | ||
742 | } | ||
743 | #endif | ||
diff --git a/arch/powerpc/sysdev/mpc8xx_pic.c b/arch/powerpc/sysdev/mpc8xx_pic.c new file mode 100644 index 000000000000..2fc2bcd79b5e --- /dev/null +++ b/arch/powerpc/sysdev/mpc8xx_pic.c | |||
@@ -0,0 +1,197 @@ | |||
1 | #include <linux/kernel.h> | ||
2 | #include <linux/module.h> | ||
3 | #include <linux/stddef.h> | ||
4 | #include <linux/init.h> | ||
5 | #include <linux/sched.h> | ||
6 | #include <linux/signal.h> | ||
7 | #include <linux/irq.h> | ||
8 | #include <linux/dma-mapping.h> | ||
9 | #include <asm/prom.h> | ||
10 | #include <asm/irq.h> | ||
11 | #include <asm/io.h> | ||
12 | #include <asm/8xx_immap.h> | ||
13 | #include <asm/mpc8xx.h> | ||
14 | |||
15 | #include "mpc8xx_pic.h" | ||
16 | |||
17 | |||
18 | #define PIC_VEC_SPURRIOUS 15 | ||
19 | |||
20 | extern int cpm_get_irq(struct pt_regs *regs); | ||
21 | |||
22 | static struct device_node *mpc8xx_pic_node; | ||
23 | static struct irq_host *mpc8xx_pic_host; | ||
24 | #define NR_MASK_WORDS ((NR_IRQS + 31) / 32) | ||
25 | static unsigned long ppc_cached_irq_mask[NR_MASK_WORDS]; | ||
26 | static sysconf8xx_t *siu_reg; | ||
27 | |||
28 | int cpm_get_irq(struct pt_regs *regs); | ||
29 | |||
30 | static void mpc8xx_unmask_irq(unsigned int virq) | ||
31 | { | ||
32 | int bit, word; | ||
33 | unsigned int irq_nr = (unsigned int)irq_map[virq].hwirq; | ||
34 | |||
35 | bit = irq_nr & 0x1f; | ||
36 | word = irq_nr >> 5; | ||
37 | |||
38 | ppc_cached_irq_mask[word] |= (1 << (31-bit)); | ||
39 | out_be32(&siu_reg->sc_simask, ppc_cached_irq_mask[word]); | ||
40 | } | ||
41 | |||
42 | static void mpc8xx_mask_irq(unsigned int virq) | ||
43 | { | ||
44 | int bit, word; | ||
45 | unsigned int irq_nr = (unsigned int)irq_map[virq].hwirq; | ||
46 | |||
47 | bit = irq_nr & 0x1f; | ||
48 | word = irq_nr >> 5; | ||
49 | |||
50 | ppc_cached_irq_mask[word] &= ~(1 << (31-bit)); | ||
51 | out_be32(&siu_reg->sc_simask, ppc_cached_irq_mask[word]); | ||
52 | } | ||
53 | |||
54 | static void mpc8xx_ack(unsigned int virq) | ||
55 | { | ||
56 | int bit; | ||
57 | unsigned int irq_nr = (unsigned int)irq_map[virq].hwirq; | ||
58 | |||
59 | bit = irq_nr & 0x1f; | ||
60 | out_be32(&siu_reg->sc_sipend, 1 << (31-bit)); | ||
61 | } | ||
62 | |||
63 | static void mpc8xx_end_irq(unsigned int virq) | ||
64 | { | ||
65 | int bit, word; | ||
66 | unsigned int irq_nr = (unsigned int)irq_map[virq].hwirq; | ||
67 | |||
68 | bit = irq_nr & 0x1f; | ||
69 | word = irq_nr >> 5; | ||
70 | |||
71 | ppc_cached_irq_mask[word] |= (1 << (31-bit)); | ||
72 | out_be32(&siu_reg->sc_simask, ppc_cached_irq_mask[word]); | ||
73 | } | ||
74 | |||
75 | static int mpc8xx_set_irq_type(unsigned int virq, unsigned int flow_type) | ||
76 | { | ||
77 | struct irq_desc *desc = get_irq_desc(virq); | ||
78 | |||
79 | desc->status &= ~(IRQ_TYPE_SENSE_MASK | IRQ_LEVEL); | ||
80 | desc->status |= flow_type & IRQ_TYPE_SENSE_MASK; | ||
81 | if (flow_type & (IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW)) | ||
82 | desc->status |= IRQ_LEVEL; | ||
83 | |||
84 | if (flow_type & IRQ_TYPE_EDGE_FALLING) { | ||
85 | irq_hw_number_t hw = (unsigned int)irq_map[virq].hwirq; | ||
86 | unsigned int siel = in_be32(&siu_reg->sc_siel); | ||
87 | |||
88 | /* only external IRQ senses are programmable */ | ||
89 | if ((hw & 1) == 0) { | ||
90 | siel |= (0x80000000 >> hw); | ||
91 | out_be32(&siu_reg->sc_siel, siel); | ||
92 | desc->handle_irq = handle_edge_irq; | ||
93 | } | ||
94 | } | ||
95 | return 0; | ||
96 | } | ||
97 | |||
98 | static struct irq_chip mpc8xx_pic = { | ||
99 | .typename = " MPC8XX SIU ", | ||
100 | .unmask = mpc8xx_unmask_irq, | ||
101 | .mask = mpc8xx_mask_irq, | ||
102 | .ack = mpc8xx_ack, | ||
103 | .eoi = mpc8xx_end_irq, | ||
104 | .set_type = mpc8xx_set_irq_type, | ||
105 | }; | ||
106 | |||
107 | unsigned int mpc8xx_get_irq(void) | ||
108 | { | ||
109 | int irq; | ||
110 | |||
111 | /* For MPC8xx, read the SIVEC register and shift the bits down | ||
112 | * to get the irq number. | ||
113 | */ | ||
114 | irq = in_be32(&siu_reg->sc_sivec) >> 26; | ||
115 | |||
116 | if (irq == PIC_VEC_SPURRIOUS) | ||
117 | irq = NO_IRQ; | ||
118 | |||
119 | return irq_linear_revmap(mpc8xx_pic_host, irq); | ||
120 | |||
121 | } | ||
122 | |||
123 | static int mpc8xx_pic_host_match(struct irq_host *h, struct device_node *node) | ||
124 | { | ||
125 | return mpc8xx_pic_node == node; | ||
126 | } | ||
127 | |||
128 | static int mpc8xx_pic_host_map(struct irq_host *h, unsigned int virq, | ||
129 | irq_hw_number_t hw) | ||
130 | { | ||
131 | pr_debug("mpc8xx_pic_host_map(%d, 0x%lx)\n", virq, hw); | ||
132 | |||
133 | /* Set default irq handle */ | ||
134 | set_irq_chip_and_handler(virq, &mpc8xx_pic, handle_level_irq); | ||
135 | return 0; | ||
136 | } | ||
137 | |||
138 | |||
139 | static int mpc8xx_pic_host_xlate(struct irq_host *h, struct device_node *ct, | ||
140 | u32 *intspec, unsigned int intsize, | ||
141 | irq_hw_number_t *out_hwirq, unsigned int *out_flags) | ||
142 | { | ||
143 | static unsigned char map_pic_senses[4] = { | ||
144 | IRQ_TYPE_EDGE_RISING, | ||
145 | IRQ_TYPE_LEVEL_LOW, | ||
146 | IRQ_TYPE_LEVEL_HIGH, | ||
147 | IRQ_TYPE_EDGE_FALLING, | ||
148 | }; | ||
149 | |||
150 | *out_hwirq = intspec[0]; | ||
151 | if (intsize > 1 && intspec[1] < 4) | ||
152 | *out_flags = map_pic_senses[intspec[1]]; | ||
153 | else | ||
154 | *out_flags = IRQ_TYPE_NONE; | ||
155 | |||
156 | return 0; | ||
157 | } | ||
158 | |||
159 | |||
160 | static struct irq_host_ops mpc8xx_pic_host_ops = { | ||
161 | .match = mpc8xx_pic_host_match, | ||
162 | .map = mpc8xx_pic_host_map, | ||
163 | .xlate = mpc8xx_pic_host_xlate, | ||
164 | }; | ||
165 | |||
166 | int mpc8xx_pic_init(void) | ||
167 | { | ||
168 | struct resource res; | ||
169 | struct device_node *np = NULL; | ||
170 | int ret; | ||
171 | |||
172 | np = of_find_node_by_type(np, "mpc8xx-pic"); | ||
173 | |||
174 | if (np == NULL) { | ||
175 | printk(KERN_ERR "Could not find open-pic node\n"); | ||
176 | return -ENOMEM; | ||
177 | } | ||
178 | |||
179 | mpc8xx_pic_node = of_node_get(np); | ||
180 | |||
181 | ret = of_address_to_resource(np, 0, &res); | ||
182 | of_node_put(np); | ||
183 | if (ret) | ||
184 | return ret; | ||
185 | |||
186 | siu_reg = (void *)ioremap(res.start, res.end - res.start + 1); | ||
187 | if (siu_reg == NULL) | ||
188 | return -EINVAL; | ||
189 | |||
190 | mpc8xx_pic_host = irq_alloc_host(IRQ_HOST_MAP_LINEAR, 64, &mpc8xx_pic_host_ops, 64); | ||
191 | if (mpc8xx_pic_host == NULL) { | ||
192 | printk(KERN_ERR "MPC8xx PIC: failed to allocate irq host!\n"); | ||
193 | ret = -ENOMEM; | ||
194 | } | ||
195 | |||
196 | return ret; | ||
197 | } | ||
diff --git a/arch/powerpc/sysdev/mpc8xx_pic.h b/arch/powerpc/sysdev/mpc8xx_pic.h new file mode 100644 index 000000000000..afa2ee6717c1 --- /dev/null +++ b/arch/powerpc/sysdev/mpc8xx_pic.h | |||
@@ -0,0 +1,12 @@ | |||
1 | #ifndef _PPC_KERNEL_MPC8xx_H | ||
2 | #define _PPC_KERNEL_MPC8xx_H | ||
3 | |||
4 | #include <linux/irq.h> | ||
5 | #include <linux/interrupt.h> | ||
6 | |||
7 | extern struct hw_interrupt_type mpc8xx_pic; | ||
8 | |||
9 | int mpc8xx_pic_init(void); | ||
10 | unsigned int mpc8xx_get_irq(void); | ||
11 | |||
12 | #endif /* _PPC_KERNEL_PPC8xx_H */ | ||
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c index d01ced11694d..aa701cc27ecc 100644 --- a/arch/powerpc/sysdev/mpic.c +++ b/arch/powerpc/sysdev/mpic.c | |||
@@ -496,13 +496,18 @@ static void __init mpic_scan_ht_pics(struct mpic *mpic) | |||
496 | static struct mpic *mpic_find(unsigned int irq, unsigned int *is_ipi) | 496 | static struct mpic *mpic_find(unsigned int irq, unsigned int *is_ipi) |
497 | { | 497 | { |
498 | unsigned int src = mpic_irq_to_hw(irq); | 498 | unsigned int src = mpic_irq_to_hw(irq); |
499 | struct mpic *mpic; | ||
499 | 500 | ||
500 | if (irq < NUM_ISA_INTERRUPTS) | 501 | if (irq < NUM_ISA_INTERRUPTS) |
501 | return NULL; | 502 | return NULL; |
503 | |||
504 | mpic = irq_desc[irq].chip_data; | ||
505 | |||
502 | if (is_ipi) | 506 | if (is_ipi) |
503 | *is_ipi = (src >= MPIC_VEC_IPI_0 && src <= MPIC_VEC_IPI_3); | 507 | *is_ipi = (src >= mpic->ipi_vecs[0] && |
508 | src <= mpic->ipi_vecs[3]); | ||
504 | 509 | ||
505 | return irq_desc[irq].chip_data; | 510 | return mpic; |
506 | } | 511 | } |
507 | 512 | ||
508 | /* Convert a cpu mask from logical to physical cpu numbers. */ | 513 | /* Convert a cpu mask from logical to physical cpu numbers. */ |
@@ -540,7 +545,11 @@ static inline void mpic_eoi(struct mpic *mpic) | |||
540 | #ifdef CONFIG_SMP | 545 | #ifdef CONFIG_SMP |
541 | static irqreturn_t mpic_ipi_action(int irq, void *dev_id) | 546 | static irqreturn_t mpic_ipi_action(int irq, void *dev_id) |
542 | { | 547 | { |
543 | smp_message_recv(mpic_irq_to_hw(irq) - MPIC_VEC_IPI_0); | 548 | struct mpic *mpic; |
549 | |||
550 | mpic = mpic_find(irq, NULL); | ||
551 | smp_message_recv(mpic_irq_to_hw(irq) - mpic->ipi_vecs[0]); | ||
552 | |||
544 | return IRQ_HANDLED; | 553 | return IRQ_HANDLED; |
545 | } | 554 | } |
546 | #endif /* CONFIG_SMP */ | 555 | #endif /* CONFIG_SMP */ |
@@ -663,7 +672,7 @@ static void mpic_end_ht_irq(unsigned int irq) | |||
663 | static void mpic_unmask_ipi(unsigned int irq) | 672 | static void mpic_unmask_ipi(unsigned int irq) |
664 | { | 673 | { |
665 | struct mpic *mpic = mpic_from_ipi(irq); | 674 | struct mpic *mpic = mpic_from_ipi(irq); |
666 | unsigned int src = mpic_irq_to_hw(irq) - MPIC_VEC_IPI_0; | 675 | unsigned int src = mpic_irq_to_hw(irq) - mpic->ipi_vecs[0]; |
667 | 676 | ||
668 | DBG("%s: enable_ipi: %d (ipi %d)\n", mpic->name, irq, src); | 677 | DBG("%s: enable_ipi: %d (ipi %d)\n", mpic->name, irq, src); |
669 | mpic_ipi_write(src, mpic_ipi_read(src) & ~MPIC_VECPRI_MASK); | 678 | mpic_ipi_write(src, mpic_ipi_read(src) & ~MPIC_VECPRI_MASK); |
@@ -807,11 +816,11 @@ static int mpic_host_map(struct irq_host *h, unsigned int virq, | |||
807 | 816 | ||
808 | DBG("mpic: map virq %d, hwirq 0x%lx\n", virq, hw); | 817 | DBG("mpic: map virq %d, hwirq 0x%lx\n", virq, hw); |
809 | 818 | ||
810 | if (hw == MPIC_VEC_SPURRIOUS) | 819 | if (hw == mpic->spurious_vec) |
811 | return -EINVAL; | 820 | return -EINVAL; |
812 | 821 | ||
813 | #ifdef CONFIG_SMP | 822 | #ifdef CONFIG_SMP |
814 | else if (hw >= MPIC_VEC_IPI_0) { | 823 | else if (hw >= mpic->ipi_vecs[0]) { |
815 | WARN_ON(!(mpic->flags & MPIC_PRIMARY)); | 824 | WARN_ON(!(mpic->flags & MPIC_PRIMARY)); |
816 | 825 | ||
817 | DBG("mpic: mapping as IPI\n"); | 826 | DBG("mpic: mapping as IPI\n"); |
@@ -904,6 +913,7 @@ struct mpic * __init mpic_alloc(struct device_node *node, | |||
904 | u32 reg; | 913 | u32 reg; |
905 | const char *vers; | 914 | const char *vers; |
906 | int i; | 915 | int i; |
916 | int intvec_top; | ||
907 | u64 paddr = phys_addr; | 917 | u64 paddr = phys_addr; |
908 | 918 | ||
909 | mpic = alloc_bootmem(sizeof(struct mpic)); | 919 | mpic = alloc_bootmem(sizeof(struct mpic)); |
@@ -912,11 +922,11 @@ struct mpic * __init mpic_alloc(struct device_node *node, | |||
912 | 922 | ||
913 | memset(mpic, 0, sizeof(struct mpic)); | 923 | memset(mpic, 0, sizeof(struct mpic)); |
914 | mpic->name = name; | 924 | mpic->name = name; |
915 | mpic->of_node = node ? of_node_get(node) : NULL; | 925 | mpic->of_node = of_node_get(node); |
916 | 926 | ||
917 | mpic->irqhost = irq_alloc_host(IRQ_HOST_MAP_LINEAR, 256, | 927 | mpic->irqhost = irq_alloc_host(IRQ_HOST_MAP_LINEAR, isu_size, |
918 | &mpic_host_ops, | 928 | &mpic_host_ops, |
919 | MPIC_VEC_SPURRIOUS); | 929 | flags & MPIC_LARGE_VECTORS ? 2048 : 256); |
920 | if (mpic->irqhost == NULL) { | 930 | if (mpic->irqhost == NULL) { |
921 | of_node_put(node); | 931 | of_node_put(node); |
922 | return NULL; | 932 | return NULL; |
@@ -944,6 +954,21 @@ struct mpic * __init mpic_alloc(struct device_node *node, | |||
944 | mpic->irq_count = irq_count; | 954 | mpic->irq_count = irq_count; |
945 | mpic->num_sources = 0; /* so far */ | 955 | mpic->num_sources = 0; /* so far */ |
946 | 956 | ||
957 | if (flags & MPIC_LARGE_VECTORS) | ||
958 | intvec_top = 2047; | ||
959 | else | ||
960 | intvec_top = 255; | ||
961 | |||
962 | mpic->timer_vecs[0] = intvec_top - 8; | ||
963 | mpic->timer_vecs[1] = intvec_top - 7; | ||
964 | mpic->timer_vecs[2] = intvec_top - 6; | ||
965 | mpic->timer_vecs[3] = intvec_top - 5; | ||
966 | mpic->ipi_vecs[0] = intvec_top - 4; | ||
967 | mpic->ipi_vecs[1] = intvec_top - 3; | ||
968 | mpic->ipi_vecs[2] = intvec_top - 2; | ||
969 | mpic->ipi_vecs[3] = intvec_top - 1; | ||
970 | mpic->spurious_vec = intvec_top; | ||
971 | |||
947 | /* Check for "big-endian" in device-tree */ | 972 | /* Check for "big-endian" in device-tree */ |
948 | if (node && get_property(node, "big-endian", NULL) != NULL) | 973 | if (node && get_property(node, "big-endian", NULL) != NULL) |
949 | mpic->flags |= MPIC_BIG_ENDIAN; | 974 | mpic->flags |= MPIC_BIG_ENDIAN; |
@@ -1084,11 +1109,6 @@ void __init mpic_init(struct mpic *mpic) | |||
1084 | int i; | 1109 | int i; |
1085 | 1110 | ||
1086 | BUG_ON(mpic->num_sources == 0); | 1111 | BUG_ON(mpic->num_sources == 0); |
1087 | WARN_ON(mpic->num_sources > MPIC_VEC_IPI_0); | ||
1088 | |||
1089 | /* Sanitize source count */ | ||
1090 | if (mpic->num_sources > MPIC_VEC_IPI_0) | ||
1091 | mpic->num_sources = MPIC_VEC_IPI_0; | ||
1092 | 1112 | ||
1093 | printk(KERN_INFO "mpic: Initializing for %d sources\n", mpic->num_sources); | 1113 | printk(KERN_INFO "mpic: Initializing for %d sources\n", mpic->num_sources); |
1094 | 1114 | ||
@@ -1104,7 +1124,7 @@ void __init mpic_init(struct mpic *mpic) | |||
1104 | i * MPIC_INFO(TIMER_STRIDE) + | 1124 | i * MPIC_INFO(TIMER_STRIDE) + |
1105 | MPIC_INFO(TIMER_VECTOR_PRI), | 1125 | MPIC_INFO(TIMER_VECTOR_PRI), |
1106 | MPIC_VECPRI_MASK | | 1126 | MPIC_VECPRI_MASK | |
1107 | (MPIC_VEC_TIMER_0 + i)); | 1127 | (mpic->timer_vecs[0] + i)); |
1108 | } | 1128 | } |
1109 | 1129 | ||
1110 | /* Initialize IPIs to our reserved vectors and mark them disabled for now */ | 1130 | /* Initialize IPIs to our reserved vectors and mark them disabled for now */ |
@@ -1113,7 +1133,7 @@ void __init mpic_init(struct mpic *mpic) | |||
1113 | mpic_ipi_write(i, | 1133 | mpic_ipi_write(i, |
1114 | MPIC_VECPRI_MASK | | 1134 | MPIC_VECPRI_MASK | |
1115 | (10 << MPIC_VECPRI_PRIORITY_SHIFT) | | 1135 | (10 << MPIC_VECPRI_PRIORITY_SHIFT) | |
1116 | (MPIC_VEC_IPI_0 + i)); | 1136 | (mpic->ipi_vecs[0] + i)); |
1117 | } | 1137 | } |
1118 | 1138 | ||
1119 | /* Initialize interrupt sources */ | 1139 | /* Initialize interrupt sources */ |
@@ -1136,8 +1156,8 @@ void __init mpic_init(struct mpic *mpic) | |||
1136 | 1 << hard_smp_processor_id()); | 1156 | 1 << hard_smp_processor_id()); |
1137 | } | 1157 | } |
1138 | 1158 | ||
1139 | /* Init spurrious vector */ | 1159 | /* Init spurious vector */ |
1140 | mpic_write(mpic->gregs, MPIC_INFO(GREG_SPURIOUS), MPIC_VEC_SPURRIOUS); | 1160 | mpic_write(mpic->gregs, MPIC_INFO(GREG_SPURIOUS), mpic->spurious_vec); |
1141 | 1161 | ||
1142 | /* Disable 8259 passthrough, if supported */ | 1162 | /* Disable 8259 passthrough, if supported */ |
1143 | if (!(mpic->flags & MPIC_NO_PTHROU_DIS)) | 1163 | if (!(mpic->flags & MPIC_NO_PTHROU_DIS)) |
@@ -1184,9 +1204,9 @@ void mpic_irq_set_priority(unsigned int irq, unsigned int pri) | |||
1184 | 1204 | ||
1185 | spin_lock_irqsave(&mpic_lock, flags); | 1205 | spin_lock_irqsave(&mpic_lock, flags); |
1186 | if (is_ipi) { | 1206 | if (is_ipi) { |
1187 | reg = mpic_ipi_read(src - MPIC_VEC_IPI_0) & | 1207 | reg = mpic_ipi_read(src - mpic->ipi_vecs[0]) & |
1188 | ~MPIC_VECPRI_PRIORITY_MASK; | 1208 | ~MPIC_VECPRI_PRIORITY_MASK; |
1189 | mpic_ipi_write(src - MPIC_VEC_IPI_0, | 1209 | mpic_ipi_write(src - mpic->ipi_vecs[0], |
1190 | reg | (pri << MPIC_VECPRI_PRIORITY_SHIFT)); | 1210 | reg | (pri << MPIC_VECPRI_PRIORITY_SHIFT)); |
1191 | } else { | 1211 | } else { |
1192 | reg = mpic_irq_read(src, MPIC_INFO(IRQ_VECTOR_PRI)) | 1212 | reg = mpic_irq_read(src, MPIC_INFO(IRQ_VECTOR_PRI)) |
@@ -1207,7 +1227,7 @@ unsigned int mpic_irq_get_priority(unsigned int irq) | |||
1207 | 1227 | ||
1208 | spin_lock_irqsave(&mpic_lock, flags); | 1228 | spin_lock_irqsave(&mpic_lock, flags); |
1209 | if (is_ipi) | 1229 | if (is_ipi) |
1210 | reg = mpic_ipi_read(src = MPIC_VEC_IPI_0); | 1230 | reg = mpic_ipi_read(src = mpic->ipi_vecs[0]); |
1211 | else | 1231 | else |
1212 | reg = mpic_irq_read(src, MPIC_INFO(IRQ_VECTOR_PRI)); | 1232 | reg = mpic_irq_read(src, MPIC_INFO(IRQ_VECTOR_PRI)); |
1213 | spin_unlock_irqrestore(&mpic_lock, flags); | 1233 | spin_unlock_irqrestore(&mpic_lock, flags); |
@@ -1313,7 +1333,7 @@ unsigned int mpic_get_one_irq(struct mpic *mpic) | |||
1313 | #ifdef DEBUG_LOW | 1333 | #ifdef DEBUG_LOW |
1314 | DBG("%s: get_one_irq(): %d\n", mpic->name, src); | 1334 | DBG("%s: get_one_irq(): %d\n", mpic->name, src); |
1315 | #endif | 1335 | #endif |
1316 | if (unlikely(src == MPIC_VEC_SPURRIOUS)) | 1336 | if (unlikely(src == mpic->spurious_vec)) |
1317 | return NO_IRQ; | 1337 | return NO_IRQ; |
1318 | return irq_linear_revmap(mpic->irqhost, src); | 1338 | return irq_linear_revmap(mpic->irqhost, src); |
1319 | } | 1339 | } |
@@ -1345,7 +1365,7 @@ void mpic_request_ipis(void) | |||
1345 | 1365 | ||
1346 | for (i = 0; i < 4; i++) { | 1366 | for (i = 0; i < 4; i++) { |
1347 | unsigned int vipi = irq_create_mapping(mpic->irqhost, | 1367 | unsigned int vipi = irq_create_mapping(mpic->irqhost, |
1348 | MPIC_VEC_IPI_0 + i); | 1368 | mpic->ipi_vecs[0] + i); |
1349 | if (vipi == NO_IRQ) { | 1369 | if (vipi == NO_IRQ) { |
1350 | printk(KERN_ERR "Failed to map IPI %d\n", i); | 1370 | printk(KERN_ERR "Failed to map IPI %d\n", i); |
1351 | break; | 1371 | break; |
diff --git a/arch/powerpc/sysdev/qe_lib/qe_ic.c b/arch/powerpc/sysdev/qe_lib/qe_ic.c index 74e48d94f27c..4d1dcb45963d 100644 --- a/arch/powerpc/sysdev/qe_lib/qe_ic.c +++ b/arch/powerpc/sysdev/qe_lib/qe_ic.c | |||
@@ -323,7 +323,7 @@ unsigned int qe_ic_get_high_irq(struct qe_ic *qe_ic) | |||
323 | return irq_linear_revmap(qe_ic->irqhost, irq); | 323 | return irq_linear_revmap(qe_ic->irqhost, irq); |
324 | } | 324 | } |
325 | 325 | ||
326 | void fastcall qe_ic_cascade_low(unsigned int irq, struct irq_desc *desc) | 326 | void qe_ic_cascade_low(unsigned int irq, struct irq_desc *desc) |
327 | { | 327 | { |
328 | struct qe_ic *qe_ic = desc->handler_data; | 328 | struct qe_ic *qe_ic = desc->handler_data; |
329 | unsigned int cascade_irq = qe_ic_get_low_irq(qe_ic); | 329 | unsigned int cascade_irq = qe_ic_get_low_irq(qe_ic); |
@@ -332,7 +332,7 @@ void fastcall qe_ic_cascade_low(unsigned int irq, struct irq_desc *desc) | |||
332 | generic_handle_irq(cascade_irq); | 332 | generic_handle_irq(cascade_irq); |
333 | } | 333 | } |
334 | 334 | ||
335 | void fastcall qe_ic_cascade_high(unsigned int irq, struct irq_desc *desc) | 335 | void qe_ic_cascade_high(unsigned int irq, struct irq_desc *desc) |
336 | { | 336 | { |
337 | struct qe_ic *qe_ic = desc->handler_data; | 337 | struct qe_ic *qe_ic = desc->handler_data; |
338 | unsigned int cascade_irq = qe_ic_get_high_irq(qe_ic); | 338 | unsigned int cascade_irq = qe_ic_get_high_irq(qe_ic); |
@@ -352,7 +352,7 @@ void __init qe_ic_init(struct device_node *node, unsigned int flags) | |||
352 | return; | 352 | return; |
353 | 353 | ||
354 | memset(qe_ic, 0, sizeof(struct qe_ic)); | 354 | memset(qe_ic, 0, sizeof(struct qe_ic)); |
355 | qe_ic->of_node = node ? of_node_get(node) : NULL; | 355 | qe_ic->of_node = of_node_get(node); |
356 | 356 | ||
357 | qe_ic->irqhost = irq_alloc_host(IRQ_HOST_MAP_LINEAR, | 357 | qe_ic->irqhost = irq_alloc_host(IRQ_HOST_MAP_LINEAR, |
358 | NR_QE_IC_INTS, &qe_ic_host_ops, 0); | 358 | NR_QE_IC_INTS, &qe_ic_host_ops, 0); |
diff --git a/arch/powerpc/xmon/ppc-opc.c b/arch/powerpc/xmon/ppc-opc.c index 5d841f4b3530..af3780e52e76 100644 --- a/arch/powerpc/xmon/ppc-opc.c +++ b/arch/powerpc/xmon/ppc-opc.c | |||
@@ -21,6 +21,7 @@ | |||
21 | 02110-1301, USA. */ | 21 | 02110-1301, USA. */ |
22 | 22 | ||
23 | #include <linux/stddef.h> | 23 | #include <linux/stddef.h> |
24 | #include <linux/kernel.h> | ||
24 | #include "nonstdio.h" | 25 | #include "nonstdio.h" |
25 | #include "ppc.h" | 26 | #include "ppc.h" |
26 | 27 | ||
@@ -4932,8 +4933,7 @@ const struct powerpc_opcode powerpc_opcodes[] = { | |||
4932 | 4933 | ||
4933 | }; | 4934 | }; |
4934 | 4935 | ||
4935 | const int powerpc_num_opcodes = | 4936 | const int powerpc_num_opcodes = ARRAY_SIZE(powerpc_opcodes); |
4936 | sizeof (powerpc_opcodes) / sizeof (powerpc_opcodes[0]); | ||
4937 | 4937 | ||
4938 | /* The macro table. This is only used by the assembler. */ | 4938 | /* The macro table. This is only used by the assembler. */ |
4939 | 4939 | ||
@@ -4989,5 +4989,4 @@ const struct powerpc_macro powerpc_macros[] = { | |||
4989 | { "clrlslwi.",4, PPCCOM, "rlwinm. %0,%1,%3,(%2)-(%3),31-(%3)" }, | 4989 | { "clrlslwi.",4, PPCCOM, "rlwinm. %0,%1,%3,(%2)-(%3),31-(%3)" }, |
4990 | }; | 4990 | }; |
4991 | 4991 | ||
4992 | const int powerpc_num_macros = | 4992 | const int powerpc_num_macros = ARRAY_SIZE(powerpc_macros); |
4993 | sizeof (powerpc_macros) / sizeof (powerpc_macros[0]); | ||
diff --git a/arch/powerpc/xmon/spu-dis.c b/arch/powerpc/xmon/spu-dis.c index ee929c641bf3..e5f89837c82e 100644 --- a/arch/powerpc/xmon/spu-dis.c +++ b/arch/powerpc/xmon/spu-dis.c | |||
@@ -85,7 +85,7 @@ get_index_for_opcode (unsigned int insn) | |||
85 | if ((index = spu_disassemble_table[opcode & 0x7ff]) != 0) | 85 | if ((index = spu_disassemble_table[opcode & 0x7ff]) != 0) |
86 | return index; | 86 | return index; |
87 | 87 | ||
88 | return 0; | 88 | return NULL; |
89 | } | 89 | } |
90 | 90 | ||
91 | /* Print a Spu instruction. */ | 91 | /* Print a Spu instruction. */ |
diff --git a/arch/powerpc/xmon/spu-opc.c b/arch/powerpc/xmon/spu-opc.c index efffde9edc6e..530df3d6d7b2 100644 --- a/arch/powerpc/xmon/spu-opc.c +++ b/arch/powerpc/xmon/spu-opc.c | |||
@@ -18,6 +18,7 @@ | |||
18 | with this program; if not, write to the Free Software Foundation, Inc., | 18 | with this program; if not, write to the Free Software Foundation, Inc., |
19 | 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ | 19 | 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ |
20 | 20 | ||
21 | #include <linux/kernel.h> | ||
21 | #include "spu.h" | 22 | #include "spu.h" |
22 | 23 | ||
23 | /* This file holds the Spu opcode table */ | 24 | /* This file holds the Spu opcode table */ |
@@ -40,5 +41,4 @@ const struct spu_opcode spu_opcodes[] = { | |||
40 | #undef APUOPFB | 41 | #undef APUOPFB |
41 | }; | 42 | }; |
42 | 43 | ||
43 | const int spu_num_opcodes = | 44 | const int spu_num_opcodes = ARRAY_SIZE(spu_opcodes); |
44 | sizeof (spu_opcodes) / sizeof (spu_opcodes[0]); | ||