diff options
Diffstat (limited to 'arch/powerpc')
106 files changed, 5746 insertions, 314 deletions
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 0df57466e783..ba3948c70072 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig | |||
@@ -704,7 +704,7 @@ config PPC_PCI_CHOICE | |||
704 | config PCI | 704 | config PCI |
705 | bool "PCI support" if PPC_PCI_CHOICE | 705 | bool "PCI support" if PPC_PCI_CHOICE |
706 | default y if !40x && !CPM2 && !8xx && !PPC_83xx \ | 706 | default y if !40x && !CPM2 && !8xx && !PPC_83xx \ |
707 | && !PPC_85xx && !PPC_86xx | 707 | && !PPC_85xx && !PPC_86xx && !GAMECUBE_COMMON |
708 | default PCI_PERMEDIA if !4xx && !CPM2 && !8xx | 708 | default PCI_PERMEDIA if !4xx && !CPM2 && !8xx |
709 | default PCI_QSPAN if !4xx && !CPM2 && 8xx | 709 | default PCI_QSPAN if !4xx && !CPM2 && 8xx |
710 | select ARCH_SUPPORTS_MSI | 710 | select ARCH_SUPPORTS_MSI |
diff --git a/arch/powerpc/Kconfig.debug b/arch/powerpc/Kconfig.debug index bf3382f1904d..5cdd7ed9a12e 100644 --- a/arch/powerpc/Kconfig.debug +++ b/arch/powerpc/Kconfig.debug | |||
@@ -254,6 +254,14 @@ config PPC_EARLY_DEBUG_CPM | |||
254 | using a CPM-based serial port. This assumes that the bootwrapper | 254 | using a CPM-based serial port. This assumes that the bootwrapper |
255 | has run, and set up the CPM in a particular way. | 255 | has run, and set up the CPM in a particular way. |
256 | 256 | ||
257 | config PPC_EARLY_DEBUG_USBGECKO | ||
258 | bool "Early debugging through the USB Gecko adapter" | ||
259 | depends on GAMECUBE_COMMON | ||
260 | select USBGECKO_UDBG | ||
261 | help | ||
262 | Select this to enable early debugging for Nintendo GameCube/Wii | ||
263 | consoles via an external USB Gecko adapter. | ||
264 | |||
257 | endchoice | 265 | endchoice |
258 | 266 | ||
259 | config PPC_EARLY_DEBUG_44x_PHYSLOW | 267 | config PPC_EARLY_DEBUG_44x_PHYSLOW |
diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile index 7bfc8ad87798..bb2465bcb327 100644 --- a/arch/powerpc/boot/Makefile +++ b/arch/powerpc/boot/Makefile | |||
@@ -66,7 +66,7 @@ src-wlib := string.S crt0.S crtsavres.S stdio.c main.c \ | |||
66 | gunzip_util.c elf_util.c $(zlib) devtree.c oflib.c ofconsole.c \ | 66 | gunzip_util.c elf_util.c $(zlib) devtree.c oflib.c ofconsole.c \ |
67 | 4xx.c ebony.c mv64x60.c mpsc.c mv64x60_i2c.c cuboot.c bamboo.c \ | 67 | 4xx.c ebony.c mv64x60.c mpsc.c mv64x60_i2c.c cuboot.c bamboo.c \ |
68 | cpm-serial.c stdlib.c mpc52xx-psc.c planetcore.c uartlite.c \ | 68 | cpm-serial.c stdlib.c mpc52xx-psc.c planetcore.c uartlite.c \ |
69 | fsl-soc.c mpc8xx.c pq2.c | 69 | fsl-soc.c mpc8xx.c pq2.c ugecon.c |
70 | src-plat := of.c cuboot-52xx.c cuboot-824x.c cuboot-83xx.c cuboot-85xx.c holly.c \ | 70 | src-plat := of.c cuboot-52xx.c cuboot-824x.c cuboot-83xx.c cuboot-85xx.c holly.c \ |
71 | cuboot-ebony.c cuboot-hotfoot.c treeboot-ebony.c prpmc2800.c \ | 71 | cuboot-ebony.c cuboot-hotfoot.c treeboot-ebony.c prpmc2800.c \ |
72 | ps3-head.S ps3-hvcall.S ps3.c treeboot-bamboo.c cuboot-8xx.c \ | 72 | ps3-head.S ps3-hvcall.S ps3.c treeboot-bamboo.c cuboot-8xx.c \ |
@@ -76,7 +76,8 @@ src-plat := of.c cuboot-52xx.c cuboot-824x.c cuboot-83xx.c cuboot-85xx.c holly.c | |||
76 | cuboot-katmai.c cuboot-rainier.c redboot-8xx.c ep8248e.c \ | 76 | cuboot-katmai.c cuboot-rainier.c redboot-8xx.c ep8248e.c \ |
77 | cuboot-warp.c cuboot-85xx-cpm2.c cuboot-yosemite.c simpleboot.c \ | 77 | cuboot-warp.c cuboot-85xx-cpm2.c cuboot-yosemite.c simpleboot.c \ |
78 | virtex405-head.S virtex.c redboot-83xx.c cuboot-sam440ep.c \ | 78 | virtex405-head.S virtex.c redboot-83xx.c cuboot-sam440ep.c \ |
79 | cuboot-acadia.c cuboot-amigaone.c cuboot-kilauea.c | 79 | cuboot-acadia.c cuboot-amigaone.c cuboot-kilauea.c \ |
80 | gamecube-head.S gamecube.c wii-head.S wii.c | ||
80 | src-boot := $(src-wlib) $(src-plat) empty.c | 81 | src-boot := $(src-wlib) $(src-plat) empty.c |
81 | 82 | ||
82 | src-boot := $(addprefix $(obj)/, $(src-boot)) | 83 | src-boot := $(addprefix $(obj)/, $(src-boot)) |
@@ -254,6 +255,8 @@ image-$(CONFIG_KSI8560) += cuImage.ksi8560 | |||
254 | image-$(CONFIG_STORCENTER) += cuImage.storcenter | 255 | image-$(CONFIG_STORCENTER) += cuImage.storcenter |
255 | image-$(CONFIG_MPC7448HPC2) += cuImage.mpc7448hpc2 | 256 | image-$(CONFIG_MPC7448HPC2) += cuImage.mpc7448hpc2 |
256 | image-$(CONFIG_PPC_C2K) += cuImage.c2k | 257 | image-$(CONFIG_PPC_C2K) += cuImage.c2k |
258 | image-$(CONFIG_GAMECUBE) += dtbImage.gamecube | ||
259 | image-$(CONFIG_WII) += dtbImage.wii | ||
257 | 260 | ||
258 | # Board port in arch/powerpc/platform/amigaone/Kconfig | 261 | # Board port in arch/powerpc/platform/amigaone/Kconfig |
259 | image-$(CONFIG_AMIGAONE) += cuImage.amigaone | 262 | image-$(CONFIG_AMIGAONE) += cuImage.amigaone |
diff --git a/arch/powerpc/boot/dts/gamecube.dts b/arch/powerpc/boot/dts/gamecube.dts new file mode 100644 index 000000000000..ef3be0e58b02 --- /dev/null +++ b/arch/powerpc/boot/dts/gamecube.dts | |||
@@ -0,0 +1,114 @@ | |||
1 | /* | ||
2 | * arch/powerpc/boot/dts/gamecube.dts | ||
3 | * | ||
4 | * Nintendo GameCube platform device tree source | ||
5 | * Copyright (C) 2007-2009 The GameCube Linux Team | ||
6 | * Copyright (C) 2007,2008,2009 Albert Herranz | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License | ||
10 | * as published by the Free Software Foundation; either version 2 | ||
11 | * of the License, or (at your option) any later version. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | /dts-v1/; | ||
16 | |||
17 | / { | ||
18 | model = "nintendo,gamecube"; | ||
19 | compatible = "nintendo,gamecube"; | ||
20 | #address-cells = <1>; | ||
21 | #size-cells = <1>; | ||
22 | |||
23 | chosen { | ||
24 | bootargs = "root=/dev/gcnsda2 rootwait udbg-immortal"; | ||
25 | }; | ||
26 | |||
27 | memory { | ||
28 | device_type = "memory"; | ||
29 | reg = <0x00000000 0x01800000>; | ||
30 | }; | ||
31 | |||
32 | cpus { | ||
33 | #address-cells = <1>; | ||
34 | #size-cells = <0>; | ||
35 | |||
36 | PowerPC,gekko@0 { | ||
37 | device_type = "cpu"; | ||
38 | reg = <0>; | ||
39 | clock-frequency = <486000000>; /* 486MHz */ | ||
40 | bus-frequency = <162000000>; /* 162MHz core-to-bus 3x */ | ||
41 | timebase-frequency = <40500000>; /* 162MHz / 4 */ | ||
42 | i-cache-line-size = <32>; | ||
43 | d-cache-line-size = <32>; | ||
44 | i-cache-size = <32768>; | ||
45 | d-cache-size = <32768>; | ||
46 | }; | ||
47 | }; | ||
48 | |||
49 | /* devices contained int the flipper chipset */ | ||
50 | flipper { | ||
51 | #address-cells = <1>; | ||
52 | #size-cells = <1>; | ||
53 | compatible = "nintendo,flipper"; | ||
54 | ranges = <0x0c000000 0x0c000000 0x00010000>; | ||
55 | interrupt-parent = <&PIC>; | ||
56 | |||
57 | video@0c002000 { | ||
58 | compatible = "nintendo,flipper-vi"; | ||
59 | reg = <0x0c002000 0x100>; | ||
60 | interrupts = <8>; | ||
61 | }; | ||
62 | |||
63 | processor-interface@0c003000 { | ||
64 | compatible = "nintendo,flipper-pi"; | ||
65 | reg = <0x0c003000 0x100>; | ||
66 | |||
67 | PIC: pic { | ||
68 | #interrupt-cells = <1>; | ||
69 | compatible = "nintendo,flipper-pic"; | ||
70 | interrupt-controller; | ||
71 | }; | ||
72 | }; | ||
73 | |||
74 | dsp@0c005000 { | ||
75 | #address-cells = <1>; | ||
76 | #size-cells = <1>; | ||
77 | compatible = "nintendo,flipper-dsp"; | ||
78 | reg = <0x0c005000 0x200>; | ||
79 | interrupts = <6>; | ||
80 | |||
81 | memory@0 { | ||
82 | compatible = "nintendo,flipper-aram"; | ||
83 | reg = <0 0x1000000>; /* 16MB */ | ||
84 | }; | ||
85 | }; | ||
86 | |||
87 | disk@0c006000 { | ||
88 | compatible = "nintendo,flipper-di"; | ||
89 | reg = <0x0c006000 0x40>; | ||
90 | interrupts = <2>; | ||
91 | }; | ||
92 | |||
93 | audio@0c006c00 { | ||
94 | compatible = "nintendo,flipper-ai"; | ||
95 | reg = <0x0c006c00 0x20>; | ||
96 | interrupts = <6>; | ||
97 | }; | ||
98 | |||
99 | gamepad-controller@0c006400 { | ||
100 | compatible = "nintendo,flipper-si"; | ||
101 | reg = <0x0c006400 0x100>; | ||
102 | interrupts = <3>; | ||
103 | }; | ||
104 | |||
105 | /* External Interface bus */ | ||
106 | exi@0c006800 { | ||
107 | compatible = "nintendo,flipper-exi"; | ||
108 | reg = <0x0c006800 0x40>; | ||
109 | virtual-reg = <0x0c006800>; | ||
110 | interrupts = <4>; | ||
111 | }; | ||
112 | }; | ||
113 | }; | ||
114 | |||
diff --git a/arch/powerpc/boot/dts/mpc8315erdb.dts b/arch/powerpc/boot/dts/mpc8315erdb.dts index 32e10f588c1d..8a3a4f3ef831 100644 --- a/arch/powerpc/boot/dts/mpc8315erdb.dts +++ b/arch/powerpc/boot/dts/mpc8315erdb.dts | |||
@@ -204,6 +204,7 @@ | |||
204 | interrupt-parent = <&ipic>; | 204 | interrupt-parent = <&ipic>; |
205 | tbi-handle = <&tbi0>; | 205 | tbi-handle = <&tbi0>; |
206 | phy-handle = < &phy0 >; | 206 | phy-handle = < &phy0 >; |
207 | fsl,magic-packet; | ||
207 | 208 | ||
208 | mdio@520 { | 209 | mdio@520 { |
209 | #address-cells = <1>; | 210 | #address-cells = <1>; |
@@ -246,6 +247,7 @@ | |||
246 | interrupt-parent = <&ipic>; | 247 | interrupt-parent = <&ipic>; |
247 | tbi-handle = <&tbi1>; | 248 | tbi-handle = <&tbi1>; |
248 | phy-handle = < &phy1 >; | 249 | phy-handle = < &phy1 >; |
250 | fsl,magic-packet; | ||
249 | 251 | ||
250 | mdio@520 { | 252 | mdio@520 { |
251 | #address-cells = <1>; | 253 | #address-cells = <1>; |
@@ -309,6 +311,22 @@ | |||
309 | interrupt-parent = <&ipic>; | 311 | interrupt-parent = <&ipic>; |
310 | }; | 312 | }; |
311 | 313 | ||
314 | gtm1: timer@500 { | ||
315 | compatible = "fsl,mpc8315-gtm", "fsl,gtm"; | ||
316 | reg = <0x500 0x100>; | ||
317 | interrupts = <90 8 78 8 84 8 72 8>; | ||
318 | interrupt-parent = <&ipic>; | ||
319 | clock-frequency = <133333333>; | ||
320 | }; | ||
321 | |||
322 | timer@600 { | ||
323 | compatible = "fsl,mpc8315-gtm", "fsl,gtm"; | ||
324 | reg = <0x600 0x100>; | ||
325 | interrupts = <91 8 79 8 85 8 73 8>; | ||
326 | interrupt-parent = <&ipic>; | ||
327 | clock-frequency = <133333333>; | ||
328 | }; | ||
329 | |||
312 | /* IPIC | 330 | /* IPIC |
313 | * interrupts cell = <intr #, sense> | 331 | * interrupts cell = <intr #, sense> |
314 | * sense values match linux IORESOURCE_IRQ_* defines: | 332 | * sense values match linux IORESOURCE_IRQ_* defines: |
@@ -337,6 +355,15 @@ | |||
337 | 0x59 0x8>; | 355 | 0x59 0x8>; |
338 | interrupt-parent = < &ipic >; | 356 | interrupt-parent = < &ipic >; |
339 | }; | 357 | }; |
358 | |||
359 | pmc: power@b00 { | ||
360 | compatible = "fsl,mpc8315-pmc", "fsl,mpc8313-pmc", | ||
361 | "fsl,mpc8349-pmc"; | ||
362 | reg = <0xb00 0x100 0xa00 0x100>; | ||
363 | interrupts = <80 8>; | ||
364 | interrupt-parent = <&ipic>; | ||
365 | fsl,mpc8313-wakeup-timer = <>m1>; | ||
366 | }; | ||
340 | }; | 367 | }; |
341 | 368 | ||
342 | pci0: pci@e0008500 { | 369 | pci0: pci@e0008500 { |
diff --git a/arch/powerpc/boot/dts/mpc8349emitx.dts b/arch/powerpc/boot/dts/mpc8349emitx.dts index feeeb7f9d609..b53d1df11e2d 100644 --- a/arch/powerpc/boot/dts/mpc8349emitx.dts +++ b/arch/powerpc/boot/dts/mpc8349emitx.dts | |||
@@ -63,6 +63,24 @@ | |||
63 | reg = <0x200 0x100>; | 63 | reg = <0x200 0x100>; |
64 | }; | 64 | }; |
65 | 65 | ||
66 | gpio1: gpio-controller@c00 { | ||
67 | #gpio-cells = <2>; | ||
68 | compatible = "fsl,mpc8349-gpio"; | ||
69 | reg = <0xc00 0x100>; | ||
70 | interrupts = <74 0x8>; | ||
71 | interrupt-parent = <&ipic>; | ||
72 | gpio-controller; | ||
73 | }; | ||
74 | |||
75 | gpio2: gpio-controller@d00 { | ||
76 | #gpio-cells = <2>; | ||
77 | compatible = "fsl,mpc8349-gpio"; | ||
78 | reg = <0xd00 0x100>; | ||
79 | interrupts = <75 0x8>; | ||
80 | interrupt-parent = <&ipic>; | ||
81 | gpio-controller; | ||
82 | }; | ||
83 | |||
66 | i2c@3000 { | 84 | i2c@3000 { |
67 | #address-cells = <1>; | 85 | #address-cells = <1>; |
68 | #size-cells = <0>; | 86 | #size-cells = <0>; |
@@ -72,6 +90,12 @@ | |||
72 | interrupts = <14 0x8>; | 90 | interrupts = <14 0x8>; |
73 | interrupt-parent = <&ipic>; | 91 | interrupt-parent = <&ipic>; |
74 | dfsrr; | 92 | dfsrr; |
93 | |||
94 | eeprom: at24@50 { | ||
95 | compatible = "st-micro,24c256"; | ||
96 | reg = <0x50>; | ||
97 | }; | ||
98 | |||
75 | }; | 99 | }; |
76 | 100 | ||
77 | i2c@3100 { | 101 | i2c@3100 { |
@@ -91,6 +115,25 @@ | |||
91 | interrupt-parent = <&ipic>; | 115 | interrupt-parent = <&ipic>; |
92 | }; | 116 | }; |
93 | 117 | ||
118 | pcf1: iexp@38 { | ||
119 | #gpio-cells = <2>; | ||
120 | compatible = "ti,pcf8574a"; | ||
121 | reg = <0x38>; | ||
122 | gpio-controller; | ||
123 | }; | ||
124 | |||
125 | pcf2: iexp@39 { | ||
126 | #gpio-cells = <2>; | ||
127 | compatible = "ti,pcf8574a"; | ||
128 | reg = <0x39>; | ||
129 | gpio-controller; | ||
130 | }; | ||
131 | |||
132 | spd: at24@51 { | ||
133 | compatible = "at24,spd"; | ||
134 | reg = <0x51>; | ||
135 | }; | ||
136 | |||
94 | mcu_pio: mcu@a { | 137 | mcu_pio: mcu@a { |
95 | #gpio-cells = <2>; | 138 | #gpio-cells = <2>; |
96 | compatible = "fsl,mc9s08qg8-mpc8349emitx", | 139 | compatible = "fsl,mc9s08qg8-mpc8349emitx", |
@@ -275,6 +318,24 @@ | |||
275 | reg = <0x700 0x100>; | 318 | reg = <0x700 0x100>; |
276 | device_type = "ipic"; | 319 | device_type = "ipic"; |
277 | }; | 320 | }; |
321 | |||
322 | gpio-leds { | ||
323 | compatible = "gpio-leds"; | ||
324 | |||
325 | green { | ||
326 | label = "Green"; | ||
327 | gpios = <&pcf1 0 1>; | ||
328 | linux,default-trigger = "heartbeat"; | ||
329 | }; | ||
330 | |||
331 | yellow { | ||
332 | label = "Yellow"; | ||
333 | gpios = <&pcf1 1 1>; | ||
334 | /* linux,default-trigger = "heartbeat"; */ | ||
335 | default-state = "on"; | ||
336 | }; | ||
337 | }; | ||
338 | |||
278 | }; | 339 | }; |
279 | 340 | ||
280 | pci0: pci@e0008500 { | 341 | pci0: pci@e0008500 { |
@@ -331,7 +392,26 @@ | |||
331 | compatible = "fsl,mpc8349e-localbus", | 392 | compatible = "fsl,mpc8349e-localbus", |
332 | "fsl,pq2pro-localbus"; | 393 | "fsl,pq2pro-localbus"; |
333 | reg = <0xe0005000 0xd8>; | 394 | reg = <0xe0005000 0xd8>; |
334 | ranges = <0x3 0x0 0xf0000000 0x210>; | 395 | ranges = <0x0 0x0 0xfe000000 0x1000000 /* flash */ |
396 | 0x1 0x0 0xf8000000 0x20000 /* VSC 7385 */ | ||
397 | 0x2 0x0 0xf9000000 0x200000 /* exp slot */ | ||
398 | 0x3 0x0 0xf0000000 0x210>; /* CF slot */ | ||
399 | |||
400 | flash@0,0 { | ||
401 | compatible = "cfi-flash"; | ||
402 | reg = <0x0 0x0 0x800000>; | ||
403 | bank-width = <2>; | ||
404 | device-width = <1>; | ||
405 | }; | ||
406 | |||
407 | flash@0,800000 { | ||
408 | #address-cells = <1>; | ||
409 | #size-cells = <1>; | ||
410 | compatible = "cfi-flash"; | ||
411 | reg = <0x0 0x800000 0x800000>; | ||
412 | bank-width = <2>; | ||
413 | device-width = <1>; | ||
414 | }; | ||
335 | 415 | ||
336 | pata@3,0 { | 416 | pata@3,0 { |
337 | compatible = "fsl,mpc8349emitx-pata", "ata-generic"; | 417 | compatible = "fsl,mpc8349emitx-pata", "ata-generic"; |
diff --git a/arch/powerpc/boot/dts/wii.dts b/arch/powerpc/boot/dts/wii.dts new file mode 100644 index 000000000000..77528c9a8dbd --- /dev/null +++ b/arch/powerpc/boot/dts/wii.dts | |||
@@ -0,0 +1,218 @@ | |||
1 | /* | ||
2 | * arch/powerpc/boot/dts/wii.dts | ||
3 | * | ||
4 | * Nintendo Wii platform device tree source | ||
5 | * Copyright (C) 2008-2009 The GameCube Linux Team | ||
6 | * Copyright (C) 2008,2009 Albert Herranz | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License | ||
10 | * as published by the Free Software Foundation; either version 2 | ||
11 | * of the License, or (at your option) any later version. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | /dts-v1/; | ||
16 | |||
17 | /* | ||
18 | * This is commented-out for now. | ||
19 | * Until a later patch is merged, the kernel can use only the first | ||
20 | * contiguous RAM range and will BUG() if the memreserve is outside | ||
21 | * that range. | ||
22 | */ | ||
23 | /*/memreserve/ 0x10000000 0x0004000;*/ /* DSP RAM */ | ||
24 | |||
25 | / { | ||
26 | model = "nintendo,wii"; | ||
27 | compatible = "nintendo,wii"; | ||
28 | #address-cells = <1>; | ||
29 | #size-cells = <1>; | ||
30 | |||
31 | chosen { | ||
32 | bootargs = "root=/dev/mmcblk0p2 rootwait udbg-immortal"; | ||
33 | }; | ||
34 | |||
35 | memory { | ||
36 | device_type = "memory"; | ||
37 | reg = <0x00000000 0x01800000 /* MEM1 24MB 1T-SRAM */ | ||
38 | 0x10000000 0x04000000>; /* MEM2 64MB GDDR3 */ | ||
39 | }; | ||
40 | |||
41 | cpus { | ||
42 | #address-cells = <1>; | ||
43 | #size-cells = <0>; | ||
44 | |||
45 | PowerPC,broadway@0 { | ||
46 | device_type = "cpu"; | ||
47 | reg = <0>; | ||
48 | clock-frequency = <729000000>; /* 729MHz */ | ||
49 | bus-frequency = <243000000>; /* 243MHz core-to-bus 3x */ | ||
50 | timebase-frequency = <60750000>; /* 243MHz / 4 */ | ||
51 | i-cache-line-size = <32>; | ||
52 | d-cache-line-size = <32>; | ||
53 | i-cache-size = <32768>; | ||
54 | d-cache-size = <32768>; | ||
55 | }; | ||
56 | }; | ||
57 | |||
58 | /* devices contained in the hollywood chipset */ | ||
59 | hollywood { | ||
60 | #address-cells = <1>; | ||
61 | #size-cells = <1>; | ||
62 | compatible = "nintendo,hollywood"; | ||
63 | ranges = <0x0c000000 0x0c000000 0x01000000 | ||
64 | 0x0d000000 0x0d000000 0x00800000 | ||
65 | 0x0d800000 0x0d800000 0x00800000>; | ||
66 | interrupt-parent = <&PIC0>; | ||
67 | |||
68 | video@0c002000 { | ||
69 | compatible = "nintendo,hollywood-vi", | ||
70 | "nintendo,flipper-vi"; | ||
71 | reg = <0x0c002000 0x100>; | ||
72 | interrupts = <8>; | ||
73 | }; | ||
74 | |||
75 | processor-interface@0c003000 { | ||
76 | compatible = "nintendo,hollywood-pi", | ||
77 | "nintendo,flipper-pi"; | ||
78 | reg = <0x0c003000 0x100>; | ||
79 | |||
80 | PIC0: pic0 { | ||
81 | #interrupt-cells = <1>; | ||
82 | compatible = "nintendo,flipper-pic"; | ||
83 | interrupt-controller; | ||
84 | }; | ||
85 | }; | ||
86 | |||
87 | dsp@0c005000 { | ||
88 | #address-cells = <1>; | ||
89 | #size-cells = <1>; | ||
90 | compatible = "nintendo,hollywood-dsp", | ||
91 | "nintendo,flipper-dsp"; | ||
92 | reg = <0x0c005000 0x200>; | ||
93 | interrupts = <6>; | ||
94 | }; | ||
95 | |||
96 | gamepad-controller@0d006400 { | ||
97 | compatible = "nintendo,hollywood-si", | ||
98 | "nintendo,flipper-si"; | ||
99 | reg = <0x0d006400 0x100>; | ||
100 | interrupts = <3>; | ||
101 | }; | ||
102 | |||
103 | audio@0c006c00 { | ||
104 | compatible = "nintendo,hollywood-ai", | ||
105 | "nintendo,flipper-ai"; | ||
106 | reg = <0x0d006c00 0x20>; | ||
107 | interrupts = <6>; | ||
108 | }; | ||
109 | |||
110 | /* External Interface bus */ | ||
111 | exi@0d006800 { | ||
112 | compatible = "nintendo,hollywood-exi", | ||
113 | "nintendo,flipper-exi"; | ||
114 | reg = <0x0d006800 0x40>; | ||
115 | virtual-reg = <0x0d006800>; | ||
116 | interrupts = <4>; | ||
117 | }; | ||
118 | |||
119 | usb@0d040000 { | ||
120 | compatible = "nintendo,hollywood-usb-ehci", | ||
121 | "usb-ehci"; | ||
122 | reg = <0x0d040000 0x100>; | ||
123 | interrupts = <4>; | ||
124 | interrupt-parent = <&PIC1>; | ||
125 | }; | ||
126 | |||
127 | usb@0d050000 { | ||
128 | compatible = "nintendo,hollywood-usb-ohci", | ||
129 | "usb-ohci"; | ||
130 | reg = <0x0d050000 0x100>; | ||
131 | interrupts = <5>; | ||
132 | interrupt-parent = <&PIC1>; | ||
133 | }; | ||
134 | |||
135 | usb@0d060000 { | ||
136 | compatible = "nintendo,hollywood-usb-ohci", | ||
137 | "usb-ohci"; | ||
138 | reg = <0x0d060000 0x100>; | ||
139 | interrupts = <6>; | ||
140 | interrupt-parent = <&PIC1>; | ||
141 | }; | ||
142 | |||
143 | sd@0d070000 { | ||
144 | compatible = "nintendo,hollywood-sdhci", | ||
145 | "sdhci"; | ||
146 | reg = <0x0d070000 0x200>; | ||
147 | interrupts = <7>; | ||
148 | interrupt-parent = <&PIC1>; | ||
149 | }; | ||
150 | |||
151 | sdio@0d080000 { | ||
152 | compatible = "nintendo,hollywood-sdhci", | ||
153 | "sdhci"; | ||
154 | reg = <0x0d080000 0x200>; | ||
155 | interrupts = <8>; | ||
156 | interrupt-parent = <&PIC1>; | ||
157 | }; | ||
158 | |||
159 | ipc@0d000000 { | ||
160 | compatible = "nintendo,hollywood-ipc"; | ||
161 | reg = <0x0d000000 0x10>; | ||
162 | interrupts = <30>; | ||
163 | interrupt-parent = <&PIC1>; | ||
164 | }; | ||
165 | |||
166 | PIC1: pic1@0d800030 { | ||
167 | #interrupt-cells = <1>; | ||
168 | compatible = "nintendo,hollywood-pic"; | ||
169 | reg = <0x0d800030 0x10>; | ||
170 | interrupt-controller; | ||
171 | interrupts = <14>; | ||
172 | }; | ||
173 | |||
174 | GPIO: gpio@0d8000c0 { | ||
175 | #gpio-cells = <2>; | ||
176 | compatible = "nintendo,hollywood-gpio"; | ||
177 | reg = <0x0d8000c0 0x40>; | ||
178 | gpio-controller; | ||
179 | |||
180 | /* | ||
181 | * This is commented out while a standard binding | ||
182 | * for i2c over gpio is defined. | ||
183 | */ | ||
184 | /* | ||
185 | i2c-video { | ||
186 | #address-cells = <1>; | ||
187 | #size-cells = <0>; | ||
188 | compatible = "i2c-gpio"; | ||
189 | |||
190 | gpios = <&GPIO 15 0 | ||
191 | &GPIO 14 0>; | ||
192 | clock-frequency = <250000>; | ||
193 | no-clock-stretching; | ||
194 | scl-is-open-drain; | ||
195 | sda-is-open-drain; | ||
196 | sda-enforce-dir; | ||
197 | |||
198 | AVE: audio-video-encoder@70 { | ||
199 | compatible = "nintendo,wii-audio-video-encoder"; | ||
200 | reg = <0x70>; | ||
201 | }; | ||
202 | }; | ||
203 | */ | ||
204 | }; | ||
205 | |||
206 | control@0d800100 { | ||
207 | compatible = "nintendo,hollywood-control"; | ||
208 | reg = <0x0d800100 0x300>; | ||
209 | }; | ||
210 | |||
211 | disk@0d806000 { | ||
212 | compatible = "nintendo,hollywood-di"; | ||
213 | reg = <0x0d806000 0x40>; | ||
214 | interrupts = <2>; | ||
215 | }; | ||
216 | }; | ||
217 | }; | ||
218 | |||
diff --git a/arch/powerpc/boot/gamecube-head.S b/arch/powerpc/boot/gamecube-head.S new file mode 100644 index 000000000000..65a9b2a3bf33 --- /dev/null +++ b/arch/powerpc/boot/gamecube-head.S | |||
@@ -0,0 +1,111 @@ | |||
1 | /* | ||
2 | * arch/powerpc/boot/gamecube-head.S | ||
3 | * | ||
4 | * Nintendo GameCube bootwrapper entry. | ||
5 | * Copyright (C) 2004-2009 The GameCube Linux Team | ||
6 | * Copyright (C) 2008,2009 Albert Herranz | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License | ||
10 | * as published by the Free Software Foundation; either version 2 | ||
11 | * of the License, or (at your option) any later version. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #include "ppc_asm.h" | ||
16 | |||
17 | /* | ||
18 | * The entry code does no assumptions regarding: | ||
19 | * - if the data and instruction caches are enabled or not | ||
20 | * - if the MMU is enabled or not | ||
21 | * | ||
22 | * We enable the caches if not already enabled, enable the MMU with an | ||
23 | * identity mapping scheme and jump to the start code. | ||
24 | */ | ||
25 | |||
26 | .text | ||
27 | |||
28 | .globl _zimage_start | ||
29 | _zimage_start: | ||
30 | |||
31 | /* turn the MMU off */ | ||
32 | mfmsr 9 | ||
33 | rlwinm 9, 9, 0, ~((1<<4)|(1<<5)) /* MSR_DR|MSR_IR */ | ||
34 | bcl 20, 31, 1f | ||
35 | 1: | ||
36 | mflr 8 | ||
37 | clrlwi 8, 8, 3 /* convert to a real address */ | ||
38 | addi 8, 8, _mmu_off - 1b | ||
39 | mtsrr0 8 | ||
40 | mtsrr1 9 | ||
41 | rfi | ||
42 | _mmu_off: | ||
43 | /* MMU disabled */ | ||
44 | |||
45 | /* setup BATs */ | ||
46 | isync | ||
47 | li 8, 0 | ||
48 | mtspr 0x210, 8 /* IBAT0U */ | ||
49 | mtspr 0x212, 8 /* IBAT1U */ | ||
50 | mtspr 0x214, 8 /* IBAT2U */ | ||
51 | mtspr 0x216, 8 /* IBAT3U */ | ||
52 | mtspr 0x218, 8 /* DBAT0U */ | ||
53 | mtspr 0x21a, 8 /* DBAT1U */ | ||
54 | mtspr 0x21c, 8 /* DBAT2U */ | ||
55 | mtspr 0x21e, 8 /* DBAT3U */ | ||
56 | |||
57 | li 8, 0x01ff /* first 16MiB */ | ||
58 | li 9, 0x0002 /* rw */ | ||
59 | mtspr 0x211, 9 /* IBAT0L */ | ||
60 | mtspr 0x210, 8 /* IBAT0U */ | ||
61 | mtspr 0x219, 9 /* DBAT0L */ | ||
62 | mtspr 0x218, 8 /* DBAT0U */ | ||
63 | |||
64 | lis 8, 0x0c00 /* I/O mem */ | ||
65 | ori 8, 8, 0x3ff /* 32MiB */ | ||
66 | lis 9, 0x0c00 | ||
67 | ori 9, 9, 0x002a /* uncached, guarded, rw */ | ||
68 | mtspr 0x21b, 9 /* DBAT1L */ | ||
69 | mtspr 0x21a, 8 /* DBAT1U */ | ||
70 | |||
71 | lis 8, 0x0100 /* next 8MiB */ | ||
72 | ori 8, 8, 0x00ff /* 8MiB */ | ||
73 | lis 9, 0x0100 | ||
74 | ori 9, 9, 0x0002 /* rw */ | ||
75 | mtspr 0x215, 9 /* IBAT2L */ | ||
76 | mtspr 0x214, 8 /* IBAT2U */ | ||
77 | mtspr 0x21d, 9 /* DBAT2L */ | ||
78 | mtspr 0x21c, 8 /* DBAT2U */ | ||
79 | |||
80 | /* enable and invalidate the caches if not already enabled */ | ||
81 | mfspr 8, 0x3f0 /* HID0 */ | ||
82 | andi. 0, 8, (1<<15) /* HID0_ICE */ | ||
83 | bne 1f | ||
84 | ori 8, 8, (1<<15)|(1<<11) /* HID0_ICE|HID0_ICFI*/ | ||
85 | 1: | ||
86 | andi. 0, 8, (1<<14) /* HID0_DCE */ | ||
87 | bne 1f | ||
88 | ori 8, 8, (1<<14)|(1<<10) /* HID0_DCE|HID0_DCFI*/ | ||
89 | 1: | ||
90 | mtspr 0x3f0, 8 /* HID0 */ | ||
91 | isync | ||
92 | |||
93 | /* initialize arguments */ | ||
94 | li 3, 0 | ||
95 | li 4, 0 | ||
96 | li 5, 0 | ||
97 | |||
98 | /* turn the MMU on */ | ||
99 | bcl 20, 31, 1f | ||
100 | 1: | ||
101 | mflr 8 | ||
102 | addi 8, 8, _mmu_on - 1b | ||
103 | mfmsr 9 | ||
104 | ori 9, 9, (1<<4)|(1<<5) /* MSR_DR|MSR_IR */ | ||
105 | mtsrr0 8 | ||
106 | mtsrr1 9 | ||
107 | sync | ||
108 | rfi | ||
109 | _mmu_on: | ||
110 | b _zimage_start_lib | ||
111 | |||
diff --git a/arch/powerpc/boot/gamecube.c b/arch/powerpc/boot/gamecube.c new file mode 100644 index 000000000000..28ae7057be5e --- /dev/null +++ b/arch/powerpc/boot/gamecube.c | |||
@@ -0,0 +1,35 @@ | |||
1 | /* | ||
2 | * arch/powerpc/boot/gamecube.c | ||
3 | * | ||
4 | * Nintendo GameCube bootwrapper support | ||
5 | * Copyright (C) 2004-2009 The GameCube Linux Team | ||
6 | * Copyright (C) 2008,2009 Albert Herranz | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License | ||
10 | * as published by the Free Software Foundation; either version 2 | ||
11 | * of the License, or (at your option) any later version. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #include <stddef.h> | ||
16 | #include "stdio.h" | ||
17 | #include "types.h" | ||
18 | #include "io.h" | ||
19 | #include "ops.h" | ||
20 | |||
21 | #include "ugecon.h" | ||
22 | |||
23 | BSS_STACK(8192); | ||
24 | |||
25 | void platform_init(unsigned long r3, unsigned long r4, unsigned long r5) | ||
26 | { | ||
27 | u32 heapsize = 16*1024*1024 - (u32)_end; | ||
28 | |||
29 | simple_alloc_init(_end, heapsize, 32, 64); | ||
30 | fdt_init(_dtb_start); | ||
31 | |||
32 | if (ug_probe()) | ||
33 | console_ops.write = ug_console_write; | ||
34 | } | ||
35 | |||
diff --git a/arch/powerpc/boot/ugecon.c b/arch/powerpc/boot/ugecon.c new file mode 100644 index 000000000000..8f2a6b311534 --- /dev/null +++ b/arch/powerpc/boot/ugecon.c | |||
@@ -0,0 +1,147 @@ | |||
1 | /* | ||
2 | * arch/powerpc/boot/ugecon.c | ||
3 | * | ||
4 | * USB Gecko bootwrapper console. | ||
5 | * Copyright (C) 2008-2009 The GameCube Linux Team | ||
6 | * Copyright (C) 2008,2009 Albert Herranz | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License | ||
10 | * as published by the Free Software Foundation; either version 2 | ||
11 | * of the License, or (at your option) any later version. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #include <stddef.h> | ||
16 | #include "stdio.h" | ||
17 | #include "types.h" | ||
18 | #include "io.h" | ||
19 | #include "ops.h" | ||
20 | |||
21 | |||
22 | #define EXI_CLK_32MHZ 5 | ||
23 | |||
24 | #define EXI_CSR 0x00 | ||
25 | #define EXI_CSR_CLKMASK (0x7<<4) | ||
26 | #define EXI_CSR_CLK_32MHZ (EXI_CLK_32MHZ<<4) | ||
27 | #define EXI_CSR_CSMASK (0x7<<7) | ||
28 | #define EXI_CSR_CS_0 (0x1<<7) /* Chip Select 001 */ | ||
29 | |||
30 | #define EXI_CR 0x0c | ||
31 | #define EXI_CR_TSTART (1<<0) | ||
32 | #define EXI_CR_WRITE (1<<2) | ||
33 | #define EXI_CR_READ_WRITE (2<<2) | ||
34 | #define EXI_CR_TLEN(len) (((len)-1)<<4) | ||
35 | |||
36 | #define EXI_DATA 0x10 | ||
37 | |||
38 | |||
39 | /* virtual address base for input/output, retrieved from device tree */ | ||
40 | static void *ug_io_base; | ||
41 | |||
42 | |||
43 | static u32 ug_io_transaction(u32 in) | ||
44 | { | ||
45 | u32 *csr_reg = ug_io_base + EXI_CSR; | ||
46 | u32 *data_reg = ug_io_base + EXI_DATA; | ||
47 | u32 *cr_reg = ug_io_base + EXI_CR; | ||
48 | u32 csr, data, cr; | ||
49 | |||
50 | /* select */ | ||
51 | csr = EXI_CSR_CLK_32MHZ | EXI_CSR_CS_0; | ||
52 | out_be32(csr_reg, csr); | ||
53 | |||
54 | /* read/write */ | ||
55 | data = in; | ||
56 | out_be32(data_reg, data); | ||
57 | cr = EXI_CR_TLEN(2) | EXI_CR_READ_WRITE | EXI_CR_TSTART; | ||
58 | out_be32(cr_reg, cr); | ||
59 | |||
60 | while (in_be32(cr_reg) & EXI_CR_TSTART) | ||
61 | barrier(); | ||
62 | |||
63 | /* deselect */ | ||
64 | out_be32(csr_reg, 0); | ||
65 | |||
66 | data = in_be32(data_reg); | ||
67 | return data; | ||
68 | } | ||
69 | |||
70 | static int ug_is_txfifo_ready(void) | ||
71 | { | ||
72 | return ug_io_transaction(0xc0000000) & 0x04000000; | ||
73 | } | ||
74 | |||
75 | static void ug_raw_putc(char ch) | ||
76 | { | ||
77 | ug_io_transaction(0xb0000000 | (ch << 20)); | ||
78 | } | ||
79 | |||
80 | static void ug_putc(char ch) | ||
81 | { | ||
82 | int count = 16; | ||
83 | |||
84 | if (!ug_io_base) | ||
85 | return; | ||
86 | |||
87 | while (!ug_is_txfifo_ready() && count--) | ||
88 | barrier(); | ||
89 | if (count >= 0) | ||
90 | ug_raw_putc(ch); | ||
91 | } | ||
92 | |||
93 | void ug_console_write(const char *buf, int len) | ||
94 | { | ||
95 | char *b = (char *)buf; | ||
96 | |||
97 | while (len--) { | ||
98 | if (*b == '\n') | ||
99 | ug_putc('\r'); | ||
100 | ug_putc(*b++); | ||
101 | } | ||
102 | } | ||
103 | |||
104 | static int ug_is_adapter_present(void) | ||
105 | { | ||
106 | if (!ug_io_base) | ||
107 | return 0; | ||
108 | return ug_io_transaction(0x90000000) == 0x04700000; | ||
109 | } | ||
110 | |||
111 | static void *ug_grab_exi_io_base(void) | ||
112 | { | ||
113 | u32 v; | ||
114 | void *devp; | ||
115 | |||
116 | devp = find_node_by_compatible(NULL, "nintendo,flipper-exi"); | ||
117 | if (devp == NULL) | ||
118 | goto err_out; | ||
119 | if (getprop(devp, "virtual-reg", &v, sizeof(v)) != sizeof(v)) | ||
120 | goto err_out; | ||
121 | |||
122 | return (void *)v; | ||
123 | |||
124 | err_out: | ||
125 | return NULL; | ||
126 | } | ||
127 | |||
128 | void *ug_probe(void) | ||
129 | { | ||
130 | void *exi_io_base; | ||
131 | int i; | ||
132 | |||
133 | exi_io_base = ug_grab_exi_io_base(); | ||
134 | if (!exi_io_base) | ||
135 | return NULL; | ||
136 | |||
137 | /* look for a usbgecko on memcard slots A and B */ | ||
138 | for (i = 0; i < 2; i++) { | ||
139 | ug_io_base = exi_io_base + 0x14 * i; | ||
140 | if (ug_is_adapter_present()) | ||
141 | break; | ||
142 | } | ||
143 | if (i == 2) | ||
144 | ug_io_base = NULL; | ||
145 | return ug_io_base; | ||
146 | } | ||
147 | |||
diff --git a/arch/powerpc/boot/ugecon.h b/arch/powerpc/boot/ugecon.h new file mode 100644 index 000000000000..43737539169b --- /dev/null +++ b/arch/powerpc/boot/ugecon.h | |||
@@ -0,0 +1,24 @@ | |||
1 | /* | ||
2 | * arch/powerpc/boot/ugecon.h | ||
3 | * | ||
4 | * USB Gecko early bootwrapper console. | ||
5 | * Copyright (C) 2008-2009 The GameCube Linux Team | ||
6 | * Copyright (C) 2008,2009 Albert Herranz | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License | ||
10 | * as published by the Free Software Foundation; either version 2 | ||
11 | * of the License, or (at your option) any later version. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #ifndef __UGECON_H | ||
16 | #define __UGECON_H | ||
17 | |||
18 | extern void *ug_probe(void); | ||
19 | |||
20 | extern void ug_putc(char ch); | ||
21 | extern void ug_console_write(const char *buf, int len); | ||
22 | |||
23 | #endif /* __UGECON_H */ | ||
24 | |||
diff --git a/arch/powerpc/boot/wii-head.S b/arch/powerpc/boot/wii-head.S new file mode 100644 index 000000000000..edd79b836fcf --- /dev/null +++ b/arch/powerpc/boot/wii-head.S | |||
@@ -0,0 +1,142 @@ | |||
1 | /* | ||
2 | * arch/powerpc/boot/wii-head.S | ||
3 | * | ||
4 | * Nintendo Wii bootwrapper entry. | ||
5 | * Copyright (C) 2008-2009 The GameCube Linux Team | ||
6 | * Copyright (C) 2008,2009 Albert Herranz | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License | ||
10 | * as published by the Free Software Foundation; either version 2 | ||
11 | * of the License, or (at your option) any later version. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #include "ppc_asm.h" | ||
16 | |||
17 | /* | ||
18 | * The entry code does no assumptions regarding: | ||
19 | * - if the data and instruction caches are enabled or not | ||
20 | * - if the MMU is enabled or not | ||
21 | * - if the high BATs are enabled or not | ||
22 | * | ||
23 | * We enable the high BATs, enable the caches if not already enabled, | ||
24 | * enable the MMU with an identity mapping scheme and jump to the start code. | ||
25 | */ | ||
26 | |||
27 | .text | ||
28 | |||
29 | .globl _zimage_start | ||
30 | _zimage_start: | ||
31 | |||
32 | /* turn the MMU off */ | ||
33 | mfmsr 9 | ||
34 | rlwinm 9, 9, 0, ~((1<<4)|(1<<5)) /* MSR_DR|MSR_IR */ | ||
35 | bcl 20, 31, 1f | ||
36 | 1: | ||
37 | mflr 8 | ||
38 | clrlwi 8, 8, 3 /* convert to a real address */ | ||
39 | addi 8, 8, _mmu_off - 1b | ||
40 | mtsrr0 8 | ||
41 | mtsrr1 9 | ||
42 | rfi | ||
43 | _mmu_off: | ||
44 | /* MMU disabled */ | ||
45 | |||
46 | /* setup BATs */ | ||
47 | isync | ||
48 | li 8, 0 | ||
49 | mtspr 0x210, 8 /* IBAT0U */ | ||
50 | mtspr 0x212, 8 /* IBAT1U */ | ||
51 | mtspr 0x214, 8 /* IBAT2U */ | ||
52 | mtspr 0x216, 8 /* IBAT3U */ | ||
53 | mtspr 0x218, 8 /* DBAT0U */ | ||
54 | mtspr 0x21a, 8 /* DBAT1U */ | ||
55 | mtspr 0x21c, 8 /* DBAT2U */ | ||
56 | mtspr 0x21e, 8 /* DBAT3U */ | ||
57 | |||
58 | mtspr 0x230, 8 /* IBAT4U */ | ||
59 | mtspr 0x232, 8 /* IBAT5U */ | ||
60 | mtspr 0x234, 8 /* IBAT6U */ | ||
61 | mtspr 0x236, 8 /* IBAT7U */ | ||
62 | mtspr 0x238, 8 /* DBAT4U */ | ||
63 | mtspr 0x23a, 8 /* DBAT5U */ | ||
64 | mtspr 0x23c, 8 /* DBAT6U */ | ||
65 | mtspr 0x23e, 8 /* DBAT7U */ | ||
66 | |||
67 | li 8, 0x01ff /* first 16MiB */ | ||
68 | li 9, 0x0002 /* rw */ | ||
69 | mtspr 0x211, 9 /* IBAT0L */ | ||
70 | mtspr 0x210, 8 /* IBAT0U */ | ||
71 | mtspr 0x219, 9 /* DBAT0L */ | ||
72 | mtspr 0x218, 8 /* DBAT0U */ | ||
73 | |||
74 | lis 8, 0x0c00 /* I/O mem */ | ||
75 | ori 8, 8, 0x3ff /* 32MiB */ | ||
76 | lis 9, 0x0c00 | ||
77 | ori 9, 9, 0x002a /* uncached, guarded, rw */ | ||
78 | mtspr 0x21b, 9 /* DBAT1L */ | ||
79 | mtspr 0x21a, 8 /* DBAT1U */ | ||
80 | |||
81 | lis 8, 0x0100 /* next 8MiB */ | ||
82 | ori 8, 8, 0x00ff /* 8MiB */ | ||
83 | lis 9, 0x0100 | ||
84 | ori 9, 9, 0x0002 /* rw */ | ||
85 | mtspr 0x215, 9 /* IBAT2L */ | ||
86 | mtspr 0x214, 8 /* IBAT2U */ | ||
87 | mtspr 0x21d, 9 /* DBAT2L */ | ||
88 | mtspr 0x21c, 8 /* DBAT2U */ | ||
89 | |||
90 | lis 8, 0x1000 /* MEM2 */ | ||
91 | ori 8, 8, 0x07ff /* 64MiB */ | ||
92 | lis 9, 0x1000 | ||
93 | ori 9, 9, 0x0002 /* rw */ | ||
94 | mtspr 0x216, 8 /* IBAT3U */ | ||
95 | mtspr 0x217, 9 /* IBAT3L */ | ||
96 | mtspr 0x21e, 8 /* DBAT3U */ | ||
97 | mtspr 0x21f, 9 /* DBAT3L */ | ||
98 | |||
99 | /* enable the high BATs */ | ||
100 | mfspr 8, 0x3f3 /* HID4 */ | ||
101 | oris 8, 8, 0x0200 | ||
102 | mtspr 0x3f3, 8 /* HID4 */ | ||
103 | |||
104 | /* enable and invalidate the caches if not already enabled */ | ||
105 | mfspr 8, 0x3f0 /* HID0 */ | ||
106 | andi. 0, 8, (1<<15) /* HID0_ICE */ | ||
107 | bne 1f | ||
108 | ori 8, 8, (1<<15)|(1<<11) /* HID0_ICE|HID0_ICFI*/ | ||
109 | 1: | ||
110 | andi. 0, 8, (1<<14) /* HID0_DCE */ | ||
111 | bne 1f | ||
112 | ori 8, 8, (1<<14)|(1<<10) /* HID0_DCE|HID0_DCFI*/ | ||
113 | 1: | ||
114 | mtspr 0x3f0, 8 /* HID0 */ | ||
115 | isync | ||
116 | |||
117 | /* initialize arguments */ | ||
118 | li 3, 0 | ||
119 | li 4, 0 | ||
120 | li 5, 0 | ||
121 | |||
122 | /* turn the MMU on */ | ||
123 | bcl 20, 31, 1f | ||
124 | 1: | ||
125 | mflr 8 | ||
126 | addi 8, 8, _mmu_on - 1b | ||
127 | mfmsr 9 | ||
128 | ori 9, 9, (1<<4)|(1<<5) /* MSR_DR|MSR_IR */ | ||
129 | mtsrr0 8 | ||
130 | mtsrr1 9 | ||
131 | sync | ||
132 | rfi | ||
133 | _mmu_on: | ||
134 | /* turn on the front blue led (aka: yay! we got here!) */ | ||
135 | lis 8, 0x0d00 | ||
136 | ori 8, 8, 0x00c0 | ||
137 | lwz 9, 0(8) | ||
138 | ori 9, 9, 0x20 | ||
139 | stw 9, 0(8) | ||
140 | |||
141 | b _zimage_start_lib | ||
142 | |||
diff --git a/arch/powerpc/boot/wii.c b/arch/powerpc/boot/wii.c new file mode 100644 index 000000000000..2ebaec0344dd --- /dev/null +++ b/arch/powerpc/boot/wii.c | |||
@@ -0,0 +1,158 @@ | |||
1 | /* | ||
2 | * arch/powerpc/boot/wii.c | ||
3 | * | ||
4 | * Nintendo Wii bootwrapper support | ||
5 | * Copyright (C) 2008-2009 The GameCube Linux Team | ||
6 | * Copyright (C) 2008,2009 Albert Herranz | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License | ||
10 | * as published by the Free Software Foundation; either version 2 | ||
11 | * of the License, or (at your option) any later version. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #include <stddef.h> | ||
16 | #include "stdio.h" | ||
17 | #include "types.h" | ||
18 | #include "io.h" | ||
19 | #include "ops.h" | ||
20 | |||
21 | #include "ugecon.h" | ||
22 | |||
23 | BSS_STACK(8192); | ||
24 | |||
25 | #define HW_REG(x) ((void *)(x)) | ||
26 | |||
27 | #define EXI_CTRL HW_REG(0x0d800070) | ||
28 | #define EXI_CTRL_ENABLE (1<<0) | ||
29 | |||
30 | #define MEM2_TOP (0x10000000 + 64*1024*1024) | ||
31 | #define FIRMWARE_DEFAULT_SIZE (12*1024*1024) | ||
32 | |||
33 | |||
34 | struct mipc_infohdr { | ||
35 | char magic[3]; | ||
36 | u8 version; | ||
37 | u32 mem2_boundary; | ||
38 | u32 ipc_in; | ||
39 | size_t ipc_in_size; | ||
40 | u32 ipc_out; | ||
41 | size_t ipc_out_size; | ||
42 | }; | ||
43 | |||
44 | static int mipc_check_address(u32 pa) | ||
45 | { | ||
46 | /* only MEM2 addresses */ | ||
47 | if (pa < 0x10000000 || pa > 0x14000000) | ||
48 | return -EINVAL; | ||
49 | return 0; | ||
50 | } | ||
51 | |||
52 | static struct mipc_infohdr *mipc_get_infohdr(void) | ||
53 | { | ||
54 | struct mipc_infohdr **hdrp, *hdr; | ||
55 | |||
56 | /* 'mini' header pointer is the last word of MEM2 memory */ | ||
57 | hdrp = (struct mipc_infohdr **)0x13fffffc; | ||
58 | if (mipc_check_address((u32)hdrp)) { | ||
59 | printf("mini: invalid hdrp %08X\n", (u32)hdrp); | ||
60 | hdr = NULL; | ||
61 | goto out; | ||
62 | } | ||
63 | |||
64 | hdr = *hdrp; | ||
65 | if (mipc_check_address((u32)hdr)) { | ||
66 | printf("mini: invalid hdr %08X\n", (u32)hdr); | ||
67 | hdr = NULL; | ||
68 | goto out; | ||
69 | } | ||
70 | if (memcmp(hdr->magic, "IPC", 3)) { | ||
71 | printf("mini: invalid magic\n"); | ||
72 | hdr = NULL; | ||
73 | goto out; | ||
74 | } | ||
75 | |||
76 | out: | ||
77 | return hdr; | ||
78 | } | ||
79 | |||
80 | static int mipc_get_mem2_boundary(u32 *mem2_boundary) | ||
81 | { | ||
82 | struct mipc_infohdr *hdr; | ||
83 | int error; | ||
84 | |||
85 | hdr = mipc_get_infohdr(); | ||
86 | if (!hdr) { | ||
87 | error = -1; | ||
88 | goto out; | ||
89 | } | ||
90 | |||
91 | if (mipc_check_address(hdr->mem2_boundary)) { | ||
92 | printf("mini: invalid mem2_boundary %08X\n", | ||
93 | hdr->mem2_boundary); | ||
94 | error = -EINVAL; | ||
95 | goto out; | ||
96 | } | ||
97 | *mem2_boundary = hdr->mem2_boundary; | ||
98 | error = 0; | ||
99 | out: | ||
100 | return error; | ||
101 | |||
102 | } | ||
103 | |||
104 | static void platform_fixups(void) | ||
105 | { | ||
106 | void *mem; | ||
107 | u32 reg[4]; | ||
108 | u32 mem2_boundary; | ||
109 | int len; | ||
110 | int error; | ||
111 | |||
112 | mem = finddevice("/memory"); | ||
113 | if (!mem) | ||
114 | fatal("Can't find memory node\n"); | ||
115 | |||
116 | /* two ranges of (address, size) words */ | ||
117 | len = getprop(mem, "reg", reg, sizeof(reg)); | ||
118 | if (len != sizeof(reg)) { | ||
119 | /* nothing to do */ | ||
120 | goto out; | ||
121 | } | ||
122 | |||
123 | /* retrieve MEM2 boundary from 'mini' */ | ||
124 | error = mipc_get_mem2_boundary(&mem2_boundary); | ||
125 | if (error) { | ||
126 | /* if that fails use a sane value */ | ||
127 | mem2_boundary = MEM2_TOP - FIRMWARE_DEFAULT_SIZE; | ||
128 | } | ||
129 | |||
130 | if (mem2_boundary > reg[2] && mem2_boundary < reg[2] + reg[3]) { | ||
131 | reg[3] = mem2_boundary - reg[2]; | ||
132 | printf("top of MEM2 @ %08X\n", reg[2] + reg[3]); | ||
133 | setprop(mem, "reg", reg, sizeof(reg)); | ||
134 | } | ||
135 | |||
136 | out: | ||
137 | return; | ||
138 | } | ||
139 | |||
140 | void platform_init(unsigned long r3, unsigned long r4, unsigned long r5) | ||
141 | { | ||
142 | u32 heapsize = 24*1024*1024 - (u32)_end; | ||
143 | |||
144 | simple_alloc_init(_end, heapsize, 32, 64); | ||
145 | fdt_init(_dtb_start); | ||
146 | |||
147 | /* | ||
148 | * 'mini' boots the Broadway processor with EXI disabled. | ||
149 | * We need it enabled before probing for the USB Gecko. | ||
150 | */ | ||
151 | out_be32(EXI_CTRL, in_be32(EXI_CTRL) | EXI_CTRL_ENABLE); | ||
152 | |||
153 | if (ug_probe()) | ||
154 | console_ops.write = ug_console_write; | ||
155 | |||
156 | platform_ops.fixups = platform_fixups; | ||
157 | } | ||
158 | |||
diff --git a/arch/powerpc/boot/wrapper b/arch/powerpc/boot/wrapper index ac9e9a58b2b0..390512ae7f86 100755 --- a/arch/powerpc/boot/wrapper +++ b/arch/powerpc/boot/wrapper | |||
@@ -230,6 +230,10 @@ xpedite52*) | |||
230 | link_address='0x1400000' | 230 | link_address='0x1400000' |
231 | platformo=$object/cuboot-85xx.o | 231 | platformo=$object/cuboot-85xx.o |
232 | ;; | 232 | ;; |
233 | gamecube|wii) | ||
234 | link_address='0x600000' | ||
235 | platformo="$object/$platform-head.o $object/$platform.o" | ||
236 | ;; | ||
233 | esac | 237 | esac |
234 | 238 | ||
235 | vmz="$tmpdir/`basename \"$kernel\"`.$ext" | 239 | vmz="$tmpdir/`basename \"$kernel\"`.$ext" |
diff --git a/arch/powerpc/configs/g5_defconfig b/arch/powerpc/configs/g5_defconfig index fc905924c022..826a65d3f002 100644 --- a/arch/powerpc/configs/g5_defconfig +++ b/arch/powerpc/configs/g5_defconfig | |||
@@ -757,7 +757,7 @@ CONFIG_SUNGEM=y | |||
757 | # CONFIG_B44 is not set | 757 | # CONFIG_B44 is not set |
758 | # CONFIG_ATL2 is not set | 758 | # CONFIG_ATL2 is not set |
759 | CONFIG_NETDEV_1000=y | 759 | CONFIG_NETDEV_1000=y |
760 | CONFIG_ACENIC=y | 760 | CONFIG_ACENIC=m |
761 | CONFIG_ACENIC_OMIT_TIGON_I=y | 761 | CONFIG_ACENIC_OMIT_TIGON_I=y |
762 | # CONFIG_DL2K is not set | 762 | # CONFIG_DL2K is not set |
763 | CONFIG_E1000=y | 763 | CONFIG_E1000=y |
@@ -794,8 +794,8 @@ CONFIG_NETDEV_10000=y | |||
794 | # CONFIG_BNX2X is not set | 794 | # CONFIG_BNX2X is not set |
795 | # CONFIG_QLGE is not set | 795 | # CONFIG_QLGE is not set |
796 | # CONFIG_SFC is not set | 796 | # CONFIG_SFC is not set |
797 | CONFIG_TR=y | 797 | # CONFIG_TR is not set |
798 | CONFIG_IBMOL=y | 798 | # CONFIG_IBMOL is not set |
799 | # CONFIG_3C359 is not set | 799 | # CONFIG_3C359 is not set |
800 | # CONFIG_TMS380TR is not set | 800 | # CONFIG_TMS380TR is not set |
801 | 801 | ||
diff --git a/arch/powerpc/configs/gamecube_defconfig b/arch/powerpc/configs/gamecube_defconfig new file mode 100644 index 000000000000..942e1193e9e4 --- /dev/null +++ b/arch/powerpc/configs/gamecube_defconfig | |||
@@ -0,0 +1,1061 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.32-rc8 | ||
4 | # Sun Nov 22 21:07:30 2009 | ||
5 | # | ||
6 | # CONFIG_PPC64 is not set | ||
7 | |||
8 | # | ||
9 | # Processor support | ||
10 | # | ||
11 | CONFIG_PPC_BOOK3S_32=y | ||
12 | # CONFIG_PPC_85xx is not set | ||
13 | # CONFIG_PPC_8xx is not set | ||
14 | # CONFIG_40x is not set | ||
15 | # CONFIG_44x is not set | ||
16 | # CONFIG_E200 is not set | ||
17 | CONFIG_PPC_BOOK3S=y | ||
18 | CONFIG_6xx=y | ||
19 | CONFIG_PPC_FPU=y | ||
20 | # CONFIG_ALTIVEC is not set | ||
21 | CONFIG_PPC_STD_MMU=y | ||
22 | CONFIG_PPC_STD_MMU_32=y | ||
23 | # CONFIG_PPC_MM_SLICES is not set | ||
24 | CONFIG_PPC_HAVE_PMU_SUPPORT=y | ||
25 | CONFIG_PPC_PERF_CTRS=y | ||
26 | # CONFIG_SMP is not set | ||
27 | CONFIG_NOT_COHERENT_CACHE=y | ||
28 | CONFIG_PPC32=y | ||
29 | CONFIG_WORD_SIZE=32 | ||
30 | # CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set | ||
31 | CONFIG_MMU=y | ||
32 | CONFIG_GENERIC_CMOS_UPDATE=y | ||
33 | CONFIG_GENERIC_TIME=y | ||
34 | CONFIG_GENERIC_TIME_VSYSCALL=y | ||
35 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
36 | CONFIG_GENERIC_HARDIRQS=y | ||
37 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y | ||
38 | # CONFIG_HAVE_SETUP_PER_CPU_AREA is not set | ||
39 | # CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set | ||
40 | CONFIG_IRQ_PER_CPU=y | ||
41 | CONFIG_STACKTRACE_SUPPORT=y | ||
42 | CONFIG_HAVE_LATENCYTOP_SUPPORT=y | ||
43 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
44 | CONFIG_LOCKDEP_SUPPORT=y | ||
45 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | ||
46 | CONFIG_ARCH_HAS_ILOG2_U32=y | ||
47 | CONFIG_GENERIC_HWEIGHT=y | ||
48 | CONFIG_GENERIC_FIND_NEXT_BIT=y | ||
49 | # CONFIG_ARCH_NO_VIRT_TO_BUS is not set | ||
50 | CONFIG_PPC=y | ||
51 | CONFIG_EARLY_PRINTK=y | ||
52 | CONFIG_GENERIC_NVRAM=y | ||
53 | CONFIG_SCHED_OMIT_FRAME_POINTER=y | ||
54 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y | ||
55 | CONFIG_PPC_OF=y | ||
56 | CONFIG_OF=y | ||
57 | # CONFIG_PPC_UDBG_16550 is not set | ||
58 | # CONFIG_GENERIC_TBSYNC is not set | ||
59 | CONFIG_AUDIT_ARCH=y | ||
60 | CONFIG_GENERIC_BUG=y | ||
61 | CONFIG_DTC=y | ||
62 | # CONFIG_DEFAULT_UIMAGE is not set | ||
63 | # CONFIG_PPC_DCR_NATIVE is not set | ||
64 | # CONFIG_PPC_DCR_MMIO is not set | ||
65 | CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y | ||
66 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
67 | CONFIG_CONSTRUCTORS=y | ||
68 | |||
69 | # | ||
70 | # General setup | ||
71 | # | ||
72 | CONFIG_EXPERIMENTAL=y | ||
73 | CONFIG_BROKEN_ON_SMP=y | ||
74 | CONFIG_LOCK_KERNEL=y | ||
75 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
76 | CONFIG_LOCALVERSION="-gcn" | ||
77 | CONFIG_LOCALVERSION_AUTO=y | ||
78 | CONFIG_SWAP=y | ||
79 | CONFIG_SYSVIPC=y | ||
80 | CONFIG_SYSVIPC_SYSCTL=y | ||
81 | # CONFIG_POSIX_MQUEUE is not set | ||
82 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
83 | # CONFIG_TASKSTATS is not set | ||
84 | # CONFIG_AUDIT is not set | ||
85 | |||
86 | # | ||
87 | # RCU Subsystem | ||
88 | # | ||
89 | CONFIG_TREE_RCU=y | ||
90 | # CONFIG_TREE_PREEMPT_RCU is not set | ||
91 | # CONFIG_RCU_TRACE is not set | ||
92 | CONFIG_RCU_FANOUT=32 | ||
93 | # CONFIG_RCU_FANOUT_EXACT is not set | ||
94 | # CONFIG_TREE_RCU_TRACE is not set | ||
95 | CONFIG_IKCONFIG=y | ||
96 | CONFIG_IKCONFIG_PROC=y | ||
97 | CONFIG_LOG_BUF_SHIFT=14 | ||
98 | CONFIG_GROUP_SCHED=y | ||
99 | CONFIG_FAIR_GROUP_SCHED=y | ||
100 | # CONFIG_RT_GROUP_SCHED is not set | ||
101 | CONFIG_USER_SCHED=y | ||
102 | # CONFIG_CGROUP_SCHED is not set | ||
103 | # CONFIG_CGROUPS is not set | ||
104 | CONFIG_SYSFS_DEPRECATED=y | ||
105 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
106 | # CONFIG_RELAY is not set | ||
107 | # CONFIG_NAMESPACES is not set | ||
108 | CONFIG_BLK_DEV_INITRD=y | ||
109 | CONFIG_INITRAMFS_SOURCE="" | ||
110 | CONFIG_RD_GZIP=y | ||
111 | # CONFIG_RD_BZIP2 is not set | ||
112 | # CONFIG_RD_LZMA is not set | ||
113 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
114 | CONFIG_SYSCTL=y | ||
115 | CONFIG_ANON_INODES=y | ||
116 | CONFIG_EMBEDDED=y | ||
117 | CONFIG_SYSCTL_SYSCALL=y | ||
118 | CONFIG_KALLSYMS=y | ||
119 | CONFIG_KALLSYMS_ALL=y | ||
120 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
121 | CONFIG_HOTPLUG=y | ||
122 | CONFIG_PRINTK=y | ||
123 | CONFIG_BUG=y | ||
124 | # CONFIG_ELF_CORE is not set | ||
125 | CONFIG_BASE_FULL=y | ||
126 | CONFIG_FUTEX=y | ||
127 | CONFIG_EPOLL=y | ||
128 | CONFIG_SIGNALFD=y | ||
129 | CONFIG_TIMERFD=y | ||
130 | CONFIG_EVENTFD=y | ||
131 | CONFIG_SHMEM=y | ||
132 | CONFIG_AIO=y | ||
133 | CONFIG_HAVE_PERF_EVENTS=y | ||
134 | |||
135 | # | ||
136 | # Kernel Performance Events And Counters | ||
137 | # | ||
138 | CONFIG_PERF_EVENTS=y | ||
139 | CONFIG_EVENT_PROFILE=y | ||
140 | CONFIG_PERF_COUNTERS=y | ||
141 | # CONFIG_DEBUG_PERF_USE_VMALLOC is not set | ||
142 | # CONFIG_VM_EVENT_COUNTERS is not set | ||
143 | CONFIG_COMPAT_BRK=y | ||
144 | CONFIG_SLAB=y | ||
145 | # CONFIG_SLUB is not set | ||
146 | # CONFIG_SLOB is not set | ||
147 | # CONFIG_PROFILING is not set | ||
148 | CONFIG_TRACEPOINTS=y | ||
149 | CONFIG_HAVE_OPROFILE=y | ||
150 | # CONFIG_KPROBES is not set | ||
151 | CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y | ||
152 | CONFIG_HAVE_IOREMAP_PROT=y | ||
153 | CONFIG_HAVE_KPROBES=y | ||
154 | CONFIG_HAVE_KRETPROBES=y | ||
155 | CONFIG_HAVE_ARCH_TRACEHOOK=y | ||
156 | CONFIG_HAVE_DMA_ATTRS=y | ||
157 | CONFIG_HAVE_DMA_API_DEBUG=y | ||
158 | |||
159 | # | ||
160 | # GCOV-based kernel profiling | ||
161 | # | ||
162 | # CONFIG_GCOV_KERNEL is not set | ||
163 | CONFIG_SLOW_WORK=y | ||
164 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | ||
165 | CONFIG_SLABINFO=y | ||
166 | CONFIG_RT_MUTEXES=y | ||
167 | CONFIG_BASE_SMALL=0 | ||
168 | CONFIG_MODULES=y | ||
169 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
170 | CONFIG_MODULE_UNLOAD=y | ||
171 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
172 | # CONFIG_MODVERSIONS is not set | ||
173 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
174 | CONFIG_BLOCK=y | ||
175 | CONFIG_LBDAF=y | ||
176 | # CONFIG_BLK_DEV_BSG is not set | ||
177 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
178 | |||
179 | # | ||
180 | # IO Schedulers | ||
181 | # | ||
182 | CONFIG_IOSCHED_NOOP=y | ||
183 | CONFIG_IOSCHED_AS=y | ||
184 | CONFIG_IOSCHED_DEADLINE=y | ||
185 | CONFIG_IOSCHED_CFQ=y | ||
186 | CONFIG_DEFAULT_AS=y | ||
187 | # CONFIG_DEFAULT_DEADLINE is not set | ||
188 | # CONFIG_DEFAULT_CFQ is not set | ||
189 | # CONFIG_DEFAULT_NOOP is not set | ||
190 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
191 | # CONFIG_FREEZER is not set | ||
192 | |||
193 | # | ||
194 | # Platform support | ||
195 | # | ||
196 | # CONFIG_PPC_CHRP is not set | ||
197 | # CONFIG_MPC5121_ADS is not set | ||
198 | # CONFIG_MPC5121_GENERIC is not set | ||
199 | # CONFIG_PPC_MPC52xx is not set | ||
200 | # CONFIG_PPC_PMAC is not set | ||
201 | # CONFIG_PPC_CELL is not set | ||
202 | # CONFIG_PPC_CELL_NATIVE is not set | ||
203 | # CONFIG_PPC_82xx is not set | ||
204 | # CONFIG_PQ2ADS is not set | ||
205 | # CONFIG_PPC_83xx is not set | ||
206 | # CONFIG_PPC_86xx is not set | ||
207 | CONFIG_EMBEDDED6xx=y | ||
208 | # CONFIG_LINKSTATION is not set | ||
209 | # CONFIG_STORCENTER is not set | ||
210 | # CONFIG_MPC7448HPC2 is not set | ||
211 | # CONFIG_PPC_HOLLY is not set | ||
212 | # CONFIG_PPC_PRPMC2800 is not set | ||
213 | # CONFIG_PPC_C2K is not set | ||
214 | CONFIG_GAMECUBE_COMMON=y | ||
215 | CONFIG_USBGECKO_UDBG=y | ||
216 | CONFIG_FLIPPER_PIC=y | ||
217 | CONFIG_GAMECUBE=y | ||
218 | # CONFIG_WII is not set | ||
219 | # CONFIG_AMIGAONE is not set | ||
220 | # CONFIG_PPC_OF_BOOT_TRAMPOLINE is not set | ||
221 | # CONFIG_IPIC is not set | ||
222 | # CONFIG_MPIC is not set | ||
223 | # CONFIG_MPIC_WEIRD is not set | ||
224 | # CONFIG_PPC_I8259 is not set | ||
225 | # CONFIG_PPC_RTAS is not set | ||
226 | # CONFIG_MMIO_NVRAM is not set | ||
227 | # CONFIG_PPC_MPC106 is not set | ||
228 | # CONFIG_PPC_970_NAP is not set | ||
229 | # CONFIG_PPC_INDIRECT_IO is not set | ||
230 | # CONFIG_GENERIC_IOMAP is not set | ||
231 | # CONFIG_CPU_FREQ is not set | ||
232 | # CONFIG_TAU is not set | ||
233 | # CONFIG_FSL_ULI1575 is not set | ||
234 | # CONFIG_SIMPLE_GPIO is not set | ||
235 | |||
236 | # | ||
237 | # Kernel options | ||
238 | # | ||
239 | # CONFIG_HIGHMEM is not set | ||
240 | # CONFIG_NO_HZ is not set | ||
241 | # CONFIG_HIGH_RES_TIMERS is not set | ||
242 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
243 | # CONFIG_HZ_100 is not set | ||
244 | CONFIG_HZ_250=y | ||
245 | # CONFIG_HZ_300 is not set | ||
246 | # CONFIG_HZ_1000 is not set | ||
247 | CONFIG_HZ=250 | ||
248 | # CONFIG_SCHED_HRTICK is not set | ||
249 | # CONFIG_PREEMPT_NONE is not set | ||
250 | # CONFIG_PREEMPT_VOLUNTARY is not set | ||
251 | CONFIG_PREEMPT=y | ||
252 | CONFIG_BINFMT_ELF=y | ||
253 | # CONFIG_HAVE_AOUT is not set | ||
254 | CONFIG_BINFMT_MISC=m | ||
255 | # CONFIG_IOMMU_HELPER is not set | ||
256 | # CONFIG_SWIOTLB is not set | ||
257 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | ||
258 | CONFIG_ARCH_HAS_WALK_MEMORY=y | ||
259 | CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y | ||
260 | CONFIG_KEXEC=y | ||
261 | # CONFIG_CRASH_DUMP is not set | ||
262 | CONFIG_MAX_ACTIVE_REGIONS=32 | ||
263 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
264 | CONFIG_ARCH_POPULATES_NODE_MAP=y | ||
265 | CONFIG_SELECT_MEMORY_MODEL=y | ||
266 | CONFIG_FLATMEM_MANUAL=y | ||
267 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
268 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
269 | CONFIG_FLATMEM=y | ||
270 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
271 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
272 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
273 | # CONFIG_MIGRATION is not set | ||
274 | # CONFIG_PHYS_ADDR_T_64BIT is not set | ||
275 | CONFIG_ZONE_DMA_FLAG=1 | ||
276 | CONFIG_BOUNCE=y | ||
277 | CONFIG_VIRT_TO_BUS=y | ||
278 | CONFIG_HAVE_MLOCK=y | ||
279 | CONFIG_HAVE_MLOCKED_PAGE_BIT=y | ||
280 | # CONFIG_KSM is not set | ||
281 | CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 | ||
282 | CONFIG_PPC_4K_PAGES=y | ||
283 | # CONFIG_PPC_16K_PAGES is not set | ||
284 | # CONFIG_PPC_64K_PAGES is not set | ||
285 | # CONFIG_PPC_256K_PAGES is not set | ||
286 | CONFIG_FORCE_MAX_ZONEORDER=11 | ||
287 | CONFIG_PROC_DEVICETREE=y | ||
288 | # CONFIG_CMDLINE_BOOL is not set | ||
289 | CONFIG_EXTRA_TARGETS="" | ||
290 | # CONFIG_PM is not set | ||
291 | # CONFIG_SECCOMP is not set | ||
292 | CONFIG_ISA_DMA_API=y | ||
293 | |||
294 | # | ||
295 | # Bus options | ||
296 | # | ||
297 | CONFIG_ZONE_DMA=y | ||
298 | CONFIG_GENERIC_ISA_DMA=y | ||
299 | # CONFIG_PCI is not set | ||
300 | # CONFIG_PCI_DOMAINS is not set | ||
301 | # CONFIG_PCI_SYSCALL is not set | ||
302 | # CONFIG_ARCH_SUPPORTS_MSI is not set | ||
303 | # CONFIG_PCCARD is not set | ||
304 | # CONFIG_HAS_RAPIDIO is not set | ||
305 | |||
306 | # | ||
307 | # Advanced setup | ||
308 | # | ||
309 | CONFIG_ADVANCED_OPTIONS=y | ||
310 | # CONFIG_LOWMEM_SIZE_BOOL is not set | ||
311 | CONFIG_LOWMEM_SIZE=0x30000000 | ||
312 | # CONFIG_PAGE_OFFSET_BOOL is not set | ||
313 | CONFIG_PAGE_OFFSET=0xc0000000 | ||
314 | # CONFIG_KERNEL_START_BOOL is not set | ||
315 | CONFIG_KERNEL_START=0xc0000000 | ||
316 | CONFIG_PHYSICAL_START=0x00000000 | ||
317 | # CONFIG_TASK_SIZE_BOOL is not set | ||
318 | CONFIG_TASK_SIZE=0xc0000000 | ||
319 | # CONFIG_CONSISTENT_SIZE_BOOL is not set | ||
320 | CONFIG_CONSISTENT_SIZE=0x00200000 | ||
321 | CONFIG_NET=y | ||
322 | |||
323 | # | ||
324 | # Networking options | ||
325 | # | ||
326 | CONFIG_PACKET=y | ||
327 | # CONFIG_PACKET_MMAP is not set | ||
328 | CONFIG_UNIX=y | ||
329 | # CONFIG_NET_KEY is not set | ||
330 | CONFIG_INET=y | ||
331 | # CONFIG_IP_MULTICAST is not set | ||
332 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
333 | CONFIG_IP_FIB_HASH=y | ||
334 | CONFIG_IP_PNP=y | ||
335 | CONFIG_IP_PNP_DHCP=y | ||
336 | # CONFIG_IP_PNP_BOOTP is not set | ||
337 | CONFIG_IP_PNP_RARP=y | ||
338 | # CONFIG_NET_IPIP is not set | ||
339 | # CONFIG_NET_IPGRE is not set | ||
340 | # CONFIG_ARPD is not set | ||
341 | # CONFIG_SYN_COOKIES is not set | ||
342 | # CONFIG_INET_AH is not set | ||
343 | # CONFIG_INET_ESP is not set | ||
344 | # CONFIG_INET_IPCOMP is not set | ||
345 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
346 | # CONFIG_INET_TUNNEL is not set | ||
347 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | ||
348 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | ||
349 | # CONFIG_INET_XFRM_MODE_BEET is not set | ||
350 | # CONFIG_INET_LRO is not set | ||
351 | # CONFIG_INET_DIAG is not set | ||
352 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
353 | CONFIG_TCP_CONG_CUBIC=y | ||
354 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
355 | # CONFIG_TCP_MD5SIG is not set | ||
356 | # CONFIG_IPV6 is not set | ||
357 | # CONFIG_NETWORK_SECMARK is not set | ||
358 | # CONFIG_NETFILTER is not set | ||
359 | # CONFIG_IP_DCCP is not set | ||
360 | # CONFIG_IP_SCTP is not set | ||
361 | # CONFIG_RDS is not set | ||
362 | # CONFIG_TIPC is not set | ||
363 | # CONFIG_ATM is not set | ||
364 | # CONFIG_BRIDGE is not set | ||
365 | # CONFIG_NET_DSA is not set | ||
366 | # CONFIG_VLAN_8021Q is not set | ||
367 | # CONFIG_DECNET is not set | ||
368 | # CONFIG_LLC2 is not set | ||
369 | # CONFIG_IPX is not set | ||
370 | # CONFIG_ATALK is not set | ||
371 | # CONFIG_X25 is not set | ||
372 | # CONFIG_LAPB is not set | ||
373 | # CONFIG_ECONET is not set | ||
374 | # CONFIG_WAN_ROUTER is not set | ||
375 | # CONFIG_PHONET is not set | ||
376 | # CONFIG_IEEE802154 is not set | ||
377 | # CONFIG_NET_SCHED is not set | ||
378 | # CONFIG_DCB is not set | ||
379 | |||
380 | # | ||
381 | # Network testing | ||
382 | # | ||
383 | # CONFIG_NET_PKTGEN is not set | ||
384 | # CONFIG_NET_DROP_MONITOR is not set | ||
385 | # CONFIG_HAMRADIO is not set | ||
386 | # CONFIG_CAN is not set | ||
387 | # CONFIG_IRDA is not set | ||
388 | # CONFIG_BT is not set | ||
389 | # CONFIG_AF_RXRPC is not set | ||
390 | # CONFIG_WIRELESS is not set | ||
391 | # CONFIG_WIMAX is not set | ||
392 | # CONFIG_RFKILL is not set | ||
393 | # CONFIG_NET_9P is not set | ||
394 | |||
395 | # | ||
396 | # Device Drivers | ||
397 | # | ||
398 | |||
399 | # | ||
400 | # Generic Driver Options | ||
401 | # | ||
402 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
403 | # CONFIG_DEVTMPFS is not set | ||
404 | # CONFIG_STANDALONE is not set | ||
405 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
406 | # CONFIG_FW_LOADER is not set | ||
407 | # CONFIG_DEBUG_DRIVER is not set | ||
408 | # CONFIG_DEBUG_DEVRES is not set | ||
409 | # CONFIG_SYS_HYPERVISOR is not set | ||
410 | # CONFIG_CONNECTOR is not set | ||
411 | # CONFIG_MTD is not set | ||
412 | CONFIG_OF_DEVICE=y | ||
413 | # CONFIG_PARPORT is not set | ||
414 | CONFIG_BLK_DEV=y | ||
415 | # CONFIG_BLK_DEV_FD is not set | ||
416 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
417 | CONFIG_BLK_DEV_LOOP=y | ||
418 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | ||
419 | CONFIG_BLK_DEV_NBD=m | ||
420 | CONFIG_BLK_DEV_RAM=y | ||
421 | CONFIG_BLK_DEV_RAM_COUNT=2 | ||
422 | CONFIG_BLK_DEV_RAM_SIZE=4096 | ||
423 | # CONFIG_BLK_DEV_XIP is not set | ||
424 | # CONFIG_CDROM_PKTCDVD is not set | ||
425 | # CONFIG_ATA_OVER_ETH is not set | ||
426 | # CONFIG_BLK_DEV_HD is not set | ||
427 | CONFIG_MISC_DEVICES=y | ||
428 | # CONFIG_ENCLOSURE_SERVICES is not set | ||
429 | # CONFIG_C2PORT is not set | ||
430 | |||
431 | # | ||
432 | # EEPROM support | ||
433 | # | ||
434 | # CONFIG_EEPROM_93CX6 is not set | ||
435 | CONFIG_HAVE_IDE=y | ||
436 | # CONFIG_IDE is not set | ||
437 | |||
438 | # | ||
439 | # SCSI device support | ||
440 | # | ||
441 | # CONFIG_RAID_ATTRS is not set | ||
442 | # CONFIG_SCSI is not set | ||
443 | # CONFIG_SCSI_DMA is not set | ||
444 | # CONFIG_SCSI_NETLINK is not set | ||
445 | # CONFIG_ATA is not set | ||
446 | # CONFIG_MD is not set | ||
447 | # CONFIG_MACINTOSH_DRIVERS is not set | ||
448 | CONFIG_NETDEVICES=y | ||
449 | # CONFIG_DUMMY is not set | ||
450 | # CONFIG_BONDING is not set | ||
451 | # CONFIG_MACVLAN is not set | ||
452 | # CONFIG_EQUALIZER is not set | ||
453 | # CONFIG_TUN is not set | ||
454 | # CONFIG_VETH is not set | ||
455 | # CONFIG_PHYLIB is not set | ||
456 | CONFIG_NET_ETHERNET=y | ||
457 | # CONFIG_MII is not set | ||
458 | # CONFIG_ETHOC is not set | ||
459 | # CONFIG_DNET is not set | ||
460 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | ||
461 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | ||
462 | # CONFIG_IBM_NEW_EMAC_TAH is not set | ||
463 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | ||
464 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | ||
465 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | ||
466 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | ||
467 | # CONFIG_B44 is not set | ||
468 | # CONFIG_KS8842 is not set | ||
469 | # CONFIG_KS8851_MLL is not set | ||
470 | # CONFIG_XILINX_EMACLITE is not set | ||
471 | # CONFIG_NETDEV_1000 is not set | ||
472 | # CONFIG_NETDEV_10000 is not set | ||
473 | # CONFIG_WLAN is not set | ||
474 | |||
475 | # | ||
476 | # Enable WiMAX (Networking options) to see the WiMAX drivers | ||
477 | # | ||
478 | # CONFIG_WAN is not set | ||
479 | # CONFIG_PPP is not set | ||
480 | # CONFIG_SLIP is not set | ||
481 | # CONFIG_NETCONSOLE is not set | ||
482 | # CONFIG_NETPOLL is not set | ||
483 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
484 | # CONFIG_ISDN is not set | ||
485 | # CONFIG_PHONE is not set | ||
486 | |||
487 | # | ||
488 | # Input device support | ||
489 | # | ||
490 | CONFIG_INPUT=y | ||
491 | CONFIG_INPUT_FF_MEMLESS=m | ||
492 | # CONFIG_INPUT_POLLDEV is not set | ||
493 | |||
494 | # | ||
495 | # Userland interfaces | ||
496 | # | ||
497 | # CONFIG_INPUT_MOUSEDEV is not set | ||
498 | CONFIG_INPUT_JOYDEV=y | ||
499 | CONFIG_INPUT_EVDEV=y | ||
500 | # CONFIG_INPUT_EVBUG is not set | ||
501 | |||
502 | # | ||
503 | # Input Device Drivers | ||
504 | # | ||
505 | CONFIG_INPUT_KEYBOARD=y | ||
506 | # CONFIG_KEYBOARD_ATKBD is not set | ||
507 | # CONFIG_KEYBOARD_LKKBD is not set | ||
508 | # CONFIG_KEYBOARD_NEWTON is not set | ||
509 | # CONFIG_KEYBOARD_OPENCORES is not set | ||
510 | # CONFIG_KEYBOARD_STOWAWAY is not set | ||
511 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
512 | # CONFIG_KEYBOARD_XTKBD is not set | ||
513 | # CONFIG_INPUT_MOUSE is not set | ||
514 | CONFIG_INPUT_JOYSTICK=y | ||
515 | # CONFIG_JOYSTICK_ANALOG is not set | ||
516 | # CONFIG_JOYSTICK_A3D is not set | ||
517 | # CONFIG_JOYSTICK_ADI is not set | ||
518 | # CONFIG_JOYSTICK_COBRA is not set | ||
519 | # CONFIG_JOYSTICK_GF2K is not set | ||
520 | # CONFIG_JOYSTICK_GRIP is not set | ||
521 | # CONFIG_JOYSTICK_GRIP_MP is not set | ||
522 | # CONFIG_JOYSTICK_GUILLEMOT is not set | ||
523 | # CONFIG_JOYSTICK_INTERACT is not set | ||
524 | # CONFIG_JOYSTICK_SIDEWINDER is not set | ||
525 | # CONFIG_JOYSTICK_TMDC is not set | ||
526 | # CONFIG_JOYSTICK_IFORCE is not set | ||
527 | # CONFIG_JOYSTICK_WARRIOR is not set | ||
528 | # CONFIG_JOYSTICK_MAGELLAN is not set | ||
529 | # CONFIG_JOYSTICK_SPACEORB is not set | ||
530 | # CONFIG_JOYSTICK_SPACEBALL is not set | ||
531 | # CONFIG_JOYSTICK_STINGER is not set | ||
532 | # CONFIG_JOYSTICK_TWIDJOY is not set | ||
533 | # CONFIG_JOYSTICK_ZHENHUA is not set | ||
534 | # CONFIG_JOYSTICK_JOYDUMP is not set | ||
535 | # CONFIG_INPUT_TABLET is not set | ||
536 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
537 | # CONFIG_INPUT_MISC is not set | ||
538 | |||
539 | # | ||
540 | # Hardware I/O ports | ||
541 | # | ||
542 | CONFIG_SERIO=y | ||
543 | # CONFIG_SERIO_I8042 is not set | ||
544 | # CONFIG_SERIO_SERPORT is not set | ||
545 | # CONFIG_SERIO_LIBPS2 is not set | ||
546 | # CONFIG_SERIO_RAW is not set | ||
547 | # CONFIG_SERIO_XILINX_XPS_PS2 is not set | ||
548 | # CONFIG_GAMEPORT is not set | ||
549 | |||
550 | # | ||
551 | # Character devices | ||
552 | # | ||
553 | CONFIG_VT=y | ||
554 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
555 | CONFIG_VT_CONSOLE=y | ||
556 | CONFIG_HW_CONSOLE=y | ||
557 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||
558 | # CONFIG_DEVKMEM is not set | ||
559 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
560 | |||
561 | # | ||
562 | # Serial drivers | ||
563 | # | ||
564 | # CONFIG_SERIAL_8250 is not set | ||
565 | |||
566 | # | ||
567 | # Non-8250 serial port support | ||
568 | # | ||
569 | # CONFIG_SERIAL_UARTLITE is not set | ||
570 | CONFIG_UNIX98_PTYS=y | ||
571 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set | ||
572 | CONFIG_LEGACY_PTYS=y | ||
573 | CONFIG_LEGACY_PTY_COUNT=64 | ||
574 | # CONFIG_HVC_UDBG is not set | ||
575 | # CONFIG_IPMI_HANDLER is not set | ||
576 | # CONFIG_HW_RANDOM is not set | ||
577 | # CONFIG_NVRAM is not set | ||
578 | # CONFIG_R3964 is not set | ||
579 | # CONFIG_RAW_DRIVER is not set | ||
580 | # CONFIG_TCG_TPM is not set | ||
581 | # CONFIG_I2C is not set | ||
582 | # CONFIG_SPI is not set | ||
583 | |||
584 | # | ||
585 | # PPS support | ||
586 | # | ||
587 | # CONFIG_PPS is not set | ||
588 | CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y | ||
589 | # CONFIG_GPIOLIB is not set | ||
590 | # CONFIG_W1 is not set | ||
591 | # CONFIG_POWER_SUPPLY is not set | ||
592 | # CONFIG_HWMON is not set | ||
593 | # CONFIG_THERMAL is not set | ||
594 | # CONFIG_WATCHDOG is not set | ||
595 | CONFIG_SSB_POSSIBLE=y | ||
596 | |||
597 | # | ||
598 | # Sonics Silicon Backplane | ||
599 | # | ||
600 | # CONFIG_SSB is not set | ||
601 | |||
602 | # | ||
603 | # Multifunction device drivers | ||
604 | # | ||
605 | # CONFIG_MFD_CORE is not set | ||
606 | # CONFIG_MFD_SM501 is not set | ||
607 | # CONFIG_HTC_PASIC3 is not set | ||
608 | # CONFIG_MFD_TMIO is not set | ||
609 | # CONFIG_REGULATOR is not set | ||
610 | # CONFIG_MEDIA_SUPPORT is not set | ||
611 | |||
612 | # | ||
613 | # Graphics support | ||
614 | # | ||
615 | # CONFIG_VGASTATE is not set | ||
616 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | ||
617 | CONFIG_FB=y | ||
618 | # CONFIG_FIRMWARE_EDID is not set | ||
619 | # CONFIG_FB_DDC is not set | ||
620 | # CONFIG_FB_BOOT_VESA_SUPPORT is not set | ||
621 | # CONFIG_FB_CFB_FILLRECT is not set | ||
622 | # CONFIG_FB_CFB_COPYAREA is not set | ||
623 | # CONFIG_FB_CFB_IMAGEBLIT is not set | ||
624 | # CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set | ||
625 | # CONFIG_FB_SYS_FILLRECT is not set | ||
626 | # CONFIG_FB_SYS_COPYAREA is not set | ||
627 | # CONFIG_FB_SYS_IMAGEBLIT is not set | ||
628 | # CONFIG_FB_FOREIGN_ENDIAN is not set | ||
629 | # CONFIG_FB_SYS_FOPS is not set | ||
630 | # CONFIG_FB_SVGALIB is not set | ||
631 | # CONFIG_FB_MACMODES is not set | ||
632 | # CONFIG_FB_BACKLIGHT is not set | ||
633 | # CONFIG_FB_MODE_HELPERS is not set | ||
634 | # CONFIG_FB_TILEBLITTING is not set | ||
635 | |||
636 | # | ||
637 | # Frame buffer hardware drivers | ||
638 | # | ||
639 | # CONFIG_FB_OF is not set | ||
640 | # CONFIG_FB_VGA16 is not set | ||
641 | # CONFIG_FB_S1D13XXX is not set | ||
642 | # CONFIG_FB_IBM_GXT4500 is not set | ||
643 | # CONFIG_FB_VIRTUAL is not set | ||
644 | # CONFIG_FB_METRONOME is not set | ||
645 | # CONFIG_FB_MB862XX is not set | ||
646 | # CONFIG_FB_BROADSHEET is not set | ||
647 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
648 | |||
649 | # | ||
650 | # Display device support | ||
651 | # | ||
652 | # CONFIG_DISPLAY_SUPPORT is not set | ||
653 | |||
654 | # | ||
655 | # Console display driver support | ||
656 | # | ||
657 | # CONFIG_VGA_CONSOLE is not set | ||
658 | CONFIG_DUMMY_CONSOLE=y | ||
659 | CONFIG_FRAMEBUFFER_CONSOLE=y | ||
660 | # CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set | ||
661 | # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set | ||
662 | # CONFIG_FONTS is not set | ||
663 | CONFIG_FONT_8x8=y | ||
664 | CONFIG_FONT_8x16=y | ||
665 | CONFIG_LOGO=y | ||
666 | # CONFIG_LOGO_LINUX_MONO is not set | ||
667 | # CONFIG_LOGO_LINUX_VGA16 is not set | ||
668 | # CONFIG_LOGO_LINUX_CLUT224 is not set | ||
669 | CONFIG_SOUND=y | ||
670 | CONFIG_SOUND_OSS_CORE=y | ||
671 | CONFIG_SOUND_OSS_CORE_PRECLAIM=y | ||
672 | CONFIG_SND=y | ||
673 | CONFIG_SND_TIMER=y | ||
674 | CONFIG_SND_PCM=y | ||
675 | CONFIG_SND_SEQUENCER=y | ||
676 | # CONFIG_SND_SEQ_DUMMY is not set | ||
677 | CONFIG_SND_OSSEMUL=y | ||
678 | CONFIG_SND_MIXER_OSS=y | ||
679 | CONFIG_SND_PCM_OSS=y | ||
680 | CONFIG_SND_PCM_OSS_PLUGINS=y | ||
681 | CONFIG_SND_SEQUENCER_OSS=y | ||
682 | # CONFIG_SND_DYNAMIC_MINORS is not set | ||
683 | CONFIG_SND_SUPPORT_OLD_API=y | ||
684 | # CONFIG_SND_VERBOSE_PROCFS is not set | ||
685 | # CONFIG_SND_VERBOSE_PRINTK is not set | ||
686 | # CONFIG_SND_DEBUG is not set | ||
687 | # CONFIG_SND_RAWMIDI_SEQ is not set | ||
688 | # CONFIG_SND_OPL3_LIB_SEQ is not set | ||
689 | # CONFIG_SND_OPL4_LIB_SEQ is not set | ||
690 | # CONFIG_SND_SBAWE_SEQ is not set | ||
691 | # CONFIG_SND_EMU10K1_SEQ is not set | ||
692 | CONFIG_SND_DRIVERS=y | ||
693 | # CONFIG_SND_DUMMY is not set | ||
694 | # CONFIG_SND_VIRMIDI is not set | ||
695 | # CONFIG_SND_MTPAV is not set | ||
696 | # CONFIG_SND_SERIAL_U16550 is not set | ||
697 | # CONFIG_SND_MPU401 is not set | ||
698 | CONFIG_SND_PPC=y | ||
699 | # CONFIG_SND_SOC is not set | ||
700 | # CONFIG_SOUND_PRIME is not set | ||
701 | CONFIG_HID_SUPPORT=y | ||
702 | CONFIG_HID=y | ||
703 | # CONFIG_HIDRAW is not set | ||
704 | # CONFIG_HID_PID is not set | ||
705 | |||
706 | # | ||
707 | # Special HID drivers | ||
708 | # | ||
709 | # CONFIG_USB_SUPPORT is not set | ||
710 | # CONFIG_MMC is not set | ||
711 | # CONFIG_MEMSTICK is not set | ||
712 | # CONFIG_NEW_LEDS is not set | ||
713 | # CONFIG_ACCESSIBILITY is not set | ||
714 | # CONFIG_EDAC is not set | ||
715 | CONFIG_RTC_LIB=y | ||
716 | CONFIG_RTC_CLASS=y | ||
717 | CONFIG_RTC_HCTOSYS=y | ||
718 | CONFIG_RTC_HCTOSYS_DEVICE="rtc0" | ||
719 | # CONFIG_RTC_DEBUG is not set | ||
720 | |||
721 | # | ||
722 | # RTC interfaces | ||
723 | # | ||
724 | CONFIG_RTC_INTF_SYSFS=y | ||
725 | CONFIG_RTC_INTF_PROC=y | ||
726 | CONFIG_RTC_INTF_DEV=y | ||
727 | # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set | ||
728 | # CONFIG_RTC_DRV_TEST is not set | ||
729 | |||
730 | # | ||
731 | # SPI RTC drivers | ||
732 | # | ||
733 | |||
734 | # | ||
735 | # Platform RTC drivers | ||
736 | # | ||
737 | # CONFIG_RTC_DRV_CMOS is not set | ||
738 | # CONFIG_RTC_DRV_DS1286 is not set | ||
739 | # CONFIG_RTC_DRV_DS1511 is not set | ||
740 | # CONFIG_RTC_DRV_DS1553 is not set | ||
741 | # CONFIG_RTC_DRV_DS1742 is not set | ||
742 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
743 | # CONFIG_RTC_DRV_M48T86 is not set | ||
744 | # CONFIG_RTC_DRV_M48T35 is not set | ||
745 | # CONFIG_RTC_DRV_M48T59 is not set | ||
746 | # CONFIG_RTC_DRV_BQ4802 is not set | ||
747 | # CONFIG_RTC_DRV_V3020 is not set | ||
748 | |||
749 | # | ||
750 | # on-CPU RTC drivers | ||
751 | # | ||
752 | CONFIG_RTC_DRV_GENERIC=y | ||
753 | # CONFIG_DMADEVICES is not set | ||
754 | # CONFIG_AUXDISPLAY is not set | ||
755 | # CONFIG_UIO is not set | ||
756 | |||
757 | # | ||
758 | # TI VLYNQ | ||
759 | # | ||
760 | # CONFIG_STAGING is not set | ||
761 | |||
762 | # | ||
763 | # File systems | ||
764 | # | ||
765 | CONFIG_EXT2_FS=y | ||
766 | # CONFIG_EXT2_FS_XATTR is not set | ||
767 | # CONFIG_EXT2_FS_XIP is not set | ||
768 | CONFIG_EXT3_FS=y | ||
769 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | ||
770 | # CONFIG_EXT3_FS_XATTR is not set | ||
771 | # CONFIG_EXT4_FS is not set | ||
772 | CONFIG_JBD=y | ||
773 | # CONFIG_JBD_DEBUG is not set | ||
774 | # CONFIG_REISERFS_FS is not set | ||
775 | # CONFIG_JFS_FS is not set | ||
776 | # CONFIG_FS_POSIX_ACL is not set | ||
777 | # CONFIG_XFS_FS is not set | ||
778 | # CONFIG_GFS2_FS is not set | ||
779 | # CONFIG_OCFS2_FS is not set | ||
780 | # CONFIG_BTRFS_FS is not set | ||
781 | # CONFIG_NILFS2_FS is not set | ||
782 | CONFIG_FILE_LOCKING=y | ||
783 | CONFIG_FSNOTIFY=y | ||
784 | CONFIG_DNOTIFY=y | ||
785 | CONFIG_INOTIFY=y | ||
786 | CONFIG_INOTIFY_USER=y | ||
787 | # CONFIG_QUOTA is not set | ||
788 | # CONFIG_AUTOFS_FS is not set | ||
789 | # CONFIG_AUTOFS4_FS is not set | ||
790 | # CONFIG_FUSE_FS is not set | ||
791 | |||
792 | # | ||
793 | # Caches | ||
794 | # | ||
795 | # CONFIG_FSCACHE is not set | ||
796 | |||
797 | # | ||
798 | # CD-ROM/DVD Filesystems | ||
799 | # | ||
800 | CONFIG_ISO9660_FS=y | ||
801 | CONFIG_JOLIET=y | ||
802 | # CONFIG_ZISOFS is not set | ||
803 | # CONFIG_UDF_FS is not set | ||
804 | |||
805 | # | ||
806 | # DOS/FAT/NT Filesystems | ||
807 | # | ||
808 | CONFIG_FAT_FS=y | ||
809 | CONFIG_MSDOS_FS=y | ||
810 | CONFIG_VFAT_FS=y | ||
811 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | ||
812 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | ||
813 | # CONFIG_NTFS_FS is not set | ||
814 | |||
815 | # | ||
816 | # Pseudo filesystems | ||
817 | # | ||
818 | CONFIG_PROC_FS=y | ||
819 | CONFIG_PROC_KCORE=y | ||
820 | CONFIG_PROC_SYSCTL=y | ||
821 | # CONFIG_PROC_PAGE_MONITOR is not set | ||
822 | CONFIG_SYSFS=y | ||
823 | CONFIG_TMPFS=y | ||
824 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
825 | # CONFIG_HUGETLB_PAGE is not set | ||
826 | # CONFIG_CONFIGFS_FS is not set | ||
827 | CONFIG_MISC_FILESYSTEMS=y | ||
828 | # CONFIG_ADFS_FS is not set | ||
829 | # CONFIG_AFFS_FS is not set | ||
830 | # CONFIG_HFS_FS is not set | ||
831 | # CONFIG_HFSPLUS_FS is not set | ||
832 | # CONFIG_BEFS_FS is not set | ||
833 | # CONFIG_BFS_FS is not set | ||
834 | # CONFIG_EFS_FS is not set | ||
835 | # CONFIG_CRAMFS is not set | ||
836 | # CONFIG_SQUASHFS is not set | ||
837 | # CONFIG_VXFS_FS is not set | ||
838 | # CONFIG_MINIX_FS is not set | ||
839 | # CONFIG_OMFS_FS is not set | ||
840 | # CONFIG_HPFS_FS is not set | ||
841 | # CONFIG_QNX4FS_FS is not set | ||
842 | # CONFIG_ROMFS_FS is not set | ||
843 | # CONFIG_SYSV_FS is not set | ||
844 | # CONFIG_UFS_FS is not set | ||
845 | CONFIG_NETWORK_FILESYSTEMS=y | ||
846 | CONFIG_NFS_FS=y | ||
847 | CONFIG_NFS_V3=y | ||
848 | # CONFIG_NFS_V3_ACL is not set | ||
849 | # CONFIG_NFS_V4 is not set | ||
850 | CONFIG_ROOT_NFS=y | ||
851 | # CONFIG_NFSD is not set | ||
852 | CONFIG_LOCKD=y | ||
853 | CONFIG_LOCKD_V4=y | ||
854 | CONFIG_NFS_COMMON=y | ||
855 | CONFIG_SUNRPC=y | ||
856 | # CONFIG_RPCSEC_GSS_KRB5 is not set | ||
857 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
858 | # CONFIG_SMB_FS is not set | ||
859 | CONFIG_CIFS=y | ||
860 | # CONFIG_CIFS_STATS is not set | ||
861 | # CONFIG_CIFS_WEAK_PW_HASH is not set | ||
862 | # CONFIG_CIFS_XATTR is not set | ||
863 | # CONFIG_CIFS_DEBUG2 is not set | ||
864 | # CONFIG_CIFS_EXPERIMENTAL is not set | ||
865 | # CONFIG_NCP_FS is not set | ||
866 | # CONFIG_CODA_FS is not set | ||
867 | # CONFIG_AFS_FS is not set | ||
868 | |||
869 | # | ||
870 | # Partition Types | ||
871 | # | ||
872 | # CONFIG_PARTITION_ADVANCED is not set | ||
873 | CONFIG_MSDOS_PARTITION=y | ||
874 | CONFIG_NLS=y | ||
875 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
876 | CONFIG_NLS_CODEPAGE_437=y | ||
877 | # CONFIG_NLS_CODEPAGE_737 is not set | ||
878 | # CONFIG_NLS_CODEPAGE_775 is not set | ||
879 | # CONFIG_NLS_CODEPAGE_850 is not set | ||
880 | # CONFIG_NLS_CODEPAGE_852 is not set | ||
881 | # CONFIG_NLS_CODEPAGE_855 is not set | ||
882 | # CONFIG_NLS_CODEPAGE_857 is not set | ||
883 | # CONFIG_NLS_CODEPAGE_860 is not set | ||
884 | # CONFIG_NLS_CODEPAGE_861 is not set | ||
885 | # CONFIG_NLS_CODEPAGE_862 is not set | ||
886 | # CONFIG_NLS_CODEPAGE_863 is not set | ||
887 | # CONFIG_NLS_CODEPAGE_864 is not set | ||
888 | # CONFIG_NLS_CODEPAGE_865 is not set | ||
889 | # CONFIG_NLS_CODEPAGE_866 is not set | ||
890 | # CONFIG_NLS_CODEPAGE_869 is not set | ||
891 | # CONFIG_NLS_CODEPAGE_936 is not set | ||
892 | # CONFIG_NLS_CODEPAGE_950 is not set | ||
893 | # CONFIG_NLS_CODEPAGE_932 is not set | ||
894 | # CONFIG_NLS_CODEPAGE_949 is not set | ||
895 | # CONFIG_NLS_CODEPAGE_874 is not set | ||
896 | # CONFIG_NLS_ISO8859_8 is not set | ||
897 | # CONFIG_NLS_CODEPAGE_1250 is not set | ||
898 | # CONFIG_NLS_CODEPAGE_1251 is not set | ||
899 | # CONFIG_NLS_ASCII is not set | ||
900 | CONFIG_NLS_ISO8859_1=y | ||
901 | # CONFIG_NLS_ISO8859_2 is not set | ||
902 | # CONFIG_NLS_ISO8859_3 is not set | ||
903 | # CONFIG_NLS_ISO8859_4 is not set | ||
904 | # CONFIG_NLS_ISO8859_5 is not set | ||
905 | # CONFIG_NLS_ISO8859_6 is not set | ||
906 | # CONFIG_NLS_ISO8859_7 is not set | ||
907 | # CONFIG_NLS_ISO8859_9 is not set | ||
908 | # CONFIG_NLS_ISO8859_13 is not set | ||
909 | # CONFIG_NLS_ISO8859_14 is not set | ||
910 | # CONFIG_NLS_ISO8859_15 is not set | ||
911 | # CONFIG_NLS_KOI8_R is not set | ||
912 | # CONFIG_NLS_KOI8_U is not set | ||
913 | # CONFIG_NLS_UTF8 is not set | ||
914 | # CONFIG_DLM is not set | ||
915 | CONFIG_BINARY_PRINTF=y | ||
916 | |||
917 | # | ||
918 | # Library routines | ||
919 | # | ||
920 | CONFIG_BITREVERSE=y | ||
921 | CONFIG_GENERIC_FIND_LAST_BIT=y | ||
922 | CONFIG_CRC_CCITT=y | ||
923 | # CONFIG_CRC16 is not set | ||
924 | # CONFIG_CRC_T10DIF is not set | ||
925 | # CONFIG_CRC_ITU_T is not set | ||
926 | CONFIG_CRC32=y | ||
927 | # CONFIG_CRC7 is not set | ||
928 | # CONFIG_LIBCRC32C is not set | ||
929 | CONFIG_ZLIB_INFLATE=y | ||
930 | CONFIG_DECOMPRESS_GZIP=y | ||
931 | CONFIG_HAS_IOMEM=y | ||
932 | CONFIG_HAS_IOPORT=y | ||
933 | CONFIG_HAS_DMA=y | ||
934 | CONFIG_HAVE_LMB=y | ||
935 | CONFIG_NLATTR=y | ||
936 | CONFIG_GENERIC_ATOMIC64=y | ||
937 | |||
938 | # | ||
939 | # Kernel hacking | ||
940 | # | ||
941 | CONFIG_PRINTK_TIME=y | ||
942 | CONFIG_ENABLE_WARN_DEPRECATED=y | ||
943 | CONFIG_ENABLE_MUST_CHECK=y | ||
944 | CONFIG_FRAME_WARN=1024 | ||
945 | # CONFIG_MAGIC_SYSRQ is not set | ||
946 | # CONFIG_STRIP_ASM_SYMS is not set | ||
947 | # CONFIG_UNUSED_SYMBOLS is not set | ||
948 | CONFIG_DEBUG_FS=y | ||
949 | # CONFIG_HEADERS_CHECK is not set | ||
950 | CONFIG_DEBUG_KERNEL=y | ||
951 | # CONFIG_DEBUG_SHIRQ is not set | ||
952 | CONFIG_DETECT_SOFTLOCKUP=y | ||
953 | # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set | ||
954 | CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 | ||
955 | # CONFIG_DETECT_HUNG_TASK is not set | ||
956 | CONFIG_SCHED_DEBUG=y | ||
957 | CONFIG_SCHEDSTATS=y | ||
958 | # CONFIG_TIMER_STATS is not set | ||
959 | # CONFIG_DEBUG_OBJECTS is not set | ||
960 | # CONFIG_DEBUG_SLAB is not set | ||
961 | # CONFIG_DEBUG_KMEMLEAK is not set | ||
962 | CONFIG_DEBUG_PREEMPT=y | ||
963 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
964 | # CONFIG_RT_MUTEX_TESTER is not set | ||
965 | CONFIG_DEBUG_SPINLOCK=y | ||
966 | CONFIG_DEBUG_MUTEXES=y | ||
967 | # CONFIG_DEBUG_LOCK_ALLOC is not set | ||
968 | # CONFIG_PROVE_LOCKING is not set | ||
969 | # CONFIG_LOCK_STAT is not set | ||
970 | CONFIG_DEBUG_SPINLOCK_SLEEP=y | ||
971 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
972 | CONFIG_STACKTRACE=y | ||
973 | # CONFIG_DEBUG_KOBJECT is not set | ||
974 | CONFIG_DEBUG_BUGVERBOSE=y | ||
975 | # CONFIG_DEBUG_INFO is not set | ||
976 | # CONFIG_DEBUG_VM is not set | ||
977 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
978 | # CONFIG_DEBUG_MEMORY_INIT is not set | ||
979 | # CONFIG_DEBUG_LIST is not set | ||
980 | # CONFIG_DEBUG_SG is not set | ||
981 | # CONFIG_DEBUG_NOTIFIERS is not set | ||
982 | # CONFIG_DEBUG_CREDENTIALS is not set | ||
983 | # CONFIG_RCU_TORTURE_TEST is not set | ||
984 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
985 | # CONFIG_BACKTRACE_SELF_TEST is not set | ||
986 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set | ||
987 | # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set | ||
988 | # CONFIG_FAULT_INJECTION is not set | ||
989 | CONFIG_LATENCYTOP=y | ||
990 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
991 | # CONFIG_DEBUG_PAGEALLOC is not set | ||
992 | CONFIG_NOP_TRACER=y | ||
993 | CONFIG_HAVE_FUNCTION_TRACER=y | ||
994 | CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y | ||
995 | CONFIG_HAVE_DYNAMIC_FTRACE=y | ||
996 | CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y | ||
997 | CONFIG_TRACER_MAX_TRACE=y | ||
998 | CONFIG_RING_BUFFER=y | ||
999 | CONFIG_EVENT_TRACING=y | ||
1000 | CONFIG_CONTEXT_SWITCH_TRACER=y | ||
1001 | CONFIG_TRACING=y | ||
1002 | CONFIG_GENERIC_TRACER=y | ||
1003 | CONFIG_TRACING_SUPPORT=y | ||
1004 | CONFIG_FTRACE=y | ||
1005 | # CONFIG_FUNCTION_TRACER is not set | ||
1006 | # CONFIG_IRQSOFF_TRACER is not set | ||
1007 | # CONFIG_PREEMPT_TRACER is not set | ||
1008 | CONFIG_SCHED_TRACER=y | ||
1009 | CONFIG_BOOT_TRACER=y | ||
1010 | CONFIG_BRANCH_PROFILE_NONE=y | ||
1011 | # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set | ||
1012 | # CONFIG_PROFILE_ALL_BRANCHES is not set | ||
1013 | # CONFIG_STACK_TRACER is not set | ||
1014 | # CONFIG_KMEMTRACE is not set | ||
1015 | # CONFIG_WORKQUEUE_TRACER is not set | ||
1016 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
1017 | # CONFIG_FTRACE_STARTUP_TEST is not set | ||
1018 | # CONFIG_RING_BUFFER_BENCHMARK is not set | ||
1019 | # CONFIG_DYNAMIC_DEBUG is not set | ||
1020 | CONFIG_DMA_API_DEBUG=y | ||
1021 | # CONFIG_SAMPLES is not set | ||
1022 | CONFIG_HAVE_ARCH_KGDB=y | ||
1023 | # CONFIG_KGDB is not set | ||
1024 | # CONFIG_PPC_DISABLE_WERROR is not set | ||
1025 | CONFIG_PPC_WERROR=y | ||
1026 | CONFIG_PRINT_STACK_DEPTH=64 | ||
1027 | # CONFIG_DEBUG_STACKOVERFLOW is not set | ||
1028 | # CONFIG_DEBUG_STACK_USAGE is not set | ||
1029 | # CONFIG_PPC_EMULATED_STATS is not set | ||
1030 | # CONFIG_CODE_PATCHING_SELFTEST is not set | ||
1031 | # CONFIG_FTR_FIXUP_SELFTEST is not set | ||
1032 | # CONFIG_MSI_BITMAP_SELFTEST is not set | ||
1033 | # CONFIG_XMON is not set | ||
1034 | # CONFIG_IRQSTACKS is not set | ||
1035 | # CONFIG_VIRQ_DEBUG is not set | ||
1036 | # CONFIG_BDI_SWITCH is not set | ||
1037 | # CONFIG_BOOTX_TEXT is not set | ||
1038 | CONFIG_PPC_EARLY_DEBUG=y | ||
1039 | # CONFIG_PPC_EARLY_DEBUG_LPAR is not set | ||
1040 | # CONFIG_PPC_EARLY_DEBUG_G5 is not set | ||
1041 | # CONFIG_PPC_EARLY_DEBUG_RTAS_PANEL is not set | ||
1042 | # CONFIG_PPC_EARLY_DEBUG_RTAS_CONSOLE is not set | ||
1043 | # CONFIG_PPC_EARLY_DEBUG_MAPLE is not set | ||
1044 | # CONFIG_PPC_EARLY_DEBUG_ISERIES is not set | ||
1045 | # CONFIG_PPC_EARLY_DEBUG_PAS_REALMODE is not set | ||
1046 | # CONFIG_PPC_EARLY_DEBUG_BEAT is not set | ||
1047 | # CONFIG_PPC_EARLY_DEBUG_44x is not set | ||
1048 | # CONFIG_PPC_EARLY_DEBUG_40x is not set | ||
1049 | # CONFIG_PPC_EARLY_DEBUG_CPM is not set | ||
1050 | CONFIG_PPC_EARLY_DEBUG_USBGECKO=y | ||
1051 | |||
1052 | # | ||
1053 | # Security options | ||
1054 | # | ||
1055 | # CONFIG_KEYS is not set | ||
1056 | # CONFIG_SECURITY is not set | ||
1057 | # CONFIG_SECURITYFS is not set | ||
1058 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | ||
1059 | # CONFIG_CRYPTO is not set | ||
1060 | # CONFIG_PPC_CLOCK is not set | ||
1061 | # CONFIG_VIRTUALIZATION is not set | ||
diff --git a/arch/powerpc/configs/iseries_defconfig b/arch/powerpc/configs/iseries_defconfig index f925c555508e..76982c51a4c7 100644 --- a/arch/powerpc/configs/iseries_defconfig +++ b/arch/powerpc/configs/iseries_defconfig | |||
@@ -714,8 +714,8 @@ CONFIG_NETDEV_10000=y | |||
714 | # CONFIG_BNX2X is not set | 714 | # CONFIG_BNX2X is not set |
715 | # CONFIG_QLGE is not set | 715 | # CONFIG_QLGE is not set |
716 | # CONFIG_SFC is not set | 716 | # CONFIG_SFC is not set |
717 | CONFIG_TR=y | 717 | # CONFIG_TR is not set |
718 | CONFIG_IBMOL=y | 718 | # CONFIG_IBMOL is not set |
719 | # CONFIG_3C359 is not set | 719 | # CONFIG_3C359 is not set |
720 | # CONFIG_TMS380TR is not set | 720 | # CONFIG_TMS380TR is not set |
721 | 721 | ||
diff --git a/arch/powerpc/configs/ppc64_defconfig b/arch/powerpc/configs/ppc64_defconfig index 252401824575..7b3804a6e363 100644 --- a/arch/powerpc/configs/ppc64_defconfig +++ b/arch/powerpc/configs/ppc64_defconfig | |||
@@ -304,11 +304,11 @@ CONFIG_TICK_ONESHOT=y | |||
304 | CONFIG_NO_HZ=y | 304 | CONFIG_NO_HZ=y |
305 | CONFIG_HIGH_RES_TIMERS=y | 305 | CONFIG_HIGH_RES_TIMERS=y |
306 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | 306 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y |
307 | # CONFIG_HZ_100 is not set | 307 | CONFIG_HZ_100=y |
308 | CONFIG_HZ_250=y | 308 | # CONFIG_HZ_250 is not set |
309 | # CONFIG_HZ_300 is not set | 309 | # CONFIG_HZ_300 is not set |
310 | # CONFIG_HZ_1000 is not set | 310 | # CONFIG_HZ_1000 is not set |
311 | CONFIG_HZ=250 | 311 | CONFIG_HZ=100 |
312 | CONFIG_SCHED_HRTICK=y | 312 | CONFIG_SCHED_HRTICK=y |
313 | CONFIG_PREEMPT_NONE=y | 313 | CONFIG_PREEMPT_NONE=y |
314 | # CONFIG_PREEMPT_VOLUNTARY is not set | 314 | # CONFIG_PREEMPT_VOLUNTARY is not set |
@@ -980,7 +980,7 @@ CONFIG_E100=y | |||
980 | # CONFIG_SC92031 is not set | 980 | # CONFIG_SC92031 is not set |
981 | # CONFIG_ATL2 is not set | 981 | # CONFIG_ATL2 is not set |
982 | CONFIG_NETDEV_1000=y | 982 | CONFIG_NETDEV_1000=y |
983 | CONFIG_ACENIC=y | 983 | CONFIG_ACENIC=m |
984 | CONFIG_ACENIC_OMIT_TIGON_I=y | 984 | CONFIG_ACENIC_OMIT_TIGON_I=y |
985 | # CONFIG_DL2K is not set | 985 | # CONFIG_DL2K is not set |
986 | CONFIG_E1000=y | 986 | CONFIG_E1000=y |
@@ -1023,8 +1023,8 @@ CONFIG_PASEMI_MAC=y | |||
1023 | # CONFIG_BNX2X is not set | 1023 | # CONFIG_BNX2X is not set |
1024 | # CONFIG_QLGE is not set | 1024 | # CONFIG_QLGE is not set |
1025 | # CONFIG_SFC is not set | 1025 | # CONFIG_SFC is not set |
1026 | CONFIG_TR=y | 1026 | # CONFIG_TR is not set |
1027 | CONFIG_IBMOL=y | 1027 | # CONFIG_IBMOL is not set |
1028 | # CONFIG_3C359 is not set | 1028 | # CONFIG_3C359 is not set |
1029 | # CONFIG_TMS380TR is not set | 1029 | # CONFIG_TMS380TR is not set |
1030 | 1030 | ||
@@ -1863,7 +1863,7 @@ CONFIG_HFSPLUS_FS=m | |||
1863 | # CONFIG_BEFS_FS is not set | 1863 | # CONFIG_BEFS_FS is not set |
1864 | # CONFIG_BFS_FS is not set | 1864 | # CONFIG_BFS_FS is not set |
1865 | # CONFIG_EFS_FS is not set | 1865 | # CONFIG_EFS_FS is not set |
1866 | CONFIG_CRAMFS=y | 1866 | CONFIG_CRAMFS=m |
1867 | # CONFIG_VXFS_FS is not set | 1867 | # CONFIG_VXFS_FS is not set |
1868 | # CONFIG_MINIX_FS is not set | 1868 | # CONFIG_MINIX_FS is not set |
1869 | # CONFIG_OMFS_FS is not set | 1869 | # CONFIG_OMFS_FS is not set |
diff --git a/arch/powerpc/configs/ppc64e_defconfig b/arch/powerpc/configs/ppc64e_defconfig index 18af46036258..8195f1650cbf 100644 --- a/arch/powerpc/configs/ppc64e_defconfig +++ b/arch/powerpc/configs/ppc64e_defconfig | |||
@@ -1008,8 +1008,8 @@ CONFIG_IXGB=m | |||
1008 | # CONFIG_QLGE is not set | 1008 | # CONFIG_QLGE is not set |
1009 | # CONFIG_SFC is not set | 1009 | # CONFIG_SFC is not set |
1010 | # CONFIG_BE2NET is not set | 1010 | # CONFIG_BE2NET is not set |
1011 | CONFIG_TR=y | 1011 | # CONFIG_TR is not set |
1012 | CONFIG_IBMOL=y | 1012 | # CONFIG_IBMOL is not set |
1013 | # CONFIG_3C359 is not set | 1013 | # CONFIG_3C359 is not set |
1014 | # CONFIG_TMS380TR is not set | 1014 | # CONFIG_TMS380TR is not set |
1015 | CONFIG_WLAN=y | 1015 | CONFIG_WLAN=y |
diff --git a/arch/powerpc/configs/pseries_defconfig b/arch/powerpc/configs/pseries_defconfig index c568329723b8..ca9ff9aad74a 100644 --- a/arch/powerpc/configs/pseries_defconfig +++ b/arch/powerpc/configs/pseries_defconfig | |||
@@ -230,11 +230,11 @@ CONFIG_TICK_ONESHOT=y | |||
230 | CONFIG_NO_HZ=y | 230 | CONFIG_NO_HZ=y |
231 | CONFIG_HIGH_RES_TIMERS=y | 231 | CONFIG_HIGH_RES_TIMERS=y |
232 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | 232 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y |
233 | # CONFIG_HZ_100 is not set | 233 | CONFIG_HZ_100=y |
234 | CONFIG_HZ_250=y | 234 | # CONFIG_HZ_250 is not set |
235 | # CONFIG_HZ_300 is not set | 235 | # CONFIG_HZ_300 is not set |
236 | # CONFIG_HZ_1000 is not set | 236 | # CONFIG_HZ_1000 is not set |
237 | CONFIG_HZ=250 | 237 | CONFIG_HZ=100 |
238 | CONFIG_SCHED_HRTICK=y | 238 | CONFIG_SCHED_HRTICK=y |
239 | CONFIG_PREEMPT_NONE=y | 239 | CONFIG_PREEMPT_NONE=y |
240 | # CONFIG_PREEMPT_VOLUNTARY is not set | 240 | # CONFIG_PREEMPT_VOLUNTARY is not set |
@@ -796,7 +796,7 @@ CONFIG_E100=y | |||
796 | # CONFIG_NET_POCKET is not set | 796 | # CONFIG_NET_POCKET is not set |
797 | # CONFIG_ATL2 is not set | 797 | # CONFIG_ATL2 is not set |
798 | CONFIG_NETDEV_1000=y | 798 | CONFIG_NETDEV_1000=y |
799 | CONFIG_ACENIC=y | 799 | CONFIG_ACENIC=m |
800 | CONFIG_ACENIC_OMIT_TIGON_I=y | 800 | CONFIG_ACENIC_OMIT_TIGON_I=y |
801 | # CONFIG_DL2K is not set | 801 | # CONFIG_DL2K is not set |
802 | CONFIG_E1000=y | 802 | CONFIG_E1000=y |
@@ -834,8 +834,8 @@ CONFIG_S2IO=m | |||
834 | # CONFIG_BNX2X is not set | 834 | # CONFIG_BNX2X is not set |
835 | # CONFIG_QLGE is not set | 835 | # CONFIG_QLGE is not set |
836 | # CONFIG_SFC is not set | 836 | # CONFIG_SFC is not set |
837 | CONFIG_TR=y | 837 | # CONFIG_TR is not set |
838 | CONFIG_IBMOL=y | 838 | # CONFIG_IBMOL is not set |
839 | # CONFIG_3C359 is not set | 839 | # CONFIG_3C359 is not set |
840 | # CONFIG_TMS380TR is not set | 840 | # CONFIG_TMS380TR is not set |
841 | 841 | ||
@@ -1494,7 +1494,7 @@ CONFIG_CONFIGFS_FS=m | |||
1494 | # CONFIG_BEFS_FS is not set | 1494 | # CONFIG_BEFS_FS is not set |
1495 | # CONFIG_BFS_FS is not set | 1495 | # CONFIG_BFS_FS is not set |
1496 | # CONFIG_EFS_FS is not set | 1496 | # CONFIG_EFS_FS is not set |
1497 | CONFIG_CRAMFS=y | 1497 | CONFIG_CRAMFS=m |
1498 | # CONFIG_VXFS_FS is not set | 1498 | # CONFIG_VXFS_FS is not set |
1499 | # CONFIG_MINIX_FS is not set | 1499 | # CONFIG_MINIX_FS is not set |
1500 | # CONFIG_OMFS_FS is not set | 1500 | # CONFIG_OMFS_FS is not set |
diff --git a/arch/powerpc/configs/wii_defconfig b/arch/powerpc/configs/wii_defconfig new file mode 100644 index 000000000000..c386828c639a --- /dev/null +++ b/arch/powerpc/configs/wii_defconfig | |||
@@ -0,0 +1,1406 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.32-rc8 | ||
4 | # Sun Nov 22 20:37:21 2009 | ||
5 | # | ||
6 | # CONFIG_PPC64 is not set | ||
7 | |||
8 | # | ||
9 | # Processor support | ||
10 | # | ||
11 | CONFIG_PPC_BOOK3S_32=y | ||
12 | # CONFIG_PPC_85xx is not set | ||
13 | # CONFIG_PPC_8xx is not set | ||
14 | # CONFIG_40x is not set | ||
15 | # CONFIG_44x is not set | ||
16 | # CONFIG_E200 is not set | ||
17 | CONFIG_PPC_BOOK3S=y | ||
18 | CONFIG_6xx=y | ||
19 | CONFIG_PPC_FPU=y | ||
20 | # CONFIG_ALTIVEC is not set | ||
21 | CONFIG_PPC_STD_MMU=y | ||
22 | CONFIG_PPC_STD_MMU_32=y | ||
23 | # CONFIG_PPC_MM_SLICES is not set | ||
24 | CONFIG_PPC_HAVE_PMU_SUPPORT=y | ||
25 | CONFIG_PPC_PERF_CTRS=y | ||
26 | # CONFIG_SMP is not set | ||
27 | CONFIG_NOT_COHERENT_CACHE=y | ||
28 | CONFIG_PPC32=y | ||
29 | CONFIG_WORD_SIZE=32 | ||
30 | # CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set | ||
31 | CONFIG_MMU=y | ||
32 | CONFIG_GENERIC_CMOS_UPDATE=y | ||
33 | CONFIG_GENERIC_TIME=y | ||
34 | CONFIG_GENERIC_TIME_VSYSCALL=y | ||
35 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
36 | CONFIG_GENERIC_HARDIRQS=y | ||
37 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y | ||
38 | # CONFIG_HAVE_SETUP_PER_CPU_AREA is not set | ||
39 | # CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set | ||
40 | CONFIG_IRQ_PER_CPU=y | ||
41 | CONFIG_STACKTRACE_SUPPORT=y | ||
42 | CONFIG_HAVE_LATENCYTOP_SUPPORT=y | ||
43 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
44 | CONFIG_LOCKDEP_SUPPORT=y | ||
45 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | ||
46 | CONFIG_ARCH_HAS_ILOG2_U32=y | ||
47 | CONFIG_GENERIC_HWEIGHT=y | ||
48 | CONFIG_GENERIC_FIND_NEXT_BIT=y | ||
49 | CONFIG_GENERIC_GPIO=y | ||
50 | # CONFIG_ARCH_NO_VIRT_TO_BUS is not set | ||
51 | CONFIG_PPC=y | ||
52 | CONFIG_EARLY_PRINTK=y | ||
53 | CONFIG_GENERIC_NVRAM=y | ||
54 | CONFIG_SCHED_OMIT_FRAME_POINTER=y | ||
55 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y | ||
56 | CONFIG_PPC_OF=y | ||
57 | CONFIG_OF=y | ||
58 | # CONFIG_PPC_UDBG_16550 is not set | ||
59 | # CONFIG_GENERIC_TBSYNC is not set | ||
60 | CONFIG_AUDIT_ARCH=y | ||
61 | CONFIG_GENERIC_BUG=y | ||
62 | CONFIG_DTC=y | ||
63 | # CONFIG_DEFAULT_UIMAGE is not set | ||
64 | # CONFIG_PPC_DCR_NATIVE is not set | ||
65 | # CONFIG_PPC_DCR_MMIO is not set | ||
66 | CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y | ||
67 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
68 | CONFIG_CONSTRUCTORS=y | ||
69 | |||
70 | # | ||
71 | # General setup | ||
72 | # | ||
73 | CONFIG_EXPERIMENTAL=y | ||
74 | CONFIG_BROKEN_ON_SMP=y | ||
75 | CONFIG_LOCK_KERNEL=y | ||
76 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
77 | CONFIG_LOCALVERSION="-wii" | ||
78 | # CONFIG_LOCALVERSION_AUTO is not set | ||
79 | CONFIG_SWAP=y | ||
80 | CONFIG_SYSVIPC=y | ||
81 | CONFIG_SYSVIPC_SYSCTL=y | ||
82 | # CONFIG_POSIX_MQUEUE is not set | ||
83 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
84 | # CONFIG_TASKSTATS is not set | ||
85 | # CONFIG_AUDIT is not set | ||
86 | |||
87 | # | ||
88 | # RCU Subsystem | ||
89 | # | ||
90 | CONFIG_TREE_RCU=y | ||
91 | # CONFIG_TREE_PREEMPT_RCU is not set | ||
92 | # CONFIG_RCU_TRACE is not set | ||
93 | CONFIG_RCU_FANOUT=32 | ||
94 | # CONFIG_RCU_FANOUT_EXACT is not set | ||
95 | # CONFIG_TREE_RCU_TRACE is not set | ||
96 | CONFIG_IKCONFIG=y | ||
97 | CONFIG_IKCONFIG_PROC=y | ||
98 | CONFIG_LOG_BUF_SHIFT=14 | ||
99 | CONFIG_GROUP_SCHED=y | ||
100 | CONFIG_FAIR_GROUP_SCHED=y | ||
101 | # CONFIG_RT_GROUP_SCHED is not set | ||
102 | CONFIG_USER_SCHED=y | ||
103 | # CONFIG_CGROUP_SCHED is not set | ||
104 | # CONFIG_CGROUPS is not set | ||
105 | CONFIG_SYSFS_DEPRECATED=y | ||
106 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
107 | CONFIG_RELAY=y | ||
108 | # CONFIG_NAMESPACES is not set | ||
109 | CONFIG_BLK_DEV_INITRD=y | ||
110 | CONFIG_INITRAMFS_SOURCE="" | ||
111 | CONFIG_RD_GZIP=y | ||
112 | # CONFIG_RD_BZIP2 is not set | ||
113 | # CONFIG_RD_LZMA is not set | ||
114 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
115 | CONFIG_SYSCTL=y | ||
116 | CONFIG_ANON_INODES=y | ||
117 | CONFIG_EMBEDDED=y | ||
118 | CONFIG_SYSCTL_SYSCALL=y | ||
119 | CONFIG_KALLSYMS=y | ||
120 | CONFIG_KALLSYMS_ALL=y | ||
121 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
122 | CONFIG_HOTPLUG=y | ||
123 | CONFIG_PRINTK=y | ||
124 | CONFIG_BUG=y | ||
125 | # CONFIG_ELF_CORE is not set | ||
126 | CONFIG_BASE_FULL=y | ||
127 | CONFIG_FUTEX=y | ||
128 | CONFIG_EPOLL=y | ||
129 | CONFIG_SIGNALFD=y | ||
130 | CONFIG_TIMERFD=y | ||
131 | CONFIG_EVENTFD=y | ||
132 | CONFIG_SHMEM=y | ||
133 | CONFIG_AIO=y | ||
134 | CONFIG_HAVE_PERF_EVENTS=y | ||
135 | |||
136 | # | ||
137 | # Kernel Performance Events And Counters | ||
138 | # | ||
139 | CONFIG_PERF_EVENTS=y | ||
140 | CONFIG_EVENT_PROFILE=y | ||
141 | CONFIG_PERF_COUNTERS=y | ||
142 | # CONFIG_DEBUG_PERF_USE_VMALLOC is not set | ||
143 | # CONFIG_VM_EVENT_COUNTERS is not set | ||
144 | CONFIG_COMPAT_BRK=y | ||
145 | CONFIG_SLAB=y | ||
146 | # CONFIG_SLUB is not set | ||
147 | # CONFIG_SLOB is not set | ||
148 | # CONFIG_PROFILING is not set | ||
149 | CONFIG_TRACEPOINTS=y | ||
150 | CONFIG_HAVE_OPROFILE=y | ||
151 | # CONFIG_KPROBES is not set | ||
152 | CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y | ||
153 | CONFIG_HAVE_IOREMAP_PROT=y | ||
154 | CONFIG_HAVE_KPROBES=y | ||
155 | CONFIG_HAVE_KRETPROBES=y | ||
156 | CONFIG_HAVE_ARCH_TRACEHOOK=y | ||
157 | CONFIG_HAVE_DMA_ATTRS=y | ||
158 | CONFIG_HAVE_DMA_API_DEBUG=y | ||
159 | |||
160 | # | ||
161 | # GCOV-based kernel profiling | ||
162 | # | ||
163 | # CONFIG_GCOV_KERNEL is not set | ||
164 | CONFIG_SLOW_WORK=y | ||
165 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | ||
166 | CONFIG_SLABINFO=y | ||
167 | CONFIG_RT_MUTEXES=y | ||
168 | CONFIG_BASE_SMALL=0 | ||
169 | CONFIG_MODULES=y | ||
170 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
171 | CONFIG_MODULE_UNLOAD=y | ||
172 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
173 | # CONFIG_MODVERSIONS is not set | ||
174 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
175 | CONFIG_BLOCK=y | ||
176 | CONFIG_LBDAF=y | ||
177 | CONFIG_BLK_DEV_BSG=y | ||
178 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
179 | |||
180 | # | ||
181 | # IO Schedulers | ||
182 | # | ||
183 | CONFIG_IOSCHED_NOOP=y | ||
184 | CONFIG_IOSCHED_AS=y | ||
185 | CONFIG_IOSCHED_DEADLINE=y | ||
186 | CONFIG_IOSCHED_CFQ=y | ||
187 | CONFIG_DEFAULT_AS=y | ||
188 | # CONFIG_DEFAULT_DEADLINE is not set | ||
189 | # CONFIG_DEFAULT_CFQ is not set | ||
190 | # CONFIG_DEFAULT_NOOP is not set | ||
191 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
192 | # CONFIG_FREEZER is not set | ||
193 | |||
194 | # | ||
195 | # Platform support | ||
196 | # | ||
197 | # CONFIG_PPC_CHRP is not set | ||
198 | # CONFIG_MPC5121_ADS is not set | ||
199 | # CONFIG_MPC5121_GENERIC is not set | ||
200 | # CONFIG_PPC_MPC52xx is not set | ||
201 | # CONFIG_PPC_PMAC is not set | ||
202 | # CONFIG_PPC_CELL is not set | ||
203 | # CONFIG_PPC_CELL_NATIVE is not set | ||
204 | # CONFIG_PPC_82xx is not set | ||
205 | # CONFIG_PQ2ADS is not set | ||
206 | # CONFIG_PPC_83xx is not set | ||
207 | # CONFIG_PPC_86xx is not set | ||
208 | CONFIG_EMBEDDED6xx=y | ||
209 | # CONFIG_LINKSTATION is not set | ||
210 | # CONFIG_STORCENTER is not set | ||
211 | # CONFIG_MPC7448HPC2 is not set | ||
212 | # CONFIG_PPC_HOLLY is not set | ||
213 | # CONFIG_PPC_PRPMC2800 is not set | ||
214 | # CONFIG_PPC_C2K is not set | ||
215 | CONFIG_GAMECUBE_COMMON=y | ||
216 | CONFIG_USBGECKO_UDBG=y | ||
217 | CONFIG_FLIPPER_PIC=y | ||
218 | # CONFIG_GAMECUBE is not set | ||
219 | CONFIG_HLWD_PIC=y | ||
220 | CONFIG_STARLET_MINI=y | ||
221 | CONFIG_WII=y | ||
222 | # CONFIG_AMIGAONE is not set | ||
223 | # CONFIG_PPC_OF_BOOT_TRAMPOLINE is not set | ||
224 | # CONFIG_IPIC is not set | ||
225 | # CONFIG_MPIC is not set | ||
226 | # CONFIG_MPIC_WEIRD is not set | ||
227 | # CONFIG_PPC_I8259 is not set | ||
228 | # CONFIG_PPC_RTAS is not set | ||
229 | # CONFIG_MMIO_NVRAM is not set | ||
230 | # CONFIG_PPC_MPC106 is not set | ||
231 | # CONFIG_PPC_970_NAP is not set | ||
232 | # CONFIG_PPC_INDIRECT_IO is not set | ||
233 | # CONFIG_GENERIC_IOMAP is not set | ||
234 | # CONFIG_CPU_FREQ is not set | ||
235 | # CONFIG_TAU is not set | ||
236 | # CONFIG_FSL_ULI1575 is not set | ||
237 | # CONFIG_SIMPLE_GPIO is not set | ||
238 | |||
239 | # | ||
240 | # Kernel options | ||
241 | # | ||
242 | # CONFIG_HIGHMEM is not set | ||
243 | # CONFIG_NO_HZ is not set | ||
244 | # CONFIG_HIGH_RES_TIMERS is not set | ||
245 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
246 | # CONFIG_HZ_100 is not set | ||
247 | CONFIG_HZ_250=y | ||
248 | # CONFIG_HZ_300 is not set | ||
249 | # CONFIG_HZ_1000 is not set | ||
250 | CONFIG_HZ=250 | ||
251 | # CONFIG_SCHED_HRTICK is not set | ||
252 | # CONFIG_PREEMPT_NONE is not set | ||
253 | # CONFIG_PREEMPT_VOLUNTARY is not set | ||
254 | CONFIG_PREEMPT=y | ||
255 | CONFIG_BINFMT_ELF=y | ||
256 | # CONFIG_HAVE_AOUT is not set | ||
257 | CONFIG_BINFMT_MISC=m | ||
258 | # CONFIG_IOMMU_HELPER is not set | ||
259 | # CONFIG_SWIOTLB is not set | ||
260 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | ||
261 | CONFIG_ARCH_HAS_WALK_MEMORY=y | ||
262 | CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y | ||
263 | CONFIG_KEXEC=y | ||
264 | # CONFIG_CRASH_DUMP is not set | ||
265 | CONFIG_MAX_ACTIVE_REGIONS=32 | ||
266 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
267 | CONFIG_ARCH_POPULATES_NODE_MAP=y | ||
268 | CONFIG_SELECT_MEMORY_MODEL=y | ||
269 | CONFIG_FLATMEM_MANUAL=y | ||
270 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
271 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
272 | CONFIG_FLATMEM=y | ||
273 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
274 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
275 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
276 | # CONFIG_MIGRATION is not set | ||
277 | # CONFIG_PHYS_ADDR_T_64BIT is not set | ||
278 | CONFIG_ZONE_DMA_FLAG=1 | ||
279 | CONFIG_BOUNCE=y | ||
280 | CONFIG_VIRT_TO_BUS=y | ||
281 | CONFIG_HAVE_MLOCK=y | ||
282 | CONFIG_HAVE_MLOCKED_PAGE_BIT=y | ||
283 | # CONFIG_KSM is not set | ||
284 | CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 | ||
285 | CONFIG_PPC_4K_PAGES=y | ||
286 | # CONFIG_PPC_16K_PAGES is not set | ||
287 | # CONFIG_PPC_64K_PAGES is not set | ||
288 | # CONFIG_PPC_256K_PAGES is not set | ||
289 | CONFIG_FORCE_MAX_ZONEORDER=11 | ||
290 | CONFIG_PROC_DEVICETREE=y | ||
291 | # CONFIG_CMDLINE_BOOL is not set | ||
292 | CONFIG_EXTRA_TARGETS="" | ||
293 | # CONFIG_PM is not set | ||
294 | # CONFIG_SECCOMP is not set | ||
295 | CONFIG_ISA_DMA_API=y | ||
296 | |||
297 | # | ||
298 | # Bus options | ||
299 | # | ||
300 | CONFIG_ZONE_DMA=y | ||
301 | CONFIG_GENERIC_ISA_DMA=y | ||
302 | # CONFIG_PCI is not set | ||
303 | # CONFIG_PCI_DOMAINS is not set | ||
304 | # CONFIG_PCI_SYSCALL is not set | ||
305 | # CONFIG_ARCH_SUPPORTS_MSI is not set | ||
306 | # CONFIG_PCCARD is not set | ||
307 | # CONFIG_HAS_RAPIDIO is not set | ||
308 | |||
309 | # | ||
310 | # Advanced setup | ||
311 | # | ||
312 | CONFIG_ADVANCED_OPTIONS=y | ||
313 | # CONFIG_LOWMEM_SIZE_BOOL is not set | ||
314 | CONFIG_LOWMEM_SIZE=0x30000000 | ||
315 | # CONFIG_PAGE_OFFSET_BOOL is not set | ||
316 | CONFIG_PAGE_OFFSET=0xc0000000 | ||
317 | # CONFIG_KERNEL_START_BOOL is not set | ||
318 | CONFIG_KERNEL_START=0xc0000000 | ||
319 | CONFIG_PHYSICAL_START=0x00000000 | ||
320 | # CONFIG_TASK_SIZE_BOOL is not set | ||
321 | CONFIG_TASK_SIZE=0xc0000000 | ||
322 | # CONFIG_CONSISTENT_SIZE_BOOL is not set | ||
323 | CONFIG_CONSISTENT_SIZE=0x00200000 | ||
324 | CONFIG_NET=y | ||
325 | |||
326 | # | ||
327 | # Networking options | ||
328 | # | ||
329 | CONFIG_PACKET=y | ||
330 | # CONFIG_PACKET_MMAP is not set | ||
331 | CONFIG_UNIX=y | ||
332 | # CONFIG_NET_KEY is not set | ||
333 | CONFIG_INET=y | ||
334 | # CONFIG_IP_MULTICAST is not set | ||
335 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
336 | CONFIG_IP_FIB_HASH=y | ||
337 | CONFIG_IP_PNP=y | ||
338 | CONFIG_IP_PNP_DHCP=y | ||
339 | # CONFIG_IP_PNP_BOOTP is not set | ||
340 | CONFIG_IP_PNP_RARP=y | ||
341 | # CONFIG_NET_IPIP is not set | ||
342 | # CONFIG_NET_IPGRE is not set | ||
343 | # CONFIG_ARPD is not set | ||
344 | # CONFIG_SYN_COOKIES is not set | ||
345 | # CONFIG_INET_AH is not set | ||
346 | # CONFIG_INET_ESP is not set | ||
347 | # CONFIG_INET_IPCOMP is not set | ||
348 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
349 | # CONFIG_INET_TUNNEL is not set | ||
350 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | ||
351 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | ||
352 | # CONFIG_INET_XFRM_MODE_BEET is not set | ||
353 | # CONFIG_INET_LRO is not set | ||
354 | # CONFIG_INET_DIAG is not set | ||
355 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
356 | CONFIG_TCP_CONG_CUBIC=y | ||
357 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
358 | # CONFIG_TCP_MD5SIG is not set | ||
359 | # CONFIG_IPV6 is not set | ||
360 | # CONFIG_NETWORK_SECMARK is not set | ||
361 | # CONFIG_NETFILTER is not set | ||
362 | # CONFIG_IP_DCCP is not set | ||
363 | # CONFIG_IP_SCTP is not set | ||
364 | # CONFIG_RDS is not set | ||
365 | # CONFIG_TIPC is not set | ||
366 | # CONFIG_ATM is not set | ||
367 | # CONFIG_BRIDGE is not set | ||
368 | # CONFIG_NET_DSA is not set | ||
369 | # CONFIG_VLAN_8021Q is not set | ||
370 | # CONFIG_DECNET is not set | ||
371 | # CONFIG_LLC2 is not set | ||
372 | # CONFIG_IPX is not set | ||
373 | # CONFIG_ATALK is not set | ||
374 | # CONFIG_X25 is not set | ||
375 | # CONFIG_LAPB is not set | ||
376 | # CONFIG_ECONET is not set | ||
377 | # CONFIG_WAN_ROUTER is not set | ||
378 | # CONFIG_PHONET is not set | ||
379 | # CONFIG_IEEE802154 is not set | ||
380 | # CONFIG_NET_SCHED is not set | ||
381 | # CONFIG_DCB is not set | ||
382 | |||
383 | # | ||
384 | # Network testing | ||
385 | # | ||
386 | # CONFIG_NET_PKTGEN is not set | ||
387 | # CONFIG_NET_DROP_MONITOR is not set | ||
388 | # CONFIG_HAMRADIO is not set | ||
389 | # CONFIG_CAN is not set | ||
390 | # CONFIG_IRDA is not set | ||
391 | CONFIG_BT=y | ||
392 | CONFIG_BT_L2CAP=y | ||
393 | # CONFIG_BT_SCO is not set | ||
394 | CONFIG_BT_RFCOMM=y | ||
395 | # CONFIG_BT_RFCOMM_TTY is not set | ||
396 | CONFIG_BT_BNEP=y | ||
397 | CONFIG_BT_BNEP_MC_FILTER=y | ||
398 | # CONFIG_BT_BNEP_PROTO_FILTER is not set | ||
399 | CONFIG_BT_HIDP=y | ||
400 | |||
401 | # | ||
402 | # Bluetooth device drivers | ||
403 | # | ||
404 | # CONFIG_BT_HCIBTSDIO is not set | ||
405 | # CONFIG_BT_HCIUART is not set | ||
406 | # CONFIG_BT_HCIVHCI is not set | ||
407 | # CONFIG_BT_MRVL is not set | ||
408 | # CONFIG_AF_RXRPC is not set | ||
409 | CONFIG_WIRELESS=y | ||
410 | CONFIG_CFG80211=y | ||
411 | # CONFIG_NL80211_TESTMODE is not set | ||
412 | # CONFIG_CFG80211_DEVELOPER_WARNINGS is not set | ||
413 | # CONFIG_CFG80211_REG_DEBUG is not set | ||
414 | CONFIG_CFG80211_DEFAULT_PS=y | ||
415 | CONFIG_CFG80211_DEFAULT_PS_VALUE=1 | ||
416 | # CONFIG_CFG80211_DEBUGFS is not set | ||
417 | CONFIG_WIRELESS_OLD_REGULATORY=y | ||
418 | CONFIG_WIRELESS_EXT=y | ||
419 | CONFIG_WIRELESS_EXT_SYSFS=y | ||
420 | # CONFIG_LIB80211 is not set | ||
421 | CONFIG_MAC80211=y | ||
422 | # CONFIG_MAC80211_RC_PID is not set | ||
423 | CONFIG_MAC80211_RC_MINSTREL=y | ||
424 | # CONFIG_MAC80211_RC_DEFAULT_PID is not set | ||
425 | CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y | ||
426 | CONFIG_MAC80211_RC_DEFAULT="minstrel" | ||
427 | # CONFIG_MAC80211_MESH is not set | ||
428 | # CONFIG_MAC80211_LEDS is not set | ||
429 | # CONFIG_MAC80211_DEBUGFS is not set | ||
430 | # CONFIG_MAC80211_DEBUG_MENU is not set | ||
431 | # CONFIG_WIMAX is not set | ||
432 | # CONFIG_RFKILL is not set | ||
433 | # CONFIG_NET_9P is not set | ||
434 | |||
435 | # | ||
436 | # Device Drivers | ||
437 | # | ||
438 | |||
439 | # | ||
440 | # Generic Driver Options | ||
441 | # | ||
442 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
443 | # CONFIG_DEVTMPFS is not set | ||
444 | # CONFIG_STANDALONE is not set | ||
445 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
446 | CONFIG_FW_LOADER=y | ||
447 | # CONFIG_FIRMWARE_IN_KERNEL is not set | ||
448 | CONFIG_EXTRA_FIRMWARE="" | ||
449 | # CONFIG_DEBUG_DRIVER is not set | ||
450 | # CONFIG_DEBUG_DEVRES is not set | ||
451 | # CONFIG_SYS_HYPERVISOR is not set | ||
452 | # CONFIG_CONNECTOR is not set | ||
453 | # CONFIG_MTD is not set | ||
454 | CONFIG_OF_DEVICE=y | ||
455 | CONFIG_OF_GPIO=y | ||
456 | CONFIG_OF_I2C=y | ||
457 | # CONFIG_PARPORT is not set | ||
458 | CONFIG_BLK_DEV=y | ||
459 | # CONFIG_BLK_DEV_FD is not set | ||
460 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
461 | CONFIG_BLK_DEV_LOOP=y | ||
462 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | ||
463 | # CONFIG_BLK_DEV_NBD is not set | ||
464 | CONFIG_BLK_DEV_RAM=y | ||
465 | CONFIG_BLK_DEV_RAM_COUNT=2 | ||
466 | CONFIG_BLK_DEV_RAM_SIZE=4096 | ||
467 | # CONFIG_BLK_DEV_XIP is not set | ||
468 | # CONFIG_CDROM_PKTCDVD is not set | ||
469 | # CONFIG_ATA_OVER_ETH is not set | ||
470 | # CONFIG_BLK_DEV_HD is not set | ||
471 | CONFIG_MISC_DEVICES=y | ||
472 | # CONFIG_ICS932S401 is not set | ||
473 | # CONFIG_ENCLOSURE_SERVICES is not set | ||
474 | # CONFIG_ISL29003 is not set | ||
475 | # CONFIG_C2PORT is not set | ||
476 | |||
477 | # | ||
478 | # EEPROM support | ||
479 | # | ||
480 | # CONFIG_EEPROM_AT24 is not set | ||
481 | # CONFIG_EEPROM_LEGACY is not set | ||
482 | # CONFIG_EEPROM_MAX6875 is not set | ||
483 | # CONFIG_EEPROM_93CX6 is not set | ||
484 | CONFIG_HAVE_IDE=y | ||
485 | # CONFIG_IDE is not set | ||
486 | |||
487 | # | ||
488 | # SCSI device support | ||
489 | # | ||
490 | # CONFIG_RAID_ATTRS is not set | ||
491 | CONFIG_SCSI=y | ||
492 | CONFIG_SCSI_DMA=y | ||
493 | # CONFIG_SCSI_TGT is not set | ||
494 | # CONFIG_SCSI_NETLINK is not set | ||
495 | CONFIG_SCSI_PROC_FS=y | ||
496 | |||
497 | # | ||
498 | # SCSI support type (disk, tape, CD-ROM) | ||
499 | # | ||
500 | CONFIG_BLK_DEV_SD=y | ||
501 | # CONFIG_CHR_DEV_ST is not set | ||
502 | # CONFIG_CHR_DEV_OSST is not set | ||
503 | # CONFIG_BLK_DEV_SR is not set | ||
504 | # CONFIG_CHR_DEV_SG is not set | ||
505 | # CONFIG_CHR_DEV_SCH is not set | ||
506 | CONFIG_SCSI_MULTI_LUN=y | ||
507 | # CONFIG_SCSI_CONSTANTS is not set | ||
508 | # CONFIG_SCSI_LOGGING is not set | ||
509 | # CONFIG_SCSI_SCAN_ASYNC is not set | ||
510 | CONFIG_SCSI_WAIT_SCAN=m | ||
511 | |||
512 | # | ||
513 | # SCSI Transports | ||
514 | # | ||
515 | # CONFIG_SCSI_SPI_ATTRS is not set | ||
516 | # CONFIG_SCSI_FC_ATTRS is not set | ||
517 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
518 | # CONFIG_SCSI_SAS_ATTRS is not set | ||
519 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
520 | # CONFIG_SCSI_SRP_ATTRS is not set | ||
521 | CONFIG_SCSI_LOWLEVEL=y | ||
522 | # CONFIG_ISCSI_TCP is not set | ||
523 | # CONFIG_LIBFC is not set | ||
524 | # CONFIG_LIBFCOE is not set | ||
525 | # CONFIG_SCSI_DEBUG is not set | ||
526 | # CONFIG_SCSI_DH is not set | ||
527 | # CONFIG_SCSI_OSD_INITIATOR is not set | ||
528 | # CONFIG_ATA is not set | ||
529 | # CONFIG_MD is not set | ||
530 | # CONFIG_MACINTOSH_DRIVERS is not set | ||
531 | CONFIG_NETDEVICES=y | ||
532 | # CONFIG_DUMMY is not set | ||
533 | # CONFIG_BONDING is not set | ||
534 | # CONFIG_MACVLAN is not set | ||
535 | # CONFIG_EQUALIZER is not set | ||
536 | # CONFIG_TUN is not set | ||
537 | # CONFIG_VETH is not set | ||
538 | # CONFIG_PHYLIB is not set | ||
539 | CONFIG_NET_ETHERNET=y | ||
540 | CONFIG_MII=y | ||
541 | # CONFIG_ETHOC is not set | ||
542 | # CONFIG_DNET is not set | ||
543 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | ||
544 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | ||
545 | # CONFIG_IBM_NEW_EMAC_TAH is not set | ||
546 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | ||
547 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | ||
548 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | ||
549 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | ||
550 | # CONFIG_B44 is not set | ||
551 | # CONFIG_KS8842 is not set | ||
552 | # CONFIG_KS8851_MLL is not set | ||
553 | # CONFIG_XILINX_EMACLITE is not set | ||
554 | # CONFIG_NETDEV_1000 is not set | ||
555 | # CONFIG_NETDEV_10000 is not set | ||
556 | CONFIG_WLAN=y | ||
557 | # CONFIG_WLAN_PRE80211 is not set | ||
558 | CONFIG_WLAN_80211=y | ||
559 | # CONFIG_LIBERTAS is not set | ||
560 | # CONFIG_LIBERTAS_THINFIRM is not set | ||
561 | # CONFIG_MAC80211_HWSIM is not set | ||
562 | # CONFIG_P54_COMMON is not set | ||
563 | # CONFIG_ATH_COMMON is not set | ||
564 | # CONFIG_HOSTAP is not set | ||
565 | CONFIG_B43=y | ||
566 | CONFIG_B43_SDIO=y | ||
567 | CONFIG_B43_PIO=y | ||
568 | # CONFIG_B43_PHY_LP is not set | ||
569 | CONFIG_B43_DEBUG=y | ||
570 | # CONFIG_B43_FORCE_PIO is not set | ||
571 | # CONFIG_B43LEGACY is not set | ||
572 | # CONFIG_RT2X00 is not set | ||
573 | # CONFIG_WL12XX is not set | ||
574 | # CONFIG_IWM is not set | ||
575 | |||
576 | # | ||
577 | # Enable WiMAX (Networking options) to see the WiMAX drivers | ||
578 | # | ||
579 | # CONFIG_WAN is not set | ||
580 | # CONFIG_PPP is not set | ||
581 | # CONFIG_SLIP is not set | ||
582 | # CONFIG_NETCONSOLE is not set | ||
583 | # CONFIG_NETPOLL is not set | ||
584 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
585 | # CONFIG_ISDN is not set | ||
586 | # CONFIG_PHONE is not set | ||
587 | |||
588 | # | ||
589 | # Input device support | ||
590 | # | ||
591 | CONFIG_INPUT=y | ||
592 | CONFIG_INPUT_FF_MEMLESS=m | ||
593 | # CONFIG_INPUT_POLLDEV is not set | ||
594 | |||
595 | # | ||
596 | # Userland interfaces | ||
597 | # | ||
598 | CONFIG_INPUT_MOUSEDEV=y | ||
599 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
600 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=640 | ||
601 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480 | ||
602 | CONFIG_INPUT_JOYDEV=y | ||
603 | CONFIG_INPUT_EVDEV=y | ||
604 | # CONFIG_INPUT_EVBUG is not set | ||
605 | |||
606 | # | ||
607 | # Input Device Drivers | ||
608 | # | ||
609 | CONFIG_INPUT_KEYBOARD=y | ||
610 | # CONFIG_KEYBOARD_ADP5588 is not set | ||
611 | # CONFIG_KEYBOARD_ATKBD is not set | ||
612 | # CONFIG_QT2160 is not set | ||
613 | # CONFIG_KEYBOARD_LKKBD is not set | ||
614 | # CONFIG_KEYBOARD_GPIO is not set | ||
615 | # CONFIG_KEYBOARD_MATRIX is not set | ||
616 | # CONFIG_KEYBOARD_MAX7359 is not set | ||
617 | # CONFIG_KEYBOARD_NEWTON is not set | ||
618 | # CONFIG_KEYBOARD_OPENCORES is not set | ||
619 | # CONFIG_KEYBOARD_STOWAWAY is not set | ||
620 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
621 | # CONFIG_KEYBOARD_XTKBD is not set | ||
622 | CONFIG_INPUT_MOUSE=y | ||
623 | # CONFIG_MOUSE_PS2 is not set | ||
624 | # CONFIG_MOUSE_SERIAL is not set | ||
625 | # CONFIG_MOUSE_VSXXXAA is not set | ||
626 | # CONFIG_MOUSE_GPIO is not set | ||
627 | # CONFIG_MOUSE_SYNAPTICS_I2C is not set | ||
628 | CONFIG_INPUT_JOYSTICK=y | ||
629 | # CONFIG_JOYSTICK_ANALOG is not set | ||
630 | # CONFIG_JOYSTICK_A3D is not set | ||
631 | # CONFIG_JOYSTICK_ADI is not set | ||
632 | # CONFIG_JOYSTICK_COBRA is not set | ||
633 | # CONFIG_JOYSTICK_GF2K is not set | ||
634 | # CONFIG_JOYSTICK_GRIP is not set | ||
635 | # CONFIG_JOYSTICK_GRIP_MP is not set | ||
636 | # CONFIG_JOYSTICK_GUILLEMOT is not set | ||
637 | # CONFIG_JOYSTICK_INTERACT is not set | ||
638 | # CONFIG_JOYSTICK_SIDEWINDER is not set | ||
639 | # CONFIG_JOYSTICK_TMDC is not set | ||
640 | # CONFIG_JOYSTICK_IFORCE is not set | ||
641 | # CONFIG_JOYSTICK_WARRIOR is not set | ||
642 | # CONFIG_JOYSTICK_MAGELLAN is not set | ||
643 | # CONFIG_JOYSTICK_SPACEORB is not set | ||
644 | # CONFIG_JOYSTICK_SPACEBALL is not set | ||
645 | # CONFIG_JOYSTICK_STINGER is not set | ||
646 | # CONFIG_JOYSTICK_TWIDJOY is not set | ||
647 | # CONFIG_JOYSTICK_ZHENHUA is not set | ||
648 | # CONFIG_JOYSTICK_JOYDUMP is not set | ||
649 | # CONFIG_INPUT_TABLET is not set | ||
650 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
651 | CONFIG_INPUT_MISC=y | ||
652 | CONFIG_INPUT_UINPUT=y | ||
653 | # CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set | ||
654 | |||
655 | # | ||
656 | # Hardware I/O ports | ||
657 | # | ||
658 | CONFIG_SERIO=y | ||
659 | # CONFIG_SERIO_I8042 is not set | ||
660 | # CONFIG_SERIO_SERPORT is not set | ||
661 | # CONFIG_SERIO_LIBPS2 is not set | ||
662 | # CONFIG_SERIO_RAW is not set | ||
663 | # CONFIG_SERIO_XILINX_XPS_PS2 is not set | ||
664 | # CONFIG_GAMEPORT is not set | ||
665 | |||
666 | # | ||
667 | # Character devices | ||
668 | # | ||
669 | CONFIG_VT=y | ||
670 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
671 | CONFIG_VT_CONSOLE=y | ||
672 | CONFIG_HW_CONSOLE=y | ||
673 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||
674 | # CONFIG_DEVKMEM is not set | ||
675 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
676 | |||
677 | # | ||
678 | # Serial drivers | ||
679 | # | ||
680 | # CONFIG_SERIAL_8250 is not set | ||
681 | |||
682 | # | ||
683 | # Non-8250 serial port support | ||
684 | # | ||
685 | # CONFIG_SERIAL_UARTLITE is not set | ||
686 | CONFIG_UNIX98_PTYS=y | ||
687 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set | ||
688 | CONFIG_LEGACY_PTYS=y | ||
689 | CONFIG_LEGACY_PTY_COUNT=64 | ||
690 | # CONFIG_HVC_UDBG is not set | ||
691 | # CONFIG_IPMI_HANDLER is not set | ||
692 | # CONFIG_HW_RANDOM is not set | ||
693 | CONFIG_NVRAM=y | ||
694 | # CONFIG_R3964 is not set | ||
695 | # CONFIG_RAW_DRIVER is not set | ||
696 | # CONFIG_TCG_TPM is not set | ||
697 | CONFIG_I2C=y | ||
698 | CONFIG_I2C_BOARDINFO=y | ||
699 | CONFIG_I2C_COMPAT=y | ||
700 | CONFIG_I2C_CHARDEV=y | ||
701 | CONFIG_I2C_HELPER_AUTO=y | ||
702 | CONFIG_I2C_ALGOBIT=y | ||
703 | |||
704 | # | ||
705 | # I2C Hardware Bus support | ||
706 | # | ||
707 | |||
708 | # | ||
709 | # I2C system bus drivers (mostly embedded / system-on-chip) | ||
710 | # | ||
711 | CONFIG_I2C_GPIO=y | ||
712 | # CONFIG_I2C_MPC is not set | ||
713 | # CONFIG_I2C_OCORES is not set | ||
714 | # CONFIG_I2C_SIMTEC is not set | ||
715 | |||
716 | # | ||
717 | # External I2C/SMBus adapter drivers | ||
718 | # | ||
719 | # CONFIG_I2C_PARPORT_LIGHT is not set | ||
720 | # CONFIG_I2C_TAOS_EVM is not set | ||
721 | |||
722 | # | ||
723 | # Other I2C/SMBus bus drivers | ||
724 | # | ||
725 | # CONFIG_I2C_PCA_PLATFORM is not set | ||
726 | # CONFIG_I2C_STUB is not set | ||
727 | |||
728 | # | ||
729 | # Miscellaneous I2C Chip support | ||
730 | # | ||
731 | # CONFIG_DS1682 is not set | ||
732 | # CONFIG_SENSORS_TSL2550 is not set | ||
733 | # CONFIG_I2C_DEBUG_CORE is not set | ||
734 | # CONFIG_I2C_DEBUG_ALGO is not set | ||
735 | # CONFIG_I2C_DEBUG_BUS is not set | ||
736 | # CONFIG_I2C_DEBUG_CHIP is not set | ||
737 | # CONFIG_SPI is not set | ||
738 | |||
739 | # | ||
740 | # PPS support | ||
741 | # | ||
742 | # CONFIG_PPS is not set | ||
743 | CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y | ||
744 | CONFIG_GPIOLIB=y | ||
745 | # CONFIG_DEBUG_GPIO is not set | ||
746 | CONFIG_GPIO_SYSFS=y | ||
747 | |||
748 | # | ||
749 | # Memory mapped GPIO expanders: | ||
750 | # | ||
751 | # CONFIG_GPIO_XILINX is not set | ||
752 | |||
753 | # | ||
754 | # I2C GPIO expanders: | ||
755 | # | ||
756 | # CONFIG_GPIO_MAX732X is not set | ||
757 | # CONFIG_GPIO_PCA953X is not set | ||
758 | # CONFIG_GPIO_PCF857X is not set | ||
759 | |||
760 | # | ||
761 | # PCI GPIO expanders: | ||
762 | # | ||
763 | |||
764 | # | ||
765 | # SPI GPIO expanders: | ||
766 | # | ||
767 | |||
768 | # | ||
769 | # AC97 GPIO expanders: | ||
770 | # | ||
771 | # CONFIG_W1 is not set | ||
772 | # CONFIG_POWER_SUPPLY is not set | ||
773 | # CONFIG_HWMON is not set | ||
774 | # CONFIG_THERMAL is not set | ||
775 | # CONFIG_WATCHDOG is not set | ||
776 | CONFIG_SSB_POSSIBLE=y | ||
777 | |||
778 | # | ||
779 | # Sonics Silicon Backplane | ||
780 | # | ||
781 | CONFIG_SSB=y | ||
782 | CONFIG_SSB_BLOCKIO=y | ||
783 | CONFIG_SSB_SDIOHOST_POSSIBLE=y | ||
784 | CONFIG_SSB_SDIOHOST=y | ||
785 | # CONFIG_SSB_SILENT is not set | ||
786 | CONFIG_SSB_DEBUG=y | ||
787 | |||
788 | # | ||
789 | # Multifunction device drivers | ||
790 | # | ||
791 | # CONFIG_MFD_CORE is not set | ||
792 | # CONFIG_MFD_SM501 is not set | ||
793 | # CONFIG_HTC_PASIC3 is not set | ||
794 | # CONFIG_TPS65010 is not set | ||
795 | # CONFIG_TWL4030_CORE is not set | ||
796 | # CONFIG_MFD_TMIO is not set | ||
797 | # CONFIG_PMIC_DA903X is not set | ||
798 | # CONFIG_MFD_WM8400 is not set | ||
799 | # CONFIG_MFD_WM831X is not set | ||
800 | # CONFIG_MFD_WM8350_I2C is not set | ||
801 | # CONFIG_MFD_PCF50633 is not set | ||
802 | # CONFIG_AB3100_CORE is not set | ||
803 | # CONFIG_REGULATOR is not set | ||
804 | # CONFIG_MEDIA_SUPPORT is not set | ||
805 | |||
806 | # | ||
807 | # Graphics support | ||
808 | # | ||
809 | # CONFIG_VGASTATE is not set | ||
810 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | ||
811 | CONFIG_FB=y | ||
812 | # CONFIG_FIRMWARE_EDID is not set | ||
813 | # CONFIG_FB_DDC is not set | ||
814 | # CONFIG_FB_BOOT_VESA_SUPPORT is not set | ||
815 | # CONFIG_FB_CFB_FILLRECT is not set | ||
816 | # CONFIG_FB_CFB_COPYAREA is not set | ||
817 | # CONFIG_FB_CFB_IMAGEBLIT is not set | ||
818 | # CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set | ||
819 | # CONFIG_FB_SYS_FILLRECT is not set | ||
820 | # CONFIG_FB_SYS_COPYAREA is not set | ||
821 | # CONFIG_FB_SYS_IMAGEBLIT is not set | ||
822 | # CONFIG_FB_FOREIGN_ENDIAN is not set | ||
823 | # CONFIG_FB_SYS_FOPS is not set | ||
824 | # CONFIG_FB_SVGALIB is not set | ||
825 | # CONFIG_FB_MACMODES is not set | ||
826 | # CONFIG_FB_BACKLIGHT is not set | ||
827 | # CONFIG_FB_MODE_HELPERS is not set | ||
828 | # CONFIG_FB_TILEBLITTING is not set | ||
829 | |||
830 | # | ||
831 | # Frame buffer hardware drivers | ||
832 | # | ||
833 | # CONFIG_FB_OF is not set | ||
834 | # CONFIG_FB_VGA16 is not set | ||
835 | # CONFIG_FB_S1D13XXX is not set | ||
836 | # CONFIG_FB_IBM_GXT4500 is not set | ||
837 | # CONFIG_FB_VIRTUAL is not set | ||
838 | # CONFIG_FB_METRONOME is not set | ||
839 | # CONFIG_FB_MB862XX is not set | ||
840 | # CONFIG_FB_BROADSHEET is not set | ||
841 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
842 | |||
843 | # | ||
844 | # Display device support | ||
845 | # | ||
846 | # CONFIG_DISPLAY_SUPPORT is not set | ||
847 | |||
848 | # | ||
849 | # Console display driver support | ||
850 | # | ||
851 | # CONFIG_VGA_CONSOLE is not set | ||
852 | CONFIG_DUMMY_CONSOLE=y | ||
853 | CONFIG_FRAMEBUFFER_CONSOLE=y | ||
854 | # CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set | ||
855 | # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set | ||
856 | # CONFIG_FONTS is not set | ||
857 | CONFIG_FONT_8x8=y | ||
858 | CONFIG_FONT_8x16=y | ||
859 | # CONFIG_LOGO is not set | ||
860 | CONFIG_SOUND=y | ||
861 | CONFIG_SOUND_OSS_CORE=y | ||
862 | CONFIG_SOUND_OSS_CORE_PRECLAIM=y | ||
863 | CONFIG_SND=y | ||
864 | CONFIG_SND_TIMER=y | ||
865 | CONFIG_SND_PCM=y | ||
866 | CONFIG_SND_SEQUENCER=y | ||
867 | # CONFIG_SND_SEQ_DUMMY is not set | ||
868 | CONFIG_SND_OSSEMUL=y | ||
869 | CONFIG_SND_MIXER_OSS=y | ||
870 | CONFIG_SND_PCM_OSS=y | ||
871 | CONFIG_SND_PCM_OSS_PLUGINS=y | ||
872 | CONFIG_SND_SEQUENCER_OSS=y | ||
873 | # CONFIG_SND_DYNAMIC_MINORS is not set | ||
874 | CONFIG_SND_SUPPORT_OLD_API=y | ||
875 | # CONFIG_SND_VERBOSE_PROCFS is not set | ||
876 | # CONFIG_SND_VERBOSE_PRINTK is not set | ||
877 | # CONFIG_SND_DEBUG is not set | ||
878 | # CONFIG_SND_RAWMIDI_SEQ is not set | ||
879 | # CONFIG_SND_OPL3_LIB_SEQ is not set | ||
880 | # CONFIG_SND_OPL4_LIB_SEQ is not set | ||
881 | # CONFIG_SND_SBAWE_SEQ is not set | ||
882 | # CONFIG_SND_EMU10K1_SEQ is not set | ||
883 | CONFIG_SND_DRIVERS=y | ||
884 | # CONFIG_SND_DUMMY is not set | ||
885 | # CONFIG_SND_VIRMIDI is not set | ||
886 | # CONFIG_SND_MTPAV is not set | ||
887 | # CONFIG_SND_SERIAL_U16550 is not set | ||
888 | # CONFIG_SND_MPU401 is not set | ||
889 | CONFIG_SND_PPC=y | ||
890 | # CONFIG_SND_SOC is not set | ||
891 | # CONFIG_SOUND_PRIME is not set | ||
892 | CONFIG_HID_SUPPORT=y | ||
893 | CONFIG_HID=y | ||
894 | # CONFIG_HIDRAW is not set | ||
895 | # CONFIG_HID_PID is not set | ||
896 | |||
897 | # | ||
898 | # Special HID drivers | ||
899 | # | ||
900 | CONFIG_HID_APPLE=m | ||
901 | CONFIG_HID_WACOM=m | ||
902 | CONFIG_USB_SUPPORT=y | ||
903 | # CONFIG_USB_ARCH_HAS_HCD is not set | ||
904 | # CONFIG_USB_ARCH_HAS_OHCI is not set | ||
905 | # CONFIG_USB_ARCH_HAS_EHCI is not set | ||
906 | # CONFIG_USB_OTG_WHITELIST is not set | ||
907 | # CONFIG_USB_OTG_BLACKLIST_HUB is not set | ||
908 | |||
909 | # | ||
910 | # Enable Host or Gadget support to see Inventra options | ||
911 | # | ||
912 | |||
913 | # | ||
914 | # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may | ||
915 | # | ||
916 | # CONFIG_USB_GADGET is not set | ||
917 | |||
918 | # | ||
919 | # OTG and related infrastructure | ||
920 | # | ||
921 | CONFIG_MMC=y | ||
922 | # CONFIG_MMC_DEBUG is not set | ||
923 | # CONFIG_MMC_UNSAFE_RESUME is not set | ||
924 | |||
925 | # | ||
926 | # MMC/SD/SDIO Card Drivers | ||
927 | # | ||
928 | CONFIG_MMC_BLOCK=y | ||
929 | CONFIG_MMC_BLOCK_BOUNCE=y | ||
930 | # CONFIG_SDIO_UART is not set | ||
931 | # CONFIG_MMC_TEST is not set | ||
932 | |||
933 | # | ||
934 | # MMC/SD/SDIO Host Controller Drivers | ||
935 | # | ||
936 | CONFIG_MMC_SDHCI=y | ||
937 | # CONFIG_MMC_SDHCI_OF is not set | ||
938 | # CONFIG_MMC_SDHCI_PLTFM is not set | ||
939 | # CONFIG_MMC_WBSD is not set | ||
940 | # CONFIG_MMC_AT91 is not set | ||
941 | # CONFIG_MMC_ATMELMCI is not set | ||
942 | # CONFIG_MEMSTICK is not set | ||
943 | # CONFIG_NEW_LEDS is not set | ||
944 | # CONFIG_ACCESSIBILITY is not set | ||
945 | # CONFIG_EDAC is not set | ||
946 | CONFIG_RTC_LIB=y | ||
947 | CONFIG_RTC_CLASS=y | ||
948 | CONFIG_RTC_HCTOSYS=y | ||
949 | CONFIG_RTC_HCTOSYS_DEVICE="rtc0" | ||
950 | # CONFIG_RTC_DEBUG is not set | ||
951 | |||
952 | # | ||
953 | # RTC interfaces | ||
954 | # | ||
955 | CONFIG_RTC_INTF_SYSFS=y | ||
956 | CONFIG_RTC_INTF_PROC=y | ||
957 | CONFIG_RTC_INTF_DEV=y | ||
958 | # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set | ||
959 | # CONFIG_RTC_DRV_TEST is not set | ||
960 | |||
961 | # | ||
962 | # I2C RTC drivers | ||
963 | # | ||
964 | # CONFIG_RTC_DRV_DS1307 is not set | ||
965 | # CONFIG_RTC_DRV_DS1374 is not set | ||
966 | # CONFIG_RTC_DRV_DS1672 is not set | ||
967 | # CONFIG_RTC_DRV_MAX6900 is not set | ||
968 | # CONFIG_RTC_DRV_RS5C372 is not set | ||
969 | # CONFIG_RTC_DRV_ISL1208 is not set | ||
970 | # CONFIG_RTC_DRV_X1205 is not set | ||
971 | # CONFIG_RTC_DRV_PCF8563 is not set | ||
972 | # CONFIG_RTC_DRV_PCF8583 is not set | ||
973 | # CONFIG_RTC_DRV_M41T80 is not set | ||
974 | # CONFIG_RTC_DRV_S35390A is not set | ||
975 | # CONFIG_RTC_DRV_FM3130 is not set | ||
976 | # CONFIG_RTC_DRV_RX8581 is not set | ||
977 | # CONFIG_RTC_DRV_RX8025 is not set | ||
978 | |||
979 | # | ||
980 | # SPI RTC drivers | ||
981 | # | ||
982 | |||
983 | # | ||
984 | # Platform RTC drivers | ||
985 | # | ||
986 | # CONFIG_RTC_DRV_CMOS is not set | ||
987 | # CONFIG_RTC_DRV_DS1286 is not set | ||
988 | # CONFIG_RTC_DRV_DS1511 is not set | ||
989 | # CONFIG_RTC_DRV_DS1553 is not set | ||
990 | # CONFIG_RTC_DRV_DS1742 is not set | ||
991 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
992 | # CONFIG_RTC_DRV_M48T86 is not set | ||
993 | # CONFIG_RTC_DRV_M48T35 is not set | ||
994 | # CONFIG_RTC_DRV_M48T59 is not set | ||
995 | # CONFIG_RTC_DRV_BQ4802 is not set | ||
996 | # CONFIG_RTC_DRV_V3020 is not set | ||
997 | |||
998 | # | ||
999 | # on-CPU RTC drivers | ||
1000 | # | ||
1001 | CONFIG_RTC_DRV_GENERIC=y | ||
1002 | # CONFIG_DMADEVICES is not set | ||
1003 | # CONFIG_AUXDISPLAY is not set | ||
1004 | # CONFIG_UIO is not set | ||
1005 | |||
1006 | # | ||
1007 | # TI VLYNQ | ||
1008 | # | ||
1009 | # CONFIG_STAGING is not set | ||
1010 | |||
1011 | # | ||
1012 | # File systems | ||
1013 | # | ||
1014 | CONFIG_EXT2_FS=y | ||
1015 | # CONFIG_EXT2_FS_XATTR is not set | ||
1016 | # CONFIG_EXT2_FS_XIP is not set | ||
1017 | CONFIG_EXT3_FS=y | ||
1018 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | ||
1019 | # CONFIG_EXT3_FS_XATTR is not set | ||
1020 | # CONFIG_EXT4_FS is not set | ||
1021 | CONFIG_JBD=y | ||
1022 | # CONFIG_JBD_DEBUG is not set | ||
1023 | # CONFIG_REISERFS_FS is not set | ||
1024 | # CONFIG_JFS_FS is not set | ||
1025 | # CONFIG_FS_POSIX_ACL is not set | ||
1026 | # CONFIG_XFS_FS is not set | ||
1027 | # CONFIG_GFS2_FS is not set | ||
1028 | # CONFIG_OCFS2_FS is not set | ||
1029 | # CONFIG_BTRFS_FS is not set | ||
1030 | # CONFIG_NILFS2_FS is not set | ||
1031 | CONFIG_FILE_LOCKING=y | ||
1032 | CONFIG_FSNOTIFY=y | ||
1033 | CONFIG_DNOTIFY=y | ||
1034 | CONFIG_INOTIFY=y | ||
1035 | CONFIG_INOTIFY_USER=y | ||
1036 | # CONFIG_QUOTA is not set | ||
1037 | # CONFIG_AUTOFS_FS is not set | ||
1038 | # CONFIG_AUTOFS4_FS is not set | ||
1039 | CONFIG_FUSE_FS=m | ||
1040 | # CONFIG_CUSE is not set | ||
1041 | |||
1042 | # | ||
1043 | # Caches | ||
1044 | # | ||
1045 | # CONFIG_FSCACHE is not set | ||
1046 | |||
1047 | # | ||
1048 | # CD-ROM/DVD Filesystems | ||
1049 | # | ||
1050 | CONFIG_ISO9660_FS=y | ||
1051 | CONFIG_JOLIET=y | ||
1052 | # CONFIG_ZISOFS is not set | ||
1053 | # CONFIG_UDF_FS is not set | ||
1054 | |||
1055 | # | ||
1056 | # DOS/FAT/NT Filesystems | ||
1057 | # | ||
1058 | CONFIG_FAT_FS=y | ||
1059 | CONFIG_MSDOS_FS=y | ||
1060 | CONFIG_VFAT_FS=y | ||
1061 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | ||
1062 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | ||
1063 | # CONFIG_NTFS_FS is not set | ||
1064 | |||
1065 | # | ||
1066 | # Pseudo filesystems | ||
1067 | # | ||
1068 | CONFIG_PROC_FS=y | ||
1069 | CONFIG_PROC_KCORE=y | ||
1070 | CONFIG_PROC_SYSCTL=y | ||
1071 | # CONFIG_PROC_PAGE_MONITOR is not set | ||
1072 | CONFIG_SYSFS=y | ||
1073 | CONFIG_TMPFS=y | ||
1074 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
1075 | # CONFIG_HUGETLB_PAGE is not set | ||
1076 | # CONFIG_CONFIGFS_FS is not set | ||
1077 | CONFIG_MISC_FILESYSTEMS=y | ||
1078 | # CONFIG_ADFS_FS is not set | ||
1079 | # CONFIG_AFFS_FS is not set | ||
1080 | # CONFIG_HFS_FS is not set | ||
1081 | # CONFIG_HFSPLUS_FS is not set | ||
1082 | # CONFIG_BEFS_FS is not set | ||
1083 | # CONFIG_BFS_FS is not set | ||
1084 | # CONFIG_EFS_FS is not set | ||
1085 | # CONFIG_CRAMFS is not set | ||
1086 | # CONFIG_SQUASHFS is not set | ||
1087 | # CONFIG_VXFS_FS is not set | ||
1088 | # CONFIG_MINIX_FS is not set | ||
1089 | # CONFIG_OMFS_FS is not set | ||
1090 | # CONFIG_HPFS_FS is not set | ||
1091 | # CONFIG_QNX4FS_FS is not set | ||
1092 | # CONFIG_ROMFS_FS is not set | ||
1093 | # CONFIG_SYSV_FS is not set | ||
1094 | # CONFIG_UFS_FS is not set | ||
1095 | CONFIG_NETWORK_FILESYSTEMS=y | ||
1096 | CONFIG_NFS_FS=y | ||
1097 | CONFIG_NFS_V3=y | ||
1098 | # CONFIG_NFS_V3_ACL is not set | ||
1099 | # CONFIG_NFS_V4 is not set | ||
1100 | CONFIG_ROOT_NFS=y | ||
1101 | # CONFIG_NFSD is not set | ||
1102 | CONFIG_LOCKD=y | ||
1103 | CONFIG_LOCKD_V4=y | ||
1104 | CONFIG_NFS_COMMON=y | ||
1105 | CONFIG_SUNRPC=y | ||
1106 | # CONFIG_RPCSEC_GSS_KRB5 is not set | ||
1107 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
1108 | # CONFIG_SMB_FS is not set | ||
1109 | CONFIG_CIFS=m | ||
1110 | # CONFIG_CIFS_STATS is not set | ||
1111 | # CONFIG_CIFS_WEAK_PW_HASH is not set | ||
1112 | # CONFIG_CIFS_XATTR is not set | ||
1113 | # CONFIG_CIFS_DEBUG2 is not set | ||
1114 | # CONFIG_CIFS_EXPERIMENTAL is not set | ||
1115 | # CONFIG_NCP_FS is not set | ||
1116 | # CONFIG_CODA_FS is not set | ||
1117 | # CONFIG_AFS_FS is not set | ||
1118 | |||
1119 | # | ||
1120 | # Partition Types | ||
1121 | # | ||
1122 | # CONFIG_PARTITION_ADVANCED is not set | ||
1123 | CONFIG_MSDOS_PARTITION=y | ||
1124 | CONFIG_NLS=y | ||
1125 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
1126 | CONFIG_NLS_CODEPAGE_437=y | ||
1127 | # CONFIG_NLS_CODEPAGE_737 is not set | ||
1128 | # CONFIG_NLS_CODEPAGE_775 is not set | ||
1129 | # CONFIG_NLS_CODEPAGE_850 is not set | ||
1130 | # CONFIG_NLS_CODEPAGE_852 is not set | ||
1131 | # CONFIG_NLS_CODEPAGE_855 is not set | ||
1132 | # CONFIG_NLS_CODEPAGE_857 is not set | ||
1133 | # CONFIG_NLS_CODEPAGE_860 is not set | ||
1134 | # CONFIG_NLS_CODEPAGE_861 is not set | ||
1135 | # CONFIG_NLS_CODEPAGE_862 is not set | ||
1136 | # CONFIG_NLS_CODEPAGE_863 is not set | ||
1137 | # CONFIG_NLS_CODEPAGE_864 is not set | ||
1138 | # CONFIG_NLS_CODEPAGE_865 is not set | ||
1139 | # CONFIG_NLS_CODEPAGE_866 is not set | ||
1140 | # CONFIG_NLS_CODEPAGE_869 is not set | ||
1141 | # CONFIG_NLS_CODEPAGE_936 is not set | ||
1142 | # CONFIG_NLS_CODEPAGE_950 is not set | ||
1143 | # CONFIG_NLS_CODEPAGE_932 is not set | ||
1144 | # CONFIG_NLS_CODEPAGE_949 is not set | ||
1145 | # CONFIG_NLS_CODEPAGE_874 is not set | ||
1146 | # CONFIG_NLS_ISO8859_8 is not set | ||
1147 | # CONFIG_NLS_CODEPAGE_1250 is not set | ||
1148 | # CONFIG_NLS_CODEPAGE_1251 is not set | ||
1149 | # CONFIG_NLS_ASCII is not set | ||
1150 | CONFIG_NLS_ISO8859_1=y | ||
1151 | # CONFIG_NLS_ISO8859_2 is not set | ||
1152 | # CONFIG_NLS_ISO8859_3 is not set | ||
1153 | # CONFIG_NLS_ISO8859_4 is not set | ||
1154 | # CONFIG_NLS_ISO8859_5 is not set | ||
1155 | # CONFIG_NLS_ISO8859_6 is not set | ||
1156 | # CONFIG_NLS_ISO8859_7 is not set | ||
1157 | # CONFIG_NLS_ISO8859_9 is not set | ||
1158 | # CONFIG_NLS_ISO8859_13 is not set | ||
1159 | # CONFIG_NLS_ISO8859_14 is not set | ||
1160 | # CONFIG_NLS_ISO8859_15 is not set | ||
1161 | # CONFIG_NLS_KOI8_R is not set | ||
1162 | # CONFIG_NLS_KOI8_U is not set | ||
1163 | # CONFIG_NLS_UTF8 is not set | ||
1164 | # CONFIG_DLM is not set | ||
1165 | CONFIG_BINARY_PRINTF=y | ||
1166 | |||
1167 | # | ||
1168 | # Library routines | ||
1169 | # | ||
1170 | CONFIG_BITREVERSE=y | ||
1171 | CONFIG_GENERIC_FIND_LAST_BIT=y | ||
1172 | CONFIG_CRC_CCITT=y | ||
1173 | CONFIG_CRC16=y | ||
1174 | # CONFIG_CRC_T10DIF is not set | ||
1175 | # CONFIG_CRC_ITU_T is not set | ||
1176 | CONFIG_CRC32=y | ||
1177 | # CONFIG_CRC7 is not set | ||
1178 | # CONFIG_LIBCRC32C is not set | ||
1179 | CONFIG_ZLIB_INFLATE=y | ||
1180 | CONFIG_DECOMPRESS_GZIP=y | ||
1181 | CONFIG_HAS_IOMEM=y | ||
1182 | CONFIG_HAS_IOPORT=y | ||
1183 | CONFIG_HAS_DMA=y | ||
1184 | CONFIG_HAVE_LMB=y | ||
1185 | CONFIG_NLATTR=y | ||
1186 | CONFIG_GENERIC_ATOMIC64=y | ||
1187 | |||
1188 | # | ||
1189 | # Kernel hacking | ||
1190 | # | ||
1191 | CONFIG_PRINTK_TIME=y | ||
1192 | CONFIG_ENABLE_WARN_DEPRECATED=y | ||
1193 | CONFIG_ENABLE_MUST_CHECK=y | ||
1194 | CONFIG_FRAME_WARN=1024 | ||
1195 | CONFIG_MAGIC_SYSRQ=y | ||
1196 | # CONFIG_STRIP_ASM_SYMS is not set | ||
1197 | # CONFIG_UNUSED_SYMBOLS is not set | ||
1198 | CONFIG_DEBUG_FS=y | ||
1199 | # CONFIG_HEADERS_CHECK is not set | ||
1200 | CONFIG_DEBUG_KERNEL=y | ||
1201 | # CONFIG_DEBUG_SHIRQ is not set | ||
1202 | CONFIG_DETECT_SOFTLOCKUP=y | ||
1203 | # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set | ||
1204 | CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 | ||
1205 | # CONFIG_DETECT_HUNG_TASK is not set | ||
1206 | CONFIG_SCHED_DEBUG=y | ||
1207 | CONFIG_SCHEDSTATS=y | ||
1208 | # CONFIG_TIMER_STATS is not set | ||
1209 | # CONFIG_DEBUG_OBJECTS is not set | ||
1210 | # CONFIG_DEBUG_SLAB is not set | ||
1211 | # CONFIG_DEBUG_KMEMLEAK is not set | ||
1212 | CONFIG_DEBUG_PREEMPT=y | ||
1213 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
1214 | # CONFIG_RT_MUTEX_TESTER is not set | ||
1215 | CONFIG_DEBUG_SPINLOCK=y | ||
1216 | CONFIG_DEBUG_MUTEXES=y | ||
1217 | # CONFIG_DEBUG_LOCK_ALLOC is not set | ||
1218 | # CONFIG_PROVE_LOCKING is not set | ||
1219 | # CONFIG_LOCK_STAT is not set | ||
1220 | CONFIG_DEBUG_SPINLOCK_SLEEP=y | ||
1221 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
1222 | CONFIG_STACKTRACE=y | ||
1223 | # CONFIG_DEBUG_KOBJECT is not set | ||
1224 | CONFIG_DEBUG_BUGVERBOSE=y | ||
1225 | # CONFIG_DEBUG_INFO is not set | ||
1226 | # CONFIG_DEBUG_VM is not set | ||
1227 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
1228 | # CONFIG_DEBUG_MEMORY_INIT is not set | ||
1229 | # CONFIG_DEBUG_LIST is not set | ||
1230 | # CONFIG_DEBUG_SG is not set | ||
1231 | # CONFIG_DEBUG_NOTIFIERS is not set | ||
1232 | # CONFIG_DEBUG_CREDENTIALS is not set | ||
1233 | # CONFIG_RCU_TORTURE_TEST is not set | ||
1234 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
1235 | # CONFIG_BACKTRACE_SELF_TEST is not set | ||
1236 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set | ||
1237 | # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set | ||
1238 | # CONFIG_FAULT_INJECTION is not set | ||
1239 | CONFIG_LATENCYTOP=y | ||
1240 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
1241 | # CONFIG_DEBUG_PAGEALLOC is not set | ||
1242 | CONFIG_NOP_TRACER=y | ||
1243 | CONFIG_HAVE_FUNCTION_TRACER=y | ||
1244 | CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y | ||
1245 | CONFIG_HAVE_DYNAMIC_FTRACE=y | ||
1246 | CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y | ||
1247 | CONFIG_TRACER_MAX_TRACE=y | ||
1248 | CONFIG_RING_BUFFER=y | ||
1249 | CONFIG_EVENT_TRACING=y | ||
1250 | CONFIG_CONTEXT_SWITCH_TRACER=y | ||
1251 | CONFIG_TRACING=y | ||
1252 | CONFIG_GENERIC_TRACER=y | ||
1253 | CONFIG_TRACING_SUPPORT=y | ||
1254 | CONFIG_FTRACE=y | ||
1255 | # CONFIG_FUNCTION_TRACER is not set | ||
1256 | # CONFIG_IRQSOFF_TRACER is not set | ||
1257 | # CONFIG_PREEMPT_TRACER is not set | ||
1258 | CONFIG_SCHED_TRACER=y | ||
1259 | CONFIG_BOOT_TRACER=y | ||
1260 | CONFIG_BRANCH_PROFILE_NONE=y | ||
1261 | # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set | ||
1262 | # CONFIG_PROFILE_ALL_BRANCHES is not set | ||
1263 | # CONFIG_STACK_TRACER is not set | ||
1264 | # CONFIG_KMEMTRACE is not set | ||
1265 | # CONFIG_WORKQUEUE_TRACER is not set | ||
1266 | CONFIG_BLK_DEV_IO_TRACE=y | ||
1267 | # CONFIG_FTRACE_STARTUP_TEST is not set | ||
1268 | # CONFIG_RING_BUFFER_BENCHMARK is not set | ||
1269 | # CONFIG_DYNAMIC_DEBUG is not set | ||
1270 | CONFIG_DMA_API_DEBUG=y | ||
1271 | # CONFIG_SAMPLES is not set | ||
1272 | CONFIG_HAVE_ARCH_KGDB=y | ||
1273 | # CONFIG_KGDB is not set | ||
1274 | # CONFIG_PPC_DISABLE_WERROR is not set | ||
1275 | CONFIG_PPC_WERROR=y | ||
1276 | CONFIG_PRINT_STACK_DEPTH=64 | ||
1277 | # CONFIG_DEBUG_STACKOVERFLOW is not set | ||
1278 | # CONFIG_DEBUG_STACK_USAGE is not set | ||
1279 | # CONFIG_PPC_EMULATED_STATS is not set | ||
1280 | # CONFIG_CODE_PATCHING_SELFTEST is not set | ||
1281 | # CONFIG_FTR_FIXUP_SELFTEST is not set | ||
1282 | # CONFIG_MSI_BITMAP_SELFTEST is not set | ||
1283 | # CONFIG_XMON is not set | ||
1284 | # CONFIG_IRQSTACKS is not set | ||
1285 | # CONFIG_VIRQ_DEBUG is not set | ||
1286 | # CONFIG_BDI_SWITCH is not set | ||
1287 | # CONFIG_BOOTX_TEXT is not set | ||
1288 | CONFIG_PPC_EARLY_DEBUG=y | ||
1289 | # CONFIG_PPC_EARLY_DEBUG_LPAR is not set | ||
1290 | # CONFIG_PPC_EARLY_DEBUG_G5 is not set | ||
1291 | # CONFIG_PPC_EARLY_DEBUG_RTAS_PANEL is not set | ||
1292 | # CONFIG_PPC_EARLY_DEBUG_RTAS_CONSOLE is not set | ||
1293 | # CONFIG_PPC_EARLY_DEBUG_MAPLE is not set | ||
1294 | # CONFIG_PPC_EARLY_DEBUG_ISERIES is not set | ||
1295 | # CONFIG_PPC_EARLY_DEBUG_PAS_REALMODE is not set | ||
1296 | # CONFIG_PPC_EARLY_DEBUG_BEAT is not set | ||
1297 | # CONFIG_PPC_EARLY_DEBUG_44x is not set | ||
1298 | # CONFIG_PPC_EARLY_DEBUG_40x is not set | ||
1299 | # CONFIG_PPC_EARLY_DEBUG_CPM is not set | ||
1300 | CONFIG_PPC_EARLY_DEBUG_USBGECKO=y | ||
1301 | |||
1302 | # | ||
1303 | # Security options | ||
1304 | # | ||
1305 | # CONFIG_KEYS is not set | ||
1306 | # CONFIG_SECURITY is not set | ||
1307 | # CONFIG_SECURITYFS is not set | ||
1308 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | ||
1309 | CONFIG_CRYPTO=y | ||
1310 | |||
1311 | # | ||
1312 | # Crypto core or helper | ||
1313 | # | ||
1314 | CONFIG_CRYPTO_ALGAPI=y | ||
1315 | CONFIG_CRYPTO_ALGAPI2=y | ||
1316 | CONFIG_CRYPTO_AEAD2=y | ||
1317 | CONFIG_CRYPTO_BLKCIPHER=y | ||
1318 | CONFIG_CRYPTO_BLKCIPHER2=y | ||
1319 | CONFIG_CRYPTO_HASH2=y | ||
1320 | CONFIG_CRYPTO_RNG2=y | ||
1321 | CONFIG_CRYPTO_PCOMP=y | ||
1322 | CONFIG_CRYPTO_MANAGER=y | ||
1323 | CONFIG_CRYPTO_MANAGER2=y | ||
1324 | # CONFIG_CRYPTO_GF128MUL is not set | ||
1325 | # CONFIG_CRYPTO_NULL is not set | ||
1326 | CONFIG_CRYPTO_WORKQUEUE=y | ||
1327 | # CONFIG_CRYPTO_CRYPTD is not set | ||
1328 | # CONFIG_CRYPTO_AUTHENC is not set | ||
1329 | # CONFIG_CRYPTO_TEST is not set | ||
1330 | |||
1331 | # | ||
1332 | # Authenticated Encryption with Associated Data | ||
1333 | # | ||
1334 | # CONFIG_CRYPTO_CCM is not set | ||
1335 | # CONFIG_CRYPTO_GCM is not set | ||
1336 | # CONFIG_CRYPTO_SEQIV is not set | ||
1337 | |||
1338 | # | ||
1339 | # Block modes | ||
1340 | # | ||
1341 | # CONFIG_CRYPTO_CBC is not set | ||
1342 | # CONFIG_CRYPTO_CTR is not set | ||
1343 | # CONFIG_CRYPTO_CTS is not set | ||
1344 | CONFIG_CRYPTO_ECB=y | ||
1345 | # CONFIG_CRYPTO_LRW is not set | ||
1346 | # CONFIG_CRYPTO_PCBC is not set | ||
1347 | # CONFIG_CRYPTO_XTS is not set | ||
1348 | |||
1349 | # | ||
1350 | # Hash modes | ||
1351 | # | ||
1352 | # CONFIG_CRYPTO_HMAC is not set | ||
1353 | # CONFIG_CRYPTO_XCBC is not set | ||
1354 | # CONFIG_CRYPTO_VMAC is not set | ||
1355 | |||
1356 | # | ||
1357 | # Digest | ||
1358 | # | ||
1359 | # CONFIG_CRYPTO_CRC32C is not set | ||
1360 | # CONFIG_CRYPTO_GHASH is not set | ||
1361 | # CONFIG_CRYPTO_MD4 is not set | ||
1362 | # CONFIG_CRYPTO_MD5 is not set | ||
1363 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
1364 | # CONFIG_CRYPTO_RMD128 is not set | ||
1365 | # CONFIG_CRYPTO_RMD160 is not set | ||
1366 | # CONFIG_CRYPTO_RMD256 is not set | ||
1367 | # CONFIG_CRYPTO_RMD320 is not set | ||
1368 | # CONFIG_CRYPTO_SHA1 is not set | ||
1369 | # CONFIG_CRYPTO_SHA256 is not set | ||
1370 | # CONFIG_CRYPTO_SHA512 is not set | ||
1371 | # CONFIG_CRYPTO_TGR192 is not set | ||
1372 | # CONFIG_CRYPTO_WP512 is not set | ||
1373 | |||
1374 | # | ||
1375 | # Ciphers | ||
1376 | # | ||
1377 | CONFIG_CRYPTO_AES=y | ||
1378 | # CONFIG_CRYPTO_ANUBIS is not set | ||
1379 | CONFIG_CRYPTO_ARC4=y | ||
1380 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
1381 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
1382 | # CONFIG_CRYPTO_CAST5 is not set | ||
1383 | # CONFIG_CRYPTO_CAST6 is not set | ||
1384 | # CONFIG_CRYPTO_DES is not set | ||
1385 | # CONFIG_CRYPTO_FCRYPT is not set | ||
1386 | # CONFIG_CRYPTO_KHAZAD is not set | ||
1387 | # CONFIG_CRYPTO_SALSA20 is not set | ||
1388 | # CONFIG_CRYPTO_SEED is not set | ||
1389 | # CONFIG_CRYPTO_SERPENT is not set | ||
1390 | # CONFIG_CRYPTO_TEA is not set | ||
1391 | # CONFIG_CRYPTO_TWOFISH is not set | ||
1392 | |||
1393 | # | ||
1394 | # Compression | ||
1395 | # | ||
1396 | # CONFIG_CRYPTO_DEFLATE is not set | ||
1397 | # CONFIG_CRYPTO_ZLIB is not set | ||
1398 | # CONFIG_CRYPTO_LZO is not set | ||
1399 | |||
1400 | # | ||
1401 | # Random Number Generation | ||
1402 | # | ||
1403 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | ||
1404 | # CONFIG_CRYPTO_HW is not set | ||
1405 | # CONFIG_PPC_CLOCK is not set | ||
1406 | # CONFIG_VIRTUALIZATION is not set | ||
diff --git a/arch/powerpc/include/asm/asm-offsets.h b/arch/powerpc/include/asm/asm-offsets.h new file mode 100644 index 000000000000..d370ee36a182 --- /dev/null +++ b/arch/powerpc/include/asm/asm-offsets.h | |||
@@ -0,0 +1 @@ | |||
#include <generated/asm-offsets.h> | |||
diff --git a/arch/powerpc/include/asm/async_tx.h b/arch/powerpc/include/asm/async_tx.h new file mode 100644 index 000000000000..8b2dc55d01ab --- /dev/null +++ b/arch/powerpc/include/asm/async_tx.h | |||
@@ -0,0 +1,47 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2008-2009 DENX Software Engineering. | ||
3 | * | ||
4 | * Author: Yuri Tikhonov <yur@emcraft.com> | ||
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 Free | ||
8 | * Software Foundation; either version 2 of the License, or (at your option) | ||
9 | * any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, but WITHOUT | ||
12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
14 | * more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License along with | ||
17 | * this program; if not, write to the Free Software Foundation, Inc., 59 | ||
18 | * Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
19 | * | ||
20 | * The full GNU General Public License is included in this distribution in the | ||
21 | * file called COPYING. | ||
22 | */ | ||
23 | #ifndef _ASM_POWERPC_ASYNC_TX_H_ | ||
24 | #define _ASM_POWERPC_ASYNC_TX_H_ | ||
25 | |||
26 | #if defined(CONFIG_440SPe) || defined(CONFIG_440SP) | ||
27 | extern struct dma_chan * | ||
28 | ppc440spe_async_tx_find_best_channel(enum dma_transaction_type cap, | ||
29 | struct page **dst_lst, int dst_cnt, struct page **src_lst, | ||
30 | int src_cnt, size_t src_sz); | ||
31 | |||
32 | #define async_tx_find_channel(dep, cap, dst_lst, dst_cnt, src_lst, \ | ||
33 | src_cnt, src_sz) \ | ||
34 | ppc440spe_async_tx_find_best_channel(cap, dst_lst, dst_cnt, src_lst, \ | ||
35 | src_cnt, src_sz) | ||
36 | #else | ||
37 | |||
38 | #define async_tx_find_channel(dep, type, dst, dst_count, src, src_count, len) \ | ||
39 | __async_tx_find_channel(dep, type) | ||
40 | |||
41 | struct dma_chan * | ||
42 | __async_tx_find_channel(struct async_submit_ctl *submit, | ||
43 | enum dma_transaction_type tx_type); | ||
44 | |||
45 | #endif | ||
46 | |||
47 | #endif | ||
diff --git a/arch/powerpc/include/asm/bug.h b/arch/powerpc/include/asm/bug.h index 64e1fdca233e..2c15212e1700 100644 --- a/arch/powerpc/include/asm/bug.h +++ b/arch/powerpc/include/asm/bug.h | |||
@@ -68,7 +68,7 @@ | |||
68 | _EMIT_BUG_ENTRY \ | 68 | _EMIT_BUG_ENTRY \ |
69 | : : "i" (__FILE__), "i" (__LINE__), \ | 69 | : : "i" (__FILE__), "i" (__LINE__), \ |
70 | "i" (0), "i" (sizeof(struct bug_entry))); \ | 70 | "i" (0), "i" (sizeof(struct bug_entry))); \ |
71 | for(;;) ; \ | 71 | unreachable(); \ |
72 | } while (0) | 72 | } while (0) |
73 | 73 | ||
74 | #define BUG_ON(x) do { \ | 74 | #define BUG_ON(x) do { \ |
diff --git a/arch/powerpc/include/asm/dcr-regs.h b/arch/powerpc/include/asm/dcr-regs.h index 828e3aa1f2fc..380274de429f 100644 --- a/arch/powerpc/include/asm/dcr-regs.h +++ b/arch/powerpc/include/asm/dcr-regs.h | |||
@@ -157,4 +157,27 @@ | |||
157 | #define L2C_SNP_SSR_32G 0x0000f000 | 157 | #define L2C_SNP_SSR_32G 0x0000f000 |
158 | #define L2C_SNP_ESR 0x00000800 | 158 | #define L2C_SNP_ESR 0x00000800 |
159 | 159 | ||
160 | /* | ||
161 | * DCR register offsets for 440SP/440SPe I2O/DMA controller. | ||
162 | * The base address is configured in the device tree. | ||
163 | */ | ||
164 | #define DCRN_I2O0_IBAL 0x006 | ||
165 | #define DCRN_I2O0_IBAH 0x007 | ||
166 | #define I2O_REG_ENABLE 0x00000001 /* Enable I2O/DMA access */ | ||
167 | |||
168 | /* 440SP/440SPe Software Reset DCR */ | ||
169 | #define DCRN_SDR0_SRST 0x0200 | ||
170 | #define DCRN_SDR0_SRST_I2ODMA (0x80000000 >> 15) /* Reset I2O/DMA */ | ||
171 | |||
172 | /* 440SP/440SPe Memory Queue DCR offsets */ | ||
173 | #define DCRN_MQ0_XORBA 0x04 | ||
174 | #define DCRN_MQ0_CF2H 0x06 | ||
175 | #define DCRN_MQ0_CFBHL 0x0f | ||
176 | #define DCRN_MQ0_BAUH 0x10 | ||
177 | |||
178 | /* HB/LL Paths Configuration Register */ | ||
179 | #define MQ0_CFBHL_TPLM 28 | ||
180 | #define MQ0_CFBHL_HBCL 23 | ||
181 | #define MQ0_CFBHL_POLY 15 | ||
182 | |||
160 | #endif /* __DCR_REGS_H__ */ | 183 | #endif /* __DCR_REGS_H__ */ |
diff --git a/arch/powerpc/include/asm/dma-mapping.h b/arch/powerpc/include/asm/dma-mapping.h index e281daebddca..80a973bb9e71 100644 --- a/arch/powerpc/include/asm/dma-mapping.h +++ b/arch/powerpc/include/asm/dma-mapping.h | |||
@@ -197,7 +197,7 @@ static inline bool dma_capable(struct device *dev, dma_addr_t addr, size_t size) | |||
197 | if (!dev->dma_mask) | 197 | if (!dev->dma_mask) |
198 | return 0; | 198 | return 0; |
199 | 199 | ||
200 | return addr + size <= *dev->dma_mask; | 200 | return addr + size - 1 <= *dev->dma_mask; |
201 | } | 201 | } |
202 | 202 | ||
203 | static inline dma_addr_t phys_to_dma(struct device *dev, phys_addr_t paddr) | 203 | static inline dma_addr_t phys_to_dma(struct device *dev, phys_addr_t paddr) |
diff --git a/arch/powerpc/include/asm/elf.h b/arch/powerpc/include/asm/elf.h index 014a624f4c8e..17828ad411eb 100644 --- a/arch/powerpc/include/asm/elf.h +++ b/arch/powerpc/include/asm/elf.h | |||
@@ -170,7 +170,6 @@ typedef elf_fpreg_t elf_vsrreghalf_t32[ELF_NVSRHALFREG]; | |||
170 | #define elf_check_arch(x) ((x)->e_machine == ELF_ARCH) | 170 | #define elf_check_arch(x) ((x)->e_machine == ELF_ARCH) |
171 | #define compat_elf_check_arch(x) ((x)->e_machine == EM_PPC) | 171 | #define compat_elf_check_arch(x) ((x)->e_machine == EM_PPC) |
172 | 172 | ||
173 | #define USE_ELF_CORE_DUMP | ||
174 | #define CORE_DUMP_USE_REGSET | 173 | #define CORE_DUMP_USE_REGSET |
175 | #define ELF_EXEC_PAGESIZE PAGE_SIZE | 174 | #define ELF_EXEC_PAGESIZE PAGE_SIZE |
176 | 175 | ||
diff --git a/arch/powerpc/include/asm/fixmap.h b/arch/powerpc/include/asm/fixmap.h index f1f4e23a84e9..5c2c0233175e 100644 --- a/arch/powerpc/include/asm/fixmap.h +++ b/arch/powerpc/include/asm/fixmap.h | |||
@@ -44,6 +44,9 @@ | |||
44 | */ | 44 | */ |
45 | enum fixed_addresses { | 45 | enum fixed_addresses { |
46 | FIX_HOLE, | 46 | FIX_HOLE, |
47 | /* reserve the top 128K for early debugging purposes */ | ||
48 | FIX_EARLY_DEBUG_TOP = FIX_HOLE, | ||
49 | FIX_EARLY_DEBUG_BASE = FIX_EARLY_DEBUG_TOP+((128*1024)/PAGE_SIZE)-1, | ||
47 | #ifdef CONFIG_HIGHMEM | 50 | #ifdef CONFIG_HIGHMEM |
48 | FIX_KMAP_BEGIN, /* reserved pte's for temporary kernel mappings */ | 51 | FIX_KMAP_BEGIN, /* reserved pte's for temporary kernel mappings */ |
49 | FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1, | 52 | FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1, |
diff --git a/arch/powerpc/include/asm/gpio.h b/arch/powerpc/include/asm/gpio.h index ea04632399d8..38762edb5e58 100644 --- a/arch/powerpc/include/asm/gpio.h +++ b/arch/powerpc/include/asm/gpio.h | |||
@@ -38,12 +38,9 @@ static inline int gpio_cansleep(unsigned int gpio) | |||
38 | return __gpio_cansleep(gpio); | 38 | return __gpio_cansleep(gpio); |
39 | } | 39 | } |
40 | 40 | ||
41 | /* | ||
42 | * Not implemented, yet. | ||
43 | */ | ||
44 | static inline int gpio_to_irq(unsigned int gpio) | 41 | static inline int gpio_to_irq(unsigned int gpio) |
45 | { | 42 | { |
46 | return -ENOSYS; | 43 | return __gpio_to_irq(gpio); |
47 | } | 44 | } |
48 | 45 | ||
49 | static inline int irq_to_gpio(unsigned int irq) | 46 | static inline int irq_to_gpio(unsigned int irq) |
diff --git a/arch/powerpc/include/asm/module.h b/arch/powerpc/include/asm/module.h index 08454880a2c0..0192a4ee2bc2 100644 --- a/arch/powerpc/include/asm/module.h +++ b/arch/powerpc/include/asm/module.h | |||
@@ -87,5 +87,10 @@ struct exception_table_entry; | |||
87 | void sort_ex_table(struct exception_table_entry *start, | 87 | void sort_ex_table(struct exception_table_entry *start, |
88 | struct exception_table_entry *finish); | 88 | struct exception_table_entry *finish); |
89 | 89 | ||
90 | #ifdef CONFIG_MODVERSIONS | ||
91 | #define ARCH_RELOCATES_KCRCTAB | ||
92 | |||
93 | extern const unsigned long reloc_start[]; | ||
94 | #endif | ||
90 | #endif /* __KERNEL__ */ | 95 | #endif /* __KERNEL__ */ |
91 | #endif /* _ASM_POWERPC_MODULE_H */ | 96 | #endif /* _ASM_POWERPC_MODULE_H */ |
diff --git a/arch/powerpc/include/asm/ptrace.h b/arch/powerpc/include/asm/ptrace.h index 8c341490cfc5..cbd759e3cd78 100644 --- a/arch/powerpc/include/asm/ptrace.h +++ b/arch/powerpc/include/asm/ptrace.h | |||
@@ -140,6 +140,8 @@ extern void user_enable_single_step(struct task_struct *); | |||
140 | extern void user_enable_block_step(struct task_struct *); | 140 | extern void user_enable_block_step(struct task_struct *); |
141 | extern void user_disable_single_step(struct task_struct *); | 141 | extern void user_disable_single_step(struct task_struct *); |
142 | 142 | ||
143 | #define ARCH_HAS_USER_SINGLE_STEP_INFO | ||
144 | |||
143 | #endif /* __ASSEMBLY__ */ | 145 | #endif /* __ASSEMBLY__ */ |
144 | 146 | ||
145 | #endif /* __KERNEL__ */ | 147 | #endif /* __KERNEL__ */ |
diff --git a/arch/powerpc/include/asm/reg_fsl_emb.h b/arch/powerpc/include/asm/reg_fsl_emb.h index 1e180a594589..0de404dfee8b 100644 --- a/arch/powerpc/include/asm/reg_fsl_emb.h +++ b/arch/powerpc/include/asm/reg_fsl_emb.h | |||
@@ -39,7 +39,7 @@ | |||
39 | #define PMRN_PMLCB2 0x112 /* PM Local Control B2 */ | 39 | #define PMRN_PMLCB2 0x112 /* PM Local Control B2 */ |
40 | #define PMRN_PMLCB3 0x113 /* PM Local Control B3 */ | 40 | #define PMRN_PMLCB3 0x113 /* PM Local Control B3 */ |
41 | 41 | ||
42 | #define PMLCB_THRESHMUL_MASK 0x0700 /* Threshhold Multiple Field */ | 42 | #define PMLCB_THRESHMUL_MASK 0x0700 /* Threshold Multiple Field */ |
43 | #define PMLCB_THRESHMUL_SHIFT 8 | 43 | #define PMLCB_THRESHMUL_SHIFT 8 |
44 | 44 | ||
45 | #define PMLCB_THRESHOLD_MASK 0x003f /* Threshold Field */ | 45 | #define PMLCB_THRESHOLD_MASK 0x003f /* Threshold Field */ |
diff --git a/arch/powerpc/include/asm/rtas.h b/arch/powerpc/include/asm/rtas.h index 168fce726201..20de73c36682 100644 --- a/arch/powerpc/include/asm/rtas.h +++ b/arch/powerpc/include/asm/rtas.h | |||
@@ -58,7 +58,7 @@ struct rtas_t { | |||
58 | unsigned long entry; /* physical address pointer */ | 58 | unsigned long entry; /* physical address pointer */ |
59 | unsigned long base; /* physical address pointer */ | 59 | unsigned long base; /* physical address pointer */ |
60 | unsigned long size; | 60 | unsigned long size; |
61 | raw_spinlock_t lock; | 61 | arch_spinlock_t lock; |
62 | struct rtas_args args; | 62 | struct rtas_args args; |
63 | struct device_node *dev; /* virtual address pointer */ | 63 | struct device_node *dev; /* virtual address pointer */ |
64 | }; | 64 | }; |
diff --git a/arch/powerpc/include/asm/smp.h b/arch/powerpc/include/asm/smp.h index d9ea8d39c342..1d3b270d3083 100644 --- a/arch/powerpc/include/asm/smp.h +++ b/arch/powerpc/include/asm/smp.h | |||
@@ -37,7 +37,7 @@ extern void cpu_die(void); | |||
37 | extern void smp_send_debugger_break(int cpu); | 37 | extern void smp_send_debugger_break(int cpu); |
38 | extern void smp_message_recv(int); | 38 | extern void smp_message_recv(int); |
39 | 39 | ||
40 | DECLARE_PER_CPU(unsigned int, pvr); | 40 | DECLARE_PER_CPU(unsigned int, cpu_pvr); |
41 | 41 | ||
42 | #ifdef CONFIG_HOTPLUG_CPU | 42 | #ifdef CONFIG_HOTPLUG_CPU |
43 | extern void fixup_irqs(cpumask_t map); | 43 | extern void fixup_irqs(cpumask_t map); |
diff --git a/arch/powerpc/include/asm/spinlock.h b/arch/powerpc/include/asm/spinlock.h index 198266cf9e2d..764094cff681 100644 --- a/arch/powerpc/include/asm/spinlock.h +++ b/arch/powerpc/include/asm/spinlock.h | |||
@@ -28,7 +28,7 @@ | |||
28 | #include <asm/asm-compat.h> | 28 | #include <asm/asm-compat.h> |
29 | #include <asm/synch.h> | 29 | #include <asm/synch.h> |
30 | 30 | ||
31 | #define __raw_spin_is_locked(x) ((x)->slock != 0) | 31 | #define arch_spin_is_locked(x) ((x)->slock != 0) |
32 | 32 | ||
33 | #ifdef CONFIG_PPC64 | 33 | #ifdef CONFIG_PPC64 |
34 | /* use 0x800000yy when locked, where yy == CPU number */ | 34 | /* use 0x800000yy when locked, where yy == CPU number */ |
@@ -54,7 +54,7 @@ | |||
54 | * This returns the old value in the lock, so we succeeded | 54 | * This returns the old value in the lock, so we succeeded |
55 | * in getting the lock if the return value is 0. | 55 | * in getting the lock if the return value is 0. |
56 | */ | 56 | */ |
57 | static inline unsigned long arch_spin_trylock(raw_spinlock_t *lock) | 57 | static inline unsigned long __arch_spin_trylock(arch_spinlock_t *lock) |
58 | { | 58 | { |
59 | unsigned long tmp, token; | 59 | unsigned long tmp, token; |
60 | 60 | ||
@@ -73,10 +73,10 @@ static inline unsigned long arch_spin_trylock(raw_spinlock_t *lock) | |||
73 | return tmp; | 73 | return tmp; |
74 | } | 74 | } |
75 | 75 | ||
76 | static inline int __raw_spin_trylock(raw_spinlock_t *lock) | 76 | static inline int arch_spin_trylock(arch_spinlock_t *lock) |
77 | { | 77 | { |
78 | CLEAR_IO_SYNC; | 78 | CLEAR_IO_SYNC; |
79 | return arch_spin_trylock(lock) == 0; | 79 | return __arch_spin_trylock(lock) == 0; |
80 | } | 80 | } |
81 | 81 | ||
82 | /* | 82 | /* |
@@ -96,19 +96,19 @@ static inline int __raw_spin_trylock(raw_spinlock_t *lock) | |||
96 | #if defined(CONFIG_PPC_SPLPAR) || defined(CONFIG_PPC_ISERIES) | 96 | #if defined(CONFIG_PPC_SPLPAR) || defined(CONFIG_PPC_ISERIES) |
97 | /* We only yield to the hypervisor if we are in shared processor mode */ | 97 | /* We only yield to the hypervisor if we are in shared processor mode */ |
98 | #define SHARED_PROCESSOR (get_lppaca()->shared_proc) | 98 | #define SHARED_PROCESSOR (get_lppaca()->shared_proc) |
99 | extern void __spin_yield(raw_spinlock_t *lock); | 99 | extern void __spin_yield(arch_spinlock_t *lock); |
100 | extern void __rw_yield(raw_rwlock_t *lock); | 100 | extern void __rw_yield(arch_rwlock_t *lock); |
101 | #else /* SPLPAR || ISERIES */ | 101 | #else /* SPLPAR || ISERIES */ |
102 | #define __spin_yield(x) barrier() | 102 | #define __spin_yield(x) barrier() |
103 | #define __rw_yield(x) barrier() | 103 | #define __rw_yield(x) barrier() |
104 | #define SHARED_PROCESSOR 0 | 104 | #define SHARED_PROCESSOR 0 |
105 | #endif | 105 | #endif |
106 | 106 | ||
107 | static inline void __raw_spin_lock(raw_spinlock_t *lock) | 107 | static inline void arch_spin_lock(arch_spinlock_t *lock) |
108 | { | 108 | { |
109 | CLEAR_IO_SYNC; | 109 | CLEAR_IO_SYNC; |
110 | while (1) { | 110 | while (1) { |
111 | if (likely(arch_spin_trylock(lock) == 0)) | 111 | if (likely(__arch_spin_trylock(lock) == 0)) |
112 | break; | 112 | break; |
113 | do { | 113 | do { |
114 | HMT_low(); | 114 | HMT_low(); |
@@ -120,13 +120,13 @@ static inline void __raw_spin_lock(raw_spinlock_t *lock) | |||
120 | } | 120 | } |
121 | 121 | ||
122 | static inline | 122 | static inline |
123 | void __raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long flags) | 123 | void arch_spin_lock_flags(arch_spinlock_t *lock, unsigned long flags) |
124 | { | 124 | { |
125 | unsigned long flags_dis; | 125 | unsigned long flags_dis; |
126 | 126 | ||
127 | CLEAR_IO_SYNC; | 127 | CLEAR_IO_SYNC; |
128 | while (1) { | 128 | while (1) { |
129 | if (likely(arch_spin_trylock(lock) == 0)) | 129 | if (likely(__arch_spin_trylock(lock) == 0)) |
130 | break; | 130 | break; |
131 | local_save_flags(flags_dis); | 131 | local_save_flags(flags_dis); |
132 | local_irq_restore(flags); | 132 | local_irq_restore(flags); |
@@ -140,19 +140,19 @@ void __raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long flags) | |||
140 | } | 140 | } |
141 | } | 141 | } |
142 | 142 | ||
143 | static inline void __raw_spin_unlock(raw_spinlock_t *lock) | 143 | static inline void arch_spin_unlock(arch_spinlock_t *lock) |
144 | { | 144 | { |
145 | SYNC_IO; | 145 | SYNC_IO; |
146 | __asm__ __volatile__("# __raw_spin_unlock\n\t" | 146 | __asm__ __volatile__("# arch_spin_unlock\n\t" |
147 | LWSYNC_ON_SMP: : :"memory"); | 147 | LWSYNC_ON_SMP: : :"memory"); |
148 | lock->slock = 0; | 148 | lock->slock = 0; |
149 | } | 149 | } |
150 | 150 | ||
151 | #ifdef CONFIG_PPC64 | 151 | #ifdef CONFIG_PPC64 |
152 | extern void __raw_spin_unlock_wait(raw_spinlock_t *lock); | 152 | extern void arch_spin_unlock_wait(arch_spinlock_t *lock); |
153 | #else | 153 | #else |
154 | #define __raw_spin_unlock_wait(lock) \ | 154 | #define arch_spin_unlock_wait(lock) \ |
155 | do { while (__raw_spin_is_locked(lock)) cpu_relax(); } while (0) | 155 | do { while (arch_spin_is_locked(lock)) cpu_relax(); } while (0) |
156 | #endif | 156 | #endif |
157 | 157 | ||
158 | /* | 158 | /* |
@@ -166,8 +166,8 @@ extern void __raw_spin_unlock_wait(raw_spinlock_t *lock); | |||
166 | * read-locks. | 166 | * read-locks. |
167 | */ | 167 | */ |
168 | 168 | ||
169 | #define __raw_read_can_lock(rw) ((rw)->lock >= 0) | 169 | #define arch_read_can_lock(rw) ((rw)->lock >= 0) |
170 | #define __raw_write_can_lock(rw) (!(rw)->lock) | 170 | #define arch_write_can_lock(rw) (!(rw)->lock) |
171 | 171 | ||
172 | #ifdef CONFIG_PPC64 | 172 | #ifdef CONFIG_PPC64 |
173 | #define __DO_SIGN_EXTEND "extsw %0,%0\n" | 173 | #define __DO_SIGN_EXTEND "extsw %0,%0\n" |
@@ -181,7 +181,7 @@ extern void __raw_spin_unlock_wait(raw_spinlock_t *lock); | |||
181 | * This returns the old value in the lock + 1, | 181 | * This returns the old value in the lock + 1, |
182 | * so we got a read lock if the return value is > 0. | 182 | * so we got a read lock if the return value is > 0. |
183 | */ | 183 | */ |
184 | static inline long arch_read_trylock(raw_rwlock_t *rw) | 184 | static inline long __arch_read_trylock(arch_rwlock_t *rw) |
185 | { | 185 | { |
186 | long tmp; | 186 | long tmp; |
187 | 187 | ||
@@ -205,7 +205,7 @@ static inline long arch_read_trylock(raw_rwlock_t *rw) | |||
205 | * This returns the old value in the lock, | 205 | * This returns the old value in the lock, |
206 | * so we got the write lock if the return value is 0. | 206 | * so we got the write lock if the return value is 0. |
207 | */ | 207 | */ |
208 | static inline long arch_write_trylock(raw_rwlock_t *rw) | 208 | static inline long __arch_write_trylock(arch_rwlock_t *rw) |
209 | { | 209 | { |
210 | long tmp, token; | 210 | long tmp, token; |
211 | 211 | ||
@@ -225,10 +225,10 @@ static inline long arch_write_trylock(raw_rwlock_t *rw) | |||
225 | return tmp; | 225 | return tmp; |
226 | } | 226 | } |
227 | 227 | ||
228 | static inline void __raw_read_lock(raw_rwlock_t *rw) | 228 | static inline void arch_read_lock(arch_rwlock_t *rw) |
229 | { | 229 | { |
230 | while (1) { | 230 | while (1) { |
231 | if (likely(arch_read_trylock(rw) > 0)) | 231 | if (likely(__arch_read_trylock(rw) > 0)) |
232 | break; | 232 | break; |
233 | do { | 233 | do { |
234 | HMT_low(); | 234 | HMT_low(); |
@@ -239,10 +239,10 @@ static inline void __raw_read_lock(raw_rwlock_t *rw) | |||
239 | } | 239 | } |
240 | } | 240 | } |
241 | 241 | ||
242 | static inline void __raw_write_lock(raw_rwlock_t *rw) | 242 | static inline void arch_write_lock(arch_rwlock_t *rw) |
243 | { | 243 | { |
244 | while (1) { | 244 | while (1) { |
245 | if (likely(arch_write_trylock(rw) == 0)) | 245 | if (likely(__arch_write_trylock(rw) == 0)) |
246 | break; | 246 | break; |
247 | do { | 247 | do { |
248 | HMT_low(); | 248 | HMT_low(); |
@@ -253,17 +253,17 @@ static inline void __raw_write_lock(raw_rwlock_t *rw) | |||
253 | } | 253 | } |
254 | } | 254 | } |
255 | 255 | ||
256 | static inline int __raw_read_trylock(raw_rwlock_t *rw) | 256 | static inline int arch_read_trylock(arch_rwlock_t *rw) |
257 | { | 257 | { |
258 | return arch_read_trylock(rw) > 0; | 258 | return __arch_read_trylock(rw) > 0; |
259 | } | 259 | } |
260 | 260 | ||
261 | static inline int __raw_write_trylock(raw_rwlock_t *rw) | 261 | static inline int arch_write_trylock(arch_rwlock_t *rw) |
262 | { | 262 | { |
263 | return arch_write_trylock(rw) == 0; | 263 | return __arch_write_trylock(rw) == 0; |
264 | } | 264 | } |
265 | 265 | ||
266 | static inline void __raw_read_unlock(raw_rwlock_t *rw) | 266 | static inline void arch_read_unlock(arch_rwlock_t *rw) |
267 | { | 267 | { |
268 | long tmp; | 268 | long tmp; |
269 | 269 | ||
@@ -280,19 +280,19 @@ static inline void __raw_read_unlock(raw_rwlock_t *rw) | |||
280 | : "cr0", "xer", "memory"); | 280 | : "cr0", "xer", "memory"); |
281 | } | 281 | } |
282 | 282 | ||
283 | static inline void __raw_write_unlock(raw_rwlock_t *rw) | 283 | static inline void arch_write_unlock(arch_rwlock_t *rw) |
284 | { | 284 | { |
285 | __asm__ __volatile__("# write_unlock\n\t" | 285 | __asm__ __volatile__("# write_unlock\n\t" |
286 | LWSYNC_ON_SMP: : :"memory"); | 286 | LWSYNC_ON_SMP: : :"memory"); |
287 | rw->lock = 0; | 287 | rw->lock = 0; |
288 | } | 288 | } |
289 | 289 | ||
290 | #define __raw_read_lock_flags(lock, flags) __raw_read_lock(lock) | 290 | #define arch_read_lock_flags(lock, flags) arch_read_lock(lock) |
291 | #define __raw_write_lock_flags(lock, flags) __raw_write_lock(lock) | 291 | #define arch_write_lock_flags(lock, flags) arch_write_lock(lock) |
292 | 292 | ||
293 | #define _raw_spin_relax(lock) __spin_yield(lock) | 293 | #define arch_spin_relax(lock) __spin_yield(lock) |
294 | #define _raw_read_relax(lock) __rw_yield(lock) | 294 | #define arch_read_relax(lock) __rw_yield(lock) |
295 | #define _raw_write_relax(lock) __rw_yield(lock) | 295 | #define arch_write_relax(lock) __rw_yield(lock) |
296 | 296 | ||
297 | #endif /* __KERNEL__ */ | 297 | #endif /* __KERNEL__ */ |
298 | #endif /* __ASM_SPINLOCK_H */ | 298 | #endif /* __ASM_SPINLOCK_H */ |
diff --git a/arch/powerpc/include/asm/spinlock_types.h b/arch/powerpc/include/asm/spinlock_types.h index 74236c9f05b1..2351adc4fdc4 100644 --- a/arch/powerpc/include/asm/spinlock_types.h +++ b/arch/powerpc/include/asm/spinlock_types.h | |||
@@ -7,14 +7,14 @@ | |||
7 | 7 | ||
8 | typedef struct { | 8 | typedef struct { |
9 | volatile unsigned int slock; | 9 | volatile unsigned int slock; |
10 | } raw_spinlock_t; | 10 | } arch_spinlock_t; |
11 | 11 | ||
12 | #define __RAW_SPIN_LOCK_UNLOCKED { 0 } | 12 | #define __ARCH_SPIN_LOCK_UNLOCKED { 0 } |
13 | 13 | ||
14 | typedef struct { | 14 | typedef struct { |
15 | volatile signed int lock; | 15 | volatile signed int lock; |
16 | } raw_rwlock_t; | 16 | } arch_rwlock_t; |
17 | 17 | ||
18 | #define __RAW_RW_LOCK_UNLOCKED { 0 } | 18 | #define __ARCH_RW_LOCK_UNLOCKED { 0 } |
19 | 19 | ||
20 | #endif | 20 | #endif |
diff --git a/arch/powerpc/include/asm/udbg.h b/arch/powerpc/include/asm/udbg.h index cd21e5e6b04f..11ae699135ba 100644 --- a/arch/powerpc/include/asm/udbg.h +++ b/arch/powerpc/include/asm/udbg.h | |||
@@ -51,6 +51,7 @@ extern void __init udbg_init_btext(void); | |||
51 | extern void __init udbg_init_44x_as1(void); | 51 | extern void __init udbg_init_44x_as1(void); |
52 | extern void __init udbg_init_40x_realmode(void); | 52 | extern void __init udbg_init_40x_realmode(void); |
53 | extern void __init udbg_init_cpm(void); | 53 | extern void __init udbg_init_cpm(void); |
54 | extern void __init udbg_init_usbgecko(void); | ||
54 | 55 | ||
55 | #endif /* __KERNEL__ */ | 56 | #endif /* __KERNEL__ */ |
56 | #endif /* _ASM_POWERPC_UDBG_H */ | 57 | #endif /* _ASM_POWERPC_UDBG_H */ |
diff --git a/arch/powerpc/kernel/align.c b/arch/powerpc/kernel/align.c index 3839839f83c7..b876e989220b 100644 --- a/arch/powerpc/kernel/align.c +++ b/arch/powerpc/kernel/align.c | |||
@@ -642,10 +642,14 @@ static int emulate_spe(struct pt_regs *regs, unsigned int reg, | |||
642 | */ | 642 | */ |
643 | static int emulate_vsx(unsigned char __user *addr, unsigned int reg, | 643 | static int emulate_vsx(unsigned char __user *addr, unsigned int reg, |
644 | unsigned int areg, struct pt_regs *regs, | 644 | unsigned int areg, struct pt_regs *regs, |
645 | unsigned int flags, unsigned int length) | 645 | unsigned int flags, unsigned int length, |
646 | unsigned int elsize) | ||
646 | { | 647 | { |
647 | char *ptr; | 648 | char *ptr; |
649 | unsigned long *lptr; | ||
648 | int ret = 0; | 650 | int ret = 0; |
651 | int sw = 0; | ||
652 | int i, j; | ||
649 | 653 | ||
650 | flush_vsx_to_thread(current); | 654 | flush_vsx_to_thread(current); |
651 | 655 | ||
@@ -654,19 +658,35 @@ static int emulate_vsx(unsigned char __user *addr, unsigned int reg, | |||
654 | else | 658 | else |
655 | ptr = (char *) ¤t->thread.vr[reg - 32]; | 659 | ptr = (char *) ¤t->thread.vr[reg - 32]; |
656 | 660 | ||
657 | if (flags & ST) | 661 | lptr = (unsigned long *) ptr; |
658 | ret = __copy_to_user(addr, ptr, length); | 662 | |
659 | else { | 663 | if (flags & SW) |
660 | if (flags & SPLT){ | 664 | sw = elsize-1; |
661 | ret = __copy_from_user(ptr, addr, length); | 665 | |
662 | ptr += length; | 666 | for (j = 0; j < length; j += elsize) { |
667 | for (i = 0; i < elsize; ++i) { | ||
668 | if (flags & ST) | ||
669 | ret |= __put_user(ptr[i^sw], addr + i); | ||
670 | else | ||
671 | ret |= __get_user(ptr[i^sw], addr + i); | ||
663 | } | 672 | } |
664 | ret |= __copy_from_user(ptr, addr, length); | 673 | ptr += elsize; |
674 | addr += elsize; | ||
665 | } | 675 | } |
666 | if (flags & U) | 676 | |
667 | regs->gpr[areg] = regs->dar; | 677 | if (!ret) { |
668 | if (ret) | 678 | if (flags & U) |
679 | regs->gpr[areg] = regs->dar; | ||
680 | |||
681 | /* Splat load copies the same data to top and bottom 8 bytes */ | ||
682 | if (flags & SPLT) | ||
683 | lptr[1] = lptr[0]; | ||
684 | /* For 8 byte loads, zero the top 8 bytes */ | ||
685 | else if (!(flags & ST) && (8 == length)) | ||
686 | lptr[1] = 0; | ||
687 | } else | ||
669 | return -EFAULT; | 688 | return -EFAULT; |
689 | |||
670 | return 1; | 690 | return 1; |
671 | } | 691 | } |
672 | #endif | 692 | #endif |
@@ -767,16 +787,25 @@ int fix_alignment(struct pt_regs *regs) | |||
767 | 787 | ||
768 | #ifdef CONFIG_VSX | 788 | #ifdef CONFIG_VSX |
769 | if ((instruction & 0xfc00003e) == 0x7c000018) { | 789 | if ((instruction & 0xfc00003e) == 0x7c000018) { |
770 | /* Additional register addressing bit (64 VSX vs 32 FPR/GPR */ | 790 | unsigned int elsize; |
791 | |||
792 | /* Additional register addressing bit (64 VSX vs 32 FPR/GPR) */ | ||
771 | reg |= (instruction & 0x1) << 5; | 793 | reg |= (instruction & 0x1) << 5; |
772 | /* Simple inline decoder instead of a table */ | 794 | /* Simple inline decoder instead of a table */ |
795 | /* VSX has only 8 and 16 byte memory accesses */ | ||
796 | nb = 8; | ||
773 | if (instruction & 0x200) | 797 | if (instruction & 0x200) |
774 | nb = 16; | 798 | nb = 16; |
775 | else if (instruction & 0x080) | 799 | |
776 | nb = 8; | 800 | /* Vector stores in little-endian mode swap individual |
777 | else | 801 | elements, so process them separately */ |
778 | nb = 4; | 802 | elsize = 4; |
803 | if (instruction & 0x80) | ||
804 | elsize = 8; | ||
805 | |||
779 | flags = 0; | 806 | flags = 0; |
807 | if (regs->msr & MSR_LE) | ||
808 | flags |= SW; | ||
780 | if (instruction & 0x100) | 809 | if (instruction & 0x100) |
781 | flags |= ST; | 810 | flags |= ST; |
782 | if (instruction & 0x040) | 811 | if (instruction & 0x040) |
@@ -787,7 +816,7 @@ int fix_alignment(struct pt_regs *regs) | |||
787 | nb = 8; | 816 | nb = 8; |
788 | } | 817 | } |
789 | PPC_WARN_ALIGNMENT(vsx, regs); | 818 | PPC_WARN_ALIGNMENT(vsx, regs); |
790 | return emulate_vsx(addr, reg, areg, regs, flags, nb); | 819 | return emulate_vsx(addr, reg, areg, regs, flags, nb, elsize); |
791 | } | 820 | } |
792 | #endif | 821 | #endif |
793 | /* A size of 0 indicates an instruction we don't support, with | 822 | /* A size of 0 indicates an instruction we don't support, with |
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c index 03c862b6a9c4..2fc82bac3bbc 100644 --- a/arch/powerpc/kernel/cputable.c +++ b/arch/powerpc/kernel/cputable.c | |||
@@ -697,9 +697,9 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
697 | .machine_check = machine_check_generic, | 697 | .machine_check = machine_check_generic, |
698 | .platform = "ppc750", | 698 | .platform = "ppc750", |
699 | }, | 699 | }, |
700 | { /* 750CL */ | 700 | { /* 750CL (and "Broadway") */ |
701 | .pvr_mask = 0xfffff0f0, | 701 | .pvr_mask = 0xfffff0e0, |
702 | .pvr_value = 0x00087010, | 702 | .pvr_value = 0x00087000, |
703 | .cpu_name = "750CL", | 703 | .cpu_name = "750CL", |
704 | .cpu_features = CPU_FTRS_750CL, | 704 | .cpu_features = CPU_FTRS_750CL, |
705 | .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE, | 705 | .cpu_user_features = COMMON_USER | PPC_FEATURE_PPC_LE, |
diff --git a/arch/powerpc/kernel/head_32.S b/arch/powerpc/kernel/head_32.S index 829c3fe7c5a2..e025e89fe93e 100644 --- a/arch/powerpc/kernel/head_32.S +++ b/arch/powerpc/kernel/head_32.S | |||
@@ -164,6 +164,9 @@ __after_mmu_off: | |||
164 | #ifdef CONFIG_PPC_EARLY_DEBUG_CPM | 164 | #ifdef CONFIG_PPC_EARLY_DEBUG_CPM |
165 | bl setup_cpm_bat | 165 | bl setup_cpm_bat |
166 | #endif | 166 | #endif |
167 | #ifdef CONFIG_PPC_EARLY_DEBUG_USBGECKO | ||
168 | bl setup_usbgecko_bat | ||
169 | #endif | ||
167 | 170 | ||
168 | /* | 171 | /* |
169 | * Call setup_cpu for CPU 0 and initialize 6xx Idle | 172 | * Call setup_cpu for CPU 0 and initialize 6xx Idle |
@@ -1203,6 +1206,28 @@ setup_cpm_bat: | |||
1203 | blr | 1206 | blr |
1204 | #endif | 1207 | #endif |
1205 | 1208 | ||
1209 | #ifdef CONFIG_PPC_EARLY_DEBUG_USBGECKO | ||
1210 | setup_usbgecko_bat: | ||
1211 | /* prepare a BAT for early io */ | ||
1212 | #if defined(CONFIG_GAMECUBE) | ||
1213 | lis r8, 0x0c00 | ||
1214 | #elif defined(CONFIG_WII) | ||
1215 | lis r8, 0x0d00 | ||
1216 | #else | ||
1217 | #error Invalid platform for USB Gecko based early debugging. | ||
1218 | #endif | ||
1219 | /* | ||
1220 | * The virtual address used must match the virtual address | ||
1221 | * associated to the fixmap entry FIX_EARLY_DEBUG_BASE. | ||
1222 | */ | ||
1223 | lis r11, 0xfffe /* top 128K */ | ||
1224 | ori r8, r8, 0x002a /* uncached, guarded ,rw */ | ||
1225 | ori r11, r11, 0x2 /* 128K, Vs=1, Vp=0 */ | ||
1226 | mtspr SPRN_DBAT1L, r8 | ||
1227 | mtspr SPRN_DBAT1U, r11 | ||
1228 | blr | ||
1229 | #endif | ||
1230 | |||
1206 | #ifdef CONFIG_8260 | 1231 | #ifdef CONFIG_8260 |
1207 | /* Jump into the system reset for the rom. | 1232 | /* Jump into the system reset for the rom. |
1208 | * We first disable the MMU, and then jump to the ROM reset address. | 1233 | * We first disable the MMU, and then jump to the ROM reset address. |
diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c index fd51578e29dd..5547ae6e6b0b 100644 --- a/arch/powerpc/kernel/iommu.c +++ b/arch/powerpc/kernel/iommu.c | |||
@@ -30,7 +30,7 @@ | |||
30 | #include <linux/spinlock.h> | 30 | #include <linux/spinlock.h> |
31 | #include <linux/string.h> | 31 | #include <linux/string.h> |
32 | #include <linux/dma-mapping.h> | 32 | #include <linux/dma-mapping.h> |
33 | #include <linux/bitops.h> | 33 | #include <linux/bitmap.h> |
34 | #include <linux/iommu-helper.h> | 34 | #include <linux/iommu-helper.h> |
35 | #include <linux/crash_dump.h> | 35 | #include <linux/crash_dump.h> |
36 | #include <asm/io.h> | 36 | #include <asm/io.h> |
@@ -251,7 +251,7 @@ static void __iommu_free(struct iommu_table *tbl, dma_addr_t dma_addr, | |||
251 | } | 251 | } |
252 | 252 | ||
253 | ppc_md.tce_free(tbl, entry, npages); | 253 | ppc_md.tce_free(tbl, entry, npages); |
254 | iommu_area_free(tbl->it_map, free_entry, npages); | 254 | bitmap_clear(tbl->it_map, free_entry, npages); |
255 | } | 255 | } |
256 | 256 | ||
257 | static void iommu_free(struct iommu_table *tbl, dma_addr_t dma_addr, | 257 | static void iommu_free(struct iommu_table *tbl, dma_addr_t dma_addr, |
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c index f6dca4f4b295..9040330b0530 100644 --- a/arch/powerpc/kernel/irq.c +++ b/arch/powerpc/kernel/irq.c | |||
@@ -210,7 +210,7 @@ int show_interrupts(struct seq_file *p, void *v) | |||
210 | if (!desc) | 210 | if (!desc) |
211 | return 0; | 211 | return 0; |
212 | 212 | ||
213 | spin_lock_irqsave(&desc->lock, flags); | 213 | raw_spin_lock_irqsave(&desc->lock, flags); |
214 | 214 | ||
215 | action = desc->action; | 215 | action = desc->action; |
216 | if (!action || !action->handler) | 216 | if (!action || !action->handler) |
@@ -237,7 +237,7 @@ int show_interrupts(struct seq_file *p, void *v) | |||
237 | seq_putc(p, '\n'); | 237 | seq_putc(p, '\n'); |
238 | 238 | ||
239 | skip: | 239 | skip: |
240 | spin_unlock_irqrestore(&desc->lock, flags); | 240 | raw_spin_unlock_irqrestore(&desc->lock, flags); |
241 | 241 | ||
242 | return 0; | 242 | return 0; |
243 | } | 243 | } |
@@ -1112,7 +1112,7 @@ static int virq_debug_show(struct seq_file *m, void *private) | |||
1112 | if (!desc) | 1112 | if (!desc) |
1113 | continue; | 1113 | continue; |
1114 | 1114 | ||
1115 | spin_lock_irqsave(&desc->lock, flags); | 1115 | raw_spin_lock_irqsave(&desc->lock, flags); |
1116 | 1116 | ||
1117 | if (desc->action && desc->action->handler) { | 1117 | if (desc->action && desc->action->handler) { |
1118 | seq_printf(m, "%5d ", i); | 1118 | seq_printf(m, "%5d ", i); |
@@ -1131,7 +1131,7 @@ static int virq_debug_show(struct seq_file *m, void *private) | |||
1131 | seq_printf(m, "%s\n", p); | 1131 | seq_printf(m, "%s\n", p); |
1132 | } | 1132 | } |
1133 | 1133 | ||
1134 | spin_unlock_irqrestore(&desc->lock, flags); | 1134 | raw_spin_unlock_irqrestore(&desc->lock, flags); |
1135 | } | 1135 | } |
1136 | 1136 | ||
1137 | return 0; | 1137 | return 0; |
diff --git a/arch/powerpc/kernel/kgdb.c b/arch/powerpc/kernel/kgdb.c index 641c74bb8e27..b6bd1eaa1c24 100644 --- a/arch/powerpc/kernel/kgdb.c +++ b/arch/powerpc/kernel/kgdb.c | |||
@@ -52,7 +52,7 @@ static struct hard_trap_info | |||
52 | { 0x2030, 0x08 /* SIGFPE */ }, /* spe fp data */ | 52 | { 0x2030, 0x08 /* SIGFPE */ }, /* spe fp data */ |
53 | { 0x2040, 0x08 /* SIGFPE */ }, /* spe fp data */ | 53 | { 0x2040, 0x08 /* SIGFPE */ }, /* spe fp data */ |
54 | { 0x2050, 0x08 /* SIGFPE */ }, /* spe fp round */ | 54 | { 0x2050, 0x08 /* SIGFPE */ }, /* spe fp round */ |
55 | { 0x2060, 0x0e /* SIGILL */ }, /* performace monitor */ | 55 | { 0x2060, 0x0e /* SIGILL */ }, /* performance monitor */ |
56 | { 0x2900, 0x08 /* SIGFPE */ }, /* apu unavailable */ | 56 | { 0x2900, 0x08 /* SIGFPE */ }, /* apu unavailable */ |
57 | { 0x3100, 0x0e /* SIGALRM */ }, /* fixed interval timer */ | 57 | { 0x3100, 0x0e /* SIGALRM */ }, /* fixed interval timer */ |
58 | { 0x3200, 0x02 /* SIGINT */ }, /* watchdog */ | 58 | { 0x3200, 0x02 /* SIGINT */ }, /* watchdog */ |
diff --git a/arch/powerpc/kernel/perf_callchain.c b/arch/powerpc/kernel/perf_callchain.c index 936f04dbfc6f..a3c11cac3d71 100644 --- a/arch/powerpc/kernel/perf_callchain.c +++ b/arch/powerpc/kernel/perf_callchain.c | |||
@@ -487,11 +487,11 @@ static void perf_callchain_user_32(struct pt_regs *regs, | |||
487 | * Since we can't get PMU interrupts inside a PMU interrupt handler, | 487 | * Since we can't get PMU interrupts inside a PMU interrupt handler, |
488 | * we don't need separate irq and nmi entries here. | 488 | * we don't need separate irq and nmi entries here. |
489 | */ | 489 | */ |
490 | static DEFINE_PER_CPU(struct perf_callchain_entry, callchain); | 490 | static DEFINE_PER_CPU(struct perf_callchain_entry, cpu_perf_callchain); |
491 | 491 | ||
492 | struct perf_callchain_entry *perf_callchain(struct pt_regs *regs) | 492 | struct perf_callchain_entry *perf_callchain(struct pt_regs *regs) |
493 | { | 493 | { |
494 | struct perf_callchain_entry *entry = &__get_cpu_var(callchain); | 494 | struct perf_callchain_entry *entry = &__get_cpu_var(cpu_perf_callchain); |
495 | 495 | ||
496 | entry->nr = 0; | 496 | entry->nr = 0; |
497 | 497 | ||
diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c index bf90361bb70f..fd0d29493fd6 100644 --- a/arch/powerpc/kernel/rtas.c +++ b/arch/powerpc/kernel/rtas.c | |||
@@ -42,7 +42,7 @@ | |||
42 | #include <asm/mmu.h> | 42 | #include <asm/mmu.h> |
43 | 43 | ||
44 | struct rtas_t rtas = { | 44 | struct rtas_t rtas = { |
45 | .lock = __RAW_SPIN_LOCK_UNLOCKED | 45 | .lock = __ARCH_SPIN_LOCK_UNLOCKED |
46 | }; | 46 | }; |
47 | EXPORT_SYMBOL(rtas); | 47 | EXPORT_SYMBOL(rtas); |
48 | 48 | ||
@@ -80,13 +80,13 @@ static unsigned long lock_rtas(void) | |||
80 | 80 | ||
81 | local_irq_save(flags); | 81 | local_irq_save(flags); |
82 | preempt_disable(); | 82 | preempt_disable(); |
83 | __raw_spin_lock_flags(&rtas.lock, flags); | 83 | arch_spin_lock_flags(&rtas.lock, flags); |
84 | return flags; | 84 | return flags; |
85 | } | 85 | } |
86 | 86 | ||
87 | static void unlock_rtas(unsigned long flags) | 87 | static void unlock_rtas(unsigned long flags) |
88 | { | 88 | { |
89 | __raw_spin_unlock(&rtas.lock); | 89 | arch_spin_unlock(&rtas.lock); |
90 | local_irq_restore(flags); | 90 | local_irq_restore(flags); |
91 | preempt_enable(); | 91 | preempt_enable(); |
92 | } | 92 | } |
@@ -978,7 +978,7 @@ int __init early_init_dt_scan_rtas(unsigned long node, | |||
978 | return 1; | 978 | return 1; |
979 | } | 979 | } |
980 | 980 | ||
981 | static raw_spinlock_t timebase_lock; | 981 | static arch_spinlock_t timebase_lock; |
982 | static u64 timebase = 0; | 982 | static u64 timebase = 0; |
983 | 983 | ||
984 | void __cpuinit rtas_give_timebase(void) | 984 | void __cpuinit rtas_give_timebase(void) |
@@ -987,10 +987,10 @@ void __cpuinit rtas_give_timebase(void) | |||
987 | 987 | ||
988 | local_irq_save(flags); | 988 | local_irq_save(flags); |
989 | hard_irq_disable(); | 989 | hard_irq_disable(); |
990 | __raw_spin_lock(&timebase_lock); | 990 | arch_spin_lock(&timebase_lock); |
991 | rtas_call(rtas_token("freeze-time-base"), 0, 1, NULL); | 991 | rtas_call(rtas_token("freeze-time-base"), 0, 1, NULL); |
992 | timebase = get_tb(); | 992 | timebase = get_tb(); |
993 | __raw_spin_unlock(&timebase_lock); | 993 | arch_spin_unlock(&timebase_lock); |
994 | 994 | ||
995 | while (timebase) | 995 | while (timebase) |
996 | barrier(); | 996 | barrier(); |
@@ -1002,8 +1002,8 @@ void __cpuinit rtas_take_timebase(void) | |||
1002 | { | 1002 | { |
1003 | while (!timebase) | 1003 | while (!timebase) |
1004 | barrier(); | 1004 | barrier(); |
1005 | __raw_spin_lock(&timebase_lock); | 1005 | arch_spin_lock(&timebase_lock); |
1006 | set_tb(timebase >> 32, timebase & 0xffffffff); | 1006 | set_tb(timebase >> 32, timebase & 0xffffffff); |
1007 | timebase = 0; | 1007 | timebase = 0; |
1008 | __raw_spin_unlock(&timebase_lock); | 1008 | arch_spin_unlock(&timebase_lock); |
1009 | } | 1009 | } |
diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c index 845c72ab7357..03dd6a248198 100644 --- a/arch/powerpc/kernel/setup-common.c +++ b/arch/powerpc/kernel/setup-common.c | |||
@@ -157,7 +157,7 @@ extern u32 cpu_temp_both(unsigned long cpu); | |||
157 | #endif /* CONFIG_TAU */ | 157 | #endif /* CONFIG_TAU */ |
158 | 158 | ||
159 | #ifdef CONFIG_SMP | 159 | #ifdef CONFIG_SMP |
160 | DEFINE_PER_CPU(unsigned int, pvr); | 160 | DEFINE_PER_CPU(unsigned int, cpu_pvr); |
161 | #endif | 161 | #endif |
162 | 162 | ||
163 | static int show_cpuinfo(struct seq_file *m, void *v) | 163 | static int show_cpuinfo(struct seq_file *m, void *v) |
@@ -209,7 +209,7 @@ static int show_cpuinfo(struct seq_file *m, void *v) | |||
209 | } | 209 | } |
210 | 210 | ||
211 | #ifdef CONFIG_SMP | 211 | #ifdef CONFIG_SMP |
212 | pvr = per_cpu(pvr, cpu_id); | 212 | pvr = per_cpu(cpu_pvr, cpu_id); |
213 | #else | 213 | #else |
214 | pvr = mfspr(SPRN_PVR); | 214 | pvr = mfspr(SPRN_PVR); |
215 | #endif | 215 | #endif |
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c index 97196eefef3e..a521fb8a40ee 100644 --- a/arch/powerpc/kernel/smp.c +++ b/arch/powerpc/kernel/smp.c | |||
@@ -235,7 +235,7 @@ struct thread_info *current_set[NR_CPUS]; | |||
235 | 235 | ||
236 | static void __devinit smp_store_cpu_info(int id) | 236 | static void __devinit smp_store_cpu_info(int id) |
237 | { | 237 | { |
238 | per_cpu(pvr, id) = mfspr(SPRN_PVR); | 238 | per_cpu(cpu_pvr, id) = mfspr(SPRN_PVR); |
239 | } | 239 | } |
240 | 240 | ||
241 | static void __init smp_create_idle(unsigned int cpu) | 241 | static void __init smp_create_idle(unsigned int cpu) |
diff --git a/arch/powerpc/kernel/syscalls.c b/arch/powerpc/kernel/syscalls.c index c04832c4a02e..3370e62e43d4 100644 --- a/arch/powerpc/kernel/syscalls.c +++ b/arch/powerpc/kernel/syscalls.c | |||
@@ -140,7 +140,6 @@ static inline unsigned long do_mmap2(unsigned long addr, size_t len, | |||
140 | unsigned long prot, unsigned long flags, | 140 | unsigned long prot, unsigned long flags, |
141 | unsigned long fd, unsigned long off, int shift) | 141 | unsigned long fd, unsigned long off, int shift) |
142 | { | 142 | { |
143 | struct file * file = NULL; | ||
144 | unsigned long ret = -EINVAL; | 143 | unsigned long ret = -EINVAL; |
145 | 144 | ||
146 | if (!arch_validate_prot(prot)) | 145 | if (!arch_validate_prot(prot)) |
@@ -151,20 +150,8 @@ static inline unsigned long do_mmap2(unsigned long addr, size_t len, | |||
151 | goto out; | 150 | goto out; |
152 | off >>= shift; | 151 | off >>= shift; |
153 | } | 152 | } |
154 | |||
155 | ret = -EBADF; | ||
156 | if (!(flags & MAP_ANONYMOUS)) { | ||
157 | if (!(file = fget(fd))) | ||
158 | goto out; | ||
159 | } | ||
160 | |||
161 | flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); | ||
162 | 153 | ||
163 | down_write(¤t->mm->mmap_sem); | 154 | ret = sys_mmap_pgoff(addr, len, prot, flags, fd, off); |
164 | ret = do_mmap_pgoff(file, addr, len, prot, flags, off); | ||
165 | up_write(¤t->mm->mmap_sem); | ||
166 | if (file) | ||
167 | fput(file); | ||
168 | out: | 155 | out: |
169 | return ret; | 156 | return ret; |
170 | } | 157 | } |
diff --git a/arch/powerpc/kernel/tau_6xx.c b/arch/powerpc/kernel/tau_6xx.c index c3a56d65c5a9..a753b72efbc0 100644 --- a/arch/powerpc/kernel/tau_6xx.c +++ b/arch/powerpc/kernel/tau_6xx.c | |||
@@ -59,7 +59,7 @@ void set_thresholds(unsigned long cpu) | |||
59 | mtspr(SPRN_THRM1, THRM1_THRES(tau[cpu].low) | THRM1_V | THRM1_TIE | THRM1_TID); | 59 | mtspr(SPRN_THRM1, THRM1_THRES(tau[cpu].low) | THRM1_V | THRM1_TIE | THRM1_TID); |
60 | 60 | ||
61 | /* setup THRM2, | 61 | /* setup THRM2, |
62 | * threshold, valid bit, enable interrupts, interrupt when above threshhold | 62 | * threshold, valid bit, enable interrupts, interrupt when above threshold |
63 | */ | 63 | */ |
64 | mtspr (SPRN_THRM2, THRM1_THRES(tau[cpu].high) | THRM1_V | THRM1_TIE); | 64 | mtspr (SPRN_THRM2, THRM1_THRES(tau[cpu].high) | THRM1_V | THRM1_TIE); |
65 | #else | 65 | #else |
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c index e9af16cc7c0c..9ba2cc88591d 100644 --- a/arch/powerpc/kernel/time.c +++ b/arch/powerpc/kernel/time.c | |||
@@ -835,7 +835,8 @@ static cycle_t timebase_read(struct clocksource *cs) | |||
835 | return (cycle_t)get_tb(); | 835 | return (cycle_t)get_tb(); |
836 | } | 836 | } |
837 | 837 | ||
838 | void update_vsyscall(struct timespec *wall_time, struct clocksource *clock) | 838 | void update_vsyscall(struct timespec *wall_time, struct clocksource *clock, |
839 | u32 mult) | ||
839 | { | 840 | { |
840 | u64 t2x, stamp_xsec; | 841 | u64 t2x, stamp_xsec; |
841 | 842 | ||
@@ -848,7 +849,7 @@ void update_vsyscall(struct timespec *wall_time, struct clocksource *clock) | |||
848 | 849 | ||
849 | /* XXX this assumes clock->shift == 22 */ | 850 | /* XXX this assumes clock->shift == 22 */ |
850 | /* 4611686018 ~= 2^(20+64-22) / 1e9 */ | 851 | /* 4611686018 ~= 2^(20+64-22) / 1e9 */ |
851 | t2x = (u64) clock->mult * 4611686018ULL; | 852 | t2x = (u64) mult * 4611686018ULL; |
852 | stamp_xsec = (u64) xtime.tv_nsec * XSEC_PER_SEC; | 853 | stamp_xsec = (u64) xtime.tv_nsec * XSEC_PER_SEC; |
853 | do_div(stamp_xsec, 1000000000); | 854 | do_div(stamp_xsec, 1000000000); |
854 | stamp_xsec += (u64) xtime.tv_sec * XSEC_PER_SEC; | 855 | stamp_xsec += (u64) xtime.tv_sec * XSEC_PER_SEC; |
@@ -925,7 +926,7 @@ static void register_decrementer_clockevent(int cpu) | |||
925 | *dec = decrementer_clockevent; | 926 | *dec = decrementer_clockevent; |
926 | dec->cpumask = cpumask_of(cpu); | 927 | dec->cpumask = cpumask_of(cpu); |
927 | 928 | ||
928 | printk(KERN_DEBUG "clockevent: %s mult[%lx] shift[%d] cpu[%d]\n", | 929 | printk(KERN_DEBUG "clockevent: %s mult[%x] shift[%d] cpu[%d]\n", |
929 | dec->name, dec->mult, dec->shift, cpu); | 930 | dec->name, dec->mult, dec->shift, cpu); |
930 | 931 | ||
931 | clockevents_register_device(dec); | 932 | clockevents_register_device(dec); |
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index 804f0f30f227..d069ff8a7e03 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c | |||
@@ -174,6 +174,15 @@ int die(const char *str, struct pt_regs *regs, long err) | |||
174 | return 0; | 174 | return 0; |
175 | } | 175 | } |
176 | 176 | ||
177 | void user_single_step_siginfo(struct task_struct *tsk, | ||
178 | struct pt_regs *regs, siginfo_t *info) | ||
179 | { | ||
180 | memset(info, 0, sizeof(*info)); | ||
181 | info->si_signo = SIGTRAP; | ||
182 | info->si_code = TRAP_TRACE; | ||
183 | info->si_addr = (void __user *)regs->nip; | ||
184 | } | ||
185 | |||
177 | void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr) | 186 | void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr) |
178 | { | 187 | { |
179 | siginfo_t info; | 188 | siginfo_t info; |
diff --git a/arch/powerpc/kernel/udbg.c b/arch/powerpc/kernel/udbg.c index fc9af47e2128..e39cad83c884 100644 --- a/arch/powerpc/kernel/udbg.c +++ b/arch/powerpc/kernel/udbg.c | |||
@@ -60,6 +60,8 @@ void __init udbg_early_init(void) | |||
60 | udbg_init_40x_realmode(); | 60 | udbg_init_40x_realmode(); |
61 | #elif defined(CONFIG_PPC_EARLY_DEBUG_CPM) | 61 | #elif defined(CONFIG_PPC_EARLY_DEBUG_CPM) |
62 | udbg_init_cpm(); | 62 | udbg_init_cpm(); |
63 | #elif defined(CONFIG_PPC_EARLY_DEBUG_USBGECKO) | ||
64 | udbg_init_usbgecko(); | ||
63 | #endif | 65 | #endif |
64 | 66 | ||
65 | #ifdef CONFIG_PPC_EARLY_DEBUG | 67 | #ifdef CONFIG_PPC_EARLY_DEBUG |
diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c index 137dc22afa42..d84d19224a95 100644 --- a/arch/powerpc/kernel/vdso.c +++ b/arch/powerpc/kernel/vdso.c | |||
@@ -721,7 +721,7 @@ static int __init vdso_init(void) | |||
721 | 721 | ||
722 | #ifdef CONFIG_PPC64 | 722 | #ifdef CONFIG_PPC64 |
723 | /* | 723 | /* |
724 | * Fill up the "systemcfg" stuff for backward compatiblity | 724 | * Fill up the "systemcfg" stuff for backward compatibility |
725 | */ | 725 | */ |
726 | strcpy((char *)vdso_data->eye_catcher, "SYSTEMCFG:PPC64"); | 726 | strcpy((char *)vdso_data->eye_catcher, "SYSTEMCFG:PPC64"); |
727 | vdso_data->version.major = SYSTEMCFG_MAJOR; | 727 | vdso_data->version.major = SYSTEMCFG_MAJOR; |
diff --git a/arch/powerpc/kernel/vmlinux.lds.S b/arch/powerpc/kernel/vmlinux.lds.S index 27735a7ac12b..dcd01c82e701 100644 --- a/arch/powerpc/kernel/vmlinux.lds.S +++ b/arch/powerpc/kernel/vmlinux.lds.S | |||
@@ -38,6 +38,9 @@ jiffies = jiffies_64 + 4; | |||
38 | #endif | 38 | #endif |
39 | SECTIONS | 39 | SECTIONS |
40 | { | 40 | { |
41 | . = 0; | ||
42 | reloc_start = .; | ||
43 | |||
41 | . = KERNELBASE; | 44 | . = KERNELBASE; |
42 | 45 | ||
43 | /* | 46 | /* |
diff --git a/arch/powerpc/lib/locks.c b/arch/powerpc/lib/locks.c index 79d0fa3a470d..58e14fba11b1 100644 --- a/arch/powerpc/lib/locks.c +++ b/arch/powerpc/lib/locks.c | |||
@@ -25,7 +25,7 @@ | |||
25 | #include <asm/smp.h> | 25 | #include <asm/smp.h> |
26 | #include <asm/firmware.h> | 26 | #include <asm/firmware.h> |
27 | 27 | ||
28 | void __spin_yield(raw_spinlock_t *lock) | 28 | void __spin_yield(arch_spinlock_t *lock) |
29 | { | 29 | { |
30 | unsigned int lock_value, holder_cpu, yield_count; | 30 | unsigned int lock_value, holder_cpu, yield_count; |
31 | 31 | ||
@@ -55,7 +55,7 @@ void __spin_yield(raw_spinlock_t *lock) | |||
55 | * This turns out to be the same for read and write locks, since | 55 | * This turns out to be the same for read and write locks, since |
56 | * we only know the holder if it is write-locked. | 56 | * we only know the holder if it is write-locked. |
57 | */ | 57 | */ |
58 | void __rw_yield(raw_rwlock_t *rw) | 58 | void __rw_yield(arch_rwlock_t *rw) |
59 | { | 59 | { |
60 | int lock_value; | 60 | int lock_value; |
61 | unsigned int holder_cpu, yield_count; | 61 | unsigned int holder_cpu, yield_count; |
@@ -82,7 +82,7 @@ void __rw_yield(raw_rwlock_t *rw) | |||
82 | } | 82 | } |
83 | #endif | 83 | #endif |
84 | 84 | ||
85 | void __raw_spin_unlock_wait(raw_spinlock_t *lock) | 85 | void arch_spin_unlock_wait(arch_spinlock_t *lock) |
86 | { | 86 | { |
87 | while (lock->slock) { | 87 | while (lock->slock) { |
88 | HMT_low(); | 88 | HMT_low(); |
@@ -92,4 +92,4 @@ void __raw_spin_unlock_wait(raw_spinlock_t *lock) | |||
92 | HMT_medium(); | 92 | HMT_medium(); |
93 | } | 93 | } |
94 | 94 | ||
95 | EXPORT_SYMBOL(__raw_spin_unlock_wait); | 95 | EXPORT_SYMBOL(arch_spin_unlock_wait); |
diff --git a/arch/powerpc/mm/40x_mmu.c b/arch/powerpc/mm/40x_mmu.c index f5e7b9ce63dd..08dfa8e6d86f 100644 --- a/arch/powerpc/mm/40x_mmu.c +++ b/arch/powerpc/mm/40x_mmu.c | |||
@@ -91,7 +91,7 @@ void __init MMU_init_hw(void) | |||
91 | #define LARGE_PAGE_SIZE_16M (1<<24) | 91 | #define LARGE_PAGE_SIZE_16M (1<<24) |
92 | #define LARGE_PAGE_SIZE_4M (1<<22) | 92 | #define LARGE_PAGE_SIZE_4M (1<<22) |
93 | 93 | ||
94 | unsigned long __init mmu_mapin_ram(void) | 94 | unsigned long __init mmu_mapin_ram(unsigned long top) |
95 | { | 95 | { |
96 | unsigned long v, s, mapped; | 96 | unsigned long v, s, mapped; |
97 | phys_addr_t p; | 97 | phys_addr_t p; |
diff --git a/arch/powerpc/mm/44x_mmu.c b/arch/powerpc/mm/44x_mmu.c index 98052ac96580..3986264b0993 100644 --- a/arch/powerpc/mm/44x_mmu.c +++ b/arch/powerpc/mm/44x_mmu.c | |||
@@ -88,7 +88,7 @@ void __init MMU_init_hw(void) | |||
88 | flush_instruction_cache(); | 88 | flush_instruction_cache(); |
89 | } | 89 | } |
90 | 90 | ||
91 | unsigned long __init mmu_mapin_ram(void) | 91 | unsigned long __init mmu_mapin_ram(unsigned long top) |
92 | { | 92 | { |
93 | unsigned long addr; | 93 | unsigned long addr; |
94 | 94 | ||
diff --git a/arch/powerpc/mm/fsl_booke_mmu.c b/arch/powerpc/mm/fsl_booke_mmu.c index fcfcb6e976c7..c5394728bf2e 100644 --- a/arch/powerpc/mm/fsl_booke_mmu.c +++ b/arch/powerpc/mm/fsl_booke_mmu.c | |||
@@ -207,7 +207,7 @@ unsigned long map_mem_in_cams(unsigned long ram, int max_cam_idx) | |||
207 | return amount_mapped; | 207 | return amount_mapped; |
208 | } | 208 | } |
209 | 209 | ||
210 | unsigned long __init mmu_mapin_ram(void) | 210 | unsigned long __init mmu_mapin_ram(unsigned long top) |
211 | { | 211 | { |
212 | return tlbcam_addrs[tlbcam_index - 1].limit - PAGE_OFFSET + 1; | 212 | return tlbcam_addrs[tlbcam_index - 1].limit - PAGE_OFFSET + 1; |
213 | } | 213 | } |
diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c index 50f867d657df..3ecdcec0a39e 100644 --- a/arch/powerpc/mm/hash_utils_64.c +++ b/arch/powerpc/mm/hash_utils_64.c | |||
@@ -340,7 +340,7 @@ static int __init htab_dt_scan_page_sizes(unsigned long node, | |||
340 | else | 340 | else |
341 | def->tlbiel = 0; | 341 | def->tlbiel = 0; |
342 | 342 | ||
343 | DBG(" %d: shift=%02x, sllp=%04x, avpnm=%08x, " | 343 | DBG(" %d: shift=%02x, sllp=%04lx, avpnm=%08lx, " |
344 | "tlbiel=%d, penc=%d\n", | 344 | "tlbiel=%d, penc=%d\n", |
345 | idx, shift, def->sllp, def->avpnm, def->tlbiel, | 345 | idx, shift, def->sllp, def->avpnm, def->tlbiel, |
346 | def->penc); | 346 | def->penc); |
@@ -663,7 +663,7 @@ static void __init htab_initialize(void) | |||
663 | base = (unsigned long)__va(lmb.memory.region[i].base); | 663 | base = (unsigned long)__va(lmb.memory.region[i].base); |
664 | size = lmb.memory.region[i].size; | 664 | size = lmb.memory.region[i].size; |
665 | 665 | ||
666 | DBG("creating mapping for region: %lx..%lx (prot: %x)\n", | 666 | DBG("creating mapping for region: %lx..%lx (prot: %lx)\n", |
667 | base, size, prot); | 667 | base, size, prot); |
668 | 668 | ||
669 | #ifdef CONFIG_U3_DART | 669 | #ifdef CONFIG_U3_DART |
@@ -879,7 +879,7 @@ static inline int subpage_protection(struct mm_struct *mm, unsigned long ea) | |||
879 | */ | 879 | */ |
880 | int hash_page(unsigned long ea, unsigned long access, unsigned long trap) | 880 | int hash_page(unsigned long ea, unsigned long access, unsigned long trap) |
881 | { | 881 | { |
882 | void *pgdir; | 882 | pgd_t *pgdir; |
883 | unsigned long vsid; | 883 | unsigned long vsid; |
884 | struct mm_struct *mm; | 884 | struct mm_struct *mm; |
885 | pte_t *ptep; | 885 | pte_t *ptep; |
@@ -1025,7 +1025,7 @@ int hash_page(unsigned long ea, unsigned long access, unsigned long trap) | |||
1025 | else | 1025 | else |
1026 | #endif /* CONFIG_PPC_HAS_HASH_64K */ | 1026 | #endif /* CONFIG_PPC_HAS_HASH_64K */ |
1027 | { | 1027 | { |
1028 | int spp = subpage_protection(pgdir, ea); | 1028 | int spp = subpage_protection(mm, ea); |
1029 | if (access & spp) | 1029 | if (access & spp) |
1030 | rc = -2; | 1030 | rc = -2; |
1031 | else | 1031 | else |
@@ -1115,7 +1115,7 @@ void flush_hash_page(unsigned long va, real_pte_t pte, int psize, int ssize, | |||
1115 | { | 1115 | { |
1116 | unsigned long hash, index, shift, hidx, slot; | 1116 | unsigned long hash, index, shift, hidx, slot; |
1117 | 1117 | ||
1118 | DBG_LOW("flush_hash_page(va=%016x)\n", va); | 1118 | DBG_LOW("flush_hash_page(va=%016lx)\n", va); |
1119 | pte_iterate_hashed_subpages(pte, psize, va, index, shift) { | 1119 | pte_iterate_hashed_subpages(pte, psize, va, index, shift) { |
1120 | hash = hpt_hash(va, shift, ssize); | 1120 | hash = hpt_hash(va, shift, ssize); |
1121 | hidx = __rpte_to_hidx(pte, index); | 1121 | hidx = __rpte_to_hidx(pte, index); |
@@ -1123,7 +1123,7 @@ void flush_hash_page(unsigned long va, real_pte_t pte, int psize, int ssize, | |||
1123 | hash = ~hash; | 1123 | hash = ~hash; |
1124 | slot = (hash & htab_hash_mask) * HPTES_PER_GROUP; | 1124 | slot = (hash & htab_hash_mask) * HPTES_PER_GROUP; |
1125 | slot += hidx & _PTEIDX_GROUP_IX; | 1125 | slot += hidx & _PTEIDX_GROUP_IX; |
1126 | DBG_LOW(" sub %d: hash=%x, hidx=%x\n", index, slot, hidx); | 1126 | DBG_LOW(" sub %ld: hash=%lx, hidx=%lx\n", index, slot, hidx); |
1127 | ppc_md.hpte_invalidate(slot, va, psize, ssize, local); | 1127 | ppc_md.hpte_invalidate(slot, va, psize, ssize, local); |
1128 | } pte_iterate_hashed_end(); | 1128 | } pte_iterate_hashed_end(); |
1129 | } | 1129 | } |
diff --git a/arch/powerpc/mm/init_32.c b/arch/powerpc/mm/init_32.c index 9ddcfb4dc139..4ec900af332f 100644 --- a/arch/powerpc/mm/init_32.c +++ b/arch/powerpc/mm/init_32.c | |||
@@ -82,6 +82,11 @@ extern struct task_struct *current_set[NR_CPUS]; | |||
82 | int __map_without_bats; | 82 | int __map_without_bats; |
83 | int __map_without_ltlbs; | 83 | int __map_without_ltlbs; |
84 | 84 | ||
85 | /* | ||
86 | * This tells the system to allow ioremapping memory marked as reserved. | ||
87 | */ | ||
88 | int __allow_ioremap_reserved; | ||
89 | |||
85 | /* max amount of low RAM to map in */ | 90 | /* max amount of low RAM to map in */ |
86 | unsigned long __max_low_memory = MAX_LOW_MEM; | 91 | unsigned long __max_low_memory = MAX_LOW_MEM; |
87 | 92 | ||
@@ -131,9 +136,13 @@ void __init MMU_init(void) | |||
131 | MMU_setup(); | 136 | MMU_setup(); |
132 | 137 | ||
133 | if (lmb.memory.cnt > 1) { | 138 | if (lmb.memory.cnt > 1) { |
139 | #ifndef CONFIG_WII | ||
134 | lmb.memory.cnt = 1; | 140 | lmb.memory.cnt = 1; |
135 | lmb_analyze(); | 141 | lmb_analyze(); |
136 | printk(KERN_WARNING "Only using first contiguous memory region"); | 142 | printk(KERN_WARNING "Only using first contiguous memory region"); |
143 | #else | ||
144 | wii_memory_fixups(); | ||
145 | #endif | ||
137 | } | 146 | } |
138 | 147 | ||
139 | total_lowmem = total_memory = lmb_end_of_DRAM() - memstart_addr; | 148 | total_lowmem = total_memory = lmb_end_of_DRAM() - memstart_addr; |
diff --git a/arch/powerpc/mm/mmu_context_nohash.c b/arch/powerpc/mm/mmu_context_nohash.c index be4f34c30a0b..1044a634b6d0 100644 --- a/arch/powerpc/mm/mmu_context_nohash.c +++ b/arch/powerpc/mm/mmu_context_nohash.c | |||
@@ -353,7 +353,7 @@ static int __cpuinit mmu_context_cpu_notify(struct notifier_block *self, | |||
353 | read_lock(&tasklist_lock); | 353 | read_lock(&tasklist_lock); |
354 | for_each_process(p) { | 354 | for_each_process(p) { |
355 | if (p->mm) | 355 | if (p->mm) |
356 | cpu_mask_clear_cpu(cpu, mm_cpumask(p->mm)); | 356 | cpumask_clear_cpu(cpu, mm_cpumask(p->mm)); |
357 | } | 357 | } |
358 | read_unlock(&tasklist_lock); | 358 | read_unlock(&tasklist_lock); |
359 | break; | 359 | break; |
diff --git a/arch/powerpc/mm/mmu_decl.h b/arch/powerpc/mm/mmu_decl.h index e27a990af42d..d49a77503e19 100644 --- a/arch/powerpc/mm/mmu_decl.h +++ b/arch/powerpc/mm/mmu_decl.h | |||
@@ -104,6 +104,7 @@ extern void setbat(int index, unsigned long virt, phys_addr_t phys, | |||
104 | unsigned int size, int flags); | 104 | unsigned int size, int flags); |
105 | 105 | ||
106 | extern int __map_without_bats; | 106 | extern int __map_without_bats; |
107 | extern int __allow_ioremap_reserved; | ||
107 | extern unsigned long ioremap_base; | 108 | extern unsigned long ioremap_base; |
108 | extern unsigned int rtas_data, rtas_size; | 109 | extern unsigned int rtas_data, rtas_size; |
109 | 110 | ||
@@ -125,24 +126,32 @@ extern phys_addr_t total_lowmem; | |||
125 | extern phys_addr_t memstart_addr; | 126 | extern phys_addr_t memstart_addr; |
126 | extern phys_addr_t lowmem_end_addr; | 127 | extern phys_addr_t lowmem_end_addr; |
127 | 128 | ||
129 | #ifdef CONFIG_WII | ||
130 | extern unsigned long wii_hole_start; | ||
131 | extern unsigned long wii_hole_size; | ||
132 | |||
133 | extern unsigned long wii_mmu_mapin_mem2(unsigned long top); | ||
134 | extern void wii_memory_fixups(void); | ||
135 | #endif | ||
136 | |||
128 | /* ...and now those things that may be slightly different between processor | 137 | /* ...and now those things that may be slightly different between processor |
129 | * architectures. -- Dan | 138 | * architectures. -- Dan |
130 | */ | 139 | */ |
131 | #if defined(CONFIG_8xx) | 140 | #if defined(CONFIG_8xx) |
132 | #define MMU_init_hw() do { } while(0) | 141 | #define MMU_init_hw() do { } while(0) |
133 | #define mmu_mapin_ram() (0UL) | 142 | #define mmu_mapin_ram(top) (0UL) |
134 | 143 | ||
135 | #elif defined(CONFIG_4xx) | 144 | #elif defined(CONFIG_4xx) |
136 | extern void MMU_init_hw(void); | 145 | extern void MMU_init_hw(void); |
137 | extern unsigned long mmu_mapin_ram(void); | 146 | extern unsigned long mmu_mapin_ram(unsigned long top); |
138 | 147 | ||
139 | #elif defined(CONFIG_FSL_BOOKE) | 148 | #elif defined(CONFIG_FSL_BOOKE) |
140 | extern void MMU_init_hw(void); | 149 | extern void MMU_init_hw(void); |
141 | extern unsigned long mmu_mapin_ram(void); | 150 | extern unsigned long mmu_mapin_ram(unsigned long top); |
142 | extern void adjust_total_lowmem(void); | 151 | extern void adjust_total_lowmem(void); |
143 | 152 | ||
144 | #elif defined(CONFIG_PPC32) | 153 | #elif defined(CONFIG_PPC32) |
145 | /* anything 32-bit except 4xx or 8xx */ | 154 | /* anything 32-bit except 4xx or 8xx */ |
146 | extern void MMU_init_hw(void); | 155 | extern void MMU_init_hw(void); |
147 | extern unsigned long mmu_mapin_ram(void); | 156 | extern unsigned long mmu_mapin_ram(unsigned long top); |
148 | #endif | 157 | #endif |
diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c index cb96cb2e17cc..573b3bd1c45b 100644 --- a/arch/powerpc/mm/pgtable_32.c +++ b/arch/powerpc/mm/pgtable_32.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #include <linux/vmalloc.h> | 26 | #include <linux/vmalloc.h> |
27 | #include <linux/init.h> | 27 | #include <linux/init.h> |
28 | #include <linux/highmem.h> | 28 | #include <linux/highmem.h> |
29 | #include <linux/lmb.h> | ||
29 | 30 | ||
30 | #include <asm/pgtable.h> | 31 | #include <asm/pgtable.h> |
31 | #include <asm/pgalloc.h> | 32 | #include <asm/pgalloc.h> |
@@ -191,7 +192,8 @@ __ioremap_caller(phys_addr_t addr, unsigned long size, unsigned long flags, | |||
191 | * Don't allow anybody to remap normal RAM that we're using. | 192 | * Don't allow anybody to remap normal RAM that we're using. |
192 | * mem_init() sets high_memory so only do the check after that. | 193 | * mem_init() sets high_memory so only do the check after that. |
193 | */ | 194 | */ |
194 | if (mem_init_done && (p < virt_to_phys(high_memory))) { | 195 | if (mem_init_done && (p < virt_to_phys(high_memory)) && |
196 | !(__allow_ioremap_reserved && lmb_is_region_reserved(p, size))) { | ||
195 | printk("__ioremap(): phys addr 0x%llx is RAM lr %p\n", | 197 | printk("__ioremap(): phys addr 0x%llx is RAM lr %p\n", |
196 | (unsigned long long)p, __builtin_return_address(0)); | 198 | (unsigned long long)p, __builtin_return_address(0)); |
197 | return NULL; | 199 | return NULL; |
@@ -283,18 +285,18 @@ int map_page(unsigned long va, phys_addr_t pa, int flags) | |||
283 | } | 285 | } |
284 | 286 | ||
285 | /* | 287 | /* |
286 | * Map in a big chunk of physical memory starting at PAGE_OFFSET. | 288 | * Map in a chunk of physical memory starting at start. |
287 | */ | 289 | */ |
288 | void __init mapin_ram(void) | 290 | void __init __mapin_ram_chunk(unsigned long offset, unsigned long top) |
289 | { | 291 | { |
290 | unsigned long v, s, f; | 292 | unsigned long v, s, f; |
291 | phys_addr_t p; | 293 | phys_addr_t p; |
292 | int ktext; | 294 | int ktext; |
293 | 295 | ||
294 | s = mmu_mapin_ram(); | 296 | s = offset; |
295 | v = PAGE_OFFSET + s; | 297 | v = PAGE_OFFSET + s; |
296 | p = memstart_addr + s; | 298 | p = memstart_addr + s; |
297 | for (; s < total_lowmem; s += PAGE_SIZE) { | 299 | for (; s < top; s += PAGE_SIZE) { |
298 | ktext = ((char *) v >= _stext && (char *) v < etext); | 300 | ktext = ((char *) v >= _stext && (char *) v < etext); |
299 | f = ktext ? PAGE_KERNEL_TEXT : PAGE_KERNEL; | 301 | f = ktext ? PAGE_KERNEL_TEXT : PAGE_KERNEL; |
300 | map_page(v, p, f); | 302 | map_page(v, p, f); |
@@ -307,6 +309,30 @@ void __init mapin_ram(void) | |||
307 | } | 309 | } |
308 | } | 310 | } |
309 | 311 | ||
312 | void __init mapin_ram(void) | ||
313 | { | ||
314 | unsigned long s, top; | ||
315 | |||
316 | #ifndef CONFIG_WII | ||
317 | top = total_lowmem; | ||
318 | s = mmu_mapin_ram(top); | ||
319 | __mapin_ram_chunk(s, top); | ||
320 | #else | ||
321 | if (!wii_hole_size) { | ||
322 | s = mmu_mapin_ram(total_lowmem); | ||
323 | __mapin_ram_chunk(s, total_lowmem); | ||
324 | } else { | ||
325 | top = wii_hole_start; | ||
326 | s = mmu_mapin_ram(top); | ||
327 | __mapin_ram_chunk(s, top); | ||
328 | |||
329 | top = lmb_end_of_DRAM(); | ||
330 | s = wii_mmu_mapin_mem2(top); | ||
331 | __mapin_ram_chunk(s, top); | ||
332 | } | ||
333 | #endif | ||
334 | } | ||
335 | |||
310 | /* Scan the real Linux page tables and return a PTE pointer for | 336 | /* Scan the real Linux page tables and return a PTE pointer for |
311 | * a virtual address in a context. | 337 | * a virtual address in a context. |
312 | * Returns true (1) if PTE was found, zero otherwise. The pointer to | 338 | * Returns true (1) if PTE was found, zero otherwise. The pointer to |
@@ -356,7 +382,7 @@ static int __change_page_attr(struct page *page, pgprot_t prot) | |||
356 | return 0; | 382 | return 0; |
357 | if (!get_pteptr(&init_mm, address, &kpte, &kpmd)) | 383 | if (!get_pteptr(&init_mm, address, &kpte, &kpmd)) |
358 | return -EINVAL; | 384 | return -EINVAL; |
359 | set_pte_at(&init_mm, address, kpte, mk_pte(page, prot)); | 385 | __set_pte_at(&init_mm, address, kpte, mk_pte(page, prot), 0); |
360 | wmb(); | 386 | wmb(); |
361 | #ifdef CONFIG_PPC_STD_MMU | 387 | #ifdef CONFIG_PPC_STD_MMU |
362 | flush_hash_pages(0, address, pmd_val(*kpmd), 1); | 388 | flush_hash_pages(0, address, pmd_val(*kpmd), 1); |
diff --git a/arch/powerpc/mm/ppc_mmu_32.c b/arch/powerpc/mm/ppc_mmu_32.c index 2d2a87e10154..f11c2cdcb0fe 100644 --- a/arch/powerpc/mm/ppc_mmu_32.c +++ b/arch/powerpc/mm/ppc_mmu_32.c | |||
@@ -72,7 +72,7 @@ unsigned long p_mapped_by_bats(phys_addr_t pa) | |||
72 | return 0; | 72 | return 0; |
73 | } | 73 | } |
74 | 74 | ||
75 | unsigned long __init mmu_mapin_ram(void) | 75 | unsigned long __init mmu_mapin_ram(unsigned long top) |
76 | { | 76 | { |
77 | unsigned long tot, bl, done; | 77 | unsigned long tot, bl, done; |
78 | unsigned long max_size = (256<<20); | 78 | unsigned long max_size = (256<<20); |
@@ -86,7 +86,7 @@ unsigned long __init mmu_mapin_ram(void) | |||
86 | 86 | ||
87 | /* Make sure we don't map a block larger than the | 87 | /* Make sure we don't map a block larger than the |
88 | smallest alignment of the physical address. */ | 88 | smallest alignment of the physical address. */ |
89 | tot = total_lowmem; | 89 | tot = top; |
90 | for (bl = 128<<10; bl < max_size; bl <<= 1) { | 90 | for (bl = 128<<10; bl < max_size; bl <<= 1) { |
91 | if (bl * 2 > tot) | 91 | if (bl * 2 > tot) |
92 | break; | 92 | break; |
diff --git a/arch/powerpc/oprofile/op_model_cell.c b/arch/powerpc/oprofile/op_model_cell.c index ae06c6236d9c..2c9e52267292 100644 --- a/arch/powerpc/oprofile/op_model_cell.c +++ b/arch/powerpc/oprofile/op_model_cell.c | |||
@@ -248,7 +248,7 @@ static int pm_rtas_activate_signals(u32 node, u32 count) | |||
248 | * There is no debug setup required for the cycles event. | 248 | * There is no debug setup required for the cycles event. |
249 | * Note that only events in the same group can be used. | 249 | * Note that only events in the same group can be used. |
250 | * Otherwise, there will be conflicts in correctly routing | 250 | * Otherwise, there will be conflicts in correctly routing |
251 | * the signals on the debug bus. It is the responsiblity | 251 | * the signals on the debug bus. It is the responsibility |
252 | * of the OProfile user tool to check the events are in | 252 | * of the OProfile user tool to check the events are in |
253 | * the same group. | 253 | * the same group. |
254 | */ | 254 | */ |
@@ -1594,7 +1594,7 @@ static void cell_handle_interrupt_spu(struct pt_regs *regs, | |||
1594 | * to a latch. The new values (interrupt setting bits, reset | 1594 | * to a latch. The new values (interrupt setting bits, reset |
1595 | * counter value etc.) are not copied to the actual registers | 1595 | * counter value etc.) are not copied to the actual registers |
1596 | * until the performance monitor is enabled. In order to get | 1596 | * until the performance monitor is enabled. In order to get |
1597 | * this to work as desired, the permormance monitor needs to | 1597 | * this to work as desired, the performance monitor needs to |
1598 | * be disabled while writing to the latches. This is a | 1598 | * be disabled while writing to the latches. This is a |
1599 | * HW design issue. | 1599 | * HW design issue. |
1600 | */ | 1600 | */ |
@@ -1668,7 +1668,7 @@ static void cell_handle_interrupt_ppu(struct pt_regs *regs, | |||
1668 | * to a latch. The new values (interrupt setting bits, reset | 1668 | * to a latch. The new values (interrupt setting bits, reset |
1669 | * counter value etc.) are not copied to the actual registers | 1669 | * counter value etc.) are not copied to the actual registers |
1670 | * until the performance monitor is enabled. In order to get | 1670 | * until the performance monitor is enabled. In order to get |
1671 | * this to work as desired, the permormance monitor needs to | 1671 | * this to work as desired, the performance monitor needs to |
1672 | * be disabled while writing to the latches. This is a | 1672 | * be disabled while writing to the latches. This is a |
1673 | * HW design issue. | 1673 | * HW design issue. |
1674 | */ | 1674 | */ |
diff --git a/arch/powerpc/platforms/52xx/efika.c b/arch/powerpc/platforms/52xx/efika.c index bcc69e1f77c1..45c0cb9b67e6 100644 --- a/arch/powerpc/platforms/52xx/efika.c +++ b/arch/powerpc/platforms/52xx/efika.c | |||
@@ -10,7 +10,7 @@ | |||
10 | */ | 10 | */ |
11 | 11 | ||
12 | #include <linux/init.h> | 12 | #include <linux/init.h> |
13 | #include <linux/utsrelease.h> | 13 | #include <generated/utsrelease.h> |
14 | #include <linux/pci.h> | 14 | #include <linux/pci.h> |
15 | #include <linux/of.h> | 15 | #include <linux/of.h> |
16 | #include <asm/prom.h> | 16 | #include <asm/prom.h> |
diff --git a/arch/powerpc/platforms/52xx/media5200.c b/arch/powerpc/platforms/52xx/media5200.c index cc0c854291d7..0bac3a3dbecf 100644 --- a/arch/powerpc/platforms/52xx/media5200.c +++ b/arch/powerpc/platforms/52xx/media5200.c | |||
@@ -86,9 +86,9 @@ void media5200_irq_cascade(unsigned int virq, struct irq_desc *desc) | |||
86 | u32 status, enable; | 86 | u32 status, enable; |
87 | 87 | ||
88 | /* Mask off the cascaded IRQ */ | 88 | /* Mask off the cascaded IRQ */ |
89 | spin_lock(&desc->lock); | 89 | raw_spin_lock(&desc->lock); |
90 | desc->chip->mask(virq); | 90 | desc->chip->mask(virq); |
91 | spin_unlock(&desc->lock); | 91 | raw_spin_unlock(&desc->lock); |
92 | 92 | ||
93 | /* Ask the FPGA for IRQ status. If 'val' is 0, then no irqs | 93 | /* Ask the FPGA for IRQ status. If 'val' is 0, then no irqs |
94 | * are pending. 'ffs()' is 1 based */ | 94 | * are pending. 'ffs()' is 1 based */ |
@@ -104,11 +104,11 @@ void media5200_irq_cascade(unsigned int virq, struct irq_desc *desc) | |||
104 | } | 104 | } |
105 | 105 | ||
106 | /* Processing done; can reenable the cascade now */ | 106 | /* Processing done; can reenable the cascade now */ |
107 | spin_lock(&desc->lock); | 107 | raw_spin_lock(&desc->lock); |
108 | desc->chip->ack(virq); | 108 | desc->chip->ack(virq); |
109 | if (!(desc->status & IRQ_DISABLED)) | 109 | if (!(desc->status & IRQ_DISABLED)) |
110 | desc->chip->unmask(virq); | 110 | desc->chip->unmask(virq); |
111 | spin_unlock(&desc->lock); | 111 | raw_spin_unlock(&desc->lock); |
112 | } | 112 | } |
113 | 113 | ||
114 | static int media5200_irq_map(struct irq_host *h, unsigned int virq, | 114 | static int media5200_irq_map(struct irq_host *h, unsigned int virq, |
diff --git a/arch/powerpc/platforms/52xx/mpc52xx_pci.c b/arch/powerpc/platforms/52xx/mpc52xx_pci.c index dd43114e9684..da110bd88346 100644 --- a/arch/powerpc/platforms/52xx/mpc52xx_pci.c +++ b/arch/powerpc/platforms/52xx/mpc52xx_pci.c | |||
@@ -100,7 +100,7 @@ const struct of_device_id mpc52xx_pci_ids[] __initdata = { | |||
100 | }; | 100 | }; |
101 | 101 | ||
102 | /* ======================================================================== */ | 102 | /* ======================================================================== */ |
103 | /* PCI configuration acess */ | 103 | /* PCI configuration access */ |
104 | /* ======================================================================== */ | 104 | /* ======================================================================== */ |
105 | 105 | ||
106 | static int | 106 | static int |
diff --git a/arch/powerpc/platforms/83xx/suspend.c b/arch/powerpc/platforms/83xx/suspend.c index d306f07b9aa1..43805348b81e 100644 --- a/arch/powerpc/platforms/83xx/suspend.c +++ b/arch/powerpc/platforms/83xx/suspend.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #define PMCCR1_NEXT_STATE 0x0C /* Next state for power management */ | 32 | #define PMCCR1_NEXT_STATE 0x0C /* Next state for power management */ |
33 | #define PMCCR1_NEXT_STATE_SHIFT 2 | 33 | #define PMCCR1_NEXT_STATE_SHIFT 2 |
34 | #define PMCCR1_CURR_STATE 0x03 /* Current state for power management*/ | 34 | #define PMCCR1_CURR_STATE 0x03 /* Current state for power management*/ |
35 | #define IMMR_SYSCR_OFFSET 0x100 | ||
35 | #define IMMR_RCW_OFFSET 0x900 | 36 | #define IMMR_RCW_OFFSET 0x900 |
36 | #define RCW_PCI_HOST 0x80000000 | 37 | #define RCW_PCI_HOST 0x80000000 |
37 | 38 | ||
@@ -78,6 +79,22 @@ struct mpc83xx_clock { | |||
78 | u32 sccr; | 79 | u32 sccr; |
79 | }; | 80 | }; |
80 | 81 | ||
82 | struct mpc83xx_syscr { | ||
83 | __be32 sgprl; | ||
84 | __be32 sgprh; | ||
85 | __be32 spridr; | ||
86 | __be32 :32; | ||
87 | __be32 spcr; | ||
88 | __be32 sicrl; | ||
89 | __be32 sicrh; | ||
90 | }; | ||
91 | |||
92 | struct mpc83xx_saved { | ||
93 | u32 sicrl; | ||
94 | u32 sicrh; | ||
95 | u32 sccr; | ||
96 | }; | ||
97 | |||
81 | struct pmc_type { | 98 | struct pmc_type { |
82 | int has_deep_sleep; | 99 | int has_deep_sleep; |
83 | }; | 100 | }; |
@@ -87,6 +104,8 @@ static int has_deep_sleep, deep_sleeping; | |||
87 | static int pmc_irq; | 104 | static int pmc_irq; |
88 | static struct mpc83xx_pmc __iomem *pmc_regs; | 105 | static struct mpc83xx_pmc __iomem *pmc_regs; |
89 | static struct mpc83xx_clock __iomem *clock_regs; | 106 | static struct mpc83xx_clock __iomem *clock_regs; |
107 | static struct mpc83xx_syscr __iomem *syscr_regs; | ||
108 | static struct mpc83xx_saved saved_regs; | ||
90 | static int is_pci_agent, wake_from_pci; | 109 | static int is_pci_agent, wake_from_pci; |
91 | static phys_addr_t immrbase; | 110 | static phys_addr_t immrbase; |
92 | static int pci_pm_state; | 111 | static int pci_pm_state; |
@@ -137,6 +156,20 @@ static irqreturn_t pmc_irq_handler(int irq, void *dev_id) | |||
137 | return ret; | 156 | return ret; |
138 | } | 157 | } |
139 | 158 | ||
159 | static void mpc83xx_suspend_restore_regs(void) | ||
160 | { | ||
161 | out_be32(&syscr_regs->sicrl, saved_regs.sicrl); | ||
162 | out_be32(&syscr_regs->sicrh, saved_regs.sicrh); | ||
163 | out_be32(&clock_regs->sccr, saved_regs.sccr); | ||
164 | } | ||
165 | |||
166 | static void mpc83xx_suspend_save_regs(void) | ||
167 | { | ||
168 | saved_regs.sicrl = in_be32(&syscr_regs->sicrl); | ||
169 | saved_regs.sicrh = in_be32(&syscr_regs->sicrh); | ||
170 | saved_regs.sccr = in_be32(&clock_regs->sccr); | ||
171 | } | ||
172 | |||
140 | static int mpc83xx_suspend_enter(suspend_state_t state) | 173 | static int mpc83xx_suspend_enter(suspend_state_t state) |
141 | { | 174 | { |
142 | int ret = -EAGAIN; | 175 | int ret = -EAGAIN; |
@@ -166,6 +199,8 @@ static int mpc83xx_suspend_enter(suspend_state_t state) | |||
166 | */ | 199 | */ |
167 | 200 | ||
168 | if (deep_sleeping) { | 201 | if (deep_sleeping) { |
202 | mpc83xx_suspend_save_regs(); | ||
203 | |||
169 | out_be32(&pmc_regs->mask, PMCER_ALL); | 204 | out_be32(&pmc_regs->mask, PMCER_ALL); |
170 | 205 | ||
171 | out_be32(&pmc_regs->config1, | 206 | out_be32(&pmc_regs->config1, |
@@ -179,6 +214,8 @@ static int mpc83xx_suspend_enter(suspend_state_t state) | |||
179 | in_be32(&pmc_regs->config1) & ~PMCCR1_POWER_OFF); | 214 | in_be32(&pmc_regs->config1) & ~PMCCR1_POWER_OFF); |
180 | 215 | ||
181 | out_be32(&pmc_regs->mask, PMCER_PMCI); | 216 | out_be32(&pmc_regs->mask, PMCER_PMCI); |
217 | |||
218 | mpc83xx_suspend_restore_regs(); | ||
182 | } else { | 219 | } else { |
183 | out_be32(&pmc_regs->mask, PMCER_PMCI); | 220 | out_be32(&pmc_regs->mask, PMCER_PMCI); |
184 | 221 | ||
@@ -194,7 +231,7 @@ out: | |||
194 | return ret; | 231 | return ret; |
195 | } | 232 | } |
196 | 233 | ||
197 | static void mpc83xx_suspend_finish(void) | 234 | static void mpc83xx_suspend_end(void) |
198 | { | 235 | { |
199 | deep_sleeping = 0; | 236 | deep_sleeping = 0; |
200 | } | 237 | } |
@@ -278,7 +315,7 @@ static struct platform_suspend_ops mpc83xx_suspend_ops = { | |||
278 | .valid = mpc83xx_suspend_valid, | 315 | .valid = mpc83xx_suspend_valid, |
279 | .begin = mpc83xx_suspend_begin, | 316 | .begin = mpc83xx_suspend_begin, |
280 | .enter = mpc83xx_suspend_enter, | 317 | .enter = mpc83xx_suspend_enter, |
281 | .finish = mpc83xx_suspend_finish, | 318 | .end = mpc83xx_suspend_end, |
282 | }; | 319 | }; |
283 | 320 | ||
284 | static int pmc_probe(struct of_device *ofdev, | 321 | static int pmc_probe(struct of_device *ofdev, |
@@ -333,12 +370,23 @@ static int pmc_probe(struct of_device *ofdev, | |||
333 | goto out_pmc; | 370 | goto out_pmc; |
334 | } | 371 | } |
335 | 372 | ||
373 | if (has_deep_sleep) { | ||
374 | syscr_regs = ioremap(immrbase + IMMR_SYSCR_OFFSET, | ||
375 | sizeof(*syscr_regs)); | ||
376 | if (!syscr_regs) { | ||
377 | ret = -ENOMEM; | ||
378 | goto out_syscr; | ||
379 | } | ||
380 | } | ||
381 | |||
336 | if (is_pci_agent) | 382 | if (is_pci_agent) |
337 | mpc83xx_set_agent(); | 383 | mpc83xx_set_agent(); |
338 | 384 | ||
339 | suspend_set_ops(&mpc83xx_suspend_ops); | 385 | suspend_set_ops(&mpc83xx_suspend_ops); |
340 | return 0; | 386 | return 0; |
341 | 387 | ||
388 | out_syscr: | ||
389 | iounmap(clock_regs); | ||
342 | out_pmc: | 390 | out_pmc: |
343 | iounmap(pmc_regs); | 391 | iounmap(pmc_regs); |
344 | out: | 392 | out: |
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_mds.c b/arch/powerpc/platforms/85xx/mpc85xx_mds.c index c5028a2e5a58..21f61b8c445b 100644 --- a/arch/powerpc/platforms/85xx/mpc85xx_mds.c +++ b/arch/powerpc/platforms/85xx/mpc85xx_mds.c | |||
@@ -86,7 +86,7 @@ static int mpc8568_fixup_125_clock(struct phy_device *phydev) | |||
86 | scr = phy_read(phydev, MV88E1111_SCR); | 86 | scr = phy_read(phydev, MV88E1111_SCR); |
87 | 87 | ||
88 | if (scr < 0) | 88 | if (scr < 0) |
89 | return err; | 89 | return scr; |
90 | 90 | ||
91 | err = phy_write(phydev, MV88E1111_SCR, scr | 0x0008); | 91 | err = phy_write(phydev, MV88E1111_SCR, scr | 0x0008); |
92 | 92 | ||
diff --git a/arch/powerpc/platforms/Kconfig.cputype b/arch/powerpc/platforms/Kconfig.cputype index 2eab27a94cc9..fa0f690d3867 100644 --- a/arch/powerpc/platforms/Kconfig.cputype +++ b/arch/powerpc/platforms/Kconfig.cputype | |||
@@ -311,7 +311,7 @@ config NR_CPUS | |||
311 | 311 | ||
312 | config NOT_COHERENT_CACHE | 312 | config NOT_COHERENT_CACHE |
313 | bool | 313 | bool |
314 | depends on 4xx || 8xx || E200 || PPC_MPC512x | 314 | depends on 4xx || 8xx || E200 || PPC_MPC512x || GAMECUBE_COMMON |
315 | default y | 315 | default y |
316 | 316 | ||
317 | config CHECK_CACHE_COHERENCY | 317 | config CHECK_CACHE_COHERENCY |
diff --git a/arch/powerpc/platforms/amigaone/setup.c b/arch/powerpc/platforms/amigaone/setup.c index 9290a7a442d0..fb4eb0df054c 100644 --- a/arch/powerpc/platforms/amigaone/setup.c +++ b/arch/powerpc/platforms/amigaone/setup.c | |||
@@ -14,7 +14,7 @@ | |||
14 | 14 | ||
15 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
16 | #include <linux/seq_file.h> | 16 | #include <linux/seq_file.h> |
17 | #include <linux/utsrelease.h> | 17 | #include <generated/utsrelease.h> |
18 | 18 | ||
19 | #include <asm/machdep.h> | 19 | #include <asm/machdep.h> |
20 | #include <asm/cputable.h> | 20 | #include <asm/cputable.h> |
diff --git a/arch/powerpc/platforms/cell/interrupt.c b/arch/powerpc/platforms/cell/interrupt.c index f9dbf76a763f..6829cf7e2bda 100644 --- a/arch/powerpc/platforms/cell/interrupt.c +++ b/arch/powerpc/platforms/cell/interrupt.c | |||
@@ -54,7 +54,7 @@ struct iic { | |||
54 | struct device_node *node; | 54 | struct device_node *node; |
55 | }; | 55 | }; |
56 | 56 | ||
57 | static DEFINE_PER_CPU(struct iic, iic); | 57 | static DEFINE_PER_CPU(struct iic, cpu_iic); |
58 | #define IIC_NODE_COUNT 2 | 58 | #define IIC_NODE_COUNT 2 |
59 | static struct irq_host *iic_host; | 59 | static struct irq_host *iic_host; |
60 | 60 | ||
@@ -82,7 +82,7 @@ static void iic_unmask(unsigned int irq) | |||
82 | 82 | ||
83 | static void iic_eoi(unsigned int irq) | 83 | static void iic_eoi(unsigned int irq) |
84 | { | 84 | { |
85 | struct iic *iic = &__get_cpu_var(iic); | 85 | struct iic *iic = &__get_cpu_var(cpu_iic); |
86 | out_be64(&iic->regs->prio, iic->eoi_stack[--iic->eoi_ptr]); | 86 | out_be64(&iic->regs->prio, iic->eoi_stack[--iic->eoi_ptr]); |
87 | BUG_ON(iic->eoi_ptr < 0); | 87 | BUG_ON(iic->eoi_ptr < 0); |
88 | } | 88 | } |
@@ -146,7 +146,7 @@ static unsigned int iic_get_irq(void) | |||
146 | struct iic *iic; | 146 | struct iic *iic; |
147 | unsigned int virq; | 147 | unsigned int virq; |
148 | 148 | ||
149 | iic = &__get_cpu_var(iic); | 149 | iic = &__get_cpu_var(cpu_iic); |
150 | *(unsigned long *) &pending = | 150 | *(unsigned long *) &pending = |
151 | in_be64((u64 __iomem *) &iic->regs->pending_destr); | 151 | in_be64((u64 __iomem *) &iic->regs->pending_destr); |
152 | if (!(pending.flags & CBE_IIC_IRQ_VALID)) | 152 | if (!(pending.flags & CBE_IIC_IRQ_VALID)) |
@@ -161,12 +161,12 @@ static unsigned int iic_get_irq(void) | |||
161 | 161 | ||
162 | void iic_setup_cpu(void) | 162 | void iic_setup_cpu(void) |
163 | { | 163 | { |
164 | out_be64(&__get_cpu_var(iic).regs->prio, 0xff); | 164 | out_be64(&__get_cpu_var(cpu_iic).regs->prio, 0xff); |
165 | } | 165 | } |
166 | 166 | ||
167 | u8 iic_get_target_id(int cpu) | 167 | u8 iic_get_target_id(int cpu) |
168 | { | 168 | { |
169 | return per_cpu(iic, cpu).target_id; | 169 | return per_cpu(cpu_iic, cpu).target_id; |
170 | } | 170 | } |
171 | 171 | ||
172 | EXPORT_SYMBOL_GPL(iic_get_target_id); | 172 | EXPORT_SYMBOL_GPL(iic_get_target_id); |
@@ -181,7 +181,7 @@ static inline int iic_ipi_to_irq(int ipi) | |||
181 | 181 | ||
182 | void iic_cause_IPI(int cpu, int mesg) | 182 | void iic_cause_IPI(int cpu, int mesg) |
183 | { | 183 | { |
184 | out_be64(&per_cpu(iic, cpu).regs->generate, (0xf - mesg) << 4); | 184 | out_be64(&per_cpu(cpu_iic, cpu).regs->generate, (0xf - mesg) << 4); |
185 | } | 185 | } |
186 | 186 | ||
187 | struct irq_host *iic_get_irq_host(int node) | 187 | struct irq_host *iic_get_irq_host(int node) |
@@ -237,7 +237,7 @@ extern int noirqdebug; | |||
237 | 237 | ||
238 | static void handle_iic_irq(unsigned int irq, struct irq_desc *desc) | 238 | static void handle_iic_irq(unsigned int irq, struct irq_desc *desc) |
239 | { | 239 | { |
240 | spin_lock(&desc->lock); | 240 | raw_spin_lock(&desc->lock); |
241 | 241 | ||
242 | desc->status &= ~(IRQ_REPLAY | IRQ_WAITING); | 242 | desc->status &= ~(IRQ_REPLAY | IRQ_WAITING); |
243 | 243 | ||
@@ -265,18 +265,18 @@ static void handle_iic_irq(unsigned int irq, struct irq_desc *desc) | |||
265 | goto out_eoi; | 265 | goto out_eoi; |
266 | 266 | ||
267 | desc->status &= ~IRQ_PENDING; | 267 | desc->status &= ~IRQ_PENDING; |
268 | spin_unlock(&desc->lock); | 268 | raw_spin_unlock(&desc->lock); |
269 | action_ret = handle_IRQ_event(irq, action); | 269 | action_ret = handle_IRQ_event(irq, action); |
270 | if (!noirqdebug) | 270 | if (!noirqdebug) |
271 | note_interrupt(irq, desc, action_ret); | 271 | note_interrupt(irq, desc, action_ret); |
272 | spin_lock(&desc->lock); | 272 | raw_spin_lock(&desc->lock); |
273 | 273 | ||
274 | } while ((desc->status & (IRQ_PENDING | IRQ_DISABLED)) == IRQ_PENDING); | 274 | } while ((desc->status & (IRQ_PENDING | IRQ_DISABLED)) == IRQ_PENDING); |
275 | 275 | ||
276 | desc->status &= ~IRQ_INPROGRESS; | 276 | desc->status &= ~IRQ_INPROGRESS; |
277 | out_eoi: | 277 | out_eoi: |
278 | desc->chip->eoi(irq); | 278 | desc->chip->eoi(irq); |
279 | spin_unlock(&desc->lock); | 279 | raw_spin_unlock(&desc->lock); |
280 | } | 280 | } |
281 | 281 | ||
282 | static int iic_host_map(struct irq_host *h, unsigned int virq, | 282 | static int iic_host_map(struct irq_host *h, unsigned int virq, |
@@ -348,7 +348,7 @@ static void __init init_one_iic(unsigned int hw_cpu, unsigned long addr, | |||
348 | /* XXX FIXME: should locate the linux CPU number from the HW cpu | 348 | /* XXX FIXME: should locate the linux CPU number from the HW cpu |
349 | * number properly. We are lucky for now | 349 | * number properly. We are lucky for now |
350 | */ | 350 | */ |
351 | struct iic *iic = &per_cpu(iic, hw_cpu); | 351 | struct iic *iic = &per_cpu(cpu_iic, hw_cpu); |
352 | 352 | ||
353 | iic->regs = ioremap(addr, sizeof(struct cbe_iic_thread_regs)); | 353 | iic->regs = ioremap(addr, sizeof(struct cbe_iic_thread_regs)); |
354 | BUG_ON(iic->regs == NULL); | 354 | BUG_ON(iic->regs == NULL); |
diff --git a/arch/powerpc/platforms/cell/spufs/Makefile b/arch/powerpc/platforms/cell/spufs/Makefile index b93f877ba504..b9d5d678aa44 100644 --- a/arch/powerpc/platforms/cell/spufs/Makefile +++ b/arch/powerpc/platforms/cell/spufs/Makefile | |||
@@ -13,10 +13,8 @@ SPU_CC := $(SPU_CROSS)gcc | |||
13 | SPU_AS := $(SPU_CROSS)gcc | 13 | SPU_AS := $(SPU_CROSS)gcc |
14 | SPU_LD := $(SPU_CROSS)ld | 14 | SPU_LD := $(SPU_CROSS)ld |
15 | SPU_OBJCOPY := $(SPU_CROSS)objcopy | 15 | SPU_OBJCOPY := $(SPU_CROSS)objcopy |
16 | SPU_CFLAGS := -O2 -Wall -I$(srctree)/include \ | 16 | SPU_CFLAGS := -O2 -Wall -I$(srctree)/include -D__KERNEL__ |
17 | -I$(objtree)/include2 -D__KERNEL__ | 17 | SPU_AFLAGS := -c -D__ASSEMBLY__ -I$(srctree)/include -D__KERNEL__ |
18 | SPU_AFLAGS := -c -D__ASSEMBLY__ -I$(srctree)/include \ | ||
19 | -I$(objtree)/include2 -D__KERNEL__ | ||
20 | SPU_LDFLAGS := -N -Ttext=0x0 | 18 | SPU_LDFLAGS := -N -Ttext=0x0 |
21 | 19 | ||
22 | $(obj)/switch.o: $(obj)/spu_save_dump.h $(obj)/spu_restore_dump.h | 20 | $(obj)/switch.o: $(obj)/spu_save_dump.h $(obj)/spu_restore_dump.h |
diff --git a/arch/powerpc/platforms/chrp/setup.c b/arch/powerpc/platforms/chrp/setup.c index 52f3df3b4ca0..8f41685d8f42 100644 --- a/arch/powerpc/platforms/chrp/setup.c +++ b/arch/powerpc/platforms/chrp/setup.c | |||
@@ -23,7 +23,7 @@ | |||
23 | #include <linux/reboot.h> | 23 | #include <linux/reboot.h> |
24 | #include <linux/init.h> | 24 | #include <linux/init.h> |
25 | #include <linux/pci.h> | 25 | #include <linux/pci.h> |
26 | #include <linux/utsrelease.h> | 26 | #include <generated/utsrelease.h> |
27 | #include <linux/adb.h> | 27 | #include <linux/adb.h> |
28 | #include <linux/module.h> | 28 | #include <linux/module.h> |
29 | #include <linux/delay.h> | 29 | #include <linux/delay.h> |
diff --git a/arch/powerpc/platforms/embedded6xx/Kconfig b/arch/powerpc/platforms/embedded6xx/Kconfig index 291ac9d8cbee..524d971a1478 100644 --- a/arch/powerpc/platforms/embedded6xx/Kconfig +++ b/arch/powerpc/platforms/embedded6xx/Kconfig | |||
@@ -90,3 +90,36 @@ config MPC10X_OPENPIC | |||
90 | config MPC10X_STORE_GATHERING | 90 | config MPC10X_STORE_GATHERING |
91 | bool "Enable MPC10x store gathering" | 91 | bool "Enable MPC10x store gathering" |
92 | depends on MPC10X_BRIDGE | 92 | depends on MPC10X_BRIDGE |
93 | |||
94 | config GAMECUBE_COMMON | ||
95 | bool | ||
96 | |||
97 | config USBGECKO_UDBG | ||
98 | bool "USB Gecko udbg console for the Nintendo GameCube/Wii" | ||
99 | depends on GAMECUBE_COMMON | ||
100 | help | ||
101 | If you say yes to this option, support will be included for the | ||
102 | USB Gecko adapter as an udbg console. | ||
103 | The USB Gecko is a EXI to USB Serial converter that can be plugged | ||
104 | into a memcard slot in the Nintendo GameCube/Wii. | ||
105 | |||
106 | This driver bypasses the EXI layer completely. | ||
107 | |||
108 | If in doubt, say N here. | ||
109 | |||
110 | config GAMECUBE | ||
111 | bool "Nintendo-GameCube" | ||
112 | depends on EMBEDDED6xx | ||
113 | select GAMECUBE_COMMON | ||
114 | help | ||
115 | Select GAMECUBE if configuring for the Nintendo GameCube. | ||
116 | More information at: <http://gc-linux.sourceforge.net/> | ||
117 | |||
118 | config WII | ||
119 | bool "Nintendo-Wii" | ||
120 | depends on EMBEDDED6xx | ||
121 | select GAMECUBE_COMMON | ||
122 | help | ||
123 | Select WII if configuring for the Nintendo Wii. | ||
124 | More information at: <http://gc-linux.sourceforge.net/> | ||
125 | |||
diff --git a/arch/powerpc/platforms/embedded6xx/Makefile b/arch/powerpc/platforms/embedded6xx/Makefile index 0773c08bd444..66c23e423f40 100644 --- a/arch/powerpc/platforms/embedded6xx/Makefile +++ b/arch/powerpc/platforms/embedded6xx/Makefile | |||
@@ -7,3 +7,7 @@ obj-$(CONFIG_STORCENTER) += storcenter.o | |||
7 | obj-$(CONFIG_PPC_HOLLY) += holly.o | 7 | obj-$(CONFIG_PPC_HOLLY) += holly.o |
8 | obj-$(CONFIG_PPC_PRPMC2800) += prpmc2800.o | 8 | obj-$(CONFIG_PPC_PRPMC2800) += prpmc2800.o |
9 | obj-$(CONFIG_PPC_C2K) += c2k.o | 9 | obj-$(CONFIG_PPC_C2K) += c2k.o |
10 | obj-$(CONFIG_USBGECKO_UDBG) += usbgecko_udbg.o | ||
11 | obj-$(CONFIG_GAMECUBE_COMMON) += flipper-pic.o | ||
12 | obj-$(CONFIG_GAMECUBE) += gamecube.o | ||
13 | obj-$(CONFIG_WII) += wii.o hlwd-pic.o | ||
diff --git a/arch/powerpc/platforms/embedded6xx/flipper-pic.c b/arch/powerpc/platforms/embedded6xx/flipper-pic.c new file mode 100644 index 000000000000..d5963285e3be --- /dev/null +++ b/arch/powerpc/platforms/embedded6xx/flipper-pic.c | |||
@@ -0,0 +1,263 @@ | |||
1 | /* | ||
2 | * arch/powerpc/platforms/embedded6xx/flipper-pic.c | ||
3 | * | ||
4 | * Nintendo GameCube/Wii "Flipper" interrupt controller support. | ||
5 | * Copyright (C) 2004-2009 The GameCube Linux Team | ||
6 | * Copyright (C) 2007,2008,2009 Albert Herranz | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License | ||
10 | * as published by the Free Software Foundation; either version 2 | ||
11 | * of the License, or (at your option) any later version. | ||
12 | * | ||
13 | */ | ||
14 | #define DRV_MODULE_NAME "flipper-pic" | ||
15 | #define pr_fmt(fmt) DRV_MODULE_NAME ": " fmt | ||
16 | |||
17 | #include <linux/kernel.h> | ||
18 | #include <linux/init.h> | ||
19 | #include <linux/irq.h> | ||
20 | #include <linux/of.h> | ||
21 | #include <asm/io.h> | ||
22 | |||
23 | #include "flipper-pic.h" | ||
24 | |||
25 | #define FLIPPER_NR_IRQS 32 | ||
26 | |||
27 | /* | ||
28 | * Each interrupt has a corresponding bit in both | ||
29 | * the Interrupt Cause (ICR) and Interrupt Mask (IMR) registers. | ||
30 | * | ||
31 | * Enabling/disabling an interrupt line involves setting/clearing | ||
32 | * the corresponding bit in IMR. | ||
33 | * Except for the RSW interrupt, all interrupts get deasserted automatically | ||
34 | * when the source deasserts the interrupt. | ||
35 | */ | ||
36 | #define FLIPPER_ICR 0x00 | ||
37 | #define FLIPPER_ICR_RSS (1<<16) /* reset switch state */ | ||
38 | |||
39 | #define FLIPPER_IMR 0x04 | ||
40 | |||
41 | #define FLIPPER_RESET 0x24 | ||
42 | |||
43 | |||
44 | /* | ||
45 | * IRQ chip hooks. | ||
46 | * | ||
47 | */ | ||
48 | |||
49 | static void flipper_pic_mask_and_ack(unsigned int virq) | ||
50 | { | ||
51 | int irq = virq_to_hw(virq); | ||
52 | void __iomem *io_base = get_irq_chip_data(virq); | ||
53 | u32 mask = 1 << irq; | ||
54 | |||
55 | clrbits32(io_base + FLIPPER_IMR, mask); | ||
56 | /* this is at least needed for RSW */ | ||
57 | out_be32(io_base + FLIPPER_ICR, mask); | ||
58 | } | ||
59 | |||
60 | static void flipper_pic_ack(unsigned int virq) | ||
61 | { | ||
62 | int irq = virq_to_hw(virq); | ||
63 | void __iomem *io_base = get_irq_chip_data(virq); | ||
64 | |||
65 | /* this is at least needed for RSW */ | ||
66 | out_be32(io_base + FLIPPER_ICR, 1 << irq); | ||
67 | } | ||
68 | |||
69 | static void flipper_pic_mask(unsigned int virq) | ||
70 | { | ||
71 | int irq = virq_to_hw(virq); | ||
72 | void __iomem *io_base = get_irq_chip_data(virq); | ||
73 | |||
74 | clrbits32(io_base + FLIPPER_IMR, 1 << irq); | ||
75 | } | ||
76 | |||
77 | static void flipper_pic_unmask(unsigned int virq) | ||
78 | { | ||
79 | int irq = virq_to_hw(virq); | ||
80 | void __iomem *io_base = get_irq_chip_data(virq); | ||
81 | |||
82 | setbits32(io_base + FLIPPER_IMR, 1 << irq); | ||
83 | } | ||
84 | |||
85 | |||
86 | static struct irq_chip flipper_pic = { | ||
87 | .name = "flipper-pic", | ||
88 | .ack = flipper_pic_ack, | ||
89 | .mask_ack = flipper_pic_mask_and_ack, | ||
90 | .mask = flipper_pic_mask, | ||
91 | .unmask = flipper_pic_unmask, | ||
92 | }; | ||
93 | |||
94 | /* | ||
95 | * IRQ host hooks. | ||
96 | * | ||
97 | */ | ||
98 | |||
99 | static struct irq_host *flipper_irq_host; | ||
100 | |||
101 | static int flipper_pic_map(struct irq_host *h, unsigned int virq, | ||
102 | irq_hw_number_t hwirq) | ||
103 | { | ||
104 | set_irq_chip_data(virq, h->host_data); | ||
105 | get_irq_desc(virq)->status |= IRQ_LEVEL; | ||
106 | set_irq_chip_and_handler(virq, &flipper_pic, handle_level_irq); | ||
107 | return 0; | ||
108 | } | ||
109 | |||
110 | static void flipper_pic_unmap(struct irq_host *h, unsigned int irq) | ||
111 | { | ||
112 | set_irq_chip_data(irq, NULL); | ||
113 | set_irq_chip(irq, NULL); | ||
114 | } | ||
115 | |||
116 | static int flipper_pic_match(struct irq_host *h, struct device_node *np) | ||
117 | { | ||
118 | return 1; | ||
119 | } | ||
120 | |||
121 | |||
122 | static struct irq_host_ops flipper_irq_host_ops = { | ||
123 | .map = flipper_pic_map, | ||
124 | .unmap = flipper_pic_unmap, | ||
125 | .match = flipper_pic_match, | ||
126 | }; | ||
127 | |||
128 | /* | ||
129 | * Platform hooks. | ||
130 | * | ||
131 | */ | ||
132 | |||
133 | static void __flipper_quiesce(void __iomem *io_base) | ||
134 | { | ||
135 | /* mask and ack all IRQs */ | ||
136 | out_be32(io_base + FLIPPER_IMR, 0x00000000); | ||
137 | out_be32(io_base + FLIPPER_ICR, 0xffffffff); | ||
138 | } | ||
139 | |||
140 | struct irq_host * __init flipper_pic_init(struct device_node *np) | ||
141 | { | ||
142 | struct device_node *pi; | ||
143 | struct irq_host *irq_host = NULL; | ||
144 | struct resource res; | ||
145 | void __iomem *io_base; | ||
146 | int retval; | ||
147 | |||
148 | pi = of_get_parent(np); | ||
149 | if (!pi) { | ||
150 | pr_err("no parent found\n"); | ||
151 | goto out; | ||
152 | } | ||
153 | if (!of_device_is_compatible(pi, "nintendo,flipper-pi")) { | ||
154 | pr_err("unexpected parent compatible\n"); | ||
155 | goto out; | ||
156 | } | ||
157 | |||
158 | retval = of_address_to_resource(pi, 0, &res); | ||
159 | if (retval) { | ||
160 | pr_err("no io memory range found\n"); | ||
161 | goto out; | ||
162 | } | ||
163 | io_base = ioremap(res.start, resource_size(&res)); | ||
164 | |||
165 | pr_info("controller at 0x%08x mapped to 0x%p\n", res.start, io_base); | ||
166 | |||
167 | __flipper_quiesce(io_base); | ||
168 | |||
169 | irq_host = irq_alloc_host(np, IRQ_HOST_MAP_LINEAR, FLIPPER_NR_IRQS, | ||
170 | &flipper_irq_host_ops, -1); | ||
171 | if (!irq_host) { | ||
172 | pr_err("failed to allocate irq_host\n"); | ||
173 | return NULL; | ||
174 | } | ||
175 | |||
176 | irq_host->host_data = io_base; | ||
177 | |||
178 | out: | ||
179 | return irq_host; | ||
180 | } | ||
181 | |||
182 | unsigned int flipper_pic_get_irq(void) | ||
183 | { | ||
184 | void __iomem *io_base = flipper_irq_host->host_data; | ||
185 | int irq; | ||
186 | u32 irq_status; | ||
187 | |||
188 | irq_status = in_be32(io_base + FLIPPER_ICR) & | ||
189 | in_be32(io_base + FLIPPER_IMR); | ||
190 | if (irq_status == 0) | ||
191 | return NO_IRQ; /* no more IRQs pending */ | ||
192 | |||
193 | irq = __ffs(irq_status); | ||
194 | return irq_linear_revmap(flipper_irq_host, irq); | ||
195 | } | ||
196 | |||
197 | /* | ||
198 | * Probe function. | ||
199 | * | ||
200 | */ | ||
201 | |||
202 | void __init flipper_pic_probe(void) | ||
203 | { | ||
204 | struct device_node *np; | ||
205 | |||
206 | np = of_find_compatible_node(NULL, NULL, "nintendo,flipper-pic"); | ||
207 | BUG_ON(!np); | ||
208 | |||
209 | flipper_irq_host = flipper_pic_init(np); | ||
210 | BUG_ON(!flipper_irq_host); | ||
211 | |||
212 | irq_set_default_host(flipper_irq_host); | ||
213 | |||
214 | of_node_put(np); | ||
215 | } | ||
216 | |||
217 | /* | ||
218 | * Misc functions related to the flipper chipset. | ||
219 | * | ||
220 | */ | ||
221 | |||
222 | /** | ||
223 | * flipper_quiesce() - quiesce flipper irq controller | ||
224 | * | ||
225 | * Mask and ack all interrupt sources. | ||
226 | * | ||
227 | */ | ||
228 | void flipper_quiesce(void) | ||
229 | { | ||
230 | void __iomem *io_base = flipper_irq_host->host_data; | ||
231 | |||
232 | __flipper_quiesce(io_base); | ||
233 | } | ||
234 | |||
235 | /* | ||
236 | * Resets the platform. | ||
237 | */ | ||
238 | void flipper_platform_reset(void) | ||
239 | { | ||
240 | void __iomem *io_base; | ||
241 | |||
242 | if (flipper_irq_host && flipper_irq_host->host_data) { | ||
243 | io_base = flipper_irq_host->host_data; | ||
244 | out_8(io_base + FLIPPER_RESET, 0x00); | ||
245 | } | ||
246 | } | ||
247 | |||
248 | /* | ||
249 | * Returns non-zero if the reset button is pressed. | ||
250 | */ | ||
251 | int flipper_is_reset_button_pressed(void) | ||
252 | { | ||
253 | void __iomem *io_base; | ||
254 | u32 icr; | ||
255 | |||
256 | if (flipper_irq_host && flipper_irq_host->host_data) { | ||
257 | io_base = flipper_irq_host->host_data; | ||
258 | icr = in_be32(io_base + FLIPPER_ICR); | ||
259 | return !(icr & FLIPPER_ICR_RSS); | ||
260 | } | ||
261 | return 0; | ||
262 | } | ||
263 | |||
diff --git a/arch/powerpc/platforms/embedded6xx/flipper-pic.h b/arch/powerpc/platforms/embedded6xx/flipper-pic.h new file mode 100644 index 000000000000..e339186b5663 --- /dev/null +++ b/arch/powerpc/platforms/embedded6xx/flipper-pic.h | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | * arch/powerpc/platforms/embedded6xx/flipper-pic.h | ||
3 | * | ||
4 | * Nintendo GameCube/Wii "Flipper" interrupt controller support. | ||
5 | * Copyright (C) 2004-2009 The GameCube Linux Team | ||
6 | * Copyright (C) 2007,2008,2009 Albert Herranz | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License | ||
10 | * as published by the Free Software Foundation; either version 2 | ||
11 | * of the License, or (at your option) any later version. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #ifndef __FLIPPER_PIC_H | ||
16 | #define __FLIPPER_PIC_H | ||
17 | |||
18 | unsigned int flipper_pic_get_irq(void); | ||
19 | void __init flipper_pic_probe(void); | ||
20 | |||
21 | void flipper_quiesce(void); | ||
22 | void flipper_platform_reset(void); | ||
23 | int flipper_is_reset_button_pressed(void); | ||
24 | |||
25 | #endif | ||
diff --git a/arch/powerpc/platforms/embedded6xx/gamecube.c b/arch/powerpc/platforms/embedded6xx/gamecube.c new file mode 100644 index 000000000000..1106fd99627f --- /dev/null +++ b/arch/powerpc/platforms/embedded6xx/gamecube.c | |||
@@ -0,0 +1,118 @@ | |||
1 | /* | ||
2 | * arch/powerpc/platforms/embedded6xx/gamecube.c | ||
3 | * | ||
4 | * Nintendo GameCube board-specific support | ||
5 | * Copyright (C) 2004-2009 The GameCube Linux Team | ||
6 | * Copyright (C) 2007,2008,2009 Albert Herranz | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License | ||
10 | * as published by the Free Software Foundation; either version 2 | ||
11 | * of the License, or (at your option) any later version. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #include <linux/kernel.h> | ||
16 | #include <linux/init.h> | ||
17 | #include <linux/irq.h> | ||
18 | #include <linux/kexec.h> | ||
19 | #include <linux/seq_file.h> | ||
20 | #include <linux/of_platform.h> | ||
21 | |||
22 | #include <asm/io.h> | ||
23 | #include <asm/machdep.h> | ||
24 | #include <asm/prom.h> | ||
25 | #include <asm/time.h> | ||
26 | #include <asm/udbg.h> | ||
27 | |||
28 | #include "flipper-pic.h" | ||
29 | #include "usbgecko_udbg.h" | ||
30 | |||
31 | |||
32 | static void gamecube_spin(void) | ||
33 | { | ||
34 | /* spin until power button pressed */ | ||
35 | for (;;) | ||
36 | cpu_relax(); | ||
37 | } | ||
38 | |||
39 | static void gamecube_restart(char *cmd) | ||
40 | { | ||
41 | local_irq_disable(); | ||
42 | flipper_platform_reset(); | ||
43 | gamecube_spin(); | ||
44 | } | ||
45 | |||
46 | static void gamecube_power_off(void) | ||
47 | { | ||
48 | local_irq_disable(); | ||
49 | gamecube_spin(); | ||
50 | } | ||
51 | |||
52 | static void gamecube_halt(void) | ||
53 | { | ||
54 | gamecube_restart(NULL); | ||
55 | } | ||
56 | |||
57 | static void __init gamecube_init_early(void) | ||
58 | { | ||
59 | ug_udbg_init(); | ||
60 | } | ||
61 | |||
62 | static int __init gamecube_probe(void) | ||
63 | { | ||
64 | unsigned long dt_root; | ||
65 | |||
66 | dt_root = of_get_flat_dt_root(); | ||
67 | if (!of_flat_dt_is_compatible(dt_root, "nintendo,gamecube")) | ||
68 | return 0; | ||
69 | |||
70 | return 1; | ||
71 | } | ||
72 | |||
73 | static void gamecube_shutdown(void) | ||
74 | { | ||
75 | flipper_quiesce(); | ||
76 | } | ||
77 | |||
78 | #ifdef CONFIG_KEXEC | ||
79 | static int gamecube_kexec_prepare(struct kimage *image) | ||
80 | { | ||
81 | return 0; | ||
82 | } | ||
83 | #endif /* CONFIG_KEXEC */ | ||
84 | |||
85 | |||
86 | define_machine(gamecube) { | ||
87 | .name = "gamecube", | ||
88 | .probe = gamecube_probe, | ||
89 | .init_early = gamecube_init_early, | ||
90 | .restart = gamecube_restart, | ||
91 | .power_off = gamecube_power_off, | ||
92 | .halt = gamecube_halt, | ||
93 | .init_IRQ = flipper_pic_probe, | ||
94 | .get_irq = flipper_pic_get_irq, | ||
95 | .calibrate_decr = generic_calibrate_decr, | ||
96 | .progress = udbg_progress, | ||
97 | .machine_shutdown = gamecube_shutdown, | ||
98 | #ifdef CONFIG_KEXEC | ||
99 | .machine_kexec_prepare = gamecube_kexec_prepare, | ||
100 | #endif | ||
101 | }; | ||
102 | |||
103 | |||
104 | static struct of_device_id gamecube_of_bus[] = { | ||
105 | { .compatible = "nintendo,flipper", }, | ||
106 | { }, | ||
107 | }; | ||
108 | |||
109 | static int __init gamecube_device_probe(void) | ||
110 | { | ||
111 | if (!machine_is(gamecube)) | ||
112 | return 0; | ||
113 | |||
114 | of_platform_bus_probe(NULL, gamecube_of_bus, NULL); | ||
115 | return 0; | ||
116 | } | ||
117 | device_initcall(gamecube_device_probe); | ||
118 | |||
diff --git a/arch/powerpc/platforms/embedded6xx/hlwd-pic.c b/arch/powerpc/platforms/embedded6xx/hlwd-pic.c new file mode 100644 index 000000000000..dd20bff33207 --- /dev/null +++ b/arch/powerpc/platforms/embedded6xx/hlwd-pic.c | |||
@@ -0,0 +1,241 @@ | |||
1 | /* | ||
2 | * arch/powerpc/platforms/embedded6xx/hlwd-pic.c | ||
3 | * | ||
4 | * Nintendo Wii "Hollywood" interrupt controller support. | ||
5 | * Copyright (C) 2009 The GameCube Linux Team | ||
6 | * Copyright (C) 2009 Albert Herranz | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License | ||
10 | * as published by the Free Software Foundation; either version 2 | ||
11 | * of the License, or (at your option) any later version. | ||
12 | * | ||
13 | */ | ||
14 | #define DRV_MODULE_NAME "hlwd-pic" | ||
15 | #define pr_fmt(fmt) DRV_MODULE_NAME ": " fmt | ||
16 | |||
17 | #include <linux/kernel.h> | ||
18 | #include <linux/init.h> | ||
19 | #include <linux/irq.h> | ||
20 | #include <linux/of.h> | ||
21 | #include <asm/io.h> | ||
22 | |||
23 | #include "hlwd-pic.h" | ||
24 | |||
25 | #define HLWD_NR_IRQS 32 | ||
26 | |||
27 | /* | ||
28 | * Each interrupt has a corresponding bit in both | ||
29 | * the Interrupt Cause (ICR) and Interrupt Mask (IMR) registers. | ||
30 | * | ||
31 | * Enabling/disabling an interrupt line involves asserting/clearing | ||
32 | * the corresponding bit in IMR. ACK'ing a request simply involves | ||
33 | * asserting the corresponding bit in ICR. | ||
34 | */ | ||
35 | #define HW_BROADWAY_ICR 0x00 | ||
36 | #define HW_BROADWAY_IMR 0x04 | ||
37 | |||
38 | |||
39 | /* | ||
40 | * IRQ chip hooks. | ||
41 | * | ||
42 | */ | ||
43 | |||
44 | static void hlwd_pic_mask_and_ack(unsigned int virq) | ||
45 | { | ||
46 | int irq = virq_to_hw(virq); | ||
47 | void __iomem *io_base = get_irq_chip_data(virq); | ||
48 | u32 mask = 1 << irq; | ||
49 | |||
50 | clrbits32(io_base + HW_BROADWAY_IMR, mask); | ||
51 | out_be32(io_base + HW_BROADWAY_ICR, mask); | ||
52 | } | ||
53 | |||
54 | static void hlwd_pic_ack(unsigned int virq) | ||
55 | { | ||
56 | int irq = virq_to_hw(virq); | ||
57 | void __iomem *io_base = get_irq_chip_data(virq); | ||
58 | |||
59 | out_be32(io_base + HW_BROADWAY_ICR, 1 << irq); | ||
60 | } | ||
61 | |||
62 | static void hlwd_pic_mask(unsigned int virq) | ||
63 | { | ||
64 | int irq = virq_to_hw(virq); | ||
65 | void __iomem *io_base = get_irq_chip_data(virq); | ||
66 | |||
67 | clrbits32(io_base + HW_BROADWAY_IMR, 1 << irq); | ||
68 | } | ||
69 | |||
70 | static void hlwd_pic_unmask(unsigned int virq) | ||
71 | { | ||
72 | int irq = virq_to_hw(virq); | ||
73 | void __iomem *io_base = get_irq_chip_data(virq); | ||
74 | |||
75 | setbits32(io_base + HW_BROADWAY_IMR, 1 << irq); | ||
76 | } | ||
77 | |||
78 | |||
79 | static struct irq_chip hlwd_pic = { | ||
80 | .name = "hlwd-pic", | ||
81 | .ack = hlwd_pic_ack, | ||
82 | .mask_ack = hlwd_pic_mask_and_ack, | ||
83 | .mask = hlwd_pic_mask, | ||
84 | .unmask = hlwd_pic_unmask, | ||
85 | }; | ||
86 | |||
87 | /* | ||
88 | * IRQ host hooks. | ||
89 | * | ||
90 | */ | ||
91 | |||
92 | static struct irq_host *hlwd_irq_host; | ||
93 | |||
94 | static int hlwd_pic_map(struct irq_host *h, unsigned int virq, | ||
95 | irq_hw_number_t hwirq) | ||
96 | { | ||
97 | set_irq_chip_data(virq, h->host_data); | ||
98 | get_irq_desc(virq)->status |= IRQ_LEVEL; | ||
99 | set_irq_chip_and_handler(virq, &hlwd_pic, handle_level_irq); | ||
100 | return 0; | ||
101 | } | ||
102 | |||
103 | static void hlwd_pic_unmap(struct irq_host *h, unsigned int irq) | ||
104 | { | ||
105 | set_irq_chip_data(irq, NULL); | ||
106 | set_irq_chip(irq, NULL); | ||
107 | } | ||
108 | |||
109 | static struct irq_host_ops hlwd_irq_host_ops = { | ||
110 | .map = hlwd_pic_map, | ||
111 | .unmap = hlwd_pic_unmap, | ||
112 | }; | ||
113 | |||
114 | static unsigned int __hlwd_pic_get_irq(struct irq_host *h) | ||
115 | { | ||
116 | void __iomem *io_base = h->host_data; | ||
117 | int irq; | ||
118 | u32 irq_status; | ||
119 | |||
120 | irq_status = in_be32(io_base + HW_BROADWAY_ICR) & | ||
121 | in_be32(io_base + HW_BROADWAY_IMR); | ||
122 | if (irq_status == 0) | ||
123 | return NO_IRQ; /* no more IRQs pending */ | ||
124 | |||
125 | irq = __ffs(irq_status); | ||
126 | return irq_linear_revmap(h, irq); | ||
127 | } | ||
128 | |||
129 | static void hlwd_pic_irq_cascade(unsigned int cascade_virq, | ||
130 | struct irq_desc *desc) | ||
131 | { | ||
132 | struct irq_host *irq_host = get_irq_data(cascade_virq); | ||
133 | unsigned int virq; | ||
134 | |||
135 | spin_lock(&desc->lock); | ||
136 | desc->chip->mask(cascade_virq); /* IRQ_LEVEL */ | ||
137 | spin_unlock(&desc->lock); | ||
138 | |||
139 | virq = __hlwd_pic_get_irq(irq_host); | ||
140 | if (virq != NO_IRQ) | ||
141 | generic_handle_irq(virq); | ||
142 | else | ||
143 | pr_err("spurious interrupt!\n"); | ||
144 | |||
145 | spin_lock(&desc->lock); | ||
146 | desc->chip->ack(cascade_virq); /* IRQ_LEVEL */ | ||
147 | if (!(desc->status & IRQ_DISABLED) && desc->chip->unmask) | ||
148 | desc->chip->unmask(cascade_virq); | ||
149 | spin_unlock(&desc->lock); | ||
150 | } | ||
151 | |||
152 | /* | ||
153 | * Platform hooks. | ||
154 | * | ||
155 | */ | ||
156 | |||
157 | static void __hlwd_quiesce(void __iomem *io_base) | ||
158 | { | ||
159 | /* mask and ack all IRQs */ | ||
160 | out_be32(io_base + HW_BROADWAY_IMR, 0); | ||
161 | out_be32(io_base + HW_BROADWAY_ICR, 0xffffffff); | ||
162 | } | ||
163 | |||
164 | struct irq_host *hlwd_pic_init(struct device_node *np) | ||
165 | { | ||
166 | struct irq_host *irq_host; | ||
167 | struct resource res; | ||
168 | void __iomem *io_base; | ||
169 | int retval; | ||
170 | |||
171 | retval = of_address_to_resource(np, 0, &res); | ||
172 | if (retval) { | ||
173 | pr_err("no io memory range found\n"); | ||
174 | return NULL; | ||
175 | } | ||
176 | io_base = ioremap(res.start, resource_size(&res)); | ||
177 | if (!io_base) { | ||
178 | pr_err("ioremap failed\n"); | ||
179 | return NULL; | ||
180 | } | ||
181 | |||
182 | pr_info("controller at 0x%08x mapped to 0x%p\n", res.start, io_base); | ||
183 | |||
184 | __hlwd_quiesce(io_base); | ||
185 | |||
186 | irq_host = irq_alloc_host(np, IRQ_HOST_MAP_LINEAR, HLWD_NR_IRQS, | ||
187 | &hlwd_irq_host_ops, -1); | ||
188 | if (!irq_host) { | ||
189 | pr_err("failed to allocate irq_host\n"); | ||
190 | return NULL; | ||
191 | } | ||
192 | irq_host->host_data = io_base; | ||
193 | |||
194 | return irq_host; | ||
195 | } | ||
196 | |||
197 | unsigned int hlwd_pic_get_irq(void) | ||
198 | { | ||
199 | return __hlwd_pic_get_irq(hlwd_irq_host); | ||
200 | } | ||
201 | |||
202 | /* | ||
203 | * Probe function. | ||
204 | * | ||
205 | */ | ||
206 | |||
207 | void hlwd_pic_probe(void) | ||
208 | { | ||
209 | struct irq_host *host; | ||
210 | struct device_node *np; | ||
211 | const u32 *interrupts; | ||
212 | int cascade_virq; | ||
213 | |||
214 | for_each_compatible_node(np, NULL, "nintendo,hollywood-pic") { | ||
215 | interrupts = of_get_property(np, "interrupts", NULL); | ||
216 | if (interrupts) { | ||
217 | host = hlwd_pic_init(np); | ||
218 | BUG_ON(!host); | ||
219 | cascade_virq = irq_of_parse_and_map(np, 0); | ||
220 | set_irq_data(cascade_virq, host); | ||
221 | set_irq_chained_handler(cascade_virq, | ||
222 | hlwd_pic_irq_cascade); | ||
223 | hlwd_irq_host = host; | ||
224 | break; | ||
225 | } | ||
226 | } | ||
227 | } | ||
228 | |||
229 | /** | ||
230 | * hlwd_quiesce() - quiesce hollywood irq controller | ||
231 | * | ||
232 | * Mask and ack all interrupt sources. | ||
233 | * | ||
234 | */ | ||
235 | void hlwd_quiesce(void) | ||
236 | { | ||
237 | void __iomem *io_base = hlwd_irq_host->host_data; | ||
238 | |||
239 | __hlwd_quiesce(io_base); | ||
240 | } | ||
241 | |||
diff --git a/arch/powerpc/platforms/embedded6xx/hlwd-pic.h b/arch/powerpc/platforms/embedded6xx/hlwd-pic.h new file mode 100644 index 000000000000..d2e5a092761e --- /dev/null +++ b/arch/powerpc/platforms/embedded6xx/hlwd-pic.h | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | * arch/powerpc/platforms/embedded6xx/hlwd-pic.h | ||
3 | * | ||
4 | * Nintendo Wii "Hollywood" interrupt controller support. | ||
5 | * Copyright (C) 2009 The GameCube Linux Team | ||
6 | * Copyright (C) 2009 Albert Herranz | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License | ||
10 | * as published by the Free Software Foundation; either version 2 | ||
11 | * of the License, or (at your option) any later version. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #ifndef __HLWD_PIC_H | ||
16 | #define __HLWD_PIC_H | ||
17 | |||
18 | extern unsigned int hlwd_pic_get_irq(void); | ||
19 | extern void hlwd_pic_probe(void); | ||
20 | extern void hlwd_quiesce(void); | ||
21 | |||
22 | #endif | ||
diff --git a/arch/powerpc/platforms/embedded6xx/usbgecko_udbg.c b/arch/powerpc/platforms/embedded6xx/usbgecko_udbg.c new file mode 100644 index 000000000000..20a8ed91962e --- /dev/null +++ b/arch/powerpc/platforms/embedded6xx/usbgecko_udbg.c | |||
@@ -0,0 +1,328 @@ | |||
1 | /* | ||
2 | * arch/powerpc/platforms/embedded6xx/usbgecko_udbg.c | ||
3 | * | ||
4 | * udbg serial input/output routines for the USB Gecko adapter. | ||
5 | * Copyright (C) 2008-2009 The GameCube Linux Team | ||
6 | * Copyright (C) 2008,2009 Albert Herranz | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License | ||
10 | * as published by the Free Software Foundation; either version 2 | ||
11 | * of the License, or (at your option) any later version. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #include <mm/mmu_decl.h> | ||
16 | |||
17 | #include <asm/io.h> | ||
18 | #include <asm/prom.h> | ||
19 | #include <asm/udbg.h> | ||
20 | #include <asm/fixmap.h> | ||
21 | |||
22 | #include "usbgecko_udbg.h" | ||
23 | |||
24 | |||
25 | #define EXI_CLK_32MHZ 5 | ||
26 | |||
27 | #define EXI_CSR 0x00 | ||
28 | #define EXI_CSR_CLKMASK (0x7<<4) | ||
29 | #define EXI_CSR_CLK_32MHZ (EXI_CLK_32MHZ<<4) | ||
30 | #define EXI_CSR_CSMASK (0x7<<7) | ||
31 | #define EXI_CSR_CS_0 (0x1<<7) /* Chip Select 001 */ | ||
32 | |||
33 | #define EXI_CR 0x0c | ||
34 | #define EXI_CR_TSTART (1<<0) | ||
35 | #define EXI_CR_WRITE (1<<2) | ||
36 | #define EXI_CR_READ_WRITE (2<<2) | ||
37 | #define EXI_CR_TLEN(len) (((len)-1)<<4) | ||
38 | |||
39 | #define EXI_DATA 0x10 | ||
40 | |||
41 | #define UG_READ_ATTEMPTS 100 | ||
42 | #define UG_WRITE_ATTEMPTS 100 | ||
43 | |||
44 | |||
45 | static void __iomem *ug_io_base; | ||
46 | |||
47 | /* | ||
48 | * Performs one input/output transaction between the exi host and the usbgecko. | ||
49 | */ | ||
50 | static u32 ug_io_transaction(u32 in) | ||
51 | { | ||
52 | u32 __iomem *csr_reg = ug_io_base + EXI_CSR; | ||
53 | u32 __iomem *data_reg = ug_io_base + EXI_DATA; | ||
54 | u32 __iomem *cr_reg = ug_io_base + EXI_CR; | ||
55 | u32 csr, data, cr; | ||
56 | |||
57 | /* select */ | ||
58 | csr = EXI_CSR_CLK_32MHZ | EXI_CSR_CS_0; | ||
59 | out_be32(csr_reg, csr); | ||
60 | |||
61 | /* read/write */ | ||
62 | data = in; | ||
63 | out_be32(data_reg, data); | ||
64 | cr = EXI_CR_TLEN(2) | EXI_CR_READ_WRITE | EXI_CR_TSTART; | ||
65 | out_be32(cr_reg, cr); | ||
66 | |||
67 | while (in_be32(cr_reg) & EXI_CR_TSTART) | ||
68 | barrier(); | ||
69 | |||
70 | /* deselect */ | ||
71 | out_be32(csr_reg, 0); | ||
72 | |||
73 | /* result */ | ||
74 | data = in_be32(data_reg); | ||
75 | |||
76 | return data; | ||
77 | } | ||
78 | |||
79 | /* | ||
80 | * Returns true if an usbgecko adapter is found. | ||
81 | */ | ||
82 | static int ug_is_adapter_present(void) | ||
83 | { | ||
84 | if (!ug_io_base) | ||
85 | return 0; | ||
86 | |||
87 | return ug_io_transaction(0x90000000) == 0x04700000; | ||
88 | } | ||
89 | |||
90 | /* | ||
91 | * Returns true if the TX fifo is ready for transmission. | ||
92 | */ | ||
93 | static int ug_is_txfifo_ready(void) | ||
94 | { | ||
95 | return ug_io_transaction(0xc0000000) & 0x04000000; | ||
96 | } | ||
97 | |||
98 | /* | ||
99 | * Tries to transmit a character. | ||
100 | * If the TX fifo is not ready the result is undefined. | ||
101 | */ | ||
102 | static void ug_raw_putc(char ch) | ||
103 | { | ||
104 | ug_io_transaction(0xb0000000 | (ch << 20)); | ||
105 | } | ||
106 | |||
107 | /* | ||
108 | * Transmits a character. | ||
109 | * It silently fails if the TX fifo is not ready after a number of retries. | ||
110 | */ | ||
111 | static void ug_putc(char ch) | ||
112 | { | ||
113 | int count = UG_WRITE_ATTEMPTS; | ||
114 | |||
115 | if (!ug_io_base) | ||
116 | return; | ||
117 | |||
118 | if (ch == '\n') | ||
119 | ug_putc('\r'); | ||
120 | |||
121 | while (!ug_is_txfifo_ready() && count--) | ||
122 | barrier(); | ||
123 | if (count >= 0) | ||
124 | ug_raw_putc(ch); | ||
125 | } | ||
126 | |||
127 | /* | ||
128 | * Returns true if the RX fifo is ready for transmission. | ||
129 | */ | ||
130 | static int ug_is_rxfifo_ready(void) | ||
131 | { | ||
132 | return ug_io_transaction(0xd0000000) & 0x04000000; | ||
133 | } | ||
134 | |||
135 | /* | ||
136 | * Tries to receive a character. | ||
137 | * If a character is unavailable the function returns -1. | ||
138 | */ | ||
139 | static int ug_raw_getc(void) | ||
140 | { | ||
141 | u32 data = ug_io_transaction(0xa0000000); | ||
142 | if (data & 0x08000000) | ||
143 | return (data >> 16) & 0xff; | ||
144 | else | ||
145 | return -1; | ||
146 | } | ||
147 | |||
148 | /* | ||
149 | * Receives a character. | ||
150 | * It fails if the RX fifo is not ready after a number of retries. | ||
151 | */ | ||
152 | static int ug_getc(void) | ||
153 | { | ||
154 | int count = UG_READ_ATTEMPTS; | ||
155 | |||
156 | if (!ug_io_base) | ||
157 | return -1; | ||
158 | |||
159 | while (!ug_is_rxfifo_ready() && count--) | ||
160 | barrier(); | ||
161 | return ug_raw_getc(); | ||
162 | } | ||
163 | |||
164 | /* | ||
165 | * udbg functions. | ||
166 | * | ||
167 | */ | ||
168 | |||
169 | /* | ||
170 | * Transmits a character. | ||
171 | */ | ||
172 | void ug_udbg_putc(char ch) | ||
173 | { | ||
174 | ug_putc(ch); | ||
175 | } | ||
176 | |||
177 | /* | ||
178 | * Receives a character. Waits until a character is available. | ||
179 | */ | ||
180 | static int ug_udbg_getc(void) | ||
181 | { | ||
182 | int ch; | ||
183 | |||
184 | while ((ch = ug_getc()) == -1) | ||
185 | barrier(); | ||
186 | return ch; | ||
187 | } | ||
188 | |||
189 | /* | ||
190 | * Receives a character. If a character is not available, returns -1. | ||
191 | */ | ||
192 | static int ug_udbg_getc_poll(void) | ||
193 | { | ||
194 | if (!ug_is_rxfifo_ready()) | ||
195 | return -1; | ||
196 | return ug_getc(); | ||
197 | } | ||
198 | |||
199 | /* | ||
200 | * Retrieves and prepares the virtual address needed to access the hardware. | ||
201 | */ | ||
202 | static void __iomem *ug_udbg_setup_exi_io_base(struct device_node *np) | ||
203 | { | ||
204 | void __iomem *exi_io_base = NULL; | ||
205 | phys_addr_t paddr; | ||
206 | const unsigned int *reg; | ||
207 | |||
208 | reg = of_get_property(np, "reg", NULL); | ||
209 | if (reg) { | ||
210 | paddr = of_translate_address(np, reg); | ||
211 | if (paddr) | ||
212 | exi_io_base = ioremap(paddr, reg[1]); | ||
213 | } | ||
214 | return exi_io_base; | ||
215 | } | ||
216 | |||
217 | /* | ||
218 | * Checks if a USB Gecko adapter is inserted in any memory card slot. | ||
219 | */ | ||
220 | static void __iomem *ug_udbg_probe(void __iomem *exi_io_base) | ||
221 | { | ||
222 | int i; | ||
223 | |||
224 | /* look for a usbgecko on memcard slots A and B */ | ||
225 | for (i = 0; i < 2; i++) { | ||
226 | ug_io_base = exi_io_base + 0x14 * i; | ||
227 | if (ug_is_adapter_present()) | ||
228 | break; | ||
229 | } | ||
230 | if (i == 2) | ||
231 | ug_io_base = NULL; | ||
232 | return ug_io_base; | ||
233 | |||
234 | } | ||
235 | |||
236 | /* | ||
237 | * USB Gecko udbg support initialization. | ||
238 | */ | ||
239 | void __init ug_udbg_init(void) | ||
240 | { | ||
241 | struct device_node *np; | ||
242 | void __iomem *exi_io_base; | ||
243 | |||
244 | if (ug_io_base) | ||
245 | udbg_printf("%s: early -> final\n", __func__); | ||
246 | |||
247 | np = of_find_compatible_node(NULL, NULL, "nintendo,flipper-exi"); | ||
248 | if (!np) { | ||
249 | udbg_printf("%s: EXI node not found\n", __func__); | ||
250 | goto done; | ||
251 | } | ||
252 | |||
253 | exi_io_base = ug_udbg_setup_exi_io_base(np); | ||
254 | if (!exi_io_base) { | ||
255 | udbg_printf("%s: failed to setup EXI io base\n", __func__); | ||
256 | goto done; | ||
257 | } | ||
258 | |||
259 | if (!ug_udbg_probe(exi_io_base)) { | ||
260 | udbg_printf("usbgecko_udbg: not found\n"); | ||
261 | iounmap(exi_io_base); | ||
262 | } else { | ||
263 | udbg_putc = ug_udbg_putc; | ||
264 | udbg_getc = ug_udbg_getc; | ||
265 | udbg_getc_poll = ug_udbg_getc_poll; | ||
266 | udbg_printf("usbgecko_udbg: ready\n"); | ||
267 | } | ||
268 | |||
269 | done: | ||
270 | if (np) | ||
271 | of_node_put(np); | ||
272 | return; | ||
273 | } | ||
274 | |||
275 | #ifdef CONFIG_PPC_EARLY_DEBUG_USBGECKO | ||
276 | |||
277 | static phys_addr_t __init ug_early_grab_io_addr(void) | ||
278 | { | ||
279 | #if defined(CONFIG_GAMECUBE) | ||
280 | return 0x0c000000; | ||
281 | #elif defined(CONFIG_WII) | ||
282 | return 0x0d000000; | ||
283 | #else | ||
284 | #error Invalid platform for USB Gecko based early debugging. | ||
285 | #endif | ||
286 | } | ||
287 | |||
288 | /* | ||
289 | * USB Gecko early debug support initialization for udbg. | ||
290 | */ | ||
291 | void __init udbg_init_usbgecko(void) | ||
292 | { | ||
293 | void __iomem *early_debug_area; | ||
294 | void __iomem *exi_io_base; | ||
295 | |||
296 | /* | ||
297 | * At this point we have a BAT already setup that enables I/O | ||
298 | * to the EXI hardware. | ||
299 | * | ||
300 | * The BAT uses a virtual address range reserved at the fixmap. | ||
301 | * This must match the virtual address configured in | ||
302 | * head_32.S:setup_usbgecko_bat(). | ||
303 | */ | ||
304 | early_debug_area = (void __iomem *)__fix_to_virt(FIX_EARLY_DEBUG_BASE); | ||
305 | exi_io_base = early_debug_area + 0x00006800; | ||
306 | |||
307 | /* try to detect a USB Gecko */ | ||
308 | if (!ug_udbg_probe(exi_io_base)) | ||
309 | return; | ||
310 | |||
311 | /* we found a USB Gecko, load udbg hooks */ | ||
312 | udbg_putc = ug_udbg_putc; | ||
313 | udbg_getc = ug_udbg_getc; | ||
314 | udbg_getc_poll = ug_udbg_getc_poll; | ||
315 | |||
316 | /* | ||
317 | * Prepare again the same BAT for MMU_init. | ||
318 | * This allows udbg I/O to continue working after the MMU is | ||
319 | * turned on for real. | ||
320 | * It is safe to continue using the same virtual address as it is | ||
321 | * a reserved fixmap area. | ||
322 | */ | ||
323 | setbat(1, (unsigned long)early_debug_area, | ||
324 | ug_early_grab_io_addr(), 128*1024, PAGE_KERNEL_NCG); | ||
325 | } | ||
326 | |||
327 | #endif /* CONFIG_PPC_EARLY_DEBUG_USBGECKO */ | ||
328 | |||
diff --git a/arch/powerpc/platforms/embedded6xx/usbgecko_udbg.h b/arch/powerpc/platforms/embedded6xx/usbgecko_udbg.h new file mode 100644 index 000000000000..bb6cde4ad764 --- /dev/null +++ b/arch/powerpc/platforms/embedded6xx/usbgecko_udbg.h | |||
@@ -0,0 +1,32 @@ | |||
1 | /* | ||
2 | * arch/powerpc/platforms/embedded6xx/usbgecko_udbg.h | ||
3 | * | ||
4 | * udbg serial input/output routines for the USB Gecko adapter. | ||
5 | * Copyright (C) 2008-2009 The GameCube Linux Team | ||
6 | * Copyright (C) 2008,2009 Albert Herranz | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License | ||
10 | * as published by the Free Software Foundation; either version 2 | ||
11 | * of the License, or (at your option) any later version. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #ifndef __USBGECKO_UDBG_H | ||
16 | #define __USBGECKO_UDBG_H | ||
17 | |||
18 | #ifdef CONFIG_USBGECKO_UDBG | ||
19 | |||
20 | extern void __init ug_udbg_init(void); | ||
21 | |||
22 | #else | ||
23 | |||
24 | static inline void __init ug_udbg_init(void) | ||
25 | { | ||
26 | } | ||
27 | |||
28 | #endif /* CONFIG_USBGECKO_UDBG */ | ||
29 | |||
30 | void __init udbg_init_usbgecko(void); | ||
31 | |||
32 | #endif /* __USBGECKO_UDBG_H */ | ||
diff --git a/arch/powerpc/platforms/embedded6xx/wii.c b/arch/powerpc/platforms/embedded6xx/wii.c new file mode 100644 index 000000000000..57e5b608fa1a --- /dev/null +++ b/arch/powerpc/platforms/embedded6xx/wii.c | |||
@@ -0,0 +1,268 @@ | |||
1 | /* | ||
2 | * arch/powerpc/platforms/embedded6xx/wii.c | ||
3 | * | ||
4 | * Nintendo Wii board-specific support | ||
5 | * Copyright (C) 2008-2009 The GameCube Linux Team | ||
6 | * Copyright (C) 2008,2009 Albert Herranz | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License | ||
10 | * as published by the Free Software Foundation; either version 2 | ||
11 | * of the License, or (at your option) any later version. | ||
12 | * | ||
13 | */ | ||
14 | #define DRV_MODULE_NAME "wii" | ||
15 | #define pr_fmt(fmt) DRV_MODULE_NAME ": " fmt | ||
16 | |||
17 | #include <linux/kernel.h> | ||
18 | #include <linux/init.h> | ||
19 | #include <linux/irq.h> | ||
20 | #include <linux/seq_file.h> | ||
21 | #include <linux/kexec.h> | ||
22 | #include <linux/of_platform.h> | ||
23 | #include <linux/lmb.h> | ||
24 | #include <mm/mmu_decl.h> | ||
25 | |||
26 | #include <asm/io.h> | ||
27 | #include <asm/machdep.h> | ||
28 | #include <asm/prom.h> | ||
29 | #include <asm/time.h> | ||
30 | #include <asm/udbg.h> | ||
31 | |||
32 | #include "flipper-pic.h" | ||
33 | #include "hlwd-pic.h" | ||
34 | #include "usbgecko_udbg.h" | ||
35 | |||
36 | /* control block */ | ||
37 | #define HW_CTRL_COMPATIBLE "nintendo,hollywood-control" | ||
38 | |||
39 | #define HW_CTRL_RESETS 0x94 | ||
40 | #define HW_CTRL_RESETS_SYS (1<<0) | ||
41 | |||
42 | /* gpio */ | ||
43 | #define HW_GPIO_COMPATIBLE "nintendo,hollywood-gpio" | ||
44 | |||
45 | #define HW_GPIO_BASE(idx) (idx * 0x20) | ||
46 | #define HW_GPIO_OUT(idx) (HW_GPIO_BASE(idx) + 0) | ||
47 | #define HW_GPIO_DIR(idx) (HW_GPIO_BASE(idx) + 4) | ||
48 | |||
49 | #define HW_GPIO_SHUTDOWN (1<<1) | ||
50 | #define HW_GPIO_SLOT_LED (1<<5) | ||
51 | #define HW_GPIO_SENSOR_BAR (1<<8) | ||
52 | |||
53 | |||
54 | static void __iomem *hw_ctrl; | ||
55 | static void __iomem *hw_gpio; | ||
56 | |||
57 | unsigned long wii_hole_start; | ||
58 | unsigned long wii_hole_size; | ||
59 | |||
60 | |||
61 | static int __init page_aligned(unsigned long x) | ||
62 | { | ||
63 | return !(x & (PAGE_SIZE-1)); | ||
64 | } | ||
65 | |||
66 | void __init wii_memory_fixups(void) | ||
67 | { | ||
68 | struct lmb_property *p = lmb.memory.region; | ||
69 | |||
70 | /* | ||
71 | * This is part of a workaround to allow the use of two | ||
72 | * discontiguous RAM ranges on the Wii, even if this is | ||
73 | * currently unsupported on 32-bit PowerPC Linux. | ||
74 | * | ||
75 | * We coealesce the two memory ranges of the Wii into a | ||
76 | * single range, then create a reservation for the "hole" | ||
77 | * between both ranges. | ||
78 | */ | ||
79 | |||
80 | BUG_ON(lmb.memory.cnt != 2); | ||
81 | BUG_ON(!page_aligned(p[0].base) || !page_aligned(p[1].base)); | ||
82 | |||
83 | p[0].size = _ALIGN_DOWN(p[0].size, PAGE_SIZE); | ||
84 | p[1].size = _ALIGN_DOWN(p[1].size, PAGE_SIZE); | ||
85 | |||
86 | wii_hole_start = p[0].base + p[0].size; | ||
87 | wii_hole_size = p[1].base - wii_hole_start; | ||
88 | |||
89 | pr_info("MEM1: <%08llx %08llx>\n", p[0].base, p[0].size); | ||
90 | pr_info("HOLE: <%08lx %08lx>\n", wii_hole_start, wii_hole_size); | ||
91 | pr_info("MEM2: <%08llx %08llx>\n", p[1].base, p[1].size); | ||
92 | |||
93 | p[0].size += wii_hole_size + p[1].size; | ||
94 | |||
95 | lmb.memory.cnt = 1; | ||
96 | lmb_analyze(); | ||
97 | |||
98 | /* reserve the hole */ | ||
99 | lmb_reserve(wii_hole_start, wii_hole_size); | ||
100 | |||
101 | /* allow ioremapping the address space in the hole */ | ||
102 | __allow_ioremap_reserved = 1; | ||
103 | } | ||
104 | |||
105 | unsigned long __init wii_mmu_mapin_mem2(unsigned long top) | ||
106 | { | ||
107 | unsigned long delta, size, bl; | ||
108 | unsigned long max_size = (256<<20); | ||
109 | |||
110 | /* MEM2 64MB@0x10000000 */ | ||
111 | delta = wii_hole_start + wii_hole_size; | ||
112 | size = top - delta; | ||
113 | for (bl = 128<<10; bl < max_size; bl <<= 1) { | ||
114 | if (bl * 2 > size) | ||
115 | break; | ||
116 | } | ||
117 | setbat(4, PAGE_OFFSET+delta, delta, bl, PAGE_KERNEL_X); | ||
118 | return delta + bl; | ||
119 | } | ||
120 | |||
121 | static void wii_spin(void) | ||
122 | { | ||
123 | local_irq_disable(); | ||
124 | for (;;) | ||
125 | cpu_relax(); | ||
126 | } | ||
127 | |||
128 | static void __iomem *wii_ioremap_hw_regs(char *name, char *compatible) | ||
129 | { | ||
130 | void __iomem *hw_regs = NULL; | ||
131 | struct device_node *np; | ||
132 | struct resource res; | ||
133 | int error = -ENODEV; | ||
134 | |||
135 | np = of_find_compatible_node(NULL, NULL, compatible); | ||
136 | if (!np) { | ||
137 | pr_err("no compatible node found for %s\n", compatible); | ||
138 | goto out; | ||
139 | } | ||
140 | error = of_address_to_resource(np, 0, &res); | ||
141 | if (error) { | ||
142 | pr_err("no valid reg found for %s\n", np->name); | ||
143 | goto out_put; | ||
144 | } | ||
145 | |||
146 | hw_regs = ioremap(res.start, resource_size(&res)); | ||
147 | if (hw_regs) { | ||
148 | pr_info("%s at 0x%08x mapped to 0x%p\n", name, | ||
149 | res.start, hw_regs); | ||
150 | } | ||
151 | |||
152 | out_put: | ||
153 | of_node_put(np); | ||
154 | out: | ||
155 | return hw_regs; | ||
156 | } | ||
157 | |||
158 | static void __init wii_setup_arch(void) | ||
159 | { | ||
160 | hw_ctrl = wii_ioremap_hw_regs("hw_ctrl", HW_CTRL_COMPATIBLE); | ||
161 | hw_gpio = wii_ioremap_hw_regs("hw_gpio", HW_GPIO_COMPATIBLE); | ||
162 | if (hw_gpio) { | ||
163 | /* turn off the front blue led and IR light */ | ||
164 | clrbits32(hw_gpio + HW_GPIO_OUT(0), | ||
165 | HW_GPIO_SLOT_LED | HW_GPIO_SENSOR_BAR); | ||
166 | } | ||
167 | } | ||
168 | |||
169 | static void wii_restart(char *cmd) | ||
170 | { | ||
171 | local_irq_disable(); | ||
172 | |||
173 | if (hw_ctrl) { | ||
174 | /* clear the system reset pin to cause a reset */ | ||
175 | clrbits32(hw_ctrl + HW_CTRL_RESETS, HW_CTRL_RESETS_SYS); | ||
176 | } | ||
177 | wii_spin(); | ||
178 | } | ||
179 | |||
180 | static void wii_power_off(void) | ||
181 | { | ||
182 | local_irq_disable(); | ||
183 | |||
184 | if (hw_gpio) { | ||
185 | /* make sure that the poweroff GPIO is configured as output */ | ||
186 | setbits32(hw_gpio + HW_GPIO_DIR(1), HW_GPIO_SHUTDOWN); | ||
187 | |||
188 | /* drive the poweroff GPIO high */ | ||
189 | setbits32(hw_gpio + HW_GPIO_OUT(1), HW_GPIO_SHUTDOWN); | ||
190 | } | ||
191 | wii_spin(); | ||
192 | } | ||
193 | |||
194 | static void wii_halt(void) | ||
195 | { | ||
196 | if (ppc_md.restart) | ||
197 | ppc_md.restart(NULL); | ||
198 | wii_spin(); | ||
199 | } | ||
200 | |||
201 | static void __init wii_init_early(void) | ||
202 | { | ||
203 | ug_udbg_init(); | ||
204 | } | ||
205 | |||
206 | static void __init wii_pic_probe(void) | ||
207 | { | ||
208 | flipper_pic_probe(); | ||
209 | hlwd_pic_probe(); | ||
210 | } | ||
211 | |||
212 | static int __init wii_probe(void) | ||
213 | { | ||
214 | unsigned long dt_root; | ||
215 | |||
216 | dt_root = of_get_flat_dt_root(); | ||
217 | if (!of_flat_dt_is_compatible(dt_root, "nintendo,wii")) | ||
218 | return 0; | ||
219 | |||
220 | return 1; | ||
221 | } | ||
222 | |||
223 | static void wii_shutdown(void) | ||
224 | { | ||
225 | hlwd_quiesce(); | ||
226 | flipper_quiesce(); | ||
227 | } | ||
228 | |||
229 | #ifdef CONFIG_KEXEC | ||
230 | static int wii_machine_kexec_prepare(struct kimage *image) | ||
231 | { | ||
232 | return 0; | ||
233 | } | ||
234 | #endif /* CONFIG_KEXEC */ | ||
235 | |||
236 | define_machine(wii) { | ||
237 | .name = "wii", | ||
238 | .probe = wii_probe, | ||
239 | .init_early = wii_init_early, | ||
240 | .setup_arch = wii_setup_arch, | ||
241 | .restart = wii_restart, | ||
242 | .power_off = wii_power_off, | ||
243 | .halt = wii_halt, | ||
244 | .init_IRQ = wii_pic_probe, | ||
245 | .get_irq = flipper_pic_get_irq, | ||
246 | .calibrate_decr = generic_calibrate_decr, | ||
247 | .progress = udbg_progress, | ||
248 | .machine_shutdown = wii_shutdown, | ||
249 | #ifdef CONFIG_KEXEC | ||
250 | .machine_kexec_prepare = wii_machine_kexec_prepare, | ||
251 | #endif | ||
252 | }; | ||
253 | |||
254 | static struct of_device_id wii_of_bus[] = { | ||
255 | { .compatible = "nintendo,hollywood", }, | ||
256 | { }, | ||
257 | }; | ||
258 | |||
259 | static int __init wii_device_probe(void) | ||
260 | { | ||
261 | if (!machine_is(wii)) | ||
262 | return 0; | ||
263 | |||
264 | of_platform_bus_probe(NULL, wii_of_bus, NULL); | ||
265 | return 0; | ||
266 | } | ||
267 | device_initcall(wii_device_probe); | ||
268 | |||
diff --git a/arch/powerpc/platforms/iseries/irq.c b/arch/powerpc/platforms/iseries/irq.c index 07762259c60a..86c4b29eea89 100644 --- a/arch/powerpc/platforms/iseries/irq.c +++ b/arch/powerpc/platforms/iseries/irq.c | |||
@@ -217,9 +217,9 @@ void __init iSeries_activate_IRQs() | |||
217 | struct irq_desc *desc = irq_to_desc(irq); | 217 | struct irq_desc *desc = irq_to_desc(irq); |
218 | 218 | ||
219 | if (desc && desc->chip && desc->chip->startup) { | 219 | if (desc && desc->chip && desc->chip->startup) { |
220 | spin_lock_irqsave(&desc->lock, flags); | 220 | raw_spin_lock_irqsave(&desc->lock, flags); |
221 | desc->chip->startup(irq); | 221 | desc->chip->startup(irq); |
222 | spin_unlock_irqrestore(&desc->lock, flags); | 222 | raw_spin_unlock_irqrestore(&desc->lock, flags); |
223 | } | 223 | } |
224 | } | 224 | } |
225 | } | 225 | } |
diff --git a/arch/powerpc/platforms/iseries/mf.c b/arch/powerpc/platforms/iseries/mf.c index 0d9343df35bc..6617915bcb1a 100644 --- a/arch/powerpc/platforms/iseries/mf.c +++ b/arch/powerpc/platforms/iseries/mf.c | |||
@@ -855,59 +855,58 @@ static int mf_get_boot_rtc(struct rtc_time *tm) | |||
855 | } | 855 | } |
856 | 856 | ||
857 | #ifdef CONFIG_PROC_FS | 857 | #ifdef CONFIG_PROC_FS |
858 | 858 | static int mf_cmdline_proc_show(struct seq_file *m, void *v) | |
859 | static int proc_mf_dump_cmdline(char *page, char **start, off_t off, | ||
860 | int count, int *eof, void *data) | ||
861 | { | 859 | { |
862 | int len; | 860 | char *page, *p; |
863 | char *p; | ||
864 | struct vsp_cmd_data vsp_cmd; | 861 | struct vsp_cmd_data vsp_cmd; |
865 | int rc; | 862 | int rc; |
866 | dma_addr_t dma_addr; | 863 | dma_addr_t dma_addr; |
867 | 864 | ||
868 | /* The HV appears to return no more than 256 bytes of command line */ | 865 | /* The HV appears to return no more than 256 bytes of command line */ |
869 | if (off >= 256) | 866 | page = kmalloc(256, GFP_KERNEL); |
870 | return 0; | 867 | if (!page) |
871 | if ((off + count) > 256) | 868 | return -ENOMEM; |
872 | count = 256 - off; | ||
873 | 869 | ||
874 | dma_addr = iseries_hv_map(page, off + count, DMA_FROM_DEVICE); | 870 | dma_addr = iseries_hv_map(page, 256, DMA_FROM_DEVICE); |
875 | if (dma_addr == DMA_ERROR_CODE) | 871 | if (dma_addr == DMA_ERROR_CODE) { |
872 | kfree(page); | ||
876 | return -ENOMEM; | 873 | return -ENOMEM; |
877 | memset(page, 0, off + count); | 874 | } |
875 | memset(page, 0, 256); | ||
878 | memset(&vsp_cmd, 0, sizeof(vsp_cmd)); | 876 | memset(&vsp_cmd, 0, sizeof(vsp_cmd)); |
879 | vsp_cmd.cmd = 33; | 877 | vsp_cmd.cmd = 33; |
880 | vsp_cmd.sub_data.kern.token = dma_addr; | 878 | vsp_cmd.sub_data.kern.token = dma_addr; |
881 | vsp_cmd.sub_data.kern.address_type = HvLpDma_AddressType_TceIndex; | 879 | vsp_cmd.sub_data.kern.address_type = HvLpDma_AddressType_TceIndex; |
882 | vsp_cmd.sub_data.kern.side = (u64)data; | 880 | vsp_cmd.sub_data.kern.side = (u64)m->private; |
883 | vsp_cmd.sub_data.kern.length = off + count; | 881 | vsp_cmd.sub_data.kern.length = 256; |
884 | mb(); | 882 | mb(); |
885 | rc = signal_vsp_instruction(&vsp_cmd); | 883 | rc = signal_vsp_instruction(&vsp_cmd); |
886 | iseries_hv_unmap(dma_addr, off + count, DMA_FROM_DEVICE); | 884 | iseries_hv_unmap(dma_addr, 256, DMA_FROM_DEVICE); |
887 | if (rc) | 885 | if (rc) { |
886 | kfree(page); | ||
888 | return rc; | 887 | return rc; |
889 | if (vsp_cmd.result_code != 0) | 888 | } |
889 | if (vsp_cmd.result_code != 0) { | ||
890 | kfree(page); | ||
890 | return -ENOMEM; | 891 | return -ENOMEM; |
892 | } | ||
891 | p = page; | 893 | p = page; |
892 | len = 0; | 894 | while (p - page < 256) { |
893 | while (len < (off + count)) { | 895 | if (*p == '\0' || *p == '\n') { |
894 | if ((*p == '\0') || (*p == '\n')) { | 896 | *p = '\n'; |
895 | if (*p == '\0') | ||
896 | *p = '\n'; | ||
897 | p++; | ||
898 | len++; | ||
899 | *eof = 1; | ||
900 | break; | 897 | break; |
901 | } | 898 | } |
902 | p++; | 899 | p++; |
903 | len++; | ||
904 | } | ||
905 | 900 | ||
906 | if (len < off) { | ||
907 | *eof = 1; | ||
908 | len = 0; | ||
909 | } | 901 | } |
910 | return len; | 902 | seq_write(m, page, p - page); |
903 | kfree(page); | ||
904 | return 0; | ||
905 | } | ||
906 | |||
907 | static int mf_cmdline_proc_open(struct inode *inode, struct file *file) | ||
908 | { | ||
909 | return single_open(file, mf_cmdline_proc_show, PDE(inode)->data); | ||
911 | } | 910 | } |
912 | 911 | ||
913 | #if 0 | 912 | #if 0 |
@@ -962,10 +961,8 @@ static int proc_mf_dump_vmlinux(char *page, char **start, off_t off, | |||
962 | } | 961 | } |
963 | #endif | 962 | #endif |
964 | 963 | ||
965 | static int proc_mf_dump_side(char *page, char **start, off_t off, | 964 | static int mf_side_proc_show(struct seq_file *m, void *v) |
966 | int count, int *eof, void *data) | ||
967 | { | 965 | { |
968 | int len; | ||
969 | char mf_current_side = ' '; | 966 | char mf_current_side = ' '; |
970 | struct vsp_cmd_data vsp_cmd; | 967 | struct vsp_cmd_data vsp_cmd; |
971 | 968 | ||
@@ -989,21 +986,17 @@ static int proc_mf_dump_side(char *page, char **start, off_t off, | |||
989 | } | 986 | } |
990 | } | 987 | } |
991 | 988 | ||
992 | len = sprintf(page, "%c\n", mf_current_side); | 989 | seq_printf(m, "%c\n", mf_current_side); |
990 | return 0; | ||
991 | } | ||
993 | 992 | ||
994 | if (len <= (off + count)) | 993 | static int mf_side_proc_open(struct inode *inode, struct file *file) |
995 | *eof = 1; | 994 | { |
996 | *start = page + off; | 995 | return single_open(file, mf_side_proc_show, NULL); |
997 | len -= off; | ||
998 | if (len > count) | ||
999 | len = count; | ||
1000 | if (len < 0) | ||
1001 | len = 0; | ||
1002 | return len; | ||
1003 | } | 996 | } |
1004 | 997 | ||
1005 | static int proc_mf_change_side(struct file *file, const char __user *buffer, | 998 | static ssize_t mf_side_proc_write(struct file *file, const char __user *buffer, |
1006 | unsigned long count, void *data) | 999 | size_t count, loff_t *pos) |
1007 | { | 1000 | { |
1008 | char side; | 1001 | char side; |
1009 | u64 newSide; | 1002 | u64 newSide; |
@@ -1041,6 +1034,15 @@ static int proc_mf_change_side(struct file *file, const char __user *buffer, | |||
1041 | return count; | 1034 | return count; |
1042 | } | 1035 | } |
1043 | 1036 | ||
1037 | static const struct file_operations mf_side_proc_fops = { | ||
1038 | .owner = THIS_MODULE, | ||
1039 | .open = mf_side_proc_open, | ||
1040 | .read = seq_read, | ||
1041 | .llseek = seq_lseek, | ||
1042 | .release = single_release, | ||
1043 | .write = mf_side_proc_write, | ||
1044 | }; | ||
1045 | |||
1044 | #if 0 | 1046 | #if 0 |
1045 | static void mf_getSrcHistory(char *buffer, int size) | 1047 | static void mf_getSrcHistory(char *buffer, int size) |
1046 | { | 1048 | { |
@@ -1087,8 +1089,7 @@ static void mf_getSrcHistory(char *buffer, int size) | |||
1087 | } | 1089 | } |
1088 | #endif | 1090 | #endif |
1089 | 1091 | ||
1090 | static int proc_mf_dump_src(char *page, char **start, off_t off, | 1092 | static int mf_src_proc_show(struct seq_file *m, void *v) |
1091 | int count, int *eof, void *data) | ||
1092 | { | 1093 | { |
1093 | #if 0 | 1094 | #if 0 |
1094 | int len; | 1095 | int len; |
@@ -1109,8 +1110,13 @@ static int proc_mf_dump_src(char *page, char **start, off_t off, | |||
1109 | #endif | 1110 | #endif |
1110 | } | 1111 | } |
1111 | 1112 | ||
1112 | static int proc_mf_change_src(struct file *file, const char __user *buffer, | 1113 | static int mf_src_proc_open(struct inode *inode, struct file *file) |
1113 | unsigned long count, void *data) | 1114 | { |
1115 | return single_open(file, mf_src_proc_show, NULL); | ||
1116 | } | ||
1117 | |||
1118 | static ssize_t mf_src_proc_write(struct file *file, const char __user *buffer, | ||
1119 | size_t count, loff_t *pos) | ||
1114 | { | 1120 | { |
1115 | char stkbuf[10]; | 1121 | char stkbuf[10]; |
1116 | 1122 | ||
@@ -1135,9 +1141,19 @@ static int proc_mf_change_src(struct file *file, const char __user *buffer, | |||
1135 | return count; | 1141 | return count; |
1136 | } | 1142 | } |
1137 | 1143 | ||
1138 | static int proc_mf_change_cmdline(struct file *file, const char __user *buffer, | 1144 | static const struct file_operations mf_src_proc_fops = { |
1139 | unsigned long count, void *data) | 1145 | .owner = THIS_MODULE, |
1146 | .open = mf_src_proc_open, | ||
1147 | .read = seq_read, | ||
1148 | .llseek = seq_lseek, | ||
1149 | .release = single_release, | ||
1150 | .write = mf_src_proc_write, | ||
1151 | }; | ||
1152 | |||
1153 | static ssize_t mf_cmdline_proc_write(struct file *file, const char __user *buffer, | ||
1154 | size_t count, loff_t *pos) | ||
1140 | { | 1155 | { |
1156 | void *data = PDE(file->f_path.dentry->d_inode)->data; | ||
1141 | struct vsp_cmd_data vsp_cmd; | 1157 | struct vsp_cmd_data vsp_cmd; |
1142 | dma_addr_t dma_addr; | 1158 | dma_addr_t dma_addr; |
1143 | char *page; | 1159 | char *page; |
@@ -1172,6 +1188,15 @@ out: | |||
1172 | return ret; | 1188 | return ret; |
1173 | } | 1189 | } |
1174 | 1190 | ||
1191 | static const struct file_operations mf_cmdline_proc_fops = { | ||
1192 | .owner = THIS_MODULE, | ||
1193 | .open = mf_cmdline_proc_open, | ||
1194 | .read = seq_read, | ||
1195 | .llseek = seq_lseek, | ||
1196 | .release = single_release, | ||
1197 | .write = mf_cmdline_proc_write, | ||
1198 | }; | ||
1199 | |||
1175 | static ssize_t proc_mf_change_vmlinux(struct file *file, | 1200 | static ssize_t proc_mf_change_vmlinux(struct file *file, |
1176 | const char __user *buf, | 1201 | const char __user *buf, |
1177 | size_t count, loff_t *ppos) | 1202 | size_t count, loff_t *ppos) |
@@ -1246,12 +1271,10 @@ static int __init mf_proc_init(void) | |||
1246 | if (!mf) | 1271 | if (!mf) |
1247 | return 1; | 1272 | return 1; |
1248 | 1273 | ||
1249 | ent = create_proc_entry("cmdline", S_IFREG|S_IRUSR|S_IWUSR, mf); | 1274 | ent = proc_create_data("cmdline", S_IRUSR|S_IWUSR, mf, |
1275 | &mf_cmdline_proc_fops, (void *)(long)i); | ||
1250 | if (!ent) | 1276 | if (!ent) |
1251 | return 1; | 1277 | return 1; |
1252 | ent->data = (void *)(long)i; | ||
1253 | ent->read_proc = proc_mf_dump_cmdline; | ||
1254 | ent->write_proc = proc_mf_change_cmdline; | ||
1255 | 1278 | ||
1256 | if (i == 3) /* no vmlinux entry for 'D' */ | 1279 | if (i == 3) /* no vmlinux entry for 'D' */ |
1257 | continue; | 1280 | continue; |
@@ -1263,19 +1286,15 @@ static int __init mf_proc_init(void) | |||
1263 | return 1; | 1286 | return 1; |
1264 | } | 1287 | } |
1265 | 1288 | ||
1266 | ent = create_proc_entry("side", S_IFREG|S_IRUSR|S_IWUSR, mf_proc_root); | 1289 | ent = proc_create("side", S_IFREG|S_IRUSR|S_IWUSR, mf_proc_root, |
1290 | &mf_side_proc_fops); | ||
1267 | if (!ent) | 1291 | if (!ent) |
1268 | return 1; | 1292 | return 1; |
1269 | ent->data = (void *)0; | ||
1270 | ent->read_proc = proc_mf_dump_side; | ||
1271 | ent->write_proc = proc_mf_change_side; | ||
1272 | 1293 | ||
1273 | ent = create_proc_entry("src", S_IFREG|S_IRUSR|S_IWUSR, mf_proc_root); | 1294 | ent = proc_create("src", S_IFREG|S_IRUSR|S_IWUSR, mf_proc_root, |
1295 | &mf_src_proc_fops); | ||
1274 | if (!ent) | 1296 | if (!ent) |
1275 | return 1; | 1297 | return 1; |
1276 | ent->data = (void *)0; | ||
1277 | ent->read_proc = proc_mf_dump_src; | ||
1278 | ent->write_proc = proc_mf_change_src; | ||
1279 | 1298 | ||
1280 | return 0; | 1299 | return 0; |
1281 | } | 1300 | } |
diff --git a/arch/powerpc/platforms/iseries/viopath.c b/arch/powerpc/platforms/iseries/viopath.c index 49ff4dc422b7..5aea94f30836 100644 --- a/arch/powerpc/platforms/iseries/viopath.c +++ b/arch/powerpc/platforms/iseries/viopath.c | |||
@@ -116,7 +116,7 @@ static int proc_viopath_show(struct seq_file *m, void *v) | |||
116 | u16 vlanMap; | 116 | u16 vlanMap; |
117 | dma_addr_t handle; | 117 | dma_addr_t handle; |
118 | HvLpEvent_Rc hvrc; | 118 | HvLpEvent_Rc hvrc; |
119 | DECLARE_COMPLETION(done); | 119 | DECLARE_COMPLETION_ONSTACK(done); |
120 | struct device_node *node; | 120 | struct device_node *node; |
121 | const char *sysid; | 121 | const char *sysid; |
122 | 122 | ||
diff --git a/arch/powerpc/platforms/pasemi/setup.c b/arch/powerpc/platforms/pasemi/setup.c index a4619347aa7e..242f8095c2df 100644 --- a/arch/powerpc/platforms/pasemi/setup.c +++ b/arch/powerpc/platforms/pasemi/setup.c | |||
@@ -71,7 +71,7 @@ static void pas_restart(char *cmd) | |||
71 | } | 71 | } |
72 | 72 | ||
73 | #ifdef CONFIG_SMP | 73 | #ifdef CONFIG_SMP |
74 | static raw_spinlock_t timebase_lock; | 74 | static arch_spinlock_t timebase_lock; |
75 | static unsigned long timebase; | 75 | static unsigned long timebase; |
76 | 76 | ||
77 | static void __devinit pas_give_timebase(void) | 77 | static void __devinit pas_give_timebase(void) |
@@ -80,11 +80,11 @@ static void __devinit pas_give_timebase(void) | |||
80 | 80 | ||
81 | local_irq_save(flags); | 81 | local_irq_save(flags); |
82 | hard_irq_disable(); | 82 | hard_irq_disable(); |
83 | __raw_spin_lock(&timebase_lock); | 83 | arch_spin_lock(&timebase_lock); |
84 | mtspr(SPRN_TBCTL, TBCTL_FREEZE); | 84 | mtspr(SPRN_TBCTL, TBCTL_FREEZE); |
85 | isync(); | 85 | isync(); |
86 | timebase = get_tb(); | 86 | timebase = get_tb(); |
87 | __raw_spin_unlock(&timebase_lock); | 87 | arch_spin_unlock(&timebase_lock); |
88 | 88 | ||
89 | while (timebase) | 89 | while (timebase) |
90 | barrier(); | 90 | barrier(); |
@@ -97,10 +97,10 @@ static void __devinit pas_take_timebase(void) | |||
97 | while (!timebase) | 97 | while (!timebase) |
98 | smp_rmb(); | 98 | smp_rmb(); |
99 | 99 | ||
100 | __raw_spin_lock(&timebase_lock); | 100 | arch_spin_lock(&timebase_lock); |
101 | set_tb(timebase >> 32, timebase & 0xffffffff); | 101 | set_tb(timebase >> 32, timebase & 0xffffffff); |
102 | timebase = 0; | 102 | timebase = 0; |
103 | __raw_spin_unlock(&timebase_lock); | 103 | arch_spin_unlock(&timebase_lock); |
104 | } | 104 | } |
105 | 105 | ||
106 | struct smp_ops_t pas_smp_ops = { | 106 | struct smp_ops_t pas_smp_ops = { |
diff --git a/arch/powerpc/platforms/powermac/bootx_init.c b/arch/powerpc/platforms/powermac/bootx_init.c index cf660916ae0b..9dd789a7370d 100644 --- a/arch/powerpc/platforms/powermac/bootx_init.c +++ b/arch/powerpc/platforms/powermac/bootx_init.c | |||
@@ -12,7 +12,7 @@ | |||
12 | #include <linux/kernel.h> | 12 | #include <linux/kernel.h> |
13 | #include <linux/string.h> | 13 | #include <linux/string.h> |
14 | #include <linux/init.h> | 14 | #include <linux/init.h> |
15 | #include <linux/utsrelease.h> | 15 | #include <generated/utsrelease.h> |
16 | #include <asm/sections.h> | 16 | #include <asm/sections.h> |
17 | #include <asm/prom.h> | 17 | #include <asm/prom.h> |
18 | #include <asm/page.h> | 18 | #include <asm/page.h> |
diff --git a/arch/powerpc/platforms/powermac/pci.c b/arch/powerpc/platforms/powermac/pci.c index e81403b245b5..ab2027cdf893 100644 --- a/arch/powerpc/platforms/powermac/pci.c +++ b/arch/powerpc/platforms/powermac/pci.c | |||
@@ -302,7 +302,7 @@ static void __init setup_chaos(struct pci_controller *hose, | |||
302 | * 1 -> Skip the device but act as if the access was successfull | 302 | * 1 -> Skip the device but act as if the access was successfull |
303 | * (return 0xff's on reads, eventually, cache config space | 303 | * (return 0xff's on reads, eventually, cache config space |
304 | * accesses in a later version) | 304 | * accesses in a later version) |
305 | * -1 -> Hide the device (unsuccessful acess) | 305 | * -1 -> Hide the device (unsuccessful access) |
306 | */ | 306 | */ |
307 | static int u3_ht_skip_device(struct pci_controller *hose, | 307 | static int u3_ht_skip_device(struct pci_controller *hose, |
308 | struct pci_bus *bus, unsigned int devfn) | 308 | struct pci_bus *bus, unsigned int devfn) |
diff --git a/arch/powerpc/platforms/pseries/Kconfig b/arch/powerpc/platforms/pseries/Kconfig index 27554c807fd5..c667f0f02c34 100644 --- a/arch/powerpc/platforms/pseries/Kconfig +++ b/arch/powerpc/platforms/pseries/Kconfig | |||
@@ -2,6 +2,8 @@ config PPC_PSERIES | |||
2 | depends on PPC64 && PPC_BOOK3S | 2 | depends on PPC64 && PPC_BOOK3S |
3 | bool "IBM pSeries & new (POWER5-based) iSeries" | 3 | bool "IBM pSeries & new (POWER5-based) iSeries" |
4 | select MPIC | 4 | select MPIC |
5 | select PCI_MSI | ||
6 | select XICS | ||
5 | select PPC_I8259 | 7 | select PPC_I8259 |
6 | select PPC_RTAS | 8 | select PPC_RTAS |
7 | select PPC_RTAS_DAEMON | 9 | select PPC_RTAS_DAEMON |
diff --git a/arch/powerpc/platforms/pseries/cmm.c b/arch/powerpc/platforms/pseries/cmm.c index bcdcf0ccc8d7..a277f2e28dbc 100644 --- a/arch/powerpc/platforms/pseries/cmm.c +++ b/arch/powerpc/platforms/pseries/cmm.c | |||
@@ -38,19 +38,28 @@ | |||
38 | #include <asm/mmu.h> | 38 | #include <asm/mmu.h> |
39 | #include <asm/pgalloc.h> | 39 | #include <asm/pgalloc.h> |
40 | #include <asm/uaccess.h> | 40 | #include <asm/uaccess.h> |
41 | #include <linux/memory.h> | ||
41 | 42 | ||
42 | #include "plpar_wrappers.h" | 43 | #include "plpar_wrappers.h" |
43 | 44 | ||
44 | #define CMM_DRIVER_VERSION "1.0.0" | 45 | #define CMM_DRIVER_VERSION "1.0.0" |
45 | #define CMM_DEFAULT_DELAY 1 | 46 | #define CMM_DEFAULT_DELAY 1 |
47 | #define CMM_HOTPLUG_DELAY 5 | ||
46 | #define CMM_DEBUG 0 | 48 | #define CMM_DEBUG 0 |
47 | #define CMM_DISABLE 0 | 49 | #define CMM_DISABLE 0 |
48 | #define CMM_OOM_KB 1024 | 50 | #define CMM_OOM_KB 1024 |
49 | #define CMM_MIN_MEM_MB 256 | 51 | #define CMM_MIN_MEM_MB 256 |
50 | #define KB2PAGES(_p) ((_p)>>(PAGE_SHIFT-10)) | 52 | #define KB2PAGES(_p) ((_p)>>(PAGE_SHIFT-10)) |
51 | #define PAGES2KB(_p) ((_p)<<(PAGE_SHIFT-10)) | 53 | #define PAGES2KB(_p) ((_p)<<(PAGE_SHIFT-10)) |
54 | /* | ||
55 | * The priority level tries to ensure that this notifier is called as | ||
56 | * late as possible to reduce thrashing in the shared memory pool. | ||
57 | */ | ||
58 | #define CMM_MEM_HOTPLUG_PRI 1 | ||
59 | #define CMM_MEM_ISOLATE_PRI 15 | ||
52 | 60 | ||
53 | static unsigned int delay = CMM_DEFAULT_DELAY; | 61 | static unsigned int delay = CMM_DEFAULT_DELAY; |
62 | static unsigned int hotplug_delay = CMM_HOTPLUG_DELAY; | ||
54 | static unsigned int oom_kb = CMM_OOM_KB; | 63 | static unsigned int oom_kb = CMM_OOM_KB; |
55 | static unsigned int cmm_debug = CMM_DEBUG; | 64 | static unsigned int cmm_debug = CMM_DEBUG; |
56 | static unsigned int cmm_disabled = CMM_DISABLE; | 65 | static unsigned int cmm_disabled = CMM_DISABLE; |
@@ -65,6 +74,10 @@ MODULE_VERSION(CMM_DRIVER_VERSION); | |||
65 | module_param_named(delay, delay, uint, S_IRUGO | S_IWUSR); | 74 | module_param_named(delay, delay, uint, S_IRUGO | S_IWUSR); |
66 | MODULE_PARM_DESC(delay, "Delay (in seconds) between polls to query hypervisor paging requests. " | 75 | MODULE_PARM_DESC(delay, "Delay (in seconds) between polls to query hypervisor paging requests. " |
67 | "[Default=" __stringify(CMM_DEFAULT_DELAY) "]"); | 76 | "[Default=" __stringify(CMM_DEFAULT_DELAY) "]"); |
77 | module_param_named(hotplug_delay, hotplug_delay, uint, S_IRUGO | S_IWUSR); | ||
78 | MODULE_PARM_DESC(delay, "Delay (in seconds) after memory hotplug remove " | ||
79 | "before loaning resumes. " | ||
80 | "[Default=" __stringify(CMM_HOTPLUG_DELAY) "]"); | ||
68 | module_param_named(oom_kb, oom_kb, uint, S_IRUGO | S_IWUSR); | 81 | module_param_named(oom_kb, oom_kb, uint, S_IRUGO | S_IWUSR); |
69 | MODULE_PARM_DESC(oom_kb, "Amount of memory in kb to free on OOM. " | 82 | MODULE_PARM_DESC(oom_kb, "Amount of memory in kb to free on OOM. " |
70 | "[Default=" __stringify(CMM_OOM_KB) "]"); | 83 | "[Default=" __stringify(CMM_OOM_KB) "]"); |
@@ -92,6 +105,9 @@ static unsigned long oom_freed_pages; | |||
92 | static struct cmm_page_array *cmm_page_list; | 105 | static struct cmm_page_array *cmm_page_list; |
93 | static DEFINE_SPINLOCK(cmm_lock); | 106 | static DEFINE_SPINLOCK(cmm_lock); |
94 | 107 | ||
108 | static DEFINE_MUTEX(hotplug_mutex); | ||
109 | static int hotplug_occurred; /* protected by the hotplug mutex */ | ||
110 | |||
95 | static struct task_struct *cmm_thread_ptr; | 111 | static struct task_struct *cmm_thread_ptr; |
96 | 112 | ||
97 | /** | 113 | /** |
@@ -110,6 +126,17 @@ static long cmm_alloc_pages(long nr) | |||
110 | cmm_dbg("Begin request for %ld pages\n", nr); | 126 | cmm_dbg("Begin request for %ld pages\n", nr); |
111 | 127 | ||
112 | while (nr) { | 128 | while (nr) { |
129 | /* Exit if a hotplug operation is in progress or occurred */ | ||
130 | if (mutex_trylock(&hotplug_mutex)) { | ||
131 | if (hotplug_occurred) { | ||
132 | mutex_unlock(&hotplug_mutex); | ||
133 | break; | ||
134 | } | ||
135 | mutex_unlock(&hotplug_mutex); | ||
136 | } else { | ||
137 | break; | ||
138 | } | ||
139 | |||
113 | addr = __get_free_page(GFP_NOIO | __GFP_NOWARN | | 140 | addr = __get_free_page(GFP_NOIO | __GFP_NOWARN | |
114 | __GFP_NORETRY | __GFP_NOMEMALLOC); | 141 | __GFP_NORETRY | __GFP_NOMEMALLOC); |
115 | if (!addr) | 142 | if (!addr) |
@@ -119,8 +146,9 @@ static long cmm_alloc_pages(long nr) | |||
119 | if (!pa || pa->index >= CMM_NR_PAGES) { | 146 | if (!pa || pa->index >= CMM_NR_PAGES) { |
120 | /* Need a new page for the page list. */ | 147 | /* Need a new page for the page list. */ |
121 | spin_unlock(&cmm_lock); | 148 | spin_unlock(&cmm_lock); |
122 | npa = (struct cmm_page_array *)__get_free_page(GFP_NOIO | __GFP_NOWARN | | 149 | npa = (struct cmm_page_array *)__get_free_page( |
123 | __GFP_NORETRY | __GFP_NOMEMALLOC); | 150 | GFP_NOIO | __GFP_NOWARN | |
151 | __GFP_NORETRY | __GFP_NOMEMALLOC); | ||
124 | if (!npa) { | 152 | if (!npa) { |
125 | pr_info("%s: Can not allocate new page list\n", __func__); | 153 | pr_info("%s: Can not allocate new page list\n", __func__); |
126 | free_page(addr); | 154 | free_page(addr); |
@@ -282,9 +310,28 @@ static int cmm_thread(void *dummy) | |||
282 | while (1) { | 310 | while (1) { |
283 | timeleft = msleep_interruptible(delay * 1000); | 311 | timeleft = msleep_interruptible(delay * 1000); |
284 | 312 | ||
285 | if (kthread_should_stop() || timeleft) { | 313 | if (kthread_should_stop() || timeleft) |
286 | loaned_pages_target = loaned_pages; | ||
287 | break; | 314 | break; |
315 | |||
316 | if (mutex_trylock(&hotplug_mutex)) { | ||
317 | if (hotplug_occurred) { | ||
318 | hotplug_occurred = 0; | ||
319 | mutex_unlock(&hotplug_mutex); | ||
320 | cmm_dbg("Hotplug operation has occurred, " | ||
321 | "loaning activity suspended " | ||
322 | "for %d seconds.\n", | ||
323 | hotplug_delay); | ||
324 | timeleft = msleep_interruptible(hotplug_delay * | ||
325 | 1000); | ||
326 | if (kthread_should_stop() || timeleft) | ||
327 | break; | ||
328 | continue; | ||
329 | } | ||
330 | mutex_unlock(&hotplug_mutex); | ||
331 | } else { | ||
332 | cmm_dbg("Hotplug operation in progress, activity " | ||
333 | "suspended\n"); | ||
334 | continue; | ||
288 | } | 335 | } |
289 | 336 | ||
290 | cmm_get_mpp(); | 337 | cmm_get_mpp(); |
@@ -414,6 +461,193 @@ static struct notifier_block cmm_reboot_nb = { | |||
414 | }; | 461 | }; |
415 | 462 | ||
416 | /** | 463 | /** |
464 | * cmm_count_pages - Count the number of pages loaned in a particular range. | ||
465 | * | ||
466 | * @arg: memory_isolate_notify structure with address range and count | ||
467 | * | ||
468 | * Return value: | ||
469 | * 0 on success | ||
470 | **/ | ||
471 | static unsigned long cmm_count_pages(void *arg) | ||
472 | { | ||
473 | struct memory_isolate_notify *marg = arg; | ||
474 | struct cmm_page_array *pa; | ||
475 | unsigned long start = (unsigned long)pfn_to_kaddr(marg->start_pfn); | ||
476 | unsigned long end = start + (marg->nr_pages << PAGE_SHIFT); | ||
477 | unsigned long idx; | ||
478 | |||
479 | spin_lock(&cmm_lock); | ||
480 | pa = cmm_page_list; | ||
481 | while (pa) { | ||
482 | if ((unsigned long)pa >= start && (unsigned long)pa < end) | ||
483 | marg->pages_found++; | ||
484 | for (idx = 0; idx < pa->index; idx++) | ||
485 | if (pa->page[idx] >= start && pa->page[idx] < end) | ||
486 | marg->pages_found++; | ||
487 | pa = pa->next; | ||
488 | } | ||
489 | spin_unlock(&cmm_lock); | ||
490 | return 0; | ||
491 | } | ||
492 | |||
493 | /** | ||
494 | * cmm_memory_isolate_cb - Handle memory isolation notifier calls | ||
495 | * @self: notifier block struct | ||
496 | * @action: action to take | ||
497 | * @arg: struct memory_isolate_notify data for handler | ||
498 | * | ||
499 | * Return value: | ||
500 | * NOTIFY_OK or notifier error based on subfunction return value | ||
501 | **/ | ||
502 | static int cmm_memory_isolate_cb(struct notifier_block *self, | ||
503 | unsigned long action, void *arg) | ||
504 | { | ||
505 | int ret = 0; | ||
506 | |||
507 | if (action == MEM_ISOLATE_COUNT) | ||
508 | ret = cmm_count_pages(arg); | ||
509 | |||
510 | if (ret) | ||
511 | ret = notifier_from_errno(ret); | ||
512 | else | ||
513 | ret = NOTIFY_OK; | ||
514 | |||
515 | return ret; | ||
516 | } | ||
517 | |||
518 | static struct notifier_block cmm_mem_isolate_nb = { | ||
519 | .notifier_call = cmm_memory_isolate_cb, | ||
520 | .priority = CMM_MEM_ISOLATE_PRI | ||
521 | }; | ||
522 | |||
523 | /** | ||
524 | * cmm_mem_going_offline - Unloan pages where memory is to be removed | ||
525 | * @arg: memory_notify structure with page range to be offlined | ||
526 | * | ||
527 | * Return value: | ||
528 | * 0 on success | ||
529 | **/ | ||
530 | static int cmm_mem_going_offline(void *arg) | ||
531 | { | ||
532 | struct memory_notify *marg = arg; | ||
533 | unsigned long start_page = (unsigned long)pfn_to_kaddr(marg->start_pfn); | ||
534 | unsigned long end_page = start_page + (marg->nr_pages << PAGE_SHIFT); | ||
535 | struct cmm_page_array *pa_curr, *pa_last, *npa; | ||
536 | unsigned long idx; | ||
537 | unsigned long freed = 0; | ||
538 | |||
539 | cmm_dbg("Memory going offline, searching 0x%lx (%ld pages).\n", | ||
540 | start_page, marg->nr_pages); | ||
541 | spin_lock(&cmm_lock); | ||
542 | |||
543 | /* Search the page list for pages in the range to be offlined */ | ||
544 | pa_last = pa_curr = cmm_page_list; | ||
545 | while (pa_curr) { | ||
546 | for (idx = (pa_curr->index - 1); (idx + 1) > 0; idx--) { | ||
547 | if ((pa_curr->page[idx] < start_page) || | ||
548 | (pa_curr->page[idx] >= end_page)) | ||
549 | continue; | ||
550 | |||
551 | plpar_page_set_active(__pa(pa_curr->page[idx])); | ||
552 | free_page(pa_curr->page[idx]); | ||
553 | freed++; | ||
554 | loaned_pages--; | ||
555 | totalram_pages++; | ||
556 | pa_curr->page[idx] = pa_last->page[--pa_last->index]; | ||
557 | if (pa_last->index == 0) { | ||
558 | if (pa_curr == pa_last) | ||
559 | pa_curr = pa_last->next; | ||
560 | pa_last = pa_last->next; | ||
561 | free_page((unsigned long)cmm_page_list); | ||
562 | cmm_page_list = pa_last; | ||
563 | continue; | ||
564 | } | ||
565 | } | ||
566 | pa_curr = pa_curr->next; | ||
567 | } | ||
568 | |||
569 | /* Search for page list structures in the range to be offlined */ | ||
570 | pa_last = NULL; | ||
571 | pa_curr = cmm_page_list; | ||
572 | while (pa_curr) { | ||
573 | if (((unsigned long)pa_curr >= start_page) && | ||
574 | ((unsigned long)pa_curr < end_page)) { | ||
575 | npa = (struct cmm_page_array *)__get_free_page( | ||
576 | GFP_NOIO | __GFP_NOWARN | | ||
577 | __GFP_NORETRY | __GFP_NOMEMALLOC); | ||
578 | if (!npa) { | ||
579 | spin_unlock(&cmm_lock); | ||
580 | cmm_dbg("Failed to allocate memory for list " | ||
581 | "management. Memory hotplug " | ||
582 | "failed.\n"); | ||
583 | return ENOMEM; | ||
584 | } | ||
585 | memcpy(npa, pa_curr, PAGE_SIZE); | ||
586 | if (pa_curr == cmm_page_list) | ||
587 | cmm_page_list = npa; | ||
588 | if (pa_last) | ||
589 | pa_last->next = npa; | ||
590 | free_page((unsigned long) pa_curr); | ||
591 | freed++; | ||
592 | pa_curr = npa; | ||
593 | } | ||
594 | |||
595 | pa_last = pa_curr; | ||
596 | pa_curr = pa_curr->next; | ||
597 | } | ||
598 | |||
599 | spin_unlock(&cmm_lock); | ||
600 | cmm_dbg("Released %ld pages in the search range.\n", freed); | ||
601 | |||
602 | return 0; | ||
603 | } | ||
604 | |||
605 | /** | ||
606 | * cmm_memory_cb - Handle memory hotplug notifier calls | ||
607 | * @self: notifier block struct | ||
608 | * @action: action to take | ||
609 | * @arg: struct memory_notify data for handler | ||
610 | * | ||
611 | * Return value: | ||
612 | * NOTIFY_OK or notifier error based on subfunction return value | ||
613 | * | ||
614 | **/ | ||
615 | static int cmm_memory_cb(struct notifier_block *self, | ||
616 | unsigned long action, void *arg) | ||
617 | { | ||
618 | int ret = 0; | ||
619 | |||
620 | switch (action) { | ||
621 | case MEM_GOING_OFFLINE: | ||
622 | mutex_lock(&hotplug_mutex); | ||
623 | hotplug_occurred = 1; | ||
624 | ret = cmm_mem_going_offline(arg); | ||
625 | break; | ||
626 | case MEM_OFFLINE: | ||
627 | case MEM_CANCEL_OFFLINE: | ||
628 | mutex_unlock(&hotplug_mutex); | ||
629 | cmm_dbg("Memory offline operation complete.\n"); | ||
630 | break; | ||
631 | case MEM_GOING_ONLINE: | ||
632 | case MEM_ONLINE: | ||
633 | case MEM_CANCEL_ONLINE: | ||
634 | break; | ||
635 | } | ||
636 | |||
637 | if (ret) | ||
638 | ret = notifier_from_errno(ret); | ||
639 | else | ||
640 | ret = NOTIFY_OK; | ||
641 | |||
642 | return ret; | ||
643 | } | ||
644 | |||
645 | static struct notifier_block cmm_mem_nb = { | ||
646 | .notifier_call = cmm_memory_cb, | ||
647 | .priority = CMM_MEM_HOTPLUG_PRI | ||
648 | }; | ||
649 | |||
650 | /** | ||
417 | * cmm_init - Module initialization | 651 | * cmm_init - Module initialization |
418 | * | 652 | * |
419 | * Return value: | 653 | * Return value: |
@@ -435,18 +669,24 @@ static int cmm_init(void) | |||
435 | if ((rc = cmm_sysfs_register(&cmm_sysdev))) | 669 | if ((rc = cmm_sysfs_register(&cmm_sysdev))) |
436 | goto out_reboot_notifier; | 670 | goto out_reboot_notifier; |
437 | 671 | ||
672 | if (register_memory_notifier(&cmm_mem_nb) || | ||
673 | register_memory_isolate_notifier(&cmm_mem_isolate_nb)) | ||
674 | goto out_unregister_notifier; | ||
675 | |||
438 | if (cmm_disabled) | 676 | if (cmm_disabled) |
439 | return rc; | 677 | return rc; |
440 | 678 | ||
441 | cmm_thread_ptr = kthread_run(cmm_thread, NULL, "cmmthread"); | 679 | cmm_thread_ptr = kthread_run(cmm_thread, NULL, "cmmthread"); |
442 | if (IS_ERR(cmm_thread_ptr)) { | 680 | if (IS_ERR(cmm_thread_ptr)) { |
443 | rc = PTR_ERR(cmm_thread_ptr); | 681 | rc = PTR_ERR(cmm_thread_ptr); |
444 | goto out_unregister_sysfs; | 682 | goto out_unregister_notifier; |
445 | } | 683 | } |
446 | 684 | ||
447 | return rc; | 685 | return rc; |
448 | 686 | ||
449 | out_unregister_sysfs: | 687 | out_unregister_notifier: |
688 | unregister_memory_notifier(&cmm_mem_nb); | ||
689 | unregister_memory_isolate_notifier(&cmm_mem_isolate_nb); | ||
450 | cmm_unregister_sysfs(&cmm_sysdev); | 690 | cmm_unregister_sysfs(&cmm_sysdev); |
451 | out_reboot_notifier: | 691 | out_reboot_notifier: |
452 | unregister_reboot_notifier(&cmm_reboot_nb); | 692 | unregister_reboot_notifier(&cmm_reboot_nb); |
@@ -467,6 +707,8 @@ static void cmm_exit(void) | |||
467 | kthread_stop(cmm_thread_ptr); | 707 | kthread_stop(cmm_thread_ptr); |
468 | unregister_oom_notifier(&cmm_oom_nb); | 708 | unregister_oom_notifier(&cmm_oom_nb); |
469 | unregister_reboot_notifier(&cmm_reboot_nb); | 709 | unregister_reboot_notifier(&cmm_reboot_nb); |
710 | unregister_memory_notifier(&cmm_mem_nb); | ||
711 | unregister_memory_isolate_notifier(&cmm_mem_isolate_nb); | ||
470 | cmm_free_pages(loaned_pages); | 712 | cmm_free_pages(loaned_pages); |
471 | cmm_unregister_sysfs(&cmm_sysdev); | 713 | cmm_unregister_sysfs(&cmm_sysdev); |
472 | } | 714 | } |
diff --git a/arch/powerpc/platforms/pseries/dlpar.c b/arch/powerpc/platforms/pseries/dlpar.c index 12df9e8812a9..67b7a10f9fce 100644 --- a/arch/powerpc/platforms/pseries/dlpar.c +++ b/arch/powerpc/platforms/pseries/dlpar.c | |||
@@ -346,12 +346,14 @@ int dlpar_release_drc(u32 drc_index) | |||
346 | 346 | ||
347 | static DEFINE_MUTEX(pseries_cpu_hotplug_mutex); | 347 | static DEFINE_MUTEX(pseries_cpu_hotplug_mutex); |
348 | 348 | ||
349 | void cpu_hotplug_driver_lock() | 349 | void cpu_hotplug_driver_lock(void) |
350 | __acquires(pseries_cpu_hotplug_mutex) | ||
350 | { | 351 | { |
351 | mutex_lock(&pseries_cpu_hotplug_mutex); | 352 | mutex_lock(&pseries_cpu_hotplug_mutex); |
352 | } | 353 | } |
353 | 354 | ||
354 | void cpu_hotplug_driver_unlock() | 355 | void cpu_hotplug_driver_unlock(void) |
356 | __releases(pseries_cpu_hotplug_mutex) | ||
355 | { | 357 | { |
356 | mutex_unlock(&pseries_cpu_hotplug_mutex); | 358 | mutex_unlock(&pseries_cpu_hotplug_mutex); |
357 | } | 359 | } |
diff --git a/arch/powerpc/platforms/pseries/dtl.c b/arch/powerpc/platforms/pseries/dtl.c index 937a544a236d..c5f3116b6ca5 100644 --- a/arch/powerpc/platforms/pseries/dtl.c +++ b/arch/powerpc/platforms/pseries/dtl.c | |||
@@ -54,7 +54,7 @@ struct dtl { | |||
54 | int buf_entries; | 54 | int buf_entries; |
55 | u64 last_idx; | 55 | u64 last_idx; |
56 | }; | 56 | }; |
57 | static DEFINE_PER_CPU(struct dtl, dtl); | 57 | static DEFINE_PER_CPU(struct dtl, cpu_dtl); |
58 | 58 | ||
59 | /* | 59 | /* |
60 | * Dispatch trace log event mask: | 60 | * Dispatch trace log event mask: |
@@ -261,7 +261,7 @@ static int dtl_init(void) | |||
261 | 261 | ||
262 | /* set up the per-cpu log structures */ | 262 | /* set up the per-cpu log structures */ |
263 | for_each_possible_cpu(i) { | 263 | for_each_possible_cpu(i) { |
264 | struct dtl *dtl = &per_cpu(dtl, i); | 264 | struct dtl *dtl = &per_cpu(cpu_dtl, i); |
265 | dtl->cpu = i; | 265 | dtl->cpu = i; |
266 | 266 | ||
267 | rc = dtl_setup_file(dtl); | 267 | rc = dtl_setup_file(dtl); |
diff --git a/arch/powerpc/platforms/pseries/smp.c b/arch/powerpc/platforms/pseries/smp.c index 8868c012268a..b4886635972c 100644 --- a/arch/powerpc/platforms/pseries/smp.c +++ b/arch/powerpc/platforms/pseries/smp.c | |||
@@ -144,8 +144,8 @@ static void __devinit smp_pSeries_kick_cpu(int nr) | |||
144 | hcpuid = get_hard_smp_processor_id(nr); | 144 | hcpuid = get_hard_smp_processor_id(nr); |
145 | rc = plpar_hcall_norets(H_PROD, hcpuid); | 145 | rc = plpar_hcall_norets(H_PROD, hcpuid); |
146 | if (rc != H_SUCCESS) | 146 | if (rc != H_SUCCESS) |
147 | panic("Error: Prod to wake up processor %d Ret= %ld\n", | 147 | printk(KERN_ERR "Error: Prod to wake up processor %d\ |
148 | nr, rc); | 148 | Ret= %ld\n", nr, rc); |
149 | } | 149 | } |
150 | } | 150 | } |
151 | 151 | ||
diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c index 7d01b58f3989..b9b9e11609ec 100644 --- a/arch/powerpc/platforms/pseries/xics.c +++ b/arch/powerpc/platforms/pseries/xics.c | |||
@@ -906,7 +906,7 @@ void xics_migrate_irqs_away(void) | |||
906 | || desc->chip->set_affinity == NULL) | 906 | || desc->chip->set_affinity == NULL) |
907 | continue; | 907 | continue; |
908 | 908 | ||
909 | spin_lock_irqsave(&desc->lock, flags); | 909 | raw_spin_lock_irqsave(&desc->lock, flags); |
910 | 910 | ||
911 | status = rtas_call(ibm_get_xive, 1, 3, xics_status, irq); | 911 | status = rtas_call(ibm_get_xive, 1, 3, xics_status, irq); |
912 | if (status) { | 912 | if (status) { |
@@ -930,7 +930,7 @@ void xics_migrate_irqs_away(void) | |||
930 | cpumask_setall(irq_to_desc(virq)->affinity); | 930 | cpumask_setall(irq_to_desc(virq)->affinity); |
931 | desc->chip->set_affinity(virq, cpu_all_mask); | 931 | desc->chip->set_affinity(virq, cpu_all_mask); |
932 | unlock: | 932 | unlock: |
933 | spin_unlock_irqrestore(&desc->lock, flags); | 933 | raw_spin_unlock_irqrestore(&desc->lock, flags); |
934 | } | 934 | } |
935 | } | 935 | } |
936 | #endif | 936 | #endif |
diff --git a/arch/powerpc/sysdev/cpm2_pic.c b/arch/powerpc/sysdev/cpm2_pic.c index 971483f0dfac..1709ac5aac7c 100644 --- a/arch/powerpc/sysdev/cpm2_pic.c +++ b/arch/powerpc/sysdev/cpm2_pic.c | |||
@@ -143,13 +143,23 @@ static int cpm2_set_irq_type(unsigned int virq, unsigned int flow_type) | |||
143 | struct irq_desc *desc = irq_to_desc(virq); | 143 | struct irq_desc *desc = irq_to_desc(virq); |
144 | unsigned int vold, vnew, edibit; | 144 | unsigned int vold, vnew, edibit; |
145 | 145 | ||
146 | if (flow_type == IRQ_TYPE_NONE) | 146 | /* Port C interrupts are either IRQ_TYPE_EDGE_FALLING or |
147 | flow_type = IRQ_TYPE_LEVEL_LOW; | 147 | * IRQ_TYPE_EDGE_BOTH (default). All others are IRQ_TYPE_EDGE_FALLING |
148 | 148 | * or IRQ_TYPE_LEVEL_LOW (default) | |
149 | if (flow_type & IRQ_TYPE_EDGE_RISING) { | 149 | */ |
150 | printk(KERN_ERR "CPM2 PIC: sense type 0x%x not supported\n", | 150 | if (src >= CPM2_IRQ_PORTC15 && src <= CPM2_IRQ_PORTC0) { |
151 | flow_type); | 151 | if (flow_type == IRQ_TYPE_NONE) |
152 | return -EINVAL; | 152 | flow_type = IRQ_TYPE_EDGE_BOTH; |
153 | |||
154 | if (flow_type != IRQ_TYPE_EDGE_BOTH && | ||
155 | flow_type != IRQ_TYPE_EDGE_FALLING) | ||
156 | goto err_sense; | ||
157 | } else { | ||
158 | if (flow_type == IRQ_TYPE_NONE) | ||
159 | flow_type = IRQ_TYPE_LEVEL_LOW; | ||
160 | |||
161 | if (flow_type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_LEVEL_HIGH)) | ||
162 | goto err_sense; | ||
153 | } | 163 | } |
154 | 164 | ||
155 | desc->status &= ~(IRQ_TYPE_SENSE_MASK | IRQ_LEVEL); | 165 | desc->status &= ~(IRQ_TYPE_SENSE_MASK | IRQ_LEVEL); |
@@ -181,6 +191,10 @@ static int cpm2_set_irq_type(unsigned int virq, unsigned int flow_type) | |||
181 | if (vold != vnew) | 191 | if (vold != vnew) |
182 | out_be32(&cpm2_intctl->ic_siexr, vnew); | 192 | out_be32(&cpm2_intctl->ic_siexr, vnew); |
183 | return 0; | 193 | return 0; |
194 | |||
195 | err_sense: | ||
196 | pr_err("CPM2 PIC: sense type 0x%x not supported\n", flow_type); | ||
197 | return -EINVAL; | ||
184 | } | 198 | } |
185 | 199 | ||
186 | static struct irq_chip cpm2_pic = { | 200 | static struct irq_chip cpm2_pic = { |
diff --git a/arch/powerpc/sysdev/dart_iommu.c b/arch/powerpc/sysdev/dart_iommu.c index ae3c4db86fe8..bafc3f85360d 100644 --- a/arch/powerpc/sysdev/dart_iommu.c +++ b/arch/powerpc/sysdev/dart_iommu.c | |||
@@ -160,7 +160,7 @@ static int dart_build(struct iommu_table *tbl, long index, | |||
160 | 160 | ||
161 | dp = ((unsigned int*)tbl->it_base) + index; | 161 | dp = ((unsigned int*)tbl->it_base) + index; |
162 | 162 | ||
163 | /* On U3, all memory is contigous, so we can move this | 163 | /* On U3, all memory is contiguous, so we can move this |
164 | * out of the loop. | 164 | * out of the loop. |
165 | */ | 165 | */ |
166 | l = npages; | 166 | l = npages; |
diff --git a/arch/powerpc/sysdev/fsl_msi.c b/arch/powerpc/sysdev/fsl_msi.c index 62e50258cdef..c6e11b077108 100644 --- a/arch/powerpc/sysdev/fsl_msi.c +++ b/arch/powerpc/sysdev/fsl_msi.c | |||
@@ -173,7 +173,7 @@ static void fsl_msi_cascade(unsigned int irq, struct irq_desc *desc) | |||
173 | u32 intr_index; | 173 | u32 intr_index; |
174 | u32 have_shift = 0; | 174 | u32 have_shift = 0; |
175 | 175 | ||
176 | spin_lock(&desc->lock); | 176 | raw_spin_lock(&desc->lock); |
177 | if ((msi_data->feature & FSL_PIC_IP_MASK) == FSL_PIC_IP_IPIC) { | 177 | if ((msi_data->feature & FSL_PIC_IP_MASK) == FSL_PIC_IP_IPIC) { |
178 | if (desc->chip->mask_ack) | 178 | if (desc->chip->mask_ack) |
179 | desc->chip->mask_ack(irq); | 179 | desc->chip->mask_ack(irq); |
@@ -225,7 +225,7 @@ static void fsl_msi_cascade(unsigned int irq, struct irq_desc *desc) | |||
225 | break; | 225 | break; |
226 | } | 226 | } |
227 | unlock: | 227 | unlock: |
228 | spin_unlock(&desc->lock); | 228 | raw_spin_unlock(&desc->lock); |
229 | } | 229 | } |
230 | 230 | ||
231 | static int __devinit fsl_of_msi_probe(struct of_device *dev, | 231 | static int __devinit fsl_of_msi_probe(struct of_device *dev, |
diff --git a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c index 4e3a3e345ab3..e1a028c1f18d 100644 --- a/arch/powerpc/sysdev/fsl_pci.c +++ b/arch/powerpc/sysdev/fsl_pci.c | |||
@@ -464,8 +464,7 @@ static void __iomem *mpc83xx_pcie_remap_cfg(struct pci_bus *bus, | |||
464 | { | 464 | { |
465 | struct pci_controller *hose = pci_bus_to_host(bus); | 465 | struct pci_controller *hose = pci_bus_to_host(bus); |
466 | struct mpc83xx_pcie_priv *pcie = hose->dn->data; | 466 | struct mpc83xx_pcie_priv *pcie = hose->dn->data; |
467 | u8 bus_no = bus->number - hose->first_busno; | 467 | u32 dev_base = bus->number << 24 | devfn << 16; |
468 | u32 dev_base = bus_no << 24 | devfn << 16; | ||
469 | int ret; | 468 | int ret; |
470 | 469 | ||
471 | ret = mpc83xx_pcie_exclude_device(bus, devfn); | 470 | ret = mpc83xx_pcie_exclude_device(bus, devfn); |
@@ -515,12 +514,17 @@ static int mpc83xx_pcie_read_config(struct pci_bus *bus, unsigned int devfn, | |||
515 | static int mpc83xx_pcie_write_config(struct pci_bus *bus, unsigned int devfn, | 514 | static int mpc83xx_pcie_write_config(struct pci_bus *bus, unsigned int devfn, |
516 | int offset, int len, u32 val) | 515 | int offset, int len, u32 val) |
517 | { | 516 | { |
517 | struct pci_controller *hose = pci_bus_to_host(bus); | ||
518 | void __iomem *cfg_addr; | 518 | void __iomem *cfg_addr; |
519 | 519 | ||
520 | cfg_addr = mpc83xx_pcie_remap_cfg(bus, devfn, offset); | 520 | cfg_addr = mpc83xx_pcie_remap_cfg(bus, devfn, offset); |
521 | if (!cfg_addr) | 521 | if (!cfg_addr) |
522 | return PCIBIOS_DEVICE_NOT_FOUND; | 522 | return PCIBIOS_DEVICE_NOT_FOUND; |
523 | 523 | ||
524 | /* PPC_INDIRECT_TYPE_SURPRESS_PRIMARY_BUS */ | ||
525 | if (offset == PCI_PRIMARY_BUS && bus->number == hose->first_busno) | ||
526 | val &= 0xffffff00; | ||
527 | |||
524 | switch (len) { | 528 | switch (len) { |
525 | case 1: | 529 | case 1: |
526 | out_8(cfg_addr, val); | 530 | out_8(cfg_addr, val); |
diff --git a/arch/powerpc/sysdev/mpc8xxx_gpio.c b/arch/powerpc/sysdev/mpc8xxx_gpio.c index 103eace36194..ee1c0e1cf4a7 100644 --- a/arch/powerpc/sysdev/mpc8xxx_gpio.c +++ b/arch/powerpc/sysdev/mpc8xxx_gpio.c | |||
@@ -54,6 +54,22 @@ static void mpc8xxx_gpio_save_regs(struct of_mm_gpio_chip *mm) | |||
54 | mpc8xxx_gc->data = in_be32(mm->regs + GPIO_DAT); | 54 | mpc8xxx_gc->data = in_be32(mm->regs + GPIO_DAT); |
55 | } | 55 | } |
56 | 56 | ||
57 | /* Workaround GPIO 1 errata on MPC8572/MPC8536. The status of GPIOs | ||
58 | * defined as output cannot be determined by reading GPDAT register, | ||
59 | * so we use shadow data register instead. The status of input pins | ||
60 | * is determined by reading GPDAT register. | ||
61 | */ | ||
62 | static int mpc8572_gpio_get(struct gpio_chip *gc, unsigned int gpio) | ||
63 | { | ||
64 | u32 val; | ||
65 | struct of_mm_gpio_chip *mm = to_of_mm_gpio_chip(gc); | ||
66 | struct mpc8xxx_gpio_chip *mpc8xxx_gc = to_mpc8xxx_gpio_chip(mm); | ||
67 | |||
68 | val = in_be32(mm->regs + GPIO_DAT) & ~in_be32(mm->regs + GPIO_DIR); | ||
69 | |||
70 | return (val | mpc8xxx_gc->data) & mpc8xxx_gpio2mask(gpio); | ||
71 | } | ||
72 | |||
57 | static int mpc8xxx_gpio_get(struct gpio_chip *gc, unsigned int gpio) | 73 | static int mpc8xxx_gpio_get(struct gpio_chip *gc, unsigned int gpio) |
58 | { | 74 | { |
59 | struct of_mm_gpio_chip *mm = to_of_mm_gpio_chip(gc); | 75 | struct of_mm_gpio_chip *mm = to_of_mm_gpio_chip(gc); |
@@ -136,7 +152,10 @@ static void __init mpc8xxx_add_controller(struct device_node *np) | |||
136 | gc->ngpio = MPC8XXX_GPIO_PINS; | 152 | gc->ngpio = MPC8XXX_GPIO_PINS; |
137 | gc->direction_input = mpc8xxx_gpio_dir_in; | 153 | gc->direction_input = mpc8xxx_gpio_dir_in; |
138 | gc->direction_output = mpc8xxx_gpio_dir_out; | 154 | gc->direction_output = mpc8xxx_gpio_dir_out; |
139 | gc->get = mpc8xxx_gpio_get; | 155 | if (of_device_is_compatible(np, "fsl,mpc8572-gpio")) |
156 | gc->get = mpc8572_gpio_get; | ||
157 | else | ||
158 | gc->get = mpc8xxx_gpio_get; | ||
140 | gc->set = mpc8xxx_gpio_set; | 159 | gc->set = mpc8xxx_gpio_set; |
141 | 160 | ||
142 | ret = of_mm_gpiochip_add(np, mm_gc); | 161 | ret = of_mm_gpiochip_add(np, mm_gc); |
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c index aa9d06e5925b..470dc6c11d57 100644 --- a/arch/powerpc/sysdev/mpic.c +++ b/arch/powerpc/sysdev/mpic.c | |||
@@ -567,13 +567,11 @@ static void __init mpic_scan_ht_pics(struct mpic *mpic) | |||
567 | #endif /* CONFIG_MPIC_U3_HT_IRQS */ | 567 | #endif /* CONFIG_MPIC_U3_HT_IRQS */ |
568 | 568 | ||
569 | #ifdef CONFIG_SMP | 569 | #ifdef CONFIG_SMP |
570 | static int irq_choose_cpu(unsigned int virt_irq) | 570 | static int irq_choose_cpu(const cpumask_t *mask) |
571 | { | 571 | { |
572 | cpumask_t mask; | ||
573 | int cpuid; | 572 | int cpuid; |
574 | 573 | ||
575 | cpumask_copy(&mask, irq_to_desc(virt_irq)->affinity); | 574 | if (cpumask_equal(mask, cpu_all_mask)) { |
576 | if (cpus_equal(mask, CPU_MASK_ALL)) { | ||
577 | static int irq_rover; | 575 | static int irq_rover; |
578 | static DEFINE_SPINLOCK(irq_rover_lock); | 576 | static DEFINE_SPINLOCK(irq_rover_lock); |
579 | unsigned long flags; | 577 | unsigned long flags; |
@@ -594,20 +592,15 @@ static int irq_choose_cpu(unsigned int virt_irq) | |||
594 | 592 | ||
595 | spin_unlock_irqrestore(&irq_rover_lock, flags); | 593 | spin_unlock_irqrestore(&irq_rover_lock, flags); |
596 | } else { | 594 | } else { |
597 | cpumask_t tmp; | 595 | cpuid = cpumask_first_and(mask, cpu_online_mask); |
598 | 596 | if (cpuid >= nr_cpu_ids) | |
599 | cpus_and(tmp, cpu_online_map, mask); | ||
600 | |||
601 | if (cpus_empty(tmp)) | ||
602 | goto do_round_robin; | 597 | goto do_round_robin; |
603 | |||
604 | cpuid = first_cpu(tmp); | ||
605 | } | 598 | } |
606 | 599 | ||
607 | return get_hard_smp_processor_id(cpuid); | 600 | return get_hard_smp_processor_id(cpuid); |
608 | } | 601 | } |
609 | #else | 602 | #else |
610 | static int irq_choose_cpu(unsigned int virt_irq) | 603 | static int irq_choose_cpu(const cpumask_t *mask) |
611 | { | 604 | { |
612 | return hard_smp_processor_id(); | 605 | return hard_smp_processor_id(); |
613 | } | 606 | } |
@@ -816,7 +809,7 @@ int mpic_set_affinity(unsigned int irq, const struct cpumask *cpumask) | |||
816 | unsigned int src = mpic_irq_to_hw(irq); | 809 | unsigned int src = mpic_irq_to_hw(irq); |
817 | 810 | ||
818 | if (mpic->flags & MPIC_SINGLE_DEST_CPU) { | 811 | if (mpic->flags & MPIC_SINGLE_DEST_CPU) { |
819 | int cpuid = irq_choose_cpu(irq); | 812 | int cpuid = irq_choose_cpu(cpumask); |
820 | 813 | ||
821 | mpic_irq_write(src, MPIC_INFO(IRQ_DESTINATION), 1 << cpuid); | 814 | mpic_irq_write(src, MPIC_INFO(IRQ_DESTINATION), 1 << cpuid); |
822 | } else { | 815 | } else { |
diff --git a/arch/powerpc/sysdev/mpic_msi.c b/arch/powerpc/sysdev/mpic_msi.c index 1d44eee80fa1..0f67cd79d481 100644 --- a/arch/powerpc/sysdev/mpic_msi.c +++ b/arch/powerpc/sysdev/mpic_msi.c | |||
@@ -39,7 +39,12 @@ static int mpic_msi_reserve_u3_hwirqs(struct mpic *mpic) | |||
39 | 39 | ||
40 | pr_debug("mpic: found U3, guessing msi allocator setup\n"); | 40 | pr_debug("mpic: found U3, guessing msi allocator setup\n"); |
41 | 41 | ||
42 | /* Reserve source numbers we know are reserved in the HW */ | 42 | /* Reserve source numbers we know are reserved in the HW. |
43 | * | ||
44 | * This is a bit of a mix of U3 and U4 reserves but that's going | ||
45 | * to work fine, we have plenty enugh numbers left so let's just | ||
46 | * mark anything we don't like reserved. | ||
47 | */ | ||
43 | for (i = 0; i < 8; i++) | 48 | for (i = 0; i < 8; i++) |
44 | msi_bitmap_reserve_hwirq(&mpic->msi_bitmap, i); | 49 | msi_bitmap_reserve_hwirq(&mpic->msi_bitmap, i); |
45 | 50 | ||
@@ -49,6 +54,10 @@ static int mpic_msi_reserve_u3_hwirqs(struct mpic *mpic) | |||
49 | for (i = 100; i < 105; i++) | 54 | for (i = 100; i < 105; i++) |
50 | msi_bitmap_reserve_hwirq(&mpic->msi_bitmap, i); | 55 | msi_bitmap_reserve_hwirq(&mpic->msi_bitmap, i); |
51 | 56 | ||
57 | for (i = 124; i < mpic->irq_count; i++) | ||
58 | msi_bitmap_reserve_hwirq(&mpic->msi_bitmap, i); | ||
59 | |||
60 | |||
52 | np = NULL; | 61 | np = NULL; |
53 | while ((np = of_find_all_nodes(np))) { | 62 | while ((np = of_find_all_nodes(np))) { |
54 | pr_debug("mpic: mapping hwirqs for %s\n", np->full_name); | 63 | pr_debug("mpic: mapping hwirqs for %s\n", np->full_name); |
diff --git a/arch/powerpc/sysdev/mpic_u3msi.c b/arch/powerpc/sysdev/mpic_u3msi.c index d3caf23e6312..bcbfe79c704b 100644 --- a/arch/powerpc/sysdev/mpic_u3msi.c +++ b/arch/powerpc/sysdev/mpic_u3msi.c | |||
@@ -64,12 +64,12 @@ static u64 read_ht_magic_addr(struct pci_dev *pdev, unsigned int pos) | |||
64 | return addr; | 64 | return addr; |
65 | } | 65 | } |
66 | 66 | ||
67 | static u64 find_ht_magic_addr(struct pci_dev *pdev) | 67 | static u64 find_ht_magic_addr(struct pci_dev *pdev, unsigned int hwirq) |
68 | { | 68 | { |
69 | struct pci_bus *bus; | 69 | struct pci_bus *bus; |
70 | unsigned int pos; | 70 | unsigned int pos; |
71 | 71 | ||
72 | for (bus = pdev->bus; bus; bus = bus->parent) { | 72 | for (bus = pdev->bus; bus && bus->self; bus = bus->parent) { |
73 | pos = pci_find_ht_capability(bus->self, HT_CAPTYPE_MSI_MAPPING); | 73 | pos = pci_find_ht_capability(bus->self, HT_CAPTYPE_MSI_MAPPING); |
74 | if (pos) | 74 | if (pos) |
75 | return read_ht_magic_addr(bus->self, pos); | 75 | return read_ht_magic_addr(bus->self, pos); |
@@ -78,13 +78,41 @@ static u64 find_ht_magic_addr(struct pci_dev *pdev) | |||
78 | return 0; | 78 | return 0; |
79 | } | 79 | } |
80 | 80 | ||
81 | static u64 find_u4_magic_addr(struct pci_dev *pdev, unsigned int hwirq) | ||
82 | { | ||
83 | struct pci_controller *hose = pci_bus_to_host(pdev->bus); | ||
84 | |||
85 | /* U4 PCIe MSIs need to write to the special register in | ||
86 | * the bridge that generates interrupts. There should be | ||
87 | * theorically a register at 0xf8005000 where you just write | ||
88 | * the MSI number and that triggers the right interrupt, but | ||
89 | * unfortunately, this is busted in HW, the bridge endian swaps | ||
90 | * the value and hits the wrong nibble in the register. | ||
91 | * | ||
92 | * So instead we use another register set which is used normally | ||
93 | * for converting HT interrupts to MPIC interrupts, which decodes | ||
94 | * the interrupt number as part of the low address bits | ||
95 | * | ||
96 | * This will not work if we ever use more than one legacy MSI in | ||
97 | * a block but we never do. For one MSI or multiple MSI-X where | ||
98 | * each interrupt address can be specified separately, it works | ||
99 | * just fine. | ||
100 | */ | ||
101 | if (of_device_is_compatible(hose->dn, "u4-pcie") || | ||
102 | of_device_is_compatible(hose->dn, "U4-pcie")) | ||
103 | return 0xf8004000 | (hwirq << 4); | ||
104 | |||
105 | return 0; | ||
106 | } | ||
107 | |||
81 | static int u3msi_msi_check_device(struct pci_dev *pdev, int nvec, int type) | 108 | static int u3msi_msi_check_device(struct pci_dev *pdev, int nvec, int type) |
82 | { | 109 | { |
83 | if (type == PCI_CAP_ID_MSIX) | 110 | if (type == PCI_CAP_ID_MSIX) |
84 | pr_debug("u3msi: MSI-X untested, trying anyway.\n"); | 111 | pr_debug("u3msi: MSI-X untested, trying anyway.\n"); |
85 | 112 | ||
86 | /* If we can't find a magic address then MSI ain't gonna work */ | 113 | /* If we can't find a magic address then MSI ain't gonna work */ |
87 | if (find_ht_magic_addr(pdev) == 0) { | 114 | if (find_ht_magic_addr(pdev, 0) == 0 && |
115 | find_u4_magic_addr(pdev, 0) == 0) { | ||
88 | pr_debug("u3msi: no magic address found for %s\n", | 116 | pr_debug("u3msi: no magic address found for %s\n", |
89 | pci_name(pdev)); | 117 | pci_name(pdev)); |
90 | return -ENXIO; | 118 | return -ENXIO; |
@@ -118,10 +146,6 @@ static int u3msi_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type) | |||
118 | u64 addr; | 146 | u64 addr; |
119 | int hwirq; | 147 | int hwirq; |
120 | 148 | ||
121 | addr = find_ht_magic_addr(pdev); | ||
122 | msg.address_lo = addr & 0xFFFFFFFF; | ||
123 | msg.address_hi = addr >> 32; | ||
124 | |||
125 | list_for_each_entry(entry, &pdev->msi_list, list) { | 149 | list_for_each_entry(entry, &pdev->msi_list, list) { |
126 | hwirq = msi_bitmap_alloc_hwirqs(&msi_mpic->msi_bitmap, 1); | 150 | hwirq = msi_bitmap_alloc_hwirqs(&msi_mpic->msi_bitmap, 1); |
127 | if (hwirq < 0) { | 151 | if (hwirq < 0) { |
@@ -129,6 +153,12 @@ static int u3msi_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type) | |||
129 | return hwirq; | 153 | return hwirq; |
130 | } | 154 | } |
131 | 155 | ||
156 | addr = find_ht_magic_addr(pdev, hwirq); | ||
157 | if (addr == 0) | ||
158 | addr = find_u4_magic_addr(pdev, hwirq); | ||
159 | msg.address_lo = addr & 0xFFFFFFFF; | ||
160 | msg.address_hi = addr >> 32; | ||
161 | |||
132 | virq = irq_create_mapping(msi_mpic->irqhost, hwirq); | 162 | virq = irq_create_mapping(msi_mpic->irqhost, hwirq); |
133 | if (virq == NO_IRQ) { | 163 | if (virq == NO_IRQ) { |
134 | pr_debug("u3msi: failed mapping hwirq 0x%x\n", hwirq); | 164 | pr_debug("u3msi: failed mapping hwirq 0x%x\n", hwirq); |
@@ -143,6 +173,8 @@ static int u3msi_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type) | |||
143 | pr_debug("u3msi: allocated virq 0x%x (hw 0x%x) addr 0x%lx\n", | 173 | pr_debug("u3msi: allocated virq 0x%x (hw 0x%x) addr 0x%lx\n", |
144 | virq, hwirq, (unsigned long)addr); | 174 | virq, hwirq, (unsigned long)addr); |
145 | 175 | ||
176 | printk("u3msi: allocated virq 0x%x (hw 0x%x) addr 0x%lx\n", | ||
177 | virq, hwirq, (unsigned long)addr); | ||
146 | msg.data = hwirq; | 178 | msg.data = hwirq; |
147 | write_msi_msg(virq, &msg); | 179 | write_msi_msg(virq, &msg); |
148 | 180 | ||
diff --git a/arch/powerpc/sysdev/uic.c b/arch/powerpc/sysdev/uic.c index 7d10074b3304..6f220a913e42 100644 --- a/arch/powerpc/sysdev/uic.c +++ b/arch/powerpc/sysdev/uic.c | |||
@@ -225,12 +225,12 @@ void uic_irq_cascade(unsigned int virq, struct irq_desc *desc) | |||
225 | int src; | 225 | int src; |
226 | int subvirq; | 226 | int subvirq; |
227 | 227 | ||
228 | spin_lock(&desc->lock); | 228 | raw_spin_lock(&desc->lock); |
229 | if (desc->status & IRQ_LEVEL) | 229 | if (desc->status & IRQ_LEVEL) |
230 | desc->chip->mask(virq); | 230 | desc->chip->mask(virq); |
231 | else | 231 | else |
232 | desc->chip->mask_ack(virq); | 232 | desc->chip->mask_ack(virq); |
233 | spin_unlock(&desc->lock); | 233 | raw_spin_unlock(&desc->lock); |
234 | 234 | ||
235 | msr = mfdcr(uic->dcrbase + UIC_MSR); | 235 | msr = mfdcr(uic->dcrbase + UIC_MSR); |
236 | if (!msr) /* spurious interrupt */ | 236 | if (!msr) /* spurious interrupt */ |
@@ -242,12 +242,12 @@ void uic_irq_cascade(unsigned int virq, struct irq_desc *desc) | |||
242 | generic_handle_irq(subvirq); | 242 | generic_handle_irq(subvirq); |
243 | 243 | ||
244 | uic_irq_ret: | 244 | uic_irq_ret: |
245 | spin_lock(&desc->lock); | 245 | raw_spin_lock(&desc->lock); |
246 | if (desc->status & IRQ_LEVEL) | 246 | if (desc->status & IRQ_LEVEL) |
247 | desc->chip->ack(virq); | 247 | desc->chip->ack(virq); |
248 | if (!(desc->status & IRQ_DISABLED) && desc->chip->unmask) | 248 | if (!(desc->status & IRQ_DISABLED) && desc->chip->unmask) |
249 | desc->chip->unmask(virq); | 249 | desc->chip->unmask(virq); |
250 | spin_unlock(&desc->lock); | 250 | raw_spin_unlock(&desc->lock); |
251 | } | 251 | } |
252 | 252 | ||
253 | static struct uic * __init uic_init_one(struct device_node *node) | 253 | static struct uic * __init uic_init_one(struct device_node *node) |