diff options
Diffstat (limited to 'arch/powerpc')
58 files changed, 1342 insertions, 310 deletions
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 525c13a4de93..adb23ea1c1ef 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig | |||
| @@ -141,7 +141,7 @@ config GENERIC_NVRAM | |||
| 141 | bool | 141 | bool |
| 142 | default y if PPC32 | 142 | default y if PPC32 |
| 143 | 143 | ||
| 144 | config SCHED_NO_NO_OMIT_FRAME_POINTER | 144 | config SCHED_OMIT_FRAME_POINTER |
| 145 | bool | 145 | bool |
| 146 | default y | 146 | default y |
| 147 | 147 | ||
diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile index 8fc6d72849ae..3d3daa674299 100644 --- a/arch/powerpc/boot/Makefile +++ b/arch/powerpc/boot/Makefile | |||
| @@ -41,6 +41,7 @@ $(obj)/4xx.o: BOOTCFLAGS += -mcpu=405 | |||
| 41 | $(obj)/ebony.o: BOOTCFLAGS += -mcpu=405 | 41 | $(obj)/ebony.o: BOOTCFLAGS += -mcpu=405 |
| 42 | $(obj)/cuboot-taishan.o: BOOTCFLAGS += -mcpu=405 | 42 | $(obj)/cuboot-taishan.o: BOOTCFLAGS += -mcpu=405 |
| 43 | $(obj)/cuboot-katmai.o: BOOTCFLAGS += -mcpu=405 | 43 | $(obj)/cuboot-katmai.o: BOOTCFLAGS += -mcpu=405 |
| 44 | $(obj)/cuboot-acadia.o: BOOTCFLAGS += -mcpu=405 | ||
| 44 | $(obj)/treeboot-walnut.o: BOOTCFLAGS += -mcpu=405 | 45 | $(obj)/treeboot-walnut.o: BOOTCFLAGS += -mcpu=405 |
| 45 | $(obj)/virtex405-head.o: BOOTAFLAGS += -mcpu=405 | 46 | $(obj)/virtex405-head.o: BOOTAFLAGS += -mcpu=405 |
| 46 | 47 | ||
diff --git a/arch/powerpc/boot/dts/asp834x-redboot.dts b/arch/powerpc/boot/dts/asp834x-redboot.dts index 6235fca445de..524af7ef9f26 100644 --- a/arch/powerpc/boot/dts/asp834x-redboot.dts +++ b/arch/powerpc/boot/dts/asp834x-redboot.dts | |||
| @@ -199,8 +199,26 @@ | |||
| 199 | reg = <0x2>; | 199 | reg = <0x2>; |
| 200 | device_type = "ethernet-phy"; | 200 | device_type = "ethernet-phy"; |
| 201 | }; | 201 | }; |
| 202 | |||
| 203 | tbi0: tbi-phy@11 { | ||
| 204 | reg = <0x11>; | ||
| 205 | device_type = "tbi-phy"; | ||
| 206 | }; | ||
| 202 | }; | 207 | }; |
| 203 | 208 | ||
| 209 | mdio@25520 { | ||
| 210 | #address-cells = <1>; | ||
| 211 | #size-cells = <0>; | ||
| 212 | compatible = "fsl,gianfar-tbi"; | ||
| 213 | reg = <0x25520 0x20>; | ||
| 214 | |||
| 215 | tbi1: tbi-phy@11 { | ||
| 216 | reg = <0x11>; | ||
| 217 | device_type = "tbi-phy"; | ||
| 218 | }; | ||
| 219 | }; | ||
| 220 | |||
| 221 | |||
| 204 | enet0: ethernet@24000 { | 222 | enet0: ethernet@24000 { |
| 205 | cell-index = <0>; | 223 | cell-index = <0>; |
| 206 | device_type = "network"; | 224 | device_type = "network"; |
| @@ -210,6 +228,7 @@ | |||
| 210 | local-mac-address = [ 00 08 e5 11 32 33 ]; | 228 | local-mac-address = [ 00 08 e5 11 32 33 ]; |
| 211 | interrupts = <32 0x8 33 0x8 34 0x8>; | 229 | interrupts = <32 0x8 33 0x8 34 0x8>; |
| 212 | interrupt-parent = <&ipic>; | 230 | interrupt-parent = <&ipic>; |
| 231 | tbi-handle = <&tbi0>; | ||
| 213 | phy-handle = <&phy0>; | 232 | phy-handle = <&phy0>; |
| 214 | linux,network-index = <0>; | 233 | linux,network-index = <0>; |
| 215 | }; | 234 | }; |
| @@ -223,6 +242,7 @@ | |||
| 223 | local-mac-address = [ 00 08 e5 11 32 34 ]; | 242 | local-mac-address = [ 00 08 e5 11 32 34 ]; |
| 224 | interrupts = <35 0x8 36 0x8 37 0x8>; | 243 | interrupts = <35 0x8 36 0x8 37 0x8>; |
| 225 | interrupt-parent = <&ipic>; | 244 | interrupt-parent = <&ipic>; |
| 245 | tbi-handle = <&tbi1>; | ||
| 226 | phy-handle = <&phy1>; | 246 | phy-handle = <&phy1>; |
| 227 | linux,network-index = <1>; | 247 | linux,network-index = <1>; |
| 228 | }; | 248 | }; |
diff --git a/arch/powerpc/boot/dts/ksi8560.dts b/arch/powerpc/boot/dts/ksi8560.dts index 49737589ffc8..3bfff47418db 100644 --- a/arch/powerpc/boot/dts/ksi8560.dts +++ b/arch/powerpc/boot/dts/ksi8560.dts | |||
| @@ -141,8 +141,26 @@ | |||
| 141 | reg = <0x2>; | 141 | reg = <0x2>; |
| 142 | device_type = "ethernet-phy"; | 142 | device_type = "ethernet-phy"; |
| 143 | }; | 143 | }; |
| 144 | |||
| 145 | tbi0: tbi-phy@11 { | ||
| 146 | reg = <0x11>; | ||
| 147 | device_type = "tbi-phy"; | ||
| 148 | }; | ||
| 144 | }; | 149 | }; |
| 145 | 150 | ||
| 151 | mdio@25520 { | ||
| 152 | #address-cells = <1>; | ||
| 153 | #size-cells = <0>; | ||
| 154 | compatible = "fsl,gianfar-tbi"; | ||
| 155 | reg = <0x25520 0x20>; | ||
| 156 | |||
| 157 | tbi1: tbi-phy@11 { | ||
| 158 | reg = <0x11>; | ||
| 159 | device_type = "tbi-phy"; | ||
| 160 | }; | ||
| 161 | }; | ||
| 162 | |||
| 163 | |||
| 146 | enet0: ethernet@24000 { | 164 | enet0: ethernet@24000 { |
| 147 | device_type = "network"; | 165 | device_type = "network"; |
| 148 | model = "TSEC"; | 166 | model = "TSEC"; |
| @@ -152,6 +170,7 @@ | |||
| 152 | local-mac-address = [ 00 00 00 00 00 00 ]; | 170 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 153 | interrupts = <0x1d 0x2 0x1e 0x2 0x22 0x2>; | 171 | interrupts = <0x1d 0x2 0x1e 0x2 0x22 0x2>; |
| 154 | interrupt-parent = <&mpic>; | 172 | interrupt-parent = <&mpic>; |
| 173 | tbi-handle = <&tbi0>; | ||
| 155 | phy-handle = <&PHY1>; | 174 | phy-handle = <&PHY1>; |
| 156 | }; | 175 | }; |
| 157 | 176 | ||
| @@ -164,6 +183,7 @@ | |||
| 164 | local-mac-address = [ 00 00 00 00 00 00 ]; | 183 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 165 | interrupts = <0x23 0x2 0x24 0x2 0x28 0x2>; | 184 | interrupts = <0x23 0x2 0x24 0x2 0x28 0x2>; |
| 166 | interrupt-parent = <&mpic>; | 185 | interrupt-parent = <&mpic>; |
| 186 | tbi-handle = <&tbi1>; | ||
| 167 | phy-handle = <&PHY2>; | 187 | phy-handle = <&PHY2>; |
| 168 | }; | 188 | }; |
| 169 | 189 | ||
diff --git a/arch/powerpc/boot/dts/mpc8313erdb.dts b/arch/powerpc/boot/dts/mpc8313erdb.dts index 503031766825..d4df8b6857a4 100644 --- a/arch/powerpc/boot/dts/mpc8313erdb.dts +++ b/arch/powerpc/boot/dts/mpc8313erdb.dts | |||
| @@ -190,6 +190,7 @@ | |||
| 190 | local-mac-address = [ 00 00 00 00 00 00 ]; | 190 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 191 | interrupts = <37 0x8 36 0x8 35 0x8>; | 191 | interrupts = <37 0x8 36 0x8 35 0x8>; |
| 192 | interrupt-parent = <&ipic>; | 192 | interrupt-parent = <&ipic>; |
| 193 | tbi-handle = < &tbi0 >; | ||
| 193 | phy-handle = < &phy1 >; | 194 | phy-handle = < &phy1 >; |
| 194 | fsl,magic-packet; | 195 | fsl,magic-packet; |
| 195 | 196 | ||
| @@ -210,6 +211,10 @@ | |||
| 210 | reg = <0x4>; | 211 | reg = <0x4>; |
| 211 | device_type = "ethernet-phy"; | 212 | device_type = "ethernet-phy"; |
| 212 | }; | 213 | }; |
| 214 | tbi0: tbi-phy@11 { | ||
| 215 | reg = <0x11>; | ||
| 216 | device_type = "tbi-phy"; | ||
| 217 | }; | ||
| 213 | }; | 218 | }; |
| 214 | }; | 219 | }; |
| 215 | 220 | ||
| @@ -222,9 +227,24 @@ | |||
| 222 | local-mac-address = [ 00 00 00 00 00 00 ]; | 227 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 223 | interrupts = <34 0x8 33 0x8 32 0x8>; | 228 | interrupts = <34 0x8 33 0x8 32 0x8>; |
| 224 | interrupt-parent = <&ipic>; | 229 | interrupt-parent = <&ipic>; |
| 230 | tbi-handle = < &tbi1 >; | ||
| 225 | phy-handle = < &phy4 >; | 231 | phy-handle = < &phy4 >; |
| 226 | sleep = <&pmc 0x10000000>; | 232 | sleep = <&pmc 0x10000000>; |
| 227 | fsl,magic-packet; | 233 | fsl,magic-packet; |
| 234 | |||
| 235 | mdio@25520 { | ||
| 236 | #address-cells = <1>; | ||
| 237 | #size-cells = <0>; | ||
| 238 | compatible = "fsl,gianfar-tbi"; | ||
| 239 | reg = <0x25520 0x20>; | ||
| 240 | |||
| 241 | tbi1: tbi-phy@11 { | ||
| 242 | reg = <0x11>; | ||
| 243 | device_type = "tbi-phy"; | ||
| 244 | }; | ||
| 245 | }; | ||
| 246 | |||
| 247 | |||
| 228 | }; | 248 | }; |
| 229 | 249 | ||
| 230 | serial0: serial@4500 { | 250 | serial0: serial@4500 { |
diff --git a/arch/powerpc/boot/dts/mpc8315erdb.dts b/arch/powerpc/boot/dts/mpc8315erdb.dts index 6b850670de1d..d2cdd47a246d 100644 --- a/arch/powerpc/boot/dts/mpc8315erdb.dts +++ b/arch/powerpc/boot/dts/mpc8315erdb.dts | |||
| @@ -206,8 +206,25 @@ | |||
| 206 | reg = <0x1>; | 206 | reg = <0x1>; |
| 207 | device_type = "ethernet-phy"; | 207 | device_type = "ethernet-phy"; |
| 208 | }; | 208 | }; |
| 209 | tbi0: tbi-phy@11 { | ||
| 210 | reg = <0x11>; | ||
| 211 | device_type = "tbi-phy"; | ||
| 212 | }; | ||
| 213 | }; | ||
| 214 | |||
| 215 | mdio@25520 { | ||
| 216 | #address-cells = <1>; | ||
| 217 | #size-cells = <0>; | ||
| 218 | compatible = "fsl,gianfar-tbi"; | ||
| 219 | reg = <0x25520 0x20>; | ||
| 220 | |||
| 221 | tbi1: tbi-phy@11 { | ||
| 222 | reg = <0x11>; | ||
| 223 | device_type = "tbi-phy"; | ||
| 224 | }; | ||
| 209 | }; | 225 | }; |
| 210 | 226 | ||
| 227 | |||
| 211 | enet0: ethernet@24000 { | 228 | enet0: ethernet@24000 { |
| 212 | cell-index = <0>; | 229 | cell-index = <0>; |
| 213 | device_type = "network"; | 230 | device_type = "network"; |
| @@ -217,6 +234,7 @@ | |||
| 217 | local-mac-address = [ 00 00 00 00 00 00 ]; | 234 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 218 | interrupts = <32 0x8 33 0x8 34 0x8>; | 235 | interrupts = <32 0x8 33 0x8 34 0x8>; |
| 219 | interrupt-parent = <&ipic>; | 236 | interrupt-parent = <&ipic>; |
| 237 | tbi-handle = <&tbi0>; | ||
| 220 | phy-handle = < &phy0 >; | 238 | phy-handle = < &phy0 >; |
| 221 | }; | 239 | }; |
| 222 | 240 | ||
| @@ -229,6 +247,7 @@ | |||
| 229 | local-mac-address = [ 00 00 00 00 00 00 ]; | 247 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 230 | interrupts = <35 0x8 36 0x8 37 0x8>; | 248 | interrupts = <35 0x8 36 0x8 37 0x8>; |
| 231 | interrupt-parent = <&ipic>; | 249 | interrupt-parent = <&ipic>; |
| 250 | tbi-handle = <&tbi1>; | ||
| 232 | phy-handle = < &phy1 >; | 251 | phy-handle = < &phy1 >; |
| 233 | }; | 252 | }; |
| 234 | 253 | ||
diff --git a/arch/powerpc/boot/dts/mpc8349emitx.dts b/arch/powerpc/boot/dts/mpc8349emitx.dts index 4bdbaf4993a1..712783d0707e 100644 --- a/arch/powerpc/boot/dts/mpc8349emitx.dts +++ b/arch/powerpc/boot/dts/mpc8349emitx.dts | |||
| @@ -184,6 +184,22 @@ | |||
| 184 | reg = <0x1c>; | 184 | reg = <0x1c>; |
| 185 | device_type = "ethernet-phy"; | 185 | device_type = "ethernet-phy"; |
| 186 | }; | 186 | }; |
| 187 | tbi0: tbi-phy@11 { | ||
| 188 | reg = <0x11>; | ||
| 189 | device_type = "tbi-phy"; | ||
| 190 | }; | ||
| 191 | }; | ||
| 192 | |||
| 193 | mdio@25520 { | ||
| 194 | #address-cells = <1>; | ||
| 195 | #size-cells = <0>; | ||
| 196 | compatible = "fsl,gianfar-tbi"; | ||
| 197 | reg = <0x25520 0x20>; | ||
| 198 | |||
| 199 | tbi1: tbi-phy@11 { | ||
| 200 | reg = <0x11>; | ||
| 201 | device_type = "tbi-phy"; | ||
| 202 | }; | ||
| 187 | }; | 203 | }; |
| 188 | 204 | ||
| 189 | enet0: ethernet@24000 { | 205 | enet0: ethernet@24000 { |
| @@ -195,6 +211,7 @@ | |||
| 195 | local-mac-address = [ 00 00 00 00 00 00 ]; | 211 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 196 | interrupts = <32 0x8 33 0x8 34 0x8>; | 212 | interrupts = <32 0x8 33 0x8 34 0x8>; |
| 197 | interrupt-parent = <&ipic>; | 213 | interrupt-parent = <&ipic>; |
| 214 | tbi-handle = <&tbi0>; | ||
| 198 | phy-handle = <&phy1c>; | 215 | phy-handle = <&phy1c>; |
| 199 | linux,network-index = <0>; | 216 | linux,network-index = <0>; |
| 200 | }; | 217 | }; |
| @@ -211,6 +228,7 @@ | |||
| 211 | /* Vitesse 7385 isn't on the MDIO bus */ | 228 | /* Vitesse 7385 isn't on the MDIO bus */ |
| 212 | fixed-link = <1 1 1000 0 0>; | 229 | fixed-link = <1 1 1000 0 0>; |
| 213 | linux,network-index = <1>; | 230 | linux,network-index = <1>; |
| 231 | tbi-handle = <&tbi1>; | ||
| 214 | }; | 232 | }; |
| 215 | 233 | ||
| 216 | serial0: serial@4500 { | 234 | serial0: serial@4500 { |
diff --git a/arch/powerpc/boot/dts/mpc8349emitxgp.dts b/arch/powerpc/boot/dts/mpc8349emitxgp.dts index fa40647ee62e..3e918af41fb1 100644 --- a/arch/powerpc/boot/dts/mpc8349emitxgp.dts +++ b/arch/powerpc/boot/dts/mpc8349emitxgp.dts | |||
| @@ -163,6 +163,10 @@ | |||
| 163 | reg = <0x1c>; | 163 | reg = <0x1c>; |
| 164 | device_type = "ethernet-phy"; | 164 | device_type = "ethernet-phy"; |
| 165 | }; | 165 | }; |
| 166 | tbi0: tbi-phy@11 { | ||
| 167 | reg = <0x11>; | ||
| 168 | device_type = "tbi-phy"; | ||
| 169 | }; | ||
| 166 | }; | 170 | }; |
| 167 | 171 | ||
| 168 | enet0: ethernet@24000 { | 172 | enet0: ethernet@24000 { |
| @@ -174,6 +178,7 @@ | |||
| 174 | local-mac-address = [ 00 00 00 00 00 00 ]; | 178 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 175 | interrupts = <32 0x8 33 0x8 34 0x8>; | 179 | interrupts = <32 0x8 33 0x8 34 0x8>; |
| 176 | interrupt-parent = <&ipic>; | 180 | interrupt-parent = <&ipic>; |
| 181 | tbi-handle = <&tbi0>; | ||
| 177 | phy-handle = <&phy1c>; | 182 | phy-handle = <&phy1c>; |
| 178 | linux,network-index = <0>; | 183 | linux,network-index = <0>; |
| 179 | }; | 184 | }; |
diff --git a/arch/powerpc/boot/dts/mpc834x_mds.dts b/arch/powerpc/boot/dts/mpc834x_mds.dts index c986c541e9bb..d9adba01c09c 100644 --- a/arch/powerpc/boot/dts/mpc834x_mds.dts +++ b/arch/powerpc/boot/dts/mpc834x_mds.dts | |||
| @@ -185,8 +185,25 @@ | |||
| 185 | reg = <0x1>; | 185 | reg = <0x1>; |
| 186 | device_type = "ethernet-phy"; | 186 | device_type = "ethernet-phy"; |
| 187 | }; | 187 | }; |
| 188 | tbi0: tbi-phy@11 { | ||
| 189 | reg = <0x11>; | ||
| 190 | device_type = "tbi-phy"; | ||
| 191 | }; | ||
| 192 | }; | ||
| 193 | |||
| 194 | mdio@25520 { | ||
| 195 | #address-cells = <1>; | ||
| 196 | #size-cells = <0>; | ||
| 197 | compatible = "fsl,gianfar-tbi"; | ||
| 198 | reg = <0x25520 0x20>; | ||
| 199 | |||
| 200 | tbi1: tbi-phy@11 { | ||
| 201 | reg = <0x11>; | ||
| 202 | device_type = "tbi-phy"; | ||
| 203 | }; | ||
| 188 | }; | 204 | }; |
| 189 | 205 | ||
| 206 | |||
| 190 | enet0: ethernet@24000 { | 207 | enet0: ethernet@24000 { |
| 191 | cell-index = <0>; | 208 | cell-index = <0>; |
| 192 | device_type = "network"; | 209 | device_type = "network"; |
| @@ -196,6 +213,7 @@ | |||
| 196 | local-mac-address = [ 00 00 00 00 00 00 ]; | 213 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 197 | interrupts = <32 0x8 33 0x8 34 0x8>; | 214 | interrupts = <32 0x8 33 0x8 34 0x8>; |
| 198 | interrupt-parent = <&ipic>; | 215 | interrupt-parent = <&ipic>; |
| 216 | tbi-handle = <&tbi0>; | ||
| 199 | phy-handle = <&phy0>; | 217 | phy-handle = <&phy0>; |
| 200 | linux,network-index = <0>; | 218 | linux,network-index = <0>; |
| 201 | }; | 219 | }; |
| @@ -209,6 +227,7 @@ | |||
| 209 | local-mac-address = [ 00 00 00 00 00 00 ]; | 227 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 210 | interrupts = <35 0x8 36 0x8 37 0x8>; | 228 | interrupts = <35 0x8 36 0x8 37 0x8>; |
| 211 | interrupt-parent = <&ipic>; | 229 | interrupt-parent = <&ipic>; |
| 230 | tbi-handle = <&tbi1>; | ||
| 212 | phy-handle = <&phy1>; | 231 | phy-handle = <&phy1>; |
| 213 | linux,network-index = <1>; | 232 | linux,network-index = <1>; |
| 214 | }; | 233 | }; |
diff --git a/arch/powerpc/boot/dts/mpc8377_mds.dts b/arch/powerpc/boot/dts/mpc8377_mds.dts index 0484561bd2c0..1d14d7052e6d 100644 --- a/arch/powerpc/boot/dts/mpc8377_mds.dts +++ b/arch/powerpc/boot/dts/mpc8377_mds.dts | |||
| @@ -193,8 +193,25 @@ | |||
| 193 | reg = <0x3>; | 193 | reg = <0x3>; |
| 194 | device_type = "ethernet-phy"; | 194 | device_type = "ethernet-phy"; |
| 195 | }; | 195 | }; |
| 196 | tbi0: tbi-phy@11 { | ||
| 197 | reg = <0x11>; | ||
| 198 | device_type = "tbi-phy"; | ||
| 199 | }; | ||
| 200 | }; | ||
| 201 | |||
| 202 | mdio@25520 { | ||
| 203 | #address-cells = <1>; | ||
| 204 | #size-cells = <0>; | ||
| 205 | compatible = "fsl,gianfar-tbi"; | ||
| 206 | reg = <0x25520 0x20>; | ||
| 207 | |||
| 208 | tbi1: tbi-phy@11 { | ||
| 209 | reg = <0x11>; | ||
| 210 | device_type = "tbi-phy"; | ||
| 211 | }; | ||
| 196 | }; | 212 | }; |
| 197 | 213 | ||
| 214 | |||
| 198 | enet0: ethernet@24000 { | 215 | enet0: ethernet@24000 { |
| 199 | cell-index = <0>; | 216 | cell-index = <0>; |
| 200 | device_type = "network"; | 217 | device_type = "network"; |
| @@ -205,6 +222,7 @@ | |||
| 205 | interrupts = <32 0x8 33 0x8 34 0x8>; | 222 | interrupts = <32 0x8 33 0x8 34 0x8>; |
| 206 | phy-connection-type = "mii"; | 223 | phy-connection-type = "mii"; |
| 207 | interrupt-parent = <&ipic>; | 224 | interrupt-parent = <&ipic>; |
| 225 | tbi-handle = <&tbi0>; | ||
| 208 | phy-handle = <&phy2>; | 226 | phy-handle = <&phy2>; |
| 209 | }; | 227 | }; |
| 210 | 228 | ||
| @@ -218,6 +236,7 @@ | |||
| 218 | interrupts = <35 0x8 36 0x8 37 0x8>; | 236 | interrupts = <35 0x8 36 0x8 37 0x8>; |
| 219 | phy-connection-type = "mii"; | 237 | phy-connection-type = "mii"; |
| 220 | interrupt-parent = <&ipic>; | 238 | interrupt-parent = <&ipic>; |
| 239 | tbi-handle = <&tbi1>; | ||
| 221 | phy-handle = <&phy3>; | 240 | phy-handle = <&phy3>; |
| 222 | }; | 241 | }; |
| 223 | 242 | ||
diff --git a/arch/powerpc/boot/dts/mpc8377_rdb.dts b/arch/powerpc/boot/dts/mpc8377_rdb.dts index 435ef3dd022d..31f348fdfe14 100644 --- a/arch/powerpc/boot/dts/mpc8377_rdb.dts +++ b/arch/powerpc/boot/dts/mpc8377_rdb.dts | |||
| @@ -211,8 +211,25 @@ | |||
| 211 | reg = <0x2>; | 211 | reg = <0x2>; |
| 212 | device_type = "ethernet-phy"; | 212 | device_type = "ethernet-phy"; |
| 213 | }; | 213 | }; |
| 214 | tbi0: tbi-phy@11 { | ||
| 215 | reg = <0x11>; | ||
| 216 | device_type = "tbi-phy"; | ||
| 217 | }; | ||
| 218 | }; | ||
| 219 | |||
| 220 | mdio@25520 { | ||
| 221 | #address-cells = <1>; | ||
| 222 | #size-cells = <0>; | ||
| 223 | compatible = "fsl,gianfar-tbi"; | ||
| 224 | reg = <0x25520 0x20>; | ||
| 225 | |||
| 226 | tbi1: tbi-phy@11 { | ||
| 227 | reg = <0x11>; | ||
| 228 | device_type = "tbi-phy"; | ||
| 229 | }; | ||
| 214 | }; | 230 | }; |
| 215 | 231 | ||
| 232 | |||
| 216 | enet0: ethernet@24000 { | 233 | enet0: ethernet@24000 { |
| 217 | cell-index = <0>; | 234 | cell-index = <0>; |
| 218 | device_type = "network"; | 235 | device_type = "network"; |
| @@ -223,6 +240,7 @@ | |||
| 223 | interrupts = <32 0x8 33 0x8 34 0x8>; | 240 | interrupts = <32 0x8 33 0x8 34 0x8>; |
| 224 | phy-connection-type = "mii"; | 241 | phy-connection-type = "mii"; |
| 225 | interrupt-parent = <&ipic>; | 242 | interrupt-parent = <&ipic>; |
| 243 | tbi-handle = <&tbi0>; | ||
| 226 | phy-handle = <&phy2>; | 244 | phy-handle = <&phy2>; |
| 227 | }; | 245 | }; |
| 228 | 246 | ||
| @@ -237,6 +255,7 @@ | |||
| 237 | phy-connection-type = "mii"; | 255 | phy-connection-type = "mii"; |
| 238 | interrupt-parent = <&ipic>; | 256 | interrupt-parent = <&ipic>; |
| 239 | fixed-link = <1 1 1000 0 0>; | 257 | fixed-link = <1 1 1000 0 0>; |
| 258 | tbi-handle = <&tbi1>; | ||
| 240 | }; | 259 | }; |
| 241 | 260 | ||
| 242 | serial0: serial@4500 { | 261 | serial0: serial@4500 { |
diff --git a/arch/powerpc/boot/dts/mpc8378_mds.dts b/arch/powerpc/boot/dts/mpc8378_mds.dts index 67a08d2e2ff2..b85fc02682d2 100644 --- a/arch/powerpc/boot/dts/mpc8378_mds.dts +++ b/arch/powerpc/boot/dts/mpc8378_mds.dts | |||
| @@ -232,8 +232,25 @@ | |||
| 232 | reg = <0x3>; | 232 | reg = <0x3>; |
| 233 | device_type = "ethernet-phy"; | 233 | device_type = "ethernet-phy"; |
| 234 | }; | 234 | }; |
| 235 | tbi0: tbi-phy@11 { | ||
| 236 | reg = <0x11>; | ||
| 237 | device_type = "tbi-phy"; | ||
| 238 | }; | ||
| 239 | }; | ||
| 240 | |||
| 241 | mdio@25520 { | ||
| 242 | #address-cells = <1>; | ||
| 243 | #size-cells = <0>; | ||
| 244 | compatible = "fsl,gianfar-tbi"; | ||
| 245 | reg = <0x25520 0x20>; | ||
| 246 | |||
| 247 | tbi1: tbi-phy@11 { | ||
| 248 | reg = <0x11>; | ||
| 249 | device_type = "tbi-phy"; | ||
| 250 | }; | ||
| 235 | }; | 251 | }; |
| 236 | 252 | ||
| 253 | |||
| 237 | enet0: ethernet@24000 { | 254 | enet0: ethernet@24000 { |
| 238 | cell-index = <0>; | 255 | cell-index = <0>; |
| 239 | device_type = "network"; | 256 | device_type = "network"; |
| @@ -244,6 +261,7 @@ | |||
| 244 | interrupts = <32 0x8 33 0x8 34 0x8>; | 261 | interrupts = <32 0x8 33 0x8 34 0x8>; |
| 245 | phy-connection-type = "mii"; | 262 | phy-connection-type = "mii"; |
| 246 | interrupt-parent = <&ipic>; | 263 | interrupt-parent = <&ipic>; |
| 264 | tbi-handle = <&tbi0>; | ||
| 247 | phy-handle = <&phy2>; | 265 | phy-handle = <&phy2>; |
| 248 | }; | 266 | }; |
| 249 | 267 | ||
| @@ -257,6 +275,7 @@ | |||
| 257 | interrupts = <35 0x8 36 0x8 37 0x8>; | 275 | interrupts = <35 0x8 36 0x8 37 0x8>; |
| 258 | phy-connection-type = "mii"; | 276 | phy-connection-type = "mii"; |
| 259 | interrupt-parent = <&ipic>; | 277 | interrupt-parent = <&ipic>; |
| 278 | tbi-handle = <&tbi1>; | ||
| 260 | phy-handle = <&phy3>; | 279 | phy-handle = <&phy3>; |
| 261 | }; | 280 | }; |
| 262 | 281 | ||
diff --git a/arch/powerpc/boot/dts/mpc8378_rdb.dts b/arch/powerpc/boot/dts/mpc8378_rdb.dts index b11e68f56a06..7a2bad038bd6 100644 --- a/arch/powerpc/boot/dts/mpc8378_rdb.dts +++ b/arch/powerpc/boot/dts/mpc8378_rdb.dts | |||
| @@ -211,8 +211,25 @@ | |||
| 211 | reg = <0x2>; | 211 | reg = <0x2>; |
| 212 | device_type = "ethernet-phy"; | 212 | device_type = "ethernet-phy"; |
| 213 | }; | 213 | }; |
| 214 | tbi0: tbi-phy@11 { | ||
| 215 | reg = <0x11>; | ||
| 216 | device_type = "tbi-phy"; | ||
| 217 | }; | ||
| 218 | }; | ||
| 219 | |||
| 220 | mdio@25520 { | ||
| 221 | #address-cells = <1>; | ||
| 222 | #size-cells = <0>; | ||
| 223 | compatible = "fsl,gianfar-tbi"; | ||
| 224 | reg = <0x25520 0x20>; | ||
| 225 | |||
| 226 | tbi1: tbi-phy@11 { | ||
| 227 | reg = <0x11>; | ||
| 228 | device_type = "tbi-phy"; | ||
| 229 | }; | ||
| 214 | }; | 230 | }; |
| 215 | 231 | ||
| 232 | |||
| 216 | enet0: ethernet@24000 { | 233 | enet0: ethernet@24000 { |
| 217 | cell-index = <0>; | 234 | cell-index = <0>; |
| 218 | device_type = "network"; | 235 | device_type = "network"; |
diff --git a/arch/powerpc/boot/dts/mpc8379_mds.dts b/arch/powerpc/boot/dts/mpc8379_mds.dts index 323370a2b5ff..acf06c438dbf 100644 --- a/arch/powerpc/boot/dts/mpc8379_mds.dts +++ b/arch/powerpc/boot/dts/mpc8379_mds.dts | |||
| @@ -232,6 +232,22 @@ | |||
| 232 | reg = <0x3>; | 232 | reg = <0x3>; |
| 233 | device_type = "ethernet-phy"; | 233 | device_type = "ethernet-phy"; |
| 234 | }; | 234 | }; |
| 235 | tbi0: tbi-phy@11 { | ||
| 236 | reg = <0x11>; | ||
| 237 | device_type = "tbi-phy"; | ||
| 238 | }; | ||
| 239 | }; | ||
| 240 | |||
| 241 | mdio@25520 { | ||
| 242 | #address-cells = <1>; | ||
| 243 | #size-cells = <0>; | ||
| 244 | compatible = "fsl,gianfar-tbi"; | ||
| 245 | reg = <0x25520 0x20>; | ||
| 246 | |||
| 247 | tbi1: tbi-phy@11 { | ||
| 248 | reg = <0x11>; | ||
| 249 | device_type = "tbi-phy"; | ||
| 250 | }; | ||
| 235 | }; | 251 | }; |
| 236 | 252 | ||
| 237 | enet0: ethernet@24000 { | 253 | enet0: ethernet@24000 { |
| @@ -244,6 +260,7 @@ | |||
| 244 | interrupts = <32 0x8 33 0x8 34 0x8>; | 260 | interrupts = <32 0x8 33 0x8 34 0x8>; |
| 245 | phy-connection-type = "mii"; | 261 | phy-connection-type = "mii"; |
| 246 | interrupt-parent = <&ipic>; | 262 | interrupt-parent = <&ipic>; |
| 263 | tbi-handle = <&tbi0>; | ||
| 247 | phy-handle = <&phy2>; | 264 | phy-handle = <&phy2>; |
| 248 | }; | 265 | }; |
| 249 | 266 | ||
| @@ -257,6 +274,7 @@ | |||
| 257 | interrupts = <35 0x8 36 0x8 37 0x8>; | 274 | interrupts = <35 0x8 36 0x8 37 0x8>; |
| 258 | phy-connection-type = "mii"; | 275 | phy-connection-type = "mii"; |
| 259 | interrupt-parent = <&ipic>; | 276 | interrupt-parent = <&ipic>; |
| 277 | tbi-handle = <&tbi1>; | ||
| 260 | phy-handle = <&phy3>; | 278 | phy-handle = <&phy3>; |
| 261 | }; | 279 | }; |
| 262 | 280 | ||
diff --git a/arch/powerpc/boot/dts/mpc8379_rdb.dts b/arch/powerpc/boot/dts/mpc8379_rdb.dts index 337af6ea26d3..e067616f3f42 100644 --- a/arch/powerpc/boot/dts/mpc8379_rdb.dts +++ b/arch/powerpc/boot/dts/mpc8379_rdb.dts | |||
| @@ -211,6 +211,22 @@ | |||
| 211 | reg = <0x2>; | 211 | reg = <0x2>; |
| 212 | device_type = "ethernet-phy"; | 212 | device_type = "ethernet-phy"; |
| 213 | }; | 213 | }; |
| 214 | tbi0: tbi-phy@11 { | ||
| 215 | reg = <0x11>; | ||
| 216 | device_type = "tbi-phy"; | ||
| 217 | }; | ||
| 218 | }; | ||
| 219 | |||
| 220 | mdio@25520 { | ||
| 221 | #address-cells = <1>; | ||
| 222 | #size-cells = <0>; | ||
| 223 | compatible = "fsl,gianfar-tbi"; | ||
| 224 | reg = <0x25520 0x20>; | ||
| 225 | |||
| 226 | tbi1: tbi-phy@11 { | ||
| 227 | reg = <0x11>; | ||
| 228 | device_type = "tbi-phy"; | ||
| 229 | }; | ||
| 214 | }; | 230 | }; |
| 215 | 231 | ||
| 216 | enet0: ethernet@24000 { | 232 | enet0: ethernet@24000 { |
| @@ -223,6 +239,7 @@ | |||
| 223 | interrupts = <32 0x8 33 0x8 34 0x8>; | 239 | interrupts = <32 0x8 33 0x8 34 0x8>; |
| 224 | phy-connection-type = "mii"; | 240 | phy-connection-type = "mii"; |
| 225 | interrupt-parent = <&ipic>; | 241 | interrupt-parent = <&ipic>; |
| 242 | tbi-handle = <&tbi0>; | ||
| 226 | phy-handle = <&phy2>; | 243 | phy-handle = <&phy2>; |
| 227 | }; | 244 | }; |
| 228 | 245 | ||
| @@ -237,6 +254,7 @@ | |||
| 237 | phy-connection-type = "mii"; | 254 | phy-connection-type = "mii"; |
| 238 | interrupt-parent = <&ipic>; | 255 | interrupt-parent = <&ipic>; |
| 239 | fixed-link = <1 1 1000 0 0>; | 256 | fixed-link = <1 1 1000 0 0>; |
| 257 | tbi-handle = <&tbi1>; | ||
| 240 | }; | 258 | }; |
| 241 | 259 | ||
| 242 | serial0: serial@4500 { | 260 | serial0: serial@4500 { |
diff --git a/arch/powerpc/boot/dts/mpc8536ds.dts b/arch/powerpc/boot/dts/mpc8536ds.dts index 35db1e5440c7..3c905df1812c 100644 --- a/arch/powerpc/boot/dts/mpc8536ds.dts +++ b/arch/powerpc/boot/dts/mpc8536ds.dts | |||
| @@ -155,6 +155,22 @@ | |||
| 155 | reg = <1>; | 155 | reg = <1>; |
| 156 | device_type = "ethernet-phy"; | 156 | device_type = "ethernet-phy"; |
| 157 | }; | 157 | }; |
| 158 | tbi0: tbi-phy@11 { | ||
| 159 | reg = <0x11>; | ||
| 160 | device_type = "tbi-phy"; | ||
| 161 | }; | ||
| 162 | }; | ||
| 163 | |||
| 164 | mdio@26520 { | ||
| 165 | #address-cells = <1>; | ||
| 166 | #size-cells = <0>; | ||
| 167 | compatible = "fsl,gianfar-tbi"; | ||
| 168 | reg = <0x26520 0x20>; | ||
| 169 | |||
| 170 | tbi1: tbi-phy@11 { | ||
| 171 | reg = <0x11>; | ||
| 172 | device_type = "tbi-phy"; | ||
| 173 | }; | ||
| 158 | }; | 174 | }; |
| 159 | 175 | ||
| 160 | usb@22000 { | 176 | usb@22000 { |
| @@ -186,6 +202,7 @@ | |||
| 186 | local-mac-address = [ 00 00 00 00 00 00 ]; | 202 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 187 | interrupts = <29 2 30 2 34 2>; | 203 | interrupts = <29 2 30 2 34 2>; |
| 188 | interrupt-parent = <&mpic>; | 204 | interrupt-parent = <&mpic>; |
| 205 | tbi-handle = <&tbi0>; | ||
| 189 | phy-handle = <&phy1>; | 206 | phy-handle = <&phy1>; |
| 190 | phy-connection-type = "rgmii-id"; | 207 | phy-connection-type = "rgmii-id"; |
| 191 | }; | 208 | }; |
| @@ -199,6 +216,7 @@ | |||
| 199 | local-mac-address = [ 00 00 00 00 00 00 ]; | 216 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 200 | interrupts = <31 2 32 2 33 2>; | 217 | interrupts = <31 2 32 2 33 2>; |
| 201 | interrupt-parent = <&mpic>; | 218 | interrupt-parent = <&mpic>; |
| 219 | tbi-handle = <&tbi1>; | ||
| 202 | phy-handle = <&phy0>; | 220 | phy-handle = <&phy0>; |
| 203 | phy-connection-type = "rgmii-id"; | 221 | phy-connection-type = "rgmii-id"; |
| 204 | }; | 222 | }; |
diff --git a/arch/powerpc/boot/dts/mpc8540ads.dts b/arch/powerpc/boot/dts/mpc8540ads.dts index 9568bfaff8f7..79570ffe41b9 100644 --- a/arch/powerpc/boot/dts/mpc8540ads.dts +++ b/arch/powerpc/boot/dts/mpc8540ads.dts | |||
| @@ -150,6 +150,34 @@ | |||
| 150 | reg = <0x3>; | 150 | reg = <0x3>; |
| 151 | device_type = "ethernet-phy"; | 151 | device_type = "ethernet-phy"; |
| 152 | }; | 152 | }; |
| 153 | tbi0: tbi-phy@11 { | ||
| 154 | reg = <0x11>; | ||
| 155 | device_type = "tbi-phy"; | ||
| 156 | }; | ||
| 157 | }; | ||
| 158 | |||
| 159 | mdio@25520 { | ||
| 160 | #address-cells = <1>; | ||
| 161 | #size-cells = <0>; | ||
| 162 | compatible = "fsl,gianfar-tbi"; | ||
| 163 | reg = <0x25520 0x20>; | ||
| 164 | |||
| 165 | tbi1: tbi-phy@11 { | ||
| 166 | reg = <0x11>; | ||
| 167 | device_type = "tbi-phy"; | ||
| 168 | }; | ||
| 169 | }; | ||
| 170 | |||
| 171 | mdio@26520 { | ||
| 172 | #address-cells = <1>; | ||
| 173 | #size-cells = <0>; | ||
| 174 | compatible = "fsl,gianfar-tbi"; | ||
| 175 | reg = <0x26520 0x20>; | ||
| 176 | |||
| 177 | tbi2: tbi-phy@11 { | ||
| 178 | reg = <0x11>; | ||
| 179 | device_type = "tbi-phy"; | ||
| 180 | }; | ||
| 153 | }; | 181 | }; |
| 154 | 182 | ||
| 155 | enet0: ethernet@24000 { | 183 | enet0: ethernet@24000 { |
| @@ -161,6 +189,7 @@ | |||
| 161 | local-mac-address = [ 00 00 00 00 00 00 ]; | 189 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 162 | interrupts = <29 2 30 2 34 2>; | 190 | interrupts = <29 2 30 2 34 2>; |
| 163 | interrupt-parent = <&mpic>; | 191 | interrupt-parent = <&mpic>; |
| 192 | tbi-handle = <&tbi0>; | ||
| 164 | phy-handle = <&phy0>; | 193 | phy-handle = <&phy0>; |
| 165 | }; | 194 | }; |
| 166 | 195 | ||
| @@ -173,6 +202,7 @@ | |||
| 173 | local-mac-address = [ 00 00 00 00 00 00 ]; | 202 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 174 | interrupts = <35 2 36 2 40 2>; | 203 | interrupts = <35 2 36 2 40 2>; |
| 175 | interrupt-parent = <&mpic>; | 204 | interrupt-parent = <&mpic>; |
| 205 | tbi-handle = <&tbi1>; | ||
| 176 | phy-handle = <&phy1>; | 206 | phy-handle = <&phy1>; |
| 177 | }; | 207 | }; |
| 178 | 208 | ||
| @@ -185,6 +215,7 @@ | |||
| 185 | local-mac-address = [ 00 00 00 00 00 00 ]; | 215 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 186 | interrupts = <41 2>; | 216 | interrupts = <41 2>; |
| 187 | interrupt-parent = <&mpic>; | 217 | interrupt-parent = <&mpic>; |
| 218 | tbi-handle = <&tbi2>; | ||
| 188 | phy-handle = <&phy3>; | 219 | phy-handle = <&phy3>; |
| 189 | }; | 220 | }; |
| 190 | 221 | ||
diff --git a/arch/powerpc/boot/dts/mpc8541cds.dts b/arch/powerpc/boot/dts/mpc8541cds.dts index 6480f4fd96e0..221036a8ce23 100644 --- a/arch/powerpc/boot/dts/mpc8541cds.dts +++ b/arch/powerpc/boot/dts/mpc8541cds.dts | |||
| @@ -144,6 +144,22 @@ | |||
| 144 | reg = <0x1>; | 144 | reg = <0x1>; |
| 145 | device_type = "ethernet-phy"; | 145 | device_type = "ethernet-phy"; |
| 146 | }; | 146 | }; |
| 147 | tbi0: tbi-phy@11 { | ||
| 148 | reg = <0x11>; | ||
| 149 | device_type = "tbi-phy"; | ||
| 150 | }; | ||
| 151 | }; | ||
| 152 | |||
| 153 | mdio@25520 { | ||
| 154 | #address-cells = <1>; | ||
| 155 | #size-cells = <0>; | ||
| 156 | compatible = "fsl,gianfar-tbi"; | ||
| 157 | reg = <0x25520 0x20>; | ||
| 158 | |||
| 159 | tbi1: tbi-phy@11 { | ||
| 160 | reg = <0x11>; | ||
| 161 | device_type = "tbi-phy"; | ||
| 162 | }; | ||
| 147 | }; | 163 | }; |
| 148 | 164 | ||
| 149 | enet0: ethernet@24000 { | 165 | enet0: ethernet@24000 { |
| @@ -155,6 +171,7 @@ | |||
| 155 | local-mac-address = [ 00 00 00 00 00 00 ]; | 171 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 156 | interrupts = <29 2 30 2 34 2>; | 172 | interrupts = <29 2 30 2 34 2>; |
| 157 | interrupt-parent = <&mpic>; | 173 | interrupt-parent = <&mpic>; |
| 174 | tbi-handle = <&tbi0>; | ||
| 158 | phy-handle = <&phy0>; | 175 | phy-handle = <&phy0>; |
| 159 | }; | 176 | }; |
| 160 | 177 | ||
| @@ -167,6 +184,7 @@ | |||
| 167 | local-mac-address = [ 00 00 00 00 00 00 ]; | 184 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 168 | interrupts = <35 2 36 2 40 2>; | 185 | interrupts = <35 2 36 2 40 2>; |
| 169 | interrupt-parent = <&mpic>; | 186 | interrupt-parent = <&mpic>; |
| 187 | tbi-handle = <&tbi1>; | ||
| 170 | phy-handle = <&phy1>; | 188 | phy-handle = <&phy1>; |
| 171 | }; | 189 | }; |
| 172 | 190 | ||
diff --git a/arch/powerpc/boot/dts/mpc8544ds.dts b/arch/powerpc/boot/dts/mpc8544ds.dts index f1fb20737e3e..b9da42105066 100644 --- a/arch/powerpc/boot/dts/mpc8544ds.dts +++ b/arch/powerpc/boot/dts/mpc8544ds.dts | |||
| @@ -116,8 +116,26 @@ | |||
| 116 | reg = <0x1>; | 116 | reg = <0x1>; |
| 117 | device_type = "ethernet-phy"; | 117 | device_type = "ethernet-phy"; |
| 118 | }; | 118 | }; |
| 119 | |||
| 120 | tbi0: tbi-phy@11 { | ||
| 121 | reg = <0x11>; | ||
| 122 | device_type = "tbi-phy"; | ||
| 123 | }; | ||
| 119 | }; | 124 | }; |
| 120 | 125 | ||
| 126 | mdio@26520 { | ||
| 127 | #address-cells = <1>; | ||
| 128 | #size-cells = <0>; | ||
| 129 | compatible = "fsl,gianfar-tbi"; | ||
| 130 | reg = <0x26520 0x20>; | ||
| 131 | |||
| 132 | tbi1: tbi-phy@11 { | ||
| 133 | reg = <0x11>; | ||
| 134 | device_type = "tbi-phy"; | ||
| 135 | }; | ||
| 136 | }; | ||
| 137 | |||
| 138 | |||
| 121 | dma@21300 { | 139 | dma@21300 { |
| 122 | #address-cells = <1>; | 140 | #address-cells = <1>; |
| 123 | #size-cells = <1>; | 141 | #size-cells = <1>; |
| @@ -169,6 +187,7 @@ | |||
| 169 | interrupts = <29 2 30 2 34 2>; | 187 | interrupts = <29 2 30 2 34 2>; |
| 170 | interrupt-parent = <&mpic>; | 188 | interrupt-parent = <&mpic>; |
| 171 | phy-handle = <&phy0>; | 189 | phy-handle = <&phy0>; |
| 190 | tbi-handle = <&tbi0>; | ||
| 172 | phy-connection-type = "rgmii-id"; | 191 | phy-connection-type = "rgmii-id"; |
| 173 | }; | 192 | }; |
| 174 | 193 | ||
| @@ -182,6 +201,7 @@ | |||
| 182 | interrupts = <31 2 32 2 33 2>; | 201 | interrupts = <31 2 32 2 33 2>; |
| 183 | interrupt-parent = <&mpic>; | 202 | interrupt-parent = <&mpic>; |
| 184 | phy-handle = <&phy1>; | 203 | phy-handle = <&phy1>; |
| 204 | tbi-handle = <&tbi1>; | ||
| 185 | phy-connection-type = "rgmii-id"; | 205 | phy-connection-type = "rgmii-id"; |
| 186 | }; | 206 | }; |
| 187 | 207 | ||
diff --git a/arch/powerpc/boot/dts/mpc8548cds.dts b/arch/powerpc/boot/dts/mpc8548cds.dts index 431b496270dc..df774a7088ff 100644 --- a/arch/powerpc/boot/dts/mpc8548cds.dts +++ b/arch/powerpc/boot/dts/mpc8548cds.dts | |||
| @@ -172,6 +172,46 @@ | |||
| 172 | reg = <0x3>; | 172 | reg = <0x3>; |
| 173 | device_type = "ethernet-phy"; | 173 | device_type = "ethernet-phy"; |
| 174 | }; | 174 | }; |
| 175 | tbi0: tbi-phy@11 { | ||
| 176 | reg = <0x11>; | ||
| 177 | device_type = "tbi-phy"; | ||
| 178 | }; | ||
| 179 | }; | ||
| 180 | |||
| 181 | mdio@25520 { | ||
| 182 | #address-cells = <1>; | ||
| 183 | #size-cells = <0>; | ||
| 184 | compatible = "fsl,gianfar-tbi"; | ||
| 185 | reg = <0x25520 0x20>; | ||
| 186 | |||
| 187 | tbi1: tbi-phy@11 { | ||
| 188 | reg = <0x11>; | ||
| 189 | device_type = "tbi-phy"; | ||
| 190 | }; | ||
| 191 | }; | ||
| 192 | |||
| 193 | mdio@26520 { | ||
| 194 | #address-cells = <1>; | ||
| 195 | #size-cells = <0>; | ||
| 196 | compatible = "fsl,gianfar-tbi"; | ||
| 197 | reg = <0x26520 0x20>; | ||
| 198 | |||
| 199 | tbi2: tbi-phy@11 { | ||
| 200 | reg = <0x11>; | ||
| 201 | device_type = "tbi-phy"; | ||
| 202 | }; | ||
| 203 | }; | ||
| 204 | |||
| 205 | mdio@27520 { | ||
| 206 | #address-cells = <1>; | ||
| 207 | #size-cells = <0>; | ||
| 208 | compatible = "fsl,gianfar-tbi"; | ||
| 209 | reg = <0x27520 0x20>; | ||
| 210 | |||
| 211 | tbi3: tbi-phy@11 { | ||
| 212 | reg = <0x11>; | ||
| 213 | device_type = "tbi-phy"; | ||
| 214 | }; | ||
| 175 | }; | 215 | }; |
| 176 | 216 | ||
| 177 | enet0: ethernet@24000 { | 217 | enet0: ethernet@24000 { |
| @@ -183,6 +223,7 @@ | |||
| 183 | local-mac-address = [ 00 00 00 00 00 00 ]; | 223 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 184 | interrupts = <29 2 30 2 34 2>; | 224 | interrupts = <29 2 30 2 34 2>; |
| 185 | interrupt-parent = <&mpic>; | 225 | interrupt-parent = <&mpic>; |
| 226 | tbi-handle = <&tbi0>; | ||
| 186 | phy-handle = <&phy0>; | 227 | phy-handle = <&phy0>; |
| 187 | }; | 228 | }; |
| 188 | 229 | ||
| @@ -195,6 +236,7 @@ | |||
| 195 | local-mac-address = [ 00 00 00 00 00 00 ]; | 236 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 196 | interrupts = <35 2 36 2 40 2>; | 237 | interrupts = <35 2 36 2 40 2>; |
| 197 | interrupt-parent = <&mpic>; | 238 | interrupt-parent = <&mpic>; |
| 239 | tbi-handle = <&tbi1>; | ||
| 198 | phy-handle = <&phy1>; | 240 | phy-handle = <&phy1>; |
| 199 | }; | 241 | }; |
| 200 | 242 | ||
| @@ -208,6 +250,7 @@ | |||
| 208 | local-mac-address = [ 00 00 00 00 00 00 ]; | 250 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 209 | interrupts = <31 2 32 2 33 2>; | 251 | interrupts = <31 2 32 2 33 2>; |
| 210 | interrupt-parent = <&mpic>; | 252 | interrupt-parent = <&mpic>; |
| 253 | tbi-handle = <&tbi2>; | ||
| 211 | phy-handle = <&phy2>; | 254 | phy-handle = <&phy2>; |
| 212 | }; | 255 | }; |
| 213 | 256 | ||
| @@ -220,6 +263,7 @@ | |||
| 220 | local-mac-address = [ 00 00 00 00 00 00 ]; | 263 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 221 | interrupts = <37 2 38 2 39 2>; | 264 | interrupts = <37 2 38 2 39 2>; |
| 222 | interrupt-parent = <&mpic>; | 265 | interrupt-parent = <&mpic>; |
| 266 | tbi-handle = <&tbi3>; | ||
| 223 | phy-handle = <&phy3>; | 267 | phy-handle = <&phy3>; |
| 224 | }; | 268 | }; |
| 225 | */ | 269 | */ |
diff --git a/arch/powerpc/boot/dts/mpc8555cds.dts b/arch/powerpc/boot/dts/mpc8555cds.dts index d833a5c4f476..053b01e1c93b 100644 --- a/arch/powerpc/boot/dts/mpc8555cds.dts +++ b/arch/powerpc/boot/dts/mpc8555cds.dts | |||
| @@ -144,6 +144,22 @@ | |||
| 144 | reg = <0x1>; | 144 | reg = <0x1>; |
| 145 | device_type = "ethernet-phy"; | 145 | device_type = "ethernet-phy"; |
| 146 | }; | 146 | }; |
| 147 | tbi0: tbi-phy@11 { | ||
| 148 | reg = <0x11>; | ||
| 149 | device_type = "tbi-phy"; | ||
| 150 | }; | ||
| 151 | }; | ||
| 152 | |||
| 153 | mdio@25520 { | ||
| 154 | #address-cells = <1>; | ||
| 155 | #size-cells = <0>; | ||
| 156 | compatible = "fsl,gianfar-tbi"; | ||
| 157 | reg = <0x25520 0x20>; | ||
| 158 | |||
| 159 | tbi1: tbi-phy@11 { | ||
| 160 | reg = <0x11>; | ||
| 161 | device_type = "tbi-phy"; | ||
| 162 | }; | ||
| 147 | }; | 163 | }; |
| 148 | 164 | ||
| 149 | enet0: ethernet@24000 { | 165 | enet0: ethernet@24000 { |
| @@ -155,6 +171,7 @@ | |||
| 155 | local-mac-address = [ 00 00 00 00 00 00 ]; | 171 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 156 | interrupts = <29 2 30 2 34 2>; | 172 | interrupts = <29 2 30 2 34 2>; |
| 157 | interrupt-parent = <&mpic>; | 173 | interrupt-parent = <&mpic>; |
| 174 | tbi-handle = <&tbi0>; | ||
| 158 | phy-handle = <&phy0>; | 175 | phy-handle = <&phy0>; |
| 159 | }; | 176 | }; |
| 160 | 177 | ||
| @@ -167,6 +184,7 @@ | |||
| 167 | local-mac-address = [ 00 00 00 00 00 00 ]; | 184 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 168 | interrupts = <35 2 36 2 40 2>; | 185 | interrupts = <35 2 36 2 40 2>; |
| 169 | interrupt-parent = <&mpic>; | 186 | interrupt-parent = <&mpic>; |
| 187 | tbi-handle = <&tbi1>; | ||
| 170 | phy-handle = <&phy1>; | 188 | phy-handle = <&phy1>; |
| 171 | }; | 189 | }; |
| 172 | 190 | ||
diff --git a/arch/powerpc/boot/dts/mpc8560ads.dts b/arch/powerpc/boot/dts/mpc8560ads.dts index 4d1f2f284094..11b1bcbe14ce 100644 --- a/arch/powerpc/boot/dts/mpc8560ads.dts +++ b/arch/powerpc/boot/dts/mpc8560ads.dts | |||
| @@ -145,6 +145,22 @@ | |||
| 145 | reg = <0x3>; | 145 | reg = <0x3>; |
| 146 | device_type = "ethernet-phy"; | 146 | device_type = "ethernet-phy"; |
| 147 | }; | 147 | }; |
| 148 | tbi0: tbi-phy@11 { | ||
| 149 | reg = <0x11>; | ||
| 150 | device_type = "tbi-phy"; | ||
| 151 | }; | ||
| 152 | }; | ||
| 153 | |||
| 154 | mdio@25520 { | ||
| 155 | #address-cells = <1>; | ||
| 156 | #size-cells = <0>; | ||
| 157 | compatible = "fsl,gianfar-tbi"; | ||
| 158 | reg = <0x25520 0x20>; | ||
| 159 | |||
| 160 | tbi1: tbi-phy@11 { | ||
| 161 | reg = <0x11>; | ||
| 162 | device_type = "tbi-phy"; | ||
| 163 | }; | ||
| 148 | }; | 164 | }; |
| 149 | 165 | ||
| 150 | enet0: ethernet@24000 { | 166 | enet0: ethernet@24000 { |
| @@ -156,6 +172,7 @@ | |||
| 156 | local-mac-address = [ 00 00 00 00 00 00 ]; | 172 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 157 | interrupts = <29 2 30 2 34 2>; | 173 | interrupts = <29 2 30 2 34 2>; |
| 158 | interrupt-parent = <&mpic>; | 174 | interrupt-parent = <&mpic>; |
| 175 | tbi-handle = <&tbi0>; | ||
| 159 | phy-handle = <&phy0>; | 176 | phy-handle = <&phy0>; |
| 160 | }; | 177 | }; |
| 161 | 178 | ||
| @@ -168,6 +185,7 @@ | |||
| 168 | local-mac-address = [ 00 00 00 00 00 00 ]; | 185 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 169 | interrupts = <35 2 36 2 40 2>; | 186 | interrupts = <35 2 36 2 40 2>; |
| 170 | interrupt-parent = <&mpic>; | 187 | interrupt-parent = <&mpic>; |
| 188 | tbi-handle = <&tbi1>; | ||
| 171 | phy-handle = <&phy1>; | 189 | phy-handle = <&phy1>; |
| 172 | }; | 190 | }; |
| 173 | 191 | ||
diff --git a/arch/powerpc/boot/dts/mpc8568mds.dts b/arch/powerpc/boot/dts/mpc8568mds.dts index c80158f7741d..1955bd9e113d 100644 --- a/arch/powerpc/boot/dts/mpc8568mds.dts +++ b/arch/powerpc/boot/dts/mpc8568mds.dts | |||
| @@ -179,6 +179,22 @@ | |||
| 179 | reg = <0x3>; | 179 | reg = <0x3>; |
| 180 | device_type = "ethernet-phy"; | 180 | device_type = "ethernet-phy"; |
| 181 | }; | 181 | }; |
| 182 | tbi0: tbi-phy@11 { | ||
| 183 | reg = <0x11>; | ||
| 184 | device_type = "tbi-phy"; | ||
| 185 | }; | ||
| 186 | }; | ||
| 187 | |||
| 188 | mdio@25520 { | ||
| 189 | #address-cells = <1>; | ||
| 190 | #size-cells = <0>; | ||
| 191 | compatible = "fsl,gianfar-tbi"; | ||
| 192 | reg = <0x25520 0x20>; | ||
| 193 | |||
| 194 | tbi1: tbi-phy@11 { | ||
| 195 | reg = <0x11>; | ||
| 196 | device_type = "tbi-phy"; | ||
| 197 | }; | ||
| 182 | }; | 198 | }; |
| 183 | 199 | ||
| 184 | enet0: ethernet@24000 { | 200 | enet0: ethernet@24000 { |
| @@ -190,6 +206,7 @@ | |||
| 190 | local-mac-address = [ 00 00 00 00 00 00 ]; | 206 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 191 | interrupts = <29 2 30 2 34 2>; | 207 | interrupts = <29 2 30 2 34 2>; |
| 192 | interrupt-parent = <&mpic>; | 208 | interrupt-parent = <&mpic>; |
| 209 | tbi-handle = <&tbi0>; | ||
| 193 | phy-handle = <&phy2>; | 210 | phy-handle = <&phy2>; |
| 194 | }; | 211 | }; |
| 195 | 212 | ||
| @@ -202,6 +219,7 @@ | |||
| 202 | local-mac-address = [ 00 00 00 00 00 00 ]; | 219 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 203 | interrupts = <35 2 36 2 40 2>; | 220 | interrupts = <35 2 36 2 40 2>; |
| 204 | interrupt-parent = <&mpic>; | 221 | interrupt-parent = <&mpic>; |
| 222 | tbi-handle = <&tbi1>; | ||
| 205 | phy-handle = <&phy3>; | 223 | phy-handle = <&phy3>; |
| 206 | }; | 224 | }; |
| 207 | 225 | ||
diff --git a/arch/powerpc/boot/dts/mpc8572ds.dts b/arch/powerpc/boot/dts/mpc8572ds.dts index 5c69b2fafd32..05f67253b49f 100644 --- a/arch/powerpc/boot/dts/mpc8572ds.dts +++ b/arch/powerpc/boot/dts/mpc8572ds.dts | |||
| @@ -225,6 +225,47 @@ | |||
| 225 | interrupts = <10 1>; | 225 | interrupts = <10 1>; |
| 226 | reg = <0x3>; | 226 | reg = <0x3>; |
| 227 | }; | 227 | }; |
| 228 | |||
| 229 | tbi0: tbi-phy@11 { | ||
| 230 | reg = <0x11>; | ||
| 231 | device_type = "tbi-phy"; | ||
| 232 | }; | ||
| 233 | }; | ||
| 234 | |||
| 235 | mdio@25520 { | ||
| 236 | #address-cells = <1>; | ||
| 237 | #size-cells = <0>; | ||
| 238 | compatible = "fsl,gianfar-tbi"; | ||
| 239 | reg = <0x25520 0x20>; | ||
| 240 | |||
| 241 | tbi1: tbi-phy@11 { | ||
| 242 | reg = <0x11>; | ||
| 243 | device_type = "tbi-phy"; | ||
| 244 | }; | ||
| 245 | }; | ||
| 246 | |||
| 247 | mdio@26520 { | ||
| 248 | #address-cells = <1>; | ||
| 249 | #size-cells = <0>; | ||
| 250 | compatible = "fsl,gianfar-tbi"; | ||
| 251 | reg = <0x26520 0x20>; | ||
| 252 | |||
| 253 | tbi2: tbi-phy@11 { | ||
| 254 | reg = <0x11>; | ||
| 255 | device_type = "tbi-phy"; | ||
| 256 | }; | ||
| 257 | }; | ||
| 258 | |||
| 259 | mdio@27520 { | ||
| 260 | #address-cells = <1>; | ||
| 261 | #size-cells = <0>; | ||
| 262 | compatible = "fsl,gianfar-tbi"; | ||
| 263 | reg = <0x27520 0x20>; | ||
| 264 | |||
| 265 | tbi3: tbi-phy@11 { | ||
| 266 | reg = <0x11>; | ||
| 267 | device_type = "tbi-phy"; | ||
| 268 | }; | ||
| 228 | }; | 269 | }; |
| 229 | 270 | ||
| 230 | enet0: ethernet@24000 { | 271 | enet0: ethernet@24000 { |
| @@ -236,6 +277,7 @@ | |||
| 236 | local-mac-address = [ 00 00 00 00 00 00 ]; | 277 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 237 | interrupts = <29 2 30 2 34 2>; | 278 | interrupts = <29 2 30 2 34 2>; |
| 238 | interrupt-parent = <&mpic>; | 279 | interrupt-parent = <&mpic>; |
| 280 | tbi-handle = <&tbi0>; | ||
| 239 | phy-handle = <&phy0>; | 281 | phy-handle = <&phy0>; |
| 240 | phy-connection-type = "rgmii-id"; | 282 | phy-connection-type = "rgmii-id"; |
| 241 | }; | 283 | }; |
| @@ -249,6 +291,7 @@ | |||
| 249 | local-mac-address = [ 00 00 00 00 00 00 ]; | 291 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 250 | interrupts = <35 2 36 2 40 2>; | 292 | interrupts = <35 2 36 2 40 2>; |
| 251 | interrupt-parent = <&mpic>; | 293 | interrupt-parent = <&mpic>; |
| 294 | tbi-handle = <&tbi1>; | ||
| 252 | phy-handle = <&phy1>; | 295 | phy-handle = <&phy1>; |
| 253 | phy-connection-type = "rgmii-id"; | 296 | phy-connection-type = "rgmii-id"; |
| 254 | }; | 297 | }; |
| @@ -262,6 +305,7 @@ | |||
| 262 | local-mac-address = [ 00 00 00 00 00 00 ]; | 305 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 263 | interrupts = <31 2 32 2 33 2>; | 306 | interrupts = <31 2 32 2 33 2>; |
| 264 | interrupt-parent = <&mpic>; | 307 | interrupt-parent = <&mpic>; |
| 308 | tbi-handle = <&tbi2>; | ||
| 265 | phy-handle = <&phy2>; | 309 | phy-handle = <&phy2>; |
| 266 | phy-connection-type = "rgmii-id"; | 310 | phy-connection-type = "rgmii-id"; |
| 267 | }; | 311 | }; |
| @@ -275,6 +319,7 @@ | |||
| 275 | local-mac-address = [ 00 00 00 00 00 00 ]; | 319 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 276 | interrupts = <37 2 38 2 39 2>; | 320 | interrupts = <37 2 38 2 39 2>; |
| 277 | interrupt-parent = <&mpic>; | 321 | interrupt-parent = <&mpic>; |
| 322 | tbi-handle = <&tbi3>; | ||
| 278 | phy-handle = <&phy3>; | 323 | phy-handle = <&phy3>; |
| 279 | phy-connection-type = "rgmii-id"; | 324 | phy-connection-type = "rgmii-id"; |
| 280 | }; | 325 | }; |
diff --git a/arch/powerpc/boot/dts/mpc8641_hpcn.dts b/arch/powerpc/boot/dts/mpc8641_hpcn.dts index d665e767822a..35d5e248ccd7 100644 --- a/arch/powerpc/boot/dts/mpc8641_hpcn.dts +++ b/arch/powerpc/boot/dts/mpc8641_hpcn.dts | |||
| @@ -205,8 +205,49 @@ | |||
| 205 | reg = <3>; | 205 | reg = <3>; |
| 206 | device_type = "ethernet-phy"; | 206 | device_type = "ethernet-phy"; |
| 207 | }; | 207 | }; |
| 208 | tbi0: tbi-phy@11 { | ||
| 209 | reg = <0x11>; | ||
| 210 | device_type = "tbi-phy"; | ||
| 211 | }; | ||
| 212 | }; | ||
| 213 | |||
| 214 | mdio@25520 { | ||
| 215 | #address-cells = <1>; | ||
| 216 | #size-cells = <0>; | ||
| 217 | compatible = "fsl,gianfar-tbi"; | ||
| 218 | reg = <0x25520 0x20>; | ||
| 219 | |||
| 220 | tbi1: tbi-phy@11 { | ||
| 221 | reg = <0x11>; | ||
| 222 | device_type = "tbi-phy"; | ||
| 223 | }; | ||
| 224 | }; | ||
| 225 | |||
| 226 | mdio@26520 { | ||
| 227 | #address-cells = <1>; | ||
| 228 | #size-cells = <0>; | ||
| 229 | compatible = "fsl,gianfar-tbi"; | ||
| 230 | reg = <0x26520 0x20>; | ||
| 231 | |||
| 232 | tbi2: tbi-phy@11 { | ||
| 233 | reg = <0x11>; | ||
| 234 | device_type = "tbi-phy"; | ||
| 235 | }; | ||
| 236 | }; | ||
| 237 | |||
| 238 | mdio@27520 { | ||
| 239 | #address-cells = <1>; | ||
| 240 | #size-cells = <0>; | ||
| 241 | compatible = "fsl,gianfar-tbi"; | ||
| 242 | reg = <0x27520 0x20>; | ||
| 243 | |||
| 244 | tbi3: tbi-phy@11 { | ||
| 245 | reg = <0x11>; | ||
| 246 | device_type = "tbi-phy"; | ||
| 247 | }; | ||
| 208 | }; | 248 | }; |
| 209 | 249 | ||
| 250 | |||
| 210 | enet0: ethernet@24000 { | 251 | enet0: ethernet@24000 { |
| 211 | cell-index = <0>; | 252 | cell-index = <0>; |
| 212 | device_type = "network"; | 253 | device_type = "network"; |
| @@ -216,6 +257,7 @@ | |||
| 216 | local-mac-address = [ 00 00 00 00 00 00 ]; | 257 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 217 | interrupts = <29 2 30 2 34 2>; | 258 | interrupts = <29 2 30 2 34 2>; |
| 218 | interrupt-parent = <&mpic>; | 259 | interrupt-parent = <&mpic>; |
| 260 | tbi-handle = <&tbi0>; | ||
| 219 | phy-handle = <&phy0>; | 261 | phy-handle = <&phy0>; |
| 220 | phy-connection-type = "rgmii-id"; | 262 | phy-connection-type = "rgmii-id"; |
| 221 | }; | 263 | }; |
| @@ -229,6 +271,7 @@ | |||
| 229 | local-mac-address = [ 00 00 00 00 00 00 ]; | 271 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 230 | interrupts = <35 2 36 2 40 2>; | 272 | interrupts = <35 2 36 2 40 2>; |
| 231 | interrupt-parent = <&mpic>; | 273 | interrupt-parent = <&mpic>; |
| 274 | tbi-handle = <&tbi1>; | ||
| 232 | phy-handle = <&phy1>; | 275 | phy-handle = <&phy1>; |
| 233 | phy-connection-type = "rgmii-id"; | 276 | phy-connection-type = "rgmii-id"; |
| 234 | }; | 277 | }; |
| @@ -242,6 +285,7 @@ | |||
| 242 | local-mac-address = [ 00 00 00 00 00 00 ]; | 285 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 243 | interrupts = <31 2 32 2 33 2>; | 286 | interrupts = <31 2 32 2 33 2>; |
| 244 | interrupt-parent = <&mpic>; | 287 | interrupt-parent = <&mpic>; |
| 288 | tbi-handle = <&tbi2>; | ||
| 245 | phy-handle = <&phy2>; | 289 | phy-handle = <&phy2>; |
| 246 | phy-connection-type = "rgmii-id"; | 290 | phy-connection-type = "rgmii-id"; |
| 247 | }; | 291 | }; |
| @@ -255,6 +299,7 @@ | |||
| 255 | local-mac-address = [ 00 00 00 00 00 00 ]; | 299 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 256 | interrupts = <37 2 38 2 39 2>; | 300 | interrupts = <37 2 38 2 39 2>; |
| 257 | interrupt-parent = <&mpic>; | 301 | interrupt-parent = <&mpic>; |
| 302 | tbi-handle = <&tbi3>; | ||
| 258 | phy-handle = <&phy3>; | 303 | phy-handle = <&phy3>; |
| 259 | phy-connection-type = "rgmii-id"; | 304 | phy-connection-type = "rgmii-id"; |
| 260 | }; | 305 | }; |
diff --git a/arch/powerpc/boot/dts/sbc8349.dts b/arch/powerpc/boot/dts/sbc8349.dts index 0f941f310e44..8d365a57ebc1 100644 --- a/arch/powerpc/boot/dts/sbc8349.dts +++ b/arch/powerpc/boot/dts/sbc8349.dts | |||
| @@ -177,6 +177,22 @@ | |||
| 177 | reg = <0x1a>; | 177 | reg = <0x1a>; |
| 178 | device_type = "ethernet-phy"; | 178 | device_type = "ethernet-phy"; |
| 179 | }; | 179 | }; |
| 180 | tbi0: tbi-phy@11 { | ||
| 181 | reg = <0x11>; | ||
| 182 | device_type = "tbi-phy"; | ||
| 183 | }; | ||
| 184 | }; | ||
| 185 | |||
| 186 | mdio@25520 { | ||
| 187 | #address-cells = <1>; | ||
| 188 | #size-cells = <0>; | ||
| 189 | compatible = "fsl,gianfar-tbi"; | ||
| 190 | reg = <0x25520 0x20>; | ||
| 191 | |||
| 192 | tbi1: tbi-phy@11 { | ||
| 193 | reg = <0x11>; | ||
| 194 | device_type = "tbi-phy"; | ||
| 195 | }; | ||
| 180 | }; | 196 | }; |
| 181 | 197 | ||
| 182 | enet0: ethernet@24000 { | 198 | enet0: ethernet@24000 { |
| @@ -188,6 +204,7 @@ | |||
| 188 | local-mac-address = [ 00 00 00 00 00 00 ]; | 204 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 189 | interrupts = <32 0x8 33 0x8 34 0x8>; | 205 | interrupts = <32 0x8 33 0x8 34 0x8>; |
| 190 | interrupt-parent = <&ipic>; | 206 | interrupt-parent = <&ipic>; |
| 207 | tbi-handle = <&tbi0>; | ||
| 191 | phy-handle = <&phy0>; | 208 | phy-handle = <&phy0>; |
| 192 | linux,network-index = <0>; | 209 | linux,network-index = <0>; |
| 193 | }; | 210 | }; |
| @@ -201,6 +218,7 @@ | |||
| 201 | local-mac-address = [ 00 00 00 00 00 00 ]; | 218 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 202 | interrupts = <35 0x8 36 0x8 37 0x8>; | 219 | interrupts = <35 0x8 36 0x8 37 0x8>; |
| 203 | interrupt-parent = <&ipic>; | 220 | interrupt-parent = <&ipic>; |
| 221 | tbi-handle = <&tbi1>; | ||
| 204 | phy-handle = <&phy1>; | 222 | phy-handle = <&phy1>; |
| 205 | linux,network-index = <1>; | 223 | linux,network-index = <1>; |
| 206 | }; | 224 | }; |
diff --git a/arch/powerpc/boot/dts/sbc8548.dts b/arch/powerpc/boot/dts/sbc8548.dts index 333552b4e90d..2baf4a51f224 100644 --- a/arch/powerpc/boot/dts/sbc8548.dts +++ b/arch/powerpc/boot/dts/sbc8548.dts | |||
| @@ -252,6 +252,22 @@ | |||
| 252 | reg = <0x1a>; | 252 | reg = <0x1a>; |
| 253 | device_type = "ethernet-phy"; | 253 | device_type = "ethernet-phy"; |
| 254 | }; | 254 | }; |
| 255 | tbi0: tbi-phy@11 { | ||
| 256 | reg = <0x11>; | ||
| 257 | device_type = "tbi-phy"; | ||
| 258 | }; | ||
| 259 | }; | ||
| 260 | |||
| 261 | mdio@25520 { | ||
| 262 | #address-cells = <1>; | ||
| 263 | #size-cells = <0>; | ||
| 264 | compatible = "fsl,gianfar-tbi"; | ||
| 265 | reg = <0x25520 0x20>; | ||
| 266 | |||
| 267 | tbi1: tbi-phy@11 { | ||
| 268 | reg = <0x11>; | ||
| 269 | device_type = "tbi-phy"; | ||
| 270 | }; | ||
| 255 | }; | 271 | }; |
| 256 | 272 | ||
| 257 | enet0: ethernet@24000 { | 273 | enet0: ethernet@24000 { |
| @@ -263,6 +279,7 @@ | |||
| 263 | local-mac-address = [ 00 00 00 00 00 00 ]; | 279 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 264 | interrupts = <0x1d 0x2 0x1e 0x2 0x22 0x2>; | 280 | interrupts = <0x1d 0x2 0x1e 0x2 0x22 0x2>; |
| 265 | interrupt-parent = <&mpic>; | 281 | interrupt-parent = <&mpic>; |
| 282 | tbi-handle = <&tbi0>; | ||
| 266 | phy-handle = <&phy0>; | 283 | phy-handle = <&phy0>; |
| 267 | }; | 284 | }; |
| 268 | 285 | ||
| @@ -275,6 +292,7 @@ | |||
| 275 | local-mac-address = [ 00 00 00 00 00 00 ]; | 292 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 276 | interrupts = <0x23 0x2 0x24 0x2 0x28 0x2>; | 293 | interrupts = <0x23 0x2 0x24 0x2 0x28 0x2>; |
| 277 | interrupt-parent = <&mpic>; | 294 | interrupt-parent = <&mpic>; |
| 295 | tbi-handle = <&tbi1>; | ||
| 278 | phy-handle = <&phy1>; | 296 | phy-handle = <&phy1>; |
| 279 | }; | 297 | }; |
| 280 | 298 | ||
diff --git a/arch/powerpc/boot/dts/sbc8560.dts b/arch/powerpc/boot/dts/sbc8560.dts index db3632ef9888..01542f7062ab 100644 --- a/arch/powerpc/boot/dts/sbc8560.dts +++ b/arch/powerpc/boot/dts/sbc8560.dts | |||
| @@ -168,6 +168,22 @@ | |||
| 168 | reg = <0x1c>; | 168 | reg = <0x1c>; |
| 169 | device_type = "ethernet-phy"; | 169 | device_type = "ethernet-phy"; |
| 170 | }; | 170 | }; |
| 171 | tbi0: tbi-phy@11 { | ||
| 172 | reg = <0x11>; | ||
| 173 | device_type = "tbi-phy"; | ||
| 174 | }; | ||
| 175 | }; | ||
| 176 | |||
| 177 | mdio@25520 { | ||
| 178 | #address-cells = <1>; | ||
| 179 | #size-cells = <0>; | ||
| 180 | compatible = "fsl,gianfar-tbi"; | ||
| 181 | reg = <0x25520 0x20>; | ||
| 182 | |||
| 183 | tbi1: tbi-phy@11 { | ||
| 184 | reg = <0x11>; | ||
| 185 | device_type = "tbi-phy"; | ||
| 186 | }; | ||
| 171 | }; | 187 | }; |
| 172 | 188 | ||
| 173 | enet0: ethernet@24000 { | 189 | enet0: ethernet@24000 { |
| @@ -179,6 +195,7 @@ | |||
| 179 | local-mac-address = [ 00 00 00 00 00 00 ]; | 195 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 180 | interrupts = <0x1d 0x2 0x1e 0x2 0x22 0x2>; | 196 | interrupts = <0x1d 0x2 0x1e 0x2 0x22 0x2>; |
| 181 | interrupt-parent = <&mpic>; | 197 | interrupt-parent = <&mpic>; |
| 198 | tbi-handle = <&tbi0>; | ||
| 182 | phy-handle = <&phy0>; | 199 | phy-handle = <&phy0>; |
| 183 | }; | 200 | }; |
| 184 | 201 | ||
| @@ -191,6 +208,7 @@ | |||
| 191 | local-mac-address = [ 00 00 00 00 00 00 ]; | 208 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 192 | interrupts = <0x23 0x2 0x24 0x2 0x28 0x2>; | 209 | interrupts = <0x23 0x2 0x24 0x2 0x28 0x2>; |
| 193 | interrupt-parent = <&mpic>; | 210 | interrupt-parent = <&mpic>; |
| 211 | tbi-handle = <&tbi1>; | ||
| 194 | phy-handle = <&phy1>; | 212 | phy-handle = <&phy1>; |
| 195 | }; | 213 | }; |
| 196 | 214 | ||
diff --git a/arch/powerpc/boot/dts/sbc8641d.dts b/arch/powerpc/boot/dts/sbc8641d.dts index 9652456158fb..36db981548e4 100644 --- a/arch/powerpc/boot/dts/sbc8641d.dts +++ b/arch/powerpc/boot/dts/sbc8641d.dts | |||
| @@ -222,6 +222,46 @@ | |||
| 222 | reg = <2>; | 222 | reg = <2>; |
| 223 | device_type = "ethernet-phy"; | 223 | device_type = "ethernet-phy"; |
| 224 | }; | 224 | }; |
| 225 | tbi0: tbi-phy@11 { | ||
| 226 | reg = <0x11>; | ||
| 227 | device_type = "tbi-phy"; | ||
| 228 | }; | ||
| 229 | }; | ||
| 230 | |||
| 231 | mdio@25520 { | ||
| 232 | #address-cells = <1>; | ||
| 233 | #size-cells = <0>; | ||
| 234 | compatible = "fsl,gianfar-tbi"; | ||
| 235 | reg = <0x25520 0x20>; | ||
| 236 | |||
| 237 | tbi1: tbi-phy@11 { | ||
| 238 | reg = <0x11>; | ||
| 239 | device_type = "tbi-phy"; | ||
| 240 | }; | ||
| 241 | }; | ||
| 242 | |||
| 243 | mdio@26520 { | ||
| 244 | #address-cells = <1>; | ||
| 245 | #size-cells = <0>; | ||
| 246 | compatible = "fsl,gianfar-tbi"; | ||
| 247 | reg = <0x26520 0x20>; | ||
| 248 | |||
| 249 | tbi2: tbi-phy@11 { | ||
| 250 | reg = <0x11>; | ||
| 251 | device_type = "tbi-phy"; | ||
| 252 | }; | ||
| 253 | }; | ||
| 254 | |||
| 255 | mdio@27520 { | ||
| 256 | #address-cells = <1>; | ||
| 257 | #size-cells = <0>; | ||
| 258 | compatible = "fsl,gianfar-tbi"; | ||
| 259 | reg = <0x27520 0x20>; | ||
| 260 | |||
| 261 | tbi3: tbi-phy@11 { | ||
| 262 | reg = <0x11>; | ||
| 263 | device_type = "tbi-phy"; | ||
| 264 | }; | ||
| 225 | }; | 265 | }; |
| 226 | 266 | ||
| 227 | enet0: ethernet@24000 { | 267 | enet0: ethernet@24000 { |
| @@ -233,6 +273,7 @@ | |||
| 233 | local-mac-address = [ 00 00 00 00 00 00 ]; | 273 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 234 | interrupts = <29 2 30 2 34 2>; | 274 | interrupts = <29 2 30 2 34 2>; |
| 235 | interrupt-parent = <&mpic>; | 275 | interrupt-parent = <&mpic>; |
| 276 | tbi-handle = <&tbi0>; | ||
| 236 | phy-handle = <&phy0>; | 277 | phy-handle = <&phy0>; |
| 237 | phy-connection-type = "rgmii-id"; | 278 | phy-connection-type = "rgmii-id"; |
| 238 | }; | 279 | }; |
| @@ -246,6 +287,7 @@ | |||
| 246 | local-mac-address = [ 00 00 00 00 00 00 ]; | 287 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 247 | interrupts = <35 2 36 2 40 2>; | 288 | interrupts = <35 2 36 2 40 2>; |
| 248 | interrupt-parent = <&mpic>; | 289 | interrupt-parent = <&mpic>; |
| 290 | tbi-handle = <&tbi1>; | ||
| 249 | phy-handle = <&phy1>; | 291 | phy-handle = <&phy1>; |
| 250 | phy-connection-type = "rgmii-id"; | 292 | phy-connection-type = "rgmii-id"; |
| 251 | }; | 293 | }; |
| @@ -259,6 +301,7 @@ | |||
| 259 | local-mac-address = [ 00 00 00 00 00 00 ]; | 301 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 260 | interrupts = <31 2 32 2 33 2>; | 302 | interrupts = <31 2 32 2 33 2>; |
| 261 | interrupt-parent = <&mpic>; | 303 | interrupt-parent = <&mpic>; |
| 304 | tbi-handle = <&tbi2>; | ||
| 262 | phy-handle = <&phy2>; | 305 | phy-handle = <&phy2>; |
| 263 | phy-connection-type = "rgmii-id"; | 306 | phy-connection-type = "rgmii-id"; |
| 264 | }; | 307 | }; |
| @@ -272,6 +315,7 @@ | |||
| 272 | local-mac-address = [ 00 00 00 00 00 00 ]; | 315 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 273 | interrupts = <37 2 38 2 39 2>; | 316 | interrupts = <37 2 38 2 39 2>; |
| 274 | interrupt-parent = <&mpic>; | 317 | interrupt-parent = <&mpic>; |
| 318 | tbi-handle = <&tbi3>; | ||
| 275 | phy-handle = <&phy3>; | 319 | phy-handle = <&phy3>; |
| 276 | phy-connection-type = "rgmii-id"; | 320 | phy-connection-type = "rgmii-id"; |
| 277 | }; | 321 | }; |
diff --git a/arch/powerpc/boot/dts/stx_gp3_8560.dts b/arch/powerpc/boot/dts/stx_gp3_8560.dts index fcd1db6ca0a8..fff33fe6efc6 100644 --- a/arch/powerpc/boot/dts/stx_gp3_8560.dts +++ b/arch/powerpc/boot/dts/stx_gp3_8560.dts | |||
| @@ -142,6 +142,22 @@ | |||
| 142 | reg = <4>; | 142 | reg = <4>; |
| 143 | device_type = "ethernet-phy"; | 143 | device_type = "ethernet-phy"; |
| 144 | }; | 144 | }; |
| 145 | tbi0: tbi-phy@11 { | ||
| 146 | reg = <0x11>; | ||
| 147 | device_type = "tbi-phy"; | ||
| 148 | }; | ||
| 149 | }; | ||
| 150 | |||
| 151 | mdio@25520 { | ||
| 152 | #address-cells = <1>; | ||
| 153 | #size-cells = <0>; | ||
| 154 | compatible = "fsl,gianfar-tbi"; | ||
| 155 | reg = <0x25520 0x20>; | ||
| 156 | |||
| 157 | tbi1: tbi-phy@11 { | ||
| 158 | reg = <0x11>; | ||
| 159 | device_type = "tbi-phy"; | ||
| 160 | }; | ||
| 145 | }; | 161 | }; |
| 146 | 162 | ||
| 147 | enet0: ethernet@24000 { | 163 | enet0: ethernet@24000 { |
| @@ -153,6 +169,7 @@ | |||
| 153 | local-mac-address = [ 00 00 00 00 00 00 ]; | 169 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 154 | interrupts = <29 2 30 2 34 2>; | 170 | interrupts = <29 2 30 2 34 2>; |
| 155 | interrupt-parent = <&mpic>; | 171 | interrupt-parent = <&mpic>; |
| 172 | tbi-handle = <&tbi0>; | ||
| 156 | phy-handle = <&phy2>; | 173 | phy-handle = <&phy2>; |
| 157 | }; | 174 | }; |
| 158 | 175 | ||
| @@ -165,6 +182,7 @@ | |||
| 165 | local-mac-address = [ 00 00 00 00 00 00 ]; | 182 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 166 | interrupts = <35 2 36 2 40 2>; | 183 | interrupts = <35 2 36 2 40 2>; |
| 167 | interrupt-parent = <&mpic>; | 184 | interrupt-parent = <&mpic>; |
| 185 | tbi-handle = <&tbi1>; | ||
| 168 | phy-handle = <&phy4>; | 186 | phy-handle = <&phy4>; |
| 169 | }; | 187 | }; |
| 170 | 188 | ||
diff --git a/arch/powerpc/boot/dts/tqm8540.dts b/arch/powerpc/boot/dts/tqm8540.dts index e1d260b9085e..a693f01c21aa 100644 --- a/arch/powerpc/boot/dts/tqm8540.dts +++ b/arch/powerpc/boot/dts/tqm8540.dts | |||
| @@ -155,6 +155,34 @@ | |||
| 155 | reg = <3>; | 155 | reg = <3>; |
| 156 | device_type = "ethernet-phy"; | 156 | device_type = "ethernet-phy"; |
| 157 | }; | 157 | }; |
| 158 | tbi0: tbi-phy@11 { | ||
| 159 | reg = <0x11>; | ||
| 160 | device_type = "tbi-phy"; | ||
| 161 | }; | ||
| 162 | }; | ||
| 163 | |||
| 164 | mdio@25520 { | ||
| 165 | #address-cells = <1>; | ||
| 166 | #size-cells = <0>; | ||
| 167 | compatible = "fsl,gianfar-tbi"; | ||
| 168 | reg = <0x25520 0x20>; | ||
| 169 | |||
| 170 | tbi1: tbi-phy@11 { | ||
| 171 | reg = <0x11>; | ||
| 172 | device_type = "tbi-phy"; | ||
| 173 | }; | ||
| 174 | }; | ||
| 175 | |||
| 176 | mdio@26520 { | ||
| 177 | #address-cells = <1>; | ||
| 178 | #size-cells = <0>; | ||
| 179 | compatible = "fsl,gianfar-tbi"; | ||
| 180 | reg = <0x26520 0x20>; | ||
| 181 | |||
| 182 | tbi2: tbi-phy@11 { | ||
| 183 | reg = <0x11>; | ||
| 184 | device_type = "tbi-phy"; | ||
| 185 | }; | ||
| 158 | }; | 186 | }; |
| 159 | 187 | ||
| 160 | enet0: ethernet@24000 { | 188 | enet0: ethernet@24000 { |
diff --git a/arch/powerpc/boot/dts/tqm8541.dts b/arch/powerpc/boot/dts/tqm8541.dts index d76441ec5dc7..9e3f5f0dde20 100644 --- a/arch/powerpc/boot/dts/tqm8541.dts +++ b/arch/powerpc/boot/dts/tqm8541.dts | |||
| @@ -154,6 +154,22 @@ | |||
| 154 | reg = <3>; | 154 | reg = <3>; |
| 155 | device_type = "ethernet-phy"; | 155 | device_type = "ethernet-phy"; |
| 156 | }; | 156 | }; |
| 157 | tbi0: tbi-phy@11 { | ||
| 158 | reg = <0x11>; | ||
| 159 | device_type = "tbi-phy"; | ||
| 160 | }; | ||
| 161 | }; | ||
| 162 | |||
| 163 | mdio@25520 { | ||
| 164 | #address-cells = <1>; | ||
| 165 | #size-cells = <0>; | ||
| 166 | compatible = "fsl,gianfar-tbi"; | ||
| 167 | reg = <0x25520 0x20>; | ||
| 168 | |||
| 169 | tbi1: tbi-phy@11 { | ||
| 170 | reg = <0x11>; | ||
| 171 | device_type = "tbi-phy"; | ||
| 172 | }; | ||
| 157 | }; | 173 | }; |
| 158 | 174 | ||
| 159 | enet0: ethernet@24000 { | 175 | enet0: ethernet@24000 { |
| @@ -165,6 +181,7 @@ | |||
| 165 | local-mac-address = [ 00 00 00 00 00 00 ]; | 181 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 166 | interrupts = <29 2 30 2 34 2>; | 182 | interrupts = <29 2 30 2 34 2>; |
| 167 | interrupt-parent = <&mpic>; | 183 | interrupt-parent = <&mpic>; |
| 184 | tbi-handle = <&tbi0>; | ||
| 168 | phy-handle = <&phy2>; | 185 | phy-handle = <&phy2>; |
| 169 | }; | 186 | }; |
| 170 | 187 | ||
| @@ -177,6 +194,7 @@ | |||
| 177 | local-mac-address = [ 00 00 00 00 00 00 ]; | 194 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 178 | interrupts = <35 2 36 2 40 2>; | 195 | interrupts = <35 2 36 2 40 2>; |
| 179 | interrupt-parent = <&mpic>; | 196 | interrupt-parent = <&mpic>; |
| 197 | tbi-handle = <&tbi1>; | ||
| 180 | phy-handle = <&phy1>; | 198 | phy-handle = <&phy1>; |
| 181 | }; | 199 | }; |
| 182 | 200 | ||
diff --git a/arch/powerpc/boot/dts/tqm8548-bigflash.dts b/arch/powerpc/boot/dts/tqm8548-bigflash.dts index 4199e89b4e50..15086eb65c50 100644 --- a/arch/powerpc/boot/dts/tqm8548-bigflash.dts +++ b/arch/powerpc/boot/dts/tqm8548-bigflash.dts | |||
| @@ -179,6 +179,46 @@ | |||
| 179 | reg = <5>; | 179 | reg = <5>; |
| 180 | device_type = "ethernet-phy"; | 180 | device_type = "ethernet-phy"; |
| 181 | }; | 181 | }; |
| 182 | tbi0: tbi-phy@11 { | ||
| 183 | reg = <0x11>; | ||
| 184 | device_type = "tbi-phy"; | ||
| 185 | }; | ||
| 186 | }; | ||
| 187 | |||
| 188 | mdio@25520 { | ||
| 189 | #address-cells = <1>; | ||
| 190 | #size-cells = <0>; | ||
| 191 | compatible = "fsl,gianfar-tbi"; | ||
| 192 | reg = <0x25520 0x20>; | ||
| 193 | |||
| 194 | tbi1: tbi-phy@11 { | ||
| 195 | reg = <0x11>; | ||
| 196 | device_type = "tbi-phy"; | ||
| 197 | }; | ||
| 198 | }; | ||
| 199 | |||
| 200 | mdio@26520 { | ||
| 201 | #address-cells = <1>; | ||
| 202 | #size-cells = <0>; | ||
| 203 | compatible = "fsl,gianfar-tbi"; | ||
| 204 | reg = <0x26520 0x20>; | ||
| 205 | |||
| 206 | tbi2: tbi-phy@11 { | ||
| 207 | reg = <0x11>; | ||
| 208 | device_type = "tbi-phy"; | ||
| 209 | }; | ||
| 210 | }; | ||
| 211 | |||
| 212 | mdio@27520 { | ||
| 213 | #address-cells = <1>; | ||
| 214 | #size-cells = <0>; | ||
| 215 | compatible = "fsl,gianfar-tbi"; | ||
| 216 | reg = <0x27520 0x20>; | ||
| 217 | |||
| 218 | tbi3: tbi-phy@11 { | ||
| 219 | reg = <0x11>; | ||
| 220 | device_type = "tbi-phy"; | ||
| 221 | }; | ||
| 182 | }; | 222 | }; |
| 183 | 223 | ||
| 184 | enet0: ethernet@24000 { | 224 | enet0: ethernet@24000 { |
| @@ -190,6 +230,7 @@ | |||
| 190 | local-mac-address = [ 00 00 00 00 00 00 ]; | 230 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 191 | interrupts = <29 2 30 2 34 2>; | 231 | interrupts = <29 2 30 2 34 2>; |
| 192 | interrupt-parent = <&mpic>; | 232 | interrupt-parent = <&mpic>; |
| 233 | tbi-handle = <&tbi0>; | ||
| 193 | phy-handle = <&phy2>; | 234 | phy-handle = <&phy2>; |
| 194 | }; | 235 | }; |
| 195 | 236 | ||
| @@ -202,6 +243,7 @@ | |||
| 202 | local-mac-address = [ 00 00 00 00 00 00 ]; | 243 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 203 | interrupts = <35 2 36 2 40 2>; | 244 | interrupts = <35 2 36 2 40 2>; |
| 204 | interrupt-parent = <&mpic>; | 245 | interrupt-parent = <&mpic>; |
| 246 | tbi-handle = <&tbi1>; | ||
| 205 | phy-handle = <&phy1>; | 247 | phy-handle = <&phy1>; |
| 206 | }; | 248 | }; |
| 207 | 249 | ||
| @@ -214,6 +256,7 @@ | |||
| 214 | local-mac-address = [ 00 00 00 00 00 00 ]; | 256 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 215 | interrupts = <31 2 32 2 33 2>; | 257 | interrupts = <31 2 32 2 33 2>; |
| 216 | interrupt-parent = <&mpic>; | 258 | interrupt-parent = <&mpic>; |
| 259 | tbi-handle = <&tbi2>; | ||
| 217 | phy-handle = <&phy3>; | 260 | phy-handle = <&phy3>; |
| 218 | }; | 261 | }; |
| 219 | 262 | ||
| @@ -226,6 +269,7 @@ | |||
| 226 | local-mac-address = [ 00 00 00 00 00 00 ]; | 269 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 227 | interrupts = <37 2 38 2 39 2>; | 270 | interrupts = <37 2 38 2 39 2>; |
| 228 | interrupt-parent = <&mpic>; | 271 | interrupt-parent = <&mpic>; |
| 272 | tbi-handle = <&tbi3>; | ||
| 229 | phy-handle = <&phy4>; | 273 | phy-handle = <&phy4>; |
| 230 | }; | 274 | }; |
| 231 | 275 | ||
diff --git a/arch/powerpc/boot/dts/tqm8548.dts b/arch/powerpc/boot/dts/tqm8548.dts index 58ee4185454b..b7b65f5e79b6 100644 --- a/arch/powerpc/boot/dts/tqm8548.dts +++ b/arch/powerpc/boot/dts/tqm8548.dts | |||
| @@ -179,6 +179,46 @@ | |||
| 179 | reg = <5>; | 179 | reg = <5>; |
| 180 | device_type = "ethernet-phy"; | 180 | device_type = "ethernet-phy"; |
| 181 | }; | 181 | }; |
| 182 | tbi0: tbi-phy@11 { | ||
| 183 | reg = <0x11>; | ||
| 184 | device_type = "tbi-phy"; | ||
| 185 | }; | ||
| 186 | }; | ||
| 187 | |||
| 188 | mdio@25520 { | ||
| 189 | #address-cells = <1>; | ||
| 190 | #size-cells = <0>; | ||
| 191 | compatible = "fsl,gianfar-tbi"; | ||
| 192 | reg = <0x25520 0x20>; | ||
| 193 | |||
| 194 | tbi1: tbi-phy@11 { | ||
| 195 | reg = <0x11>; | ||
| 196 | device_type = "tbi-phy"; | ||
| 197 | }; | ||
| 198 | }; | ||
| 199 | |||
| 200 | mdio@26520 { | ||
| 201 | #address-cells = <1>; | ||
| 202 | #size-cells = <0>; | ||
| 203 | compatible = "fsl,gianfar-tbi"; | ||
| 204 | reg = <0x26520 0x20>; | ||
| 205 | |||
| 206 | tbi2: tbi-phy@11 { | ||
| 207 | reg = <0x11>; | ||
| 208 | device_type = "tbi-phy"; | ||
| 209 | }; | ||
| 210 | }; | ||
| 211 | |||
| 212 | mdio@27520 { | ||
| 213 | #address-cells = <1>; | ||
| 214 | #size-cells = <0>; | ||
| 215 | compatible = "fsl,gianfar-tbi"; | ||
| 216 | reg = <0x27520 0x20>; | ||
| 217 | |||
| 218 | tbi3: tbi-phy@11 { | ||
| 219 | reg = <0x11>; | ||
| 220 | device_type = "tbi-phy"; | ||
| 221 | }; | ||
| 182 | }; | 222 | }; |
| 183 | 223 | ||
| 184 | enet0: ethernet@24000 { | 224 | enet0: ethernet@24000 { |
| @@ -190,6 +230,7 @@ | |||
| 190 | local-mac-address = [ 00 00 00 00 00 00 ]; | 230 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 191 | interrupts = <29 2 30 2 34 2>; | 231 | interrupts = <29 2 30 2 34 2>; |
| 192 | interrupt-parent = <&mpic>; | 232 | interrupt-parent = <&mpic>; |
| 233 | tbi-handle = <&tbi0>; | ||
| 193 | phy-handle = <&phy2>; | 234 | phy-handle = <&phy2>; |
| 194 | }; | 235 | }; |
| 195 | 236 | ||
| @@ -202,6 +243,7 @@ | |||
| 202 | local-mac-address = [ 00 00 00 00 00 00 ]; | 243 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 203 | interrupts = <35 2 36 2 40 2>; | 244 | interrupts = <35 2 36 2 40 2>; |
| 204 | interrupt-parent = <&mpic>; | 245 | interrupt-parent = <&mpic>; |
| 246 | tbi-handle = <&tbi1>; | ||
| 205 | phy-handle = <&phy1>; | 247 | phy-handle = <&phy1>; |
| 206 | }; | 248 | }; |
| 207 | 249 | ||
| @@ -214,6 +256,7 @@ | |||
| 214 | local-mac-address = [ 00 00 00 00 00 00 ]; | 256 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 215 | interrupts = <31 2 32 2 33 2>; | 257 | interrupts = <31 2 32 2 33 2>; |
| 216 | interrupt-parent = <&mpic>; | 258 | interrupt-parent = <&mpic>; |
| 259 | tbi-handle = <&tbi2>; | ||
| 217 | phy-handle = <&phy3>; | 260 | phy-handle = <&phy3>; |
| 218 | }; | 261 | }; |
| 219 | 262 | ||
| @@ -226,6 +269,7 @@ | |||
| 226 | local-mac-address = [ 00 00 00 00 00 00 ]; | 269 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 227 | interrupts = <37 2 38 2 39 2>; | 270 | interrupts = <37 2 38 2 39 2>; |
| 228 | interrupt-parent = <&mpic>; | 271 | interrupt-parent = <&mpic>; |
| 272 | tbi-handle = <&tbi3>; | ||
| 229 | phy-handle = <&phy4>; | 273 | phy-handle = <&phy4>; |
| 230 | }; | 274 | }; |
| 231 | 275 | ||
diff --git a/arch/powerpc/boot/dts/tqm8555.dts b/arch/powerpc/boot/dts/tqm8555.dts index 6f7ea59c4846..cf92b4e7945e 100644 --- a/arch/powerpc/boot/dts/tqm8555.dts +++ b/arch/powerpc/boot/dts/tqm8555.dts | |||
| @@ -154,6 +154,22 @@ | |||
| 154 | reg = <3>; | 154 | reg = <3>; |
| 155 | device_type = "ethernet-phy"; | 155 | device_type = "ethernet-phy"; |
| 156 | }; | 156 | }; |
| 157 | tbi0: tbi-phy@11 { | ||
| 158 | reg = <0x11>; | ||
| 159 | device_type = "tbi-phy"; | ||
| 160 | }; | ||
| 161 | }; | ||
| 162 | |||
| 163 | mdio@25520 { | ||
| 164 | #address-cells = <1>; | ||
| 165 | #size-cells = <0>; | ||
| 166 | compatible = "fsl,gianfar-tbi"; | ||
| 167 | reg = <0x25520 0x20>; | ||
| 168 | |||
| 169 | tbi1: tbi-phy@11 { | ||
| 170 | reg = <0x11>; | ||
| 171 | device_type = "tbi-phy"; | ||
| 172 | }; | ||
| 157 | }; | 173 | }; |
| 158 | 174 | ||
| 159 | enet0: ethernet@24000 { | 175 | enet0: ethernet@24000 { |
| @@ -165,6 +181,7 @@ | |||
| 165 | local-mac-address = [ 00 00 00 00 00 00 ]; | 181 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 166 | interrupts = <29 2 30 2 34 2>; | 182 | interrupts = <29 2 30 2 34 2>; |
| 167 | interrupt-parent = <&mpic>; | 183 | interrupt-parent = <&mpic>; |
| 184 | tbi-handle = <&tbi0>; | ||
| 168 | phy-handle = <&phy2>; | 185 | phy-handle = <&phy2>; |
| 169 | }; | 186 | }; |
| 170 | 187 | ||
| @@ -177,6 +194,7 @@ | |||
| 177 | local-mac-address = [ 00 00 00 00 00 00 ]; | 194 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 178 | interrupts = <35 2 36 2 40 2>; | 195 | interrupts = <35 2 36 2 40 2>; |
| 179 | interrupt-parent = <&mpic>; | 196 | interrupt-parent = <&mpic>; |
| 197 | tbi-handle = <&tbi1>; | ||
| 180 | phy-handle = <&phy1>; | 198 | phy-handle = <&phy1>; |
| 181 | }; | 199 | }; |
| 182 | 200 | ||
diff --git a/arch/powerpc/boot/dts/tqm8560.dts b/arch/powerpc/boot/dts/tqm8560.dts index 3fe35208907b..9e1ab2d2f669 100644 --- a/arch/powerpc/boot/dts/tqm8560.dts +++ b/arch/powerpc/boot/dts/tqm8560.dts | |||
| @@ -156,6 +156,22 @@ | |||
| 156 | reg = <3>; | 156 | reg = <3>; |
| 157 | device_type = "ethernet-phy"; | 157 | device_type = "ethernet-phy"; |
| 158 | }; | 158 | }; |
| 159 | tbi0: tbi-phy@11 { | ||
| 160 | reg = <0x11>; | ||
| 161 | device_type = "tbi-phy"; | ||
| 162 | }; | ||
| 163 | }; | ||
| 164 | |||
| 165 | mdio@25520 { | ||
| 166 | #address-cells = <1>; | ||
| 167 | #size-cells = <0>; | ||
| 168 | compatible = "fsl,gianfar-tbi"; | ||
| 169 | reg = <0x25520 0x20>; | ||
| 170 | |||
| 171 | tbi1: tbi-phy@11 { | ||
| 172 | reg = <0x11>; | ||
| 173 | device_type = "tbi-phy"; | ||
| 174 | }; | ||
| 159 | }; | 175 | }; |
| 160 | 176 | ||
| 161 | enet0: ethernet@24000 { | 177 | enet0: ethernet@24000 { |
| @@ -167,6 +183,7 @@ | |||
| 167 | local-mac-address = [ 00 00 00 00 00 00 ]; | 183 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 168 | interrupts = <29 2 30 2 34 2>; | 184 | interrupts = <29 2 30 2 34 2>; |
| 169 | interrupt-parent = <&mpic>; | 185 | interrupt-parent = <&mpic>; |
| 186 | tbi-handle = <&tbi0>; | ||
| 170 | phy-handle = <&phy2>; | 187 | phy-handle = <&phy2>; |
| 171 | }; | 188 | }; |
| 172 | 189 | ||
| @@ -179,6 +196,7 @@ | |||
| 179 | local-mac-address = [ 00 00 00 00 00 00 ]; | 196 | local-mac-address = [ 00 00 00 00 00 00 ]; |
| 180 | interrupts = <35 2 36 2 40 2>; | 197 | interrupts = <35 2 36 2 40 2>; |
| 181 | interrupt-parent = <&mpic>; | 198 | interrupt-parent = <&mpic>; |
| 199 | tbi-handle = <&tbi1>; | ||
| 182 | phy-handle = <&phy1>; | 200 | phy-handle = <&phy1>; |
| 183 | }; | 201 | }; |
| 184 | 202 | ||
diff --git a/arch/powerpc/configs/83xx/mpc834x_itx_defconfig b/arch/powerpc/configs/83xx/mpc834x_itx_defconfig index e55ff7c47a36..07a674f5344e 100644 --- a/arch/powerpc/configs/83xx/mpc834x_itx_defconfig +++ b/arch/powerpc/configs/83xx/mpc834x_itx_defconfig | |||
| @@ -723,7 +723,7 @@ CONFIG_CICADA_PHY=y | |||
| 723 | # CONFIG_BROADCOM_PHY is not set | 723 | # CONFIG_BROADCOM_PHY is not set |
| 724 | # CONFIG_ICPLUS_PHY is not set | 724 | # CONFIG_ICPLUS_PHY is not set |
| 725 | # CONFIG_REALTEK_PHY is not set | 725 | # CONFIG_REALTEK_PHY is not set |
| 726 | # CONFIG_FIXED_PHY is not set | 726 | CONFIG_FIXED_PHY=y |
| 727 | # CONFIG_MDIO_BITBANG is not set | 727 | # CONFIG_MDIO_BITBANG is not set |
| 728 | # CONFIG_NET_ETHERNET is not set | 728 | # CONFIG_NET_ETHERNET is not set |
| 729 | CONFIG_NETDEV_1000=y | 729 | CONFIG_NETDEV_1000=y |
diff --git a/arch/powerpc/configs/mpc83xx_defconfig b/arch/powerpc/configs/mpc83xx_defconfig index 15eb30c9b3f9..d582014b0a38 100644 --- a/arch/powerpc/configs/mpc83xx_defconfig +++ b/arch/powerpc/configs/mpc83xx_defconfig | |||
| @@ -682,7 +682,7 @@ CONFIG_VITESSE_PHY=y | |||
| 682 | # CONFIG_BROADCOM_PHY is not set | 682 | # CONFIG_BROADCOM_PHY is not set |
| 683 | CONFIG_ICPLUS_PHY=y | 683 | CONFIG_ICPLUS_PHY=y |
| 684 | # CONFIG_REALTEK_PHY is not set | 684 | # CONFIG_REALTEK_PHY is not set |
| 685 | # CONFIG_FIXED_PHY is not set | 685 | CONFIG_FIXED_PHY=y |
| 686 | # CONFIG_MDIO_BITBANG is not set | 686 | # CONFIG_MDIO_BITBANG is not set |
| 687 | CONFIG_NET_ETHERNET=y | 687 | CONFIG_NET_ETHERNET=y |
| 688 | CONFIG_MII=y | 688 | CONFIG_MII=y |
diff --git a/arch/powerpc/include/asm/elf.h b/arch/powerpc/include/asm/elf.h index d812929390e4..cd46f023ec6d 100644 --- a/arch/powerpc/include/asm/elf.h +++ b/arch/powerpc/include/asm/elf.h | |||
| @@ -267,7 +267,7 @@ extern int ucache_bsize; | |||
| 267 | #define ARCH_HAS_SETUP_ADDITIONAL_PAGES | 267 | #define ARCH_HAS_SETUP_ADDITIONAL_PAGES |
| 268 | struct linux_binprm; | 268 | struct linux_binprm; |
| 269 | extern int arch_setup_additional_pages(struct linux_binprm *bprm, | 269 | extern int arch_setup_additional_pages(struct linux_binprm *bprm, |
| 270 | int executable_stack); | 270 | int uses_interp); |
| 271 | #define VDSO_AUX_ENT(a,b) NEW_AUX_ENT(a,b); | 271 | #define VDSO_AUX_ENT(a,b) NEW_AUX_ENT(a,b); |
| 272 | 272 | ||
| 273 | #endif /* __KERNEL__ */ | 273 | #endif /* __KERNEL__ */ |
diff --git a/arch/powerpc/include/asm/ftrace.h b/arch/powerpc/include/asm/ftrace.h index b298f7a631e6..e5f2ae8362f7 100644 --- a/arch/powerpc/include/asm/ftrace.h +++ b/arch/powerpc/include/asm/ftrace.h | |||
| @@ -7,7 +7,19 @@ | |||
| 7 | 7 | ||
| 8 | #ifndef __ASSEMBLY__ | 8 | #ifndef __ASSEMBLY__ |
| 9 | extern void _mcount(void); | 9 | extern void _mcount(void); |
| 10 | #endif | 10 | |
| 11 | #ifdef CONFIG_DYNAMIC_FTRACE | ||
| 12 | static inline unsigned long ftrace_call_adjust(unsigned long addr) | ||
| 13 | { | ||
| 14 | /* reloction of mcount call site is the same as the address */ | ||
| 15 | return addr; | ||
| 16 | } | ||
| 17 | |||
| 18 | struct dyn_arch_ftrace { | ||
| 19 | struct module *mod; | ||
| 20 | }; | ||
| 21 | #endif /* CONFIG_DYNAMIC_FTRACE */ | ||
| 22 | #endif /* __ASSEMBLY__ */ | ||
| 11 | 23 | ||
| 12 | #endif | 24 | #endif |
| 13 | 25 | ||
diff --git a/arch/powerpc/include/asm/module.h b/arch/powerpc/include/asm/module.h index e5f14b13ccf0..08454880a2c0 100644 --- a/arch/powerpc/include/asm/module.h +++ b/arch/powerpc/include/asm/module.h | |||
| @@ -34,11 +34,19 @@ struct mod_arch_specific { | |||
| 34 | #ifdef __powerpc64__ | 34 | #ifdef __powerpc64__ |
| 35 | unsigned int stubs_section; /* Index of stubs section in module */ | 35 | unsigned int stubs_section; /* Index of stubs section in module */ |
| 36 | unsigned int toc_section; /* What section is the TOC? */ | 36 | unsigned int toc_section; /* What section is the TOC? */ |
| 37 | #else | 37 | #ifdef CONFIG_DYNAMIC_FTRACE |
| 38 | unsigned long toc; | ||
| 39 | unsigned long tramp; | ||
| 40 | #endif | ||
| 41 | |||
| 42 | #else /* powerpc64 */ | ||
| 38 | /* Indices of PLT sections within module. */ | 43 | /* Indices of PLT sections within module. */ |
| 39 | unsigned int core_plt_section; | 44 | unsigned int core_plt_section; |
| 40 | unsigned int init_plt_section; | 45 | unsigned int init_plt_section; |
| 46 | #ifdef CONFIG_DYNAMIC_FTRACE | ||
| 47 | unsigned long tramp; | ||
| 41 | #endif | 48 | #endif |
| 49 | #endif /* powerpc64 */ | ||
| 42 | 50 | ||
| 43 | /* List of BUG addresses, source line numbers and filenames */ | 51 | /* List of BUG addresses, source line numbers and filenames */ |
| 44 | struct list_head bug_list; | 52 | struct list_head bug_list; |
| @@ -68,6 +76,12 @@ struct mod_arch_specific { | |||
| 68 | # endif /* MODULE */ | 76 | # endif /* MODULE */ |
| 69 | #endif | 77 | #endif |
| 70 | 78 | ||
| 79 | #ifdef CONFIG_DYNAMIC_FTRACE | ||
| 80 | # ifdef MODULE | ||
| 81 | asm(".section .ftrace.tramp,\"ax\",@nobits; .align 3; .previous"); | ||
| 82 | # endif /* MODULE */ | ||
| 83 | #endif | ||
| 84 | |||
| 71 | 85 | ||
| 72 | struct exception_table_entry; | 86 | struct exception_table_entry; |
| 73 | void sort_ex_table(struct exception_table_entry *start, | 87 | void sort_ex_table(struct exception_table_entry *start, |
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile index 92673b43858d..d17edb4a2f9d 100644 --- a/arch/powerpc/kernel/Makefile +++ b/arch/powerpc/kernel/Makefile | |||
| @@ -17,6 +17,7 @@ ifdef CONFIG_FUNCTION_TRACER | |||
| 17 | CFLAGS_REMOVE_cputable.o = -pg -mno-sched-epilog | 17 | CFLAGS_REMOVE_cputable.o = -pg -mno-sched-epilog |
| 18 | CFLAGS_REMOVE_prom_init.o = -pg -mno-sched-epilog | 18 | CFLAGS_REMOVE_prom_init.o = -pg -mno-sched-epilog |
| 19 | CFLAGS_REMOVE_btext.o = -pg -mno-sched-epilog | 19 | CFLAGS_REMOVE_btext.o = -pg -mno-sched-epilog |
| 20 | CFLAGS_REMOVE_prom.o = -pg -mno-sched-epilog | ||
| 20 | 21 | ||
| 21 | ifdef CONFIG_DYNAMIC_FTRACE | 22 | ifdef CONFIG_DYNAMIC_FTRACE |
| 22 | # dynamic ftrace setup. | 23 | # dynamic ftrace setup. |
diff --git a/arch/powerpc/kernel/cpu_setup_44x.S b/arch/powerpc/kernel/cpu_setup_44x.S index 31c18b52affb..10b4ab1008af 100644 --- a/arch/powerpc/kernel/cpu_setup_44x.S +++ b/arch/powerpc/kernel/cpu_setup_44x.S | |||
| @@ -40,6 +40,7 @@ _GLOBAL(__setup_cpu_460gt) | |||
| 40 | mtlr r4 | 40 | mtlr r4 |
| 41 | blr | 41 | blr |
| 42 | 42 | ||
| 43 | _GLOBAL(__setup_cpu_440x5) | ||
| 43 | _GLOBAL(__setup_cpu_440gx) | 44 | _GLOBAL(__setup_cpu_440gx) |
| 44 | _GLOBAL(__setup_cpu_440spe) | 45 | _GLOBAL(__setup_cpu_440spe) |
| 45 | b __fixup_440A_mcheck | 46 | b __fixup_440A_mcheck |
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c index b1eb834bc0fc..7e8719504f39 100644 --- a/arch/powerpc/kernel/cputable.c +++ b/arch/powerpc/kernel/cputable.c | |||
| @@ -39,6 +39,7 @@ extern void __setup_cpu_440epx(unsigned long offset, struct cpu_spec* spec); | |||
| 39 | extern void __setup_cpu_440gx(unsigned long offset, struct cpu_spec* spec); | 39 | extern void __setup_cpu_440gx(unsigned long offset, struct cpu_spec* spec); |
| 40 | extern void __setup_cpu_440grx(unsigned long offset, struct cpu_spec* spec); | 40 | extern void __setup_cpu_440grx(unsigned long offset, struct cpu_spec* spec); |
| 41 | extern void __setup_cpu_440spe(unsigned long offset, struct cpu_spec* spec); | 41 | extern void __setup_cpu_440spe(unsigned long offset, struct cpu_spec* spec); |
| 42 | extern void __setup_cpu_440x5(unsigned long offset, struct cpu_spec* spec); | ||
| 42 | extern void __setup_cpu_460ex(unsigned long offset, struct cpu_spec* spec); | 43 | extern void __setup_cpu_460ex(unsigned long offset, struct cpu_spec* spec); |
| 43 | extern void __setup_cpu_460gt(unsigned long offset, struct cpu_spec* spec); | 44 | extern void __setup_cpu_460gt(unsigned long offset, struct cpu_spec* spec); |
| 44 | extern void __setup_cpu_603(unsigned long offset, struct cpu_spec* spec); | 45 | extern void __setup_cpu_603(unsigned long offset, struct cpu_spec* spec); |
| @@ -1500,6 +1501,8 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
| 1500 | .cpu_user_features = COMMON_USER_BOOKE, | 1501 | .cpu_user_features = COMMON_USER_BOOKE, |
| 1501 | .icache_bsize = 32, | 1502 | .icache_bsize = 32, |
| 1502 | .dcache_bsize = 32, | 1503 | .dcache_bsize = 32, |
| 1504 | .cpu_setup = __setup_cpu_440x5, | ||
| 1505 | .machine_check = machine_check_440A, | ||
| 1503 | .platform = "ppc440", | 1506 | .platform = "ppc440", |
| 1504 | }, | 1507 | }, |
| 1505 | { /* 460EX */ | 1508 | { /* 460EX */ |
diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S index 7ecc0d1855c3..6f7eb7e00c79 100644 --- a/arch/powerpc/kernel/entry_32.S +++ b/arch/powerpc/kernel/entry_32.S | |||
| @@ -1162,39 +1162,17 @@ machine_check_in_rtas: | |||
| 1162 | #ifdef CONFIG_DYNAMIC_FTRACE | 1162 | #ifdef CONFIG_DYNAMIC_FTRACE |
| 1163 | _GLOBAL(mcount) | 1163 | _GLOBAL(mcount) |
| 1164 | _GLOBAL(_mcount) | 1164 | _GLOBAL(_mcount) |
| 1165 | stwu r1,-48(r1) | 1165 | /* |
| 1166 | stw r3, 12(r1) | 1166 | * It is required that _mcount on PPC32 must preserve the |
| 1167 | stw r4, 16(r1) | 1167 | * link register. But we have r0 to play with. We use r0 |
| 1168 | stw r5, 20(r1) | 1168 | * to push the return address back to the caller of mcount |
| 1169 | stw r6, 24(r1) | 1169 | * into the ctr register, restore the link register and |
| 1170 | mflr r3 | 1170 | * then jump back using the ctr register. |
| 1171 | stw r7, 28(r1) | 1171 | */ |
| 1172 | mfcr r5 | 1172 | mflr r0 |
| 1173 | stw r8, 32(r1) | ||
| 1174 | stw r9, 36(r1) | ||
| 1175 | stw r10,40(r1) | ||
| 1176 | stw r3, 44(r1) | ||
| 1177 | stw r5, 8(r1) | ||
| 1178 | subi r3, r3, MCOUNT_INSN_SIZE | ||
| 1179 | .globl mcount_call | ||
| 1180 | mcount_call: | ||
| 1181 | bl ftrace_stub | ||
| 1182 | nop | ||
| 1183 | lwz r6, 8(r1) | ||
| 1184 | lwz r0, 44(r1) | ||
| 1185 | lwz r3, 12(r1) | ||
| 1186 | mtctr r0 | 1173 | mtctr r0 |
| 1187 | lwz r4, 16(r1) | 1174 | lwz r0, 4(r1) |
| 1188 | mtcr r6 | ||
| 1189 | lwz r5, 20(r1) | ||
| 1190 | lwz r6, 24(r1) | ||
| 1191 | lwz r0, 52(r1) | ||
| 1192 | lwz r7, 28(r1) | ||
| 1193 | lwz r8, 32(r1) | ||
| 1194 | mtlr r0 | 1175 | mtlr r0 |
| 1195 | lwz r9, 36(r1) | ||
| 1196 | lwz r10,40(r1) | ||
| 1197 | addi r1, r1, 48 | ||
| 1198 | bctr | 1176 | bctr |
| 1199 | 1177 | ||
| 1200 | _GLOBAL(ftrace_caller) | 1178 | _GLOBAL(ftrace_caller) |
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S index e0bcf9354286..383ed6eb0085 100644 --- a/arch/powerpc/kernel/entry_64.S +++ b/arch/powerpc/kernel/entry_64.S | |||
| @@ -894,18 +894,6 @@ _GLOBAL(enter_prom) | |||
| 894 | #ifdef CONFIG_DYNAMIC_FTRACE | 894 | #ifdef CONFIG_DYNAMIC_FTRACE |
| 895 | _GLOBAL(mcount) | 895 | _GLOBAL(mcount) |
| 896 | _GLOBAL(_mcount) | 896 | _GLOBAL(_mcount) |
| 897 | /* Taken from output of objdump from lib64/glibc */ | ||
| 898 | mflr r3 | ||
| 899 | stdu r1, -112(r1) | ||
| 900 | std r3, 128(r1) | ||
| 901 | subi r3, r3, MCOUNT_INSN_SIZE | ||
| 902 | .globl mcount_call | ||
| 903 | mcount_call: | ||
| 904 | bl ftrace_stub | ||
| 905 | nop | ||
| 906 | ld r0, 128(r1) | ||
| 907 | mtlr r0 | ||
| 908 | addi r1, r1, 112 | ||
| 909 | blr | 897 | blr |
| 910 | 898 | ||
| 911 | _GLOBAL(ftrace_caller) | 899 | _GLOBAL(ftrace_caller) |
diff --git a/arch/powerpc/kernel/ftrace.c b/arch/powerpc/kernel/ftrace.c index f4b006ed0ab1..5355244c99ff 100644 --- a/arch/powerpc/kernel/ftrace.c +++ b/arch/powerpc/kernel/ftrace.c | |||
| @@ -9,22 +9,30 @@ | |||
| 9 | 9 | ||
| 10 | #include <linux/spinlock.h> | 10 | #include <linux/spinlock.h> |
| 11 | #include <linux/hardirq.h> | 11 | #include <linux/hardirq.h> |
| 12 | #include <linux/uaccess.h> | ||
| 13 | #include <linux/module.h> | ||
| 12 | #include <linux/ftrace.h> | 14 | #include <linux/ftrace.h> |
| 13 | #include <linux/percpu.h> | 15 | #include <linux/percpu.h> |
| 14 | #include <linux/init.h> | 16 | #include <linux/init.h> |
| 15 | #include <linux/list.h> | 17 | #include <linux/list.h> |
| 16 | 18 | ||
| 17 | #include <asm/cacheflush.h> | 19 | #include <asm/cacheflush.h> |
| 20 | #include <asm/code-patching.h> | ||
| 18 | #include <asm/ftrace.h> | 21 | #include <asm/ftrace.h> |
| 19 | 22 | ||
| 23 | #if 0 | ||
| 24 | #define DEBUGP printk | ||
| 25 | #else | ||
| 26 | #define DEBUGP(fmt , ...) do { } while (0) | ||
| 27 | #endif | ||
| 20 | 28 | ||
| 21 | static unsigned int ftrace_nop = 0x60000000; | 29 | static unsigned int ftrace_nop = PPC_NOP_INSTR; |
| 22 | 30 | ||
| 23 | #ifdef CONFIG_PPC32 | 31 | #ifdef CONFIG_PPC32 |
| 24 | # define GET_ADDR(addr) addr | 32 | # define GET_ADDR(addr) addr |
| 25 | #else | 33 | #else |
| 26 | /* PowerPC64's functions are data that points to the functions */ | 34 | /* PowerPC64's functions are data that points to the functions */ |
| 27 | # define GET_ADDR(addr) *(unsigned long *)addr | 35 | # define GET_ADDR(addr) (*(unsigned long *)addr) |
| 28 | #endif | 36 | #endif |
| 29 | 37 | ||
| 30 | 38 | ||
| @@ -33,12 +41,12 @@ static unsigned int ftrace_calc_offset(long ip, long addr) | |||
| 33 | return (int)(addr - ip); | 41 | return (int)(addr - ip); |
| 34 | } | 42 | } |
| 35 | 43 | ||
| 36 | unsigned char *ftrace_nop_replace(void) | 44 | static unsigned char *ftrace_nop_replace(void) |
| 37 | { | 45 | { |
| 38 | return (char *)&ftrace_nop; | 46 | return (char *)&ftrace_nop; |
| 39 | } | 47 | } |
| 40 | 48 | ||
| 41 | unsigned char *ftrace_call_replace(unsigned long ip, unsigned long addr) | 49 | static unsigned char *ftrace_call_replace(unsigned long ip, unsigned long addr) |
| 42 | { | 50 | { |
| 43 | static unsigned int op; | 51 | static unsigned int op; |
| 44 | 52 | ||
| @@ -68,49 +76,422 @@ unsigned char *ftrace_call_replace(unsigned long ip, unsigned long addr) | |||
| 68 | # define _ASM_PTR " .long " | 76 | # define _ASM_PTR " .long " |
| 69 | #endif | 77 | #endif |
| 70 | 78 | ||
| 71 | int | 79 | static int |
| 72 | ftrace_modify_code(unsigned long ip, unsigned char *old_code, | 80 | ftrace_modify_code(unsigned long ip, unsigned char *old_code, |
| 73 | unsigned char *new_code) | 81 | unsigned char *new_code) |
| 74 | { | 82 | { |
| 75 | unsigned replaced; | 83 | unsigned char replaced[MCOUNT_INSN_SIZE]; |
| 76 | unsigned old = *(unsigned *)old_code; | ||
| 77 | unsigned new = *(unsigned *)new_code; | ||
| 78 | int faulted = 0; | ||
| 79 | 84 | ||
| 80 | /* | 85 | /* |
| 81 | * Note: Due to modules and __init, code can | 86 | * Note: Due to modules and __init, code can |
| 82 | * disappear and change, we need to protect against faulting | 87 | * disappear and change, we need to protect against faulting |
| 83 | * as well as code changing. | 88 | * as well as code changing. We do this by using the |
| 89 | * probe_kernel_* functions. | ||
| 84 | * | 90 | * |
| 85 | * No real locking needed, this code is run through | 91 | * No real locking needed, this code is run through |
| 86 | * kstop_machine. | 92 | * kstop_machine, or before SMP starts. |
| 87 | */ | 93 | */ |
| 88 | asm volatile ( | 94 | |
| 89 | "1: lwz %1, 0(%2)\n" | 95 | /* read the text we want to modify */ |
| 90 | " cmpw %1, %5\n" | 96 | if (probe_kernel_read(replaced, (void *)ip, MCOUNT_INSN_SIZE)) |
| 91 | " bne 2f\n" | 97 | return -EFAULT; |
| 92 | " stwu %3, 0(%2)\n" | 98 | |
| 93 | "2:\n" | 99 | /* Make sure it is what we expect it to be */ |
| 94 | ".section .fixup, \"ax\"\n" | 100 | if (memcmp(replaced, old_code, MCOUNT_INSN_SIZE) != 0) |
| 95 | "3: li %0, 1\n" | 101 | return -EINVAL; |
| 96 | " b 2b\n" | 102 | |
| 97 | ".previous\n" | 103 | /* replace the text with the new text */ |
| 98 | ".section __ex_table,\"a\"\n" | 104 | if (probe_kernel_write((void *)ip, new_code, MCOUNT_INSN_SIZE)) |
| 99 | _ASM_ALIGN "\n" | 105 | return -EPERM; |
| 100 | _ASM_PTR "1b, 3b\n" | 106 | |
| 101 | ".previous" | 107 | flush_icache_range(ip, ip + 8); |
| 102 | : "=r"(faulted), "=r"(replaced) | 108 | |
| 103 | : "r"(ip), "r"(new), | 109 | return 0; |
| 104 | "0"(faulted), "r"(old) | 110 | } |
| 105 | : "memory"); | 111 | |
| 106 | 112 | /* | |
| 107 | if (replaced != old && replaced != new) | 113 | * Helper functions that are the same for both PPC64 and PPC32. |
| 108 | faulted = 2; | 114 | */ |
| 109 | 115 | static int test_24bit_addr(unsigned long ip, unsigned long addr) | |
| 110 | if (!faulted) | 116 | { |
| 111 | flush_icache_range(ip, ip + 8); | 117 | |
| 112 | 118 | /* use the create_branch to verify that this offset can be branched */ | |
| 113 | return faulted; | 119 | return create_branch((unsigned int *)ip, addr, 0); |
| 120 | } | ||
| 121 | |||
| 122 | static int is_bl_op(unsigned int op) | ||
| 123 | { | ||
| 124 | return (op & 0xfc000003) == 0x48000001; | ||
| 125 | } | ||
| 126 | |||
| 127 | static unsigned long find_bl_target(unsigned long ip, unsigned int op) | ||
| 128 | { | ||
| 129 | static int offset; | ||
| 130 | |||
| 131 | offset = (op & 0x03fffffc); | ||
| 132 | /* make it signed */ | ||
| 133 | if (offset & 0x02000000) | ||
| 134 | offset |= 0xfe000000; | ||
| 135 | |||
| 136 | return ip + (long)offset; | ||
| 137 | } | ||
| 138 | |||
| 139 | #ifdef CONFIG_PPC64 | ||
| 140 | static int | ||
| 141 | __ftrace_make_nop(struct module *mod, | ||
| 142 | struct dyn_ftrace *rec, unsigned long addr) | ||
| 143 | { | ||
| 144 | unsigned int op; | ||
| 145 | unsigned int jmp[5]; | ||
| 146 | unsigned long ptr; | ||
| 147 | unsigned long ip = rec->ip; | ||
| 148 | unsigned long tramp; | ||
| 149 | int offset; | ||
| 150 | |||
| 151 | /* read where this goes */ | ||
| 152 | if (probe_kernel_read(&op, (void *)ip, sizeof(int))) | ||
| 153 | return -EFAULT; | ||
| 154 | |||
| 155 | /* Make sure that that this is still a 24bit jump */ | ||
| 156 | if (!is_bl_op(op)) { | ||
| 157 | printk(KERN_ERR "Not expected bl: opcode is %x\n", op); | ||
| 158 | return -EINVAL; | ||
| 159 | } | ||
| 160 | |||
| 161 | /* lets find where the pointer goes */ | ||
| 162 | tramp = find_bl_target(ip, op); | ||
| 163 | |||
| 164 | /* | ||
| 165 | * On PPC64 the trampoline looks like: | ||
| 166 | * 0x3d, 0x82, 0x00, 0x00, addis r12,r2, <high> | ||
| 167 | * 0x39, 0x8c, 0x00, 0x00, addi r12,r12, <low> | ||
| 168 | * Where the bytes 2,3,6 and 7 make up the 32bit offset | ||
| 169 | * to the TOC that holds the pointer. | ||
| 170 | * to jump to. | ||
| 171 | * 0xf8, 0x41, 0x00, 0x28, std r2,40(r1) | ||
| 172 | * 0xe9, 0x6c, 0x00, 0x20, ld r11,32(r12) | ||
| 173 | * The actually address is 32 bytes from the offset | ||
| 174 | * into the TOC. | ||
| 175 | * 0xe8, 0x4c, 0x00, 0x28, ld r2,40(r12) | ||
| 176 | */ | ||
| 177 | |||
| 178 | DEBUGP("ip:%lx jumps to %lx r2: %lx", ip, tramp, mod->arch.toc); | ||
| 179 | |||
| 180 | /* Find where the trampoline jumps to */ | ||
| 181 | if (probe_kernel_read(jmp, (void *)tramp, sizeof(jmp))) { | ||
| 182 | printk(KERN_ERR "Failed to read %lx\n", tramp); | ||
| 183 | return -EFAULT; | ||
| 184 | } | ||
| 185 | |||
| 186 | DEBUGP(" %08x %08x", jmp[0], jmp[1]); | ||
| 187 | |||
| 188 | /* verify that this is what we expect it to be */ | ||
| 189 | if (((jmp[0] & 0xffff0000) != 0x3d820000) || | ||
| 190 | ((jmp[1] & 0xffff0000) != 0x398c0000) || | ||
| 191 | (jmp[2] != 0xf8410028) || | ||
| 192 | (jmp[3] != 0xe96c0020) || | ||
| 193 | (jmp[4] != 0xe84c0028)) { | ||
| 194 | printk(KERN_ERR "Not a trampoline\n"); | ||
| 195 | return -EINVAL; | ||
| 196 | } | ||
| 197 | |||
| 198 | offset = (unsigned)((unsigned short)jmp[0]) << 16 | | ||
| 199 | (unsigned)((unsigned short)jmp[1]); | ||
| 200 | |||
| 201 | DEBUGP(" %x ", offset); | ||
| 202 | |||
| 203 | /* get the address this jumps too */ | ||
| 204 | tramp = mod->arch.toc + offset + 32; | ||
| 205 | DEBUGP("toc: %lx", tramp); | ||
| 206 | |||
| 207 | if (probe_kernel_read(jmp, (void *)tramp, 8)) { | ||
| 208 | printk(KERN_ERR "Failed to read %lx\n", tramp); | ||
| 209 | return -EFAULT; | ||
| 210 | } | ||
| 211 | |||
| 212 | DEBUGP(" %08x %08x\n", jmp[0], jmp[1]); | ||
| 213 | |||
| 214 | ptr = ((unsigned long)jmp[0] << 32) + jmp[1]; | ||
| 215 | |||
| 216 | /* This should match what was called */ | ||
| 217 | if (ptr != GET_ADDR(addr)) { | ||
| 218 | printk(KERN_ERR "addr does not match %lx\n", ptr); | ||
| 219 | return -EINVAL; | ||
| 220 | } | ||
| 221 | |||
| 222 | /* | ||
| 223 | * We want to nop the line, but the next line is | ||
| 224 | * 0xe8, 0x41, 0x00, 0x28 ld r2,40(r1) | ||
| 225 | * This needs to be turned to a nop too. | ||
| 226 | */ | ||
| 227 | if (probe_kernel_read(&op, (void *)(ip+4), MCOUNT_INSN_SIZE)) | ||
| 228 | return -EFAULT; | ||
| 229 | |||
| 230 | if (op != 0xe8410028) { | ||
| 231 | printk(KERN_ERR "Next line is not ld! (%08x)\n", op); | ||
| 232 | return -EINVAL; | ||
| 233 | } | ||
| 234 | |||
| 235 | /* | ||
| 236 | * Milton Miller pointed out that we can not blindly do nops. | ||
| 237 | * If a task was preempted when calling a trace function, | ||
| 238 | * the nops will remove the way to restore the TOC in r2 | ||
| 239 | * and the r2 TOC will get corrupted. | ||
| 240 | */ | ||
| 241 | |||
| 242 | /* | ||
| 243 | * Replace: | ||
| 244 | * bl <tramp> <==== will be replaced with "b 1f" | ||
| 245 | * ld r2,40(r1) | ||
| 246 | * 1: | ||
| 247 | */ | ||
| 248 | op = 0x48000008; /* b +8 */ | ||
| 249 | |||
| 250 | if (probe_kernel_write((void *)ip, &op, MCOUNT_INSN_SIZE)) | ||
| 251 | return -EPERM; | ||
| 252 | |||
| 253 | |||
| 254 | flush_icache_range(ip, ip + 8); | ||
| 255 | |||
| 256 | return 0; | ||
| 257 | } | ||
| 258 | |||
| 259 | #else /* !PPC64 */ | ||
| 260 | static int | ||
| 261 | __ftrace_make_nop(struct module *mod, | ||
| 262 | struct dyn_ftrace *rec, unsigned long addr) | ||
| 263 | { | ||
| 264 | unsigned int op; | ||
| 265 | unsigned int jmp[4]; | ||
| 266 | unsigned long ip = rec->ip; | ||
| 267 | unsigned long tramp; | ||
| 268 | |||
| 269 | if (probe_kernel_read(&op, (void *)ip, MCOUNT_INSN_SIZE)) | ||
| 270 | return -EFAULT; | ||
| 271 | |||
| 272 | /* Make sure that that this is still a 24bit jump */ | ||
| 273 | if (!is_bl_op(op)) { | ||
| 274 | printk(KERN_ERR "Not expected bl: opcode is %x\n", op); | ||
| 275 | return -EINVAL; | ||
| 276 | } | ||
| 277 | |||
| 278 | /* lets find where the pointer goes */ | ||
| 279 | tramp = find_bl_target(ip, op); | ||
| 280 | |||
| 281 | /* | ||
| 282 | * On PPC32 the trampoline looks like: | ||
| 283 | * 0x3d, 0x60, 0x00, 0x00 lis r11,sym@ha | ||
| 284 | * 0x39, 0x6b, 0x00, 0x00 addi r11,r11,sym@l | ||
| 285 | * 0x7d, 0x69, 0x03, 0xa6 mtctr r11 | ||
| 286 | * 0x4e, 0x80, 0x04, 0x20 bctr | ||
| 287 | */ | ||
| 288 | |||
| 289 | DEBUGP("ip:%lx jumps to %lx", ip, tramp); | ||
| 290 | |||
| 291 | /* Find where the trampoline jumps to */ | ||
| 292 | if (probe_kernel_read(jmp, (void *)tramp, sizeof(jmp))) { | ||
| 293 | printk(KERN_ERR "Failed to read %lx\n", tramp); | ||
| 294 | return -EFAULT; | ||
| 295 | } | ||
| 296 | |||
| 297 | DEBUGP(" %08x %08x ", jmp[0], jmp[1]); | ||
| 298 | |||
| 299 | /* verify that this is what we expect it to be */ | ||
| 300 | if (((jmp[0] & 0xffff0000) != 0x3d600000) || | ||
| 301 | ((jmp[1] & 0xffff0000) != 0x396b0000) || | ||
| 302 | (jmp[2] != 0x7d6903a6) || | ||
| 303 | (jmp[3] != 0x4e800420)) { | ||
| 304 | printk(KERN_ERR "Not a trampoline\n"); | ||
| 305 | return -EINVAL; | ||
| 306 | } | ||
| 307 | |||
| 308 | tramp = (jmp[1] & 0xffff) | | ||
| 309 | ((jmp[0] & 0xffff) << 16); | ||
| 310 | if (tramp & 0x8000) | ||
| 311 | tramp -= 0x10000; | ||
| 312 | |||
| 313 | DEBUGP(" %x ", tramp); | ||
| 314 | |||
| 315 | if (tramp != addr) { | ||
| 316 | printk(KERN_ERR | ||
| 317 | "Trampoline location %08lx does not match addr\n", | ||
| 318 | tramp); | ||
| 319 | return -EINVAL; | ||
| 320 | } | ||
| 321 | |||
| 322 | op = PPC_NOP_INSTR; | ||
| 323 | |||
| 324 | if (probe_kernel_write((void *)ip, &op, MCOUNT_INSN_SIZE)) | ||
| 325 | return -EPERM; | ||
| 326 | |||
| 327 | flush_icache_range(ip, ip + 8); | ||
| 328 | |||
| 329 | return 0; | ||
| 330 | } | ||
| 331 | #endif /* PPC64 */ | ||
| 332 | |||
| 333 | int ftrace_make_nop(struct module *mod, | ||
| 334 | struct dyn_ftrace *rec, unsigned long addr) | ||
| 335 | { | ||
| 336 | unsigned char *old, *new; | ||
| 337 | unsigned long ip = rec->ip; | ||
| 338 | |||
| 339 | /* | ||
| 340 | * If the calling address is more that 24 bits away, | ||
| 341 | * then we had to use a trampoline to make the call. | ||
| 342 | * Otherwise just update the call site. | ||
| 343 | */ | ||
| 344 | if (test_24bit_addr(ip, addr)) { | ||
| 345 | /* within range */ | ||
| 346 | old = ftrace_call_replace(ip, addr); | ||
| 347 | new = ftrace_nop_replace(); | ||
| 348 | return ftrace_modify_code(ip, old, new); | ||
| 349 | } | ||
| 350 | |||
| 351 | /* | ||
| 352 | * Out of range jumps are called from modules. | ||
| 353 | * We should either already have a pointer to the module | ||
| 354 | * or it has been passed in. | ||
| 355 | */ | ||
| 356 | if (!rec->arch.mod) { | ||
| 357 | if (!mod) { | ||
| 358 | printk(KERN_ERR "No module loaded addr=%lx\n", | ||
| 359 | addr); | ||
| 360 | return -EFAULT; | ||
| 361 | } | ||
| 362 | rec->arch.mod = mod; | ||
| 363 | } else if (mod) { | ||
| 364 | if (mod != rec->arch.mod) { | ||
| 365 | printk(KERN_ERR | ||
| 366 | "Record mod %p not equal to passed in mod %p\n", | ||
| 367 | rec->arch.mod, mod); | ||
| 368 | return -EINVAL; | ||
| 369 | } | ||
| 370 | /* nothing to do if mod == rec->arch.mod */ | ||
| 371 | } else | ||
| 372 | mod = rec->arch.mod; | ||
| 373 | |||
| 374 | return __ftrace_make_nop(mod, rec, addr); | ||
| 375 | |||
| 376 | } | ||
| 377 | |||
| 378 | #ifdef CONFIG_PPC64 | ||
| 379 | static int | ||
| 380 | __ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr) | ||
| 381 | { | ||
| 382 | unsigned int op[2]; | ||
| 383 | unsigned long ip = rec->ip; | ||
| 384 | |||
| 385 | /* read where this goes */ | ||
| 386 | if (probe_kernel_read(op, (void *)ip, MCOUNT_INSN_SIZE * 2)) | ||
| 387 | return -EFAULT; | ||
| 388 | |||
| 389 | /* | ||
| 390 | * It should be pointing to two nops or | ||
| 391 | * b +8; ld r2,40(r1) | ||
| 392 | */ | ||
| 393 | if (((op[0] != 0x48000008) || (op[1] != 0xe8410028)) && | ||
| 394 | ((op[0] != PPC_NOP_INSTR) || (op[1] != PPC_NOP_INSTR))) { | ||
| 395 | printk(KERN_ERR "Expected NOPs but have %x %x\n", op[0], op[1]); | ||
| 396 | return -EINVAL; | ||
| 397 | } | ||
| 398 | |||
| 399 | /* If we never set up a trampoline to ftrace_caller, then bail */ | ||
| 400 | if (!rec->arch.mod->arch.tramp) { | ||
| 401 | printk(KERN_ERR "No ftrace trampoline\n"); | ||
| 402 | return -EINVAL; | ||
| 403 | } | ||
| 404 | |||
| 405 | /* create the branch to the trampoline */ | ||
| 406 | op[0] = create_branch((unsigned int *)ip, | ||
| 407 | rec->arch.mod->arch.tramp, BRANCH_SET_LINK); | ||
| 408 | if (!op[0]) { | ||
| 409 | printk(KERN_ERR "REL24 out of range!\n"); | ||
| 410 | return -EINVAL; | ||
| 411 | } | ||
| 412 | |||
| 413 | /* ld r2,40(r1) */ | ||
| 414 | op[1] = 0xe8410028; | ||
| 415 | |||
| 416 | DEBUGP("write to %lx\n", rec->ip); | ||
| 417 | |||
| 418 | if (probe_kernel_write((void *)ip, op, MCOUNT_INSN_SIZE * 2)) | ||
| 419 | return -EPERM; | ||
| 420 | |||
| 421 | flush_icache_range(ip, ip + 8); | ||
| 422 | |||
| 423 | return 0; | ||
| 424 | } | ||
| 425 | #else | ||
| 426 | static int | ||
| 427 | __ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr) | ||
| 428 | { | ||
| 429 | unsigned int op; | ||
| 430 | unsigned long ip = rec->ip; | ||
| 431 | |||
| 432 | /* read where this goes */ | ||
| 433 | if (probe_kernel_read(&op, (void *)ip, MCOUNT_INSN_SIZE)) | ||
| 434 | return -EFAULT; | ||
| 435 | |||
| 436 | /* It should be pointing to a nop */ | ||
| 437 | if (op != PPC_NOP_INSTR) { | ||
| 438 | printk(KERN_ERR "Expected NOP but have %x\n", op); | ||
| 439 | return -EINVAL; | ||
| 440 | } | ||
| 441 | |||
| 442 | /* If we never set up a trampoline to ftrace_caller, then bail */ | ||
| 443 | if (!rec->arch.mod->arch.tramp) { | ||
| 444 | printk(KERN_ERR "No ftrace trampoline\n"); | ||
| 445 | return -EINVAL; | ||
| 446 | } | ||
| 447 | |||
| 448 | /* create the branch to the trampoline */ | ||
| 449 | op = create_branch((unsigned int *)ip, | ||
| 450 | rec->arch.mod->arch.tramp, BRANCH_SET_LINK); | ||
| 451 | if (!op) { | ||
| 452 | printk(KERN_ERR "REL24 out of range!\n"); | ||
| 453 | return -EINVAL; | ||
| 454 | } | ||
| 455 | |||
| 456 | DEBUGP("write to %lx\n", rec->ip); | ||
| 457 | |||
| 458 | if (probe_kernel_write((void *)ip, &op, MCOUNT_INSN_SIZE)) | ||
| 459 | return -EPERM; | ||
| 460 | |||
| 461 | flush_icache_range(ip, ip + 8); | ||
| 462 | |||
| 463 | return 0; | ||
| 464 | } | ||
| 465 | #endif /* CONFIG_PPC64 */ | ||
| 466 | |||
| 467 | int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr) | ||
| 468 | { | ||
| 469 | unsigned char *old, *new; | ||
| 470 | unsigned long ip = rec->ip; | ||
| 471 | |||
| 472 | /* | ||
| 473 | * If the calling address is more that 24 bits away, | ||
| 474 | * then we had to use a trampoline to make the call. | ||
| 475 | * Otherwise just update the call site. | ||
| 476 | */ | ||
| 477 | if (test_24bit_addr(ip, addr)) { | ||
| 478 | /* within range */ | ||
| 479 | old = ftrace_nop_replace(); | ||
| 480 | new = ftrace_call_replace(ip, addr); | ||
| 481 | return ftrace_modify_code(ip, old, new); | ||
| 482 | } | ||
| 483 | |||
| 484 | /* | ||
| 485 | * Out of range jumps are called from modules. | ||
| 486 | * Being that we are converting from nop, it had better | ||
| 487 | * already have a module defined. | ||
| 488 | */ | ||
| 489 | if (!rec->arch.mod) { | ||
| 490 | printk(KERN_ERR "No module loaded\n"); | ||
| 491 | return -EINVAL; | ||
| 492 | } | ||
| 493 | |||
| 494 | return __ftrace_make_call(rec, addr); | ||
| 114 | } | 495 | } |
| 115 | 496 | ||
| 116 | int ftrace_update_ftrace_func(ftrace_func_t func) | 497 | int ftrace_update_ftrace_func(ftrace_func_t func) |
| @@ -128,10 +509,10 @@ int ftrace_update_ftrace_func(ftrace_func_t func) | |||
| 128 | 509 | ||
| 129 | int __init ftrace_dyn_arch_init(void *data) | 510 | int __init ftrace_dyn_arch_init(void *data) |
| 130 | { | 511 | { |
| 131 | /* This is running in kstop_machine */ | 512 | /* caller expects data to be zero */ |
| 513 | unsigned long *p = data; | ||
| 132 | 514 | ||
| 133 | ftrace_mcount_set(data); | 515 | *p = 0; |
| 134 | 516 | ||
| 135 | return 0; | 517 | return 0; |
| 136 | } | 518 | } |
| 137 | |||
diff --git a/arch/powerpc/kernel/idle.c b/arch/powerpc/kernel/idle.c index 31982d05d81a..88d9c1d5e5fb 100644 --- a/arch/powerpc/kernel/idle.c +++ b/arch/powerpc/kernel/idle.c | |||
| @@ -69,10 +69,15 @@ void cpu_idle(void) | |||
| 69 | smp_mb(); | 69 | smp_mb(); |
| 70 | local_irq_disable(); | 70 | local_irq_disable(); |
| 71 | 71 | ||
| 72 | /* Don't trace irqs off for idle */ | ||
| 73 | stop_critical_timings(); | ||
| 74 | |||
| 72 | /* check again after disabling irqs */ | 75 | /* check again after disabling irqs */ |
| 73 | if (!need_resched() && !cpu_should_die()) | 76 | if (!need_resched() && !cpu_should_die()) |
| 74 | ppc_md.power_save(); | 77 | ppc_md.power_save(); |
| 75 | 78 | ||
| 79 | start_critical_timings(); | ||
| 80 | |||
| 76 | local_irq_enable(); | 81 | local_irq_enable(); |
| 77 | set_thread_flag(TIF_POLLING_NRFLAG); | 82 | set_thread_flag(TIF_POLLING_NRFLAG); |
| 78 | 83 | ||
diff --git a/arch/powerpc/kernel/misc_32.S b/arch/powerpc/kernel/misc_32.S index bdc8b0e860e5..5c33bc14bd9f 100644 --- a/arch/powerpc/kernel/misc_32.S +++ b/arch/powerpc/kernel/misc_32.S | |||
| @@ -479,17 +479,20 @@ _GLOBAL(_tlbil_pid) | |||
| 479 | * (no broadcast) | 479 | * (no broadcast) |
| 480 | */ | 480 | */ |
| 481 | _GLOBAL(_tlbil_va) | 481 | _GLOBAL(_tlbil_va) |
| 482 | mfmsr r10 | ||
| 483 | wrteei 0 | ||
| 482 | slwi r4,r4,16 | 484 | slwi r4,r4,16 |
| 483 | mtspr SPRN_MAS6,r4 /* assume AS=0 for now */ | 485 | mtspr SPRN_MAS6,r4 /* assume AS=0 for now */ |
| 484 | tlbsx 0,r3 | 486 | tlbsx 0,r3 |
| 485 | mfspr r4,SPRN_MAS1 /* check valid */ | 487 | mfspr r4,SPRN_MAS1 /* check valid */ |
| 486 | andis. r3,r4,MAS1_VALID@h | 488 | andis. r3,r4,MAS1_VALID@h |
| 487 | beqlr | 489 | beq 1f |
| 488 | rlwinm r4,r4,0,1,31 | 490 | rlwinm r4,r4,0,1,31 |
| 489 | mtspr SPRN_MAS1,r4 | 491 | mtspr SPRN_MAS1,r4 |
| 490 | tlbwe | 492 | tlbwe |
| 491 | msync | 493 | msync |
| 492 | isync | 494 | isync |
| 495 | 1: wrtee r10 | ||
| 493 | blr | 496 | blr |
| 494 | #endif /* CONFIG_FSL_BOOKE */ | 497 | #endif /* CONFIG_FSL_BOOKE */ |
| 495 | 498 | ||
diff --git a/arch/powerpc/kernel/module_32.c b/arch/powerpc/kernel/module_32.c index 2df91a03462a..f832773fc28e 100644 --- a/arch/powerpc/kernel/module_32.c +++ b/arch/powerpc/kernel/module_32.c | |||
| @@ -22,6 +22,7 @@ | |||
| 22 | #include <linux/fs.h> | 22 | #include <linux/fs.h> |
| 23 | #include <linux/string.h> | 23 | #include <linux/string.h> |
| 24 | #include <linux/kernel.h> | 24 | #include <linux/kernel.h> |
| 25 | #include <linux/ftrace.h> | ||
| 25 | #include <linux/cache.h> | 26 | #include <linux/cache.h> |
| 26 | #include <linux/bug.h> | 27 | #include <linux/bug.h> |
| 27 | #include <linux/sort.h> | 28 | #include <linux/sort.h> |
| @@ -53,6 +54,9 @@ static unsigned int count_relocs(const Elf32_Rela *rela, unsigned int num) | |||
| 53 | r_addend = rela[i].r_addend; | 54 | r_addend = rela[i].r_addend; |
| 54 | } | 55 | } |
| 55 | 56 | ||
| 57 | #ifdef CONFIG_DYNAMIC_FTRACE | ||
| 58 | _count_relocs++; /* add one for ftrace_caller */ | ||
| 59 | #endif | ||
| 56 | return _count_relocs; | 60 | return _count_relocs; |
| 57 | } | 61 | } |
| 58 | 62 | ||
| @@ -306,5 +310,11 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, | |||
| 306 | return -ENOEXEC; | 310 | return -ENOEXEC; |
| 307 | } | 311 | } |
| 308 | } | 312 | } |
| 313 | #ifdef CONFIG_DYNAMIC_FTRACE | ||
| 314 | module->arch.tramp = | ||
| 315 | do_plt_call(module->module_core, | ||
| 316 | (unsigned long)ftrace_caller, | ||
| 317 | sechdrs, module); | ||
| 318 | #endif | ||
| 309 | return 0; | 319 | return 0; |
| 310 | } | 320 | } |
diff --git a/arch/powerpc/kernel/module_64.c b/arch/powerpc/kernel/module_64.c index 1af2377e4992..8992b031a7b6 100644 --- a/arch/powerpc/kernel/module_64.c +++ b/arch/powerpc/kernel/module_64.c | |||
| @@ -20,6 +20,7 @@ | |||
| 20 | #include <linux/moduleloader.h> | 20 | #include <linux/moduleloader.h> |
| 21 | #include <linux/err.h> | 21 | #include <linux/err.h> |
| 22 | #include <linux/vmalloc.h> | 22 | #include <linux/vmalloc.h> |
| 23 | #include <linux/ftrace.h> | ||
| 23 | #include <linux/bug.h> | 24 | #include <linux/bug.h> |
| 24 | #include <asm/module.h> | 25 | #include <asm/module.h> |
| 25 | #include <asm/firmware.h> | 26 | #include <asm/firmware.h> |
| @@ -163,6 +164,11 @@ static unsigned long get_stubs_size(const Elf64_Ehdr *hdr, | |||
| 163 | } | 164 | } |
| 164 | } | 165 | } |
| 165 | 166 | ||
| 167 | #ifdef CONFIG_DYNAMIC_FTRACE | ||
| 168 | /* make the trampoline to the ftrace_caller */ | ||
| 169 | relocs++; | ||
| 170 | #endif | ||
| 171 | |||
| 166 | DEBUGP("Looks like a total of %lu stubs, max\n", relocs); | 172 | DEBUGP("Looks like a total of %lu stubs, max\n", relocs); |
| 167 | return relocs * sizeof(struct ppc64_stub_entry); | 173 | return relocs * sizeof(struct ppc64_stub_entry); |
| 168 | } | 174 | } |
| @@ -441,5 +447,12 @@ int apply_relocate_add(Elf64_Shdr *sechdrs, | |||
| 441 | } | 447 | } |
| 442 | } | 448 | } |
| 443 | 449 | ||
| 450 | #ifdef CONFIG_DYNAMIC_FTRACE | ||
| 451 | me->arch.toc = my_r2(sechdrs, me); | ||
| 452 | me->arch.tramp = stub_for_addr(sechdrs, | ||
| 453 | (unsigned long)ftrace_caller, | ||
| 454 | me); | ||
| 455 | #endif | ||
| 456 | |||
| 444 | return 0; | 457 | return 0; |
| 445 | } | 458 | } |
diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c index 65639a43e644..f7ec7d0888fe 100644 --- a/arch/powerpc/kernel/vdso.c +++ b/arch/powerpc/kernel/vdso.c | |||
| @@ -184,8 +184,7 @@ static void dump_vdso_pages(struct vm_area_struct * vma) | |||
| 184 | * This is called from binfmt_elf, we create the special vma for the | 184 | * This is called from binfmt_elf, we create the special vma for the |
| 185 | * vDSO and insert it into the mm struct tree | 185 | * vDSO and insert it into the mm struct tree |
| 186 | */ | 186 | */ |
| 187 | int arch_setup_additional_pages(struct linux_binprm *bprm, | 187 | int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) |
| 188 | int executable_stack) | ||
| 189 | { | 188 | { |
| 190 | struct mm_struct *mm = current->mm; | 189 | struct mm_struct *mm = current->mm; |
| 191 | struct page **vdso_pagelist; | 190 | struct page **vdso_pagelist; |
diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile index d69912c07ce7..8db35278a4b4 100644 --- a/arch/powerpc/lib/Makefile +++ b/arch/powerpc/lib/Makefile | |||
| @@ -6,6 +6,9 @@ ifeq ($(CONFIG_PPC64),y) | |||
| 6 | EXTRA_CFLAGS += -mno-minimal-toc | 6 | EXTRA_CFLAGS += -mno-minimal-toc |
| 7 | endif | 7 | endif |
| 8 | 8 | ||
| 9 | CFLAGS_REMOVE_code-patching.o = -pg | ||
| 10 | CFLAGS_REMOVE_feature-fixups.o = -pg | ||
| 11 | |||
| 9 | obj-y := string.o alloc.o \ | 12 | obj-y := string.o alloc.o \ |
| 10 | checksum_$(CONFIG_WORD_SIZE).o | 13 | checksum_$(CONFIG_WORD_SIZE).o |
| 11 | obj-$(CONFIG_PPC32) += div64.o copy_32.o crtsavres.o | 14 | obj-$(CONFIG_PPC32) += div64.o copy_32.o crtsavres.o |
diff --git a/arch/powerpc/lib/rheap.c b/arch/powerpc/lib/rheap.c index 29b2941cada0..45907c1dae66 100644 --- a/arch/powerpc/lib/rheap.c +++ b/arch/powerpc/lib/rheap.c | |||
| @@ -556,6 +556,7 @@ unsigned long rh_alloc_fixed(rh_info_t * info, unsigned long start, int size, co | |||
| 556 | be = blk->start + blk->size; | 556 | be = blk->start + blk->size; |
| 557 | if (s >= bs && e <= be) | 557 | if (s >= bs && e <= be) |
| 558 | break; | 558 | break; |
| 559 | blk = NULL; | ||
| 559 | } | 560 | } |
| 560 | 561 | ||
| 561 | if (blk == NULL) | 562 | if (blk == NULL) |
diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c index 7bbf4e4ed430..f0c3b88d50fa 100644 --- a/arch/powerpc/mm/hugetlbpage.c +++ b/arch/powerpc/mm/hugetlbpage.c | |||
| @@ -507,6 +507,9 @@ unsigned long hugetlb_get_unmapped_area(struct file *file, unsigned long addr, | |||
| 507 | { | 507 | { |
| 508 | struct hstate *hstate = hstate_file(file); | 508 | struct hstate *hstate = hstate_file(file); |
| 509 | int mmu_psize = shift_to_mmu_psize(huge_page_shift(hstate)); | 509 | int mmu_psize = shift_to_mmu_psize(huge_page_shift(hstate)); |
| 510 | |||
| 511 | if (!mmu_huge_psizes[mmu_psize]) | ||
| 512 | return -EINVAL; | ||
| 510 | return slice_get_unmapped_area(addr, len, flags, mmu_psize, 1, 0); | 513 | return slice_get_unmapped_area(addr, len, flags, mmu_psize, 1, 0); |
| 511 | } | 514 | } |
| 512 | 515 | ||
diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c index a8397bbad3d4..cf81049e1e51 100644 --- a/arch/powerpc/mm/numa.c +++ b/arch/powerpc/mm/numa.c | |||
| @@ -901,10 +901,17 @@ static void mark_reserved_regions_for_nid(int nid) | |||
| 901 | if (end_pfn > node_ar.end_pfn) | 901 | if (end_pfn > node_ar.end_pfn) |
| 902 | reserve_size = (node_ar.end_pfn << PAGE_SHIFT) | 902 | reserve_size = (node_ar.end_pfn << PAGE_SHIFT) |
| 903 | - (start_pfn << PAGE_SHIFT); | 903 | - (start_pfn << PAGE_SHIFT); |
| 904 | dbg("reserve_bootmem %lx %lx nid=%d\n", physbase, | 904 | /* |
| 905 | reserve_size, node_ar.nid); | 905 | * Only worry about *this* node, others may not |
| 906 | reserve_bootmem_node(NODE_DATA(node_ar.nid), physbase, | 906 | * yet have valid NODE_DATA(). |
| 907 | reserve_size, BOOTMEM_DEFAULT); | 907 | */ |
| 908 | if (node_ar.nid == nid) { | ||
| 909 | dbg("reserve_bootmem %lx %lx nid=%d\n", | ||
| 910 | physbase, reserve_size, node_ar.nid); | ||
| 911 | reserve_bootmem_node(NODE_DATA(node_ar.nid), | ||
| 912 | physbase, reserve_size, | ||
| 913 | BOOTMEM_DEFAULT); | ||
| 914 | } | ||
| 908 | /* | 915 | /* |
| 909 | * if reserved region is contained in the active region | 916 | * if reserved region is contained in the active region |
| 910 | * then done. | 917 | * then done. |
| @@ -929,7 +936,6 @@ static void mark_reserved_regions_for_nid(int nid) | |||
| 929 | void __init do_init_bootmem(void) | 936 | void __init do_init_bootmem(void) |
| 930 | { | 937 | { |
| 931 | int nid; | 938 | int nid; |
| 932 | unsigned int i; | ||
| 933 | 939 | ||
| 934 | min_low_pfn = 0; | 940 | min_low_pfn = 0; |
| 935 | max_low_pfn = lmb_end_of_DRAM() >> PAGE_SHIFT; | 941 | max_low_pfn = lmb_end_of_DRAM() >> PAGE_SHIFT; |
diff --git a/arch/powerpc/platforms/cell/axon_msi.c b/arch/powerpc/platforms/cell/axon_msi.c index 442cf36aa172..0ce45c2b42f8 100644 --- a/arch/powerpc/platforms/cell/axon_msi.c +++ b/arch/powerpc/platforms/cell/axon_msi.c | |||
| @@ -413,6 +413,9 @@ static int axon_msi_probe(struct of_device *device, | |||
| 413 | MSIC_CTRL_IRQ_ENABLE | MSIC_CTRL_ENABLE | | 413 | MSIC_CTRL_IRQ_ENABLE | MSIC_CTRL_ENABLE | |
| 414 | MSIC_CTRL_FIFO_SIZE); | 414 | MSIC_CTRL_FIFO_SIZE); |
| 415 | 415 | ||
| 416 | msic->read_offset = dcr_read(msic->dcr_host, MSIC_WRITE_OFFSET_REG) | ||
| 417 | & MSIC_FIFO_SIZE_MASK; | ||
| 418 | |||
| 416 | device->dev.platform_data = msic; | 419 | device->dev.platform_data = msic; |
| 417 | 420 | ||
| 418 | ppc_md.setup_msi_irqs = axon_msi_setup_msi_irqs; | 421 | ppc_md.setup_msi_irqs = axon_msi_setup_msi_irqs; |
diff --git a/arch/powerpc/sysdev/fsl_soc.c b/arch/powerpc/sysdev/fsl_soc.c index 26ecb96f9731..115cb16351fd 100644 --- a/arch/powerpc/sysdev/fsl_soc.c +++ b/arch/powerpc/sysdev/fsl_soc.c | |||
| @@ -207,236 +207,51 @@ static int __init of_add_fixed_phys(void) | |||
| 207 | arch_initcall(of_add_fixed_phys); | 207 | arch_initcall(of_add_fixed_phys); |
| 208 | #endif /* CONFIG_FIXED_PHY */ | 208 | #endif /* CONFIG_FIXED_PHY */ |
| 209 | 209 | ||
| 210 | static int gfar_mdio_of_init_one(struct device_node *np) | 210 | #ifdef CONFIG_PPC_83xx |
| 211 | { | 211 | static int __init mpc83xx_wdt_init(void) |
| 212 | int k; | ||
| 213 | struct device_node *child = NULL; | ||
| 214 | struct gianfar_mdio_data mdio_data; | ||
| 215 | struct platform_device *mdio_dev; | ||
| 216 | struct resource res; | ||
| 217 | int ret; | ||
| 218 | |||
| 219 | memset(&res, 0, sizeof(res)); | ||
| 220 | memset(&mdio_data, 0, sizeof(mdio_data)); | ||
| 221 | |||
| 222 | ret = of_address_to_resource(np, 0, &res); | ||
| 223 | if (ret) | ||
| 224 | return ret; | ||
| 225 | |||
| 226 | /* The gianfar device will try to use the same ID created below to find | ||
| 227 | * this bus, to coordinate register access (since they share). */ | ||
| 228 | mdio_dev = platform_device_register_simple("fsl-gianfar_mdio", | ||
| 229 | res.start&0xfffff, &res, 1); | ||
| 230 | if (IS_ERR(mdio_dev)) | ||
| 231 | return PTR_ERR(mdio_dev); | ||
| 232 | |||
| 233 | for (k = 0; k < 32; k++) | ||
| 234 | mdio_data.irq[k] = PHY_POLL; | ||
| 235 | |||
| 236 | while ((child = of_get_next_child(np, child)) != NULL) { | ||
| 237 | int irq = irq_of_parse_and_map(child, 0); | ||
| 238 | if (irq != NO_IRQ) { | ||
| 239 | const u32 *id = of_get_property(child, "reg", NULL); | ||
| 240 | mdio_data.irq[*id] = irq; | ||
| 241 | } | ||
| 242 | } | ||
| 243 | |||
| 244 | ret = platform_device_add_data(mdio_dev, &mdio_data, | ||
| 245 | sizeof(struct gianfar_mdio_data)); | ||
| 246 | if (ret) | ||
| 247 | platform_device_unregister(mdio_dev); | ||
| 248 | |||
| 249 | return ret; | ||
| 250 | } | ||
| 251 | |||
| 252 | static int __init gfar_mdio_of_init(void) | ||
| 253 | { | ||
| 254 | struct device_node *np = NULL; | ||
| 255 | |||
| 256 | for_each_compatible_node(np, NULL, "fsl,gianfar-mdio") | ||
| 257 | gfar_mdio_of_init_one(np); | ||
| 258 | |||
| 259 | /* try the deprecated version */ | ||
| 260 | for_each_compatible_node(np, "mdio", "gianfar"); | ||
| 261 | gfar_mdio_of_init_one(np); | ||
| 262 | |||
| 263 | return 0; | ||
| 264 | } | ||
| 265 | |||
| 266 | arch_initcall(gfar_mdio_of_init); | ||
| 267 | |||
| 268 | static const char *gfar_tx_intr = "tx"; | ||
| 269 | static const char *gfar_rx_intr = "rx"; | ||
| 270 | static const char *gfar_err_intr = "error"; | ||
| 271 | |||
| 272 | static int __init gfar_of_init(void) | ||
| 273 | { | 212 | { |
| 213 | struct resource r; | ||
| 274 | struct device_node *np; | 214 | struct device_node *np; |
| 275 | unsigned int i; | 215 | struct platform_device *dev; |
| 276 | struct platform_device *gfar_dev; | 216 | u32 freq = fsl_get_sys_freq(); |
| 277 | struct resource res; | ||
| 278 | int ret; | 217 | int ret; |
| 279 | 218 | ||
| 280 | for (np = NULL, i = 0; | 219 | np = of_find_compatible_node(NULL, "watchdog", "mpc83xx_wdt"); |
| 281 | (np = of_find_compatible_node(np, "network", "gianfar")) != NULL; | ||
| 282 | i++) { | ||
| 283 | struct resource r[4]; | ||
| 284 | struct device_node *phy, *mdio; | ||
| 285 | struct gianfar_platform_data gfar_data; | ||
| 286 | const unsigned int *id; | ||
| 287 | const char *model; | ||
| 288 | const char *ctype; | ||
| 289 | const void *mac_addr; | ||
| 290 | const phandle *ph; | ||
| 291 | int n_res = 2; | ||
| 292 | |||
| 293 | if (!of_device_is_available(np)) | ||
| 294 | continue; | ||
| 295 | |||
| 296 | memset(r, 0, sizeof(r)); | ||
| 297 | memset(&gfar_data, 0, sizeof(gfar_data)); | ||
| 298 | |||
| 299 | ret = of_address_to_resource(np, 0, &r[0]); | ||
| 300 | if (ret) | ||
| 301 | goto err; | ||
| 302 | |||
| 303 | of_irq_to_resource(np, 0, &r[1]); | ||
| 304 | |||
| 305 | model = of_get_property(np, "model", NULL); | ||
| 306 | |||
| 307 | /* If we aren't the FEC we have multiple interrupts */ | ||
| 308 | if (model && strcasecmp(model, "FEC")) { | ||
| 309 | r[1].name = gfar_tx_intr; | ||
| 310 | |||
| 311 | r[2].name = gfar_rx_intr; | ||
| 312 | of_irq_to_resource(np, 1, &r[2]); | ||
| 313 | 220 | ||
| 314 | r[3].name = gfar_err_intr; | 221 | if (!np) { |
| 315 | of_irq_to_resource(np, 2, &r[3]); | 222 | ret = -ENODEV; |
| 316 | 223 | goto nodev; | |
| 317 | n_res += 2; | 224 | } |
| 318 | } | ||
| 319 | |||
| 320 | gfar_dev = | ||
| 321 | platform_device_register_simple("fsl-gianfar", i, &r[0], | ||
| 322 | n_res); | ||
| 323 | |||
| 324 | if (IS_ERR(gfar_dev)) { | ||
| 325 | ret = PTR_ERR(gfar_dev); | ||
| 326 | goto err; | ||
| 327 | } | ||
| 328 | |||
| 329 | mac_addr = of_get_mac_address(np); | ||
| 330 | if (mac_addr) | ||
| 331 | memcpy(gfar_data.mac_addr, mac_addr, 6); | ||
| 332 | |||
| 333 | if (model && !strcasecmp(model, "TSEC")) | ||
| 334 | gfar_data.device_flags = | ||
| 335 | FSL_GIANFAR_DEV_HAS_GIGABIT | | ||
| 336 | FSL_GIANFAR_DEV_HAS_COALESCE | | ||
| 337 | FSL_GIANFAR_DEV_HAS_RMON | | ||
| 338 | FSL_GIANFAR_DEV_HAS_MULTI_INTR; | ||
| 339 | if (model && !strcasecmp(model, "eTSEC")) | ||
| 340 | gfar_data.device_flags = | ||
| 341 | FSL_GIANFAR_DEV_HAS_GIGABIT | | ||
| 342 | FSL_GIANFAR_DEV_HAS_COALESCE | | ||
| 343 | FSL_GIANFAR_DEV_HAS_RMON | | ||
| 344 | FSL_GIANFAR_DEV_HAS_MULTI_INTR | | ||
| 345 | FSL_GIANFAR_DEV_HAS_CSUM | | ||
| 346 | FSL_GIANFAR_DEV_HAS_VLAN | | ||
| 347 | FSL_GIANFAR_DEV_HAS_EXTENDED_HASH; | ||
| 348 | |||
| 349 | ctype = of_get_property(np, "phy-connection-type", NULL); | ||
| 350 | |||
| 351 | /* We only care about rgmii-id. The rest are autodetected */ | ||
| 352 | if (ctype && !strcmp(ctype, "rgmii-id")) | ||
| 353 | gfar_data.interface = PHY_INTERFACE_MODE_RGMII_ID; | ||
| 354 | else | ||
| 355 | gfar_data.interface = PHY_INTERFACE_MODE_MII; | ||
| 356 | |||
| 357 | if (of_get_property(np, "fsl,magic-packet", NULL)) | ||
| 358 | gfar_data.device_flags |= FSL_GIANFAR_DEV_HAS_MAGIC_PACKET; | ||
| 359 | |||
| 360 | ph = of_get_property(np, "phy-handle", NULL); | ||
| 361 | if (ph == NULL) { | ||
| 362 | u32 *fixed_link; | ||
| 363 | |||
| 364 | fixed_link = (u32 *)of_get_property(np, "fixed-link", | ||
| 365 | NULL); | ||
| 366 | if (!fixed_link) { | ||
| 367 | ret = -ENODEV; | ||
| 368 | goto unreg; | ||
| 369 | } | ||
| 370 | |||
| 371 | snprintf(gfar_data.bus_id, MII_BUS_ID_SIZE, "0"); | ||
| 372 | gfar_data.phy_id = fixed_link[0]; | ||
| 373 | } else { | ||
| 374 | phy = of_find_node_by_phandle(*ph); | ||
| 375 | |||
| 376 | if (phy == NULL) { | ||
| 377 | ret = -ENODEV; | ||
| 378 | goto unreg; | ||
| 379 | } | ||
| 380 | |||
| 381 | mdio = of_get_parent(phy); | ||
| 382 | |||
| 383 | id = of_get_property(phy, "reg", NULL); | ||
| 384 | ret = of_address_to_resource(mdio, 0, &res); | ||
| 385 | if (ret) { | ||
| 386 | of_node_put(phy); | ||
| 387 | of_node_put(mdio); | ||
| 388 | goto unreg; | ||
| 389 | } | ||
| 390 | |||
| 391 | gfar_data.phy_id = *id; | ||
| 392 | snprintf(gfar_data.bus_id, MII_BUS_ID_SIZE, "%llx", | ||
| 393 | (unsigned long long)res.start&0xfffff); | ||
| 394 | 225 | ||
| 395 | of_node_put(phy); | 226 | memset(&r, 0, sizeof(r)); |
| 396 | of_node_put(mdio); | ||
| 397 | } | ||
| 398 | 227 | ||
| 399 | /* Get MDIO bus controlled by this eTSEC, if any. Normally only | 228 | ret = of_address_to_resource(np, 0, &r); |
| 400 | * eTSEC 1 will control an MDIO bus, not necessarily the same | 229 | if (ret) |
| 401 | * bus that its PHY is on ('mdio' above), so we can't just use | 230 | goto err; |
| 402 | * that. What we do is look for a gianfar mdio device that has | ||
| 403 | * overlapping registers with this device. That's really the | ||
| 404 | * whole point, to find the device sharing our registers to | ||
| 405 | * coordinate access with it. | ||
| 406 | */ | ||
| 407 | for_each_compatible_node(mdio, NULL, "fsl,gianfar-mdio") { | ||
| 408 | if (of_address_to_resource(mdio, 0, &res)) | ||
| 409 | continue; | ||
| 410 | |||
| 411 | if (res.start >= r[0].start && res.end <= r[0].end) { | ||
| 412 | /* Get the ID the mdio bus platform device was | ||
| 413 | * registered with. gfar_data.bus_id is | ||
| 414 | * different because it's for finding a PHY, | ||
| 415 | * while this is for finding a MII bus. | ||
| 416 | */ | ||
| 417 | gfar_data.mdio_bus = res.start&0xfffff; | ||
| 418 | of_node_put(mdio); | ||
| 419 | break; | ||
| 420 | } | ||
| 421 | } | ||
| 422 | 231 | ||
| 423 | ret = | 232 | dev = platform_device_register_simple("mpc83xx_wdt", 0, &r, 1); |
| 424 | platform_device_add_data(gfar_dev, &gfar_data, | 233 | if (IS_ERR(dev)) { |
| 425 | sizeof(struct | 234 | ret = PTR_ERR(dev); |
| 426 | gianfar_platform_data)); | 235 | goto err; |
| 427 | if (ret) | ||
| 428 | goto unreg; | ||
| 429 | } | 236 | } |
| 430 | 237 | ||
| 238 | ret = platform_device_add_data(dev, &freq, sizeof(freq)); | ||
| 239 | if (ret) | ||
| 240 | goto unreg; | ||
| 241 | |||
| 242 | of_node_put(np); | ||
| 431 | return 0; | 243 | return 0; |
| 432 | 244 | ||
| 433 | unreg: | 245 | unreg: |
| 434 | platform_device_unregister(gfar_dev); | 246 | platform_device_unregister(dev); |
| 435 | err: | 247 | err: |
| 248 | of_node_put(np); | ||
| 249 | nodev: | ||
| 436 | return ret; | 250 | return ret; |
| 437 | } | 251 | } |
| 438 | 252 | ||
| 439 | arch_initcall(gfar_of_init); | 253 | arch_initcall(mpc83xx_wdt_init); |
| 254 | #endif | ||
| 440 | 255 | ||
| 441 | static enum fsl_usb2_phy_modes determine_usb_phy(const char *phy_type) | 256 | static enum fsl_usb2_phy_modes determine_usb_phy(const char *phy_type) |
| 442 | { | 257 | { |
