2 * AMD 10Gb Ethernet driver
4 * This file is available to you under your choice of the following two
9 * Copyright (c) 2016 Advanced Micro Devices, Inc.
11 * This file is free software; you may copy, redistribute and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation, either version 2 of the License, or (at
14 * your option) any later version.
16 * This file is distributed in the hope that it will be useful, but
17 * WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program. If not, see <http://www.gnu.org/licenses/>.
24 * This file incorporates work covered by the following copyright and
26 * The Synopsys DWC ETHER XGMAC Software Driver and documentation
27 * (hereinafter "Software") is an unsupported proprietary work of Synopsys,
28 * Inc. unless otherwise expressly agreed to in writing between Synopsys
31 * The Software IS NOT an item of Licensed Software or Licensed Product
32 * under any End User Software License Agreement or Agreement for Licensed
33 * Product with Synopsys or any supplement thereto. Permission is hereby
34 * granted, free of charge, to any person obtaining a copy of this software
35 * annotated with this license and the Software, to deal in the Software
36 * without restriction, including without limitation the rights to use,
37 * copy, modify, merge, publish, distribute, sublicense, and/or sell copies
38 * of the Software, and to permit persons to whom the Software is furnished
39 * to do so, subject to the following conditions:
41 * The above copyright notice and this permission notice shall be included
42 * in all copies or substantial portions of the Software.
44 * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
45 * BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
46 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
47 * PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS
48 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
49 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
50 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
51 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
52 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
53 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
54 * THE POSSIBILITY OF SUCH DAMAGE.
57 * License 2: Modified BSD
59 * Copyright (c) 2016 Advanced Micro Devices, Inc.
60 * All rights reserved.
62 * Redistribution and use in source and binary forms, with or without
63 * modification, are permitted provided that the following conditions are met:
64 * * Redistributions of source code must retain the above copyright
65 * notice, this list of conditions and the following disclaimer.
66 * * Redistributions in binary form must reproduce the above copyright
67 * notice, this list of conditions and the following disclaimer in the
68 * documentation and/or other materials provided with the distribution.
69 * * Neither the name of Advanced Micro Devices, Inc. nor the
70 * names of its contributors may be used to endorse or promote products
71 * derived from this software without specific prior written permission.
73 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
74 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
75 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
76 * ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
77 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
78 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
79 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
80 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
81 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
82 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
84 * This file incorporates work covered by the following copyright and
86 * The Synopsys DWC ETHER XGMAC Software Driver and documentation
87 * (hereinafter "Software") is an unsupported proprietary work of Synopsys,
88 * Inc. unless otherwise expressly agreed to in writing between Synopsys
91 * The Software IS NOT an item of Licensed Software or Licensed Product
92 * under any End User Software License Agreement or Agreement for Licensed
93 * Product with Synopsys or any supplement thereto. Permission is hereby
94 * granted, free of charge, to any person obtaining a copy of this software
95 * annotated with this license and the Software, to deal in the Software
96 * without restriction, including without limitation the rights to use,
97 * copy, modify, merge, publish, distribute, sublicense, and/or sell copies
98 * of the Software, and to permit persons to whom the Software is furnished
99 * to do so, subject to the following conditions:
101 * The above copyright notice and this permission notice shall be included
102 * in all copies or substantial portions of the Software.
104 * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
105 * BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
106 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
107 * PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS
108 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
109 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
110 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
111 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
112 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
113 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
114 * THE POSSIBILITY OF SUCH DAMAGE.
117 #include <linux/module.h>
118 #include <linux/device.h>
119 #include <linux/kmod.h>
120 #include <linux/mdio.h>
121 #include <linux/phy.h>
124 #include "xgbe-common.h"
126 #define XGBE_PHY_PORT_SPEED_100 BIT(0)
127 #define XGBE_PHY_PORT_SPEED_1000 BIT(1)
128 #define XGBE_PHY_PORT_SPEED_2500 BIT(2)
129 #define XGBE_PHY_PORT_SPEED_10000 BIT(3)
131 #define XGBE_MUTEX_RELEASE 0x80000000
133 #define XGBE_SFP_DIRECT 7
135 /* I2C target addresses */
136 #define XGBE_SFP_SERIAL_ID_ADDRESS 0x50
137 #define XGBE_SFP_DIAG_INFO_ADDRESS 0x51
138 #define XGBE_SFP_PHY_ADDRESS 0x56
139 #define XGBE_GPIO_ADDRESS_PCA9555 0x20
141 /* SFP sideband signal indicators */
142 #define XGBE_GPIO_NO_TX_FAULT BIT(0)
143 #define XGBE_GPIO_NO_RATE_SELECT BIT(1)
144 #define XGBE_GPIO_NO_MOD_ABSENT BIT(2)
145 #define XGBE_GPIO_NO_RX_LOS BIT(3)
147 /* Rate-change complete wait/retry count */
148 #define XGBE_RATECHANGE_COUNT 500
150 enum xgbe_port_mode
{
151 XGBE_PORT_MODE_RSVD
= 0,
152 XGBE_PORT_MODE_BACKPLANE
,
153 XGBE_PORT_MODE_BACKPLANE_2500
,
154 XGBE_PORT_MODE_1000BASE_T
,
155 XGBE_PORT_MODE_1000BASE_X
,
156 XGBE_PORT_MODE_NBASE_T
,
157 XGBE_PORT_MODE_10GBASE_T
,
158 XGBE_PORT_MODE_10GBASE_R
,
163 enum xgbe_conn_type
{
164 XGBE_CONN_TYPE_NONE
= 0,
167 XGBE_CONN_TYPE_BACKPLANE
,
171 /* SFP/SFP+ related definitions */
173 XGBE_SFP_COMM_DIRECT
= 0,
174 XGBE_SFP_COMM_PCA9545
,
177 enum xgbe_sfp_cable
{
178 XGBE_SFP_CABLE_UNKNOWN
= 0,
179 XGBE_SFP_CABLE_ACTIVE
,
180 XGBE_SFP_CABLE_PASSIVE
,
184 XGBE_SFP_BASE_UNKNOWN
= 0,
185 XGBE_SFP_BASE_1000_T
,
186 XGBE_SFP_BASE_1000_SX
,
187 XGBE_SFP_BASE_1000_LX
,
188 XGBE_SFP_BASE_1000_CX
,
189 XGBE_SFP_BASE_10000_SR
,
190 XGBE_SFP_BASE_10000_LR
,
191 XGBE_SFP_BASE_10000_LRM
,
192 XGBE_SFP_BASE_10000_ER
,
193 XGBE_SFP_BASE_10000_CR
,
196 enum xgbe_sfp_speed
{
197 XGBE_SFP_SPEED_UNKNOWN
= 0,
198 XGBE_SFP_SPEED_100_1000
,
200 XGBE_SFP_SPEED_10000
,
203 /* SFP Serial ID Base ID values relative to an offset of 0 */
204 #define XGBE_SFP_BASE_ID 0
205 #define XGBE_SFP_ID_SFP 0x03
207 #define XGBE_SFP_BASE_EXT_ID 1
208 #define XGBE_SFP_EXT_ID_SFP 0x04
210 #define XGBE_SFP_BASE_10GBE_CC 3
211 #define XGBE_SFP_BASE_10GBE_CC_SR BIT(4)
212 #define XGBE_SFP_BASE_10GBE_CC_LR BIT(5)
213 #define XGBE_SFP_BASE_10GBE_CC_LRM BIT(6)
214 #define XGBE_SFP_BASE_10GBE_CC_ER BIT(7)
216 #define XGBE_SFP_BASE_1GBE_CC 6
217 #define XGBE_SFP_BASE_1GBE_CC_SX BIT(0)
218 #define XGBE_SFP_BASE_1GBE_CC_LX BIT(1)
219 #define XGBE_SFP_BASE_1GBE_CC_CX BIT(2)
220 #define XGBE_SFP_BASE_1GBE_CC_T BIT(3)
222 #define XGBE_SFP_BASE_CABLE 8
223 #define XGBE_SFP_BASE_CABLE_PASSIVE BIT(2)
224 #define XGBE_SFP_BASE_CABLE_ACTIVE BIT(3)
226 #define XGBE_SFP_BASE_BR 12
227 #define XGBE_SFP_BASE_BR_1GBE_MIN 0x0a
228 #define XGBE_SFP_BASE_BR_1GBE_MAX 0x0d
229 #define XGBE_SFP_BASE_BR_10GBE_MIN 0x64
230 #define XGBE_SFP_BASE_BR_10GBE_MAX 0x68
232 #define XGBE_SFP_BASE_CU_CABLE_LEN 18
234 #define XGBE_SFP_BASE_VENDOR_NAME 20
235 #define XGBE_SFP_BASE_VENDOR_NAME_LEN 16
236 #define XGBE_SFP_BASE_VENDOR_PN 40
237 #define XGBE_SFP_BASE_VENDOR_PN_LEN 16
238 #define XGBE_SFP_BASE_VENDOR_REV 56
239 #define XGBE_SFP_BASE_VENDOR_REV_LEN 4
241 #define XGBE_SFP_BASE_CC 63
243 /* SFP Serial ID Extended ID values relative to an offset of 64 */
244 #define XGBE_SFP_BASE_VENDOR_SN 4
245 #define XGBE_SFP_BASE_VENDOR_SN_LEN 16
247 #define XGBE_SFP_EXTD_DIAG 28
248 #define XGBE_SFP_EXTD_DIAG_ADDR_CHANGE BIT(2)
250 #define XGBE_SFP_EXTD_SFF_8472 30
252 #define XGBE_SFP_EXTD_CC 31
254 struct xgbe_sfp_eeprom
{
260 #define XGBE_BEL_FUSE_VENDOR "BEL-FUSE "
261 #define XGBE_BEL_FUSE_PARTNO "1GBT-SFP06 "
263 struct xgbe_sfp_ascii
{
265 char vendor
[XGBE_SFP_BASE_VENDOR_NAME_LEN
+ 1];
266 char partno
[XGBE_SFP_BASE_VENDOR_PN_LEN
+ 1];
267 char rev
[XGBE_SFP_BASE_VENDOR_REV_LEN
+ 1];
268 char serno
[XGBE_SFP_BASE_VENDOR_SN_LEN
+ 1];
272 /* MDIO PHY reset types */
273 enum xgbe_mdio_reset
{
274 XGBE_MDIO_RESET_NONE
= 0,
275 XGBE_MDIO_RESET_I2C_GPIO
,
276 XGBE_MDIO_RESET_INT_GPIO
,
280 /* Re-driver related definitions */
281 enum xgbe_phy_redrv_if
{
282 XGBE_PHY_REDRV_IF_MDIO
= 0,
283 XGBE_PHY_REDRV_IF_I2C
,
284 XGBE_PHY_REDRV_IF_MAX
,
287 enum xgbe_phy_redrv_model
{
288 XGBE_PHY_REDRV_MODEL_4223
= 0,
289 XGBE_PHY_REDRV_MODEL_4227
,
290 XGBE_PHY_REDRV_MODEL_MAX
,
293 enum xgbe_phy_redrv_mode
{
294 XGBE_PHY_REDRV_MODE_CX
= 5,
295 XGBE_PHY_REDRV_MODE_SR
= 9,
298 #define XGBE_PHY_REDRV_MODE_REG 0x12b0
300 /* PHY related configuration information */
301 struct xgbe_phy_data
{
302 enum xgbe_port_mode port_mode
;
304 unsigned int port_id
;
306 unsigned int port_speeds
;
308 enum xgbe_conn_type conn_type
;
310 enum xgbe_mode cur_mode
;
311 enum xgbe_mode start_mode
;
313 unsigned int rrc_count
;
315 unsigned int mdio_addr
;
317 unsigned int comm_owned
;
320 enum xgbe_sfp_comm sfp_comm
;
321 unsigned int sfp_mux_address
;
322 unsigned int sfp_mux_channel
;
324 unsigned int sfp_gpio_address
;
325 unsigned int sfp_gpio_mask
;
326 unsigned int sfp_gpio_rx_los
;
327 unsigned int sfp_gpio_tx_fault
;
328 unsigned int sfp_gpio_mod_absent
;
329 unsigned int sfp_gpio_rate_select
;
331 unsigned int sfp_rx_los
;
332 unsigned int sfp_tx_fault
;
333 unsigned int sfp_mod_absent
;
334 unsigned int sfp_diags
;
335 unsigned int sfp_changed
;
336 unsigned int sfp_phy_avail
;
337 unsigned int sfp_cable_len
;
338 enum xgbe_sfp_base sfp_base
;
339 enum xgbe_sfp_cable sfp_cable
;
340 enum xgbe_sfp_speed sfp_speed
;
341 struct xgbe_sfp_eeprom sfp_eeprom
;
343 /* External PHY support */
344 enum xgbe_mdio_mode phydev_mode
;
346 struct phy_device
*phydev
;
347 enum xgbe_mdio_reset mdio_reset
;
348 unsigned int mdio_reset_addr
;
349 unsigned int mdio_reset_gpio
;
351 /* Re-driver support */
353 unsigned int redrv_if
;
354 unsigned int redrv_addr
;
355 unsigned int redrv_lane
;
356 unsigned int redrv_model
;
359 /* I2C, MDIO and GPIO lines are muxed, so only one device at a time */
360 static DEFINE_MUTEX(xgbe_phy_comm_lock
);
362 static enum xgbe_an_mode
xgbe_phy_an_mode(struct xgbe_prv_data
*pdata
);
364 static int xgbe_phy_i2c_xfer(struct xgbe_prv_data
*pdata
,
365 struct xgbe_i2c_op
*i2c_op
)
367 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
369 /* Be sure we own the bus */
370 if (WARN_ON(!phy_data
->comm_owned
))
373 return pdata
->i2c_if
.i2c_xfer(pdata
, i2c_op
);
376 static int xgbe_phy_redrv_write(struct xgbe_prv_data
*pdata
, unsigned int reg
,
379 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
380 struct xgbe_i2c_op i2c_op
;
382 u8 redrv_data
[5], csum
;
383 unsigned int i
, retry
;
386 /* High byte of register contains read/write indicator */
387 redrv_data
[0] = ((reg
>> 8) & 0xff) << 1;
388 redrv_data
[1] = reg
& 0xff;
389 redrv_val
= (__be16
*)&redrv_data
[2];
390 *redrv_val
= cpu_to_be16(val
);
392 /* Calculate 1 byte checksum */
394 for (i
= 0; i
< 4; i
++) {
395 csum
+= redrv_data
[i
];
396 if (redrv_data
[i
] > csum
)
399 redrv_data
[4] = ~csum
;
403 i2c_op
.cmd
= XGBE_I2C_CMD_WRITE
;
404 i2c_op
.target
= phy_data
->redrv_addr
;
405 i2c_op
.len
= sizeof(redrv_data
);
406 i2c_op
.buf
= redrv_data
;
407 ret
= xgbe_phy_i2c_xfer(pdata
, &i2c_op
);
409 if ((ret
== -EAGAIN
) && retry
--)
417 i2c_op
.cmd
= XGBE_I2C_CMD_READ
;
418 i2c_op
.target
= phy_data
->redrv_addr
;
420 i2c_op
.buf
= redrv_data
;
421 ret
= xgbe_phy_i2c_xfer(pdata
, &i2c_op
);
423 if ((ret
== -EAGAIN
) && retry
--)
429 if (redrv_data
[0] != 0xff) {
430 netif_dbg(pdata
, drv
, pdata
->netdev
,
431 "Redriver write checksum error\n");
438 static int xgbe_phy_i2c_write(struct xgbe_prv_data
*pdata
, unsigned int target
,
439 void *val
, unsigned int val_len
)
441 struct xgbe_i2c_op i2c_op
;
446 /* Write the specfied register */
447 i2c_op
.cmd
= XGBE_I2C_CMD_WRITE
;
448 i2c_op
.target
= target
;
449 i2c_op
.len
= val_len
;
451 ret
= xgbe_phy_i2c_xfer(pdata
, &i2c_op
);
452 if ((ret
== -EAGAIN
) && retry
--)
458 static int xgbe_phy_i2c_read(struct xgbe_prv_data
*pdata
, unsigned int target
,
459 void *reg
, unsigned int reg_len
,
460 void *val
, unsigned int val_len
)
462 struct xgbe_i2c_op i2c_op
;
467 /* Set the specified register to read */
468 i2c_op
.cmd
= XGBE_I2C_CMD_WRITE
;
469 i2c_op
.target
= target
;
470 i2c_op
.len
= reg_len
;
472 ret
= xgbe_phy_i2c_xfer(pdata
, &i2c_op
);
474 if ((ret
== -EAGAIN
) && retry
--)
482 /* Read the specfied register */
483 i2c_op
.cmd
= XGBE_I2C_CMD_READ
;
484 i2c_op
.target
= target
;
485 i2c_op
.len
= val_len
;
487 ret
= xgbe_phy_i2c_xfer(pdata
, &i2c_op
);
488 if ((ret
== -EAGAIN
) && retry
--)
494 static int xgbe_phy_sfp_put_mux(struct xgbe_prv_data
*pdata
)
496 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
497 struct xgbe_i2c_op i2c_op
;
500 if (phy_data
->sfp_comm
== XGBE_SFP_COMM_DIRECT
)
503 /* Select no mux channels */
505 i2c_op
.cmd
= XGBE_I2C_CMD_WRITE
;
506 i2c_op
.target
= phy_data
->sfp_mux_address
;
507 i2c_op
.len
= sizeof(mux_channel
);
508 i2c_op
.buf
= &mux_channel
;
510 return xgbe_phy_i2c_xfer(pdata
, &i2c_op
);
513 static int xgbe_phy_sfp_get_mux(struct xgbe_prv_data
*pdata
)
515 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
516 struct xgbe_i2c_op i2c_op
;
519 if (phy_data
->sfp_comm
== XGBE_SFP_COMM_DIRECT
)
522 /* Select desired mux channel */
523 mux_channel
= 1 << phy_data
->sfp_mux_channel
;
524 i2c_op
.cmd
= XGBE_I2C_CMD_WRITE
;
525 i2c_op
.target
= phy_data
->sfp_mux_address
;
526 i2c_op
.len
= sizeof(mux_channel
);
527 i2c_op
.buf
= &mux_channel
;
529 return xgbe_phy_i2c_xfer(pdata
, &i2c_op
);
532 static void xgbe_phy_put_comm_ownership(struct xgbe_prv_data
*pdata
)
534 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
536 phy_data
->comm_owned
= 0;
538 mutex_unlock(&xgbe_phy_comm_lock
);
541 static int xgbe_phy_get_comm_ownership(struct xgbe_prv_data
*pdata
)
543 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
544 unsigned long timeout
;
545 unsigned int mutex_id
;
547 if (phy_data
->comm_owned
)
550 /* The I2C and MDIO/GPIO bus is multiplexed between multiple devices,
551 * the driver needs to take the software mutex and then the hardware
552 * mutexes before being able to use the busses.
554 mutex_lock(&xgbe_phy_comm_lock
);
556 /* Clear the mutexes */
557 XP_IOWRITE(pdata
, XP_I2C_MUTEX
, XGBE_MUTEX_RELEASE
);
558 XP_IOWRITE(pdata
, XP_MDIO_MUTEX
, XGBE_MUTEX_RELEASE
);
560 /* Mutex formats are the same for I2C and MDIO/GPIO */
562 XP_SET_BITS(mutex_id
, XP_I2C_MUTEX
, ID
, phy_data
->port_id
);
563 XP_SET_BITS(mutex_id
, XP_I2C_MUTEX
, ACTIVE
, 1);
565 timeout
= jiffies
+ (5 * HZ
);
566 while (time_before(jiffies
, timeout
)) {
567 /* Must be all zeroes in order to obtain the mutex */
568 if (XP_IOREAD(pdata
, XP_I2C_MUTEX
) ||
569 XP_IOREAD(pdata
, XP_MDIO_MUTEX
)) {
570 usleep_range(100, 200);
574 /* Obtain the mutex */
575 XP_IOWRITE(pdata
, XP_I2C_MUTEX
, mutex_id
);
576 XP_IOWRITE(pdata
, XP_MDIO_MUTEX
, mutex_id
);
578 phy_data
->comm_owned
= 1;
582 mutex_unlock(&xgbe_phy_comm_lock
);
584 netdev_err(pdata
->netdev
, "unable to obtain hardware mutexes\n");
589 static int xgbe_phy_mdio_mii_write(struct xgbe_prv_data
*pdata
, int addr
,
592 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
594 if (reg
& MII_ADDR_C45
) {
595 if (phy_data
->phydev_mode
!= XGBE_MDIO_MODE_CL45
)
598 if (phy_data
->phydev_mode
!= XGBE_MDIO_MODE_CL22
)
602 return pdata
->hw_if
.write_ext_mii_regs(pdata
, addr
, reg
, val
);
605 static int xgbe_phy_i2c_mii_write(struct xgbe_prv_data
*pdata
, int reg
, u16 val
)
611 ret
= xgbe_phy_sfp_get_mux(pdata
);
615 mii_data
[0] = reg
& 0xff;
616 mii_val
= (__be16
*)&mii_data
[1];
617 *mii_val
= cpu_to_be16(val
);
619 ret
= xgbe_phy_i2c_write(pdata
, XGBE_SFP_PHY_ADDRESS
,
620 mii_data
, sizeof(mii_data
));
622 xgbe_phy_sfp_put_mux(pdata
);
627 static int xgbe_phy_mii_write(struct mii_bus
*mii
, int addr
, int reg
, u16 val
)
629 struct xgbe_prv_data
*pdata
= mii
->priv
;
630 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
633 ret
= xgbe_phy_get_comm_ownership(pdata
);
637 if (phy_data
->conn_type
== XGBE_CONN_TYPE_SFP
)
638 ret
= xgbe_phy_i2c_mii_write(pdata
, reg
, val
);
639 else if (phy_data
->conn_type
& XGBE_CONN_TYPE_MDIO
)
640 ret
= xgbe_phy_mdio_mii_write(pdata
, addr
, reg
, val
);
644 xgbe_phy_put_comm_ownership(pdata
);
649 static int xgbe_phy_mdio_mii_read(struct xgbe_prv_data
*pdata
, int addr
,
652 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
654 if (reg
& MII_ADDR_C45
) {
655 if (phy_data
->phydev_mode
!= XGBE_MDIO_MODE_CL45
)
658 if (phy_data
->phydev_mode
!= XGBE_MDIO_MODE_CL22
)
662 return pdata
->hw_if
.read_ext_mii_regs(pdata
, addr
, reg
);
665 static int xgbe_phy_i2c_mii_read(struct xgbe_prv_data
*pdata
, int reg
)
671 ret
= xgbe_phy_sfp_get_mux(pdata
);
676 ret
= xgbe_phy_i2c_read(pdata
, XGBE_SFP_PHY_ADDRESS
,
677 &mii_reg
, sizeof(mii_reg
),
678 &mii_val
, sizeof(mii_val
));
680 ret
= be16_to_cpu(mii_val
);
682 xgbe_phy_sfp_put_mux(pdata
);
687 static int xgbe_phy_mii_read(struct mii_bus
*mii
, int addr
, int reg
)
689 struct xgbe_prv_data
*pdata
= mii
->priv
;
690 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
693 ret
= xgbe_phy_get_comm_ownership(pdata
);
697 if (phy_data
->conn_type
== XGBE_CONN_TYPE_SFP
)
698 ret
= xgbe_phy_i2c_mii_read(pdata
, reg
);
699 else if (phy_data
->conn_type
& XGBE_CONN_TYPE_MDIO
)
700 ret
= xgbe_phy_mdio_mii_read(pdata
, addr
, reg
);
704 xgbe_phy_put_comm_ownership(pdata
);
709 static void xgbe_phy_sfp_phy_settings(struct xgbe_prv_data
*pdata
)
711 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
713 if (phy_data
->sfp_mod_absent
) {
714 pdata
->phy
.speed
= SPEED_UNKNOWN
;
715 pdata
->phy
.duplex
= DUPLEX_UNKNOWN
;
716 pdata
->phy
.autoneg
= AUTONEG_ENABLE
;
717 pdata
->phy
.advertising
= pdata
->phy
.supported
;
720 pdata
->phy
.advertising
&= ~ADVERTISED_Autoneg
;
721 pdata
->phy
.advertising
&= ~ADVERTISED_TP
;
722 pdata
->phy
.advertising
&= ~ADVERTISED_FIBRE
;
723 pdata
->phy
.advertising
&= ~ADVERTISED_100baseT_Full
;
724 pdata
->phy
.advertising
&= ~ADVERTISED_1000baseT_Full
;
725 pdata
->phy
.advertising
&= ~ADVERTISED_10000baseT_Full
;
726 pdata
->phy
.advertising
&= ~ADVERTISED_10000baseR_FEC
;
728 switch (phy_data
->sfp_base
) {
729 case XGBE_SFP_BASE_1000_T
:
730 case XGBE_SFP_BASE_1000_SX
:
731 case XGBE_SFP_BASE_1000_LX
:
732 case XGBE_SFP_BASE_1000_CX
:
733 pdata
->phy
.speed
= SPEED_UNKNOWN
;
734 pdata
->phy
.duplex
= DUPLEX_UNKNOWN
;
735 pdata
->phy
.autoneg
= AUTONEG_ENABLE
;
736 pdata
->phy
.advertising
|= ADVERTISED_Autoneg
;
738 case XGBE_SFP_BASE_10000_SR
:
739 case XGBE_SFP_BASE_10000_LR
:
740 case XGBE_SFP_BASE_10000_LRM
:
741 case XGBE_SFP_BASE_10000_ER
:
742 case XGBE_SFP_BASE_10000_CR
:
744 pdata
->phy
.speed
= SPEED_10000
;
745 pdata
->phy
.duplex
= DUPLEX_FULL
;
746 pdata
->phy
.autoneg
= AUTONEG_DISABLE
;
750 switch (phy_data
->sfp_base
) {
751 case XGBE_SFP_BASE_1000_T
:
752 case XGBE_SFP_BASE_1000_CX
:
753 case XGBE_SFP_BASE_10000_CR
:
754 pdata
->phy
.advertising
|= ADVERTISED_TP
;
757 pdata
->phy
.advertising
|= ADVERTISED_FIBRE
;
760 switch (phy_data
->sfp_speed
) {
761 case XGBE_SFP_SPEED_100_1000
:
762 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_100
)
763 pdata
->phy
.advertising
|= ADVERTISED_100baseT_Full
;
764 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_1000
)
765 pdata
->phy
.advertising
|= ADVERTISED_1000baseT_Full
;
767 case XGBE_SFP_SPEED_1000
:
768 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_1000
)
769 pdata
->phy
.advertising
|= ADVERTISED_1000baseT_Full
;
771 case XGBE_SFP_SPEED_10000
:
772 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_10000
)
773 pdata
->phy
.advertising
|= ADVERTISED_10000baseT_Full
;
776 /* Choose the fastest supported speed */
777 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_10000
)
778 pdata
->phy
.advertising
|= ADVERTISED_10000baseT_Full
;
779 else if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_1000
)
780 pdata
->phy
.advertising
|= ADVERTISED_1000baseT_Full
;
781 else if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_100
)
782 pdata
->phy
.advertising
|= ADVERTISED_100baseT_Full
;
786 static bool xgbe_phy_sfp_bit_rate(struct xgbe_sfp_eeprom
*sfp_eeprom
,
787 enum xgbe_sfp_speed sfp_speed
)
789 u8
*sfp_base
, min
, max
;
791 sfp_base
= sfp_eeprom
->base
;
794 case XGBE_SFP_SPEED_1000
:
795 min
= XGBE_SFP_BASE_BR_1GBE_MIN
;
796 max
= XGBE_SFP_BASE_BR_1GBE_MAX
;
798 case XGBE_SFP_SPEED_10000
:
799 min
= XGBE_SFP_BASE_BR_10GBE_MIN
;
800 max
= XGBE_SFP_BASE_BR_10GBE_MAX
;
806 return ((sfp_base
[XGBE_SFP_BASE_BR
] >= min
) &&
807 (sfp_base
[XGBE_SFP_BASE_BR
] <= max
));
810 static void xgbe_phy_free_phy_device(struct xgbe_prv_data
*pdata
)
812 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
814 if (phy_data
->phydev
) {
815 phy_detach(phy_data
->phydev
);
816 phy_device_remove(phy_data
->phydev
);
817 phy_device_free(phy_data
->phydev
);
818 phy_data
->phydev
= NULL
;
822 static bool xgbe_phy_finisar_phy_quirks(struct xgbe_prv_data
*pdata
)
824 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
825 unsigned int phy_id
= phy_data
->phydev
->phy_id
;
827 if ((phy_id
& 0xfffffff0) != 0x01ff0cc0)
830 /* Enable Base-T AN */
831 phy_write(phy_data
->phydev
, 0x16, 0x0001);
832 phy_write(phy_data
->phydev
, 0x00, 0x9140);
833 phy_write(phy_data
->phydev
, 0x16, 0x0000);
835 /* Enable SGMII at 100Base-T/1000Base-T Full Duplex */
836 phy_write(phy_data
->phydev
, 0x1b, 0x9084);
837 phy_write(phy_data
->phydev
, 0x09, 0x0e00);
838 phy_write(phy_data
->phydev
, 0x00, 0x8140);
839 phy_write(phy_data
->phydev
, 0x04, 0x0d01);
840 phy_write(phy_data
->phydev
, 0x00, 0x9140);
842 phy_data
->phydev
->supported
= PHY_GBIT_FEATURES
;
843 phy_data
->phydev
->supported
|= SUPPORTED_Pause
| SUPPORTED_Asym_Pause
;
844 phy_data
->phydev
->advertising
= phy_data
->phydev
->supported
;
846 netif_dbg(pdata
, drv
, pdata
->netdev
,
847 "Finisar PHY quirk in place\n");
852 static void xgbe_phy_external_phy_quirks(struct xgbe_prv_data
*pdata
)
854 if (xgbe_phy_finisar_phy_quirks(pdata
))
858 static int xgbe_phy_find_phy_device(struct xgbe_prv_data
*pdata
)
860 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
861 struct phy_device
*phydev
;
864 /* If we already have a PHY, just return */
865 if (phy_data
->phydev
)
868 /* Check for the use of an external PHY */
869 if (phy_data
->phydev_mode
== XGBE_MDIO_MODE_NONE
)
872 /* For SFP, only use an external PHY if available */
873 if ((phy_data
->port_mode
== XGBE_PORT_MODE_SFP
) &&
874 !phy_data
->sfp_phy_avail
)
877 /* Create and connect to the PHY device */
878 phydev
= get_phy_device(phy_data
->mii
, phy_data
->mdio_addr
,
879 (phy_data
->phydev_mode
== XGBE_MDIO_MODE_CL45
));
880 if (IS_ERR(phydev
)) {
881 netdev_err(pdata
->netdev
, "get_phy_device failed\n");
884 netif_dbg(pdata
, drv
, pdata
->netdev
, "external PHY id is %#010x\n",
887 /*TODO: If c45, add request_module based on one of the MMD ids? */
889 ret
= phy_device_register(phydev
);
891 netdev_err(pdata
->netdev
, "phy_device_register failed\n");
892 phy_device_free(phydev
);
896 ret
= phy_attach_direct(pdata
->netdev
, phydev
, phydev
->dev_flags
,
897 PHY_INTERFACE_MODE_SGMII
);
899 netdev_err(pdata
->netdev
, "phy_attach_direct failed\n");
900 phy_device_remove(phydev
);
901 phy_device_free(phydev
);
904 phy_data
->phydev
= phydev
;
906 xgbe_phy_external_phy_quirks(pdata
);
907 phydev
->advertising
&= pdata
->phy
.advertising
;
909 phy_start_aneg(phy_data
->phydev
);
914 static void xgbe_phy_sfp_external_phy(struct xgbe_prv_data
*pdata
)
916 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
919 if (!phy_data
->sfp_changed
)
922 phy_data
->sfp_phy_avail
= 0;
924 if (phy_data
->sfp_base
!= XGBE_SFP_BASE_1000_T
)
927 /* Check access to the PHY by reading CTRL1 */
928 ret
= xgbe_phy_i2c_mii_read(pdata
, MII_BMCR
);
932 /* Successfully accessed the PHY */
933 phy_data
->sfp_phy_avail
= 1;
936 static bool xgbe_phy_belfuse_parse_quirks(struct xgbe_prv_data
*pdata
)
938 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
939 struct xgbe_sfp_eeprom
*sfp_eeprom
= &phy_data
->sfp_eeprom
;
941 if (memcmp(&sfp_eeprom
->base
[XGBE_SFP_BASE_VENDOR_NAME
],
942 XGBE_BEL_FUSE_VENDOR
, XGBE_SFP_BASE_VENDOR_NAME_LEN
))
945 if (!memcmp(&sfp_eeprom
->base
[XGBE_SFP_BASE_VENDOR_PN
],
946 XGBE_BEL_FUSE_PARTNO
, XGBE_SFP_BASE_VENDOR_PN_LEN
)) {
947 phy_data
->sfp_base
= XGBE_SFP_BASE_1000_SX
;
948 phy_data
->sfp_cable
= XGBE_SFP_CABLE_ACTIVE
;
949 phy_data
->sfp_speed
= XGBE_SFP_SPEED_1000
;
950 if (phy_data
->sfp_changed
)
951 netif_dbg(pdata
, drv
, pdata
->netdev
,
952 "Bel-Fuse SFP quirk in place\n");
959 static bool xgbe_phy_sfp_parse_quirks(struct xgbe_prv_data
*pdata
)
961 if (xgbe_phy_belfuse_parse_quirks(pdata
))
967 static void xgbe_phy_sfp_parse_eeprom(struct xgbe_prv_data
*pdata
)
969 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
970 struct xgbe_sfp_eeprom
*sfp_eeprom
= &phy_data
->sfp_eeprom
;
973 sfp_base
= sfp_eeprom
->base
;
975 if (sfp_base
[XGBE_SFP_BASE_ID
] != XGBE_SFP_ID_SFP
)
978 if (sfp_base
[XGBE_SFP_BASE_EXT_ID
] != XGBE_SFP_EXT_ID_SFP
)
981 if (xgbe_phy_sfp_parse_quirks(pdata
))
984 /* Assume ACTIVE cable unless told it is PASSIVE */
985 if (sfp_base
[XGBE_SFP_BASE_CABLE
] & XGBE_SFP_BASE_CABLE_PASSIVE
) {
986 phy_data
->sfp_cable
= XGBE_SFP_CABLE_PASSIVE
;
987 phy_data
->sfp_cable_len
= sfp_base
[XGBE_SFP_BASE_CU_CABLE_LEN
];
989 phy_data
->sfp_cable
= XGBE_SFP_CABLE_ACTIVE
;
992 /* Determine the type of SFP */
993 if (sfp_base
[XGBE_SFP_BASE_10GBE_CC
] & XGBE_SFP_BASE_10GBE_CC_SR
)
994 phy_data
->sfp_base
= XGBE_SFP_BASE_10000_SR
;
995 else if (sfp_base
[XGBE_SFP_BASE_10GBE_CC
] & XGBE_SFP_BASE_10GBE_CC_LR
)
996 phy_data
->sfp_base
= XGBE_SFP_BASE_10000_LR
;
997 else if (sfp_base
[XGBE_SFP_BASE_10GBE_CC
] & XGBE_SFP_BASE_10GBE_CC_LRM
)
998 phy_data
->sfp_base
= XGBE_SFP_BASE_10000_LRM
;
999 else if (sfp_base
[XGBE_SFP_BASE_10GBE_CC
] & XGBE_SFP_BASE_10GBE_CC_ER
)
1000 phy_data
->sfp_base
= XGBE_SFP_BASE_10000_ER
;
1001 else if (sfp_base
[XGBE_SFP_BASE_1GBE_CC
] & XGBE_SFP_BASE_1GBE_CC_SX
)
1002 phy_data
->sfp_base
= XGBE_SFP_BASE_1000_SX
;
1003 else if (sfp_base
[XGBE_SFP_BASE_1GBE_CC
] & XGBE_SFP_BASE_1GBE_CC_LX
)
1004 phy_data
->sfp_base
= XGBE_SFP_BASE_1000_LX
;
1005 else if (sfp_base
[XGBE_SFP_BASE_1GBE_CC
] & XGBE_SFP_BASE_1GBE_CC_CX
)
1006 phy_data
->sfp_base
= XGBE_SFP_BASE_1000_CX
;
1007 else if (sfp_base
[XGBE_SFP_BASE_1GBE_CC
] & XGBE_SFP_BASE_1GBE_CC_T
)
1008 phy_data
->sfp_base
= XGBE_SFP_BASE_1000_T
;
1009 else if ((phy_data
->sfp_cable
== XGBE_SFP_CABLE_PASSIVE
) &&
1010 xgbe_phy_sfp_bit_rate(sfp_eeprom
, XGBE_SFP_SPEED_10000
))
1011 phy_data
->sfp_base
= XGBE_SFP_BASE_10000_CR
;
1013 switch (phy_data
->sfp_base
) {
1014 case XGBE_SFP_BASE_1000_T
:
1015 phy_data
->sfp_speed
= XGBE_SFP_SPEED_100_1000
;
1017 case XGBE_SFP_BASE_1000_SX
:
1018 case XGBE_SFP_BASE_1000_LX
:
1019 case XGBE_SFP_BASE_1000_CX
:
1020 phy_data
->sfp_speed
= XGBE_SFP_SPEED_1000
;
1022 case XGBE_SFP_BASE_10000_SR
:
1023 case XGBE_SFP_BASE_10000_LR
:
1024 case XGBE_SFP_BASE_10000_LRM
:
1025 case XGBE_SFP_BASE_10000_ER
:
1026 case XGBE_SFP_BASE_10000_CR
:
1027 phy_data
->sfp_speed
= XGBE_SFP_SPEED_10000
;
1034 static void xgbe_phy_sfp_eeprom_info(struct xgbe_prv_data
*pdata
,
1035 struct xgbe_sfp_eeprom
*sfp_eeprom
)
1037 struct xgbe_sfp_ascii sfp_ascii
;
1038 char *sfp_data
= (char *)&sfp_ascii
;
1040 netif_dbg(pdata
, drv
, pdata
->netdev
, "SFP detected:\n");
1041 memcpy(sfp_data
, &sfp_eeprom
->base
[XGBE_SFP_BASE_VENDOR_NAME
],
1042 XGBE_SFP_BASE_VENDOR_NAME_LEN
);
1043 sfp_data
[XGBE_SFP_BASE_VENDOR_NAME_LEN
] = '\0';
1044 netif_dbg(pdata
, drv
, pdata
->netdev
, " vendor: %s\n",
1047 memcpy(sfp_data
, &sfp_eeprom
->base
[XGBE_SFP_BASE_VENDOR_PN
],
1048 XGBE_SFP_BASE_VENDOR_PN_LEN
);
1049 sfp_data
[XGBE_SFP_BASE_VENDOR_PN_LEN
] = '\0';
1050 netif_dbg(pdata
, drv
, pdata
->netdev
, " part number: %s\n",
1053 memcpy(sfp_data
, &sfp_eeprom
->base
[XGBE_SFP_BASE_VENDOR_REV
],
1054 XGBE_SFP_BASE_VENDOR_REV_LEN
);
1055 sfp_data
[XGBE_SFP_BASE_VENDOR_REV_LEN
] = '\0';
1056 netif_dbg(pdata
, drv
, pdata
->netdev
, " revision level: %s\n",
1059 memcpy(sfp_data
, &sfp_eeprom
->extd
[XGBE_SFP_BASE_VENDOR_SN
],
1060 XGBE_SFP_BASE_VENDOR_SN_LEN
);
1061 sfp_data
[XGBE_SFP_BASE_VENDOR_SN_LEN
] = '\0';
1062 netif_dbg(pdata
, drv
, pdata
->netdev
, " serial number: %s\n",
1066 static bool xgbe_phy_sfp_verify_eeprom(u8 cc_in
, u8
*buf
, unsigned int len
)
1070 for (cc
= 0; len
; buf
++, len
--)
1073 return (cc
== cc_in
) ? true : false;
1076 static int xgbe_phy_sfp_read_eeprom(struct xgbe_prv_data
*pdata
)
1078 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1079 struct xgbe_sfp_eeprom sfp_eeprom
;
1083 ret
= xgbe_phy_sfp_get_mux(pdata
);
1085 netdev_err(pdata
->netdev
, "I2C error setting SFP MUX\n");
1089 /* Read the SFP serial ID eeprom */
1091 ret
= xgbe_phy_i2c_read(pdata
, XGBE_SFP_SERIAL_ID_ADDRESS
,
1092 &eeprom_addr
, sizeof(eeprom_addr
),
1093 &sfp_eeprom
, sizeof(sfp_eeprom
));
1095 netdev_err(pdata
->netdev
, "I2C error reading SFP EEPROM\n");
1099 /* Validate the contents read */
1100 if (!xgbe_phy_sfp_verify_eeprom(sfp_eeprom
.base
[XGBE_SFP_BASE_CC
],
1102 sizeof(sfp_eeprom
.base
) - 1)) {
1107 if (!xgbe_phy_sfp_verify_eeprom(sfp_eeprom
.extd
[XGBE_SFP_EXTD_CC
],
1109 sizeof(sfp_eeprom
.extd
) - 1)) {
1114 /* Check for an added or changed SFP */
1115 if (memcmp(&phy_data
->sfp_eeprom
, &sfp_eeprom
, sizeof(sfp_eeprom
))) {
1116 phy_data
->sfp_changed
= 1;
1118 if (netif_msg_drv(pdata
))
1119 xgbe_phy_sfp_eeprom_info(pdata
, &sfp_eeprom
);
1121 memcpy(&phy_data
->sfp_eeprom
, &sfp_eeprom
, sizeof(sfp_eeprom
));
1123 if (sfp_eeprom
.extd
[XGBE_SFP_EXTD_SFF_8472
]) {
1124 u8 diag_type
= sfp_eeprom
.extd
[XGBE_SFP_EXTD_DIAG
];
1126 if (!(diag_type
& XGBE_SFP_EXTD_DIAG_ADDR_CHANGE
))
1127 phy_data
->sfp_diags
= 1;
1130 xgbe_phy_free_phy_device(pdata
);
1132 phy_data
->sfp_changed
= 0;
1136 xgbe_phy_sfp_put_mux(pdata
);
1141 static void xgbe_phy_sfp_signals(struct xgbe_prv_data
*pdata
)
1143 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1144 unsigned int gpio_input
;
1145 u8 gpio_reg
, gpio_ports
[2];
1148 /* Read the input port registers */
1150 ret
= xgbe_phy_i2c_read(pdata
, phy_data
->sfp_gpio_address
,
1151 &gpio_reg
, sizeof(gpio_reg
),
1152 gpio_ports
, sizeof(gpio_ports
));
1154 netdev_err(pdata
->netdev
, "I2C error reading SFP GPIOs\n");
1158 gpio_input
= (gpio_ports
[1] << 8) | gpio_ports
[0];
1160 if (phy_data
->sfp_gpio_mask
& XGBE_GPIO_NO_MOD_ABSENT
) {
1161 /* No GPIO, just assume the module is present for now */
1162 phy_data
->sfp_mod_absent
= 0;
1164 if (!(gpio_input
& (1 << phy_data
->sfp_gpio_mod_absent
)))
1165 phy_data
->sfp_mod_absent
= 0;
1168 if (!(phy_data
->sfp_gpio_mask
& XGBE_GPIO_NO_RX_LOS
) &&
1169 (gpio_input
& (1 << phy_data
->sfp_gpio_rx_los
)))
1170 phy_data
->sfp_rx_los
= 1;
1172 if (!(phy_data
->sfp_gpio_mask
& XGBE_GPIO_NO_TX_FAULT
) &&
1173 (gpio_input
& (1 << phy_data
->sfp_gpio_tx_fault
)))
1174 phy_data
->sfp_tx_fault
= 1;
1177 static void xgbe_phy_sfp_mod_absent(struct xgbe_prv_data
*pdata
)
1179 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1181 xgbe_phy_free_phy_device(pdata
);
1183 phy_data
->sfp_mod_absent
= 1;
1184 phy_data
->sfp_phy_avail
= 0;
1185 memset(&phy_data
->sfp_eeprom
, 0, sizeof(phy_data
->sfp_eeprom
));
1188 static void xgbe_phy_sfp_reset(struct xgbe_phy_data
*phy_data
)
1190 phy_data
->sfp_rx_los
= 0;
1191 phy_data
->sfp_tx_fault
= 0;
1192 phy_data
->sfp_mod_absent
= 1;
1193 phy_data
->sfp_diags
= 0;
1194 phy_data
->sfp_base
= XGBE_SFP_BASE_UNKNOWN
;
1195 phy_data
->sfp_cable
= XGBE_SFP_CABLE_UNKNOWN
;
1196 phy_data
->sfp_speed
= XGBE_SFP_SPEED_UNKNOWN
;
1199 static void xgbe_phy_sfp_detect(struct xgbe_prv_data
*pdata
)
1201 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1204 /* Reset the SFP signals and info */
1205 xgbe_phy_sfp_reset(phy_data
);
1207 ret
= xgbe_phy_get_comm_ownership(pdata
);
1211 /* Read the SFP signals and check for module presence */
1212 xgbe_phy_sfp_signals(pdata
);
1213 if (phy_data
->sfp_mod_absent
) {
1214 xgbe_phy_sfp_mod_absent(pdata
);
1218 ret
= xgbe_phy_sfp_read_eeprom(pdata
);
1220 /* Treat any error as if there isn't an SFP plugged in */
1221 xgbe_phy_sfp_reset(phy_data
);
1222 xgbe_phy_sfp_mod_absent(pdata
);
1226 xgbe_phy_sfp_parse_eeprom(pdata
);
1228 xgbe_phy_sfp_external_phy(pdata
);
1231 xgbe_phy_sfp_phy_settings(pdata
);
1233 xgbe_phy_put_comm_ownership(pdata
);
1236 static void xgbe_phy_phydev_flowctrl(struct xgbe_prv_data
*pdata
)
1238 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1239 u16 lcl_adv
= 0, rmt_adv
= 0;
1242 pdata
->phy
.tx_pause
= 0;
1243 pdata
->phy
.rx_pause
= 0;
1245 if (!phy_data
->phydev
)
1248 if (phy_data
->phydev
->advertising
& ADVERTISED_Pause
)
1249 lcl_adv
|= ADVERTISE_PAUSE_CAP
;
1250 if (phy_data
->phydev
->advertising
& ADVERTISED_Asym_Pause
)
1251 lcl_adv
|= ADVERTISE_PAUSE_ASYM
;
1253 if (phy_data
->phydev
->pause
) {
1254 pdata
->phy
.lp_advertising
|= ADVERTISED_Pause
;
1255 rmt_adv
|= LPA_PAUSE_CAP
;
1257 if (phy_data
->phydev
->asym_pause
) {
1258 pdata
->phy
.lp_advertising
|= ADVERTISED_Asym_Pause
;
1259 rmt_adv
|= LPA_PAUSE_ASYM
;
1262 fc
= mii_resolve_flowctrl_fdx(lcl_adv
, rmt_adv
);
1263 if (fc
& FLOW_CTRL_TX
)
1264 pdata
->phy
.tx_pause
= 1;
1265 if (fc
& FLOW_CTRL_RX
)
1266 pdata
->phy
.rx_pause
= 1;
1269 static enum xgbe_mode
xgbe_phy_an37_sgmii_outcome(struct xgbe_prv_data
*pdata
)
1271 enum xgbe_mode mode
;
1273 pdata
->phy
.lp_advertising
|= ADVERTISED_Autoneg
;
1274 pdata
->phy
.lp_advertising
|= ADVERTISED_TP
;
1276 /* Use external PHY to determine flow control */
1277 if (pdata
->phy
.pause_autoneg
)
1278 xgbe_phy_phydev_flowctrl(pdata
);
1280 switch (pdata
->an_status
& XGBE_SGMII_AN_LINK_SPEED
) {
1281 case XGBE_SGMII_AN_LINK_SPEED_100
:
1282 if (pdata
->an_status
& XGBE_SGMII_AN_LINK_DUPLEX
) {
1283 pdata
->phy
.lp_advertising
|= ADVERTISED_100baseT_Full
;
1284 mode
= XGBE_MODE_SGMII_100
;
1286 /* Half-duplex not supported */
1287 pdata
->phy
.lp_advertising
|= ADVERTISED_100baseT_Half
;
1288 mode
= XGBE_MODE_UNKNOWN
;
1291 case XGBE_SGMII_AN_LINK_SPEED_1000
:
1292 if (pdata
->an_status
& XGBE_SGMII_AN_LINK_DUPLEX
) {
1293 pdata
->phy
.lp_advertising
|= ADVERTISED_1000baseT_Full
;
1294 mode
= XGBE_MODE_SGMII_1000
;
1296 /* Half-duplex not supported */
1297 pdata
->phy
.lp_advertising
|= ADVERTISED_1000baseT_Half
;
1298 mode
= XGBE_MODE_UNKNOWN
;
1302 mode
= XGBE_MODE_UNKNOWN
;
1308 static enum xgbe_mode
xgbe_phy_an37_outcome(struct xgbe_prv_data
*pdata
)
1310 enum xgbe_mode mode
;
1311 unsigned int ad_reg
, lp_reg
;
1313 pdata
->phy
.lp_advertising
|= ADVERTISED_Autoneg
;
1314 pdata
->phy
.lp_advertising
|= ADVERTISED_FIBRE
;
1316 /* Compare Advertisement and Link Partner register */
1317 ad_reg
= XMDIO_READ(pdata
, MDIO_MMD_VEND2
, MDIO_VEND2_AN_ADVERTISE
);
1318 lp_reg
= XMDIO_READ(pdata
, MDIO_MMD_VEND2
, MDIO_VEND2_AN_LP_ABILITY
);
1320 pdata
->phy
.lp_advertising
|= ADVERTISED_Pause
;
1322 pdata
->phy
.lp_advertising
|= ADVERTISED_Asym_Pause
;
1324 if (pdata
->phy
.pause_autoneg
) {
1325 /* Set flow control based on auto-negotiation result */
1326 pdata
->phy
.tx_pause
= 0;
1327 pdata
->phy
.rx_pause
= 0;
1329 if (ad_reg
& lp_reg
& 0x100) {
1330 pdata
->phy
.tx_pause
= 1;
1331 pdata
->phy
.rx_pause
= 1;
1332 } else if (ad_reg
& lp_reg
& 0x80) {
1334 pdata
->phy
.rx_pause
= 1;
1335 else if (lp_reg
& 0x100)
1336 pdata
->phy
.tx_pause
= 1;
1341 pdata
->phy
.lp_advertising
|= ADVERTISED_1000baseT_Half
;
1343 pdata
->phy
.lp_advertising
|= ADVERTISED_1000baseT_Full
;
1345 /* Half duplex is not supported */
1347 mode
= (ad_reg
& 0x20) ? XGBE_MODE_X
: XGBE_MODE_UNKNOWN
;
1352 static enum xgbe_mode
xgbe_phy_an73_redrv_outcome(struct xgbe_prv_data
*pdata
)
1354 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1355 enum xgbe_mode mode
;
1356 unsigned int ad_reg
, lp_reg
;
1358 pdata
->phy
.lp_advertising
|= ADVERTISED_Autoneg
;
1359 pdata
->phy
.lp_advertising
|= ADVERTISED_Backplane
;
1361 /* Use external PHY to determine flow control */
1362 if (pdata
->phy
.pause_autoneg
)
1363 xgbe_phy_phydev_flowctrl(pdata
);
1365 /* Compare Advertisement and Link Partner register 2 */
1366 ad_reg
= XMDIO_READ(pdata
, MDIO_MMD_AN
, MDIO_AN_ADVERTISE
+ 1);
1367 lp_reg
= XMDIO_READ(pdata
, MDIO_MMD_AN
, MDIO_AN_LPA
+ 1);
1369 pdata
->phy
.lp_advertising
|= ADVERTISED_10000baseKR_Full
;
1371 pdata
->phy
.lp_advertising
|= ADVERTISED_1000baseKX_Full
;
1374 if (ad_reg
& 0x80) {
1375 switch (phy_data
->port_mode
) {
1376 case XGBE_PORT_MODE_BACKPLANE
:
1377 mode
= XGBE_MODE_KR
;
1380 mode
= XGBE_MODE_SFI
;
1383 } else if (ad_reg
& 0x20) {
1384 switch (phy_data
->port_mode
) {
1385 case XGBE_PORT_MODE_BACKPLANE
:
1386 mode
= XGBE_MODE_KX_1000
;
1388 case XGBE_PORT_MODE_1000BASE_X
:
1391 case XGBE_PORT_MODE_SFP
:
1392 switch (phy_data
->sfp_base
) {
1393 case XGBE_SFP_BASE_1000_T
:
1394 if (phy_data
->phydev
&&
1395 (phy_data
->phydev
->speed
== SPEED_100
))
1396 mode
= XGBE_MODE_SGMII_100
;
1398 mode
= XGBE_MODE_SGMII_1000
;
1400 case XGBE_SFP_BASE_1000_SX
:
1401 case XGBE_SFP_BASE_1000_LX
:
1402 case XGBE_SFP_BASE_1000_CX
:
1409 if (phy_data
->phydev
&&
1410 (phy_data
->phydev
->speed
== SPEED_100
))
1411 mode
= XGBE_MODE_SGMII_100
;
1413 mode
= XGBE_MODE_SGMII_1000
;
1417 mode
= XGBE_MODE_UNKNOWN
;
1420 /* Compare Advertisement and Link Partner register 3 */
1421 ad_reg
= XMDIO_READ(pdata
, MDIO_MMD_AN
, MDIO_AN_ADVERTISE
+ 2);
1422 lp_reg
= XMDIO_READ(pdata
, MDIO_MMD_AN
, MDIO_AN_LPA
+ 2);
1423 if (lp_reg
& 0xc000)
1424 pdata
->phy
.lp_advertising
|= ADVERTISED_10000baseR_FEC
;
1429 static enum xgbe_mode
xgbe_phy_an73_outcome(struct xgbe_prv_data
*pdata
)
1431 enum xgbe_mode mode
;
1432 unsigned int ad_reg
, lp_reg
;
1434 pdata
->phy
.lp_advertising
|= ADVERTISED_Autoneg
;
1435 pdata
->phy
.lp_advertising
|= ADVERTISED_Backplane
;
1437 /* Compare Advertisement and Link Partner register 1 */
1438 ad_reg
= XMDIO_READ(pdata
, MDIO_MMD_AN
, MDIO_AN_ADVERTISE
);
1439 lp_reg
= XMDIO_READ(pdata
, MDIO_MMD_AN
, MDIO_AN_LPA
);
1441 pdata
->phy
.lp_advertising
|= ADVERTISED_Pause
;
1443 pdata
->phy
.lp_advertising
|= ADVERTISED_Asym_Pause
;
1445 if (pdata
->phy
.pause_autoneg
) {
1446 /* Set flow control based on auto-negotiation result */
1447 pdata
->phy
.tx_pause
= 0;
1448 pdata
->phy
.rx_pause
= 0;
1450 if (ad_reg
& lp_reg
& 0x400) {
1451 pdata
->phy
.tx_pause
= 1;
1452 pdata
->phy
.rx_pause
= 1;
1453 } else if (ad_reg
& lp_reg
& 0x800) {
1455 pdata
->phy
.rx_pause
= 1;
1456 else if (lp_reg
& 0x400)
1457 pdata
->phy
.tx_pause
= 1;
1461 /* Compare Advertisement and Link Partner register 2 */
1462 ad_reg
= XMDIO_READ(pdata
, MDIO_MMD_AN
, MDIO_AN_ADVERTISE
+ 1);
1463 lp_reg
= XMDIO_READ(pdata
, MDIO_MMD_AN
, MDIO_AN_LPA
+ 1);
1465 pdata
->phy
.lp_advertising
|= ADVERTISED_10000baseKR_Full
;
1467 pdata
->phy
.lp_advertising
|= ADVERTISED_1000baseKX_Full
;
1471 mode
= XGBE_MODE_KR
;
1472 else if (ad_reg
& 0x20)
1473 mode
= XGBE_MODE_KX_1000
;
1475 mode
= XGBE_MODE_UNKNOWN
;
1477 /* Compare Advertisement and Link Partner register 3 */
1478 ad_reg
= XMDIO_READ(pdata
, MDIO_MMD_AN
, MDIO_AN_ADVERTISE
+ 2);
1479 lp_reg
= XMDIO_READ(pdata
, MDIO_MMD_AN
, MDIO_AN_LPA
+ 2);
1480 if (lp_reg
& 0xc000)
1481 pdata
->phy
.lp_advertising
|= ADVERTISED_10000baseR_FEC
;
1486 static enum xgbe_mode
xgbe_phy_an_outcome(struct xgbe_prv_data
*pdata
)
1488 switch (pdata
->an_mode
) {
1489 case XGBE_AN_MODE_CL73
:
1490 return xgbe_phy_an73_outcome(pdata
);
1491 case XGBE_AN_MODE_CL73_REDRV
:
1492 return xgbe_phy_an73_redrv_outcome(pdata
);
1493 case XGBE_AN_MODE_CL37
:
1494 return xgbe_phy_an37_outcome(pdata
);
1495 case XGBE_AN_MODE_CL37_SGMII
:
1496 return xgbe_phy_an37_sgmii_outcome(pdata
);
1498 return XGBE_MODE_UNKNOWN
;
1502 static unsigned int xgbe_phy_an_advertising(struct xgbe_prv_data
*pdata
)
1504 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1505 unsigned int advertising
;
1507 /* Without a re-driver, just return current advertising */
1508 if (!phy_data
->redrv
)
1509 return pdata
->phy
.advertising
;
1511 /* With the KR re-driver we need to advertise a single speed */
1512 advertising
= pdata
->phy
.advertising
;
1513 advertising
&= ~ADVERTISED_1000baseKX_Full
;
1514 advertising
&= ~ADVERTISED_10000baseKR_Full
;
1516 switch (phy_data
->port_mode
) {
1517 case XGBE_PORT_MODE_BACKPLANE
:
1518 advertising
|= ADVERTISED_10000baseKR_Full
;
1520 case XGBE_PORT_MODE_BACKPLANE_2500
:
1521 advertising
|= ADVERTISED_1000baseKX_Full
;
1523 case XGBE_PORT_MODE_1000BASE_T
:
1524 case XGBE_PORT_MODE_1000BASE_X
:
1525 case XGBE_PORT_MODE_NBASE_T
:
1526 advertising
|= ADVERTISED_1000baseKX_Full
;
1528 case XGBE_PORT_MODE_10GBASE_T
:
1529 if (phy_data
->phydev
&&
1530 (phy_data
->phydev
->speed
== SPEED_10000
))
1531 advertising
|= ADVERTISED_10000baseKR_Full
;
1533 advertising
|= ADVERTISED_1000baseKX_Full
;
1535 case XGBE_PORT_MODE_10GBASE_R
:
1536 advertising
|= ADVERTISED_10000baseKR_Full
;
1538 case XGBE_PORT_MODE_SFP
:
1539 switch (phy_data
->sfp_base
) {
1540 case XGBE_SFP_BASE_1000_T
:
1541 case XGBE_SFP_BASE_1000_SX
:
1542 case XGBE_SFP_BASE_1000_LX
:
1543 case XGBE_SFP_BASE_1000_CX
:
1544 advertising
|= ADVERTISED_1000baseKX_Full
;
1547 advertising
|= ADVERTISED_10000baseKR_Full
;
1552 advertising
|= ADVERTISED_10000baseKR_Full
;
1559 static int xgbe_phy_an_config(struct xgbe_prv_data
*pdata
)
1561 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1564 ret
= xgbe_phy_find_phy_device(pdata
);
1568 if (!phy_data
->phydev
)
1571 phy_data
->phydev
->autoneg
= pdata
->phy
.autoneg
;
1572 phy_data
->phydev
->advertising
= phy_data
->phydev
->supported
&
1573 pdata
->phy
.advertising
;
1575 if (pdata
->phy
.autoneg
!= AUTONEG_ENABLE
) {
1576 phy_data
->phydev
->speed
= pdata
->phy
.speed
;
1577 phy_data
->phydev
->duplex
= pdata
->phy
.duplex
;
1580 ret
= phy_start_aneg(phy_data
->phydev
);
1585 static enum xgbe_an_mode
xgbe_phy_an_sfp_mode(struct xgbe_phy_data
*phy_data
)
1587 switch (phy_data
->sfp_base
) {
1588 case XGBE_SFP_BASE_1000_T
:
1589 return XGBE_AN_MODE_CL37_SGMII
;
1590 case XGBE_SFP_BASE_1000_SX
:
1591 case XGBE_SFP_BASE_1000_LX
:
1592 case XGBE_SFP_BASE_1000_CX
:
1593 return XGBE_AN_MODE_CL37
;
1595 return XGBE_AN_MODE_NONE
;
1599 static enum xgbe_an_mode
xgbe_phy_an_mode(struct xgbe_prv_data
*pdata
)
1601 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1603 /* A KR re-driver will always require CL73 AN */
1604 if (phy_data
->redrv
)
1605 return XGBE_AN_MODE_CL73_REDRV
;
1607 switch (phy_data
->port_mode
) {
1608 case XGBE_PORT_MODE_BACKPLANE
:
1609 return XGBE_AN_MODE_CL73
;
1610 case XGBE_PORT_MODE_BACKPLANE_2500
:
1611 return XGBE_AN_MODE_NONE
;
1612 case XGBE_PORT_MODE_1000BASE_T
:
1613 return XGBE_AN_MODE_CL37_SGMII
;
1614 case XGBE_PORT_MODE_1000BASE_X
:
1615 return XGBE_AN_MODE_CL37
;
1616 case XGBE_PORT_MODE_NBASE_T
:
1617 return XGBE_AN_MODE_CL37_SGMII
;
1618 case XGBE_PORT_MODE_10GBASE_T
:
1619 return XGBE_AN_MODE_CL73
;
1620 case XGBE_PORT_MODE_10GBASE_R
:
1621 return XGBE_AN_MODE_NONE
;
1622 case XGBE_PORT_MODE_SFP
:
1623 return xgbe_phy_an_sfp_mode(phy_data
);
1625 return XGBE_AN_MODE_NONE
;
1629 static int xgbe_phy_set_redrv_mode_mdio(struct xgbe_prv_data
*pdata
,
1630 enum xgbe_phy_redrv_mode mode
)
1632 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1633 u16 redrv_reg
, redrv_val
;
1635 redrv_reg
= XGBE_PHY_REDRV_MODE_REG
+ (phy_data
->redrv_lane
* 0x1000);
1636 redrv_val
= (u16
)mode
;
1638 return pdata
->hw_if
.write_ext_mii_regs(pdata
, phy_data
->redrv_addr
,
1639 redrv_reg
, redrv_val
);
1642 static int xgbe_phy_set_redrv_mode_i2c(struct xgbe_prv_data
*pdata
,
1643 enum xgbe_phy_redrv_mode mode
)
1645 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1646 unsigned int redrv_reg
;
1649 /* Calculate the register to write */
1650 redrv_reg
= XGBE_PHY_REDRV_MODE_REG
+ (phy_data
->redrv_lane
* 0x1000);
1652 ret
= xgbe_phy_redrv_write(pdata
, redrv_reg
, mode
);
1657 static void xgbe_phy_set_redrv_mode(struct xgbe_prv_data
*pdata
)
1659 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1660 enum xgbe_phy_redrv_mode mode
;
1663 if (!phy_data
->redrv
)
1666 mode
= XGBE_PHY_REDRV_MODE_CX
;
1667 if ((phy_data
->port_mode
== XGBE_PORT_MODE_SFP
) &&
1668 (phy_data
->sfp_base
!= XGBE_SFP_BASE_1000_CX
) &&
1669 (phy_data
->sfp_base
!= XGBE_SFP_BASE_10000_CR
))
1670 mode
= XGBE_PHY_REDRV_MODE_SR
;
1672 ret
= xgbe_phy_get_comm_ownership(pdata
);
1676 if (phy_data
->redrv_if
)
1677 xgbe_phy_set_redrv_mode_i2c(pdata
, mode
);
1679 xgbe_phy_set_redrv_mode_mdio(pdata
, mode
);
1681 xgbe_phy_put_comm_ownership(pdata
);
1684 static void xgbe_phy_start_ratechange(struct xgbe_prv_data
*pdata
)
1686 if (!XP_IOREAD_BITS(pdata
, XP_DRIVER_INT_RO
, STATUS
))
1689 /* Log if a previous command did not complete */
1690 netif_dbg(pdata
, link
, pdata
->netdev
,
1691 "firmware mailbox not ready for command\n");
1694 static void xgbe_phy_complete_ratechange(struct xgbe_prv_data
*pdata
)
1698 /* Wait for command to complete */
1699 wait
= XGBE_RATECHANGE_COUNT
;
1701 if (!XP_IOREAD_BITS(pdata
, XP_DRIVER_INT_RO
, STATUS
))
1704 usleep_range(1000, 2000);
1707 netif_dbg(pdata
, link
, pdata
->netdev
,
1708 "firmware mailbox command did not complete\n");
1711 static void xgbe_phy_rrc(struct xgbe_prv_data
*pdata
)
1715 xgbe_phy_start_ratechange(pdata
);
1717 /* Receiver Reset Cycle */
1719 XP_SET_BITS(s0
, XP_DRIVER_SCRATCH_0
, COMMAND
, 5);
1720 XP_SET_BITS(s0
, XP_DRIVER_SCRATCH_0
, SUB_COMMAND
, 0);
1722 /* Call FW to make the change */
1723 XP_IOWRITE(pdata
, XP_DRIVER_SCRATCH_0
, s0
);
1724 XP_IOWRITE(pdata
, XP_DRIVER_SCRATCH_1
, 0);
1725 XP_IOWRITE_BITS(pdata
, XP_DRIVER_INT_REQ
, REQUEST
, 1);
1727 xgbe_phy_complete_ratechange(pdata
);
1729 netif_dbg(pdata
, link
, pdata
->netdev
, "receiver reset complete\n");
1732 static void xgbe_phy_power_off(struct xgbe_prv_data
*pdata
)
1734 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1736 xgbe_phy_start_ratechange(pdata
);
1738 /* Call FW to make the change */
1739 XP_IOWRITE(pdata
, XP_DRIVER_SCRATCH_0
, 0);
1740 XP_IOWRITE(pdata
, XP_DRIVER_SCRATCH_1
, 0);
1741 XP_IOWRITE_BITS(pdata
, XP_DRIVER_INT_REQ
, REQUEST
, 1);
1743 xgbe_phy_complete_ratechange(pdata
);
1745 phy_data
->cur_mode
= XGBE_MODE_UNKNOWN
;
1747 netif_dbg(pdata
, link
, pdata
->netdev
, "phy powered off\n");
1750 static void xgbe_phy_sfi_mode(struct xgbe_prv_data
*pdata
)
1752 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1755 xgbe_phy_set_redrv_mode(pdata
);
1757 xgbe_phy_start_ratechange(pdata
);
1761 XP_SET_BITS(s0
, XP_DRIVER_SCRATCH_0
, COMMAND
, 3);
1762 if (phy_data
->sfp_cable
!= XGBE_SFP_CABLE_PASSIVE
) {
1763 XP_SET_BITS(s0
, XP_DRIVER_SCRATCH_0
, SUB_COMMAND
, 0);
1765 if (phy_data
->sfp_cable_len
<= 1)
1766 XP_SET_BITS(s0
, XP_DRIVER_SCRATCH_0
, SUB_COMMAND
, 1);
1767 else if (phy_data
->sfp_cable_len
<= 3)
1768 XP_SET_BITS(s0
, XP_DRIVER_SCRATCH_0
, SUB_COMMAND
, 2);
1769 else if (phy_data
->sfp_cable_len
<= 5)
1770 XP_SET_BITS(s0
, XP_DRIVER_SCRATCH_0
, SUB_COMMAND
, 3);
1772 XP_SET_BITS(s0
, XP_DRIVER_SCRATCH_0
, SUB_COMMAND
, 3);
1775 /* Call FW to make the change */
1776 XP_IOWRITE(pdata
, XP_DRIVER_SCRATCH_0
, s0
);
1777 XP_IOWRITE(pdata
, XP_DRIVER_SCRATCH_1
, 0);
1778 XP_IOWRITE_BITS(pdata
, XP_DRIVER_INT_REQ
, REQUEST
, 1);
1780 xgbe_phy_complete_ratechange(pdata
);
1782 phy_data
->cur_mode
= XGBE_MODE_SFI
;
1784 netif_dbg(pdata
, link
, pdata
->netdev
, "10GbE SFI mode set\n");
1787 static void xgbe_phy_x_mode(struct xgbe_prv_data
*pdata
)
1789 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1792 xgbe_phy_set_redrv_mode(pdata
);
1794 xgbe_phy_start_ratechange(pdata
);
1798 XP_SET_BITS(s0
, XP_DRIVER_SCRATCH_0
, COMMAND
, 1);
1799 XP_SET_BITS(s0
, XP_DRIVER_SCRATCH_0
, SUB_COMMAND
, 3);
1801 /* Call FW to make the change */
1802 XP_IOWRITE(pdata
, XP_DRIVER_SCRATCH_0
, s0
);
1803 XP_IOWRITE(pdata
, XP_DRIVER_SCRATCH_1
, 0);
1804 XP_IOWRITE_BITS(pdata
, XP_DRIVER_INT_REQ
, REQUEST
, 1);
1806 xgbe_phy_complete_ratechange(pdata
);
1808 phy_data
->cur_mode
= XGBE_MODE_X
;
1810 netif_dbg(pdata
, link
, pdata
->netdev
, "1GbE X mode set\n");
1813 static void xgbe_phy_sgmii_1000_mode(struct xgbe_prv_data
*pdata
)
1815 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1818 xgbe_phy_set_redrv_mode(pdata
);
1820 xgbe_phy_start_ratechange(pdata
);
1824 XP_SET_BITS(s0
, XP_DRIVER_SCRATCH_0
, COMMAND
, 1);
1825 XP_SET_BITS(s0
, XP_DRIVER_SCRATCH_0
, SUB_COMMAND
, 2);
1827 /* Call FW to make the change */
1828 XP_IOWRITE(pdata
, XP_DRIVER_SCRATCH_0
, s0
);
1829 XP_IOWRITE(pdata
, XP_DRIVER_SCRATCH_1
, 0);
1830 XP_IOWRITE_BITS(pdata
, XP_DRIVER_INT_REQ
, REQUEST
, 1);
1832 xgbe_phy_complete_ratechange(pdata
);
1834 phy_data
->cur_mode
= XGBE_MODE_SGMII_1000
;
1836 netif_dbg(pdata
, link
, pdata
->netdev
, "1GbE SGMII mode set\n");
1839 static void xgbe_phy_sgmii_100_mode(struct xgbe_prv_data
*pdata
)
1841 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1844 xgbe_phy_set_redrv_mode(pdata
);
1846 xgbe_phy_start_ratechange(pdata
);
1850 XP_SET_BITS(s0
, XP_DRIVER_SCRATCH_0
, COMMAND
, 1);
1851 XP_SET_BITS(s0
, XP_DRIVER_SCRATCH_0
, SUB_COMMAND
, 1);
1853 /* Call FW to make the change */
1854 XP_IOWRITE(pdata
, XP_DRIVER_SCRATCH_0
, s0
);
1855 XP_IOWRITE(pdata
, XP_DRIVER_SCRATCH_1
, 0);
1856 XP_IOWRITE_BITS(pdata
, XP_DRIVER_INT_REQ
, REQUEST
, 1);
1858 xgbe_phy_complete_ratechange(pdata
);
1860 phy_data
->cur_mode
= XGBE_MODE_SGMII_100
;
1862 netif_dbg(pdata
, link
, pdata
->netdev
, "100MbE SGMII mode set\n");
1865 static void xgbe_phy_kr_mode(struct xgbe_prv_data
*pdata
)
1867 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1870 xgbe_phy_set_redrv_mode(pdata
);
1872 xgbe_phy_start_ratechange(pdata
);
1876 XP_SET_BITS(s0
, XP_DRIVER_SCRATCH_0
, COMMAND
, 4);
1877 XP_SET_BITS(s0
, XP_DRIVER_SCRATCH_0
, SUB_COMMAND
, 0);
1879 /* Call FW to make the change */
1880 XP_IOWRITE(pdata
, XP_DRIVER_SCRATCH_0
, s0
);
1881 XP_IOWRITE(pdata
, XP_DRIVER_SCRATCH_1
, 0);
1882 XP_IOWRITE_BITS(pdata
, XP_DRIVER_INT_REQ
, REQUEST
, 1);
1884 xgbe_phy_complete_ratechange(pdata
);
1886 phy_data
->cur_mode
= XGBE_MODE_KR
;
1888 netif_dbg(pdata
, link
, pdata
->netdev
, "10GbE KR mode set\n");
1891 static void xgbe_phy_kx_2500_mode(struct xgbe_prv_data
*pdata
)
1893 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1896 xgbe_phy_set_redrv_mode(pdata
);
1898 xgbe_phy_start_ratechange(pdata
);
1902 XP_SET_BITS(s0
, XP_DRIVER_SCRATCH_0
, COMMAND
, 2);
1903 XP_SET_BITS(s0
, XP_DRIVER_SCRATCH_0
, SUB_COMMAND
, 0);
1905 /* Call FW to make the change */
1906 XP_IOWRITE(pdata
, XP_DRIVER_SCRATCH_0
, s0
);
1907 XP_IOWRITE(pdata
, XP_DRIVER_SCRATCH_1
, 0);
1908 XP_IOWRITE_BITS(pdata
, XP_DRIVER_INT_REQ
, REQUEST
, 1);
1910 xgbe_phy_complete_ratechange(pdata
);
1912 phy_data
->cur_mode
= XGBE_MODE_KX_2500
;
1914 netif_dbg(pdata
, link
, pdata
->netdev
, "2.5GbE KX mode set\n");
1917 static void xgbe_phy_kx_1000_mode(struct xgbe_prv_data
*pdata
)
1919 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1922 xgbe_phy_set_redrv_mode(pdata
);
1924 xgbe_phy_start_ratechange(pdata
);
1928 XP_SET_BITS(s0
, XP_DRIVER_SCRATCH_0
, COMMAND
, 1);
1929 XP_SET_BITS(s0
, XP_DRIVER_SCRATCH_0
, SUB_COMMAND
, 3);
1931 /* Call FW to make the change */
1932 XP_IOWRITE(pdata
, XP_DRIVER_SCRATCH_0
, s0
);
1933 XP_IOWRITE(pdata
, XP_DRIVER_SCRATCH_1
, 0);
1934 XP_IOWRITE_BITS(pdata
, XP_DRIVER_INT_REQ
, REQUEST
, 1);
1936 xgbe_phy_complete_ratechange(pdata
);
1938 phy_data
->cur_mode
= XGBE_MODE_KX_1000
;
1940 netif_dbg(pdata
, link
, pdata
->netdev
, "1GbE KX mode set\n");
1943 static enum xgbe_mode
xgbe_phy_cur_mode(struct xgbe_prv_data
*pdata
)
1945 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1947 return phy_data
->cur_mode
;
1950 static enum xgbe_mode
xgbe_phy_switch_baset_mode(struct xgbe_prv_data
*pdata
)
1952 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1954 /* No switching if not 10GBase-T */
1955 if (phy_data
->port_mode
!= XGBE_PORT_MODE_10GBASE_T
)
1956 return xgbe_phy_cur_mode(pdata
);
1958 switch (xgbe_phy_cur_mode(pdata
)) {
1959 case XGBE_MODE_SGMII_100
:
1960 case XGBE_MODE_SGMII_1000
:
1961 return XGBE_MODE_KR
;
1964 return XGBE_MODE_SGMII_1000
;
1968 static enum xgbe_mode
xgbe_phy_switch_bp_2500_mode(struct xgbe_prv_data
*pdata
)
1970 return XGBE_MODE_KX_2500
;
1973 static enum xgbe_mode
xgbe_phy_switch_bp_mode(struct xgbe_prv_data
*pdata
)
1975 /* If we are in KR switch to KX, and vice-versa */
1976 switch (xgbe_phy_cur_mode(pdata
)) {
1977 case XGBE_MODE_KX_1000
:
1978 return XGBE_MODE_KR
;
1981 return XGBE_MODE_KX_1000
;
1985 static enum xgbe_mode
xgbe_phy_switch_mode(struct xgbe_prv_data
*pdata
)
1987 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1989 switch (phy_data
->port_mode
) {
1990 case XGBE_PORT_MODE_BACKPLANE
:
1991 return xgbe_phy_switch_bp_mode(pdata
);
1992 case XGBE_PORT_MODE_BACKPLANE_2500
:
1993 return xgbe_phy_switch_bp_2500_mode(pdata
);
1994 case XGBE_PORT_MODE_1000BASE_T
:
1995 case XGBE_PORT_MODE_NBASE_T
:
1996 case XGBE_PORT_MODE_10GBASE_T
:
1997 return xgbe_phy_switch_baset_mode(pdata
);
1998 case XGBE_PORT_MODE_1000BASE_X
:
1999 case XGBE_PORT_MODE_10GBASE_R
:
2000 case XGBE_PORT_MODE_SFP
:
2001 /* No switching, so just return current mode */
2002 return xgbe_phy_cur_mode(pdata
);
2004 return XGBE_MODE_UNKNOWN
;
2008 static enum xgbe_mode
xgbe_phy_get_basex_mode(struct xgbe_phy_data
*phy_data
,
2015 return XGBE_MODE_KR
;
2017 return XGBE_MODE_UNKNOWN
;
2021 static enum xgbe_mode
xgbe_phy_get_baset_mode(struct xgbe_phy_data
*phy_data
,
2026 return XGBE_MODE_SGMII_100
;
2028 return XGBE_MODE_SGMII_1000
;
2030 return XGBE_MODE_KR
;
2032 return XGBE_MODE_UNKNOWN
;
2036 static enum xgbe_mode
xgbe_phy_get_sfp_mode(struct xgbe_phy_data
*phy_data
,
2041 return XGBE_MODE_SGMII_100
;
2043 if (phy_data
->sfp_base
== XGBE_SFP_BASE_1000_T
)
2044 return XGBE_MODE_SGMII_1000
;
2049 return XGBE_MODE_SFI
;
2051 return XGBE_MODE_UNKNOWN
;
2055 static enum xgbe_mode
xgbe_phy_get_bp_2500_mode(int speed
)
2059 return XGBE_MODE_KX_2500
;
2061 return XGBE_MODE_UNKNOWN
;
2065 static enum xgbe_mode
xgbe_phy_get_bp_mode(int speed
)
2069 return XGBE_MODE_KX_1000
;
2071 return XGBE_MODE_KR
;
2073 return XGBE_MODE_UNKNOWN
;
2077 static enum xgbe_mode
xgbe_phy_get_mode(struct xgbe_prv_data
*pdata
,
2080 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2082 switch (phy_data
->port_mode
) {
2083 case XGBE_PORT_MODE_BACKPLANE
:
2084 return xgbe_phy_get_bp_mode(speed
);
2085 case XGBE_PORT_MODE_BACKPLANE_2500
:
2086 return xgbe_phy_get_bp_2500_mode(speed
);
2087 case XGBE_PORT_MODE_1000BASE_T
:
2088 case XGBE_PORT_MODE_NBASE_T
:
2089 case XGBE_PORT_MODE_10GBASE_T
:
2090 return xgbe_phy_get_baset_mode(phy_data
, speed
);
2091 case XGBE_PORT_MODE_1000BASE_X
:
2092 case XGBE_PORT_MODE_10GBASE_R
:
2093 return xgbe_phy_get_basex_mode(phy_data
, speed
);
2094 case XGBE_PORT_MODE_SFP
:
2095 return xgbe_phy_get_sfp_mode(phy_data
, speed
);
2097 return XGBE_MODE_UNKNOWN
;
2101 static void xgbe_phy_set_mode(struct xgbe_prv_data
*pdata
, enum xgbe_mode mode
)
2104 case XGBE_MODE_KX_1000
:
2105 xgbe_phy_kx_1000_mode(pdata
);
2107 case XGBE_MODE_KX_2500
:
2108 xgbe_phy_kx_2500_mode(pdata
);
2111 xgbe_phy_kr_mode(pdata
);
2113 case XGBE_MODE_SGMII_100
:
2114 xgbe_phy_sgmii_100_mode(pdata
);
2116 case XGBE_MODE_SGMII_1000
:
2117 xgbe_phy_sgmii_1000_mode(pdata
);
2120 xgbe_phy_x_mode(pdata
);
2123 xgbe_phy_sfi_mode(pdata
);
2130 static bool xgbe_phy_check_mode(struct xgbe_prv_data
*pdata
,
2131 enum xgbe_mode mode
, u32 advert
)
2133 if (pdata
->phy
.autoneg
== AUTONEG_ENABLE
) {
2134 if (pdata
->phy
.advertising
& advert
)
2137 enum xgbe_mode cur_mode
;
2139 cur_mode
= xgbe_phy_get_mode(pdata
, pdata
->phy
.speed
);
2140 if (cur_mode
== mode
)
2147 static bool xgbe_phy_use_basex_mode(struct xgbe_prv_data
*pdata
,
2148 enum xgbe_mode mode
)
2152 return xgbe_phy_check_mode(pdata
, mode
,
2153 ADVERTISED_1000baseT_Full
);
2155 return xgbe_phy_check_mode(pdata
, mode
,
2156 ADVERTISED_10000baseT_Full
);
2162 static bool xgbe_phy_use_baset_mode(struct xgbe_prv_data
*pdata
,
2163 enum xgbe_mode mode
)
2166 case XGBE_MODE_SGMII_100
:
2167 return xgbe_phy_check_mode(pdata
, mode
,
2168 ADVERTISED_100baseT_Full
);
2169 case XGBE_MODE_SGMII_1000
:
2170 return xgbe_phy_check_mode(pdata
, mode
,
2171 ADVERTISED_1000baseT_Full
);
2173 return xgbe_phy_check_mode(pdata
, mode
,
2174 ADVERTISED_10000baseT_Full
);
2180 static bool xgbe_phy_use_sfp_mode(struct xgbe_prv_data
*pdata
,
2181 enum xgbe_mode mode
)
2183 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2187 if (phy_data
->sfp_base
== XGBE_SFP_BASE_1000_T
)
2189 return xgbe_phy_check_mode(pdata
, mode
,
2190 ADVERTISED_1000baseT_Full
);
2191 case XGBE_MODE_SGMII_100
:
2192 if (phy_data
->sfp_base
!= XGBE_SFP_BASE_1000_T
)
2194 return xgbe_phy_check_mode(pdata
, mode
,
2195 ADVERTISED_100baseT_Full
);
2196 case XGBE_MODE_SGMII_1000
:
2197 if (phy_data
->sfp_base
!= XGBE_SFP_BASE_1000_T
)
2199 return xgbe_phy_check_mode(pdata
, mode
,
2200 ADVERTISED_1000baseT_Full
);
2202 return xgbe_phy_check_mode(pdata
, mode
,
2203 ADVERTISED_10000baseT_Full
);
2209 static bool xgbe_phy_use_bp_2500_mode(struct xgbe_prv_data
*pdata
,
2210 enum xgbe_mode mode
)
2213 case XGBE_MODE_KX_2500
:
2214 return xgbe_phy_check_mode(pdata
, mode
,
2215 ADVERTISED_2500baseX_Full
);
2221 static bool xgbe_phy_use_bp_mode(struct xgbe_prv_data
*pdata
,
2222 enum xgbe_mode mode
)
2225 case XGBE_MODE_KX_1000
:
2226 return xgbe_phy_check_mode(pdata
, mode
,
2227 ADVERTISED_1000baseKX_Full
);
2229 return xgbe_phy_check_mode(pdata
, mode
,
2230 ADVERTISED_10000baseKR_Full
);
2236 static bool xgbe_phy_use_mode(struct xgbe_prv_data
*pdata
, enum xgbe_mode mode
)
2238 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2240 switch (phy_data
->port_mode
) {
2241 case XGBE_PORT_MODE_BACKPLANE
:
2242 return xgbe_phy_use_bp_mode(pdata
, mode
);
2243 case XGBE_PORT_MODE_BACKPLANE_2500
:
2244 return xgbe_phy_use_bp_2500_mode(pdata
, mode
);
2245 case XGBE_PORT_MODE_1000BASE_T
:
2246 case XGBE_PORT_MODE_NBASE_T
:
2247 case XGBE_PORT_MODE_10GBASE_T
:
2248 return xgbe_phy_use_baset_mode(pdata
, mode
);
2249 case XGBE_PORT_MODE_1000BASE_X
:
2250 case XGBE_PORT_MODE_10GBASE_R
:
2251 return xgbe_phy_use_basex_mode(pdata
, mode
);
2252 case XGBE_PORT_MODE_SFP
:
2253 return xgbe_phy_use_sfp_mode(pdata
, mode
);
2259 static bool xgbe_phy_valid_speed_basex_mode(struct xgbe_phy_data
*phy_data
,
2264 return (phy_data
->port_mode
== XGBE_PORT_MODE_1000BASE_X
);
2266 return (phy_data
->port_mode
== XGBE_PORT_MODE_10GBASE_R
);
2272 static bool xgbe_phy_valid_speed_baset_mode(struct xgbe_phy_data
*phy_data
,
2280 return (phy_data
->port_mode
== XGBE_PORT_MODE_10GBASE_T
);
2286 static bool xgbe_phy_valid_speed_sfp_mode(struct xgbe_phy_data
*phy_data
,
2291 return (phy_data
->sfp_speed
== XGBE_SFP_SPEED_100_1000
);
2293 return ((phy_data
->sfp_speed
== XGBE_SFP_SPEED_100_1000
) ||
2294 (phy_data
->sfp_speed
== XGBE_SFP_SPEED_1000
));
2296 return (phy_data
->sfp_speed
== XGBE_SFP_SPEED_10000
);
2302 static bool xgbe_phy_valid_speed_bp_2500_mode(int speed
)
2312 static bool xgbe_phy_valid_speed_bp_mode(int speed
)
2323 static bool xgbe_phy_valid_speed(struct xgbe_prv_data
*pdata
, int speed
)
2325 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2327 switch (phy_data
->port_mode
) {
2328 case XGBE_PORT_MODE_BACKPLANE
:
2329 return xgbe_phy_valid_speed_bp_mode(speed
);
2330 case XGBE_PORT_MODE_BACKPLANE_2500
:
2331 return xgbe_phy_valid_speed_bp_2500_mode(speed
);
2332 case XGBE_PORT_MODE_1000BASE_T
:
2333 case XGBE_PORT_MODE_NBASE_T
:
2334 case XGBE_PORT_MODE_10GBASE_T
:
2335 return xgbe_phy_valid_speed_baset_mode(phy_data
, speed
);
2336 case XGBE_PORT_MODE_1000BASE_X
:
2337 case XGBE_PORT_MODE_10GBASE_R
:
2338 return xgbe_phy_valid_speed_basex_mode(phy_data
, speed
);
2339 case XGBE_PORT_MODE_SFP
:
2340 return xgbe_phy_valid_speed_sfp_mode(phy_data
, speed
);
2346 static int xgbe_phy_link_status(struct xgbe_prv_data
*pdata
, int *an_restart
)
2348 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2349 unsigned int ret
, reg
;
2353 if (phy_data
->port_mode
== XGBE_PORT_MODE_SFP
) {
2354 /* Check SFP signals */
2355 xgbe_phy_sfp_detect(pdata
);
2357 if (phy_data
->sfp_changed
) {
2362 if (phy_data
->sfp_mod_absent
|| phy_data
->sfp_rx_los
)
2366 if (phy_data
->phydev
) {
2367 /* Check external PHY */
2368 ret
= phy_read_status(phy_data
->phydev
);
2372 if ((pdata
->phy
.autoneg
== AUTONEG_ENABLE
) &&
2373 !phy_aneg_done(phy_data
->phydev
))
2376 if (!phy_data
->phydev
->link
)
2380 /* Link status is latched low, so read once to clear
2381 * and then read again to get current state
2383 reg
= XMDIO_READ(pdata
, MDIO_MMD_PCS
, MDIO_STAT1
);
2384 reg
= XMDIO_READ(pdata
, MDIO_MMD_PCS
, MDIO_STAT1
);
2385 if (reg
& MDIO_STAT1_LSTATUS
)
2388 /* No link, attempt a receiver reset cycle */
2389 if (phy_data
->rrc_count
++) {
2390 phy_data
->rrc_count
= 0;
2391 xgbe_phy_rrc(pdata
);
2397 static void xgbe_phy_sfp_gpio_setup(struct xgbe_prv_data
*pdata
)
2399 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2402 reg
= XP_IOREAD(pdata
, XP_PROP_3
);
2404 phy_data
->sfp_gpio_address
= XGBE_GPIO_ADDRESS_PCA9555
+
2405 XP_GET_BITS(reg
, XP_PROP_3
, GPIO_ADDR
);
2407 phy_data
->sfp_gpio_mask
= XP_GET_BITS(reg
, XP_PROP_3
, GPIO_MASK
);
2409 phy_data
->sfp_gpio_rx_los
= XP_GET_BITS(reg
, XP_PROP_3
,
2411 phy_data
->sfp_gpio_tx_fault
= XP_GET_BITS(reg
, XP_PROP_3
,
2413 phy_data
->sfp_gpio_mod_absent
= XP_GET_BITS(reg
, XP_PROP_3
,
2415 phy_data
->sfp_gpio_rate_select
= XP_GET_BITS(reg
, XP_PROP_3
,
2418 if (netif_msg_probe(pdata
)) {
2419 dev_dbg(pdata
->dev
, "SFP: gpio_address=%#x\n",
2420 phy_data
->sfp_gpio_address
);
2421 dev_dbg(pdata
->dev
, "SFP: gpio_mask=%#x\n",
2422 phy_data
->sfp_gpio_mask
);
2423 dev_dbg(pdata
->dev
, "SFP: gpio_rx_los=%u\n",
2424 phy_data
->sfp_gpio_rx_los
);
2425 dev_dbg(pdata
->dev
, "SFP: gpio_tx_fault=%u\n",
2426 phy_data
->sfp_gpio_tx_fault
);
2427 dev_dbg(pdata
->dev
, "SFP: gpio_mod_absent=%u\n",
2428 phy_data
->sfp_gpio_mod_absent
);
2429 dev_dbg(pdata
->dev
, "SFP: gpio_rate_select=%u\n",
2430 phy_data
->sfp_gpio_rate_select
);
2434 static void xgbe_phy_sfp_comm_setup(struct xgbe_prv_data
*pdata
)
2436 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2437 unsigned int reg
, mux_addr_hi
, mux_addr_lo
;
2439 reg
= XP_IOREAD(pdata
, XP_PROP_4
);
2441 mux_addr_hi
= XP_GET_BITS(reg
, XP_PROP_4
, MUX_ADDR_HI
);
2442 mux_addr_lo
= XP_GET_BITS(reg
, XP_PROP_4
, MUX_ADDR_LO
);
2443 if (mux_addr_lo
== XGBE_SFP_DIRECT
)
2446 phy_data
->sfp_comm
= XGBE_SFP_COMM_PCA9545
;
2447 phy_data
->sfp_mux_address
= (mux_addr_hi
<< 2) + mux_addr_lo
;
2448 phy_data
->sfp_mux_channel
= XP_GET_BITS(reg
, XP_PROP_4
, MUX_CHAN
);
2450 if (netif_msg_probe(pdata
)) {
2451 dev_dbg(pdata
->dev
, "SFP: mux_address=%#x\n",
2452 phy_data
->sfp_mux_address
);
2453 dev_dbg(pdata
->dev
, "SFP: mux_channel=%u\n",
2454 phy_data
->sfp_mux_channel
);
2458 static void xgbe_phy_sfp_setup(struct xgbe_prv_data
*pdata
)
2460 xgbe_phy_sfp_comm_setup(pdata
);
2461 xgbe_phy_sfp_gpio_setup(pdata
);
2464 static int xgbe_phy_int_mdio_reset(struct xgbe_prv_data
*pdata
)
2466 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2469 ret
= pdata
->hw_if
.set_gpio(pdata
, phy_data
->mdio_reset_gpio
);
2473 ret
= pdata
->hw_if
.clr_gpio(pdata
, phy_data
->mdio_reset_gpio
);
2478 static int xgbe_phy_i2c_mdio_reset(struct xgbe_prv_data
*pdata
)
2480 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2481 u8 gpio_reg
, gpio_ports
[2], gpio_data
[3];
2484 /* Read the output port registers */
2486 ret
= xgbe_phy_i2c_read(pdata
, phy_data
->mdio_reset_addr
,
2487 &gpio_reg
, sizeof(gpio_reg
),
2488 gpio_ports
, sizeof(gpio_ports
));
2492 /* Prepare to write the GPIO data */
2494 gpio_data
[1] = gpio_ports
[0];
2495 gpio_data
[2] = gpio_ports
[1];
2497 /* Set the GPIO pin */
2498 if (phy_data
->mdio_reset_gpio
< 8)
2499 gpio_data
[1] |= (1 << (phy_data
->mdio_reset_gpio
% 8));
2501 gpio_data
[2] |= (1 << (phy_data
->mdio_reset_gpio
% 8));
2503 /* Write the output port registers */
2504 ret
= xgbe_phy_i2c_write(pdata
, phy_data
->mdio_reset_addr
,
2505 gpio_data
, sizeof(gpio_data
));
2509 /* Clear the GPIO pin */
2510 if (phy_data
->mdio_reset_gpio
< 8)
2511 gpio_data
[1] &= ~(1 << (phy_data
->mdio_reset_gpio
% 8));
2513 gpio_data
[2] &= ~(1 << (phy_data
->mdio_reset_gpio
% 8));
2515 /* Write the output port registers */
2516 ret
= xgbe_phy_i2c_write(pdata
, phy_data
->mdio_reset_addr
,
2517 gpio_data
, sizeof(gpio_data
));
2522 static int xgbe_phy_mdio_reset(struct xgbe_prv_data
*pdata
)
2524 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2527 if (phy_data
->conn_type
!= XGBE_CONN_TYPE_MDIO
)
2530 ret
= xgbe_phy_get_comm_ownership(pdata
);
2534 if (phy_data
->mdio_reset
== XGBE_MDIO_RESET_I2C_GPIO
)
2535 ret
= xgbe_phy_i2c_mdio_reset(pdata
);
2536 else if (phy_data
->mdio_reset
== XGBE_MDIO_RESET_INT_GPIO
)
2537 ret
= xgbe_phy_int_mdio_reset(pdata
);
2539 xgbe_phy_put_comm_ownership(pdata
);
2544 static bool xgbe_phy_redrv_error(struct xgbe_phy_data
*phy_data
)
2546 if (!phy_data
->redrv
)
2549 if (phy_data
->redrv_if
>= XGBE_PHY_REDRV_IF_MAX
)
2552 switch (phy_data
->redrv_model
) {
2553 case XGBE_PHY_REDRV_MODEL_4223
:
2554 if (phy_data
->redrv_lane
> 3)
2557 case XGBE_PHY_REDRV_MODEL_4227
:
2558 if (phy_data
->redrv_lane
> 1)
2568 static int xgbe_phy_mdio_reset_setup(struct xgbe_prv_data
*pdata
)
2570 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2573 if (phy_data
->conn_type
!= XGBE_CONN_TYPE_MDIO
)
2576 reg
= XP_IOREAD(pdata
, XP_PROP_3
);
2577 phy_data
->mdio_reset
= XP_GET_BITS(reg
, XP_PROP_3
, MDIO_RESET
);
2578 switch (phy_data
->mdio_reset
) {
2579 case XGBE_MDIO_RESET_NONE
:
2580 case XGBE_MDIO_RESET_I2C_GPIO
:
2581 case XGBE_MDIO_RESET_INT_GPIO
:
2584 dev_err(pdata
->dev
, "unsupported MDIO reset (%#x)\n",
2585 phy_data
->mdio_reset
);
2589 if (phy_data
->mdio_reset
== XGBE_MDIO_RESET_I2C_GPIO
) {
2590 phy_data
->mdio_reset_addr
= XGBE_GPIO_ADDRESS_PCA9555
+
2591 XP_GET_BITS(reg
, XP_PROP_3
,
2592 MDIO_RESET_I2C_ADDR
);
2593 phy_data
->mdio_reset_gpio
= XP_GET_BITS(reg
, XP_PROP_3
,
2594 MDIO_RESET_I2C_GPIO
);
2595 } else if (phy_data
->mdio_reset
== XGBE_MDIO_RESET_INT_GPIO
) {
2596 phy_data
->mdio_reset_gpio
= XP_GET_BITS(reg
, XP_PROP_3
,
2597 MDIO_RESET_INT_GPIO
);
2603 static bool xgbe_phy_port_mode_mismatch(struct xgbe_prv_data
*pdata
)
2605 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2607 switch (phy_data
->port_mode
) {
2608 case XGBE_PORT_MODE_BACKPLANE
:
2609 if ((phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_1000
) ||
2610 (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_10000
))
2613 case XGBE_PORT_MODE_BACKPLANE_2500
:
2614 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_2500
)
2617 case XGBE_PORT_MODE_1000BASE_T
:
2618 if ((phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_100
) ||
2619 (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_1000
))
2622 case XGBE_PORT_MODE_1000BASE_X
:
2623 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_1000
)
2626 case XGBE_PORT_MODE_NBASE_T
:
2627 if ((phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_100
) ||
2628 (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_1000
) ||
2629 (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_2500
))
2632 case XGBE_PORT_MODE_10GBASE_T
:
2633 if ((phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_100
) ||
2634 (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_1000
) ||
2635 (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_10000
))
2638 case XGBE_PORT_MODE_10GBASE_R
:
2639 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_10000
)
2642 case XGBE_PORT_MODE_SFP
:
2643 if ((phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_100
) ||
2644 (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_1000
) ||
2645 (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_10000
))
2655 static bool xgbe_phy_conn_type_mismatch(struct xgbe_prv_data
*pdata
)
2657 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2659 switch (phy_data
->port_mode
) {
2660 case XGBE_PORT_MODE_BACKPLANE
:
2661 case XGBE_PORT_MODE_BACKPLANE_2500
:
2662 if (phy_data
->conn_type
== XGBE_CONN_TYPE_BACKPLANE
)
2665 case XGBE_PORT_MODE_1000BASE_T
:
2666 case XGBE_PORT_MODE_1000BASE_X
:
2667 case XGBE_PORT_MODE_NBASE_T
:
2668 case XGBE_PORT_MODE_10GBASE_T
:
2669 case XGBE_PORT_MODE_10GBASE_R
:
2670 if (phy_data
->conn_type
== XGBE_CONN_TYPE_MDIO
)
2673 case XGBE_PORT_MODE_SFP
:
2674 if (phy_data
->conn_type
== XGBE_CONN_TYPE_SFP
)
2684 static bool xgbe_phy_port_enabled(struct xgbe_prv_data
*pdata
)
2688 reg
= XP_IOREAD(pdata
, XP_PROP_0
);
2689 if (!XP_GET_BITS(reg
, XP_PROP_0
, PORT_SPEEDS
))
2691 if (!XP_GET_BITS(reg
, XP_PROP_0
, CONN_TYPE
))
2697 static void xgbe_phy_stop(struct xgbe_prv_data
*pdata
)
2699 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2701 /* If we have an external PHY, free it */
2702 xgbe_phy_free_phy_device(pdata
);
2704 /* Reset SFP data */
2705 xgbe_phy_sfp_reset(phy_data
);
2706 xgbe_phy_sfp_mod_absent(pdata
);
2708 /* Power off the PHY */
2709 xgbe_phy_power_off(pdata
);
2711 /* Stop the I2C controller */
2712 pdata
->i2c_if
.i2c_stop(pdata
);
2715 static int xgbe_phy_start(struct xgbe_prv_data
*pdata
)
2717 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2720 /* Start the I2C controller */
2721 ret
= pdata
->i2c_if
.i2c_start(pdata
);
2725 /* Start in highest supported mode */
2726 xgbe_phy_set_mode(pdata
, phy_data
->start_mode
);
2728 /* After starting the I2C controller, we can check for an SFP */
2729 switch (phy_data
->port_mode
) {
2730 case XGBE_PORT_MODE_SFP
:
2731 xgbe_phy_sfp_detect(pdata
);
2737 /* If we have an external PHY, start it */
2738 ret
= xgbe_phy_find_phy_device(pdata
);
2745 pdata
->i2c_if
.i2c_stop(pdata
);
2750 static int xgbe_phy_reset(struct xgbe_prv_data
*pdata
)
2752 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2753 enum xgbe_mode cur_mode
;
2756 /* Reset by power cycling the PHY */
2757 cur_mode
= phy_data
->cur_mode
;
2758 xgbe_phy_power_off(pdata
);
2759 xgbe_phy_set_mode(pdata
, cur_mode
);
2761 if (!phy_data
->phydev
)
2764 /* Reset the external PHY */
2765 ret
= xgbe_phy_mdio_reset(pdata
);
2769 return phy_init_hw(phy_data
->phydev
);
2772 static void xgbe_phy_exit(struct xgbe_prv_data
*pdata
)
2774 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2776 /* Unregister for driving external PHYs */
2777 mdiobus_unregister(phy_data
->mii
);
2780 static int xgbe_phy_init(struct xgbe_prv_data
*pdata
)
2782 struct xgbe_phy_data
*phy_data
;
2783 struct mii_bus
*mii
;
2787 /* Check if enabled */
2788 if (!xgbe_phy_port_enabled(pdata
)) {
2789 dev_info(pdata
->dev
, "device is not enabled\n");
2793 /* Initialize the I2C controller */
2794 ret
= pdata
->i2c_if
.i2c_init(pdata
);
2798 phy_data
= devm_kzalloc(pdata
->dev
, sizeof(*phy_data
), GFP_KERNEL
);
2801 pdata
->phy_data
= phy_data
;
2803 reg
= XP_IOREAD(pdata
, XP_PROP_0
);
2804 phy_data
->port_mode
= XP_GET_BITS(reg
, XP_PROP_0
, PORT_MODE
);
2805 phy_data
->port_id
= XP_GET_BITS(reg
, XP_PROP_0
, PORT_ID
);
2806 phy_data
->port_speeds
= XP_GET_BITS(reg
, XP_PROP_0
, PORT_SPEEDS
);
2807 phy_data
->conn_type
= XP_GET_BITS(reg
, XP_PROP_0
, CONN_TYPE
);
2808 phy_data
->mdio_addr
= XP_GET_BITS(reg
, XP_PROP_0
, MDIO_ADDR
);
2809 if (netif_msg_probe(pdata
)) {
2810 dev_dbg(pdata
->dev
, "port mode=%u\n", phy_data
->port_mode
);
2811 dev_dbg(pdata
->dev
, "port id=%u\n", phy_data
->port_id
);
2812 dev_dbg(pdata
->dev
, "port speeds=%#x\n", phy_data
->port_speeds
);
2813 dev_dbg(pdata
->dev
, "conn type=%u\n", phy_data
->conn_type
);
2814 dev_dbg(pdata
->dev
, "mdio addr=%u\n", phy_data
->mdio_addr
);
2817 reg
= XP_IOREAD(pdata
, XP_PROP_4
);
2818 phy_data
->redrv
= XP_GET_BITS(reg
, XP_PROP_4
, REDRV_PRESENT
);
2819 phy_data
->redrv_if
= XP_GET_BITS(reg
, XP_PROP_4
, REDRV_IF
);
2820 phy_data
->redrv_addr
= XP_GET_BITS(reg
, XP_PROP_4
, REDRV_ADDR
);
2821 phy_data
->redrv_lane
= XP_GET_BITS(reg
, XP_PROP_4
, REDRV_LANE
);
2822 phy_data
->redrv_model
= XP_GET_BITS(reg
, XP_PROP_4
, REDRV_MODEL
);
2823 if (phy_data
->redrv
&& netif_msg_probe(pdata
)) {
2824 dev_dbg(pdata
->dev
, "redrv present\n");
2825 dev_dbg(pdata
->dev
, "redrv i/f=%u\n", phy_data
->redrv_if
);
2826 dev_dbg(pdata
->dev
, "redrv addr=%#x\n", phy_data
->redrv_addr
);
2827 dev_dbg(pdata
->dev
, "redrv lane=%u\n", phy_data
->redrv_lane
);
2828 dev_dbg(pdata
->dev
, "redrv model=%u\n", phy_data
->redrv_model
);
2831 /* Validate the connection requested */
2832 if (xgbe_phy_conn_type_mismatch(pdata
)) {
2833 dev_err(pdata
->dev
, "phy mode/connection mismatch (%#x/%#x)\n",
2834 phy_data
->port_mode
, phy_data
->conn_type
);
2837 /* Validate the mode requested */
2838 if (xgbe_phy_port_mode_mismatch(pdata
)) {
2839 dev_err(pdata
->dev
, "phy mode/speed mismatch (%#x/%#x)\n",
2840 phy_data
->port_mode
, phy_data
->port_speeds
);
2844 /* Check for and validate MDIO reset support */
2845 ret
= xgbe_phy_mdio_reset_setup(pdata
);
2849 /* Validate the re-driver information */
2850 if (xgbe_phy_redrv_error(phy_data
)) {
2851 dev_err(pdata
->dev
, "phy re-driver settings error\n");
2854 pdata
->kr_redrv
= phy_data
->redrv
;
2856 /* Indicate current mode is unknown */
2857 phy_data
->cur_mode
= XGBE_MODE_UNKNOWN
;
2859 /* Initialize supported features */
2860 pdata
->phy
.supported
= 0;
2862 switch (phy_data
->port_mode
) {
2863 /* Backplane support */
2864 case XGBE_PORT_MODE_BACKPLANE
:
2865 pdata
->phy
.supported
|= SUPPORTED_Autoneg
;
2866 pdata
->phy
.supported
|= SUPPORTED_Pause
| SUPPORTED_Asym_Pause
;
2867 pdata
->phy
.supported
|= SUPPORTED_Backplane
;
2868 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_1000
) {
2869 pdata
->phy
.supported
|= SUPPORTED_1000baseKX_Full
;
2870 phy_data
->start_mode
= XGBE_MODE_KX_1000
;
2872 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_10000
) {
2873 pdata
->phy
.supported
|= SUPPORTED_10000baseKR_Full
;
2874 if (pdata
->fec_ability
& MDIO_PMA_10GBR_FECABLE_ABLE
)
2875 pdata
->phy
.supported
|=
2876 SUPPORTED_10000baseR_FEC
;
2877 phy_data
->start_mode
= XGBE_MODE_KR
;
2880 phy_data
->phydev_mode
= XGBE_MDIO_MODE_NONE
;
2882 case XGBE_PORT_MODE_BACKPLANE_2500
:
2883 pdata
->phy
.supported
|= SUPPORTED_Pause
| SUPPORTED_Asym_Pause
;
2884 pdata
->phy
.supported
|= SUPPORTED_Backplane
;
2885 pdata
->phy
.supported
|= SUPPORTED_2500baseX_Full
;
2886 phy_data
->start_mode
= XGBE_MODE_KX_2500
;
2888 phy_data
->phydev_mode
= XGBE_MDIO_MODE_NONE
;
2891 /* MDIO 1GBase-T support */
2892 case XGBE_PORT_MODE_1000BASE_T
:
2893 pdata
->phy
.supported
|= SUPPORTED_Autoneg
;
2894 pdata
->phy
.supported
|= SUPPORTED_Pause
| SUPPORTED_Asym_Pause
;
2895 pdata
->phy
.supported
|= SUPPORTED_TP
;
2896 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_100
) {
2897 pdata
->phy
.supported
|= SUPPORTED_100baseT_Full
;
2898 phy_data
->start_mode
= XGBE_MODE_SGMII_100
;
2900 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_1000
) {
2901 pdata
->phy
.supported
|= SUPPORTED_1000baseT_Full
;
2902 phy_data
->start_mode
= XGBE_MODE_SGMII_1000
;
2905 phy_data
->phydev_mode
= XGBE_MDIO_MODE_CL22
;
2908 /* MDIO Base-X support */
2909 case XGBE_PORT_MODE_1000BASE_X
:
2910 pdata
->phy
.supported
|= SUPPORTED_Autoneg
;
2911 pdata
->phy
.supported
|= SUPPORTED_Pause
| SUPPORTED_Asym_Pause
;
2912 pdata
->phy
.supported
|= SUPPORTED_FIBRE
;
2913 pdata
->phy
.supported
|= SUPPORTED_1000baseT_Full
;
2914 phy_data
->start_mode
= XGBE_MODE_X
;
2916 phy_data
->phydev_mode
= XGBE_MDIO_MODE_CL22
;
2919 /* MDIO NBase-T support */
2920 case XGBE_PORT_MODE_NBASE_T
:
2921 pdata
->phy
.supported
|= SUPPORTED_Autoneg
;
2922 pdata
->phy
.supported
|= SUPPORTED_Pause
| SUPPORTED_Asym_Pause
;
2923 pdata
->phy
.supported
|= SUPPORTED_TP
;
2924 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_100
) {
2925 pdata
->phy
.supported
|= SUPPORTED_100baseT_Full
;
2926 phy_data
->start_mode
= XGBE_MODE_SGMII_100
;
2928 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_1000
) {
2929 pdata
->phy
.supported
|= SUPPORTED_1000baseT_Full
;
2930 phy_data
->start_mode
= XGBE_MODE_SGMII_1000
;
2932 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_2500
) {
2933 pdata
->phy
.supported
|= SUPPORTED_2500baseX_Full
;
2934 phy_data
->start_mode
= XGBE_MODE_KX_2500
;
2937 phy_data
->phydev_mode
= XGBE_MDIO_MODE_CL45
;
2940 /* 10GBase-T support */
2941 case XGBE_PORT_MODE_10GBASE_T
:
2942 pdata
->phy
.supported
|= SUPPORTED_Autoneg
;
2943 pdata
->phy
.supported
|= SUPPORTED_Pause
| SUPPORTED_Asym_Pause
;
2944 pdata
->phy
.supported
|= SUPPORTED_TP
;
2945 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_100
) {
2946 pdata
->phy
.supported
|= SUPPORTED_100baseT_Full
;
2947 phy_data
->start_mode
= XGBE_MODE_SGMII_100
;
2949 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_1000
) {
2950 pdata
->phy
.supported
|= SUPPORTED_1000baseT_Full
;
2951 phy_data
->start_mode
= XGBE_MODE_SGMII_1000
;
2953 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_10000
) {
2954 pdata
->phy
.supported
|= SUPPORTED_10000baseT_Full
;
2955 phy_data
->start_mode
= XGBE_MODE_KR
;
2958 phy_data
->phydev_mode
= XGBE_MDIO_MODE_NONE
;
2961 /* 10GBase-R support */
2962 case XGBE_PORT_MODE_10GBASE_R
:
2963 pdata
->phy
.supported
|= SUPPORTED_Autoneg
;
2964 pdata
->phy
.supported
|= SUPPORTED_Pause
| SUPPORTED_Asym_Pause
;
2965 pdata
->phy
.supported
|= SUPPORTED_TP
;
2966 pdata
->phy
.supported
|= SUPPORTED_10000baseT_Full
;
2967 if (pdata
->fec_ability
& MDIO_PMA_10GBR_FECABLE_ABLE
)
2968 pdata
->phy
.supported
|= SUPPORTED_10000baseR_FEC
;
2969 phy_data
->start_mode
= XGBE_MODE_SFI
;
2971 phy_data
->phydev_mode
= XGBE_MDIO_MODE_NONE
;
2975 case XGBE_PORT_MODE_SFP
:
2976 pdata
->phy
.supported
|= SUPPORTED_Autoneg
;
2977 pdata
->phy
.supported
|= SUPPORTED_Pause
| SUPPORTED_Asym_Pause
;
2978 pdata
->phy
.supported
|= SUPPORTED_TP
;
2979 pdata
->phy
.supported
|= SUPPORTED_FIBRE
;
2980 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_100
) {
2981 pdata
->phy
.supported
|= SUPPORTED_100baseT_Full
;
2982 phy_data
->start_mode
= XGBE_MODE_SGMII_100
;
2984 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_1000
) {
2985 pdata
->phy
.supported
|= SUPPORTED_1000baseT_Full
;
2986 phy_data
->start_mode
= XGBE_MODE_SGMII_1000
;
2988 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_10000
) {
2989 pdata
->phy
.supported
|= SUPPORTED_10000baseT_Full
;
2990 phy_data
->start_mode
= XGBE_MODE_SFI
;
2991 if (pdata
->fec_ability
& MDIO_PMA_10GBR_FECABLE_ABLE
)
2992 pdata
->phy
.supported
|=
2993 SUPPORTED_10000baseR_FEC
;
2996 phy_data
->phydev_mode
= XGBE_MDIO_MODE_CL22
;
2998 xgbe_phy_sfp_setup(pdata
);
3004 if (netif_msg_probe(pdata
))
3005 dev_dbg(pdata
->dev
, "phy supported=%#x\n",
3006 pdata
->phy
.supported
);
3008 if ((phy_data
->conn_type
& XGBE_CONN_TYPE_MDIO
) &&
3009 (phy_data
->phydev_mode
!= XGBE_MDIO_MODE_NONE
)) {
3010 ret
= pdata
->hw_if
.set_ext_mii_mode(pdata
, phy_data
->mdio_addr
,
3011 phy_data
->phydev_mode
);
3014 "mdio port/clause not compatible (%d/%u)\n",
3015 phy_data
->mdio_addr
, phy_data
->phydev_mode
);
3020 if (phy_data
->redrv
&& !phy_data
->redrv_if
) {
3021 ret
= pdata
->hw_if
.set_ext_mii_mode(pdata
, phy_data
->redrv_addr
,
3022 XGBE_MDIO_MODE_CL22
);
3025 "redriver mdio port not compatible (%u)\n",
3026 phy_data
->redrv_addr
);
3031 /* Register for driving external PHYs */
3032 mii
= devm_mdiobus_alloc(pdata
->dev
);
3034 dev_err(pdata
->dev
, "mdiobus_alloc failed\n");
3039 mii
->name
= "amd-xgbe-mii";
3040 mii
->read
= xgbe_phy_mii_read
;
3041 mii
->write
= xgbe_phy_mii_write
;
3042 mii
->parent
= pdata
->dev
;
3044 snprintf(mii
->id
, sizeof(mii
->id
), "%s", dev_name(pdata
->dev
));
3045 ret
= mdiobus_register(mii
);
3047 dev_err(pdata
->dev
, "mdiobus_register failed\n");
3050 phy_data
->mii
= mii
;
3055 void xgbe_init_function_ptrs_phy_v2(struct xgbe_phy_if
*phy_if
)
3057 struct xgbe_phy_impl_if
*phy_impl
= &phy_if
->phy_impl
;
3059 phy_impl
->init
= xgbe_phy_init
;
3060 phy_impl
->exit
= xgbe_phy_exit
;
3062 phy_impl
->reset
= xgbe_phy_reset
;
3063 phy_impl
->start
= xgbe_phy_start
;
3064 phy_impl
->stop
= xgbe_phy_stop
;
3066 phy_impl
->link_status
= xgbe_phy_link_status
;
3068 phy_impl
->valid_speed
= xgbe_phy_valid_speed
;
3070 phy_impl
->use_mode
= xgbe_phy_use_mode
;
3071 phy_impl
->set_mode
= xgbe_phy_set_mode
;
3072 phy_impl
->get_mode
= xgbe_phy_get_mode
;
3073 phy_impl
->switch_mode
= xgbe_phy_switch_mode
;
3074 phy_impl
->cur_mode
= xgbe_phy_cur_mode
;
3076 phy_impl
->an_mode
= xgbe_phy_an_mode
;
3078 phy_impl
->an_config
= xgbe_phy_an_config
;
3080 phy_impl
->an_advertising
= xgbe_phy_an_advertising
;
3082 phy_impl
->an_outcome
= xgbe_phy_an_outcome
;