diff options
-rw-r--r-- | arch/powerpc/boot/dts/holly.dts | 51 | ||||
-rw-r--r-- | arch/powerpc/boot/dts/mpc7448hpc2.dts | 33 | ||||
-rw-r--r-- | arch/powerpc/sysdev/tsi108_dev.c | 33 |
3 files changed, 65 insertions, 52 deletions
diff --git a/arch/powerpc/boot/dts/holly.dts b/arch/powerpc/boot/dts/holly.dts index e6b5091de9ce..80a4fab8ee37 100644 --- a/arch/powerpc/boot/dts/holly.dts +++ b/arch/powerpc/boot/dts/holly.dts | |||
@@ -46,7 +46,7 @@ | |||
46 | 46 | ||
47 | tsi109@c0000000 { | 47 | tsi109@c0000000 { |
48 | device_type = "tsi-bridge"; | 48 | device_type = "tsi-bridge"; |
49 | compatible = "tsi-bridge"; | 49 | compatible = "tsi109-bridge", "tsi108-bridge"; |
50 | #address-cells = <1>; | 50 | #address-cells = <1>; |
51 | #size-cells = <1>; | 51 | #size-cells = <1>; |
52 | ranges = <00000000 c0000000 00010000>; | 52 | ranges = <00000000 c0000000 00010000>; |
@@ -54,52 +54,55 @@ | |||
54 | 54 | ||
55 | i2c@7000 { | 55 | i2c@7000 { |
56 | device_type = "i2c"; | 56 | device_type = "i2c"; |
57 | compatible = "tsi-i2c"; | 57 | compatible = "tsi109-i2c", "tsi108-i2c"; |
58 | interrupt-parent = < &/tsi109@c0000000/pic@7400 >; | 58 | interrupt-parent = <&MPIC>; |
59 | interrupts = <e 2>; | 59 | interrupts = <e 2>; |
60 | reg = <7000 400>; | 60 | reg = <7000 400>; |
61 | }; | 61 | }; |
62 | 62 | ||
63 | mdio@6000 { | 63 | MDIO: mdio@6000 { |
64 | device_type = "mdio"; | 64 | device_type = "mdio"; |
65 | compatible = "tsi-ethernet"; | 65 | compatible = "tsi109-mdio", "tsi108-mdio"; |
66 | reg = <6000 50>; | ||
67 | #address-cells = <1>; | ||
68 | #size-cells = <0>; | ||
66 | 69 | ||
67 | PHY1: ethernet-phy@6000 { | 70 | PHY1: ethernet-phy@1 { |
68 | device_type = "ethernet-phy"; | 71 | compatible = "bcm5461a"; |
69 | compatible = "bcm54xx"; | 72 | reg = <1>; |
70 | reg = <6000 50>; | 73 | txc-rxc-delay-disable; |
71 | phy-id = <1>; | ||
72 | }; | 74 | }; |
73 | 75 | ||
74 | PHY2: ethernet-phy@6400 { | 76 | PHY2: ethernet-phy@2 { |
75 | device_type = "ethernet-phy"; | 77 | compatible = "bcm5461a"; |
76 | compatible = "bcm54xx"; | 78 | reg = <2>; |
77 | reg = <6000 50>; | 79 | txc-rxc-delay-disable; |
78 | phy-id = <2>; | ||
79 | }; | 80 | }; |
80 | }; | 81 | }; |
81 | 82 | ||
82 | ethernet@6200 { | 83 | ethernet@6200 { |
83 | device_type = "network"; | 84 | device_type = "network"; |
84 | compatible = "tsi-ethernet"; | 85 | compatible = "tsi109-ethernet", "tsi108-ethernet"; |
85 | #address-cells = <1>; | 86 | #address-cells = <1>; |
86 | #size-cells = <0>; | 87 | #size-cells = <0>; |
87 | reg = <6000 200>; | 88 | reg = <6000 200>; |
88 | local-mac-address = [ 00 00 00 00 00 00 ]; | 89 | local-mac-address = [ 00 00 00 00 00 00 ]; |
89 | interrupt-parent = < &/tsi109@c0000000/pic@7400 >; | 90 | interrupt-parent = <&MPIC>; |
90 | interrupts = <10 2>; | 91 | interrupts = <10 2>; |
92 | mdio-handle = <&MDIO>; | ||
91 | phy-handle = <&PHY1>; | 93 | phy-handle = <&PHY1>; |
92 | }; | 94 | }; |
93 | 95 | ||
94 | ethernet@6600 { | 96 | ethernet@6600 { |
95 | device_type = "network"; | 97 | device_type = "network"; |
96 | compatible = "tsi-ethernet"; | 98 | compatible = "tsi109-ethernet", "tsi108-ethernet"; |
97 | #address-cells = <1>; | 99 | #address-cells = <1>; |
98 | #size-cells = <0>; | 100 | #size-cells = <0>; |
99 | reg = <6400 200>; | 101 | reg = <6400 200>; |
100 | local-mac-address = [ 00 00 00 00 00 00 ]; | 102 | local-mac-address = [ 00 00 00 00 00 00 ]; |
101 | interrupt-parent = < &/tsi109@c0000000/pic@7400 >; | 103 | interrupt-parent = <&MPIC>; |
102 | interrupts = <11 2>; | 104 | interrupts = <11 2>; |
105 | mdio-handle = <&MDIO>; | ||
103 | phy-handle = <&PHY2>; | 106 | phy-handle = <&PHY2>; |
104 | }; | 107 | }; |
105 | 108 | ||
@@ -110,7 +113,7 @@ | |||
110 | virtual-reg = <c0007808>; | 113 | virtual-reg = <c0007808>; |
111 | clock-frequency = <3F9C6000>; | 114 | clock-frequency = <3F9C6000>; |
112 | current-speed = <1c200>; | 115 | current-speed = <1c200>; |
113 | interrupt-parent = < &/tsi109@c0000000/pic@7400 >; | 116 | interrupt-parent = <&MPIC>; |
114 | interrupts = <c 2>; | 117 | interrupts = <c 2>; |
115 | }; | 118 | }; |
116 | 119 | ||
@@ -121,7 +124,7 @@ | |||
121 | virtual-reg = <c0007c08>; | 124 | virtual-reg = <c0007c08>; |
122 | clock-frequency = <3F9C6000>; | 125 | clock-frequency = <3F9C6000>; |
123 | current-speed = <1c200>; | 126 | current-speed = <1c200>; |
124 | interrupt-parent = < &/tsi109@c0000000/pic@7400 >; | 127 | interrupt-parent = <&MPIC>; |
125 | interrupts = <d 2>; | 128 | interrupts = <d 2>; |
126 | }; | 129 | }; |
127 | 130 | ||
@@ -136,7 +139,7 @@ | |||
136 | 139 | ||
137 | pci@1000 { | 140 | pci@1000 { |
138 | device_type = "pci"; | 141 | device_type = "pci"; |
139 | compatible = "tsi109"; | 142 | compatible = "tsi109-pci", "tsi108-pci"; |
140 | #interrupt-cells = <1>; | 143 | #interrupt-cells = <1>; |
141 | #size-cells = <2>; | 144 | #size-cells = <2>; |
142 | #address-cells = <3>; | 145 | #address-cells = <3>; |
@@ -150,7 +153,7 @@ | |||
150 | ranges = <02000000 0 40000000 40000000 0 10000000 | 153 | ranges = <02000000 0 40000000 40000000 0 10000000 |
151 | 01000000 0 00000000 7e000000 0 00010000>; | 154 | 01000000 0 00000000 7e000000 0 00010000>; |
152 | clock-frequency = <7f28154>; | 155 | clock-frequency = <7f28154>; |
153 | interrupt-parent = < &/tsi109@c0000000/pic@7400 >; | 156 | interrupt-parent = <&MPIC>; |
154 | interrupts = <17 2>; | 157 | interrupts = <17 2>; |
155 | interrupt-map-mask = <f800 0 0 7>; | 158 | interrupt-map-mask = <f800 0 0 7>; |
156 | /*----------------------------------------------------+ | 159 | /*----------------------------------------------------+ |
@@ -186,7 +189,7 @@ | |||
186 | #address-cells = <0>; | 189 | #address-cells = <0>; |
187 | #interrupt-cells = <2>; | 190 | #interrupt-cells = <2>; |
188 | interrupts = <17 2>; | 191 | interrupts = <17 2>; |
189 | interrupt-parent = < &/tsi109@c0000000/pic@7400 >; | 192 | interrupt-parent = <&MPIC>; |
190 | }; | 193 | }; |
191 | }; | 194 | }; |
192 | }; | 195 | }; |
diff --git a/arch/powerpc/boot/dts/mpc7448hpc2.dts b/arch/powerpc/boot/dts/mpc7448hpc2.dts index 765c306ecf80..0e3d314a7158 100644 --- a/arch/powerpc/boot/dts/mpc7448hpc2.dts +++ b/arch/powerpc/boot/dts/mpc7448hpc2.dts | |||
@@ -45,7 +45,7 @@ | |||
45 | #address-cells = <1>; | 45 | #address-cells = <1>; |
46 | #size-cells = <1>; | 46 | #size-cells = <1>; |
47 | #interrupt-cells = <2>; | 47 | #interrupt-cells = <2>; |
48 | device_type = "tsi-bridge"; | 48 | device_type = "tsi108-bridge"; |
49 | ranges = <00000000 c0000000 00010000>; | 49 | ranges = <00000000 c0000000 00010000>; |
50 | reg = <c0000000 00010000>; | 50 | reg = <c0000000 00010000>; |
51 | bus-frequency = <0>; | 51 | bus-frequency = <0>; |
@@ -55,27 +55,26 @@ | |||
55 | interrupts = <E 0>; | 55 | interrupts = <E 0>; |
56 | reg = <7000 400>; | 56 | reg = <7000 400>; |
57 | device_type = "i2c"; | 57 | device_type = "i2c"; |
58 | compatible = "tsi-i2c"; | 58 | compatible = "tsi108-i2c"; |
59 | }; | 59 | }; |
60 | 60 | ||
61 | mdio@6000 { | 61 | MDIO: mdio@6000 { |
62 | device_type = "mdio"; | 62 | device_type = "mdio"; |
63 | compatible = "tsi-ethernet"; | 63 | compatible = "tsi108-mdio"; |
64 | reg = <6000 50>; | ||
65 | #address-cells = <1>; | ||
66 | #size-cells = <0>; | ||
64 | 67 | ||
65 | phy8: ethernet-phy@6000 { | 68 | phy8: ethernet-phy@8 { |
66 | interrupt-parent = <&mpic>; | 69 | interrupt-parent = <&mpic>; |
67 | interrupts = <2 1>; | 70 | interrupts = <2 1>; |
68 | reg = <6000 50>; | 71 | reg = <8>; |
69 | phy-id = <8>; | ||
70 | device_type = "ethernet-phy"; | ||
71 | }; | 72 | }; |
72 | 73 | ||
73 | phy9: ethernet-phy@6400 { | 74 | phy9: ethernet-phy@9 { |
74 | interrupt-parent = <&mpic>; | 75 | interrupt-parent = <&mpic>; |
75 | interrupts = <2 1>; | 76 | interrupts = <2 1>; |
76 | reg = <6000 50>; | 77 | reg = <9>; |
77 | phy-id = <9>; | ||
78 | device_type = "ethernet-phy"; | ||
79 | }; | 78 | }; |
80 | 79 | ||
81 | }; | 80 | }; |
@@ -83,12 +82,12 @@ | |||
83 | ethernet@6200 { | 82 | ethernet@6200 { |
84 | #size-cells = <0>; | 83 | #size-cells = <0>; |
85 | device_type = "network"; | 84 | device_type = "network"; |
86 | model = "TSI-ETH"; | 85 | compatible = "tsi108-ethernet"; |
87 | compatible = "tsi-ethernet"; | ||
88 | reg = <6000 200>; | 86 | reg = <6000 200>; |
89 | address = [ 00 06 D2 00 00 01 ]; | 87 | address = [ 00 06 D2 00 00 01 ]; |
90 | interrupts = <10 2>; | 88 | interrupts = <10 2>; |
91 | interrupt-parent = <&mpic>; | 89 | interrupt-parent = <&mpic>; |
90 | mdio-handle = <&MDIO>; | ||
92 | phy-handle = <&phy8>; | 91 | phy-handle = <&phy8>; |
93 | }; | 92 | }; |
94 | 93 | ||
@@ -96,12 +95,12 @@ | |||
96 | #address-cells = <1>; | 95 | #address-cells = <1>; |
97 | #size-cells = <0>; | 96 | #size-cells = <0>; |
98 | device_type = "network"; | 97 | device_type = "network"; |
99 | model = "TSI-ETH"; | 98 | compatible = "tsi108-ethernet"; |
100 | compatible = "tsi-ethernet"; | ||
101 | reg = <6400 200>; | 99 | reg = <6400 200>; |
102 | address = [ 00 06 D2 00 00 02 ]; | 100 | address = [ 00 06 D2 00 00 02 ]; |
103 | interrupts = <11 2>; | 101 | interrupts = <11 2>; |
104 | interrupt-parent = <&mpic>; | 102 | interrupt-parent = <&mpic>; |
103 | mdio-handle = <&MDIO>; | ||
105 | phy-handle = <&phy9>; | 104 | phy-handle = <&phy9>; |
106 | }; | 105 | }; |
107 | 106 | ||
@@ -135,7 +134,7 @@ | |||
135 | big-endian; | 134 | big-endian; |
136 | }; | 135 | }; |
137 | pci@1000 { | 136 | pci@1000 { |
138 | compatible = "tsi10x"; | 137 | compatible = "tsi108-pci"; |
139 | device_type = "pci"; | 138 | device_type = "pci"; |
140 | #interrupt-cells = <1>; | 139 | #interrupt-cells = <1>; |
141 | #size-cells = <2>; | 140 | #size-cells = <2>; |
diff --git a/arch/powerpc/sysdev/tsi108_dev.c b/arch/powerpc/sysdev/tsi108_dev.c index 7d3b09b7d544..a113d800cbf0 100644 --- a/arch/powerpc/sysdev/tsi108_dev.c +++ b/arch/powerpc/sysdev/tsi108_dev.c | |||
@@ -72,12 +72,11 @@ static int __init tsi108_eth_of_init(void) | |||
72 | int ret; | 72 | int ret; |
73 | 73 | ||
74 | for (np = NULL, i = 0; | 74 | for (np = NULL, i = 0; |
75 | (np = of_find_compatible_node(np, "network", "tsi-ethernet")) != NULL; | 75 | (np = of_find_compatible_node(np, "network", "tsi108-ethernet")) != NULL; |
76 | i++) { | 76 | i++) { |
77 | struct resource r[2]; | 77 | struct resource r[2]; |
78 | struct device_node *phy; | 78 | struct device_node *phy, *mdio; |
79 | hw_info tsi_eth_data; | 79 | hw_info tsi_eth_data; |
80 | const unsigned int *id; | ||
81 | const unsigned int *phy_id; | 80 | const unsigned int *phy_id; |
82 | const void *mac_addr; | 81 | const void *mac_addr; |
83 | const phandle *ph; | 82 | const phandle *ph; |
@@ -111,6 +110,13 @@ static int __init tsi108_eth_of_init(void) | |||
111 | if (mac_addr) | 110 | if (mac_addr) |
112 | memcpy(tsi_eth_data.mac_addr, mac_addr, 6); | 111 | memcpy(tsi_eth_data.mac_addr, mac_addr, 6); |
113 | 112 | ||
113 | ph = of_get_property(np, "mdio-handle", NULL); | ||
114 | mdio = of_find_node_by_phandle(*ph); | ||
115 | ret = of_address_to_resource(mdio, 0, &res); | ||
116 | of_node_put(mdio); | ||
117 | if (ret) | ||
118 | goto unreg; | ||
119 | |||
114 | ph = of_get_property(np, "phy-handle", NULL); | 120 | ph = of_get_property(np, "phy-handle", NULL); |
115 | phy = of_find_node_by_phandle(*ph); | 121 | phy = of_find_node_by_phandle(*ph); |
116 | 122 | ||
@@ -119,20 +125,25 @@ static int __init tsi108_eth_of_init(void) | |||
119 | goto unreg; | 125 | goto unreg; |
120 | } | 126 | } |
121 | 127 | ||
122 | id = of_get_property(phy, "reg", NULL); | 128 | phy_id = of_get_property(phy, "reg", NULL); |
123 | phy_id = of_get_property(phy, "phy-id", NULL); | 129 | |
124 | ret = of_address_to_resource(phy, 0, &res); | ||
125 | if (ret) { | ||
126 | of_node_put(phy); | ||
127 | goto unreg; | ||
128 | } | ||
129 | tsi_eth_data.regs = r[0].start; | 130 | tsi_eth_data.regs = r[0].start; |
130 | tsi_eth_data.phyregs = res.start; | 131 | tsi_eth_data.phyregs = res.start; |
131 | tsi_eth_data.phy = *phy_id; | 132 | tsi_eth_data.phy = *phy_id; |
132 | tsi_eth_data.irq_num = irq_of_parse_and_map(np, 0); | 133 | tsi_eth_data.irq_num = irq_of_parse_and_map(np, 0); |
133 | if (of_device_is_compatible(phy, "bcm54xx")) | 134 | |
135 | /* Some boards with the TSI108 bridge (e.g. Holly) | ||
136 | * have a miswiring of the ethernet PHYs which | ||
137 | * requires a workaround. The special | ||
138 | * "txc-rxc-delay-disable" property enables this | ||
139 | * workaround. FIXME: Need to port the tsi108_eth | ||
140 | * driver itself to phylib and use a non-misleading | ||
141 | * name for the workaround flag - it's not actually to | ||
142 | * do with the model of PHY in use */ | ||
143 | if (of_get_property(phy, "txc-rxc-delay-disable", NULL)) | ||
134 | tsi_eth_data.phy_type = TSI108_PHY_BCM54XX; | 144 | tsi_eth_data.phy_type = TSI108_PHY_BCM54XX; |
135 | of_node_put(phy); | 145 | of_node_put(phy); |
146 | |||
136 | ret = | 147 | ret = |
137 | platform_device_add_data(tsi_eth_dev, &tsi_eth_data, | 148 | platform_device_add_data(tsi_eth_dev, &tsi_eth_data, |
138 | sizeof(hw_info)); | 149 | sizeof(hw_info)); |