diff options
42 files changed, 1217 insertions, 424 deletions
diff --git a/Documentation/powerpc/dts-bindings/fsl/tsec.txt b/Documentation/powerpc/dts-bindings/fsl/tsec.txt index cf55fa4112d2..7fa4b27574b5 100644 --- a/Documentation/powerpc/dts-bindings/fsl/tsec.txt +++ b/Documentation/powerpc/dts-bindings/fsl/tsec.txt | |||
@@ -2,8 +2,8 @@ | |||
2 | 2 | ||
3 | The MDIO is a bus to which the PHY devices are connected. For each | 3 | The MDIO is a bus to which the PHY devices are connected. For each |
4 | device that exists on this bus, a child node should be created. See | 4 | device that exists on this bus, a child node should be created. See |
5 | the definition of the PHY node below for an example of how to define | 5 | the definition of the PHY node in booting-without-of.txt for an example |
6 | a PHY. | 6 | of how to define a PHY. |
7 | 7 | ||
8 | Required properties: | 8 | Required properties: |
9 | - reg : Offset and length of the register set for the device | 9 | - reg : Offset and length of the register set for the device |
@@ -21,6 +21,14 @@ Example: | |||
21 | }; | 21 | }; |
22 | }; | 22 | }; |
23 | 23 | ||
24 | * TBI Internal MDIO bus | ||
25 | |||
26 | As of this writing, every tsec is associated with an internal TBI PHY. | ||
27 | This PHY is accessed through the local MDIO bus. These buses are defined | ||
28 | similarly to the mdio buses, except they are compatible with "fsl,gianfar-tbi". | ||
29 | The TBI PHYs underneath them are similar to normal PHYs, but the reg property | ||
30 | is considered instructive, rather than descriptive. The reg property should | ||
31 | be chosen so it doesn't interfere with other PHYs on the bus. | ||
24 | 32 | ||
25 | * Gianfar-compatible ethernet nodes | 33 | * Gianfar-compatible ethernet nodes |
26 | 34 | ||
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/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 | { |
diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c index 55e319fa7fe6..7398704c4b55 100644 --- a/drivers/net/gianfar.c +++ b/drivers/net/gianfar.c | |||
@@ -25,11 +25,8 @@ | |||
25 | * | 25 | * |
26 | * Theory of operation | 26 | * Theory of operation |
27 | * | 27 | * |
28 | * The driver is initialized through platform_device. Structures which | 28 | * The driver is initialized through of_device. Configuration information |
29 | * define the configuration needed by the board are defined in a | 29 | * is therefore conveyed through an OF-style device tree. |
30 | * board structure in arch/ppc/platforms (though I do not | ||
31 | * discount the possibility that other architectures could one | ||
32 | * day be supported. | ||
33 | * | 30 | * |
34 | * The Gianfar Ethernet Controller uses a ring of buffer | 31 | * The Gianfar Ethernet Controller uses a ring of buffer |
35 | * descriptors. The beginning is indicated by a register | 32 | * descriptors. The beginning is indicated by a register |
@@ -78,7 +75,7 @@ | |||
78 | #include <linux/if_vlan.h> | 75 | #include <linux/if_vlan.h> |
79 | #include <linux/spinlock.h> | 76 | #include <linux/spinlock.h> |
80 | #include <linux/mm.h> | 77 | #include <linux/mm.h> |
81 | #include <linux/platform_device.h> | 78 | #include <linux/of_platform.h> |
82 | #include <linux/ip.h> | 79 | #include <linux/ip.h> |
83 | #include <linux/tcp.h> | 80 | #include <linux/tcp.h> |
84 | #include <linux/udp.h> | 81 | #include <linux/udp.h> |
@@ -92,6 +89,8 @@ | |||
92 | #include <linux/crc32.h> | 89 | #include <linux/crc32.h> |
93 | #include <linux/mii.h> | 90 | #include <linux/mii.h> |
94 | #include <linux/phy.h> | 91 | #include <linux/phy.h> |
92 | #include <linux/phy_fixed.h> | ||
93 | #include <linux/of.h> | ||
95 | 94 | ||
96 | #include "gianfar.h" | 95 | #include "gianfar.h" |
97 | #include "gianfar_mii.h" | 96 | #include "gianfar_mii.h" |
@@ -119,8 +118,9 @@ static irqreturn_t gfar_interrupt(int irq, void *dev_id); | |||
119 | static void adjust_link(struct net_device *dev); | 118 | static void adjust_link(struct net_device *dev); |
120 | static void init_registers(struct net_device *dev); | 119 | static void init_registers(struct net_device *dev); |
121 | static int init_phy(struct net_device *dev); | 120 | static int init_phy(struct net_device *dev); |
122 | static int gfar_probe(struct platform_device *pdev); | 121 | static int gfar_probe(struct of_device *ofdev, |
123 | static int gfar_remove(struct platform_device *pdev); | 122 | const struct of_device_id *match); |
123 | static int gfar_remove(struct of_device *ofdev); | ||
124 | static void free_skb_resources(struct gfar_private *priv); | 124 | static void free_skb_resources(struct gfar_private *priv); |
125 | static void gfar_set_multi(struct net_device *dev); | 125 | static void gfar_set_multi(struct net_device *dev); |
126 | static void gfar_set_hash_for_addr(struct net_device *dev, u8 *addr); | 126 | static void gfar_set_hash_for_addr(struct net_device *dev, u8 *addr); |
@@ -152,25 +152,158 @@ static inline int gfar_uses_fcb(struct gfar_private *priv) | |||
152 | return (priv->vlan_enable || priv->rx_csum_enable); | 152 | return (priv->vlan_enable || priv->rx_csum_enable); |
153 | } | 153 | } |
154 | 154 | ||
155 | static int gfar_of_init(struct net_device *dev) | ||
156 | { | ||
157 | struct device_node *phy, *mdio; | ||
158 | const unsigned int *id; | ||
159 | const char *model; | ||
160 | const char *ctype; | ||
161 | const void *mac_addr; | ||
162 | const phandle *ph; | ||
163 | u64 addr, size; | ||
164 | int err = 0; | ||
165 | struct gfar_private *priv = netdev_priv(dev); | ||
166 | struct device_node *np = priv->node; | ||
167 | char bus_name[MII_BUS_ID_SIZE]; | ||
168 | |||
169 | if (!np || !of_device_is_available(np)) | ||
170 | return -ENODEV; | ||
171 | |||
172 | /* get a pointer to the register memory */ | ||
173 | addr = of_translate_address(np, of_get_address(np, 0, &size, NULL)); | ||
174 | priv->regs = ioremap(addr, size); | ||
175 | |||
176 | if (priv->regs == NULL) | ||
177 | return -ENOMEM; | ||
178 | |||
179 | priv->interruptTransmit = irq_of_parse_and_map(np, 0); | ||
180 | |||
181 | model = of_get_property(np, "model", NULL); | ||
182 | |||
183 | /* If we aren't the FEC we have multiple interrupts */ | ||
184 | if (model && strcasecmp(model, "FEC")) { | ||
185 | priv->interruptReceive = irq_of_parse_and_map(np, 1); | ||
186 | |||
187 | priv->interruptError = irq_of_parse_and_map(np, 2); | ||
188 | |||
189 | if (priv->interruptTransmit < 0 || | ||
190 | priv->interruptReceive < 0 || | ||
191 | priv->interruptError < 0) { | ||
192 | err = -EINVAL; | ||
193 | goto err_out; | ||
194 | } | ||
195 | } | ||
196 | |||
197 | mac_addr = of_get_mac_address(np); | ||
198 | if (mac_addr) | ||
199 | memcpy(dev->dev_addr, mac_addr, MAC_ADDR_LEN); | ||
200 | |||
201 | if (model && !strcasecmp(model, "TSEC")) | ||
202 | priv->device_flags = | ||
203 | FSL_GIANFAR_DEV_HAS_GIGABIT | | ||
204 | FSL_GIANFAR_DEV_HAS_COALESCE | | ||
205 | FSL_GIANFAR_DEV_HAS_RMON | | ||
206 | FSL_GIANFAR_DEV_HAS_MULTI_INTR; | ||
207 | if (model && !strcasecmp(model, "eTSEC")) | ||
208 | priv->device_flags = | ||
209 | FSL_GIANFAR_DEV_HAS_GIGABIT | | ||
210 | FSL_GIANFAR_DEV_HAS_COALESCE | | ||
211 | FSL_GIANFAR_DEV_HAS_RMON | | ||
212 | FSL_GIANFAR_DEV_HAS_MULTI_INTR | | ||
213 | FSL_GIANFAR_DEV_HAS_CSUM | | ||
214 | FSL_GIANFAR_DEV_HAS_VLAN | | ||
215 | FSL_GIANFAR_DEV_HAS_MAGIC_PACKET | | ||
216 | FSL_GIANFAR_DEV_HAS_EXTENDED_HASH; | ||
217 | |||
218 | ctype = of_get_property(np, "phy-connection-type", NULL); | ||
219 | |||
220 | /* We only care about rgmii-id. The rest are autodetected */ | ||
221 | if (ctype && !strcmp(ctype, "rgmii-id")) | ||
222 | priv->interface = PHY_INTERFACE_MODE_RGMII_ID; | ||
223 | else | ||
224 | priv->interface = PHY_INTERFACE_MODE_MII; | ||
225 | |||
226 | if (of_get_property(np, "fsl,magic-packet", NULL)) | ||
227 | priv->device_flags |= FSL_GIANFAR_DEV_HAS_MAGIC_PACKET; | ||
228 | |||
229 | ph = of_get_property(np, "phy-handle", NULL); | ||
230 | if (ph == NULL) { | ||
231 | u32 *fixed_link; | ||
232 | |||
233 | fixed_link = (u32 *)of_get_property(np, "fixed-link", NULL); | ||
234 | if (!fixed_link) { | ||
235 | err = -ENODEV; | ||
236 | goto err_out; | ||
237 | } | ||
238 | |||
239 | snprintf(priv->phy_bus_id, BUS_ID_SIZE, PHY_ID_FMT, "0", | ||
240 | fixed_link[0]); | ||
241 | } else { | ||
242 | phy = of_find_node_by_phandle(*ph); | ||
243 | |||
244 | if (phy == NULL) { | ||
245 | err = -ENODEV; | ||
246 | goto err_out; | ||
247 | } | ||
248 | |||
249 | mdio = of_get_parent(phy); | ||
250 | |||
251 | id = of_get_property(phy, "reg", NULL); | ||
252 | |||
253 | of_node_put(phy); | ||
254 | of_node_put(mdio); | ||
255 | |||
256 | gfar_mdio_bus_name(bus_name, mdio); | ||
257 | snprintf(priv->phy_bus_id, BUS_ID_SIZE, "%s:%02x", | ||
258 | bus_name, *id); | ||
259 | } | ||
260 | |||
261 | /* Find the TBI PHY. If it's not there, we don't support SGMII */ | ||
262 | ph = of_get_property(np, "tbi-handle", NULL); | ||
263 | if (ph) { | ||
264 | struct device_node *tbi = of_find_node_by_phandle(*ph); | ||
265 | struct of_device *ofdev; | ||
266 | struct mii_bus *bus; | ||
267 | |||
268 | if (!tbi) | ||
269 | return 0; | ||
270 | |||
271 | mdio = of_get_parent(tbi); | ||
272 | if (!mdio) | ||
273 | return 0; | ||
274 | |||
275 | ofdev = of_find_device_by_node(mdio); | ||
276 | |||
277 | of_node_put(mdio); | ||
278 | |||
279 | id = of_get_property(tbi, "reg", NULL); | ||
280 | if (!id) | ||
281 | return 0; | ||
282 | |||
283 | of_node_put(tbi); | ||
284 | |||
285 | bus = dev_get_drvdata(&ofdev->dev); | ||
286 | |||
287 | priv->tbiphy = bus->phy_map[*id]; | ||
288 | } | ||
289 | |||
290 | return 0; | ||
291 | |||
292 | err_out: | ||
293 | iounmap(priv->regs); | ||
294 | return err; | ||
295 | } | ||
296 | |||
155 | /* Set up the ethernet device structure, private data, | 297 | /* Set up the ethernet device structure, private data, |
156 | * and anything else we need before we start */ | 298 | * and anything else we need before we start */ |
157 | static int gfar_probe(struct platform_device *pdev) | 299 | static int gfar_probe(struct of_device *ofdev, |
300 | const struct of_device_id *match) | ||
158 | { | 301 | { |
159 | u32 tempval; | 302 | u32 tempval; |
160 | struct net_device *dev = NULL; | 303 | struct net_device *dev = NULL; |
161 | struct gfar_private *priv = NULL; | 304 | struct gfar_private *priv = NULL; |
162 | struct gianfar_platform_data *einfo; | 305 | int err = 0; |
163 | struct resource *r; | 306 | DECLARE_MAC_BUF(mac); |
164 | int err = 0, irq; | ||
165 | |||
166 | einfo = (struct gianfar_platform_data *) pdev->dev.platform_data; | ||
167 | |||
168 | if (NULL == einfo) { | ||
169 | printk(KERN_ERR "gfar %d: Missing additional data!\n", | ||
170 | pdev->id); | ||
171 | |||
172 | return -ENODEV; | ||
173 | } | ||
174 | 307 | ||
175 | /* Create an ethernet device instance */ | 308 | /* Create an ethernet device instance */ |
176 | dev = alloc_etherdev(sizeof (*priv)); | 309 | dev = alloc_etherdev(sizeof (*priv)); |
@@ -180,48 +313,19 @@ static int gfar_probe(struct platform_device *pdev) | |||
180 | 313 | ||
181 | priv = netdev_priv(dev); | 314 | priv = netdev_priv(dev); |
182 | priv->dev = dev; | 315 | priv->dev = dev; |
316 | priv->node = ofdev->node; | ||
183 | 317 | ||
184 | /* Set the info in the priv to the current info */ | 318 | err = gfar_of_init(dev); |
185 | priv->einfo = einfo; | ||
186 | |||
187 | /* fill out IRQ fields */ | ||
188 | if (einfo->device_flags & FSL_GIANFAR_DEV_HAS_MULTI_INTR) { | ||
189 | irq = platform_get_irq_byname(pdev, "tx"); | ||
190 | if (irq < 0) | ||
191 | goto regs_fail; | ||
192 | priv->interruptTransmit = irq; | ||
193 | |||
194 | irq = platform_get_irq_byname(pdev, "rx"); | ||
195 | if (irq < 0) | ||
196 | goto regs_fail; | ||
197 | priv->interruptReceive = irq; | ||
198 | |||
199 | irq = platform_get_irq_byname(pdev, "error"); | ||
200 | if (irq < 0) | ||
201 | goto regs_fail; | ||
202 | priv->interruptError = irq; | ||
203 | } else { | ||
204 | irq = platform_get_irq(pdev, 0); | ||
205 | if (irq < 0) | ||
206 | goto regs_fail; | ||
207 | priv->interruptTransmit = irq; | ||
208 | } | ||
209 | |||
210 | /* get a pointer to the register memory */ | ||
211 | r = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
212 | priv->regs = ioremap(r->start, sizeof (struct gfar)); | ||
213 | 319 | ||
214 | if (NULL == priv->regs) { | 320 | if (err) |
215 | err = -ENOMEM; | ||
216 | goto regs_fail; | 321 | goto regs_fail; |
217 | } | ||
218 | 322 | ||
219 | spin_lock_init(&priv->txlock); | 323 | spin_lock_init(&priv->txlock); |
220 | spin_lock_init(&priv->rxlock); | 324 | spin_lock_init(&priv->rxlock); |
221 | spin_lock_init(&priv->bflock); | 325 | spin_lock_init(&priv->bflock); |
222 | INIT_WORK(&priv->reset_task, gfar_reset_task); | 326 | INIT_WORK(&priv->reset_task, gfar_reset_task); |
223 | 327 | ||
224 | platform_set_drvdata(pdev, dev); | 328 | dev_set_drvdata(&ofdev->dev, priv); |
225 | 329 | ||
226 | /* Stop the DMA engine now, in case it was running before */ | 330 | /* Stop the DMA engine now, in case it was running before */ |
227 | /* (The firmware could have used it, and left it running). */ | 331 | /* (The firmware could have used it, and left it running). */ |
@@ -239,13 +343,10 @@ static int gfar_probe(struct platform_device *pdev) | |||
239 | /* Initialize ECNTRL */ | 343 | /* Initialize ECNTRL */ |
240 | gfar_write(&priv->regs->ecntrl, ECNTRL_INIT_SETTINGS); | 344 | gfar_write(&priv->regs->ecntrl, ECNTRL_INIT_SETTINGS); |
241 | 345 | ||
242 | /* Copy the station address into the dev structure, */ | ||
243 | memcpy(dev->dev_addr, einfo->mac_addr, MAC_ADDR_LEN); | ||
244 | |||
245 | /* Set the dev->base_addr to the gfar reg region */ | 346 | /* Set the dev->base_addr to the gfar reg region */ |
246 | dev->base_addr = (unsigned long) (priv->regs); | 347 | dev->base_addr = (unsigned long) (priv->regs); |
247 | 348 | ||
248 | SET_NETDEV_DEV(dev, &pdev->dev); | 349 | SET_NETDEV_DEV(dev, &ofdev->dev); |
249 | 350 | ||
250 | /* Fill in the dev structure */ | 351 | /* Fill in the dev structure */ |
251 | dev->open = gfar_enet_open; | 352 | dev->open = gfar_enet_open; |
@@ -263,7 +364,7 @@ static int gfar_probe(struct platform_device *pdev) | |||
263 | 364 | ||
264 | dev->ethtool_ops = &gfar_ethtool_ops; | 365 | dev->ethtool_ops = &gfar_ethtool_ops; |
265 | 366 | ||
266 | if (priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_CSUM) { | 367 | if (priv->device_flags & FSL_GIANFAR_DEV_HAS_CSUM) { |
267 | priv->rx_csum_enable = 1; | 368 | priv->rx_csum_enable = 1; |
268 | dev->features |= NETIF_F_IP_CSUM; | 369 | dev->features |= NETIF_F_IP_CSUM; |
269 | } else | 370 | } else |
@@ -271,7 +372,7 @@ static int gfar_probe(struct platform_device *pdev) | |||
271 | 372 | ||
272 | priv->vlgrp = NULL; | 373 | priv->vlgrp = NULL; |
273 | 374 | ||
274 | if (priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_VLAN) { | 375 | if (priv->device_flags & FSL_GIANFAR_DEV_HAS_VLAN) { |
275 | dev->vlan_rx_register = gfar_vlan_rx_register; | 376 | dev->vlan_rx_register = gfar_vlan_rx_register; |
276 | 377 | ||
277 | dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; | 378 | dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; |
@@ -279,7 +380,7 @@ static int gfar_probe(struct platform_device *pdev) | |||
279 | priv->vlan_enable = 1; | 380 | priv->vlan_enable = 1; |
280 | } | 381 | } |
281 | 382 | ||
282 | if (priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_EXTENDED_HASH) { | 383 | if (priv->device_flags & FSL_GIANFAR_DEV_HAS_EXTENDED_HASH) { |
283 | priv->extended_hash = 1; | 384 | priv->extended_hash = 1; |
284 | priv->hash_width = 9; | 385 | priv->hash_width = 9; |
285 | 386 | ||
@@ -314,7 +415,7 @@ static int gfar_probe(struct platform_device *pdev) | |||
314 | priv->hash_regs[7] = &priv->regs->gaddr7; | 415 | priv->hash_regs[7] = &priv->regs->gaddr7; |
315 | } | 416 | } |
316 | 417 | ||
317 | if (priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_PADDING) | 418 | if (priv->device_flags & FSL_GIANFAR_DEV_HAS_PADDING) |
318 | priv->padding = DEFAULT_PADDING; | 419 | priv->padding = DEFAULT_PADDING; |
319 | else | 420 | else |
320 | priv->padding = 0; | 421 | priv->padding = 0; |
@@ -368,29 +469,28 @@ regs_fail: | |||
368 | return err; | 469 | return err; |
369 | } | 470 | } |
370 | 471 | ||
371 | static int gfar_remove(struct platform_device *pdev) | 472 | static int gfar_remove(struct of_device *ofdev) |
372 | { | 473 | { |
373 | struct net_device *dev = platform_get_drvdata(pdev); | 474 | struct gfar_private *priv = dev_get_drvdata(&ofdev->dev); |
374 | struct gfar_private *priv = netdev_priv(dev); | ||
375 | 475 | ||
376 | platform_set_drvdata(pdev, NULL); | 476 | dev_set_drvdata(&ofdev->dev, NULL); |
377 | 477 | ||
378 | iounmap(priv->regs); | 478 | iounmap(priv->regs); |
379 | free_netdev(dev); | 479 | free_netdev(priv->dev); |
380 | 480 | ||
381 | return 0; | 481 | return 0; |
382 | } | 482 | } |
383 | 483 | ||
384 | #ifdef CONFIG_PM | 484 | #ifdef CONFIG_PM |
385 | static int gfar_suspend(struct platform_device *pdev, pm_message_t state) | 485 | static int gfar_suspend(struct of_device *ofdev, pm_message_t state) |
386 | { | 486 | { |
387 | struct net_device *dev = platform_get_drvdata(pdev); | 487 | struct gfar_private *priv = dev_get_drvdata(&ofdev->dev); |
388 | struct gfar_private *priv = netdev_priv(dev); | 488 | struct net_device *dev = priv->dev; |
389 | unsigned long flags; | 489 | unsigned long flags; |
390 | u32 tempval; | 490 | u32 tempval; |
391 | 491 | ||
392 | int magic_packet = priv->wol_en && | 492 | int magic_packet = priv->wol_en && |
393 | (priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_MAGIC_PACKET); | 493 | (priv->device_flags & FSL_GIANFAR_DEV_HAS_MAGIC_PACKET); |
394 | 494 | ||
395 | netif_device_detach(dev); | 495 | netif_device_detach(dev); |
396 | 496 | ||
@@ -431,14 +531,14 @@ static int gfar_suspend(struct platform_device *pdev, pm_message_t state) | |||
431 | return 0; | 531 | return 0; |
432 | } | 532 | } |
433 | 533 | ||
434 | static int gfar_resume(struct platform_device *pdev) | 534 | static int gfar_resume(struct of_device *ofdev) |
435 | { | 535 | { |
436 | struct net_device *dev = platform_get_drvdata(pdev); | 536 | struct gfar_private *priv = dev_get_drvdata(&ofdev->dev); |
437 | struct gfar_private *priv = netdev_priv(dev); | 537 | struct net_device *dev = priv->dev; |
438 | unsigned long flags; | 538 | unsigned long flags; |
439 | u32 tempval; | 539 | u32 tempval; |
440 | int magic_packet = priv->wol_en && | 540 | int magic_packet = priv->wol_en && |
441 | (priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_MAGIC_PACKET); | 541 | (priv->device_flags & FSL_GIANFAR_DEV_HAS_MAGIC_PACKET); |
442 | 542 | ||
443 | if (!netif_running(dev)) { | 543 | if (!netif_running(dev)) { |
444 | netif_device_attach(dev); | 544 | netif_device_attach(dev); |
@@ -497,7 +597,7 @@ static phy_interface_t gfar_get_interface(struct net_device *dev) | |||
497 | if (ecntrl & ECNTRL_REDUCED_MII_MODE) | 597 | if (ecntrl & ECNTRL_REDUCED_MII_MODE) |
498 | return PHY_INTERFACE_MODE_RMII; | 598 | return PHY_INTERFACE_MODE_RMII; |
499 | else { | 599 | else { |
500 | phy_interface_t interface = priv->einfo->interface; | 600 | phy_interface_t interface = priv->interface; |
501 | 601 | ||
502 | /* | 602 | /* |
503 | * This isn't autodetected right now, so it must | 603 | * This isn't autodetected right now, so it must |
@@ -510,7 +610,7 @@ static phy_interface_t gfar_get_interface(struct net_device *dev) | |||
510 | } | 610 | } |
511 | } | 611 | } |
512 | 612 | ||
513 | if (priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_GIGABIT) | 613 | if (priv->device_flags & FSL_GIANFAR_DEV_HAS_GIGABIT) |
514 | return PHY_INTERFACE_MODE_GMII; | 614 | return PHY_INTERFACE_MODE_GMII; |
515 | 615 | ||
516 | return PHY_INTERFACE_MODE_MII; | 616 | return PHY_INTERFACE_MODE_MII; |
@@ -524,21 +624,18 @@ static int init_phy(struct net_device *dev) | |||
524 | { | 624 | { |
525 | struct gfar_private *priv = netdev_priv(dev); | 625 | struct gfar_private *priv = netdev_priv(dev); |
526 | uint gigabit_support = | 626 | uint gigabit_support = |
527 | priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_GIGABIT ? | 627 | priv->device_flags & FSL_GIANFAR_DEV_HAS_GIGABIT ? |
528 | SUPPORTED_1000baseT_Full : 0; | 628 | SUPPORTED_1000baseT_Full : 0; |
529 | struct phy_device *phydev; | 629 | struct phy_device *phydev; |
530 | char phy_id[BUS_ID_SIZE]; | ||
531 | phy_interface_t interface; | 630 | phy_interface_t interface; |
532 | 631 | ||
533 | priv->oldlink = 0; | 632 | priv->oldlink = 0; |
534 | priv->oldspeed = 0; | 633 | priv->oldspeed = 0; |
535 | priv->oldduplex = -1; | 634 | priv->oldduplex = -1; |
536 | 635 | ||
537 | snprintf(phy_id, sizeof(phy_id), PHY_ID_FMT, priv->einfo->bus_id, priv->einfo->phy_id); | ||
538 | |||
539 | interface = gfar_get_interface(dev); | 636 | interface = gfar_get_interface(dev); |
540 | 637 | ||
541 | phydev = phy_connect(dev, phy_id, &adjust_link, 0, interface); | 638 | phydev = phy_connect(dev, priv->phy_bus_id, &adjust_link, 0, interface); |
542 | 639 | ||
543 | if (interface == PHY_INTERFACE_MODE_SGMII) | 640 | if (interface == PHY_INTERFACE_MODE_SGMII) |
544 | gfar_configure_serdes(dev); | 641 | gfar_configure_serdes(dev); |
@@ -569,35 +666,31 @@ static int init_phy(struct net_device *dev) | |||
569 | static void gfar_configure_serdes(struct net_device *dev) | 666 | static void gfar_configure_serdes(struct net_device *dev) |
570 | { | 667 | { |
571 | struct gfar_private *priv = netdev_priv(dev); | 668 | struct gfar_private *priv = netdev_priv(dev); |
572 | struct gfar_mii __iomem *regs = | ||
573 | (void __iomem *)&priv->regs->gfar_mii_regs; | ||
574 | int tbipa = gfar_read(&priv->regs->tbipa); | ||
575 | struct mii_bus *bus = gfar_get_miibus(priv); | ||
576 | 669 | ||
577 | if (bus) | 670 | if (!priv->tbiphy) { |
578 | mutex_lock(&bus->mdio_lock); | 671 | printk(KERN_WARNING "SGMII mode requires that the device " |
672 | "tree specify a tbi-handle\n"); | ||
673 | return; | ||
674 | } | ||
579 | 675 | ||
580 | /* If the link is already up, we must already be ok, and don't need to | 676 | /* |
677 | * If the link is already up, we must already be ok, and don't need to | ||
581 | * configure and reset the TBI<->SerDes link. Maybe U-Boot configured | 678 | * configure and reset the TBI<->SerDes link. Maybe U-Boot configured |
582 | * everything for us? Resetting it takes the link down and requires | 679 | * everything for us? Resetting it takes the link down and requires |
583 | * several seconds for it to come back. | 680 | * several seconds for it to come back. |
584 | */ | 681 | */ |
585 | if (gfar_local_mdio_read(regs, tbipa, MII_BMSR) & BMSR_LSTATUS) | 682 | if (phy_read(priv->tbiphy, MII_BMSR) & BMSR_LSTATUS) |
586 | goto done; | 683 | return; |
587 | 684 | ||
588 | /* Single clk mode, mii mode off(for serdes communication) */ | 685 | /* Single clk mode, mii mode off(for serdes communication) */ |
589 | gfar_local_mdio_write(regs, tbipa, MII_TBICON, TBICON_CLK_SELECT); | 686 | phy_write(priv->tbiphy, MII_TBICON, TBICON_CLK_SELECT); |
590 | 687 | ||
591 | gfar_local_mdio_write(regs, tbipa, MII_ADVERTISE, | 688 | phy_write(priv->tbiphy, MII_ADVERTISE, |
592 | ADVERTISE_1000XFULL | ADVERTISE_1000XPAUSE | | 689 | ADVERTISE_1000XFULL | ADVERTISE_1000XPAUSE | |
593 | ADVERTISE_1000XPSE_ASYM); | 690 | ADVERTISE_1000XPSE_ASYM); |
594 | 691 | ||
595 | gfar_local_mdio_write(regs, tbipa, MII_BMCR, BMCR_ANENABLE | | 692 | phy_write(priv->tbiphy, MII_BMCR, BMCR_ANENABLE | |
596 | BMCR_ANRESTART | BMCR_FULLDPLX | BMCR_SPEED1000); | 693 | BMCR_ANRESTART | BMCR_FULLDPLX | BMCR_SPEED1000); |
597 | |||
598 | done: | ||
599 | if (bus) | ||
600 | mutex_unlock(&bus->mdio_lock); | ||
601 | } | 694 | } |
602 | 695 | ||
603 | static void init_registers(struct net_device *dev) | 696 | static void init_registers(struct net_device *dev) |
@@ -630,7 +723,7 @@ static void init_registers(struct net_device *dev) | |||
630 | gfar_write(&priv->regs->gaddr7, 0); | 723 | gfar_write(&priv->regs->gaddr7, 0); |
631 | 724 | ||
632 | /* Zero out the rmon mib registers if it has them */ | 725 | /* Zero out the rmon mib registers if it has them */ |
633 | if (priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_RMON) { | 726 | if (priv->device_flags & FSL_GIANFAR_DEV_HAS_RMON) { |
634 | memset_io(&(priv->regs->rmon), 0, sizeof (struct rmon_mib)); | 727 | memset_io(&(priv->regs->rmon), 0, sizeof (struct rmon_mib)); |
635 | 728 | ||
636 | /* Mask off the CAM interrupts */ | 729 | /* Mask off the CAM interrupts */ |
@@ -705,7 +798,7 @@ void stop_gfar(struct net_device *dev) | |||
705 | spin_unlock_irqrestore(&priv->txlock, flags); | 798 | spin_unlock_irqrestore(&priv->txlock, flags); |
706 | 799 | ||
707 | /* Free the IRQs */ | 800 | /* Free the IRQs */ |
708 | if (priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_MULTI_INTR) { | 801 | if (priv->device_flags & FSL_GIANFAR_DEV_HAS_MULTI_INTR) { |
709 | free_irq(priv->interruptError, dev); | 802 | free_irq(priv->interruptError, dev); |
710 | free_irq(priv->interruptTransmit, dev); | 803 | free_irq(priv->interruptTransmit, dev); |
711 | free_irq(priv->interruptReceive, dev); | 804 | free_irq(priv->interruptReceive, dev); |
@@ -919,7 +1012,7 @@ int startup_gfar(struct net_device *dev) | |||
919 | 1012 | ||
920 | /* If the device has multiple interrupts, register for | 1013 | /* If the device has multiple interrupts, register for |
921 | * them. Otherwise, only register for the one */ | 1014 | * them. Otherwise, only register for the one */ |
922 | if (priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_MULTI_INTR) { | 1015 | if (priv->device_flags & FSL_GIANFAR_DEV_HAS_MULTI_INTR) { |
923 | /* Install our interrupt handlers for Error, | 1016 | /* Install our interrupt handlers for Error, |
924 | * Transmit, and Receive */ | 1017 | * Transmit, and Receive */ |
925 | if (request_irq(priv->interruptError, gfar_error, | 1018 | if (request_irq(priv->interruptError, gfar_error, |
@@ -1751,7 +1844,7 @@ static void gfar_netpoll(struct net_device *dev) | |||
1751 | struct gfar_private *priv = netdev_priv(dev); | 1844 | struct gfar_private *priv = netdev_priv(dev); |
1752 | 1845 | ||
1753 | /* If the device has multiple interrupts, run tx/rx */ | 1846 | /* If the device has multiple interrupts, run tx/rx */ |
1754 | if (priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_MULTI_INTR) { | 1847 | if (priv->device_flags & FSL_GIANFAR_DEV_HAS_MULTI_INTR) { |
1755 | disable_irq(priv->interruptTransmit); | 1848 | disable_irq(priv->interruptTransmit); |
1756 | disable_irq(priv->interruptReceive); | 1849 | disable_irq(priv->interruptReceive); |
1757 | disable_irq(priv->interruptError); | 1850 | disable_irq(priv->interruptError); |
@@ -2045,7 +2138,7 @@ static irqreturn_t gfar_error(int irq, void *dev_id) | |||
2045 | gfar_write(&priv->regs->ievent, events & IEVENT_ERR_MASK); | 2138 | gfar_write(&priv->regs->ievent, events & IEVENT_ERR_MASK); |
2046 | 2139 | ||
2047 | /* Magic Packet is not an error. */ | 2140 | /* Magic Packet is not an error. */ |
2048 | if ((priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_MAGIC_PACKET) && | 2141 | if ((priv->device_flags & FSL_GIANFAR_DEV_HAS_MAGIC_PACKET) && |
2049 | (events & IEVENT_MAG)) | 2142 | (events & IEVENT_MAG)) |
2050 | events &= ~IEVENT_MAG; | 2143 | events &= ~IEVENT_MAG; |
2051 | 2144 | ||
@@ -2111,16 +2204,24 @@ static irqreturn_t gfar_error(int irq, void *dev_id) | |||
2111 | /* work with hotplug and coldplug */ | 2204 | /* work with hotplug and coldplug */ |
2112 | MODULE_ALIAS("platform:fsl-gianfar"); | 2205 | MODULE_ALIAS("platform:fsl-gianfar"); |
2113 | 2206 | ||
2207 | static struct of_device_id gfar_match[] = | ||
2208 | { | ||
2209 | { | ||
2210 | .type = "network", | ||
2211 | .compatible = "gianfar", | ||
2212 | }, | ||
2213 | {}, | ||
2214 | }; | ||
2215 | |||
2114 | /* Structure for a device driver */ | 2216 | /* Structure for a device driver */ |
2115 | static struct platform_driver gfar_driver = { | 2217 | static struct of_platform_driver gfar_driver = { |
2218 | .name = "fsl-gianfar", | ||
2219 | .match_table = gfar_match, | ||
2220 | |||
2116 | .probe = gfar_probe, | 2221 | .probe = gfar_probe, |
2117 | .remove = gfar_remove, | 2222 | .remove = gfar_remove, |
2118 | .suspend = gfar_suspend, | 2223 | .suspend = gfar_suspend, |
2119 | .resume = gfar_resume, | 2224 | .resume = gfar_resume, |
2120 | .driver = { | ||
2121 | .name = "fsl-gianfar", | ||
2122 | .owner = THIS_MODULE, | ||
2123 | }, | ||
2124 | }; | 2225 | }; |
2125 | 2226 | ||
2126 | static int __init gfar_init(void) | 2227 | static int __init gfar_init(void) |
@@ -2130,7 +2231,7 @@ static int __init gfar_init(void) | |||
2130 | if (err) | 2231 | if (err) |
2131 | return err; | 2232 | return err; |
2132 | 2233 | ||
2133 | err = platform_driver_register(&gfar_driver); | 2234 | err = of_register_platform_driver(&gfar_driver); |
2134 | 2235 | ||
2135 | if (err) | 2236 | if (err) |
2136 | gfar_mdio_exit(); | 2237 | gfar_mdio_exit(); |
@@ -2140,7 +2241,7 @@ static int __init gfar_init(void) | |||
2140 | 2241 | ||
2141 | static void __exit gfar_exit(void) | 2242 | static void __exit gfar_exit(void) |
2142 | { | 2243 | { |
2143 | platform_driver_unregister(&gfar_driver); | 2244 | of_unregister_platform_driver(&gfar_driver); |
2144 | gfar_mdio_exit(); | 2245 | gfar_mdio_exit(); |
2145 | } | 2246 | } |
2146 | 2247 | ||
diff --git a/drivers/net/gianfar.h b/drivers/net/gianfar.h index f46e9b63af13..ca7f0a6a68c5 100644 --- a/drivers/net/gianfar.h +++ b/drivers/net/gianfar.h | |||
@@ -657,6 +657,19 @@ struct gfar { | |||
657 | 657 | ||
658 | }; | 658 | }; |
659 | 659 | ||
660 | /* Flags related to gianfar device features */ | ||
661 | #define FSL_GIANFAR_DEV_HAS_GIGABIT 0x00000001 | ||
662 | #define FSL_GIANFAR_DEV_HAS_COALESCE 0x00000002 | ||
663 | #define FSL_GIANFAR_DEV_HAS_RMON 0x00000004 | ||
664 | #define FSL_GIANFAR_DEV_HAS_MULTI_INTR 0x00000008 | ||
665 | #define FSL_GIANFAR_DEV_HAS_CSUM 0x00000010 | ||
666 | #define FSL_GIANFAR_DEV_HAS_VLAN 0x00000020 | ||
667 | #define FSL_GIANFAR_DEV_HAS_EXTENDED_HASH 0x00000040 | ||
668 | #define FSL_GIANFAR_DEV_HAS_PADDING 0x00000080 | ||
669 | #define FSL_GIANFAR_DEV_HAS_MAGIC_PACKET 0x00000100 | ||
670 | #define FSL_GIANFAR_DEV_HAS_BD_STASHING 0x00000200 | ||
671 | #define FSL_GIANFAR_DEV_HAS_BUF_STASHING 0x00000400 | ||
672 | |||
660 | /* Struct stolen almost completely (and shamelessly) from the FCC enet source | 673 | /* Struct stolen almost completely (and shamelessly) from the FCC enet source |
661 | * (Ok, that's not so true anymore, but there is a family resemblence) | 674 | * (Ok, that's not so true anymore, but there is a family resemblence) |
662 | * The GFAR buffer descriptors track the ring buffers. The rx_bd_base | 675 | * The GFAR buffer descriptors track the ring buffers. The rx_bd_base |
@@ -694,6 +707,7 @@ struct gfar_private { | |||
694 | /* RX Locked fields */ | 707 | /* RX Locked fields */ |
695 | spinlock_t rxlock; | 708 | spinlock_t rxlock; |
696 | 709 | ||
710 | struct device_node *node; | ||
697 | struct net_device *dev; | 711 | struct net_device *dev; |
698 | struct napi_struct napi; | 712 | struct napi_struct napi; |
699 | 713 | ||
@@ -733,6 +747,9 @@ struct gfar_private { | |||
733 | /* Bitfield update lock */ | 747 | /* Bitfield update lock */ |
734 | spinlock_t bflock; | 748 | spinlock_t bflock; |
735 | 749 | ||
750 | phy_interface_t interface; | ||
751 | char phy_bus_id[BUS_ID_SIZE]; | ||
752 | u32 device_flags; | ||
736 | unsigned char vlan_enable:1, | 753 | unsigned char vlan_enable:1, |
737 | rx_csum_enable:1, | 754 | rx_csum_enable:1, |
738 | extended_hash:1, | 755 | extended_hash:1, |
@@ -744,11 +761,9 @@ struct gfar_private { | |||
744 | unsigned int interruptReceive; | 761 | unsigned int interruptReceive; |
745 | unsigned int interruptError; | 762 | unsigned int interruptError; |
746 | 763 | ||
747 | /* info structure initialized by platform code */ | ||
748 | struct gianfar_platform_data *einfo; | ||
749 | |||
750 | /* PHY stuff */ | 764 | /* PHY stuff */ |
751 | struct phy_device *phydev; | 765 | struct phy_device *phydev; |
766 | struct phy_device *tbiphy; | ||
752 | struct mii_bus *mii_bus; | 767 | struct mii_bus *mii_bus; |
753 | int oldspeed; | 768 | int oldspeed; |
754 | int oldduplex; | 769 | int oldduplex; |
diff --git a/drivers/net/gianfar_ethtool.c b/drivers/net/gianfar_ethtool.c index fb7d3ccc0fdc..53944b120a3d 100644 --- a/drivers/net/gianfar_ethtool.c +++ b/drivers/net/gianfar_ethtool.c | |||
@@ -121,7 +121,7 @@ static void gfar_gstrings(struct net_device *dev, u32 stringset, u8 * buf) | |||
121 | { | 121 | { |
122 | struct gfar_private *priv = netdev_priv(dev); | 122 | struct gfar_private *priv = netdev_priv(dev); |
123 | 123 | ||
124 | if (priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_RMON) | 124 | if (priv->device_flags & FSL_GIANFAR_DEV_HAS_RMON) |
125 | memcpy(buf, stat_gstrings, GFAR_STATS_LEN * ETH_GSTRING_LEN); | 125 | memcpy(buf, stat_gstrings, GFAR_STATS_LEN * ETH_GSTRING_LEN); |
126 | else | 126 | else |
127 | memcpy(buf, stat_gstrings, | 127 | memcpy(buf, stat_gstrings, |
@@ -138,7 +138,7 @@ static void gfar_fill_stats(struct net_device *dev, struct ethtool_stats *dummy, | |||
138 | struct gfar_private *priv = netdev_priv(dev); | 138 | struct gfar_private *priv = netdev_priv(dev); |
139 | u64 *extra = (u64 *) & priv->extra_stats; | 139 | u64 *extra = (u64 *) & priv->extra_stats; |
140 | 140 | ||
141 | if (priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_RMON) { | 141 | if (priv->device_flags & FSL_GIANFAR_DEV_HAS_RMON) { |
142 | u32 __iomem *rmon = (u32 __iomem *) & priv->regs->rmon; | 142 | u32 __iomem *rmon = (u32 __iomem *) & priv->regs->rmon; |
143 | struct gfar_stats *stats = (struct gfar_stats *) buf; | 143 | struct gfar_stats *stats = (struct gfar_stats *) buf; |
144 | 144 | ||
@@ -158,7 +158,7 @@ static int gfar_sset_count(struct net_device *dev, int sset) | |||
158 | 158 | ||
159 | switch (sset) { | 159 | switch (sset) { |
160 | case ETH_SS_STATS: | 160 | case ETH_SS_STATS: |
161 | if (priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_RMON) | 161 | if (priv->device_flags & FSL_GIANFAR_DEV_HAS_RMON) |
162 | return GFAR_STATS_LEN; | 162 | return GFAR_STATS_LEN; |
163 | else | 163 | else |
164 | return GFAR_EXTRA_STATS_LEN; | 164 | return GFAR_EXTRA_STATS_LEN; |
@@ -280,7 +280,7 @@ static int gfar_gcoalesce(struct net_device *dev, struct ethtool_coalesce *cvals | |||
280 | { | 280 | { |
281 | struct gfar_private *priv = netdev_priv(dev); | 281 | struct gfar_private *priv = netdev_priv(dev); |
282 | 282 | ||
283 | if (!(priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_COALESCE)) | 283 | if (!(priv->device_flags & FSL_GIANFAR_DEV_HAS_COALESCE)) |
284 | return -EOPNOTSUPP; | 284 | return -EOPNOTSUPP; |
285 | 285 | ||
286 | if (NULL == priv->phydev) | 286 | if (NULL == priv->phydev) |
@@ -332,7 +332,7 @@ static int gfar_scoalesce(struct net_device *dev, struct ethtool_coalesce *cvals | |||
332 | { | 332 | { |
333 | struct gfar_private *priv = netdev_priv(dev); | 333 | struct gfar_private *priv = netdev_priv(dev); |
334 | 334 | ||
335 | if (!(priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_COALESCE)) | 335 | if (!(priv->device_flags & FSL_GIANFAR_DEV_HAS_COALESCE)) |
336 | return -EOPNOTSUPP; | 336 | return -EOPNOTSUPP; |
337 | 337 | ||
338 | /* Set up rx coalescing */ | 338 | /* Set up rx coalescing */ |
@@ -482,7 +482,7 @@ static int gfar_set_rx_csum(struct net_device *dev, uint32_t data) | |||
482 | unsigned long flags; | 482 | unsigned long flags; |
483 | int err = 0; | 483 | int err = 0; |
484 | 484 | ||
485 | if (!(priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_CSUM)) | 485 | if (!(priv->device_flags & FSL_GIANFAR_DEV_HAS_CSUM)) |
486 | return -EOPNOTSUPP; | 486 | return -EOPNOTSUPP; |
487 | 487 | ||
488 | if (dev->flags & IFF_UP) { | 488 | if (dev->flags & IFF_UP) { |
@@ -515,7 +515,7 @@ static uint32_t gfar_get_rx_csum(struct net_device *dev) | |||
515 | { | 515 | { |
516 | struct gfar_private *priv = netdev_priv(dev); | 516 | struct gfar_private *priv = netdev_priv(dev); |
517 | 517 | ||
518 | if (!(priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_CSUM)) | 518 | if (!(priv->device_flags & FSL_GIANFAR_DEV_HAS_CSUM)) |
519 | return 0; | 519 | return 0; |
520 | 520 | ||
521 | return priv->rx_csum_enable; | 521 | return priv->rx_csum_enable; |
@@ -526,7 +526,7 @@ static int gfar_set_tx_csum(struct net_device *dev, uint32_t data) | |||
526 | unsigned long flags; | 526 | unsigned long flags; |
527 | struct gfar_private *priv = netdev_priv(dev); | 527 | struct gfar_private *priv = netdev_priv(dev); |
528 | 528 | ||
529 | if (!(priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_CSUM)) | 529 | if (!(priv->device_flags & FSL_GIANFAR_DEV_HAS_CSUM)) |
530 | return -EOPNOTSUPP; | 530 | return -EOPNOTSUPP; |
531 | 531 | ||
532 | spin_lock_irqsave(&priv->txlock, flags); | 532 | spin_lock_irqsave(&priv->txlock, flags); |
@@ -547,7 +547,7 @@ static uint32_t gfar_get_tx_csum(struct net_device *dev) | |||
547 | { | 547 | { |
548 | struct gfar_private *priv = netdev_priv(dev); | 548 | struct gfar_private *priv = netdev_priv(dev); |
549 | 549 | ||
550 | if (!(priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_CSUM)) | 550 | if (!(priv->device_flags & FSL_GIANFAR_DEV_HAS_CSUM)) |
551 | return 0; | 551 | return 0; |
552 | 552 | ||
553 | return (dev->features & NETIF_F_IP_CSUM) != 0; | 553 | return (dev->features & NETIF_F_IP_CSUM) != 0; |
@@ -570,7 +570,7 @@ static void gfar_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol) | |||
570 | { | 570 | { |
571 | struct gfar_private *priv = netdev_priv(dev); | 571 | struct gfar_private *priv = netdev_priv(dev); |
572 | 572 | ||
573 | if (priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_MAGIC_PACKET) { | 573 | if (priv->device_flags & FSL_GIANFAR_DEV_HAS_MAGIC_PACKET) { |
574 | wol->supported = WAKE_MAGIC; | 574 | wol->supported = WAKE_MAGIC; |
575 | wol->wolopts = priv->wol_en ? WAKE_MAGIC : 0; | 575 | wol->wolopts = priv->wol_en ? WAKE_MAGIC : 0; |
576 | } else { | 576 | } else { |
@@ -583,7 +583,7 @@ static int gfar_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) | |||
583 | struct gfar_private *priv = netdev_priv(dev); | 583 | struct gfar_private *priv = netdev_priv(dev); |
584 | unsigned long flags; | 584 | unsigned long flags; |
585 | 585 | ||
586 | if (!(priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_MAGIC_PACKET) && | 586 | if (!(priv->device_flags & FSL_GIANFAR_DEV_HAS_MAGIC_PACKET) && |
587 | wol->wolopts != 0) | 587 | wol->wolopts != 0) |
588 | return -EINVAL; | 588 | return -EINVAL; |
589 | 589 | ||
diff --git a/drivers/net/gianfar_mii.c b/drivers/net/gianfar_mii.c index 0e2595d24933..f3706e415b45 100644 --- a/drivers/net/gianfar_mii.c +++ b/drivers/net/gianfar_mii.c | |||
@@ -34,6 +34,8 @@ | |||
34 | #include <linux/crc32.h> | 34 | #include <linux/crc32.h> |
35 | #include <linux/mii.h> | 35 | #include <linux/mii.h> |
36 | #include <linux/phy.h> | 36 | #include <linux/phy.h> |
37 | #include <linux/of.h> | ||
38 | #include <linux/of_platform.h> | ||
37 | 39 | ||
38 | #include <asm/io.h> | 40 | #include <asm/io.h> |
39 | #include <asm/irq.h> | 41 | #include <asm/irq.h> |
@@ -150,19 +152,83 @@ static int gfar_mdio_reset(struct mii_bus *bus) | |||
150 | return 0; | 152 | return 0; |
151 | } | 153 | } |
152 | 154 | ||
155 | /* Allocate an array which provides irq #s for each PHY on the given bus */ | ||
156 | static int *create_irq_map(struct device_node *np) | ||
157 | { | ||
158 | int *irqs; | ||
159 | int i; | ||
160 | struct device_node *child = NULL; | ||
161 | |||
162 | irqs = kcalloc(PHY_MAX_ADDR, sizeof(int), GFP_KERNEL); | ||
163 | |||
164 | if (!irqs) | ||
165 | return NULL; | ||
166 | |||
167 | for (i = 0; i < PHY_MAX_ADDR; i++) | ||
168 | irqs[i] = PHY_POLL; | ||
169 | |||
170 | while ((child = of_get_next_child(np, child)) != NULL) { | ||
171 | int irq = irq_of_parse_and_map(child, 0); | ||
172 | const u32 *id; | ||
173 | |||
174 | if (irq == NO_IRQ) | ||
175 | continue; | ||
176 | |||
177 | id = of_get_property(child, "reg", NULL); | ||
178 | |||
179 | if (!id) | ||
180 | continue; | ||
181 | |||
182 | if (*id < PHY_MAX_ADDR && *id >= 0) | ||
183 | irqs[*id] = irq; | ||
184 | else | ||
185 | printk(KERN_WARNING "%s: " | ||
186 | "%d is not a valid PHY address\n", | ||
187 | np->full_name, *id); | ||
188 | } | ||
189 | |||
190 | return irqs; | ||
191 | } | ||
192 | |||
193 | |||
194 | void gfar_mdio_bus_name(char *name, struct device_node *np) | ||
195 | { | ||
196 | const u32 *reg; | ||
197 | |||
198 | reg = of_get_property(np, "reg", NULL); | ||
153 | 199 | ||
154 | static int gfar_mdio_probe(struct device *dev) | 200 | snprintf(name, MII_BUS_ID_SIZE, "%s@%x", np->name, reg ? *reg : 0); |
201 | } | ||
202 | |||
203 | /* Scan the bus in reverse, looking for an empty spot */ | ||
204 | static int gfar_mdio_find_free(struct mii_bus *new_bus) | ||
205 | { | ||
206 | int i; | ||
207 | |||
208 | for (i = PHY_MAX_ADDR; i > 0; i--) { | ||
209 | u32 phy_id; | ||
210 | |||
211 | if (get_phy_id(new_bus, i, &phy_id)) | ||
212 | return -1; | ||
213 | |||
214 | if (phy_id == 0xffffffff) | ||
215 | break; | ||
216 | } | ||
217 | |||
218 | return i; | ||
219 | } | ||
220 | |||
221 | static int gfar_mdio_probe(struct of_device *ofdev, | ||
222 | const struct of_device_id *match) | ||
155 | { | 223 | { |
156 | struct platform_device *pdev = to_platform_device(dev); | ||
157 | struct gianfar_mdio_data *pdata; | ||
158 | struct gfar_mii __iomem *regs; | 224 | struct gfar_mii __iomem *regs; |
159 | struct gfar __iomem *enet_regs; | 225 | struct gfar __iomem *enet_regs; |
160 | struct mii_bus *new_bus; | 226 | struct mii_bus *new_bus; |
161 | struct resource *r; | 227 | int err = 0; |
162 | int i, err = 0; | 228 | u64 addr, size; |
163 | 229 | struct device_node *np = ofdev->node; | |
164 | if (NULL == dev) | 230 | struct device_node *tbi; |
165 | return -EINVAL; | 231 | int tbiaddr = -1; |
166 | 232 | ||
167 | new_bus = mdiobus_alloc(); | 233 | new_bus = mdiobus_alloc(); |
168 | if (NULL == new_bus) | 234 | if (NULL == new_bus) |
@@ -172,31 +238,28 @@ static int gfar_mdio_probe(struct device *dev) | |||
172 | new_bus->read = &gfar_mdio_read, | 238 | new_bus->read = &gfar_mdio_read, |
173 | new_bus->write = &gfar_mdio_write, | 239 | new_bus->write = &gfar_mdio_write, |
174 | new_bus->reset = &gfar_mdio_reset, | 240 | new_bus->reset = &gfar_mdio_reset, |
175 | snprintf(new_bus->id, MII_BUS_ID_SIZE, "%x", pdev->id); | 241 | gfar_mdio_bus_name(new_bus->id, np); |
176 | |||
177 | pdata = (struct gianfar_mdio_data *)pdev->dev.platform_data; | ||
178 | |||
179 | if (NULL == pdata) { | ||
180 | printk(KERN_ERR "gfar mdio %d: Missing platform data!\n", pdev->id); | ||
181 | return -ENODEV; | ||
182 | } | ||
183 | |||
184 | r = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
185 | 242 | ||
186 | /* Set the PHY base address */ | 243 | /* Set the PHY base address */ |
187 | regs = ioremap(r->start, sizeof (struct gfar_mii)); | 244 | addr = of_translate_address(np, of_get_address(np, 0, &size, NULL)); |
245 | regs = ioremap(addr, size); | ||
188 | 246 | ||
189 | if (NULL == regs) { | 247 | if (NULL == regs) { |
190 | err = -ENOMEM; | 248 | err = -ENOMEM; |
191 | goto reg_map_fail; | 249 | goto err_free_bus; |
192 | } | 250 | } |
193 | 251 | ||
194 | new_bus->priv = (void __force *)regs; | 252 | new_bus->priv = (void __force *)regs; |
195 | 253 | ||
196 | new_bus->irq = pdata->irq; | 254 | new_bus->irq = create_irq_map(np); |
255 | |||
256 | if (new_bus->irq == NULL) { | ||
257 | err = -ENOMEM; | ||
258 | goto err_unmap_regs; | ||
259 | } | ||
197 | 260 | ||
198 | new_bus->parent = dev; | 261 | new_bus->parent = &ofdev->dev; |
199 | dev_set_drvdata(dev, new_bus); | 262 | dev_set_drvdata(&ofdev->dev, new_bus); |
200 | 263 | ||
201 | /* | 264 | /* |
202 | * This is mildly evil, but so is our hardware for doing this. | 265 | * This is mildly evil, but so is our hardware for doing this. |
@@ -206,96 +269,109 @@ static int gfar_mdio_probe(struct device *dev) | |||
206 | enet_regs = (struct gfar __iomem *) | 269 | enet_regs = (struct gfar __iomem *) |
207 | ((char *)regs - offsetof(struct gfar, gfar_mii_regs)); | 270 | ((char *)regs - offsetof(struct gfar, gfar_mii_regs)); |
208 | 271 | ||
209 | /* Scan the bus, looking for an empty spot for TBIPA */ | 272 | for_each_child_of_node(np, tbi) { |
210 | gfar_write(&enet_regs->tbipa, 0); | 273 | if (!strncmp(tbi->type, "tbi-phy", 8)) |
211 | for (i = PHY_MAX_ADDR; i > 0; i--) { | 274 | break; |
212 | u32 phy_id; | 275 | } |
213 | 276 | ||
214 | err = get_phy_id(new_bus, i, &phy_id); | 277 | if (tbi) { |
215 | if (err) | 278 | const u32 *prop = of_get_property(tbi, "reg", NULL); |
216 | goto bus_register_fail; | ||
217 | 279 | ||
218 | if (phy_id == 0xffffffff) | 280 | if (prop) |
219 | break; | 281 | tbiaddr = *prop; |
220 | } | 282 | } |
221 | 283 | ||
222 | /* The bus is full. We don't support using 31 PHYs, sorry */ | 284 | if (tbiaddr == -1) { |
223 | if (i == 0) { | 285 | gfar_write(&enet_regs->tbipa, 0); |
286 | |||
287 | tbiaddr = gfar_mdio_find_free(new_bus); | ||
288 | } | ||
289 | |||
290 | /* | ||
291 | * We define TBIPA at 0 to be illegal, opting to fail for boards that | ||
292 | * have PHYs at 1-31, rather than change tbipa and rescan. | ||
293 | */ | ||
294 | if (tbiaddr == 0) { | ||
224 | err = -EBUSY; | 295 | err = -EBUSY; |
225 | 296 | ||
226 | goto bus_register_fail; | 297 | goto err_free_irqs; |
227 | } | 298 | } |
228 | 299 | ||
229 | gfar_write(&enet_regs->tbipa, i); | 300 | gfar_write(&enet_regs->tbipa, tbiaddr); |
301 | |||
302 | /* | ||
303 | * The TBIPHY-only buses will find PHYs at every address, | ||
304 | * so we mask them all but the TBI | ||
305 | */ | ||
306 | if (!of_device_is_compatible(np, "fsl,gianfar-mdio")) | ||
307 | new_bus->phy_mask = ~(1 << tbiaddr); | ||
230 | 308 | ||
231 | err = mdiobus_register(new_bus); | 309 | err = mdiobus_register(new_bus); |
232 | 310 | ||
233 | if (0 != err) { | 311 | if (err != 0) { |
234 | printk (KERN_ERR "%s: Cannot register as MDIO bus\n", | 312 | printk (KERN_ERR "%s: Cannot register as MDIO bus\n", |
235 | new_bus->name); | 313 | new_bus->name); |
236 | goto bus_register_fail; | 314 | goto err_free_irqs; |
237 | } | 315 | } |
238 | 316 | ||
239 | return 0; | 317 | return 0; |
240 | 318 | ||
241 | bus_register_fail: | 319 | err_free_irqs: |
320 | kfree(new_bus->irq); | ||
321 | err_unmap_regs: | ||
242 | iounmap(regs); | 322 | iounmap(regs); |
243 | reg_map_fail: | 323 | err_free_bus: |
244 | mdiobus_free(new_bus); | 324 | mdiobus_free(new_bus); |
245 | 325 | ||
246 | return err; | 326 | return err; |
247 | } | 327 | } |
248 | 328 | ||
249 | 329 | ||
250 | static int gfar_mdio_remove(struct device *dev) | 330 | static int gfar_mdio_remove(struct of_device *ofdev) |
251 | { | 331 | { |
252 | struct mii_bus *bus = dev_get_drvdata(dev); | 332 | struct mii_bus *bus = dev_get_drvdata(&ofdev->dev); |
253 | 333 | ||
254 | mdiobus_unregister(bus); | 334 | mdiobus_unregister(bus); |
255 | 335 | ||
256 | dev_set_drvdata(dev, NULL); | 336 | dev_set_drvdata(&ofdev->dev, NULL); |
257 | 337 | ||
258 | iounmap((void __iomem *)bus->priv); | 338 | iounmap((void __iomem *)bus->priv); |
259 | bus->priv = NULL; | 339 | bus->priv = NULL; |
340 | kfree(bus->irq); | ||
260 | mdiobus_free(bus); | 341 | mdiobus_free(bus); |
261 | 342 | ||
262 | return 0; | 343 | return 0; |
263 | } | 344 | } |
264 | 345 | ||
265 | static struct device_driver gianfar_mdio_driver = { | 346 | static struct of_device_id gfar_mdio_match[] = |
347 | { | ||
348 | { | ||
349 | .compatible = "fsl,gianfar-mdio", | ||
350 | }, | ||
351 | { | ||
352 | .compatible = "fsl,gianfar-tbi", | ||
353 | }, | ||
354 | { | ||
355 | .type = "mdio", | ||
356 | .compatible = "gianfar", | ||
357 | }, | ||
358 | {}, | ||
359 | }; | ||
360 | |||
361 | static struct of_platform_driver gianfar_mdio_driver = { | ||
266 | .name = "fsl-gianfar_mdio", | 362 | .name = "fsl-gianfar_mdio", |
267 | .bus = &platform_bus_type, | 363 | .match_table = gfar_mdio_match, |
364 | |||
268 | .probe = gfar_mdio_probe, | 365 | .probe = gfar_mdio_probe, |
269 | .remove = gfar_mdio_remove, | 366 | .remove = gfar_mdio_remove, |
270 | }; | 367 | }; |
271 | 368 | ||
272 | static int match_mdio_bus(struct device *dev, void *data) | ||
273 | { | ||
274 | const struct gfar_private *priv = data; | ||
275 | const struct platform_device *pdev = to_platform_device(dev); | ||
276 | |||
277 | return !strcmp(pdev->name, gianfar_mdio_driver.name) && | ||
278 | pdev->id == priv->einfo->mdio_bus; | ||
279 | } | ||
280 | |||
281 | /* Given a gfar_priv structure, find the mii_bus controlled by this device (not | ||
282 | * necessarily the same as the bus the gfar's PHY is on), if one exists. | ||
283 | * Normally only the first gianfar controls a mii_bus. */ | ||
284 | struct mii_bus *gfar_get_miibus(const struct gfar_private *priv) | ||
285 | { | ||
286 | /*const*/ struct device *d; | ||
287 | |||
288 | d = bus_find_device(gianfar_mdio_driver.bus, NULL, (void *)priv, | ||
289 | match_mdio_bus); | ||
290 | return d ? dev_get_drvdata(d) : NULL; | ||
291 | } | ||
292 | |||
293 | int __init gfar_mdio_init(void) | 369 | int __init gfar_mdio_init(void) |
294 | { | 370 | { |
295 | return driver_register(&gianfar_mdio_driver); | 371 | return of_register_platform_driver(&gianfar_mdio_driver); |
296 | } | 372 | } |
297 | 373 | ||
298 | void gfar_mdio_exit(void) | 374 | void gfar_mdio_exit(void) |
299 | { | 375 | { |
300 | driver_unregister(&gianfar_mdio_driver); | 376 | of_unregister_platform_driver(&gianfar_mdio_driver); |
301 | } | 377 | } |
diff --git a/drivers/net/gianfar_mii.h b/drivers/net/gianfar_mii.h index 02dc970ca1ff..65c242cd468a 100644 --- a/drivers/net/gianfar_mii.h +++ b/drivers/net/gianfar_mii.h | |||
@@ -49,4 +49,6 @@ int gfar_local_mdio_read(struct gfar_mii __iomem *regs, int mii_id, int regnum); | |||
49 | struct mii_bus *gfar_get_miibus(const struct gfar_private *priv); | 49 | struct mii_bus *gfar_get_miibus(const struct gfar_private *priv); |
50 | int __init gfar_mdio_init(void); | 50 | int __init gfar_mdio_init(void); |
51 | void gfar_mdio_exit(void); | 51 | void gfar_mdio_exit(void); |
52 | |||
53 | void gfar_mdio_bus_name(char *name, struct device_node *np); | ||
52 | #endif /* GIANFAR_PHY_H */ | 54 | #endif /* GIANFAR_PHY_H */ |
diff --git a/include/linux/fsl_devices.h b/include/linux/fsl_devices.h index 708bab58d8d0..d9051d717d27 100644 --- a/include/linux/fsl_devices.h +++ b/include/linux/fsl_devices.h | |||
@@ -47,12 +47,7 @@ | |||
47 | struct gianfar_platform_data { | 47 | struct gianfar_platform_data { |
48 | /* device specific information */ | 48 | /* device specific information */ |
49 | u32 device_flags; | 49 | u32 device_flags; |
50 | /* board specific information */ | 50 | char bus_id[BUS_ID_SIZE]; |
51 | u32 board_flags; | ||
52 | int mdio_bus; /* Bus controlled by us */ | ||
53 | char bus_id[MII_BUS_ID_SIZE]; /* Bus PHY is on */ | ||
54 | u32 phy_id; | ||
55 | u8 mac_addr[6]; | ||
56 | phy_interface_t interface; | 51 | phy_interface_t interface; |
57 | }; | 52 | }; |
58 | 53 | ||
@@ -61,17 +56,6 @@ struct gianfar_mdio_data { | |||
61 | int irq[32]; | 56 | int irq[32]; |
62 | }; | 57 | }; |
63 | 58 | ||
64 | /* Flags related to gianfar device features */ | ||
65 | #define FSL_GIANFAR_DEV_HAS_GIGABIT 0x00000001 | ||
66 | #define FSL_GIANFAR_DEV_HAS_COALESCE 0x00000002 | ||
67 | #define FSL_GIANFAR_DEV_HAS_RMON 0x00000004 | ||
68 | #define FSL_GIANFAR_DEV_HAS_MULTI_INTR 0x00000008 | ||
69 | #define FSL_GIANFAR_DEV_HAS_CSUM 0x00000010 | ||
70 | #define FSL_GIANFAR_DEV_HAS_VLAN 0x00000020 | ||
71 | #define FSL_GIANFAR_DEV_HAS_EXTENDED_HASH 0x00000040 | ||
72 | #define FSL_GIANFAR_DEV_HAS_PADDING 0x00000080 | ||
73 | #define FSL_GIANFAR_DEV_HAS_MAGIC_PACKET 0x00000100 | ||
74 | |||
75 | /* Flags in gianfar_platform_data */ | 59 | /* Flags in gianfar_platform_data */ |
76 | #define FSL_GIANFAR_BRD_HAS_PHY_INTR 0x00000001 /* set or use a timer */ | 60 | #define FSL_GIANFAR_BRD_HAS_PHY_INTR 0x00000001 /* set or use a timer */ |
77 | #define FSL_GIANFAR_BRD_IS_REDUCED 0x00000002 /* Set if RGMII, RMII */ | 61 | #define FSL_GIANFAR_BRD_IS_REDUCED 0x00000002 /* Set if RGMII, RMII */ |