aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/powerpc/booting-without-of.txt49
-rw-r--r--arch/powerpc/boot/Makefile3
-rw-r--r--arch/powerpc/boot/cuboot-warp.c47
-rw-r--r--arch/powerpc/boot/dts/asp834x-redboot.dts247
-rw-r--r--arch/powerpc/boot/dts/bamboo.dts142
-rw-r--r--arch/powerpc/boot/dts/canyonlands.dts222
-rw-r--r--arch/powerpc/boot/dts/ebony.dts164
-rw-r--r--arch/powerpc/boot/dts/ep405.dts100
-rw-r--r--arch/powerpc/boot/dts/glacier.dts262
-rw-r--r--arch/powerpc/boot/dts/haleakala.dts136
-rw-r--r--arch/powerpc/boot/dts/holly.dts122
-rw-r--r--arch/powerpc/boot/dts/katmai.dts210
-rw-r--r--arch/powerpc/boot/dts/kilauea.dts182
-rw-r--r--arch/powerpc/boot/dts/ksi8560.dts3
-rw-r--r--arch/powerpc/boot/dts/makalu.dts182
-rw-r--r--arch/powerpc/boot/dts/mpc7448hpc2.dts2
-rw-r--r--arch/powerpc/boot/dts/mpc8540ads.dts5
-rw-r--r--arch/powerpc/boot/dts/mpc8541cds.dts5
-rw-r--r--arch/powerpc/boot/dts/mpc8544ds.dts21
-rw-r--r--arch/powerpc/boot/dts/mpc8548cds.dts5
-rw-r--r--arch/powerpc/boot/dts/mpc8555cds.dts5
-rw-r--r--arch/powerpc/boot/dts/mpc8560ads.dts3
-rw-r--r--arch/powerpc/boot/dts/mpc8568mds.dts5
-rw-r--r--arch/powerpc/boot/dts/mpc8572ds.dts22
-rw-r--r--arch/powerpc/boot/dts/mpc8610_hpcd.dts18
-rw-r--r--arch/powerpc/boot/dts/mpc8641_hpcn.dts2
-rw-r--r--arch/powerpc/boot/dts/ps3.dts16
-rw-r--r--arch/powerpc/boot/dts/rainier.dts163
-rw-r--r--arch/powerpc/boot/dts/sbc8548.dts5
-rw-r--r--arch/powerpc/boot/dts/sbc8560.dts5
-rw-r--r--arch/powerpc/boot/dts/sequoia.dts172
-rw-r--r--arch/powerpc/boot/dts/storcenter.dts1
-rw-r--r--arch/powerpc/boot/dts/stx_gp3_8560.dts4
-rw-r--r--arch/powerpc/boot/dts/taishan.dts212
-rw-r--r--arch/powerpc/boot/dts/tqm8540.dts4
-rw-r--r--arch/powerpc/boot/dts/tqm8541.dts4
-rw-r--r--arch/powerpc/boot/dts/tqm8555.dts4
-rw-r--r--arch/powerpc/boot/dts/tqm8560.dts4
-rw-r--r--arch/powerpc/boot/dts/walnut.dts118
-rw-r--r--arch/powerpc/boot/dts/warp.dts145
-rw-r--r--arch/powerpc/boot/dts/yosemite.dts146
-rw-r--r--arch/powerpc/boot/redboot-83xx.c60
-rwxr-xr-xarch/powerpc/boot/wrapper6
-rw-r--r--arch/powerpc/configs/asp8347_defconfig1214
-rw-r--r--arch/powerpc/kernel/asm-offsets.c23
-rw-r--r--arch/powerpc/kernel/entry_32.S150
-rw-r--r--arch/powerpc/kernel/head_40x.S24
-rw-r--r--arch/powerpc/kernel/head_44x.S9
-rw-r--r--arch/powerpc/kernel/head_booke.h102
-rw-r--r--arch/powerpc/kernel/head_fsl_booke.S9
-rw-r--r--arch/powerpc/kernel/irq.c33
-rw-r--r--arch/powerpc/kernel/kprobes.c2
-rw-r--r--arch/powerpc/kernel/lparcfg.c6
-rw-r--r--arch/powerpc/kernel/machine_kexec_64.c4
-rw-r--r--arch/powerpc/kernel/msi.c2
-rw-r--r--arch/powerpc/kernel/of_device.c48
-rw-r--r--arch/powerpc/kernel/rtas-proc.c14
-rw-r--r--arch/powerpc/kernel/rtas.c6
-rw-r--r--arch/powerpc/kernel/rtas_flash.c4
-rw-r--r--arch/powerpc/kernel/rtas_pci.c4
-rw-r--r--arch/powerpc/kernel/setup_32.c24
-rw-r--r--arch/powerpc/kernel/signal.c12
-rw-r--r--arch/powerpc/kernel/signal_32.c2
-rw-r--r--arch/powerpc/kernel/smp.c4
-rw-r--r--arch/powerpc/kernel/time.c10
-rw-r--r--arch/powerpc/kernel/vdso64/vdso64.lds.S6
-rw-r--r--arch/powerpc/mm/hash_utils_64.c6
-rw-r--r--arch/powerpc/mm/init_32.c3
-rw-r--r--arch/powerpc/mm/init_64.c4
-rw-r--r--arch/powerpc/mm/stab.c4
-rw-r--r--arch/powerpc/mm/tlb_64.c7
-rw-r--r--arch/powerpc/platforms/44x/warp-nand.c49
-rw-r--r--arch/powerpc/platforms/44x/warp.c293
-rw-r--r--arch/powerpc/platforms/83xx/Kconfig9
-rw-r--r--arch/powerpc/platforms/83xx/Makefile1
-rw-r--r--arch/powerpc/platforms/83xx/asp834x.c90
-rw-r--r--arch/powerpc/platforms/85xx/mpc85xx_ds.c4
-rw-r--r--arch/powerpc/platforms/86xx/mpc8610_hpcd.c3
-rw-r--r--arch/powerpc/platforms/cell/axon_msi.c58
-rw-r--r--arch/powerpc/platforms/chrp/setup.c7
-rw-r--r--arch/powerpc/platforms/maple/time.c2
-rw-r--r--arch/powerpc/platforms/powermac/pic.c8
-rw-r--r--arch/powerpc/platforms/pseries/firmware.c1
-rw-r--r--arch/powerpc/platforms/pseries/iommu.c15
-rw-r--r--arch/powerpc/platforms/pseries/lpar.c2
-rw-r--r--arch/powerpc/platforms/pseries/ras.c2
-rw-r--r--arch/powerpc/platforms/pseries/rtasd.c4
-rw-r--r--arch/powerpc/platforms/pseries/setup.c4
-rw-r--r--arch/powerpc/sysdev/6xx-suspend.S52
-rw-r--r--arch/powerpc/sysdev/Makefile7
-rw-r--r--arch/powerpc/sysdev/dcr.c156
-rw-r--r--arch/powerpc/sysdev/fsl_msi.c429
-rw-r--r--arch/powerpc/sysdev/fsl_msi.h42
-rw-r--r--arch/powerpc/sysdev/fsl_pci.c12
-rw-r--r--arch/powerpc/sysdev/fsl_soc.c15
-rw-r--r--arch/powerpc/sysdev/mpic.c9
-rw-r--r--arch/powerpc/sysdev/mpic_msi.c1
-rw-r--r--arch/powerpc/sysdev/mpic_pasemi_msi.c6
-rw-r--r--arch/powerpc/sysdev/mpic_u3msi.c8
-rw-r--r--arch/powerpc/sysdev/mv64x60_dev.c10
-rw-r--r--arch/powerpc/xmon/xmon.c66
-rw-r--r--arch/ppc/kernel/entry.S4
-rw-r--r--drivers/char/hvc_console.c8
-rw-r--r--drivers/char/hvc_console.h10
-rw-r--r--drivers/macintosh/macio_sysfs.c12
-rw-r--r--drivers/net/Kconfig1
-rw-r--r--drivers/net/Makefile1
-rw-r--r--drivers/net/fec_8xx/Kconfig20
-rw-r--r--drivers/net/fec_8xx/Makefile12
-rw-r--r--drivers/net/fec_8xx/fec_8xx-netta.c151
-rw-r--r--drivers/net/fec_8xx/fec_8xx.h220
-rw-r--r--drivers/net/fec_8xx/fec_main.c1264
-rw-r--r--drivers/net/fec_8xx/fec_mii.c418
-rw-r--r--drivers/of/device.c84
-rw-r--r--drivers/of/gpio.c38
-rw-r--r--drivers/of/platform.c3
-rw-r--r--include/asm-powerpc/dcr-generic.h49
-rw-r--r--include/asm-powerpc/dcr-mmio.h20
-rw-r--r--include/asm-powerpc/dcr-native.h16
-rw-r--r--include/asm-powerpc/dcr.h39
-rw-r--r--include/asm-powerpc/ioctl.h58
-rw-r--r--include/asm-powerpc/irq.h13
-rw-r--r--include/asm-powerpc/mmu-hash64.h1
-rw-r--r--include/asm-powerpc/mpc6xx.h6
-rw-r--r--include/asm-powerpc/mpic.h2
-rw-r--r--include/asm-powerpc/of_device.h2
-rw-r--r--include/asm-powerpc/ppc_asm.h6
-rw-r--r--include/asm-powerpc/ptrace.h1
-rw-r--r--include/asm-powerpc/smp.h2
-rw-r--r--include/asm-powerpc/system.h1
-rw-r--r--include/asm-powerpc/thread_info.h19
-rw-r--r--include/asm-powerpc/time.h1
-rw-r--r--include/asm-powerpc/xmon.h9
-rw-r--r--include/linux/of_device.h3
134 files changed, 4873 insertions, 3955 deletions
diff --git a/Documentation/powerpc/booting-without-of.txt b/Documentation/powerpc/booting-without-of.txt
index 1d2a772506cf..948f6417a40b 100644
--- a/Documentation/powerpc/booting-without-of.txt
+++ b/Documentation/powerpc/booting-without-of.txt
@@ -57,7 +57,10 @@ Table of Contents
57 n) 4xx/Axon EMAC ethernet nodes 57 n) 4xx/Axon EMAC ethernet nodes
58 o) Xilinx IP cores 58 o) Xilinx IP cores
59 p) Freescale Synchronous Serial Interface 59 p) Freescale Synchronous Serial Interface
60 q) USB EHCI controllers 60 q) USB EHCI controllers
61 r) Freescale Display Interface Unit
62 s) Freescale on board FPGA
63 t) Freescael MSI interrupt controller
61 64
62 VII - Marvell Discovery mv64[345]6x System Controller chips 65 VII - Marvell Discovery mv64[345]6x System Controller chips
63 1) The /system-controller node 66 1) The /system-controller node
@@ -1360,14 +1363,11 @@ platforms are moved over to use the flattened-device-tree model.
1360 1363
1361 pic@40000 { 1364 pic@40000 {
1362 linux,phandle = <40000>; 1365 linux,phandle = <40000>;
1363 clock-frequency = <0>;
1364 interrupt-controller; 1366 interrupt-controller;
1365 #address-cells = <0>; 1367 #address-cells = <0>;
1366 reg = <40000 40000>; 1368 reg = <40000 40000>;
1367 built-in;
1368 compatible = "chrp,open-pic"; 1369 compatible = "chrp,open-pic";
1369 device_type = "open-pic"; 1370 device_type = "open-pic";
1370 big-endian;
1371 }; 1371 };
1372 1372
1373 1373
@@ -2870,6 +2870,44 @@ platforms are moved over to use the flattened-device-tree model.
2870 reg = <0xe8000000 32>; 2870 reg = <0xe8000000 32>;
2871 }; 2871 };
2872 2872
2873 t) Freescale MSI interrupt controller
2874
2875 Reguired properities:
2876 - compatible : compatible list, contains 2 entries,
2877 first is "fsl,CHIP-msi", where CHIP is the processor(mpc8610, mpc8572,
2878 etc.) and the second is "fsl,mpic-msi" or "fsl,ipic-msi" depending on
2879 the parent type.
2880 - reg : should contain the address and the length of the shared message
2881 interrupt register set.
2882 - msi-available-ranges: use <start count> style section to define which
2883 msi interrupt can be used in the 256 msi interrupts. This property is
2884 optional, without this, all the 256 MSI interrupts can be used.
2885 - interrupts : each one of the interrupts here is one entry per 32 MSIs,
2886 and routed to the host interrupt controller. the interrupts should
2887 be set as edge sensitive.
2888 - interrupt-parent: the phandle for the interrupt controller
2889 that services interrupts for this device. for 83xx cpu, the interrupts
2890 are routed to IPIC, and for 85xx/86xx cpu the interrupts are routed
2891 to MPIC.
2892
2893 Example
2894 msi@41600 {
2895 compatible = "fsl,mpc8610-msi", "fsl,mpic-msi";
2896 reg = <0x41600 0x80>;
2897 msi-available-ranges = <0 0x100>;
2898 interrupts = <
2899 0xe0 0
2900 0xe1 0
2901 0xe2 0
2902 0xe3 0
2903 0xe4 0
2904 0xe5 0
2905 0xe6 0
2906 0xe7 0>;
2907 interrupt-parent = <&mpic>;
2908 };
2909
2910
2873VII - Marvell Discovery mv64[345]6x System Controller chips 2911VII - Marvell Discovery mv64[345]6x System Controller chips
2874=========================================================== 2912===========================================================
2875 2913
@@ -3622,14 +3660,11 @@ not necessary as they are usually the same as the root node.
3622 3660
3623 pic@40000 { 3661 pic@40000 {
3624 linux,phandle = <40000>; 3662 linux,phandle = <40000>;
3625 clock-frequency = <0>;
3626 interrupt-controller; 3663 interrupt-controller;
3627 #address-cells = <0>; 3664 #address-cells = <0>;
3628 reg = <40000 40000>; 3665 reg = <40000 40000>;
3629 built-in;
3630 compatible = "chrp,open-pic"; 3666 compatible = "chrp,open-pic";
3631 device_type = "open-pic"; 3667 device_type = "open-pic";
3632 big-endian;
3633 }; 3668 };
3634 3669
3635 i2c@3000 { 3670 i2c@3000 {
diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile
index d53b84e761a9..c3585bed1970 100644
--- a/arch/powerpc/boot/Makefile
+++ b/arch/powerpc/boot/Makefile
@@ -66,7 +66,7 @@ src-plat := of.c cuboot-52xx.c cuboot-824x.c cuboot-83xx.c cuboot-85xx.c holly.c
66 fixed-head.S ep88xc.c ep405.c \ 66 fixed-head.S ep88xc.c ep405.c \
67 cuboot-katmai.c cuboot-rainier.c redboot-8xx.c ep8248e.c \ 67 cuboot-katmai.c cuboot-rainier.c redboot-8xx.c ep8248e.c \
68 cuboot-warp.c cuboot-85xx-cpm2.c cuboot-yosemite.c simpleboot.c \ 68 cuboot-warp.c cuboot-85xx-cpm2.c cuboot-yosemite.c simpleboot.c \
69 virtex405-head.S 69 virtex405-head.S redboot-83xx.c
70src-boot := $(src-wlib) $(src-plat) empty.c 70src-boot := $(src-wlib) $(src-plat) empty.c
71 71
72src-boot := $(addprefix $(obj)/, $(src-boot)) 72src-boot := $(addprefix $(obj)/, $(src-boot))
@@ -242,6 +242,7 @@ image-$(CONFIG_MPC834x_ITX) += cuImage.mpc8349emitx \
242 cuImage.mpc8349emitxgp 242 cuImage.mpc8349emitxgp
243image-$(CONFIG_MPC834x_MDS) += cuImage.mpc834x_mds 243image-$(CONFIG_MPC834x_MDS) += cuImage.mpc834x_mds
244image-$(CONFIG_MPC836x_MDS) += cuImage.mpc836x_mds 244image-$(CONFIG_MPC836x_MDS) += cuImage.mpc836x_mds
245image-$(CONFIG_ASP834x) += dtbImage.asp834x-redboot
245 246
246# Board ports in arch/powerpc/platform/85xx/Kconfig 247# Board ports in arch/powerpc/platform/85xx/Kconfig
247image-$(CONFIG_MPC8540_ADS) += cuImage.mpc8540ads 248image-$(CONFIG_MPC8540_ADS) += cuImage.mpc8540ads
diff --git a/arch/powerpc/boot/cuboot-warp.c b/arch/powerpc/boot/cuboot-warp.c
index eb108a877492..21780210057d 100644
--- a/arch/powerpc/boot/cuboot-warp.c
+++ b/arch/powerpc/boot/cuboot-warp.c
@@ -10,6 +10,7 @@
10#include "ops.h" 10#include "ops.h"
11#include "4xx.h" 11#include "4xx.h"
12#include "cuboot.h" 12#include "cuboot.h"
13#include "stdio.h"
13 14
14#define TARGET_4xx 15#define TARGET_4xx
15#define TARGET_44x 16#define TARGET_44x
@@ -17,14 +18,54 @@
17 18
18static bd_t bd; 19static bd_t bd;
19 20
20static void warp_fixups(void) 21static void warp_fixup_one_nor(u32 from, u32 to)
21{ 22{
22 unsigned long sysclk = 66000000; 23 void *devp;
24 char name[50];
25 u32 v[2];
26
27 sprintf(name, "/plb/opb/ebc/nor_flash@0,0/partition@%x", from);
28
29 devp = finddevice(name);
30 if (!devp)
31 return;
32
33 if (getprop(devp, "reg", v, sizeof(v)) == sizeof(v)) {
34 v[0] = to;
35 setprop(devp, "reg", v, sizeof(v));
36
37 printf("NOR 64M fixup %x -> %x\r\n", from, to);
38 }
39}
40
23 41
24 ibm440ep_fixup_clocks(sysclk, 11059200, 50000000); 42static void warp_fixups(void)
43{
44 ibm440ep_fixup_clocks(66000000, 11059200, 50000000);
25 ibm4xx_sdram_fixup_memsize(); 45 ibm4xx_sdram_fixup_memsize();
26 ibm4xx_fixup_ebc_ranges("/plb/opb/ebc"); 46 ibm4xx_fixup_ebc_ranges("/plb/opb/ebc");
27 dt_fixup_mac_address_by_alias("ethernet0", bd.bi_enetaddr); 47 dt_fixup_mac_address_by_alias("ethernet0", bd.bi_enetaddr);
48
49 /* Fixup for 64M flash on Rev A boards. */
50 if (bd.bi_flashsize == 0x4000000) {
51 void *devp;
52 u32 v[3];
53
54 devp = finddevice("/plb/opb/ebc/nor_flash@0,0");
55 if (!devp)
56 return;
57
58 /* Fixup the size */
59 if (getprop(devp, "reg", v, sizeof(v)) == sizeof(v)) {
60 v[2] = bd.bi_flashsize;
61 setprop(devp, "reg", v, sizeof(v));
62 }
63
64 /* Fixup parition offsets */
65 warp_fixup_one_nor(0x300000, 0x3f00000);
66 warp_fixup_one_nor(0x340000, 0x3f40000);
67 warp_fixup_one_nor(0x380000, 0x3f80000);
68 }
28} 69}
29 70
30 71
diff --git a/arch/powerpc/boot/dts/asp834x-redboot.dts b/arch/powerpc/boot/dts/asp834x-redboot.dts
new file mode 100644
index 000000000000..972cf78fff65
--- /dev/null
+++ b/arch/powerpc/boot/dts/asp834x-redboot.dts
@@ -0,0 +1,247 @@
1/*
2 * Analogue & Micro ASP8347 Device Tree Source
3 *
4 * Copyright 2008 Codehermit
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2 of the License, or (at your
9 * option) any later version.
10 */
11
12/dts-v1/;
13
14/ {
15 model = "Analogue & Micro ASP8347E";
16 compatible = "analogue-and-micro,asp8347e";
17 #address-cells = <1>;
18 #size-cells = <1>;
19
20 aliases {
21 ethernet0 = &enet0;
22 ethernet1 = &enet1;
23 serial0 = &serial0;
24 serial1 = &serial1;
25 };
26
27 cpus {
28 #address-cells = <1>;
29 #size-cells = <0>;
30
31 PowerPC,8347@0 {
32 device_type = "cpu";
33 reg = <0x0>;
34 d-cache-line-size = <32>;
35 i-cache-line-size = <32>;
36 d-cache-size = <32768>;
37 i-cache-size = <32768>;
38 timebase-frequency = <0>; // from bootloader
39 bus-frequency = <0>; // from bootloader
40 clock-frequency = <0>; // from bootloader
41 };
42 };
43
44 memory {
45 device_type = "memory";
46 reg = <0x00000000 0x8000000>; // 128MB at 0
47 };
48
49 localbus@ff005000 {
50 #address-cells = <2>;
51 #size-cells = <1>;
52 compatible = "fsl,mpc8347e-localbus",
53 "fsl,pq2pro-localbus",
54 "simple-bus";
55 reg = <0xff005000 0x1000>;
56 interrupts = <77 0x8>;
57 interrupt-parent = <&ipic>;
58
59 ranges = <
60 0 0 0xf0000000 0x02000000
61 >;
62
63 flash@0,0 {
64 compatible = "cfi-flash";
65 reg = <0 0 0x02000000>;
66 bank-width = <2>;
67 device-width = <2>;
68 };
69 };
70
71 soc8349@ff000000 {
72 #address-cells = <1>;
73 #size-cells = <1>;
74 device_type = "soc";
75 ranges = <0x0 0xff000000 0x00100000>;
76 reg = <0xff000000 0x00000200>;
77 bus-frequency = <0>;
78
79 wdt@200 {
80 device_type = "watchdog";
81 compatible = "mpc83xx_wdt";
82 reg = <0x200 0x100>;
83 };
84
85 i2c@3000 {
86 #address-cells = <1>;
87 #size-cells = <0>;
88 cell-index = <0>;
89 compatible = "fsl-i2c";
90 reg = <0x3000 0x100>;
91 interrupts = <14 0x8>;
92 interrupt-parent = <&ipic>;
93 dfsrr;
94
95 rtc@68 {
96 compatible = "dallas,ds1374";
97 reg = <0x68>;
98 };
99 };
100
101 i2c@3100 {
102 #address-cells = <1>;
103 #size-cells = <0>;
104 cell-index = <1>;
105 compatible = "fsl-i2c";
106 reg = <0x3100 0x100>;
107 interrupts = <15 0x8>;
108 interrupt-parent = <&ipic>;
109 dfsrr;
110 };
111
112 spi@7000 {
113 cell-index = <0>;
114 compatible = "fsl,spi";
115 reg = <0x7000 0x1000>;
116 interrupts = <16 0x8>;
117 interrupt-parent = <&ipic>;
118 mode = "cpu";
119 };
120
121 /* phy type (ULPI or SERIAL) are only types supported for MPH */
122 /* port = 0 or 1 */
123 usb@22000 {
124 compatible = "fsl-usb2-mph";
125 reg = <0x22000 0x1000>;
126 #address-cells = <1>;
127 #size-cells = <0>;
128 interrupt-parent = <&ipic>;
129 interrupts = <39 0x8>;
130 phy_type = "ulpi";
131 port1;
132 };
133 /* phy type (ULPI, UTMI, UTMI_WIDE, SERIAL) */
134 usb@23000 {
135 compatible = "fsl-usb2-dr";
136 reg = <0x23000 0x1000>;
137 #address-cells = <1>;
138 #size-cells = <0>;
139 interrupt-parent = <&ipic>;
140 interrupts = <38 0x8>;
141 dr_mode = "otg";
142 phy_type = "ulpi";
143 };
144
145 mdio@24520 {
146 #address-cells = <1>;
147 #size-cells = <0>;
148 compatible = "fsl,gianfar-mdio";
149 reg = <0x24520 0x20>;
150
151 phy0: ethernet-phy@0 {
152 interrupt-parent = <&ipic>;
153 interrupts = <17 0x8>;
154 reg = <0x1>;
155 device_type = "ethernet-phy";
156 };
157 phy1: ethernet-phy@1 {
158 interrupt-parent = <&ipic>;
159 interrupts = <18 0x8>;
160 reg = <0x2>;
161 device_type = "ethernet-phy";
162 };
163 };
164
165 enet0: ethernet@24000 {
166 cell-index = <0>;
167 device_type = "network";
168 model = "TSEC";
169 compatible = "gianfar";
170 reg = <0x24000 0x1000>;
171 local-mac-address = [ 00 08 e5 11 32 33 ];
172 interrupts = <32 0x8 33 0x8 34 0x8>;
173 interrupt-parent = <&ipic>;
174 phy-handle = <&phy0>;
175 linux,network-index = <0>;
176 };
177
178 enet1: ethernet@25000 {
179 cell-index = <1>;
180 device_type = "network";
181 model = "TSEC";
182 compatible = "gianfar";
183 reg = <0x25000 0x1000>;
184 local-mac-address = [ 00 08 e5 11 32 34 ];
185 interrupts = <35 0x8 36 0x8 37 0x8>;
186 interrupt-parent = <&ipic>;
187 phy-handle = <&phy1>;
188 linux,network-index = <1>;
189 };
190
191 serial0: serial@4500 {
192 cell-index = <0>;
193 device_type = "serial";
194 compatible = "ns16550";
195 reg = <0x4500 0x100>;
196 clock-frequency = <400000000>;
197 interrupts = <9 0x8>;
198 interrupt-parent = <&ipic>;
199 };
200
201 serial1: serial@4600 {
202 cell-index = <1>;
203 device_type = "serial";
204 compatible = "ns16550";
205 reg = <0x4600 0x100>;
206 clock-frequency = <400000000>;
207 interrupts = <10 0x8>;
208 interrupt-parent = <&ipic>;
209 };
210
211 /* May need to remove if on a part without crypto engine */
212 crypto@30000 {
213 device_type = "crypto";
214 model = "SEC2";
215 compatible = "talitos";
216 reg = <0x30000 0x10000>;
217 interrupts = <11 0x8>;
218 interrupt-parent = <&ipic>;
219 num-channels = <4>;
220 channel-fifo-len = <24>;
221 exec-units-mask = <0x0000007e>;
222 /* desc mask is for rev2.0,
223 * we need runtime fixup for >2.0 */
224 descriptor-types-mask = <0x01010ebf>;
225 };
226
227 /* IPIC
228 * interrupts cell = <intr #, sense>
229 * sense values match linux IORESOURCE_IRQ_* defines:
230 * sense == 8: Level, low assertion
231 * sense == 2: Edge, high-to-low change
232 */
233 ipic: pic@700 {
234 interrupt-controller;
235 #address-cells = <0>;
236 #interrupt-cells = <2>;
237 reg = <0x700 0x100>;
238 device_type = "ipic";
239 };
240 };
241
242 chosen {
243 bootargs = "console=ttyS0,38400 root=/dev/mtdblock3 rootfstype=jffs2";
244 linux,stdout-path = &serial0;
245 };
246
247};
diff --git a/arch/powerpc/boot/dts/bamboo.dts b/arch/powerpc/boot/dts/bamboo.dts
index ba2521bdaab1..6ce0cc2c0208 100644
--- a/arch/powerpc/boot/dts/bamboo.dts
+++ b/arch/powerpc/boot/dts/bamboo.dts
@@ -11,12 +11,14 @@
11 * any warranty of any kind, whether express or implied. 11 * any warranty of any kind, whether express or implied.
12 */ 12 */
13 13
14/dts-v1/;
15
14/ { 16/ {
15 #address-cells = <2>; 17 #address-cells = <2>;
16 #size-cells = <1>; 18 #size-cells = <1>;
17 model = "amcc,bamboo"; 19 model = "amcc,bamboo";
18 compatible = "amcc,bamboo"; 20 compatible = "amcc,bamboo";
19 dcr-parent = <&/cpus/cpu@0>; 21 dcr-parent = <&{/cpus/cpu@0}>;
20 22
21 aliases { 23 aliases {
22 ethernet0 = &EMAC0; 24 ethernet0 = &EMAC0;
@@ -34,13 +36,13 @@
34 cpu@0 { 36 cpu@0 {
35 device_type = "cpu"; 37 device_type = "cpu";
36 model = "PowerPC,440EP"; 38 model = "PowerPC,440EP";
37 reg = <0>; 39 reg = <0x00000000>;
38 clock-frequency = <0>; /* Filled in by zImage */ 40 clock-frequency = <0>; /* Filled in by zImage */
39 timebase-frequency = <0>; /* Filled in by zImage */ 41 timebase-frequency = <0>; /* Filled in by zImage */
40 i-cache-line-size = <20>; 42 i-cache-line-size = <32>;
41 d-cache-line-size = <20>; 43 d-cache-line-size = <32>;
42 i-cache-size = <8000>; 44 i-cache-size = <32768>;
43 d-cache-size = <8000>; 45 d-cache-size = <32768>;
44 dcr-controller; 46 dcr-controller;
45 dcr-access-method = "native"; 47 dcr-access-method = "native";
46 }; 48 };
@@ -48,14 +50,14 @@
48 50
49 memory { 51 memory {
50 device_type = "memory"; 52 device_type = "memory";
51 reg = <0 0 0>; /* Filled in by zImage */ 53 reg = <0x00000000 0x00000000 0x00000000>; /* Filled in by zImage */
52 }; 54 };
53 55
54 UIC0: interrupt-controller0 { 56 UIC0: interrupt-controller0 {
55 compatible = "ibm,uic-440ep","ibm,uic"; 57 compatible = "ibm,uic-440ep","ibm,uic";
56 interrupt-controller; 58 interrupt-controller;
57 cell-index = <0>; 59 cell-index = <0>;
58 dcr-reg = <0c0 009>; 60 dcr-reg = <0x0c0 0x009>;
59 #address-cells = <0>; 61 #address-cells = <0>;
60 #size-cells = <0>; 62 #size-cells = <0>;
61 #interrupt-cells = <2>; 63 #interrupt-cells = <2>;
@@ -65,22 +67,22 @@
65 compatible = "ibm,uic-440ep","ibm,uic"; 67 compatible = "ibm,uic-440ep","ibm,uic";
66 interrupt-controller; 68 interrupt-controller;
67 cell-index = <1>; 69 cell-index = <1>;
68 dcr-reg = <0d0 009>; 70 dcr-reg = <0x0d0 0x009>;
69 #address-cells = <0>; 71 #address-cells = <0>;
70 #size-cells = <0>; 72 #size-cells = <0>;
71 #interrupt-cells = <2>; 73 #interrupt-cells = <2>;
72 interrupts = <1e 4 1f 4>; /* cascade */ 74 interrupts = <0x1e 0x4 0x1f 0x4>; /* cascade */
73 interrupt-parent = <&UIC0>; 75 interrupt-parent = <&UIC0>;
74 }; 76 };
75 77
76 SDR0: sdr { 78 SDR0: sdr {
77 compatible = "ibm,sdr-440ep"; 79 compatible = "ibm,sdr-440ep";
78 dcr-reg = <00e 002>; 80 dcr-reg = <0x00e 0x002>;
79 }; 81 };
80 82
81 CPR0: cpr { 83 CPR0: cpr {
82 compatible = "ibm,cpr-440ep"; 84 compatible = "ibm,cpr-440ep";
83 dcr-reg = <00c 002>; 85 dcr-reg = <0x00c 0x002>;
84 }; 86 };
85 87
86 plb { 88 plb {
@@ -92,29 +94,29 @@
92 94
93 SDRAM0: sdram { 95 SDRAM0: sdram {
94 compatible = "ibm,sdram-440ep", "ibm,sdram-405gp"; 96 compatible = "ibm,sdram-440ep", "ibm,sdram-405gp";
95 dcr-reg = <010 2>; 97 dcr-reg = <0x010 0x002>;
96 }; 98 };
97 99
98 DMA0: dma { 100 DMA0: dma {
99 compatible = "ibm,dma-440ep", "ibm,dma-440gp"; 101 compatible = "ibm,dma-440ep", "ibm,dma-440gp";
100 dcr-reg = <100 027>; 102 dcr-reg = <0x100 0x027>;
101 }; 103 };
102 104
103 MAL0: mcmal { 105 MAL0: mcmal {
104 compatible = "ibm,mcmal-440ep", "ibm,mcmal-440gp", "ibm,mcmal"; 106 compatible = "ibm,mcmal-440ep", "ibm,mcmal-440gp", "ibm,mcmal";
105 dcr-reg = <180 62>; 107 dcr-reg = <0x180 0x062>;
106 num-tx-chans = <4>; 108 num-tx-chans = <4>;
107 num-rx-chans = <2>; 109 num-rx-chans = <2>;
108 interrupt-parent = <&MAL0>; 110 interrupt-parent = <&MAL0>;
109 interrupts = <0 1 2 3 4>; 111 interrupts = <0x0 0x1 0x2 0x3 0x4>;
110 #interrupt-cells = <1>; 112 #interrupt-cells = <1>;
111 #address-cells = <0>; 113 #address-cells = <0>;
112 #size-cells = <0>; 114 #size-cells = <0>;
113 interrupt-map = </*TXEOB*/ 0 &UIC0 a 4 115 interrupt-map = </*TXEOB*/ 0x0 &UIC0 0xa 0x4
114 /*RXEOB*/ 1 &UIC0 b 4 116 /*RXEOB*/ 0x1 &UIC0 0xb 0x4
115 /*SERR*/ 2 &UIC1 0 4 117 /*SERR*/ 0x2 &UIC1 0x0 0x4
116 /*TXDE*/ 3 &UIC1 1 4 118 /*TXDE*/ 0x3 &UIC1 0x1 0x4
117 /*RXDE*/ 4 &UIC1 2 4>; 119 /*RXDE*/ 0x4 &UIC1 0x2 0x4>;
118 }; 120 };
119 121
120 POB0: opb { 122 POB0: opb {
@@ -124,101 +126,101 @@
124 /* Bamboo is oddball in the 44x world and doesn't use the ERPN 126 /* Bamboo is oddball in the 44x world and doesn't use the ERPN
125 * bits. 127 * bits.
126 */ 128 */
127 ranges = <00000000 0 00000000 80000000 129 ranges = <0x00000000 0x00000000 0x00000000 0x80000000
128 80000000 0 80000000 80000000>; 130 0x80000000 0x00000000 0x80000000 0x80000000>;
129 interrupt-parent = <&UIC1>; 131 interrupt-parent = <&UIC1>;
130 interrupts = <7 4>; 132 interrupts = <0x7 0x4>;
131 clock-frequency = <0>; /* Filled in by zImage */ 133 clock-frequency = <0>; /* Filled in by zImage */
132 134
133 EBC0: ebc { 135 EBC0: ebc {
134 compatible = "ibm,ebc-440ep", "ibm,ebc-440gp", "ibm,ebc"; 136 compatible = "ibm,ebc-440ep", "ibm,ebc-440gp", "ibm,ebc";
135 dcr-reg = <012 2>; 137 dcr-reg = <0x012 0x002>;
136 #address-cells = <2>; 138 #address-cells = <2>;
137 #size-cells = <1>; 139 #size-cells = <1>;
138 clock-frequency = <0>; /* Filled in by zImage */ 140 clock-frequency = <0>; /* Filled in by zImage */
139 interrupts = <5 1>; 141 interrupts = <0x5 0x1>;
140 interrupt-parent = <&UIC1>; 142 interrupt-parent = <&UIC1>;
141 }; 143 };
142 144
143 UART0: serial@ef600300 { 145 UART0: serial@ef600300 {
144 device_type = "serial"; 146 device_type = "serial";
145 compatible = "ns16550"; 147 compatible = "ns16550";
146 reg = <ef600300 8>; 148 reg = <0xef600300 0x00000008>;
147 virtual-reg = <ef600300>; 149 virtual-reg = <0xef600300>;
148 clock-frequency = <0>; /* Filled in by zImage */ 150 clock-frequency = <0>; /* Filled in by zImage */
149 current-speed = <1c200>; 151 current-speed = <115200>;
150 interrupt-parent = <&UIC0>; 152 interrupt-parent = <&UIC0>;
151 interrupts = <0 4>; 153 interrupts = <0x0 0x4>;
152 }; 154 };
153 155
154 UART1: serial@ef600400 { 156 UART1: serial@ef600400 {
155 device_type = "serial"; 157 device_type = "serial";
156 compatible = "ns16550"; 158 compatible = "ns16550";
157 reg = <ef600400 8>; 159 reg = <0xef600400 0x00000008>;
158 virtual-reg = <ef600400>; 160 virtual-reg = <0xef600400>;
159 clock-frequency = <0>; 161 clock-frequency = <0>;
160 current-speed = <0>; 162 current-speed = <0>;
161 interrupt-parent = <&UIC0>; 163 interrupt-parent = <&UIC0>;
162 interrupts = <1 4>; 164 interrupts = <0x1 0x4>;
163 }; 165 };
164 166
165 UART2: serial@ef600500 { 167 UART2: serial@ef600500 {
166 device_type = "serial"; 168 device_type = "serial";
167 compatible = "ns16550"; 169 compatible = "ns16550";
168 reg = <ef600500 8>; 170 reg = <0xef600500 0x00000008>;
169 virtual-reg = <ef600500>; 171 virtual-reg = <0xef600500>;
170 clock-frequency = <0>; 172 clock-frequency = <0>;
171 current-speed = <0>; 173 current-speed = <0>;
172 interrupt-parent = <&UIC0>; 174 interrupt-parent = <&UIC0>;
173 interrupts = <3 4>; 175 interrupts = <0x3 0x4>;
174 }; 176 };
175 177
176 UART3: serial@ef600600 { 178 UART3: serial@ef600600 {
177 device_type = "serial"; 179 device_type = "serial";
178 compatible = "ns16550"; 180 compatible = "ns16550";
179 reg = <ef600600 8>; 181 reg = <0xef600600 0x00000008>;
180 virtual-reg = <ef600600>; 182 virtual-reg = <0xef600600>;
181 clock-frequency = <0>; 183 clock-frequency = <0>;
182 current-speed = <0>; 184 current-speed = <0>;
183 interrupt-parent = <&UIC0>; 185 interrupt-parent = <&UIC0>;
184 interrupts = <4 4>; 186 interrupts = <0x4 0x4>;
185 }; 187 };
186 188
187 IIC0: i2c@ef600700 { 189 IIC0: i2c@ef600700 {
188 compatible = "ibm,iic-440ep", "ibm,iic-440gp", "ibm,iic"; 190 compatible = "ibm,iic-440ep", "ibm,iic-440gp", "ibm,iic";
189 reg = <ef600700 14>; 191 reg = <0xef600700 0x00000014>;
190 interrupt-parent = <&UIC0>; 192 interrupt-parent = <&UIC0>;
191 interrupts = <2 4>; 193 interrupts = <0x2 0x4>;
192 }; 194 };
193 195
194 IIC1: i2c@ef600800 { 196 IIC1: i2c@ef600800 {
195 compatible = "ibm,iic-440ep", "ibm,iic-440gp", "ibm,iic"; 197 compatible = "ibm,iic-440ep", "ibm,iic-440gp", "ibm,iic";
196 reg = <ef600800 14>; 198 reg = <0xef600800 0x00000014>;
197 interrupt-parent = <&UIC0>; 199 interrupt-parent = <&UIC0>;
198 interrupts = <7 4>; 200 interrupts = <0x7 0x4>;
199 }; 201 };
200 202
201 ZMII0: emac-zmii@ef600d00 { 203 ZMII0: emac-zmii@ef600d00 {
202 compatible = "ibm,zmii-440ep", "ibm,zmii-440gp", "ibm,zmii"; 204 compatible = "ibm,zmii-440ep", "ibm,zmii-440gp", "ibm,zmii";
203 reg = <ef600d00 c>; 205 reg = <0xef600d00 0x0000000c>;
204 }; 206 };
205 207
206 EMAC0: ethernet@ef600e00 { 208 EMAC0: ethernet@ef600e00 {
207 device_type = "network"; 209 device_type = "network";
208 compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac"; 210 compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac";
209 interrupt-parent = <&UIC1>; 211 interrupt-parent = <&UIC1>;
210 interrupts = <1c 4 1d 4>; 212 interrupts = <0x1c 0x4 0x1d 0x4>;
211 reg = <ef600e00 70>; 213 reg = <0xef600e00 0x00000070>;
212 local-mac-address = [000000000000]; 214 local-mac-address = [000000000000];
213 mal-device = <&MAL0>; 215 mal-device = <&MAL0>;
214 mal-tx-channel = <0 1>; 216 mal-tx-channel = <0 1>;
215 mal-rx-channel = <0>; 217 mal-rx-channel = <0>;
216 cell-index = <0>; 218 cell-index = <0>;
217 max-frame-size = <5dc>; 219 max-frame-size = <1500>;
218 rx-fifo-size = <1000>; 220 rx-fifo-size = <4096>;
219 tx-fifo-size = <800>; 221 tx-fifo-size = <2048>;
220 phy-mode = "rmii"; 222 phy-mode = "rmii";
221 phy-map = <00000000>; 223 phy-map = <0x00000000>;
222 zmii-device = <&ZMII0>; 224 zmii-device = <&ZMII0>;
223 zmii-channel = <0>; 225 zmii-channel = <0>;
224 }; 226 };
@@ -227,26 +229,26 @@
227 device_type = "network"; 229 device_type = "network";
228 compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac"; 230 compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac";
229 interrupt-parent = <&UIC1>; 231 interrupt-parent = <&UIC1>;
230 interrupts = <1e 4 1f 4>; 232 interrupts = <0x1e 0x4 0x1f 0x4>;
231 reg = <ef600f00 70>; 233 reg = <0xef600f00 0x00000070>;
232 local-mac-address = [000000000000]; 234 local-mac-address = [000000000000];
233 mal-device = <&MAL0>; 235 mal-device = <&MAL0>;
234 mal-tx-channel = <2 3>; 236 mal-tx-channel = <2 3>;
235 mal-rx-channel = <1>; 237 mal-rx-channel = <1>;
236 cell-index = <1>; 238 cell-index = <1>;
237 max-frame-size = <5dc>; 239 max-frame-size = <1500>;
238 rx-fifo-size = <1000>; 240 rx-fifo-size = <4096>;
239 tx-fifo-size = <800>; 241 tx-fifo-size = <2048>;
240 phy-mode = "rmii"; 242 phy-mode = "rmii";
241 phy-map = <00000000>; 243 phy-map = <0x00000000>;
242 zmii-device = <&ZMII0>; 244 zmii-device = <&ZMII0>;
243 zmii-channel = <1>; 245 zmii-channel = <1>;
244 }; 246 };
245 247
246 usb@ef601000 { 248 usb@ef601000 {
247 compatible = "ohci-be"; 249 compatible = "ohci-be";
248 reg = <ef601000 80>; 250 reg = <0xef601000 0x00000080>;
249 interrupts = <8 1 9 1>; 251 interrupts = <0x8 0x1 0x9 0x1>;
250 interrupt-parent = < &UIC1 >; 252 interrupt-parent = < &UIC1 >;
251 }; 253 };
252 }; 254 };
@@ -258,35 +260,35 @@
258 #address-cells = <3>; 260 #address-cells = <3>;
259 compatible = "ibm,plb440ep-pci", "ibm,plb-pci"; 261 compatible = "ibm,plb440ep-pci", "ibm,plb-pci";
260 primary; 262 primary;
261 reg = <0 eec00000 8 /* Config space access */ 263 reg = <0x00000000 0xeec00000 0x00000008 /* Config space access */
262 0 eed00000 4 /* IACK */ 264 0x00000000 0xeed00000 0x00000004 /* IACK */
263 0 eed00000 4 /* Special cycle */ 265 0x00000000 0xeed00000 0x00000004 /* Special cycle */
264 0 ef400000 40>; /* Internal registers */ 266 0x00000000 0xef400000 0x00000040>; /* Internal registers */
265 267
266 /* Outbound ranges, one memory and one IO, 268 /* Outbound ranges, one memory and one IO,
267 * later cannot be changed. Chip supports a second 269 * later cannot be changed. Chip supports a second
268 * IO range but we don't use it for now 270 * IO range but we don't use it for now
269 */ 271 */
270 ranges = <02000000 0 a0000000 0 a0000000 0 20000000 272 ranges = <0x02000000 0x00000000 0xa0000000 0x00000000 0xa0000000 0x00000000 0x20000000
271 01000000 0 00000000 0 e8000000 0 00010000>; 273 0x01000000 0x00000000 0x00000000 0x00000000 0xe8000000 0x00000000 0x00010000>;
272 274
273 /* Inbound 2GB range starting at 0 */ 275 /* Inbound 2GB range starting at 0 */
274 dma-ranges = <42000000 0 0 0 0 0 80000000>; 276 dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x0 0x80000000>;
275 277
276 /* Bamboo has all 4 IRQ pins tied together per slot */ 278 /* Bamboo has all 4 IRQ pins tied together per slot */
277 interrupt-map-mask = <f800 0 0 0>; 279 interrupt-map-mask = <0xf800 0x0 0x0 0x0>;
278 interrupt-map = < 280 interrupt-map = <
279 /* IDSEL 1 */ 281 /* IDSEL 1 */
280 0800 0 0 0 &UIC0 1c 8 282 0x800 0x0 0x0 0x0 &UIC0 0x1c 0x8
281 283
282 /* IDSEL 2 */ 284 /* IDSEL 2 */
283 1000 0 0 0 &UIC0 1b 8 285 0x1000 0x0 0x0 0x0 &UIC0 0x1b 0x8
284 286
285 /* IDSEL 3 */ 287 /* IDSEL 3 */
286 1800 0 0 0 &UIC0 1a 8 288 0x1800 0x0 0x0 0x0 &UIC0 0x1a 0x8
287 289
288 /* IDSEL 4 */ 290 /* IDSEL 4 */
289 2000 0 0 0 &UIC0 19 8 291 0x2000 0x0 0x0 0x0 &UIC0 0x19 0x8
290 >; 292 >;
291 }; 293 };
292 }; 294 };
diff --git a/arch/powerpc/boot/dts/canyonlands.dts b/arch/powerpc/boot/dts/canyonlands.dts
index 39634124929b..f9fe03252150 100644
--- a/arch/powerpc/boot/dts/canyonlands.dts
+++ b/arch/powerpc/boot/dts/canyonlands.dts
@@ -8,12 +8,14 @@
8 * any warranty of any kind, whether express or implied. 8 * any warranty of any kind, whether express or implied.
9 */ 9 */
10 10
11/dts-v1/;
12
11/ { 13/ {
12 #address-cells = <2>; 14 #address-cells = <2>;
13 #size-cells = <1>; 15 #size-cells = <1>;
14 model = "amcc,canyonlands"; 16 model = "amcc,canyonlands";
15 compatible = "amcc,canyonlands"; 17 compatible = "amcc,canyonlands";
16 dcr-parent = <&/cpus/cpu@0>; 18 dcr-parent = <&{/cpus/cpu@0}>;
17 19
18 aliases { 20 aliases {
19 ethernet0 = &EMAC0; 21 ethernet0 = &EMAC0;
@@ -29,13 +31,13 @@
29 cpu@0 { 31 cpu@0 {
30 device_type = "cpu"; 32 device_type = "cpu";
31 model = "PowerPC,460EX"; 33 model = "PowerPC,460EX";
32 reg = <0>; 34 reg = <0x00000000>;
33 clock-frequency = <0>; /* Filled in by U-Boot */ 35 clock-frequency = <0>; /* Filled in by U-Boot */
34 timebase-frequency = <0>; /* Filled in by U-Boot */ 36 timebase-frequency = <0>; /* Filled in by U-Boot */
35 i-cache-line-size = <20>; 37 i-cache-line-size = <32>;
36 d-cache-line-size = <20>; 38 d-cache-line-size = <32>;
37 i-cache-size = <8000>; 39 i-cache-size = <32768>;
38 d-cache-size = <8000>; 40 d-cache-size = <32768>;
39 dcr-controller; 41 dcr-controller;
40 dcr-access-method = "native"; 42 dcr-access-method = "native";
41 }; 43 };
@@ -43,14 +45,14 @@
43 45
44 memory { 46 memory {
45 device_type = "memory"; 47 device_type = "memory";
46 reg = <0 0 0>; /* Filled in by U-Boot */ 48 reg = <0x00000000 0x00000000 0x00000000>; /* Filled in by U-Boot */
47 }; 49 };
48 50
49 UIC0: interrupt-controller0 { 51 UIC0: interrupt-controller0 {
50 compatible = "ibm,uic-460ex","ibm,uic"; 52 compatible = "ibm,uic-460ex","ibm,uic";
51 interrupt-controller; 53 interrupt-controller;
52 cell-index = <0>; 54 cell-index = <0>;
53 dcr-reg = <0c0 009>; 55 dcr-reg = <0x0c0 0x009>;
54 #address-cells = <0>; 56 #address-cells = <0>;
55 #size-cells = <0>; 57 #size-cells = <0>;
56 #interrupt-cells = <2>; 58 #interrupt-cells = <2>;
@@ -60,11 +62,11 @@
60 compatible = "ibm,uic-460ex","ibm,uic"; 62 compatible = "ibm,uic-460ex","ibm,uic";
61 interrupt-controller; 63 interrupt-controller;
62 cell-index = <1>; 64 cell-index = <1>;
63 dcr-reg = <0d0 009>; 65 dcr-reg = <0x0d0 0x009>;
64 #address-cells = <0>; 66 #address-cells = <0>;
65 #size-cells = <0>; 67 #size-cells = <0>;
66 #interrupt-cells = <2>; 68 #interrupt-cells = <2>;
67 interrupts = <1e 4 1f 4>; /* cascade */ 69 interrupts = <0x1e 0x4 0x1f 0x4>; /* cascade */
68 interrupt-parent = <&UIC0>; 70 interrupt-parent = <&UIC0>;
69 }; 71 };
70 72
@@ -72,11 +74,11 @@
72 compatible = "ibm,uic-460ex","ibm,uic"; 74 compatible = "ibm,uic-460ex","ibm,uic";
73 interrupt-controller; 75 interrupt-controller;
74 cell-index = <2>; 76 cell-index = <2>;
75 dcr-reg = <0e0 009>; 77 dcr-reg = <0x0e0 0x009>;
76 #address-cells = <0>; 78 #address-cells = <0>;
77 #size-cells = <0>; 79 #size-cells = <0>;
78 #interrupt-cells = <2>; 80 #interrupt-cells = <2>;
79 interrupts = <a 4 b 4>; /* cascade */ 81 interrupts = <0xa 0x4 0xb 0x4>; /* cascade */
80 interrupt-parent = <&UIC0>; 82 interrupt-parent = <&UIC0>;
81 }; 83 };
82 84
@@ -84,22 +86,22 @@
84 compatible = "ibm,uic-460ex","ibm,uic"; 86 compatible = "ibm,uic-460ex","ibm,uic";
85 interrupt-controller; 87 interrupt-controller;
86 cell-index = <3>; 88 cell-index = <3>;
87 dcr-reg = <0f0 009>; 89 dcr-reg = <0x0f0 0x009>;
88 #address-cells = <0>; 90 #address-cells = <0>;
89 #size-cells = <0>; 91 #size-cells = <0>;
90 #interrupt-cells = <2>; 92 #interrupt-cells = <2>;
91 interrupts = <10 4 11 4>; /* cascade */ 93 interrupts = <0x10 0x4 0x11 0x4>; /* cascade */
92 interrupt-parent = <&UIC0>; 94 interrupt-parent = <&UIC0>;
93 }; 95 };
94 96
95 SDR0: sdr { 97 SDR0: sdr {
96 compatible = "ibm,sdr-460ex"; 98 compatible = "ibm,sdr-460ex";
97 dcr-reg = <00e 002>; 99 dcr-reg = <0x00e 0x002>;
98 }; 100 };
99 101
100 CPR0: cpr { 102 CPR0: cpr {
101 compatible = "ibm,cpr-460ex"; 103 compatible = "ibm,cpr-460ex";
102 dcr-reg = <00c 002>; 104 dcr-reg = <0x00c 0x002>;
103 }; 105 };
104 106
105 plb { 107 plb {
@@ -111,74 +113,74 @@
111 113
112 SDRAM0: sdram { 114 SDRAM0: sdram {
113 compatible = "ibm,sdram-460ex", "ibm,sdram-405gp"; 115 compatible = "ibm,sdram-460ex", "ibm,sdram-405gp";
114 dcr-reg = <010 2>; 116 dcr-reg = <0x010 0x002>;
115 }; 117 };
116 118
117 MAL0: mcmal { 119 MAL0: mcmal {
118 compatible = "ibm,mcmal-460ex", "ibm,mcmal2"; 120 compatible = "ibm,mcmal-460ex", "ibm,mcmal2";
119 dcr-reg = <180 62>; 121 dcr-reg = <0x180 0x062>;
120 num-tx-chans = <2>; 122 num-tx-chans = <2>;
121 num-rx-chans = <10>; 123 num-rx-chans = <16>;
122 #address-cells = <0>; 124 #address-cells = <0>;
123 #size-cells = <0>; 125 #size-cells = <0>;
124 interrupt-parent = <&UIC2>; 126 interrupt-parent = <&UIC2>;
125 interrupts = < /*TXEOB*/ 6 4 127 interrupts = < /*TXEOB*/ 0x6 0x4
126 /*RXEOB*/ 7 4 128 /*RXEOB*/ 0x7 0x4
127 /*SERR*/ 3 4 129 /*SERR*/ 0x3 0x4
128 /*TXDE*/ 4 4 130 /*TXDE*/ 0x4 0x4
129 /*RXDE*/ 5 4>; 131 /*RXDE*/ 0x5 0x4>;
130 }; 132 };
131 133
132 POB0: opb { 134 POB0: opb {
133 compatible = "ibm,opb-460ex", "ibm,opb"; 135 compatible = "ibm,opb-460ex", "ibm,opb";
134 #address-cells = <1>; 136 #address-cells = <1>;
135 #size-cells = <1>; 137 #size-cells = <1>;
136 ranges = <b0000000 4 b0000000 50000000>; 138 ranges = <0xb0000000 0x00000004 0xb0000000 0x50000000>;
137 clock-frequency = <0>; /* Filled in by U-Boot */ 139 clock-frequency = <0>; /* Filled in by U-Boot */
138 140
139 EBC0: ebc { 141 EBC0: ebc {
140 compatible = "ibm,ebc-460ex", "ibm,ebc"; 142 compatible = "ibm,ebc-460ex", "ibm,ebc";
141 dcr-reg = <012 2>; 143 dcr-reg = <0x012 0x002>;
142 #address-cells = <2>; 144 #address-cells = <2>;
143 #size-cells = <1>; 145 #size-cells = <1>;
144 clock-frequency = <0>; /* Filled in by U-Boot */ 146 clock-frequency = <0>; /* Filled in by U-Boot */
145 /* ranges property is supplied by U-Boot */ 147 /* ranges property is supplied by U-Boot */
146 interrupts = <6 4>; 148 interrupts = <0x6 0x4>;
147 interrupt-parent = <&UIC1>; 149 interrupt-parent = <&UIC1>;
148 150
149 nor_flash@0,0 { 151 nor_flash@0,0 {
150 compatible = "amd,s29gl512n", "cfi-flash"; 152 compatible = "amd,s29gl512n", "cfi-flash";
151 bank-width = <2>; 153 bank-width = <2>;
152 reg = <0 000000 4000000>; 154 reg = <0x00000000 0x00000000 0x04000000>;
153 #address-cells = <1>; 155 #address-cells = <1>;
154 #size-cells = <1>; 156 #size-cells = <1>;
155 partition@0 { 157 partition@0 {
156 label = "kernel"; 158 label = "kernel";
157 reg = <0 1e0000>; 159 reg = <0x00000000 0x001e0000>;
158 }; 160 };
159 partition@1e0000 { 161 partition@1e0000 {
160 label = "dtb"; 162 label = "dtb";
161 reg = <1e0000 20000>; 163 reg = <0x001e0000 0x00020000>;
162 }; 164 };
163 partition@200000 { 165 partition@200000 {
164 label = "ramdisk"; 166 label = "ramdisk";
165 reg = <200000 1400000>; 167 reg = <0x00200000 0x01400000>;
166 }; 168 };
167 partition@1600000 { 169 partition@1600000 {
168 label = "jffs2"; 170 label = "jffs2";
169 reg = <1600000 400000>; 171 reg = <0x01600000 0x00400000>;
170 }; 172 };
171 partition@1a00000 { 173 partition@1a00000 {
172 label = "user"; 174 label = "user";
173 reg = <1a00000 2560000>; 175 reg = <0x01a00000 0x02560000>;
174 }; 176 };
175 partition@3f60000 { 177 partition@3f60000 {
176 label = "env"; 178 label = "env";
177 reg = <3f60000 40000>; 179 reg = <0x03f60000 0x00040000>;
178 }; 180 };
179 partition@3fa0000 { 181 partition@3fa0000 {
180 label = "u-boot"; 182 label = "u-boot";
181 reg = <3fa0000 60000>; 183 reg = <0x03fa0000 0x00060000>;
182 }; 184 };
183 }; 185 };
184 }; 186 };
@@ -186,103 +188,103 @@
186 UART0: serial@ef600300 { 188 UART0: serial@ef600300 {
187 device_type = "serial"; 189 device_type = "serial";
188 compatible = "ns16550"; 190 compatible = "ns16550";
189 reg = <ef600300 8>; 191 reg = <0xef600300 0x00000008>;
190 virtual-reg = <ef600300>; 192 virtual-reg = <0xef600300>;
191 clock-frequency = <0>; /* Filled in by U-Boot */ 193 clock-frequency = <0>; /* Filled in by U-Boot */
192 current-speed = <0>; /* Filled in by U-Boot */ 194 current-speed = <0>; /* Filled in by U-Boot */
193 interrupt-parent = <&UIC1>; 195 interrupt-parent = <&UIC1>;
194 interrupts = <1 4>; 196 interrupts = <0x1 0x4>;
195 }; 197 };
196 198
197 UART1: serial@ef600400 { 199 UART1: serial@ef600400 {
198 device_type = "serial"; 200 device_type = "serial";
199 compatible = "ns16550"; 201 compatible = "ns16550";
200 reg = <ef600400 8>; 202 reg = <0xef600400 0x00000008>;
201 virtual-reg = <ef600400>; 203 virtual-reg = <0xef600400>;
202 clock-frequency = <0>; /* Filled in by U-Boot */ 204 clock-frequency = <0>; /* Filled in by U-Boot */
203 current-speed = <0>; /* Filled in by U-Boot */ 205 current-speed = <0>; /* Filled in by U-Boot */
204 interrupt-parent = <&UIC0>; 206 interrupt-parent = <&UIC0>;
205 interrupts = <1 4>; 207 interrupts = <0x1 0x4>;
206 }; 208 };
207 209
208 UART2: serial@ef600500 { 210 UART2: serial@ef600500 {
209 device_type = "serial"; 211 device_type = "serial";
210 compatible = "ns16550"; 212 compatible = "ns16550";
211 reg = <ef600500 8>; 213 reg = <0xef600500 0x00000008>;
212 virtual-reg = <ef600500>; 214 virtual-reg = <0xef600500>;
213 clock-frequency = <0>; /* Filled in by U-Boot */ 215 clock-frequency = <0>; /* Filled in by U-Boot */
214 current-speed = <0>; /* Filled in by U-Boot */ 216 current-speed = <0>; /* Filled in by U-Boot */
215 interrupt-parent = <&UIC1>; 217 interrupt-parent = <&UIC1>;
216 interrupts = <1d 4>; 218 interrupts = <0x1d 0x4>;
217 }; 219 };
218 220
219 UART3: serial@ef600600 { 221 UART3: serial@ef600600 {
220 device_type = "serial"; 222 device_type = "serial";
221 compatible = "ns16550"; 223 compatible = "ns16550";
222 reg = <ef600600 8>; 224 reg = <0xef600600 0x00000008>;
223 virtual-reg = <ef600600>; 225 virtual-reg = <0xef600600>;
224 clock-frequency = <0>; /* Filled in by U-Boot */ 226 clock-frequency = <0>; /* Filled in by U-Boot */
225 current-speed = <0>; /* Filled in by U-Boot */ 227 current-speed = <0>; /* Filled in by U-Boot */
226 interrupt-parent = <&UIC1>; 228 interrupt-parent = <&UIC1>;
227 interrupts = <1e 4>; 229 interrupts = <0x1e 0x4>;
228 }; 230 };
229 231
230 IIC0: i2c@ef600700 { 232 IIC0: i2c@ef600700 {
231 compatible = "ibm,iic-460ex", "ibm,iic"; 233 compatible = "ibm,iic-460ex", "ibm,iic";
232 reg = <ef600700 14>; 234 reg = <0xef600700 0x00000014>;
233 interrupt-parent = <&UIC0>; 235 interrupt-parent = <&UIC0>;
234 interrupts = <2 4>; 236 interrupts = <0x2 0x4>;
235 }; 237 };
236 238
237 IIC1: i2c@ef600800 { 239 IIC1: i2c@ef600800 {
238 compatible = "ibm,iic-460ex", "ibm,iic"; 240 compatible = "ibm,iic-460ex", "ibm,iic";
239 reg = <ef600800 14>; 241 reg = <0xef600800 0x00000014>;
240 interrupt-parent = <&UIC0>; 242 interrupt-parent = <&UIC0>;
241 interrupts = <3 4>; 243 interrupts = <0x3 0x4>;
242 }; 244 };
243 245
244 ZMII0: emac-zmii@ef600d00 { 246 ZMII0: emac-zmii@ef600d00 {
245 compatible = "ibm,zmii-460ex", "ibm,zmii"; 247 compatible = "ibm,zmii-460ex", "ibm,zmii";
246 reg = <ef600d00 c>; 248 reg = <0xef600d00 0x0000000c>;
247 }; 249 };
248 250
249 RGMII0: emac-rgmii@ef601500 { 251 RGMII0: emac-rgmii@ef601500 {
250 compatible = "ibm,rgmii-460ex", "ibm,rgmii"; 252 compatible = "ibm,rgmii-460ex", "ibm,rgmii";
251 reg = <ef601500 8>; 253 reg = <0xef601500 0x00000008>;
252 has-mdio; 254 has-mdio;
253 }; 255 };
254 256
255 TAH0: emac-tah@ef601350 { 257 TAH0: emac-tah@ef601350 {
256 compatible = "ibm,tah-460ex", "ibm,tah"; 258 compatible = "ibm,tah-460ex", "ibm,tah";
257 reg = <ef601350 30>; 259 reg = <0xef601350 0x00000030>;
258 }; 260 };
259 261
260 TAH1: emac-tah@ef601450 { 262 TAH1: emac-tah@ef601450 {
261 compatible = "ibm,tah-460ex", "ibm,tah"; 263 compatible = "ibm,tah-460ex", "ibm,tah";
262 reg = <ef601450 30>; 264 reg = <0xef601450 0x00000030>;
263 }; 265 };
264 266
265 EMAC0: ethernet@ef600e00 { 267 EMAC0: ethernet@ef600e00 {
266 device_type = "network"; 268 device_type = "network";
267 compatible = "ibm,emac-460ex", "ibm,emac4"; 269 compatible = "ibm,emac-460ex", "ibm,emac4";
268 interrupt-parent = <&EMAC0>; 270 interrupt-parent = <&EMAC0>;
269 interrupts = <0 1>; 271 interrupts = <0x0 0x1>;
270 #interrupt-cells = <1>; 272 #interrupt-cells = <1>;
271 #address-cells = <0>; 273 #address-cells = <0>;
272 #size-cells = <0>; 274 #size-cells = <0>;
273 interrupt-map = </*Status*/ 0 &UIC2 10 4 275 interrupt-map = </*Status*/ 0x0 &UIC2 0x10 0x4
274 /*Wake*/ 1 &UIC2 14 4>; 276 /*Wake*/ 0x1 &UIC2 0x14 0x4>;
275 reg = <ef600e00 70>; 277 reg = <0xef600e00 0x00000070>;
276 local-mac-address = [000000000000]; /* Filled in by U-Boot */ 278 local-mac-address = [000000000000]; /* Filled in by U-Boot */
277 mal-device = <&MAL0>; 279 mal-device = <&MAL0>;
278 mal-tx-channel = <0>; 280 mal-tx-channel = <0>;
279 mal-rx-channel = <0>; 281 mal-rx-channel = <0>;
280 cell-index = <0>; 282 cell-index = <0>;
281 max-frame-size = <2328>; 283 max-frame-size = <9000>;
282 rx-fifo-size = <1000>; 284 rx-fifo-size = <4096>;
283 tx-fifo-size = <800>; 285 tx-fifo-size = <2048>;
284 phy-mode = "rgmii"; 286 phy-mode = "rgmii";
285 phy-map = <00000000>; 287 phy-map = <0x00000000>;
286 rgmii-device = <&RGMII0>; 288 rgmii-device = <&RGMII0>;
287 rgmii-channel = <0>; 289 rgmii-channel = <0>;
288 tah-device = <&TAH0>; 290 tah-device = <&TAH0>;
@@ -295,23 +297,23 @@
295 device_type = "network"; 297 device_type = "network";
296 compatible = "ibm,emac-460ex", "ibm,emac4"; 298 compatible = "ibm,emac-460ex", "ibm,emac4";
297 interrupt-parent = <&EMAC1>; 299 interrupt-parent = <&EMAC1>;
298 interrupts = <0 1>; 300 interrupts = <0x0 0x1>;
299 #interrupt-cells = <1>; 301 #interrupt-cells = <1>;
300 #address-cells = <0>; 302 #address-cells = <0>;
301 #size-cells = <0>; 303 #size-cells = <0>;
302 interrupt-map = </*Status*/ 0 &UIC2 11 4 304 interrupt-map = </*Status*/ 0x0 &UIC2 0x11 0x4
303 /*Wake*/ 1 &UIC2 15 4>; 305 /*Wake*/ 0x1 &UIC2 0x15 0x4>;
304 reg = <ef600f00 70>; 306 reg = <0xef600f00 0x00000070>;
305 local-mac-address = [000000000000]; /* Filled in by U-Boot */ 307 local-mac-address = [000000000000]; /* Filled in by U-Boot */
306 mal-device = <&MAL0>; 308 mal-device = <&MAL0>;
307 mal-tx-channel = <1>; 309 mal-tx-channel = <1>;
308 mal-rx-channel = <8>; 310 mal-rx-channel = <8>;
309 cell-index = <1>; 311 cell-index = <1>;
310 max-frame-size = <2328>; 312 max-frame-size = <9000>;
311 rx-fifo-size = <1000>; 313 rx-fifo-size = <4096>;
312 tx-fifo-size = <800>; 314 tx-fifo-size = <2048>;
313 phy-mode = "rgmii"; 315 phy-mode = "rgmii";
314 phy-map = <00000000>; 316 phy-map = <0x00000000>;
315 rgmii-device = <&RGMII0>; 317 rgmii-device = <&RGMII0>;
316 rgmii-channel = <1>; 318 rgmii-channel = <1>;
317 tah-device = <&TAH1>; 319 tah-device = <&TAH1>;
@@ -331,27 +333,27 @@
331 primary; 333 primary;
332 large-inbound-windows; 334 large-inbound-windows;
333 enable-msi-hole; 335 enable-msi-hole;
334 reg = <c 0ec00000 8 /* Config space access */ 336 reg = <0x0000000c 0x0ec00000 0x00000008 /* Config space access */
335 0 0 0 /* no IACK cycles */ 337 0x00000000 0x00000000 0x00000000 /* no IACK cycles */
336 c 0ed00000 4 /* Special cycles */ 338 0x0000000c 0x0ed00000 0x00000004 /* Special cycles */
337 c 0ec80000 100 /* Internal registers */ 339 0x0000000c 0x0ec80000 0x00000100 /* Internal registers */
338 c 0ec80100 fc>; /* Internal messaging registers */ 340 0x0000000c 0x0ec80100 0x000000fc>; /* Internal messaging registers */
339 341
340 /* Outbound ranges, one memory and one IO, 342 /* Outbound ranges, one memory and one IO,
341 * later cannot be changed 343 * later cannot be changed
342 */ 344 */
343 ranges = <02000000 0 80000000 0000000d 80000000 0 80000000 345 ranges = <0x02000000 0x00000000 0x80000000 0x0000000d 0x80000000 0x00000000 0x80000000
344 01000000 0 00000000 0000000c 08000000 0 00010000>; 346 0x01000000 0x00000000 0x00000000 0x0000000c 0x08000000 0x00000000 0x00010000>;
345 347
346 /* Inbound 2GB range starting at 0 */ 348 /* Inbound 2GB range starting at 0 */
347 dma-ranges = <42000000 0 0 0 0 0 80000000>; 349 dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x0 0x80000000>;
348 350
349 /* This drives busses 0 to 0x3f */ 351 /* This drives busses 0 to 0x3f */
350 bus-range = <0 3f>; 352 bus-range = <0x0 0x3f>;
351 353
352 /* All PCI interrupts are routed to ext IRQ 2 -> UIC1-0 */ 354 /* All PCI interrupts are routed to ext IRQ 2 -> UIC1-0 */
353 interrupt-map-mask = <0000 0 0 0>; 355 interrupt-map-mask = <0x0 0x0 0x0 0x0>;
354 interrupt-map = < 0000 0 0 0 &UIC1 0 8 >; 356 interrupt-map = < 0x0 0x0 0x0 0x0 &UIC1 0x0 0x8 >;
355 }; 357 };
356 358
357 PCIE0: pciex@d00000000 { 359 PCIE0: pciex@d00000000 {
@@ -361,23 +363,23 @@
361 #address-cells = <3>; 363 #address-cells = <3>;
362 compatible = "ibm,plb-pciex-460ex", "ibm,plb-pciex"; 364 compatible = "ibm,plb-pciex-460ex", "ibm,plb-pciex";
363 primary; 365 primary;
364 port = <0>; /* port number */ 366 port = <0x0>; /* port number */
365 reg = <d 00000000 20000000 /* Config space access */ 367 reg = <0x0000000d 0x00000000 0x20000000 /* Config space access */
366 c 08010000 00001000>; /* Registers */ 368 0x0000000c 0x08010000 0x00001000>; /* Registers */
367 dcr-reg = <100 020>; 369 dcr-reg = <0x100 0x020>;
368 sdr-base = <300>; 370 sdr-base = <0x300>;
369 371
370 /* Outbound ranges, one memory and one IO, 372 /* Outbound ranges, one memory and one IO,
371 * later cannot be changed 373 * later cannot be changed
372 */ 374 */
373 ranges = <02000000 0 80000000 0000000e 00000000 0 80000000 375 ranges = <0x02000000 0x00000000 0x80000000 0x0000000e 0x00000000 0x00000000 0x80000000
374 01000000 0 00000000 0000000f 80000000 0 00010000>; 376 0x01000000 0x00000000 0x00000000 0x0000000f 0x80000000 0x00000000 0x00010000>;
375 377
376 /* Inbound 2GB range starting at 0 */ 378 /* Inbound 2GB range starting at 0 */
377 dma-ranges = <42000000 0 0 0 0 0 80000000>; 379 dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x0 0x80000000>;
378 380
379 /* This drives busses 40 to 0x7f */ 381 /* This drives busses 40 to 0x7f */
380 bus-range = <40 7f>; 382 bus-range = <0x40 0x7f>;
381 383
382 /* Legacy interrupts (note the weird polarity, the bridge seems 384 /* Legacy interrupts (note the weird polarity, the bridge seems
383 * to invert PCIe legacy interrupts). 385 * to invert PCIe legacy interrupts).
@@ -387,12 +389,12 @@
387 * below are basically de-swizzled numbers. 389 * below are basically de-swizzled numbers.
388 * The real slot is on idsel 0, so the swizzling is 1:1 390 * The real slot is on idsel 0, so the swizzling is 1:1
389 */ 391 */
390 interrupt-map-mask = <0000 0 0 7>; 392 interrupt-map-mask = <0x0 0x0 0x0 0x7>;
391 interrupt-map = < 393 interrupt-map = <
392 0000 0 0 1 &UIC3 c 4 /* swizzled int A */ 394 0x0 0x0 0x0 0x1 &UIC3 0xc 0x4 /* swizzled int A */
393 0000 0 0 2 &UIC3 d 4 /* swizzled int B */ 395 0x0 0x0 0x0 0x2 &UIC3 0xd 0x4 /* swizzled int B */
394 0000 0 0 3 &UIC3 e 4 /* swizzled int C */ 396 0x0 0x0 0x0 0x3 &UIC3 0xe 0x4 /* swizzled int C */
395 0000 0 0 4 &UIC3 f 4 /* swizzled int D */>; 397 0x0 0x0 0x0 0x4 &UIC3 0xf 0x4 /* swizzled int D */>;
396 }; 398 };
397 399
398 PCIE1: pciex@d20000000 { 400 PCIE1: pciex@d20000000 {
@@ -402,23 +404,23 @@
402 #address-cells = <3>; 404 #address-cells = <3>;
403 compatible = "ibm,plb-pciex-460ex", "ibm,plb-pciex"; 405 compatible = "ibm,plb-pciex-460ex", "ibm,plb-pciex";
404 primary; 406 primary;
405 port = <1>; /* port number */ 407 port = <0x1>; /* port number */
406 reg = <d 20000000 20000000 /* Config space access */ 408 reg = <0x0000000d 0x20000000 0x20000000 /* Config space access */
407 c 08011000 00001000>; /* Registers */ 409 0x0000000c 0x08011000 0x00001000>; /* Registers */
408 dcr-reg = <120 020>; 410 dcr-reg = <0x120 0x020>;
409 sdr-base = <340>; 411 sdr-base = <0x340>;
410 412
411 /* Outbound ranges, one memory and one IO, 413 /* Outbound ranges, one memory and one IO,
412 * later cannot be changed 414 * later cannot be changed
413 */ 415 */
414 ranges = <02000000 0 80000000 0000000e 80000000 0 80000000 416 ranges = <0x02000000 0x00000000 0x80000000 0x0000000e 0x80000000 0x00000000 0x80000000
415 01000000 0 00000000 0000000f 80010000 0 00010000>; 417 0x01000000 0x00000000 0x00000000 0x0000000f 0x80010000 0x00000000 0x00010000>;
416 418
417 /* Inbound 2GB range starting at 0 */ 419 /* Inbound 2GB range starting at 0 */
418 dma-ranges = <42000000 0 0 0 0 0 80000000>; 420 dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x0 0x80000000>;
419 421
420 /* This drives busses 80 to 0xbf */ 422 /* This drives busses 80 to 0xbf */
421 bus-range = <80 bf>; 423 bus-range = <0x80 0xbf>;
422 424
423 /* Legacy interrupts (note the weird polarity, the bridge seems 425 /* Legacy interrupts (note the weird polarity, the bridge seems
424 * to invert PCIe legacy interrupts). 426 * to invert PCIe legacy interrupts).
@@ -428,12 +430,12 @@
428 * below are basically de-swizzled numbers. 430 * below are basically de-swizzled numbers.
429 * The real slot is on idsel 0, so the swizzling is 1:1 431 * The real slot is on idsel 0, so the swizzling is 1:1
430 */ 432 */
431 interrupt-map-mask = <0000 0 0 7>; 433 interrupt-map-mask = <0x0 0x0 0x0 0x7>;
432 interrupt-map = < 434 interrupt-map = <
433 0000 0 0 1 &UIC3 10 4 /* swizzled int A */ 435 0x0 0x0 0x0 0x1 &UIC3 0x10 0x4 /* swizzled int A */
434 0000 0 0 2 &UIC3 11 4 /* swizzled int B */ 436 0x0 0x0 0x0 0x2 &UIC3 0x11 0x4 /* swizzled int B */
435 0000 0 0 3 &UIC3 12 4 /* swizzled int C */ 437 0x0 0x0 0x0 0x3 &UIC3 0x12 0x4 /* swizzled int C */
436 0000 0 0 4 &UIC3 13 4 /* swizzled int D */>; 438 0x0 0x0 0x0 0x4 &UIC3 0x13 0x4 /* swizzled int D */>;
437 }; 439 };
438 }; 440 };
439}; 441};
diff --git a/arch/powerpc/boot/dts/ebony.dts b/arch/powerpc/boot/dts/ebony.dts
index 5079dc890e0e..ec2d142291b4 100644
--- a/arch/powerpc/boot/dts/ebony.dts
+++ b/arch/powerpc/boot/dts/ebony.dts
@@ -11,12 +11,14 @@
11 * any warranty of any kind, whether express or implied. 11 * any warranty of any kind, whether express or implied.
12 */ 12 */
13 13
14/dts-v1/;
15
14/ { 16/ {
15 #address-cells = <2>; 17 #address-cells = <2>;
16 #size-cells = <1>; 18 #size-cells = <1>;
17 model = "ibm,ebony"; 19 model = "ibm,ebony";
18 compatible = "ibm,ebony"; 20 compatible = "ibm,ebony";
19 dcr-parent = <&/cpus/cpu@0>; 21 dcr-parent = <&{/cpus/cpu@0}>;
20 22
21 aliases { 23 aliases {
22 ethernet0 = &EMAC0; 24 ethernet0 = &EMAC0;
@@ -32,13 +34,13 @@
32 cpu@0 { 34 cpu@0 {
33 device_type = "cpu"; 35 device_type = "cpu";
34 model = "PowerPC,440GP"; 36 model = "PowerPC,440GP";
35 reg = <0>; 37 reg = <0x00000000>;
36 clock-frequency = <0>; // Filled in by zImage 38 clock-frequency = <0>; // Filled in by zImage
37 timebase-frequency = <0>; // Filled in by zImage 39 timebase-frequency = <0>; // Filled in by zImage
38 i-cache-line-size = <20>; 40 i-cache-line-size = <32>;
39 d-cache-line-size = <20>; 41 d-cache-line-size = <32>;
40 i-cache-size = <8000>; /* 32 kB */ 42 i-cache-size = <32768>; /* 32 kB */
41 d-cache-size = <8000>; /* 32 kB */ 43 d-cache-size = <32768>; /* 32 kB */
42 dcr-controller; 44 dcr-controller;
43 dcr-access-method = "native"; 45 dcr-access-method = "native";
44 }; 46 };
@@ -46,14 +48,14 @@
46 48
47 memory { 49 memory {
48 device_type = "memory"; 50 device_type = "memory";
49 reg = <0 0 0>; // Filled in by zImage 51 reg = <0x00000000 0x00000000 0x00000000>; // Filled in by zImage
50 }; 52 };
51 53
52 UIC0: interrupt-controller0 { 54 UIC0: interrupt-controller0 {
53 compatible = "ibm,uic-440gp", "ibm,uic"; 55 compatible = "ibm,uic-440gp", "ibm,uic";
54 interrupt-controller; 56 interrupt-controller;
55 cell-index = <0>; 57 cell-index = <0>;
56 dcr-reg = <0c0 009>; 58 dcr-reg = <0x0c0 0x009>;
57 #address-cells = <0>; 59 #address-cells = <0>;
58 #size-cells = <0>; 60 #size-cells = <0>;
59 #interrupt-cells = <2>; 61 #interrupt-cells = <2>;
@@ -64,17 +66,17 @@
64 compatible = "ibm,uic-440gp", "ibm,uic"; 66 compatible = "ibm,uic-440gp", "ibm,uic";
65 interrupt-controller; 67 interrupt-controller;
66 cell-index = <1>; 68 cell-index = <1>;
67 dcr-reg = <0d0 009>; 69 dcr-reg = <0x0d0 0x009>;
68 #address-cells = <0>; 70 #address-cells = <0>;
69 #size-cells = <0>; 71 #size-cells = <0>;
70 #interrupt-cells = <2>; 72 #interrupt-cells = <2>;
71 interrupts = <1e 4 1f 4>; /* cascade */ 73 interrupts = <0x1e 0x4 0x1f 0x4>; /* cascade */
72 interrupt-parent = <&UIC0>; 74 interrupt-parent = <&UIC0>;
73 }; 75 };
74 76
75 CPC0: cpc { 77 CPC0: cpc {
76 compatible = "ibm,cpc-440gp"; 78 compatible = "ibm,cpc-440gp";
77 dcr-reg = <0b0 003 0e0 010>; 79 dcr-reg = <0x0b0 0x003 0x0e0 0x010>;
78 // FIXME: anything else? 80 // FIXME: anything else?
79 }; 81 };
80 82
@@ -87,37 +89,37 @@
87 89
88 SDRAM0: memory-controller { 90 SDRAM0: memory-controller {
89 compatible = "ibm,sdram-440gp"; 91 compatible = "ibm,sdram-440gp";
90 dcr-reg = <010 2>; 92 dcr-reg = <0x010 0x002>;
91 // FIXME: anything else? 93 // FIXME: anything else?
92 }; 94 };
93 95
94 SRAM0: sram { 96 SRAM0: sram {
95 compatible = "ibm,sram-440gp"; 97 compatible = "ibm,sram-440gp";
96 dcr-reg = <020 8 00a 1>; 98 dcr-reg = <0x020 0x008 0x00a 0x001>;
97 }; 99 };
98 100
99 DMA0: dma { 101 DMA0: dma {
100 // FIXME: ??? 102 // FIXME: ???
101 compatible = "ibm,dma-440gp"; 103 compatible = "ibm,dma-440gp";
102 dcr-reg = <100 027>; 104 dcr-reg = <0x100 0x027>;
103 }; 105 };
104 106
105 MAL0: mcmal { 107 MAL0: mcmal {
106 compatible = "ibm,mcmal-440gp", "ibm,mcmal"; 108 compatible = "ibm,mcmal-440gp", "ibm,mcmal";
107 dcr-reg = <180 62>; 109 dcr-reg = <0x180 0x062>;
108 num-tx-chans = <4>; 110 num-tx-chans = <4>;
109 num-rx-chans = <4>; 111 num-rx-chans = <4>;
110 interrupt-parent = <&MAL0>; 112 interrupt-parent = <&MAL0>;
111 interrupts = <0 1 2 3 4>; 113 interrupts = <0x0 0x1 0x2 0x3 0x4>;
112 #interrupt-cells = <1>; 114 #interrupt-cells = <1>;
113 #address-cells = <0>; 115 #address-cells = <0>;
114 #size-cells = <0>; 116 #size-cells = <0>;
115 interrupt-map = </*TXEOB*/ 0 &UIC0 a 4 117 interrupt-map = </*TXEOB*/ 0x0 &UIC0 0xa 0x4
116 /*RXEOB*/ 1 &UIC0 b 4 118 /*RXEOB*/ 0x1 &UIC0 0xb 0x4
117 /*SERR*/ 2 &UIC1 0 4 119 /*SERR*/ 0x2 &UIC1 0x0 0x4
118 /*TXDE*/ 3 &UIC1 1 4 120 /*TXDE*/ 0x3 &UIC1 0x1 0x4
119 /*RXDE*/ 4 &UIC1 2 4>; 121 /*RXDE*/ 0x4 &UIC1 0x2 0x4>;
120 interrupt-map-mask = <ffffffff>; 122 interrupt-map-mask = <0xffffffff>;
121 }; 123 };
122 124
123 POB0: opb { 125 POB0: opb {
@@ -126,34 +128,34 @@
126 #size-cells = <1>; 128 #size-cells = <1>;
127 /* Wish there was a nicer way of specifying a full 32-bit 129 /* Wish there was a nicer way of specifying a full 32-bit
128 range */ 130 range */
129 ranges = <00000000 1 00000000 80000000 131 ranges = <0x00000000 0x00000001 0x00000000 0x80000000
130 80000000 1 80000000 80000000>; 132 0x80000000 0x00000001 0x80000000 0x80000000>;
131 dcr-reg = <090 00b>; 133 dcr-reg = <0x090 0x00b>;
132 interrupt-parent = <&UIC1>; 134 interrupt-parent = <&UIC1>;
133 interrupts = <7 4>; 135 interrupts = <0x7 0x4>;
134 clock-frequency = <0>; // Filled in by zImage 136 clock-frequency = <0>; // Filled in by zImage
135 137
136 EBC0: ebc { 138 EBC0: ebc {
137 compatible = "ibm,ebc-440gp", "ibm,ebc"; 139 compatible = "ibm,ebc-440gp", "ibm,ebc";
138 dcr-reg = <012 2>; 140 dcr-reg = <0x012 0x002>;
139 #address-cells = <2>; 141 #address-cells = <2>;
140 #size-cells = <1>; 142 #size-cells = <1>;
141 clock-frequency = <0>; // Filled in by zImage 143 clock-frequency = <0>; // Filled in by zImage
142 // ranges property is supplied by zImage 144 // ranges property is supplied by zImage
143 // based on firmware's configuration of the 145 // based on firmware's configuration of the
144 // EBC bridge 146 // EBC bridge
145 interrupts = <5 4>; 147 interrupts = <0x5 0x4>;
146 interrupt-parent = <&UIC1>; 148 interrupt-parent = <&UIC1>;
147 149
148 small-flash@0,80000 { 150 small-flash@0,80000 {
149 compatible = "jedec-flash"; 151 compatible = "jedec-flash";
150 bank-width = <1>; 152 bank-width = <1>;
151 reg = <0 80000 80000>; 153 reg = <0x00000000 0x00080000 0x00080000>;
152 #address-cells = <1>; 154 #address-cells = <1>;
153 #size-cells = <1>; 155 #size-cells = <1>;
154 partition@0 { 156 partition@0 {
155 label = "OpenBIOS"; 157 label = "OpenBIOS";
156 reg = <0 80000>; 158 reg = <0x00000000 0x00080000>;
157 read-only; 159 read-only;
158 }; 160 };
159 }; 161 };
@@ -161,101 +163,101 @@
161 nvram@1,0 { 163 nvram@1,0 {
162 /* NVRAM & RTC */ 164 /* NVRAM & RTC */
163 compatible = "ds1743-nvram"; 165 compatible = "ds1743-nvram";
164 #bytes = <2000>; 166 #bytes = <0x2000>;
165 reg = <1 0 2000>; 167 reg = <0x00000001 0x00000000 0x00002000>;
166 }; 168 };
167 169
168 large-flash@2,0 { 170 large-flash@2,0 {
169 compatible = "jedec-flash"; 171 compatible = "jedec-flash";
170 bank-width = <1>; 172 bank-width = <1>;
171 reg = <2 0 400000>; 173 reg = <0x00000002 0x00000000 0x00400000>;
172 #address-cells = <1>; 174 #address-cells = <1>;
173 #size-cells = <1>; 175 #size-cells = <1>;
174 partition@0 { 176 partition@0 {
175 label = "fs"; 177 label = "fs";
176 reg = <0 380000>; 178 reg = <0x00000000 0x00380000>;
177 }; 179 };
178 partition@380000 { 180 partition@380000 {
179 label = "firmware"; 181 label = "firmware";
180 reg = <380000 80000>; 182 reg = <0x00380000 0x00080000>;
181 }; 183 };
182 }; 184 };
183 185
184 ir@3,0 { 186 ir@3,0 {
185 reg = <3 0 10>; 187 reg = <0x00000003 0x00000000 0x00000010>;
186 }; 188 };
187 189
188 fpga@7,0 { 190 fpga@7,0 {
189 compatible = "Ebony-FPGA"; 191 compatible = "Ebony-FPGA";
190 reg = <7 0 10>; 192 reg = <0x00000007 0x00000000 0x00000010>;
191 virtual-reg = <e8300000>; 193 virtual-reg = <0xe8300000>;
192 }; 194 };
193 }; 195 };
194 196
195 UART0: serial@40000200 { 197 UART0: serial@40000200 {
196 device_type = "serial"; 198 device_type = "serial";
197 compatible = "ns16550"; 199 compatible = "ns16550";
198 reg = <40000200 8>; 200 reg = <0x40000200 0x00000008>;
199 virtual-reg = <e0000200>; 201 virtual-reg = <0xe0000200>;
200 clock-frequency = <A8C000>; 202 clock-frequency = <11059200>;
201 current-speed = <2580>; 203 current-speed = <9600>;
202 interrupt-parent = <&UIC0>; 204 interrupt-parent = <&UIC0>;
203 interrupts = <0 4>; 205 interrupts = <0x0 0x4>;
204 }; 206 };
205 207
206 UART1: serial@40000300 { 208 UART1: serial@40000300 {
207 device_type = "serial"; 209 device_type = "serial";
208 compatible = "ns16550"; 210 compatible = "ns16550";
209 reg = <40000300 8>; 211 reg = <0x40000300 0x00000008>;
210 virtual-reg = <e0000300>; 212 virtual-reg = <0xe0000300>;
211 clock-frequency = <A8C000>; 213 clock-frequency = <11059200>;
212 current-speed = <2580>; 214 current-speed = <9600>;
213 interrupt-parent = <&UIC0>; 215 interrupt-parent = <&UIC0>;
214 interrupts = <1 4>; 216 interrupts = <0x1 0x4>;
215 }; 217 };
216 218
217 IIC0: i2c@40000400 { 219 IIC0: i2c@40000400 {
218 /* FIXME */ 220 /* FIXME */
219 compatible = "ibm,iic-440gp", "ibm,iic"; 221 compatible = "ibm,iic-440gp", "ibm,iic";
220 reg = <40000400 14>; 222 reg = <0x40000400 0x00000014>;
221 interrupt-parent = <&UIC0>; 223 interrupt-parent = <&UIC0>;
222 interrupts = <2 4>; 224 interrupts = <0x2 0x4>;
223 }; 225 };
224 IIC1: i2c@40000500 { 226 IIC1: i2c@40000500 {
225 /* FIXME */ 227 /* FIXME */
226 compatible = "ibm,iic-440gp", "ibm,iic"; 228 compatible = "ibm,iic-440gp", "ibm,iic";
227 reg = <40000500 14>; 229 reg = <0x40000500 0x00000014>;
228 interrupt-parent = <&UIC0>; 230 interrupt-parent = <&UIC0>;
229 interrupts = <3 4>; 231 interrupts = <0x3 0x4>;
230 }; 232 };
231 233
232 GPIO0: gpio@40000700 { 234 GPIO0: gpio@40000700 {
233 /* FIXME */ 235 /* FIXME */
234 compatible = "ibm,gpio-440gp"; 236 compatible = "ibm,gpio-440gp";
235 reg = <40000700 20>; 237 reg = <0x40000700 0x00000020>;
236 }; 238 };
237 239
238 ZMII0: emac-zmii@40000780 { 240 ZMII0: emac-zmii@40000780 {
239 compatible = "ibm,zmii-440gp", "ibm,zmii"; 241 compatible = "ibm,zmii-440gp", "ibm,zmii";
240 reg = <40000780 c>; 242 reg = <0x40000780 0x0000000c>;
241 }; 243 };
242 244
243 EMAC0: ethernet@40000800 { 245 EMAC0: ethernet@40000800 {
244 device_type = "network"; 246 device_type = "network";
245 compatible = "ibm,emac-440gp", "ibm,emac"; 247 compatible = "ibm,emac-440gp", "ibm,emac";
246 interrupt-parent = <&UIC1>; 248 interrupt-parent = <&UIC1>;
247 interrupts = <1c 4 1d 4>; 249 interrupts = <0x1c 0x4 0x1d 0x4>;
248 reg = <40000800 70>; 250 reg = <0x40000800 0x00000070>;
249 local-mac-address = [000000000000]; // Filled in by zImage 251 local-mac-address = [000000000000]; // Filled in by zImage
250 mal-device = <&MAL0>; 252 mal-device = <&MAL0>;
251 mal-tx-channel = <0 1>; 253 mal-tx-channel = <0 1>;
252 mal-rx-channel = <0>; 254 mal-rx-channel = <0>;
253 cell-index = <0>; 255 cell-index = <0>;
254 max-frame-size = <5dc>; 256 max-frame-size = <1500>;
255 rx-fifo-size = <1000>; 257 rx-fifo-size = <4096>;
256 tx-fifo-size = <800>; 258 tx-fifo-size = <2048>;
257 phy-mode = "rmii"; 259 phy-mode = "rmii";
258 phy-map = <00000001>; 260 phy-map = <0x00000001>;
259 zmii-device = <&ZMII0>; 261 zmii-device = <&ZMII0>;
260 zmii-channel = <0>; 262 zmii-channel = <0>;
261 }; 263 };
@@ -263,18 +265,18 @@
263 device_type = "network"; 265 device_type = "network";
264 compatible = "ibm,emac-440gp", "ibm,emac"; 266 compatible = "ibm,emac-440gp", "ibm,emac";
265 interrupt-parent = <&UIC1>; 267 interrupt-parent = <&UIC1>;
266 interrupts = <1e 4 1f 4>; 268 interrupts = <0x1e 0x4 0x1f 0x4>;
267 reg = <40000900 70>; 269 reg = <0x40000900 0x00000070>;
268 local-mac-address = [000000000000]; // Filled in by zImage 270 local-mac-address = [000000000000]; // Filled in by zImage
269 mal-device = <&MAL0>; 271 mal-device = <&MAL0>;
270 mal-tx-channel = <2 3>; 272 mal-tx-channel = <2 3>;
271 mal-rx-channel = <1>; 273 mal-rx-channel = <1>;
272 cell-index = <1>; 274 cell-index = <1>;
273 max-frame-size = <5dc>; 275 max-frame-size = <1500>;
274 rx-fifo-size = <1000>; 276 rx-fifo-size = <4096>;
275 tx-fifo-size = <800>; 277 tx-fifo-size = <2048>;
276 phy-mode = "rmii"; 278 phy-mode = "rmii";
277 phy-map = <00000001>; 279 phy-map = <0x00000001>;
278 zmii-device = <&ZMII0>; 280 zmii-device = <&ZMII0>;
279 zmii-channel = <1>; 281 zmii-channel = <1>;
280 }; 282 };
@@ -282,9 +284,9 @@
282 284
283 GPT0: gpt@40000a00 { 285 GPT0: gpt@40000a00 {
284 /* FIXME */ 286 /* FIXME */
285 reg = <40000a00 d4>; 287 reg = <0x40000a00 0x000000d4>;
286 interrupt-parent = <&UIC0>; 288 interrupt-parent = <&UIC0>;
287 interrupts = <12 4 13 4 14 4 15 4 16 4>; 289 interrupts = <0x12 0x4 0x13 0x4 0x14 0x4 0x15 0x4 0x16 0x4>;
288 }; 290 };
289 291
290 }; 292 };
@@ -296,35 +298,35 @@
296 #address-cells = <3>; 298 #address-cells = <3>;
297 compatible = "ibm,plb440gp-pcix", "ibm,plb-pcix"; 299 compatible = "ibm,plb440gp-pcix", "ibm,plb-pcix";
298 primary; 300 primary;
299 reg = <2 0ec00000 8 /* Config space access */ 301 reg = <0x00000002 0x0ec00000 0x00000008 /* Config space access */
300 0 0 0 /* no IACK cycles */ 302 0x00000000 0x00000000 0x00000000 /* no IACK cycles */
301 2 0ed00000 4 /* Special cycles */ 303 0x00000002 0x0ed00000 0x00000004 /* Special cycles */
302 2 0ec80000 f0 /* Internal registers */ 304 0x00000002 0x0ec80000 0x000000f0 /* Internal registers */
303 2 0ec80100 fc>; /* Internal messaging registers */ 305 0x00000002 0x0ec80100 0x000000fc>; /* Internal messaging registers */
304 306
305 /* Outbound ranges, one memory and one IO, 307 /* Outbound ranges, one memory and one IO,
306 * later cannot be changed 308 * later cannot be changed
307 */ 309 */
308 ranges = <02000000 0 80000000 00000003 80000000 0 80000000 310 ranges = <0x02000000 0x00000000 0x80000000 0x00000003 0x80000000 0x00000000 0x80000000
309 01000000 0 00000000 00000002 08000000 0 00010000>; 311 0x01000000 0x00000000 0x00000000 0x00000002 0x08000000 0x00000000 0x00010000>;
310 312
311 /* Inbound 2GB range starting at 0 */ 313 /* Inbound 2GB range starting at 0 */
312 dma-ranges = <42000000 0 0 0 0 0 80000000>; 314 dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x0 0x80000000>;
313 315
314 /* Ebony has all 4 IRQ pins tied together per slot */ 316 /* Ebony has all 4 IRQ pins tied together per slot */
315 interrupt-map-mask = <f800 0 0 0>; 317 interrupt-map-mask = <0xf800 0x0 0x0 0x0>;
316 interrupt-map = < 318 interrupt-map = <
317 /* IDSEL 1 */ 319 /* IDSEL 1 */
318 0800 0 0 0 &UIC0 17 8 320 0x800 0x0 0x0 0x0 &UIC0 0x17 0x8
319 321
320 /* IDSEL 2 */ 322 /* IDSEL 2 */
321 1000 0 0 0 &UIC0 18 8 323 0x1000 0x0 0x0 0x0 &UIC0 0x18 0x8
322 324
323 /* IDSEL 3 */ 325 /* IDSEL 3 */
324 1800 0 0 0 &UIC0 19 8 326 0x1800 0x0 0x0 0x0 &UIC0 0x19 0x8
325 327
326 /* IDSEL 4 */ 328 /* IDSEL 4 */
327 2000 0 0 0 &UIC0 1a 8 329 0x2000 0x0 0x0 0x0 &UIC0 0x1a 0x8
328 >; 330 >;
329 }; 331 };
330 }; 332 };
diff --git a/arch/powerpc/boot/dts/ep405.dts b/arch/powerpc/boot/dts/ep405.dts
index 92938557ac8a..53ef06cc2134 100644
--- a/arch/powerpc/boot/dts/ep405.dts
+++ b/arch/powerpc/boot/dts/ep405.dts
@@ -9,12 +9,14 @@
9 * any warranty of any kind, whether express or implied. 9 * any warranty of any kind, whether express or implied.
10 */ 10 */
11 11
12/dts-v1/;
13
12/ { 14/ {
13 #address-cells = <1>; 15 #address-cells = <1>;
14 #size-cells = <1>; 16 #size-cells = <1>;
15 model = "ep405"; 17 model = "ep405";
16 compatible = "ep405"; 18 compatible = "ep405";
17 dcr-parent = <&/cpus/cpu@0>; 19 dcr-parent = <&{/cpus/cpu@0}>;
18 20
19 aliases { 21 aliases {
20 ethernet0 = &EMAC; 22 ethernet0 = &EMAC;
@@ -29,13 +31,13 @@
29 cpu@0 { 31 cpu@0 {
30 device_type = "cpu"; 32 device_type = "cpu";
31 model = "PowerPC,405GP"; 33 model = "PowerPC,405GP";
32 reg = <0>; 34 reg = <0x00000000>;
33 clock-frequency = <bebc200>; /* Filled in by zImage */ 35 clock-frequency = <200000000>; /* Filled in by zImage */
34 timebase-frequency = <0>; /* Filled in by zImage */ 36 timebase-frequency = <0>; /* Filled in by zImage */
35 i-cache-line-size = <20>; 37 i-cache-line-size = <32>;
36 d-cache-line-size = <20>; 38 d-cache-line-size = <32>;
37 i-cache-size = <4000>; 39 i-cache-size = <16384>;
38 d-cache-size = <4000>; 40 d-cache-size = <16384>;
39 dcr-controller; 41 dcr-controller;
40 dcr-access-method = "native"; 42 dcr-access-method = "native";
41 }; 43 };
@@ -43,14 +45,14 @@
43 45
44 memory { 46 memory {
45 device_type = "memory"; 47 device_type = "memory";
46 reg = <0 0>; /* Filled in by zImage */ 48 reg = <0x00000000 0x00000000>; /* Filled in by zImage */
47 }; 49 };
48 50
49 UIC0: interrupt-controller { 51 UIC0: interrupt-controller {
50 compatible = "ibm,uic"; 52 compatible = "ibm,uic";
51 interrupt-controller; 53 interrupt-controller;
52 cell-index = <0>; 54 cell-index = <0>;
53 dcr-reg = <0c0 9>; 55 dcr-reg = <0x0c0 0x009>;
54 #address-cells = <0>; 56 #address-cells = <0>;
55 #size-cells = <0>; 57 #size-cells = <0>;
56 #interrupt-cells = <2>; 58 #interrupt-cells = <2>;
@@ -65,91 +67,91 @@
65 67
66 SDRAM0: memory-controller { 68 SDRAM0: memory-controller {
67 compatible = "ibm,sdram-405gp"; 69 compatible = "ibm,sdram-405gp";
68 dcr-reg = <010 2>; 70 dcr-reg = <0x010 0x002>;
69 }; 71 };
70 72
71 MAL: mcmal { 73 MAL: mcmal {
72 compatible = "ibm,mcmal-405gp", "ibm,mcmal"; 74 compatible = "ibm,mcmal-405gp", "ibm,mcmal";
73 dcr-reg = <180 62>; 75 dcr-reg = <0x180 0x062>;
74 num-tx-chans = <1>; 76 num-tx-chans = <1>;
75 num-rx-chans = <1>; 77 num-rx-chans = <1>;
76 interrupt-parent = <&UIC0>; 78 interrupt-parent = <&UIC0>;
77 interrupts = < 79 interrupts = <
78 b 4 /* TXEOB */ 80 0xb 0x4 /* TXEOB */
79 c 4 /* RXEOB */ 81 0xc 0x4 /* RXEOB */
80 a 4 /* SERR */ 82 0xa 0x4 /* SERR */
81 d 4 /* TXDE */ 83 0xd 0x4 /* TXDE */
82 e 4 /* RXDE */>; 84 0xe 0x4 /* RXDE */>;
83 }; 85 };
84 86
85 POB0: opb { 87 POB0: opb {
86 compatible = "ibm,opb-405gp", "ibm,opb"; 88 compatible = "ibm,opb-405gp", "ibm,opb";
87 #address-cells = <1>; 89 #address-cells = <1>;
88 #size-cells = <1>; 90 #size-cells = <1>;
89 ranges = <ef600000 ef600000 a00000>; 91 ranges = <0xef600000 0xef600000 0x00a00000>;
90 dcr-reg = <0a0 5>; 92 dcr-reg = <0x0a0 0x005>;
91 clock-frequency = <0>; /* Filled in by zImage */ 93 clock-frequency = <0>; /* Filled in by zImage */
92 94
93 UART0: serial@ef600300 { 95 UART0: serial@ef600300 {
94 device_type = "serial"; 96 device_type = "serial";
95 compatible = "ns16550"; 97 compatible = "ns16550";
96 reg = <ef600300 8>; 98 reg = <0xef600300 0x00000008>;
97 virtual-reg = <ef600300>; 99 virtual-reg = <0xef600300>;
98 clock-frequency = <0>; /* Filled in by zImage */ 100 clock-frequency = <0>; /* Filled in by zImage */
99 current-speed = <2580>; 101 current-speed = <9600>;
100 interrupt-parent = <&UIC0>; 102 interrupt-parent = <&UIC0>;
101 interrupts = <0 4>; 103 interrupts = <0x0 0x4>;
102 }; 104 };
103 105
104 UART1: serial@ef600400 { 106 UART1: serial@ef600400 {
105 device_type = "serial"; 107 device_type = "serial";
106 compatible = "ns16550"; 108 compatible = "ns16550";
107 reg = <ef600400 8>; 109 reg = <0xef600400 0x00000008>;
108 virtual-reg = <ef600400>; 110 virtual-reg = <0xef600400>;
109 clock-frequency = <0>; /* Filled in by zImage */ 111 clock-frequency = <0>; /* Filled in by zImage */
110 current-speed = <2580>; 112 current-speed = <9600>;
111 interrupt-parent = <&UIC0>; 113 interrupt-parent = <&UIC0>;
112 interrupts = <1 4>; 114 interrupts = <0x1 0x4>;
113 }; 115 };
114 116
115 IIC: i2c@ef600500 { 117 IIC: i2c@ef600500 {
116 compatible = "ibm,iic-405gp", "ibm,iic"; 118 compatible = "ibm,iic-405gp", "ibm,iic";
117 reg = <ef600500 11>; 119 reg = <0xef600500 0x00000011>;
118 interrupt-parent = <&UIC0>; 120 interrupt-parent = <&UIC0>;
119 interrupts = <2 4>; 121 interrupts = <0x2 0x4>;
120 }; 122 };
121 123
122 GPIO: gpio@ef600700 { 124 GPIO: gpio@ef600700 {
123 compatible = "ibm,gpio-405gp"; 125 compatible = "ibm,gpio-405gp";
124 reg = <ef600700 20>; 126 reg = <0xef600700 0x00000020>;
125 }; 127 };
126 128
127 EMAC: ethernet@ef600800 { 129 EMAC: ethernet@ef600800 {
128 linux,network-index = <0>; 130 linux,network-index = <0x0>;
129 device_type = "network"; 131 device_type = "network";
130 compatible = "ibm,emac-405gp", "ibm,emac"; 132 compatible = "ibm,emac-405gp", "ibm,emac";
131 interrupt-parent = <&UIC0>; 133 interrupt-parent = <&UIC0>;
132 interrupts = < 134 interrupts = <
133 f 4 /* Ethernet */ 135 0xf 0x4 /* Ethernet */
134 9 4 /* Ethernet Wake Up */>; 136 0x9 0x4 /* Ethernet Wake Up */>;
135 local-mac-address = [000000000000]; /* Filled in by zImage */ 137 local-mac-address = [000000000000]; /* Filled in by zImage */
136 reg = <ef600800 70>; 138 reg = <0xef600800 0x00000070>;
137 mal-device = <&MAL>; 139 mal-device = <&MAL>;
138 mal-tx-channel = <0>; 140 mal-tx-channel = <0>;
139 mal-rx-channel = <0>; 141 mal-rx-channel = <0>;
140 cell-index = <0>; 142 cell-index = <0>;
141 max-frame-size = <5dc>; 143 max-frame-size = <1500>;
142 rx-fifo-size = <1000>; 144 rx-fifo-size = <4096>;
143 tx-fifo-size = <800>; 145 tx-fifo-size = <2048>;
144 phy-mode = "rmii"; 146 phy-mode = "rmii";
145 phy-map = <00000000>; 147 phy-map = <0x00000000>;
146 }; 148 };
147 149
148 }; 150 };
149 151
150 EBC0: ebc { 152 EBC0: ebc {
151 compatible = "ibm,ebc-405gp", "ibm,ebc"; 153 compatible = "ibm,ebc-405gp", "ibm,ebc";
152 dcr-reg = <012 2>; 154 dcr-reg = <0x012 0x002>;
153 #address-cells = <2>; 155 #address-cells = <2>;
154 #size-cells = <1>; 156 #size-cells = <1>;
155 157
@@ -163,13 +165,13 @@
163 /* NVRAM and RTC */ 165 /* NVRAM and RTC */
164 nvrtc@4,200000 { 166 nvrtc@4,200000 {
165 compatible = "ds1742"; 167 compatible = "ds1742";
166 reg = <4 200000 0>; /* size fixed up by zImage */ 168 reg = <0x00000004 0x00200000 0x00000000>; /* size fixed up by zImage */
167 }; 169 };
168 170
169 /* "BCSR" CPLD contains a PCI irq controller */ 171 /* "BCSR" CPLD contains a PCI irq controller */
170 bcsr@4,0 { 172 bcsr@4,0 {
171 compatible = "ep405-bcsr"; 173 compatible = "ep405-bcsr";
172 reg = <4 0 10>; 174 reg = <0x00000004 0x00000000 0x00000010>;
173 interrupt-controller; 175 interrupt-controller;
174 /* Routing table */ 176 /* Routing table */
175 irq-routing = [ 00 /* SYSERR */ 177 irq-routing = [ 00 /* SYSERR */
@@ -198,26 +200,26 @@
198 #address-cells = <3>; 200 #address-cells = <3>;
199 compatible = "ibm,plb405gp-pci", "ibm,plb-pci"; 201 compatible = "ibm,plb405gp-pci", "ibm,plb-pci";
200 primary; 202 primary;
201 reg = <eec00000 8 /* Config space access */ 203 reg = <0xeec00000 0x00000008 /* Config space access */
202 eed80000 4 /* IACK */ 204 0xeed80000 0x00000004 /* IACK */
203 eed80000 4 /* Special cycle */ 205 0xeed80000 0x00000004 /* Special cycle */
204 ef480000 40>; /* Internal registers */ 206 0xef480000 0x00000040>; /* Internal registers */
205 207
206 /* Outbound ranges, one memory and one IO, 208 /* Outbound ranges, one memory and one IO,
207 * later cannot be changed. Chip supports a second 209 * later cannot be changed. Chip supports a second
208 * IO range but we don't use it for now 210 * IO range but we don't use it for now
209 */ 211 */
210 ranges = <02000000 0 80000000 80000000 0 20000000 212 ranges = <0x02000000 0x00000000 0x80000000 0x80000000 0x00000000 0x20000000
211 01000000 0 00000000 e8000000 0 00010000>; 213 0x01000000 0x00000000 0x00000000 0xe8000000 0x00000000 0x00010000>;
212 214
213 /* Inbound 2GB range starting at 0 */ 215 /* Inbound 2GB range starting at 0 */
214 dma-ranges = <42000000 0 0 0 0 80000000>; 216 dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x80000000>;
215 217
216 /* That's all I know about IRQs on that thing ... */ 218 /* That's all I know about IRQs on that thing ... */
217 interrupt-map-mask = <f800 0 0 0>; 219 interrupt-map-mask = <0xf800 0x0 0x0 0x0>;
218 interrupt-map = < 220 interrupt-map = <
219 /* USB */ 221 /* USB */
220 7000 0 0 0 &UIC0 1e 8 /* IRQ5 */ 222 0x7000 0x0 0x0 0x0 &UIC0 0x1e 0x8 /* IRQ5 */
221 >; 223 >;
222 }; 224 };
223 }; 225 };
diff --git a/arch/powerpc/boot/dts/glacier.dts b/arch/powerpc/boot/dts/glacier.dts
index 0f2fc077d8db..463650c5f61d 100644
--- a/arch/powerpc/boot/dts/glacier.dts
+++ b/arch/powerpc/boot/dts/glacier.dts
@@ -8,12 +8,14 @@
8 * any warranty of any kind, whether express or implied. 8 * any warranty of any kind, whether express or implied.
9 */ 9 */
10 10
11/dts-v1/;
12
11/ { 13/ {
12 #address-cells = <2>; 14 #address-cells = <2>;
13 #size-cells = <1>; 15 #size-cells = <1>;
14 model = "amcc,glacier"; 16 model = "amcc,glacier";
15 compatible = "amcc,glacier", "amcc,canyonlands"; 17 compatible = "amcc,glacier", "amcc,canyonlands";
16 dcr-parent = <&/cpus/cpu@0>; 18 dcr-parent = <&{/cpus/cpu@0}>;
17 19
18 aliases { 20 aliases {
19 ethernet0 = &EMAC0; 21 ethernet0 = &EMAC0;
@@ -31,13 +33,13 @@
31 cpu@0 { 33 cpu@0 {
32 device_type = "cpu"; 34 device_type = "cpu";
33 model = "PowerPC,460GT"; 35 model = "PowerPC,460GT";
34 reg = <0>; 36 reg = <0x00000000>;
35 clock-frequency = <0>; /* Filled in by U-Boot */ 37 clock-frequency = <0>; /* Filled in by U-Boot */
36 timebase-frequency = <0>; /* Filled in by U-Boot */ 38 timebase-frequency = <0>; /* Filled in by U-Boot */
37 i-cache-line-size = <20>; 39 i-cache-line-size = <32>;
38 d-cache-line-size = <20>; 40 d-cache-line-size = <32>;
39 i-cache-size = <8000>; 41 i-cache-size = <32768>;
40 d-cache-size = <8000>; 42 d-cache-size = <32768>;
41 dcr-controller; 43 dcr-controller;
42 dcr-access-method = "native"; 44 dcr-access-method = "native";
43 }; 45 };
@@ -45,14 +47,14 @@
45 47
46 memory { 48 memory {
47 device_type = "memory"; 49 device_type = "memory";
48 reg = <0 0 0>; /* Filled in by U-Boot */ 50 reg = <0x00000000 0x00000000 0x00000000>; /* Filled in by U-Boot */
49 }; 51 };
50 52
51 UIC0: interrupt-controller0 { 53 UIC0: interrupt-controller0 {
52 compatible = "ibm,uic-460gt","ibm,uic"; 54 compatible = "ibm,uic-460gt","ibm,uic";
53 interrupt-controller; 55 interrupt-controller;
54 cell-index = <0>; 56 cell-index = <0>;
55 dcr-reg = <0c0 009>; 57 dcr-reg = <0x0c0 0x009>;
56 #address-cells = <0>; 58 #address-cells = <0>;
57 #size-cells = <0>; 59 #size-cells = <0>;
58 #interrupt-cells = <2>; 60 #interrupt-cells = <2>;
@@ -62,11 +64,11 @@
62 compatible = "ibm,uic-460gt","ibm,uic"; 64 compatible = "ibm,uic-460gt","ibm,uic";
63 interrupt-controller; 65 interrupt-controller;
64 cell-index = <1>; 66 cell-index = <1>;
65 dcr-reg = <0d0 009>; 67 dcr-reg = <0x0d0 0x009>;
66 #address-cells = <0>; 68 #address-cells = <0>;
67 #size-cells = <0>; 69 #size-cells = <0>;
68 #interrupt-cells = <2>; 70 #interrupt-cells = <2>;
69 interrupts = <1e 4 1f 4>; /* cascade */ 71 interrupts = <0x1e 0x4 0x1f 0x4>; /* cascade */
70 interrupt-parent = <&UIC0>; 72 interrupt-parent = <&UIC0>;
71 }; 73 };
72 74
@@ -74,11 +76,11 @@
74 compatible = "ibm,uic-460gt","ibm,uic"; 76 compatible = "ibm,uic-460gt","ibm,uic";
75 interrupt-controller; 77 interrupt-controller;
76 cell-index = <2>; 78 cell-index = <2>;
77 dcr-reg = <0e0 009>; 79 dcr-reg = <0x0e0 0x009>;
78 #address-cells = <0>; 80 #address-cells = <0>;
79 #size-cells = <0>; 81 #size-cells = <0>;
80 #interrupt-cells = <2>; 82 #interrupt-cells = <2>;
81 interrupts = <a 4 b 4>; /* cascade */ 83 interrupts = <0xa 0x4 0xb 0x4>; /* cascade */
82 interrupt-parent = <&UIC0>; 84 interrupt-parent = <&UIC0>;
83 }; 85 };
84 86
@@ -86,22 +88,22 @@
86 compatible = "ibm,uic-460gt","ibm,uic"; 88 compatible = "ibm,uic-460gt","ibm,uic";
87 interrupt-controller; 89 interrupt-controller;
88 cell-index = <3>; 90 cell-index = <3>;
89 dcr-reg = <0f0 009>; 91 dcr-reg = <0x0f0 0x009>;
90 #address-cells = <0>; 92 #address-cells = <0>;
91 #size-cells = <0>; 93 #size-cells = <0>;
92 #interrupt-cells = <2>; 94 #interrupt-cells = <2>;
93 interrupts = <10 4 11 4>; /* cascade */ 95 interrupts = <0x10 0x4 0x11 0x4>; /* cascade */
94 interrupt-parent = <&UIC0>; 96 interrupt-parent = <&UIC0>;
95 }; 97 };
96 98
97 SDR0: sdr { 99 SDR0: sdr {
98 compatible = "ibm,sdr-460gt"; 100 compatible = "ibm,sdr-460gt";
99 dcr-reg = <00e 002>; 101 dcr-reg = <0x00e 0x002>;
100 }; 102 };
101 103
102 CPR0: cpr { 104 CPR0: cpr {
103 compatible = "ibm,cpr-460gt"; 105 compatible = "ibm,cpr-460gt";
104 dcr-reg = <00c 002>; 106 dcr-reg = <0x00c 0x002>;
105 }; 107 };
106 108
107 plb { 109 plb {
@@ -113,75 +115,75 @@
113 115
114 SDRAM0: sdram { 116 SDRAM0: sdram {
115 compatible = "ibm,sdram-460gt", "ibm,sdram-405gp"; 117 compatible = "ibm,sdram-460gt", "ibm,sdram-405gp";
116 dcr-reg = <010 2>; 118 dcr-reg = <0x010 0x002>;
117 }; 119 };
118 120
119 MAL0: mcmal { 121 MAL0: mcmal {
120 compatible = "ibm,mcmal-460gt", "ibm,mcmal2"; 122 compatible = "ibm,mcmal-460gt", "ibm,mcmal2";
121 dcr-reg = <180 62>; 123 dcr-reg = <0x180 0x062>;
122 num-tx-chans = <4>; 124 num-tx-chans = <4>;
123 num-rx-chans = <20>; 125 num-rx-chans = <32>;
124 #address-cells = <0>; 126 #address-cells = <0>;
125 #size-cells = <0>; 127 #size-cells = <0>;
126 interrupt-parent = <&UIC2>; 128 interrupt-parent = <&UIC2>;
127 interrupts = < /*TXEOB*/ 6 4 129 interrupts = < /*TXEOB*/ 0x6 0x4
128 /*RXEOB*/ 7 4 130 /*RXEOB*/ 0x7 0x4
129 /*SERR*/ 3 4 131 /*SERR*/ 0x3 0x4
130 /*TXDE*/ 4 4 132 /*TXDE*/ 0x4 0x4
131 /*RXDE*/ 5 4>; 133 /*RXDE*/ 0x5 0x4>;
132 desc-base-addr-high = <8>; 134 desc-base-addr-high = <0x8>;
133 }; 135 };
134 136
135 POB0: opb { 137 POB0: opb {
136 compatible = "ibm,opb-460gt", "ibm,opb"; 138 compatible = "ibm,opb-460gt", "ibm,opb";
137 #address-cells = <1>; 139 #address-cells = <1>;
138 #size-cells = <1>; 140 #size-cells = <1>;
139 ranges = <b0000000 4 b0000000 50000000>; 141 ranges = <0xb0000000 0x00000004 0xb0000000 0x50000000>;
140 clock-frequency = <0>; /* Filled in by U-Boot */ 142 clock-frequency = <0>; /* Filled in by U-Boot */
141 143
142 EBC0: ebc { 144 EBC0: ebc {
143 compatible = "ibm,ebc-460gt", "ibm,ebc"; 145 compatible = "ibm,ebc-460gt", "ibm,ebc";
144 dcr-reg = <012 2>; 146 dcr-reg = <0x012 0x002>;
145 #address-cells = <2>; 147 #address-cells = <2>;
146 #size-cells = <1>; 148 #size-cells = <1>;
147 clock-frequency = <0>; /* Filled in by U-Boot */ 149 clock-frequency = <0>; /* Filled in by U-Boot */
148 /* ranges property is supplied by U-Boot */ 150 /* ranges property is supplied by U-Boot */
149 interrupts = <6 4>; 151 interrupts = <0x6 0x4>;
150 interrupt-parent = <&UIC1>; 152 interrupt-parent = <&UIC1>;
151 153
152 nor_flash@0,0 { 154 nor_flash@0,0 {
153 compatible = "amd,s29gl512n", "cfi-flash"; 155 compatible = "amd,s29gl512n", "cfi-flash";
154 bank-width = <2>; 156 bank-width = <2>;
155 reg = <0 000000 4000000>; 157 reg = <0x00000000 0x00000000 0x04000000>;
156 #address-cells = <1>; 158 #address-cells = <1>;
157 #size-cells = <1>; 159 #size-cells = <1>;
158 partition@0 { 160 partition@0 {
159 label = "kernel"; 161 label = "kernel";
160 reg = <0 1e0000>; 162 reg = <0x00000000 0x001e0000>;
161 }; 163 };
162 partition@1e0000 { 164 partition@1e0000 {
163 label = "dtb"; 165 label = "dtb";
164 reg = <1e0000 20000>; 166 reg = <0x001e0000 0x00020000>;
165 }; 167 };
166 partition@200000 { 168 partition@200000 {
167 label = "ramdisk"; 169 label = "ramdisk";
168 reg = <200000 1400000>; 170 reg = <0x00200000 0x01400000>;
169 }; 171 };
170 partition@1600000 { 172 partition@1600000 {
171 label = "jffs2"; 173 label = "jffs2";
172 reg = <1600000 400000>; 174 reg = <0x01600000 0x00400000>;
173 }; 175 };
174 partition@1a00000 { 176 partition@1a00000 {
175 label = "user"; 177 label = "user";
176 reg = <1a00000 2560000>; 178 reg = <0x01a00000 0x02560000>;
177 }; 179 };
178 partition@3f60000 { 180 partition@3f60000 {
179 label = "env"; 181 label = "env";
180 reg = <3f60000 40000>; 182 reg = <0x03f60000 0x00040000>;
181 }; 183 };
182 partition@3fa0000 { 184 partition@3fa0000 {
183 label = "u-boot"; 185 label = "u-boot";
184 reg = <3fa0000 60000>; 186 reg = <0x03fa0000 0x00060000>;
185 }; 187 };
186 }; 188 };
187 }; 189 };
@@ -189,109 +191,109 @@
189 UART0: serial@ef600300 { 191 UART0: serial@ef600300 {
190 device_type = "serial"; 192 device_type = "serial";
191 compatible = "ns16550"; 193 compatible = "ns16550";
192 reg = <ef600300 8>; 194 reg = <0xef600300 0x00000008>;
193 virtual-reg = <ef600300>; 195 virtual-reg = <0xef600300>;
194 clock-frequency = <0>; /* Filled in by U-Boot */ 196 clock-frequency = <0>; /* Filled in by U-Boot */
195 current-speed = <0>; /* Filled in by U-Boot */ 197 current-speed = <0>; /* Filled in by U-Boot */
196 interrupt-parent = <&UIC1>; 198 interrupt-parent = <&UIC1>;
197 interrupts = <1 4>; 199 interrupts = <0x1 0x4>;
198 }; 200 };
199 201
200 UART1: serial@ef600400 { 202 UART1: serial@ef600400 {
201 device_type = "serial"; 203 device_type = "serial";
202 compatible = "ns16550"; 204 compatible = "ns16550";
203 reg = <ef600400 8>; 205 reg = <0xef600400 0x00000008>;
204 virtual-reg = <ef600400>; 206 virtual-reg = <0xef600400>;
205 clock-frequency = <0>; /* Filled in by U-Boot */ 207 clock-frequency = <0>; /* Filled in by U-Boot */
206 current-speed = <0>; /* Filled in by U-Boot */ 208 current-speed = <0>; /* Filled in by U-Boot */
207 interrupt-parent = <&UIC0>; 209 interrupt-parent = <&UIC0>;
208 interrupts = <1 4>; 210 interrupts = <0x1 0x4>;
209 }; 211 };
210 212
211 UART2: serial@ef600500 { 213 UART2: serial@ef600500 {
212 device_type = "serial"; 214 device_type = "serial";
213 compatible = "ns16550"; 215 compatible = "ns16550";
214 reg = <ef600500 8>; 216 reg = <0xef600500 0x00000008>;
215 virtual-reg = <ef600500>; 217 virtual-reg = <0xef600500>;
216 clock-frequency = <0>; /* Filled in by U-Boot */ 218 clock-frequency = <0>; /* Filled in by U-Boot */
217 current-speed = <0>; /* Filled in by U-Boot */ 219 current-speed = <0>; /* Filled in by U-Boot */
218 interrupt-parent = <&UIC1>; 220 interrupt-parent = <&UIC1>;
219 interrupts = <1d 4>; 221 interrupts = <0x1d 0x4>;
220 }; 222 };
221 223
222 UART3: serial@ef600600 { 224 UART3: serial@ef600600 {
223 device_type = "serial"; 225 device_type = "serial";
224 compatible = "ns16550"; 226 compatible = "ns16550";
225 reg = <ef600600 8>; 227 reg = <0xef600600 0x00000008>;
226 virtual-reg = <ef600600>; 228 virtual-reg = <0xef600600>;
227 clock-frequency = <0>; /* Filled in by U-Boot */ 229 clock-frequency = <0>; /* Filled in by U-Boot */
228 current-speed = <0>; /* Filled in by U-Boot */ 230 current-speed = <0>; /* Filled in by U-Boot */
229 interrupt-parent = <&UIC1>; 231 interrupt-parent = <&UIC1>;
230 interrupts = <1e 4>; 232 interrupts = <0x1e 0x4>;
231 }; 233 };
232 234
233 IIC0: i2c@ef600700 { 235 IIC0: i2c@ef600700 {
234 compatible = "ibm,iic-460gt", "ibm,iic"; 236 compatible = "ibm,iic-460gt", "ibm,iic";
235 reg = <ef600700 14>; 237 reg = <0xef600700 0x00000014>;
236 interrupt-parent = <&UIC0>; 238 interrupt-parent = <&UIC0>;
237 interrupts = <2 4>; 239 interrupts = <0x2 0x4>;
238 }; 240 };
239 241
240 IIC1: i2c@ef600800 { 242 IIC1: i2c@ef600800 {
241 compatible = "ibm,iic-460gt", "ibm,iic"; 243 compatible = "ibm,iic-460gt", "ibm,iic";
242 reg = <ef600800 14>; 244 reg = <0xef600800 0x00000014>;
243 interrupt-parent = <&UIC0>; 245 interrupt-parent = <&UIC0>;
244 interrupts = <3 4>; 246 interrupts = <0x3 0x4>;
245 }; 247 };
246 248
247 ZMII0: emac-zmii@ef600d00 { 249 ZMII0: emac-zmii@ef600d00 {
248 compatible = "ibm,zmii-460gt", "ibm,zmii"; 250 compatible = "ibm,zmii-460gt", "ibm,zmii";
249 reg = <ef600d00 c>; 251 reg = <0xef600d00 0x0000000c>;
250 }; 252 };
251 253
252 RGMII0: emac-rgmii@ef601500 { 254 RGMII0: emac-rgmii@ef601500 {
253 compatible = "ibm,rgmii-460gt", "ibm,rgmii"; 255 compatible = "ibm,rgmii-460gt", "ibm,rgmii";
254 reg = <ef601500 8>; 256 reg = <0xef601500 0x00000008>;
255 has-mdio; 257 has-mdio;
256 }; 258 };
257 259
258 RGMII1: emac-rgmii@ef601600 { 260 RGMII1: emac-rgmii@ef601600 {
259 compatible = "ibm,rgmii-460gt", "ibm,rgmii"; 261 compatible = "ibm,rgmii-460gt", "ibm,rgmii";
260 reg = <ef601600 8>; 262 reg = <0xef601600 0x00000008>;
261 has-mdio; 263 has-mdio;
262 }; 264 };
263 265
264 TAH0: emac-tah@ef601350 { 266 TAH0: emac-tah@ef601350 {
265 compatible = "ibm,tah-460gt", "ibm,tah"; 267 compatible = "ibm,tah-460gt", "ibm,tah";
266 reg = <ef601350 30>; 268 reg = <0xef601350 0x00000030>;
267 }; 269 };
268 270
269 TAH1: emac-tah@ef601450 { 271 TAH1: emac-tah@ef601450 {
270 compatible = "ibm,tah-460gt", "ibm,tah"; 272 compatible = "ibm,tah-460gt", "ibm,tah";
271 reg = <ef601450 30>; 273 reg = <0xef601450 0x00000030>;
272 }; 274 };
273 275
274 EMAC0: ethernet@ef600e00 { 276 EMAC0: ethernet@ef600e00 {
275 device_type = "network"; 277 device_type = "network";
276 compatible = "ibm,emac-460gt", "ibm,emac4"; 278 compatible = "ibm,emac-460gt", "ibm,emac4";
277 interrupt-parent = <&EMAC0>; 279 interrupt-parent = <&EMAC0>;
278 interrupts = <0 1>; 280 interrupts = <0x0 0x1>;
279 #interrupt-cells = <1>; 281 #interrupt-cells = <1>;
280 #address-cells = <0>; 282 #address-cells = <0>;
281 #size-cells = <0>; 283 #size-cells = <0>;
282 interrupt-map = </*Status*/ 0 &UIC2 10 4 284 interrupt-map = </*Status*/ 0x0 &UIC2 0x10 0x4
283 /*Wake*/ 1 &UIC2 14 4>; 285 /*Wake*/ 0x1 &UIC2 0x14 0x4>;
284 reg = <ef600e00 70>; 286 reg = <0xef600e00 0x00000070>;
285 local-mac-address = [000000000000]; /* Filled in by U-Boot */ 287 local-mac-address = [000000000000]; /* Filled in by U-Boot */
286 mal-device = <&MAL0>; 288 mal-device = <&MAL0>;
287 mal-tx-channel = <0>; 289 mal-tx-channel = <0>;
288 mal-rx-channel = <0>; 290 mal-rx-channel = <0>;
289 cell-index = <0>; 291 cell-index = <0>;
290 max-frame-size = <2328>; 292 max-frame-size = <9000>;
291 rx-fifo-size = <1000>; 293 rx-fifo-size = <4096>;
292 tx-fifo-size = <800>; 294 tx-fifo-size = <2048>;
293 phy-mode = "rgmii"; 295 phy-mode = "rgmii";
294 phy-map = <00000000>; 296 phy-map = <0x00000000>;
295 rgmii-device = <&RGMII0>; 297 rgmii-device = <&RGMII0>;
296 rgmii-channel = <0>; 298 rgmii-channel = <0>;
297 tah-device = <&TAH0>; 299 tah-device = <&TAH0>;
@@ -304,23 +306,23 @@
304 device_type = "network"; 306 device_type = "network";
305 compatible = "ibm,emac-460gt", "ibm,emac4"; 307 compatible = "ibm,emac-460gt", "ibm,emac4";
306 interrupt-parent = <&EMAC1>; 308 interrupt-parent = <&EMAC1>;
307 interrupts = <0 1>; 309 interrupts = <0x0 0x1>;
308 #interrupt-cells = <1>; 310 #interrupt-cells = <1>;
309 #address-cells = <0>; 311 #address-cells = <0>;
310 #size-cells = <0>; 312 #size-cells = <0>;
311 interrupt-map = </*Status*/ 0 &UIC2 11 4 313 interrupt-map = </*Status*/ 0x0 &UIC2 0x11 0x4
312 /*Wake*/ 1 &UIC2 15 4>; 314 /*Wake*/ 0x1 &UIC2 0x15 0x4>;
313 reg = <ef600f00 70>; 315 reg = <0xef600f00 0x00000070>;
314 local-mac-address = [000000000000]; /* Filled in by U-Boot */ 316 local-mac-address = [000000000000]; /* Filled in by U-Boot */
315 mal-device = <&MAL0>; 317 mal-device = <&MAL0>;
316 mal-tx-channel = <1>; 318 mal-tx-channel = <1>;
317 mal-rx-channel = <8>; 319 mal-rx-channel = <8>;
318 cell-index = <1>; 320 cell-index = <1>;
319 max-frame-size = <2328>; 321 max-frame-size = <9000>;
320 rx-fifo-size = <1000>; 322 rx-fifo-size = <4096>;
321 tx-fifo-size = <800>; 323 tx-fifo-size = <2048>;
322 phy-mode = "rgmii"; 324 phy-mode = "rgmii";
323 phy-map = <00000000>; 325 phy-map = <0x00000000>;
324 rgmii-device = <&RGMII0>; 326 rgmii-device = <&RGMII0>;
325 rgmii-channel = <1>; 327 rgmii-channel = <1>;
326 tah-device = <&TAH1>; 328 tah-device = <&TAH1>;
@@ -334,23 +336,23 @@
334 device_type = "network"; 336 device_type = "network";
335 compatible = "ibm,emac-460gt", "ibm,emac4"; 337 compatible = "ibm,emac-460gt", "ibm,emac4";
336 interrupt-parent = <&EMAC2>; 338 interrupt-parent = <&EMAC2>;
337 interrupts = <0 1>; 339 interrupts = <0x0 0x1>;
338 #interrupt-cells = <1>; 340 #interrupt-cells = <1>;
339 #address-cells = <0>; 341 #address-cells = <0>;
340 #size-cells = <0>; 342 #size-cells = <0>;
341 interrupt-map = </*Status*/ 0 &UIC2 12 4 343 interrupt-map = </*Status*/ 0x0 &UIC2 0x12 0x4
342 /*Wake*/ 1 &UIC2 16 4>; 344 /*Wake*/ 0x1 &UIC2 0x16 0x4>;
343 reg = <ef601100 70>; 345 reg = <0xef601100 0x00000070>;
344 local-mac-address = [000000000000]; /* Filled in by U-Boot */ 346 local-mac-address = [000000000000]; /* Filled in by U-Boot */
345 mal-device = <&MAL0>; 347 mal-device = <&MAL0>;
346 mal-tx-channel = <2>; 348 mal-tx-channel = <2>;
347 mal-rx-channel = <10>; 349 mal-rx-channel = <16>;
348 cell-index = <2>; 350 cell-index = <2>;
349 max-frame-size = <2328>; 351 max-frame-size = <9000>;
350 rx-fifo-size = <1000>; 352 rx-fifo-size = <4096>;
351 tx-fifo-size = <800>; 353 tx-fifo-size = <2048>;
352 phy-mode = "rgmii"; 354 phy-mode = "rgmii";
353 phy-map = <00000000>; 355 phy-map = <0x00000000>;
354 rgmii-device = <&RGMII1>; 356 rgmii-device = <&RGMII1>;
355 rgmii-channel = <0>; 357 rgmii-channel = <0>;
356 has-inverted-stacr-oc; 358 has-inverted-stacr-oc;
@@ -362,23 +364,23 @@
362 device_type = "network"; 364 device_type = "network";
363 compatible = "ibm,emac-460gt", "ibm,emac4"; 365 compatible = "ibm,emac-460gt", "ibm,emac4";
364 interrupt-parent = <&EMAC3>; 366 interrupt-parent = <&EMAC3>;
365 interrupts = <0 1>; 367 interrupts = <0x0 0x1>;
366 #interrupt-cells = <1>; 368 #interrupt-cells = <1>;
367 #address-cells = <0>; 369 #address-cells = <0>;
368 #size-cells = <0>; 370 #size-cells = <0>;
369 interrupt-map = </*Status*/ 0 &UIC2 13 4 371 interrupt-map = </*Status*/ 0x0 &UIC2 0x13 0x4
370 /*Wake*/ 1 &UIC2 17 4>; 372 /*Wake*/ 0x1 &UIC2 0x17 0x4>;
371 reg = <ef601200 70>; 373 reg = <0xef601200 0x00000070>;
372 local-mac-address = [000000000000]; /* Filled in by U-Boot */ 374 local-mac-address = [000000000000]; /* Filled in by U-Boot */
373 mal-device = <&MAL0>; 375 mal-device = <&MAL0>;
374 mal-tx-channel = <3>; 376 mal-tx-channel = <3>;
375 mal-rx-channel = <18>; 377 mal-rx-channel = <24>;
376 cell-index = <3>; 378 cell-index = <3>;
377 max-frame-size = <2328>; 379 max-frame-size = <9000>;
378 rx-fifo-size = <1000>; 380 rx-fifo-size = <4096>;
379 tx-fifo-size = <800>; 381 tx-fifo-size = <2048>;
380 phy-mode = "rgmii"; 382 phy-mode = "rgmii";
381 phy-map = <00000000>; 383 phy-map = <0x00000000>;
382 rgmii-device = <&RGMII1>; 384 rgmii-device = <&RGMII1>;
383 rgmii-channel = <1>; 385 rgmii-channel = <1>;
384 has-inverted-stacr-oc; 386 has-inverted-stacr-oc;
@@ -396,27 +398,27 @@
396 primary; 398 primary;
397 large-inbound-windows; 399 large-inbound-windows;
398 enable-msi-hole; 400 enable-msi-hole;
399 reg = <c 0ec00000 8 /* Config space access */ 401 reg = <0x0000000c 0x0ec00000 0x00000008 /* Config space access */
400 0 0 0 /* no IACK cycles */ 402 0x00000000 0x00000000 0x00000000 /* no IACK cycles */
401 c 0ed00000 4 /* Special cycles */ 403 0x0000000c 0x0ed00000 0x00000004 /* Special cycles */
402 c 0ec80000 100 /* Internal registers */ 404 0x0000000c 0x0ec80000 0x00000100 /* Internal registers */
403 c 0ec80100 fc>; /* Internal messaging registers */ 405 0x0000000c 0x0ec80100 0x000000fc>; /* Internal messaging registers */
404 406
405 /* Outbound ranges, one memory and one IO, 407 /* Outbound ranges, one memory and one IO,
406 * later cannot be changed 408 * later cannot be changed
407 */ 409 */
408 ranges = <02000000 0 80000000 0000000d 80000000 0 80000000 410 ranges = <0x02000000 0x00000000 0x80000000 0x0000000d 0x80000000 0x00000000 0x80000000
409 01000000 0 00000000 0000000c 08000000 0 00010000>; 411 0x01000000 0x00000000 0x00000000 0x0000000c 0x08000000 0x00000000 0x00010000>;
410 412
411 /* Inbound 2GB range starting at 0 */ 413 /* Inbound 2GB range starting at 0 */
412 dma-ranges = <42000000 0 0 0 0 0 80000000>; 414 dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x0 0x80000000>;
413 415
414 /* This drives busses 0 to 0x3f */ 416 /* This drives busses 0 to 0x3f */
415 bus-range = <0 3f>; 417 bus-range = <0x0 0x3f>;
416 418
417 /* All PCI interrupts are routed to ext IRQ 2 -> UIC1-0 */ 419 /* All PCI interrupts are routed to ext IRQ 2 -> UIC1-0 */
418 interrupt-map-mask = <0000 0 0 0>; 420 interrupt-map-mask = <0x0 0x0 0x0 0x0>;
419 interrupt-map = < 0000 0 0 0 &UIC1 0 8 >; 421 interrupt-map = < 0x0 0x0 0x0 0x0 &UIC1 0x0 0x8 >;
420 }; 422 };
421 423
422 PCIE0: pciex@d00000000 { 424 PCIE0: pciex@d00000000 {
@@ -426,23 +428,23 @@
426 #address-cells = <3>; 428 #address-cells = <3>;
427 compatible = "ibm,plb-pciex-460ex", "ibm,plb-pciex"; 429 compatible = "ibm,plb-pciex-460ex", "ibm,plb-pciex";
428 primary; 430 primary;
429 port = <0>; /* port number */ 431 port = <0x0>; /* port number */
430 reg = <d 00000000 20000000 /* Config space access */ 432 reg = <0x0000000d 0x00000000 0x20000000 /* Config space access */
431 c 08010000 00001000>; /* Registers */ 433 0x0000000c 0x08010000 0x00001000>; /* Registers */
432 dcr-reg = <100 020>; 434 dcr-reg = <0x100 0x020>;
433 sdr-base = <300>; 435 sdr-base = <0x300>;
434 436
435 /* Outbound ranges, one memory and one IO, 437 /* Outbound ranges, one memory and one IO,
436 * later cannot be changed 438 * later cannot be changed
437 */ 439 */
438 ranges = <02000000 0 80000000 0000000e 00000000 0 80000000 440 ranges = <0x02000000 0x00000000 0x80000000 0x0000000e 0x00000000 0x00000000 0x80000000
439 01000000 0 00000000 0000000f 80000000 0 00010000>; 441 0x01000000 0x00000000 0x00000000 0x0000000f 0x80000000 0x00000000 0x00010000>;
440 442
441 /* Inbound 2GB range starting at 0 */ 443 /* Inbound 2GB range starting at 0 */
442 dma-ranges = <42000000 0 0 0 0 0 80000000>; 444 dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x0 0x80000000>;
443 445
444 /* This drives busses 40 to 0x7f */ 446 /* This drives busses 40 to 0x7f */
445 bus-range = <40 7f>; 447 bus-range = <0x40 0x7f>;
446 448
447 /* Legacy interrupts (note the weird polarity, the bridge seems 449 /* Legacy interrupts (note the weird polarity, the bridge seems
448 * to invert PCIe legacy interrupts). 450 * to invert PCIe legacy interrupts).
@@ -452,12 +454,12 @@
452 * below are basically de-swizzled numbers. 454 * below are basically de-swizzled numbers.
453 * The real slot is on idsel 0, so the swizzling is 1:1 455 * The real slot is on idsel 0, so the swizzling is 1:1
454 */ 456 */
455 interrupt-map-mask = <0000 0 0 7>; 457 interrupt-map-mask = <0x0 0x0 0x0 0x7>;
456 interrupt-map = < 458 interrupt-map = <
457 0000 0 0 1 &UIC3 c 4 /* swizzled int A */ 459 0x0 0x0 0x0 0x1 &UIC3 0xc 0x4 /* swizzled int A */
458 0000 0 0 2 &UIC3 d 4 /* swizzled int B */ 460 0x0 0x0 0x0 0x2 &UIC3 0xd 0x4 /* swizzled int B */
459 0000 0 0 3 &UIC3 e 4 /* swizzled int C */ 461 0x0 0x0 0x0 0x3 &UIC3 0xe 0x4 /* swizzled int C */
460 0000 0 0 4 &UIC3 f 4 /* swizzled int D */>; 462 0x0 0x0 0x0 0x4 &UIC3 0xf 0x4 /* swizzled int D */>;
461 }; 463 };
462 464
463 PCIE1: pciex@d20000000 { 465 PCIE1: pciex@d20000000 {
@@ -467,23 +469,23 @@
467 #address-cells = <3>; 469 #address-cells = <3>;
468 compatible = "ibm,plb-pciex-460ex", "ibm,plb-pciex"; 470 compatible = "ibm,plb-pciex-460ex", "ibm,plb-pciex";
469 primary; 471 primary;
470 port = <1>; /* port number */ 472 port = <0x1>; /* port number */
471 reg = <d 20000000 20000000 /* Config space access */ 473 reg = <0x0000000d 0x20000000 0x20000000 /* Config space access */
472 c 08011000 00001000>; /* Registers */ 474 0x0000000c 0x08011000 0x00001000>; /* Registers */
473 dcr-reg = <120 020>; 475 dcr-reg = <0x120 0x020>;
474 sdr-base = <340>; 476 sdr-base = <0x340>;
475 477
476 /* Outbound ranges, one memory and one IO, 478 /* Outbound ranges, one memory and one IO,
477 * later cannot be changed 479 * later cannot be changed
478 */ 480 */
479 ranges = <02000000 0 80000000 0000000e 80000000 0 80000000 481 ranges = <0x02000000 0x00000000 0x80000000 0x0000000e 0x80000000 0x00000000 0x80000000
480 01000000 0 00000000 0000000f 80010000 0 00010000>; 482 0x01000000 0x00000000 0x00000000 0x0000000f 0x80010000 0x00000000 0x00010000>;
481 483
482 /* Inbound 2GB range starting at 0 */ 484 /* Inbound 2GB range starting at 0 */
483 dma-ranges = <42000000 0 0 0 0 0 80000000>; 485 dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x0 0x80000000>;
484 486
485 /* This drives busses 80 to 0xbf */ 487 /* This drives busses 80 to 0xbf */
486 bus-range = <80 bf>; 488 bus-range = <0x80 0xbf>;
487 489
488 /* Legacy interrupts (note the weird polarity, the bridge seems 490 /* Legacy interrupts (note the weird polarity, the bridge seems
489 * to invert PCIe legacy interrupts). 491 * to invert PCIe legacy interrupts).
@@ -493,12 +495,12 @@
493 * below are basically de-swizzled numbers. 495 * below are basically de-swizzled numbers.
494 * The real slot is on idsel 0, so the swizzling is 1:1 496 * The real slot is on idsel 0, so the swizzling is 1:1
495 */ 497 */
496 interrupt-map-mask = <0000 0 0 7>; 498 interrupt-map-mask = <0x0 0x0 0x0 0x7>;
497 interrupt-map = < 499 interrupt-map = <
498 0000 0 0 1 &UIC3 10 4 /* swizzled int A */ 500 0x0 0x0 0x0 0x1 &UIC3 0x10 0x4 /* swizzled int A */
499 0000 0 0 2 &UIC3 11 4 /* swizzled int B */ 501 0x0 0x0 0x0 0x2 &UIC3 0x11 0x4 /* swizzled int B */
500 0000 0 0 3 &UIC3 12 4 /* swizzled int C */ 502 0x0 0x0 0x0 0x3 &UIC3 0x12 0x4 /* swizzled int C */
501 0000 0 0 4 &UIC3 13 4 /* swizzled int D */>; 503 0x0 0x0 0x0 0x4 &UIC3 0x13 0x4 /* swizzled int D */>;
502 }; 504 };
503 }; 505 };
504}; 506};
diff --git a/arch/powerpc/boot/dts/haleakala.dts b/arch/powerpc/boot/dts/haleakala.dts
index b5d95ac24dbf..2c2fceaabbcd 100644
--- a/arch/powerpc/boot/dts/haleakala.dts
+++ b/arch/powerpc/boot/dts/haleakala.dts
@@ -8,12 +8,14 @@
8 * any warranty of any kind, whether express or implied. 8 * any warranty of any kind, whether express or implied.
9 */ 9 */
10 10
11/dts-v1/;
12
11/ { 13/ {
12 #address-cells = <1>; 14 #address-cells = <1>;
13 #size-cells = <1>; 15 #size-cells = <1>;
14 model = "amcc,haleakala"; 16 model = "amcc,haleakala";
15 compatible = "amcc,haleakala", "amcc,kilauea"; 17 compatible = "amcc,haleakala", "amcc,kilauea";
16 dcr-parent = <&/cpus/cpu@0>; 18 dcr-parent = <&{/cpus/cpu@0}>;
17 19
18 aliases { 20 aliases {
19 ethernet0 = &EMAC0; 21 ethernet0 = &EMAC0;
@@ -28,13 +30,13 @@
28 cpu@0 { 30 cpu@0 {
29 device_type = "cpu"; 31 device_type = "cpu";
30 model = "PowerPC,405EXr"; 32 model = "PowerPC,405EXr";
31 reg = <0>; 33 reg = <0x00000000>;
32 clock-frequency = <0>; /* Filled in by U-Boot */ 34 clock-frequency = <0>; /* Filled in by U-Boot */
33 timebase-frequency = <0>; /* Filled in by U-Boot */ 35 timebase-frequency = <0>; /* Filled in by U-Boot */
34 i-cache-line-size = <20>; 36 i-cache-line-size = <32>;
35 d-cache-line-size = <20>; 37 d-cache-line-size = <32>;
36 i-cache-size = <4000>; /* 16 kB */ 38 i-cache-size = <16384>; /* 16 kB */
37 d-cache-size = <4000>; /* 16 kB */ 39 d-cache-size = <16384>; /* 16 kB */
38 dcr-controller; 40 dcr-controller;
39 dcr-access-method = "native"; 41 dcr-access-method = "native";
40 }; 42 };
@@ -42,14 +44,14 @@
42 44
43 memory { 45 memory {
44 device_type = "memory"; 46 device_type = "memory";
45 reg = <0 0>; /* Filled in by U-Boot */ 47 reg = <0x00000000 0x00000000>; /* Filled in by U-Boot */
46 }; 48 };
47 49
48 UIC0: interrupt-controller { 50 UIC0: interrupt-controller {
49 compatible = "ibm,uic-405exr", "ibm,uic"; 51 compatible = "ibm,uic-405exr", "ibm,uic";
50 interrupt-controller; 52 interrupt-controller;
51 cell-index = <0>; 53 cell-index = <0>;
52 dcr-reg = <0c0 009>; 54 dcr-reg = <0x0c0 0x009>;
53 #address-cells = <0>; 55 #address-cells = <0>;
54 #size-cells = <0>; 56 #size-cells = <0>;
55 #interrupt-cells = <2>; 57 #interrupt-cells = <2>;
@@ -59,11 +61,11 @@
59 compatible = "ibm,uic-405exr","ibm,uic"; 61 compatible = "ibm,uic-405exr","ibm,uic";
60 interrupt-controller; 62 interrupt-controller;
61 cell-index = <1>; 63 cell-index = <1>;
62 dcr-reg = <0d0 009>; 64 dcr-reg = <0x0d0 0x009>;
63 #address-cells = <0>; 65 #address-cells = <0>;
64 #size-cells = <0>; 66 #size-cells = <0>;
65 #interrupt-cells = <2>; 67 #interrupt-cells = <2>;
66 interrupts = <1e 4 1f 4>; /* cascade */ 68 interrupts = <0x1e 0x4 0x1f 0x4>; /* cascade */
67 interrupt-parent = <&UIC0>; 69 interrupt-parent = <&UIC0>;
68 }; 70 };
69 71
@@ -71,11 +73,11 @@
71 compatible = "ibm,uic-405exr","ibm,uic"; 73 compatible = "ibm,uic-405exr","ibm,uic";
72 interrupt-controller; 74 interrupt-controller;
73 cell-index = <2>; 75 cell-index = <2>;
74 dcr-reg = <0e0 009>; 76 dcr-reg = <0x0e0 0x009>;
75 #address-cells = <0>; 77 #address-cells = <0>;
76 #size-cells = <0>; 78 #size-cells = <0>;
77 #interrupt-cells = <2>; 79 #interrupt-cells = <2>;
78 interrupts = <1c 4 1d 4>; /* cascade */ 80 interrupts = <0x1c 0x4 0x1d 0x4>; /* cascade */
79 interrupt-parent = <&UIC0>; 81 interrupt-parent = <&UIC0>;
80 }; 82 };
81 83
@@ -88,72 +90,72 @@
88 90
89 SDRAM0: memory-controller { 91 SDRAM0: memory-controller {
90 compatible = "ibm,sdram-405exr"; 92 compatible = "ibm,sdram-405exr";
91 dcr-reg = <010 2>; 93 dcr-reg = <0x010 0x002>;
92 }; 94 };
93 95
94 MAL0: mcmal { 96 MAL0: mcmal {
95 compatible = "ibm,mcmal-405exr", "ibm,mcmal2"; 97 compatible = "ibm,mcmal-405exr", "ibm,mcmal2";
96 dcr-reg = <180 62>; 98 dcr-reg = <0x180 0x062>;
97 num-tx-chans = <2>; 99 num-tx-chans = <2>;
98 num-rx-chans = <2>; 100 num-rx-chans = <2>;
99 interrupt-parent = <&MAL0>; 101 interrupt-parent = <&MAL0>;
100 interrupts = <0 1 2 3 4>; 102 interrupts = <0x0 0x1 0x2 0x3 0x4>;
101 #interrupt-cells = <1>; 103 #interrupt-cells = <1>;
102 #address-cells = <0>; 104 #address-cells = <0>;
103 #size-cells = <0>; 105 #size-cells = <0>;
104 interrupt-map = </*TXEOB*/ 0 &UIC0 a 4 106 interrupt-map = </*TXEOB*/ 0x0 &UIC0 0xa 0x4
105 /*RXEOB*/ 1 &UIC0 b 4 107 /*RXEOB*/ 0x1 &UIC0 0xb 0x4
106 /*SERR*/ 2 &UIC1 0 4 108 /*SERR*/ 0x2 &UIC1 0x0 0x4
107 /*TXDE*/ 3 &UIC1 1 4 109 /*TXDE*/ 0x3 &UIC1 0x1 0x4
108 /*RXDE*/ 4 &UIC1 2 4>; 110 /*RXDE*/ 0x4 &UIC1 0x2 0x4>;
109 interrupt-map-mask = <ffffffff>; 111 interrupt-map-mask = <0xffffffff>;
110 }; 112 };
111 113
112 POB0: opb { 114 POB0: opb {
113 compatible = "ibm,opb-405exr", "ibm,opb"; 115 compatible = "ibm,opb-405exr", "ibm,opb";
114 #address-cells = <1>; 116 #address-cells = <1>;
115 #size-cells = <1>; 117 #size-cells = <1>;
116 ranges = <80000000 80000000 10000000 118 ranges = <0x80000000 0x80000000 0x10000000
117 ef600000 ef600000 a00000 119 0xef600000 0xef600000 0x00a00000
118 f0000000 f0000000 10000000>; 120 0xf0000000 0xf0000000 0x10000000>;
119 dcr-reg = <0a0 5>; 121 dcr-reg = <0x0a0 0x005>;
120 clock-frequency = <0>; /* Filled in by U-Boot */ 122 clock-frequency = <0>; /* Filled in by U-Boot */
121 123
122 EBC0: ebc { 124 EBC0: ebc {
123 compatible = "ibm,ebc-405exr", "ibm,ebc"; 125 compatible = "ibm,ebc-405exr", "ibm,ebc";
124 dcr-reg = <012 2>; 126 dcr-reg = <0x012 0x002>;
125 #address-cells = <2>; 127 #address-cells = <2>;
126 #size-cells = <1>; 128 #size-cells = <1>;
127 clock-frequency = <0>; /* Filled in by U-Boot */ 129 clock-frequency = <0>; /* Filled in by U-Boot */
128 /* ranges property is supplied by U-Boot */ 130 /* ranges property is supplied by U-Boot */
129 interrupts = <5 1>; 131 interrupts = <0x5 0x1>;
130 interrupt-parent = <&UIC1>; 132 interrupt-parent = <&UIC1>;
131 133
132 nor_flash@0,0 { 134 nor_flash@0,0 {
133 compatible = "amd,s29gl512n", "cfi-flash"; 135 compatible = "amd,s29gl512n", "cfi-flash";
134 bank-width = <2>; 136 bank-width = <2>;
135 reg = <0 000000 4000000>; 137 reg = <0x00000000 0x00000000 0x04000000>;
136 #address-cells = <1>; 138 #address-cells = <1>;
137 #size-cells = <1>; 139 #size-cells = <1>;
138 partition@0 { 140 partition@0 {
139 label = "kernel"; 141 label = "kernel";
140 reg = <0 200000>; 142 reg = <0x00000000 0x00200000>;
141 }; 143 };
142 partition@200000 { 144 partition@200000 {
143 label = "root"; 145 label = "root";
144 reg = <200000 200000>; 146 reg = <0x00200000 0x00200000>;
145 }; 147 };
146 partition@400000 { 148 partition@400000 {
147 label = "user"; 149 label = "user";
148 reg = <400000 3b60000>; 150 reg = <0x00400000 0x03b60000>;
149 }; 151 };
150 partition@3f60000 { 152 partition@3f60000 {
151 label = "env"; 153 label = "env";
152 reg = <3f60000 40000>; 154 reg = <0x03f60000 0x00040000>;
153 }; 155 };
154 partition@3fa0000 { 156 partition@3fa0000 {
155 label = "u-boot"; 157 label = "u-boot";
156 reg = <3fa0000 60000>; 158 reg = <0x03fa0000 0x00060000>;
157 }; 159 };
158 }; 160 };
159 }; 161 };
@@ -161,68 +163,68 @@
161 UART0: serial@ef600200 { 163 UART0: serial@ef600200 {
162 device_type = "serial"; 164 device_type = "serial";
163 compatible = "ns16550"; 165 compatible = "ns16550";
164 reg = <ef600200 8>; 166 reg = <0xef600200 0x00000008>;
165 virtual-reg = <ef600200>; 167 virtual-reg = <0xef600200>;
166 clock-frequency = <0>; /* Filled in by U-Boot */ 168 clock-frequency = <0>; /* Filled in by U-Boot */
167 current-speed = <0>; 169 current-speed = <0>;
168 interrupt-parent = <&UIC0>; 170 interrupt-parent = <&UIC0>;
169 interrupts = <1a 4>; 171 interrupts = <0x1a 0x4>;
170 }; 172 };
171 173
172 UART1: serial@ef600300 { 174 UART1: serial@ef600300 {
173 device_type = "serial"; 175 device_type = "serial";
174 compatible = "ns16550"; 176 compatible = "ns16550";
175 reg = <ef600300 8>; 177 reg = <0xef600300 0x00000008>;
176 virtual-reg = <ef600300>; 178 virtual-reg = <0xef600300>;
177 clock-frequency = <0>; /* Filled in by U-Boot */ 179 clock-frequency = <0>; /* Filled in by U-Boot */
178 current-speed = <0>; 180 current-speed = <0>;
179 interrupt-parent = <&UIC0>; 181 interrupt-parent = <&UIC0>;
180 interrupts = <1 4>; 182 interrupts = <0x1 0x4>;
181 }; 183 };
182 184
183 IIC0: i2c@ef600400 { 185 IIC0: i2c@ef600400 {
184 compatible = "ibm,iic-405exr", "ibm,iic"; 186 compatible = "ibm,iic-405exr", "ibm,iic";
185 reg = <ef600400 14>; 187 reg = <0xef600400 0x00000014>;
186 interrupt-parent = <&UIC0>; 188 interrupt-parent = <&UIC0>;
187 interrupts = <2 4>; 189 interrupts = <0x2 0x4>;
188 }; 190 };
189 191
190 IIC1: i2c@ef600500 { 192 IIC1: i2c@ef600500 {
191 compatible = "ibm,iic-405exr", "ibm,iic"; 193 compatible = "ibm,iic-405exr", "ibm,iic";
192 reg = <ef600500 14>; 194 reg = <0xef600500 0x00000014>;
193 interrupt-parent = <&UIC0>; 195 interrupt-parent = <&UIC0>;
194 interrupts = <7 4>; 196 interrupts = <0x7 0x4>;
195 }; 197 };
196 198
197 199
198 RGMII0: emac-rgmii@ef600b00 { 200 RGMII0: emac-rgmii@ef600b00 {
199 compatible = "ibm,rgmii-405exr", "ibm,rgmii"; 201 compatible = "ibm,rgmii-405exr", "ibm,rgmii";
200 reg = <ef600b00 104>; 202 reg = <0xef600b00 0x00000104>;
201 has-mdio; 203 has-mdio;
202 }; 204 };
203 205
204 EMAC0: ethernet@ef600900 { 206 EMAC0: ethernet@ef600900 {
205 linux,network-index = <0>; 207 linux,network-index = <0x0>;
206 device_type = "network"; 208 device_type = "network";
207 compatible = "ibm,emac-405exr", "ibm,emac4"; 209 compatible = "ibm,emac-405exr", "ibm,emac4";
208 interrupt-parent = <&EMAC0>; 210 interrupt-parent = <&EMAC0>;
209 interrupts = <0 1>; 211 interrupts = <0x0 0x1>;
210 #interrupt-cells = <1>; 212 #interrupt-cells = <1>;
211 #address-cells = <0>; 213 #address-cells = <0>;
212 #size-cells = <0>; 214 #size-cells = <0>;
213 interrupt-map = </*Status*/ 0 &UIC0 18 4 215 interrupt-map = </*Status*/ 0x0 &UIC0 0x18 0x4
214 /*Wake*/ 1 &UIC1 1d 4>; 216 /*Wake*/ 0x1 &UIC1 0x1d 0x4>;
215 reg = <ef600900 70>; 217 reg = <0xef600900 0x00000070>;
216 local-mac-address = [000000000000]; /* Filled in by U-Boot */ 218 local-mac-address = [000000000000]; /* Filled in by U-Boot */
217 mal-device = <&MAL0>; 219 mal-device = <&MAL0>;
218 mal-tx-channel = <0>; 220 mal-tx-channel = <0>;
219 mal-rx-channel = <0>; 221 mal-rx-channel = <0>;
220 cell-index = <0>; 222 cell-index = <0>;
221 max-frame-size = <2328>; 223 max-frame-size = <9000>;
222 rx-fifo-size = <1000>; 224 rx-fifo-size = <4096>;
223 tx-fifo-size = <800>; 225 tx-fifo-size = <2048>;
224 phy-mode = "rgmii"; 226 phy-mode = "rgmii";
225 phy-map = <00000000>; 227 phy-map = <0x00000000>;
226 rgmii-device = <&RGMII0>; 228 rgmii-device = <&RGMII0>;
227 rgmii-channel = <0>; 229 rgmii-channel = <0>;
228 has-inverted-stacr-oc; 230 has-inverted-stacr-oc;
@@ -237,23 +239,23 @@
237 #address-cells = <3>; 239 #address-cells = <3>;
238 compatible = "ibm,plb-pciex-405ex", "ibm,plb-pciex"; 240 compatible = "ibm,plb-pciex-405ex", "ibm,plb-pciex";
239 primary; 241 primary;
240 port = <0>; /* port number */ 242 port = <0x0>; /* port number */
241 reg = <a0000000 20000000 /* Config space access */ 243 reg = <0xa0000000 0x20000000 /* Config space access */
242 ef000000 00001000>; /* Registers */ 244 0xef000000 0x00001000>; /* Registers */
243 dcr-reg = <040 020>; 245 dcr-reg = <0x040 0x020>;
244 sdr-base = <400>; 246 sdr-base = <0x400>;
245 247
246 /* Outbound ranges, one memory and one IO, 248 /* Outbound ranges, one memory and one IO,
247 * later cannot be changed 249 * later cannot be changed
248 */ 250 */
249 ranges = <02000000 0 80000000 90000000 0 08000000 251 ranges = <0x02000000 0x00000000 0x80000000 0x90000000 0x00000000 0x08000000
250 01000000 0 00000000 e0000000 0 00010000>; 252 0x01000000 0x00000000 0x00000000 0xe0000000 0x00000000 0x00010000>;
251 253
252 /* Inbound 2GB range starting at 0 */ 254 /* Inbound 2GB range starting at 0 */
253 dma-ranges = <42000000 0 0 0 0 80000000>; 255 dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x80000000>;
254 256
255 /* This drives busses 0x00 to 0x3f */ 257 /* This drives busses 0x00 to 0x3f */
256 bus-range = <00 3f>; 258 bus-range = <0x0 0x3f>;
257 259
258 /* Legacy interrupts (note the weird polarity, the bridge seems 260 /* Legacy interrupts (note the weird polarity, the bridge seems
259 * to invert PCIe legacy interrupts). 261 * to invert PCIe legacy interrupts).
@@ -263,12 +265,12 @@
263 * below are basically de-swizzled numbers. 265 * below are basically de-swizzled numbers.
264 * The real slot is on idsel 0, so the swizzling is 1:1 266 * The real slot is on idsel 0, so the swizzling is 1:1
265 */ 267 */
266 interrupt-map-mask = <0000 0 0 7>; 268 interrupt-map-mask = <0x0 0x0 0x0 0x7>;
267 interrupt-map = < 269 interrupt-map = <
268 0000 0 0 1 &UIC2 0 4 /* swizzled int A */ 270 0x0 0x0 0x0 0x1 &UIC2 0x0 0x4 /* swizzled int A */
269 0000 0 0 2 &UIC2 1 4 /* swizzled int B */ 271 0x0 0x0 0x0 0x2 &UIC2 0x1 0x4 /* swizzled int B */
270 0000 0 0 3 &UIC2 2 4 /* swizzled int C */ 272 0x0 0x0 0x0 0x3 &UIC2 0x2 0x4 /* swizzled int C */
271 0000 0 0 4 &UIC2 3 4 /* swizzled int D */>; 273 0x0 0x0 0x0 0x4 &UIC2 0x3 0x4 /* swizzled int D */>;
272 }; 274 };
273 }; 275 };
274}; 276};
diff --git a/arch/powerpc/boot/dts/holly.dts b/arch/powerpc/boot/dts/holly.dts
index b5d87895fe06..f87fe7b9ced9 100644
--- a/arch/powerpc/boot/dts/holly.dts
+++ b/arch/powerpc/boot/dts/holly.dts
@@ -10,6 +10,8 @@
10 * any warranty of any kind, whether express or implied. 10 * any warranty of any kind, whether express or implied.
11 */ 11 */
12 12
13/dts-v1/;
14
13/ { 15/ {
14 model = "41K7339"; 16 model = "41K7339";
15 compatible = "ibm,holly"; 17 compatible = "ibm,holly";
@@ -21,22 +23,22 @@
21 #size-cells =<0>; 23 #size-cells =<0>;
22 PowerPC,750CL@0 { 24 PowerPC,750CL@0 {
23 device_type = "cpu"; 25 device_type = "cpu";
24 reg = <0>; 26 reg = <0x00000000>;
25 d-cache-line-size = <20>; 27 d-cache-line-size = <32>;
26 i-cache-line-size = <20>; 28 i-cache-line-size = <32>;
27 d-cache-size = <8000>; 29 d-cache-size = <32768>;
28 i-cache-size = <8000>; 30 i-cache-size = <32768>;
29 d-cache-sets = <80>; 31 d-cache-sets = <128>;
30 i-cache-sets = <80>; 32 i-cache-sets = <128>;
31 timebase-frequency = <2faf080>; 33 timebase-frequency = <50000000>;
32 clock-frequency = <23c34600>; 34 clock-frequency = <600000000>;
33 bus-frequency = <bebc200>; 35 bus-frequency = <200000000>;
34 }; 36 };
35 }; 37 };
36 38
37 memory@0 { 39 memory@0 {
38 device_type = "memory"; 40 device_type = "memory";
39 reg = <00000000 20000000>; 41 reg = <0x00000000 0x20000000>;
40 }; 42 };
41 43
42 tsi109@c0000000 { 44 tsi109@c0000000 {
@@ -44,33 +46,33 @@
44 compatible = "tsi109-bridge", "tsi108-bridge"; 46 compatible = "tsi109-bridge", "tsi108-bridge";
45 #address-cells = <1>; 47 #address-cells = <1>;
46 #size-cells = <1>; 48 #size-cells = <1>;
47 ranges = <00000000 c0000000 00010000>; 49 ranges = <0x00000000 0xc0000000 0x00010000>;
48 reg = <c0000000 00010000>; 50 reg = <0xc0000000 0x00010000>;
49 51
50 i2c@7000 { 52 i2c@7000 {
51 device_type = "i2c"; 53 device_type = "i2c";
52 compatible = "tsi109-i2c", "tsi108-i2c"; 54 compatible = "tsi109-i2c", "tsi108-i2c";
53 interrupt-parent = <&MPIC>; 55 interrupt-parent = <&MPIC>;
54 interrupts = <e 2>; 56 interrupts = <0xe 0x2>;
55 reg = <7000 400>; 57 reg = <0x00007000 0x00000400>;
56 }; 58 };
57 59
58 MDIO: mdio@6000 { 60 MDIO: mdio@6000 {
59 device_type = "mdio"; 61 device_type = "mdio";
60 compatible = "tsi109-mdio", "tsi108-mdio"; 62 compatible = "tsi109-mdio", "tsi108-mdio";
61 reg = <6000 50>; 63 reg = <0x00006000 0x00000050>;
62 #address-cells = <1>; 64 #address-cells = <1>;
63 #size-cells = <0>; 65 #size-cells = <0>;
64 66
65 PHY1: ethernet-phy@1 { 67 PHY1: ethernet-phy@1 {
66 compatible = "bcm5461a"; 68 compatible = "bcm5461a";
67 reg = <1>; 69 reg = <0x00000001>;
68 txc-rxc-delay-disable; 70 txc-rxc-delay-disable;
69 }; 71 };
70 72
71 PHY2: ethernet-phy@2 { 73 PHY2: ethernet-phy@2 {
72 compatible = "bcm5461a"; 74 compatible = "bcm5461a";
73 reg = <2>; 75 reg = <0x00000002>;
74 txc-rxc-delay-disable; 76 txc-rxc-delay-disable;
75 }; 77 };
76 }; 78 };
@@ -80,10 +82,10 @@
80 compatible = "tsi109-ethernet", "tsi108-ethernet"; 82 compatible = "tsi109-ethernet", "tsi108-ethernet";
81 #address-cells = <1>; 83 #address-cells = <1>;
82 #size-cells = <0>; 84 #size-cells = <0>;
83 reg = <6000 200>; 85 reg = <0x00006000 0x00000200>;
84 local-mac-address = [ 00 00 00 00 00 00 ]; 86 local-mac-address = [ 00 00 00 00 00 00 ];
85 interrupt-parent = <&MPIC>; 87 interrupt-parent = <&MPIC>;
86 interrupts = <10 2>; 88 interrupts = <0x10 0x2>;
87 mdio-handle = <&MDIO>; 89 mdio-handle = <&MDIO>;
88 phy-handle = <&PHY1>; 90 phy-handle = <&PHY1>;
89 }; 91 };
@@ -93,10 +95,10 @@
93 compatible = "tsi109-ethernet", "tsi108-ethernet"; 95 compatible = "tsi109-ethernet", "tsi108-ethernet";
94 #address-cells = <1>; 96 #address-cells = <1>;
95 #size-cells = <0>; 97 #size-cells = <0>;
96 reg = <6400 200>; 98 reg = <0x00006400 0x00000200>;
97 local-mac-address = [ 00 00 00 00 00 00 ]; 99 local-mac-address = [ 00 00 00 00 00 00 ];
98 interrupt-parent = <&MPIC>; 100 interrupt-parent = <&MPIC>;
99 interrupts = <11 2>; 101 interrupts = <0x11 0x2>;
100 mdio-handle = <&MDIO>; 102 mdio-handle = <&MDIO>;
101 phy-handle = <&PHY2>; 103 phy-handle = <&PHY2>;
102 }; 104 };
@@ -104,23 +106,23 @@
104 serial@7808 { 106 serial@7808 {
105 device_type = "serial"; 107 device_type = "serial";
106 compatible = "ns16550"; 108 compatible = "ns16550";
107 reg = <7808 200>; 109 reg = <0x00007808 0x00000200>;
108 virtual-reg = <c0007808>; 110 virtual-reg = <0xc0007808>;
109 clock-frequency = <3F9C6000>; 111 clock-frequency = <1067212800>;
110 current-speed = <1c200>; 112 current-speed = <115200>;
111 interrupt-parent = <&MPIC>; 113 interrupt-parent = <&MPIC>;
112 interrupts = <c 2>; 114 interrupts = <0xc 0x2>;
113 }; 115 };
114 116
115 serial@7c08 { 117 serial@7c08 {
116 device_type = "serial"; 118 device_type = "serial";
117 compatible = "ns16550"; 119 compatible = "ns16550";
118 reg = <7c08 200>; 120 reg = <0x00007c08 0x00000200>;
119 virtual-reg = <c0007c08>; 121 virtual-reg = <0xc0007c08>;
120 clock-frequency = <3F9C6000>; 122 clock-frequency = <1067212800>;
121 current-speed = <1c200>; 123 current-speed = <115200>;
122 interrupt-parent = <&MPIC>; 124 interrupt-parent = <&MPIC>;
123 interrupts = <d 2>; 125 interrupts = <0xd 0x2>;
124 }; 126 };
125 127
126 MPIC: pic@7400 { 128 MPIC: pic@7400 {
@@ -128,7 +130,7 @@
128 compatible = "chrp,open-pic"; 130 compatible = "chrp,open-pic";
129 interrupt-controller; 131 interrupt-controller;
130 #interrupt-cells = <2>; 132 #interrupt-cells = <2>;
131 reg = <7400 400>; 133 reg = <0x00007400 0x00000400>;
132 big-endian; 134 big-endian;
133 }; 135 };
134 136
@@ -138,42 +140,42 @@
138 #interrupt-cells = <1>; 140 #interrupt-cells = <1>;
139 #size-cells = <2>; 141 #size-cells = <2>;
140 #address-cells = <3>; 142 #address-cells = <3>;
141 reg = <1000 1000>; 143 reg = <0x00001000 0x00001000>;
142 bus-range = <0 0>; 144 bus-range = <0x0 0x0>;
143 /*----------------------------------------------------+ 145 /*----------------------------------------------------+
144 | PCI memory range. 146 | PCI memory range.
145 | 01 denotes I/O space 147 | 01 denotes I/O space
146 | 02 denotes 32-bit memory space 148 | 02 denotes 32-bit memory space
147 +----------------------------------------------------*/ 149 +----------------------------------------------------*/
148 ranges = <02000000 0 40000000 40000000 0 10000000 150 ranges = <0x02000000 0x00000000 0x40000000 0x40000000 0x00000000 0x10000000
149 01000000 0 00000000 7e000000 0 00010000>; 151 0x01000000 0x00000000 0x00000000 0x7e000000 0x00000000 0x00010000>;
150 clock-frequency = <7f28154>; 152 clock-frequency = <133333332>;
151 interrupt-parent = <&MPIC>; 153 interrupt-parent = <&MPIC>;
152 interrupts = <17 2>; 154 interrupts = <0x17 0x2>;
153 interrupt-map-mask = <f800 0 0 7>; 155 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
154 /*----------------------------------------------------+ 156 /*----------------------------------------------------+
155 | The INTA, INTB, INTC, INTD are shared. 157 | The INTA, INTB, INTC, INTD are shared.
156 +----------------------------------------------------*/ 158 +----------------------------------------------------*/
157 interrupt-map = < 159 interrupt-map = <
158 0800 0 0 1 &RT0 24 0 160 0x800 0x0 0x0 0x1 &RT0 0x24 0x0
159 0800 0 0 2 &RT0 25 0 161 0x800 0x0 0x0 0x2 &RT0 0x25 0x0
160 0800 0 0 3 &RT0 26 0 162 0x800 0x0 0x0 0x3 &RT0 0x26 0x0
161 0800 0 0 4 &RT0 27 0 163 0x800 0x0 0x0 0x4 &RT0 0x27 0x0
162 164
163 1000 0 0 1 &RT0 25 0 165 0x1000 0x0 0x0 0x1 &RT0 0x25 0x0
164 1000 0 0 2 &RT0 26 0 166 0x1000 0x0 0x0 0x2 &RT0 0x26 0x0
165 1000 0 0 3 &RT0 27 0 167 0x1000 0x0 0x0 0x3 &RT0 0x27 0x0
166 1000 0 0 4 &RT0 24 0 168 0x1000 0x0 0x0 0x4 &RT0 0x24 0x0
167 169
168 1800 0 0 1 &RT0 26 0 170 0x1800 0x0 0x0 0x1 &RT0 0x26 0x0
169 1800 0 0 2 &RT0 27 0 171 0x1800 0x0 0x0 0x2 &RT0 0x27 0x0
170 1800 0 0 3 &RT0 24 0 172 0x1800 0x0 0x0 0x3 &RT0 0x24 0x0
171 1800 0 0 4 &RT0 25 0 173 0x1800 0x0 0x0 0x4 &RT0 0x25 0x0
172 174
173 2000 0 0 1 &RT0 27 0 175 0x2000 0x0 0x0 0x1 &RT0 0x27 0x0
174 2000 0 0 2 &RT0 24 0 176 0x2000 0x0 0x0 0x2 &RT0 0x24 0x0
175 2000 0 0 3 &RT0 25 0 177 0x2000 0x0 0x0 0x3 &RT0 0x25 0x0
176 2000 0 0 4 &RT0 26 0 178 0x2000 0x0 0x0 0x4 &RT0 0x26 0x0
177 >; 179 >;
178 180
179 RT0: router@1180 { 181 RT0: router@1180 {
@@ -183,7 +185,7 @@
183 clock-frequency = <0>; 185 clock-frequency = <0>;
184 #address-cells = <0>; 186 #address-cells = <0>;
185 #interrupt-cells = <2>; 187 #interrupt-cells = <2>;
186 interrupts = <17 2>; 188 interrupts = <0x17 0x2>;
187 interrupt-parent = <&MPIC>; 189 interrupt-parent = <&MPIC>;
188 }; 190 };
189 }; 191 };
diff --git a/arch/powerpc/boot/dts/katmai.dts b/arch/powerpc/boot/dts/katmai.dts
index cc2873a531d2..b94bf61b9bcc 100644
--- a/arch/powerpc/boot/dts/katmai.dts
+++ b/arch/powerpc/boot/dts/katmai.dts
@@ -12,12 +12,14 @@
12 * any warranty of any kind, whether express or implied. 12 * any warranty of any kind, whether express or implied.
13 */ 13 */
14 14
15/dts-v1/;
16
15/ { 17/ {
16 #address-cells = <2>; 18 #address-cells = <2>;
17 #size-cells = <1>; 19 #size-cells = <1>;
18 model = "amcc,katmai"; 20 model = "amcc,katmai";
19 compatible = "amcc,katmai"; 21 compatible = "amcc,katmai";
20 dcr-parent = <&/cpus/cpu@0>; 22 dcr-parent = <&{/cpus/cpu@0}>;
21 23
22 aliases { 24 aliases {
23 ethernet0 = &EMAC0; 25 ethernet0 = &EMAC0;
@@ -33,13 +35,13 @@
33 cpu@0 { 35 cpu@0 {
34 device_type = "cpu"; 36 device_type = "cpu";
35 model = "PowerPC,440SPe"; 37 model = "PowerPC,440SPe";
36 reg = <0>; 38 reg = <0x00000000>;
37 clock-frequency = <0>; /* Filled in by zImage */ 39 clock-frequency = <0>; /* Filled in by zImage */
38 timebase-frequency = <0>; /* Filled in by zImage */ 40 timebase-frequency = <0>; /* Filled in by zImage */
39 i-cache-line-size = <20>; 41 i-cache-line-size = <32>;
40 d-cache-line-size = <20>; 42 d-cache-line-size = <32>;
41 i-cache-size = <8000>; 43 i-cache-size = <32768>;
42 d-cache-size = <8000>; 44 d-cache-size = <32768>;
43 dcr-controller; 45 dcr-controller;
44 dcr-access-method = "native"; 46 dcr-access-method = "native";
45 }; 47 };
@@ -47,14 +49,14 @@
47 49
48 memory { 50 memory {
49 device_type = "memory"; 51 device_type = "memory";
50 reg = <0 0 0>; /* Filled in by zImage */ 52 reg = <0x00000000 0x00000000 0x00000000>; /* Filled in by zImage */
51 }; 53 };
52 54
53 UIC0: interrupt-controller0 { 55 UIC0: interrupt-controller0 {
54 compatible = "ibm,uic-440spe","ibm,uic"; 56 compatible = "ibm,uic-440spe","ibm,uic";
55 interrupt-controller; 57 interrupt-controller;
56 cell-index = <0>; 58 cell-index = <0>;
57 dcr-reg = <0c0 009>; 59 dcr-reg = <0x0c0 0x009>;
58 #address-cells = <0>; 60 #address-cells = <0>;
59 #size-cells = <0>; 61 #size-cells = <0>;
60 #interrupt-cells = <2>; 62 #interrupt-cells = <2>;
@@ -64,11 +66,11 @@
64 compatible = "ibm,uic-440spe","ibm,uic"; 66 compatible = "ibm,uic-440spe","ibm,uic";
65 interrupt-controller; 67 interrupt-controller;
66 cell-index = <1>; 68 cell-index = <1>;
67 dcr-reg = <0d0 009>; 69 dcr-reg = <0x0d0 0x009>;
68 #address-cells = <0>; 70 #address-cells = <0>;
69 #size-cells = <0>; 71 #size-cells = <0>;
70 #interrupt-cells = <2>; 72 #interrupt-cells = <2>;
71 interrupts = <1e 4 1f 4>; /* cascade */ 73 interrupts = <0x1e 0x4 0x1f 0x4>; /* cascade */
72 interrupt-parent = <&UIC0>; 74 interrupt-parent = <&UIC0>;
73 }; 75 };
74 76
@@ -76,11 +78,11 @@
76 compatible = "ibm,uic-440spe","ibm,uic"; 78 compatible = "ibm,uic-440spe","ibm,uic";
77 interrupt-controller; 79 interrupt-controller;
78 cell-index = <2>; 80 cell-index = <2>;
79 dcr-reg = <0e0 009>; 81 dcr-reg = <0x0e0 0x009>;
80 #address-cells = <0>; 82 #address-cells = <0>;
81 #size-cells = <0>; 83 #size-cells = <0>;
82 #interrupt-cells = <2>; 84 #interrupt-cells = <2>;
83 interrupts = <a 4 b 4>; /* cascade */ 85 interrupts = <0xa 0x4 0xb 0x4>; /* cascade */
84 interrupt-parent = <&UIC0>; 86 interrupt-parent = <&UIC0>;
85 }; 87 };
86 88
@@ -88,22 +90,22 @@
88 compatible = "ibm,uic-440spe","ibm,uic"; 90 compatible = "ibm,uic-440spe","ibm,uic";
89 interrupt-controller; 91 interrupt-controller;
90 cell-index = <3>; 92 cell-index = <3>;
91 dcr-reg = <0f0 009>; 93 dcr-reg = <0x0f0 0x009>;
92 #address-cells = <0>; 94 #address-cells = <0>;
93 #size-cells = <0>; 95 #size-cells = <0>;
94 #interrupt-cells = <2>; 96 #interrupt-cells = <2>;
95 interrupts = <10 4 11 4>; /* cascade */ 97 interrupts = <0x10 0x4 0x11 0x4>; /* cascade */
96 interrupt-parent = <&UIC0>; 98 interrupt-parent = <&UIC0>;
97 }; 99 };
98 100
99 SDR0: sdr { 101 SDR0: sdr {
100 compatible = "ibm,sdr-440spe"; 102 compatible = "ibm,sdr-440spe";
101 dcr-reg = <00e 002>; 103 dcr-reg = <0x00e 0x002>;
102 }; 104 };
103 105
104 CPR0: cpr { 106 CPR0: cpr {
105 compatible = "ibm,cpr-440spe"; 107 compatible = "ibm,cpr-440spe";
106 dcr-reg = <00c 002>; 108 dcr-reg = <0x00c 0x002>;
107 }; 109 };
108 110
109 plb { 111 plb {
@@ -115,108 +117,108 @@
115 117
116 SDRAM0: sdram { 118 SDRAM0: sdram {
117 compatible = "ibm,sdram-440spe", "ibm,sdram-405gp"; 119 compatible = "ibm,sdram-440spe", "ibm,sdram-405gp";
118 dcr-reg = <010 2>; 120 dcr-reg = <0x010 0x002>;
119 }; 121 };
120 122
121 MAL0: mcmal { 123 MAL0: mcmal {
122 compatible = "ibm,mcmal-440spe", "ibm,mcmal2"; 124 compatible = "ibm,mcmal-440spe", "ibm,mcmal2";
123 dcr-reg = <180 62>; 125 dcr-reg = <0x180 0x062>;
124 num-tx-chans = <2>; 126 num-tx-chans = <2>;
125 num-rx-chans = <1>; 127 num-rx-chans = <1>;
126 interrupt-parent = <&MAL0>; 128 interrupt-parent = <&MAL0>;
127 interrupts = <0 1 2 3 4>; 129 interrupts = <0x0 0x1 0x2 0x3 0x4>;
128 #interrupt-cells = <1>; 130 #interrupt-cells = <1>;
129 #address-cells = <0>; 131 #address-cells = <0>;
130 #size-cells = <0>; 132 #size-cells = <0>;
131 interrupt-map = </*TXEOB*/ 0 &UIC1 6 4 133 interrupt-map = </*TXEOB*/ 0x0 &UIC1 0x6 0x4
132 /*RXEOB*/ 1 &UIC1 7 4 134 /*RXEOB*/ 0x1 &UIC1 0x7 0x4
133 /*SERR*/ 2 &UIC1 1 4 135 /*SERR*/ 0x2 &UIC1 0x1 0x4
134 /*TXDE*/ 3 &UIC1 2 4 136 /*TXDE*/ 0x3 &UIC1 0x2 0x4
135 /*RXDE*/ 4 &UIC1 3 4>; 137 /*RXDE*/ 0x4 &UIC1 0x3 0x4>;
136 }; 138 };
137 139
138 POB0: opb { 140 POB0: opb {
139 compatible = "ibm,opb-440spe", "ibm,opb-440gp", "ibm,opb"; 141 compatible = "ibm,opb-440spe", "ibm,opb-440gp", "ibm,opb";
140 #address-cells = <1>; 142 #address-cells = <1>;
141 #size-cells = <1>; 143 #size-cells = <1>;
142 ranges = <00000000 4 e0000000 20000000>; 144 ranges = <0x00000000 0x00000004 0xe0000000 0x20000000>;
143 clock-frequency = <0>; /* Filled in by zImage */ 145 clock-frequency = <0>; /* Filled in by zImage */
144 146
145 EBC0: ebc { 147 EBC0: ebc {
146 compatible = "ibm,ebc-440spe", "ibm,ebc-440gp", "ibm,ebc"; 148 compatible = "ibm,ebc-440spe", "ibm,ebc-440gp", "ibm,ebc";
147 dcr-reg = <012 2>; 149 dcr-reg = <0x012 0x002>;
148 #address-cells = <2>; 150 #address-cells = <2>;
149 #size-cells = <1>; 151 #size-cells = <1>;
150 clock-frequency = <0>; /* Filled in by zImage */ 152 clock-frequency = <0>; /* Filled in by zImage */
151 interrupts = <5 1>; 153 interrupts = <0x5 0x1>;
152 interrupt-parent = <&UIC1>; 154 interrupt-parent = <&UIC1>;
153 }; 155 };
154 156
155 UART0: serial@10000200 { 157 UART0: serial@10000200 {
156 device_type = "serial"; 158 device_type = "serial";
157 compatible = "ns16550"; 159 compatible = "ns16550";
158 reg = <10000200 8>; 160 reg = <0x10000200 0x00000008>;
159 virtual-reg = <a0000200>; 161 virtual-reg = <0xa0000200>;
160 clock-frequency = <0>; /* Filled in by zImage */ 162 clock-frequency = <0>; /* Filled in by zImage */
161 current-speed = <1c200>; 163 current-speed = <115200>;
162 interrupt-parent = <&UIC0>; 164 interrupt-parent = <&UIC0>;
163 interrupts = <0 4>; 165 interrupts = <0x0 0x4>;
164 }; 166 };
165 167
166 UART1: serial@10000300 { 168 UART1: serial@10000300 {
167 device_type = "serial"; 169 device_type = "serial";
168 compatible = "ns16550"; 170 compatible = "ns16550";
169 reg = <10000300 8>; 171 reg = <0x10000300 0x00000008>;
170 virtual-reg = <a0000300>; 172 virtual-reg = <0xa0000300>;
171 clock-frequency = <0>; 173 clock-frequency = <0>;
172 current-speed = <0>; 174 current-speed = <0>;
173 interrupt-parent = <&UIC0>; 175 interrupt-parent = <&UIC0>;
174 interrupts = <1 4>; 176 interrupts = <0x1 0x4>;
175 }; 177 };
176 178
177 179
178 UART2: serial@10000600 { 180 UART2: serial@10000600 {
179 device_type = "serial"; 181 device_type = "serial";
180 compatible = "ns16550"; 182 compatible = "ns16550";
181 reg = <10000600 8>; 183 reg = <0x10000600 0x00000008>;
182 virtual-reg = <a0000600>; 184 virtual-reg = <0xa0000600>;
183 clock-frequency = <0>; 185 clock-frequency = <0>;
184 current-speed = <0>; 186 current-speed = <0>;
185 interrupt-parent = <&UIC1>; 187 interrupt-parent = <&UIC1>;
186 interrupts = <5 4>; 188 interrupts = <0x5 0x4>;
187 }; 189 };
188 190
189 IIC0: i2c@10000400 { 191 IIC0: i2c@10000400 {
190 compatible = "ibm,iic-440spe", "ibm,iic-440gp", "ibm,iic"; 192 compatible = "ibm,iic-440spe", "ibm,iic-440gp", "ibm,iic";
191 reg = <10000400 14>; 193 reg = <0x10000400 0x00000014>;
192 interrupt-parent = <&UIC0>; 194 interrupt-parent = <&UIC0>;
193 interrupts = <2 4>; 195 interrupts = <0x2 0x4>;
194 }; 196 };
195 197
196 IIC1: i2c@10000500 { 198 IIC1: i2c@10000500 {
197 compatible = "ibm,iic-440spe", "ibm,iic-440gp", "ibm,iic"; 199 compatible = "ibm,iic-440spe", "ibm,iic-440gp", "ibm,iic";
198 reg = <10000500 14>; 200 reg = <0x10000500 0x00000014>;
199 interrupt-parent = <&UIC0>; 201 interrupt-parent = <&UIC0>;
200 interrupts = <3 4>; 202 interrupts = <0x3 0x4>;
201 }; 203 };
202 204
203 EMAC0: ethernet@10000800 { 205 EMAC0: ethernet@10000800 {
204 linux,network-index = <0>; 206 linux,network-index = <0x0>;
205 device_type = "network"; 207 device_type = "network";
206 compatible = "ibm,emac-440spe", "ibm,emac4"; 208 compatible = "ibm,emac-440spe", "ibm,emac4";
207 interrupt-parent = <&UIC1>; 209 interrupt-parent = <&UIC1>;
208 interrupts = <1c 4 1d 4>; 210 interrupts = <0x1c 0x4 0x1d 0x4>;
209 reg = <10000800 70>; 211 reg = <0x10000800 0x00000070>;
210 local-mac-address = [000000000000]; 212 local-mac-address = [000000000000];
211 mal-device = <&MAL0>; 213 mal-device = <&MAL0>;
212 mal-tx-channel = <0>; 214 mal-tx-channel = <0>;
213 mal-rx-channel = <0>; 215 mal-rx-channel = <0>;
214 cell-index = <0>; 216 cell-index = <0>;
215 max-frame-size = <2328>; 217 max-frame-size = <9000>;
216 rx-fifo-size = <1000>; 218 rx-fifo-size = <4096>;
217 tx-fifo-size = <800>; 219 tx-fifo-size = <2048>;
218 phy-mode = "gmii"; 220 phy-mode = "gmii";
219 phy-map = <00000000>; 221 phy-map = <0x00000000>;
220 has-inverted-stacr-oc; 222 has-inverted-stacr-oc;
221 has-new-stacr-staopc; 223 has-new-stacr-staopc;
222 }; 224 };
@@ -231,23 +233,23 @@
231 primary; 233 primary;
232 large-inbound-windows; 234 large-inbound-windows;
233 enable-msi-hole; 235 enable-msi-hole;
234 reg = <c 0ec00000 8 /* Config space access */ 236 reg = <0x0000000c 0x0ec00000 0x00000008 /* Config space access */
235 0 0 0 /* no IACK cycles */ 237 0x00000000 0x00000000 0x00000000 /* no IACK cycles */
236 c 0ed00000 4 /* Special cycles */ 238 0x0000000c 0x0ed00000 0x00000004 /* Special cycles */
237 c 0ec80000 100 /* Internal registers */ 239 0x0000000c 0x0ec80000 0x00000100 /* Internal registers */
238 c 0ec80100 fc>; /* Internal messaging registers */ 240 0x0000000c 0x0ec80100 0x000000fc>; /* Internal messaging registers */
239 241
240 /* Outbound ranges, one memory and one IO, 242 /* Outbound ranges, one memory and one IO,
241 * later cannot be changed 243 * later cannot be changed
242 */ 244 */
243 ranges = <02000000 0 80000000 0000000d 80000000 0 80000000 245 ranges = <0x02000000 0x00000000 0x80000000 0x0000000d 0x80000000 0x00000000 0x80000000
244 01000000 0 00000000 0000000c 08000000 0 00010000>; 246 0x01000000 0x00000000 0x00000000 0x0000000c 0x08000000 0x00000000 0x00010000>;
245 247
246 /* Inbound 2GB range starting at 0 */ 248 /* Inbound 2GB range starting at 0 */
247 dma-ranges = <42000000 0 0 0 0 0 80000000>; 249 dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x0 0x80000000>;
248 250
249 /* This drives busses 0 to 0xf */ 251 /* This drives busses 0 to 0xf */
250 bus-range = <0 f>; 252 bus-range = <0x0 0xf>;
251 253
252 /* 254 /*
253 * On Katmai, the following PCI-X interrupts signals 255 * On Katmai, the following PCI-X interrupts signals
@@ -258,13 +260,13 @@
258 * INTC: J2: 1-2 260 * INTC: J2: 1-2
259 * INTD: J1: 1-2 261 * INTD: J1: 1-2
260 */ 262 */
261 interrupt-map-mask = <f800 0 0 7>; 263 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
262 interrupt-map = < 264 interrupt-map = <
263 /* IDSEL 1 */ 265 /* IDSEL 1 */
264 0800 0 0 1 &UIC1 14 8 266 0x800 0x0 0x0 0x1 &UIC1 0x14 0x8
265 0800 0 0 2 &UIC1 13 8 267 0x800 0x0 0x0 0x2 &UIC1 0x13 0x8
266 0800 0 0 3 &UIC1 12 8 268 0x800 0x0 0x0 0x3 &UIC1 0x12 0x8
267 0800 0 0 4 &UIC1 11 8 269 0x800 0x0 0x0 0x4 &UIC1 0x11 0x8
268 >; 270 >;
269 }; 271 };
270 272
@@ -275,23 +277,23 @@
275 #address-cells = <3>; 277 #address-cells = <3>;
276 compatible = "ibm,plb-pciex-440spe", "ibm,plb-pciex"; 278 compatible = "ibm,plb-pciex-440spe", "ibm,plb-pciex";
277 primary; 279 primary;
278 port = <0>; /* port number */ 280 port = <0x0>; /* port number */
279 reg = <d 00000000 20000000 /* Config space access */ 281 reg = <0x0000000d 0x00000000 0x20000000 /* Config space access */
280 c 10000000 00001000>; /* Registers */ 282 0x0000000c 0x10000000 0x00001000>; /* Registers */
281 dcr-reg = <100 020>; 283 dcr-reg = <0x100 0x020>;
282 sdr-base = <300>; 284 sdr-base = <0x300>;
283 285
284 /* Outbound ranges, one memory and one IO, 286 /* Outbound ranges, one memory and one IO,
285 * later cannot be changed 287 * later cannot be changed
286 */ 288 */
287 ranges = <02000000 0 80000000 0000000e 00000000 0 80000000 289 ranges = <0x02000000 0x00000000 0x80000000 0x0000000e 0x00000000 0x00000000 0x80000000
288 01000000 0 00000000 0000000f 80000000 0 00010000>; 290 0x01000000 0x00000000 0x00000000 0x0000000f 0x80000000 0x00000000 0x00010000>;
289 291
290 /* Inbound 2GB range starting at 0 */ 292 /* Inbound 2GB range starting at 0 */
291 dma-ranges = <42000000 0 0 0 0 0 80000000>; 293 dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x0 0x80000000>;
292 294
293 /* This drives busses 10 to 0x1f */ 295 /* This drives busses 10 to 0x1f */
294 bus-range = <10 1f>; 296 bus-range = <0x10 0x1f>;
295 297
296 /* Legacy interrupts (note the weird polarity, the bridge seems 298 /* Legacy interrupts (note the weird polarity, the bridge seems
297 * to invert PCIe legacy interrupts). 299 * to invert PCIe legacy interrupts).
@@ -301,12 +303,12 @@
301 * below are basically de-swizzled numbers. 303 * below are basically de-swizzled numbers.
302 * The real slot is on idsel 0, so the swizzling is 1:1 304 * The real slot is on idsel 0, so the swizzling is 1:1
303 */ 305 */
304 interrupt-map-mask = <0000 0 0 7>; 306 interrupt-map-mask = <0x0 0x0 0x0 0x7>;
305 interrupt-map = < 307 interrupt-map = <
306 0000 0 0 1 &UIC3 0 4 /* swizzled int A */ 308 0x0 0x0 0x0 0x1 &UIC3 0x0 0x4 /* swizzled int A */
307 0000 0 0 2 &UIC3 1 4 /* swizzled int B */ 309 0x0 0x0 0x0 0x2 &UIC3 0x1 0x4 /* swizzled int B */
308 0000 0 0 3 &UIC3 2 4 /* swizzled int C */ 310 0x0 0x0 0x0 0x3 &UIC3 0x2 0x4 /* swizzled int C */
309 0000 0 0 4 &UIC3 3 4 /* swizzled int D */>; 311 0x0 0x0 0x0 0x4 &UIC3 0x3 0x4 /* swizzled int D */>;
310 }; 312 };
311 313
312 PCIE1: pciex@d20000000 { 314 PCIE1: pciex@d20000000 {
@@ -316,23 +318,23 @@
316 #address-cells = <3>; 318 #address-cells = <3>;
317 compatible = "ibm,plb-pciex-440spe", "ibm,plb-pciex"; 319 compatible = "ibm,plb-pciex-440spe", "ibm,plb-pciex";
318 primary; 320 primary;
319 port = <1>; /* port number */ 321 port = <0x1>; /* port number */
320 reg = <d 20000000 20000000 /* Config space access */ 322 reg = <0x0000000d 0x20000000 0x20000000 /* Config space access */
321 c 10001000 00001000>; /* Registers */ 323 0x0000000c 0x10001000 0x00001000>; /* Registers */
322 dcr-reg = <120 020>; 324 dcr-reg = <0x120 0x020>;
323 sdr-base = <340>; 325 sdr-base = <0x340>;
324 326
325 /* Outbound ranges, one memory and one IO, 327 /* Outbound ranges, one memory and one IO,
326 * later cannot be changed 328 * later cannot be changed
327 */ 329 */
328 ranges = <02000000 0 80000000 0000000e 80000000 0 80000000 330 ranges = <0x02000000 0x00000000 0x80000000 0x0000000e 0x80000000 0x00000000 0x80000000
329 01000000 0 00000000 0000000f 80010000 0 00010000>; 331 0x01000000 0x00000000 0x00000000 0x0000000f 0x80010000 0x00000000 0x00010000>;
330 332
331 /* Inbound 2GB range starting at 0 */ 333 /* Inbound 2GB range starting at 0 */
332 dma-ranges = <42000000 0 0 0 0 0 80000000>; 334 dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x0 0x80000000>;
333 335
334 /* This drives busses 10 to 0x1f */ 336 /* This drives busses 10 to 0x1f */
335 bus-range = <20 2f>; 337 bus-range = <0x20 0x2f>;
336 338
337 /* Legacy interrupts (note the weird polarity, the bridge seems 339 /* Legacy interrupts (note the weird polarity, the bridge seems
338 * to invert PCIe legacy interrupts). 340 * to invert PCIe legacy interrupts).
@@ -342,12 +344,12 @@
342 * below are basically de-swizzled numbers. 344 * below are basically de-swizzled numbers.
343 * The real slot is on idsel 0, so the swizzling is 1:1 345 * The real slot is on idsel 0, so the swizzling is 1:1
344 */ 346 */
345 interrupt-map-mask = <0000 0 0 7>; 347 interrupt-map-mask = <0x0 0x0 0x0 0x7>;
346 interrupt-map = < 348 interrupt-map = <
347 0000 0 0 1 &UIC3 4 4 /* swizzled int A */ 349 0x0 0x0 0x0 0x1 &UIC3 0x4 0x4 /* swizzled int A */
348 0000 0 0 2 &UIC3 5 4 /* swizzled int B */ 350 0x0 0x0 0x0 0x2 &UIC3 0x5 0x4 /* swizzled int B */
349 0000 0 0 3 &UIC3 6 4 /* swizzled int C */ 351 0x0 0x0 0x0 0x3 &UIC3 0x6 0x4 /* swizzled int C */
350 0000 0 0 4 &UIC3 7 4 /* swizzled int D */>; 352 0x0 0x0 0x0 0x4 &UIC3 0x7 0x4 /* swizzled int D */>;
351 }; 353 };
352 354
353 PCIE2: pciex@d40000000 { 355 PCIE2: pciex@d40000000 {
@@ -357,23 +359,23 @@
357 #address-cells = <3>; 359 #address-cells = <3>;
358 compatible = "ibm,plb-pciex-440spe", "ibm,plb-pciex"; 360 compatible = "ibm,plb-pciex-440spe", "ibm,plb-pciex";
359 primary; 361 primary;
360 port = <2>; /* port number */ 362 port = <0x2>; /* port number */
361 reg = <d 40000000 20000000 /* Config space access */ 363 reg = <0x0000000d 0x40000000 0x20000000 /* Config space access */
362 c 10002000 00001000>; /* Registers */ 364 0x0000000c 0x10002000 0x00001000>; /* Registers */
363 dcr-reg = <140 020>; 365 dcr-reg = <0x140 0x020>;
364 sdr-base = <370>; 366 sdr-base = <0x370>;
365 367
366 /* Outbound ranges, one memory and one IO, 368 /* Outbound ranges, one memory and one IO,
367 * later cannot be changed 369 * later cannot be changed
368 */ 370 */
369 ranges = <02000000 0 80000000 0000000f 00000000 0 80000000 371 ranges = <0x02000000 0x00000000 0x80000000 0x0000000f 0x00000000 0x00000000 0x80000000
370 01000000 0 00000000 0000000f 80020000 0 00010000>; 372 0x01000000 0x00000000 0x00000000 0x0000000f 0x80020000 0x00000000 0x00010000>;
371 373
372 /* Inbound 2GB range starting at 0 */ 374 /* Inbound 2GB range starting at 0 */
373 dma-ranges = <42000000 0 0 0 0 0 80000000>; 375 dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x0 0x80000000>;
374 376
375 /* This drives busses 10 to 0x1f */ 377 /* This drives busses 10 to 0x1f */
376 bus-range = <30 3f>; 378 bus-range = <0x30 0x3f>;
377 379
378 /* Legacy interrupts (note the weird polarity, the bridge seems 380 /* Legacy interrupts (note the weird polarity, the bridge seems
379 * to invert PCIe legacy interrupts). 381 * to invert PCIe legacy interrupts).
@@ -383,12 +385,12 @@
383 * below are basically de-swizzled numbers. 385 * below are basically de-swizzled numbers.
384 * The real slot is on idsel 0, so the swizzling is 1:1 386 * The real slot is on idsel 0, so the swizzling is 1:1
385 */ 387 */
386 interrupt-map-mask = <0000 0 0 7>; 388 interrupt-map-mask = <0x0 0x0 0x0 0x7>;
387 interrupt-map = < 389 interrupt-map = <
388 0000 0 0 1 &UIC3 8 4 /* swizzled int A */ 390 0x0 0x0 0x0 0x1 &UIC3 0x8 0x4 /* swizzled int A */
389 0000 0 0 2 &UIC3 9 4 /* swizzled int B */ 391 0x0 0x0 0x0 0x2 &UIC3 0x9 0x4 /* swizzled int B */
390 0000 0 0 3 &UIC3 a 4 /* swizzled int C */ 392 0x0 0x0 0x0 0x3 &UIC3 0xa 0x4 /* swizzled int C */
391 0000 0 0 4 &UIC3 b 4 /* swizzled int D */>; 393 0x0 0x0 0x0 0x4 &UIC3 0xb 0x4 /* swizzled int D */>;
392 }; 394 };
393 }; 395 };
394 396
diff --git a/arch/powerpc/boot/dts/kilauea.dts b/arch/powerpc/boot/dts/kilauea.dts
index 48c9a6e71f1a..3ed6a8fee1d5 100644
--- a/arch/powerpc/boot/dts/kilauea.dts
+++ b/arch/powerpc/boot/dts/kilauea.dts
@@ -8,12 +8,14 @@
8 * any warranty of any kind, whether express or implied. 8 * any warranty of any kind, whether express or implied.
9 */ 9 */
10 10
11/dts-v1/;
12
11/ { 13/ {
12 #address-cells = <1>; 14 #address-cells = <1>;
13 #size-cells = <1>; 15 #size-cells = <1>;
14 model = "amcc,kilauea"; 16 model = "amcc,kilauea";
15 compatible = "amcc,kilauea"; 17 compatible = "amcc,kilauea";
16 dcr-parent = <&/cpus/cpu@0>; 18 dcr-parent = <&{/cpus/cpu@0}>;
17 19
18 aliases { 20 aliases {
19 ethernet0 = &EMAC0; 21 ethernet0 = &EMAC0;
@@ -29,13 +31,13 @@
29 cpu@0 { 31 cpu@0 {
30 device_type = "cpu"; 32 device_type = "cpu";
31 model = "PowerPC,405EX"; 33 model = "PowerPC,405EX";
32 reg = <0>; 34 reg = <0x00000000>;
33 clock-frequency = <0>; /* Filled in by U-Boot */ 35 clock-frequency = <0>; /* Filled in by U-Boot */
34 timebase-frequency = <0>; /* Filled in by U-Boot */ 36 timebase-frequency = <0>; /* Filled in by U-Boot */
35 i-cache-line-size = <20>; 37 i-cache-line-size = <32>;
36 d-cache-line-size = <20>; 38 d-cache-line-size = <32>;
37 i-cache-size = <4000>; /* 16 kB */ 39 i-cache-size = <16384>; /* 16 kB */
38 d-cache-size = <4000>; /* 16 kB */ 40 d-cache-size = <16384>; /* 16 kB */
39 dcr-controller; 41 dcr-controller;
40 dcr-access-method = "native"; 42 dcr-access-method = "native";
41 }; 43 };
@@ -43,14 +45,14 @@
43 45
44 memory { 46 memory {
45 device_type = "memory"; 47 device_type = "memory";
46 reg = <0 0>; /* Filled in by U-Boot */ 48 reg = <0x00000000 0x00000000>; /* Filled in by U-Boot */
47 }; 49 };
48 50
49 UIC0: interrupt-controller { 51 UIC0: interrupt-controller {
50 compatible = "ibm,uic-405ex", "ibm,uic"; 52 compatible = "ibm,uic-405ex", "ibm,uic";
51 interrupt-controller; 53 interrupt-controller;
52 cell-index = <0>; 54 cell-index = <0>;
53 dcr-reg = <0c0 009>; 55 dcr-reg = <0x0c0 0x009>;
54 #address-cells = <0>; 56 #address-cells = <0>;
55 #size-cells = <0>; 57 #size-cells = <0>;
56 #interrupt-cells = <2>; 58 #interrupt-cells = <2>;
@@ -60,11 +62,11 @@
60 compatible = "ibm,uic-405ex","ibm,uic"; 62 compatible = "ibm,uic-405ex","ibm,uic";
61 interrupt-controller; 63 interrupt-controller;
62 cell-index = <1>; 64 cell-index = <1>;
63 dcr-reg = <0d0 009>; 65 dcr-reg = <0x0d0 0x009>;
64 #address-cells = <0>; 66 #address-cells = <0>;
65 #size-cells = <0>; 67 #size-cells = <0>;
66 #interrupt-cells = <2>; 68 #interrupt-cells = <2>;
67 interrupts = <1e 4 1f 4>; /* cascade */ 69 interrupts = <0x1e 0x4 0x1f 0x4>; /* cascade */
68 interrupt-parent = <&UIC0>; 70 interrupt-parent = <&UIC0>;
69 }; 71 };
70 72
@@ -72,11 +74,11 @@
72 compatible = "ibm,uic-405ex","ibm,uic"; 74 compatible = "ibm,uic-405ex","ibm,uic";
73 interrupt-controller; 75 interrupt-controller;
74 cell-index = <2>; 76 cell-index = <2>;
75 dcr-reg = <0e0 009>; 77 dcr-reg = <0x0e0 0x009>;
76 #address-cells = <0>; 78 #address-cells = <0>;
77 #size-cells = <0>; 79 #size-cells = <0>;
78 #interrupt-cells = <2>; 80 #interrupt-cells = <2>;
79 interrupts = <1c 4 1d 4>; /* cascade */ 81 interrupts = <0x1c 0x4 0x1d 0x4>; /* cascade */
80 interrupt-parent = <&UIC0>; 82 interrupt-parent = <&UIC0>;
81 }; 83 };
82 84
@@ -89,72 +91,72 @@
89 91
90 SDRAM0: memory-controller { 92 SDRAM0: memory-controller {
91 compatible = "ibm,sdram-405ex"; 93 compatible = "ibm,sdram-405ex";
92 dcr-reg = <010 2>; 94 dcr-reg = <0x010 0x002>;
93 }; 95 };
94 96
95 MAL0: mcmal { 97 MAL0: mcmal {
96 compatible = "ibm,mcmal-405ex", "ibm,mcmal2"; 98 compatible = "ibm,mcmal-405ex", "ibm,mcmal2";
97 dcr-reg = <180 62>; 99 dcr-reg = <0x180 0x062>;
98 num-tx-chans = <2>; 100 num-tx-chans = <2>;
99 num-rx-chans = <2>; 101 num-rx-chans = <2>;
100 interrupt-parent = <&MAL0>; 102 interrupt-parent = <&MAL0>;
101 interrupts = <0 1 2 3 4>; 103 interrupts = <0x0 0x1 0x2 0x3 0x4>;
102 #interrupt-cells = <1>; 104 #interrupt-cells = <1>;
103 #address-cells = <0>; 105 #address-cells = <0>;
104 #size-cells = <0>; 106 #size-cells = <0>;
105 interrupt-map = </*TXEOB*/ 0 &UIC0 a 4 107 interrupt-map = </*TXEOB*/ 0x0 &UIC0 0xa 0x4
106 /*RXEOB*/ 1 &UIC0 b 4 108 /*RXEOB*/ 0x1 &UIC0 0xb 0x4
107 /*SERR*/ 2 &UIC1 0 4 109 /*SERR*/ 0x2 &UIC1 0x0 0x4
108 /*TXDE*/ 3 &UIC1 1 4 110 /*TXDE*/ 0x3 &UIC1 0x1 0x4
109 /*RXDE*/ 4 &UIC1 2 4>; 111 /*RXDE*/ 0x4 &UIC1 0x2 0x4>;
110 interrupt-map-mask = <ffffffff>; 112 interrupt-map-mask = <0xffffffff>;
111 }; 113 };
112 114
113 POB0: opb { 115 POB0: opb {
114 compatible = "ibm,opb-405ex", "ibm,opb"; 116 compatible = "ibm,opb-405ex", "ibm,opb";
115 #address-cells = <1>; 117 #address-cells = <1>;
116 #size-cells = <1>; 118 #size-cells = <1>;
117 ranges = <80000000 80000000 10000000 119 ranges = <0x80000000 0x80000000 0x10000000
118 ef600000 ef600000 a00000 120 0xef600000 0xef600000 0x00a00000
119 f0000000 f0000000 10000000>; 121 0xf0000000 0xf0000000 0x10000000>;
120 dcr-reg = <0a0 5>; 122 dcr-reg = <0x0a0 0x005>;
121 clock-frequency = <0>; /* Filled in by U-Boot */ 123 clock-frequency = <0>; /* Filled in by U-Boot */
122 124
123 EBC0: ebc { 125 EBC0: ebc {
124 compatible = "ibm,ebc-405ex", "ibm,ebc"; 126 compatible = "ibm,ebc-405ex", "ibm,ebc";
125 dcr-reg = <012 2>; 127 dcr-reg = <0x012 0x002>;
126 #address-cells = <2>; 128 #address-cells = <2>;
127 #size-cells = <1>; 129 #size-cells = <1>;
128 clock-frequency = <0>; /* Filled in by U-Boot */ 130 clock-frequency = <0>; /* Filled in by U-Boot */
129 /* ranges property is supplied by U-Boot */ 131 /* ranges property is supplied by U-Boot */
130 interrupts = <5 1>; 132 interrupts = <0x5 0x1>;
131 interrupt-parent = <&UIC1>; 133 interrupt-parent = <&UIC1>;
132 134
133 nor_flash@0,0 { 135 nor_flash@0,0 {
134 compatible = "amd,s29gl512n", "cfi-flash"; 136 compatible = "amd,s29gl512n", "cfi-flash";
135 bank-width = <2>; 137 bank-width = <2>;
136 reg = <0 000000 4000000>; 138 reg = <0x00000000 0x00000000 0x04000000>;
137 #address-cells = <1>; 139 #address-cells = <1>;
138 #size-cells = <1>; 140 #size-cells = <1>;
139 partition@0 { 141 partition@0 {
140 label = "kernel"; 142 label = "kernel";
141 reg = <0 200000>; 143 reg = <0x00000000 0x00200000>;
142 }; 144 };
143 partition@200000 { 145 partition@200000 {
144 label = "root"; 146 label = "root";
145 reg = <200000 200000>; 147 reg = <0x00200000 0x00200000>;
146 }; 148 };
147 partition@400000 { 149 partition@400000 {
148 label = "user"; 150 label = "user";
149 reg = <400000 3b60000>; 151 reg = <0x00400000 0x03b60000>;
150 }; 152 };
151 partition@3f60000 { 153 partition@3f60000 {
152 label = "env"; 154 label = "env";
153 reg = <3f60000 40000>; 155 reg = <0x03f60000 0x00040000>;
154 }; 156 };
155 partition@3fa0000 { 157 partition@3fa0000 {
156 label = "u-boot"; 158 label = "u-boot";
157 reg = <3fa0000 60000>; 159 reg = <0x03fa0000 0x00060000>;
158 }; 160 };
159 }; 161 };
160 }; 162 };
@@ -162,68 +164,68 @@
162 UART0: serial@ef600200 { 164 UART0: serial@ef600200 {
163 device_type = "serial"; 165 device_type = "serial";
164 compatible = "ns16550"; 166 compatible = "ns16550";
165 reg = <ef600200 8>; 167 reg = <0xef600200 0x00000008>;
166 virtual-reg = <ef600200>; 168 virtual-reg = <0xef600200>;
167 clock-frequency = <0>; /* Filled in by U-Boot */ 169 clock-frequency = <0>; /* Filled in by U-Boot */
168 current-speed = <0>; 170 current-speed = <0>;
169 interrupt-parent = <&UIC0>; 171 interrupt-parent = <&UIC0>;
170 interrupts = <1a 4>; 172 interrupts = <0x1a 0x4>;
171 }; 173 };
172 174
173 UART1: serial@ef600300 { 175 UART1: serial@ef600300 {
174 device_type = "serial"; 176 device_type = "serial";
175 compatible = "ns16550"; 177 compatible = "ns16550";
176 reg = <ef600300 8>; 178 reg = <0xef600300 0x00000008>;
177 virtual-reg = <ef600300>; 179 virtual-reg = <0xef600300>;
178 clock-frequency = <0>; /* Filled in by U-Boot */ 180 clock-frequency = <0>; /* Filled in by U-Boot */
179 current-speed = <0>; 181 current-speed = <0>;
180 interrupt-parent = <&UIC0>; 182 interrupt-parent = <&UIC0>;
181 interrupts = <1 4>; 183 interrupts = <0x1 0x4>;
182 }; 184 };
183 185
184 IIC0: i2c@ef600400 { 186 IIC0: i2c@ef600400 {
185 compatible = "ibm,iic-405ex", "ibm,iic"; 187 compatible = "ibm,iic-405ex", "ibm,iic";
186 reg = <ef600400 14>; 188 reg = <0xef600400 0x00000014>;
187 interrupt-parent = <&UIC0>; 189 interrupt-parent = <&UIC0>;
188 interrupts = <2 4>; 190 interrupts = <0x2 0x4>;
189 }; 191 };
190 192
191 IIC1: i2c@ef600500 { 193 IIC1: i2c@ef600500 {
192 compatible = "ibm,iic-405ex", "ibm,iic"; 194 compatible = "ibm,iic-405ex", "ibm,iic";
193 reg = <ef600500 14>; 195 reg = <0xef600500 0x00000014>;
194 interrupt-parent = <&UIC0>; 196 interrupt-parent = <&UIC0>;
195 interrupts = <7 4>; 197 interrupts = <0x7 0x4>;
196 }; 198 };
197 199
198 200
199 RGMII0: emac-rgmii@ef600b00 { 201 RGMII0: emac-rgmii@ef600b00 {
200 compatible = "ibm,rgmii-405ex", "ibm,rgmii"; 202 compatible = "ibm,rgmii-405ex", "ibm,rgmii";
201 reg = <ef600b00 104>; 203 reg = <0xef600b00 0x00000104>;
202 has-mdio; 204 has-mdio;
203 }; 205 };
204 206
205 EMAC0: ethernet@ef600900 { 207 EMAC0: ethernet@ef600900 {
206 linux,network-index = <0>; 208 linux,network-index = <0x0>;
207 device_type = "network"; 209 device_type = "network";
208 compatible = "ibm,emac-405ex", "ibm,emac4"; 210 compatible = "ibm,emac-405ex", "ibm,emac4";
209 interrupt-parent = <&EMAC0>; 211 interrupt-parent = <&EMAC0>;
210 interrupts = <0 1>; 212 interrupts = <0x0 0x1>;
211 #interrupt-cells = <1>; 213 #interrupt-cells = <1>;
212 #address-cells = <0>; 214 #address-cells = <0>;
213 #size-cells = <0>; 215 #size-cells = <0>;
214 interrupt-map = </*Status*/ 0 &UIC0 18 4 216 interrupt-map = </*Status*/ 0x0 &UIC0 0x18 0x4
215 /*Wake*/ 1 &UIC1 1d 4>; 217 /*Wake*/ 0x1 &UIC1 0x1d 0x4>;
216 reg = <ef600900 70>; 218 reg = <0xef600900 0x00000070>;
217 local-mac-address = [000000000000]; /* Filled in by U-Boot */ 219 local-mac-address = [000000000000]; /* Filled in by U-Boot */
218 mal-device = <&MAL0>; 220 mal-device = <&MAL0>;
219 mal-tx-channel = <0>; 221 mal-tx-channel = <0>;
220 mal-rx-channel = <0>; 222 mal-rx-channel = <0>;
221 cell-index = <0>; 223 cell-index = <0>;
222 max-frame-size = <2328>; 224 max-frame-size = <9000>;
223 rx-fifo-size = <1000>; 225 rx-fifo-size = <4096>;
224 tx-fifo-size = <800>; 226 tx-fifo-size = <2048>;
225 phy-mode = "rgmii"; 227 phy-mode = "rgmii";
226 phy-map = <00000000>; 228 phy-map = <0x00000000>;
227 rgmii-device = <&RGMII0>; 229 rgmii-device = <&RGMII0>;
228 rgmii-channel = <0>; 230 rgmii-channel = <0>;
229 has-inverted-stacr-oc; 231 has-inverted-stacr-oc;
@@ -231,27 +233,27 @@
231 }; 233 };
232 234
233 EMAC1: ethernet@ef600a00 { 235 EMAC1: ethernet@ef600a00 {
234 linux,network-index = <1>; 236 linux,network-index = <0x1>;
235 device_type = "network"; 237 device_type = "network";
236 compatible = "ibm,emac-405ex", "ibm,emac4"; 238 compatible = "ibm,emac-405ex", "ibm,emac4";
237 interrupt-parent = <&EMAC1>; 239 interrupt-parent = <&EMAC1>;
238 interrupts = <0 1>; 240 interrupts = <0x0 0x1>;
239 #interrupt-cells = <1>; 241 #interrupt-cells = <1>;
240 #address-cells = <0>; 242 #address-cells = <0>;
241 #size-cells = <0>; 243 #size-cells = <0>;
242 interrupt-map = </*Status*/ 0 &UIC0 19 4 244 interrupt-map = </*Status*/ 0x0 &UIC0 0x19 0x4
243 /*Wake*/ 1 &UIC1 1f 4>; 245 /*Wake*/ 0x1 &UIC1 0x1f 0x4>;
244 reg = <ef600a00 70>; 246 reg = <0xef600a00 0x00000070>;
245 local-mac-address = [000000000000]; /* Filled in by U-Boot */ 247 local-mac-address = [000000000000]; /* Filled in by U-Boot */
246 mal-device = <&MAL0>; 248 mal-device = <&MAL0>;
247 mal-tx-channel = <1>; 249 mal-tx-channel = <1>;
248 mal-rx-channel = <1>; 250 mal-rx-channel = <1>;
249 cell-index = <1>; 251 cell-index = <1>;
250 max-frame-size = <2328>; 252 max-frame-size = <9000>;
251 rx-fifo-size = <1000>; 253 rx-fifo-size = <4096>;
252 tx-fifo-size = <800>; 254 tx-fifo-size = <2048>;
253 phy-mode = "rgmii"; 255 phy-mode = "rgmii";
254 phy-map = <00000000>; 256 phy-map = <0x00000000>;
255 rgmii-device = <&RGMII0>; 257 rgmii-device = <&RGMII0>;
256 rgmii-channel = <1>; 258 rgmii-channel = <1>;
257 has-inverted-stacr-oc; 259 has-inverted-stacr-oc;
@@ -266,23 +268,23 @@
266 #address-cells = <3>; 268 #address-cells = <3>;
267 compatible = "ibm,plb-pciex-405ex", "ibm,plb-pciex"; 269 compatible = "ibm,plb-pciex-405ex", "ibm,plb-pciex";
268 primary; 270 primary;
269 port = <0>; /* port number */ 271 port = <0x0>; /* port number */
270 reg = <a0000000 20000000 /* Config space access */ 272 reg = <0xa0000000 0x20000000 /* Config space access */
271 ef000000 00001000>; /* Registers */ 273 0xef000000 0x00001000>; /* Registers */
272 dcr-reg = <040 020>; 274 dcr-reg = <0x040 0x020>;
273 sdr-base = <400>; 275 sdr-base = <0x400>;
274 276
275 /* Outbound ranges, one memory and one IO, 277 /* Outbound ranges, one memory and one IO,
276 * later cannot be changed 278 * later cannot be changed
277 */ 279 */
278 ranges = <02000000 0 80000000 90000000 0 08000000 280 ranges = <0x02000000 0x00000000 0x80000000 0x90000000 0x00000000 0x08000000
279 01000000 0 00000000 e0000000 0 00010000>; 281 0x01000000 0x00000000 0x00000000 0xe0000000 0x00000000 0x00010000>;
280 282
281 /* Inbound 2GB range starting at 0 */ 283 /* Inbound 2GB range starting at 0 */
282 dma-ranges = <42000000 0 0 0 0 80000000>; 284 dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x80000000>;
283 285
284 /* This drives busses 0x00 to 0x3f */ 286 /* This drives busses 0x00 to 0x3f */
285 bus-range = <00 3f>; 287 bus-range = <0x0 0x3f>;
286 288
287 /* Legacy interrupts (note the weird polarity, the bridge seems 289 /* Legacy interrupts (note the weird polarity, the bridge seems
288 * to invert PCIe legacy interrupts). 290 * to invert PCIe legacy interrupts).
@@ -292,12 +294,12 @@
292 * below are basically de-swizzled numbers. 294 * below are basically de-swizzled numbers.
293 * The real slot is on idsel 0, so the swizzling is 1:1 295 * The real slot is on idsel 0, so the swizzling is 1:1
294 */ 296 */
295 interrupt-map-mask = <0000 0 0 7>; 297 interrupt-map-mask = <0x0 0x0 0x0 0x7>;
296 interrupt-map = < 298 interrupt-map = <
297 0000 0 0 1 &UIC2 0 4 /* swizzled int A */ 299 0x0 0x0 0x0 0x1 &UIC2 0x0 0x4 /* swizzled int A */
298 0000 0 0 2 &UIC2 1 4 /* swizzled int B */ 300 0x0 0x0 0x0 0x2 &UIC2 0x1 0x4 /* swizzled int B */
299 0000 0 0 3 &UIC2 2 4 /* swizzled int C */ 301 0x0 0x0 0x0 0x3 &UIC2 0x2 0x4 /* swizzled int C */
300 0000 0 0 4 &UIC2 3 4 /* swizzled int D */>; 302 0x0 0x0 0x0 0x4 &UIC2 0x3 0x4 /* swizzled int D */>;
301 }; 303 };
302 304
303 PCIE1: pciex@0c0000000 { 305 PCIE1: pciex@0c0000000 {
@@ -307,23 +309,23 @@
307 #address-cells = <3>; 309 #address-cells = <3>;
308 compatible = "ibm,plb-pciex-405ex", "ibm,plb-pciex"; 310 compatible = "ibm,plb-pciex-405ex", "ibm,plb-pciex";
309 primary; 311 primary;
310 port = <1>; /* port number */ 312 port = <0x1>; /* port number */
311 reg = <c0000000 20000000 /* Config space access */ 313 reg = <0xc0000000 0x20000000 /* Config space access */
312 ef001000 00001000>; /* Registers */ 314 0xef001000 0x00001000>; /* Registers */
313 dcr-reg = <060 020>; 315 dcr-reg = <0x060 0x020>;
314 sdr-base = <440>; 316 sdr-base = <0x440>;
315 317
316 /* Outbound ranges, one memory and one IO, 318 /* Outbound ranges, one memory and one IO,
317 * later cannot be changed 319 * later cannot be changed
318 */ 320 */
319 ranges = <02000000 0 80000000 98000000 0 08000000 321 ranges = <0x02000000 0x00000000 0x80000000 0x98000000 0x00000000 0x08000000
320 01000000 0 00000000 e0010000 0 00010000>; 322 0x01000000 0x00000000 0x00000000 0xe0010000 0x00000000 0x00010000>;
321 323
322 /* Inbound 2GB range starting at 0 */ 324 /* Inbound 2GB range starting at 0 */
323 dma-ranges = <42000000 0 0 0 0 80000000>; 325 dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x80000000>;
324 326
325 /* This drives busses 0x40 to 0x7f */ 327 /* This drives busses 0x40 to 0x7f */
326 bus-range = <40 7f>; 328 bus-range = <0x40 0x7f>;
327 329
328 /* Legacy interrupts (note the weird polarity, the bridge seems 330 /* Legacy interrupts (note the weird polarity, the bridge seems
329 * to invert PCIe legacy interrupts). 331 * to invert PCIe legacy interrupts).
@@ -333,12 +335,12 @@
333 * below are basically de-swizzled numbers. 335 * below are basically de-swizzled numbers.
334 * The real slot is on idsel 0, so the swizzling is 1:1 336 * The real slot is on idsel 0, so the swizzling is 1:1
335 */ 337 */
336 interrupt-map-mask = <0000 0 0 7>; 338 interrupt-map-mask = <0x0 0x0 0x0 0x7>;
337 interrupt-map = < 339 interrupt-map = <
338 0000 0 0 1 &UIC2 b 4 /* swizzled int A */ 340 0x0 0x0 0x0 0x1 &UIC2 0xb 0x4 /* swizzled int A */
339 0000 0 0 2 &UIC2 c 4 /* swizzled int B */ 341 0x0 0x0 0x0 0x2 &UIC2 0xc 0x4 /* swizzled int B */
340 0000 0 0 3 &UIC2 d 4 /* swizzled int C */ 342 0x0 0x0 0x0 0x3 &UIC2 0xd 0x4 /* swizzled int C */
341 0000 0 0 4 &UIC2 e 4 /* swizzled int D */>; 343 0x0 0x0 0x0 0x4 &UIC2 0xe 0x4 /* swizzled int D */>;
342 }; 344 };
343 }; 345 };
344}; 346};
diff --git a/arch/powerpc/boot/dts/ksi8560.dts b/arch/powerpc/boot/dts/ksi8560.dts
index f869ce3ca0b7..6eb7c771f6a4 100644
--- a/arch/powerpc/boot/dts/ksi8560.dts
+++ b/arch/powerpc/boot/dts/ksi8560.dts
@@ -40,6 +40,7 @@
40 timebase-frequency = <0>; /* From U-boot */ 40 timebase-frequency = <0>; /* From U-boot */
41 bus-frequency = <0>; /* From U-boot */ 41 bus-frequency = <0>; /* From U-boot */
42 clock-frequency = <0>; /* From U-boot */ 42 clock-frequency = <0>; /* From U-boot */
43 next-level-cache = <&L2>;
43 }; 44 };
44 }; 45 };
45 46
@@ -62,7 +63,7 @@
62 interrupts = <0x12 0x2>; 63 interrupts = <0x12 0x2>;
63 }; 64 };
64 65
65 l2-cache-controller@20000 { 66 L2: l2-cache-controller@20000 {
66 compatible = "fsl,8540-l2-cache-controller"; 67 compatible = "fsl,8540-l2-cache-controller";
67 reg = <0x20000 0x1000>; 68 reg = <0x20000 0x1000>;
68 cache-line-size = <0x20>; /* 32 bytes */ 69 cache-line-size = <0x20>; /* 32 bytes */
diff --git a/arch/powerpc/boot/dts/makalu.dts b/arch/powerpc/boot/dts/makalu.dts
index 84cc5e72ddd8..1dfcd7ed199c 100644
--- a/arch/powerpc/boot/dts/makalu.dts
+++ b/arch/powerpc/boot/dts/makalu.dts
@@ -8,12 +8,14 @@
8 * any warranty of any kind, whether express or implied. 8 * any warranty of any kind, whether express or implied.
9 */ 9 */
10 10
11/dts-v1/;
12
11/ { 13/ {
12 #address-cells = <1>; 14 #address-cells = <1>;
13 #size-cells = <1>; 15 #size-cells = <1>;
14 model = "amcc,makalu"; 16 model = "amcc,makalu";
15 compatible = "amcc,makalu"; 17 compatible = "amcc,makalu";
16 dcr-parent = <&/cpus/cpu@0>; 18 dcr-parent = <&{/cpus/cpu@0}>;
17 19
18 aliases { 20 aliases {
19 ethernet0 = &EMAC0; 21 ethernet0 = &EMAC0;
@@ -29,13 +31,13 @@
29 cpu@0 { 31 cpu@0 {
30 device_type = "cpu"; 32 device_type = "cpu";
31 model = "PowerPC,405EX"; 33 model = "PowerPC,405EX";
32 reg = <0>; 34 reg = <0x00000000>;
33 clock-frequency = <0>; /* Filled in by U-Boot */ 35 clock-frequency = <0>; /* Filled in by U-Boot */
34 timebase-frequency = <0>; /* Filled in by U-Boot */ 36 timebase-frequency = <0>; /* Filled in by U-Boot */
35 i-cache-line-size = <20>; 37 i-cache-line-size = <32>;
36 d-cache-line-size = <20>; 38 d-cache-line-size = <32>;
37 i-cache-size = <4000>; /* 16 kB */ 39 i-cache-size = <16384>; /* 16 kB */
38 d-cache-size = <4000>; /* 16 kB */ 40 d-cache-size = <16384>; /* 16 kB */
39 dcr-controller; 41 dcr-controller;
40 dcr-access-method = "native"; 42 dcr-access-method = "native";
41 }; 43 };
@@ -43,14 +45,14 @@
43 45
44 memory { 46 memory {
45 device_type = "memory"; 47 device_type = "memory";
46 reg = <0 0>; /* Filled in by U-Boot */ 48 reg = <0x00000000 0x00000000>; /* Filled in by U-Boot */
47 }; 49 };
48 50
49 UIC0: interrupt-controller { 51 UIC0: interrupt-controller {
50 compatible = "ibm,uic-405ex", "ibm,uic"; 52 compatible = "ibm,uic-405ex", "ibm,uic";
51 interrupt-controller; 53 interrupt-controller;
52 cell-index = <0>; 54 cell-index = <0>;
53 dcr-reg = <0c0 009>; 55 dcr-reg = <0x0c0 0x009>;
54 #address-cells = <0>; 56 #address-cells = <0>;
55 #size-cells = <0>; 57 #size-cells = <0>;
56 #interrupt-cells = <2>; 58 #interrupt-cells = <2>;
@@ -60,11 +62,11 @@
60 compatible = "ibm,uic-405ex","ibm,uic"; 62 compatible = "ibm,uic-405ex","ibm,uic";
61 interrupt-controller; 63 interrupt-controller;
62 cell-index = <1>; 64 cell-index = <1>;
63 dcr-reg = <0d0 009>; 65 dcr-reg = <0x0d0 0x009>;
64 #address-cells = <0>; 66 #address-cells = <0>;
65 #size-cells = <0>; 67 #size-cells = <0>;
66 #interrupt-cells = <2>; 68 #interrupt-cells = <2>;
67 interrupts = <1e 4 1f 4>; /* cascade */ 69 interrupts = <0x1e 0x4 0x1f 0x4>; /* cascade */
68 interrupt-parent = <&UIC0>; 70 interrupt-parent = <&UIC0>;
69 }; 71 };
70 72
@@ -72,11 +74,11 @@
72 compatible = "ibm,uic-405ex","ibm,uic"; 74 compatible = "ibm,uic-405ex","ibm,uic";
73 interrupt-controller; 75 interrupt-controller;
74 cell-index = <2>; 76 cell-index = <2>;
75 dcr-reg = <0e0 009>; 77 dcr-reg = <0x0e0 0x009>;
76 #address-cells = <0>; 78 #address-cells = <0>;
77 #size-cells = <0>; 79 #size-cells = <0>;
78 #interrupt-cells = <2>; 80 #interrupt-cells = <2>;
79 interrupts = <1c 4 1d 4>; /* cascade */ 81 interrupts = <0x1c 0x4 0x1d 0x4>; /* cascade */
80 interrupt-parent = <&UIC0>; 82 interrupt-parent = <&UIC0>;
81 }; 83 };
82 84
@@ -89,72 +91,72 @@
89 91
90 SDRAM0: memory-controller { 92 SDRAM0: memory-controller {
91 compatible = "ibm,sdram-405ex"; 93 compatible = "ibm,sdram-405ex";
92 dcr-reg = <010 2>; 94 dcr-reg = <0x010 0x002>;
93 }; 95 };
94 96
95 MAL0: mcmal { 97 MAL0: mcmal {
96 compatible = "ibm,mcmal-405ex", "ibm,mcmal2"; 98 compatible = "ibm,mcmal-405ex", "ibm,mcmal2";
97 dcr-reg = <180 62>; 99 dcr-reg = <0x180 0x062>;
98 num-tx-chans = <2>; 100 num-tx-chans = <2>;
99 num-rx-chans = <2>; 101 num-rx-chans = <2>;
100 interrupt-parent = <&MAL0>; 102 interrupt-parent = <&MAL0>;
101 interrupts = <0 1 2 3 4>; 103 interrupts = <0x0 0x1 0x2 0x3 0x4>;
102 #interrupt-cells = <1>; 104 #interrupt-cells = <1>;
103 #address-cells = <0>; 105 #address-cells = <0>;
104 #size-cells = <0>; 106 #size-cells = <0>;
105 interrupt-map = </*TXEOB*/ 0 &UIC0 a 4 107 interrupt-map = </*TXEOB*/ 0x0 &UIC0 0xa 0x4
106 /*RXEOB*/ 1 &UIC0 b 4 108 /*RXEOB*/ 0x1 &UIC0 0xb 0x4
107 /*SERR*/ 2 &UIC1 0 4 109 /*SERR*/ 0x2 &UIC1 0x0 0x4
108 /*TXDE*/ 3 &UIC1 1 4 110 /*TXDE*/ 0x3 &UIC1 0x1 0x4
109 /*RXDE*/ 4 &UIC1 2 4>; 111 /*RXDE*/ 0x4 &UIC1 0x2 0x4>;
110 interrupt-map-mask = <ffffffff>; 112 interrupt-map-mask = <0xffffffff>;
111 }; 113 };
112 114
113 POB0: opb { 115 POB0: opb {
114 compatible = "ibm,opb-405ex", "ibm,opb"; 116 compatible = "ibm,opb-405ex", "ibm,opb";
115 #address-cells = <1>; 117 #address-cells = <1>;
116 #size-cells = <1>; 118 #size-cells = <1>;
117 ranges = <80000000 80000000 10000000 119 ranges = <0x80000000 0x80000000 0x10000000
118 ef600000 ef600000 a00000 120 0xef600000 0xef600000 0x00a00000
119 f0000000 f0000000 10000000>; 121 0xf0000000 0xf0000000 0x10000000>;
120 dcr-reg = <0a0 5>; 122 dcr-reg = <0x0a0 0x005>;
121 clock-frequency = <0>; /* Filled in by U-Boot */ 123 clock-frequency = <0>; /* Filled in by U-Boot */
122 124
123 EBC0: ebc { 125 EBC0: ebc {
124 compatible = "ibm,ebc-405ex", "ibm,ebc"; 126 compatible = "ibm,ebc-405ex", "ibm,ebc";
125 dcr-reg = <012 2>; 127 dcr-reg = <0x012 0x002>;
126 #address-cells = <2>; 128 #address-cells = <2>;
127 #size-cells = <1>; 129 #size-cells = <1>;
128 clock-frequency = <0>; /* Filled in by U-Boot */ 130 clock-frequency = <0>; /* Filled in by U-Boot */
129 /* ranges property is supplied by U-Boot */ 131 /* ranges property is supplied by U-Boot */
130 interrupts = <5 1>; 132 interrupts = <0x5 0x1>;
131 interrupt-parent = <&UIC1>; 133 interrupt-parent = <&UIC1>;
132 134
133 nor_flash@0,0 { 135 nor_flash@0,0 {
134 compatible = "amd,s29gl512n", "cfi-flash"; 136 compatible = "amd,s29gl512n", "cfi-flash";
135 bank-width = <2>; 137 bank-width = <2>;
136 reg = <0 000000 4000000>; 138 reg = <0x00000000 0x00000000 0x04000000>;
137 #address-cells = <1>; 139 #address-cells = <1>;
138 #size-cells = <1>; 140 #size-cells = <1>;
139 partition@0 { 141 partition@0 {
140 label = "kernel"; 142 label = "kernel";
141 reg = <0 200000>; 143 reg = <0x00000000 0x00200000>;
142 }; 144 };
143 partition@200000 { 145 partition@200000 {
144 label = "root"; 146 label = "root";
145 reg = <200000 200000>; 147 reg = <0x00200000 0x00200000>;
146 }; 148 };
147 partition@400000 { 149 partition@400000 {
148 label = "user"; 150 label = "user";
149 reg = <400000 3b60000>; 151 reg = <0x00400000 0x03b60000>;
150 }; 152 };
151 partition@3f60000 { 153 partition@3f60000 {
152 label = "env"; 154 label = "env";
153 reg = <3f60000 40000>; 155 reg = <0x03f60000 0x00040000>;
154 }; 156 };
155 partition@3fa0000 { 157 partition@3fa0000 {
156 label = "u-boot"; 158 label = "u-boot";
157 reg = <3fa0000 60000>; 159 reg = <0x03fa0000 0x00060000>;
158 }; 160 };
159 }; 161 };
160 }; 162 };
@@ -162,68 +164,68 @@
162 UART0: serial@ef600200 { 164 UART0: serial@ef600200 {
163 device_type = "serial"; 165 device_type = "serial";
164 compatible = "ns16550"; 166 compatible = "ns16550";
165 reg = <ef600200 8>; 167 reg = <0xef600200 0x00000008>;
166 virtual-reg = <ef600200>; 168 virtual-reg = <0xef600200>;
167 clock-frequency = <0>; /* Filled in by U-Boot */ 169 clock-frequency = <0>; /* Filled in by U-Boot */
168 current-speed = <0>; 170 current-speed = <0>;
169 interrupt-parent = <&UIC0>; 171 interrupt-parent = <&UIC0>;
170 interrupts = <1a 4>; 172 interrupts = <0x1a 0x4>;
171 }; 173 };
172 174
173 UART1: serial@ef600300 { 175 UART1: serial@ef600300 {
174 device_type = "serial"; 176 device_type = "serial";
175 compatible = "ns16550"; 177 compatible = "ns16550";
176 reg = <ef600300 8>; 178 reg = <0xef600300 0x00000008>;
177 virtual-reg = <ef600300>; 179 virtual-reg = <0xef600300>;
178 clock-frequency = <0>; /* Filled in by U-Boot */ 180 clock-frequency = <0>; /* Filled in by U-Boot */
179 current-speed = <0>; 181 current-speed = <0>;
180 interrupt-parent = <&UIC0>; 182 interrupt-parent = <&UIC0>;
181 interrupts = <1 4>; 183 interrupts = <0x1 0x4>;
182 }; 184 };
183 185
184 IIC0: i2c@ef600400 { 186 IIC0: i2c@ef600400 {
185 compatible = "ibm,iic-405ex", "ibm,iic"; 187 compatible = "ibm,iic-405ex", "ibm,iic";
186 reg = <ef600400 14>; 188 reg = <0xef600400 0x00000014>;
187 interrupt-parent = <&UIC0>; 189 interrupt-parent = <&UIC0>;
188 interrupts = <2 4>; 190 interrupts = <0x2 0x4>;
189 }; 191 };
190 192
191 IIC1: i2c@ef600500 { 193 IIC1: i2c@ef600500 {
192 compatible = "ibm,iic-405ex", "ibm,iic"; 194 compatible = "ibm,iic-405ex", "ibm,iic";
193 reg = <ef600500 14>; 195 reg = <0xef600500 0x00000014>;
194 interrupt-parent = <&UIC0>; 196 interrupt-parent = <&UIC0>;
195 interrupts = <7 4>; 197 interrupts = <0x7 0x4>;
196 }; 198 };
197 199
198 200
199 RGMII0: emac-rgmii@ef600b00 { 201 RGMII0: emac-rgmii@ef600b00 {
200 compatible = "ibm,rgmii-405ex", "ibm,rgmii"; 202 compatible = "ibm,rgmii-405ex", "ibm,rgmii";
201 reg = <ef600b00 104>; 203 reg = <0xef600b00 0x00000104>;
202 has-mdio; 204 has-mdio;
203 }; 205 };
204 206
205 EMAC0: ethernet@ef600900 { 207 EMAC0: ethernet@ef600900 {
206 linux,network-index = <0>; 208 linux,network-index = <0x0>;
207 device_type = "network"; 209 device_type = "network";
208 compatible = "ibm,emac-405ex", "ibm,emac4"; 210 compatible = "ibm,emac-405ex", "ibm,emac4";
209 interrupt-parent = <&EMAC0>; 211 interrupt-parent = <&EMAC0>;
210 interrupts = <0 1>; 212 interrupts = <0x0 0x1>;
211 #interrupt-cells = <1>; 213 #interrupt-cells = <1>;
212 #address-cells = <0>; 214 #address-cells = <0>;
213 #size-cells = <0>; 215 #size-cells = <0>;
214 interrupt-map = </*Status*/ 0 &UIC0 18 4 216 interrupt-map = </*Status*/ 0x0 &UIC0 0x18 0x4
215 /*Wake*/ 1 &UIC1 1d 4>; 217 /*Wake*/ 0x1 &UIC1 0x1d 0x4>;
216 reg = <ef600900 70>; 218 reg = <0xef600900 0x00000070>;
217 local-mac-address = [000000000000]; /* Filled in by U-Boot */ 219 local-mac-address = [000000000000]; /* Filled in by U-Boot */
218 mal-device = <&MAL0>; 220 mal-device = <&MAL0>;
219 mal-tx-channel = <0>; 221 mal-tx-channel = <0>;
220 mal-rx-channel = <0>; 222 mal-rx-channel = <0>;
221 cell-index = <0>; 223 cell-index = <0>;
222 max-frame-size = <2328>; 224 max-frame-size = <9000>;
223 rx-fifo-size = <1000>; 225 rx-fifo-size = <4096>;
224 tx-fifo-size = <800>; 226 tx-fifo-size = <2048>;
225 phy-mode = "rgmii"; 227 phy-mode = "rgmii";
226 phy-map = <0000003f>; /* Start at 6 */ 228 phy-map = <0x0000003f>; /* Start at 6 */
227 rgmii-device = <&RGMII0>; 229 rgmii-device = <&RGMII0>;
228 rgmii-channel = <0>; 230 rgmii-channel = <0>;
229 has-inverted-stacr-oc; 231 has-inverted-stacr-oc;
@@ -231,27 +233,27 @@
231 }; 233 };
232 234
233 EMAC1: ethernet@ef600a00 { 235 EMAC1: ethernet@ef600a00 {
234 linux,network-index = <1>; 236 linux,network-index = <0x1>;
235 device_type = "network"; 237 device_type = "network";
236 compatible = "ibm,emac-405ex", "ibm,emac4"; 238 compatible = "ibm,emac-405ex", "ibm,emac4";
237 interrupt-parent = <&EMAC1>; 239 interrupt-parent = <&EMAC1>;
238 interrupts = <0 1>; 240 interrupts = <0x0 0x1>;
239 #interrupt-cells = <1>; 241 #interrupt-cells = <1>;
240 #address-cells = <0>; 242 #address-cells = <0>;
241 #size-cells = <0>; 243 #size-cells = <0>;
242 interrupt-map = </*Status*/ 0 &UIC0 19 4 244 interrupt-map = </*Status*/ 0x0 &UIC0 0x19 0x4
243 /*Wake*/ 1 &UIC1 1f 4>; 245 /*Wake*/ 0x1 &UIC1 0x1f 0x4>;
244 reg = <ef600a00 70>; 246 reg = <0xef600a00 0x00000070>;
245 local-mac-address = [000000000000]; /* Filled in by U-Boot */ 247 local-mac-address = [000000000000]; /* Filled in by U-Boot */
246 mal-device = <&MAL0>; 248 mal-device = <&MAL0>;
247 mal-tx-channel = <1>; 249 mal-tx-channel = <1>;
248 mal-rx-channel = <1>; 250 mal-rx-channel = <1>;
249 cell-index = <1>; 251 cell-index = <1>;
250 max-frame-size = <2328>; 252 max-frame-size = <9000>;
251 rx-fifo-size = <1000>; 253 rx-fifo-size = <4096>;
252 tx-fifo-size = <800>; 254 tx-fifo-size = <2048>;
253 phy-mode = "rgmii"; 255 phy-mode = "rgmii";
254 phy-map = <00000000>; 256 phy-map = <0x00000000>;
255 rgmii-device = <&RGMII0>; 257 rgmii-device = <&RGMII0>;
256 rgmii-channel = <1>; 258 rgmii-channel = <1>;
257 has-inverted-stacr-oc; 259 has-inverted-stacr-oc;
@@ -266,23 +268,23 @@
266 #address-cells = <3>; 268 #address-cells = <3>;
267 compatible = "ibm,plb-pciex-405ex", "ibm,plb-pciex"; 269 compatible = "ibm,plb-pciex-405ex", "ibm,plb-pciex";
268 primary; 270 primary;
269 port = <0>; /* port number */ 271 port = <0x0>; /* port number */
270 reg = <a0000000 20000000 /* Config space access */ 272 reg = <0xa0000000 0x20000000 /* Config space access */
271 ef000000 00001000>; /* Registers */ 273 0xef000000 0x00001000>; /* Registers */
272 dcr-reg = <040 020>; 274 dcr-reg = <0x040 0x020>;
273 sdr-base = <400>; 275 sdr-base = <0x400>;
274 276
275 /* Outbound ranges, one memory and one IO, 277 /* Outbound ranges, one memory and one IO,
276 * later cannot be changed 278 * later cannot be changed
277 */ 279 */
278 ranges = <02000000 0 80000000 90000000 0 08000000 280 ranges = <0x02000000 0x00000000 0x80000000 0x90000000 0x00000000 0x08000000
279 01000000 0 00000000 e0000000 0 00010000>; 281 0x01000000 0x00000000 0x00000000 0xe0000000 0x00000000 0x00010000>;
280 282
281 /* Inbound 2GB range starting at 0 */ 283 /* Inbound 2GB range starting at 0 */
282 dma-ranges = <42000000 0 0 0 0 80000000>; 284 dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x80000000>;
283 285
284 /* This drives busses 0x00 to 0x3f */ 286 /* This drives busses 0x00 to 0x3f */
285 bus-range = <00 3f>; 287 bus-range = <0x0 0x3f>;
286 288
287 /* Legacy interrupts (note the weird polarity, the bridge seems 289 /* Legacy interrupts (note the weird polarity, the bridge seems
288 * to invert PCIe legacy interrupts). 290 * to invert PCIe legacy interrupts).
@@ -292,12 +294,12 @@
292 * below are basically de-swizzled numbers. 294 * below are basically de-swizzled numbers.
293 * The real slot is on idsel 0, so the swizzling is 1:1 295 * The real slot is on idsel 0, so the swizzling is 1:1
294 */ 296 */
295 interrupt-map-mask = <0000 0 0 7>; 297 interrupt-map-mask = <0x0 0x0 0x0 0x7>;
296 interrupt-map = < 298 interrupt-map = <
297 0000 0 0 1 &UIC2 0 4 /* swizzled int A */ 299 0x0 0x0 0x0 0x1 &UIC2 0x0 0x4 /* swizzled int A */
298 0000 0 0 2 &UIC2 1 4 /* swizzled int B */ 300 0x0 0x0 0x0 0x2 &UIC2 0x1 0x4 /* swizzled int B */
299 0000 0 0 3 &UIC2 2 4 /* swizzled int C */ 301 0x0 0x0 0x0 0x3 &UIC2 0x2 0x4 /* swizzled int C */
300 0000 0 0 4 &UIC2 3 4 /* swizzled int D */>; 302 0x0 0x0 0x0 0x4 &UIC2 0x3 0x4 /* swizzled int D */>;
301 }; 303 };
302 304
303 PCIE1: pciex@0c0000000 { 305 PCIE1: pciex@0c0000000 {
@@ -307,23 +309,23 @@
307 #address-cells = <3>; 309 #address-cells = <3>;
308 compatible = "ibm,plb-pciex-405ex", "ibm,plb-pciex"; 310 compatible = "ibm,plb-pciex-405ex", "ibm,plb-pciex";
309 primary; 311 primary;
310 port = <1>; /* port number */ 312 port = <0x1>; /* port number */
311 reg = <c0000000 20000000 /* Config space access */ 313 reg = <0xc0000000 0x20000000 /* Config space access */
312 ef001000 00001000>; /* Registers */ 314 0xef001000 0x00001000>; /* Registers */
313 dcr-reg = <060 020>; 315 dcr-reg = <0x060 0x020>;
314 sdr-base = <440>; 316 sdr-base = <0x440>;
315 317
316 /* Outbound ranges, one memory and one IO, 318 /* Outbound ranges, one memory and one IO,
317 * later cannot be changed 319 * later cannot be changed
318 */ 320 */
319 ranges = <02000000 0 80000000 98000000 0 08000000 321 ranges = <0x02000000 0x00000000 0x80000000 0x98000000 0x00000000 0x08000000
320 01000000 0 00000000 e0010000 0 00010000>; 322 0x01000000 0x00000000 0x00000000 0xe0010000 0x00000000 0x00010000>;
321 323
322 /* Inbound 2GB range starting at 0 */ 324 /* Inbound 2GB range starting at 0 */
323 dma-ranges = <42000000 0 0 0 0 80000000>; 325 dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x80000000>;
324 326
325 /* This drives busses 0x40 to 0x7f */ 327 /* This drives busses 0x40 to 0x7f */
326 bus-range = <40 7f>; 328 bus-range = <0x40 0x7f>;
327 329
328 /* Legacy interrupts (note the weird polarity, the bridge seems 330 /* Legacy interrupts (note the weird polarity, the bridge seems
329 * to invert PCIe legacy interrupts). 331 * to invert PCIe legacy interrupts).
@@ -333,12 +335,12 @@
333 * below are basically de-swizzled numbers. 335 * below are basically de-swizzled numbers.
334 * The real slot is on idsel 0, so the swizzling is 1:1 336 * The real slot is on idsel 0, so the swizzling is 1:1
335 */ 337 */
336 interrupt-map-mask = <0000 0 0 7>; 338 interrupt-map-mask = <0x0 0x0 0x0 0x7>;
337 interrupt-map = < 339 interrupt-map = <
338 0000 0 0 1 &UIC2 b 4 /* swizzled int A */ 340 0x0 0x0 0x0 0x1 &UIC2 0xb 0x4 /* swizzled int A */
339 0000 0 0 2 &UIC2 c 4 /* swizzled int B */ 341 0x0 0x0 0x0 0x2 &UIC2 0xc 0x4 /* swizzled int B */
340 0000 0 0 3 &UIC2 d 4 /* swizzled int C */ 342 0x0 0x0 0x0 0x3 &UIC2 0xd 0x4 /* swizzled int C */
341 0000 0 0 4 &UIC2 e 4 /* swizzled int D */>; 343 0x0 0x0 0x0 0x4 &UIC2 0xe 0x4 /* swizzled int D */>;
342 }; 344 };
343 }; 345 };
344}; 346};
diff --git a/arch/powerpc/boot/dts/mpc7448hpc2.dts b/arch/powerpc/boot/dts/mpc7448hpc2.dts
index 4936349b87cd..705c23c14f32 100644
--- a/arch/powerpc/boot/dts/mpc7448hpc2.dts
+++ b/arch/powerpc/boot/dts/mpc7448hpc2.dts
@@ -124,14 +124,12 @@
124 }; 124 };
125 125
126 mpic: pic@7400 { 126 mpic: pic@7400 {
127 clock-frequency = <0>;
128 interrupt-controller; 127 interrupt-controller;
129 #address-cells = <0>; 128 #address-cells = <0>;
130 #interrupt-cells = <2>; 129 #interrupt-cells = <2>;
131 reg = <0x7400 0x400>; 130 reg = <0x7400 0x400>;
132 compatible = "chrp,open-pic"; 131 compatible = "chrp,open-pic";
133 device_type = "open-pic"; 132 device_type = "open-pic";
134 big-endian;
135 }; 133 };
136 pci@1000 { 134 pci@1000 {
137 compatible = "tsi108-pci"; 135 compatible = "tsi108-pci";
diff --git a/arch/powerpc/boot/dts/mpc8540ads.dts b/arch/powerpc/boot/dts/mpc8540ads.dts
index 18033ed0b535..79881a1fb8aa 100644
--- a/arch/powerpc/boot/dts/mpc8540ads.dts
+++ b/arch/powerpc/boot/dts/mpc8540ads.dts
@@ -40,6 +40,7 @@
40 timebase-frequency = <0>; // 33 MHz, from uboot 40 timebase-frequency = <0>; // 33 MHz, from uboot
41 bus-frequency = <0>; // 166 MHz 41 bus-frequency = <0>; // 166 MHz
42 clock-frequency = <0>; // 825 MHz, from uboot 42 clock-frequency = <0>; // 825 MHz, from uboot
43 next-level-cache = <&L2>;
43 }; 44 };
44 }; 45 };
45 46
@@ -63,7 +64,7 @@
63 interrupts = <18 2>; 64 interrupts = <18 2>;
64 }; 65 };
65 66
66 l2-cache-controller@20000 { 67 L2: l2-cache-controller@20000 {
67 compatible = "fsl,8540-l2-cache-controller"; 68 compatible = "fsl,8540-l2-cache-controller";
68 reg = <0x20000 0x1000>; 69 reg = <0x20000 0x1000>;
69 cache-line-size = <32>; // 32 bytes 70 cache-line-size = <32>; // 32 bytes
@@ -165,14 +166,12 @@
165 interrupt-parent = <&mpic>; 166 interrupt-parent = <&mpic>;
166 }; 167 };
167 mpic: pic@40000 { 168 mpic: pic@40000 {
168 clock-frequency = <0>;
169 interrupt-controller; 169 interrupt-controller;
170 #address-cells = <0>; 170 #address-cells = <0>;
171 #interrupt-cells = <2>; 171 #interrupt-cells = <2>;
172 reg = <0x40000 0x40000>; 172 reg = <0x40000 0x40000>;
173 compatible = "chrp,open-pic"; 173 compatible = "chrp,open-pic";
174 device_type = "open-pic"; 174 device_type = "open-pic";
175 big-endian;
176 }; 175 };
177 }; 176 };
178 177
diff --git a/arch/powerpc/boot/dts/mpc8541cds.dts b/arch/powerpc/boot/dts/mpc8541cds.dts
index 663c7c50ca45..66192aa0f311 100644
--- a/arch/powerpc/boot/dts/mpc8541cds.dts
+++ b/arch/powerpc/boot/dts/mpc8541cds.dts
@@ -40,6 +40,7 @@
40 timebase-frequency = <0>; // 33 MHz, from uboot 40 timebase-frequency = <0>; // 33 MHz, from uboot
41 bus-frequency = <0>; // 166 MHz 41 bus-frequency = <0>; // 166 MHz
42 clock-frequency = <0>; // 825 MHz, from uboot 42 clock-frequency = <0>; // 825 MHz, from uboot
43 next-level-cache = <&L2>;
43 }; 44 };
44 }; 45 };
45 46
@@ -63,7 +64,7 @@
63 interrupts = <18 2>; 64 interrupts = <18 2>;
64 }; 65 };
65 66
66 l2-cache-controller@20000 { 67 L2: l2-cache-controller@20000 {
67 compatible = "fsl,8541-l2-cache-controller"; 68 compatible = "fsl,8541-l2-cache-controller";
68 reg = <0x20000 0x1000>; 69 reg = <0x20000 0x1000>;
69 cache-line-size = <32>; // 32 bytes 70 cache-line-size = <32>; // 32 bytes
@@ -148,14 +149,12 @@
148 }; 149 };
149 150
150 mpic: pic@40000 { 151 mpic: pic@40000 {
151 clock-frequency = <0>;
152 interrupt-controller; 152 interrupt-controller;
153 #address-cells = <0>; 153 #address-cells = <0>;
154 #interrupt-cells = <2>; 154 #interrupt-cells = <2>;
155 reg = <0x40000 0x40000>; 155 reg = <0x40000 0x40000>;
156 compatible = "chrp,open-pic"; 156 compatible = "chrp,open-pic";
157 device_type = "open-pic"; 157 device_type = "open-pic";
158 big-endian;
159 }; 158 };
160 159
161 cpm@919c0 { 160 cpm@919c0 {
diff --git a/arch/powerpc/boot/dts/mpc8544ds.dts b/arch/powerpc/boot/dts/mpc8544ds.dts
index 6a0d8db96d97..6cf533f4b5fb 100644
--- a/arch/powerpc/boot/dts/mpc8544ds.dts
+++ b/arch/powerpc/boot/dts/mpc8544ds.dts
@@ -41,6 +41,7 @@
41 timebase-frequency = <0>; 41 timebase-frequency = <0>;
42 bus-frequency = <0>; 42 bus-frequency = <0>;
43 clock-frequency = <0>; 43 clock-frequency = <0>;
44 next-level-cache = <&L2>;
44 }; 45 };
45 }; 46 };
46 47
@@ -65,7 +66,7 @@
65 interrupts = <18 2>; 66 interrupts = <18 2>;
66 }; 67 };
67 68
68 l2-cache-controller@20000 { 69 L2: l2-cache-controller@20000 {
69 compatible = "fsl,8544-l2-cache-controller"; 70 compatible = "fsl,8544-l2-cache-controller";
70 reg = <0x20000 0x1000>; 71 reg = <0x20000 0x1000>;
71 cache-line-size = <32>; // 32 bytes 72 cache-line-size = <32>; // 32 bytes
@@ -210,14 +211,28 @@
210 }; 211 };
211 212
212 mpic: pic@40000 { 213 mpic: pic@40000 {
213 clock-frequency = <0>;
214 interrupt-controller; 214 interrupt-controller;
215 #address-cells = <0>; 215 #address-cells = <0>;
216 #interrupt-cells = <2>; 216 #interrupt-cells = <2>;
217 reg = <0x40000 0x40000>; 217 reg = <0x40000 0x40000>;
218 compatible = "chrp,open-pic"; 218 compatible = "chrp,open-pic";
219 device_type = "open-pic"; 219 device_type = "open-pic";
220 big-endian; 220 };
221
222 msi@41600 {
223 compatible = "fsl,mpc8544-msi", "fsl,mpic-msi";
224 reg = <0x41600 0x80>;
225 msi-available-ranges = <0 0x100>;
226 interrupts = <
227 0xe0 0
228 0xe1 0
229 0xe2 0
230 0xe3 0
231 0xe4 0
232 0xe5 0
233 0xe6 0
234 0xe7 0>;
235 interrupt-parent = <&mpic>;
221 }; 236 };
222 }; 237 };
223 238
diff --git a/arch/powerpc/boot/dts/mpc8548cds.dts b/arch/powerpc/boot/dts/mpc8548cds.dts
index fa298a8c81cc..205598d51f25 100644
--- a/arch/powerpc/boot/dts/mpc8548cds.dts
+++ b/arch/powerpc/boot/dts/mpc8548cds.dts
@@ -45,6 +45,7 @@
45 timebase-frequency = <0>; // 33 MHz, from uboot 45 timebase-frequency = <0>; // 33 MHz, from uboot
46 bus-frequency = <0>; // 166 MHz 46 bus-frequency = <0>; // 166 MHz
47 clock-frequency = <0>; // 825 MHz, from uboot 47 clock-frequency = <0>; // 825 MHz, from uboot
48 next-level-cache = <&L2>;
48 }; 49 };
49 }; 50 };
50 51
@@ -68,7 +69,7 @@
68 interrupts = <18 2>; 69 interrupts = <18 2>;
69 }; 70 };
70 71
71 l2-cache-controller@20000 { 72 L2: l2-cache-controller@20000 {
72 compatible = "fsl,8548-l2-cache-controller"; 73 compatible = "fsl,8548-l2-cache-controller";
73 reg = <0x20000 0x1000>; 74 reg = <0x20000 0x1000>;
74 cache-line-size = <32>; // 32 bytes 75 cache-line-size = <32>; // 32 bytes
@@ -208,14 +209,12 @@
208 }; 209 };
209 210
210 mpic: pic@40000 { 211 mpic: pic@40000 {
211 clock-frequency = <0>;
212 interrupt-controller; 212 interrupt-controller;
213 #address-cells = <0>; 213 #address-cells = <0>;
214 #interrupt-cells = <2>; 214 #interrupt-cells = <2>;
215 reg = <0x40000 0x40000>; 215 reg = <0x40000 0x40000>;
216 compatible = "chrp,open-pic"; 216 compatible = "chrp,open-pic";
217 device_type = "open-pic"; 217 device_type = "open-pic";
218 big-endian;
219 }; 218 };
220 }; 219 };
221 220
diff --git a/arch/powerpc/boot/dts/mpc8555cds.dts b/arch/powerpc/boot/dts/mpc8555cds.dts
index b025c566c10d..7c9d0b16d7e5 100644
--- a/arch/powerpc/boot/dts/mpc8555cds.dts
+++ b/arch/powerpc/boot/dts/mpc8555cds.dts
@@ -40,6 +40,7 @@
40 timebase-frequency = <0>; // 33 MHz, from uboot 40 timebase-frequency = <0>; // 33 MHz, from uboot
41 bus-frequency = <0>; // 166 MHz 41 bus-frequency = <0>; // 166 MHz
42 clock-frequency = <0>; // 825 MHz, from uboot 42 clock-frequency = <0>; // 825 MHz, from uboot
43 next-level-cache = <&L2>;
43 }; 44 };
44 }; 45 };
45 46
@@ -63,7 +64,7 @@
63 interrupts = <18 2>; 64 interrupts = <18 2>;
64 }; 65 };
65 66
66 l2-cache-controller@20000 { 67 L2: l2-cache-controller@20000 {
67 compatible = "fsl,8555-l2-cache-controller"; 68 compatible = "fsl,8555-l2-cache-controller";
68 reg = <0x20000 0x1000>; 69 reg = <0x20000 0x1000>;
69 cache-line-size = <32>; // 32 bytes 70 cache-line-size = <32>; // 32 bytes
@@ -148,14 +149,12 @@
148 }; 149 };
149 150
150 mpic: pic@40000 { 151 mpic: pic@40000 {
151 clock-frequency = <0>;
152 interrupt-controller; 152 interrupt-controller;
153 #address-cells = <0>; 153 #address-cells = <0>;
154 #interrupt-cells = <2>; 154 #interrupt-cells = <2>;
155 reg = <0x40000 0x40000>; 155 reg = <0x40000 0x40000>;
156 compatible = "chrp,open-pic"; 156 compatible = "chrp,open-pic";
157 device_type = "open-pic"; 157 device_type = "open-pic";
158 big-endian;
159 }; 158 };
160 159
161 cpm@919c0 { 160 cpm@919c0 {
diff --git a/arch/powerpc/boot/dts/mpc8560ads.dts b/arch/powerpc/boot/dts/mpc8560ads.dts
index 0cc16ab305d1..5d9f3c4b5b71 100644
--- a/arch/powerpc/boot/dts/mpc8560ads.dts
+++ b/arch/powerpc/boot/dts/mpc8560ads.dts
@@ -64,7 +64,7 @@
64 interrupts = <18 2>; 64 interrupts = <18 2>;
65 }; 65 };
66 66
67 l2-cache-controller@20000 { 67 L2: l2-cache-controller@20000 {
68 compatible = "fsl,8540-l2-cache-controller"; 68 compatible = "fsl,8540-l2-cache-controller";
69 reg = <0x20000 0x1000>; 69 reg = <0x20000 0x1000>;
70 cache-line-size = <32>; // 32 bytes 70 cache-line-size = <32>; // 32 bytes
@@ -134,6 +134,7 @@
134 #address-cells = <0>; 134 #address-cells = <0>;
135 #interrupt-cells = <2>; 135 #interrupt-cells = <2>;
136 reg = <0x40000 0x40000>; 136 reg = <0x40000 0x40000>;
137 compatible = "chrp,open-pic";
137 device_type = "open-pic"; 138 device_type = "open-pic";
138 }; 139 };
139 140
diff --git a/arch/powerpc/boot/dts/mpc8568mds.dts b/arch/powerpc/boot/dts/mpc8568mds.dts
index a025a8ededc5..d7af8db1a22f 100644
--- a/arch/powerpc/boot/dts/mpc8568mds.dts
+++ b/arch/powerpc/boot/dts/mpc8568mds.dts
@@ -42,6 +42,7 @@
42 timebase-frequency = <0>; 42 timebase-frequency = <0>;
43 bus-frequency = <0>; 43 bus-frequency = <0>;
44 clock-frequency = <0>; 44 clock-frequency = <0>;
45 next-level-cache = <&L2>;
45 }; 46 };
46 }; 47 };
47 48
@@ -70,7 +71,7 @@
70 interrupts = <18 2>; 71 interrupts = <18 2>;
71 }; 72 };
72 73
73 l2-cache-controller@20000 { 74 L2: l2-cache-controller@20000 {
74 compatible = "fsl,8568-l2-cache-controller"; 75 compatible = "fsl,8568-l2-cache-controller";
75 reg = <0x20000 0x1000>; 76 reg = <0x20000 0x1000>;
76 cache-line-size = <32>; // 32 bytes 77 cache-line-size = <32>; // 32 bytes
@@ -202,14 +203,12 @@
202 }; 203 };
203 204
204 mpic: pic@40000 { 205 mpic: pic@40000 {
205 clock-frequency = <0>;
206 interrupt-controller; 206 interrupt-controller;
207 #address-cells = <0>; 207 #address-cells = <0>;
208 #interrupt-cells = <2>; 208 #interrupt-cells = <2>;
209 reg = <0x40000 0x40000>; 209 reg = <0x40000 0x40000>;
210 compatible = "chrp,open-pic"; 210 compatible = "chrp,open-pic";
211 device_type = "open-pic"; 211 device_type = "open-pic";
212 big-endian;
213 }; 212 };
214 213
215 par_io@e0100 { 214 par_io@e0100 {
diff --git a/arch/powerpc/boot/dts/mpc8572ds.dts b/arch/powerpc/boot/dts/mpc8572ds.dts
index 66f27ab613a2..a444e6a2387d 100644
--- a/arch/powerpc/boot/dts/mpc8572ds.dts
+++ b/arch/powerpc/boot/dts/mpc8572ds.dts
@@ -42,6 +42,7 @@
42 timebase-frequency = <0>; 42 timebase-frequency = <0>;
43 bus-frequency = <0>; 43 bus-frequency = <0>;
44 clock-frequency = <0>; 44 clock-frequency = <0>;
45 next-level-cache = <&L2>;
45 }; 46 };
46 47
47 PowerPC,8572@1 { 48 PowerPC,8572@1 {
@@ -54,6 +55,7 @@
54 timebase-frequency = <0>; 55 timebase-frequency = <0>;
55 bus-frequency = <0>; 56 bus-frequency = <0>;
56 clock-frequency = <0>; 57 clock-frequency = <0>;
58 next-level-cache = <&L2>;
57 }; 59 };
58 }; 60 };
59 61
@@ -84,7 +86,7 @@
84 interrupts = <18 2>; 86 interrupts = <18 2>;
85 }; 87 };
86 88
87 l2-cache-controller@20000 { 89 L2: l2-cache-controller@20000 {
88 compatible = "fsl,mpc8572-l2-cache-controller"; 90 compatible = "fsl,mpc8572-l2-cache-controller";
89 reg = <0x20000 0x1000>; 91 reg = <0x20000 0x1000>;
90 cache-line-size = <32>; // 32 bytes 92 cache-line-size = <32>; // 32 bytes
@@ -221,15 +223,29 @@
221 fsl,has-rstcr; 223 fsl,has-rstcr;
222 }; 224 };
223 225
226 msi@41600 {
227 compatible = "fsl,mpc8572-msi", "fsl,mpic-msi";
228 reg = <0x41600 0x80>;
229 msi-available-ranges = <0 0x100>;
230 interrupts = <
231 0xe0 0
232 0xe1 0
233 0xe2 0
234 0xe3 0
235 0xe4 0
236 0xe5 0
237 0xe6 0
238 0xe7 0>;
239 interrupt-parent = <&mpic>;
240 };
241
224 mpic: pic@40000 { 242 mpic: pic@40000 {
225 clock-frequency = <0>;
226 interrupt-controller; 243 interrupt-controller;
227 #address-cells = <0>; 244 #address-cells = <0>;
228 #interrupt-cells = <2>; 245 #interrupt-cells = <2>;
229 reg = <0x40000 0x40000>; 246 reg = <0x40000 0x40000>;
230 compatible = "chrp,open-pic"; 247 compatible = "chrp,open-pic";
231 device_type = "open-pic"; 248 device_type = "open-pic";
232 big-endian;
233 }; 249 };
234 }; 250 };
235 251
diff --git a/arch/powerpc/boot/dts/mpc8610_hpcd.dts b/arch/powerpc/boot/dts/mpc8610_hpcd.dts
index fa9b6bbeb5af..65a5f64b2339 100644
--- a/arch/powerpc/boot/dts/mpc8610_hpcd.dts
+++ b/arch/powerpc/boot/dts/mpc8610_hpcd.dts
@@ -172,14 +172,28 @@
172 }; 172 };
173 173
174 mpic: interrupt-controller@40000 { 174 mpic: interrupt-controller@40000 {
175 clock-frequency = <0>;
176 interrupt-controller; 175 interrupt-controller;
177 #address-cells = <0>; 176 #address-cells = <0>;
178 #interrupt-cells = <2>; 177 #interrupt-cells = <2>;
179 reg = <0x40000 0x40000>; 178 reg = <0x40000 0x40000>;
180 compatible = "chrp,open-pic"; 179 compatible = "chrp,open-pic";
181 device_type = "open-pic"; 180 device_type = "open-pic";
182 big-endian; 181 };
182
183 msi@41600 {
184 compatible = "fsl,mpc8610-msi", "fsl,mpic-msi";
185 reg = <0x41600 0x80>;
186 msi-available-ranges = <0 0x100>;
187 interrupts = <
188 0xe0 0
189 0xe1 0
190 0xe2 0
191 0xe3 0
192 0xe4 0
193 0xe5 0
194 0xe6 0
195 0xe7 0>;
196 interrupt-parent = <&mpic>;
183 }; 197 };
184 198
185 global-utilities@e0000 { 199 global-utilities@e0000 {
diff --git a/arch/powerpc/boot/dts/mpc8641_hpcn.dts b/arch/powerpc/boot/dts/mpc8641_hpcn.dts
index 1e4bfe9cadb9..14f718d5e50b 100644
--- a/arch/powerpc/boot/dts/mpc8641_hpcn.dts
+++ b/arch/powerpc/boot/dts/mpc8641_hpcn.dts
@@ -239,14 +239,12 @@
239 }; 239 };
240 240
241 mpic: pic@40000 { 241 mpic: pic@40000 {
242 clock-frequency = <0>;
243 interrupt-controller; 242 interrupt-controller;
244 #address-cells = <0>; 243 #address-cells = <0>;
245 #interrupt-cells = <2>; 244 #interrupt-cells = <2>;
246 reg = <0x40000 0x40000>; 245 reg = <0x40000 0x40000>;
247 compatible = "chrp,open-pic"; 246 compatible = "chrp,open-pic";
248 device_type = "open-pic"; 247 device_type = "open-pic";
249 big-endian;
250 }; 248 };
251 249
252 global-utilities@e0000 { 250 global-utilities@e0000 {
diff --git a/arch/powerpc/boot/dts/ps3.dts b/arch/powerpc/boot/dts/ps3.dts
index 379ded282d5e..96ba5b512afe 100644
--- a/arch/powerpc/boot/dts/ps3.dts
+++ b/arch/powerpc/boot/dts/ps3.dts
@@ -18,6 +18,8 @@
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */ 19 */
20 20
21/dts-v1/;
22
21/ { 23/ {
22 model = "SonyPS3"; 24 model = "SonyPS3";
23 compatible = "sony,ps3"; 25 compatible = "sony,ps3";
@@ -34,7 +36,7 @@
34 36
35 memory { 37 memory {
36 device_type = "memory"; 38 device_type = "memory";
37 reg = <0 0 0 0>; 39 reg = <0x00000000 0x00000000 0x00000000 0x00000000>;
38 }; 40 };
39 41
40 /* 42 /*
@@ -55,14 +57,14 @@
55 57
56 cpu@0 { 58 cpu@0 {
57 device_type = "cpu"; 59 device_type = "cpu";
58 reg = <0>; 60 reg = <0x00000000>;
59 ibm,ppc-interrupt-server#s = <0 1>; 61 ibm,ppc-interrupt-server#s = <0x0 0x1>;
60 clock-frequency = <0>; 62 clock-frequency = <0>;
61 timebase-frequency = <0>; 63 timebase-frequency = <0>;
62 i-cache-size = <8000>; 64 i-cache-size = <32768>;
63 d-cache-size = <8000>; 65 d-cache-size = <32768>;
64 i-cache-line-size = <80>; 66 i-cache-line-size = <128>;
65 d-cache-line-size = <80>; 67 d-cache-line-size = <128>;
66 }; 68 };
67 }; 69 };
68}; 70};
diff --git a/arch/powerpc/boot/dts/rainier.dts b/arch/powerpc/boot/dts/rainier.dts
index 6a8fa7089ea2..2afb63a42ea9 100644
--- a/arch/powerpc/boot/dts/rainier.dts
+++ b/arch/powerpc/boot/dts/rainier.dts
@@ -12,12 +12,14 @@
12 * 12 *
13 */ 13 */
14 14
15/dts-v1/;
16
15/ { 17/ {
16 #address-cells = <2>; 18 #address-cells = <2>;
17 #size-cells = <1>; 19 #size-cells = <1>;
18 model = "amcc,rainier"; 20 model = "amcc,rainier";
19 compatible = "amcc,rainier"; 21 compatible = "amcc,rainier";
20 dcr-parent = <&/cpus/cpu@0>; 22 dcr-parent = <&{/cpus/cpu@0}>;
21 23
22 aliases { 24 aliases {
23 ethernet0 = &EMAC0; 25 ethernet0 = &EMAC0;
@@ -35,13 +37,13 @@
35 cpu@0 { 37 cpu@0 {
36 device_type = "cpu"; 38 device_type = "cpu";
37 model = "PowerPC,440GRx"; 39 model = "PowerPC,440GRx";
38 reg = <0>; 40 reg = <0x00000000>;
39 clock-frequency = <0>; /* Filled in by zImage */ 41 clock-frequency = <0>; /* Filled in by zImage */
40 timebase-frequency = <0>; /* Filled in by zImage */ 42 timebase-frequency = <0>; /* Filled in by zImage */
41 i-cache-line-size = <20>; 43 i-cache-line-size = <32>;
42 d-cache-line-size = <20>; 44 d-cache-line-size = <32>;
43 i-cache-size = <8000>; 45 i-cache-size = <32768>;
44 d-cache-size = <8000>; 46 d-cache-size = <32768>;
45 dcr-controller; 47 dcr-controller;
46 dcr-access-method = "native"; 48 dcr-access-method = "native";
47 }; 49 };
@@ -49,14 +51,14 @@
49 51
50 memory { 52 memory {
51 device_type = "memory"; 53 device_type = "memory";
52 reg = <0 0 0>; /* Filled in by zImage */ 54 reg = <0x00000000 0x00000000 0x00000000>; /* Filled in by zImage */
53 }; 55 };
54 56
55 UIC0: interrupt-controller0 { 57 UIC0: interrupt-controller0 {
56 compatible = "ibm,uic-440grx","ibm,uic"; 58 compatible = "ibm,uic-440grx","ibm,uic";
57 interrupt-controller; 59 interrupt-controller;
58 cell-index = <0>; 60 cell-index = <0>;
59 dcr-reg = <0c0 009>; 61 dcr-reg = <0x0c0 0x009>;
60 #address-cells = <0>; 62 #address-cells = <0>;
61 #size-cells = <0>; 63 #size-cells = <0>;
62 #interrupt-cells = <2>; 64 #interrupt-cells = <2>;
@@ -66,11 +68,11 @@
66 compatible = "ibm,uic-440grx","ibm,uic"; 68 compatible = "ibm,uic-440grx","ibm,uic";
67 interrupt-controller; 69 interrupt-controller;
68 cell-index = <1>; 70 cell-index = <1>;
69 dcr-reg = <0d0 009>; 71 dcr-reg = <0x0d0 0x009>;
70 #address-cells = <0>; 72 #address-cells = <0>;
71 #size-cells = <0>; 73 #size-cells = <0>;
72 #interrupt-cells = <2>; 74 #interrupt-cells = <2>;
73 interrupts = <1e 4 1f 4>; /* cascade */ 75 interrupts = <0x1e 0x4 0x1f 0x4>; /* cascade */
74 interrupt-parent = <&UIC0>; 76 interrupt-parent = <&UIC0>;
75 }; 77 };
76 78
@@ -78,22 +80,22 @@
78 compatible = "ibm,uic-440grx","ibm,uic"; 80 compatible = "ibm,uic-440grx","ibm,uic";
79 interrupt-controller; 81 interrupt-controller;
80 cell-index = <2>; 82 cell-index = <2>;
81 dcr-reg = <0e0 009>; 83 dcr-reg = <0x0e0 0x009>;
82 #address-cells = <0>; 84 #address-cells = <0>;
83 #size-cells = <0>; 85 #size-cells = <0>;
84 #interrupt-cells = <2>; 86 #interrupt-cells = <2>;
85 interrupts = <1c 4 1d 4>; /* cascade */ 87 interrupts = <0x1c 0x4 0x1d 0x4>; /* cascade */
86 interrupt-parent = <&UIC0>; 88 interrupt-parent = <&UIC0>;
87 }; 89 };
88 90
89 SDR0: sdr { 91 SDR0: sdr {
90 compatible = "ibm,sdr-440grx", "ibm,sdr-440ep"; 92 compatible = "ibm,sdr-440grx", "ibm,sdr-440ep";
91 dcr-reg = <00e 002>; 93 dcr-reg = <0x00e 0x002>;
92 }; 94 };
93 95
94 CPR0: cpr { 96 CPR0: cpr {
95 compatible = "ibm,cpr-440grx", "ibm,cpr-440ep"; 97 compatible = "ibm,cpr-440grx", "ibm,cpr-440ep";
96 dcr-reg = <00c 002>; 98 dcr-reg = <0x00c 0x002>;
97 }; 99 };
98 100
99 plb { 101 plb {
@@ -105,80 +107,80 @@
105 107
106 SDRAM0: sdram { 108 SDRAM0: sdram {
107 compatible = "ibm,sdram-440grx", "ibm,sdram-44x-ddr2denali"; 109 compatible = "ibm,sdram-440grx", "ibm,sdram-44x-ddr2denali";
108 dcr-reg = <010 2>; 110 dcr-reg = <0x010 0x002>;
109 }; 111 };
110 112
111 DMA0: dma { 113 DMA0: dma {
112 compatible = "ibm,dma-440grx", "ibm,dma-4xx"; 114 compatible = "ibm,dma-440grx", "ibm,dma-4xx";
113 dcr-reg = <100 027>; 115 dcr-reg = <0x100 0x027>;
114 }; 116 };
115 117
116 MAL0: mcmal { 118 MAL0: mcmal {
117 compatible = "ibm,mcmal-440grx", "ibm,mcmal2"; 119 compatible = "ibm,mcmal-440grx", "ibm,mcmal2";
118 dcr-reg = <180 62>; 120 dcr-reg = <0x180 0x062>;
119 num-tx-chans = <2>; 121 num-tx-chans = <2>;
120 num-rx-chans = <2>; 122 num-rx-chans = <2>;
121 interrupt-parent = <&MAL0>; 123 interrupt-parent = <&MAL0>;
122 interrupts = <0 1 2 3 4>; 124 interrupts = <0x0 0x1 0x2 0x3 0x4>;
123 #interrupt-cells = <1>; 125 #interrupt-cells = <1>;
124 #address-cells = <0>; 126 #address-cells = <0>;
125 #size-cells = <0>; 127 #size-cells = <0>;
126 interrupt-map = </*TXEOB*/ 0 &UIC0 a 4 128 interrupt-map = </*TXEOB*/ 0x0 &UIC0 0xa 0x4
127 /*RXEOB*/ 1 &UIC0 b 4 129 /*RXEOB*/ 0x1 &UIC0 0xb 0x4
128 /*SERR*/ 2 &UIC1 0 4 130 /*SERR*/ 0x2 &UIC1 0x0 0x4
129 /*TXDE*/ 3 &UIC1 1 4 131 /*TXDE*/ 0x3 &UIC1 0x1 0x4
130 /*RXDE*/ 4 &UIC1 2 4>; 132 /*RXDE*/ 0x4 &UIC1 0x2 0x4>;
131 interrupt-map-mask = <ffffffff>; 133 interrupt-map-mask = <0xffffffff>;
132 }; 134 };
133 135
134 POB0: opb { 136 POB0: opb {
135 compatible = "ibm,opb-440grx", "ibm,opb"; 137 compatible = "ibm,opb-440grx", "ibm,opb";
136 #address-cells = <1>; 138 #address-cells = <1>;
137 #size-cells = <1>; 139 #size-cells = <1>;
138 ranges = <00000000 1 00000000 80000000 140 ranges = <0x00000000 0x00000001 0x00000000 0x80000000
139 80000000 1 80000000 80000000>; 141 0x80000000 0x00000001 0x80000000 0x80000000>;
140 interrupt-parent = <&UIC1>; 142 interrupt-parent = <&UIC1>;
141 interrupts = <7 4>; 143 interrupts = <0x7 0x4>;
142 clock-frequency = <0>; /* Filled in by zImage */ 144 clock-frequency = <0>; /* Filled in by zImage */
143 145
144 EBC0: ebc { 146 EBC0: ebc {
145 compatible = "ibm,ebc-440grx", "ibm,ebc"; 147 compatible = "ibm,ebc-440grx", "ibm,ebc";
146 dcr-reg = <012 2>; 148 dcr-reg = <0x012 0x002>;
147 #address-cells = <2>; 149 #address-cells = <2>;
148 #size-cells = <1>; 150 #size-cells = <1>;
149 clock-frequency = <0>; /* Filled in by zImage */ 151 clock-frequency = <0>; /* Filled in by zImage */
150 interrupts = <5 1>; 152 interrupts = <0x5 0x1>;
151 interrupt-parent = <&UIC1>; 153 interrupt-parent = <&UIC1>;
152 154
153 nor_flash@0,0 { 155 nor_flash@0,0 {
154 compatible = "amd,s29gl256n", "cfi-flash"; 156 compatible = "amd,s29gl256n", "cfi-flash";
155 bank-width = <2>; 157 bank-width = <2>;
156 reg = <0 000000 4000000>; 158 reg = <0x00000000 0x00000000 0x04000000>;
157 #address-cells = <1>; 159 #address-cells = <1>;
158 #size-cells = <1>; 160 #size-cells = <1>;
159 partition@0 { 161 partition@0 {
160 label = "Kernel"; 162 label = "Kernel";
161 reg = <0 180000>; 163 reg = <0x00000000 0x00180000>;
162 }; 164 };
163 partition@180000 { 165 partition@180000 {
164 label = "ramdisk"; 166 label = "ramdisk";
165 reg = <180000 200000>; 167 reg = <0x00180000 0x00200000>;
166 }; 168 };
167 partition@380000 { 169 partition@380000 {
168 label = "file system"; 170 label = "file system";
169 reg = <380000 3aa0000>; 171 reg = <0x00380000 0x03aa0000>;
170 }; 172 };
171 partition@3e20000 { 173 partition@3e20000 {
172 label = "kozio"; 174 label = "kozio";
173 reg = <3e20000 140000>; 175 reg = <0x03e20000 0x00140000>;
174 }; 176 };
175 partition@3f60000 { 177 partition@3f60000 {
176 label = "env"; 178 label = "env";
177 reg = <3f60000 40000>; 179 reg = <0x03f60000 0x00040000>;
178 }; 180 };
179 partition@3fa0000 { 181 partition@3fa0000 {
180 label = "u-boot"; 182 label = "u-boot";
181 reg = <3fa0000 60000>; 183 reg = <0x03fa0000 0x00060000>;
182 }; 184 };
183 }; 185 };
184 186
@@ -187,69 +189,69 @@
187 UART0: serial@ef600300 { 189 UART0: serial@ef600300 {
188 device_type = "serial"; 190 device_type = "serial";
189 compatible = "ns16550"; 191 compatible = "ns16550";
190 reg = <ef600300 8>; 192 reg = <0xef600300 0x00000008>;
191 virtual-reg = <ef600300>; 193 virtual-reg = <0xef600300>;
192 clock-frequency = <0>; /* Filled in by zImage */ 194 clock-frequency = <0>; /* Filled in by zImage */
193 current-speed = <1c200>; 195 current-speed = <115200>;
194 interrupt-parent = <&UIC0>; 196 interrupt-parent = <&UIC0>;
195 interrupts = <0 4>; 197 interrupts = <0x0 0x4>;
196 }; 198 };
197 199
198 UART1: serial@ef600400 { 200 UART1: serial@ef600400 {
199 device_type = "serial"; 201 device_type = "serial";
200 compatible = "ns16550"; 202 compatible = "ns16550";
201 reg = <ef600400 8>; 203 reg = <0xef600400 0x00000008>;
202 virtual-reg = <ef600400>; 204 virtual-reg = <0xef600400>;
203 clock-frequency = <0>; 205 clock-frequency = <0>;
204 current-speed = <0>; 206 current-speed = <0>;
205 interrupt-parent = <&UIC0>; 207 interrupt-parent = <&UIC0>;
206 interrupts = <1 4>; 208 interrupts = <0x1 0x4>;
207 }; 209 };
208 210
209 UART2: serial@ef600500 { 211 UART2: serial@ef600500 {
210 device_type = "serial"; 212 device_type = "serial";
211 compatible = "ns16550"; 213 compatible = "ns16550";
212 reg = <ef600500 8>; 214 reg = <0xef600500 0x00000008>;
213 virtual-reg = <ef600500>; 215 virtual-reg = <0xef600500>;
214 clock-frequency = <0>; 216 clock-frequency = <0>;
215 current-speed = <0>; 217 current-speed = <0>;
216 interrupt-parent = <&UIC1>; 218 interrupt-parent = <&UIC1>;
217 interrupts = <3 4>; 219 interrupts = <0x3 0x4>;
218 }; 220 };
219 221
220 UART3: serial@ef600600 { 222 UART3: serial@ef600600 {
221 device_type = "serial"; 223 device_type = "serial";
222 compatible = "ns16550"; 224 compatible = "ns16550";
223 reg = <ef600600 8>; 225 reg = <0xef600600 0x00000008>;
224 virtual-reg = <ef600600>; 226 virtual-reg = <0xef600600>;
225 clock-frequency = <0>; 227 clock-frequency = <0>;
226 current-speed = <0>; 228 current-speed = <0>;
227 interrupt-parent = <&UIC1>; 229 interrupt-parent = <&UIC1>;
228 interrupts = <4 4>; 230 interrupts = <0x4 0x4>;
229 }; 231 };
230 232
231 IIC0: i2c@ef600700 { 233 IIC0: i2c@ef600700 {
232 compatible = "ibm,iic-440grx", "ibm,iic"; 234 compatible = "ibm,iic-440grx", "ibm,iic";
233 reg = <ef600700 14>; 235 reg = <0xef600700 0x00000014>;
234 interrupt-parent = <&UIC0>; 236 interrupt-parent = <&UIC0>;
235 interrupts = <2 4>; 237 interrupts = <0x2 0x4>;
236 }; 238 };
237 239
238 IIC1: i2c@ef600800 { 240 IIC1: i2c@ef600800 {
239 compatible = "ibm,iic-440grx", "ibm,iic"; 241 compatible = "ibm,iic-440grx", "ibm,iic";
240 reg = <ef600800 14>; 242 reg = <0xef600800 0x00000014>;
241 interrupt-parent = <&UIC0>; 243 interrupt-parent = <&UIC0>;
242 interrupts = <7 4>; 244 interrupts = <0x7 0x4>;
243 }; 245 };
244 246
245 ZMII0: emac-zmii@ef600d00 { 247 ZMII0: emac-zmii@ef600d00 {
246 compatible = "ibm,zmii-440grx", "ibm,zmii"; 248 compatible = "ibm,zmii-440grx", "ibm,zmii";
247 reg = <ef600d00 c>; 249 reg = <0xef600d00 0x0000000c>;
248 }; 250 };
249 251
250 RGMII0: emac-rgmii@ef601000 { 252 RGMII0: emac-rgmii@ef601000 {
251 compatible = "ibm,rgmii-440grx", "ibm,rgmii"; 253 compatible = "ibm,rgmii-440grx", "ibm,rgmii";
252 reg = <ef601000 8>; 254 reg = <0xef601000 0x00000008>;
253 has-mdio; 255 has-mdio;
254 }; 256 };
255 257
@@ -257,23 +259,23 @@
257 device_type = "network"; 259 device_type = "network";
258 compatible = "ibm,emac-440grx", "ibm,emac-440epx", "ibm,emac4"; 260 compatible = "ibm,emac-440grx", "ibm,emac-440epx", "ibm,emac4";
259 interrupt-parent = <&EMAC0>; 261 interrupt-parent = <&EMAC0>;
260 interrupts = <0 1>; 262 interrupts = <0x0 0x1>;
261 #interrupt-cells = <1>; 263 #interrupt-cells = <1>;
262 #address-cells = <0>; 264 #address-cells = <0>;
263 #size-cells = <0>; 265 #size-cells = <0>;
264 interrupt-map = </*Status*/ 0 &UIC0 18 4 266 interrupt-map = </*Status*/ 0x0 &UIC0 0x18 0x4
265 /*Wake*/ 1 &UIC1 1d 4>; 267 /*Wake*/ 0x1 &UIC1 0x1d 0x4>;
266 reg = <ef600e00 70>; 268 reg = <0xef600e00 0x00000070>;
267 local-mac-address = [000000000000]; 269 local-mac-address = [000000000000];
268 mal-device = <&MAL0>; 270 mal-device = <&MAL0>;
269 mal-tx-channel = <0>; 271 mal-tx-channel = <0>;
270 mal-rx-channel = <0>; 272 mal-rx-channel = <0>;
271 cell-index = <0>; 273 cell-index = <0>;
272 max-frame-size = <2328>; 274 max-frame-size = <9000>;
273 rx-fifo-size = <1000>; 275 rx-fifo-size = <4096>;
274 tx-fifo-size = <800>; 276 tx-fifo-size = <2048>;
275 phy-mode = "rgmii"; 277 phy-mode = "rgmii";
276 phy-map = <00000000>; 278 phy-map = <0x00000000>;
277 zmii-device = <&ZMII0>; 279 zmii-device = <&ZMII0>;
278 zmii-channel = <0>; 280 zmii-channel = <0>;
279 rgmii-device = <&RGMII0>; 281 rgmii-device = <&RGMII0>;
@@ -286,23 +288,23 @@
286 device_type = "network"; 288 device_type = "network";
287 compatible = "ibm,emac-440grx", "ibm,emac-440epx", "ibm,emac4"; 289 compatible = "ibm,emac-440grx", "ibm,emac-440epx", "ibm,emac4";
288 interrupt-parent = <&EMAC1>; 290 interrupt-parent = <&EMAC1>;
289 interrupts = <0 1>; 291 interrupts = <0x0 0x1>;
290 #interrupt-cells = <1>; 292 #interrupt-cells = <1>;
291 #address-cells = <0>; 293 #address-cells = <0>;
292 #size-cells = <0>; 294 #size-cells = <0>;
293 interrupt-map = </*Status*/ 0 &UIC0 19 4 295 interrupt-map = </*Status*/ 0x0 &UIC0 0x19 0x4
294 /*Wake*/ 1 &UIC1 1f 4>; 296 /*Wake*/ 0x1 &UIC1 0x1f 0x4>;
295 reg = <ef600f00 70>; 297 reg = <0xef600f00 0x00000070>;
296 local-mac-address = [000000000000]; 298 local-mac-address = [000000000000];
297 mal-device = <&MAL0>; 299 mal-device = <&MAL0>;
298 mal-tx-channel = <1>; 300 mal-tx-channel = <1>;
299 mal-rx-channel = <1>; 301 mal-rx-channel = <1>;
300 cell-index = <1>; 302 cell-index = <1>;
301 max-frame-size = <2328>; 303 max-frame-size = <9000>;
302 rx-fifo-size = <1000>; 304 rx-fifo-size = <4096>;
303 tx-fifo-size = <800>; 305 tx-fifo-size = <2048>;
304 phy-mode = "rgmii"; 306 phy-mode = "rgmii";
305 phy-map = <00000000>; 307 phy-map = <0x00000000>;
306 zmii-device = <&ZMII0>; 308 zmii-device = <&ZMII0>;
307 zmii-channel = <1>; 309 zmii-channel = <1>;
308 rgmii-device = <&RGMII0>; 310 rgmii-device = <&RGMII0>;
@@ -319,24 +321,25 @@
319 #address-cells = <3>; 321 #address-cells = <3>;
320 compatible = "ibm,plb440grx-pci", "ibm,plb-pci"; 322 compatible = "ibm,plb440grx-pci", "ibm,plb-pci";
321 primary; 323 primary;
322 reg = <1 eec00000 8 /* Config space access */ 324 reg = <0x00000001 0xeec00000 0x00000008 /* Config space access */
323 1 eed00000 4 /* IACK */ 325 0x00000001 0xeed00000 0x00000004 /* IACK */
324 1 eed00000 4 /* Special cycle */ 326 0x00000001 0xeed00000 0x00000004 /* Special cycle */
325 1 ef400000 40>; /* Internal registers */ 327 0x00000001 0xef400000 0x00000040>; /* Internal registers */
326 328
327 /* Outbound ranges, one memory and one IO, 329 /* Outbound ranges, one memory and one IO,
328 * later cannot be changed. Chip supports a second 330 * later cannot be changed. Chip supports a second
329 * IO range but we don't use it for now 331 * IO range but we don't use it for now
330 */ 332 */
331 ranges = <02000000 0 80000000 1 80000000 0 10000000 333 ranges = <0x02000000 0x0 0x80000000 0x1 0x80000000 0x0 0x40000000
332 01000000 0 00000000 1 e8000000 0 00100000>; 334 0x01000000 0x0 0x00000000 0x1 0xe8000000 0x0 0x00010000
335 0x01000000 0x0 0x00000000 0x1 0xe8800000 0x0 0x03800000>;
333 336
334 /* Inbound 2GB range starting at 0 */ 337 /* Inbound 2GB range starting at 0 */
335 dma-ranges = <42000000 0 0 0 0 0 80000000>; 338 dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x0 0x80000000>;
336 339
337 /* All PCI interrupts are routed to IRQ 67 */ 340 /* All PCI interrupts are routed to IRQ 67 */
338 interrupt-map-mask = <0000 0 0 0>; 341 interrupt-map-mask = <0x0 0x0 0x0 0x0>;
339 interrupt-map = < 0000 0 0 0 &UIC2 3 8 >; 342 interrupt-map = < 0x0 0x0 0x0 0x0 &UIC2 0x3 0x8 >;
340 }; 343 };
341 }; 344 };
342 345
diff --git a/arch/powerpc/boot/dts/sbc8548.dts b/arch/powerpc/boot/dts/sbc8548.dts
index 22d967178fe9..d252e38283e7 100644
--- a/arch/powerpc/boot/dts/sbc8548.dts
+++ b/arch/powerpc/boot/dts/sbc8548.dts
@@ -44,6 +44,7 @@
44 timebase-frequency = <0>; // From uboot 44 timebase-frequency = <0>; // From uboot
45 bus-frequency = <0>; 45 bus-frequency = <0>;
46 clock-frequency = <0>; 46 clock-frequency = <0>;
47 next-level-cache = <&L2>;
47 }; 48 };
48 }; 49 };
49 50
@@ -161,7 +162,7 @@
161 interrupts = <0x12 0x2>; 162 interrupts = <0x12 0x2>;
162 }; 163 };
163 164
164 l2-cache-controller@20000 { 165 L2: l2-cache-controller@20000 {
165 compatible = "fsl,8548-l2-cache-controller"; 166 compatible = "fsl,8548-l2-cache-controller";
166 reg = <0x20000 0x1000>; 167 reg = <0x20000 0x1000>;
167 cache-line-size = <0x20>; // 32 bytes 168 cache-line-size = <0x20>; // 32 bytes
@@ -265,12 +266,10 @@
265 mpic: pic@40000 { 266 mpic: pic@40000 {
266 interrupt-controller; 267 interrupt-controller;
267 #address-cells = <0>; 268 #address-cells = <0>;
268 #size-cells = <0>;
269 #interrupt-cells = <2>; 269 #interrupt-cells = <2>;
270 reg = <0x40000 0x40000>; 270 reg = <0x40000 0x40000>;
271 compatible = "chrp,open-pic"; 271 compatible = "chrp,open-pic";
272 device_type = "open-pic"; 272 device_type = "open-pic";
273 big-endian;
274 }; 273 };
275 }; 274 };
276 275
diff --git a/arch/powerpc/boot/dts/sbc8560.dts b/arch/powerpc/boot/dts/sbc8560.dts
index 0476802fba60..e556c5a4cf95 100644
--- a/arch/powerpc/boot/dts/sbc8560.dts
+++ b/arch/powerpc/boot/dts/sbc8560.dts
@@ -43,6 +43,7 @@
43 timebase-frequency = <0>; // From uboot 43 timebase-frequency = <0>; // From uboot
44 bus-frequency = <0>; 44 bus-frequency = <0>;
45 clock-frequency = <0>; 45 clock-frequency = <0>;
46 next-level-cache = <&L2>;
46 }; 47 };
47 }; 48 };
48 49
@@ -66,7 +67,7 @@
66 interrupts = <0x12 0x2>; 67 interrupts = <0x12 0x2>;
67 }; 68 };
68 69
69 l2-cache-controller@20000 { 70 L2: l2-cache-controller@20000 {
70 compatible = "fsl,8560-l2-cache-controller"; 71 compatible = "fsl,8560-l2-cache-controller";
71 reg = <0x20000 0x1000>; 72 reg = <0x20000 0x1000>;
72 cache-line-size = <0x20>; // 32 bytes 73 cache-line-size = <0x20>; // 32 bytes
@@ -155,8 +156,8 @@
155 mpic: pic@40000 { 156 mpic: pic@40000 {
156 interrupt-controller; 157 interrupt-controller;
157 #address-cells = <0>; 158 #address-cells = <0>;
158 #size-cells = <0>;
159 #interrupt-cells = <2>; 159 #interrupt-cells = <2>;
160 compatible = "chrp,open-pic";
160 reg = <0x40000 0x40000>; 161 reg = <0x40000 0x40000>;
161 device_type = "open-pic"; 162 device_type = "open-pic";
162 }; 163 };
diff --git a/arch/powerpc/boot/dts/sequoia.dts b/arch/powerpc/boot/dts/sequoia.dts
index 72d67564bdfc..149dabc55217 100644
--- a/arch/powerpc/boot/dts/sequoia.dts
+++ b/arch/powerpc/boot/dts/sequoia.dts
@@ -12,12 +12,14 @@
12 * 12 *
13 */ 13 */
14 14
15/dts-v1/;
16
15/ { 17/ {
16 #address-cells = <2>; 18 #address-cells = <2>;
17 #size-cells = <1>; 19 #size-cells = <1>;
18 model = "amcc,sequoia"; 20 model = "amcc,sequoia";
19 compatible = "amcc,sequoia"; 21 compatible = "amcc,sequoia";
20 dcr-parent = <&/cpus/cpu@0>; 22 dcr-parent = <&{/cpus/cpu@0}>;
21 23
22 aliases { 24 aliases {
23 ethernet0 = &EMAC0; 25 ethernet0 = &EMAC0;
@@ -35,13 +37,13 @@
35 cpu@0 { 37 cpu@0 {
36 device_type = "cpu"; 38 device_type = "cpu";
37 model = "PowerPC,440EPx"; 39 model = "PowerPC,440EPx";
38 reg = <0>; 40 reg = <0x00000000>;
39 clock-frequency = <0>; /* Filled in by zImage */ 41 clock-frequency = <0>; /* Filled in by zImage */
40 timebase-frequency = <0>; /* Filled in by zImage */ 42 timebase-frequency = <0>; /* Filled in by zImage */
41 i-cache-line-size = <20>; 43 i-cache-line-size = <32>;
42 d-cache-line-size = <20>; 44 d-cache-line-size = <32>;
43 i-cache-size = <8000>; 45 i-cache-size = <32768>;
44 d-cache-size = <8000>; 46 d-cache-size = <32768>;
45 dcr-controller; 47 dcr-controller;
46 dcr-access-method = "native"; 48 dcr-access-method = "native";
47 }; 49 };
@@ -49,14 +51,14 @@
49 51
50 memory { 52 memory {
51 device_type = "memory"; 53 device_type = "memory";
52 reg = <0 0 0>; /* Filled in by zImage */ 54 reg = <0x00000000 0x00000000 0x00000000>; /* Filled in by zImage */
53 }; 55 };
54 56
55 UIC0: interrupt-controller0 { 57 UIC0: interrupt-controller0 {
56 compatible = "ibm,uic-440epx","ibm,uic"; 58 compatible = "ibm,uic-440epx","ibm,uic";
57 interrupt-controller; 59 interrupt-controller;
58 cell-index = <0>; 60 cell-index = <0>;
59 dcr-reg = <0c0 009>; 61 dcr-reg = <0x0c0 0x009>;
60 #address-cells = <0>; 62 #address-cells = <0>;
61 #size-cells = <0>; 63 #size-cells = <0>;
62 #interrupt-cells = <2>; 64 #interrupt-cells = <2>;
@@ -66,11 +68,11 @@
66 compatible = "ibm,uic-440epx","ibm,uic"; 68 compatible = "ibm,uic-440epx","ibm,uic";
67 interrupt-controller; 69 interrupt-controller;
68 cell-index = <1>; 70 cell-index = <1>;
69 dcr-reg = <0d0 009>; 71 dcr-reg = <0x0d0 0x009>;
70 #address-cells = <0>; 72 #address-cells = <0>;
71 #size-cells = <0>; 73 #size-cells = <0>;
72 #interrupt-cells = <2>; 74 #interrupt-cells = <2>;
73 interrupts = <1e 4 1f 4>; /* cascade */ 75 interrupts = <0x1e 0x4 0x1f 0x4>; /* cascade */
74 interrupt-parent = <&UIC0>; 76 interrupt-parent = <&UIC0>;
75 }; 77 };
76 78
@@ -78,22 +80,22 @@
78 compatible = "ibm,uic-440epx","ibm,uic"; 80 compatible = "ibm,uic-440epx","ibm,uic";
79 interrupt-controller; 81 interrupt-controller;
80 cell-index = <2>; 82 cell-index = <2>;
81 dcr-reg = <0e0 009>; 83 dcr-reg = <0x0e0 0x009>;
82 #address-cells = <0>; 84 #address-cells = <0>;
83 #size-cells = <0>; 85 #size-cells = <0>;
84 #interrupt-cells = <2>; 86 #interrupt-cells = <2>;
85 interrupts = <1c 4 1d 4>; /* cascade */ 87 interrupts = <0x1c 0x4 0x1d 0x4>; /* cascade */
86 interrupt-parent = <&UIC0>; 88 interrupt-parent = <&UIC0>;
87 }; 89 };
88 90
89 SDR0: sdr { 91 SDR0: sdr {
90 compatible = "ibm,sdr-440epx", "ibm,sdr-440ep"; 92 compatible = "ibm,sdr-440epx", "ibm,sdr-440ep";
91 dcr-reg = <00e 002>; 93 dcr-reg = <0x00e 0x002>;
92 }; 94 };
93 95
94 CPR0: cpr { 96 CPR0: cpr {
95 compatible = "ibm,cpr-440epx", "ibm,cpr-440ep"; 97 compatible = "ibm,cpr-440epx", "ibm,cpr-440ep";
96 dcr-reg = <00c 002>; 98 dcr-reg = <0x00c 0x002>;
97 }; 99 };
98 100
99 plb { 101 plb {
@@ -105,44 +107,44 @@
105 107
106 SDRAM0: sdram { 108 SDRAM0: sdram {
107 compatible = "ibm,sdram-440epx", "ibm,sdram-44x-ddr2denali"; 109 compatible = "ibm,sdram-440epx", "ibm,sdram-44x-ddr2denali";
108 dcr-reg = <010 2>; 110 dcr-reg = <0x010 0x002>;
109 }; 111 };
110 112
111 DMA0: dma { 113 DMA0: dma {
112 compatible = "ibm,dma-440epx", "ibm,dma-4xx"; 114 compatible = "ibm,dma-440epx", "ibm,dma-4xx";
113 dcr-reg = <100 027>; 115 dcr-reg = <0x100 0x027>;
114 }; 116 };
115 117
116 MAL0: mcmal { 118 MAL0: mcmal {
117 compatible = "ibm,mcmal-440epx", "ibm,mcmal2"; 119 compatible = "ibm,mcmal-440epx", "ibm,mcmal2";
118 dcr-reg = <180 62>; 120 dcr-reg = <0x180 0x062>;
119 num-tx-chans = <2>; 121 num-tx-chans = <2>;
120 num-rx-chans = <2>; 122 num-rx-chans = <2>;
121 interrupt-parent = <&MAL0>; 123 interrupt-parent = <&MAL0>;
122 interrupts = <0 1 2 3 4>; 124 interrupts = <0x0 0x1 0x2 0x3 0x4>;
123 #interrupt-cells = <1>; 125 #interrupt-cells = <1>;
124 #address-cells = <0>; 126 #address-cells = <0>;
125 #size-cells = <0>; 127 #size-cells = <0>;
126 interrupt-map = </*TXEOB*/ 0 &UIC0 a 4 128 interrupt-map = </*TXEOB*/ 0x0 &UIC0 0xa 0x4
127 /*RXEOB*/ 1 &UIC0 b 4 129 /*RXEOB*/ 0x1 &UIC0 0xb 0x4
128 /*SERR*/ 2 &UIC1 0 4 130 /*SERR*/ 0x2 &UIC1 0x0 0x4
129 /*TXDE*/ 3 &UIC1 1 4 131 /*TXDE*/ 0x3 &UIC1 0x1 0x4
130 /*RXDE*/ 4 &UIC1 2 4>; 132 /*RXDE*/ 0x4 &UIC1 0x2 0x4>;
131 interrupt-map-mask = <ffffffff>; 133 interrupt-map-mask = <0xffffffff>;
132 }; 134 };
133 135
134 USB1: usb@e0000400 { 136 USB1: usb@e0000400 {
135 compatible = "ohci-be"; 137 compatible = "ohci-be";
136 reg = <0 e0000400 60>; 138 reg = <0x00000000 0xe0000400 0x00000060>;
137 interrupt-parent = <&UIC0>; 139 interrupt-parent = <&UIC0>;
138 interrupts = <15 8>; 140 interrupts = <0x15 0x8>;
139 }; 141 };
140 142
141 USB0: ehci@e0000300 { 143 USB0: ehci@e0000300 {
142 compatible = "ibm,usb-ehci-440epx", "usb-ehci"; 144 compatible = "ibm,usb-ehci-440epx", "usb-ehci";
143 interrupt-parent = <&UIC0>; 145 interrupt-parent = <&UIC0>;
144 interrupts = <1a 4>; 146 interrupts = <0x1a 0x4>;
145 reg = <0 e0000300 90 0 e0000390 70>; 147 reg = <0x00000000 0xe0000300 0x00000090 0x00000000 0xe0000390 0x00000070>;
146 big-endian; 148 big-endian;
147 }; 149 };
148 150
@@ -150,50 +152,50 @@
150 compatible = "ibm,opb-440epx", "ibm,opb"; 152 compatible = "ibm,opb-440epx", "ibm,opb";
151 #address-cells = <1>; 153 #address-cells = <1>;
152 #size-cells = <1>; 154 #size-cells = <1>;
153 ranges = <00000000 1 00000000 80000000 155 ranges = <0x00000000 0x00000001 0x00000000 0x80000000
154 80000000 1 80000000 80000000>; 156 0x80000000 0x00000001 0x80000000 0x80000000>;
155 interrupt-parent = <&UIC1>; 157 interrupt-parent = <&UIC1>;
156 interrupts = <7 4>; 158 interrupts = <0x7 0x4>;
157 clock-frequency = <0>; /* Filled in by zImage */ 159 clock-frequency = <0>; /* Filled in by zImage */
158 160
159 EBC0: ebc { 161 EBC0: ebc {
160 compatible = "ibm,ebc-440epx", "ibm,ebc"; 162 compatible = "ibm,ebc-440epx", "ibm,ebc";
161 dcr-reg = <012 2>; 163 dcr-reg = <0x012 0x002>;
162 #address-cells = <2>; 164 #address-cells = <2>;
163 #size-cells = <1>; 165 #size-cells = <1>;
164 clock-frequency = <0>; /* Filled in by zImage */ 166 clock-frequency = <0>; /* Filled in by zImage */
165 interrupts = <5 1>; 167 interrupts = <0x5 0x1>;
166 interrupt-parent = <&UIC1>; 168 interrupt-parent = <&UIC1>;
167 169
168 nor_flash@0,0 { 170 nor_flash@0,0 {
169 compatible = "amd,s29gl256n", "cfi-flash"; 171 compatible = "amd,s29gl256n", "cfi-flash";
170 bank-width = <2>; 172 bank-width = <2>;
171 reg = <0 000000 4000000>; 173 reg = <0x00000000 0x00000000 0x04000000>;
172 #address-cells = <1>; 174 #address-cells = <1>;
173 #size-cells = <1>; 175 #size-cells = <1>;
174 partition@0 { 176 partition@0 {
175 label = "Kernel"; 177 label = "Kernel";
176 reg = <0 180000>; 178 reg = <0x00000000 0x00180000>;
177 }; 179 };
178 partition@180000 { 180 partition@180000 {
179 label = "ramdisk"; 181 label = "ramdisk";
180 reg = <180000 200000>; 182 reg = <0x00180000 0x00200000>;
181 }; 183 };
182 partition@380000 { 184 partition@380000 {
183 label = "file system"; 185 label = "file system";
184 reg = <380000 3aa0000>; 186 reg = <0x00380000 0x03aa0000>;
185 }; 187 };
186 partition@3e20000 { 188 partition@3e20000 {
187 label = "kozio"; 189 label = "kozio";
188 reg = <3e20000 140000>; 190 reg = <0x03e20000 0x00140000>;
189 }; 191 };
190 partition@3f60000 { 192 partition@3f60000 {
191 label = "env"; 193 label = "env";
192 reg = <3f60000 40000>; 194 reg = <0x03f60000 0x00040000>;
193 }; 195 };
194 partition@3fa0000 { 196 partition@3fa0000 {
195 label = "u-boot"; 197 label = "u-boot";
196 reg = <3fa0000 60000>; 198 reg = <0x03fa0000 0x00060000>;
197 }; 199 };
198 }; 200 };
199 201
@@ -202,69 +204,69 @@
202 UART0: serial@ef600300 { 204 UART0: serial@ef600300 {
203 device_type = "serial"; 205 device_type = "serial";
204 compatible = "ns16550"; 206 compatible = "ns16550";
205 reg = <ef600300 8>; 207 reg = <0xef600300 0x00000008>;
206 virtual-reg = <ef600300>; 208 virtual-reg = <0xef600300>;
207 clock-frequency = <0>; /* Filled in by zImage */ 209 clock-frequency = <0>; /* Filled in by zImage */
208 current-speed = <1c200>; 210 current-speed = <115200>;
209 interrupt-parent = <&UIC0>; 211 interrupt-parent = <&UIC0>;
210 interrupts = <0 4>; 212 interrupts = <0x0 0x4>;
211 }; 213 };
212 214
213 UART1: serial@ef600400 { 215 UART1: serial@ef600400 {
214 device_type = "serial"; 216 device_type = "serial";
215 compatible = "ns16550"; 217 compatible = "ns16550";
216 reg = <ef600400 8>; 218 reg = <0xef600400 0x00000008>;
217 virtual-reg = <ef600400>; 219 virtual-reg = <0xef600400>;
218 clock-frequency = <0>; 220 clock-frequency = <0>;
219 current-speed = <0>; 221 current-speed = <0>;
220 interrupt-parent = <&UIC0>; 222 interrupt-parent = <&UIC0>;
221 interrupts = <1 4>; 223 interrupts = <0x1 0x4>;
222 }; 224 };
223 225
224 UART2: serial@ef600500 { 226 UART2: serial@ef600500 {
225 device_type = "serial"; 227 device_type = "serial";
226 compatible = "ns16550"; 228 compatible = "ns16550";
227 reg = <ef600500 8>; 229 reg = <0xef600500 0x00000008>;
228 virtual-reg = <ef600500>; 230 virtual-reg = <0xef600500>;
229 clock-frequency = <0>; 231 clock-frequency = <0>;
230 current-speed = <0>; 232 current-speed = <0>;
231 interrupt-parent = <&UIC1>; 233 interrupt-parent = <&UIC1>;
232 interrupts = <3 4>; 234 interrupts = <0x3 0x4>;
233 }; 235 };
234 236
235 UART3: serial@ef600600 { 237 UART3: serial@ef600600 {
236 device_type = "serial"; 238 device_type = "serial";
237 compatible = "ns16550"; 239 compatible = "ns16550";
238 reg = <ef600600 8>; 240 reg = <0xef600600 0x00000008>;
239 virtual-reg = <ef600600>; 241 virtual-reg = <0xef600600>;
240 clock-frequency = <0>; 242 clock-frequency = <0>;
241 current-speed = <0>; 243 current-speed = <0>;
242 interrupt-parent = <&UIC1>; 244 interrupt-parent = <&UIC1>;
243 interrupts = <4 4>; 245 interrupts = <0x4 0x4>;
244 }; 246 };
245 247
246 IIC0: i2c@ef600700 { 248 IIC0: i2c@ef600700 {
247 compatible = "ibm,iic-440epx", "ibm,iic"; 249 compatible = "ibm,iic-440epx", "ibm,iic";
248 reg = <ef600700 14>; 250 reg = <0xef600700 0x00000014>;
249 interrupt-parent = <&UIC0>; 251 interrupt-parent = <&UIC0>;
250 interrupts = <2 4>; 252 interrupts = <0x2 0x4>;
251 }; 253 };
252 254
253 IIC1: i2c@ef600800 { 255 IIC1: i2c@ef600800 {
254 compatible = "ibm,iic-440epx", "ibm,iic"; 256 compatible = "ibm,iic-440epx", "ibm,iic";
255 reg = <ef600800 14>; 257 reg = <0xef600800 0x00000014>;
256 interrupt-parent = <&UIC0>; 258 interrupt-parent = <&UIC0>;
257 interrupts = <7 4>; 259 interrupts = <0x7 0x4>;
258 }; 260 };
259 261
260 ZMII0: emac-zmii@ef600d00 { 262 ZMII0: emac-zmii@ef600d00 {
261 compatible = "ibm,zmii-440epx", "ibm,zmii"; 263 compatible = "ibm,zmii-440epx", "ibm,zmii";
262 reg = <ef600d00 c>; 264 reg = <0xef600d00 0x0000000c>;
263 }; 265 };
264 266
265 RGMII0: emac-rgmii@ef601000 { 267 RGMII0: emac-rgmii@ef601000 {
266 compatible = "ibm,rgmii-440epx", "ibm,rgmii"; 268 compatible = "ibm,rgmii-440epx", "ibm,rgmii";
267 reg = <ef601000 8>; 269 reg = <0xef601000 0x00000008>;
268 has-mdio; 270 has-mdio;
269 }; 271 };
270 272
@@ -272,23 +274,23 @@
272 device_type = "network"; 274 device_type = "network";
273 compatible = "ibm,emac-440epx", "ibm,emac4"; 275 compatible = "ibm,emac-440epx", "ibm,emac4";
274 interrupt-parent = <&EMAC0>; 276 interrupt-parent = <&EMAC0>;
275 interrupts = <0 1>; 277 interrupts = <0x0 0x1>;
276 #interrupt-cells = <1>; 278 #interrupt-cells = <1>;
277 #address-cells = <0>; 279 #address-cells = <0>;
278 #size-cells = <0>; 280 #size-cells = <0>;
279 interrupt-map = </*Status*/ 0 &UIC0 18 4 281 interrupt-map = </*Status*/ 0x0 &UIC0 0x18 0x4
280 /*Wake*/ 1 &UIC1 1d 4>; 282 /*Wake*/ 0x1 &UIC1 0x1d 0x4>;
281 reg = <ef600e00 70>; 283 reg = <0xef600e00 0x00000070>;
282 local-mac-address = [000000000000]; 284 local-mac-address = [000000000000];
283 mal-device = <&MAL0>; 285 mal-device = <&MAL0>;
284 mal-tx-channel = <0>; 286 mal-tx-channel = <0>;
285 mal-rx-channel = <0>; 287 mal-rx-channel = <0>;
286 cell-index = <0>; 288 cell-index = <0>;
287 max-frame-size = <2328>; 289 max-frame-size = <9000>;
288 rx-fifo-size = <1000>; 290 rx-fifo-size = <4096>;
289 tx-fifo-size = <800>; 291 tx-fifo-size = <2048>;
290 phy-mode = "rgmii"; 292 phy-mode = "rgmii";
291 phy-map = <00000000>; 293 phy-map = <0x00000000>;
292 zmii-device = <&ZMII0>; 294 zmii-device = <&ZMII0>;
293 zmii-channel = <0>; 295 zmii-channel = <0>;
294 rgmii-device = <&RGMII0>; 296 rgmii-device = <&RGMII0>;
@@ -301,23 +303,23 @@
301 device_type = "network"; 303 device_type = "network";
302 compatible = "ibm,emac-440epx", "ibm,emac4"; 304 compatible = "ibm,emac-440epx", "ibm,emac4";
303 interrupt-parent = <&EMAC1>; 305 interrupt-parent = <&EMAC1>;
304 interrupts = <0 1>; 306 interrupts = <0x0 0x1>;
305 #interrupt-cells = <1>; 307 #interrupt-cells = <1>;
306 #address-cells = <0>; 308 #address-cells = <0>;
307 #size-cells = <0>; 309 #size-cells = <0>;
308 interrupt-map = </*Status*/ 0 &UIC0 19 4 310 interrupt-map = </*Status*/ 0x0 &UIC0 0x19 0x4
309 /*Wake*/ 1 &UIC1 1f 4>; 311 /*Wake*/ 0x1 &UIC1 0x1f 0x4>;
310 reg = <ef600f00 70>; 312 reg = <0xef600f00 0x00000070>;
311 local-mac-address = [000000000000]; 313 local-mac-address = [000000000000];
312 mal-device = <&MAL0>; 314 mal-device = <&MAL0>;
313 mal-tx-channel = <1>; 315 mal-tx-channel = <1>;
314 mal-rx-channel = <1>; 316 mal-rx-channel = <1>;
315 cell-index = <1>; 317 cell-index = <1>;
316 max-frame-size = <2328>; 318 max-frame-size = <9000>;
317 rx-fifo-size = <1000>; 319 rx-fifo-size = <4096>;
318 tx-fifo-size = <800>; 320 tx-fifo-size = <2048>;
319 phy-mode = "rgmii"; 321 phy-mode = "rgmii";
320 phy-map = <00000000>; 322 phy-map = <0x00000000>;
321 zmii-device = <&ZMII0>; 323 zmii-device = <&ZMII0>;
322 zmii-channel = <1>; 324 zmii-channel = <1>;
323 rgmii-device = <&RGMII0>; 325 rgmii-device = <&RGMII0>;
@@ -334,10 +336,10 @@
334 #address-cells = <3>; 336 #address-cells = <3>;
335 compatible = "ibm,plb440epx-pci", "ibm,plb-pci"; 337 compatible = "ibm,plb440epx-pci", "ibm,plb-pci";
336 primary; 338 primary;
337 reg = <1 eec00000 8 /* Config space access */ 339 reg = <0x00000001 0xeec00000 0x00000008 /* Config space access */
338 1 eed00000 4 /* IACK */ 340 0x00000001 0xeed00000 0x00000004 /* IACK */
339 1 eed00000 4 /* Special cycle */ 341 0x00000001 0xeed00000 0x00000004 /* Special cycle */
340 1 ef400000 40>; /* Internal registers */ 342 0x00000001 0xef400000 0x00000040>; /* Internal registers */
341 343
342 /* Outbound ranges, one memory and one IO, 344 /* Outbound ranges, one memory and one IO,
343 * later cannot be changed. Chip supports a second 345 * later cannot be changed. Chip supports a second
@@ -347,16 +349,16 @@
347 * I/O 1 E800 0000 1 E800 FFFF 64KB 349 * I/O 1 E800 0000 1 E800 FFFF 64KB
348 * I/O 1 E880 0000 1 EBFF FFFF 56MB 350 * I/O 1 E880 0000 1 EBFF FFFF 56MB
349 */ 351 */
350 ranges = <02000000 0 80000000 1 80000000 0 40000000 352 ranges = <0x02000000 0x00000000 0x80000000 0x00000001 0x80000000 0x00000000 0x40000000
351 01000000 0 00000000 1 e8000000 0 00010000 353 0x01000000 0x00000000 0x00000000 0x00000001 0xe8000000 0x00000000 0x00010000
352 01000000 0 00000000 1 e8800000 0 03800000>; 354 0x01000000 0x00000000 0x00000000 0x00000001 0xe8800000 0x00000000 0x03800000>;
353 355
354 /* Inbound 2GB range starting at 0 */ 356 /* Inbound 2GB range starting at 0 */
355 dma-ranges = <42000000 0 0 0 0 0 80000000>; 357 dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x0 0x80000000>;
356 358
357 /* All PCI interrupts are routed to IRQ 67 */ 359 /* All PCI interrupts are routed to IRQ 67 */
358 interrupt-map-mask = <0000 0 0 0>; 360 interrupt-map-mask = <0x0 0x0 0x0 0x0>;
359 interrupt-map = < 0000 0 0 0 &UIC2 3 8 >; 361 interrupt-map = < 0x0 0x0 0x0 0x0 &UIC2 0x3 0x8 >;
360 }; 362 };
361 }; 363 };
362 364
diff --git a/arch/powerpc/boot/dts/storcenter.dts b/arch/powerpc/boot/dts/storcenter.dts
index 5893816c0bce..eab680ce10da 100644
--- a/arch/powerpc/boot/dts/storcenter.dts
+++ b/arch/powerpc/boot/dts/storcenter.dts
@@ -95,6 +95,7 @@
95 95
96 mpic: interrupt-controller@40000 { 96 mpic: interrupt-controller@40000 {
97 #interrupt-cells = <2>; 97 #interrupt-cells = <2>;
98 #address-cells = <0>;
98 device_type = "open-pic"; 99 device_type = "open-pic";
99 compatible = "chrp,open-pic"; 100 compatible = "chrp,open-pic";
100 interrupt-controller; 101 interrupt-controller;
diff --git a/arch/powerpc/boot/dts/stx_gp3_8560.dts b/arch/powerpc/boot/dts/stx_gp3_8560.dts
index f81fd7fdb29e..1e612836b248 100644
--- a/arch/powerpc/boot/dts/stx_gp3_8560.dts
+++ b/arch/powerpc/boot/dts/stx_gp3_8560.dts
@@ -38,6 +38,7 @@
38 timebase-frequency = <0>; 38 timebase-frequency = <0>;
39 bus-frequency = <0>; 39 bus-frequency = <0>;
40 clock-frequency = <0>; 40 clock-frequency = <0>;
41 next-level-cache = <&L2>;
41 }; 42 };
42 }; 43 };
43 44
@@ -62,7 +63,7 @@
62 interrupts = <18 2>; 63 interrupts = <18 2>;
63 }; 64 };
64 65
65 l2-cache-controller@20000 { 66 L2: l2-cache-controller@20000 {
66 compatible = "fsl,8540-l2-cache-controller"; 67 compatible = "fsl,8540-l2-cache-controller";
67 reg = <0x20000 0x1000>; 68 reg = <0x20000 0x1000>;
68 cache-line-size = <32>; 69 cache-line-size = <32>;
@@ -131,6 +132,7 @@
131 #address-cells = <0>; 132 #address-cells = <0>;
132 #interrupt-cells = <2>; 133 #interrupt-cells = <2>;
133 reg = <0x40000 0x40000>; 134 reg = <0x40000 0x40000>;
135 compatible = "chrp,open-pic";
134 device_type = "open-pic"; 136 device_type = "open-pic";
135 }; 137 };
136 138
diff --git a/arch/powerpc/boot/dts/taishan.dts b/arch/powerpc/boot/dts/taishan.dts
index e808e1c5593a..dcb749884b6d 100644
--- a/arch/powerpc/boot/dts/taishan.dts
+++ b/arch/powerpc/boot/dts/taishan.dts
@@ -10,12 +10,14 @@
10 * any warranty of any kind, whether express or implied. 10 * any warranty of any kind, whether express or implied.
11 */ 11 */
12 12
13/dts-v1/;
14
13/ { 15/ {
14 #address-cells = <2>; 16 #address-cells = <2>;
15 #size-cells = <1>; 17 #size-cells = <1>;
16 model = "amcc,taishan"; 18 model = "amcc,taishan";
17 compatible = "amcc,taishan"; 19 compatible = "amcc,taishan";
18 dcr-parent = <&/cpus/cpu@0>; 20 dcr-parent = <&{/cpus/cpu@0}>;
19 21
20 aliases { 22 aliases {
21 ethernet0 = &EMAC2; 23 ethernet0 = &EMAC2;
@@ -31,13 +33,13 @@
31 cpu@0 { 33 cpu@0 {
32 device_type = "cpu"; 34 device_type = "cpu";
33 model = "PowerPC,440GX"; 35 model = "PowerPC,440GX";
34 reg = <0>; 36 reg = <0x00000000>;
35 clock-frequency = <2FAF0800>; // 800MHz 37 clock-frequency = <800000000>; // 800MHz
36 timebase-frequency = <0>; // Filled in by zImage 38 timebase-frequency = <0>; // Filled in by zImage
37 i-cache-line-size = <32>; 39 i-cache-line-size = <50>;
38 d-cache-line-size = <32>; 40 d-cache-line-size = <50>;
39 i-cache-size = <8000>; /* 32 kB */ 41 i-cache-size = <32768>; /* 32 kB */
40 d-cache-size = <8000>; /* 32 kB */ 42 d-cache-size = <32768>; /* 32 kB */
41 dcr-controller; 43 dcr-controller;
42 dcr-access-method = "native"; 44 dcr-access-method = "native";
43 }; 45 };
@@ -45,7 +47,7 @@
45 47
46 memory { 48 memory {
47 device_type = "memory"; 49 device_type = "memory";
48 reg = <0 0 0>; // Filled in by zImage 50 reg = <0x00000000 0x00000000 0x00000000>; // Filled in by zImage
49 }; 51 };
50 52
51 53
@@ -53,7 +55,7 @@
53 compatible = "ibm,uic-440gx", "ibm,uic"; 55 compatible = "ibm,uic-440gx", "ibm,uic";
54 interrupt-controller; 56 interrupt-controller;
55 cell-index = <3>; 57 cell-index = <3>;
56 dcr-reg = <200 009>; 58 dcr-reg = <0x200 0x009>;
57 #address-cells = <0>; 59 #address-cells = <0>;
58 #size-cells = <0>; 60 #size-cells = <0>;
59 #interrupt-cells = <2>; 61 #interrupt-cells = <2>;
@@ -64,11 +66,11 @@
64 compatible = "ibm,uic-440gx", "ibm,uic"; 66 compatible = "ibm,uic-440gx", "ibm,uic";
65 interrupt-controller; 67 interrupt-controller;
66 cell-index = <0>; 68 cell-index = <0>;
67 dcr-reg = <0c0 009>; 69 dcr-reg = <0x0c0 0x009>;
68 #address-cells = <0>; 70 #address-cells = <0>;
69 #size-cells = <0>; 71 #size-cells = <0>;
70 #interrupt-cells = <2>; 72 #interrupt-cells = <2>;
71 interrupts = <01 4 00 4>; /* cascade - first non-critical */ 73 interrupts = <0x1 0x4 0x0 0x4>; /* cascade - first non-critical */
72 interrupt-parent = <&UICB0>; 74 interrupt-parent = <&UICB0>;
73 75
74 }; 76 };
@@ -77,11 +79,11 @@
77 compatible = "ibm,uic-440gx", "ibm,uic"; 79 compatible = "ibm,uic-440gx", "ibm,uic";
78 interrupt-controller; 80 interrupt-controller;
79 cell-index = <1>; 81 cell-index = <1>;
80 dcr-reg = <0d0 009>; 82 dcr-reg = <0x0d0 0x009>;
81 #address-cells = <0>; 83 #address-cells = <0>;
82 #size-cells = <0>; 84 #size-cells = <0>;
83 #interrupt-cells = <2>; 85 #interrupt-cells = <2>;
84 interrupts = <03 4 02 4>; /* cascade */ 86 interrupts = <0x3 0x4 0x2 0x4>; /* cascade */
85 interrupt-parent = <&UICB0>; 87 interrupt-parent = <&UICB0>;
86 }; 88 };
87 89
@@ -89,29 +91,29 @@
89 compatible = "ibm,uic-440gx", "ibm,uic"; 91 compatible = "ibm,uic-440gx", "ibm,uic";
90 interrupt-controller; 92 interrupt-controller;
91 cell-index = <2>; /* was 1 */ 93 cell-index = <2>; /* was 1 */
92 dcr-reg = <210 009>; 94 dcr-reg = <0x210 0x009>;
93 #address-cells = <0>; 95 #address-cells = <0>;
94 #size-cells = <0>; 96 #size-cells = <0>;
95 #interrupt-cells = <2>; 97 #interrupt-cells = <2>;
96 interrupts = <05 4 04 4>; /* cascade */ 98 interrupts = <0x5 0x4 0x4 0x4>; /* cascade */
97 interrupt-parent = <&UICB0>; 99 interrupt-parent = <&UICB0>;
98 }; 100 };
99 101
100 102
101 CPC0: cpc { 103 CPC0: cpc {
102 compatible = "ibm,cpc-440gp"; 104 compatible = "ibm,cpc-440gp";
103 dcr-reg = <0b0 003 0e0 010>; 105 dcr-reg = <0x0b0 0x003 0x0e0 0x010>;
104 // FIXME: anything else? 106 // FIXME: anything else?
105 }; 107 };
106 108
107 L2C0: l2c { 109 L2C0: l2c {
108 compatible = "ibm,l2-cache-440gx", "ibm,l2-cache"; 110 compatible = "ibm,l2-cache-440gx", "ibm,l2-cache";
109 dcr-reg = <20 8 /* Internal SRAM DCR's */ 111 dcr-reg = <0x020 0x008 /* Internal SRAM DCR's */
110 30 8>; /* L2 cache DCR's */ 112 0x030 0x008>; /* L2 cache DCR's */
111 cache-line-size = <20>; /* 32 bytes */ 113 cache-line-size = <32>; /* 32 bytes */
112 cache-size = <40000>; /* L2, 256K */ 114 cache-size = <262144>; /* L2, 256K */
113 interrupt-parent = <&UIC2>; 115 interrupt-parent = <&UIC2>;
114 interrupts = <17 1>; 116 interrupts = <0x17 0x1>;
115 }; 117 };
116 118
117 plb { 119 plb {
@@ -119,41 +121,41 @@
119 #address-cells = <2>; 121 #address-cells = <2>;
120 #size-cells = <1>; 122 #size-cells = <1>;
121 ranges; 123 ranges;
122 clock-frequency = <9896800>; // 160MHz 124 clock-frequency = <160000000>; // 160MHz
123 125
124 SDRAM0: memory-controller { 126 SDRAM0: memory-controller {
125 compatible = "ibm,sdram-440gp"; 127 compatible = "ibm,sdram-440gp";
126 dcr-reg = <010 2>; 128 dcr-reg = <0x010 0x002>;
127 // FIXME: anything else? 129 // FIXME: anything else?
128 }; 130 };
129 131
130 SRAM0: sram { 132 SRAM0: sram {
131 compatible = "ibm,sram-440gp"; 133 compatible = "ibm,sram-440gp";
132 dcr-reg = <020 8 00a 1>; 134 dcr-reg = <0x020 0x008 0x00a 0x001>;
133 }; 135 };
134 136
135 DMA0: dma { 137 DMA0: dma {
136 // FIXME: ??? 138 // FIXME: ???
137 compatible = "ibm,dma-440gp"; 139 compatible = "ibm,dma-440gp";
138 dcr-reg = <100 027>; 140 dcr-reg = <0x100 0x027>;
139 }; 141 };
140 142
141 MAL0: mcmal { 143 MAL0: mcmal {
142 compatible = "ibm,mcmal-440gx", "ibm,mcmal2"; 144 compatible = "ibm,mcmal-440gx", "ibm,mcmal2";
143 dcr-reg = <180 62>; 145 dcr-reg = <0x180 0x062>;
144 num-tx-chans = <4>; 146 num-tx-chans = <4>;
145 num-rx-chans = <4>; 147 num-rx-chans = <4>;
146 interrupt-parent = <&MAL0>; 148 interrupt-parent = <&MAL0>;
147 interrupts = <0 1 2 3 4>; 149 interrupts = <0x0 0x1 0x2 0x3 0x4>;
148 #interrupt-cells = <1>; 150 #interrupt-cells = <1>;
149 #address-cells = <0>; 151 #address-cells = <0>;
150 #size-cells = <0>; 152 #size-cells = <0>;
151 interrupt-map = </*TXEOB*/ 0 &UIC0 a 4 153 interrupt-map = </*TXEOB*/ 0x0 &UIC0 0xa 0x4
152 /*RXEOB*/ 1 &UIC0 b 4 154 /*RXEOB*/ 0x1 &UIC0 0xb 0x4
153 /*SERR*/ 2 &UIC1 0 4 155 /*SERR*/ 0x2 &UIC1 0x0 0x4
154 /*TXDE*/ 3 &UIC1 1 4 156 /*TXDE*/ 0x3 &UIC1 0x1 0x4
155 /*RXDE*/ 4 &UIC1 2 4>; 157 /*RXDE*/ 0x4 &UIC1 0x2 0x4>;
156 interrupt-map-mask = <ffffffff>; 158 interrupt-map-mask = <0xffffffff>;
157 }; 159 };
158 160
159 POB0: opb { 161 POB0: opb {
@@ -162,26 +164,26 @@
162 #size-cells = <1>; 164 #size-cells = <1>;
163 /* Wish there was a nicer way of specifying a full 32-bit 165 /* Wish there was a nicer way of specifying a full 32-bit
164 range */ 166 range */
165 ranges = <00000000 1 00000000 80000000 167 ranges = <0x00000000 0x00000001 0x00000000 0x80000000
166 80000000 1 80000000 80000000>; 168 0x80000000 0x00000001 0x80000000 0x80000000>;
167 dcr-reg = <090 00b>; 169 dcr-reg = <0x090 0x00b>;
168 interrupt-parent = <&UIC1>; 170 interrupt-parent = <&UIC1>;
169 interrupts = <7 4>; 171 interrupts = <0x7 0x4>;
170 clock-frequency = <4C4B400>; // 80MHz 172 clock-frequency = <80000000>; // 80MHz
171 173
172 174
173 EBC0: ebc { 175 EBC0: ebc {
174 compatible = "ibm,ebc-440gx", "ibm,ebc"; 176 compatible = "ibm,ebc-440gx", "ibm,ebc";
175 dcr-reg = <012 2>; 177 dcr-reg = <0x012 0x002>;
176 #address-cells = <2>; 178 #address-cells = <2>;
177 #size-cells = <1>; 179 #size-cells = <1>;
178 clock-frequency = <4C4B400>; // 80MHz 180 clock-frequency = <80000000>; // 80MHz
179 181
180 /* ranges property is supplied by zImage 182 /* ranges property is supplied by zImage
181 * based on firmware's configuration of the 183 * based on firmware's configuration of the
182 * EBC bridge */ 184 * EBC bridge */
183 185
184 interrupts = <5 4>; 186 interrupts = <0x5 0x4>;
185 interrupt-parent = <&UIC1>; 187 interrupt-parent = <&UIC1>;
186 188
187 /* TODO: Add other EBC devices */ 189 /* TODO: Add other EBC devices */
@@ -192,103 +194,103 @@
192 UART0: serial@40000200 { 194 UART0: serial@40000200 {
193 device_type = "serial"; 195 device_type = "serial";
194 compatible = "ns16550"; 196 compatible = "ns16550";
195 reg = <40000200 8>; 197 reg = <0x40000200 0x00000008>;
196 virtual-reg = <e0000200>; 198 virtual-reg = <0xe0000200>;
197 clock-frequency = <A8C000>; 199 clock-frequency = <11059200>;
198 current-speed = <1C200>; /* 115200 */ 200 current-speed = <115200>; /* 115200 */
199 interrupt-parent = <&UIC0>; 201 interrupt-parent = <&UIC0>;
200 interrupts = <0 4>; 202 interrupts = <0x0 0x4>;
201 }; 203 };
202 204
203 UART1: serial@40000300 { 205 UART1: serial@40000300 {
204 device_type = "serial"; 206 device_type = "serial";
205 compatible = "ns16550"; 207 compatible = "ns16550";
206 reg = <40000300 8>; 208 reg = <0x40000300 0x00000008>;
207 virtual-reg = <e0000300>; 209 virtual-reg = <0xe0000300>;
208 clock-frequency = <A8C000>; 210 clock-frequency = <11059200>;
209 current-speed = <1C200>; /* 115200 */ 211 current-speed = <115200>; /* 115200 */
210 interrupt-parent = <&UIC0>; 212 interrupt-parent = <&UIC0>;
211 interrupts = <1 4>; 213 interrupts = <0x1 0x4>;
212 }; 214 };
213 215
214 IIC0: i2c@40000400 { 216 IIC0: i2c@40000400 {
215 /* FIXME */ 217 /* FIXME */
216 compatible = "ibm,iic-440gp", "ibm,iic"; 218 compatible = "ibm,iic-440gp", "ibm,iic";
217 reg = <40000400 14>; 219 reg = <0x40000400 0x00000014>;
218 interrupt-parent = <&UIC0>; 220 interrupt-parent = <&UIC0>;
219 interrupts = <2 4>; 221 interrupts = <0x2 0x4>;
220 }; 222 };
221 IIC1: i2c@40000500 { 223 IIC1: i2c@40000500 {
222 /* FIXME */ 224 /* FIXME */
223 compatible = "ibm,iic-440gp", "ibm,iic"; 225 compatible = "ibm,iic-440gp", "ibm,iic";
224 reg = <40000500 14>; 226 reg = <0x40000500 0x00000014>;
225 interrupt-parent = <&UIC0>; 227 interrupt-parent = <&UIC0>;
226 interrupts = <3 4>; 228 interrupts = <0x3 0x4>;
227 }; 229 };
228 230
229 GPIO0: gpio@40000700 { 231 GPIO0: gpio@40000700 {
230 /* FIXME */ 232 /* FIXME */
231 compatible = "ibm,gpio-440gp"; 233 compatible = "ibm,gpio-440gp";
232 reg = <40000700 20>; 234 reg = <0x40000700 0x00000020>;
233 }; 235 };
234 236
235 ZMII0: emac-zmii@40000780 { 237 ZMII0: emac-zmii@40000780 {
236 compatible = "ibm,zmii-440gx", "ibm,zmii"; 238 compatible = "ibm,zmii-440gx", "ibm,zmii";
237 reg = <40000780 c>; 239 reg = <0x40000780 0x0000000c>;
238 }; 240 };
239 241
240 RGMII0: emac-rgmii@40000790 { 242 RGMII0: emac-rgmii@40000790 {
241 compatible = "ibm,rgmii"; 243 compatible = "ibm,rgmii";
242 reg = <40000790 8>; 244 reg = <0x40000790 0x00000008>;
243 }; 245 };
244 246
245 TAH0: emac-tah@40000b50 { 247 TAH0: emac-tah@40000b50 {
246 compatible = "ibm,tah-440gx", "ibm,tah"; 248 compatible = "ibm,tah-440gx", "ibm,tah";
247 reg = <40000b50 30>; 249 reg = <0x40000b50 0x00000030>;
248 }; 250 };
249 251
250 TAH1: emac-tah@40000d50 { 252 TAH1: emac-tah@40000d50 {
251 compatible = "ibm,tah-440gx", "ibm,tah"; 253 compatible = "ibm,tah-440gx", "ibm,tah";
252 reg = <40000d50 30>; 254 reg = <0x40000d50 0x00000030>;
253 }; 255 };
254 256
255 EMAC0: ethernet@40000800 { 257 EMAC0: ethernet@40000800 {
256 unused = <1>; 258 unused = <0x1>;
257 device_type = "network"; 259 device_type = "network";
258 compatible = "ibm,emac-440gx", "ibm,emac4"; 260 compatible = "ibm,emac-440gx", "ibm,emac4";
259 interrupt-parent = <&UIC1>; 261 interrupt-parent = <&UIC1>;
260 interrupts = <1c 4 1d 4>; 262 interrupts = <0x1c 0x4 0x1d 0x4>;
261 reg = <40000800 70>; 263 reg = <0x40000800 0x00000070>;
262 local-mac-address = [000000000000]; // Filled in by zImage 264 local-mac-address = [000000000000]; // Filled in by zImage
263 mal-device = <&MAL0>; 265 mal-device = <&MAL0>;
264 mal-tx-channel = <0>; 266 mal-tx-channel = <0>;
265 mal-rx-channel = <0>; 267 mal-rx-channel = <0>;
266 cell-index = <0>; 268 cell-index = <0>;
267 max-frame-size = <5dc>; 269 max-frame-size = <1500>;
268 rx-fifo-size = <1000>; 270 rx-fifo-size = <4096>;
269 tx-fifo-size = <800>; 271 tx-fifo-size = <2048>;
270 phy-mode = "rmii"; 272 phy-mode = "rmii";
271 phy-map = <00000001>; 273 phy-map = <0x00000001>;
272 zmii-device = <&ZMII0>; 274 zmii-device = <&ZMII0>;
273 zmii-channel = <0>; 275 zmii-channel = <0>;
274 }; 276 };
275 EMAC1: ethernet@40000900 { 277 EMAC1: ethernet@40000900 {
276 unused = <1>; 278 unused = <0x1>;
277 device_type = "network"; 279 device_type = "network";
278 compatible = "ibm,emac-440gx", "ibm,emac4"; 280 compatible = "ibm,emac-440gx", "ibm,emac4";
279 interrupt-parent = <&UIC1>; 281 interrupt-parent = <&UIC1>;
280 interrupts = <1e 4 1f 4>; 282 interrupts = <0x1e 0x4 0x1f 0x4>;
281 reg = <40000900 70>; 283 reg = <0x40000900 0x00000070>;
282 local-mac-address = [000000000000]; // Filled in by zImage 284 local-mac-address = [000000000000]; // Filled in by zImage
283 mal-device = <&MAL0>; 285 mal-device = <&MAL0>;
284 mal-tx-channel = <1>; 286 mal-tx-channel = <1>;
285 mal-rx-channel = <1>; 287 mal-rx-channel = <1>;
286 cell-index = <1>; 288 cell-index = <1>;
287 max-frame-size = <5dc>; 289 max-frame-size = <1500>;
288 rx-fifo-size = <1000>; 290 rx-fifo-size = <4096>;
289 tx-fifo-size = <800>; 291 tx-fifo-size = <2048>;
290 phy-mode = "rmii"; 292 phy-mode = "rmii";
291 phy-map = <00000001>; 293 phy-map = <0x00000001>;
292 zmii-device = <&ZMII0>; 294 zmii-device = <&ZMII0>;
293 zmii-channel = <1>; 295 zmii-channel = <1>;
294 }; 296 };
@@ -297,18 +299,18 @@
297 device_type = "network"; 299 device_type = "network";
298 compatible = "ibm,emac-440gx", "ibm,emac4"; 300 compatible = "ibm,emac-440gx", "ibm,emac4";
299 interrupt-parent = <&UIC2>; 301 interrupt-parent = <&UIC2>;
300 interrupts = <0 4 1 4>; 302 interrupts = <0x0 0x4 0x1 0x4>;
301 reg = <40000c00 70>; 303 reg = <0x40000c00 0x00000070>;
302 local-mac-address = [000000000000]; // Filled in by zImage 304 local-mac-address = [000000000000]; // Filled in by zImage
303 mal-device = <&MAL0>; 305 mal-device = <&MAL0>;
304 mal-tx-channel = <2>; 306 mal-tx-channel = <2>;
305 mal-rx-channel = <2>; 307 mal-rx-channel = <2>;
306 cell-index = <2>; 308 cell-index = <2>;
307 max-frame-size = <2328>; 309 max-frame-size = <9000>;
308 rx-fifo-size = <1000>; 310 rx-fifo-size = <4096>;
309 tx-fifo-size = <800>; 311 tx-fifo-size = <2048>;
310 phy-mode = "rgmii"; 312 phy-mode = "rgmii";
311 phy-map = <00000001>; 313 phy-map = <0x00000001>;
312 rgmii-device = <&RGMII0>; 314 rgmii-device = <&RGMII0>;
313 rgmii-channel = <0>; 315 rgmii-channel = <0>;
314 zmii-device = <&ZMII0>; 316 zmii-device = <&ZMII0>;
@@ -321,18 +323,18 @@
321 device_type = "network"; 323 device_type = "network";
322 compatible = "ibm,emac-440gx", "ibm,emac4"; 324 compatible = "ibm,emac-440gx", "ibm,emac4";
323 interrupt-parent = <&UIC2>; 325 interrupt-parent = <&UIC2>;
324 interrupts = <2 4 3 4>; 326 interrupts = <0x2 0x4 0x3 0x4>;
325 reg = <40000e00 70>; 327 reg = <0x40000e00 0x00000070>;
326 local-mac-address = [000000000000]; // Filled in by zImage 328 local-mac-address = [000000000000]; // Filled in by zImage
327 mal-device = <&MAL0>; 329 mal-device = <&MAL0>;
328 mal-tx-channel = <3>; 330 mal-tx-channel = <3>;
329 mal-rx-channel = <3>; 331 mal-rx-channel = <3>;
330 cell-index = <3>; 332 cell-index = <3>;
331 max-frame-size = <2328>; 333 max-frame-size = <9000>;
332 rx-fifo-size = <1000>; 334 rx-fifo-size = <4096>;
333 tx-fifo-size = <800>; 335 tx-fifo-size = <2048>;
334 phy-mode = "rgmii"; 336 phy-mode = "rgmii";
335 phy-map = <00000003>; 337 phy-map = <0x00000003>;
336 rgmii-device = <&RGMII0>; 338 rgmii-device = <&RGMII0>;
337 rgmii-channel = <1>; 339 rgmii-channel = <1>;
338 zmii-device = <&ZMII0>; 340 zmii-device = <&ZMII0>;
@@ -344,9 +346,9 @@
344 346
345 GPT0: gpt@40000a00 { 347 GPT0: gpt@40000a00 {
346 /* FIXME */ 348 /* FIXME */
347 reg = <40000a00 d4>; 349 reg = <0x40000a00 0x000000d4>;
348 interrupt-parent = <&UIC0>; 350 interrupt-parent = <&UIC0>;
349 interrupts = <12 4 13 4 14 4 15 4 16 4>; 351 interrupts = <0x12 0x4 0x13 0x4 0x14 0x4 0x15 0x4 0x16 0x4>;
350 }; 352 };
351 353
352 }; 354 };
@@ -360,34 +362,34 @@
360 primary; 362 primary;
361 large-inbound-windows; 363 large-inbound-windows;
362 enable-msi-hole; 364 enable-msi-hole;
363 reg = <2 0ec00000 8 /* Config space access */ 365 reg = <0x00000002 0x0ec00000 0x00000008 /* Config space access */
364 0 0 0 /* no IACK cycles */ 366 0x00000000 0x00000000 0x00000000 /* no IACK cycles */
365 2 0ed00000 4 /* Special cycles */ 367 0x00000002 0x0ed00000 0x00000004 /* Special cycles */
366 2 0ec80000 100 /* Internal registers */ 368 0x00000002 0x0ec80000 0x00000100 /* Internal registers */
367 2 0ec80100 fc>; /* Internal messaging registers */ 369 0x00000002 0x0ec80100 0x000000fc>; /* Internal messaging registers */
368 370
369 /* Outbound ranges, one memory and one IO, 371 /* Outbound ranges, one memory and one IO,
370 * later cannot be changed 372 * later cannot be changed
371 */ 373 */
372 ranges = <02000000 0 80000000 00000003 80000000 0 80000000 374 ranges = <0x02000000 0x00000000 0x80000000 0x00000003 0x80000000 0x00000000 0x80000000
373 01000000 0 00000000 00000002 08000000 0 00010000>; 375 0x01000000 0x00000000 0x00000000 0x00000002 0x08000000 0x00000000 0x00010000>;
374 376
375 /* Inbound 2GB range starting at 0 */ 377 /* Inbound 2GB range starting at 0 */
376 dma-ranges = <42000000 0 0 0 0 0 80000000>; 378 dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x0 0x80000000>;
377 379
378 interrupt-map-mask = <f800 0 0 7>; 380 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
379 interrupt-map = < 381 interrupt-map = <
380 /* IDSEL 1 */ 382 /* IDSEL 1 */
381 0800 0 0 1 &UIC0 17 8 383 0x800 0x0 0x0 0x1 &UIC0 0x17 0x8
382 0800 0 0 2 &UIC0 18 8 384 0x800 0x0 0x0 0x2 &UIC0 0x18 0x8
383 0800 0 0 3 &UIC0 19 8 385 0x800 0x0 0x0 0x3 &UIC0 0x19 0x8
384 0800 0 0 4 &UIC0 1a 8 386 0x800 0x0 0x0 0x4 &UIC0 0x1a 0x8
385 387
386 /* IDSEL 2 */ 388 /* IDSEL 2 */
387 1000 0 0 1 &UIC0 18 8 389 0x1000 0x0 0x0 0x1 &UIC0 0x18 0x8
388 1000 0 0 2 &UIC0 19 8 390 0x1000 0x0 0x0 0x2 &UIC0 0x19 0x8
389 1000 0 0 3 &UIC0 1a 8 391 0x1000 0x0 0x0 0x3 &UIC0 0x1a 0x8
390 1000 0 0 4 &UIC0 17 8 392 0x1000 0x0 0x0 0x4 &UIC0 0x17 0x8
391 >; 393 >;
392 }; 394 };
393 }; 395 };
diff --git a/arch/powerpc/boot/dts/tqm8540.dts b/arch/powerpc/boot/dts/tqm8540.dts
index 1addb3ae719e..7b653a583a2d 100644
--- a/arch/powerpc/boot/dts/tqm8540.dts
+++ b/arch/powerpc/boot/dts/tqm8540.dts
@@ -40,6 +40,7 @@
40 timebase-frequency = <0>; 40 timebase-frequency = <0>;
41 bus-frequency = <0>; 41 bus-frequency = <0>;
42 clock-frequency = <0>; 42 clock-frequency = <0>;
43 next-level-cache = <&L2>;
43 }; 44 };
44 }; 45 };
45 46
@@ -64,7 +65,7 @@
64 interrupts = <18 2>; 65 interrupts = <18 2>;
65 }; 66 };
66 67
67 l2-cache-controller@20000 { 68 L2: l2-cache-controller@20000 {
68 compatible = "fsl,8540-l2-cache-controller"; 69 compatible = "fsl,8540-l2-cache-controller";
69 reg = <0x20000 0x1000>; 70 reg = <0x20000 0x1000>;
70 cache-line-size = <32>; 71 cache-line-size = <32>;
@@ -177,6 +178,7 @@
177 #interrupt-cells = <2>; 178 #interrupt-cells = <2>;
178 reg = <0x40000 0x40000>; 179 reg = <0x40000 0x40000>;
179 device_type = "open-pic"; 180 device_type = "open-pic";
181 compatible = "chrp,open-pic";
180 }; 182 };
181 }; 183 };
182 184
diff --git a/arch/powerpc/boot/dts/tqm8541.dts b/arch/powerpc/boot/dts/tqm8541.dts
index 9e01093f496e..8fe73ef34195 100644
--- a/arch/powerpc/boot/dts/tqm8541.dts
+++ b/arch/powerpc/boot/dts/tqm8541.dts
@@ -39,6 +39,7 @@
39 timebase-frequency = <0>; 39 timebase-frequency = <0>;
40 bus-frequency = <0>; 40 bus-frequency = <0>;
41 clock-frequency = <0>; 41 clock-frequency = <0>;
42 next-level-cache = <&L2>;
42 }; 43 };
43 }; 44 };
44 45
@@ -63,7 +64,7 @@
63 interrupts = <18 2>; 64 interrupts = <18 2>;
64 }; 65 };
65 66
66 l2-cache-controller@20000 { 67 L2: l2-cache-controller@20000 {
67 compatible = "fsl,8540-l2-cache-controller"; 68 compatible = "fsl,8540-l2-cache-controller";
68 reg = <0x20000 0x1000>; 69 reg = <0x20000 0x1000>;
69 cache-line-size = <32>; 70 cache-line-size = <32>;
@@ -164,6 +165,7 @@
164 #interrupt-cells = <2>; 165 #interrupt-cells = <2>;
165 reg = <0x40000 0x40000>; 166 reg = <0x40000 0x40000>;
166 device_type = "open-pic"; 167 device_type = "open-pic";
168 compatible = "chrp,open-pic";
167 }; 169 };
168 170
169 cpm@919c0 { 171 cpm@919c0 {
diff --git a/arch/powerpc/boot/dts/tqm8555.dts b/arch/powerpc/boot/dts/tqm8555.dts
index a20eb06c482f..0a53bb9ce76f 100644
--- a/arch/powerpc/boot/dts/tqm8555.dts
+++ b/arch/powerpc/boot/dts/tqm8555.dts
@@ -39,6 +39,7 @@
39 timebase-frequency = <0>; 39 timebase-frequency = <0>;
40 bus-frequency = <0>; 40 bus-frequency = <0>;
41 clock-frequency = <0>; 41 clock-frequency = <0>;
42 next-level-cache = <&L2>;
42 }; 43 };
43 }; 44 };
44 45
@@ -63,7 +64,7 @@
63 interrupts = <18 2>; 64 interrupts = <18 2>;
64 }; 65 };
65 66
66 l2-cache-controller@20000 { 67 L2: l2-cache-controller@20000 {
67 compatible = "fsl,8540-l2-cache-controller"; 68 compatible = "fsl,8540-l2-cache-controller";
68 reg = <0x20000 0x1000>; 69 reg = <0x20000 0x1000>;
69 cache-line-size = <32>; 70 cache-line-size = <32>;
@@ -164,6 +165,7 @@
164 #interrupt-cells = <2>; 165 #interrupt-cells = <2>;
165 reg = <0x40000 0x40000>; 166 reg = <0x40000 0x40000>;
166 device_type = "open-pic"; 167 device_type = "open-pic";
168 compatible = "chrp,open-pic";
167 }; 169 };
168 170
169 cpm@919c0 { 171 cpm@919c0 {
diff --git a/arch/powerpc/boot/dts/tqm8560.dts b/arch/powerpc/boot/dts/tqm8560.dts
index b9ac6c943b89..a4ee596e97bc 100644
--- a/arch/powerpc/boot/dts/tqm8560.dts
+++ b/arch/powerpc/boot/dts/tqm8560.dts
@@ -40,6 +40,7 @@
40 timebase-frequency = <0>; 40 timebase-frequency = <0>;
41 bus-frequency = <0>; 41 bus-frequency = <0>;
42 clock-frequency = <0>; 42 clock-frequency = <0>;
43 next-level-cache = <&L2>;
43 }; 44 };
44 }; 45 };
45 46
@@ -64,7 +65,7 @@
64 interrupts = <18 2>; 65 interrupts = <18 2>;
65 }; 66 };
66 67
67 l2-cache-controller@20000 { 68 L2: l2-cache-controller@20000 {
68 compatible = "fsl,8540-l2-cache-controller"; 69 compatible = "fsl,8540-l2-cache-controller";
69 reg = <0x20000 0x1000>; 70 reg = <0x20000 0x1000>;
70 cache-line-size = <32>; 71 cache-line-size = <32>;
@@ -145,6 +146,7 @@
145 #interrupt-cells = <2>; 146 #interrupt-cells = <2>;
146 reg = <0x40000 0x40000>; 147 reg = <0x40000 0x40000>;
147 device_type = "open-pic"; 148 device_type = "open-pic";
149 compatible = "chrp,open-pic";
148 }; 150 };
149 151
150 cpm@919c0 { 152 cpm@919c0 {
diff --git a/arch/powerpc/boot/dts/walnut.dts b/arch/powerpc/boot/dts/walnut.dts
index a328607c8f84..4a9f726ada13 100644
--- a/arch/powerpc/boot/dts/walnut.dts
+++ b/arch/powerpc/boot/dts/walnut.dts
@@ -9,12 +9,14 @@
9 * any warranty of any kind, whether express or implied. 9 * any warranty of any kind, whether express or implied.
10 */ 10 */
11 11
12/dts-v1/;
13
12/ { 14/ {
13 #address-cells = <1>; 15 #address-cells = <1>;
14 #size-cells = <1>; 16 #size-cells = <1>;
15 model = "ibm,walnut"; 17 model = "ibm,walnut";
16 compatible = "ibm,walnut"; 18 compatible = "ibm,walnut";
17 dcr-parent = <&/cpus/cpu@0>; 19 dcr-parent = <&{/cpus/cpu@0}>;
18 20
19 aliases { 21 aliases {
20 ethernet0 = &EMAC; 22 ethernet0 = &EMAC;
@@ -29,13 +31,13 @@
29 cpu@0 { 31 cpu@0 {
30 device_type = "cpu"; 32 device_type = "cpu";
31 model = "PowerPC,405GP"; 33 model = "PowerPC,405GP";
32 reg = <0>; 34 reg = <0x00000000>;
33 clock-frequency = <bebc200>; /* Filled in by zImage */ 35 clock-frequency = <200000000>; /* Filled in by zImage */
34 timebase-frequency = <0>; /* Filled in by zImage */ 36 timebase-frequency = <0>; /* Filled in by zImage */
35 i-cache-line-size = <20>; 37 i-cache-line-size = <32>;
36 d-cache-line-size = <20>; 38 d-cache-line-size = <32>;
37 i-cache-size = <4000>; 39 i-cache-size = <16384>;
38 d-cache-size = <4000>; 40 d-cache-size = <16384>;
39 dcr-controller; 41 dcr-controller;
40 dcr-access-method = "native"; 42 dcr-access-method = "native";
41 }; 43 };
@@ -43,14 +45,14 @@
43 45
44 memory { 46 memory {
45 device_type = "memory"; 47 device_type = "memory";
46 reg = <0 0>; /* Filled in by zImage */ 48 reg = <0x00000000 0x00000000>; /* Filled in by zImage */
47 }; 49 };
48 50
49 UIC0: interrupt-controller { 51 UIC0: interrupt-controller {
50 compatible = "ibm,uic"; 52 compatible = "ibm,uic";
51 interrupt-controller; 53 interrupt-controller;
52 cell-index = <0>; 54 cell-index = <0>;
53 dcr-reg = <0c0 9>; 55 dcr-reg = <0x0c0 0x009>;
54 #address-cells = <0>; 56 #address-cells = <0>;
55 #size-cells = <0>; 57 #size-cells = <0>;
56 #interrupt-cells = <2>; 58 #interrupt-cells = <2>;
@@ -65,63 +67,63 @@
65 67
66 SDRAM0: memory-controller { 68 SDRAM0: memory-controller {
67 compatible = "ibm,sdram-405gp"; 69 compatible = "ibm,sdram-405gp";
68 dcr-reg = <010 2>; 70 dcr-reg = <0x010 0x002>;
69 }; 71 };
70 72
71 MAL: mcmal { 73 MAL: mcmal {
72 compatible = "ibm,mcmal-405gp", "ibm,mcmal"; 74 compatible = "ibm,mcmal-405gp", "ibm,mcmal";
73 dcr-reg = <180 62>; 75 dcr-reg = <0x180 0x062>;
74 num-tx-chans = <1>; 76 num-tx-chans = <1>;
75 num-rx-chans = <1>; 77 num-rx-chans = <1>;
76 interrupt-parent = <&UIC0>; 78 interrupt-parent = <&UIC0>;
77 interrupts = < 79 interrupts = <
78 b 4 /* TXEOB */ 80 0xb 0x4 /* TXEOB */
79 c 4 /* RXEOB */ 81 0xc 0x4 /* RXEOB */
80 a 4 /* SERR */ 82 0xa 0x4 /* SERR */
81 d 4 /* TXDE */ 83 0xd 0x4 /* TXDE */
82 e 4 /* RXDE */>; 84 0xe 0x4 /* RXDE */>;
83 }; 85 };
84 86
85 POB0: opb { 87 POB0: opb {
86 compatible = "ibm,opb-405gp", "ibm,opb"; 88 compatible = "ibm,opb-405gp", "ibm,opb";
87 #address-cells = <1>; 89 #address-cells = <1>;
88 #size-cells = <1>; 90 #size-cells = <1>;
89 ranges = <ef600000 ef600000 a00000>; 91 ranges = <0xef600000 0xef600000 0x00a00000>;
90 dcr-reg = <0a0 5>; 92 dcr-reg = <0x0a0 0x005>;
91 clock-frequency = <0>; /* Filled in by zImage */ 93 clock-frequency = <0>; /* Filled in by zImage */
92 94
93 UART0: serial@ef600300 { 95 UART0: serial@ef600300 {
94 device_type = "serial"; 96 device_type = "serial";
95 compatible = "ns16550"; 97 compatible = "ns16550";
96 reg = <ef600300 8>; 98 reg = <0xef600300 0x00000008>;
97 virtual-reg = <ef600300>; 99 virtual-reg = <0xef600300>;
98 clock-frequency = <0>; /* Filled in by zImage */ 100 clock-frequency = <0>; /* Filled in by zImage */
99 current-speed = <2580>; 101 current-speed = <9600>;
100 interrupt-parent = <&UIC0>; 102 interrupt-parent = <&UIC0>;
101 interrupts = <0 4>; 103 interrupts = <0x0 0x4>;
102 }; 104 };
103 105
104 UART1: serial@ef600400 { 106 UART1: serial@ef600400 {
105 device_type = "serial"; 107 device_type = "serial";
106 compatible = "ns16550"; 108 compatible = "ns16550";
107 reg = <ef600400 8>; 109 reg = <0xef600400 0x00000008>;
108 virtual-reg = <ef600400>; 110 virtual-reg = <0xef600400>;
109 clock-frequency = <0>; /* Filled in by zImage */ 111 clock-frequency = <0>; /* Filled in by zImage */
110 current-speed = <2580>; 112 current-speed = <9600>;
111 interrupt-parent = <&UIC0>; 113 interrupt-parent = <&UIC0>;
112 interrupts = <1 4>; 114 interrupts = <0x1 0x4>;
113 }; 115 };
114 116
115 IIC: i2c@ef600500 { 117 IIC: i2c@ef600500 {
116 compatible = "ibm,iic-405gp", "ibm,iic"; 118 compatible = "ibm,iic-405gp", "ibm,iic";
117 reg = <ef600500 11>; 119 reg = <0xef600500 0x00000011>;
118 interrupt-parent = <&UIC0>; 120 interrupt-parent = <&UIC0>;
119 interrupts = <2 4>; 121 interrupts = <0x2 0x4>;
120 }; 122 };
121 123
122 GPIO: gpio@ef600700 { 124 GPIO: gpio@ef600700 {
123 compatible = "ibm,gpio-405gp"; 125 compatible = "ibm,gpio-405gp";
124 reg = <ef600700 20>; 126 reg = <0xef600700 0x00000020>;
125 }; 127 };
126 128
127 EMAC: ethernet@ef600800 { 129 EMAC: ethernet@ef600800 {
@@ -129,26 +131,26 @@
129 compatible = "ibm,emac-405gp", "ibm,emac"; 131 compatible = "ibm,emac-405gp", "ibm,emac";
130 interrupt-parent = <&UIC0>; 132 interrupt-parent = <&UIC0>;
131 interrupts = < 133 interrupts = <
132 f 4 /* Ethernet */ 134 0xf 0x4 /* Ethernet */
133 9 4 /* Ethernet Wake Up */>; 135 0x9 0x4 /* Ethernet Wake Up */>;
134 local-mac-address = [000000000000]; /* Filled in by zImage */ 136 local-mac-address = [000000000000]; /* Filled in by zImage */
135 reg = <ef600800 70>; 137 reg = <0xef600800 0x00000070>;
136 mal-device = <&MAL>; 138 mal-device = <&MAL>;
137 mal-tx-channel = <0>; 139 mal-tx-channel = <0>;
138 mal-rx-channel = <0>; 140 mal-rx-channel = <0>;
139 cell-index = <0>; 141 cell-index = <0>;
140 max-frame-size = <5dc>; 142 max-frame-size = <1500>;
141 rx-fifo-size = <1000>; 143 rx-fifo-size = <4096>;
142 tx-fifo-size = <800>; 144 tx-fifo-size = <2048>;
143 phy-mode = "rmii"; 145 phy-mode = "rmii";
144 phy-map = <00000001>; 146 phy-map = <0x00000001>;
145 }; 147 };
146 148
147 }; 149 };
148 150
149 EBC0: ebc { 151 EBC0: ebc {
150 compatible = "ibm,ebc-405gp", "ibm,ebc"; 152 compatible = "ibm,ebc-405gp", "ibm,ebc";
151 dcr-reg = <012 2>; 153 dcr-reg = <0x012 0x002>;
152 #address-cells = <2>; 154 #address-cells = <2>;
153 #size-cells = <1>; 155 #size-cells = <1>;
154 /* The ranges property is supplied by the bootwrapper 156 /* The ranges property is supplied by the bootwrapper
@@ -158,18 +160,18 @@
158 clock-frequency = <0>; /* Filled in by zImage */ 160 clock-frequency = <0>; /* Filled in by zImage */
159 161
160 sram@0,0 { 162 sram@0,0 {
161 reg = <0 0 80000>; 163 reg = <0x00000000 0x00000000 0x00080000>;
162 }; 164 };
163 165
164 flash@0,80000 { 166 flash@0,80000 {
165 compatible = "jedec-flash"; 167 compatible = "jedec-flash";
166 bank-width = <1>; 168 bank-width = <1>;
167 reg = <0 80000 80000>; 169 reg = <0x00000000 0x00080000 0x00080000>;
168 #address-cells = <1>; 170 #address-cells = <1>;
169 #size-cells = <1>; 171 #size-cells = <1>;
170 partition@0 { 172 partition@0 {
171 label = "OpenBIOS"; 173 label = "OpenBIOS";
172 reg = <0 80000>; 174 reg = <0x00000000 0x00080000>;
173 read-only; 175 read-only;
174 }; 176 };
175 }; 177 };
@@ -177,24 +179,24 @@
177 nvram@1,0 { 179 nvram@1,0 {
178 /* NVRAM and RTC */ 180 /* NVRAM and RTC */
179 compatible = "ds1743-nvram"; 181 compatible = "ds1743-nvram";
180 #bytes = <2000>; 182 #bytes = <0x2000>;
181 reg = <1 0 2000>; 183 reg = <0x00000001 0x00000000 0x00002000>;
182 }; 184 };
183 185
184 keyboard@2,0 { 186 keyboard@2,0 {
185 compatible = "intel,82C42PC"; 187 compatible = "intel,82C42PC";
186 reg = <2 0 2>; 188 reg = <0x00000002 0x00000000 0x00000002>;
187 }; 189 };
188 190
189 ir@3,0 { 191 ir@3,0 {
190 compatible = "ti,TIR2000PAG"; 192 compatible = "ti,TIR2000PAG";
191 reg = <3 0 10>; 193 reg = <0x00000003 0x00000000 0x00000010>;
192 }; 194 };
193 195
194 fpga@7,0 { 196 fpga@7,0 {
195 compatible = "Walnut-FPGA"; 197 compatible = "Walnut-FPGA";
196 reg = <7 0 10>; 198 reg = <0x00000007 0x00000000 0x00000010>;
197 virtual-reg = <f0300005>; 199 virtual-reg = <0xf0300005>;
198 }; 200 };
199 }; 201 };
200 202
@@ -205,35 +207,35 @@
205 #address-cells = <3>; 207 #address-cells = <3>;
206 compatible = "ibm,plb405gp-pci", "ibm,plb-pci"; 208 compatible = "ibm,plb405gp-pci", "ibm,plb-pci";
207 primary; 209 primary;
208 reg = <eec00000 8 /* Config space access */ 210 reg = <0xeec00000 0x00000008 /* Config space access */
209 eed80000 4 /* IACK */ 211 0xeed80000 0x00000004 /* IACK */
210 eed80000 4 /* Special cycle */ 212 0xeed80000 0x00000004 /* Special cycle */
211 ef480000 40>; /* Internal registers */ 213 0xef480000 0x00000040>; /* Internal registers */
212 214
213 /* Outbound ranges, one memory and one IO, 215 /* Outbound ranges, one memory and one IO,
214 * later cannot be changed. Chip supports a second 216 * later cannot be changed. Chip supports a second
215 * IO range but we don't use it for now 217 * IO range but we don't use it for now
216 */ 218 */
217 ranges = <02000000 0 80000000 80000000 0 20000000 219 ranges = <0x02000000 0x00000000 0x80000000 0x80000000 0x00000000 0x20000000
218 01000000 0 00000000 e8000000 0 00010000>; 220 0x01000000 0x00000000 0x00000000 0xe8000000 0x00000000 0x00010000>;
219 221
220 /* Inbound 2GB range starting at 0 */ 222 /* Inbound 2GB range starting at 0 */
221 dma-ranges = <42000000 0 0 0 0 80000000>; 223 dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x80000000>;
222 224
223 /* Walnut has all 4 IRQ pins tied together per slot */ 225 /* Walnut has all 4 IRQ pins tied together per slot */
224 interrupt-map-mask = <f800 0 0 0>; 226 interrupt-map-mask = <0xf800 0x0 0x0 0x0>;
225 interrupt-map = < 227 interrupt-map = <
226 /* IDSEL 1 */ 228 /* IDSEL 1 */
227 0800 0 0 0 &UIC0 1c 8 229 0x800 0x0 0x0 0x0 &UIC0 0x1c 0x8
228 230
229 /* IDSEL 2 */ 231 /* IDSEL 2 */
230 1000 0 0 0 &UIC0 1d 8 232 0x1000 0x0 0x0 0x0 &UIC0 0x1d 0x8
231 233
232 /* IDSEL 3 */ 234 /* IDSEL 3 */
233 1800 0 0 0 &UIC0 1e 8 235 0x1800 0x0 0x0 0x0 &UIC0 0x1e 0x8
234 236
235 /* IDSEL 4 */ 237 /* IDSEL 4 */
236 2000 0 0 0 &UIC0 1f 8 238 0x2000 0x0 0x0 0x0 &UIC0 0x1f 0x8
237 >; 239 >;
238 }; 240 };
239 }; 241 };
diff --git a/arch/powerpc/boot/dts/warp.dts b/arch/powerpc/boot/dts/warp.dts
index b04a52e22bf5..340018cf16b7 100644
--- a/arch/powerpc/boot/dts/warp.dts
+++ b/arch/powerpc/boot/dts/warp.dts
@@ -9,12 +9,14 @@
9 * any warranty of any kind, whether express or implied. 9 * any warranty of any kind, whether express or implied.
10 */ 10 */
11 11
12/dts-v1/;
13
12/ { 14/ {
13 #address-cells = <2>; 15 #address-cells = <2>;
14 #size-cells = <1>; 16 #size-cells = <1>;
15 model = "pika,warp"; 17 model = "pika,warp";
16 compatible = "pika,warp"; 18 compatible = "pika,warp";
17 dcr-parent = <&/cpus/cpu@0>; 19 dcr-parent = <&{/cpus/cpu@0}>;
18 20
19 aliases { 21 aliases {
20 ethernet0 = &EMAC0; 22 ethernet0 = &EMAC0;
@@ -28,13 +30,13 @@
28 cpu@0 { 30 cpu@0 {
29 device_type = "cpu"; 31 device_type = "cpu";
30 model = "PowerPC,440EP"; 32 model = "PowerPC,440EP";
31 reg = <0>; 33 reg = <0x00000000>;
32 clock-frequency = <0>; /* Filled in by zImage */ 34 clock-frequency = <0>; /* Filled in by zImage */
33 timebase-frequency = <0>; /* Filled in by zImage */ 35 timebase-frequency = <0>; /* Filled in by zImage */
34 i-cache-line-size = <20>; 36 i-cache-line-size = <32>;
35 d-cache-line-size = <20>; 37 d-cache-line-size = <32>;
36 i-cache-size = <8000>; 38 i-cache-size = <32768>;
37 d-cache-size = <8000>; 39 d-cache-size = <32768>;
38 dcr-controller; 40 dcr-controller;
39 dcr-access-method = "native"; 41 dcr-access-method = "native";
40 }; 42 };
@@ -42,14 +44,14 @@
42 44
43 memory { 45 memory {
44 device_type = "memory"; 46 device_type = "memory";
45 reg = <0 0 0>; /* Filled in by zImage */ 47 reg = <0x00000000 0x00000000 0x00000000>; /* Filled in by zImage */
46 }; 48 };
47 49
48 UIC0: interrupt-controller0 { 50 UIC0: interrupt-controller0 {
49 compatible = "ibm,uic-440ep","ibm,uic"; 51 compatible = "ibm,uic-440ep","ibm,uic";
50 interrupt-controller; 52 interrupt-controller;
51 cell-index = <0>; 53 cell-index = <0>;
52 dcr-reg = <0c0 009>; 54 dcr-reg = <0x0c0 0x009>;
53 #address-cells = <0>; 55 #address-cells = <0>;
54 #size-cells = <0>; 56 #size-cells = <0>;
55 #interrupt-cells = <2>; 57 #interrupt-cells = <2>;
@@ -59,22 +61,22 @@
59 compatible = "ibm,uic-440ep","ibm,uic"; 61 compatible = "ibm,uic-440ep","ibm,uic";
60 interrupt-controller; 62 interrupt-controller;
61 cell-index = <1>; 63 cell-index = <1>;
62 dcr-reg = <0d0 009>; 64 dcr-reg = <0x0d0 0x009>;
63 #address-cells = <0>; 65 #address-cells = <0>;
64 #size-cells = <0>; 66 #size-cells = <0>;
65 #interrupt-cells = <2>; 67 #interrupt-cells = <2>;
66 interrupts = <1e 4 1f 4>; /* cascade */ 68 interrupts = <0x1e 0x4 0x1f 0x4>; /* cascade */
67 interrupt-parent = <&UIC0>; 69 interrupt-parent = <&UIC0>;
68 }; 70 };
69 71
70 SDR0: sdr { 72 SDR0: sdr {
71 compatible = "ibm,sdr-440ep"; 73 compatible = "ibm,sdr-440ep";
72 dcr-reg = <00e 002>; 74 dcr-reg = <0x00e 0x002>;
73 }; 75 };
74 76
75 CPR0: cpr { 77 CPR0: cpr {
76 compatible = "ibm,cpr-440ep"; 78 compatible = "ibm,cpr-440ep";
77 dcr-reg = <00c 002>; 79 dcr-reg = <0x00c 0x002>;
78 }; 80 };
79 81
80 plb { 82 plb {
@@ -86,86 +88,79 @@
86 88
87 SDRAM0: sdram { 89 SDRAM0: sdram {
88 compatible = "ibm,sdram-440ep", "ibm,sdram-405gp"; 90 compatible = "ibm,sdram-440ep", "ibm,sdram-405gp";
89 dcr-reg = <010 2>; 91 dcr-reg = <0x010 0x002>;
90 }; 92 };
91 93
92 DMA0: dma { 94 DMA0: dma {
93 compatible = "ibm,dma-440ep", "ibm,dma-440gp"; 95 compatible = "ibm,dma-440ep", "ibm,dma-440gp";
94 dcr-reg = <100 027>; 96 dcr-reg = <0x100 0x027>;
95 }; 97 };
96 98
97 MAL0: mcmal { 99 MAL0: mcmal {
98 compatible = "ibm,mcmal-440ep", "ibm,mcmal-440gp", "ibm,mcmal"; 100 compatible = "ibm,mcmal-440ep", "ibm,mcmal-440gp", "ibm,mcmal";
99 dcr-reg = <180 62>; 101 dcr-reg = <0x180 0x062>;
100 num-tx-chans = <4>; 102 num-tx-chans = <4>;
101 num-rx-chans = <2>; 103 num-rx-chans = <2>;
102 interrupt-parent = <&MAL0>; 104 interrupt-parent = <&MAL0>;
103 interrupts = <0 1 2 3 4>; 105 interrupts = <0x0 0x1 0x2 0x3 0x4>;
104 #interrupt-cells = <1>; 106 #interrupt-cells = <1>;
105 #address-cells = <0>; 107 #address-cells = <0>;
106 #size-cells = <0>; 108 #size-cells = <0>;
107 interrupt-map = </*TXEOB*/ 0 &UIC0 a 4 109 interrupt-map = </*TXEOB*/ 0x0 &UIC0 0xa 0x4
108 /*RXEOB*/ 1 &UIC0 b 4 110 /*RXEOB*/ 0x1 &UIC0 0xb 0x4
109 /*SERR*/ 2 &UIC1 0 4 111 /*SERR*/ 0x2 &UIC1 0x0 0x4
110 /*TXDE*/ 3 &UIC1 1 4 112 /*TXDE*/ 0x3 &UIC1 0x1 0x4
111 /*RXDE*/ 4 &UIC1 2 4>; 113 /*RXDE*/ 0x4 &UIC1 0x2 0x4>;
112 }; 114 };
113 115
114 POB0: opb { 116 POB0: opb {
115 compatible = "ibm,opb-440ep", "ibm,opb-440gp", "ibm,opb"; 117 compatible = "ibm,opb-440ep", "ibm,opb-440gp", "ibm,opb";
116 #address-cells = <1>; 118 #address-cells = <1>;
117 #size-cells = <1>; 119 #size-cells = <1>;
118 ranges = <00000000 0 00000000 80000000 120 ranges = <0x00000000 0x00000000 0x00000000 0x80000000
119 80000000 0 80000000 80000000>; 121 0x80000000 0x00000000 0x80000000 0x80000000>;
120 interrupt-parent = <&UIC1>; 122 interrupt-parent = <&UIC1>;
121 interrupts = <7 4>; 123 interrupts = <0x7 0x4>;
122 clock-frequency = <0>; /* Filled in by zImage */ 124 clock-frequency = <0>; /* Filled in by zImage */
123 125
124 EBC0: ebc { 126 EBC0: ebc {
125 compatible = "ibm,ebc-440ep", "ibm,ebc-440gp", "ibm,ebc"; 127 compatible = "ibm,ebc-440ep", "ibm,ebc-440gp", "ibm,ebc";
126 dcr-reg = <012 2>; 128 dcr-reg = <0x012 0x002>;
127 #address-cells = <2>; 129 #address-cells = <2>;
128 #size-cells = <1>; 130 #size-cells = <1>;
129 clock-frequency = <0>; /* Filled in by zImage */ 131 clock-frequency = <0>; /* Filled in by zImage */
130 interrupts = <5 1>; 132 interrupts = <0x5 0x1>;
131 interrupt-parent = <&UIC1>; 133 interrupt-parent = <&UIC1>;
132 134
133 fpga@2,0 { 135 fpga@2,0 {
134 compatible = "pika,fpga"; 136 compatible = "pika,fpga";
135 reg = <2 0 2200>; 137 reg = <0x00000002 0x00000000 0x00001000>;
136 interrupts = <18 8>; 138 interrupts = <0x18 0x8>;
137 interrupt-parent = <&UIC0>; 139 interrupt-parent = <&UIC0>;
138 }; 140 };
139 141
142 fpga@2,4000 {
143 compatible = "pika,fpga-sd";
144 reg = <0x00000002 0x00004000 0x00000A00>;
145 };
146
140 nor_flash@0,0 { 147 nor_flash@0,0 {
141 compatible = "amd,s29gl512n", "cfi-flash"; 148 compatible = "amd,s29gl032a", "cfi-flash";
142 bank-width = <2>; 149 bank-width = <2>;
143 reg = <0 0 4000000>; 150 reg = <0x00000000 0x00000000 0x00400000>;
144 #address-cells = <1>; 151 #address-cells = <1>;
145 #size-cells = <1>; 152 #size-cells = <1>;
146 partition@0 { 153 partition@300000 {
147 label = "kernel";
148 reg = <0 180000>;
149 };
150 partition@180000 {
151 label = "root";
152 reg = <180000 3480000>;
153 };
154 partition@3600000 {
155 label = "user";
156 reg = <3600000 900000>;
157 };
158 partition@3f00000 {
159 label = "fpga"; 154 label = "fpga";
160 reg = <3f00000 40000>; 155 reg = <0x0030000 0x00040000>;
161 }; 156 };
162 partition@3f40000 { 157 partition@340000 {
163 label = "env"; 158 label = "env";
164 reg = <3f40000 40000>; 159 reg = <0x0340000 0x00040000>;
165 }; 160 };
166 partition@3f80000 { 161 partition@380000 {
167 label = "u-boot"; 162 label = "u-boot";
168 reg = <3f80000 80000>; 163 reg = <0x0380000 0x00080000>;
169 }; 164 };
170 }; 165 };
171 }; 166 };
@@ -173,60 +168,80 @@
173 UART0: serial@ef600300 { 168 UART0: serial@ef600300 {
174 device_type = "serial"; 169 device_type = "serial";
175 compatible = "ns16550"; 170 compatible = "ns16550";
176 reg = <ef600300 8>; 171 reg = <0xef600300 0x00000008>;
177 virtual-reg = <ef600300>; 172 virtual-reg = <0xef600300>;
178 clock-frequency = <0>; /* Filled in by zImage */ 173 clock-frequency = <0>; /* Filled in by zImage */
179 current-speed = <1c200>; 174 current-speed = <115200>;
180 interrupt-parent = <&UIC0>; 175 interrupt-parent = <&UIC0>;
181 interrupts = <0 4>; 176 interrupts = <0x0 0x4>;
182 }; 177 };
183 178
184 IIC0: i2c@ef600700 { 179 IIC0: i2c@ef600700 {
185 compatible = "ibm,iic-440ep", "ibm,iic-440gp", "ibm,iic"; 180 compatible = "ibm,iic-440ep", "ibm,iic-440gp", "ibm,iic";
186 reg = <ef600700 14>; 181 reg = <0xef600700 0x00000014>;
187 interrupt-parent = <&UIC0>; 182 interrupt-parent = <&UIC0>;
188 interrupts = <2 4>; 183 interrupts = <0x2 0x4>;
184 index = <0x0>;
185 #address-cells = <1>;
186 #size-cells = <0>;
187
188 ad7414@4a {
189 compatible = "adi,ad7414";
190 reg = <0x4a>;
191 interrupts = <0x19 0x8>;
192 interrupt-parent = <&UIC0>;
193 };
189 }; 194 };
190 195
191 GPIO0: gpio@ef600b00 { 196 GPIO0: gpio@ef600b00 {
192 compatible = "ibm,gpio-440ep"; 197 compatible = "ibm,gpio-440ep";
193 reg = <ef600b00 48>; 198 reg = <0xef600b00 0x00000048>;
199 #gpio-cells = <2>;
200 gpio-controller;
194 }; 201 };
195 202
196 GPIO1: gpio@ef600c00 { 203 GPIO1: gpio@ef600c00 {
197 compatible = "ibm,gpio-440ep"; 204 compatible = "ibm,gpio-440ep";
198 reg = <ef600c00 48>; 205 reg = <0xef600c00 0x00000048>;
206 #gpio-cells = <2>;
207 gpio-controller;
208
209 led@31 {
210 compatible = "linux,gpio-led";
211 linux,name = ":green:";
212 gpios = <&GPIO1 0x30 0>;
213 };
199 }; 214 };
200 215
201 ZMII0: emac-zmii@ef600d00 { 216 ZMII0: emac-zmii@ef600d00 {
202 compatible = "ibm,zmii-440ep", "ibm,zmii-440gp", "ibm,zmii"; 217 compatible = "ibm,zmii-440ep", "ibm,zmii-440gp", "ibm,zmii";
203 reg = <ef600d00 c>; 218 reg = <0xef600d00 0x0000000c>;
204 }; 219 };
205 220
206 EMAC0: ethernet@ef600e00 { 221 EMAC0: ethernet@ef600e00 {
207 device_type = "network"; 222 device_type = "network";
208 compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac"; 223 compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac";
209 interrupt-parent = <&UIC1>; 224 interrupt-parent = <&UIC1>;
210 interrupts = <1c 4 1d 4>; 225 interrupts = <0x1c 0x4 0x1d 0x4>;
211 reg = <ef600e00 70>; 226 reg = <0xef600e00 0x00000070>;
212 local-mac-address = [000000000000]; 227 local-mac-address = [000000000000];
213 mal-device = <&MAL0>; 228 mal-device = <&MAL0>;
214 mal-tx-channel = <0 1>; 229 mal-tx-channel = <0 1>;
215 mal-rx-channel = <0>; 230 mal-rx-channel = <0>;
216 cell-index = <0>; 231 cell-index = <0>;
217 max-frame-size = <5dc>; 232 max-frame-size = <1500>;
218 rx-fifo-size = <1000>; 233 rx-fifo-size = <4096>;
219 tx-fifo-size = <800>; 234 tx-fifo-size = <2048>;
220 phy-mode = "rmii"; 235 phy-mode = "rmii";
221 phy-map = <00000000>; 236 phy-map = <0x00000000>;
222 zmii-device = <&ZMII0>; 237 zmii-device = <&ZMII0>;
223 zmii-channel = <0>; 238 zmii-channel = <0>;
224 }; 239 };
225 240
226 usb@ef601000 { 241 usb@ef601000 {
227 compatible = "ohci-be"; 242 compatible = "ohci-be";
228 reg = <ef601000 80>; 243 reg = <0xef601000 0x00000080>;
229 interrupts = <8 1 9 1>; 244 interrupts = <0x8 0x1 0x9 0x1>;
230 interrupt-parent = < &UIC1 >; 245 interrupt-parent = < &UIC1 >;
231 }; 246 };
232 }; 247 };
diff --git a/arch/powerpc/boot/dts/yosemite.dts b/arch/powerpc/boot/dts/yosemite.dts
index 0d6d332814e0..e39422aa0d85 100644
--- a/arch/powerpc/boot/dts/yosemite.dts
+++ b/arch/powerpc/boot/dts/yosemite.dts
@@ -9,12 +9,14 @@
9 * any warranty of any kind, whether express or implied. 9 * any warranty of any kind, whether express or implied.
10 */ 10 */
11 11
12/dts-v1/;
13
12/ { 14/ {
13 #address-cells = <2>; 15 #address-cells = <2>;
14 #size-cells = <1>; 16 #size-cells = <1>;
15 model = "amcc,yosemite"; 17 model = "amcc,yosemite";
16 compatible = "amcc,yosemite","amcc,bamboo"; 18 compatible = "amcc,yosemite","amcc,bamboo";
17 dcr-parent = <&/cpus/cpu@0>; 19 dcr-parent = <&{/cpus/cpu@0}>;
18 20
19 aliases { 21 aliases {
20 ethernet0 = &EMAC0; 22 ethernet0 = &EMAC0;
@@ -32,13 +34,13 @@
32 cpu@0 { 34 cpu@0 {
33 device_type = "cpu"; 35 device_type = "cpu";
34 model = "PowerPC,440EP"; 36 model = "PowerPC,440EP";
35 reg = <0>; 37 reg = <0x00000000>;
36 clock-frequency = <0>; /* Filled in by zImage */ 38 clock-frequency = <0>; /* Filled in by zImage */
37 timebase-frequency = <0>; /* Filled in by zImage */ 39 timebase-frequency = <0>; /* Filled in by zImage */
38 i-cache-line-size = <20>; 40 i-cache-line-size = <32>;
39 d-cache-line-size = <20>; 41 d-cache-line-size = <32>;
40 i-cache-size = <8000>; 42 i-cache-size = <32768>;
41 d-cache-size = <8000>; 43 d-cache-size = <32768>;
42 dcr-controller; 44 dcr-controller;
43 dcr-access-method = "native"; 45 dcr-access-method = "native";
44 }; 46 };
@@ -46,14 +48,14 @@
46 48
47 memory { 49 memory {
48 device_type = "memory"; 50 device_type = "memory";
49 reg = <0 0 0>; /* Filled in by zImage */ 51 reg = <0x00000000 0x00000000 0x00000000>; /* Filled in by zImage */
50 }; 52 };
51 53
52 UIC0: interrupt-controller0 { 54 UIC0: interrupt-controller0 {
53 compatible = "ibm,uic-440ep","ibm,uic"; 55 compatible = "ibm,uic-440ep","ibm,uic";
54 interrupt-controller; 56 interrupt-controller;
55 cell-index = <0>; 57 cell-index = <0>;
56 dcr-reg = <0c0 009>; 58 dcr-reg = <0x0c0 0x009>;
57 #address-cells = <0>; 59 #address-cells = <0>;
58 #size-cells = <0>; 60 #size-cells = <0>;
59 #interrupt-cells = <2>; 61 #interrupt-cells = <2>;
@@ -63,22 +65,22 @@
63 compatible = "ibm,uic-440ep","ibm,uic"; 65 compatible = "ibm,uic-440ep","ibm,uic";
64 interrupt-controller; 66 interrupt-controller;
65 cell-index = <1>; 67 cell-index = <1>;
66 dcr-reg = <0d0 009>; 68 dcr-reg = <0x0d0 0x009>;
67 #address-cells = <0>; 69 #address-cells = <0>;
68 #size-cells = <0>; 70 #size-cells = <0>;
69 #interrupt-cells = <2>; 71 #interrupt-cells = <2>;
70 interrupts = <1e 4 1f 4>; /* cascade */ 72 interrupts = <0x1e 0x4 0x1f 0x4>; /* cascade */
71 interrupt-parent = <&UIC0>; 73 interrupt-parent = <&UIC0>;
72 }; 74 };
73 75
74 SDR0: sdr { 76 SDR0: sdr {
75 compatible = "ibm,sdr-440ep"; 77 compatible = "ibm,sdr-440ep";
76 dcr-reg = <00e 002>; 78 dcr-reg = <0x00e 0x002>;
77 }; 79 };
78 80
79 CPR0: cpr { 81 CPR0: cpr {
80 compatible = "ibm,cpr-440ep"; 82 compatible = "ibm,cpr-440ep";
81 dcr-reg = <00c 002>; 83 dcr-reg = <0x00c 0x002>;
82 }; 84 };
83 85
84 plb { 86 plb {
@@ -90,29 +92,29 @@
90 92
91 SDRAM0: sdram { 93 SDRAM0: sdram {
92 compatible = "ibm,sdram-440ep", "ibm,sdram-405gp"; 94 compatible = "ibm,sdram-440ep", "ibm,sdram-405gp";
93 dcr-reg = <010 2>; 95 dcr-reg = <0x010 0x002>;
94 }; 96 };
95 97
96 DMA0: dma { 98 DMA0: dma {
97 compatible = "ibm,dma-440ep", "ibm,dma-440gp"; 99 compatible = "ibm,dma-440ep", "ibm,dma-440gp";
98 dcr-reg = <100 027>; 100 dcr-reg = <0x100 0x027>;
99 }; 101 };
100 102
101 MAL0: mcmal { 103 MAL0: mcmal {
102 compatible = "ibm,mcmal-440ep", "ibm,mcmal-440gp", "ibm,mcmal"; 104 compatible = "ibm,mcmal-440ep", "ibm,mcmal-440gp", "ibm,mcmal";
103 dcr-reg = <180 62>; 105 dcr-reg = <0x180 0x062>;
104 num-tx-chans = <4>; 106 num-tx-chans = <4>;
105 num-rx-chans = <2>; 107 num-rx-chans = <2>;
106 interrupt-parent = <&MAL0>; 108 interrupt-parent = <&MAL0>;
107 interrupts = <0 1 2 3 4>; 109 interrupts = <0x0 0x1 0x2 0x3 0x4>;
108 #interrupt-cells = <1>; 110 #interrupt-cells = <1>;
109 #address-cells = <0>; 111 #address-cells = <0>;
110 #size-cells = <0>; 112 #size-cells = <0>;
111 interrupt-map = </*TXEOB*/ 0 &UIC0 a 4 113 interrupt-map = </*TXEOB*/ 0x0 &UIC0 0xa 0x4
112 /*RXEOB*/ 1 &UIC0 b 4 114 /*RXEOB*/ 0x1 &UIC0 0xb 0x4
113 /*SERR*/ 2 &UIC1 0 4 115 /*SERR*/ 0x2 &UIC1 0x0 0x4
114 /*TXDE*/ 3 &UIC1 1 4 116 /*TXDE*/ 0x3 &UIC1 0x1 0x4
115 /*RXDE*/ 4 &UIC1 2 4>; 117 /*RXDE*/ 0x4 &UIC1 0x2 0x4>;
116 }; 118 };
117 119
118 POB0: opb { 120 POB0: opb {
@@ -122,110 +124,110 @@
122 /* Bamboo is oddball in the 44x world and doesn't use the ERPN 124 /* Bamboo is oddball in the 44x world and doesn't use the ERPN
123 * bits. 125 * bits.
124 */ 126 */
125 ranges = <00000000 0 00000000 80000000 127 ranges = <0x00000000 0x00000000 0x00000000 0x80000000
126 80000000 0 80000000 80000000>; 128 0x80000000 0x00000000 0x80000000 0x80000000>;
127 interrupt-parent = <&UIC1>; 129 interrupt-parent = <&UIC1>;
128 interrupts = <7 4>; 130 interrupts = <0x7 0x4>;
129 clock-frequency = <0>; /* Filled in by zImage */ 131 clock-frequency = <0>; /* Filled in by zImage */
130 132
131 EBC0: ebc { 133 EBC0: ebc {
132 compatible = "ibm,ebc-440ep", "ibm,ebc-440gp", "ibm,ebc"; 134 compatible = "ibm,ebc-440ep", "ibm,ebc-440gp", "ibm,ebc";
133 dcr-reg = <012 2>; 135 dcr-reg = <0x012 0x002>;
134 #address-cells = <2>; 136 #address-cells = <2>;
135 #size-cells = <1>; 137 #size-cells = <1>;
136 clock-frequency = <0>; /* Filled in by zImage */ 138 clock-frequency = <0>; /* Filled in by zImage */
137 interrupts = <5 1>; 139 interrupts = <0x5 0x1>;
138 interrupt-parent = <&UIC1>; 140 interrupt-parent = <&UIC1>;
139 }; 141 };
140 142
141 UART0: serial@ef600300 { 143 UART0: serial@ef600300 {
142 device_type = "serial"; 144 device_type = "serial";
143 compatible = "ns16550"; 145 compatible = "ns16550";
144 reg = <ef600300 8>; 146 reg = <0xef600300 0x00000008>;
145 virtual-reg = <ef600300>; 147 virtual-reg = <0xef600300>;
146 clock-frequency = <0>; /* Filled in by zImage */ 148 clock-frequency = <0>; /* Filled in by zImage */
147 current-speed = <1c200>; 149 current-speed = <115200>;
148 interrupt-parent = <&UIC0>; 150 interrupt-parent = <&UIC0>;
149 interrupts = <0 4>; 151 interrupts = <0x0 0x4>;
150 }; 152 };
151 153
152 UART1: serial@ef600400 { 154 UART1: serial@ef600400 {
153 device_type = "serial"; 155 device_type = "serial";
154 compatible = "ns16550"; 156 compatible = "ns16550";
155 reg = <ef600400 8>; 157 reg = <0xef600400 0x00000008>;
156 virtual-reg = <ef600400>; 158 virtual-reg = <0xef600400>;
157 clock-frequency = <0>; 159 clock-frequency = <0>;
158 current-speed = <0>; 160 current-speed = <0>;
159 interrupt-parent = <&UIC0>; 161 interrupt-parent = <&UIC0>;
160 interrupts = <1 4>; 162 interrupts = <0x1 0x4>;
161 }; 163 };
162 164
163 UART2: serial@ef600500 { 165 UART2: serial@ef600500 {
164 device_type = "serial"; 166 device_type = "serial";
165 compatible = "ns16550"; 167 compatible = "ns16550";
166 reg = <ef600500 8>; 168 reg = <0xef600500 0x00000008>;
167 virtual-reg = <ef600500>; 169 virtual-reg = <0xef600500>;
168 clock-frequency = <0>; 170 clock-frequency = <0>;
169 current-speed = <0>; 171 current-speed = <0>;
170 interrupt-parent = <&UIC0>; 172 interrupt-parent = <&UIC0>;
171 interrupts = <3 4>; 173 interrupts = <0x3 0x4>;
172 status = "disabled"; 174 status = "disabled";
173 }; 175 };
174 176
175 UART3: serial@ef600600 { 177 UART3: serial@ef600600 {
176 device_type = "serial"; 178 device_type = "serial";
177 compatible = "ns16550"; 179 compatible = "ns16550";
178 reg = <ef600600 8>; 180 reg = <0xef600600 0x00000008>;
179 virtual-reg = <ef600600>; 181 virtual-reg = <0xef600600>;
180 clock-frequency = <0>; 182 clock-frequency = <0>;
181 current-speed = <0>; 183 current-speed = <0>;
182 interrupt-parent = <&UIC0>; 184 interrupt-parent = <&UIC0>;
183 interrupts = <4 4>; 185 interrupts = <0x4 0x4>;
184 status = "disabled"; 186 status = "disabled";
185 }; 187 };
186 188
187 IIC0: i2c@ef600700 { 189 IIC0: i2c@ef600700 {
188 compatible = "ibm,iic-440ep", "ibm,iic-440gp", "ibm,iic"; 190 compatible = "ibm,iic-440ep", "ibm,iic-440gp", "ibm,iic";
189 reg = <ef600700 14>; 191 reg = <0xef600700 0x00000014>;
190 interrupt-parent = <&UIC0>; 192 interrupt-parent = <&UIC0>;
191 interrupts = <2 4>; 193 interrupts = <0x2 0x4>;
192 }; 194 };
193 195
194 IIC1: i2c@ef600800 { 196 IIC1: i2c@ef600800 {
195 compatible = "ibm,iic-440ep", "ibm,iic-440gp", "ibm,iic"; 197 compatible = "ibm,iic-440ep", "ibm,iic-440gp", "ibm,iic";
196 reg = <ef600800 14>; 198 reg = <0xef600800 0x00000014>;
197 interrupt-parent = <&UIC0>; 199 interrupt-parent = <&UIC0>;
198 interrupts = <7 4>; 200 interrupts = <0x7 0x4>;
199 }; 201 };
200 202
201 spi@ef600900 { 203 spi@ef600900 {
202 compatible = "amcc,spi-440ep"; 204 compatible = "amcc,spi-440ep";
203 reg = <ef600900 6>; 205 reg = <0xef600900 0x00000006>;
204 interrupts = <8 4>; 206 interrupts = <0x8 0x4>;
205 interrupt-parent = <&UIC0>; 207 interrupt-parent = <&UIC0>;
206 }; 208 };
207 209
208 ZMII0: emac-zmii@ef600d00 { 210 ZMII0: emac-zmii@ef600d00 {
209 compatible = "ibm,zmii-440ep", "ibm,zmii-440gp", "ibm,zmii"; 211 compatible = "ibm,zmii-440ep", "ibm,zmii-440gp", "ibm,zmii";
210 reg = <ef600d00 c>; 212 reg = <0xef600d00 0x0000000c>;
211 }; 213 };
212 214
213 EMAC0: ethernet@ef600e00 { 215 EMAC0: ethernet@ef600e00 {
214 device_type = "network"; 216 device_type = "network";
215 compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac"; 217 compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac";
216 interrupt-parent = <&UIC1>; 218 interrupt-parent = <&UIC1>;
217 interrupts = <1c 4 1d 4>; 219 interrupts = <0x1c 0x4 0x1d 0x4>;
218 reg = <ef600e00 70>; 220 reg = <0xef600e00 0x00000070>;
219 local-mac-address = [000000000000]; 221 local-mac-address = [000000000000];
220 mal-device = <&MAL0>; 222 mal-device = <&MAL0>;
221 mal-tx-channel = <0 1>; 223 mal-tx-channel = <0 1>;
222 mal-rx-channel = <0>; 224 mal-rx-channel = <0>;
223 cell-index = <0>; 225 cell-index = <0>;
224 max-frame-size = <5dc>; 226 max-frame-size = <1500>;
225 rx-fifo-size = <1000>; 227 rx-fifo-size = <4096>;
226 tx-fifo-size = <800>; 228 tx-fifo-size = <2048>;
227 phy-mode = "rmii"; 229 phy-mode = "rmii";
228 phy-map = <00000000>; 230 phy-map = <0x00000000>;
229 zmii-device = <&ZMII0>; 231 zmii-device = <&ZMII0>;
230 zmii-channel = <0>; 232 zmii-channel = <0>;
231 }; 233 };
@@ -234,26 +236,26 @@
234 device_type = "network"; 236 device_type = "network";
235 compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac"; 237 compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac";
236 interrupt-parent = <&UIC1>; 238 interrupt-parent = <&UIC1>;
237 interrupts = <1e 4 1f 4>; 239 interrupts = <0x1e 0x4 0x1f 0x4>;
238 reg = <ef600f00 70>; 240 reg = <0xef600f00 0x00000070>;
239 local-mac-address = [000000000000]; 241 local-mac-address = [000000000000];
240 mal-device = <&MAL0>; 242 mal-device = <&MAL0>;
241 mal-tx-channel = <2 3>; 243 mal-tx-channel = <2 3>;
242 mal-rx-channel = <1>; 244 mal-rx-channel = <1>;
243 cell-index = <1>; 245 cell-index = <1>;
244 max-frame-size = <5dc>; 246 max-frame-size = <1500>;
245 rx-fifo-size = <1000>; 247 rx-fifo-size = <4096>;
246 tx-fifo-size = <800>; 248 tx-fifo-size = <2048>;
247 phy-mode = "rmii"; 249 phy-mode = "rmii";
248 phy-map = <00000000>; 250 phy-map = <0x00000000>;
249 zmii-device = <&ZMII0>; 251 zmii-device = <&ZMII0>;
250 zmii-channel = <1>; 252 zmii-channel = <1>;
251 }; 253 };
252 254
253 usb@ef601000 { 255 usb@ef601000 {
254 compatible = "ohci-be"; 256 compatible = "ohci-be";
255 reg = <ef601000 80>; 257 reg = <0xef601000 0x00000080>;
256 interrupts = <8 4 9 4>; 258 interrupts = <0x8 0x4 0x9 0x4>;
257 interrupt-parent = < &UIC1 >; 259 interrupt-parent = < &UIC1 >;
258 }; 260 };
259 }; 261 };
@@ -265,35 +267,35 @@
265 #address-cells = <3>; 267 #address-cells = <3>;
266 compatible = "ibm,plb440ep-pci", "ibm,plb-pci"; 268 compatible = "ibm,plb440ep-pci", "ibm,plb-pci";
267 primary; 269 primary;
268 reg = <0 eec00000 8 /* Config space access */ 270 reg = <0x00000000 0xeec00000 0x00000008 /* Config space access */
269 0 eed00000 4 /* IACK */ 271 0x00000000 0xeed00000 0x00000004 /* IACK */
270 0 eed00000 4 /* Special cycle */ 272 0x00000000 0xeed00000 0x00000004 /* Special cycle */
271 0 ef400000 40>; /* Internal registers */ 273 0x00000000 0xef400000 0x00000040>; /* Internal registers */
272 274
273 /* Outbound ranges, one memory and one IO, 275 /* Outbound ranges, one memory and one IO,
274 * later cannot be changed. Chip supports a second 276 * later cannot be changed. Chip supports a second
275 * IO range but we don't use it for now 277 * IO range but we don't use it for now
276 */ 278 */
277 ranges = <02000000 0 a0000000 0 a0000000 0 20000000 279 ranges = <0x02000000 0x00000000 0xa0000000 0x00000000 0xa0000000 0x00000000 0x20000000
278 01000000 0 00000000 0 e8000000 0 00010000>; 280 0x01000000 0x00000000 0x00000000 0x00000000 0xe8000000 0x00000000 0x00010000>;
279 281
280 /* Inbound 2GB range starting at 0 */ 282 /* Inbound 2GB range starting at 0 */
281 dma-ranges = <42000000 0 0 0 0 0 80000000>; 283 dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x0 0x80000000>;
282 284
283 /* Bamboo has all 4 IRQ pins tied together per slot */ 285 /* Bamboo has all 4 IRQ pins tied together per slot */
284 interrupt-map-mask = <f800 0 0 0>; 286 interrupt-map-mask = <0xf800 0x0 0x0 0x0>;
285 interrupt-map = < 287 interrupt-map = <
286 /* IDSEL 1 */ 288 /* IDSEL 1 */
287 0800 0 0 0 &UIC0 1c 8 289 0x800 0x0 0x0 0x0 &UIC0 0x1c 0x8
288 290
289 /* IDSEL 2 */ 291 /* IDSEL 2 */
290 1000 0 0 0 &UIC0 1b 8 292 0x1000 0x0 0x0 0x0 &UIC0 0x1b 0x8
291 293
292 /* IDSEL 3 */ 294 /* IDSEL 3 */
293 1800 0 0 0 &UIC0 1a 8 295 0x1800 0x0 0x0 0x0 &UIC0 0x1a 0x8
294 296
295 /* IDSEL 4 */ 297 /* IDSEL 4 */
296 2000 0 0 0 &UIC0 19 8 298 0x2000 0x0 0x0 0x0 &UIC0 0x19 0x8
297 >; 299 >;
298 }; 300 };
299 }; 301 };
diff --git a/arch/powerpc/boot/redboot-83xx.c b/arch/powerpc/boot/redboot-83xx.c
new file mode 100644
index 000000000000..79aa9e151fa7
--- /dev/null
+++ b/arch/powerpc/boot/redboot-83xx.c
@@ -0,0 +1,60 @@
1/*
2 * RedBoot firmware support
3 *
4 * Author: Scott Wood <scottwood@freescale.com>
5 *
6 * Copyright (c) 2007 Freescale Semiconductor, Inc.
7 * Copyright (c) 2008 Codehermit
8 *
9 * This program is free software; you can redistribute it and/or modify it
10 * under the terms of the GNU General Public License version 2 as published
11 * by the Free Software Foundation.
12 */
13
14#include "ops.h"
15#include "stdio.h"
16#include "redboot.h"
17#include "fsl-soc.h"
18#include "io.h"
19
20static bd_t bd;
21BSS_STACK(4096);
22
23#define MHZ(x) ((x + 500000) / 1000000)
24
25static void platform_fixups(void)
26{
27 void *node;
28
29 dt_fixup_memory(bd.bi_memstart, bd.bi_memsize);
30 dt_fixup_mac_addresses(bd.bi_enetaddr);
31 dt_fixup_cpu_clocks(bd.bi_intfreq, bd.bi_busfreq / 16, bd.bi_busfreq);
32
33 node = finddevice("/soc/cpm/brg");
34 if (node) {
35 printf("BRG clock-frequency <- 0x%x (%dMHz)\r\n",
36 bd.bi_busfreq, MHZ(bd.bi_busfreq));
37 setprop(node, "clock-frequency", &bd.bi_busfreq, 4);
38 }
39
40}
41
42void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
43 unsigned long r6, unsigned long r7)
44{
45 memcpy(&bd, (char *)r3, sizeof(bd));
46
47 if (bd.bi_tag != 0x42444944)
48 return;
49
50 simple_alloc_init(_end,
51 bd.bi_memstart + bd.bi_memsize - (unsigned long)_end,
52 32, 64);
53
54 fdt_init(_dtb_start);
55 serial_console_init();
56 platform_ops.fixups = platform_fixups;
57
58 loader_info.cmdline = (char *)bd.bi_cmdline;
59 loader_info.cmdline_len = strlen((char *)bd.bi_cmdline);
60}
diff --git a/arch/powerpc/boot/wrapper b/arch/powerpc/boot/wrapper
index d6c96d9ab291..4832be880998 100755
--- a/arch/powerpc/boot/wrapper
+++ b/arch/powerpc/boot/wrapper
@@ -171,7 +171,7 @@ cuboot*)
171 *-mpc824*) 171 *-mpc824*)
172 platformo=$object/cuboot-824x.o 172 platformo=$object/cuboot-824x.o
173 ;; 173 ;;
174 *-mpc83*) 174 *-mpc83*|*-asp834x*)
175 platformo=$object/cuboot-83xx.o 175 platformo=$object/cuboot-83xx.o
176 ;; 176 ;;
177 *-tqm8541|*-mpc8560*|*-tqm8560|*-tqm8555|*-ksi8560*) 177 *-tqm8541|*-mpc8560*|*-tqm8560|*-tqm8555|*-ksi8560*)
@@ -203,6 +203,10 @@ simpleboot-virtex405-*)
203 platformo="$object/virtex405-head.o $object/simpleboot.o" 203 platformo="$object/virtex405-head.o $object/simpleboot.o"
204 binary=y 204 binary=y
205 ;; 205 ;;
206asp834x-redboot)
207 platformo="$object/fixed-head.o $object/redboot-83xx.o"
208 binary=y
209 ;;
206esac 210esac
207 211
208vmz="$tmpdir/`basename \"$kernel\"`.$ext" 212vmz="$tmpdir/`basename \"$kernel\"`.$ext"
diff --git a/arch/powerpc/configs/asp8347_defconfig b/arch/powerpc/configs/asp8347_defconfig
new file mode 100644
index 000000000000..60bb4d106c87
--- /dev/null
+++ b/arch/powerpc/configs/asp8347_defconfig
@@ -0,0 +1,1214 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.25-rc6
4# Tue May 6 02:21:00 2008
5#
6# CONFIG_PPC64 is not set
7
8#
9# Processor support
10#
11CONFIG_6xx=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
17CONFIG_PPC_FPU=y
18CONFIG_FSL_EMB_PERFMON=y
19CONFIG_PPC_STD_MMU=y
20CONFIG_PPC_STD_MMU_32=y
21# CONFIG_PPC_MM_SLICES is not set
22# CONFIG_SMP is not set
23CONFIG_PPC32=y
24CONFIG_WORD_SIZE=32
25CONFIG_PPC_MERGE=y
26CONFIG_MMU=y
27CONFIG_GENERIC_CMOS_UPDATE=y
28CONFIG_GENERIC_TIME=y
29CONFIG_GENERIC_TIME_VSYSCALL=y
30CONFIG_GENERIC_CLOCKEVENTS=y
31CONFIG_GENERIC_HARDIRQS=y
32# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
33CONFIG_IRQ_PER_CPU=y
34CONFIG_RWSEM_XCHGADD_ALGORITHM=y
35CONFIG_ARCH_HAS_ILOG2_U32=y
36CONFIG_GENERIC_HWEIGHT=y
37CONFIG_GENERIC_CALIBRATE_DELAY=y
38CONFIG_GENERIC_FIND_NEXT_BIT=y
39# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
40CONFIG_PPC=y
41CONFIG_EARLY_PRINTK=y
42CONFIG_GENERIC_NVRAM=y
43CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
44CONFIG_ARCH_MAY_HAVE_PC_FDC=y
45CONFIG_PPC_OF=y
46CONFIG_OF=y
47CONFIG_PPC_UDBG_16550=y
48# CONFIG_GENERIC_TBSYNC is not set
49CONFIG_AUDIT_ARCH=y
50CONFIG_GENERIC_BUG=y
51# CONFIG_DEFAULT_UIMAGE is not set
52CONFIG_REDBOOT=y
53# CONFIG_PPC_DCR_NATIVE is not set
54# CONFIG_PPC_DCR_MMIO is not set
55CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
56
57#
58# General setup
59#
60CONFIG_EXPERIMENTAL=y
61CONFIG_BROKEN_ON_SMP=y
62CONFIG_INIT_ENV_ARG_LIMIT=32
63CONFIG_LOCALVERSION=""
64CONFIG_LOCALVERSION_AUTO=y
65CONFIG_SWAP=y
66CONFIG_SYSVIPC=y
67CONFIG_SYSVIPC_SYSCTL=y
68# CONFIG_POSIX_MQUEUE is not set
69# CONFIG_BSD_PROCESS_ACCT is not set
70# CONFIG_TASKSTATS is not set
71# CONFIG_AUDIT is not set
72# CONFIG_IKCONFIG is not set
73CONFIG_LOG_BUF_SHIFT=14
74# CONFIG_CGROUPS is not set
75CONFIG_GROUP_SCHED=y
76# CONFIG_FAIR_GROUP_SCHED is not set
77# CONFIG_RT_GROUP_SCHED is not set
78CONFIG_USER_SCHED=y
79# CONFIG_CGROUP_SCHED is not set
80CONFIG_SYSFS_DEPRECATED=y
81CONFIG_SYSFS_DEPRECATED_V2=y
82# CONFIG_RELAY is not set
83# CONFIG_NAMESPACES is not set
84CONFIG_BLK_DEV_INITRD=y
85CONFIG_INITRAMFS_SOURCE=""
86# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
87CONFIG_SYSCTL=y
88CONFIG_EMBEDDED=y
89CONFIG_SYSCTL_SYSCALL=y
90# CONFIG_KALLSYMS is not set
91CONFIG_HOTPLUG=y
92CONFIG_PRINTK=y
93CONFIG_BUG=y
94CONFIG_ELF_CORE=y
95CONFIG_COMPAT_BRK=y
96CONFIG_BASE_FULL=y
97CONFIG_FUTEX=y
98CONFIG_ANON_INODES=y
99# CONFIG_EPOLL is not set
100CONFIG_SIGNALFD=y
101CONFIG_TIMERFD=y
102CONFIG_EVENTFD=y
103CONFIG_SHMEM=y
104CONFIG_VM_EVENT_COUNTERS=y
105CONFIG_SLUB_DEBUG=y
106# CONFIG_SLAB is not set
107CONFIG_SLUB=y
108# CONFIG_SLOB is not set
109# CONFIG_PROFILING is not set
110# CONFIG_MARKERS is not set
111CONFIG_HAVE_OPROFILE=y
112CONFIG_HAVE_KPROBES=y
113CONFIG_HAVE_KRETPROBES=y
114CONFIG_PROC_PAGE_MONITOR=y
115CONFIG_SLABINFO=y
116CONFIG_RT_MUTEXES=y
117# CONFIG_TINY_SHMEM is not set
118CONFIG_BASE_SMALL=0
119CONFIG_MODULES=y
120CONFIG_MODULE_UNLOAD=y
121# CONFIG_MODULE_FORCE_UNLOAD is not set
122# CONFIG_MODVERSIONS is not set
123# CONFIG_MODULE_SRCVERSION_ALL is not set
124# CONFIG_KMOD is not set
125CONFIG_BLOCK=y
126# CONFIG_LBD is not set
127# CONFIG_BLK_DEV_IO_TRACE is not set
128# CONFIG_LSF is not set
129# CONFIG_BLK_DEV_BSG is not set
130
131#
132# IO Schedulers
133#
134CONFIG_IOSCHED_NOOP=y
135CONFIG_IOSCHED_AS=y
136CONFIG_IOSCHED_DEADLINE=y
137CONFIG_IOSCHED_CFQ=y
138CONFIG_DEFAULT_AS=y
139# CONFIG_DEFAULT_DEADLINE is not set
140# CONFIG_DEFAULT_CFQ is not set
141# CONFIG_DEFAULT_NOOP is not set
142CONFIG_DEFAULT_IOSCHED="anticipatory"
143CONFIG_CLASSIC_RCU=y
144
145#
146# Platform support
147#
148# CONFIG_PPC_MULTIPLATFORM is not set
149# CONFIG_PPC_82xx is not set
150CONFIG_PPC_83xx=y
151# CONFIG_PPC_86xx is not set
152# CONFIG_PPC_MPC512x is not set
153# CONFIG_PPC_MPC5121 is not set
154# CONFIG_PPC_CELL is not set
155# CONFIG_PPC_CELL_NATIVE is not set
156# CONFIG_PQ2ADS is not set
157CONFIG_MPC83xx=y
158# CONFIG_MPC831x_RDB is not set
159# CONFIG_MPC832x_MDS is not set
160# CONFIG_MPC832x_RDB is not set
161# CONFIG_MPC834x_MDS is not set
162# CONFIG_MPC834x_ITX is not set
163# CONFIG_MPC836x_MDS is not set
164# CONFIG_MPC837x_MDS is not set
165# CONFIG_MPC837x_RDB is not set
166# CONFIG_SBC834x is not set
167CONFIG_ASP834x=y
168CONFIG_PPC_MPC834x=y
169CONFIG_IPIC=y
170# CONFIG_MPIC is not set
171# CONFIG_MPIC_WEIRD is not set
172# CONFIG_PPC_I8259 is not set
173# CONFIG_PPC_RTAS is not set
174# CONFIG_MMIO_NVRAM is not set
175# CONFIG_PPC_MPC106 is not set
176# CONFIG_PPC_970_NAP is not set
177# CONFIG_PPC_INDIRECT_IO is not set
178# CONFIG_GENERIC_IOMAP is not set
179# CONFIG_CPU_FREQ is not set
180# CONFIG_FSL_ULI1575 is not set
181
182#
183# Kernel options
184#
185# CONFIG_HIGHMEM is not set
186CONFIG_TICK_ONESHOT=y
187CONFIG_NO_HZ=y
188CONFIG_HIGH_RES_TIMERS=y
189CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
190# CONFIG_HZ_100 is not set
191CONFIG_HZ_250=y
192# CONFIG_HZ_300 is not set
193# CONFIG_HZ_1000 is not set
194CONFIG_HZ=250
195# CONFIG_SCHED_HRTICK is not set
196CONFIG_PREEMPT_NONE=y
197# CONFIG_PREEMPT_VOLUNTARY is not set
198# CONFIG_PREEMPT is not set
199CONFIG_BINFMT_ELF=y
200# CONFIG_BINFMT_MISC is not set
201# CONFIG_IOMMU_HELPER is not set
202CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
203CONFIG_ARCH_HAS_WALK_MEMORY=y
204CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
205CONFIG_ARCH_FLATMEM_ENABLE=y
206CONFIG_ARCH_POPULATES_NODE_MAP=y
207CONFIG_SELECT_MEMORY_MODEL=y
208CONFIG_FLATMEM_MANUAL=y
209# CONFIG_DISCONTIGMEM_MANUAL is not set
210# CONFIG_SPARSEMEM_MANUAL is not set
211CONFIG_FLATMEM=y
212CONFIG_FLAT_NODE_MEM_MAP=y
213# CONFIG_SPARSEMEM_STATIC is not set
214# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
215CONFIG_SPLIT_PTLOCK_CPUS=4
216# CONFIG_RESOURCES_64BIT is not set
217CONFIG_ZONE_DMA_FLAG=1
218CONFIG_BOUNCE=y
219CONFIG_VIRT_TO_BUS=y
220CONFIG_PROC_DEVICETREE=y
221# CONFIG_CMDLINE_BOOL is not set
222# CONFIG_PM is not set
223CONFIG_SECCOMP=y
224CONFIG_ISA_DMA_API=y
225
226#
227# Bus options
228#
229CONFIG_ZONE_DMA=y
230CONFIG_GENERIC_ISA_DMA=y
231CONFIG_PPC_INDIRECT_PCI=y
232CONFIG_FSL_SOC=y
233CONFIG_PCI=y
234CONFIG_PCI_DOMAINS=y
235CONFIG_PCI_SYSCALL=y
236# CONFIG_PCIEPORTBUS is not set
237CONFIG_ARCH_SUPPORTS_MSI=y
238# CONFIG_PCI_MSI is not set
239CONFIG_PCI_LEGACY=y
240# CONFIG_PCCARD is not set
241# CONFIG_HOTPLUG_PCI is not set
242
243#
244# Advanced setup
245#
246# CONFIG_ADVANCED_OPTIONS is not set
247
248#
249# Default settings for advanced configuration options are used
250#
251CONFIG_HIGHMEM_START=0xfe000000
252CONFIG_LOWMEM_SIZE=0x30000000
253CONFIG_KERNEL_START=0xc0000000
254CONFIG_TASK_SIZE=0xc0000000
255CONFIG_BOOT_LOAD=0x00800000
256
257#
258# Networking
259#
260CONFIG_NET=y
261
262#
263# Networking options
264#
265CONFIG_PACKET=y
266# CONFIG_PACKET_MMAP is not set
267CONFIG_UNIX=y
268CONFIG_XFRM=y
269CONFIG_XFRM_USER=m
270# CONFIG_XFRM_SUB_POLICY is not set
271# CONFIG_XFRM_MIGRATE is not set
272# CONFIG_XFRM_STATISTICS is not set
273# CONFIG_NET_KEY is not set
274CONFIG_INET=y
275CONFIG_IP_MULTICAST=y
276# CONFIG_IP_ADVANCED_ROUTER is not set
277CONFIG_IP_FIB_HASH=y
278CONFIG_IP_PNP=y
279CONFIG_IP_PNP_DHCP=y
280CONFIG_IP_PNP_BOOTP=y
281# CONFIG_IP_PNP_RARP is not set
282# CONFIG_NET_IPIP is not set
283# CONFIG_NET_IPGRE is not set
284# CONFIG_IP_MROUTE is not set
285# CONFIG_ARPD is not set
286CONFIG_SYN_COOKIES=y
287# CONFIG_INET_AH is not set
288# CONFIG_INET_ESP is not set
289# CONFIG_INET_IPCOMP is not set
290# CONFIG_INET_XFRM_TUNNEL is not set
291# CONFIG_INET_TUNNEL is not set
292CONFIG_INET_XFRM_MODE_TRANSPORT=y
293CONFIG_INET_XFRM_MODE_TUNNEL=y
294CONFIG_INET_XFRM_MODE_BEET=y
295# CONFIG_INET_LRO is not set
296CONFIG_INET_DIAG=y
297CONFIG_INET_TCP_DIAG=y
298# CONFIG_TCP_CONG_ADVANCED is not set
299CONFIG_TCP_CONG_CUBIC=y
300CONFIG_DEFAULT_TCP_CONG="cubic"
301# CONFIG_TCP_MD5SIG is not set
302# CONFIG_IPV6 is not set
303# CONFIG_INET6_XFRM_TUNNEL is not set
304# CONFIG_INET6_TUNNEL is not set
305# CONFIG_NETWORK_SECMARK is not set
306# CONFIG_NETFILTER is not set
307# CONFIG_IP_DCCP is not set
308# CONFIG_IP_SCTP is not set
309# CONFIG_TIPC is not set
310# CONFIG_ATM is not set
311# CONFIG_BRIDGE is not set
312# CONFIG_VLAN_8021Q is not set
313# CONFIG_DECNET is not set
314# CONFIG_LLC2 is not set
315# CONFIG_IPX is not set
316# CONFIG_ATALK is not set
317# CONFIG_X25 is not set
318# CONFIG_LAPB is not set
319# CONFIG_ECONET is not set
320# CONFIG_WAN_ROUTER is not set
321# CONFIG_NET_SCHED is not set
322
323#
324# Network testing
325#
326# CONFIG_NET_PKTGEN is not set
327# CONFIG_HAMRADIO is not set
328# CONFIG_CAN is not set
329# CONFIG_IRDA is not set
330# CONFIG_BT is not set
331# CONFIG_AF_RXRPC is not set
332
333#
334# Wireless
335#
336# CONFIG_CFG80211 is not set
337# CONFIG_WIRELESS_EXT is not set
338# CONFIG_MAC80211 is not set
339# CONFIG_IEEE80211 is not set
340# CONFIG_RFKILL is not set
341# CONFIG_NET_9P is not set
342
343#
344# Device Drivers
345#
346
347#
348# Generic Driver Options
349#
350CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
351CONFIG_STANDALONE=y
352CONFIG_PREVENT_FIRMWARE_BUILD=y
353# CONFIG_FW_LOADER is not set
354# CONFIG_SYS_HYPERVISOR is not set
355# CONFIG_CONNECTOR is not set
356CONFIG_MTD=y
357# CONFIG_MTD_DEBUG is not set
358# CONFIG_MTD_CONCAT is not set
359CONFIG_MTD_PARTITIONS=y
360CONFIG_MTD_REDBOOT_PARTS=y
361CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
362CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y
363# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
364# CONFIG_MTD_CMDLINE_PARTS is not set
365CONFIG_MTD_OF_PARTS=y
366
367#
368# User Modules And Translation Layers
369#
370CONFIG_MTD_CHAR=y
371CONFIG_MTD_BLKDEVS=y
372CONFIG_MTD_BLOCK=y
373# CONFIG_FTL is not set
374# CONFIG_NFTL is not set
375# CONFIG_INFTL is not set
376# CONFIG_RFD_FTL is not set
377# CONFIG_SSFDC is not set
378# CONFIG_MTD_OOPS is not set
379
380#
381# RAM/ROM/Flash chip drivers
382#
383CONFIG_MTD_CFI=y
384# CONFIG_MTD_JEDECPROBE is not set
385CONFIG_MTD_GEN_PROBE=y
386# CONFIG_MTD_CFI_ADV_OPTIONS is not set
387CONFIG_MTD_MAP_BANK_WIDTH_1=y
388CONFIG_MTD_MAP_BANK_WIDTH_2=y
389CONFIG_MTD_MAP_BANK_WIDTH_4=y
390# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
391# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
392# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
393CONFIG_MTD_CFI_I1=y
394CONFIG_MTD_CFI_I2=y
395# CONFIG_MTD_CFI_I4 is not set
396# CONFIG_MTD_CFI_I8 is not set
397CONFIG_MTD_CFI_INTELEXT=y
398CONFIG_MTD_CFI_AMDSTD=y
399# CONFIG_MTD_CFI_STAA is not set
400CONFIG_MTD_CFI_UTIL=y
401# CONFIG_MTD_RAM is not set
402# CONFIG_MTD_ROM is not set
403# CONFIG_MTD_ABSENT is not set
404
405#
406# Mapping drivers for chip access
407#
408# CONFIG_MTD_COMPLEX_MAPPINGS is not set
409# CONFIG_MTD_PHYSMAP is not set
410CONFIG_MTD_PHYSMAP_OF=y
411# CONFIG_MTD_INTEL_VR_NOR is not set
412# CONFIG_MTD_PLATRAM is not set
413
414#
415# Self-contained MTD device drivers
416#
417# CONFIG_MTD_PMC551 is not set
418# CONFIG_MTD_SLRAM is not set
419# CONFIG_MTD_PHRAM is not set
420# CONFIG_MTD_MTDRAM is not set
421# CONFIG_MTD_BLOCK2MTD is not set
422
423#
424# Disk-On-Chip Device Drivers
425#
426# CONFIG_MTD_DOC2000 is not set
427# CONFIG_MTD_DOC2001 is not set
428# CONFIG_MTD_DOC2001PLUS is not set
429# CONFIG_MTD_NAND is not set
430# CONFIG_MTD_ONENAND is not set
431
432#
433# UBI - Unsorted block images
434#
435# CONFIG_MTD_UBI is not set
436CONFIG_OF_DEVICE=y
437# CONFIG_PARPORT is not set
438CONFIG_BLK_DEV=y
439# CONFIG_BLK_DEV_FD is not set
440# CONFIG_BLK_CPQ_DA is not set
441# CONFIG_BLK_CPQ_CISS_DA is not set
442# CONFIG_BLK_DEV_DAC960 is not set
443# CONFIG_BLK_DEV_UMEM is not set
444# CONFIG_BLK_DEV_COW_COMMON is not set
445CONFIG_BLK_DEV_LOOP=y
446# CONFIG_BLK_DEV_CRYPTOLOOP is not set
447# CONFIG_BLK_DEV_NBD is not set
448# CONFIG_BLK_DEV_SX8 is not set
449# CONFIG_BLK_DEV_UB is not set
450CONFIG_BLK_DEV_RAM=y
451CONFIG_BLK_DEV_RAM_COUNT=16
452CONFIG_BLK_DEV_RAM_SIZE=32768
453# CONFIG_BLK_DEV_XIP is not set
454# CONFIG_CDROM_PKTCDVD is not set
455# CONFIG_ATA_OVER_ETH is not set
456CONFIG_MISC_DEVICES=y
457# CONFIG_PHANTOM is not set
458# CONFIG_EEPROM_93CX6 is not set
459# CONFIG_SGI_IOC4 is not set
460# CONFIG_TIFM_CORE is not set
461# CONFIG_ENCLOSURE_SERVICES is not set
462CONFIG_HAVE_IDE=y
463# CONFIG_IDE is not set
464
465#
466# SCSI device support
467#
468# CONFIG_RAID_ATTRS is not set
469# CONFIG_SCSI is not set
470# CONFIG_SCSI_DMA is not set
471# CONFIG_SCSI_NETLINK is not set
472# CONFIG_ATA is not set
473# CONFIG_MD is not set
474# CONFIG_FUSION is not set
475
476#
477# IEEE 1394 (FireWire) support
478#
479# CONFIG_FIREWIRE is not set
480# CONFIG_IEEE1394 is not set
481# CONFIG_I2O is not set
482# CONFIG_MACINTOSH_DRIVERS is not set
483CONFIG_NETDEVICES=y
484# CONFIG_NETDEVICES_MULTIQUEUE is not set
485# CONFIG_DUMMY is not set
486# CONFIG_BONDING is not set
487# CONFIG_MACVLAN is not set
488# CONFIG_EQUALIZER is not set
489# CONFIG_TUN is not set
490# CONFIG_VETH is not set
491# CONFIG_ARCNET is not set
492CONFIG_PHYLIB=y
493
494#
495# MII PHY device drivers
496#
497# CONFIG_MARVELL_PHY is not set
498# CONFIG_DAVICOM_PHY is not set
499# CONFIG_QSEMI_PHY is not set
500# CONFIG_LXT_PHY is not set
501# CONFIG_CICADA_PHY is not set
502# CONFIG_VITESSE_PHY is not set
503# CONFIG_SMSC_PHY is not set
504# CONFIG_BROADCOM_PHY is not set
505# CONFIG_ICPLUS_PHY is not set
506# CONFIG_REALTEK_PHY is not set
507# CONFIG_FIXED_PHY is not set
508# CONFIG_MDIO_BITBANG is not set
509CONFIG_NET_ETHERNET=y
510CONFIG_MII=y
511# CONFIG_HAPPYMEAL is not set
512# CONFIG_SUNGEM is not set
513# CONFIG_CASSINI is not set
514# CONFIG_NET_VENDOR_3COM is not set
515# CONFIG_NET_TULIP is not set
516# CONFIG_HP100 is not set
517# CONFIG_IBM_NEW_EMAC_ZMII is not set
518# CONFIG_IBM_NEW_EMAC_RGMII is not set
519# CONFIG_IBM_NEW_EMAC_TAH is not set
520# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
521# CONFIG_NET_PCI is not set
522# CONFIG_B44 is not set
523CONFIG_NETDEV_1000=y
524# CONFIG_ACENIC is not set
525# CONFIG_DL2K is not set
526# CONFIG_E1000 is not set
527# CONFIG_E1000E is not set
528# CONFIG_E1000E_ENABLED is not set
529# CONFIG_IP1000 is not set
530# CONFIG_IGB is not set
531# CONFIG_NS83820 is not set
532# CONFIG_HAMACHI is not set
533# CONFIG_YELLOWFIN is not set
534# CONFIG_R8169 is not set
535# CONFIG_SIS190 is not set
536# CONFIG_SKGE is not set
537# CONFIG_SKY2 is not set
538# CONFIG_SK98LIN is not set
539# CONFIG_VIA_VELOCITY is not set
540# CONFIG_TIGON3 is not set
541# CONFIG_BNX2 is not set
542CONFIG_GIANFAR=y
543# CONFIG_GFAR_NAPI is not set
544# CONFIG_QLA3XXX is not set
545# CONFIG_ATL1 is not set
546# CONFIG_NETDEV_10000 is not set
547# CONFIG_TR is not set
548
549#
550# Wireless LAN
551#
552# CONFIG_WLAN_PRE80211 is not set
553# CONFIG_WLAN_80211 is not set
554
555#
556# USB Network Adapters
557#
558# CONFIG_USB_CATC is not set
559# CONFIG_USB_KAWETH is not set
560# CONFIG_USB_PEGASUS is not set
561# CONFIG_USB_RTL8150 is not set
562# CONFIG_USB_USBNET is not set
563# CONFIG_WAN is not set
564# CONFIG_FDDI is not set
565# CONFIG_HIPPI is not set
566# CONFIG_PPP is not set
567# CONFIG_SLIP is not set
568# CONFIG_NETCONSOLE is not set
569# CONFIG_NETPOLL is not set
570# CONFIG_NET_POLL_CONTROLLER is not set
571# CONFIG_ISDN is not set
572# CONFIG_PHONE is not set
573
574#
575# Input device support
576#
577CONFIG_INPUT=y
578# CONFIG_INPUT_FF_MEMLESS is not set
579# CONFIG_INPUT_POLLDEV is not set
580
581#
582# Userland interfaces
583#
584# CONFIG_INPUT_MOUSEDEV is not set
585# CONFIG_INPUT_JOYDEV is not set
586# CONFIG_INPUT_EVDEV is not set
587# CONFIG_INPUT_EVBUG is not set
588
589#
590# Input Device Drivers
591#
592# CONFIG_INPUT_KEYBOARD is not set
593# CONFIG_INPUT_MOUSE is not set
594# CONFIG_INPUT_JOYSTICK is not set
595# CONFIG_INPUT_TABLET is not set
596# CONFIG_INPUT_TOUCHSCREEN is not set
597# CONFIG_INPUT_MISC is not set
598
599#
600# Hardware I/O ports
601#
602# CONFIG_SERIO is not set
603# CONFIG_GAMEPORT is not set
604
605#
606# Character devices
607#
608# CONFIG_VT is not set
609# CONFIG_SERIAL_NONSTANDARD is not set
610# CONFIG_NOZOMI is not set
611
612#
613# Serial drivers
614#
615CONFIG_SERIAL_8250=y
616CONFIG_SERIAL_8250_CONSOLE=y
617CONFIG_SERIAL_8250_PCI=y
618CONFIG_SERIAL_8250_NR_UARTS=4
619CONFIG_SERIAL_8250_RUNTIME_UARTS=4
620# CONFIG_SERIAL_8250_EXTENDED is not set
621
622#
623# Non-8250 serial port support
624#
625# CONFIG_SERIAL_UARTLITE is not set
626CONFIG_SERIAL_CORE=y
627CONFIG_SERIAL_CORE_CONSOLE=y
628# CONFIG_SERIAL_JSM is not set
629# CONFIG_SERIAL_OF_PLATFORM is not set
630CONFIG_UNIX98_PTYS=y
631CONFIG_LEGACY_PTYS=y
632CONFIG_LEGACY_PTY_COUNT=256
633# CONFIG_IPMI_HANDLER is not set
634# CONFIG_HW_RANDOM is not set
635# CONFIG_NVRAM is not set
636CONFIG_GEN_RTC=y
637# CONFIG_GEN_RTC_X is not set
638# CONFIG_R3964 is not set
639# CONFIG_APPLICOM is not set
640# CONFIG_RAW_DRIVER is not set
641# CONFIG_TCG_TPM is not set
642CONFIG_DEVPORT=y
643CONFIG_I2C=y
644CONFIG_I2C_BOARDINFO=y
645CONFIG_I2C_CHARDEV=y
646
647#
648# I2C Algorithms
649#
650# CONFIG_I2C_ALGOBIT is not set
651# CONFIG_I2C_ALGOPCF is not set
652# CONFIG_I2C_ALGOPCA is not set
653
654#
655# I2C Hardware Bus support
656#
657# CONFIG_I2C_ALI1535 is not set
658# CONFIG_I2C_ALI1563 is not set
659# CONFIG_I2C_ALI15X3 is not set
660# CONFIG_I2C_AMD756 is not set
661# CONFIG_I2C_AMD8111 is not set
662# CONFIG_I2C_I801 is not set
663# CONFIG_I2C_I810 is not set
664# CONFIG_I2C_PIIX4 is not set
665CONFIG_I2C_MPC=y
666# CONFIG_I2C_NFORCE2 is not set
667# CONFIG_I2C_OCORES is not set
668# CONFIG_I2C_PARPORT_LIGHT is not set
669# CONFIG_I2C_PROSAVAGE is not set
670# CONFIG_I2C_SAVAGE4 is not set
671# CONFIG_I2C_SIMTEC is not set
672# CONFIG_I2C_SIS5595 is not set
673# CONFIG_I2C_SIS630 is not set
674# CONFIG_I2C_SIS96X is not set
675# CONFIG_I2C_TAOS_EVM is not set
676# CONFIG_I2C_STUB is not set
677# CONFIG_I2C_TINY_USB is not set
678# CONFIG_I2C_VIA is not set
679# CONFIG_I2C_VIAPRO is not set
680# CONFIG_I2C_VOODOO3 is not set
681
682#
683# Miscellaneous I2C Chip support
684#
685# CONFIG_DS1682 is not set
686# CONFIG_SENSORS_EEPROM is not set
687# CONFIG_SENSORS_PCF8574 is not set
688# CONFIG_PCF8575 is not set
689# CONFIG_SENSORS_PCF8591 is not set
690# CONFIG_TPS65010 is not set
691# CONFIG_SENSORS_MAX6875 is not set
692# CONFIG_SENSORS_TSL2550 is not set
693# CONFIG_I2C_DEBUG_CORE is not set
694# CONFIG_I2C_DEBUG_ALGO is not set
695# CONFIG_I2C_DEBUG_BUS is not set
696# CONFIG_I2C_DEBUG_CHIP is not set
697
698#
699# SPI support
700#
701# CONFIG_SPI is not set
702# CONFIG_SPI_MASTER is not set
703# CONFIG_W1 is not set
704# CONFIG_POWER_SUPPLY is not set
705CONFIG_HWMON=y
706# CONFIG_HWMON_VID is not set
707# CONFIG_SENSORS_AD7418 is not set
708# CONFIG_SENSORS_ADM1021 is not set
709# CONFIG_SENSORS_ADM1025 is not set
710# CONFIG_SENSORS_ADM1026 is not set
711# CONFIG_SENSORS_ADM1029 is not set
712# CONFIG_SENSORS_ADM1031 is not set
713# CONFIG_SENSORS_ADM9240 is not set
714# CONFIG_SENSORS_ADT7470 is not set
715# CONFIG_SENSORS_ADT7473 is not set
716# CONFIG_SENSORS_ATXP1 is not set
717# CONFIG_SENSORS_DS1621 is not set
718# CONFIG_SENSORS_I5K_AMB is not set
719# CONFIG_SENSORS_F71805F is not set
720# CONFIG_SENSORS_F71882FG is not set
721# CONFIG_SENSORS_F75375S is not set
722# CONFIG_SENSORS_GL518SM is not set
723# CONFIG_SENSORS_GL520SM is not set
724# CONFIG_SENSORS_IT87 is not set
725# CONFIG_SENSORS_LM63 is not set
726# CONFIG_SENSORS_LM75 is not set
727# CONFIG_SENSORS_LM77 is not set
728# CONFIG_SENSORS_LM78 is not set
729# CONFIG_SENSORS_LM80 is not set
730# CONFIG_SENSORS_LM83 is not set
731# CONFIG_SENSORS_LM85 is not set
732# CONFIG_SENSORS_LM87 is not set
733# CONFIG_SENSORS_LM90 is not set
734# CONFIG_SENSORS_LM92 is not set
735# CONFIG_SENSORS_LM93 is not set
736# CONFIG_SENSORS_MAX1619 is not set
737# CONFIG_SENSORS_MAX6650 is not set
738# CONFIG_SENSORS_PC87360 is not set
739# CONFIG_SENSORS_PC87427 is not set
740# CONFIG_SENSORS_SIS5595 is not set
741# CONFIG_SENSORS_DME1737 is not set
742# CONFIG_SENSORS_SMSC47M1 is not set
743# CONFIG_SENSORS_SMSC47M192 is not set
744# CONFIG_SENSORS_SMSC47B397 is not set
745# CONFIG_SENSORS_ADS7828 is not set
746# CONFIG_SENSORS_THMC50 is not set
747# CONFIG_SENSORS_VIA686A is not set
748# CONFIG_SENSORS_VT1211 is not set
749# CONFIG_SENSORS_VT8231 is not set
750# CONFIG_SENSORS_W83781D is not set
751# CONFIG_SENSORS_W83791D is not set
752# CONFIG_SENSORS_W83792D is not set
753# CONFIG_SENSORS_W83793 is not set
754# CONFIG_SENSORS_W83L785TS is not set
755# CONFIG_SENSORS_W83L786NG is not set
756# CONFIG_SENSORS_W83627HF is not set
757# CONFIG_SENSORS_W83627EHF is not set
758# CONFIG_HWMON_DEBUG_CHIP is not set
759CONFIG_THERMAL=y
760CONFIG_WATCHDOG=y
761# CONFIG_WATCHDOG_NOWAYOUT is not set
762
763#
764# Watchdog Device Drivers
765#
766# CONFIG_SOFT_WATCHDOG is not set
767CONFIG_83xx_WDT=y
768
769#
770# PCI-based Watchdog Cards
771#
772# CONFIG_PCIPCWATCHDOG is not set
773# CONFIG_WDTPCI is not set
774
775#
776# USB-based Watchdog Cards
777#
778# CONFIG_USBPCWATCHDOG is not set
779
780#
781# Sonics Silicon Backplane
782#
783CONFIG_SSB_POSSIBLE=y
784# CONFIG_SSB is not set
785
786#
787# Multifunction device drivers
788#
789# CONFIG_MFD_SM501 is not set
790
791#
792# Multimedia devices
793#
794# CONFIG_VIDEO_DEV is not set
795# CONFIG_DVB_CORE is not set
796CONFIG_DAB=y
797# CONFIG_USB_DABUSB is not set
798
799#
800# Graphics support
801#
802# CONFIG_AGP is not set
803# CONFIG_DRM is not set
804# CONFIG_VGASTATE is not set
805CONFIG_VIDEO_OUTPUT_CONTROL=m
806# CONFIG_FB is not set
807# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
808
809#
810# Display device support
811#
812# CONFIG_DISPLAY_SUPPORT is not set
813
814#
815# Sound
816#
817# CONFIG_SOUND is not set
818# CONFIG_HID_SUPPORT is not set
819CONFIG_USB_SUPPORT=y
820CONFIG_USB_ARCH_HAS_HCD=y
821CONFIG_USB_ARCH_HAS_OHCI=y
822CONFIG_USB_ARCH_HAS_EHCI=y
823CONFIG_USB=y
824# CONFIG_USB_DEBUG is not set
825# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
826
827#
828# Miscellaneous USB options
829#
830# CONFIG_USB_DEVICEFS is not set
831CONFIG_USB_DEVICE_CLASS=y
832# CONFIG_USB_DYNAMIC_MINORS is not set
833# CONFIG_USB_OTG is not set
834
835#
836# USB Host Controller Drivers
837#
838CONFIG_USB_EHCI_HCD=y
839CONFIG_USB_EHCI_ROOT_HUB_TT=y
840# CONFIG_USB_EHCI_TT_NEWSCHED is not set
841CONFIG_USB_EHCI_FSL=y
842CONFIG_USB_EHCI_HCD_PPC_OF=y
843# CONFIG_USB_ISP116X_HCD is not set
844# CONFIG_USB_OHCI_HCD is not set
845# CONFIG_USB_UHCI_HCD is not set
846# CONFIG_USB_SL811_HCD is not set
847# CONFIG_USB_R8A66597_HCD is not set
848
849#
850# USB Device Class drivers
851#
852# CONFIG_USB_ACM is not set
853# CONFIG_USB_PRINTER is not set
854
855#
856# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
857#
858
859#
860# may also be needed; see USB_STORAGE Help for more information
861#
862# CONFIG_USB_LIBUSUAL is not set
863
864#
865# USB Imaging devices
866#
867# CONFIG_USB_MDC800 is not set
868CONFIG_USB_MON=y
869
870#
871# USB port drivers
872#
873# CONFIG_USB_SERIAL is not set
874
875#
876# USB Miscellaneous drivers
877#
878# CONFIG_USB_EMI62 is not set
879# CONFIG_USB_EMI26 is not set
880# CONFIG_USB_ADUTUX is not set
881# CONFIG_USB_AUERSWALD is not set
882# CONFIG_USB_RIO500 is not set
883# CONFIG_USB_LEGOTOWER is not set
884# CONFIG_USB_LCD is not set
885# CONFIG_USB_BERRY_CHARGE is not set
886# CONFIG_USB_LED is not set
887# CONFIG_USB_CYPRESS_CY7C63 is not set
888# CONFIG_USB_CYTHERM is not set
889# CONFIG_USB_PHIDGET is not set
890# CONFIG_USB_IDMOUSE is not set
891# CONFIG_USB_FTDI_ELAN is not set
892# CONFIG_USB_APPLEDISPLAY is not set
893# CONFIG_USB_SISUSBVGA is not set
894# CONFIG_USB_LD is not set
895# CONFIG_USB_TRANCEVIBRATOR is not set
896# CONFIG_USB_IOWARRIOR is not set
897# CONFIG_USB_GADGET is not set
898# CONFIG_MMC is not set
899# CONFIG_MEMSTICK is not set
900# CONFIG_NEW_LEDS is not set
901# CONFIG_INFINIBAND is not set
902# CONFIG_EDAC is not set
903CONFIG_RTC_LIB=y
904CONFIG_RTC_CLASS=y
905
906#
907# Conflicting RTC option has been selected, check GEN_RTC and RTC
908#
909CONFIG_RTC_HCTOSYS=y
910CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
911# CONFIG_RTC_DEBUG is not set
912
913#
914# RTC interfaces
915#
916CONFIG_RTC_INTF_SYSFS=y
917CONFIG_RTC_INTF_PROC=y
918CONFIG_RTC_INTF_DEV=y
919# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
920# CONFIG_RTC_DRV_TEST is not set
921
922#
923# I2C RTC drivers
924#
925# CONFIG_RTC_DRV_DS1307 is not set
926CONFIG_RTC_DRV_DS1374=y
927# CONFIG_RTC_DRV_DS1672 is not set
928# CONFIG_RTC_DRV_MAX6900 is not set
929# CONFIG_RTC_DRV_RS5C372 is not set
930# CONFIG_RTC_DRV_ISL1208 is not set
931# CONFIG_RTC_DRV_X1205 is not set
932# CONFIG_RTC_DRV_PCF8563 is not set
933# CONFIG_RTC_DRV_PCF8583 is not set
934# CONFIG_RTC_DRV_M41T80 is not set
935# CONFIG_RTC_DRV_S35390A is not set
936
937#
938# SPI RTC drivers
939#
940
941#
942# Platform RTC drivers
943#
944# CONFIG_RTC_DRV_CMOS is not set
945# CONFIG_RTC_DRV_DS1511 is not set
946# CONFIG_RTC_DRV_DS1553 is not set
947# CONFIG_RTC_DRV_DS1742 is not set
948# CONFIG_RTC_DRV_STK17TA8 is not set
949# CONFIG_RTC_DRV_M48T86 is not set
950# CONFIG_RTC_DRV_M48T59 is not set
951# CONFIG_RTC_DRV_V3020 is not set
952
953#
954# on-CPU RTC drivers
955#
956# CONFIG_DMADEVICES is not set
957
958#
959# Userspace I/O
960#
961# CONFIG_UIO is not set
962
963#
964# File systems
965#
966CONFIG_EXT2_FS=y
967# CONFIG_EXT2_FS_XATTR is not set
968# CONFIG_EXT2_FS_XIP is not set
969CONFIG_EXT3_FS=y
970CONFIG_EXT3_FS_XATTR=y
971# CONFIG_EXT3_FS_POSIX_ACL is not set
972# CONFIG_EXT3_FS_SECURITY is not set
973# CONFIG_EXT4DEV_FS is not set
974CONFIG_JBD=y
975CONFIG_FS_MBCACHE=y
976# CONFIG_REISERFS_FS is not set
977# CONFIG_JFS_FS is not set
978# CONFIG_FS_POSIX_ACL is not set
979# CONFIG_XFS_FS is not set
980# CONFIG_GFS2_FS is not set
981# CONFIG_OCFS2_FS is not set
982CONFIG_DNOTIFY=y
983CONFIG_INOTIFY=y
984CONFIG_INOTIFY_USER=y
985# CONFIG_QUOTA is not set
986# CONFIG_AUTOFS_FS is not set
987# CONFIG_AUTOFS4_FS is not set
988# CONFIG_FUSE_FS is not set
989
990#
991# CD-ROM/DVD Filesystems
992#
993# CONFIG_ISO9660_FS is not set
994# CONFIG_UDF_FS is not set
995
996#
997# DOS/FAT/NT Filesystems
998#
999# CONFIG_MSDOS_FS is not set
1000# CONFIG_VFAT_FS is not set
1001# CONFIG_NTFS_FS is not set
1002
1003#
1004# Pseudo filesystems
1005#
1006CONFIG_PROC_FS=y
1007CONFIG_PROC_KCORE=y
1008CONFIG_PROC_SYSCTL=y
1009CONFIG_SYSFS=y
1010CONFIG_TMPFS=y
1011# CONFIG_TMPFS_POSIX_ACL is not set
1012# CONFIG_HUGETLB_PAGE is not set
1013# CONFIG_CONFIGFS_FS is not set
1014
1015#
1016# Miscellaneous filesystems
1017#
1018# CONFIG_ADFS_FS is not set
1019# CONFIG_AFFS_FS is not set
1020# CONFIG_HFS_FS is not set
1021# CONFIG_HFSPLUS_FS is not set
1022# CONFIG_BEFS_FS is not set
1023# CONFIG_BFS_FS is not set
1024# CONFIG_EFS_FS is not set
1025CONFIG_JFFS2_FS=y
1026CONFIG_JFFS2_FS_DEBUG=0
1027CONFIG_JFFS2_FS_WRITEBUFFER=y
1028# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
1029# CONFIG_JFFS2_SUMMARY is not set
1030# CONFIG_JFFS2_FS_XATTR is not set
1031# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
1032CONFIG_JFFS2_ZLIB=y
1033# CONFIG_JFFS2_LZO is not set
1034CONFIG_JFFS2_RTIME=y
1035# CONFIG_JFFS2_RUBIN is not set
1036# CONFIG_CRAMFS is not set
1037# CONFIG_VXFS_FS is not set
1038# CONFIG_MINIX_FS is not set
1039# CONFIG_HPFS_FS is not set
1040# CONFIG_QNX4FS_FS is not set
1041# CONFIG_ROMFS_FS is not set
1042# CONFIG_SYSV_FS is not set
1043# CONFIG_UFS_FS is not set
1044CONFIG_NETWORK_FILESYSTEMS=y
1045CONFIG_NFS_FS=y
1046CONFIG_NFS_V3=y
1047# CONFIG_NFS_V3_ACL is not set
1048CONFIG_NFS_V4=y
1049# CONFIG_NFS_DIRECTIO is not set
1050# CONFIG_NFSD is not set
1051CONFIG_ROOT_NFS=y
1052CONFIG_LOCKD=y
1053CONFIG_LOCKD_V4=y
1054CONFIG_NFS_COMMON=y
1055CONFIG_SUNRPC=y
1056CONFIG_SUNRPC_GSS=y
1057# CONFIG_SUNRPC_BIND34 is not set
1058CONFIG_RPCSEC_GSS_KRB5=y
1059# CONFIG_RPCSEC_GSS_SPKM3 is not set
1060# CONFIG_SMB_FS is not set
1061# CONFIG_CIFS is not set
1062# CONFIG_NCP_FS is not set
1063# CONFIG_CODA_FS is not set
1064# CONFIG_AFS_FS is not set
1065
1066#
1067# Partition Types
1068#
1069CONFIG_PARTITION_ADVANCED=y
1070# CONFIG_ACORN_PARTITION is not set
1071# CONFIG_OSF_PARTITION is not set
1072# CONFIG_AMIGA_PARTITION is not set
1073# CONFIG_ATARI_PARTITION is not set
1074# CONFIG_MAC_PARTITION is not set
1075# CONFIG_MSDOS_PARTITION is not set
1076# CONFIG_LDM_PARTITION is not set
1077# CONFIG_SGI_PARTITION is not set
1078# CONFIG_ULTRIX_PARTITION is not set
1079# CONFIG_SUN_PARTITION is not set
1080# CONFIG_KARMA_PARTITION is not set
1081# CONFIG_EFI_PARTITION is not set
1082# CONFIG_SYSV68_PARTITION is not set
1083CONFIG_NLS=y
1084CONFIG_NLS_DEFAULT="iso8859-1"
1085# CONFIG_NLS_CODEPAGE_437 is not set
1086# CONFIG_NLS_CODEPAGE_737 is not set
1087# CONFIG_NLS_CODEPAGE_775 is not set
1088# CONFIG_NLS_CODEPAGE_850 is not set
1089# CONFIG_NLS_CODEPAGE_852 is not set
1090# CONFIG_NLS_CODEPAGE_855 is not set
1091# CONFIG_NLS_CODEPAGE_857 is not set
1092# CONFIG_NLS_CODEPAGE_860 is not set
1093# CONFIG_NLS_CODEPAGE_861 is not set
1094# CONFIG_NLS_CODEPAGE_862 is not set
1095# CONFIG_NLS_CODEPAGE_863 is not set
1096# CONFIG_NLS_CODEPAGE_864 is not set
1097# CONFIG_NLS_CODEPAGE_865 is not set
1098# CONFIG_NLS_CODEPAGE_866 is not set
1099# CONFIG_NLS_CODEPAGE_869 is not set
1100# CONFIG_NLS_CODEPAGE_936 is not set
1101# CONFIG_NLS_CODEPAGE_950 is not set
1102# CONFIG_NLS_CODEPAGE_932 is not set
1103# CONFIG_NLS_CODEPAGE_949 is not set
1104# CONFIG_NLS_CODEPAGE_874 is not set
1105# CONFIG_NLS_ISO8859_8 is not set
1106# CONFIG_NLS_CODEPAGE_1250 is not set
1107# CONFIG_NLS_CODEPAGE_1251 is not set
1108# CONFIG_NLS_ASCII is not set
1109# CONFIG_NLS_ISO8859_1 is not set
1110# CONFIG_NLS_ISO8859_2 is not set
1111# CONFIG_NLS_ISO8859_3 is not set
1112# CONFIG_NLS_ISO8859_4 is not set
1113# CONFIG_NLS_ISO8859_5 is not set
1114# CONFIG_NLS_ISO8859_6 is not set
1115# CONFIG_NLS_ISO8859_7 is not set
1116# CONFIG_NLS_ISO8859_9 is not set
1117# CONFIG_NLS_ISO8859_13 is not set
1118# CONFIG_NLS_ISO8859_14 is not set
1119# CONFIG_NLS_ISO8859_15 is not set
1120# CONFIG_NLS_KOI8_R is not set
1121# CONFIG_NLS_KOI8_U is not set
1122# CONFIG_NLS_UTF8 is not set
1123# CONFIG_DLM is not set
1124
1125#
1126# Library routines
1127#
1128CONFIG_BITREVERSE=y
1129# CONFIG_CRC_CCITT is not set
1130# CONFIG_CRC16 is not set
1131# CONFIG_CRC_ITU_T is not set
1132CONFIG_CRC32=y
1133# CONFIG_CRC7 is not set
1134# CONFIG_LIBCRC32C is not set
1135CONFIG_ZLIB_INFLATE=y
1136CONFIG_ZLIB_DEFLATE=y
1137CONFIG_PLIST=y
1138CONFIG_HAS_IOMEM=y
1139CONFIG_HAS_IOPORT=y
1140CONFIG_HAS_DMA=y
1141CONFIG_HAVE_LMB=y
1142
1143#
1144# Kernel hacking
1145#
1146# CONFIG_PRINTK_TIME is not set
1147CONFIG_ENABLE_WARN_DEPRECATED=y
1148CONFIG_ENABLE_MUST_CHECK=y
1149# CONFIG_MAGIC_SYSRQ is not set
1150# CONFIG_UNUSED_SYMBOLS is not set
1151# CONFIG_DEBUG_FS is not set
1152# CONFIG_HEADERS_CHECK is not set
1153# CONFIG_DEBUG_KERNEL is not set
1154# CONFIG_SLUB_DEBUG_ON is not set
1155# CONFIG_SLUB_STATS is not set
1156# CONFIG_DEBUG_BUGVERBOSE is not set
1157# CONFIG_SAMPLES is not set
1158# CONFIG_PPC_EARLY_DEBUG is not set
1159
1160#
1161# Security options
1162#
1163# CONFIG_KEYS is not set
1164# CONFIG_SECURITY is not set
1165# CONFIG_SECURITY_FILE_CAPABILITIES is not set
1166CONFIG_CRYPTO=y
1167CONFIG_CRYPTO_ALGAPI=y
1168CONFIG_CRYPTO_BLKCIPHER=y
1169# CONFIG_CRYPTO_SEQIV is not set
1170CONFIG_CRYPTO_MANAGER=y
1171# CONFIG_CRYPTO_HMAC is not set
1172# CONFIG_CRYPTO_XCBC is not set
1173# CONFIG_CRYPTO_NULL is not set
1174# CONFIG_CRYPTO_MD4 is not set
1175CONFIG_CRYPTO_MD5=y
1176# CONFIG_CRYPTO_SHA1 is not set
1177# CONFIG_CRYPTO_SHA256 is not set
1178# CONFIG_CRYPTO_SHA512 is not set
1179# CONFIG_CRYPTO_WP512 is not set
1180# CONFIG_CRYPTO_TGR192 is not set
1181# CONFIG_CRYPTO_GF128MUL is not set
1182CONFIG_CRYPTO_ECB=m
1183CONFIG_CRYPTO_CBC=y
1184CONFIG_CRYPTO_PCBC=m
1185# CONFIG_CRYPTO_LRW is not set
1186# CONFIG_CRYPTO_XTS is not set
1187# CONFIG_CRYPTO_CTR is not set
1188# CONFIG_CRYPTO_GCM is not set
1189# CONFIG_CRYPTO_CCM is not set
1190# CONFIG_CRYPTO_CRYPTD is not set
1191CONFIG_CRYPTO_DES=y
1192# CONFIG_CRYPTO_FCRYPT is not set
1193# CONFIG_CRYPTO_BLOWFISH is not set
1194# CONFIG_CRYPTO_TWOFISH is not set
1195# CONFIG_CRYPTO_SERPENT is not set
1196# CONFIG_CRYPTO_AES is not set
1197# CONFIG_CRYPTO_CAST5 is not set
1198# CONFIG_CRYPTO_CAST6 is not set
1199# CONFIG_CRYPTO_TEA is not set
1200# CONFIG_CRYPTO_ARC4 is not set
1201# CONFIG_CRYPTO_KHAZAD is not set
1202# CONFIG_CRYPTO_ANUBIS is not set
1203# CONFIG_CRYPTO_SEED is not set
1204# CONFIG_CRYPTO_SALSA20 is not set
1205# CONFIG_CRYPTO_DEFLATE is not set
1206# CONFIG_CRYPTO_MICHAEL_MIC is not set
1207# CONFIG_CRYPTO_CRC32C is not set
1208# CONFIG_CRYPTO_CAMELLIA is not set
1209# CONFIG_CRYPTO_TEST is not set
1210# CONFIG_CRYPTO_AUTHENC is not set
1211# CONFIG_CRYPTO_LZO is not set
1212CONFIG_CRYPTO_HW=y
1213# CONFIG_CRYPTO_DEV_HIFN_795X is not set
1214# CONFIG_PPC_CLOCK is not set
diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c
index ec9228d687b0..8655c7670350 100644
--- a/arch/powerpc/kernel/asm-offsets.c
+++ b/arch/powerpc/kernel/asm-offsets.c
@@ -52,6 +52,10 @@
52#include <asm/iseries/alpaca.h> 52#include <asm/iseries/alpaca.h>
53#endif 53#endif
54 54
55#if defined(CONFIG_BOOKE) || defined(CONFIG_40x)
56#include "head_booke.h"
57#endif
58
55int main(void) 59int main(void)
56{ 60{
57 DEFINE(THREAD, offsetof(struct task_struct, thread)); 61 DEFINE(THREAD, offsetof(struct task_struct, thread));
@@ -242,6 +246,25 @@ int main(void)
242 DEFINE(_SRR1, STACK_FRAME_OVERHEAD+sizeof(struct pt_regs)+8); 246 DEFINE(_SRR1, STACK_FRAME_OVERHEAD+sizeof(struct pt_regs)+8);
243#endif /* CONFIG_PPC64 */ 247#endif /* CONFIG_PPC64 */
244 248
249#if defined(CONFIG_BOOKE) || defined(CONFIG_40x)
250 DEFINE(EXC_LVL_SIZE, STACK_EXC_LVL_FRAME_SIZE);
251 DEFINE(MAS0, STACK_INT_FRAME_SIZE+offsetof(struct exception_regs, mas0));
252 /* we overload MMUCR for 44x on MAS0 since they are mutually exclusive */
253 DEFINE(MMUCR, STACK_INT_FRAME_SIZE+offsetof(struct exception_regs, mas0));
254 DEFINE(MAS1, STACK_INT_FRAME_SIZE+offsetof(struct exception_regs, mas1));
255 DEFINE(MAS2, STACK_INT_FRAME_SIZE+offsetof(struct exception_regs, mas2));
256 DEFINE(MAS3, STACK_INT_FRAME_SIZE+offsetof(struct exception_regs, mas3));
257 DEFINE(MAS6, STACK_INT_FRAME_SIZE+offsetof(struct exception_regs, mas6));
258 DEFINE(MAS7, STACK_INT_FRAME_SIZE+offsetof(struct exception_regs, mas7));
259 DEFINE(_SRR0, STACK_INT_FRAME_SIZE+offsetof(struct exception_regs, srr0));
260 DEFINE(_SRR1, STACK_INT_FRAME_SIZE+offsetof(struct exception_regs, srr1));
261 DEFINE(_CSRR0, STACK_INT_FRAME_SIZE+offsetof(struct exception_regs, csrr0));
262 DEFINE(_CSRR1, STACK_INT_FRAME_SIZE+offsetof(struct exception_regs, csrr1));
263 DEFINE(_DSRR0, STACK_INT_FRAME_SIZE+offsetof(struct exception_regs, dsrr0));
264 DEFINE(_DSRR1, STACK_INT_FRAME_SIZE+offsetof(struct exception_regs, dsrr1));
265 DEFINE(SAVED_KSP_LIMIT, STACK_INT_FRAME_SIZE+offsetof(struct exception_regs, saved_ksp_limit));
266#endif
267
245 DEFINE(CLONE_VM, CLONE_VM); 268 DEFINE(CLONE_VM, CLONE_VM);
246 DEFINE(CLONE_UNTRACED, CLONE_UNTRACED); 269 DEFINE(CLONE_UNTRACED, CLONE_UNTRACED);
247 270
diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S
index 0c8614d9875c..fe21674d4f06 100644
--- a/arch/powerpc/kernel/entry_32.S
+++ b/arch/powerpc/kernel/entry_32.S
@@ -44,29 +44,54 @@
44#endif 44#endif
45 45
46#ifdef CONFIG_BOOKE 46#ifdef CONFIG_BOOKE
47#include "head_booke.h"
48#define TRANSFER_TO_HANDLER_EXC_LEVEL(exc_level) \
49 mtspr exc_level##_SPRG,r8; \
50 BOOKE_LOAD_EXC_LEVEL_STACK(exc_level); \
51 lwz r0,GPR10-INT_FRAME_SIZE(r8); \
52 stw r0,GPR10(r11); \
53 lwz r0,GPR11-INT_FRAME_SIZE(r8); \
54 stw r0,GPR11(r11); \
55 mfspr r8,exc_level##_SPRG
56
57 .globl mcheck_transfer_to_handler 47 .globl mcheck_transfer_to_handler
58mcheck_transfer_to_handler: 48mcheck_transfer_to_handler:
59 TRANSFER_TO_HANDLER_EXC_LEVEL(MCHECK) 49 mfspr r0,SPRN_DSRR0
60 b transfer_to_handler_full 50 stw r0,_DSRR0(r11)
51 mfspr r0,SPRN_DSRR1
52 stw r0,_DSRR1(r11)
53 /* fall through */
61 54
62 .globl debug_transfer_to_handler 55 .globl debug_transfer_to_handler
63debug_transfer_to_handler: 56debug_transfer_to_handler:
64 TRANSFER_TO_HANDLER_EXC_LEVEL(DEBUG) 57 mfspr r0,SPRN_CSRR0
65 b transfer_to_handler_full 58 stw r0,_CSRR0(r11)
59 mfspr r0,SPRN_CSRR1
60 stw r0,_CSRR1(r11)
61 /* fall through */
66 62
67 .globl crit_transfer_to_handler 63 .globl crit_transfer_to_handler
68crit_transfer_to_handler: 64crit_transfer_to_handler:
69 TRANSFER_TO_HANDLER_EXC_LEVEL(CRIT) 65#ifdef CONFIG_FSL_BOOKE
66 mfspr r0,SPRN_MAS0
67 stw r0,MAS0(r11)
68 mfspr r0,SPRN_MAS1
69 stw r0,MAS1(r11)
70 mfspr r0,SPRN_MAS2
71 stw r0,MAS2(r11)
72 mfspr r0,SPRN_MAS3
73 stw r0,MAS3(r11)
74 mfspr r0,SPRN_MAS6
75 stw r0,MAS6(r11)
76#ifdef CONFIG_PHYS_64BIT
77 mfspr r0,SPRN_MAS7
78 stw r0,MAS7(r11)
79#endif /* CONFIG_PHYS_64BIT */
80#endif /* CONFIG_FSL_BOOKE */
81#ifdef CONFIG_44x
82 mfspr r0,SPRN_MMUCR
83 stw r0,MMUCR(r11)
84#endif
85 mfspr r0,SPRN_SRR0
86 stw r0,_SRR0(r11)
87 mfspr r0,SPRN_SRR1
88 stw r0,_SRR1(r11)
89
90 mfspr r8,SPRN_SPRG3
91 lwz r0,KSP_LIMIT(r8)
92 stw r0,SAVED_KSP_LIMIT(r11)
93 rlwimi r0,r1,0,0,(31-THREAD_SHIFT)
94 stw r0,KSP_LIMIT(r8)
70 /* fall through */ 95 /* fall through */
71#endif 96#endif
72 97
@@ -77,6 +102,16 @@ crit_transfer_to_handler:
77 stw r0,GPR10(r11) 102 stw r0,GPR10(r11)
78 lwz r0,crit_r11@l(0) 103 lwz r0,crit_r11@l(0)
79 stw r0,GPR11(r11) 104 stw r0,GPR11(r11)
105 mfspr r0,SPRN_SRR0
106 stw r0,crit_srr0@l(0)
107 mfspr r0,SPRN_SRR1
108 stw r0,crit_srr1@l(0)
109
110 mfspr r8,SPRN_SPRG3
111 lwz r0,KSP_LIMIT(r8)
112 stw r0,saved_ksp_limit@l(0)
113 rlwimi r0,r1,0,0,(31-THREAD_SHIFT)
114 stw r0,KSP_LIMIT(r8)
80 /* fall through */ 115 /* fall through */
81#endif 116#endif
82 117
@@ -147,6 +182,7 @@ transfer_to_handler:
147 lwz r12,TI_LOCAL_FLAGS(r9) 182 lwz r12,TI_LOCAL_FLAGS(r9)
148 mtcrf 0x01,r12 183 mtcrf 0x01,r12
149 bt- 31-TLF_NAPPING,4f 184 bt- 31-TLF_NAPPING,4f
185 bt- 31-TLF_SLEEPING,7f
150#endif /* CONFIG_6xx */ 186#endif /* CONFIG_6xx */
151 .globl transfer_to_handler_cont 187 .globl transfer_to_handler_cont
152transfer_to_handler_cont: 188transfer_to_handler_cont:
@@ -164,6 +200,13 @@ transfer_to_handler_cont:
1644: rlwinm r12,r12,0,~_TLF_NAPPING 2004: rlwinm r12,r12,0,~_TLF_NAPPING
165 stw r12,TI_LOCAL_FLAGS(r9) 201 stw r12,TI_LOCAL_FLAGS(r9)
166 b power_save_6xx_restore 202 b power_save_6xx_restore
203
2047: rlwinm r12,r12,0,~_TLF_SLEEPING
205 stw r12,TI_LOCAL_FLAGS(r9)
206 lwz r9,_MSR(r11) /* if sleeping, clear MSR.EE */
207 rlwinm r9,r9,0,~MSR_EE
208 lwz r12,_LINK(r11) /* and return to address in LR */
209 b fast_exception_return
167#endif 210#endif
168 211
169/* 212/*
@@ -668,7 +711,7 @@ user_exc_return: /* r10 contains MSR_KERNEL here */
668 /* Check current_thread_info()->flags */ 711 /* Check current_thread_info()->flags */
669 rlwinm r9,r1,0,0,(31-THREAD_SHIFT) 712 rlwinm r9,r1,0,0,(31-THREAD_SHIFT)
670 lwz r9,TI_FLAGS(r9) 713 lwz r9,TI_FLAGS(r9)
671 andi. r0,r9,(_TIF_SIGPENDING|_TIF_RESTORE_SIGMASK|_TIF_NEED_RESCHED) 714 andi. r0,r9,_TIF_USER_WORK_MASK
672 bne do_work 715 bne do_work
673 716
674restore_user: 717restore_user:
@@ -859,17 +902,90 @@ exc_exit_restart_end:
859 exc_lvl_rfi; \ 902 exc_lvl_rfi; \
860 b .; /* prevent prefetch past exc_lvl_rfi */ 903 b .; /* prevent prefetch past exc_lvl_rfi */
861 904
905#define RESTORE_xSRR(exc_lvl_srr0, exc_lvl_srr1) \
906 lwz r9,_##exc_lvl_srr0(r1); \
907 lwz r10,_##exc_lvl_srr1(r1); \
908 mtspr SPRN_##exc_lvl_srr0,r9; \
909 mtspr SPRN_##exc_lvl_srr1,r10;
910
911#if defined(CONFIG_FSL_BOOKE)
912#ifdef CONFIG_PHYS_64BIT
913#define RESTORE_MAS7 \
914 lwz r11,MAS7(r1); \
915 mtspr SPRN_MAS7,r11;
916#else
917#define RESTORE_MAS7
918#endif /* CONFIG_PHYS_64BIT */
919#define RESTORE_MMU_REGS \
920 lwz r9,MAS0(r1); \
921 lwz r10,MAS1(r1); \
922 lwz r11,MAS2(r1); \
923 mtspr SPRN_MAS0,r9; \
924 lwz r9,MAS3(r1); \
925 mtspr SPRN_MAS1,r10; \
926 lwz r10,MAS6(r1); \
927 mtspr SPRN_MAS2,r11; \
928 mtspr SPRN_MAS3,r9; \
929 mtspr SPRN_MAS6,r10; \
930 RESTORE_MAS7;
931#elif defined(CONFIG_44x)
932#define RESTORE_MMU_REGS \
933 lwz r9,MMUCR(r1); \
934 mtspr SPRN_MMUCR,r9;
935#else
936#define RESTORE_MMU_REGS
937#endif
938
939#ifdef CONFIG_40x
862 .globl ret_from_crit_exc 940 .globl ret_from_crit_exc
863ret_from_crit_exc: 941ret_from_crit_exc:
942 mfspr r9,SPRN_SPRG3
943 lis r10,saved_ksp_limit@ha;
944 lwz r10,saved_ksp_limit@l(r10);
945 tovirt(r9,r9);
946 stw r10,KSP_LIMIT(r9)
947 lis r9,crit_srr0@ha;
948 lwz r9,crit_srr0@l(r9);
949 lis r10,crit_srr1@ha;
950 lwz r10,crit_srr1@l(r10);
951 mtspr SPRN_SRR0,r9;
952 mtspr SPRN_SRR1,r10;
864 RET_FROM_EXC_LEVEL(SPRN_CSRR0, SPRN_CSRR1, RFCI) 953 RET_FROM_EXC_LEVEL(SPRN_CSRR0, SPRN_CSRR1, RFCI)
954#endif /* CONFIG_40x */
865 955
866#ifdef CONFIG_BOOKE 956#ifdef CONFIG_BOOKE
957 .globl ret_from_crit_exc
958ret_from_crit_exc:
959 mfspr r9,SPRN_SPRG3
960 lwz r10,SAVED_KSP_LIMIT(r1)
961 stw r10,KSP_LIMIT(r9)
962 RESTORE_xSRR(SRR0,SRR1);
963 RESTORE_MMU_REGS;
964 RET_FROM_EXC_LEVEL(SPRN_CSRR0, SPRN_CSRR1, RFCI)
965
867 .globl ret_from_debug_exc 966 .globl ret_from_debug_exc
868ret_from_debug_exc: 967ret_from_debug_exc:
968 mfspr r9,SPRN_SPRG3
969 lwz r10,SAVED_KSP_LIMIT(r1)
970 stw r10,KSP_LIMIT(r9)
971 lwz r9,THREAD_INFO-THREAD(r9)
972 rlwinm r10,r1,0,0,(31-THREAD_SHIFT)
973 lwz r10,TI_PREEMPT(r10)
974 stw r10,TI_PREEMPT(r9)
975 RESTORE_xSRR(SRR0,SRR1);
976 RESTORE_xSRR(CSRR0,CSRR1);
977 RESTORE_MMU_REGS;
869 RET_FROM_EXC_LEVEL(SPRN_DSRR0, SPRN_DSRR1, RFDI) 978 RET_FROM_EXC_LEVEL(SPRN_DSRR0, SPRN_DSRR1, RFDI)
870 979
871 .globl ret_from_mcheck_exc 980 .globl ret_from_mcheck_exc
872ret_from_mcheck_exc: 981ret_from_mcheck_exc:
982 mfspr r9,SPRN_SPRG3
983 lwz r10,SAVED_KSP_LIMIT(r1)
984 stw r10,KSP_LIMIT(r9)
985 RESTORE_xSRR(SRR0,SRR1);
986 RESTORE_xSRR(CSRR0,CSRR1);
987 RESTORE_xSRR(DSRR0,DSRR1);
988 RESTORE_MMU_REGS;
873 RET_FROM_EXC_LEVEL(SPRN_MCSRR0, SPRN_MCSRR1, RFMCI) 989 RET_FROM_EXC_LEVEL(SPRN_MCSRR0, SPRN_MCSRR1, RFMCI)
874#endif /* CONFIG_BOOKE */ 990#endif /* CONFIG_BOOKE */
875 991
@@ -925,7 +1041,7 @@ recheck:
925 lwz r9,TI_FLAGS(r9) 1041 lwz r9,TI_FLAGS(r9)
926 andi. r0,r9,_TIF_NEED_RESCHED 1042 andi. r0,r9,_TIF_NEED_RESCHED
927 bne- do_resched 1043 bne- do_resched
928 andi. r0,r9,_TIF_SIGPENDING|_TIF_RESTORE_SIGMASK 1044 andi. r0,r9,_TIF_USER_WORK_MASK
929 beq restore_user 1045 beq restore_user
930do_user_signal: /* r10 contains MSR_KERNEL here */ 1046do_user_signal: /* r10 contains MSR_KERNEL here */
931 ori r10,r10,MSR_EE 1047 ori r10,r10,MSR_EE
diff --git a/arch/powerpc/kernel/head_40x.S b/arch/powerpc/kernel/head_40x.S
index 8552e67e3a8b..56d8e5d90c5b 100644
--- a/arch/powerpc/kernel/head_40x.S
+++ b/arch/powerpc/kernel/head_40x.S
@@ -93,6 +93,12 @@ _ENTRY(crit_r10)
93 .space 4 93 .space 4
94_ENTRY(crit_r11) 94_ENTRY(crit_r11)
95 .space 4 95 .space 4
96_ENTRY(crit_srr0)
97 .space 4
98_ENTRY(crit_srr1)
99 .space 4
100_ENTRY(saved_ksp_limit)
101 .space 4
96 102
97/* 103/*
98 * Exception vector entry code. This code runs with address translation 104 * Exception vector entry code. This code runs with address translation
@@ -148,14 +154,14 @@ _ENTRY(crit_r11)
148 mfcr r10; /* save CR in r10 for now */\ 154 mfcr r10; /* save CR in r10 for now */\
149 mfspr r11,SPRN_SRR3; /* check whether user or kernel */\ 155 mfspr r11,SPRN_SRR3; /* check whether user or kernel */\
150 andi. r11,r11,MSR_PR; \ 156 andi. r11,r11,MSR_PR; \
151 lis r11,critical_stack_top@h; \ 157 lis r11,critirq_ctx@ha; \
152 ori r11,r11,critical_stack_top@l; \ 158 tophys(r11,r11); \
159 lwz r11,critirq_ctx@l(r11); \
153 beq 1f; \ 160 beq 1f; \
154 /* COMING FROM USER MODE */ \ 161 /* COMING FROM USER MODE */ \
155 mfspr r11,SPRN_SPRG3; /* if from user, start at top of */\ 162 mfspr r11,SPRN_SPRG3; /* if from user, start at top of */\
156 lwz r11,THREAD_INFO-THREAD(r11); /* this thread's kernel stack */\ 163 lwz r11,THREAD_INFO-THREAD(r11); /* this thread's kernel stack */\
157 addi r11,r11,THREAD_SIZE; \ 1641: addi r11,r11,THREAD_SIZE-INT_FRAME_SIZE; /* Alloc an excpt frm */\
1581: subi r11,r11,INT_FRAME_SIZE; /* Allocate an exception frame */\
159 tophys(r11,r11); \ 165 tophys(r11,r11); \
160 stw r10,_CCR(r11); /* save various registers */\ 166 stw r10,_CCR(r11); /* save various registers */\
161 stw r12,GPR12(r11); \ 167 stw r12,GPR12(r11); \
@@ -996,16 +1002,6 @@ empty_zero_page:
996swapper_pg_dir: 1002swapper_pg_dir:
997 .space PGD_TABLE_SIZE 1003 .space PGD_TABLE_SIZE
998 1004
999
1000/* Stack for handling critical exceptions from kernel mode */
1001 .section .bss
1002 .align 12
1003exception_stack_bottom:
1004 .space 4096
1005critical_stack_top:
1006 .globl exception_stack_top
1007exception_stack_top:
1008
1009/* Room for two PTE pointers, usually the kernel and current user pointers 1005/* Room for two PTE pointers, usually the kernel and current user pointers
1010 * to their respective root page table. 1006 * to their respective root page table.
1011 */ 1007 */
diff --git a/arch/powerpc/kernel/head_44x.S b/arch/powerpc/kernel/head_44x.S
index c2b9dc4fce5d..47ea8affad23 100644
--- a/arch/powerpc/kernel/head_44x.S
+++ b/arch/powerpc/kernel/head_44x.S
@@ -737,15 +737,6 @@ empty_zero_page:
737swapper_pg_dir: 737swapper_pg_dir:
738 .space PGD_TABLE_SIZE 738 .space PGD_TABLE_SIZE
739 739
740/* Reserved 4k for the critical exception stack & 4k for the machine
741 * check stack per CPU for kernel mode exceptions */
742 .section .bss
743 .align 12
744exception_stack_bottom:
745 .space BOOKE_EXCEPTION_STACK_SIZE
746 .globl exception_stack_top
747exception_stack_top:
748
749/* 740/*
750 * Room for two PTE pointers, usually the kernel and current user pointers 741 * Room for two PTE pointers, usually the kernel and current user pointers
751 * to their respective root page table. 742 * to their respective root page table.
diff --git a/arch/powerpc/kernel/head_booke.h b/arch/powerpc/kernel/head_booke.h
index aefafc6330c9..f277fade1932 100644
--- a/arch/powerpc/kernel/head_booke.h
+++ b/arch/powerpc/kernel/head_booke.h
@@ -43,9 +43,7 @@
43 SAVE_2GPRS(7, r11) 43 SAVE_2GPRS(7, r11)
44 44
45/* To handle the additional exception priority levels on 40x and Book-E 45/* To handle the additional exception priority levels on 40x and Book-E
46 * processors we allocate a 4k stack per additional priority level. The various 46 * processors we allocate a stack per additional priority level.
47 * head_xxx.S files allocate space (exception_stack_top) for each priority's
48 * stack times the number of CPUs
49 * 47 *
50 * On 40x critical is the only additional level 48 * On 40x critical is the only additional level
51 * On 44x/e500 we have critical and machine check 49 * On 44x/e500 we have critical and machine check
@@ -61,36 +59,33 @@
61 * going to critical or their own debug level we aren't currently 59 * going to critical or their own debug level we aren't currently
62 * providing configurations that micro-optimize space usage. 60 * providing configurations that micro-optimize space usage.
63 */ 61 */
64#ifdef CONFIG_44x
65#define NUM_EXCEPTION_LVLS 2
66#else
67#define NUM_EXCEPTION_LVLS 3
68#endif
69#define BOOKE_EXCEPTION_STACK_SIZE (4096 * NUM_EXCEPTION_LVLS)
70 62
71/* CRIT_SPRG only used in critical exception handling */ 63/* CRIT_SPRG only used in critical exception handling */
72#define CRIT_SPRG SPRN_SPRG2 64#define CRIT_SPRG SPRN_SPRG2
73/* MCHECK_SPRG only used in machine check exception handling */ 65/* MCHECK_SPRG only used in machine check exception handling */
74#define MCHECK_SPRG SPRN_SPRG6W 66#define MCHECK_SPRG SPRN_SPRG6W
75 67
76#define MCHECK_STACK_TOP (exception_stack_top - 4096) 68#define MCHECK_STACK_BASE mcheckirq_ctx
77#define CRIT_STACK_TOP (exception_stack_top) 69#define CRIT_STACK_BASE critirq_ctx
78 70
79/* only on e200 for now */ 71/* only on e200 for now */
80#define DEBUG_STACK_TOP (exception_stack_top - 8192) 72#define DEBUG_STACK_BASE dbgirq_ctx
81#define DEBUG_SPRG SPRN_SPRG6W 73#define DEBUG_SPRG SPRN_SPRG6W
82 74
75#define EXC_LVL_FRAME_OVERHEAD (THREAD_SIZE - INT_FRAME_SIZE - EXC_LVL_SIZE)
76
83#ifdef CONFIG_SMP 77#ifdef CONFIG_SMP
84#define BOOKE_LOAD_EXC_LEVEL_STACK(level) \ 78#define BOOKE_LOAD_EXC_LEVEL_STACK(level) \
85 mfspr r8,SPRN_PIR; \ 79 mfspr r8,SPRN_PIR; \
86 mulli r8,r8,BOOKE_EXCEPTION_STACK_SIZE; \ 80 slwi r8,r8,2; \
87 neg r8,r8; \ 81 addis r8,r8,level##_STACK_BASE@ha; \
88 addis r8,r8,level##_STACK_TOP@ha; \ 82 lwz r8,level##_STACK_BASE@l(r8); \
89 addi r8,r8,level##_STACK_TOP@l 83 addi r8,r8,EXC_LVL_FRAME_OVERHEAD;
90#else 84#else
91#define BOOKE_LOAD_EXC_LEVEL_STACK(level) \ 85#define BOOKE_LOAD_EXC_LEVEL_STACK(level) \
92 lis r8,level##_STACK_TOP@h; \ 86 lis r8,level##_STACK_BASE@ha; \
93 ori r8,r8,level##_STACK_TOP@l 87 lwz r8,level##_STACK_BASE@l(r8); \
88 addi r8,r8,EXC_LVL_FRAME_OVERHEAD;
94#endif 89#endif
95 90
96/* 91/*
@@ -104,22 +99,36 @@
104#define EXC_LEVEL_EXCEPTION_PROLOG(exc_level, exc_level_srr0, exc_level_srr1) \ 99#define EXC_LEVEL_EXCEPTION_PROLOG(exc_level, exc_level_srr0, exc_level_srr1) \
105 mtspr exc_level##_SPRG,r8; \ 100 mtspr exc_level##_SPRG,r8; \
106 BOOKE_LOAD_EXC_LEVEL_STACK(exc_level);/* r8 points to the exc_level stack*/ \ 101 BOOKE_LOAD_EXC_LEVEL_STACK(exc_level);/* r8 points to the exc_level stack*/ \
107 stw r10,GPR10-INT_FRAME_SIZE(r8); \ 102 stw r9,GPR9(r8); /* save various registers */\
108 stw r11,GPR11-INT_FRAME_SIZE(r8); \ 103 mfcr r9; /* save CR in r9 for now */\
109 mfcr r10; /* save CR in r10 for now */\ 104 stw r10,GPR10(r8); \
110 mfspr r11,exc_level_srr1; /* check whether user or kernel */\ 105 stw r11,GPR11(r8); \
111 andi. r11,r11,MSR_PR; \ 106 stw r9,_CCR(r8); /* save CR on stack */\
112 mr r11,r8; \ 107 mfspr r10,exc_level_srr1; /* check whether user or kernel */\
113 mfspr r8,exc_level##_SPRG; \ 108 andi. r10,r10,MSR_PR; \
114 beq 1f; \
115 /* COMING FROM USER MODE */ \
116 mfspr r11,SPRN_SPRG3; /* if from user, start at top of */\ 109 mfspr r11,SPRN_SPRG3; /* if from user, start at top of */\
117 lwz r11,THREAD_INFO-THREAD(r11); /* this thread's kernel stack */\ 110 lwz r11,THREAD_INFO-THREAD(r11); /* this thread's kernel stack */\
118 addi r11,r11,THREAD_SIZE; \ 111 addi r11,r11,EXC_LVL_FRAME_OVERHEAD; /* allocate stack frame */\
1191: subi r11,r11,INT_FRAME_SIZE; /* Allocate an exception frame */\ 112 beq 1f; \
120 stw r10,_CCR(r11); /* save various registers */\ 113 /* COMING FROM USER MODE */ \
121 stw r12,GPR12(r11); \ 114 stw r9,_CCR(r11); /* save CR */\
115 lwz r10,GPR10(r8); /* copy regs from exception stack */\
116 lwz r9,GPR9(r8); \
117 stw r10,GPR10(r11); \
118 lwz r10,GPR11(r8); \
122 stw r9,GPR9(r11); \ 119 stw r9,GPR9(r11); \
120 stw r10,GPR11(r11); \
121 b 2f; \
122 /* COMING FROM PRIV MODE */ \
1231: lwz r9,TI_FLAGS-EXC_LVL_FRAME_OVERHEAD(r11); \
124 lwz r10,TI_PREEMPT-EXC_LVL_FRAME_OVERHEAD(r11); \
125 stw r9,TI_FLAGS-EXC_LVL_FRAME_OVERHEAD(r8); \
126 stw r10,TI_PREEMPT-EXC_LVL_FRAME_OVERHEAD(r8); \
127 lwz r9,TI_TASK-EXC_LVL_FRAME_OVERHEAD(r11); \
128 stw r9,TI_TASK-EXC_LVL_FRAME_OVERHEAD(r8); \
129 mr r11,r8; \
1302: mfspr r8,exc_level##_SPRG; \
131 stw r12,GPR12(r11); /* save various registers */\
123 mflr r10; \ 132 mflr r10; \
124 stw r10,_LINK(r11); \ 133 stw r10,_LINK(r11); \
125 mfspr r12,SPRN_DEAR; /* save DEAR and ESR in the frame */\ 134 mfspr r12,SPRN_DEAR; /* save DEAR and ESR in the frame */\
@@ -262,8 +271,8 @@ label:
262 lwz r12,GPR12(r11); \ 271 lwz r12,GPR12(r11); \
263 mtspr DEBUG_SPRG,r8; \ 272 mtspr DEBUG_SPRG,r8; \
264 BOOKE_LOAD_EXC_LEVEL_STACK(DEBUG); /* r8 points to the debug stack */ \ 273 BOOKE_LOAD_EXC_LEVEL_STACK(DEBUG); /* r8 points to the debug stack */ \
265 lwz r10,GPR10-INT_FRAME_SIZE(r8); \ 274 lwz r10,GPR10(r8); \
266 lwz r11,GPR11-INT_FRAME_SIZE(r8); \ 275 lwz r11,GPR11(r8); \
267 mfspr r8,DEBUG_SPRG; \ 276 mfspr r8,DEBUG_SPRG; \
268 \ 277 \
269 RFDI; \ 278 RFDI; \
@@ -272,7 +281,7 @@ label:
272 /* continue normal handling for a critical exception... */ \ 281 /* continue normal handling for a critical exception... */ \
2732: mfspr r4,SPRN_DBSR; \ 2822: mfspr r4,SPRN_DBSR; \
274 addi r3,r1,STACK_FRAME_OVERHEAD; \ 283 addi r3,r1,STACK_FRAME_OVERHEAD; \
275 EXC_XFER_TEMPLATE(DebugException, 0x2002, (MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE)), NOCOPY, debug_transfer_to_handler, ret_from_debug_exc) 284 EXC_XFER_TEMPLATE(DebugException, 0x2008, (MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE)), NOCOPY, debug_transfer_to_handler, ret_from_debug_exc)
276 285
277#define DEBUG_CRIT_EXCEPTION \ 286#define DEBUG_CRIT_EXCEPTION \
278 START_EXCEPTION(DebugCrit); \ 287 START_EXCEPTION(DebugCrit); \
@@ -315,8 +324,8 @@ label:
315 lwz r12,GPR12(r11); \ 324 lwz r12,GPR12(r11); \
316 mtspr CRIT_SPRG,r8; \ 325 mtspr CRIT_SPRG,r8; \
317 BOOKE_LOAD_EXC_LEVEL_STACK(CRIT); /* r8 points to the debug stack */ \ 326 BOOKE_LOAD_EXC_LEVEL_STACK(CRIT); /* r8 points to the debug stack */ \
318 lwz r10,GPR10-INT_FRAME_SIZE(r8); \ 327 lwz r10,GPR10(r8); \
319 lwz r11,GPR11-INT_FRAME_SIZE(r8); \ 328 lwz r11,GPR11(r8); \
320 mfspr r8,CRIT_SPRG; \ 329 mfspr r8,CRIT_SPRG; \
321 \ 330 \
322 rfci; \ 331 rfci; \
@@ -367,4 +376,25 @@ label:
367 addi r3,r1,STACK_FRAME_OVERHEAD; \ 376 addi r3,r1,STACK_FRAME_OVERHEAD; \
368 EXC_XFER_EE_LITE(0x800, kernel_fp_unavailable_exception) 377 EXC_XFER_EE_LITE(0x800, kernel_fp_unavailable_exception)
369 378
379#ifndef __ASSEMBLY__
380struct exception_regs {
381 unsigned long mas0;
382 unsigned long mas1;
383 unsigned long mas2;
384 unsigned long mas3;
385 unsigned long mas6;
386 unsigned long mas7;
387 unsigned long srr0;
388 unsigned long srr1;
389 unsigned long csrr0;
390 unsigned long csrr1;
391 unsigned long dsrr0;
392 unsigned long dsrr1;
393 unsigned long saved_ksp_limit;
394};
395
396/* ensure this structure is always sized to a multiple of the stack alignment */
397#define STACK_EXC_LVL_FRAME_SIZE _ALIGN_UP(sizeof (struct exception_regs), 16)
398
399#endif /* __ASSEMBLY__ */
370#endif /* __HEAD_BOOKE_H__ */ 400#endif /* __HEAD_BOOKE_H__ */
diff --git a/arch/powerpc/kernel/head_fsl_booke.S b/arch/powerpc/kernel/head_fsl_booke.S
index e581524d85bc..503f86030b6e 100644
--- a/arch/powerpc/kernel/head_fsl_booke.S
+++ b/arch/powerpc/kernel/head_fsl_booke.S
@@ -1080,15 +1080,6 @@ empty_zero_page:
1080swapper_pg_dir: 1080swapper_pg_dir:
1081 .space PGD_TABLE_SIZE 1081 .space PGD_TABLE_SIZE
1082 1082
1083/* Reserved 4k for the critical exception stack & 4k for the machine
1084 * check stack per CPU for kernel mode exceptions */
1085 .section .bss
1086 .align 12
1087exception_stack_bottom:
1088 .space BOOKE_EXCEPTION_STACK_SIZE * NR_CPUS
1089 .globl exception_stack_top
1090exception_stack_top:
1091
1092/* 1083/*
1093 * Room for two PTE pointers, usually the kernel and current user pointers 1084 * Room for two PTE pointers, usually the kernel and current user pointers
1094 * to their respective root page table. 1085 * to their respective root page table.
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index 2f73f705d564..b5199752ac60 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -356,9 +356,42 @@ void __init init_IRQ(void)
356{ 356{
357 if (ppc_md.init_IRQ) 357 if (ppc_md.init_IRQ)
358 ppc_md.init_IRQ(); 358 ppc_md.init_IRQ();
359
360 exc_lvl_ctx_init();
361
359 irq_ctx_init(); 362 irq_ctx_init();
360} 363}
361 364
365#if defined(CONFIG_BOOKE) || defined(CONFIG_40x)
366struct thread_info *critirq_ctx[NR_CPUS] __read_mostly;
367struct thread_info *dbgirq_ctx[NR_CPUS] __read_mostly;
368struct thread_info *mcheckirq_ctx[NR_CPUS] __read_mostly;
369
370void exc_lvl_ctx_init(void)
371{
372 struct thread_info *tp;
373 int i;
374
375 for_each_possible_cpu(i) {
376 memset((void *)critirq_ctx[i], 0, THREAD_SIZE);
377 tp = critirq_ctx[i];
378 tp->cpu = i;
379 tp->preempt_count = 0;
380
381#ifdef CONFIG_BOOKE
382 memset((void *)dbgirq_ctx[i], 0, THREAD_SIZE);
383 tp = dbgirq_ctx[i];
384 tp->cpu = i;
385 tp->preempt_count = 0;
386
387 memset((void *)mcheckirq_ctx[i], 0, THREAD_SIZE);
388 tp = mcheckirq_ctx[i];
389 tp->cpu = i;
390 tp->preempt_count = HARDIRQ_OFFSET;
391#endif
392 }
393}
394#endif
362 395
363#ifdef CONFIG_IRQSTACKS 396#ifdef CONFIG_IRQSTACKS
364struct thread_info *softirq_ctx[NR_CPUS] __read_mostly; 397struct thread_info *softirq_ctx[NR_CPUS] __read_mostly;
diff --git a/arch/powerpc/kernel/kprobes.c b/arch/powerpc/kernel/kprobes.c
index c176c513566b..23545a2f51f3 100644
--- a/arch/powerpc/kernel/kprobes.c
+++ b/arch/powerpc/kernel/kprobes.c
@@ -498,7 +498,7 @@ int __kprobes kprobe_exceptions_notify(struct notifier_block *self,
498#ifdef CONFIG_PPC64 498#ifdef CONFIG_PPC64
499unsigned long arch_deref_entry_point(void *entry) 499unsigned long arch_deref_entry_point(void *entry)
500{ 500{
501 return (unsigned long)(((func_descr_t *)entry)->entry); 501 return ((func_descr_t *)entry)->entry;
502} 502}
503#endif 503#endif
504 504
diff --git a/arch/powerpc/kernel/lparcfg.c b/arch/powerpc/kernel/lparcfg.c
index 1e656b43ad7f..827a5726a035 100644
--- a/arch/powerpc/kernel/lparcfg.c
+++ b/arch/powerpc/kernel/lparcfg.c
@@ -573,7 +573,7 @@ static int lparcfg_open(struct inode *inode, struct file *file)
573 return single_open(file, lparcfg_data, NULL); 573 return single_open(file, lparcfg_data, NULL);
574} 574}
575 575
576const struct file_operations lparcfg_fops = { 576static const struct file_operations lparcfg_fops = {
577 .owner = THIS_MODULE, 577 .owner = THIS_MODULE,
578 .read = seq_read, 578 .read = seq_read,
579 .write = lparcfg_write, 579 .write = lparcfg_write,
@@ -581,7 +581,7 @@ const struct file_operations lparcfg_fops = {
581 .release = single_release, 581 .release = single_release,
582}; 582};
583 583
584int __init lparcfg_init(void) 584static int __init lparcfg_init(void)
585{ 585{
586 struct proc_dir_entry *ent; 586 struct proc_dir_entry *ent;
587 mode_t mode = S_IRUSR | S_IRGRP | S_IROTH; 587 mode_t mode = S_IRUSR | S_IRGRP | S_IROTH;
@@ -601,7 +601,7 @@ int __init lparcfg_init(void)
601 return 0; 601 return 0;
602} 602}
603 603
604void __exit lparcfg_cleanup(void) 604static void __exit lparcfg_cleanup(void)
605{ 605{
606 if (proc_ppc64_lparcfg) 606 if (proc_ppc64_lparcfg)
607 remove_proc_entry("lparcfg", proc_ppc64_lparcfg->parent); 607 remove_proc_entry("lparcfg", proc_ppc64_lparcfg->parent);
diff --git a/arch/powerpc/kernel/machine_kexec_64.c b/arch/powerpc/kernel/machine_kexec_64.c
index 704375bda73a..631dfd614b21 100644
--- a/arch/powerpc/kernel/machine_kexec_64.c
+++ b/arch/powerpc/kernel/machine_kexec_64.c
@@ -158,7 +158,7 @@ void kexec_copy_flush(struct kimage *image)
158 * on calling the interrupts, but we would like to call it off irq level 158 * on calling the interrupts, but we would like to call it off irq level
159 * so that the interrupt controller is clean. 159 * so that the interrupt controller is clean.
160 */ 160 */
161void kexec_smp_down(void *arg) 161static void kexec_smp_down(void *arg)
162{ 162{
163 if (ppc_md.kexec_cpu_down) 163 if (ppc_md.kexec_cpu_down)
164 ppc_md.kexec_cpu_down(0, 1); 164 ppc_md.kexec_cpu_down(0, 1);
@@ -249,7 +249,7 @@ static void kexec_prepare_cpus(void)
249 * We could use a smaller stack if we don't care about anything using 249 * We could use a smaller stack if we don't care about anything using
250 * current, but that audit has not been performed. 250 * current, but that audit has not been performed.
251 */ 251 */
252union thread_union kexec_stack 252static union thread_union kexec_stack
253 __attribute__((__section__(".data.init_task"))) = { }; 253 __attribute__((__section__(".data.init_task"))) = { };
254 254
255/* Our assembly helper, in kexec_stub.S */ 255/* Our assembly helper, in kexec_stub.S */
diff --git a/arch/powerpc/kernel/msi.c b/arch/powerpc/kernel/msi.c
index c62d1012c013..3bb7d3dd28be 100644
--- a/arch/powerpc/kernel/msi.c
+++ b/arch/powerpc/kernel/msi.c
@@ -34,5 +34,5 @@ int arch_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
34 34
35void arch_teardown_msi_irqs(struct pci_dev *dev) 35void arch_teardown_msi_irqs(struct pci_dev *dev)
36{ 36{
37 return ppc_md.teardown_msi_irqs(dev); 37 ppc_md.teardown_msi_irqs(dev);
38} 38}
diff --git a/arch/powerpc/kernel/of_device.c b/arch/powerpc/kernel/of_device.c
index 5748ddb47d9f..e9be908f199b 100644
--- a/arch/powerpc/kernel/of_device.c
+++ b/arch/powerpc/kernel/of_device.c
@@ -89,54 +89,6 @@ struct of_device *of_device_alloc(struct device_node *np,
89} 89}
90EXPORT_SYMBOL(of_device_alloc); 90EXPORT_SYMBOL(of_device_alloc);
91 91
92ssize_t of_device_get_modalias(struct of_device *ofdev,
93 char *str, ssize_t len)
94{
95 const char *compat;
96 int cplen, i;
97 ssize_t tsize, csize, repend;
98
99 /* Name & Type */
100 csize = snprintf(str, len, "of:N%sT%s",
101 ofdev->node->name, ofdev->node->type);
102
103 /* Get compatible property if any */
104 compat = of_get_property(ofdev->node, "compatible", &cplen);
105 if (!compat)
106 return csize;
107
108 /* Find true end (we tolerate multiple \0 at the end */
109 for (i=(cplen-1); i>=0 && !compat[i]; i--)
110 cplen--;
111 if (!cplen)
112 return csize;
113 cplen++;
114
115 /* Check space (need cplen+1 chars including final \0) */
116 tsize = csize + cplen;
117 repend = tsize;
118
119 if (csize>=len) /* @ the limit, all is already filled */
120 return tsize;
121
122 if (tsize>=len) { /* limit compat list */
123 cplen = len-csize-1;
124 repend = len;
125 }
126
127 /* Copy and do char replacement */
128 memcpy(&str[csize+1], compat, cplen);
129 for (i=csize; i<repend; i++) {
130 char c = str[i];
131 if (c=='\0')
132 str[i] = 'C';
133 else if (c==' ')
134 str[i] = '_';
135 }
136
137 return tsize;
138}
139
140int of_device_uevent(struct device *dev, struct kobj_uevent_env *env) 92int of_device_uevent(struct device *dev, struct kobj_uevent_env *env)
141{ 93{
142 struct of_device *ofdev; 94 struct of_device *ofdev;
diff --git a/arch/powerpc/kernel/rtas-proc.c b/arch/powerpc/kernel/rtas-proc.c
index f9c6abc84a94..1be9fe38bcb5 100644
--- a/arch/powerpc/kernel/rtas-proc.c
+++ b/arch/powerpc/kernel/rtas-proc.c
@@ -160,7 +160,7 @@ static int sensors_open(struct inode *inode, struct file *file)
160 return single_open(file, ppc_rtas_sensors_show, NULL); 160 return single_open(file, ppc_rtas_sensors_show, NULL);
161} 161}
162 162
163const struct file_operations ppc_rtas_sensors_operations = { 163static const struct file_operations ppc_rtas_sensors_operations = {
164 .open = sensors_open, 164 .open = sensors_open,
165 .read = seq_read, 165 .read = seq_read,
166 .llseek = seq_lseek, 166 .llseek = seq_lseek,
@@ -172,7 +172,7 @@ static int poweron_open(struct inode *inode, struct file *file)
172 return single_open(file, ppc_rtas_poweron_show, NULL); 172 return single_open(file, ppc_rtas_poweron_show, NULL);
173} 173}
174 174
175const struct file_operations ppc_rtas_poweron_operations = { 175static const struct file_operations ppc_rtas_poweron_operations = {
176 .open = poweron_open, 176 .open = poweron_open,
177 .read = seq_read, 177 .read = seq_read,
178 .llseek = seq_lseek, 178 .llseek = seq_lseek,
@@ -185,7 +185,7 @@ static int progress_open(struct inode *inode, struct file *file)
185 return single_open(file, ppc_rtas_progress_show, NULL); 185 return single_open(file, ppc_rtas_progress_show, NULL);
186} 186}
187 187
188const struct file_operations ppc_rtas_progress_operations = { 188static const struct file_operations ppc_rtas_progress_operations = {
189 .open = progress_open, 189 .open = progress_open,
190 .read = seq_read, 190 .read = seq_read,
191 .llseek = seq_lseek, 191 .llseek = seq_lseek,
@@ -198,7 +198,7 @@ static int clock_open(struct inode *inode, struct file *file)
198 return single_open(file, ppc_rtas_clock_show, NULL); 198 return single_open(file, ppc_rtas_clock_show, NULL);
199} 199}
200 200
201const struct file_operations ppc_rtas_clock_operations = { 201static const struct file_operations ppc_rtas_clock_operations = {
202 .open = clock_open, 202 .open = clock_open,
203 .read = seq_read, 203 .read = seq_read,
204 .llseek = seq_lseek, 204 .llseek = seq_lseek,
@@ -211,7 +211,7 @@ static int tone_freq_open(struct inode *inode, struct file *file)
211 return single_open(file, ppc_rtas_tone_freq_show, NULL); 211 return single_open(file, ppc_rtas_tone_freq_show, NULL);
212} 212}
213 213
214const struct file_operations ppc_rtas_tone_freq_operations = { 214static const struct file_operations ppc_rtas_tone_freq_operations = {
215 .open = tone_freq_open, 215 .open = tone_freq_open,
216 .read = seq_read, 216 .read = seq_read,
217 .llseek = seq_lseek, 217 .llseek = seq_lseek,
@@ -224,7 +224,7 @@ static int tone_volume_open(struct inode *inode, struct file *file)
224 return single_open(file, ppc_rtas_tone_volume_show, NULL); 224 return single_open(file, ppc_rtas_tone_volume_show, NULL);
225} 225}
226 226
227const struct file_operations ppc_rtas_tone_volume_operations = { 227static const struct file_operations ppc_rtas_tone_volume_operations = {
228 .open = tone_volume_open, 228 .open = tone_volume_open,
229 .read = seq_read, 229 .read = seq_read,
230 .llseek = seq_lseek, 230 .llseek = seq_lseek,
@@ -237,7 +237,7 @@ static int rmo_buf_open(struct inode *inode, struct file *file)
237 return single_open(file, ppc_rtas_rmo_buf_show, NULL); 237 return single_open(file, ppc_rtas_rmo_buf_show, NULL);
238} 238}
239 239
240const struct file_operations ppc_rtas_rmo_buf_ops = { 240static const struct file_operations ppc_rtas_rmo_buf_ops = {
241 .open = rmo_buf_open, 241 .open = rmo_buf_open,
242 .read = seq_read, 242 .read = seq_read,
243 .llseek = seq_lseek, 243 .llseek = seq_lseek,
diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c
index 34843c318419..2a60bd3e3afa 100644
--- a/arch/powerpc/kernel/rtas.c
+++ b/arch/powerpc/kernel/rtas.c
@@ -340,8 +340,8 @@ int rtas_get_error_log_max(void)
340EXPORT_SYMBOL(rtas_get_error_log_max); 340EXPORT_SYMBOL(rtas_get_error_log_max);
341 341
342 342
343char rtas_err_buf[RTAS_ERROR_LOG_MAX]; 343static char rtas_err_buf[RTAS_ERROR_LOG_MAX];
344int rtas_last_error_token; 344static int rtas_last_error_token;
345 345
346/** Return a copy of the detailed error text associated with the 346/** Return a copy of the detailed error text associated with the
347 * most recent failed call to rtas. Because the error text 347 * most recent failed call to rtas. Because the error text
@@ -484,7 +484,7 @@ unsigned int rtas_busy_delay(int status)
484} 484}
485EXPORT_SYMBOL(rtas_busy_delay); 485EXPORT_SYMBOL(rtas_busy_delay);
486 486
487int rtas_error_rc(int rtas_rc) 487static int rtas_error_rc(int rtas_rc)
488{ 488{
489 int rc; 489 int rc;
490 490
diff --git a/arch/powerpc/kernel/rtas_flash.c b/arch/powerpc/kernel/rtas_flash.c
index 0a5e22b22729..09ded5c424a9 100644
--- a/arch/powerpc/kernel/rtas_flash.c
+++ b/arch/powerpc/kernel/rtas_flash.c
@@ -731,7 +731,7 @@ static const struct file_operations validate_flash_operations = {
731 .release = validate_flash_release, 731 .release = validate_flash_release,
732}; 732};
733 733
734int __init rtas_flash_init(void) 734static int __init rtas_flash_init(void)
735{ 735{
736 int rc; 736 int rc;
737 737
@@ -817,7 +817,7 @@ cleanup:
817 return rc; 817 return rc;
818} 818}
819 819
820void __exit rtas_flash_cleanup(void) 820static void __exit rtas_flash_cleanup(void)
821{ 821{
822 rtas_flash_term_hook = NULL; 822 rtas_flash_term_hook = NULL;
823 823
diff --git a/arch/powerpc/kernel/rtas_pci.c b/arch/powerpc/kernel/rtas_pci.c
index 3ab88a9dc70d..589a2797eac2 100644
--- a/arch/powerpc/kernel/rtas_pci.c
+++ b/arch/powerpc/kernel/rtas_pci.c
@@ -155,12 +155,12 @@ static int rtas_pci_write_config(struct pci_bus *bus,
155 return PCIBIOS_DEVICE_NOT_FOUND; 155 return PCIBIOS_DEVICE_NOT_FOUND;
156} 156}
157 157
158struct pci_ops rtas_pci_ops = { 158static struct pci_ops rtas_pci_ops = {
159 .read = rtas_pci_read_config, 159 .read = rtas_pci_read_config,
160 .write = rtas_pci_write_config, 160 .write = rtas_pci_write_config,
161}; 161};
162 162
163int is_python(struct device_node *dev) 163static int is_python(struct device_node *dev)
164{ 164{
165 const char *model = of_get_property(dev, "model", NULL); 165 const char *model = of_get_property(dev, "model", NULL);
166 166
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
index 5112a4aa801d..bef0be3fd98b 100644
--- a/arch/powerpc/kernel/setup_32.c
+++ b/arch/powerpc/kernel/setup_32.c
@@ -248,6 +248,28 @@ static void __init irqstack_early_init(void)
248#define irqstack_early_init() 248#define irqstack_early_init()
249#endif 249#endif
250 250
251#if defined(CONFIG_BOOKE) || defined(CONFIG_40x)
252static void __init exc_lvl_early_init(void)
253{
254 unsigned int i;
255
256 /* interrupt stacks must be in lowmem, we get that for free on ppc32
257 * as the lmb is limited to lowmem by LMB_REAL_LIMIT */
258 for_each_possible_cpu(i) {
259 critirq_ctx[i] = (struct thread_info *)
260 __va(lmb_alloc(THREAD_SIZE, THREAD_SIZE));
261#ifdef CONFIG_BOOKE
262 dbgirq_ctx[i] = (struct thread_info *)
263 __va(lmb_alloc(THREAD_SIZE, THREAD_SIZE));
264 mcheckirq_ctx[i] = (struct thread_info *)
265 __va(lmb_alloc(THREAD_SIZE, THREAD_SIZE));
266#endif
267 }
268}
269#else
270#define exc_lvl_early_init()
271#endif
272
251/* Warning, IO base is not yet inited */ 273/* Warning, IO base is not yet inited */
252void __init setup_arch(char **cmdline_p) 274void __init setup_arch(char **cmdline_p)
253{ 275{
@@ -305,6 +327,8 @@ void __init setup_arch(char **cmdline_p)
305 init_mm.end_data = (unsigned long) _edata; 327 init_mm.end_data = (unsigned long) _edata;
306 init_mm.brk = klimit; 328 init_mm.brk = klimit;
307 329
330 exc_lvl_early_init();
331
308 irqstack_early_init(); 332 irqstack_early_init();
309 333
310 /* set up the bootmem stuff with available memory */ 334 /* set up the bootmem stuff with available memory */
diff --git a/arch/powerpc/kernel/signal.c b/arch/powerpc/kernel/signal.c
index a65a44fbe523..ad55488939c3 100644
--- a/arch/powerpc/kernel/signal.c
+++ b/arch/powerpc/kernel/signal.c
@@ -120,7 +120,7 @@ int do_signal(sigset_t *oldset, struct pt_regs *regs)
120 int ret; 120 int ret;
121 int is32 = is_32bit_task(); 121 int is32 = is_32bit_task();
122 122
123 if (test_thread_flag(TIF_RESTORE_SIGMASK)) 123 if (current_thread_info()->local_flags & _TLF_RESTORE_SIGMASK)
124 oldset = &current->saved_sigmask; 124 oldset = &current->saved_sigmask;
125 else if (!oldset) 125 else if (!oldset)
126 oldset = &current->blocked; 126 oldset = &current->blocked;
@@ -131,9 +131,10 @@ int do_signal(sigset_t *oldset, struct pt_regs *regs)
131 check_syscall_restart(regs, &ka, signr > 0); 131 check_syscall_restart(regs, &ka, signr > 0);
132 132
133 if (signr <= 0) { 133 if (signr <= 0) {
134 struct thread_info *ti = current_thread_info();
134 /* No signal to deliver -- put the saved sigmask back */ 135 /* No signal to deliver -- put the saved sigmask back */
135 if (test_thread_flag(TIF_RESTORE_SIGMASK)) { 136 if (ti->local_flags & _TLF_RESTORE_SIGMASK) {
136 clear_thread_flag(TIF_RESTORE_SIGMASK); 137 ti->local_flags &= ~_TLF_RESTORE_SIGMASK;
137 sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL); 138 sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
138 } 139 }
139 return 0; /* no signals delivered */ 140 return 0; /* no signals delivered */
@@ -169,10 +170,9 @@ int do_signal(sigset_t *oldset, struct pt_regs *regs)
169 170
170 /* 171 /*
171 * A signal was successfully delivered; the saved sigmask is in 172 * A signal was successfully delivered; the saved sigmask is in
172 * its frame, and we can clear the TIF_RESTORE_SIGMASK flag. 173 * its frame, and we can clear the TLF_RESTORE_SIGMASK flag.
173 */ 174 */
174 if (test_thread_flag(TIF_RESTORE_SIGMASK)) 175 current_thread_info()->local_flags &= ~_TLF_RESTORE_SIGMASK;
175 clear_thread_flag(TIF_RESTORE_SIGMASK);
176 } 176 }
177 177
178 return ret; 178 return ret;
diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c
index ad6943468ee9..4ae16d179803 100644
--- a/arch/powerpc/kernel/signal_32.c
+++ b/arch/powerpc/kernel/signal_32.c
@@ -243,7 +243,7 @@ long sys_sigsuspend(old_sigset_t mask)
243 243
244 current->state = TASK_INTERRUPTIBLE; 244 current->state = TASK_INTERRUPTIBLE;
245 schedule(); 245 schedule();
246 set_thread_flag(TIF_RESTORE_SIGMASK); 246 set_restore_sigmask();
247 return -ERESTARTNOHAND; 247 return -ERESTARTNOHAND;
248} 248}
249 249
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
index 1457aa0a08f1..ba7989ffaeee 100644
--- a/arch/powerpc/kernel/smp.c
+++ b/arch/powerpc/kernel/smp.c
@@ -365,12 +365,8 @@ void smp_call_function_interrupt(void)
365 } 365 }
366} 366}
367 367
368extern struct gettimeofday_struct do_gtod;
369
370struct thread_info *current_set[NR_CPUS]; 368struct thread_info *current_set[NR_CPUS];
371 369
372DECLARE_PER_CPU(unsigned int, pvr);
373
374static void __devinit smp_store_cpu_info(int id) 370static void __devinit smp_store_cpu_info(int id)
375{ 371{
376 per_cpu(pvr, id) = mfspr(SPRN_PVR); 372 per_cpu(pvr, id) = mfspr(SPRN_PVR);
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c
index 73401e83739a..c73fc33aa817 100644
--- a/arch/powerpc/kernel/time.c
+++ b/arch/powerpc/kernel/time.c
@@ -129,7 +129,7 @@ static unsigned long __initdata iSeries_recal_titan;
129static signed long __initdata iSeries_recal_tb; 129static signed long __initdata iSeries_recal_tb;
130 130
131/* Forward declaration is only needed for iSereis compiles */ 131/* Forward declaration is only needed for iSereis compiles */
132void __init clocksource_init(void); 132static void __init clocksource_init(void);
133#endif 133#endif
134 134
135#define XSEC_PER_SEC (1024*1024) 135#define XSEC_PER_SEC (1024*1024)
@@ -150,8 +150,8 @@ u64 tb_to_xs;
150unsigned tb_to_us; 150unsigned tb_to_us;
151 151
152#define TICKLEN_SCALE NTP_SCALE_SHIFT 152#define TICKLEN_SCALE NTP_SCALE_SHIFT
153u64 last_tick_len; /* units are ns / 2^TICKLEN_SCALE */ 153static u64 last_tick_len; /* units are ns / 2^TICKLEN_SCALE */
154u64 ticklen_to_xs; /* 0.64 fraction */ 154static u64 ticklen_to_xs; /* 0.64 fraction */
155 155
156/* If last_tick_len corresponds to about 1/HZ seconds, then 156/* If last_tick_len corresponds to about 1/HZ seconds, then
157 last_tick_len << TICKLEN_SHIFT will be about 2^63. */ 157 last_tick_len << TICKLEN_SHIFT will be about 2^63. */
@@ -164,7 +164,7 @@ static u64 tb_to_ns_scale __read_mostly;
164static unsigned tb_to_ns_shift __read_mostly; 164static unsigned tb_to_ns_shift __read_mostly;
165static unsigned long boot_tb __read_mostly; 165static unsigned long boot_tb __read_mostly;
166 166
167struct gettimeofday_struct do_gtod; 167static struct gettimeofday_struct do_gtod;
168 168
169extern struct timezone sys_tz; 169extern struct timezone sys_tz;
170static long timezone_offset; 170static long timezone_offset;
@@ -832,7 +832,7 @@ void update_vsyscall_tz(void)
832 ++vdso_data->tb_update_count; 832 ++vdso_data->tb_update_count;
833} 833}
834 834
835void __init clocksource_init(void) 835static void __init clocksource_init(void)
836{ 836{
837 struct clocksource *clock; 837 struct clocksource *clock;
838 838
diff --git a/arch/powerpc/kernel/vdso64/vdso64.lds.S b/arch/powerpc/kernel/vdso64/vdso64.lds.S
index 932b3fdb34b9..7d6585f90277 100644
--- a/arch/powerpc/kernel/vdso64/vdso64.lds.S
+++ b/arch/powerpc/kernel/vdso64/vdso64.lds.S
@@ -43,15 +43,15 @@ SECTIONS
43 .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } 43 .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
44 .rodata1 : { *(.rodata1) } 44 .rodata1 : { *(.rodata1) }
45 45
46 .dynamic : { *(.dynamic) } :text :dynamic
47
46 .eh_frame_hdr : { *(.eh_frame_hdr) } :text :eh_frame_hdr 48 .eh_frame_hdr : { *(.eh_frame_hdr) } :text :eh_frame_hdr
47 .eh_frame : { KEEP (*(.eh_frame)) } :text 49 .eh_frame : { KEEP (*(.eh_frame)) } :text
48 .gcc_except_table : { *(.gcc_except_table) } 50 .gcc_except_table : { *(.gcc_except_table) }
51 .rela.dyn ALIGN(8) : { *(.rela.dyn) }
49 52
50 .opd ALIGN(8) : { KEEP (*(.opd)) } 53 .opd ALIGN(8) : { KEEP (*(.opd)) }
51 .got ALIGN(8) : { *(.got .toc) } 54 .got ALIGN(8) : { *(.got .toc) }
52 .rela.dyn ALIGN(8) : { *(.rela.dyn) }
53
54 .dynamic : { *(.dynamic) } :text :dynamic
55 55
56 _end = .; 56 _end = .;
57 PROVIDE(end = .); 57 PROVIDE(end = .);
diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c
index 0f2d239d94c4..bf5b6d7ed30f 100644
--- a/arch/powerpc/mm/hash_utils_64.c
+++ b/arch/powerpc/mm/hash_utils_64.c
@@ -120,7 +120,7 @@ static DEFINE_SPINLOCK(linear_map_hash_lock);
120 120
121/* Pre-POWER4 CPUs (4k pages only) 121/* Pre-POWER4 CPUs (4k pages only)
122 */ 122 */
123struct mmu_psize_def mmu_psize_defaults_old[] = { 123static struct mmu_psize_def mmu_psize_defaults_old[] = {
124 [MMU_PAGE_4K] = { 124 [MMU_PAGE_4K] = {
125 .shift = 12, 125 .shift = 12,
126 .sllp = 0, 126 .sllp = 0,
@@ -134,7 +134,7 @@ struct mmu_psize_def mmu_psize_defaults_old[] = {
134 * 134 *
135 * Support for 16Mb large pages 135 * Support for 16Mb large pages
136 */ 136 */
137struct mmu_psize_def mmu_psize_defaults_gp[] = { 137static struct mmu_psize_def mmu_psize_defaults_gp[] = {
138 [MMU_PAGE_4K] = { 138 [MMU_PAGE_4K] = {
139 .shift = 12, 139 .shift = 12,
140 .sllp = 0, 140 .sllp = 0,
@@ -533,8 +533,6 @@ void __init htab_initialize(void)
533 unsigned long base = 0, size = 0, limit; 533 unsigned long base = 0, size = 0, limit;
534 int i; 534 int i;
535 535
536 extern unsigned long tce_alloc_start, tce_alloc_end;
537
538 DBG(" -> htab_initialize()\n"); 536 DBG(" -> htab_initialize()\n");
539 537
540 /* Initialize segment sizes */ 538 /* Initialize segment sizes */
diff --git a/arch/powerpc/mm/init_32.c b/arch/powerpc/mm/init_32.c
index 1952b4d3fa7f..45418590b6a9 100644
--- a/arch/powerpc/mm/init_32.c
+++ b/arch/powerpc/mm/init_32.c
@@ -43,6 +43,7 @@
43#include <asm/btext.h> 43#include <asm/btext.h>
44#include <asm/tlb.h> 44#include <asm/tlb.h>
45#include <asm/sections.h> 45#include <asm/sections.h>
46#include <asm/system.h>
46 47
47#include "mmu_decl.h" 48#include "mmu_decl.h"
48 49
@@ -76,8 +77,6 @@ void MMU_init(void);
76/* XXX should be in current.h -- paulus */ 77/* XXX should be in current.h -- paulus */
77extern struct task_struct *current_set[NR_CPUS]; 78extern struct task_struct *current_set[NR_CPUS];
78 79
79extern int init_bootmem_done;
80
81/* 80/*
82 * this tells the system to map all of ram with the segregs 81 * this tells the system to map all of ram with the segregs
83 * (i.e. page tables) instead of the bats. 82 * (i.e. page tables) instead of the bats.
diff --git a/arch/powerpc/mm/init_64.c b/arch/powerpc/mm/init_64.c
index 6aa65375abf5..6ef63caca682 100644
--- a/arch/powerpc/mm/init_64.c
+++ b/arch/powerpc/mm/init_64.c
@@ -185,7 +185,7 @@ void pgtable_cache_init(void)
185 * do this by hand as the proffered address may not be correctly aligned. 185 * do this by hand as the proffered address may not be correctly aligned.
186 * Subtraction of non-aligned pointers produces undefined results. 186 * Subtraction of non-aligned pointers produces undefined results.
187 */ 187 */
188unsigned long __meminit vmemmap_section_start(unsigned long page) 188static unsigned long __meminit vmemmap_section_start(unsigned long page)
189{ 189{
190 unsigned long offset = page - ((unsigned long)(vmemmap)); 190 unsigned long offset = page - ((unsigned long)(vmemmap));
191 191
@@ -198,7 +198,7 @@ unsigned long __meminit vmemmap_section_start(unsigned long page)
198 * which overlaps this vmemmap page is initialised then this page is 198 * which overlaps this vmemmap page is initialised then this page is
199 * initialised already. 199 * initialised already.
200 */ 200 */
201int __meminit vmemmap_populated(unsigned long start, int page_size) 201static int __meminit vmemmap_populated(unsigned long start, int page_size)
202{ 202{
203 unsigned long end = start + page_size; 203 unsigned long end = start + page_size;
204 204
diff --git a/arch/powerpc/mm/stab.c b/arch/powerpc/mm/stab.c
index efbbd13d93e5..60e6032a8088 100644
--- a/arch/powerpc/mm/stab.c
+++ b/arch/powerpc/mm/stab.c
@@ -30,8 +30,8 @@ struct stab_entry {
30}; 30};
31 31
32#define NR_STAB_CACHE_ENTRIES 8 32#define NR_STAB_CACHE_ENTRIES 8
33DEFINE_PER_CPU(long, stab_cache_ptr); 33static DEFINE_PER_CPU(long, stab_cache_ptr);
34DEFINE_PER_CPU(long, stab_cache[NR_STAB_CACHE_ENTRIES]); 34static DEFINE_PER_CPU(long, stab_cache[NR_STAB_CACHE_ENTRIES]);
35 35
36/* 36/*
37 * Create a segment table entry for the given esid/vsid pair. 37 * Create a segment table entry for the given esid/vsid pair.
diff --git a/arch/powerpc/mm/tlb_64.c b/arch/powerpc/mm/tlb_64.c
index e2d867ce1c7e..509bc560159b 100644
--- a/arch/powerpc/mm/tlb_64.c
+++ b/arch/powerpc/mm/tlb_64.c
@@ -37,8 +37,8 @@ DEFINE_PER_CPU(struct ppc64_tlb_batch, ppc64_tlb_batch);
37 * include/asm-powerpc/tlb.h file -- tgall 37 * include/asm-powerpc/tlb.h file -- tgall
38 */ 38 */
39DEFINE_PER_CPU(struct mmu_gather, mmu_gathers); 39DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
40DEFINE_PER_CPU(struct pte_freelist_batch *, pte_freelist_cur); 40static DEFINE_PER_CPU(struct pte_freelist_batch *, pte_freelist_cur);
41unsigned long pte_freelist_forced_free; 41static unsigned long pte_freelist_forced_free;
42 42
43struct pte_freelist_batch 43struct pte_freelist_batch
44{ 44{
@@ -47,9 +47,6 @@ struct pte_freelist_batch
47 pgtable_free_t tables[0]; 47 pgtable_free_t tables[0];
48}; 48};
49 49
50DEFINE_PER_CPU(struct pte_freelist_batch *, pte_freelist_cur);
51unsigned long pte_freelist_forced_free;
52
53#define PTE_FREELIST_SIZE \ 50#define PTE_FREELIST_SIZE \
54 ((PAGE_SIZE - sizeof(struct pte_freelist_batch)) \ 51 ((PAGE_SIZE - sizeof(struct pte_freelist_batch)) \
55 / sizeof(pgtable_free_t)) 52 / sizeof(pgtable_free_t))
diff --git a/arch/powerpc/platforms/44x/warp-nand.c b/arch/powerpc/platforms/44x/warp-nand.c
index 9150318cfc56..d293c702e734 100644
--- a/arch/powerpc/platforms/44x/warp-nand.c
+++ b/arch/powerpc/platforms/44x/warp-nand.c
@@ -11,8 +11,10 @@
11#include <linux/mtd/partitions.h> 11#include <linux/mtd/partitions.h>
12#include <linux/mtd/nand.h> 12#include <linux/mtd/nand.h>
13#include <linux/mtd/ndfc.h> 13#include <linux/mtd/ndfc.h>
14#include <linux/of.h>
14#include <asm/machdep.h> 15#include <asm/machdep.h>
15 16
17
16#ifdef CONFIG_MTD_NAND_NDFC 18#ifdef CONFIG_MTD_NAND_NDFC
17 19
18#define CS_NAND_0 1 /* use chip select 1 for NAND device 0 */ 20#define CS_NAND_0 1 /* use chip select 1 for NAND device 0 */
@@ -35,13 +37,23 @@ static struct mtd_partition nand_parts[] = {
35 { 37 {
36 .name = "root", 38 .name = "root",
37 .offset = 0x0200000, 39 .offset = 0x0200000,
38 .size = 0x3400000 40 .size = 0x3E00000
41 },
42 {
43 .name = "persistent",
44 .offset = 0x4000000,
45 .size = 0x4000000
39 }, 46 },
40 { 47 {
41 .name = "user", 48 .name = "persistent1",
42 .offset = 0x3600000, 49 .offset = 0x8000000,
43 .size = 0x0A00000 50 .size = 0x4000000
44 }, 51 },
52 {
53 .name = "persistent2",
54 .offset = 0xC000000,
55 .size = 0x4000000
56 }
45}; 57};
46 58
47struct ndfc_controller_settings warp_ndfc_settings = { 59struct ndfc_controller_settings warp_ndfc_settings = {
@@ -67,19 +79,15 @@ static struct platform_device warp_ndfc_device = {
67 .resource = &warp_ndfc, 79 .resource = &warp_ndfc,
68}; 80};
69 81
70static struct nand_ecclayout nand_oob_16 = { 82/* Do NOT set the ecclayout: let it default so it is correct for both
71 .eccbytes = 3, 83 * 64M and 256M flash chips.
72 .eccpos = { 0, 1, 2, 3, 6, 7 }, 84 */
73 .oobfree = { {.offset = 8, .length = 16} }
74};
75
76static struct platform_nand_chip warp_nand_chip0 = { 85static struct platform_nand_chip warp_nand_chip0 = {
77 .nr_chips = 1, 86 .nr_chips = 1,
78 .chip_offset = CS_NAND_0, 87 .chip_offset = CS_NAND_0,
79 .nr_partitions = ARRAY_SIZE(nand_parts), 88 .nr_partitions = ARRAY_SIZE(nand_parts),
80 .partitions = nand_parts, 89 .partitions = nand_parts,
81 .chip_delay = 50, 90 .chip_delay = 20,
82 .ecclayout = &nand_oob_16,
83 .priv = &warp_chip0_settings, 91 .priv = &warp_chip0_settings,
84}; 92};
85 93
@@ -96,6 +104,23 @@ static struct platform_device warp_nand_device = {
96 104
97static int warp_setup_nand_flash(void) 105static int warp_setup_nand_flash(void)
98{ 106{
107 struct device_node *np;
108
109 /* Try to detect a rev A based on NOR size. */
110 np = of_find_compatible_node(NULL, NULL, "cfi-flash");
111 if (np) {
112 struct property *pp;
113
114 pp = of_find_property(np, "reg", NULL);
115 if (pp && (pp->length == 12)) {
116 u32 *v = pp->value;
117 if (v[2] == 0x4000000)
118 /* Rev A = 64M NAND */
119 warp_nand_chip0.nr_partitions = 2;
120 }
121 of_node_put(np);
122 }
123
99 platform_device_register(&warp_ndfc_device); 124 platform_device_register(&warp_ndfc_device);
100 platform_device_register(&warp_nand_device); 125 platform_device_register(&warp_nand_device);
101 126
diff --git a/arch/powerpc/platforms/44x/warp.c b/arch/powerpc/platforms/44x/warp.c
index 39cf6150a72b..9565995cba7f 100644
--- a/arch/powerpc/platforms/44x/warp.c
+++ b/arch/powerpc/platforms/44x/warp.c
@@ -12,6 +12,9 @@
12#include <linux/init.h> 12#include <linux/init.h>
13#include <linux/of_platform.h> 13#include <linux/of_platform.h>
14#include <linux/kthread.h> 14#include <linux/kthread.h>
15#include <linux/i2c.h>
16#include <linux/interrupt.h>
17#include <linux/delay.h>
15 18
16#include <asm/machdep.h> 19#include <asm/machdep.h>
17#include <asm/prom.h> 20#include <asm/prom.h>
@@ -27,6 +30,18 @@ static __initdata struct of_device_id warp_of_bus[] = {
27 {}, 30 {},
28}; 31};
29 32
33static __initdata struct i2c_board_info warp_i2c_info[] = {
34 { I2C_BOARD_INFO("ad7414", 0x4a) }
35};
36
37static int __init warp_arch_init(void)
38{
39 /* This should go away once support is moved to the dts. */
40 i2c_register_board_info(0, warp_i2c_info, ARRAY_SIZE(warp_i2c_info));
41 return 0;
42}
43machine_arch_initcall(warp, warp_arch_init);
44
30static int __init warp_device_probe(void) 45static int __init warp_device_probe(void)
31{ 46{
32 of_platform_bus_probe(NULL, warp_of_bus, NULL); 47 of_platform_bus_probe(NULL, warp_of_bus, NULL);
@@ -52,61 +67,232 @@ define_machine(warp) {
52}; 67};
53 68
54 69
55#define LED_GREEN (0x80000000 >> 0) 70/* I am not sure this is the best place for this... */
56#define LED_RED (0x80000000 >> 1) 71static int __init warp_post_info(void)
72{
73 struct device_node *np;
74 void __iomem *fpga;
75 u32 post1, post2;
76
77 /* Sighhhh... POST information is in the sd area. */
78 np = of_find_compatible_node(NULL, NULL, "pika,fpga-sd");
79 if (np == NULL)
80 return -ENOENT;
81
82 fpga = of_iomap(np, 0);
83 of_node_put(np);
84 if (fpga == NULL)
85 return -ENOENT;
86
87 post1 = in_be32(fpga + 0x40);
88 post2 = in_be32(fpga + 0x44);
89
90 iounmap(fpga);
91
92 if (post1 || post2)
93 printk(KERN_INFO "Warp POST %08x %08x\n", post1, post2);
94 else
95 printk(KERN_INFO "Warp POST OK\n");
96
97 return 0;
98}
99machine_late_initcall(warp, warp_post_info);
100
101
102#ifdef CONFIG_SENSORS_AD7414
103
104static LIST_HEAD(dtm_shutdown_list);
105static void __iomem *dtm_fpga;
106static void __iomem *gpio_base;
107
108
109struct dtm_shutdown {
110 struct list_head list;
111 void (*func)(void *arg);
112 void *arg;
113};
57 114
58 115
59/* This is for the power LEDs 1 = on, 0 = off, -1 = leave alone */ 116int pika_dtm_register_shutdown(void (*func)(void *arg), void *arg)
60void warp_set_power_leds(int green, int red)
61{ 117{
62 static void __iomem *gpio_base = NULL; 118 struct dtm_shutdown *shutdown;
63 unsigned leds; 119
64 120 shutdown = kmalloc(sizeof(struct dtm_shutdown), GFP_KERNEL);
65 if (gpio_base == NULL) { 121 if (shutdown == NULL)
66 struct device_node *np; 122 return -ENOMEM;
67 123
68 /* Power LEDS are on the second GPIO controller */ 124 shutdown->func = func;
69 np = of_find_compatible_node(NULL, NULL, "ibm,gpio-440EP"); 125 shutdown->arg = arg;
70 if (np) 126
71 np = of_find_compatible_node(np, NULL, "ibm,gpio-440EP"); 127 list_add(&shutdown->list, &dtm_shutdown_list);
72 if (np == NULL) { 128
73 printk(KERN_ERR __FILE__ ": Unable to find gpio\n"); 129 return 0;
74 return; 130}
131
132int pika_dtm_unregister_shutdown(void (*func)(void *arg), void *arg)
133{
134 struct dtm_shutdown *shutdown;
135
136 list_for_each_entry(shutdown, &dtm_shutdown_list, list)
137 if (shutdown->func == func && shutdown->arg == arg) {
138 list_del(&shutdown->list);
139 kfree(shutdown);
140 return 0;
141 }
142
143 return -EINVAL;
144}
145
146static irqreturn_t temp_isr(int irq, void *context)
147{
148 struct dtm_shutdown *shutdown;
149
150 local_irq_disable();
151
152 /* Run through the shutdown list. */
153 list_for_each_entry(shutdown, &dtm_shutdown_list, list)
154 shutdown->func(shutdown->arg);
155
156 printk(KERN_EMERG "\n\nCritical Temperature Shutdown\n");
157
158 while (1) {
159 if (dtm_fpga) {
160 unsigned reset = in_be32(dtm_fpga + 0x14);
161 out_be32(dtm_fpga + 0x14, reset);
75 } 162 }
76 163
77 gpio_base = of_iomap(np, 0); 164 if (gpio_base) {
78 of_node_put(np); 165 unsigned leds = in_be32(gpio_base);
79 if (gpio_base == NULL) { 166
80 printk(KERN_ERR __FILE__ ": Unable to map gpio"); 167 /* green off, red toggle */
81 return; 168 leds &= ~0x80000000;
169 leds ^= 0x40000000;
170
171 out_be32(gpio_base, leds);
82 } 172 }
173
174 mdelay(500);
175 }
176}
177
178static int pika_setup_leds(void)
179{
180 struct device_node *np;
181 const u32 *gpios;
182 int len;
183
184 np = of_find_compatible_node(NULL, NULL, "linux,gpio-led");
185 if (!np) {
186 printk(KERN_ERR __FILE__ ": Unable to find gpio-led\n");
187 return -ENOENT;
83 } 188 }
84 189
85 leds = in_be32(gpio_base); 190 gpios = of_get_property(np, "gpios", &len);
191 of_node_put(np);
192 if (!gpios || len < 4) {
193 printk(KERN_ERR __FILE__
194 ": Unable to get gpios property (%d)\n", len);
195 return -ENOENT;
196 }
86 197
87 switch (green) { 198 np = of_find_node_by_phandle(gpios[0]);
88 case 0: leds &= ~LED_GREEN; break; 199 if (!np) {
89 case 1: leds |= LED_GREEN; break; 200 printk(KERN_ERR __FILE__ ": Unable to find gpio\n");
201 return -ENOENT;
90 } 202 }
91 switch (red) { 203
92 case 0: leds &= ~LED_RED; break; 204 gpio_base = of_iomap(np, 0);
93 case 1: leds |= LED_RED; break; 205 of_node_put(np);
206 if (!gpio_base) {
207 printk(KERN_ERR __FILE__ ": Unable to map gpio");
208 return -ENOMEM;
94 } 209 }
95 210
96 out_be32(gpio_base, leds); 211 return 0;
97} 212}
98EXPORT_SYMBOL(warp_set_power_leds);
99 213
214static void pika_setup_critical_temp(struct i2c_client *client)
215{
216 struct device_node *np;
217 int irq, rc;
218
219 /* Do this before enabling critical temp interrupt since we
220 * may immediately interrupt.
221 */
222 pika_setup_leds();
223
224 /* These registers are in 1 degree increments. */
225 i2c_smbus_write_byte_data(client, 2, 65); /* Thigh */
226 i2c_smbus_write_byte_data(client, 3, 55); /* Tlow */
227
228 np = of_find_compatible_node(NULL, NULL, "adi,ad7414");
229 if (np == NULL) {
230 printk(KERN_ERR __FILE__ ": Unable to find ad7414\n");
231 return;
232 }
233
234 irq = irq_of_parse_and_map(np, 0);
235 of_node_put(np);
236 if (irq == NO_IRQ) {
237 printk(KERN_ERR __FILE__ ": Unable to get ad7414 irq\n");
238 return;
239 }
240
241 rc = request_irq(irq, temp_isr, 0, "ad7414", NULL);
242 if (rc) {
243 printk(KERN_ERR __FILE__
244 ": Unable to request ad7414 irq %d = %d\n", irq, rc);
245 return;
246 }
247}
248
249static inline void pika_dtm_check_fan(void __iomem *fpga)
250{
251 static int fan_state;
252 u32 fan = in_be32(fpga + 0x34) & (1 << 14);
253
254 if (fan_state != fan) {
255 fan_state = fan;
256 if (fan)
257 printk(KERN_WARNING "Fan rotation error detected."
258 " Please check hardware.\n");
259 }
260}
100 261
101#ifdef CONFIG_SENSORS_AD7414
102static int pika_dtm_thread(void __iomem *fpga) 262static int pika_dtm_thread(void __iomem *fpga)
103{ 263{
104 extern int ad7414_get_temp(int index); 264 struct i2c_adapter *adap;
265 struct i2c_client *client;
266
267 /* We loop in case either driver was compiled as a module and
268 * has not been insmoded yet.
269 */
270 while (!(adap = i2c_get_adapter(0))) {
271 set_current_state(TASK_INTERRUPTIBLE);
272 schedule_timeout(HZ);
273 }
274
275 while (1) {
276 list_for_each_entry(client, &adap->clients, list)
277 if (client->addr == 0x4a)
278 goto found_it;
279
280 set_current_state(TASK_INTERRUPTIBLE);
281 schedule_timeout(HZ);
282 }
283
284found_it:
285 i2c_put_adapter(adap);
286
287 pika_setup_critical_temp(client);
288
289 printk(KERN_INFO "PIKA DTM thread running.\n");
105 290
106 while (!kthread_should_stop()) { 291 while (!kthread_should_stop()) {
107 int temp = ad7414_get_temp(0); 292 u16 temp = swab16(i2c_smbus_read_word_data(client, 0));
293 out_be32(fpga + 0x20, temp);
108 294
109 out_be32(fpga, temp); 295 pika_dtm_check_fan(fpga);
110 296
111 set_current_state(TASK_INTERRUPTIBLE); 297 set_current_state(TASK_INTERRUPTIBLE);
112 schedule_timeout(HZ); 298 schedule_timeout(HZ);
@@ -115,37 +301,44 @@ static int pika_dtm_thread(void __iomem *fpga)
115 return 0; 301 return 0;
116} 302}
117 303
304
118static int __init pika_dtm_start(void) 305static int __init pika_dtm_start(void)
119{ 306{
120 struct task_struct *dtm_thread; 307 struct task_struct *dtm_thread;
121 struct device_node *np; 308 struct device_node *np;
122 struct resource res;
123 void __iomem *fpga;
124 309
125 np = of_find_compatible_node(NULL, NULL, "pika,fpga"); 310 np = of_find_compatible_node(NULL, NULL, "pika,fpga");
126 if (np == NULL) 311 if (np == NULL)
127 return -ENOENT; 312 return -ENOENT;
128 313
129 /* We do not call of_iomap here since it would map in the entire 314 dtm_fpga = of_iomap(np, 0);
130 * fpga space, which is over 8k.
131 */
132 if (of_address_to_resource(np, 0, &res)) {
133 of_node_put(np);
134 return -ENOENT;
135 }
136 of_node_put(np); 315 of_node_put(np);
137 316 if (dtm_fpga == NULL)
138 fpga = ioremap(res.start, 0x24);
139 if (fpga == NULL)
140 return -ENOENT; 317 return -ENOENT;
141 318
142 dtm_thread = kthread_run(pika_dtm_thread, fpga + 0x20, "pika-dtm"); 319 dtm_thread = kthread_run(pika_dtm_thread, dtm_fpga, "pika-dtm");
143 if (IS_ERR(dtm_thread)) { 320 if (IS_ERR(dtm_thread)) {
144 iounmap(fpga); 321 iounmap(dtm_fpga);
145 return PTR_ERR(dtm_thread); 322 return PTR_ERR(dtm_thread);
146 } 323 }
147 324
148 return 0; 325 return 0;
149} 326}
150device_initcall(pika_dtm_start); 327machine_late_initcall(warp, pika_dtm_start);
328
329#else /* !CONFIG_SENSORS_AD7414 */
330
331int pika_dtm_register_shutdown(void (*func)(void *arg), void *arg)
332{
333 return 0;
334}
335
336int pika_dtm_unregister_shutdown(void (*func)(void *arg), void *arg)
337{
338 return 0;
339}
340
151#endif 341#endif
342
343EXPORT_SYMBOL(pika_dtm_register_shutdown);
344EXPORT_SYMBOL(pika_dtm_unregister_shutdown);
diff --git a/arch/powerpc/platforms/83xx/Kconfig b/arch/powerpc/platforms/83xx/Kconfig
index 13587e2e8680..583b0c7409c9 100644
--- a/arch/powerpc/platforms/83xx/Kconfig
+++ b/arch/powerpc/platforms/83xx/Kconfig
@@ -79,6 +79,15 @@ config SBC834x
79 help 79 help
80 This option enables support for the Wind River SBC834x board. 80 This option enables support for the Wind River SBC834x board.
81 81
82config ASP834x
83 bool "Analogue & Micro ASP 834x"
84 select PPC_MPC834x
85 select REDBOOT
86 help
87 This enables support for the Analogue & Micro ASP 83xx
88 board.
89
90
82endif 91endif
83 92
84# used for usb 93# used for usb
diff --git a/arch/powerpc/platforms/83xx/Makefile b/arch/powerpc/platforms/83xx/Makefile
index 7e6dd3e259d8..76494bed69ae 100644
--- a/arch/powerpc/platforms/83xx/Makefile
+++ b/arch/powerpc/platforms/83xx/Makefile
@@ -12,3 +12,4 @@ obj-$(CONFIG_MPC832x_MDS) += mpc832x_mds.o
12obj-$(CONFIG_MPC837x_MDS) += mpc837x_mds.o 12obj-$(CONFIG_MPC837x_MDS) += mpc837x_mds.o
13obj-$(CONFIG_SBC834x) += sbc834x.o 13obj-$(CONFIG_SBC834x) += sbc834x.o
14obj-$(CONFIG_MPC837x_RDB) += mpc837x_rdb.o 14obj-$(CONFIG_MPC837x_RDB) += mpc837x_rdb.o
15obj-$(CONFIG_ASP834x) += asp834x.o
diff --git a/arch/powerpc/platforms/83xx/asp834x.c b/arch/powerpc/platforms/83xx/asp834x.c
new file mode 100644
index 000000000000..bb30d67ad0a2
--- /dev/null
+++ b/arch/powerpc/platforms/83xx/asp834x.c
@@ -0,0 +1,90 @@
1/*
2 * arch/powerpc/platforms/83xx/asp834x.c
3 *
4 * Analogue & Micro ASP8347 board specific routines
5 * clone of mpc834x_itx
6 *
7 * Copyright 2008 Codehermit
8 *
9 * Maintainer: Bryan O'Donoghue <bodonoghue@codhermit.ie>
10 *
11 * This program is free software; you can redistribute it and/or modify it
12 * under the terms of the GNU General Public License as published by the
13 * Free Software Foundation; either version 2 of the License, or (at your
14 * option) any later version.
15 */
16
17#include <linux/pci.h>
18#include <linux/of_platform.h>
19
20#include <asm/time.h>
21#include <asm/ipic.h>
22#include <asm/udbg.h>
23
24#include "mpc83xx.h"
25
26/* ************************************************************************
27 *
28 * Setup the architecture
29 *
30 */
31static void __init asp834x_setup_arch(void)
32{
33 if (ppc_md.progress)
34 ppc_md.progress("asp834x_setup_arch()", 0);
35
36 mpc834x_usb_cfg();
37}
38
39static void __init asp834x_init_IRQ(void)
40{
41 struct device_node *np;
42
43 np = of_find_node_by_type(NULL, "ipic");
44 if (!np)
45 return;
46
47 ipic_init(np, 0);
48
49 of_node_put(np);
50
51 /* Initialize the default interrupt mapping priorities,
52 * in case the boot rom changed something on us.
53 */
54 ipic_set_default_priority();
55}
56
57static struct __initdata of_device_id asp8347_ids[] = {
58 { .type = "soc", },
59 { .compatible = "soc", },
60 { .compatible = "simple-bus", },
61 {},
62};
63
64static int __init asp8347_declare_of_platform_devices(void)
65{
66 of_platform_bus_probe(NULL, asp8347_ids, NULL);
67 return 0;
68}
69machine_device_initcall(asp834x, asp8347_declare_of_platform_devices);
70
71/*
72 * Called very early, MMU is off, device-tree isn't unflattened
73 */
74static int __init asp834x_probe(void)
75{
76 unsigned long root = of_get_flat_dt_root();
77 return of_flat_dt_is_compatible(root, "analogue-and-micro,asp8347e");
78}
79
80define_machine(asp834x) {
81 .name = "ASP8347E",
82 .probe = asp834x_probe,
83 .setup_arch = asp834x_setup_arch,
84 .init_IRQ = asp834x_init_IRQ,
85 .get_irq = ipic_get_irq,
86 .restart = mpc83xx_restart,
87 .time_init = mpc83xx_time_init,
88 .calibrate_decr = generic_calibrate_decr,
89 .progress = udbg_progress,
90};
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_ds.c b/arch/powerpc/platforms/85xx/mpc85xx_ds.c
index dfd8b4ad9b28..b010dc9dec65 100644
--- a/arch/powerpc/platforms/85xx/mpc85xx_ds.c
+++ b/arch/powerpc/platforms/85xx/mpc85xx_ds.c
@@ -78,7 +78,8 @@ void __init mpc85xx_ds_pic_init(void)
78 } 78 }
79 79
80 mpic = mpic_alloc(np, r.start, 80 mpic = mpic_alloc(np, r.start,
81 MPIC_PRIMARY | MPIC_WANTS_RESET | MPIC_BIG_ENDIAN, 81 MPIC_PRIMARY | MPIC_WANTS_RESET |
82 MPIC_BIG_ENDIAN | MPIC_BROKEN_FRR_NIRQS,
82 0, 256, " OpenPIC "); 83 0, 256, " OpenPIC ");
83 BUG_ON(mpic == NULL); 84 BUG_ON(mpic == NULL);
84 85
@@ -195,6 +196,7 @@ static int __init mpc85xxds_publish_devices(void)
195 return of_platform_bus_probe(NULL, mpc85xxds_ids, NULL); 196 return of_platform_bus_probe(NULL, mpc85xxds_ids, NULL);
196} 197}
197machine_device_initcall(mpc8544_ds, mpc85xxds_publish_devices); 198machine_device_initcall(mpc8544_ds, mpc85xxds_publish_devices);
199machine_device_initcall(mpc8572_ds, mpc85xxds_publish_devices);
198 200
199/* 201/*
200 * Called very early, device-tree isn't unflattened 202 * Called very early, device-tree isn't unflattened
diff --git a/arch/powerpc/platforms/86xx/mpc8610_hpcd.c b/arch/powerpc/platforms/86xx/mpc8610_hpcd.c
index dea13208bf64..eb16208b29d9 100644
--- a/arch/powerpc/platforms/86xx/mpc8610_hpcd.c
+++ b/arch/powerpc/platforms/86xx/mpc8610_hpcd.c
@@ -70,7 +70,8 @@ static void __init mpc86xx_hpcd_init_irq(void)
70 70
71 /* Alloc mpic structure and per isu has 16 INT entries. */ 71 /* Alloc mpic structure and per isu has 16 INT entries. */
72 mpic1 = mpic_alloc(np, res.start, 72 mpic1 = mpic_alloc(np, res.start,
73 MPIC_PRIMARY | MPIC_WANTS_RESET | MPIC_BIG_ENDIAN, 73 MPIC_PRIMARY | MPIC_WANTS_RESET |
74 MPIC_BIG_ENDIAN | MPIC_BROKEN_FRR_NIRQS,
74 0, 256, " MPIC "); 75 0, 256, " MPIC ");
75 BUG_ON(mpic1 == NULL); 76 BUG_ON(mpic1 == NULL);
76 77
diff --git a/arch/powerpc/platforms/cell/axon_msi.c b/arch/powerpc/platforms/cell/axon_msi.c
index c39f5c225f2e..8b055bce27fe 100644
--- a/arch/powerpc/platforms/cell/axon_msi.c
+++ b/arch/powerpc/platforms/cell/axon_msi.c
@@ -14,6 +14,7 @@
14#include <linux/pci.h> 14#include <linux/pci.h>
15#include <linux/msi.h> 15#include <linux/msi.h>
16#include <linux/of_platform.h> 16#include <linux/of_platform.h>
17#include <linux/debugfs.h>
17 18
18#include <asm/dcr.h> 19#include <asm/dcr.h>
19#include <asm/machdep.h> 20#include <asm/machdep.h>
@@ -69,8 +70,19 @@ struct axon_msic {
69 dma_addr_t fifo_phys; 70 dma_addr_t fifo_phys;
70 dcr_host_t dcr_host; 71 dcr_host_t dcr_host;
71 u32 read_offset; 72 u32 read_offset;
73#ifdef DEBUG
74 u32 __iomem *trigger;
75#endif
72}; 76};
73 77
78#ifdef DEBUG
79void axon_msi_debug_setup(struct device_node *dn, struct axon_msic *msic);
80#else
81static inline void axon_msi_debug_setup(struct device_node *dn,
82 struct axon_msic *msic) { }
83#endif
84
85
74static void msic_dcr_write(struct axon_msic *msic, unsigned int dcr_n, u32 val) 86static void msic_dcr_write(struct axon_msic *msic, unsigned int dcr_n, u32 val)
75{ 87{
76 pr_debug("axon_msi: dcr_write(0x%x, 0x%x)\n", val, dcr_n); 88 pr_debug("axon_msi: dcr_write(0x%x, 0x%x)\n", val, dcr_n);
@@ -381,6 +393,8 @@ static int axon_msi_probe(struct of_device *device,
381 ppc_md.teardown_msi_irqs = axon_msi_teardown_msi_irqs; 393 ppc_md.teardown_msi_irqs = axon_msi_teardown_msi_irqs;
382 ppc_md.msi_check_device = axon_msi_check_device; 394 ppc_md.msi_check_device = axon_msi_check_device;
383 395
396 axon_msi_debug_setup(dn, msic);
397
384 printk(KERN_DEBUG "axon_msi: setup MSIC on %s\n", dn->full_name); 398 printk(KERN_DEBUG "axon_msi: setup MSIC on %s\n", dn->full_name);
385 399
386 return 0; 400 return 0;
@@ -418,3 +432,47 @@ static int __init axon_msi_init(void)
418 return of_register_platform_driver(&axon_msi_driver); 432 return of_register_platform_driver(&axon_msi_driver);
419} 433}
420subsys_initcall(axon_msi_init); 434subsys_initcall(axon_msi_init);
435
436
437#ifdef DEBUG
438static int msic_set(void *data, u64 val)
439{
440 struct axon_msic *msic = data;
441 out_le32(msic->trigger, val);
442 return 0;
443}
444
445static int msic_get(void *data, u64 *val)
446{
447 *val = 0;
448 return 0;
449}
450
451DEFINE_SIMPLE_ATTRIBUTE(fops_msic, msic_get, msic_set, "%llu\n");
452
453void axon_msi_debug_setup(struct device_node *dn, struct axon_msic *msic)
454{
455 char name[8];
456 u64 addr;
457
458 addr = of_translate_address(dn, of_get_property(dn, "reg", NULL));
459 if (addr == OF_BAD_ADDR) {
460 pr_debug("axon_msi: couldn't translate reg property\n");
461 return;
462 }
463
464 msic->trigger = ioremap(addr, 0x4);
465 if (!msic->trigger) {
466 pr_debug("axon_msi: ioremap failed\n");
467 return;
468 }
469
470 snprintf(name, sizeof(name), "msic_%d", of_node_to_nid(dn));
471
472 if (!debugfs_create_file(name, 0600, powerpc_debugfs_root,
473 msic, &fops_msic)) {
474 pr_debug("axon_msi: debugfs_create_file failed!\n");
475 return;
476 }
477}
478#endif /* DEBUG */
diff --git a/arch/powerpc/platforms/chrp/setup.c b/arch/powerpc/platforms/chrp/setup.c
index 116babbaaf81..1ba7ce5aafae 100644
--- a/arch/powerpc/platforms/chrp/setup.c
+++ b/arch/powerpc/platforms/chrp/setup.c
@@ -63,13 +63,6 @@ static struct mpic *chrp_mpic;
63DEFINE_PER_CPU(struct timer_list, heartbeat_timer); 63DEFINE_PER_CPU(struct timer_list, heartbeat_timer);
64unsigned long event_scan_interval; 64unsigned long event_scan_interval;
65 65
66/*
67 * XXX this should be in xmon.h, but putting it there means xmon.h
68 * has to include <linux/interrupt.h> (to get irqreturn_t), which
69 * causes all sorts of problems. -- paulus
70 */
71extern irqreturn_t xmon_irq(int, void *);
72
73extern unsigned long loops_per_jiffy; 66extern unsigned long loops_per_jiffy;
74 67
75/* To be replaced by RTAS when available */ 68/* To be replaced by RTAS when available */
diff --git a/arch/powerpc/platforms/maple/time.c b/arch/powerpc/platforms/maple/time.c
index 9f7579b38c72..53bca132fb48 100644
--- a/arch/powerpc/platforms/maple/time.c
+++ b/arch/powerpc/platforms/maple/time.c
@@ -41,8 +41,6 @@
41#define DBG(x...) 41#define DBG(x...)
42#endif 42#endif
43 43
44extern void GregorianDay(struct rtc_time * tm);
45
46static int maple_rtc_addr; 44static int maple_rtc_addr;
47 45
48static int maple_clock_read(int addr) 46static int maple_clock_read(int addr)
diff --git a/arch/powerpc/platforms/powermac/pic.c b/arch/powerpc/platforms/powermac/pic.c
index 829b8b02527b..6d149ae8ffa7 100644
--- a/arch/powerpc/platforms/powermac/pic.c
+++ b/arch/powerpc/platforms/powermac/pic.c
@@ -34,16 +34,10 @@
34#include <asm/time.h> 34#include <asm/time.h>
35#include <asm/pmac_feature.h> 35#include <asm/pmac_feature.h>
36#include <asm/mpic.h> 36#include <asm/mpic.h>
37#include <asm/xmon.h>
37 38
38#include "pmac.h" 39#include "pmac.h"
39 40
40/*
41 * XXX this should be in xmon.h, but putting it there means xmon.h
42 * has to include <linux/interrupt.h> (to get irqreturn_t), which
43 * causes all sorts of problems. -- paulus
44 */
45extern irqreturn_t xmon_irq(int, void *);
46
47#ifdef CONFIG_PPC32 41#ifdef CONFIG_PPC32
48struct pmac_irq_hw { 42struct pmac_irq_hw {
49 unsigned int event; 43 unsigned int event;
diff --git a/arch/powerpc/platforms/pseries/firmware.c b/arch/powerpc/platforms/pseries/firmware.c
index 9d3a40f45974..5a707da3f5c2 100644
--- a/arch/powerpc/platforms/pseries/firmware.c
+++ b/arch/powerpc/platforms/pseries/firmware.c
@@ -26,6 +26,7 @@
26#include <asm/prom.h> 26#include <asm/prom.h>
27#include <asm/udbg.h> 27#include <asm/udbg.h>
28 28
29#include "pseries.h"
29 30
30typedef struct { 31typedef struct {
31 unsigned long val; 32 unsigned long val;
diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c
index 176f1f39d2d5..9a12908510fb 100644
--- a/arch/powerpc/platforms/pseries/iommu.c
+++ b/arch/powerpc/platforms/pseries/iommu.c
@@ -135,9 +135,10 @@ static void tce_buildmulti_pSeriesLP(struct iommu_table *tbl, long tcenum,
135 u64 rpn; 135 u64 rpn;
136 long l, limit; 136 long l, limit;
137 137
138 if (npages == 1) 138 if (npages == 1) {
139 return tce_build_pSeriesLP(tbl, tcenum, npages, uaddr, 139 tce_build_pSeriesLP(tbl, tcenum, npages, uaddr, direction);
140 direction); 140 return;
141 }
141 142
142 tcep = __get_cpu_var(tce_page); 143 tcep = __get_cpu_var(tce_page);
143 144
@@ -147,9 +148,11 @@ static void tce_buildmulti_pSeriesLP(struct iommu_table *tbl, long tcenum,
147 if (!tcep) { 148 if (!tcep) {
148 tcep = (u64 *)__get_free_page(GFP_ATOMIC); 149 tcep = (u64 *)__get_free_page(GFP_ATOMIC);
149 /* If allocation fails, fall back to the loop implementation */ 150 /* If allocation fails, fall back to the loop implementation */
150 if (!tcep) 151 if (!tcep) {
151 return tce_build_pSeriesLP(tbl, tcenum, npages, 152 tce_build_pSeriesLP(tbl, tcenum, npages, uaddr,
152 uaddr, direction); 153 direction);
154 return;
155 }
153 __get_cpu_var(tce_page) = tcep; 156 __get_cpu_var(tce_page) = tcep;
154 } 157 }
155 158
diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c
index 2cbaedb17f3e..3b4651b6ee05 100644
--- a/arch/powerpc/platforms/pseries/lpar.c
+++ b/arch/powerpc/platforms/pseries/lpar.c
@@ -52,7 +52,7 @@ EXPORT_SYMBOL(plpar_hcall_norets);
52extern void pSeries_find_serial_port(void); 52extern void pSeries_find_serial_port(void);
53 53
54 54
55int vtermno; /* virtual terminal# for udbg */ 55static int vtermno; /* virtual terminal# for udbg */
56 56
57#define __ALIGNED__ __attribute__((__aligned__(sizeof(long)))) 57#define __ALIGNED__ __attribute__((__aligned__(sizeof(long))))
58static void udbg_hvsi_putc(char c) 58static void udbg_hvsi_putc(char c)
diff --git a/arch/powerpc/platforms/pseries/ras.c b/arch/powerpc/platforms/pseries/ras.c
index 2b548afd1003..d20b96e22c2e 100644
--- a/arch/powerpc/platforms/pseries/ras.c
+++ b/arch/powerpc/platforms/pseries/ras.c
@@ -55,7 +55,7 @@
55static unsigned char ras_log_buf[RTAS_ERROR_LOG_MAX]; 55static unsigned char ras_log_buf[RTAS_ERROR_LOG_MAX];
56static DEFINE_SPINLOCK(ras_log_buf_lock); 56static DEFINE_SPINLOCK(ras_log_buf_lock);
57 57
58char mce_data_buf[RTAS_ERROR_LOG_MAX]; 58static char mce_data_buf[RTAS_ERROR_LOG_MAX];
59 59
60static int ras_get_sensor_state_token; 60static int ras_get_sensor_state_token;
61static int ras_check_exception_token; 61static int ras_check_exception_token;
diff --git a/arch/powerpc/platforms/pseries/rtasd.c b/arch/powerpc/platforms/pseries/rtasd.c
index 7d3e2b0bd4d2..c9ffd8c225f1 100644
--- a/arch/powerpc/platforms/pseries/rtasd.c
+++ b/arch/powerpc/platforms/pseries/rtasd.c
@@ -32,7 +32,7 @@
32 32
33static DEFINE_SPINLOCK(rtasd_log_lock); 33static DEFINE_SPINLOCK(rtasd_log_lock);
34 34
35DECLARE_WAIT_QUEUE_HEAD(rtas_log_wait); 35static DECLARE_WAIT_QUEUE_HEAD(rtas_log_wait);
36 36
37static char *rtas_log_buf; 37static char *rtas_log_buf;
38static unsigned long rtas_log_start; 38static unsigned long rtas_log_start;
@@ -329,7 +329,7 @@ static unsigned int rtas_log_poll(struct file *file, poll_table * wait)
329 return 0; 329 return 0;
330} 330}
331 331
332const struct file_operations proc_rtas_log_operations = { 332static const struct file_operations proc_rtas_log_operations = {
333 .read = rtas_log_read, 333 .read = rtas_log_read,
334 .poll = rtas_log_poll, 334 .poll = rtas_log_poll,
335 .open = rtas_log_open, 335 .open = rtas_log_open,
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
index f5d29f5b13c1..90beb444e1dd 100644
--- a/arch/powerpc/platforms/pseries/setup.c
+++ b/arch/powerpc/platforms/pseries/setup.c
@@ -109,7 +109,7 @@ static void __init fwnmi_init(void)
109 fwnmi_active = 1; 109 fwnmi_active = 1;
110} 110}
111 111
112void pseries_8259_cascade(unsigned int irq, struct irq_desc *desc) 112static void pseries_8259_cascade(unsigned int irq, struct irq_desc *desc)
113{ 113{
114 unsigned int cascade_irq = i8259_irq(); 114 unsigned int cascade_irq = i8259_irq();
115 if (cascade_irq != NO_IRQ) 115 if (cascade_irq != NO_IRQ)
@@ -482,7 +482,7 @@ static int pSeries_pci_probe_mode(struct pci_bus *bus)
482 * possible with power button press. If ibm,power-off-ups token is used 482 * possible with power button press. If ibm,power-off-ups token is used
483 * it will allow auto poweron after power is restored. 483 * it will allow auto poweron after power is restored.
484 */ 484 */
485void pSeries_power_off(void) 485static void pSeries_power_off(void)
486{ 486{
487 int rc; 487 int rc;
488 int rtas_poweroff_ups_token = rtas_token("ibm,power-off-ups"); 488 int rtas_poweroff_ups_token = rtas_token("ibm,power-off-ups");
diff --git a/arch/powerpc/sysdev/6xx-suspend.S b/arch/powerpc/sysdev/6xx-suspend.S
new file mode 100644
index 000000000000..21cda085d926
--- /dev/null
+++ b/arch/powerpc/sysdev/6xx-suspend.S
@@ -0,0 +1,52 @@
1/*
2 * Enter and leave sleep state on chips with 6xx-style HID0
3 * power management bits, which don't leave sleep state via reset.
4 *
5 * Author: Scott Wood <scottwood@freescale.com>
6 *
7 * Copyright (c) 2006-2007 Freescale Semiconductor, Inc.
8 *
9 * This program is free software; you can redistribute it and/or modify it
10 * under the terms of the GNU General Public License version 2 as published
11 * by the Free Software Foundation.
12 */
13
14#include <asm/ppc_asm.h>
15#include <asm/reg.h>
16#include <asm/thread_info.h>
17#include <asm/asm-offsets.h>
18
19_GLOBAL(mpc6xx_enter_standby)
20 mflr r4
21
22 mfspr r5, SPRN_HID0
23 rlwinm r5, r5, 0, ~(HID0_DOZE | HID0_NAP)
24 oris r5, r5, HID0_SLEEP@h
25 mtspr SPRN_HID0, r5
26 isync
27
28 lis r5, ret_from_standby@h
29 ori r5, r5, ret_from_standby@l
30 mtlr r5
31
32 rlwinm r5, r1, 0, 0, 31-THREAD_SHIFT
33 lwz r6, TI_LOCAL_FLAGS(r5)
34 ori r6, r6, _TLF_SLEEPING
35 stw r6, TI_LOCAL_FLAGS(r5)
36
37 mfmsr r5
38 ori r5, r5, MSR_EE
39 oris r5, r5, MSR_POW@h
40 sync
41 mtmsr r5
42 isync
43
441: b 1b
45
46ret_from_standby:
47 mfspr r5, SPRN_HID0
48 rlwinm r5, r5, 0, ~HID0_SLEEP
49 mtspr SPRN_HID0, r5
50
51 mtlr r4
52 blr
diff --git a/arch/powerpc/sysdev/Makefile b/arch/powerpc/sysdev/Makefile
index 6d386d0071a0..dd6dff3ffb0f 100644
--- a/arch/powerpc/sysdev/Makefile
+++ b/arch/powerpc/sysdev/Makefile
@@ -4,6 +4,7 @@ endif
4 4
5mpic-msi-obj-$(CONFIG_PCI_MSI) += mpic_msi.o mpic_u3msi.o mpic_pasemi_msi.o 5mpic-msi-obj-$(CONFIG_PCI_MSI) += mpic_msi.o mpic_u3msi.o mpic_pasemi_msi.o
6obj-$(CONFIG_MPIC) += mpic.o $(mpic-msi-obj-y) 6obj-$(CONFIG_MPIC) += mpic.o $(mpic-msi-obj-y)
7fsl-msi-obj-$(CONFIG_PCI_MSI) += fsl_msi.o
7 8
8obj-$(CONFIG_PPC_MPC106) += grackle.o 9obj-$(CONFIG_PPC_MPC106) += grackle.o
9obj-$(CONFIG_PPC_DCR_NATIVE) += dcr-low.o 10obj-$(CONFIG_PPC_DCR_NATIVE) += dcr-low.o
@@ -11,7 +12,7 @@ obj-$(CONFIG_PPC_PMI) += pmi.o
11obj-$(CONFIG_U3_DART) += dart_iommu.o 12obj-$(CONFIG_U3_DART) += dart_iommu.o
12obj-$(CONFIG_MMIO_NVRAM) += mmio_nvram.o 13obj-$(CONFIG_MMIO_NVRAM) += mmio_nvram.o
13obj-$(CONFIG_FSL_SOC) += fsl_soc.o 14obj-$(CONFIG_FSL_SOC) += fsl_soc.o
14obj-$(CONFIG_FSL_PCI) += fsl_pci.o 15obj-$(CONFIG_FSL_PCI) += fsl_pci.o $(fsl-msi-obj-y)
15obj-$(CONFIG_FSL_LBC) += fsl_lbc.o 16obj-$(CONFIG_FSL_LBC) += fsl_lbc.o
16obj-$(CONFIG_RAPIDIO) += fsl_rio.o 17obj-$(CONFIG_RAPIDIO) += fsl_rio.o
17obj-$(CONFIG_TSI108_BRIDGE) += tsi108_pci.o tsi108_dev.o 18obj-$(CONFIG_TSI108_BRIDGE) += tsi108_pci.o tsi108_dev.o
@@ -44,3 +45,7 @@ obj-$(CONFIG_PPC_DCR) += dcr.o
44obj-$(CONFIG_8xx) += mpc8xx_pic.o cpm1.o 45obj-$(CONFIG_8xx) += mpc8xx_pic.o cpm1.o
45obj-$(CONFIG_UCODE_PATCH) += micropatch.o 46obj-$(CONFIG_UCODE_PATCH) += micropatch.o
46endif 47endif
48
49ifeq ($(CONFIG_SUSPEND),y)
50obj-$(CONFIG_6xx) += 6xx-suspend.o
51endif
diff --git a/arch/powerpc/sysdev/dcr.c b/arch/powerpc/sysdev/dcr.c
index 437e48d3ae33..a8ba9983dd5a 100644
--- a/arch/powerpc/sysdev/dcr.c
+++ b/arch/powerpc/sysdev/dcr.c
@@ -23,6 +23,107 @@
23#include <asm/prom.h> 23#include <asm/prom.h>
24#include <asm/dcr.h> 24#include <asm/dcr.h>
25 25
26#ifdef CONFIG_PPC_DCR_MMIO
27static struct device_node *find_dcr_parent(struct device_node *node)
28{
29 struct device_node *par, *tmp;
30 const u32 *p;
31
32 for (par = of_node_get(node); par;) {
33 if (of_get_property(par, "dcr-controller", NULL))
34 break;
35 p = of_get_property(par, "dcr-parent", NULL);
36 tmp = par;
37 if (p == NULL)
38 par = of_get_parent(par);
39 else
40 par = of_find_node_by_phandle(*p);
41 of_node_put(tmp);
42 }
43 return par;
44}
45#endif
46
47#if defined(CONFIG_PPC_DCR_NATIVE) && defined(CONFIG_PPC_DCR_MMIO)
48
49bool dcr_map_ok_generic(dcr_host_t host)
50{
51 if (host.type == DCR_HOST_NATIVE)
52 return dcr_map_ok_native(host.host.native);
53 else if (host.type == DCR_HOST_MMIO)
54 return dcr_map_ok_mmio(host.host.mmio);
55 else
56 return 0;
57}
58EXPORT_SYMBOL_GPL(dcr_map_ok_generic);
59
60dcr_host_t dcr_map_generic(struct device_node *dev,
61 unsigned int dcr_n,
62 unsigned int dcr_c)
63{
64 dcr_host_t host;
65 struct device_node *dp;
66 const char *prop;
67
68 host.type = DCR_HOST_INVALID;
69
70 dp = find_dcr_parent(dev);
71 if (dp == NULL)
72 return host;
73
74 prop = of_get_property(dp, "dcr-access-method", NULL);
75
76 pr_debug("dcr_map_generic(dcr-access-method = %s)\n", prop);
77
78 if (!strcmp(prop, "native")) {
79 host.type = DCR_HOST_NATIVE;
80 host.host.native = dcr_map_native(dev, dcr_n, dcr_c);
81 } else if (!strcmp(prop, "mmio")) {
82 host.type = DCR_HOST_MMIO;
83 host.host.mmio = dcr_map_mmio(dev, dcr_n, dcr_c);
84 }
85
86 of_node_put(dp);
87 return host;
88}
89EXPORT_SYMBOL_GPL(dcr_map_generic);
90
91void dcr_unmap_generic(dcr_host_t host, unsigned int dcr_c)
92{
93 if (host.type == DCR_HOST_NATIVE)
94 dcr_unmap_native(host.host.native, dcr_c);
95 else if (host.type == DCR_HOST_MMIO)
96 dcr_unmap_mmio(host.host.mmio, dcr_c);
97 else /* host.type == DCR_HOST_INVALID */
98 WARN_ON(true);
99}
100EXPORT_SYMBOL_GPL(dcr_unmap_generic);
101
102u32 dcr_read_generic(dcr_host_t host, unsigned int dcr_n)
103{
104 if (host.type == DCR_HOST_NATIVE)
105 return dcr_read_native(host.host.native, dcr_n);
106 else if (host.type == DCR_HOST_MMIO)
107 return dcr_read_mmio(host.host.mmio, dcr_n);
108 else /* host.type == DCR_HOST_INVALID */
109 WARN_ON(true);
110 return 0;
111}
112EXPORT_SYMBOL_GPL(dcr_read_generic);
113
114void dcr_write_generic(dcr_host_t host, unsigned int dcr_n, u32 value)
115{
116 if (host.type == DCR_HOST_NATIVE)
117 dcr_write_native(host.host.native, dcr_n, value);
118 else if (host.type == DCR_HOST_MMIO)
119 dcr_write_mmio(host.host.mmio, dcr_n, value);
120 else /* host.type == DCR_HOST_INVALID */
121 WARN_ON(true);
122}
123EXPORT_SYMBOL_GPL(dcr_write_generic);
124
125#endif /* defined(CONFIG_PPC_DCR_NATIVE) && defined(CONFIG_PPC_DCR_MMIO) */
126
26unsigned int dcr_resource_start(struct device_node *np, unsigned int index) 127unsigned int dcr_resource_start(struct device_node *np, unsigned int index)
27{ 128{
28 unsigned int ds; 129 unsigned int ds;
@@ -47,26 +148,7 @@ unsigned int dcr_resource_len(struct device_node *np, unsigned int index)
47} 148}
48EXPORT_SYMBOL_GPL(dcr_resource_len); 149EXPORT_SYMBOL_GPL(dcr_resource_len);
49 150
50#ifndef CONFIG_PPC_DCR_NATIVE 151#ifdef CONFIG_PPC_DCR_MMIO
51
52static struct device_node * find_dcr_parent(struct device_node * node)
53{
54 struct device_node *par, *tmp;
55 const u32 *p;
56
57 for (par = of_node_get(node); par;) {
58 if (of_get_property(par, "dcr-controller", NULL))
59 break;
60 p = of_get_property(par, "dcr-parent", NULL);
61 tmp = par;
62 if (p == NULL)
63 par = of_get_parent(par);
64 else
65 par = of_find_node_by_phandle(*p);
66 of_node_put(tmp);
67 }
68 return par;
69}
70 152
71u64 of_translate_dcr_address(struct device_node *dev, 153u64 of_translate_dcr_address(struct device_node *dev,
72 unsigned int dcr_n, 154 unsigned int dcr_n,
@@ -75,7 +157,7 @@ u64 of_translate_dcr_address(struct device_node *dev,
75 struct device_node *dp; 157 struct device_node *dp;
76 const u32 *p; 158 const u32 *p;
77 unsigned int stride; 159 unsigned int stride;
78 u64 ret; 160 u64 ret = OF_BAD_ADDR;
79 161
80 dp = find_dcr_parent(dev); 162 dp = find_dcr_parent(dev);
81 if (dp == NULL) 163 if (dp == NULL)
@@ -90,7 +172,7 @@ u64 of_translate_dcr_address(struct device_node *dev,
90 if (p == NULL) 172 if (p == NULL)
91 p = of_get_property(dp, "dcr-mmio-space", NULL); 173 p = of_get_property(dp, "dcr-mmio-space", NULL);
92 if (p == NULL) 174 if (p == NULL)
93 return OF_BAD_ADDR; 175 goto done;
94 176
95 /* Maybe could do some better range checking here */ 177 /* Maybe could do some better range checking here */
96 ret = of_translate_address(dp, p); 178 ret = of_translate_address(dp, p);
@@ -98,21 +180,25 @@ u64 of_translate_dcr_address(struct device_node *dev,
98 ret += (u64)(stride) * (u64)dcr_n; 180 ret += (u64)(stride) * (u64)dcr_n;
99 if (out_stride) 181 if (out_stride)
100 *out_stride = stride; 182 *out_stride = stride;
183
184 done:
185 of_node_put(dp);
101 return ret; 186 return ret;
102} 187}
103 188
104dcr_host_t dcr_map(struct device_node *dev, unsigned int dcr_n, 189dcr_host_mmio_t dcr_map_mmio(struct device_node *dev,
105 unsigned int dcr_c) 190 unsigned int dcr_n,
191 unsigned int dcr_c)
106{ 192{
107 dcr_host_t ret = { .token = NULL, .stride = 0, .base = dcr_n }; 193 dcr_host_mmio_t ret = { .token = NULL, .stride = 0, .base = dcr_n };
108 u64 addr; 194 u64 addr;
109 195
110 pr_debug("dcr_map(%s, 0x%x, 0x%x)\n", 196 pr_debug("dcr_map(%s, 0x%x, 0x%x)\n",
111 dev->full_name, dcr_n, dcr_c); 197 dev->full_name, dcr_n, dcr_c);
112 198
113 addr = of_translate_dcr_address(dev, dcr_n, &ret.stride); 199 addr = of_translate_dcr_address(dev, dcr_n, &ret.stride);
114 pr_debug("translates to addr: 0x%lx, stride: 0x%x\n", 200 pr_debug("translates to addr: 0x%llx, stride: 0x%x\n",
115 addr, ret.stride); 201 (unsigned long long) addr, ret.stride);
116 if (addr == OF_BAD_ADDR) 202 if (addr == OF_BAD_ADDR)
117 return ret; 203 return ret;
118 pr_debug("mapping 0x%x bytes\n", dcr_c * ret.stride); 204 pr_debug("mapping 0x%x bytes\n", dcr_c * ret.stride);
@@ -124,11 +210,11 @@ dcr_host_t dcr_map(struct device_node *dev, unsigned int dcr_n,
124 ret.token -= dcr_n * ret.stride; 210 ret.token -= dcr_n * ret.stride;
125 return ret; 211 return ret;
126} 212}
127EXPORT_SYMBOL_GPL(dcr_map); 213EXPORT_SYMBOL_GPL(dcr_map_mmio);
128 214
129void dcr_unmap(dcr_host_t host, unsigned int dcr_c) 215void dcr_unmap_mmio(dcr_host_mmio_t host, unsigned int dcr_c)
130{ 216{
131 dcr_host_t h = host; 217 dcr_host_mmio_t h = host;
132 218
133 if (h.token == NULL) 219 if (h.token == NULL)
134 return; 220 return;
@@ -136,7 +222,11 @@ void dcr_unmap(dcr_host_t host, unsigned int dcr_c)
136 iounmap(h.token); 222 iounmap(h.token);
137 h.token = NULL; 223 h.token = NULL;
138} 224}
139EXPORT_SYMBOL_GPL(dcr_unmap); 225EXPORT_SYMBOL_GPL(dcr_unmap_mmio);
140#else /* defined(CONFIG_PPC_DCR_NATIVE) */ 226
227#endif /* defined(CONFIG_PPC_DCR_MMIO) */
228
229#ifdef CONFIG_PPC_DCR_NATIVE
141DEFINE_SPINLOCK(dcr_ind_lock); 230DEFINE_SPINLOCK(dcr_ind_lock);
142#endif /* !defined(CONFIG_PPC_DCR_NATIVE) */ 231#endif /* defined(CONFIG_PPC_DCR_NATIVE) */
232
diff --git a/arch/powerpc/sysdev/fsl_msi.c b/arch/powerpc/sysdev/fsl_msi.c
new file mode 100644
index 000000000000..2c5187cc8a24
--- /dev/null
+++ b/arch/powerpc/sysdev/fsl_msi.c
@@ -0,0 +1,429 @@
1/*
2 * Copyright (C) 2007-2008 Freescale Semiconductor, Inc. All rights reserved.
3 *
4 * Author: Tony Li <tony.li@freescale.com>
5 * Jason Jin <Jason.jin@freescale.com>
6 *
7 * The hwirq alloc and free code reuse from sysdev/mpic_msi.c
8 *
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * as published by the Free Software Foundation; version 2 of the
12 * License.
13 *
14 */
15#include <linux/irq.h>
16#include <linux/bootmem.h>
17#include <linux/bitmap.h>
18#include <linux/msi.h>
19#include <linux/pci.h>
20#include <linux/of_platform.h>
21#include <sysdev/fsl_soc.h>
22#include <asm/prom.h>
23#include <asm/hw_irq.h>
24#include <asm/ppc-pci.h>
25#include "fsl_msi.h"
26
27struct fsl_msi_feature {
28 u32 fsl_pic_ip;
29 u32 msiir_offset;
30};
31
32static struct fsl_msi *fsl_msi;
33
34static inline u32 fsl_msi_read(u32 __iomem *base, unsigned int reg)
35{
36 return in_be32(base + (reg >> 2));
37}
38
39/*
40 * We do not need this actually. The MSIR register has been read once
41 * in the cascade interrupt. So, this MSI interrupt has been acked
42*/
43static void fsl_msi_end_irq(unsigned int virq)
44{
45}
46
47static struct irq_chip fsl_msi_chip = {
48 .mask = mask_msi_irq,
49 .unmask = unmask_msi_irq,
50 .ack = fsl_msi_end_irq,
51 .typename = " FSL-MSI ",
52};
53
54static int fsl_msi_host_map(struct irq_host *h, unsigned int virq,
55 irq_hw_number_t hw)
56{
57 struct irq_chip *chip = &fsl_msi_chip;
58
59 get_irq_desc(virq)->status |= IRQ_TYPE_EDGE_FALLING;
60
61 set_irq_chip_and_handler(virq, chip, handle_edge_irq);
62
63 return 0;
64}
65
66static struct irq_host_ops fsl_msi_host_ops = {
67 .map = fsl_msi_host_map,
68};
69
70static irq_hw_number_t fsl_msi_alloc_hwirqs(struct fsl_msi *msi, int num)
71{
72 unsigned long flags;
73 int order = get_count_order(num);
74 int offset;
75
76 spin_lock_irqsave(&msi->bitmap_lock, flags);
77
78 offset = bitmap_find_free_region(msi->fsl_msi_bitmap,
79 NR_MSI_IRQS, order);
80
81 spin_unlock_irqrestore(&msi->bitmap_lock, flags);
82
83 pr_debug("%s: allocated 0x%x (2^%d) at offset 0x%x\n",
84 __func__, num, order, offset);
85
86 return offset;
87}
88
89static void fsl_msi_free_hwirqs(struct fsl_msi *msi, int offset, int num)
90{
91 unsigned long flags;
92 int order = get_count_order(num);
93
94 pr_debug("%s: freeing 0x%x (2^%d) at offset 0x%x\n",
95 __func__, num, order, offset);
96
97 spin_lock_irqsave(&msi->bitmap_lock, flags);
98 bitmap_release_region(msi->fsl_msi_bitmap, offset, order);
99 spin_unlock_irqrestore(&msi->bitmap_lock, flags);
100}
101
102static int fsl_msi_free_dt_hwirqs(struct fsl_msi *msi)
103{
104 int i;
105 int len;
106 const u32 *p;
107
108 bitmap_allocate_region(msi->fsl_msi_bitmap, 0,
109 get_count_order(NR_MSI_IRQS));
110
111 p = of_get_property(msi->of_node, "msi-available-ranges", &len);
112
113 if (!p) {
114 /* No msi-available-ranges property,
115 * All the 256 MSI interrupts can be used
116 */
117 fsl_msi_free_hwirqs(msi, 0, 0x100);
118 return 0;
119 }
120
121 if ((len % (2 * sizeof(u32))) != 0) {
122 printk(KERN_WARNING "fsl_msi: Malformed msi-available-ranges "
123 "property on %s\n", msi->of_node->full_name);
124 return -EINVAL;
125 }
126
127 /* Format is: (<u32 start> <u32 count>)+ */
128 len /= 2 * sizeof(u32);
129 for (i = 0; i < len; i++, p += 2)
130 fsl_msi_free_hwirqs(msi, *p, *(p + 1));
131
132 return 0;
133}
134
135static int fsl_msi_init_allocator(struct fsl_msi *msi_data)
136{
137 int rc;
138 int size = BITS_TO_LONGS(NR_MSI_IRQS) * sizeof(u32);
139
140 msi_data->fsl_msi_bitmap = kzalloc(size, GFP_KERNEL);
141
142 if (msi_data->fsl_msi_bitmap == NULL) {
143 pr_debug("%s: ENOMEM allocating allocator bitmap!\n",
144 __func__);
145 return -ENOMEM;
146 }
147
148 rc = fsl_msi_free_dt_hwirqs(msi_data);
149 if (rc)
150 goto out_free;
151
152 return 0;
153out_free:
154 kfree(msi_data->fsl_msi_bitmap);
155
156 msi_data->fsl_msi_bitmap = NULL;
157 return rc;
158
159}
160
161static int fsl_msi_check_device(struct pci_dev *pdev, int nvec, int type)
162{
163 if (type == PCI_CAP_ID_MSIX)
164 pr_debug("fslmsi: MSI-X untested, trying anyway.\n");
165
166 return 0;
167}
168
169static void fsl_teardown_msi_irqs(struct pci_dev *pdev)
170{
171 struct msi_desc *entry;
172 struct fsl_msi *msi_data = fsl_msi;
173
174 list_for_each_entry(entry, &pdev->msi_list, list) {
175 if (entry->irq == NO_IRQ)
176 continue;
177 set_irq_msi(entry->irq, NULL);
178 fsl_msi_free_hwirqs(msi_data, virq_to_hw(entry->irq), 1);
179 irq_dispose_mapping(entry->irq);
180 }
181
182 return;
183}
184
185static void fsl_compose_msi_msg(struct pci_dev *pdev, int hwirq,
186 struct msi_msg *msg)
187{
188 struct fsl_msi *msi_data = fsl_msi;
189
190 msg->address_lo = msi_data->msi_addr_lo;
191 msg->address_hi = msi_data->msi_addr_hi;
192 msg->data = hwirq;
193
194 pr_debug("%s: allocated srs: %d, ibs: %d\n",
195 __func__, hwirq / IRQS_PER_MSI_REG, hwirq % IRQS_PER_MSI_REG);
196}
197
198static int fsl_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type)
199{
200 irq_hw_number_t hwirq;
201 int rc;
202 unsigned int virq;
203 struct msi_desc *entry;
204 struct msi_msg msg;
205 struct fsl_msi *msi_data = fsl_msi;
206
207 list_for_each_entry(entry, &pdev->msi_list, list) {
208 hwirq = fsl_msi_alloc_hwirqs(msi_data, 1);
209 if (hwirq < 0) {
210 rc = hwirq;
211 pr_debug("%s: fail allocating msi interrupt\n",
212 __func__);
213 goto out_free;
214 }
215
216 virq = irq_create_mapping(msi_data->irqhost, hwirq);
217
218 if (virq == NO_IRQ) {
219 pr_debug("%s: fail mapping hwirq 0x%lx\n",
220 __func__, hwirq);
221 fsl_msi_free_hwirqs(msi_data, hwirq, 1);
222 rc = -ENOSPC;
223 goto out_free;
224 }
225 set_irq_msi(virq, entry);
226
227 fsl_compose_msi_msg(pdev, hwirq, &msg);
228 write_msi_msg(virq, &msg);
229 }
230 return 0;
231
232out_free:
233 return rc;
234}
235
236static void fsl_msi_cascade(unsigned int irq, struct irq_desc *desc)
237{
238 unsigned int cascade_irq;
239 struct fsl_msi *msi_data = fsl_msi;
240 int msir_index = -1;
241 u32 msir_value = 0;
242 u32 intr_index;
243 u32 have_shift = 0;
244
245 spin_lock(&desc->lock);
246 if ((msi_data->feature & FSL_PIC_IP_MASK) == FSL_PIC_IP_IPIC) {
247 if (desc->chip->mask_ack)
248 desc->chip->mask_ack(irq);
249 else {
250 desc->chip->mask(irq);
251 desc->chip->ack(irq);
252 }
253 }
254
255 if (unlikely(desc->status & IRQ_INPROGRESS))
256 goto unlock;
257
258 msir_index = (int)desc->handler_data;
259
260 if (msir_index >= NR_MSI_REG)
261 cascade_irq = NO_IRQ;
262
263 desc->status |= IRQ_INPROGRESS;
264 switch (fsl_msi->feature & FSL_PIC_IP_MASK) {
265 case FSL_PIC_IP_MPIC:
266 msir_value = fsl_msi_read(msi_data->msi_regs,
267 msir_index * 0x10);
268 break;
269 case FSL_PIC_IP_IPIC:
270 msir_value = fsl_msi_read(msi_data->msi_regs, msir_index * 0x4);
271 break;
272 }
273
274 while (msir_value) {
275 intr_index = ffs(msir_value) - 1;
276
277 cascade_irq = irq_linear_revmap(msi_data->irqhost,
278 msir_index * IRQS_PER_MSI_REG +
279 intr_index + have_shift);
280 if (cascade_irq != NO_IRQ)
281 generic_handle_irq(cascade_irq);
282 have_shift += intr_index + 1;
283 msir_value = msir_value >> (intr_index + 1);
284 }
285 desc->status &= ~IRQ_INPROGRESS;
286
287 switch (msi_data->feature & FSL_PIC_IP_MASK) {
288 case FSL_PIC_IP_MPIC:
289 desc->chip->eoi(irq);
290 break;
291 case FSL_PIC_IP_IPIC:
292 if (!(desc->status & IRQ_DISABLED) && desc->chip->unmask)
293 desc->chip->unmask(irq);
294 break;
295 }
296unlock:
297 spin_unlock(&desc->lock);
298}
299
300static int __devinit fsl_of_msi_probe(struct of_device *dev,
301 const struct of_device_id *match)
302{
303 struct fsl_msi *msi;
304 struct resource res;
305 int err, i, count;
306 int rc;
307 int virt_msir;
308 const u32 *p;
309 struct fsl_msi_feature *features = match->data;
310
311 printk(KERN_DEBUG "Setting up Freescale MSI support\n");
312
313 msi = kzalloc(sizeof(struct fsl_msi), GFP_KERNEL);
314 if (!msi) {
315 dev_err(&dev->dev, "No memory for MSI structure\n");
316 err = -ENOMEM;
317 goto error_out;
318 }
319
320 msi->of_node = of_node_get(dev->node);
321
322 msi->irqhost = irq_alloc_host(of_node_get(dev->node),
323 IRQ_HOST_MAP_LINEAR,
324 NR_MSI_IRQS, &fsl_msi_host_ops, 0);
325 if (msi->irqhost == NULL) {
326 dev_err(&dev->dev, "No memory for MSI irqhost\n");
327 of_node_put(dev->node);
328 err = -ENOMEM;
329 goto error_out;
330 }
331
332 /* Get the MSI reg base */
333 err = of_address_to_resource(dev->node, 0, &res);
334 if (err) {
335 dev_err(&dev->dev, "%s resource error!\n",
336 dev->node->full_name);
337 goto error_out;
338 }
339
340 msi->msi_regs = ioremap(res.start, res.end - res.start + 1);
341 if (!msi->msi_regs) {
342 dev_err(&dev->dev, "ioremap problem failed\n");
343 goto error_out;
344 }
345
346 msi->feature = features->fsl_pic_ip;
347
348 msi->irqhost->host_data = msi;
349
350 msi->msi_addr_hi = 0x0;
351 msi->msi_addr_lo = res.start + features->msiir_offset;
352
353 rc = fsl_msi_init_allocator(msi);
354 if (rc) {
355 dev_err(&dev->dev, "Error allocating MSI bitmap\n");
356 goto error_out;
357 }
358
359 p = of_get_property(dev->node, "interrupts", &count);
360 if (!p) {
361 dev_err(&dev->dev, "no interrupts property found on %s\n",
362 dev->node->full_name);
363 err = -ENODEV;
364 goto error_out;
365 }
366 if (count % 8 != 0) {
367 dev_err(&dev->dev, "Malformed interrupts property on %s\n",
368 dev->node->full_name);
369 err = -EINVAL;
370 goto error_out;
371 }
372
373 count /= sizeof(u32);
374 for (i = 0; i < count / 2; i++) {
375 if (i > NR_MSI_REG)
376 break;
377 virt_msir = irq_of_parse_and_map(dev->node, i);
378 if (virt_msir != NO_IRQ) {
379 set_irq_data(virt_msir, (void *)i);
380 set_irq_chained_handler(virt_msir, fsl_msi_cascade);
381 }
382 }
383
384 fsl_msi = msi;
385
386 WARN_ON(ppc_md.setup_msi_irqs);
387 ppc_md.setup_msi_irqs = fsl_setup_msi_irqs;
388 ppc_md.teardown_msi_irqs = fsl_teardown_msi_irqs;
389 ppc_md.msi_check_device = fsl_msi_check_device;
390 return 0;
391error_out:
392 kfree(msi);
393 return err;
394}
395
396static const struct fsl_msi_feature mpic_msi_feature = {
397 .fsl_pic_ip = FSL_PIC_IP_MPIC,
398 .msiir_offset = 0x140,
399};
400
401static const struct fsl_msi_feature ipic_msi_feature = {
402 .fsl_pic_ip = FSL_PIC_IP_IPIC,
403 .msiir_offset = 0x38,
404};
405
406static const struct of_device_id fsl_of_msi_ids[] = {
407 {
408 .compatible = "fsl,mpic-msi",
409 .data = (void *)&mpic_msi_feature,
410 },
411 {
412 .compatible = "fsl,ipic-msi",
413 .data = (void *)&ipic_msi_feature,
414 },
415 {}
416};
417
418static struct of_platform_driver fsl_of_msi_driver = {
419 .name = "fsl-msi",
420 .match_table = fsl_of_msi_ids,
421 .probe = fsl_of_msi_probe,
422};
423
424static __init int fsl_of_msi_init(void)
425{
426 return of_register_platform_driver(&fsl_of_msi_driver);
427}
428
429subsys_initcall(fsl_of_msi_init);
diff --git a/arch/powerpc/sysdev/fsl_msi.h b/arch/powerpc/sysdev/fsl_msi.h
new file mode 100644
index 000000000000..a653468521fa
--- /dev/null
+++ b/arch/powerpc/sysdev/fsl_msi.h
@@ -0,0 +1,42 @@
1/*
2 * Copyright (C) 2007-2008 Freescale Semiconductor, Inc. All rights reserved.
3 *
4 * Author: Tony Li <tony.li@freescale.com>
5 * Jason Jin <Jason.jin@freescale.com>
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; version 2 of the
10 * License.
11 *
12 */
13#ifndef _POWERPC_SYSDEV_FSL_MSI_H
14#define _POWERPC_SYSDEV_FSL_MSI_H
15
16#define NR_MSI_REG 8
17#define IRQS_PER_MSI_REG 32
18#define NR_MSI_IRQS (NR_MSI_REG * IRQS_PER_MSI_REG)
19
20#define FSL_PIC_IP_MASK 0x0000000F
21#define FSL_PIC_IP_MPIC 0x00000001
22#define FSL_PIC_IP_IPIC 0x00000002
23
24struct fsl_msi {
25 /* Device node of the MSI interrupt*/
26 struct device_node *of_node;
27
28 struct irq_host *irqhost;
29
30 unsigned long cascade_irq;
31
32 u32 msi_addr_lo;
33 u32 msi_addr_hi;
34 void __iomem *msi_regs;
35 u32 feature;
36
37 unsigned long *fsl_msi_bitmap;
38 spinlock_t bitmap_lock;
39};
40
41#endif /* _POWERPC_SYSDEV_FSL_MSI_H */
42
diff --git a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c
index bf13c2174a4e..489ca5a397b1 100644
--- a/arch/powerpc/sysdev/fsl_pci.c
+++ b/arch/powerpc/sysdev/fsl_pci.c
@@ -106,6 +106,16 @@ void __init setup_pci_cmd(struct pci_controller *hose)
106 } 106 }
107} 107}
108 108
109static void __init setup_pci_pcsrbar(struct pci_controller *hose)
110{
111#ifdef CONFIG_PCI_MSI
112 phys_addr_t immr_base;
113
114 immr_base = get_immrbase();
115 early_write_config_dword(hose, 0, 0, PCI_BASE_ADDRESS_0, immr_base);
116#endif
117}
118
109static int fsl_pcie_bus_fixup; 119static int fsl_pcie_bus_fixup;
110 120
111static void __init quirk_fsl_pcie_header(struct pci_dev *dev) 121static void __init quirk_fsl_pcie_header(struct pci_dev *dev)
@@ -211,6 +221,8 @@ int __init fsl_add_bridge(struct device_node *dev, int is_primary)
211 /* Setup PEX window registers */ 221 /* Setup PEX window registers */
212 setup_pci_atmu(hose, &rsrc); 222 setup_pci_atmu(hose, &rsrc);
213 223
224 /* Setup PEXCSRBAR */
225 setup_pci_pcsrbar(hose);
214 return 0; 226 return 0;
215} 227}
216 228
diff --git a/arch/powerpc/sysdev/fsl_soc.c b/arch/powerpc/sysdev/fsl_soc.c
index 019657c110b6..ca54563d5c7e 100644
--- a/arch/powerpc/sysdev/fsl_soc.c
+++ b/arch/powerpc/sysdev/fsl_soc.c
@@ -433,6 +433,7 @@ static struct i2c_driver_device i2c_devices[] __initdata = {
433 {"dallas,ds1340", "ds1340"}, 433 {"dallas,ds1340", "ds1340"},
434 {"stm,m41t00", "m41t00"}, 434 {"stm,m41t00", "m41t00"},
435 {"dallas,ds1374", "ds1374"}, 435 {"dallas,ds1374", "ds1374"},
436 {"cirrus,cs4270", "cs4270"},
436}; 437};
437 438
438static int __init of_find_i2c_driver(struct device_node *node, 439static int __init of_find_i2c_driver(struct device_node *node,
@@ -448,6 +449,10 @@ static int __init of_find_i2c_driver(struct device_node *node,
448 return -ENOMEM; 449 return -ENOMEM;
449 return 0; 450 return 0;
450 } 451 }
452
453 pr_warning("fsl_soc.c: unrecognized i2c node %s\n",
454 (const char *) of_get_property(node, "compatible", NULL));
455
451 return -ENODEV; 456 return -ENODEV;
452} 457}
453 458
@@ -491,6 +496,8 @@ static int __init fsl_i2c_of_init(void)
491 struct resource r[2]; 496 struct resource r[2];
492 struct fsl_i2c_platform_data i2c_data; 497 struct fsl_i2c_platform_data i2c_data;
493 const unsigned char *flags = NULL; 498 const unsigned char *flags = NULL;
499 int idx;
500 const u32 *iprop;
494 501
495 memset(&r, 0, sizeof(r)); 502 memset(&r, 0, sizeof(r));
496 memset(&i2c_data, 0, sizeof(i2c_data)); 503 memset(&i2c_data, 0, sizeof(i2c_data));
@@ -501,7 +508,10 @@ static int __init fsl_i2c_of_init(void)
501 508
502 of_irq_to_resource(np, 0, &r[1]); 509 of_irq_to_resource(np, 0, &r[1]);
503 510
504 i2c_dev = platform_device_register_simple("fsl-i2c", i, r, 2); 511 iprop = of_get_property(np, "cell-index", NULL);
512 idx = iprop ? *iprop : i;
513
514 i2c_dev = platform_device_register_simple("fsl-i2c", idx, r, 2);
505 if (IS_ERR(i2c_dev)) { 515 if (IS_ERR(i2c_dev)) {
506 ret = PTR_ERR(i2c_dev); 516 ret = PTR_ERR(i2c_dev);
507 goto err; 517 goto err;
@@ -523,7 +533,8 @@ static int __init fsl_i2c_of_init(void)
523 if (ret) 533 if (ret)
524 goto unreg; 534 goto unreg;
525 535
526 of_register_i2c_devices(np, i++); 536 of_register_i2c_devices(np, idx);
537 i++;
527 } 538 }
528 539
529 return 0; 540 return 0;
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c
index 7680001676a6..f99f81abbd5c 100644
--- a/arch/powerpc/sysdev/mpic.c
+++ b/arch/powerpc/sysdev/mpic.c
@@ -1144,9 +1144,12 @@ struct mpic * __init mpic_alloc(struct device_node *node,
1144 mpic->num_cpus = ((greg_feature & MPIC_GREG_FEATURE_LAST_CPU_MASK) 1144 mpic->num_cpus = ((greg_feature & MPIC_GREG_FEATURE_LAST_CPU_MASK)
1145 >> MPIC_GREG_FEATURE_LAST_CPU_SHIFT) + 1; 1145 >> MPIC_GREG_FEATURE_LAST_CPU_SHIFT) + 1;
1146 if (isu_size == 0) 1146 if (isu_size == 0)
1147 mpic->num_sources = 1147 if (flags & MPIC_BROKEN_FRR_NIRQS)
1148 ((greg_feature & MPIC_GREG_FEATURE_LAST_SRC_MASK) 1148 mpic->num_sources = mpic->irq_count;
1149 >> MPIC_GREG_FEATURE_LAST_SRC_SHIFT) + 1; 1149 else
1150 mpic->num_sources =
1151 ((greg_feature & MPIC_GREG_FEATURE_LAST_SRC_MASK)
1152 >> MPIC_GREG_FEATURE_LAST_SRC_SHIFT) + 1;
1150 1153
1151 /* Map the per-CPU registers */ 1154 /* Map the per-CPU registers */
1152 for (i = 0; i < mpic->num_cpus; i++) { 1155 for (i = 0; i < mpic->num_cpus; i++) {
diff --git a/arch/powerpc/sysdev/mpic_msi.c b/arch/powerpc/sysdev/mpic_msi.c
index d272a52ecd24..de3e5e8bc324 100644
--- a/arch/powerpc/sysdev/mpic_msi.c
+++ b/arch/powerpc/sysdev/mpic_msi.c
@@ -16,6 +16,7 @@
16#include <asm/hw_irq.h> 16#include <asm/hw_irq.h>
17#include <asm/ppc-pci.h> 17#include <asm/ppc-pci.h>
18 18
19#include <sysdev/mpic.h>
19 20
20static void __mpic_msi_reserve_hwirq(struct mpic *mpic, irq_hw_number_t hwirq) 21static void __mpic_msi_reserve_hwirq(struct mpic *mpic, irq_hw_number_t hwirq)
21{ 22{
diff --git a/arch/powerpc/sysdev/mpic_pasemi_msi.c b/arch/powerpc/sysdev/mpic_pasemi_msi.c
index 33cbfb22ce3e..68aff6076675 100644
--- a/arch/powerpc/sysdev/mpic_pasemi_msi.c
+++ b/arch/powerpc/sysdev/mpic_pasemi_msi.c
@@ -95,6 +95,7 @@ static int pasemi_msi_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type)
95 unsigned int virq; 95 unsigned int virq;
96 struct msi_desc *entry; 96 struct msi_desc *entry;
97 struct msi_msg msg; 97 struct msi_msg msg;
98 int ret;
98 99
99 pr_debug("pasemi_msi_setup_msi_irqs, pdev %p nvec %d type %d\n", 100 pr_debug("pasemi_msi_setup_msi_irqs, pdev %p nvec %d type %d\n",
100 pdev, nvec, type); 101 pdev, nvec, type);
@@ -108,8 +109,9 @@ static int pasemi_msi_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type)
108 * few MSIs for someone, but restrictions will apply to how the 109 * few MSIs for someone, but restrictions will apply to how the
109 * sources can be changed independently. 110 * sources can be changed independently.
110 */ 111 */
111 hwirq = mpic_msi_alloc_hwirqs(msi_mpic, ALLOC_CHUNK); 112 ret = mpic_msi_alloc_hwirqs(msi_mpic, ALLOC_CHUNK);
112 if (hwirq < 0) { 113 hwirq = ret;
114 if (ret < 0) {
113 pr_debug("pasemi_msi: failed allocating hwirq\n"); 115 pr_debug("pasemi_msi: failed allocating hwirq\n");
114 return hwirq; 116 return hwirq;
115 } 117 }
diff --git a/arch/powerpc/sysdev/mpic_u3msi.c b/arch/powerpc/sysdev/mpic_u3msi.c
index 1d5a40899b74..6e2f8686fdfc 100644
--- a/arch/powerpc/sysdev/mpic_u3msi.c
+++ b/arch/powerpc/sysdev/mpic_u3msi.c
@@ -115,17 +115,19 @@ static int u3msi_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type)
115 struct msi_desc *entry; 115 struct msi_desc *entry;
116 struct msi_msg msg; 116 struct msi_msg msg;
117 u64 addr; 117 u64 addr;
118 int ret;
118 119
119 addr = find_ht_magic_addr(pdev); 120 addr = find_ht_magic_addr(pdev);
120 msg.address_lo = addr & 0xFFFFFFFF; 121 msg.address_lo = addr & 0xFFFFFFFF;
121 msg.address_hi = addr >> 32; 122 msg.address_hi = addr >> 32;
122 123
123 list_for_each_entry(entry, &pdev->msi_list, list) { 124 list_for_each_entry(entry, &pdev->msi_list, list) {
124 hwirq = mpic_msi_alloc_hwirqs(msi_mpic, 1); 125 ret = mpic_msi_alloc_hwirqs(msi_mpic, 1);
125 if (hwirq < 0) { 126 if (ret < 0) {
126 pr_debug("u3msi: failed allocating hwirq\n"); 127 pr_debug("u3msi: failed allocating hwirq\n");
127 return hwirq; 128 return ret;
128 } 129 }
130 hwirq = ret;
129 131
130 virq = irq_create_mapping(msi_mpic->irqhost, hwirq); 132 virq = irq_create_mapping(msi_mpic->irqhost, hwirq);
131 if (virq == NO_IRQ) { 133 if (virq == NO_IRQ) {
diff --git a/arch/powerpc/sysdev/mv64x60_dev.c b/arch/powerpc/sysdev/mv64x60_dev.c
index a132e0de8ca5..32e0ad0ebea8 100644
--- a/arch/powerpc/sysdev/mv64x60_dev.c
+++ b/arch/powerpc/sysdev/mv64x60_dev.c
@@ -15,6 +15,7 @@
15#include <linux/console.h> 15#include <linux/console.h>
16#include <linux/mv643xx.h> 16#include <linux/mv643xx.h>
17#include <linux/platform_device.h> 17#include <linux/platform_device.h>
18#include <linux/of_platform.h>
18 19
19#include <asm/prom.h> 20#include <asm/prom.h>
20 21
@@ -25,6 +26,11 @@
25 * PowerPC of_platform_bus_type. They support platform_bus_type instead. 26 * PowerPC of_platform_bus_type. They support platform_bus_type instead.
26 */ 27 */
27 28
29static struct of_device_id __initdata of_mv64x60_devices[] = {
30 { .compatible = "marvell,mv64306-devctrl", },
31 {}
32};
33
28/* 34/*
29 * Create MPSC platform devices 35 * Create MPSC platform devices
30 */ 36 */
@@ -484,6 +490,10 @@ static int __init mv64x60_device_setup(void)
484 of_node_put(np); 490 of_node_put(np);
485 } 491 }
486 492
493 /* Now add every node that is on the device bus */
494 for_each_compatible_node(np, NULL, "marvell,mv64360")
495 of_platform_bus_probe(np, of_mv64x60_devices, NULL);
496
487 return 0; 497 return 0;
488} 498}
489arch_initcall(mv64x60_device_setup); 499arch_initcall(mv64x60_device_setup);
diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
index 1702de9395ee..6726da07c065 100644
--- a/arch/powerpc/xmon/xmon.c
+++ b/arch/powerpc/xmon/xmon.c
@@ -54,7 +54,7 @@
54#define skipbl xmon_skipbl 54#define skipbl xmon_skipbl
55 55
56#ifdef CONFIG_SMP 56#ifdef CONFIG_SMP
57cpumask_t cpus_in_xmon = CPU_MASK_NONE; 57static cpumask_t cpus_in_xmon = CPU_MASK_NONE;
58static unsigned long xmon_taken = 1; 58static unsigned long xmon_taken = 1;
59static int xmon_owner; 59static int xmon_owner;
60static int xmon_gate; 60static int xmon_gate;
@@ -154,7 +154,7 @@ static int do_spu_cmd(void);
154static void dump_tlb_44x(void); 154static void dump_tlb_44x(void);
155#endif 155#endif
156 156
157int xmon_no_auto_backtrace; 157static int xmon_no_auto_backtrace;
158 158
159extern void xmon_enter(void); 159extern void xmon_enter(void);
160extern void xmon_leave(void); 160extern void xmon_leave(void);
@@ -327,6 +327,11 @@ static void release_output_lock(void)
327{ 327{
328 xmon_speaker = 0; 328 xmon_speaker = 0;
329} 329}
330
331int cpus_are_in_xmon(void)
332{
333 return !cpus_empty(cpus_in_xmon);
334}
330#endif 335#endif
331 336
332static int xmon_core(struct pt_regs *regs, int fromipi) 337static int xmon_core(struct pt_regs *regs, int fromipi)
@@ -593,7 +598,7 @@ static int xmon_iabr_match(struct pt_regs *regs)
593{ 598{
594 if ((regs->msr & (MSR_IR|MSR_PR|MSR_SF)) != (MSR_IR|MSR_SF)) 599 if ((regs->msr & (MSR_IR|MSR_PR|MSR_SF)) != (MSR_IR|MSR_SF))
595 return 0; 600 return 0;
596 if (iabr == 0) 601 if (iabr == NULL)
597 return 0; 602 return 0;
598 xmon_core(regs, 0); 603 xmon_core(regs, 0);
599 return 1; 604 return 1;
@@ -1142,7 +1147,7 @@ bpt_cmds(void)
1142 } else { 1147 } else {
1143 /* assume a breakpoint address */ 1148 /* assume a breakpoint address */
1144 bp = at_breakpoint(a); 1149 bp = at_breakpoint(a);
1145 if (bp == 0) { 1150 if (bp == NULL) {
1146 printf("No breakpoint at %x\n", a); 1151 printf("No breakpoint at %x\n", a);
1147 break; 1152 break;
1148 } 1153 }
@@ -1370,7 +1375,7 @@ static void print_bug_trap(struct pt_regs *regs)
1370#endif 1375#endif
1371} 1376}
1372 1377
1373void excprint(struct pt_regs *fp) 1378static void excprint(struct pt_regs *fp)
1374{ 1379{
1375 unsigned long trap; 1380 unsigned long trap;
1376 1381
@@ -1408,7 +1413,7 @@ void excprint(struct pt_regs *fp)
1408 print_bug_trap(fp); 1413 print_bug_trap(fp);
1409} 1414}
1410 1415
1411void prregs(struct pt_regs *fp) 1416static void prregs(struct pt_regs *fp)
1412{ 1417{
1413 int n, trap; 1418 int n, trap;
1414 unsigned long base; 1419 unsigned long base;
@@ -1463,7 +1468,7 @@ void prregs(struct pt_regs *fp)
1463 printf("dar = "REG" dsisr = %.8lx\n", fp->dar, fp->dsisr); 1468 printf("dar = "REG" dsisr = %.8lx\n", fp->dar, fp->dsisr);
1464} 1469}
1465 1470
1466void cacheflush(void) 1471static void cacheflush(void)
1467{ 1472{
1468 int cmd; 1473 int cmd;
1469 unsigned long nflush; 1474 unsigned long nflush;
@@ -1495,7 +1500,7 @@ void cacheflush(void)
1495 catch_memory_errors = 0; 1500 catch_memory_errors = 0;
1496} 1501}
1497 1502
1498unsigned long 1503static unsigned long
1499read_spr(int n) 1504read_spr(int n)
1500{ 1505{
1501 unsigned int instrs[2]; 1506 unsigned int instrs[2];
@@ -1533,7 +1538,7 @@ read_spr(int n)
1533 return ret; 1538 return ret;
1534} 1539}
1535 1540
1536void 1541static void
1537write_spr(int n, unsigned long val) 1542write_spr(int n, unsigned long val)
1538{ 1543{
1539 unsigned int instrs[2]; 1544 unsigned int instrs[2];
@@ -1571,7 +1576,7 @@ static unsigned long regno;
1571extern char exc_prolog; 1576extern char exc_prolog;
1572extern char dec_exc; 1577extern char dec_exc;
1573 1578
1574void super_regs(void) 1579static void super_regs(void)
1575{ 1580{
1576 int cmd; 1581 int cmd;
1577 unsigned long val; 1582 unsigned long val;
@@ -1629,7 +1634,7 @@ void super_regs(void)
1629/* 1634/*
1630 * Stuff for reading and writing memory safely 1635 * Stuff for reading and writing memory safely
1631 */ 1636 */
1632int 1637static int
1633mread(unsigned long adrs, void *buf, int size) 1638mread(unsigned long adrs, void *buf, int size)
1634{ 1639{
1635 volatile int n; 1640 volatile int n;
@@ -1666,7 +1671,7 @@ mread(unsigned long adrs, void *buf, int size)
1666 return n; 1671 return n;
1667} 1672}
1668 1673
1669int 1674static int
1670mwrite(unsigned long adrs, void *buf, int size) 1675mwrite(unsigned long adrs, void *buf, int size)
1671{ 1676{
1672 volatile int n; 1677 volatile int n;
@@ -1731,7 +1736,7 @@ static int handle_fault(struct pt_regs *regs)
1731 1736
1732#define SWAP(a, b, t) ((t) = (a), (a) = (b), (b) = (t)) 1737#define SWAP(a, b, t) ((t) = (a), (a) = (b), (b) = (t))
1733 1738
1734void 1739static void
1735byterev(unsigned char *val, int size) 1740byterev(unsigned char *val, int size)
1736{ 1741{
1737 int t; 1742 int t;
@@ -1793,7 +1798,7 @@ static char *memex_subcmd_help_string =
1793 " x exit this mode\n" 1798 " x exit this mode\n"
1794 ""; 1799 "";
1795 1800
1796void 1801static void
1797memex(void) 1802memex(void)
1798{ 1803{
1799 int cmd, inc, i, nslash; 1804 int cmd, inc, i, nslash;
@@ -1944,7 +1949,7 @@ memex(void)
1944 } 1949 }
1945} 1950}
1946 1951
1947int 1952static int
1948bsesc(void) 1953bsesc(void)
1949{ 1954{
1950 int c; 1955 int c;
@@ -1984,7 +1989,7 @@ static void xmon_rawdump (unsigned long adrs, long ndump)
1984#define isxdigit(c) (('0' <= (c) && (c) <= '9') \ 1989#define isxdigit(c) (('0' <= (c) && (c) <= '9') \
1985 || ('a' <= (c) && (c) <= 'f') \ 1990 || ('a' <= (c) && (c) <= 'f') \
1986 || ('A' <= (c) && (c) <= 'F')) 1991 || ('A' <= (c) && (c) <= 'F'))
1987void 1992static void
1988dump(void) 1993dump(void)
1989{ 1994{
1990 int c; 1995 int c;
@@ -2022,7 +2027,7 @@ dump(void)
2022 } 2027 }
2023} 2028}
2024 2029
2025void 2030static void
2026prdump(unsigned long adrs, long ndump) 2031prdump(unsigned long adrs, long ndump)
2027{ 2032{
2028 long n, m, c, r, nr; 2033 long n, m, c, r, nr;
@@ -2066,7 +2071,7 @@ prdump(unsigned long adrs, long ndump)
2066 2071
2067typedef int (*instruction_dump_func)(unsigned long inst, unsigned long addr); 2072typedef int (*instruction_dump_func)(unsigned long inst, unsigned long addr);
2068 2073
2069int 2074static int
2070generic_inst_dump(unsigned long adr, long count, int praddr, 2075generic_inst_dump(unsigned long adr, long count, int praddr,
2071 instruction_dump_func dump_func) 2076 instruction_dump_func dump_func)
2072{ 2077{
@@ -2104,7 +2109,7 @@ generic_inst_dump(unsigned long adr, long count, int praddr,
2104 return adr - first_adr; 2109 return adr - first_adr;
2105} 2110}
2106 2111
2107int 2112static int
2108ppc_inst_dump(unsigned long adr, long count, int praddr) 2113ppc_inst_dump(unsigned long adr, long count, int praddr)
2109{ 2114{
2110 return generic_inst_dump(adr, count, praddr, print_insn_powerpc); 2115 return generic_inst_dump(adr, count, praddr, print_insn_powerpc);
@@ -2126,7 +2131,7 @@ static unsigned long mval; /* byte value to set memory to */
2126static unsigned long mcount; /* # bytes to affect */ 2131static unsigned long mcount; /* # bytes to affect */
2127static unsigned long mdiffs; /* max # differences to print */ 2132static unsigned long mdiffs; /* max # differences to print */
2128 2133
2129void 2134static void
2130memops(int cmd) 2135memops(int cmd)
2131{ 2136{
2132 scanhex((void *)&mdest); 2137 scanhex((void *)&mdest);
@@ -2152,7 +2157,7 @@ memops(int cmd)
2152 } 2157 }
2153} 2158}
2154 2159
2155void 2160static void
2156memdiffs(unsigned char *p1, unsigned char *p2, unsigned nb, unsigned maxpr) 2161memdiffs(unsigned char *p1, unsigned char *p2, unsigned nb, unsigned maxpr)
2157{ 2162{
2158 unsigned n, prt; 2163 unsigned n, prt;
@@ -2170,7 +2175,7 @@ memdiffs(unsigned char *p1, unsigned char *p2, unsigned nb, unsigned maxpr)
2170static unsigned mend; 2175static unsigned mend;
2171static unsigned mask; 2176static unsigned mask;
2172 2177
2173void 2178static void
2174memlocate(void) 2179memlocate(void)
2175{ 2180{
2176 unsigned a, n; 2181 unsigned a, n;
@@ -2203,7 +2208,7 @@ memlocate(void)
2203static unsigned long mskip = 0x1000; 2208static unsigned long mskip = 0x1000;
2204static unsigned long mlim = 0xffffffff; 2209static unsigned long mlim = 0xffffffff;
2205 2210
2206void 2211static void
2207memzcan(void) 2212memzcan(void)
2208{ 2213{
2209 unsigned char v; 2214 unsigned char v;
@@ -2230,7 +2235,7 @@ memzcan(void)
2230 printf("%.8x\n", a - mskip); 2235 printf("%.8x\n", a - mskip);
2231} 2236}
2232 2237
2233void proccall(void) 2238static void proccall(void)
2234{ 2239{
2235 unsigned long args[8]; 2240 unsigned long args[8];
2236 unsigned long ret; 2241 unsigned long ret;
@@ -2388,7 +2393,7 @@ scanhex(unsigned long *vp)
2388 return 1; 2393 return 1;
2389} 2394}
2390 2395
2391void 2396static void
2392scannl(void) 2397scannl(void)
2393{ 2398{
2394 int c; 2399 int c;
@@ -2399,7 +2404,7 @@ scannl(void)
2399 c = inchar(); 2404 c = inchar();
2400} 2405}
2401 2406
2402int hexdigit(int c) 2407static int hexdigit(int c)
2403{ 2408{
2404 if( '0' <= c && c <= '9' ) 2409 if( '0' <= c && c <= '9' )
2405 return c - '0'; 2410 return c - '0';
@@ -2430,13 +2435,13 @@ getstring(char *s, int size)
2430static char line[256]; 2435static char line[256];
2431static char *lineptr; 2436static char *lineptr;
2432 2437
2433void 2438static void
2434flush_input(void) 2439flush_input(void)
2435{ 2440{
2436 lineptr = NULL; 2441 lineptr = NULL;
2437} 2442}
2438 2443
2439int 2444static int
2440inchar(void) 2445inchar(void)
2441{ 2446{
2442 if (lineptr == NULL || *lineptr == 0) { 2447 if (lineptr == NULL || *lineptr == 0) {
@@ -2449,7 +2454,7 @@ inchar(void)
2449 return *lineptr++; 2454 return *lineptr++;
2450} 2455}
2451 2456
2452void 2457static void
2453take_input(char *str) 2458take_input(char *str)
2454{ 2459{
2455 lineptr = str; 2460 lineptr = str;
@@ -2618,7 +2623,8 @@ static void dump_tlb_44x(void)
2618 } 2623 }
2619} 2624}
2620#endif /* CONFIG_44x */ 2625#endif /* CONFIG_44x */
2621void xmon_init(int enable) 2626
2627static void xmon_init(int enable)
2622{ 2628{
2623#ifdef CONFIG_PPC_ISERIES 2629#ifdef CONFIG_PPC_ISERIES
2624 if (firmware_has_feature(FW_FEATURE_ISERIES)) 2630 if (firmware_has_feature(FW_FEATURE_ISERIES))
diff --git a/arch/ppc/kernel/entry.S b/arch/ppc/kernel/entry.S
index 5f3a5d068a5c..fcd830a292e2 100644
--- a/arch/ppc/kernel/entry.S
+++ b/arch/ppc/kernel/entry.S
@@ -647,7 +647,7 @@ user_exc_return: /* r10 contains MSR_KERNEL here */
647 /* Check current_thread_info()->flags */ 647 /* Check current_thread_info()->flags */
648 rlwinm r9,r1,0,0,18 648 rlwinm r9,r1,0,0,18
649 lwz r9,TI_FLAGS(r9) 649 lwz r9,TI_FLAGS(r9)
650 andi. r0,r9,(_TIF_SIGPENDING|_TIF_RESTORE_SIGMASK|_TIF_NEED_RESCHED) 650 andi. r0,r9,_TIF_USER_WORK_MASK
651 bne do_work 651 bne do_work
652 652
653restore_user: 653restore_user:
@@ -898,7 +898,7 @@ recheck:
898 lwz r9,TI_FLAGS(r9) 898 lwz r9,TI_FLAGS(r9)
899 andi. r0,r9,_TIF_NEED_RESCHED 899 andi. r0,r9,_TIF_NEED_RESCHED
900 bne- do_resched 900 bne- do_resched
901 andi. r0,r9,_TIF_SIGPENDING 901 andi. r0,r9,_TIF_USER_WORK_MASK
902 beq restore_user 902 beq restore_user
903do_user_signal: /* r10 contains MSR_KERNEL here */ 903do_user_signal: /* r10 contains MSR_KERNEL here */
904 ori r10,r10,MSR_EE 904 ori r10,r10,MSR_EE
diff --git a/drivers/char/hvc_console.c b/drivers/char/hvc_console.c
index 44160d5ebca0..2f9759d625cc 100644
--- a/drivers/char/hvc_console.c
+++ b/drivers/char/hvc_console.c
@@ -675,12 +675,6 @@ static int hvc_poll(struct hvc_struct *hp)
675 return poll_mask; 675 return poll_mask;
676} 676}
677 677
678#if defined(CONFIG_XMON) && defined(CONFIG_SMP)
679extern cpumask_t cpus_in_xmon;
680#else
681static const cpumask_t cpus_in_xmon = CPU_MASK_NONE;
682#endif
683
684/* 678/*
685 * This kthread is either polling or interrupt driven. This is determined by 679 * This kthread is either polling or interrupt driven. This is determined by
686 * calling hvc_poll() who determines whether a console adapter support 680 * calling hvc_poll() who determines whether a console adapter support
@@ -698,7 +692,7 @@ static int khvcd(void *unused)
698 hvc_kicked = 0; 692 hvc_kicked = 0;
699 try_to_freeze(); 693 try_to_freeze();
700 wmb(); 694 wmb();
701 if (cpus_empty(cpus_in_xmon)) { 695 if (!cpus_are_in_xmon()) {
702 spin_lock(&hvc_structs_lock); 696 spin_lock(&hvc_structs_lock);
703 list_for_each_entry(hp, &hvc_structs, next) { 697 list_for_each_entry(hp, &hvc_structs, next) {
704 poll_mask |= hvc_poll(hp); 698 poll_mask |= hvc_poll(hp);
diff --git a/drivers/char/hvc_console.h b/drivers/char/hvc_console.h
index 8c59818050e6..42ffb17e15df 100644
--- a/drivers/char/hvc_console.h
+++ b/drivers/char/hvc_console.h
@@ -60,4 +60,14 @@ extern struct hvc_struct * __devinit hvc_alloc(uint32_t vtermno, int irq,
60/* remove a vterm from hvc tty operation (modele_exit or hotplug remove) */ 60/* remove a vterm from hvc tty operation (modele_exit or hotplug remove) */
61extern int __devexit hvc_remove(struct hvc_struct *hp); 61extern int __devexit hvc_remove(struct hvc_struct *hp);
62 62
63
64#if defined(CONFIG_XMON) && defined(CONFIG_SMP)
65#include <asm/xmon.h>
66#else
67static inline int cpus_are_in_xmon(void)
68{
69 return 0;
70}
71#endif
72
63#endif // HVC_CONSOLE_H 73#endif // HVC_CONSOLE_H
diff --git a/drivers/macintosh/macio_sysfs.c b/drivers/macintosh/macio_sysfs.c
index 112e5ef728f1..9e9453b58425 100644
--- a/drivers/macintosh/macio_sysfs.c
+++ b/drivers/macintosh/macio_sysfs.c
@@ -44,7 +44,7 @@ static ssize_t modalias_show (struct device *dev, struct device_attribute *attr,
44 struct of_device *ofdev = to_of_device(dev); 44 struct of_device *ofdev = to_of_device(dev);
45 int len; 45 int len;
46 46
47 len = of_device_get_modalias(ofdev, buf, PAGE_SIZE); 47 len = of_device_get_modalias(ofdev, buf, PAGE_SIZE - 2);
48 48
49 buf[len] = '\n'; 49 buf[len] = '\n';
50 buf[len+1] = 0; 50 buf[len+1] = 0;
@@ -52,6 +52,15 @@ static ssize_t modalias_show (struct device *dev, struct device_attribute *attr,
52 return len+1; 52 return len+1;
53} 53}
54 54
55static ssize_t devspec_show(struct device *dev,
56 struct device_attribute *attr, char *buf)
57{
58 struct of_device *ofdev;
59
60 ofdev = to_of_device(dev);
61 return sprintf(buf, "%s\n", ofdev->node->full_name);
62}
63
55macio_config_of_attr (name, "%s\n"); 64macio_config_of_attr (name, "%s\n");
56macio_config_of_attr (type, "%s\n"); 65macio_config_of_attr (type, "%s\n");
57 66
@@ -60,5 +69,6 @@ struct device_attribute macio_dev_attrs[] = {
60 __ATTR_RO(type), 69 __ATTR_RO(type),
61 __ATTR_RO(compatible), 70 __ATTR_RO(compatible),
62 __ATTR_RO(modalias), 71 __ATTR_RO(modalias),
72 __ATTR_RO(devspec),
63 __ATTR_NULL 73 __ATTR_NULL
64}; 74};
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
index f4182cfffe9d..8e3e968b2957 100644
--- a/drivers/net/Kconfig
+++ b/drivers/net/Kconfig
@@ -1884,7 +1884,6 @@ config NE_H8300
1884 Say Y here if you want to use the NE2000 compatible 1884 Say Y here if you want to use the NE2000 compatible
1885 controller on the Renesas H8/300 processor. 1885 controller on the Renesas H8/300 processor.
1886 1886
1887source "drivers/net/fec_8xx/Kconfig"
1888source "drivers/net/fs_enet/Kconfig" 1887source "drivers/net/fs_enet/Kconfig"
1889 1888
1890endif # NET_ETHERNET 1889endif # NET_ETHERNET
diff --git a/drivers/net/Makefile b/drivers/net/Makefile
index dcbfe8421154..9010e58da0f2 100644
--- a/drivers/net/Makefile
+++ b/drivers/net/Makefile
@@ -217,7 +217,6 @@ obj-$(CONFIG_SMC91X) += smc91x.o
217obj-$(CONFIG_SMC911X) += smc911x.o 217obj-$(CONFIG_SMC911X) += smc911x.o
218obj-$(CONFIG_BFIN_MAC) += bfin_mac.o 218obj-$(CONFIG_BFIN_MAC) += bfin_mac.o
219obj-$(CONFIG_DM9000) += dm9000.o 219obj-$(CONFIG_DM9000) += dm9000.o
220obj-$(CONFIG_FEC_8XX) += fec_8xx/
221obj-$(CONFIG_PASEMI_MAC) += pasemi_mac_driver.o 220obj-$(CONFIG_PASEMI_MAC) += pasemi_mac_driver.o
222pasemi_mac_driver-objs := pasemi_mac.o pasemi_mac_ethtool.o 221pasemi_mac_driver-objs := pasemi_mac.o pasemi_mac_ethtool.o
223obj-$(CONFIG_MLX4_CORE) += mlx4/ 222obj-$(CONFIG_MLX4_CORE) += mlx4/
diff --git a/drivers/net/fec_8xx/Kconfig b/drivers/net/fec_8xx/Kconfig
deleted file mode 100644
index afb34ded26ee..000000000000
--- a/drivers/net/fec_8xx/Kconfig
+++ /dev/null
@@ -1,20 +0,0 @@
1config FEC_8XX
2 tristate "Motorola 8xx FEC driver"
3 depends on 8XX
4 select MII
5
6config FEC_8XX_GENERIC_PHY
7 bool "Support any generic PHY"
8 depends on FEC_8XX
9 default y
10
11config FEC_8XX_DM9161_PHY
12 bool "Support DM9161 PHY"
13 depends on FEC_8XX
14 default n
15
16config FEC_8XX_LXT971_PHY
17 bool "Support LXT971/LXT972 PHY"
18 depends on FEC_8XX
19 default n
20
diff --git a/drivers/net/fec_8xx/Makefile b/drivers/net/fec_8xx/Makefile
deleted file mode 100644
index 70c54f8c48e5..000000000000
--- a/drivers/net/fec_8xx/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
1#
2# Makefile for the Motorola 8xx FEC ethernet controller
3#
4
5obj-$(CONFIG_FEC_8XX) += fec_8xx.o
6
7fec_8xx-objs := fec_main.o fec_mii.o
8
9# the platform instantatiation objects
10ifeq ($(CONFIG_NETTA),y)
11fec_8xx-objs += fec_8xx-netta.o
12endif
diff --git a/drivers/net/fec_8xx/fec_8xx-netta.c b/drivers/net/fec_8xx/fec_8xx-netta.c
deleted file mode 100644
index 79deee222e28..000000000000
--- a/drivers/net/fec_8xx/fec_8xx-netta.c
+++ /dev/null
@@ -1,151 +0,0 @@
1/*
2 * FEC instantatiation file for NETTA
3 */
4
5#include <linux/kernel.h>
6#include <linux/types.h>
7#include <linux/string.h>
8#include <linux/ptrace.h>
9#include <linux/errno.h>
10#include <linux/ioport.h>
11#include <linux/slab.h>
12#include <linux/interrupt.h>
13#include <linux/pci.h>
14#include <linux/init.h>
15#include <linux/delay.h>
16#include <linux/netdevice.h>
17#include <linux/etherdevice.h>
18#include <linux/skbuff.h>
19#include <linux/spinlock.h>
20#include <linux/mii.h>
21#include <linux/ethtool.h>
22#include <linux/bitops.h>
23
24#include <asm/8xx_immap.h>
25#include <asm/pgtable.h>
26#include <asm/mpc8xx.h>
27#include <asm/irq.h>
28#include <asm/uaccess.h>
29#include <asm/cpm1.h>
30
31#include "fec_8xx.h"
32
33/*************************************************/
34
35static struct fec_platform_info fec1_info = {
36 .fec_no = 0,
37 .use_mdio = 1,
38 .phy_addr = 8,
39 .fec_irq = SIU_LEVEL1,
40 .phy_irq = CPM_IRQ_OFFSET + CPMVEC_PIO_PC6,
41 .rx_ring = 128,
42 .tx_ring = 16,
43 .rx_copybreak = 240,
44 .use_napi = 1,
45 .napi_weight = 17,
46};
47
48static struct fec_platform_info fec2_info = {
49 .fec_no = 1,
50 .use_mdio = 1,
51 .phy_addr = 2,
52 .fec_irq = SIU_LEVEL3,
53 .phy_irq = CPM_IRQ_OFFSET + CPMVEC_PIO_PC7,
54 .rx_ring = 128,
55 .tx_ring = 16,
56 .rx_copybreak = 240,
57 .use_napi = 1,
58 .napi_weight = 17,
59};
60
61static struct net_device *fec1_dev;
62static struct net_device *fec2_dev;
63
64/* XXX custom u-boot & Linux startup needed */
65extern const char *__fw_getenv(const char *var);
66
67/* access ports */
68#define setbits32(_addr, _v) __fec_out32(&(_addr), __fec_in32(&(_addr)) | (_v))
69#define clrbits32(_addr, _v) __fec_out32(&(_addr), __fec_in32(&(_addr)) & ~(_v))
70
71#define setbits16(_addr, _v) __fec_out16(&(_addr), __fec_in16(&(_addr)) | (_v))
72#define clrbits16(_addr, _v) __fec_out16(&(_addr), __fec_in16(&(_addr)) & ~(_v))
73
74int fec_8xx_platform_init(void)
75{
76 immap_t *immap = (immap_t *)IMAP_ADDR;
77 bd_t *bd = (bd_t *) __res;
78 const char *s;
79 char *e;
80 int i;
81
82 /* use MDC for MII */
83 setbits16(immap->im_ioport.iop_pdpar, 0x0080);
84 clrbits16(immap->im_ioport.iop_pddir, 0x0080);
85
86 /* configure FEC1 pins */
87 setbits16(immap->im_ioport.iop_papar, 0xe810);
88 setbits16(immap->im_ioport.iop_padir, 0x0810);
89 clrbits16(immap->im_ioport.iop_padir, 0xe000);
90
91 setbits32(immap->im_cpm.cp_pbpar, 0x00000001);
92 clrbits32(immap->im_cpm.cp_pbdir, 0x00000001);
93
94 setbits32(immap->im_cpm.cp_cptr, 0x00000100);
95 clrbits32(immap->im_cpm.cp_cptr, 0x00000050);
96
97 clrbits16(immap->im_ioport.iop_pcpar, 0x0200);
98 clrbits16(immap->im_ioport.iop_pcdir, 0x0200);
99 clrbits16(immap->im_ioport.iop_pcso, 0x0200);
100 setbits16(immap->im_ioport.iop_pcint, 0x0200);
101
102 /* configure FEC2 pins */
103 setbits32(immap->im_cpm.cp_pepar, 0x00039620);
104 setbits32(immap->im_cpm.cp_pedir, 0x00039620);
105 setbits32(immap->im_cpm.cp_peso, 0x00031000);
106 clrbits32(immap->im_cpm.cp_peso, 0x00008620);
107
108 setbits32(immap->im_cpm.cp_cptr, 0x00000080);
109 clrbits32(immap->im_cpm.cp_cptr, 0x00000028);
110
111 clrbits16(immap->im_ioport.iop_pcpar, 0x0200);
112 clrbits16(immap->im_ioport.iop_pcdir, 0x0200);
113 clrbits16(immap->im_ioport.iop_pcso, 0x0200);
114 setbits16(immap->im_ioport.iop_pcint, 0x0200);
115
116 /* fill up */
117 fec1_info.sys_clk = bd->bi_intfreq;
118 fec2_info.sys_clk = bd->bi_intfreq;
119
120 s = __fw_getenv("ethaddr");
121 if (s != NULL) {
122 for (i = 0; i < 6; i++) {
123 fec1_info.macaddr[i] = simple_strtoul(s, &e, 16);
124 if (*e)
125 s = e + 1;
126 }
127 }
128
129 s = __fw_getenv("eth1addr");
130 if (s != NULL) {
131 for (i = 0; i < 6; i++) {
132 fec2_info.macaddr[i] = simple_strtoul(s, &e, 16);
133 if (*e)
134 s = e + 1;
135 }
136 }
137
138 fec_8xx_init_one(&fec1_info, &fec1_dev);
139 fec_8xx_init_one(&fec2_info, &fec2_dev);
140
141 return fec1_dev != NULL && fec2_dev != NULL ? 0 : -1;
142}
143
144void fec_8xx_platform_cleanup(void)
145{
146 if (fec2_dev != NULL)
147 fec_8xx_cleanup_one(fec2_dev);
148
149 if (fec1_dev != NULL)
150 fec_8xx_cleanup_one(fec1_dev);
151}
diff --git a/drivers/net/fec_8xx/fec_8xx.h b/drivers/net/fec_8xx/fec_8xx.h
deleted file mode 100644
index f3b1c6fbba8b..000000000000
--- a/drivers/net/fec_8xx/fec_8xx.h
+++ /dev/null
@@ -1,220 +0,0 @@
1#ifndef FEC_8XX_H
2#define FEC_8XX_H
3
4#include <linux/mii.h>
5#include <linux/netdevice.h>
6
7#include <linux/types.h>
8
9/* HW info */
10
11/* CRC polynomium used by the FEC for the multicast group filtering */
12#define FEC_CRC_POLY 0x04C11DB7
13
14#define MII_ADVERTISE_HALF (ADVERTISE_100HALF | \
15 ADVERTISE_10HALF | ADVERTISE_CSMA)
16#define MII_ADVERTISE_ALL (ADVERTISE_100FULL | \
17 ADVERTISE_10FULL | MII_ADVERTISE_HALF)
18
19/* Interrupt events/masks.
20*/
21#define FEC_ENET_HBERR 0x80000000U /* Heartbeat error */
22#define FEC_ENET_BABR 0x40000000U /* Babbling receiver */
23#define FEC_ENET_BABT 0x20000000U /* Babbling transmitter */
24#define FEC_ENET_GRA 0x10000000U /* Graceful stop complete */
25#define FEC_ENET_TXF 0x08000000U /* Full frame transmitted */
26#define FEC_ENET_TXB 0x04000000U /* A buffer was transmitted */
27#define FEC_ENET_RXF 0x02000000U /* Full frame received */
28#define FEC_ENET_RXB 0x01000000U /* A buffer was received */
29#define FEC_ENET_MII 0x00800000U /* MII interrupt */
30#define FEC_ENET_EBERR 0x00400000U /* SDMA bus error */
31
32#define FEC_ECNTRL_PINMUX 0x00000004
33#define FEC_ECNTRL_ETHER_EN 0x00000002
34#define FEC_ECNTRL_RESET 0x00000001
35
36#define FEC_RCNTRL_BC_REJ 0x00000010
37#define FEC_RCNTRL_PROM 0x00000008
38#define FEC_RCNTRL_MII_MODE 0x00000004
39#define FEC_RCNTRL_DRT 0x00000002
40#define FEC_RCNTRL_LOOP 0x00000001
41
42#define FEC_TCNTRL_FDEN 0x00000004
43#define FEC_TCNTRL_HBC 0x00000002
44#define FEC_TCNTRL_GTS 0x00000001
45
46/* values for MII phy_status */
47
48#define PHY_CONF_ANE 0x0001 /* 1 auto-negotiation enabled */
49#define PHY_CONF_LOOP 0x0002 /* 1 loopback mode enabled */
50#define PHY_CONF_SPMASK 0x00f0 /* mask for speed */
51#define PHY_CONF_10HDX 0x0010 /* 10 Mbit half duplex supported */
52#define PHY_CONF_10FDX 0x0020 /* 10 Mbit full duplex supported */
53#define PHY_CONF_100HDX 0x0040 /* 100 Mbit half duplex supported */
54#define PHY_CONF_100FDX 0x0080 /* 100 Mbit full duplex supported */
55
56#define PHY_STAT_LINK 0x0100 /* 1 up - 0 down */
57#define PHY_STAT_FAULT 0x0200 /* 1 remote fault */
58#define PHY_STAT_ANC 0x0400 /* 1 auto-negotiation complete */
59#define PHY_STAT_SPMASK 0xf000 /* mask for speed */
60#define PHY_STAT_10HDX 0x1000 /* 10 Mbit half duplex selected */
61#define PHY_STAT_10FDX 0x2000 /* 10 Mbit full duplex selected */
62#define PHY_STAT_100HDX 0x4000 /* 100 Mbit half duplex selected */
63#define PHY_STAT_100FDX 0x8000 /* 100 Mbit full duplex selected */
64
65typedef struct phy_info {
66 unsigned int id;
67 const char *name;
68 void (*startup) (struct net_device * dev);
69 void (*shutdown) (struct net_device * dev);
70 void (*ack_int) (struct net_device * dev);
71} phy_info_t;
72
73/* The FEC stores dest/src/type, data, and checksum for receive packets.
74 */
75#define MAX_MTU 1508 /* Allow fullsized pppoe packets over VLAN */
76#define MIN_MTU 46 /* this is data size */
77#define CRC_LEN 4
78
79#define PKT_MAXBUF_SIZE (MAX_MTU+ETH_HLEN+CRC_LEN)
80#define PKT_MINBUF_SIZE (MIN_MTU+ETH_HLEN+CRC_LEN)
81
82/* Must be a multiple of 4 */
83#define PKT_MAXBLR_SIZE ((PKT_MAXBUF_SIZE+3) & ~3)
84/* This is needed so that invalidate_xxx wont invalidate too much */
85#define ENET_RX_FRSIZE L1_CACHE_ALIGN(PKT_MAXBUF_SIZE)
86
87/* platform interface */
88
89struct fec_platform_info {
90 int fec_no; /* FEC index */
91 int use_mdio; /* use external MII */
92 int phy_addr; /* the phy address */
93 int fec_irq, phy_irq; /* the irq for the controller */
94 int rx_ring, tx_ring; /* number of buffers on rx */
95 int sys_clk; /* system clock */
96 __u8 macaddr[6]; /* mac address */
97 int rx_copybreak; /* limit we copy small frames */
98 int use_napi; /* use NAPI */
99 int napi_weight; /* NAPI weight */
100};
101
102/* forward declaration */
103struct fec;
104
105struct fec_enet_private {
106 spinlock_t lock; /* during all ops except TX pckt processing */
107 spinlock_t tx_lock; /* during fec_start_xmit and fec_tx */
108 struct net_device *dev;
109 struct napi_struct napi;
110 int fecno;
111 struct fec *fecp;
112 const struct fec_platform_info *fpi;
113 int rx_ring, tx_ring;
114 dma_addr_t ring_mem_addr;
115 void *ring_base;
116 struct sk_buff **rx_skbuff;
117 struct sk_buff **tx_skbuff;
118 cbd_t *rx_bd_base; /* Address of Rx and Tx buffers. */
119 cbd_t *tx_bd_base;
120 cbd_t *dirty_tx; /* ring entries to be free()ed. */
121 cbd_t *cur_rx;
122 cbd_t *cur_tx;
123 int tx_free;
124 struct net_device_stats stats;
125 struct timer_list phy_timer_list;
126 const struct phy_info *phy;
127 unsigned int fec_phy_speed;
128 __u32 msg_enable;
129 struct mii_if_info mii_if;
130};
131
132/***************************************************************************/
133
134void fec_restart(struct net_device *dev, int duplex, int speed);
135void fec_stop(struct net_device *dev);
136
137/***************************************************************************/
138
139int fec_mii_read(struct net_device *dev, int phy_id, int location);
140void fec_mii_write(struct net_device *dev, int phy_id, int location, int value);
141
142int fec_mii_phy_id_detect(struct net_device *dev);
143void fec_mii_startup(struct net_device *dev);
144void fec_mii_shutdown(struct net_device *dev);
145void fec_mii_ack_int(struct net_device *dev);
146
147void fec_mii_link_status_change_check(struct net_device *dev, int init_media);
148
149/***************************************************************************/
150
151#define FEC1_NO 0x00
152#define FEC2_NO 0x01
153#define FEC3_NO 0x02
154
155int fec_8xx_init_one(const struct fec_platform_info *fpi,
156 struct net_device **devp);
157int fec_8xx_cleanup_one(struct net_device *dev);
158
159/***************************************************************************/
160
161#define DRV_MODULE_NAME "fec_8xx"
162#define PFX DRV_MODULE_NAME ": "
163#define DRV_MODULE_VERSION "0.1"
164#define DRV_MODULE_RELDATE "May 6, 2004"
165
166/***************************************************************************/
167
168int fec_8xx_platform_init(void);
169void fec_8xx_platform_cleanup(void);
170
171/***************************************************************************/
172
173/* FEC access macros */
174#if defined(CONFIG_8xx)
175/* for a 8xx __raw_xxx's are sufficient */
176#define __fec_out32(addr, x) __raw_writel(x, addr)
177#define __fec_out16(addr, x) __raw_writew(x, addr)
178#define __fec_in32(addr) __raw_readl(addr)
179#define __fec_in16(addr) __raw_readw(addr)
180#else
181/* for others play it safe */
182#define __fec_out32(addr, x) out_be32(addr, x)
183#define __fec_out16(addr, x) out_be16(addr, x)
184#define __fec_in32(addr) in_be32(addr)
185#define __fec_in16(addr) in_be16(addr)
186#endif
187
188/* write */
189#define FW(_fecp, _reg, _v) __fec_out32(&(_fecp)->fec_ ## _reg, (_v))
190
191/* read */
192#define FR(_fecp, _reg) __fec_in32(&(_fecp)->fec_ ## _reg)
193
194/* set bits */
195#define FS(_fecp, _reg, _v) FW(_fecp, _reg, FR(_fecp, _reg) | (_v))
196
197/* clear bits */
198#define FC(_fecp, _reg, _v) FW(_fecp, _reg, FR(_fecp, _reg) & ~(_v))
199
200/* buffer descriptor access macros */
201
202/* write */
203#define CBDW_SC(_cbd, _sc) __fec_out16(&(_cbd)->cbd_sc, (_sc))
204#define CBDW_DATLEN(_cbd, _datlen) __fec_out16(&(_cbd)->cbd_datlen, (_datlen))
205#define CBDW_BUFADDR(_cbd, _bufaddr) __fec_out32(&(_cbd)->cbd_bufaddr, (_bufaddr))
206
207/* read */
208#define CBDR_SC(_cbd) __fec_in16(&(_cbd)->cbd_sc)
209#define CBDR_DATLEN(_cbd) __fec_in16(&(_cbd)->cbd_datlen)
210#define CBDR_BUFADDR(_cbd) __fec_in32(&(_cbd)->cbd_bufaddr)
211
212/* set bits */
213#define CBDS_SC(_cbd, _sc) CBDW_SC(_cbd, CBDR_SC(_cbd) | (_sc))
214
215/* clear bits */
216#define CBDC_SC(_cbd, _sc) CBDW_SC(_cbd, CBDR_SC(_cbd) & ~(_sc))
217
218/***************************************************************************/
219
220#endif
diff --git a/drivers/net/fec_8xx/fec_main.c b/drivers/net/fec_8xx/fec_main.c
deleted file mode 100644
index ca8d2e83ab03..000000000000
--- a/drivers/net/fec_8xx/fec_main.c
+++ /dev/null
@@ -1,1264 +0,0 @@
1/*
2 * Fast Ethernet Controller (FEC) driver for Motorola MPC8xx.
3 *
4 * Copyright (c) 2003 Intracom S.A.
5 * by Pantelis Antoniou <panto@intracom.gr>
6 *
7 * Heavily based on original FEC driver by Dan Malek <dan@embeddededge.com>
8 * and modifications by Joakim Tjernlund <joakim.tjernlund@lumentis.se>
9 *
10 * Released under the GPL
11 */
12
13#include <linux/module.h>
14#include <linux/kernel.h>
15#include <linux/types.h>
16#include <linux/string.h>
17#include <linux/ptrace.h>
18#include <linux/errno.h>
19#include <linux/ioport.h>
20#include <linux/slab.h>
21#include <linux/interrupt.h>
22#include <linux/init.h>
23#include <linux/delay.h>
24#include <linux/netdevice.h>
25#include <linux/etherdevice.h>
26#include <linux/skbuff.h>
27#include <linux/spinlock.h>
28#include <linux/mii.h>
29#include <linux/ethtool.h>
30#include <linux/bitops.h>
31#include <linux/dma-mapping.h>
32
33#include <asm/8xx_immap.h>
34#include <asm/pgtable.h>
35#include <asm/mpc8xx.h>
36#include <asm/irq.h>
37#include <asm/uaccess.h>
38#include <asm/cpm1.h>
39
40#include "fec_8xx.h"
41
42/*************************************************/
43
44#define FEC_MAX_MULTICAST_ADDRS 64
45
46/*************************************************/
47
48static char version[] __devinitdata =
49 DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")" "\n";
50
51MODULE_AUTHOR("Pantelis Antoniou <panto@intracom.gr>");
52MODULE_DESCRIPTION("Motorola 8xx FEC ethernet driver");
53MODULE_LICENSE("GPL");
54
55int fec_8xx_debug = -1; /* -1 == use FEC_8XX_DEF_MSG_ENABLE as value */
56module_param(fec_8xx_debug, int, 0);
57MODULE_PARM_DESC(fec_8xx_debug,
58 "FEC 8xx bitmapped debugging message enable value");
59
60
61/*************************************************/
62
63/*
64 * Delay to wait for FEC reset command to complete (in us)
65 */
66#define FEC_RESET_DELAY 50
67
68/*****************************************************************************************/
69
70static void fec_whack_reset(fec_t * fecp)
71{
72 int i;
73
74 /*
75 * Whack a reset. We should wait for this.
76 */
77 FW(fecp, ecntrl, FEC_ECNTRL_PINMUX | FEC_ECNTRL_RESET);
78 for (i = 0;
79 (FR(fecp, ecntrl) & FEC_ECNTRL_RESET) != 0 && i < FEC_RESET_DELAY;
80 i++)
81 udelay(1);
82
83 if (i == FEC_RESET_DELAY)
84 printk(KERN_WARNING "FEC Reset timeout!\n");
85
86}
87
88/****************************************************************************/
89
90/*
91 * Transmitter timeout.
92 */
93#define TX_TIMEOUT (2*HZ)
94
95/****************************************************************************/
96
97/*
98 * Returns the CRC needed when filling in the hash table for
99 * multicast group filtering
100 * pAddr must point to a MAC address (6 bytes)
101 */
102static __u32 fec_mulicast_calc_crc(char *pAddr)
103{
104 u8 byte;
105 int byte_count;
106 int bit_count;
107 __u32 crc = 0xffffffff;
108 u8 msb;
109
110 for (byte_count = 0; byte_count < 6; byte_count++) {
111 byte = pAddr[byte_count];
112 for (bit_count = 0; bit_count < 8; bit_count++) {
113 msb = crc >> 31;
114 crc <<= 1;
115 if (msb ^ (byte & 0x1)) {
116 crc ^= FEC_CRC_POLY;
117 }
118 byte >>= 1;
119 }
120 }
121 return (crc);
122}
123
124/*
125 * Set or clear the multicast filter for this adaptor.
126 * Skeleton taken from sunlance driver.
127 * The CPM Ethernet implementation allows Multicast as well as individual
128 * MAC address filtering. Some of the drivers check to make sure it is
129 * a group multicast address, and discard those that are not. I guess I
130 * will do the same for now, but just remove the test if you want
131 * individual filtering as well (do the upper net layers want or support
132 * this kind of feature?).
133 */
134static void fec_set_multicast_list(struct net_device *dev)
135{
136 struct fec_enet_private *fep = netdev_priv(dev);
137 fec_t *fecp = fep->fecp;
138 struct dev_mc_list *pmc;
139 __u32 crc;
140 int temp;
141 __u32 csrVal;
142 int hash_index;
143 __u32 hthi, htlo;
144 unsigned long flags;
145
146
147 if ((dev->flags & IFF_PROMISC) != 0) {
148
149 spin_lock_irqsave(&fep->lock, flags);
150 FS(fecp, r_cntrl, FEC_RCNTRL_PROM);
151 spin_unlock_irqrestore(&fep->lock, flags);
152
153 /*
154 * Log any net taps.
155 */
156 printk(KERN_WARNING DRV_MODULE_NAME
157 ": %s: Promiscuous mode enabled.\n", dev->name);
158 return;
159
160 }
161
162 if ((dev->flags & IFF_ALLMULTI) != 0 ||
163 dev->mc_count > FEC_MAX_MULTICAST_ADDRS) {
164 /*
165 * Catch all multicast addresses, set the filter to all 1's.
166 */
167 hthi = 0xffffffffU;
168 htlo = 0xffffffffU;
169 } else {
170 hthi = 0;
171 htlo = 0;
172
173 /*
174 * Now populate the hash table
175 */
176 for (pmc = dev->mc_list; pmc != NULL; pmc = pmc->next) {
177 crc = fec_mulicast_calc_crc(pmc->dmi_addr);
178 temp = (crc & 0x3f) >> 1;
179 hash_index = ((temp & 0x01) << 4) |
180 ((temp & 0x02) << 2) |
181 ((temp & 0x04)) |
182 ((temp & 0x08) >> 2) |
183 ((temp & 0x10) >> 4);
184 csrVal = (1 << hash_index);
185 if (crc & 1)
186 hthi |= csrVal;
187 else
188 htlo |= csrVal;
189 }
190 }
191
192 spin_lock_irqsave(&fep->lock, flags);
193 FC(fecp, r_cntrl, FEC_RCNTRL_PROM);
194 FW(fecp, hash_table_high, hthi);
195 FW(fecp, hash_table_low, htlo);
196 spin_unlock_irqrestore(&fep->lock, flags);
197}
198
199static int fec_set_mac_address(struct net_device *dev, void *addr)
200{
201 struct sockaddr *mac = addr;
202 struct fec_enet_private *fep = netdev_priv(dev);
203 struct fec *fecp = fep->fecp;
204 int i;
205 __u32 addrhi, addrlo;
206 unsigned long flags;
207
208 /* Get pointer to SCC area in parameter RAM. */
209 for (i = 0; i < 6; i++)
210 dev->dev_addr[i] = mac->sa_data[i];
211
212 /*
213 * Set station address.
214 */
215 addrhi = ((__u32) dev->dev_addr[0] << 24) |
216 ((__u32) dev->dev_addr[1] << 16) |
217 ((__u32) dev->dev_addr[2] << 8) |
218 (__u32) dev->dev_addr[3];
219 addrlo = ((__u32) dev->dev_addr[4] << 24) |
220 ((__u32) dev->dev_addr[5] << 16);
221
222 spin_lock_irqsave(&fep->lock, flags);
223 FW(fecp, addr_low, addrhi);
224 FW(fecp, addr_high, addrlo);
225 spin_unlock_irqrestore(&fep->lock, flags);
226
227 return 0;
228}
229
230/*
231 * This function is called to start or restart the FEC during a link
232 * change. This only happens when switching between half and full
233 * duplex.
234 */
235void fec_restart(struct net_device *dev, int duplex, int speed)
236{
237#ifdef CONFIG_DUET
238 immap_t *immap = (immap_t *) IMAP_ADDR;
239 __u32 cptr;
240#endif
241 struct fec_enet_private *fep = netdev_priv(dev);
242 struct fec *fecp = fep->fecp;
243 const struct fec_platform_info *fpi = fep->fpi;
244 cbd_t *bdp;
245 struct sk_buff *skb;
246 int i;
247 __u32 addrhi, addrlo;
248
249 fec_whack_reset(fep->fecp);
250
251 /*
252 * Set station address.
253 */
254 addrhi = ((__u32) dev->dev_addr[0] << 24) |
255 ((__u32) dev->dev_addr[1] << 16) |
256 ((__u32) dev->dev_addr[2] << 8) |
257 (__u32) dev->dev_addr[3];
258 addrlo = ((__u32) dev->dev_addr[4] << 24) |
259 ((__u32) dev->dev_addr[5] << 16);
260 FW(fecp, addr_low, addrhi);
261 FW(fecp, addr_high, addrlo);
262
263 /*
264 * Reset all multicast.
265 */
266 FW(fecp, hash_table_high, 0);
267 FW(fecp, hash_table_low, 0);
268
269 /*
270 * Set maximum receive buffer size.
271 */
272 FW(fecp, r_buff_size, PKT_MAXBLR_SIZE);
273 FW(fecp, r_hash, PKT_MAXBUF_SIZE);
274
275 /*
276 * Set receive and transmit descriptor base.
277 */
278 FW(fecp, r_des_start, iopa((__u32) (fep->rx_bd_base)));
279 FW(fecp, x_des_start, iopa((__u32) (fep->tx_bd_base)));
280
281 fep->dirty_tx = fep->cur_tx = fep->tx_bd_base;
282 fep->tx_free = fep->tx_ring;
283 fep->cur_rx = fep->rx_bd_base;
284
285 /*
286 * Reset SKB receive buffers
287 */
288 for (i = 0; i < fep->rx_ring; i++) {
289 if ((skb = fep->rx_skbuff[i]) == NULL)
290 continue;
291 fep->rx_skbuff[i] = NULL;
292 dev_kfree_skb(skb);
293 }
294
295 /*
296 * Initialize the receive buffer descriptors.
297 */
298 for (i = 0, bdp = fep->rx_bd_base; i < fep->rx_ring; i++, bdp++) {
299 skb = dev_alloc_skb(ENET_RX_FRSIZE);
300 if (skb == NULL) {
301 printk(KERN_WARNING DRV_MODULE_NAME
302 ": %s Memory squeeze, unable to allocate skb\n",
303 dev->name);
304 fep->stats.rx_dropped++;
305 break;
306 }
307 fep->rx_skbuff[i] = skb;
308 skb->dev = dev;
309 CBDW_BUFADDR(bdp, dma_map_single(NULL, skb->data,
310 L1_CACHE_ALIGN(PKT_MAXBUF_SIZE),
311 DMA_FROM_DEVICE));
312 CBDW_DATLEN(bdp, 0); /* zero */
313 CBDW_SC(bdp, BD_ENET_RX_EMPTY |
314 ((i < fep->rx_ring - 1) ? 0 : BD_SC_WRAP));
315 }
316 /*
317 * if we failed, fillup remainder
318 */
319 for (; i < fep->rx_ring; i++, bdp++) {
320 fep->rx_skbuff[i] = NULL;
321 CBDW_SC(bdp, (i < fep->rx_ring - 1) ? 0 : BD_SC_WRAP);
322 }
323
324 /*
325 * Reset SKB transmit buffers.
326 */
327 for (i = 0; i < fep->tx_ring; i++) {
328 if ((skb = fep->tx_skbuff[i]) == NULL)
329 continue;
330 fep->tx_skbuff[i] = NULL;
331 dev_kfree_skb(skb);
332 }
333
334 /*
335 * ...and the same for transmit.
336 */
337 for (i = 0, bdp = fep->tx_bd_base; i < fep->tx_ring; i++, bdp++) {
338 fep->tx_skbuff[i] = NULL;
339 CBDW_BUFADDR(bdp, virt_to_bus(NULL));
340 CBDW_DATLEN(bdp, 0);
341 CBDW_SC(bdp, (i < fep->tx_ring - 1) ? 0 : BD_SC_WRAP);
342 }
343
344 /*
345 * Enable big endian and don't care about SDMA FC.
346 */
347 FW(fecp, fun_code, 0x78000000);
348
349 /*
350 * Set MII speed.
351 */
352 FW(fecp, mii_speed, fep->fec_phy_speed);
353
354 /*
355 * Clear any outstanding interrupt.
356 */
357 FW(fecp, ievent, 0xffc0);
358 FW(fecp, ivec, (fpi->fec_irq / 2) << 29);
359
360 /*
361 * adjust to speed (only for DUET & RMII)
362 */
363#ifdef CONFIG_DUET
364 cptr = in_be32(&immap->im_cpm.cp_cptr);
365 switch (fpi->fec_no) {
366 case 0:
367 /*
368 * check if in RMII mode
369 */
370 if ((cptr & 0x100) == 0)
371 break;
372
373 if (speed == 10)
374 cptr |= 0x0000010;
375 else if (speed == 100)
376 cptr &= ~0x0000010;
377 break;
378 case 1:
379 /*
380 * check if in RMII mode
381 */
382 if ((cptr & 0x80) == 0)
383 break;
384
385 if (speed == 10)
386 cptr |= 0x0000008;
387 else if (speed == 100)
388 cptr &= ~0x0000008;
389 break;
390 default:
391 break;
392 }
393 out_be32(&immap->im_cpm.cp_cptr, cptr);
394#endif
395
396 FW(fecp, r_cntrl, FEC_RCNTRL_MII_MODE); /* MII enable */
397 /*
398 * adjust to duplex mode
399 */
400 if (duplex) {
401 FC(fecp, r_cntrl, FEC_RCNTRL_DRT);
402 FS(fecp, x_cntrl, FEC_TCNTRL_FDEN); /* FD enable */
403 } else {
404 FS(fecp, r_cntrl, FEC_RCNTRL_DRT);
405 FC(fecp, x_cntrl, FEC_TCNTRL_FDEN); /* FD disable */
406 }
407
408 /*
409 * Enable interrupts we wish to service.
410 */
411 FW(fecp, imask, FEC_ENET_TXF | FEC_ENET_TXB |
412 FEC_ENET_RXF | FEC_ENET_RXB);
413
414 /*
415 * And last, enable the transmit and receive processing.
416 */
417 FW(fecp, ecntrl, FEC_ECNTRL_PINMUX | FEC_ECNTRL_ETHER_EN);
418 FW(fecp, r_des_active, 0x01000000);
419}
420
421void fec_stop(struct net_device *dev)
422{
423 struct fec_enet_private *fep = netdev_priv(dev);
424 fec_t *fecp = fep->fecp;
425 struct sk_buff *skb;
426 int i;
427
428 if ((FR(fecp, ecntrl) & FEC_ECNTRL_ETHER_EN) == 0)
429 return; /* already down */
430
431 FW(fecp, x_cntrl, 0x01); /* Graceful transmit stop */
432 for (i = 0; ((FR(fecp, ievent) & 0x10000000) == 0) &&
433 i < FEC_RESET_DELAY; i++)
434 udelay(1);
435
436 if (i == FEC_RESET_DELAY)
437 printk(KERN_WARNING DRV_MODULE_NAME
438 ": %s FEC timeout on graceful transmit stop\n",
439 dev->name);
440 /*
441 * Disable FEC. Let only MII interrupts.
442 */
443 FW(fecp, imask, 0);
444 FW(fecp, ecntrl, ~FEC_ECNTRL_ETHER_EN);
445
446 /*
447 * Reset SKB transmit buffers.
448 */
449 for (i = 0; i < fep->tx_ring; i++) {
450 if ((skb = fep->tx_skbuff[i]) == NULL)
451 continue;
452 fep->tx_skbuff[i] = NULL;
453 dev_kfree_skb(skb);
454 }
455
456 /*
457 * Reset SKB receive buffers
458 */
459 for (i = 0; i < fep->rx_ring; i++) {
460 if ((skb = fep->rx_skbuff[i]) == NULL)
461 continue;
462 fep->rx_skbuff[i] = NULL;
463 dev_kfree_skb(skb);
464 }
465}
466
467/* common receive function */
468static int fec_enet_rx_common(struct fec_enet_private *ep,
469 struct net_device *dev, int budget)
470{
471 fec_t *fecp = fep->fecp;
472 const struct fec_platform_info *fpi = fep->fpi;
473 cbd_t *bdp;
474 struct sk_buff *skb, *skbn, *skbt;
475 int received = 0;
476 __u16 pkt_len, sc;
477 int curidx;
478
479 /*
480 * First, grab all of the stats for the incoming packet.
481 * These get messed up if we get called due to a busy condition.
482 */
483 bdp = fep->cur_rx;
484
485 /* clear RX status bits for napi*/
486 if (fpi->use_napi)
487 FW(fecp, ievent, FEC_ENET_RXF | FEC_ENET_RXB);
488
489 while (((sc = CBDR_SC(bdp)) & BD_ENET_RX_EMPTY) == 0) {
490
491 curidx = bdp - fep->rx_bd_base;
492
493 /*
494 * Since we have allocated space to hold a complete frame,
495 * the last indicator should be set.
496 */
497 if ((sc & BD_ENET_RX_LAST) == 0)
498 printk(KERN_WARNING DRV_MODULE_NAME
499 ": %s rcv is not +last\n",
500 dev->name);
501
502 /*
503 * Check for errors.
504 */
505 if (sc & (BD_ENET_RX_LG | BD_ENET_RX_SH | BD_ENET_RX_CL |
506 BD_ENET_RX_NO | BD_ENET_RX_CR | BD_ENET_RX_OV)) {
507 fep->stats.rx_errors++;
508 /* Frame too long or too short. */
509 if (sc & (BD_ENET_RX_LG | BD_ENET_RX_SH))
510 fep->stats.rx_length_errors++;
511 /* Frame alignment */
512 if (sc & (BD_ENET_RX_NO | BD_ENET_RX_CL))
513 fep->stats.rx_frame_errors++;
514 /* CRC Error */
515 if (sc & BD_ENET_RX_CR)
516 fep->stats.rx_crc_errors++;
517 /* FIFO overrun */
518 if (sc & BD_ENET_RX_OV)
519 fep->stats.rx_crc_errors++;
520
521 skbn = fep->rx_skbuff[curidx];
522 BUG_ON(skbn == NULL);
523
524 } else {
525 skb = fep->rx_skbuff[curidx];
526 BUG_ON(skb == NULL);
527
528 /*
529 * Process the incoming frame.
530 */
531 fep->stats.rx_packets++;
532 pkt_len = CBDR_DATLEN(bdp) - 4; /* remove CRC */
533 fep->stats.rx_bytes += pkt_len + 4;
534
535 if (pkt_len <= fpi->rx_copybreak) {
536 /* +2 to make IP header L1 cache aligned */
537 skbn = dev_alloc_skb(pkt_len + 2);
538 if (skbn != NULL) {
539 skb_reserve(skbn, 2); /* align IP header */
540 skb_copy_from_linear_data(skb,
541 skbn->data,
542 pkt_len);
543 /* swap */
544 skbt = skb;
545 skb = skbn;
546 skbn = skbt;
547 }
548 } else
549 skbn = dev_alloc_skb(ENET_RX_FRSIZE);
550
551 if (skbn != NULL) {
552 skb_put(skb, pkt_len); /* Make room */
553 skb->protocol = eth_type_trans(skb, dev);
554 received++;
555 if (!fpi->use_napi)
556 netif_rx(skb);
557 else
558 netif_receive_skb(skb);
559 } else {
560 printk(KERN_WARNING DRV_MODULE_NAME
561 ": %s Memory squeeze, dropping packet.\n",
562 dev->name);
563 fep->stats.rx_dropped++;
564 skbn = skb;
565 }
566 }
567
568 fep->rx_skbuff[curidx] = skbn;
569 CBDW_BUFADDR(bdp, dma_map_single(NULL, skbn->data,
570 L1_CACHE_ALIGN(PKT_MAXBUF_SIZE),
571 DMA_FROM_DEVICE));
572 CBDW_DATLEN(bdp, 0);
573 CBDW_SC(bdp, (sc & ~BD_ENET_RX_STATS) | BD_ENET_RX_EMPTY);
574
575 /*
576 * Update BD pointer to next entry.
577 */
578 if ((sc & BD_ENET_RX_WRAP) == 0)
579 bdp++;
580 else
581 bdp = fep->rx_bd_base;
582
583 /*
584 * Doing this here will keep the FEC running while we process
585 * incoming frames. On a heavily loaded network, we should be
586 * able to keep up at the expense of system resources.
587 */
588 FW(fecp, r_des_active, 0x01000000);
589
590 if (received >= budget)
591 break;
592
593 }
594
595 fep->cur_rx = bdp;
596
597 if (fpi->use_napi) {
598 if (received < budget) {
599 netif_rx_complete(dev, &fep->napi);
600
601 /* enable RX interrupt bits */
602 FS(fecp, imask, FEC_ENET_RXF | FEC_ENET_RXB);
603 }
604 }
605
606 return received;
607}
608
609static void fec_enet_tx(struct net_device *dev)
610{
611 struct fec_enet_private *fep = netdev_priv(dev);
612 cbd_t *bdp;
613 struct sk_buff *skb;
614 int dirtyidx, do_wake;
615 __u16 sc;
616
617 spin_lock(&fep->lock);
618 bdp = fep->dirty_tx;
619
620 do_wake = 0;
621 while (((sc = CBDR_SC(bdp)) & BD_ENET_TX_READY) == 0) {
622
623 dirtyidx = bdp - fep->tx_bd_base;
624
625 if (fep->tx_free == fep->tx_ring)
626 break;
627
628 skb = fep->tx_skbuff[dirtyidx];
629
630 /*
631 * Check for errors.
632 */
633 if (sc & (BD_ENET_TX_HB | BD_ENET_TX_LC |
634 BD_ENET_TX_RL | BD_ENET_TX_UN | BD_ENET_TX_CSL)) {
635 fep->stats.tx_errors++;
636 if (sc & BD_ENET_TX_HB) /* No heartbeat */
637 fep->stats.tx_heartbeat_errors++;
638 if (sc & BD_ENET_TX_LC) /* Late collision */
639 fep->stats.tx_window_errors++;
640 if (sc & BD_ENET_TX_RL) /* Retrans limit */
641 fep->stats.tx_aborted_errors++;
642 if (sc & BD_ENET_TX_UN) /* Underrun */
643 fep->stats.tx_fifo_errors++;
644 if (sc & BD_ENET_TX_CSL) /* Carrier lost */
645 fep->stats.tx_carrier_errors++;
646 } else
647 fep->stats.tx_packets++;
648
649 if (sc & BD_ENET_TX_READY)
650 printk(KERN_WARNING DRV_MODULE_NAME
651 ": %s HEY! Enet xmit interrupt and TX_READY.\n",
652 dev->name);
653
654 /*
655 * Deferred means some collisions occurred during transmit,
656 * but we eventually sent the packet OK.
657 */
658 if (sc & BD_ENET_TX_DEF)
659 fep->stats.collisions++;
660
661 /*
662 * Free the sk buffer associated with this last transmit.
663 */
664 dev_kfree_skb_irq(skb);
665 fep->tx_skbuff[dirtyidx] = NULL;
666
667 /*
668 * Update pointer to next buffer descriptor to be transmitted.
669 */
670 if ((sc & BD_ENET_TX_WRAP) == 0)
671 bdp++;
672 else
673 bdp = fep->tx_bd_base;
674
675 /*
676 * Since we have freed up a buffer, the ring is no longer
677 * full.
678 */
679 if (!fep->tx_free++)
680 do_wake = 1;
681 }
682
683 fep->dirty_tx = bdp;
684
685 spin_unlock(&fep->lock);
686
687 if (do_wake && netif_queue_stopped(dev))
688 netif_wake_queue(dev);
689}
690
691/*
692 * The interrupt handler.
693 * This is called from the MPC core interrupt.
694 */
695static irqreturn_t
696fec_enet_interrupt(int irq, void *dev_id)
697{
698 struct net_device *dev = dev_id;
699 struct fec_enet_private *fep;
700 const struct fec_platform_info *fpi;
701 fec_t *fecp;
702 __u32 int_events;
703 __u32 int_events_napi;
704
705 if (unlikely(dev == NULL))
706 return IRQ_NONE;
707
708 fep = netdev_priv(dev);
709 fecp = fep->fecp;
710 fpi = fep->fpi;
711
712 /*
713 * Get the interrupt events that caused us to be here.
714 */
715 while ((int_events = FR(fecp, ievent) & FR(fecp, imask)) != 0) {
716
717 if (!fpi->use_napi)
718 FW(fecp, ievent, int_events);
719 else {
720 int_events_napi = int_events & ~(FEC_ENET_RXF | FEC_ENET_RXB);
721 FW(fecp, ievent, int_events_napi);
722 }
723
724 if ((int_events & (FEC_ENET_HBERR | FEC_ENET_BABR |
725 FEC_ENET_BABT | FEC_ENET_EBERR)) != 0)
726 printk(KERN_WARNING DRV_MODULE_NAME
727 ": %s FEC ERROR(s) 0x%x\n",
728 dev->name, int_events);
729
730 if ((int_events & FEC_ENET_RXF) != 0) {
731 if (!fpi->use_napi)
732 fec_enet_rx_common(fep, dev, ~0);
733 else {
734 if (netif_rx_schedule_prep(dev, &fep->napi)) {
735 /* disable rx interrupts */
736 FC(fecp, imask, FEC_ENET_RXF | FEC_ENET_RXB);
737 __netif_rx_schedule(dev, &fep->napi);
738 } else {
739 printk(KERN_ERR DRV_MODULE_NAME
740 ": %s driver bug! interrupt while in poll!\n",
741 dev->name);
742 FC(fecp, imask, FEC_ENET_RXF | FEC_ENET_RXB);
743 }
744 }
745 }
746
747 if ((int_events & FEC_ENET_TXF) != 0)
748 fec_enet_tx(dev);
749 }
750
751 return IRQ_HANDLED;
752}
753
754/* This interrupt occurs when the PHY detects a link change. */
755static irqreturn_t
756fec_mii_link_interrupt(int irq, void *dev_id)
757{
758 struct net_device *dev = dev_id;
759 struct fec_enet_private *fep;
760 const struct fec_platform_info *fpi;
761
762 if (unlikely(dev == NULL))
763 return IRQ_NONE;
764
765 fep = netdev_priv(dev);
766 fpi = fep->fpi;
767
768 if (!fpi->use_mdio)
769 return IRQ_NONE;
770
771 /*
772 * Acknowledge the interrupt if possible. If we have not
773 * found the PHY yet we can't process or acknowledge the
774 * interrupt now. Instead we ignore this interrupt for now,
775 * which we can do since it is edge triggered. It will be
776 * acknowledged later by fec_enet_open().
777 */
778 if (!fep->phy)
779 return IRQ_NONE;
780
781 fec_mii_ack_int(dev);
782 fec_mii_link_status_change_check(dev, 0);
783
784 return IRQ_HANDLED;
785}
786
787
788/**********************************************************************************/
789
790static int fec_enet_start_xmit(struct sk_buff *skb, struct net_device *dev)
791{
792 struct fec_enet_private *fep = netdev_priv(dev);
793 fec_t *fecp = fep->fecp;
794 cbd_t *bdp;
795 int curidx;
796 unsigned long flags;
797
798 spin_lock_irqsave(&fep->tx_lock, flags);
799
800 /*
801 * Fill in a Tx ring entry
802 */
803 bdp = fep->cur_tx;
804
805 if (!fep->tx_free || (CBDR_SC(bdp) & BD_ENET_TX_READY)) {
806 netif_stop_queue(dev);
807 spin_unlock_irqrestore(&fep->tx_lock, flags);
808
809 /*
810 * Ooops. All transmit buffers are full. Bail out.
811 * This should not happen, since the tx queue should be stopped.
812 */
813 printk(KERN_WARNING DRV_MODULE_NAME
814 ": %s tx queue full!.\n", dev->name);
815 return 1;
816 }
817
818 curidx = bdp - fep->tx_bd_base;
819 /*
820 * Clear all of the status flags.
821 */
822 CBDC_SC(bdp, BD_ENET_TX_STATS);
823
824 /*
825 * Save skb pointer.
826 */
827 fep->tx_skbuff[curidx] = skb;
828
829 fep->stats.tx_bytes += skb->len;
830
831 /*
832 * Push the data cache so the CPM does not get stale memory data.
833 */
834 CBDW_BUFADDR(bdp, dma_map_single(NULL, skb->data,
835 skb->len, DMA_TO_DEVICE));
836 CBDW_DATLEN(bdp, skb->len);
837
838 dev->trans_start = jiffies;
839
840 /*
841 * If this was the last BD in the ring, start at the beginning again.
842 */
843 if ((CBDR_SC(bdp) & BD_ENET_TX_WRAP) == 0)
844 fep->cur_tx++;
845 else
846 fep->cur_tx = fep->tx_bd_base;
847
848 if (!--fep->tx_free)
849 netif_stop_queue(dev);
850
851 /*
852 * Trigger transmission start
853 */
854 CBDS_SC(bdp, BD_ENET_TX_READY | BD_ENET_TX_INTR |
855 BD_ENET_TX_LAST | BD_ENET_TX_TC);
856 FW(fecp, x_des_active, 0x01000000);
857
858 spin_unlock_irqrestore(&fep->tx_lock, flags);
859
860 return 0;
861}
862
863static void fec_timeout(struct net_device *dev)
864{
865 struct fec_enet_private *fep = netdev_priv(dev);
866
867 fep->stats.tx_errors++;
868
869 if (fep->tx_free)
870 netif_wake_queue(dev);
871
872 /* check link status again */
873 fec_mii_link_status_change_check(dev, 0);
874}
875
876static int fec_enet_open(struct net_device *dev)
877{
878 struct fec_enet_private *fep = netdev_priv(dev);
879 const struct fec_platform_info *fpi = fep->fpi;
880 unsigned long flags;
881
882 napi_enable(&fep->napi);
883
884 /* Install our interrupt handler. */
885 if (request_irq(fpi->fec_irq, fec_enet_interrupt, 0, "fec", dev) != 0) {
886 printk(KERN_ERR DRV_MODULE_NAME
887 ": %s Could not allocate FEC IRQ!", dev->name);
888 napi_disable(&fep->napi);
889 return -EINVAL;
890 }
891
892 /* Install our phy interrupt handler */
893 if (fpi->phy_irq != -1 &&
894 request_irq(fpi->phy_irq, fec_mii_link_interrupt, 0, "fec-phy",
895 dev) != 0) {
896 printk(KERN_ERR DRV_MODULE_NAME
897 ": %s Could not allocate PHY IRQ!", dev->name);
898 free_irq(fpi->fec_irq, dev);
899 napi_disable(&fep->napi);
900 return -EINVAL;
901 }
902
903 if (fpi->use_mdio) {
904 fec_mii_startup(dev);
905 netif_carrier_off(dev);
906 fec_mii_link_status_change_check(dev, 1);
907 } else {
908 spin_lock_irqsave(&fep->lock, flags);
909 fec_restart(dev, 1, 100); /* XXX this sucks */
910 spin_unlock_irqrestore(&fep->lock, flags);
911
912 netif_carrier_on(dev);
913 netif_start_queue(dev);
914 }
915 return 0;
916}
917
918static int fec_enet_close(struct net_device *dev)
919{
920 struct fec_enet_private *fep = netdev_priv(dev);
921 const struct fec_platform_info *fpi = fep->fpi;
922 unsigned long flags;
923
924 netif_stop_queue(dev);
925 napi_disable(&fep->napi);
926 netif_carrier_off(dev);
927
928 if (fpi->use_mdio)
929 fec_mii_shutdown(dev);
930
931 spin_lock_irqsave(&fep->lock, flags);
932 fec_stop(dev);
933 spin_unlock_irqrestore(&fep->lock, flags);
934
935 /* release any irqs */
936 if (fpi->phy_irq != -1)
937 free_irq(fpi->phy_irq, dev);
938 free_irq(fpi->fec_irq, dev);
939
940 return 0;
941}
942
943static struct net_device_stats *fec_enet_get_stats(struct net_device *dev)
944{
945 struct fec_enet_private *fep = netdev_priv(dev);
946 return &fep->stats;
947}
948
949static int fec_enet_poll(struct napi_struct *napi, int budget)
950{
951 struct fec_enet_private *fep = container_of(napi, struct fec_enet_private, napi);
952 struct net_device *dev = fep->dev;
953
954 return fec_enet_rx_common(fep, dev, budget);
955}
956
957/*************************************************************************/
958
959static void fec_get_drvinfo(struct net_device *dev,
960 struct ethtool_drvinfo *info)
961{
962 strcpy(info->driver, DRV_MODULE_NAME);
963 strcpy(info->version, DRV_MODULE_VERSION);
964}
965
966static int fec_get_regs_len(struct net_device *dev)
967{
968 return sizeof(fec_t);
969}
970
971static void fec_get_regs(struct net_device *dev, struct ethtool_regs *regs,
972 void *p)
973{
974 struct fec_enet_private *fep = netdev_priv(dev);
975 unsigned long flags;
976
977 if (regs->len < sizeof(fec_t))
978 return;
979
980 regs->version = 0;
981 spin_lock_irqsave(&fep->lock, flags);
982 memcpy_fromio(p, fep->fecp, sizeof(fec_t));
983 spin_unlock_irqrestore(&fep->lock, flags);
984}
985
986static int fec_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
987{
988 struct fec_enet_private *fep = netdev_priv(dev);
989 unsigned long flags;
990 int rc;
991
992 spin_lock_irqsave(&fep->lock, flags);
993 rc = mii_ethtool_gset(&fep->mii_if, cmd);
994 spin_unlock_irqrestore(&fep->lock, flags);
995
996 return rc;
997}
998
999static int fec_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
1000{
1001 struct fec_enet_private *fep = netdev_priv(dev);
1002 unsigned long flags;
1003 int rc;
1004
1005 spin_lock_irqsave(&fep->lock, flags);
1006 rc = mii_ethtool_sset(&fep->mii_if, cmd);
1007 spin_unlock_irqrestore(&fep->lock, flags);
1008
1009 return rc;
1010}
1011
1012static int fec_nway_reset(struct net_device *dev)
1013{
1014 struct fec_enet_private *fep = netdev_priv(dev);
1015 return mii_nway_restart(&fep->mii_if);
1016}
1017
1018static __u32 fec_get_msglevel(struct net_device *dev)
1019{
1020 struct fec_enet_private *fep = netdev_priv(dev);
1021 return fep->msg_enable;
1022}
1023
1024static void fec_set_msglevel(struct net_device *dev, __u32 value)
1025{
1026 struct fec_enet_private *fep = netdev_priv(dev);
1027 fep->msg_enable = value;
1028}
1029
1030static const struct ethtool_ops fec_ethtool_ops = {
1031 .get_drvinfo = fec_get_drvinfo,
1032 .get_regs_len = fec_get_regs_len,
1033 .get_settings = fec_get_settings,
1034 .set_settings = fec_set_settings,
1035 .nway_reset = fec_nway_reset,
1036 .get_link = ethtool_op_get_link,
1037 .get_msglevel = fec_get_msglevel,
1038 .set_msglevel = fec_set_msglevel,
1039 .set_tx_csum = ethtool_op_set_tx_csum, /* local! */
1040 .set_sg = ethtool_op_set_sg,
1041 .get_regs = fec_get_regs,
1042};
1043
1044static int fec_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
1045{
1046 struct fec_enet_private *fep = netdev_priv(dev);
1047 struct mii_ioctl_data *mii = (struct mii_ioctl_data *)&rq->ifr_data;
1048 unsigned long flags;
1049 int rc;
1050
1051 if (!netif_running(dev))
1052 return -EINVAL;
1053
1054 spin_lock_irqsave(&fep->lock, flags);
1055 rc = generic_mii_ioctl(&fep->mii_if, mii, cmd, NULL);
1056 spin_unlock_irqrestore(&fep->lock, flags);
1057 return rc;
1058}
1059
1060int fec_8xx_init_one(const struct fec_platform_info *fpi,
1061 struct net_device **devp)
1062{
1063 immap_t *immap = (immap_t *) IMAP_ADDR;
1064 static int fec_8xx_version_printed = 0;
1065 struct net_device *dev = NULL;
1066 struct fec_enet_private *fep = NULL;
1067 fec_t *fecp = NULL;
1068 int i;
1069 int err = 0;
1070 int registered = 0;
1071 __u32 siel;
1072
1073 *devp = NULL;
1074
1075 switch (fpi->fec_no) {
1076 case 0:
1077 fecp = &((immap_t *) IMAP_ADDR)->im_cpm.cp_fec;
1078 break;
1079#ifdef CONFIG_DUET
1080 case 1:
1081 fecp = &((immap_t *) IMAP_ADDR)->im_cpm.cp_fec2;
1082 break;
1083#endif
1084 default:
1085 return -EINVAL;
1086 }
1087
1088 if (fec_8xx_version_printed++ == 0)
1089 printk(KERN_INFO "%s", version);
1090
1091 i = sizeof(*fep) + (sizeof(struct sk_buff **) *
1092 (fpi->rx_ring + fpi->tx_ring));
1093
1094 dev = alloc_etherdev(i);
1095 if (!dev) {
1096 err = -ENOMEM;
1097 goto err;
1098 }
1099
1100 fep = netdev_priv(dev);
1101 fep->dev = dev;
1102
1103 /* partial reset of FEC */
1104 fec_whack_reset(fecp);
1105
1106 /* point rx_skbuff, tx_skbuff */
1107 fep->rx_skbuff = (struct sk_buff **)&fep[1];
1108 fep->tx_skbuff = fep->rx_skbuff + fpi->rx_ring;
1109
1110 fep->fecp = fecp;
1111 fep->fpi = fpi;
1112
1113 /* init locks */
1114 spin_lock_init(&fep->lock);
1115 spin_lock_init(&fep->tx_lock);
1116
1117 /*
1118 * Set the Ethernet address.
1119 */
1120 for (i = 0; i < 6; i++)
1121 dev->dev_addr[i] = fpi->macaddr[i];
1122
1123 fep->ring_base = dma_alloc_coherent(NULL,
1124 (fpi->tx_ring + fpi->rx_ring) *
1125 sizeof(cbd_t), &fep->ring_mem_addr,
1126 GFP_KERNEL);
1127 if (fep->ring_base == NULL) {
1128 printk(KERN_ERR DRV_MODULE_NAME
1129 ": %s dma alloc failed.\n", dev->name);
1130 err = -ENOMEM;
1131 goto err;
1132 }
1133
1134 /*
1135 * Set receive and transmit descriptor base.
1136 */
1137 fep->rx_bd_base = fep->ring_base;
1138 fep->tx_bd_base = fep->rx_bd_base + fpi->rx_ring;
1139
1140 /* initialize ring size variables */
1141 fep->tx_ring = fpi->tx_ring;
1142 fep->rx_ring = fpi->rx_ring;
1143
1144 /* SIU interrupt */
1145 if (fpi->phy_irq != -1 &&
1146 (fpi->phy_irq >= SIU_IRQ0 && fpi->phy_irq < SIU_LEVEL7)) {
1147
1148 siel = in_be32(&immap->im_siu_conf.sc_siel);
1149 if ((fpi->phy_irq & 1) == 0)
1150 siel |= (0x80000000 >> fpi->phy_irq);
1151 else
1152 siel &= ~(0x80000000 >> (fpi->phy_irq & ~1));
1153 out_be32(&immap->im_siu_conf.sc_siel, siel);
1154 }
1155
1156 /*
1157 * The FEC Ethernet specific entries in the device structure.
1158 */
1159 dev->open = fec_enet_open;
1160 dev->hard_start_xmit = fec_enet_start_xmit;
1161 dev->tx_timeout = fec_timeout;
1162 dev->watchdog_timeo = TX_TIMEOUT;
1163 dev->stop = fec_enet_close;
1164 dev->get_stats = fec_enet_get_stats;
1165 dev->set_multicast_list = fec_set_multicast_list;
1166 dev->set_mac_address = fec_set_mac_address;
1167 netif_napi_add(dev, &fec->napi,
1168 fec_enet_poll, fpi->napi_weight);
1169
1170 dev->ethtool_ops = &fec_ethtool_ops;
1171 dev->do_ioctl = fec_ioctl;
1172
1173 fep->fec_phy_speed =
1174 ((((fpi->sys_clk + 4999999) / 2500000) / 2) & 0x3F) << 1;
1175
1176 init_timer(&fep->phy_timer_list);
1177
1178 /* partial reset of FEC so that only MII works */
1179 FW(fecp, mii_speed, fep->fec_phy_speed);
1180 FW(fecp, ievent, 0xffc0);
1181 FW(fecp, ivec, (fpi->fec_irq / 2) << 29);
1182 FW(fecp, imask, 0);
1183 FW(fecp, r_cntrl, FEC_RCNTRL_MII_MODE); /* MII enable */
1184 FW(fecp, ecntrl, FEC_ECNTRL_PINMUX | FEC_ECNTRL_ETHER_EN);
1185
1186 netif_carrier_off(dev);
1187
1188 err = register_netdev(dev);
1189 if (err != 0)
1190 goto err;
1191 registered = 1;
1192
1193 if (fpi->use_mdio) {
1194 fep->mii_if.dev = dev;
1195 fep->mii_if.mdio_read = fec_mii_read;
1196 fep->mii_if.mdio_write = fec_mii_write;
1197 fep->mii_if.phy_id_mask = 0x1f;
1198 fep->mii_if.reg_num_mask = 0x1f;
1199 fep->mii_if.phy_id = fec_mii_phy_id_detect(dev);
1200 }
1201
1202 *devp = dev;
1203
1204 return 0;
1205
1206 err:
1207 if (dev != NULL) {
1208 if (fecp != NULL)
1209 fec_whack_reset(fecp);
1210
1211 if (registered)
1212 unregister_netdev(dev);
1213
1214 if (fep != NULL) {
1215 if (fep->ring_base)
1216 dma_free_coherent(NULL,
1217 (fpi->tx_ring +
1218 fpi->rx_ring) *
1219 sizeof(cbd_t), fep->ring_base,
1220 fep->ring_mem_addr);
1221 }
1222 free_netdev(dev);
1223 }
1224 return err;
1225}
1226
1227int fec_8xx_cleanup_one(struct net_device *dev)
1228{
1229 struct fec_enet_private *fep = netdev_priv(dev);
1230 fec_t *fecp = fep->fecp;
1231 const struct fec_platform_info *fpi = fep->fpi;
1232
1233 fec_whack_reset(fecp);
1234
1235 unregister_netdev(dev);
1236
1237 dma_free_coherent(NULL, (fpi->tx_ring + fpi->rx_ring) * sizeof(cbd_t),
1238 fep->ring_base, fep->ring_mem_addr);
1239
1240 free_netdev(dev);
1241
1242 return 0;
1243}
1244
1245/**************************************************************************************/
1246/**************************************************************************************/
1247/**************************************************************************************/
1248
1249static int __init fec_8xx_init(void)
1250{
1251 return fec_8xx_platform_init();
1252}
1253
1254static void __exit fec_8xx_cleanup(void)
1255{
1256 fec_8xx_platform_cleanup();
1257}
1258
1259/**************************************************************************************/
1260/**************************************************************************************/
1261/**************************************************************************************/
1262
1263module_init(fec_8xx_init);
1264module_exit(fec_8xx_cleanup);
diff --git a/drivers/net/fec_8xx/fec_mii.c b/drivers/net/fec_8xx/fec_mii.c
deleted file mode 100644
index 3b6ca29d31f2..000000000000
--- a/drivers/net/fec_8xx/fec_mii.c
+++ /dev/null
@@ -1,418 +0,0 @@
1/*
2 * Fast Ethernet Controller (FEC) driver for Motorola MPC8xx.
3 *
4 * Copyright (c) 2003 Intracom S.A.
5 * by Pantelis Antoniou <panto@intracom.gr>
6 *
7 * Heavily based on original FEC driver by Dan Malek <dan@embeddededge.com>
8 * and modifications by Joakim Tjernlund <joakim.tjernlund@lumentis.se>
9 *
10 * Released under the GPL
11 */
12
13#include <linux/module.h>
14#include <linux/types.h>
15#include <linux/kernel.h>
16#include <linux/string.h>
17#include <linux/ptrace.h>
18#include <linux/errno.h>
19#include <linux/ioport.h>
20#include <linux/slab.h>
21#include <linux/interrupt.h>
22#include <linux/init.h>
23#include <linux/delay.h>
24#include <linux/netdevice.h>
25#include <linux/etherdevice.h>
26#include <linux/skbuff.h>
27#include <linux/spinlock.h>
28#include <linux/mii.h>
29#include <linux/ethtool.h>
30#include <linux/bitops.h>
31
32#include <asm/8xx_immap.h>
33#include <asm/pgtable.h>
34#include <asm/mpc8xx.h>
35#include <asm/irq.h>
36#include <asm/uaccess.h>
37#include <asm/cpm1.h>
38
39/*************************************************/
40
41#include "fec_8xx.h"
42
43/*************************************************/
44
45/* Make MII read/write commands for the FEC.
46*/
47#define mk_mii_read(REG) (0x60020000 | ((REG & 0x1f) << 18))
48#define mk_mii_write(REG, VAL) (0x50020000 | ((REG & 0x1f) << 18) | (VAL & 0xffff))
49#define mk_mii_end 0
50
51/*************************************************/
52
53/* XXX both FECs use the MII interface of FEC1 */
54static DEFINE_SPINLOCK(fec_mii_lock);
55
56#define FEC_MII_LOOPS 10000
57
58int fec_mii_read(struct net_device *dev, int phy_id, int location)
59{
60 struct fec_enet_private *fep = netdev_priv(dev);
61 fec_t *fecp;
62 int i, ret = -1;
63 unsigned long flags;
64
65 /* XXX MII interface is only connected to FEC1 */
66 fecp = &((immap_t *) IMAP_ADDR)->im_cpm.cp_fec;
67
68 spin_lock_irqsave(&fec_mii_lock, flags);
69
70 if ((FR(fecp, r_cntrl) & FEC_RCNTRL_MII_MODE) == 0) {
71 FS(fecp, r_cntrl, FEC_RCNTRL_MII_MODE); /* MII enable */
72 FS(fecp, ecntrl, FEC_ECNTRL_PINMUX | FEC_ECNTRL_ETHER_EN);
73 FW(fecp, ievent, FEC_ENET_MII);
74 }
75
76 /* Add PHY address to register command. */
77 FW(fecp, mii_speed, fep->fec_phy_speed);
78 FW(fecp, mii_data, (phy_id << 23) | mk_mii_read(location));
79
80 for (i = 0; i < FEC_MII_LOOPS; i++)
81 if ((FR(fecp, ievent) & FEC_ENET_MII) != 0)
82 break;
83
84 if (i < FEC_MII_LOOPS) {
85 FW(fecp, ievent, FEC_ENET_MII);
86 ret = FR(fecp, mii_data) & 0xffff;
87 }
88
89 spin_unlock_irqrestore(&fec_mii_lock, flags);
90
91 return ret;
92}
93
94void fec_mii_write(struct net_device *dev, int phy_id, int location, int value)
95{
96 struct fec_enet_private *fep = netdev_priv(dev);
97 fec_t *fecp;
98 unsigned long flags;
99 int i;
100
101 /* XXX MII interface is only connected to FEC1 */
102 fecp = &((immap_t *) IMAP_ADDR)->im_cpm.cp_fec;
103
104 spin_lock_irqsave(&fec_mii_lock, flags);
105
106 if ((FR(fecp, r_cntrl) & FEC_RCNTRL_MII_MODE) == 0) {
107 FS(fecp, r_cntrl, FEC_RCNTRL_MII_MODE); /* MII enable */
108 FS(fecp, ecntrl, FEC_ECNTRL_PINMUX | FEC_ECNTRL_ETHER_EN);
109 FW(fecp, ievent, FEC_ENET_MII);
110 }
111
112 /* Add PHY address to register command. */
113 FW(fecp, mii_speed, fep->fec_phy_speed); /* always adapt mii speed */
114 FW(fecp, mii_data, (phy_id << 23) | mk_mii_write(location, value));
115
116 for (i = 0; i < FEC_MII_LOOPS; i++)
117 if ((FR(fecp, ievent) & FEC_ENET_MII) != 0)
118 break;
119
120 if (i < FEC_MII_LOOPS)
121 FW(fecp, ievent, FEC_ENET_MII);
122
123 spin_unlock_irqrestore(&fec_mii_lock, flags);
124}
125
126/*************************************************/
127
128#ifdef CONFIG_FEC_8XX_GENERIC_PHY
129
130/*
131 * Generic PHY support.
132 * Should work for all PHYs, but link change is detected by polling
133 */
134
135static void generic_timer_callback(unsigned long data)
136{
137 struct net_device *dev = (struct net_device *)data;
138 struct fec_enet_private *fep = netdev_priv(dev);
139
140 fep->phy_timer_list.expires = jiffies + HZ / 2;
141
142 add_timer(&fep->phy_timer_list);
143
144 fec_mii_link_status_change_check(dev, 0);
145}
146
147static void generic_startup(struct net_device *dev)
148{
149 struct fec_enet_private *fep = netdev_priv(dev);
150
151 fep->phy_timer_list.expires = jiffies + HZ / 2; /* every 500ms */
152 fep->phy_timer_list.data = (unsigned long)dev;
153 fep->phy_timer_list.function = generic_timer_callback;
154 add_timer(&fep->phy_timer_list);
155}
156
157static void generic_shutdown(struct net_device *dev)
158{
159 struct fec_enet_private *fep = netdev_priv(dev);
160
161 del_timer_sync(&fep->phy_timer_list);
162}
163
164#endif
165
166#ifdef CONFIG_FEC_8XX_DM9161_PHY
167
168/* ------------------------------------------------------------------------- */
169/* The Davicom DM9161 is used on the NETTA board */
170
171/* register definitions */
172
173#define MII_DM9161_ACR 16 /* Aux. Config Register */
174#define MII_DM9161_ACSR 17 /* Aux. Config/Status Register */
175#define MII_DM9161_10TCSR 18 /* 10BaseT Config/Status Reg. */
176#define MII_DM9161_INTR 21 /* Interrupt Register */
177#define MII_DM9161_RECR 22 /* Receive Error Counter Reg. */
178#define MII_DM9161_DISCR 23 /* Disconnect Counter Register */
179
180static void dm9161_startup(struct net_device *dev)
181{
182 struct fec_enet_private *fep = netdev_priv(dev);
183
184 fec_mii_write(dev, fep->mii_if.phy_id, MII_DM9161_INTR, 0x0000);
185}
186
187static void dm9161_ack_int(struct net_device *dev)
188{
189 struct fec_enet_private *fep = netdev_priv(dev);
190
191 fec_mii_read(dev, fep->mii_if.phy_id, MII_DM9161_INTR);
192}
193
194static void dm9161_shutdown(struct net_device *dev)
195{
196 struct fec_enet_private *fep = netdev_priv(dev);
197
198 fec_mii_write(dev, fep->mii_if.phy_id, MII_DM9161_INTR, 0x0f00);
199}
200
201#endif
202
203#ifdef CONFIG_FEC_8XX_LXT971_PHY
204
205/* Support for LXT971/972 PHY */
206
207#define MII_LXT971_PCR 16 /* Port Control Register */
208#define MII_LXT971_SR2 17 /* Status Register 2 */
209#define MII_LXT971_IER 18 /* Interrupt Enable Register */
210#define MII_LXT971_ISR 19 /* Interrupt Status Register */
211#define MII_LXT971_LCR 20 /* LED Control Register */
212#define MII_LXT971_TCR 30 /* Transmit Control Register */
213
214static void lxt971_startup(struct net_device *dev)
215{
216 struct fec_enet_private *fep = netdev_priv(dev);
217
218 fec_mii_write(dev, fep->mii_if.phy_id, MII_LXT971_IER, 0x00F2);
219}
220
221static void lxt971_ack_int(struct net_device *dev)
222{
223 struct fec_enet_private *fep = netdev_priv(dev);
224
225 fec_mii_read(dev, fep->mii_if.phy_id, MII_LXT971_ISR);
226}
227
228static void lxt971_shutdown(struct net_device *dev)
229{
230 struct fec_enet_private *fep = netdev_priv(dev);
231
232 fec_mii_write(dev, fep->mii_if.phy_id, MII_LXT971_IER, 0x0000);
233}
234#endif
235
236/**********************************************************************************/
237
238static const struct phy_info phy_info[] = {
239#ifdef CONFIG_FEC_8XX_DM9161_PHY
240 {
241 .id = 0x00181b88,
242 .name = "DM9161",
243 .startup = dm9161_startup,
244 .ack_int = dm9161_ack_int,
245 .shutdown = dm9161_shutdown,
246 },
247#endif
248#ifdef CONFIG_FEC_8XX_LXT971_PHY
249 {
250 .id = 0x0001378e,
251 .name = "LXT971/972",
252 .startup = lxt971_startup,
253 .ack_int = lxt971_ack_int,
254 .shutdown = lxt971_shutdown,
255 },
256#endif
257#ifdef CONFIG_FEC_8XX_GENERIC_PHY
258 {
259 .id = 0,
260 .name = "GENERIC",
261 .startup = generic_startup,
262 .shutdown = generic_shutdown,
263 },
264#endif
265};
266
267/**********************************************************************************/
268
269int fec_mii_phy_id_detect(struct net_device *dev)
270{
271 struct fec_enet_private *fep = netdev_priv(dev);
272 const struct fec_platform_info *fpi = fep->fpi;
273 int i, r, start, end, phytype, physubtype;
274 const struct phy_info *phy;
275 int phy_hwid, phy_id;
276
277 /* if no MDIO */
278 if (fpi->use_mdio == 0)
279 return -1;
280
281 phy_hwid = -1;
282 fep->phy = NULL;
283
284 /* auto-detect? */
285 if (fpi->phy_addr == -1) {
286 start = 0;
287 end = 32;
288 } else { /* direct */
289 start = fpi->phy_addr;
290 end = start + 1;
291 }
292
293 for (phy_id = start; phy_id < end; phy_id++) {
294 r = fec_mii_read(dev, phy_id, MII_PHYSID1);
295 if (r == -1 || (phytype = (r & 0xffff)) == 0xffff)
296 continue;
297 r = fec_mii_read(dev, phy_id, MII_PHYSID2);
298 if (r == -1 || (physubtype = (r & 0xffff)) == 0xffff)
299 continue;
300 phy_hwid = (phytype << 16) | physubtype;
301 if (phy_hwid != -1)
302 break;
303 }
304
305 if (phy_hwid == -1) {
306 printk(KERN_ERR DRV_MODULE_NAME
307 ": %s No PHY detected!\n", dev->name);
308 return -1;
309 }
310
311 for (i = 0, phy = phy_info; i < ARRAY_SIZE(phy_info); i++, phy++)
312 if (phy->id == (phy_hwid >> 4) || phy->id == 0)
313 break;
314
315 if (i >= ARRAY_SIZE(phy_info)) {
316 printk(KERN_ERR DRV_MODULE_NAME
317 ": %s PHY id 0x%08x is not supported!\n",
318 dev->name, phy_hwid);
319 return -1;
320 }
321
322 fep->phy = phy;
323
324 printk(KERN_INFO DRV_MODULE_NAME
325 ": %s Phy @ 0x%x, type %s (0x%08x)\n",
326 dev->name, phy_id, fep->phy->name, phy_hwid);
327
328 return phy_id;
329}
330
331void fec_mii_startup(struct net_device *dev)
332{
333 struct fec_enet_private *fep = netdev_priv(dev);
334 const struct fec_platform_info *fpi = fep->fpi;
335
336 if (!fpi->use_mdio || fep->phy == NULL)
337 return;
338
339 if (fep->phy->startup == NULL)
340 return;
341
342 (*fep->phy->startup) (dev);
343}
344
345void fec_mii_shutdown(struct net_device *dev)
346{
347 struct fec_enet_private *fep = netdev_priv(dev);
348 const struct fec_platform_info *fpi = fep->fpi;
349
350 if (!fpi->use_mdio || fep->phy == NULL)
351 return;
352
353 if (fep->phy->shutdown == NULL)
354 return;
355
356 (*fep->phy->shutdown) (dev);
357}
358
359void fec_mii_ack_int(struct net_device *dev)
360{
361 struct fec_enet_private *fep = netdev_priv(dev);
362 const struct fec_platform_info *fpi = fep->fpi;
363
364 if (!fpi->use_mdio || fep->phy == NULL)
365 return;
366
367 if (fep->phy->ack_int == NULL)
368 return;
369
370 (*fep->phy->ack_int) (dev);
371}
372
373/* helper function */
374static int mii_negotiated(struct mii_if_info *mii)
375{
376 int advert, lpa, val;
377
378 if (!mii_link_ok(mii))
379 return 0;
380
381 val = (*mii->mdio_read) (mii->dev, mii->phy_id, MII_BMSR);
382 if ((val & BMSR_ANEGCOMPLETE) == 0)
383 return 0;
384
385 advert = (*mii->mdio_read) (mii->dev, mii->phy_id, MII_ADVERTISE);
386 lpa = (*mii->mdio_read) (mii->dev, mii->phy_id, MII_LPA);
387
388 return mii_nway_result(advert & lpa);
389}
390
391void fec_mii_link_status_change_check(struct net_device *dev, int init_media)
392{
393 struct fec_enet_private *fep = netdev_priv(dev);
394 unsigned int media;
395 unsigned long flags;
396
397 if (mii_check_media(&fep->mii_if, netif_msg_link(fep), init_media) == 0)
398 return;
399
400 media = mii_negotiated(&fep->mii_if);
401
402 if (netif_carrier_ok(dev)) {
403 spin_lock_irqsave(&fep->lock, flags);
404 fec_restart(dev, !!(media & ADVERTISE_FULL),
405 (media & (ADVERTISE_100FULL | ADVERTISE_100HALF)) ?
406 100 : 10);
407 spin_unlock_irqrestore(&fep->lock, flags);
408
409 netif_start_queue(dev);
410 } else {
411 netif_stop_queue(dev);
412
413 spin_lock_irqsave(&fep->lock, flags);
414 fec_stop(dev);
415 spin_unlock_irqrestore(&fep->lock, flags);
416
417 }
418}
diff --git a/drivers/of/device.c b/drivers/of/device.c
index 29681c4b700b..8a1d93a2bb81 100644
--- a/drivers/of/device.c
+++ b/drivers/of/device.c
@@ -48,16 +48,32 @@ void of_dev_put(struct of_device *dev)
48} 48}
49EXPORT_SYMBOL(of_dev_put); 49EXPORT_SYMBOL(of_dev_put);
50 50
51static ssize_t dev_show_devspec(struct device *dev, 51static ssize_t devspec_show(struct device *dev,
52 struct device_attribute *attr, char *buf) 52 struct device_attribute *attr, char *buf)
53{ 53{
54 struct of_device *ofdev; 54 struct of_device *ofdev;
55 55
56 ofdev = to_of_device(dev); 56 ofdev = to_of_device(dev);
57 return sprintf(buf, "%s", ofdev->node->full_name); 57 return sprintf(buf, "%s\n", ofdev->node->full_name);
58} 58}
59 59
60static DEVICE_ATTR(devspec, S_IRUGO, dev_show_devspec, NULL); 60static ssize_t modalias_show(struct device *dev,
61 struct device_attribute *attr, char *buf)
62{
63 struct of_device *ofdev = to_of_device(dev);
64 ssize_t len = 0;
65
66 len = of_device_get_modalias(ofdev, buf, PAGE_SIZE - 2);
67 buf[len] = '\n';
68 buf[len+1] = 0;
69 return len+1;
70}
71
72struct device_attribute of_platform_device_attrs[] = {
73 __ATTR_RO(devspec),
74 __ATTR_RO(modalias),
75 __ATTR_NULL
76};
61 77
62/** 78/**
63 * of_release_dev - free an of device structure when all users of it are finished. 79 * of_release_dev - free an of device structure when all users of it are finished.
@@ -78,25 +94,61 @@ EXPORT_SYMBOL(of_release_dev);
78 94
79int of_device_register(struct of_device *ofdev) 95int of_device_register(struct of_device *ofdev)
80{ 96{
81 int rc;
82
83 BUG_ON(ofdev->node == NULL); 97 BUG_ON(ofdev->node == NULL);
84 98 return device_register(&ofdev->dev);
85 rc = device_register(&ofdev->dev);
86 if (rc)
87 return rc;
88
89 rc = device_create_file(&ofdev->dev, &dev_attr_devspec);
90 if (rc)
91 device_unregister(&ofdev->dev);
92
93 return rc;
94} 99}
95EXPORT_SYMBOL(of_device_register); 100EXPORT_SYMBOL(of_device_register);
96 101
97void of_device_unregister(struct of_device *ofdev) 102void of_device_unregister(struct of_device *ofdev)
98{ 103{
99 device_remove_file(&ofdev->dev, &dev_attr_devspec);
100 device_unregister(&ofdev->dev); 104 device_unregister(&ofdev->dev);
101} 105}
102EXPORT_SYMBOL(of_device_unregister); 106EXPORT_SYMBOL(of_device_unregister);
107
108ssize_t of_device_get_modalias(struct of_device *ofdev,
109 char *str, ssize_t len)
110{
111 const char *compat;
112 int cplen, i;
113 ssize_t tsize, csize, repend;
114
115 /* Name & Type */
116 csize = snprintf(str, len, "of:N%sT%s",
117 ofdev->node->name, ofdev->node->type);
118
119 /* Get compatible property if any */
120 compat = of_get_property(ofdev->node, "compatible", &cplen);
121 if (!compat)
122 return csize;
123
124 /* Find true end (we tolerate multiple \0 at the end */
125 for (i = (cplen - 1); i >= 0 && !compat[i]; i--)
126 cplen--;
127 if (!cplen)
128 return csize;
129 cplen++;
130
131 /* Check space (need cplen+1 chars including final \0) */
132 tsize = csize + cplen;
133 repend = tsize;
134
135 if (csize >= len) /* @ the limit, all is already filled */
136 return tsize;
137
138 if (tsize >= len) { /* limit compat list */
139 cplen = len - csize - 1;
140 repend = len;
141 }
142
143 /* Copy and do char replacement */
144 memcpy(&str[csize + 1], compat, cplen);
145 for (i = csize; i < repend; i++) {
146 char c = str[i];
147 if (c == '\0')
148 str[i] = 'C';
149 else if (c == ' ')
150 str[i] = '_';
151 }
152
153 return tsize;
154}
diff --git a/drivers/of/gpio.c b/drivers/of/gpio.c
index 000681e98f2c..1c9cab844f10 100644
--- a/drivers/of/gpio.c
+++ b/drivers/of/gpio.c
@@ -137,38 +137,6 @@ int of_gpio_simple_xlate(struct of_gpio_chip *of_gc, struct device_node *np,
137} 137}
138EXPORT_SYMBOL(of_gpio_simple_xlate); 138EXPORT_SYMBOL(of_gpio_simple_xlate);
139 139
140/* Should be sufficient for now, later we'll use dynamic bases. */
141#if defined(CONFIG_PPC32) || defined(CONFIG_SPARC32)
142#define GPIOS_PER_CHIP 32
143#else
144#define GPIOS_PER_CHIP 64
145#endif
146
147static int of_get_gpiochip_base(struct device_node *np)
148{
149 struct device_node *gc = NULL;
150 int gpiochip_base = 0;
151
152 while ((gc = of_find_all_nodes(gc))) {
153 if (!of_get_property(gc, "gpio-controller", NULL))
154 continue;
155
156 if (gc != np) {
157 gpiochip_base += GPIOS_PER_CHIP;
158 continue;
159 }
160
161 of_node_put(gc);
162
163 if (gpiochip_base >= ARCH_NR_GPIOS)
164 return -ENOSPC;
165
166 return gpiochip_base;
167 }
168
169 return -ENOENT;
170}
171
172/** 140/**
173 * of_mm_gpiochip_add - Add memory mapped GPIO chip (bank) 141 * of_mm_gpiochip_add - Add memory mapped GPIO chip (bank)
174 * @np: device node of the GPIO chip 142 * @np: device node of the GPIO chip
@@ -205,11 +173,7 @@ int of_mm_gpiochip_add(struct device_node *np,
205 if (!mm_gc->regs) 173 if (!mm_gc->regs)
206 goto err1; 174 goto err1;
207 175
208 gc->base = of_get_gpiochip_base(np); 176 gc->base = -1;
209 if (gc->base < 0) {
210 ret = gc->base;
211 goto err1;
212 }
213 177
214 if (!of_gc->xlate) 178 if (!of_gc->xlate)
215 of_gc->xlate = of_gpio_simple_xlate; 179 of_gc->xlate = of_gpio_simple_xlate;
diff --git a/drivers/of/platform.c b/drivers/of/platform.c
index ca09a63a64db..298de0f95d70 100644
--- a/drivers/of/platform.c
+++ b/drivers/of/platform.c
@@ -17,6 +17,8 @@
17#include <linux/of_device.h> 17#include <linux/of_device.h>
18#include <linux/of_platform.h> 18#include <linux/of_platform.h>
19 19
20extern struct device_attribute of_platform_device_attrs[];
21
20static int of_platform_bus_match(struct device *dev, struct device_driver *drv) 22static int of_platform_bus_match(struct device *dev, struct device_driver *drv)
21{ 23{
22 struct of_device *of_dev = to_of_device(dev); 24 struct of_device *of_dev = to_of_device(dev);
@@ -103,6 +105,7 @@ int of_bus_type_init(struct bus_type *bus, const char *name)
103 bus->suspend = of_platform_device_suspend; 105 bus->suspend = of_platform_device_suspend;
104 bus->resume = of_platform_device_resume; 106 bus->resume = of_platform_device_resume;
105 bus->shutdown = of_platform_device_shutdown; 107 bus->shutdown = of_platform_device_shutdown;
108 bus->dev_attrs = of_platform_device_attrs;
106 return bus_register(bus); 109 return bus_register(bus);
107} 110}
108 111
diff --git a/include/asm-powerpc/dcr-generic.h b/include/asm-powerpc/dcr-generic.h
new file mode 100644
index 000000000000..35b71599ec46
--- /dev/null
+++ b/include/asm-powerpc/dcr-generic.h
@@ -0,0 +1,49 @@
1/*
2 * (c) Copyright 2006 Benjamin Herrenschmidt, IBM Corp.
3 * <benh@kernel.crashing.org>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
13 * the GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 */
19
20#ifndef _ASM_POWERPC_DCR_GENERIC_H
21#define _ASM_POWERPC_DCR_GENERIC_H
22#ifdef __KERNEL__
23#ifndef __ASSEMBLY__
24
25enum host_type_t {DCR_HOST_MMIO, DCR_HOST_NATIVE, DCR_HOST_INVALID};
26
27typedef struct {
28 enum host_type_t type;
29 union {
30 dcr_host_mmio_t mmio;
31 dcr_host_native_t native;
32 } host;
33} dcr_host_t;
34
35extern bool dcr_map_ok_generic(dcr_host_t host);
36
37extern dcr_host_t dcr_map_generic(struct device_node *dev, unsigned int dcr_n,
38 unsigned int dcr_c);
39extern void dcr_unmap_generic(dcr_host_t host, unsigned int dcr_c);
40
41extern u32 dcr_read_generic(dcr_host_t host, unsigned int dcr_n);
42
43extern void dcr_write_generic(dcr_host_t host, unsigned int dcr_n, u32 value);
44
45#endif /* __ASSEMBLY__ */
46#endif /* __KERNEL__ */
47#endif /* _ASM_POWERPC_DCR_GENERIC_H */
48
49
diff --git a/include/asm-powerpc/dcr-mmio.h b/include/asm-powerpc/dcr-mmio.h
index 08532ff1899c..acd491dbd45a 100644
--- a/include/asm-powerpc/dcr-mmio.h
+++ b/include/asm-powerpc/dcr-mmio.h
@@ -27,20 +27,26 @@ typedef struct {
27 void __iomem *token; 27 void __iomem *token;
28 unsigned int stride; 28 unsigned int stride;
29 unsigned int base; 29 unsigned int base;
30} dcr_host_t; 30} dcr_host_mmio_t;
31 31
32#define DCR_MAP_OK(host) ((host).token != NULL) 32static inline bool dcr_map_ok_mmio(dcr_host_mmio_t host)
33{
34 return host.token != NULL;
35}
33 36
34extern dcr_host_t dcr_map(struct device_node *dev, unsigned int dcr_n, 37extern dcr_host_mmio_t dcr_map_mmio(struct device_node *dev,
35 unsigned int dcr_c); 38 unsigned int dcr_n,
36extern void dcr_unmap(dcr_host_t host, unsigned int dcr_c); 39 unsigned int dcr_c);
40extern void dcr_unmap_mmio(dcr_host_mmio_t host, unsigned int dcr_c);
37 41
38static inline u32 dcr_read(dcr_host_t host, unsigned int dcr_n) 42static inline u32 dcr_read_mmio(dcr_host_mmio_t host, unsigned int dcr_n)
39{ 43{
40 return in_be32(host.token + ((host.base + dcr_n) * host.stride)); 44 return in_be32(host.token + ((host.base + dcr_n) * host.stride));
41} 45}
42 46
43static inline void dcr_write(dcr_host_t host, unsigned int dcr_n, u32 value) 47static inline void dcr_write_mmio(dcr_host_mmio_t host,
48 unsigned int dcr_n,
49 u32 value)
44{ 50{
45 out_be32(host.token + ((host.base + dcr_n) * host.stride), value); 51 out_be32(host.token + ((host.base + dcr_n) * host.stride), value);
46} 52}
diff --git a/include/asm-powerpc/dcr-native.h b/include/asm-powerpc/dcr-native.h
index f8398ce80372..72d2b72c7390 100644
--- a/include/asm-powerpc/dcr-native.h
+++ b/include/asm-powerpc/dcr-native.h
@@ -26,14 +26,18 @@
26 26
27typedef struct { 27typedef struct {
28 unsigned int base; 28 unsigned int base;
29} dcr_host_t; 29} dcr_host_native_t;
30 30
31#define DCR_MAP_OK(host) (1) 31static inline bool dcr_map_ok_native(dcr_host_native_t host)
32{
33 return 1;
34}
32 35
33#define dcr_map(dev, dcr_n, dcr_c) ((dcr_host_t){ .base = (dcr_n) }) 36#define dcr_map_native(dev, dcr_n, dcr_c) \
34#define dcr_unmap(host, dcr_c) do {} while (0) 37 ((dcr_host_native_t){ .base = (dcr_n) })
35#define dcr_read(host, dcr_n) mfdcr(dcr_n + host.base) 38#define dcr_unmap_native(host, dcr_c) do {} while (0)
36#define dcr_write(host, dcr_n, value) mtdcr(dcr_n + host.base, value) 39#define dcr_read_native(host, dcr_n) mfdcr(dcr_n + host.base)
40#define dcr_write_native(host, dcr_n, value) mtdcr(dcr_n + host.base, value)
37 41
38/* Device Control Registers */ 42/* Device Control Registers */
39void __mtdcr(int reg, unsigned int val); 43void __mtdcr(int reg, unsigned int val);
diff --git a/include/asm-powerpc/dcr.h b/include/asm-powerpc/dcr.h
index 9338d50538f1..53b283050ab3 100644
--- a/include/asm-powerpc/dcr.h
+++ b/include/asm-powerpc/dcr.h
@@ -20,14 +20,50 @@
20#ifndef _ASM_POWERPC_DCR_H 20#ifndef _ASM_POWERPC_DCR_H
21#define _ASM_POWERPC_DCR_H 21#define _ASM_POWERPC_DCR_H
22#ifdef __KERNEL__ 22#ifdef __KERNEL__
23#ifndef __ASSEMBLY__
23#ifdef CONFIG_PPC_DCR 24#ifdef CONFIG_PPC_DCR
24 25
25#ifdef CONFIG_PPC_DCR_NATIVE 26#ifdef CONFIG_PPC_DCR_NATIVE
26#include <asm/dcr-native.h> 27#include <asm/dcr-native.h>
27#else 28#endif
29
30#ifdef CONFIG_PPC_DCR_MMIO
28#include <asm/dcr-mmio.h> 31#include <asm/dcr-mmio.h>
29#endif 32#endif
30 33
34
35/* Indirection layer for providing both NATIVE and MMIO support. */
36
37#if defined(CONFIG_PPC_DCR_NATIVE) && defined(CONFIG_PPC_DCR_MMIO)
38
39#include <asm/dcr-generic.h>
40
41#define DCR_MAP_OK(host) dcr_map_ok_generic(host)
42#define dcr_map(dev, dcr_n, dcr_c) dcr_map_generic(dev, dcr_n, dcr_c)
43#define dcr_unmap(host, dcr_c) dcr_unmap_generic(host, dcr_c)
44#define dcr_read(host, dcr_n) dcr_read_generic(host, dcr_n)
45#define dcr_write(host, dcr_n, value) dcr_write_generic(host, dcr_n, value)
46
47#else
48
49#ifdef CONFIG_PPC_DCR_NATIVE
50typedef dcr_host_native_t dcr_host_t;
51#define DCR_MAP_OK(host) dcr_map_ok_native(host)
52#define dcr_map(dev, dcr_n, dcr_c) dcr_map_native(dev, dcr_n, dcr_c)
53#define dcr_unmap(host, dcr_c) dcr_unmap_native(host, dcr_c)
54#define dcr_read(host, dcr_n) dcr_read_native(host, dcr_n)
55#define dcr_write(host, dcr_n, value) dcr_write_native(host, dcr_n, value)
56#else
57typedef dcr_host_mmio_t dcr_host_t;
58#define DCR_MAP_OK(host) dcr_map_ok_mmio(host)
59#define dcr_map(dev, dcr_n, dcr_c) dcr_map_mmio(dev, dcr_n, dcr_c)
60#define dcr_unmap(host, dcr_c) dcr_unmap_mmio(host, dcr_c)
61#define dcr_read(host, dcr_n) dcr_read_mmio(host, dcr_n)
62#define dcr_write(host, dcr_n, value) dcr_write_mmio(host, dcr_n, value)
63#endif
64
65#endif /* defined(CONFIG_PPC_DCR_NATIVE) && defined(CONFIG_PPC_DCR_MMIO) */
66
31/* 67/*
32 * On CONFIG_PPC_MERGE, we have additional helpers to read the DCR 68 * On CONFIG_PPC_MERGE, we have additional helpers to read the DCR
33 * base from the device-tree 69 * base from the device-tree
@@ -41,5 +77,6 @@ extern unsigned int dcr_resource_len(struct device_node *np,
41#endif /* CONFIG_PPC_MERGE */ 77#endif /* CONFIG_PPC_MERGE */
42 78
43#endif /* CONFIG_PPC_DCR */ 79#endif /* CONFIG_PPC_DCR */
80#endif /* __ASSEMBLY__ */
44#endif /* __KERNEL__ */ 81#endif /* __KERNEL__ */
45#endif /* _ASM_POWERPC_DCR_H */ 82#endif /* _ASM_POWERPC_DCR_H */
diff --git a/include/asm-powerpc/ioctl.h b/include/asm-powerpc/ioctl.h
index 8eb99848c402..57d68304218b 100644
--- a/include/asm-powerpc/ioctl.h
+++ b/include/asm-powerpc/ioctl.h
@@ -1,69 +1,13 @@
1#ifndef _ASM_POWERPC_IOCTL_H 1#ifndef _ASM_POWERPC_IOCTL_H
2#define _ASM_POWERPC_IOCTL_H 2#define _ASM_POWERPC_IOCTL_H
3 3
4
5/*
6 * this was copied from the alpha as it's a bit cleaner there.
7 * -- Cort
8 */
9
10#define _IOC_NRBITS 8
11#define _IOC_TYPEBITS 8
12#define _IOC_SIZEBITS 13 4#define _IOC_SIZEBITS 13
13#define _IOC_DIRBITS 3 5#define _IOC_DIRBITS 3
14 6
15#define _IOC_NRMASK ((1 << _IOC_NRBITS)-1)
16#define _IOC_TYPEMASK ((1 << _IOC_TYPEBITS)-1)
17#define _IOC_SIZEMASK ((1 << _IOC_SIZEBITS)-1)
18#define _IOC_DIRMASK ((1 << _IOC_DIRBITS)-1)
19
20#define _IOC_NRSHIFT 0
21#define _IOC_TYPESHIFT (_IOC_NRSHIFT+_IOC_NRBITS)
22#define _IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS)
23#define _IOC_DIRSHIFT (_IOC_SIZESHIFT+_IOC_SIZEBITS)
24
25/*
26 * Direction bits _IOC_NONE could be 0, but OSF/1 gives it a bit.
27 * And this turns out useful to catch old ioctl numbers in header
28 * files for us.
29 */
30#define _IOC_NONE 1U 7#define _IOC_NONE 1U
31#define _IOC_READ 2U 8#define _IOC_READ 2U
32#define _IOC_WRITE 4U 9#define _IOC_WRITE 4U
33 10
34#define _IOC(dir,type,nr,size) \ 11#include <asm-generic/ioctl.h>
35 (((dir) << _IOC_DIRSHIFT) | \
36 ((type) << _IOC_TYPESHIFT) | \
37 ((nr) << _IOC_NRSHIFT) | \
38 ((size) << _IOC_SIZESHIFT))
39
40/* provoke compile error for invalid uses of size argument */
41extern unsigned int __invalid_size_argument_for_IOC;
42#define _IOC_TYPECHECK(t) \
43 ((sizeof(t) == sizeof(t[1]) && \
44 sizeof(t) < (1 << _IOC_SIZEBITS)) ? \
45 sizeof(t) : __invalid_size_argument_for_IOC)
46
47/* used to create numbers */
48#define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0)
49#define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),(_IOC_TYPECHECK(size)))
50#define _IOW(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
51#define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
52#define _IOR_BAD(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size))
53#define _IOW_BAD(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size))
54#define _IOWR_BAD(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size))
55
56/* used to decode them.. */
57#define _IOC_DIR(nr) (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK)
58#define _IOC_TYPE(nr) (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK)
59#define _IOC_NR(nr) (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)
60#define _IOC_SIZE(nr) (((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK)
61
62/* various drivers, such as the pcmcia stuff, need these... */
63#define IOC_IN (_IOC_WRITE << _IOC_DIRSHIFT)
64#define IOC_OUT (_IOC_READ << _IOC_DIRSHIFT)
65#define IOC_INOUT ((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT)
66#define IOCSIZE_MASK (_IOC_SIZEMASK << _IOC_SIZESHIFT)
67#define IOCSIZE_SHIFT (_IOC_SIZESHIFT)
68 12
69#endif /* _ASM_POWERPC_IOCTL_H */ 13#endif /* _ASM_POWERPC_IOCTL_H */
diff --git a/include/asm-powerpc/irq.h b/include/asm-powerpc/irq.h
index 5089deb8fec3..1ef8e304e0ea 100644
--- a/include/asm-powerpc/irq.h
+++ b/include/asm-powerpc/irq.h
@@ -619,6 +619,19 @@ struct pt_regs;
619 619
620#define __ARCH_HAS_DO_SOFTIRQ 620#define __ARCH_HAS_DO_SOFTIRQ
621 621
622#if defined(CONFIG_BOOKE) || defined(CONFIG_40x)
623/*
624 * Per-cpu stacks for handling critical, debug and machine check
625 * level interrupts.
626 */
627extern struct thread_info *critirq_ctx[NR_CPUS];
628extern struct thread_info *dbgirq_ctx[NR_CPUS];
629extern struct thread_info *mcheckirq_ctx[NR_CPUS];
630extern void exc_lvl_ctx_init(void);
631#else
632#define exc_lvl_ctx_init()
633#endif
634
622#ifdef CONFIG_IRQSTACKS 635#ifdef CONFIG_IRQSTACKS
623/* 636/*
624 * Per-cpu stacks for handling hard and soft interrupts. 637 * Per-cpu stacks for handling hard and soft interrupts.
diff --git a/include/asm-powerpc/mmu-hash64.h b/include/asm-powerpc/mmu-hash64.h
index 39c5c5f62bf5..d1dc16afb118 100644
--- a/include/asm-powerpc/mmu-hash64.h
+++ b/include/asm-powerpc/mmu-hash64.h
@@ -182,6 +182,7 @@ extern int mmu_io_psize;
182extern int mmu_kernel_ssize; 182extern int mmu_kernel_ssize;
183extern int mmu_highuser_ssize; 183extern int mmu_highuser_ssize;
184extern u16 mmu_slb_size; 184extern u16 mmu_slb_size;
185extern unsigned long tce_alloc_start, tce_alloc_end;
185 186
186/* 187/*
187 * If the processor supports 64k normal pages but not 64k cache 188 * If the processor supports 64k normal pages but not 64k cache
diff --git a/include/asm-powerpc/mpc6xx.h b/include/asm-powerpc/mpc6xx.h
new file mode 100644
index 000000000000..effc2291beb2
--- /dev/null
+++ b/include/asm-powerpc/mpc6xx.h
@@ -0,0 +1,6 @@
1#ifndef __ASM_POWERPC_MPC6xx_H
2#define __ASM_POWERPC_MPC6xx_H
3
4void mpc6xx_enter_standby(void);
5
6#endif
diff --git a/include/asm-powerpc/mpic.h b/include/asm-powerpc/mpic.h
index a4d0f876b427..fe566a348a86 100644
--- a/include/asm-powerpc/mpic.h
+++ b/include/asm-powerpc/mpic.h
@@ -353,6 +353,8 @@ struct mpic
353#define MPIC_ENABLE_MCK 0x00000200 353#define MPIC_ENABLE_MCK 0x00000200
354/* Disable bias among target selection, spread interrupts evenly */ 354/* Disable bias among target selection, spread interrupts evenly */
355#define MPIC_NO_BIAS 0x00000400 355#define MPIC_NO_BIAS 0x00000400
356/* Ignore NIRQS as reported by FRR */
357#define MPIC_BROKEN_FRR_NIRQS 0x00000800
356 358
357/* MPIC HW modification ID */ 359/* MPIC HW modification ID */
358#define MPIC_REGSET_MASK 0xf0000000 360#define MPIC_REGSET_MASK 0xf0000000
diff --git a/include/asm-powerpc/of_device.h b/include/asm-powerpc/of_device.h
index 6526e139a463..3c123990ca2e 100644
--- a/include/asm-powerpc/of_device.h
+++ b/include/asm-powerpc/of_device.h
@@ -21,8 +21,6 @@ extern struct of_device *of_device_alloc(struct device_node *np,
21 const char *bus_id, 21 const char *bus_id,
22 struct device *parent); 22 struct device *parent);
23 23
24extern ssize_t of_device_get_modalias(struct of_device *ofdev,
25 char *str, ssize_t len);
26extern int of_device_uevent(struct device *dev, 24extern int of_device_uevent(struct device *dev,
27 struct kobj_uevent_env *env); 25 struct kobj_uevent_env *env);
28 26
diff --git a/include/asm-powerpc/ppc_asm.h b/include/asm-powerpc/ppc_asm.h
index 2dbd4e7884fa..ef96bfd4ef4c 100644
--- a/include/asm-powerpc/ppc_asm.h
+++ b/include/asm-powerpc/ppc_asm.h
@@ -356,6 +356,12 @@ END_FTR_SECTION_IFCLR(CPU_FTR_601)
356#define toreal(rd) 356#define toreal(rd)
357#define fromreal(rd) 357#define fromreal(rd)
358 358
359/*
360 * We use addis to ensure compatibility with the "classic" ppc versions of
361 * these macros, which use rs = 0 to get the tophys offset in rd, rather than
362 * converting the address in r0, and so this version has to do that too
363 * (i.e. set register rd to 0 when rs == 0).
364 */
359#define tophys(rd,rs) \ 365#define tophys(rd,rs) \
360 addis rd,rs,0 366 addis rd,rs,0
361 367
diff --git a/include/asm-powerpc/ptrace.h b/include/asm-powerpc/ptrace.h
index 39023dde1cc4..38d87e5e569d 100644
--- a/include/asm-powerpc/ptrace.h
+++ b/include/asm-powerpc/ptrace.h
@@ -119,6 +119,7 @@ extern int ptrace_put_reg(struct task_struct *task, int regno,
119#ifndef __powerpc64__ 119#ifndef __powerpc64__
120#define IS_CRITICAL_EXC(regs) (((regs)->trap & 2) != 0) 120#define IS_CRITICAL_EXC(regs) (((regs)->trap & 2) != 0)
121#define IS_MCHECK_EXC(regs) (((regs)->trap & 4) != 0) 121#define IS_MCHECK_EXC(regs) (((regs)->trap & 4) != 0)
122#define IS_DEBUG_EXC(regs) (((regs)->trap & 8) != 0)
122#endif /* ! __powerpc64__ */ 123#endif /* ! __powerpc64__ */
123#define TRAP(regs) ((regs)->trap & ~0xF) 124#define TRAP(regs) ((regs)->trap & ~0xF)
124#ifdef __powerpc64__ 125#ifdef __powerpc64__
diff --git a/include/asm-powerpc/smp.h b/include/asm-powerpc/smp.h
index 505f35bacaa9..1cd43e3d94fb 100644
--- a/include/asm-powerpc/smp.h
+++ b/include/asm-powerpc/smp.h
@@ -37,6 +37,8 @@ extern void cpu_die(void);
37extern void smp_send_debugger_break(int cpu); 37extern void smp_send_debugger_break(int cpu);
38extern void smp_message_recv(int); 38extern void smp_message_recv(int);
39 39
40DECLARE_PER_CPU(unsigned int, pvr);
41
40#ifdef CONFIG_HOTPLUG_CPU 42#ifdef CONFIG_HOTPLUG_CPU
41extern void fixup_irqs(cpumask_t map); 43extern void fixup_irqs(cpumask_t map);
42int generic_cpu_disable(void); 44int generic_cpu_disable(void);
diff --git a/include/asm-powerpc/system.h b/include/asm-powerpc/system.h
index 2b6559a6d113..df781adac6dd 100644
--- a/include/asm-powerpc/system.h
+++ b/include/asm-powerpc/system.h
@@ -190,6 +190,7 @@ extern struct task_struct *_switch(struct thread_struct *prev,
190 190
191extern unsigned int rtas_data; 191extern unsigned int rtas_data;
192extern int mem_init_done; /* set on boot once kmalloc can be called */ 192extern int mem_init_done; /* set on boot once kmalloc can be called */
193extern int init_bootmem_done; /* set on !NUMA once bootmem is available */
193extern unsigned long memory_limit; 194extern unsigned long memory_limit;
194extern unsigned long klimit; 195extern unsigned long klimit;
195 196
diff --git a/include/asm-powerpc/thread_info.h b/include/asm-powerpc/thread_info.h
index d030f5ce39ad..b705c2a7651a 100644
--- a/include/asm-powerpc/thread_info.h
+++ b/include/asm-powerpc/thread_info.h
@@ -116,7 +116,6 @@ static inline struct thread_info *current_thread_info(void)
116#define TIF_SECCOMP 10 /* secure computing */ 116#define TIF_SECCOMP 10 /* secure computing */
117#define TIF_RESTOREALL 11 /* Restore all regs (implies NOERROR) */ 117#define TIF_RESTOREALL 11 /* Restore all regs (implies NOERROR) */
118#define TIF_NOERROR 12 /* Force successful syscall return */ 118#define TIF_NOERROR 12 /* Force successful syscall return */
119#define TIF_RESTORE_SIGMASK 13 /* Restore signal mask in do_signal */
120#define TIF_FREEZE 14 /* Freezing for suspend */ 119#define TIF_FREEZE 14 /* Freezing for suspend */
121#define TIF_RUNLATCH 15 /* Is the runlatch enabled? */ 120#define TIF_RUNLATCH 15 /* Is the runlatch enabled? */
122#define TIF_ABI_PENDING 16 /* 32/64 bit switch needed */ 121#define TIF_ABI_PENDING 16 /* 32/64 bit switch needed */
@@ -134,21 +133,33 @@ static inline struct thread_info *current_thread_info(void)
134#define _TIF_SECCOMP (1<<TIF_SECCOMP) 133#define _TIF_SECCOMP (1<<TIF_SECCOMP)
135#define _TIF_RESTOREALL (1<<TIF_RESTOREALL) 134#define _TIF_RESTOREALL (1<<TIF_RESTOREALL)
136#define _TIF_NOERROR (1<<TIF_NOERROR) 135#define _TIF_NOERROR (1<<TIF_NOERROR)
137#define _TIF_RESTORE_SIGMASK (1<<TIF_RESTORE_SIGMASK)
138#define _TIF_FREEZE (1<<TIF_FREEZE) 136#define _TIF_FREEZE (1<<TIF_FREEZE)
139#define _TIF_RUNLATCH (1<<TIF_RUNLATCH) 137#define _TIF_RUNLATCH (1<<TIF_RUNLATCH)
140#define _TIF_ABI_PENDING (1<<TIF_ABI_PENDING) 138#define _TIF_ABI_PENDING (1<<TIF_ABI_PENDING)
141#define _TIF_SYSCALL_T_OR_A (_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP) 139#define _TIF_SYSCALL_T_OR_A (_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP)
142 140
143#define _TIF_USER_WORK_MASK ( _TIF_SIGPENDING | \ 141#define _TIF_USER_WORK_MASK (_TIF_SIGPENDING | _TIF_NEED_RESCHED)
144 _TIF_NEED_RESCHED | _TIF_RESTORE_SIGMASK)
145#define _TIF_PERSYSCALL_MASK (_TIF_RESTOREALL|_TIF_NOERROR) 142#define _TIF_PERSYSCALL_MASK (_TIF_RESTOREALL|_TIF_NOERROR)
146 143
147/* Bits in local_flags */ 144/* Bits in local_flags */
148/* Don't move TLF_NAPPING without adjusting the code in entry_32.S */ 145/* Don't move TLF_NAPPING without adjusting the code in entry_32.S */
149#define TLF_NAPPING 0 /* idle thread enabled NAP mode */ 146#define TLF_NAPPING 0 /* idle thread enabled NAP mode */
147#define TLF_SLEEPING 1 /* suspend code enabled SLEEP mode */
148#define TLF_RESTORE_SIGMASK 2 /* Restore signal mask in do_signal */
150 149
151#define _TLF_NAPPING (1 << TLF_NAPPING) 150#define _TLF_NAPPING (1 << TLF_NAPPING)
151#define _TLF_SLEEPING (1 << TLF_SLEEPING)
152#define _TLF_RESTORE_SIGMASK (1 << TLF_RESTORE_SIGMASK)
153
154#ifndef __ASSEMBLY__
155#define HAVE_SET_RESTORE_SIGMASK 1
156static inline void set_restore_sigmask(void)
157{
158 struct thread_info *ti = current_thread_info();
159 ti->local_flags |= _TLF_RESTORE_SIGMASK;
160 set_bit(TIF_SIGPENDING, &ti->flags);
161}
162#endif /* !__ASSEMBLY__ */
152 163
153#endif /* __KERNEL__ */ 164#endif /* __KERNEL__ */
154 165
diff --git a/include/asm-powerpc/time.h b/include/asm-powerpc/time.h
index ce5de6e0e690..febd581ec9b0 100644
--- a/include/asm-powerpc/time.h
+++ b/include/asm-powerpc/time.h
@@ -33,6 +33,7 @@ extern unsigned tb_to_us;
33 33
34struct rtc_time; 34struct rtc_time;
35extern void to_tm(int tim, struct rtc_time * tm); 35extern void to_tm(int tim, struct rtc_time * tm);
36extern void GregorianDay(struct rtc_time *tm);
36extern time_t last_rtc_update; 37extern time_t last_rtc_update;
37 38
38extern void generic_calibrate_decr(void); 39extern void generic_calibrate_decr(void);
diff --git a/include/asm-powerpc/xmon.h b/include/asm-powerpc/xmon.h
index 88320a05f0a8..5eb8e599e5cc 100644
--- a/include/asm-powerpc/xmon.h
+++ b/include/asm-powerpc/xmon.h
@@ -12,13 +12,22 @@
12 12
13#ifdef __KERNEL__ 13#ifdef __KERNEL__
14 14
15#include <linux/irqreturn.h>
16
15#ifdef CONFIG_XMON 17#ifdef CONFIG_XMON
16extern void xmon_setup(void); 18extern void xmon_setup(void);
17extern void xmon_register_spus(struct list_head *list); 19extern void xmon_register_spus(struct list_head *list);
20struct pt_regs;
21extern int xmon(struct pt_regs *excp);
22extern irqreturn_t xmon_irq(int, void *);
18#else 23#else
19static inline void xmon_setup(void) { }; 24static inline void xmon_setup(void) { };
20static inline void xmon_register_spus(struct list_head *list) { }; 25static inline void xmon_register_spus(struct list_head *list) { };
21#endif 26#endif
22 27
28#if defined(CONFIG_XMON) && defined(CONFIG_SMP)
29extern int cpus_are_in_xmon(void);
30#endif
31
23#endif /* __KERNEL __ */ 32#endif /* __KERNEL __ */
24#endif /* __ASM_POWERPC_XMON_H */ 33#endif /* __ASM_POWERPC_XMON_H */
diff --git a/include/linux/of_device.h b/include/linux/of_device.h
index afe338217d91..d3a74e00a3e1 100644
--- a/include/linux/of_device.h
+++ b/include/linux/of_device.h
@@ -24,4 +24,7 @@ static inline void of_device_free(struct of_device *dev)
24 of_release_dev(&dev->dev); 24 of_release_dev(&dev->dev);
25} 25}
26 26
27extern ssize_t of_device_get_modalias(struct of_device *ofdev,
28 char *str, ssize_t len);
29
27#endif /* _LINUX_OF_DEVICE_H */ 30#endif /* _LINUX_OF_DEVICE_H */