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>
122 #include <linux/ethtool.h>
125 #include "xgbe-common.h"
127 #define XGBE_PHY_PORT_SPEED_100 BIT(0)
128 #define XGBE_PHY_PORT_SPEED_1000 BIT(1)
129 #define XGBE_PHY_PORT_SPEED_2500 BIT(2)
130 #define XGBE_PHY_PORT_SPEED_10000 BIT(3)
132 #define XGBE_MUTEX_RELEASE 0x80000000
134 #define XGBE_SFP_DIRECT 7
136 /* I2C target addresses */
137 #define XGBE_SFP_SERIAL_ID_ADDRESS 0x50
138 #define XGBE_SFP_DIAG_INFO_ADDRESS 0x51
139 #define XGBE_SFP_PHY_ADDRESS 0x56
140 #define XGBE_GPIO_ADDRESS_PCA9555 0x20
142 /* SFP sideband signal indicators */
143 #define XGBE_GPIO_NO_TX_FAULT BIT(0)
144 #define XGBE_GPIO_NO_RATE_SELECT BIT(1)
145 #define XGBE_GPIO_NO_MOD_ABSENT BIT(2)
146 #define XGBE_GPIO_NO_RX_LOS BIT(3)
148 /* Rate-change complete wait/retry count */
149 #define XGBE_RATECHANGE_COUNT 500
151 /* CDR delay values for KR support (in usec) */
152 #define XGBE_CDR_DELAY_INIT 10000
153 #define XGBE_CDR_DELAY_INC 10000
154 #define XGBE_CDR_DELAY_MAX 100000
156 /* RRC frequency during link status check */
157 #define XGBE_RRC_FREQUENCY 10
159 enum xgbe_port_mode
{
160 XGBE_PORT_MODE_RSVD
= 0,
161 XGBE_PORT_MODE_BACKPLANE
,
162 XGBE_PORT_MODE_BACKPLANE_2500
,
163 XGBE_PORT_MODE_1000BASE_T
,
164 XGBE_PORT_MODE_1000BASE_X
,
165 XGBE_PORT_MODE_NBASE_T
,
166 XGBE_PORT_MODE_10GBASE_T
,
167 XGBE_PORT_MODE_10GBASE_R
,
172 enum xgbe_conn_type
{
173 XGBE_CONN_TYPE_NONE
= 0,
176 XGBE_CONN_TYPE_RSVD1
,
177 XGBE_CONN_TYPE_BACKPLANE
,
181 /* SFP/SFP+ related definitions */
183 XGBE_SFP_COMM_DIRECT
= 0,
184 XGBE_SFP_COMM_PCA9545
,
187 enum xgbe_sfp_cable
{
188 XGBE_SFP_CABLE_UNKNOWN
= 0,
189 XGBE_SFP_CABLE_ACTIVE
,
190 XGBE_SFP_CABLE_PASSIVE
,
194 XGBE_SFP_BASE_UNKNOWN
= 0,
195 XGBE_SFP_BASE_1000_T
,
196 XGBE_SFP_BASE_1000_SX
,
197 XGBE_SFP_BASE_1000_LX
,
198 XGBE_SFP_BASE_1000_CX
,
199 XGBE_SFP_BASE_10000_SR
,
200 XGBE_SFP_BASE_10000_LR
,
201 XGBE_SFP_BASE_10000_LRM
,
202 XGBE_SFP_BASE_10000_ER
,
203 XGBE_SFP_BASE_10000_CR
,
206 enum xgbe_sfp_speed
{
207 XGBE_SFP_SPEED_UNKNOWN
= 0,
208 XGBE_SFP_SPEED_100_1000
,
210 XGBE_SFP_SPEED_10000
,
213 /* SFP Serial ID Base ID values relative to an offset of 0 */
214 #define XGBE_SFP_BASE_ID 0
215 #define XGBE_SFP_ID_SFP 0x03
217 #define XGBE_SFP_BASE_EXT_ID 1
218 #define XGBE_SFP_EXT_ID_SFP 0x04
220 #define XGBE_SFP_BASE_10GBE_CC 3
221 #define XGBE_SFP_BASE_10GBE_CC_SR BIT(4)
222 #define XGBE_SFP_BASE_10GBE_CC_LR BIT(5)
223 #define XGBE_SFP_BASE_10GBE_CC_LRM BIT(6)
224 #define XGBE_SFP_BASE_10GBE_CC_ER BIT(7)
226 #define XGBE_SFP_BASE_1GBE_CC 6
227 #define XGBE_SFP_BASE_1GBE_CC_SX BIT(0)
228 #define XGBE_SFP_BASE_1GBE_CC_LX BIT(1)
229 #define XGBE_SFP_BASE_1GBE_CC_CX BIT(2)
230 #define XGBE_SFP_BASE_1GBE_CC_T BIT(3)
232 #define XGBE_SFP_BASE_CABLE 8
233 #define XGBE_SFP_BASE_CABLE_PASSIVE BIT(2)
234 #define XGBE_SFP_BASE_CABLE_ACTIVE BIT(3)
236 #define XGBE_SFP_BASE_BR 12
237 #define XGBE_SFP_BASE_BR_1GBE_MIN 0x0a
238 #define XGBE_SFP_BASE_BR_1GBE_MAX 0x0d
239 #define XGBE_SFP_BASE_BR_10GBE_MIN 0x64
240 #define XGBE_SFP_BASE_BR_10GBE_MAX 0x68
242 #define XGBE_SFP_BASE_CU_CABLE_LEN 18
244 #define XGBE_SFP_BASE_VENDOR_NAME 20
245 #define XGBE_SFP_BASE_VENDOR_NAME_LEN 16
246 #define XGBE_SFP_BASE_VENDOR_PN 40
247 #define XGBE_SFP_BASE_VENDOR_PN_LEN 16
248 #define XGBE_SFP_BASE_VENDOR_REV 56
249 #define XGBE_SFP_BASE_VENDOR_REV_LEN 4
251 #define XGBE_SFP_BASE_CC 63
253 /* SFP Serial ID Extended ID values relative to an offset of 64 */
254 #define XGBE_SFP_BASE_VENDOR_SN 4
255 #define XGBE_SFP_BASE_VENDOR_SN_LEN 16
257 #define XGBE_SFP_EXTD_OPT1 1
258 #define XGBE_SFP_EXTD_OPT1_RX_LOS BIT(1)
259 #define XGBE_SFP_EXTD_OPT1_TX_FAULT BIT(3)
261 #define XGBE_SFP_EXTD_DIAG 28
262 #define XGBE_SFP_EXTD_DIAG_ADDR_CHANGE BIT(2)
264 #define XGBE_SFP_EXTD_SFF_8472 30
266 #define XGBE_SFP_EXTD_CC 31
268 struct xgbe_sfp_eeprom
{
274 #define XGBE_SFP_DIAGS_SUPPORTED(_x) \
275 ((_x)->extd[XGBE_SFP_EXTD_SFF_8472] && \
276 !((_x)->extd[XGBE_SFP_EXTD_DIAG] & XGBE_SFP_EXTD_DIAG_ADDR_CHANGE))
278 #define XGBE_SFP_EEPROM_BASE_LEN 256
279 #define XGBE_SFP_EEPROM_DIAG_LEN 256
280 #define XGBE_SFP_EEPROM_MAX (XGBE_SFP_EEPROM_BASE_LEN + \
281 XGBE_SFP_EEPROM_DIAG_LEN)
283 #define XGBE_BEL_FUSE_VENDOR "BEL-FUSE "
284 #define XGBE_BEL_FUSE_PARTNO "1GBT-SFP06 "
286 struct xgbe_sfp_ascii
{
288 char vendor
[XGBE_SFP_BASE_VENDOR_NAME_LEN
+ 1];
289 char partno
[XGBE_SFP_BASE_VENDOR_PN_LEN
+ 1];
290 char rev
[XGBE_SFP_BASE_VENDOR_REV_LEN
+ 1];
291 char serno
[XGBE_SFP_BASE_VENDOR_SN_LEN
+ 1];
295 /* MDIO PHY reset types */
296 enum xgbe_mdio_reset
{
297 XGBE_MDIO_RESET_NONE
= 0,
298 XGBE_MDIO_RESET_I2C_GPIO
,
299 XGBE_MDIO_RESET_INT_GPIO
,
303 /* Re-driver related definitions */
304 enum xgbe_phy_redrv_if
{
305 XGBE_PHY_REDRV_IF_MDIO
= 0,
306 XGBE_PHY_REDRV_IF_I2C
,
307 XGBE_PHY_REDRV_IF_MAX
,
310 enum xgbe_phy_redrv_model
{
311 XGBE_PHY_REDRV_MODEL_4223
= 0,
312 XGBE_PHY_REDRV_MODEL_4227
,
313 XGBE_PHY_REDRV_MODEL_MAX
,
316 enum xgbe_phy_redrv_mode
{
317 XGBE_PHY_REDRV_MODE_CX
= 5,
318 XGBE_PHY_REDRV_MODE_SR
= 9,
321 #define XGBE_PHY_REDRV_MODE_REG 0x12b0
323 /* PHY related configuration information */
324 struct xgbe_phy_data
{
325 enum xgbe_port_mode port_mode
;
327 unsigned int port_id
;
329 unsigned int port_speeds
;
331 enum xgbe_conn_type conn_type
;
333 enum xgbe_mode cur_mode
;
334 enum xgbe_mode start_mode
;
336 unsigned int rrc_count
;
338 unsigned int mdio_addr
;
341 enum xgbe_sfp_comm sfp_comm
;
342 unsigned int sfp_mux_address
;
343 unsigned int sfp_mux_channel
;
345 unsigned int sfp_gpio_address
;
346 unsigned int sfp_gpio_mask
;
347 unsigned int sfp_gpio_inputs
;
348 unsigned int sfp_gpio_rx_los
;
349 unsigned int sfp_gpio_tx_fault
;
350 unsigned int sfp_gpio_mod_absent
;
351 unsigned int sfp_gpio_rate_select
;
353 unsigned int sfp_rx_los
;
354 unsigned int sfp_tx_fault
;
355 unsigned int sfp_mod_absent
;
356 unsigned int sfp_changed
;
357 unsigned int sfp_phy_avail
;
358 unsigned int sfp_cable_len
;
359 enum xgbe_sfp_base sfp_base
;
360 enum xgbe_sfp_cable sfp_cable
;
361 enum xgbe_sfp_speed sfp_speed
;
362 struct xgbe_sfp_eeprom sfp_eeprom
;
364 /* External PHY support */
365 enum xgbe_mdio_mode phydev_mode
;
367 struct phy_device
*phydev
;
368 enum xgbe_mdio_reset mdio_reset
;
369 unsigned int mdio_reset_addr
;
370 unsigned int mdio_reset_gpio
;
372 /* Re-driver support */
374 unsigned int redrv_if
;
375 unsigned int redrv_addr
;
376 unsigned int redrv_lane
;
377 unsigned int redrv_model
;
380 unsigned int phy_cdr_notrack
;
381 unsigned int phy_cdr_delay
;
384 /* I2C, MDIO and GPIO lines are muxed, so only one device at a time */
385 static DEFINE_MUTEX(xgbe_phy_comm_lock
);
387 static enum xgbe_an_mode
xgbe_phy_an_mode(struct xgbe_prv_data
*pdata
);
389 static int xgbe_phy_i2c_xfer(struct xgbe_prv_data
*pdata
,
390 struct xgbe_i2c_op
*i2c_op
)
392 return pdata
->i2c_if
.i2c_xfer(pdata
, i2c_op
);
395 static int xgbe_phy_redrv_write(struct xgbe_prv_data
*pdata
, unsigned int reg
,
398 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
399 struct xgbe_i2c_op i2c_op
;
401 u8 redrv_data
[5], csum
;
402 unsigned int i
, retry
;
405 /* High byte of register contains read/write indicator */
406 redrv_data
[0] = ((reg
>> 8) & 0xff) << 1;
407 redrv_data
[1] = reg
& 0xff;
408 redrv_val
= (__be16
*)&redrv_data
[2];
409 *redrv_val
= cpu_to_be16(val
);
411 /* Calculate 1 byte checksum */
413 for (i
= 0; i
< 4; i
++) {
414 csum
+= redrv_data
[i
];
415 if (redrv_data
[i
] > csum
)
418 redrv_data
[4] = ~csum
;
422 i2c_op
.cmd
= XGBE_I2C_CMD_WRITE
;
423 i2c_op
.target
= phy_data
->redrv_addr
;
424 i2c_op
.len
= sizeof(redrv_data
);
425 i2c_op
.buf
= redrv_data
;
426 ret
= xgbe_phy_i2c_xfer(pdata
, &i2c_op
);
428 if ((ret
== -EAGAIN
) && retry
--)
436 i2c_op
.cmd
= XGBE_I2C_CMD_READ
;
437 i2c_op
.target
= phy_data
->redrv_addr
;
439 i2c_op
.buf
= redrv_data
;
440 ret
= xgbe_phy_i2c_xfer(pdata
, &i2c_op
);
442 if ((ret
== -EAGAIN
) && retry
--)
448 if (redrv_data
[0] != 0xff) {
449 netif_dbg(pdata
, drv
, pdata
->netdev
,
450 "Redriver write checksum error\n");
457 static int xgbe_phy_i2c_write(struct xgbe_prv_data
*pdata
, unsigned int target
,
458 void *val
, unsigned int val_len
)
460 struct xgbe_i2c_op i2c_op
;
465 /* Write the specfied register */
466 i2c_op
.cmd
= XGBE_I2C_CMD_WRITE
;
467 i2c_op
.target
= target
;
468 i2c_op
.len
= val_len
;
470 ret
= xgbe_phy_i2c_xfer(pdata
, &i2c_op
);
471 if ((ret
== -EAGAIN
) && retry
--)
477 static int xgbe_phy_i2c_read(struct xgbe_prv_data
*pdata
, unsigned int target
,
478 void *reg
, unsigned int reg_len
,
479 void *val
, unsigned int val_len
)
481 struct xgbe_i2c_op i2c_op
;
486 /* Set the specified register to read */
487 i2c_op
.cmd
= XGBE_I2C_CMD_WRITE
;
488 i2c_op
.target
= target
;
489 i2c_op
.len
= reg_len
;
491 ret
= xgbe_phy_i2c_xfer(pdata
, &i2c_op
);
493 if ((ret
== -EAGAIN
) && retry
--)
501 /* Read the specfied register */
502 i2c_op
.cmd
= XGBE_I2C_CMD_READ
;
503 i2c_op
.target
= target
;
504 i2c_op
.len
= val_len
;
506 ret
= xgbe_phy_i2c_xfer(pdata
, &i2c_op
);
507 if ((ret
== -EAGAIN
) && retry
--)
513 static int xgbe_phy_sfp_put_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 no mux channels */
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 int xgbe_phy_sfp_get_mux(struct xgbe_prv_data
*pdata
)
534 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
535 struct xgbe_i2c_op i2c_op
;
538 if (phy_data
->sfp_comm
== XGBE_SFP_COMM_DIRECT
)
541 /* Select desired mux channel */
542 mux_channel
= 1 << phy_data
->sfp_mux_channel
;
543 i2c_op
.cmd
= XGBE_I2C_CMD_WRITE
;
544 i2c_op
.target
= phy_data
->sfp_mux_address
;
545 i2c_op
.len
= sizeof(mux_channel
);
546 i2c_op
.buf
= &mux_channel
;
548 return xgbe_phy_i2c_xfer(pdata
, &i2c_op
);
551 static void xgbe_phy_put_comm_ownership(struct xgbe_prv_data
*pdata
)
553 mutex_unlock(&xgbe_phy_comm_lock
);
556 static int xgbe_phy_get_comm_ownership(struct xgbe_prv_data
*pdata
)
558 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
559 unsigned long timeout
;
560 unsigned int mutex_id
;
562 /* The I2C and MDIO/GPIO bus is multiplexed between multiple devices,
563 * the driver needs to take the software mutex and then the hardware
564 * mutexes before being able to use the busses.
566 mutex_lock(&xgbe_phy_comm_lock
);
568 /* Clear the mutexes */
569 XP_IOWRITE(pdata
, XP_I2C_MUTEX
, XGBE_MUTEX_RELEASE
);
570 XP_IOWRITE(pdata
, XP_MDIO_MUTEX
, XGBE_MUTEX_RELEASE
);
572 /* Mutex formats are the same for I2C and MDIO/GPIO */
574 XP_SET_BITS(mutex_id
, XP_I2C_MUTEX
, ID
, phy_data
->port_id
);
575 XP_SET_BITS(mutex_id
, XP_I2C_MUTEX
, ACTIVE
, 1);
577 timeout
= jiffies
+ (5 * HZ
);
578 while (time_before(jiffies
, timeout
)) {
579 /* Must be all zeroes in order to obtain the mutex */
580 if (XP_IOREAD(pdata
, XP_I2C_MUTEX
) ||
581 XP_IOREAD(pdata
, XP_MDIO_MUTEX
)) {
582 usleep_range(100, 200);
586 /* Obtain the mutex */
587 XP_IOWRITE(pdata
, XP_I2C_MUTEX
, mutex_id
);
588 XP_IOWRITE(pdata
, XP_MDIO_MUTEX
, mutex_id
);
593 mutex_unlock(&xgbe_phy_comm_lock
);
595 netdev_err(pdata
->netdev
, "unable to obtain hardware mutexes\n");
600 static int xgbe_phy_mdio_mii_write(struct xgbe_prv_data
*pdata
, int addr
,
603 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
605 if (reg
& MII_ADDR_C45
) {
606 if (phy_data
->phydev_mode
!= XGBE_MDIO_MODE_CL45
)
609 if (phy_data
->phydev_mode
!= XGBE_MDIO_MODE_CL22
)
613 return pdata
->hw_if
.write_ext_mii_regs(pdata
, addr
, reg
, val
);
616 static int xgbe_phy_i2c_mii_write(struct xgbe_prv_data
*pdata
, int reg
, u16 val
)
622 ret
= xgbe_phy_sfp_get_mux(pdata
);
626 mii_data
[0] = reg
& 0xff;
627 mii_val
= (__be16
*)&mii_data
[1];
628 *mii_val
= cpu_to_be16(val
);
630 ret
= xgbe_phy_i2c_write(pdata
, XGBE_SFP_PHY_ADDRESS
,
631 mii_data
, sizeof(mii_data
));
633 xgbe_phy_sfp_put_mux(pdata
);
638 static int xgbe_phy_mii_write(struct mii_bus
*mii
, int addr
, int reg
, u16 val
)
640 struct xgbe_prv_data
*pdata
= mii
->priv
;
641 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
644 ret
= xgbe_phy_get_comm_ownership(pdata
);
648 if (phy_data
->conn_type
== XGBE_CONN_TYPE_SFP
)
649 ret
= xgbe_phy_i2c_mii_write(pdata
, reg
, val
);
650 else if (phy_data
->conn_type
& XGBE_CONN_TYPE_MDIO
)
651 ret
= xgbe_phy_mdio_mii_write(pdata
, addr
, reg
, val
);
655 xgbe_phy_put_comm_ownership(pdata
);
660 static int xgbe_phy_mdio_mii_read(struct xgbe_prv_data
*pdata
, int addr
,
663 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
665 if (reg
& MII_ADDR_C45
) {
666 if (phy_data
->phydev_mode
!= XGBE_MDIO_MODE_CL45
)
669 if (phy_data
->phydev_mode
!= XGBE_MDIO_MODE_CL22
)
673 return pdata
->hw_if
.read_ext_mii_regs(pdata
, addr
, reg
);
676 static int xgbe_phy_i2c_mii_read(struct xgbe_prv_data
*pdata
, int reg
)
682 ret
= xgbe_phy_sfp_get_mux(pdata
);
687 ret
= xgbe_phy_i2c_read(pdata
, XGBE_SFP_PHY_ADDRESS
,
688 &mii_reg
, sizeof(mii_reg
),
689 &mii_val
, sizeof(mii_val
));
691 ret
= be16_to_cpu(mii_val
);
693 xgbe_phy_sfp_put_mux(pdata
);
698 static int xgbe_phy_mii_read(struct mii_bus
*mii
, int addr
, int reg
)
700 struct xgbe_prv_data
*pdata
= mii
->priv
;
701 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
704 ret
= xgbe_phy_get_comm_ownership(pdata
);
708 if (phy_data
->conn_type
== XGBE_CONN_TYPE_SFP
)
709 ret
= xgbe_phy_i2c_mii_read(pdata
, reg
);
710 else if (phy_data
->conn_type
& XGBE_CONN_TYPE_MDIO
)
711 ret
= xgbe_phy_mdio_mii_read(pdata
, addr
, reg
);
715 xgbe_phy_put_comm_ownership(pdata
);
720 static void xgbe_phy_sfp_phy_settings(struct xgbe_prv_data
*pdata
)
722 struct ethtool_link_ksettings
*lks
= &pdata
->phy
.lks
;
723 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
725 if (!phy_data
->sfp_mod_absent
&& !phy_data
->sfp_changed
)
730 if (phy_data
->sfp_mod_absent
) {
731 pdata
->phy
.speed
= SPEED_UNKNOWN
;
732 pdata
->phy
.duplex
= DUPLEX_UNKNOWN
;
733 pdata
->phy
.autoneg
= AUTONEG_ENABLE
;
734 pdata
->phy
.pause_autoneg
= AUTONEG_ENABLE
;
736 XGBE_SET_SUP(lks
, Autoneg
);
737 XGBE_SET_SUP(lks
, Pause
);
738 XGBE_SET_SUP(lks
, Asym_Pause
);
739 XGBE_SET_SUP(lks
, TP
);
740 XGBE_SET_SUP(lks
, FIBRE
);
742 XGBE_LM_COPY(lks
, advertising
, lks
, supported
);
747 switch (phy_data
->sfp_base
) {
748 case XGBE_SFP_BASE_1000_T
:
749 case XGBE_SFP_BASE_1000_SX
:
750 case XGBE_SFP_BASE_1000_LX
:
751 case XGBE_SFP_BASE_1000_CX
:
752 pdata
->phy
.speed
= SPEED_UNKNOWN
;
753 pdata
->phy
.duplex
= DUPLEX_UNKNOWN
;
754 pdata
->phy
.autoneg
= AUTONEG_ENABLE
;
755 pdata
->phy
.pause_autoneg
= AUTONEG_ENABLE
;
756 XGBE_SET_SUP(lks
, Autoneg
);
757 XGBE_SET_SUP(lks
, Pause
);
758 XGBE_SET_SUP(lks
, Asym_Pause
);
759 if (phy_data
->sfp_base
== XGBE_SFP_BASE_1000_T
) {
760 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_100
)
761 XGBE_SET_SUP(lks
, 100baseT_Full
);
762 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_1000
)
763 XGBE_SET_SUP(lks
, 1000baseT_Full
);
765 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_1000
)
766 XGBE_SET_SUP(lks
, 1000baseX_Full
);
769 case XGBE_SFP_BASE_10000_SR
:
770 case XGBE_SFP_BASE_10000_LR
:
771 case XGBE_SFP_BASE_10000_LRM
:
772 case XGBE_SFP_BASE_10000_ER
:
773 case XGBE_SFP_BASE_10000_CR
:
774 pdata
->phy
.speed
= SPEED_10000
;
775 pdata
->phy
.duplex
= DUPLEX_FULL
;
776 pdata
->phy
.autoneg
= AUTONEG_DISABLE
;
777 pdata
->phy
.pause_autoneg
= AUTONEG_DISABLE
;
778 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_10000
) {
779 switch (phy_data
->sfp_base
) {
780 case XGBE_SFP_BASE_10000_SR
:
781 XGBE_SET_SUP(lks
, 10000baseSR_Full
);
783 case XGBE_SFP_BASE_10000_LR
:
784 XGBE_SET_SUP(lks
, 10000baseLR_Full
);
786 case XGBE_SFP_BASE_10000_LRM
:
787 XGBE_SET_SUP(lks
, 10000baseLRM_Full
);
789 case XGBE_SFP_BASE_10000_ER
:
790 XGBE_SET_SUP(lks
, 10000baseER_Full
);
792 case XGBE_SFP_BASE_10000_CR
:
793 XGBE_SET_SUP(lks
, 10000baseCR_Full
);
801 pdata
->phy
.speed
= SPEED_UNKNOWN
;
802 pdata
->phy
.duplex
= DUPLEX_UNKNOWN
;
803 pdata
->phy
.autoneg
= AUTONEG_DISABLE
;
804 pdata
->phy
.pause_autoneg
= AUTONEG_DISABLE
;
808 switch (phy_data
->sfp_base
) {
809 case XGBE_SFP_BASE_1000_T
:
810 case XGBE_SFP_BASE_1000_CX
:
811 case XGBE_SFP_BASE_10000_CR
:
812 XGBE_SET_SUP(lks
, TP
);
815 XGBE_SET_SUP(lks
, FIBRE
);
819 XGBE_LM_COPY(lks
, advertising
, lks
, supported
);
822 static bool xgbe_phy_sfp_bit_rate(struct xgbe_sfp_eeprom
*sfp_eeprom
,
823 enum xgbe_sfp_speed sfp_speed
)
825 u8
*sfp_base
, min
, max
;
827 sfp_base
= sfp_eeprom
->base
;
830 case XGBE_SFP_SPEED_1000
:
831 min
= XGBE_SFP_BASE_BR_1GBE_MIN
;
832 max
= XGBE_SFP_BASE_BR_1GBE_MAX
;
834 case XGBE_SFP_SPEED_10000
:
835 min
= XGBE_SFP_BASE_BR_10GBE_MIN
;
836 max
= XGBE_SFP_BASE_BR_10GBE_MAX
;
842 return ((sfp_base
[XGBE_SFP_BASE_BR
] >= min
) &&
843 (sfp_base
[XGBE_SFP_BASE_BR
] <= max
));
846 static void xgbe_phy_free_phy_device(struct xgbe_prv_data
*pdata
)
848 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
850 if (phy_data
->phydev
) {
851 phy_detach(phy_data
->phydev
);
852 phy_device_remove(phy_data
->phydev
);
853 phy_device_free(phy_data
->phydev
);
854 phy_data
->phydev
= NULL
;
858 static bool xgbe_phy_finisar_phy_quirks(struct xgbe_prv_data
*pdata
)
860 __ETHTOOL_DECLARE_LINK_MODE_MASK(supported
) = { 0, };
861 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
862 unsigned int phy_id
= phy_data
->phydev
->phy_id
;
864 if (phy_data
->port_mode
!= XGBE_PORT_MODE_SFP
)
867 if ((phy_id
& 0xfffffff0) != 0x01ff0cc0)
870 /* Enable Base-T AN */
871 phy_write(phy_data
->phydev
, 0x16, 0x0001);
872 phy_write(phy_data
->phydev
, 0x00, 0x9140);
873 phy_write(phy_data
->phydev
, 0x16, 0x0000);
875 /* Enable SGMII at 100Base-T/1000Base-T Full Duplex */
876 phy_write(phy_data
->phydev
, 0x1b, 0x9084);
877 phy_write(phy_data
->phydev
, 0x09, 0x0e00);
878 phy_write(phy_data
->phydev
, 0x00, 0x8140);
879 phy_write(phy_data
->phydev
, 0x04, 0x0d01);
880 phy_write(phy_data
->phydev
, 0x00, 0x9140);
882 linkmode_set_bit_array(phy_10_100_features_array
,
883 ARRAY_SIZE(phy_10_100_features_array
),
885 linkmode_set_bit_array(phy_gbit_features_array
,
886 ARRAY_SIZE(phy_gbit_features_array
),
889 linkmode_copy(phy_data
->phydev
->supported
, supported
);
891 phy_support_asym_pause(phy_data
->phydev
);
893 netif_dbg(pdata
, drv
, pdata
->netdev
,
894 "Finisar PHY quirk in place\n");
899 static bool xgbe_phy_belfuse_phy_quirks(struct xgbe_prv_data
*pdata
)
901 __ETHTOOL_DECLARE_LINK_MODE_MASK(supported
) = { 0, };
902 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
903 struct xgbe_sfp_eeprom
*sfp_eeprom
= &phy_data
->sfp_eeprom
;
904 unsigned int phy_id
= phy_data
->phydev
->phy_id
;
907 if (phy_data
->port_mode
!= XGBE_PORT_MODE_SFP
)
910 if (memcmp(&sfp_eeprom
->base
[XGBE_SFP_BASE_VENDOR_NAME
],
911 XGBE_BEL_FUSE_VENDOR
, XGBE_SFP_BASE_VENDOR_NAME_LEN
))
914 /* For Bel-Fuse, use the extra AN flag */
917 if (memcmp(&sfp_eeprom
->base
[XGBE_SFP_BASE_VENDOR_PN
],
918 XGBE_BEL_FUSE_PARTNO
, XGBE_SFP_BASE_VENDOR_PN_LEN
))
921 if ((phy_id
& 0xfffffff0) != 0x03625d10)
924 /* Disable RGMII mode */
925 phy_write(phy_data
->phydev
, 0x18, 0x7007);
926 reg
= phy_read(phy_data
->phydev
, 0x18);
927 phy_write(phy_data
->phydev
, 0x18, reg
& ~0x0080);
929 /* Enable fiber register bank */
930 phy_write(phy_data
->phydev
, 0x1c, 0x7c00);
931 reg
= phy_read(phy_data
->phydev
, 0x1c);
934 phy_write(phy_data
->phydev
, 0x1c, 0x8000 | 0x7c00 | reg
| 0x0001);
936 /* Power down SerDes */
937 reg
= phy_read(phy_data
->phydev
, 0x00);
938 phy_write(phy_data
->phydev
, 0x00, reg
| 0x00800);
940 /* Configure SGMII-to-Copper mode */
941 phy_write(phy_data
->phydev
, 0x1c, 0x7c00);
942 reg
= phy_read(phy_data
->phydev
, 0x1c);
945 phy_write(phy_data
->phydev
, 0x1c, 0x8000 | 0x7c00 | reg
| 0x0004);
947 /* Power up SerDes */
948 reg
= phy_read(phy_data
->phydev
, 0x00);
949 phy_write(phy_data
->phydev
, 0x00, reg
& ~0x00800);
951 /* Enable copper register bank */
952 phy_write(phy_data
->phydev
, 0x1c, 0x7c00);
953 reg
= phy_read(phy_data
->phydev
, 0x1c);
956 phy_write(phy_data
->phydev
, 0x1c, 0x8000 | 0x7c00 | reg
);
958 /* Power up SerDes */
959 reg
= phy_read(phy_data
->phydev
, 0x00);
960 phy_write(phy_data
->phydev
, 0x00, reg
& ~0x00800);
962 linkmode_set_bit_array(phy_10_100_features_array
,
963 ARRAY_SIZE(phy_10_100_features_array
),
965 linkmode_set_bit_array(phy_gbit_features_array
,
966 ARRAY_SIZE(phy_gbit_features_array
),
968 linkmode_copy(phy_data
->phydev
->supported
, supported
);
969 phy_support_asym_pause(phy_data
->phydev
);
971 netif_dbg(pdata
, drv
, pdata
->netdev
,
972 "BelFuse PHY quirk in place\n");
977 static void xgbe_phy_external_phy_quirks(struct xgbe_prv_data
*pdata
)
979 if (xgbe_phy_belfuse_phy_quirks(pdata
))
982 if (xgbe_phy_finisar_phy_quirks(pdata
))
986 static int xgbe_phy_find_phy_device(struct xgbe_prv_data
*pdata
)
988 struct ethtool_link_ksettings
*lks
= &pdata
->phy
.lks
;
989 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
990 struct phy_device
*phydev
;
993 /* If we already have a PHY, just return */
994 if (phy_data
->phydev
)
997 /* Clear the extra AN flag */
1000 /* Check for the use of an external PHY */
1001 if (phy_data
->phydev_mode
== XGBE_MDIO_MODE_NONE
)
1004 /* For SFP, only use an external PHY if available */
1005 if ((phy_data
->port_mode
== XGBE_PORT_MODE_SFP
) &&
1006 !phy_data
->sfp_phy_avail
)
1009 /* Set the proper MDIO mode for the PHY */
1010 ret
= pdata
->hw_if
.set_ext_mii_mode(pdata
, phy_data
->mdio_addr
,
1011 phy_data
->phydev_mode
);
1013 netdev_err(pdata
->netdev
,
1014 "mdio port/clause not compatible (%u/%u)\n",
1015 phy_data
->mdio_addr
, phy_data
->phydev_mode
);
1019 /* Create and connect to the PHY device */
1020 phydev
= get_phy_device(phy_data
->mii
, phy_data
->mdio_addr
,
1021 (phy_data
->phydev_mode
== XGBE_MDIO_MODE_CL45
));
1022 if (IS_ERR(phydev
)) {
1023 netdev_err(pdata
->netdev
, "get_phy_device failed\n");
1026 netif_dbg(pdata
, drv
, pdata
->netdev
, "external PHY id is %#010x\n",
1029 /*TODO: If c45, add request_module based on one of the MMD ids? */
1031 ret
= phy_device_register(phydev
);
1033 netdev_err(pdata
->netdev
, "phy_device_register failed\n");
1034 phy_device_free(phydev
);
1038 ret
= phy_attach_direct(pdata
->netdev
, phydev
, phydev
->dev_flags
,
1039 PHY_INTERFACE_MODE_SGMII
);
1041 netdev_err(pdata
->netdev
, "phy_attach_direct failed\n");
1042 phy_device_remove(phydev
);
1043 phy_device_free(phydev
);
1046 phy_data
->phydev
= phydev
;
1048 xgbe_phy_external_phy_quirks(pdata
);
1050 linkmode_and(phydev
->advertising
, phydev
->advertising
,
1051 lks
->link_modes
.advertising
);
1053 phy_start_aneg(phy_data
->phydev
);
1058 static void xgbe_phy_sfp_external_phy(struct xgbe_prv_data
*pdata
)
1060 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1063 if (!phy_data
->sfp_changed
)
1066 phy_data
->sfp_phy_avail
= 0;
1068 if (phy_data
->sfp_base
!= XGBE_SFP_BASE_1000_T
)
1071 /* Check access to the PHY by reading CTRL1 */
1072 ret
= xgbe_phy_i2c_mii_read(pdata
, MII_BMCR
);
1076 /* Successfully accessed the PHY */
1077 phy_data
->sfp_phy_avail
= 1;
1080 static bool xgbe_phy_check_sfp_rx_los(struct xgbe_phy_data
*phy_data
)
1082 u8
*sfp_extd
= phy_data
->sfp_eeprom
.extd
;
1084 if (!(sfp_extd
[XGBE_SFP_EXTD_OPT1
] & XGBE_SFP_EXTD_OPT1_RX_LOS
))
1087 if (phy_data
->sfp_gpio_mask
& XGBE_GPIO_NO_RX_LOS
)
1090 if (phy_data
->sfp_gpio_inputs
& (1 << phy_data
->sfp_gpio_rx_los
))
1096 static bool xgbe_phy_check_sfp_tx_fault(struct xgbe_phy_data
*phy_data
)
1098 u8
*sfp_extd
= phy_data
->sfp_eeprom
.extd
;
1100 if (!(sfp_extd
[XGBE_SFP_EXTD_OPT1
] & XGBE_SFP_EXTD_OPT1_TX_FAULT
))
1103 if (phy_data
->sfp_gpio_mask
& XGBE_GPIO_NO_TX_FAULT
)
1106 if (phy_data
->sfp_gpio_inputs
& (1 << phy_data
->sfp_gpio_tx_fault
))
1112 static bool xgbe_phy_check_sfp_mod_absent(struct xgbe_phy_data
*phy_data
)
1114 if (phy_data
->sfp_gpio_mask
& XGBE_GPIO_NO_MOD_ABSENT
)
1117 if (phy_data
->sfp_gpio_inputs
& (1 << phy_data
->sfp_gpio_mod_absent
))
1123 static void xgbe_phy_sfp_parse_eeprom(struct xgbe_prv_data
*pdata
)
1125 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1126 struct xgbe_sfp_eeprom
*sfp_eeprom
= &phy_data
->sfp_eeprom
;
1129 sfp_base
= sfp_eeprom
->base
;
1131 if (sfp_base
[XGBE_SFP_BASE_ID
] != XGBE_SFP_ID_SFP
)
1134 if (sfp_base
[XGBE_SFP_BASE_EXT_ID
] != XGBE_SFP_EXT_ID_SFP
)
1137 /* Update transceiver signals (eeprom extd/options) */
1138 phy_data
->sfp_tx_fault
= xgbe_phy_check_sfp_tx_fault(phy_data
);
1139 phy_data
->sfp_rx_los
= xgbe_phy_check_sfp_rx_los(phy_data
);
1141 /* Assume ACTIVE cable unless told it is PASSIVE */
1142 if (sfp_base
[XGBE_SFP_BASE_CABLE
] & XGBE_SFP_BASE_CABLE_PASSIVE
) {
1143 phy_data
->sfp_cable
= XGBE_SFP_CABLE_PASSIVE
;
1144 phy_data
->sfp_cable_len
= sfp_base
[XGBE_SFP_BASE_CU_CABLE_LEN
];
1146 phy_data
->sfp_cable
= XGBE_SFP_CABLE_ACTIVE
;
1149 /* Determine the type of SFP */
1150 if (sfp_base
[XGBE_SFP_BASE_10GBE_CC
] & XGBE_SFP_BASE_10GBE_CC_SR
)
1151 phy_data
->sfp_base
= XGBE_SFP_BASE_10000_SR
;
1152 else if (sfp_base
[XGBE_SFP_BASE_10GBE_CC
] & XGBE_SFP_BASE_10GBE_CC_LR
)
1153 phy_data
->sfp_base
= XGBE_SFP_BASE_10000_LR
;
1154 else if (sfp_base
[XGBE_SFP_BASE_10GBE_CC
] & XGBE_SFP_BASE_10GBE_CC_LRM
)
1155 phy_data
->sfp_base
= XGBE_SFP_BASE_10000_LRM
;
1156 else if (sfp_base
[XGBE_SFP_BASE_10GBE_CC
] & XGBE_SFP_BASE_10GBE_CC_ER
)
1157 phy_data
->sfp_base
= XGBE_SFP_BASE_10000_ER
;
1158 else if (sfp_base
[XGBE_SFP_BASE_1GBE_CC
] & XGBE_SFP_BASE_1GBE_CC_SX
)
1159 phy_data
->sfp_base
= XGBE_SFP_BASE_1000_SX
;
1160 else if (sfp_base
[XGBE_SFP_BASE_1GBE_CC
] & XGBE_SFP_BASE_1GBE_CC_LX
)
1161 phy_data
->sfp_base
= XGBE_SFP_BASE_1000_LX
;
1162 else if (sfp_base
[XGBE_SFP_BASE_1GBE_CC
] & XGBE_SFP_BASE_1GBE_CC_CX
)
1163 phy_data
->sfp_base
= XGBE_SFP_BASE_1000_CX
;
1164 else if (sfp_base
[XGBE_SFP_BASE_1GBE_CC
] & XGBE_SFP_BASE_1GBE_CC_T
)
1165 phy_data
->sfp_base
= XGBE_SFP_BASE_1000_T
;
1166 else if ((phy_data
->sfp_cable
== XGBE_SFP_CABLE_PASSIVE
) &&
1167 xgbe_phy_sfp_bit_rate(sfp_eeprom
, XGBE_SFP_SPEED_10000
))
1168 phy_data
->sfp_base
= XGBE_SFP_BASE_10000_CR
;
1170 switch (phy_data
->sfp_base
) {
1171 case XGBE_SFP_BASE_1000_T
:
1172 phy_data
->sfp_speed
= XGBE_SFP_SPEED_100_1000
;
1174 case XGBE_SFP_BASE_1000_SX
:
1175 case XGBE_SFP_BASE_1000_LX
:
1176 case XGBE_SFP_BASE_1000_CX
:
1177 phy_data
->sfp_speed
= XGBE_SFP_SPEED_1000
;
1179 case XGBE_SFP_BASE_10000_SR
:
1180 case XGBE_SFP_BASE_10000_LR
:
1181 case XGBE_SFP_BASE_10000_LRM
:
1182 case XGBE_SFP_BASE_10000_ER
:
1183 case XGBE_SFP_BASE_10000_CR
:
1184 phy_data
->sfp_speed
= XGBE_SFP_SPEED_10000
;
1191 static void xgbe_phy_sfp_eeprom_info(struct xgbe_prv_data
*pdata
,
1192 struct xgbe_sfp_eeprom
*sfp_eeprom
)
1194 struct xgbe_sfp_ascii sfp_ascii
;
1195 char *sfp_data
= (char *)&sfp_ascii
;
1197 netif_dbg(pdata
, drv
, pdata
->netdev
, "SFP detected:\n");
1198 memcpy(sfp_data
, &sfp_eeprom
->base
[XGBE_SFP_BASE_VENDOR_NAME
],
1199 XGBE_SFP_BASE_VENDOR_NAME_LEN
);
1200 sfp_data
[XGBE_SFP_BASE_VENDOR_NAME_LEN
] = '\0';
1201 netif_dbg(pdata
, drv
, pdata
->netdev
, " vendor: %s\n",
1204 memcpy(sfp_data
, &sfp_eeprom
->base
[XGBE_SFP_BASE_VENDOR_PN
],
1205 XGBE_SFP_BASE_VENDOR_PN_LEN
);
1206 sfp_data
[XGBE_SFP_BASE_VENDOR_PN_LEN
] = '\0';
1207 netif_dbg(pdata
, drv
, pdata
->netdev
, " part number: %s\n",
1210 memcpy(sfp_data
, &sfp_eeprom
->base
[XGBE_SFP_BASE_VENDOR_REV
],
1211 XGBE_SFP_BASE_VENDOR_REV_LEN
);
1212 sfp_data
[XGBE_SFP_BASE_VENDOR_REV_LEN
] = '\0';
1213 netif_dbg(pdata
, drv
, pdata
->netdev
, " revision level: %s\n",
1216 memcpy(sfp_data
, &sfp_eeprom
->extd
[XGBE_SFP_BASE_VENDOR_SN
],
1217 XGBE_SFP_BASE_VENDOR_SN_LEN
);
1218 sfp_data
[XGBE_SFP_BASE_VENDOR_SN_LEN
] = '\0';
1219 netif_dbg(pdata
, drv
, pdata
->netdev
, " serial number: %s\n",
1223 static bool xgbe_phy_sfp_verify_eeprom(u8 cc_in
, u8
*buf
, unsigned int len
)
1227 for (cc
= 0; len
; buf
++, len
--)
1233 static int xgbe_phy_sfp_read_eeprom(struct xgbe_prv_data
*pdata
)
1235 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1236 struct xgbe_sfp_eeprom sfp_eeprom
;
1240 ret
= xgbe_phy_sfp_get_mux(pdata
);
1242 dev_err_once(pdata
->dev
, "%s: I2C error setting SFP MUX\n",
1243 netdev_name(pdata
->netdev
));
1247 /* Read the SFP serial ID eeprom */
1249 ret
= xgbe_phy_i2c_read(pdata
, XGBE_SFP_SERIAL_ID_ADDRESS
,
1250 &eeprom_addr
, sizeof(eeprom_addr
),
1251 &sfp_eeprom
, sizeof(sfp_eeprom
));
1253 dev_err_once(pdata
->dev
, "%s: I2C error reading SFP EEPROM\n",
1254 netdev_name(pdata
->netdev
));
1258 /* Validate the contents read */
1259 if (!xgbe_phy_sfp_verify_eeprom(sfp_eeprom
.base
[XGBE_SFP_BASE_CC
],
1261 sizeof(sfp_eeprom
.base
) - 1)) {
1266 if (!xgbe_phy_sfp_verify_eeprom(sfp_eeprom
.extd
[XGBE_SFP_EXTD_CC
],
1268 sizeof(sfp_eeprom
.extd
) - 1)) {
1273 /* Check for an added or changed SFP */
1274 if (memcmp(&phy_data
->sfp_eeprom
, &sfp_eeprom
, sizeof(sfp_eeprom
))) {
1275 phy_data
->sfp_changed
= 1;
1277 if (netif_msg_drv(pdata
))
1278 xgbe_phy_sfp_eeprom_info(pdata
, &sfp_eeprom
);
1280 memcpy(&phy_data
->sfp_eeprom
, &sfp_eeprom
, sizeof(sfp_eeprom
));
1282 xgbe_phy_free_phy_device(pdata
);
1284 phy_data
->sfp_changed
= 0;
1288 xgbe_phy_sfp_put_mux(pdata
);
1293 static void xgbe_phy_sfp_signals(struct xgbe_prv_data
*pdata
)
1295 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1296 u8 gpio_reg
, gpio_ports
[2];
1299 /* Read the input port registers */
1301 ret
= xgbe_phy_i2c_read(pdata
, phy_data
->sfp_gpio_address
,
1302 &gpio_reg
, sizeof(gpio_reg
),
1303 gpio_ports
, sizeof(gpio_ports
));
1305 dev_err_once(pdata
->dev
, "%s: I2C error reading SFP GPIOs\n",
1306 netdev_name(pdata
->netdev
));
1310 phy_data
->sfp_gpio_inputs
= (gpio_ports
[1] << 8) | gpio_ports
[0];
1312 phy_data
->sfp_mod_absent
= xgbe_phy_check_sfp_mod_absent(phy_data
);
1315 static void xgbe_phy_sfp_mod_absent(struct xgbe_prv_data
*pdata
)
1317 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1319 xgbe_phy_free_phy_device(pdata
);
1321 phy_data
->sfp_mod_absent
= 1;
1322 phy_data
->sfp_phy_avail
= 0;
1323 memset(&phy_data
->sfp_eeprom
, 0, sizeof(phy_data
->sfp_eeprom
));
1326 static void xgbe_phy_sfp_reset(struct xgbe_phy_data
*phy_data
)
1328 phy_data
->sfp_rx_los
= 0;
1329 phy_data
->sfp_tx_fault
= 0;
1330 phy_data
->sfp_mod_absent
= 1;
1331 phy_data
->sfp_base
= XGBE_SFP_BASE_UNKNOWN
;
1332 phy_data
->sfp_cable
= XGBE_SFP_CABLE_UNKNOWN
;
1333 phy_data
->sfp_speed
= XGBE_SFP_SPEED_UNKNOWN
;
1336 static void xgbe_phy_sfp_detect(struct xgbe_prv_data
*pdata
)
1338 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1341 /* Reset the SFP signals and info */
1342 xgbe_phy_sfp_reset(phy_data
);
1344 ret
= xgbe_phy_get_comm_ownership(pdata
);
1348 /* Read the SFP signals and check for module presence */
1349 xgbe_phy_sfp_signals(pdata
);
1350 if (phy_data
->sfp_mod_absent
) {
1351 xgbe_phy_sfp_mod_absent(pdata
);
1355 ret
= xgbe_phy_sfp_read_eeprom(pdata
);
1357 /* Treat any error as if there isn't an SFP plugged in */
1358 xgbe_phy_sfp_reset(phy_data
);
1359 xgbe_phy_sfp_mod_absent(pdata
);
1363 xgbe_phy_sfp_parse_eeprom(pdata
);
1365 xgbe_phy_sfp_external_phy(pdata
);
1368 xgbe_phy_sfp_phy_settings(pdata
);
1370 xgbe_phy_put_comm_ownership(pdata
);
1373 static int xgbe_phy_module_eeprom(struct xgbe_prv_data
*pdata
,
1374 struct ethtool_eeprom
*eeprom
, u8
*data
)
1376 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1377 u8 eeprom_addr
, eeprom_data
[XGBE_SFP_EEPROM_MAX
];
1378 struct xgbe_sfp_eeprom
*sfp_eeprom
;
1379 unsigned int i
, j
, rem
;
1389 if ((eeprom
->offset
+ eeprom
->len
) > XGBE_SFP_EEPROM_MAX
) {
1394 if (phy_data
->port_mode
!= XGBE_PORT_MODE_SFP
) {
1399 if (!netif_running(pdata
->netdev
)) {
1404 if (phy_data
->sfp_mod_absent
) {
1409 ret
= xgbe_phy_get_comm_ownership(pdata
);
1415 ret
= xgbe_phy_sfp_get_mux(pdata
);
1417 netdev_err(pdata
->netdev
, "I2C error setting SFP MUX\n");
1422 /* Read the SFP serial ID eeprom */
1424 ret
= xgbe_phy_i2c_read(pdata
, XGBE_SFP_SERIAL_ID_ADDRESS
,
1425 &eeprom_addr
, sizeof(eeprom_addr
),
1426 eeprom_data
, XGBE_SFP_EEPROM_BASE_LEN
);
1428 netdev_err(pdata
->netdev
,
1429 "I2C error reading SFP EEPROM\n");
1434 sfp_eeprom
= (struct xgbe_sfp_eeprom
*)eeprom_data
;
1436 if (XGBE_SFP_DIAGS_SUPPORTED(sfp_eeprom
)) {
1437 /* Read the SFP diagnostic eeprom */
1439 ret
= xgbe_phy_i2c_read(pdata
, XGBE_SFP_DIAG_INFO_ADDRESS
,
1440 &eeprom_addr
, sizeof(eeprom_addr
),
1441 eeprom_data
+ XGBE_SFP_EEPROM_BASE_LEN
,
1442 XGBE_SFP_EEPROM_DIAG_LEN
);
1444 netdev_err(pdata
->netdev
,
1445 "I2C error reading SFP DIAGS\n");
1451 for (i
= 0, j
= eeprom
->offset
; i
< eeprom
->len
; i
++, j
++) {
1452 if ((j
>= XGBE_SFP_EEPROM_BASE_LEN
) &&
1453 !XGBE_SFP_DIAGS_SUPPORTED(sfp_eeprom
))
1456 data
[i
] = eeprom_data
[j
];
1461 xgbe_phy_sfp_put_mux(pdata
);
1464 xgbe_phy_put_comm_ownership(pdata
);
1472 static int xgbe_phy_module_info(struct xgbe_prv_data
*pdata
,
1473 struct ethtool_modinfo
*modinfo
)
1475 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1477 if (phy_data
->port_mode
!= XGBE_PORT_MODE_SFP
)
1480 if (!netif_running(pdata
->netdev
))
1483 if (phy_data
->sfp_mod_absent
)
1486 if (XGBE_SFP_DIAGS_SUPPORTED(&phy_data
->sfp_eeprom
)) {
1487 modinfo
->type
= ETH_MODULE_SFF_8472
;
1488 modinfo
->eeprom_len
= ETH_MODULE_SFF_8472_LEN
;
1490 modinfo
->type
= ETH_MODULE_SFF_8079
;
1491 modinfo
->eeprom_len
= ETH_MODULE_SFF_8079_LEN
;
1497 static void xgbe_phy_phydev_flowctrl(struct xgbe_prv_data
*pdata
)
1499 struct ethtool_link_ksettings
*lks
= &pdata
->phy
.lks
;
1500 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1501 u16 lcl_adv
= 0, rmt_adv
= 0;
1504 pdata
->phy
.tx_pause
= 0;
1505 pdata
->phy
.rx_pause
= 0;
1507 if (!phy_data
->phydev
)
1510 lcl_adv
= linkmode_adv_to_lcl_adv_t(phy_data
->phydev
->advertising
);
1512 if (phy_data
->phydev
->pause
) {
1513 XGBE_SET_LP_ADV(lks
, Pause
);
1514 rmt_adv
|= LPA_PAUSE_CAP
;
1516 if (phy_data
->phydev
->asym_pause
) {
1517 XGBE_SET_LP_ADV(lks
, Asym_Pause
);
1518 rmt_adv
|= LPA_PAUSE_ASYM
;
1521 fc
= mii_resolve_flowctrl_fdx(lcl_adv
, rmt_adv
);
1522 if (fc
& FLOW_CTRL_TX
)
1523 pdata
->phy
.tx_pause
= 1;
1524 if (fc
& FLOW_CTRL_RX
)
1525 pdata
->phy
.rx_pause
= 1;
1528 static enum xgbe_mode
xgbe_phy_an37_sgmii_outcome(struct xgbe_prv_data
*pdata
)
1530 struct ethtool_link_ksettings
*lks
= &pdata
->phy
.lks
;
1531 enum xgbe_mode mode
;
1533 XGBE_SET_LP_ADV(lks
, Autoneg
);
1534 XGBE_SET_LP_ADV(lks
, TP
);
1536 /* Use external PHY to determine flow control */
1537 if (pdata
->phy
.pause_autoneg
)
1538 xgbe_phy_phydev_flowctrl(pdata
);
1540 switch (pdata
->an_status
& XGBE_SGMII_AN_LINK_SPEED
) {
1541 case XGBE_SGMII_AN_LINK_SPEED_100
:
1542 if (pdata
->an_status
& XGBE_SGMII_AN_LINK_DUPLEX
) {
1543 XGBE_SET_LP_ADV(lks
, 100baseT_Full
);
1544 mode
= XGBE_MODE_SGMII_100
;
1546 /* Half-duplex not supported */
1547 XGBE_SET_LP_ADV(lks
, 100baseT_Half
);
1548 mode
= XGBE_MODE_UNKNOWN
;
1551 case XGBE_SGMII_AN_LINK_SPEED_1000
:
1552 if (pdata
->an_status
& XGBE_SGMII_AN_LINK_DUPLEX
) {
1553 XGBE_SET_LP_ADV(lks
, 1000baseT_Full
);
1554 mode
= XGBE_MODE_SGMII_1000
;
1556 /* Half-duplex not supported */
1557 XGBE_SET_LP_ADV(lks
, 1000baseT_Half
);
1558 mode
= XGBE_MODE_UNKNOWN
;
1562 mode
= XGBE_MODE_UNKNOWN
;
1568 static enum xgbe_mode
xgbe_phy_an37_outcome(struct xgbe_prv_data
*pdata
)
1570 struct ethtool_link_ksettings
*lks
= &pdata
->phy
.lks
;
1571 enum xgbe_mode mode
;
1572 unsigned int ad_reg
, lp_reg
;
1574 XGBE_SET_LP_ADV(lks
, Autoneg
);
1575 XGBE_SET_LP_ADV(lks
, FIBRE
);
1577 /* Compare Advertisement and Link Partner register */
1578 ad_reg
= XMDIO_READ(pdata
, MDIO_MMD_VEND2
, MDIO_VEND2_AN_ADVERTISE
);
1579 lp_reg
= XMDIO_READ(pdata
, MDIO_MMD_VEND2
, MDIO_VEND2_AN_LP_ABILITY
);
1581 XGBE_SET_LP_ADV(lks
, Pause
);
1583 XGBE_SET_LP_ADV(lks
, Asym_Pause
);
1585 if (pdata
->phy
.pause_autoneg
) {
1586 /* Set flow control based on auto-negotiation result */
1587 pdata
->phy
.tx_pause
= 0;
1588 pdata
->phy
.rx_pause
= 0;
1590 if (ad_reg
& lp_reg
& 0x100) {
1591 pdata
->phy
.tx_pause
= 1;
1592 pdata
->phy
.rx_pause
= 1;
1593 } else if (ad_reg
& lp_reg
& 0x80) {
1595 pdata
->phy
.rx_pause
= 1;
1596 else if (lp_reg
& 0x100)
1597 pdata
->phy
.tx_pause
= 1;
1602 XGBE_SET_LP_ADV(lks
, 1000baseX_Full
);
1604 /* Half duplex is not supported */
1606 mode
= (ad_reg
& 0x20) ? XGBE_MODE_X
: XGBE_MODE_UNKNOWN
;
1611 static enum xgbe_mode
xgbe_phy_an73_redrv_outcome(struct xgbe_prv_data
*pdata
)
1613 struct ethtool_link_ksettings
*lks
= &pdata
->phy
.lks
;
1614 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1615 enum xgbe_mode mode
;
1616 unsigned int ad_reg
, lp_reg
;
1618 XGBE_SET_LP_ADV(lks
, Autoneg
);
1619 XGBE_SET_LP_ADV(lks
, Backplane
);
1621 /* Use external PHY to determine flow control */
1622 if (pdata
->phy
.pause_autoneg
)
1623 xgbe_phy_phydev_flowctrl(pdata
);
1625 /* Compare Advertisement and Link Partner register 2 */
1626 ad_reg
= XMDIO_READ(pdata
, MDIO_MMD_AN
, MDIO_AN_ADVERTISE
+ 1);
1627 lp_reg
= XMDIO_READ(pdata
, MDIO_MMD_AN
, MDIO_AN_LPA
+ 1);
1629 XGBE_SET_LP_ADV(lks
, 10000baseKR_Full
);
1631 XGBE_SET_LP_ADV(lks
, 1000baseKX_Full
);
1634 if (ad_reg
& 0x80) {
1635 switch (phy_data
->port_mode
) {
1636 case XGBE_PORT_MODE_BACKPLANE
:
1637 mode
= XGBE_MODE_KR
;
1640 mode
= XGBE_MODE_SFI
;
1643 } else if (ad_reg
& 0x20) {
1644 switch (phy_data
->port_mode
) {
1645 case XGBE_PORT_MODE_BACKPLANE
:
1646 mode
= XGBE_MODE_KX_1000
;
1648 case XGBE_PORT_MODE_1000BASE_X
:
1651 case XGBE_PORT_MODE_SFP
:
1652 switch (phy_data
->sfp_base
) {
1653 case XGBE_SFP_BASE_1000_T
:
1654 if (phy_data
->phydev
&&
1655 (phy_data
->phydev
->speed
== SPEED_100
))
1656 mode
= XGBE_MODE_SGMII_100
;
1658 mode
= XGBE_MODE_SGMII_1000
;
1660 case XGBE_SFP_BASE_1000_SX
:
1661 case XGBE_SFP_BASE_1000_LX
:
1662 case XGBE_SFP_BASE_1000_CX
:
1669 if (phy_data
->phydev
&&
1670 (phy_data
->phydev
->speed
== SPEED_100
))
1671 mode
= XGBE_MODE_SGMII_100
;
1673 mode
= XGBE_MODE_SGMII_1000
;
1677 mode
= XGBE_MODE_UNKNOWN
;
1680 /* Compare Advertisement and Link Partner register 3 */
1681 ad_reg
= XMDIO_READ(pdata
, MDIO_MMD_AN
, MDIO_AN_ADVERTISE
+ 2);
1682 lp_reg
= XMDIO_READ(pdata
, MDIO_MMD_AN
, MDIO_AN_LPA
+ 2);
1683 if (lp_reg
& 0xc000)
1684 XGBE_SET_LP_ADV(lks
, 10000baseR_FEC
);
1689 static enum xgbe_mode
xgbe_phy_an73_outcome(struct xgbe_prv_data
*pdata
)
1691 struct ethtool_link_ksettings
*lks
= &pdata
->phy
.lks
;
1692 enum xgbe_mode mode
;
1693 unsigned int ad_reg
, lp_reg
;
1695 XGBE_SET_LP_ADV(lks
, Autoneg
);
1696 XGBE_SET_LP_ADV(lks
, Backplane
);
1698 /* Compare Advertisement and Link Partner register 1 */
1699 ad_reg
= XMDIO_READ(pdata
, MDIO_MMD_AN
, MDIO_AN_ADVERTISE
);
1700 lp_reg
= XMDIO_READ(pdata
, MDIO_MMD_AN
, MDIO_AN_LPA
);
1702 XGBE_SET_LP_ADV(lks
, Pause
);
1704 XGBE_SET_LP_ADV(lks
, Asym_Pause
);
1706 if (pdata
->phy
.pause_autoneg
) {
1707 /* Set flow control based on auto-negotiation result */
1708 pdata
->phy
.tx_pause
= 0;
1709 pdata
->phy
.rx_pause
= 0;
1711 if (ad_reg
& lp_reg
& 0x400) {
1712 pdata
->phy
.tx_pause
= 1;
1713 pdata
->phy
.rx_pause
= 1;
1714 } else if (ad_reg
& lp_reg
& 0x800) {
1716 pdata
->phy
.rx_pause
= 1;
1717 else if (lp_reg
& 0x400)
1718 pdata
->phy
.tx_pause
= 1;
1722 /* Compare Advertisement and Link Partner register 2 */
1723 ad_reg
= XMDIO_READ(pdata
, MDIO_MMD_AN
, MDIO_AN_ADVERTISE
+ 1);
1724 lp_reg
= XMDIO_READ(pdata
, MDIO_MMD_AN
, MDIO_AN_LPA
+ 1);
1726 XGBE_SET_LP_ADV(lks
, 10000baseKR_Full
);
1728 XGBE_SET_LP_ADV(lks
, 1000baseKX_Full
);
1732 mode
= XGBE_MODE_KR
;
1733 else if (ad_reg
& 0x20)
1734 mode
= XGBE_MODE_KX_1000
;
1736 mode
= XGBE_MODE_UNKNOWN
;
1738 /* Compare Advertisement and Link Partner register 3 */
1739 ad_reg
= XMDIO_READ(pdata
, MDIO_MMD_AN
, MDIO_AN_ADVERTISE
+ 2);
1740 lp_reg
= XMDIO_READ(pdata
, MDIO_MMD_AN
, MDIO_AN_LPA
+ 2);
1741 if (lp_reg
& 0xc000)
1742 XGBE_SET_LP_ADV(lks
, 10000baseR_FEC
);
1747 static enum xgbe_mode
xgbe_phy_an_outcome(struct xgbe_prv_data
*pdata
)
1749 switch (pdata
->an_mode
) {
1750 case XGBE_AN_MODE_CL73
:
1751 return xgbe_phy_an73_outcome(pdata
);
1752 case XGBE_AN_MODE_CL73_REDRV
:
1753 return xgbe_phy_an73_redrv_outcome(pdata
);
1754 case XGBE_AN_MODE_CL37
:
1755 return xgbe_phy_an37_outcome(pdata
);
1756 case XGBE_AN_MODE_CL37_SGMII
:
1757 return xgbe_phy_an37_sgmii_outcome(pdata
);
1759 return XGBE_MODE_UNKNOWN
;
1763 static void xgbe_phy_an_advertising(struct xgbe_prv_data
*pdata
,
1764 struct ethtool_link_ksettings
*dlks
)
1766 struct ethtool_link_ksettings
*slks
= &pdata
->phy
.lks
;
1767 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1769 XGBE_LM_COPY(dlks
, advertising
, slks
, advertising
);
1771 /* Without a re-driver, just return current advertising */
1772 if (!phy_data
->redrv
)
1775 /* With the KR re-driver we need to advertise a single speed */
1776 XGBE_CLR_ADV(dlks
, 1000baseKX_Full
);
1777 XGBE_CLR_ADV(dlks
, 10000baseKR_Full
);
1779 /* Advertise FEC support is present */
1780 if (pdata
->fec_ability
& MDIO_PMA_10GBR_FECABLE_ABLE
)
1781 XGBE_SET_ADV(dlks
, 10000baseR_FEC
);
1783 switch (phy_data
->port_mode
) {
1784 case XGBE_PORT_MODE_BACKPLANE
:
1785 XGBE_SET_ADV(dlks
, 10000baseKR_Full
);
1787 case XGBE_PORT_MODE_BACKPLANE_2500
:
1788 XGBE_SET_ADV(dlks
, 1000baseKX_Full
);
1790 case XGBE_PORT_MODE_1000BASE_T
:
1791 case XGBE_PORT_MODE_1000BASE_X
:
1792 case XGBE_PORT_MODE_NBASE_T
:
1793 XGBE_SET_ADV(dlks
, 1000baseKX_Full
);
1795 case XGBE_PORT_MODE_10GBASE_T
:
1796 if (phy_data
->phydev
&&
1797 (phy_data
->phydev
->speed
== SPEED_10000
))
1798 XGBE_SET_ADV(dlks
, 10000baseKR_Full
);
1800 XGBE_SET_ADV(dlks
, 1000baseKX_Full
);
1802 case XGBE_PORT_MODE_10GBASE_R
:
1803 XGBE_SET_ADV(dlks
, 10000baseKR_Full
);
1805 case XGBE_PORT_MODE_SFP
:
1806 switch (phy_data
->sfp_base
) {
1807 case XGBE_SFP_BASE_1000_T
:
1808 case XGBE_SFP_BASE_1000_SX
:
1809 case XGBE_SFP_BASE_1000_LX
:
1810 case XGBE_SFP_BASE_1000_CX
:
1811 XGBE_SET_ADV(dlks
, 1000baseKX_Full
);
1814 XGBE_SET_ADV(dlks
, 10000baseKR_Full
);
1819 XGBE_SET_ADV(dlks
, 10000baseKR_Full
);
1824 static int xgbe_phy_an_config(struct xgbe_prv_data
*pdata
)
1826 struct ethtool_link_ksettings
*lks
= &pdata
->phy
.lks
;
1827 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1830 ret
= xgbe_phy_find_phy_device(pdata
);
1834 if (!phy_data
->phydev
)
1837 phy_data
->phydev
->autoneg
= pdata
->phy
.autoneg
;
1838 linkmode_and(phy_data
->phydev
->advertising
,
1839 phy_data
->phydev
->supported
,
1840 lks
->link_modes
.advertising
);
1842 if (pdata
->phy
.autoneg
!= AUTONEG_ENABLE
) {
1843 phy_data
->phydev
->speed
= pdata
->phy
.speed
;
1844 phy_data
->phydev
->duplex
= pdata
->phy
.duplex
;
1847 ret
= phy_start_aneg(phy_data
->phydev
);
1852 static enum xgbe_an_mode
xgbe_phy_an_sfp_mode(struct xgbe_phy_data
*phy_data
)
1854 switch (phy_data
->sfp_base
) {
1855 case XGBE_SFP_BASE_1000_T
:
1856 return XGBE_AN_MODE_CL37_SGMII
;
1857 case XGBE_SFP_BASE_1000_SX
:
1858 case XGBE_SFP_BASE_1000_LX
:
1859 case XGBE_SFP_BASE_1000_CX
:
1860 return XGBE_AN_MODE_CL37
;
1862 return XGBE_AN_MODE_NONE
;
1866 static enum xgbe_an_mode
xgbe_phy_an_mode(struct xgbe_prv_data
*pdata
)
1868 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1870 /* A KR re-driver will always require CL73 AN */
1871 if (phy_data
->redrv
)
1872 return XGBE_AN_MODE_CL73_REDRV
;
1874 switch (phy_data
->port_mode
) {
1875 case XGBE_PORT_MODE_BACKPLANE
:
1876 return XGBE_AN_MODE_CL73
;
1877 case XGBE_PORT_MODE_BACKPLANE_2500
:
1878 return XGBE_AN_MODE_NONE
;
1879 case XGBE_PORT_MODE_1000BASE_T
:
1880 return XGBE_AN_MODE_CL37_SGMII
;
1881 case XGBE_PORT_MODE_1000BASE_X
:
1882 return XGBE_AN_MODE_CL37
;
1883 case XGBE_PORT_MODE_NBASE_T
:
1884 return XGBE_AN_MODE_CL37_SGMII
;
1885 case XGBE_PORT_MODE_10GBASE_T
:
1886 return XGBE_AN_MODE_CL73
;
1887 case XGBE_PORT_MODE_10GBASE_R
:
1888 return XGBE_AN_MODE_NONE
;
1889 case XGBE_PORT_MODE_SFP
:
1890 return xgbe_phy_an_sfp_mode(phy_data
);
1892 return XGBE_AN_MODE_NONE
;
1896 static int xgbe_phy_set_redrv_mode_mdio(struct xgbe_prv_data
*pdata
,
1897 enum xgbe_phy_redrv_mode mode
)
1899 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1900 u16 redrv_reg
, redrv_val
;
1902 redrv_reg
= XGBE_PHY_REDRV_MODE_REG
+ (phy_data
->redrv_lane
* 0x1000);
1903 redrv_val
= (u16
)mode
;
1905 return pdata
->hw_if
.write_ext_mii_regs(pdata
, phy_data
->redrv_addr
,
1906 redrv_reg
, redrv_val
);
1909 static int xgbe_phy_set_redrv_mode_i2c(struct xgbe_prv_data
*pdata
,
1910 enum xgbe_phy_redrv_mode mode
)
1912 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1913 unsigned int redrv_reg
;
1916 /* Calculate the register to write */
1917 redrv_reg
= XGBE_PHY_REDRV_MODE_REG
+ (phy_data
->redrv_lane
* 0x1000);
1919 ret
= xgbe_phy_redrv_write(pdata
, redrv_reg
, mode
);
1924 static void xgbe_phy_set_redrv_mode(struct xgbe_prv_data
*pdata
)
1926 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1927 enum xgbe_phy_redrv_mode mode
;
1930 if (!phy_data
->redrv
)
1933 mode
= XGBE_PHY_REDRV_MODE_CX
;
1934 if ((phy_data
->port_mode
== XGBE_PORT_MODE_SFP
) &&
1935 (phy_data
->sfp_base
!= XGBE_SFP_BASE_1000_CX
) &&
1936 (phy_data
->sfp_base
!= XGBE_SFP_BASE_10000_CR
))
1937 mode
= XGBE_PHY_REDRV_MODE_SR
;
1939 ret
= xgbe_phy_get_comm_ownership(pdata
);
1943 if (phy_data
->redrv_if
)
1944 xgbe_phy_set_redrv_mode_i2c(pdata
, mode
);
1946 xgbe_phy_set_redrv_mode_mdio(pdata
, mode
);
1948 xgbe_phy_put_comm_ownership(pdata
);
1951 static void xgbe_phy_perform_ratechange(struct xgbe_prv_data
*pdata
,
1952 unsigned int cmd
, unsigned int sub_cmd
)
1954 unsigned int s0
= 0;
1957 /* Log if a previous command did not complete */
1958 if (XP_IOREAD_BITS(pdata
, XP_DRIVER_INT_RO
, STATUS
))
1959 netif_dbg(pdata
, link
, pdata
->netdev
,
1960 "firmware mailbox not ready for command\n");
1962 /* Construct the command */
1963 XP_SET_BITS(s0
, XP_DRIVER_SCRATCH_0
, COMMAND
, cmd
);
1964 XP_SET_BITS(s0
, XP_DRIVER_SCRATCH_0
, SUB_COMMAND
, sub_cmd
);
1966 /* Issue the command */
1967 XP_IOWRITE(pdata
, XP_DRIVER_SCRATCH_0
, s0
);
1968 XP_IOWRITE(pdata
, XP_DRIVER_SCRATCH_1
, 0);
1969 XP_IOWRITE_BITS(pdata
, XP_DRIVER_INT_REQ
, REQUEST
, 1);
1971 /* Wait for command to complete */
1972 wait
= XGBE_RATECHANGE_COUNT
;
1974 if (!XP_IOREAD_BITS(pdata
, XP_DRIVER_INT_RO
, STATUS
))
1977 usleep_range(1000, 2000);
1980 netif_dbg(pdata
, link
, pdata
->netdev
,
1981 "firmware mailbox command did not complete\n");
1984 static void xgbe_phy_rrc(struct xgbe_prv_data
*pdata
)
1986 /* Receiver Reset Cycle */
1987 xgbe_phy_perform_ratechange(pdata
, 5, 0);
1989 netif_dbg(pdata
, link
, pdata
->netdev
, "receiver reset complete\n");
1992 static void xgbe_phy_power_off(struct xgbe_prv_data
*pdata
)
1994 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
1997 xgbe_phy_perform_ratechange(pdata
, 0, 0);
1999 phy_data
->cur_mode
= XGBE_MODE_UNKNOWN
;
2001 netif_dbg(pdata
, link
, pdata
->netdev
, "phy powered off\n");
2004 static void xgbe_phy_sfi_mode(struct xgbe_prv_data
*pdata
)
2006 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2008 xgbe_phy_set_redrv_mode(pdata
);
2011 if (phy_data
->sfp_cable
!= XGBE_SFP_CABLE_PASSIVE
) {
2012 xgbe_phy_perform_ratechange(pdata
, 3, 0);
2014 if (phy_data
->sfp_cable_len
<= 1)
2015 xgbe_phy_perform_ratechange(pdata
, 3, 1);
2016 else if (phy_data
->sfp_cable_len
<= 3)
2017 xgbe_phy_perform_ratechange(pdata
, 3, 2);
2019 xgbe_phy_perform_ratechange(pdata
, 3, 3);
2022 phy_data
->cur_mode
= XGBE_MODE_SFI
;
2024 netif_dbg(pdata
, link
, pdata
->netdev
, "10GbE SFI mode set\n");
2027 static void xgbe_phy_x_mode(struct xgbe_prv_data
*pdata
)
2029 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2031 xgbe_phy_set_redrv_mode(pdata
);
2034 xgbe_phy_perform_ratechange(pdata
, 1, 3);
2036 phy_data
->cur_mode
= XGBE_MODE_X
;
2038 netif_dbg(pdata
, link
, pdata
->netdev
, "1GbE X mode set\n");
2041 static void xgbe_phy_sgmii_1000_mode(struct xgbe_prv_data
*pdata
)
2043 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2045 xgbe_phy_set_redrv_mode(pdata
);
2048 xgbe_phy_perform_ratechange(pdata
, 1, 2);
2050 phy_data
->cur_mode
= XGBE_MODE_SGMII_1000
;
2052 netif_dbg(pdata
, link
, pdata
->netdev
, "1GbE SGMII mode set\n");
2055 static void xgbe_phy_sgmii_100_mode(struct xgbe_prv_data
*pdata
)
2057 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2059 xgbe_phy_set_redrv_mode(pdata
);
2062 xgbe_phy_perform_ratechange(pdata
, 1, 1);
2064 phy_data
->cur_mode
= XGBE_MODE_SGMII_100
;
2066 netif_dbg(pdata
, link
, pdata
->netdev
, "100MbE SGMII mode set\n");
2069 static void xgbe_phy_kr_mode(struct xgbe_prv_data
*pdata
)
2071 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2073 xgbe_phy_set_redrv_mode(pdata
);
2076 xgbe_phy_perform_ratechange(pdata
, 4, 0);
2078 phy_data
->cur_mode
= XGBE_MODE_KR
;
2080 netif_dbg(pdata
, link
, pdata
->netdev
, "10GbE KR mode set\n");
2083 static void xgbe_phy_kx_2500_mode(struct xgbe_prv_data
*pdata
)
2085 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2087 xgbe_phy_set_redrv_mode(pdata
);
2090 xgbe_phy_perform_ratechange(pdata
, 2, 0);
2092 phy_data
->cur_mode
= XGBE_MODE_KX_2500
;
2094 netif_dbg(pdata
, link
, pdata
->netdev
, "2.5GbE KX mode set\n");
2097 static void xgbe_phy_kx_1000_mode(struct xgbe_prv_data
*pdata
)
2099 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2101 xgbe_phy_set_redrv_mode(pdata
);
2104 xgbe_phy_perform_ratechange(pdata
, 1, 3);
2106 phy_data
->cur_mode
= XGBE_MODE_KX_1000
;
2108 netif_dbg(pdata
, link
, pdata
->netdev
, "1GbE KX mode set\n");
2111 static enum xgbe_mode
xgbe_phy_cur_mode(struct xgbe_prv_data
*pdata
)
2113 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2115 return phy_data
->cur_mode
;
2118 static enum xgbe_mode
xgbe_phy_switch_baset_mode(struct xgbe_prv_data
*pdata
)
2120 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2122 /* No switching if not 10GBase-T */
2123 if (phy_data
->port_mode
!= XGBE_PORT_MODE_10GBASE_T
)
2124 return xgbe_phy_cur_mode(pdata
);
2126 switch (xgbe_phy_cur_mode(pdata
)) {
2127 case XGBE_MODE_SGMII_100
:
2128 case XGBE_MODE_SGMII_1000
:
2129 return XGBE_MODE_KR
;
2132 return XGBE_MODE_SGMII_1000
;
2136 static enum xgbe_mode
xgbe_phy_switch_bp_2500_mode(struct xgbe_prv_data
*pdata
)
2138 return XGBE_MODE_KX_2500
;
2141 static enum xgbe_mode
xgbe_phy_switch_bp_mode(struct xgbe_prv_data
*pdata
)
2143 /* If we are in KR switch to KX, and vice-versa */
2144 switch (xgbe_phy_cur_mode(pdata
)) {
2145 case XGBE_MODE_KX_1000
:
2146 return XGBE_MODE_KR
;
2149 return XGBE_MODE_KX_1000
;
2153 static enum xgbe_mode
xgbe_phy_switch_mode(struct xgbe_prv_data
*pdata
)
2155 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2157 switch (phy_data
->port_mode
) {
2158 case XGBE_PORT_MODE_BACKPLANE
:
2159 return xgbe_phy_switch_bp_mode(pdata
);
2160 case XGBE_PORT_MODE_BACKPLANE_2500
:
2161 return xgbe_phy_switch_bp_2500_mode(pdata
);
2162 case XGBE_PORT_MODE_1000BASE_T
:
2163 case XGBE_PORT_MODE_NBASE_T
:
2164 case XGBE_PORT_MODE_10GBASE_T
:
2165 return xgbe_phy_switch_baset_mode(pdata
);
2166 case XGBE_PORT_MODE_1000BASE_X
:
2167 case XGBE_PORT_MODE_10GBASE_R
:
2168 case XGBE_PORT_MODE_SFP
:
2169 /* No switching, so just return current mode */
2170 return xgbe_phy_cur_mode(pdata
);
2172 return XGBE_MODE_UNKNOWN
;
2176 static enum xgbe_mode
xgbe_phy_get_basex_mode(struct xgbe_phy_data
*phy_data
,
2183 return XGBE_MODE_KR
;
2185 return XGBE_MODE_UNKNOWN
;
2189 static enum xgbe_mode
xgbe_phy_get_baset_mode(struct xgbe_phy_data
*phy_data
,
2194 return XGBE_MODE_SGMII_100
;
2196 return XGBE_MODE_SGMII_1000
;
2198 return XGBE_MODE_KX_2500
;
2200 return XGBE_MODE_KR
;
2202 return XGBE_MODE_UNKNOWN
;
2206 static enum xgbe_mode
xgbe_phy_get_sfp_mode(struct xgbe_phy_data
*phy_data
,
2211 return XGBE_MODE_SGMII_100
;
2213 if (phy_data
->sfp_base
== XGBE_SFP_BASE_1000_T
)
2214 return XGBE_MODE_SGMII_1000
;
2219 return XGBE_MODE_SFI
;
2221 return XGBE_MODE_UNKNOWN
;
2225 static enum xgbe_mode
xgbe_phy_get_bp_2500_mode(int speed
)
2229 return XGBE_MODE_KX_2500
;
2231 return XGBE_MODE_UNKNOWN
;
2235 static enum xgbe_mode
xgbe_phy_get_bp_mode(int speed
)
2239 return XGBE_MODE_KX_1000
;
2241 return XGBE_MODE_KR
;
2243 return XGBE_MODE_UNKNOWN
;
2247 static enum xgbe_mode
xgbe_phy_get_mode(struct xgbe_prv_data
*pdata
,
2250 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2252 switch (phy_data
->port_mode
) {
2253 case XGBE_PORT_MODE_BACKPLANE
:
2254 return xgbe_phy_get_bp_mode(speed
);
2255 case XGBE_PORT_MODE_BACKPLANE_2500
:
2256 return xgbe_phy_get_bp_2500_mode(speed
);
2257 case XGBE_PORT_MODE_1000BASE_T
:
2258 case XGBE_PORT_MODE_NBASE_T
:
2259 case XGBE_PORT_MODE_10GBASE_T
:
2260 return xgbe_phy_get_baset_mode(phy_data
, speed
);
2261 case XGBE_PORT_MODE_1000BASE_X
:
2262 case XGBE_PORT_MODE_10GBASE_R
:
2263 return xgbe_phy_get_basex_mode(phy_data
, speed
);
2264 case XGBE_PORT_MODE_SFP
:
2265 return xgbe_phy_get_sfp_mode(phy_data
, speed
);
2267 return XGBE_MODE_UNKNOWN
;
2271 static void xgbe_phy_set_mode(struct xgbe_prv_data
*pdata
, enum xgbe_mode mode
)
2274 case XGBE_MODE_KX_1000
:
2275 xgbe_phy_kx_1000_mode(pdata
);
2277 case XGBE_MODE_KX_2500
:
2278 xgbe_phy_kx_2500_mode(pdata
);
2281 xgbe_phy_kr_mode(pdata
);
2283 case XGBE_MODE_SGMII_100
:
2284 xgbe_phy_sgmii_100_mode(pdata
);
2286 case XGBE_MODE_SGMII_1000
:
2287 xgbe_phy_sgmii_1000_mode(pdata
);
2290 xgbe_phy_x_mode(pdata
);
2293 xgbe_phy_sfi_mode(pdata
);
2300 static bool xgbe_phy_check_mode(struct xgbe_prv_data
*pdata
,
2301 enum xgbe_mode mode
, bool advert
)
2303 if (pdata
->phy
.autoneg
== AUTONEG_ENABLE
) {
2306 enum xgbe_mode cur_mode
;
2308 cur_mode
= xgbe_phy_get_mode(pdata
, pdata
->phy
.speed
);
2309 if (cur_mode
== mode
)
2316 static bool xgbe_phy_use_basex_mode(struct xgbe_prv_data
*pdata
,
2317 enum xgbe_mode mode
)
2319 struct ethtool_link_ksettings
*lks
= &pdata
->phy
.lks
;
2323 return xgbe_phy_check_mode(pdata
, mode
,
2324 XGBE_ADV(lks
, 1000baseX_Full
));
2326 return xgbe_phy_check_mode(pdata
, mode
,
2327 XGBE_ADV(lks
, 10000baseKR_Full
));
2333 static bool xgbe_phy_use_baset_mode(struct xgbe_prv_data
*pdata
,
2334 enum xgbe_mode mode
)
2336 struct ethtool_link_ksettings
*lks
= &pdata
->phy
.lks
;
2339 case XGBE_MODE_SGMII_100
:
2340 return xgbe_phy_check_mode(pdata
, mode
,
2341 XGBE_ADV(lks
, 100baseT_Full
));
2342 case XGBE_MODE_SGMII_1000
:
2343 return xgbe_phy_check_mode(pdata
, mode
,
2344 XGBE_ADV(lks
, 1000baseT_Full
));
2345 case XGBE_MODE_KX_2500
:
2346 return xgbe_phy_check_mode(pdata
, mode
,
2347 XGBE_ADV(lks
, 2500baseT_Full
));
2349 return xgbe_phy_check_mode(pdata
, mode
,
2350 XGBE_ADV(lks
, 10000baseT_Full
));
2356 static bool xgbe_phy_use_sfp_mode(struct xgbe_prv_data
*pdata
,
2357 enum xgbe_mode mode
)
2359 struct ethtool_link_ksettings
*lks
= &pdata
->phy
.lks
;
2360 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2364 if (phy_data
->sfp_base
== XGBE_SFP_BASE_1000_T
)
2366 return xgbe_phy_check_mode(pdata
, mode
,
2367 XGBE_ADV(lks
, 1000baseX_Full
));
2368 case XGBE_MODE_SGMII_100
:
2369 if (phy_data
->sfp_base
!= XGBE_SFP_BASE_1000_T
)
2371 return xgbe_phy_check_mode(pdata
, mode
,
2372 XGBE_ADV(lks
, 100baseT_Full
));
2373 case XGBE_MODE_SGMII_1000
:
2374 if (phy_data
->sfp_base
!= XGBE_SFP_BASE_1000_T
)
2376 return xgbe_phy_check_mode(pdata
, mode
,
2377 XGBE_ADV(lks
, 1000baseT_Full
));
2379 if (phy_data
->sfp_mod_absent
)
2381 return xgbe_phy_check_mode(pdata
, mode
,
2382 XGBE_ADV(lks
, 10000baseSR_Full
) ||
2383 XGBE_ADV(lks
, 10000baseLR_Full
) ||
2384 XGBE_ADV(lks
, 10000baseLRM_Full
) ||
2385 XGBE_ADV(lks
, 10000baseER_Full
) ||
2386 XGBE_ADV(lks
, 10000baseCR_Full
));
2392 static bool xgbe_phy_use_bp_2500_mode(struct xgbe_prv_data
*pdata
,
2393 enum xgbe_mode mode
)
2395 struct ethtool_link_ksettings
*lks
= &pdata
->phy
.lks
;
2398 case XGBE_MODE_KX_2500
:
2399 return xgbe_phy_check_mode(pdata
, mode
,
2400 XGBE_ADV(lks
, 2500baseX_Full
));
2406 static bool xgbe_phy_use_bp_mode(struct xgbe_prv_data
*pdata
,
2407 enum xgbe_mode mode
)
2409 struct ethtool_link_ksettings
*lks
= &pdata
->phy
.lks
;
2412 case XGBE_MODE_KX_1000
:
2413 return xgbe_phy_check_mode(pdata
, mode
,
2414 XGBE_ADV(lks
, 1000baseKX_Full
));
2416 return xgbe_phy_check_mode(pdata
, mode
,
2417 XGBE_ADV(lks
, 10000baseKR_Full
));
2423 static bool xgbe_phy_use_mode(struct xgbe_prv_data
*pdata
, enum xgbe_mode mode
)
2425 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2427 switch (phy_data
->port_mode
) {
2428 case XGBE_PORT_MODE_BACKPLANE
:
2429 return xgbe_phy_use_bp_mode(pdata
, mode
);
2430 case XGBE_PORT_MODE_BACKPLANE_2500
:
2431 return xgbe_phy_use_bp_2500_mode(pdata
, mode
);
2432 case XGBE_PORT_MODE_1000BASE_T
:
2433 case XGBE_PORT_MODE_NBASE_T
:
2434 case XGBE_PORT_MODE_10GBASE_T
:
2435 return xgbe_phy_use_baset_mode(pdata
, mode
);
2436 case XGBE_PORT_MODE_1000BASE_X
:
2437 case XGBE_PORT_MODE_10GBASE_R
:
2438 return xgbe_phy_use_basex_mode(pdata
, mode
);
2439 case XGBE_PORT_MODE_SFP
:
2440 return xgbe_phy_use_sfp_mode(pdata
, mode
);
2446 static bool xgbe_phy_valid_speed_basex_mode(struct xgbe_phy_data
*phy_data
,
2451 return (phy_data
->port_mode
== XGBE_PORT_MODE_1000BASE_X
);
2453 return (phy_data
->port_mode
== XGBE_PORT_MODE_10GBASE_R
);
2459 static bool xgbe_phy_valid_speed_baset_mode(struct xgbe_phy_data
*phy_data
,
2467 return (phy_data
->port_mode
== XGBE_PORT_MODE_NBASE_T
);
2469 return (phy_data
->port_mode
== XGBE_PORT_MODE_10GBASE_T
);
2475 static bool xgbe_phy_valid_speed_sfp_mode(struct xgbe_phy_data
*phy_data
,
2480 return (phy_data
->sfp_speed
== XGBE_SFP_SPEED_100_1000
);
2482 return ((phy_data
->sfp_speed
== XGBE_SFP_SPEED_100_1000
) ||
2483 (phy_data
->sfp_speed
== XGBE_SFP_SPEED_1000
));
2485 return (phy_data
->sfp_speed
== XGBE_SFP_SPEED_10000
);
2491 static bool xgbe_phy_valid_speed_bp_2500_mode(int speed
)
2501 static bool xgbe_phy_valid_speed_bp_mode(int speed
)
2512 static bool xgbe_phy_valid_speed(struct xgbe_prv_data
*pdata
, int speed
)
2514 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2516 switch (phy_data
->port_mode
) {
2517 case XGBE_PORT_MODE_BACKPLANE
:
2518 return xgbe_phy_valid_speed_bp_mode(speed
);
2519 case XGBE_PORT_MODE_BACKPLANE_2500
:
2520 return xgbe_phy_valid_speed_bp_2500_mode(speed
);
2521 case XGBE_PORT_MODE_1000BASE_T
:
2522 case XGBE_PORT_MODE_NBASE_T
:
2523 case XGBE_PORT_MODE_10GBASE_T
:
2524 return xgbe_phy_valid_speed_baset_mode(phy_data
, speed
);
2525 case XGBE_PORT_MODE_1000BASE_X
:
2526 case XGBE_PORT_MODE_10GBASE_R
:
2527 return xgbe_phy_valid_speed_basex_mode(phy_data
, speed
);
2528 case XGBE_PORT_MODE_SFP
:
2529 return xgbe_phy_valid_speed_sfp_mode(phy_data
, speed
);
2535 static int xgbe_phy_link_status(struct xgbe_prv_data
*pdata
, int *an_restart
)
2537 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2543 if (phy_data
->port_mode
== XGBE_PORT_MODE_SFP
) {
2544 /* Check SFP signals */
2545 xgbe_phy_sfp_detect(pdata
);
2547 if (phy_data
->sfp_changed
) {
2552 if (phy_data
->sfp_mod_absent
|| phy_data
->sfp_rx_los
)
2556 if (phy_data
->phydev
) {
2557 /* Check external PHY */
2558 ret
= phy_read_status(phy_data
->phydev
);
2562 if ((pdata
->phy
.autoneg
== AUTONEG_ENABLE
) &&
2563 !phy_aneg_done(phy_data
->phydev
))
2566 if (!phy_data
->phydev
->link
)
2570 /* Link status is latched low, so read once to clear
2571 * and then read again to get current state
2573 reg
= XMDIO_READ(pdata
, MDIO_MMD_PCS
, MDIO_STAT1
);
2574 reg
= XMDIO_READ(pdata
, MDIO_MMD_PCS
, MDIO_STAT1
);
2575 if (reg
& MDIO_STAT1_LSTATUS
)
2578 /* No link, attempt a receiver reset cycle */
2579 if (phy_data
->rrc_count
++ > XGBE_RRC_FREQUENCY
) {
2580 phy_data
->rrc_count
= 0;
2581 xgbe_phy_rrc(pdata
);
2587 static void xgbe_phy_sfp_gpio_setup(struct xgbe_prv_data
*pdata
)
2589 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2591 phy_data
->sfp_gpio_address
= XGBE_GPIO_ADDRESS_PCA9555
+
2592 XP_GET_BITS(pdata
->pp3
, XP_PROP_3
,
2595 phy_data
->sfp_gpio_mask
= XP_GET_BITS(pdata
->pp3
, XP_PROP_3
,
2598 phy_data
->sfp_gpio_rx_los
= XP_GET_BITS(pdata
->pp3
, XP_PROP_3
,
2600 phy_data
->sfp_gpio_tx_fault
= XP_GET_BITS(pdata
->pp3
, XP_PROP_3
,
2602 phy_data
->sfp_gpio_mod_absent
= XP_GET_BITS(pdata
->pp3
, XP_PROP_3
,
2604 phy_data
->sfp_gpio_rate_select
= XP_GET_BITS(pdata
->pp3
, XP_PROP_3
,
2607 if (netif_msg_probe(pdata
)) {
2608 dev_dbg(pdata
->dev
, "SFP: gpio_address=%#x\n",
2609 phy_data
->sfp_gpio_address
);
2610 dev_dbg(pdata
->dev
, "SFP: gpio_mask=%#x\n",
2611 phy_data
->sfp_gpio_mask
);
2612 dev_dbg(pdata
->dev
, "SFP: gpio_rx_los=%u\n",
2613 phy_data
->sfp_gpio_rx_los
);
2614 dev_dbg(pdata
->dev
, "SFP: gpio_tx_fault=%u\n",
2615 phy_data
->sfp_gpio_tx_fault
);
2616 dev_dbg(pdata
->dev
, "SFP: gpio_mod_absent=%u\n",
2617 phy_data
->sfp_gpio_mod_absent
);
2618 dev_dbg(pdata
->dev
, "SFP: gpio_rate_select=%u\n",
2619 phy_data
->sfp_gpio_rate_select
);
2623 static void xgbe_phy_sfp_comm_setup(struct xgbe_prv_data
*pdata
)
2625 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2626 unsigned int mux_addr_hi
, mux_addr_lo
;
2628 mux_addr_hi
= XP_GET_BITS(pdata
->pp4
, XP_PROP_4
, MUX_ADDR_HI
);
2629 mux_addr_lo
= XP_GET_BITS(pdata
->pp4
, XP_PROP_4
, MUX_ADDR_LO
);
2630 if (mux_addr_lo
== XGBE_SFP_DIRECT
)
2633 phy_data
->sfp_comm
= XGBE_SFP_COMM_PCA9545
;
2634 phy_data
->sfp_mux_address
= (mux_addr_hi
<< 2) + mux_addr_lo
;
2635 phy_data
->sfp_mux_channel
= XP_GET_BITS(pdata
->pp4
, XP_PROP_4
,
2638 if (netif_msg_probe(pdata
)) {
2639 dev_dbg(pdata
->dev
, "SFP: mux_address=%#x\n",
2640 phy_data
->sfp_mux_address
);
2641 dev_dbg(pdata
->dev
, "SFP: mux_channel=%u\n",
2642 phy_data
->sfp_mux_channel
);
2646 static void xgbe_phy_sfp_setup(struct xgbe_prv_data
*pdata
)
2648 xgbe_phy_sfp_comm_setup(pdata
);
2649 xgbe_phy_sfp_gpio_setup(pdata
);
2652 static int xgbe_phy_int_mdio_reset(struct xgbe_prv_data
*pdata
)
2654 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2657 ret
= pdata
->hw_if
.set_gpio(pdata
, phy_data
->mdio_reset_gpio
);
2661 ret
= pdata
->hw_if
.clr_gpio(pdata
, phy_data
->mdio_reset_gpio
);
2666 static int xgbe_phy_i2c_mdio_reset(struct xgbe_prv_data
*pdata
)
2668 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2669 u8 gpio_reg
, gpio_ports
[2], gpio_data
[3];
2672 /* Read the output port registers */
2674 ret
= xgbe_phy_i2c_read(pdata
, phy_data
->mdio_reset_addr
,
2675 &gpio_reg
, sizeof(gpio_reg
),
2676 gpio_ports
, sizeof(gpio_ports
));
2680 /* Prepare to write the GPIO data */
2682 gpio_data
[1] = gpio_ports
[0];
2683 gpio_data
[2] = gpio_ports
[1];
2685 /* Set the GPIO pin */
2686 if (phy_data
->mdio_reset_gpio
< 8)
2687 gpio_data
[1] |= (1 << (phy_data
->mdio_reset_gpio
% 8));
2689 gpio_data
[2] |= (1 << (phy_data
->mdio_reset_gpio
% 8));
2691 /* Write the output port registers */
2692 ret
= xgbe_phy_i2c_write(pdata
, phy_data
->mdio_reset_addr
,
2693 gpio_data
, sizeof(gpio_data
));
2697 /* Clear the GPIO pin */
2698 if (phy_data
->mdio_reset_gpio
< 8)
2699 gpio_data
[1] &= ~(1 << (phy_data
->mdio_reset_gpio
% 8));
2701 gpio_data
[2] &= ~(1 << (phy_data
->mdio_reset_gpio
% 8));
2703 /* Write the output port registers */
2704 ret
= xgbe_phy_i2c_write(pdata
, phy_data
->mdio_reset_addr
,
2705 gpio_data
, sizeof(gpio_data
));
2710 static int xgbe_phy_mdio_reset(struct xgbe_prv_data
*pdata
)
2712 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2715 if (phy_data
->conn_type
!= XGBE_CONN_TYPE_MDIO
)
2718 ret
= xgbe_phy_get_comm_ownership(pdata
);
2722 if (phy_data
->mdio_reset
== XGBE_MDIO_RESET_I2C_GPIO
)
2723 ret
= xgbe_phy_i2c_mdio_reset(pdata
);
2724 else if (phy_data
->mdio_reset
== XGBE_MDIO_RESET_INT_GPIO
)
2725 ret
= xgbe_phy_int_mdio_reset(pdata
);
2727 xgbe_phy_put_comm_ownership(pdata
);
2732 static bool xgbe_phy_redrv_error(struct xgbe_phy_data
*phy_data
)
2734 if (!phy_data
->redrv
)
2737 if (phy_data
->redrv_if
>= XGBE_PHY_REDRV_IF_MAX
)
2740 switch (phy_data
->redrv_model
) {
2741 case XGBE_PHY_REDRV_MODEL_4223
:
2742 if (phy_data
->redrv_lane
> 3)
2745 case XGBE_PHY_REDRV_MODEL_4227
:
2746 if (phy_data
->redrv_lane
> 1)
2756 static int xgbe_phy_mdio_reset_setup(struct xgbe_prv_data
*pdata
)
2758 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2760 if (phy_data
->conn_type
!= XGBE_CONN_TYPE_MDIO
)
2763 phy_data
->mdio_reset
= XP_GET_BITS(pdata
->pp3
, XP_PROP_3
, MDIO_RESET
);
2764 switch (phy_data
->mdio_reset
) {
2765 case XGBE_MDIO_RESET_NONE
:
2766 case XGBE_MDIO_RESET_I2C_GPIO
:
2767 case XGBE_MDIO_RESET_INT_GPIO
:
2770 dev_err(pdata
->dev
, "unsupported MDIO reset (%#x)\n",
2771 phy_data
->mdio_reset
);
2775 if (phy_data
->mdio_reset
== XGBE_MDIO_RESET_I2C_GPIO
) {
2776 phy_data
->mdio_reset_addr
= XGBE_GPIO_ADDRESS_PCA9555
+
2777 XP_GET_BITS(pdata
->pp3
, XP_PROP_3
,
2778 MDIO_RESET_I2C_ADDR
);
2779 phy_data
->mdio_reset_gpio
= XP_GET_BITS(pdata
->pp3
, XP_PROP_3
,
2780 MDIO_RESET_I2C_GPIO
);
2781 } else if (phy_data
->mdio_reset
== XGBE_MDIO_RESET_INT_GPIO
) {
2782 phy_data
->mdio_reset_gpio
= XP_GET_BITS(pdata
->pp3
, XP_PROP_3
,
2783 MDIO_RESET_INT_GPIO
);
2789 static bool xgbe_phy_port_mode_mismatch(struct xgbe_prv_data
*pdata
)
2791 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2793 switch (phy_data
->port_mode
) {
2794 case XGBE_PORT_MODE_BACKPLANE
:
2795 if ((phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_1000
) ||
2796 (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_10000
))
2799 case XGBE_PORT_MODE_BACKPLANE_2500
:
2800 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_2500
)
2803 case XGBE_PORT_MODE_1000BASE_T
:
2804 if ((phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_100
) ||
2805 (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_1000
))
2808 case XGBE_PORT_MODE_1000BASE_X
:
2809 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_1000
)
2812 case XGBE_PORT_MODE_NBASE_T
:
2813 if ((phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_100
) ||
2814 (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_1000
) ||
2815 (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_2500
))
2818 case XGBE_PORT_MODE_10GBASE_T
:
2819 if ((phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_100
) ||
2820 (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_1000
) ||
2821 (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_10000
))
2824 case XGBE_PORT_MODE_10GBASE_R
:
2825 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_10000
)
2828 case XGBE_PORT_MODE_SFP
:
2829 if ((phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_100
) ||
2830 (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_1000
) ||
2831 (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_10000
))
2841 static bool xgbe_phy_conn_type_mismatch(struct xgbe_prv_data
*pdata
)
2843 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2845 switch (phy_data
->port_mode
) {
2846 case XGBE_PORT_MODE_BACKPLANE
:
2847 case XGBE_PORT_MODE_BACKPLANE_2500
:
2848 if (phy_data
->conn_type
== XGBE_CONN_TYPE_BACKPLANE
)
2851 case XGBE_PORT_MODE_1000BASE_T
:
2852 case XGBE_PORT_MODE_1000BASE_X
:
2853 case XGBE_PORT_MODE_NBASE_T
:
2854 case XGBE_PORT_MODE_10GBASE_T
:
2855 case XGBE_PORT_MODE_10GBASE_R
:
2856 if (phy_data
->conn_type
== XGBE_CONN_TYPE_MDIO
)
2859 case XGBE_PORT_MODE_SFP
:
2860 if (phy_data
->conn_type
== XGBE_CONN_TYPE_SFP
)
2870 static bool xgbe_phy_port_enabled(struct xgbe_prv_data
*pdata
)
2872 if (!XP_GET_BITS(pdata
->pp0
, XP_PROP_0
, PORT_SPEEDS
))
2874 if (!XP_GET_BITS(pdata
->pp0
, XP_PROP_0
, CONN_TYPE
))
2880 static void xgbe_phy_cdr_track(struct xgbe_prv_data
*pdata
)
2882 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2884 if (!pdata
->debugfs_an_cdr_workaround
)
2887 if (!phy_data
->phy_cdr_notrack
)
2890 usleep_range(phy_data
->phy_cdr_delay
,
2891 phy_data
->phy_cdr_delay
+ 500);
2893 XMDIO_WRITE_BITS(pdata
, MDIO_MMD_PMAPMD
, MDIO_VEND2_PMA_CDR_CONTROL
,
2894 XGBE_PMA_CDR_TRACK_EN_MASK
,
2895 XGBE_PMA_CDR_TRACK_EN_ON
);
2897 phy_data
->phy_cdr_notrack
= 0;
2900 static void xgbe_phy_cdr_notrack(struct xgbe_prv_data
*pdata
)
2902 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2904 if (!pdata
->debugfs_an_cdr_workaround
)
2907 if (phy_data
->phy_cdr_notrack
)
2910 XMDIO_WRITE_BITS(pdata
, MDIO_MMD_PMAPMD
, MDIO_VEND2_PMA_CDR_CONTROL
,
2911 XGBE_PMA_CDR_TRACK_EN_MASK
,
2912 XGBE_PMA_CDR_TRACK_EN_OFF
);
2914 xgbe_phy_rrc(pdata
);
2916 phy_data
->phy_cdr_notrack
= 1;
2919 static void xgbe_phy_kr_training_post(struct xgbe_prv_data
*pdata
)
2921 if (!pdata
->debugfs_an_cdr_track_early
)
2922 xgbe_phy_cdr_track(pdata
);
2925 static void xgbe_phy_kr_training_pre(struct xgbe_prv_data
*pdata
)
2927 if (pdata
->debugfs_an_cdr_track_early
)
2928 xgbe_phy_cdr_track(pdata
);
2931 static void xgbe_phy_an_post(struct xgbe_prv_data
*pdata
)
2933 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2935 switch (pdata
->an_mode
) {
2936 case XGBE_AN_MODE_CL73
:
2937 case XGBE_AN_MODE_CL73_REDRV
:
2938 if (phy_data
->cur_mode
!= XGBE_MODE_KR
)
2941 xgbe_phy_cdr_track(pdata
);
2943 switch (pdata
->an_result
) {
2945 case XGBE_AN_COMPLETE
:
2948 if (phy_data
->phy_cdr_delay
< XGBE_CDR_DELAY_MAX
)
2949 phy_data
->phy_cdr_delay
+= XGBE_CDR_DELAY_INC
;
2951 phy_data
->phy_cdr_delay
= XGBE_CDR_DELAY_INIT
;
2960 static void xgbe_phy_an_pre(struct xgbe_prv_data
*pdata
)
2962 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2964 switch (pdata
->an_mode
) {
2965 case XGBE_AN_MODE_CL73
:
2966 case XGBE_AN_MODE_CL73_REDRV
:
2967 if (phy_data
->cur_mode
!= XGBE_MODE_KR
)
2970 xgbe_phy_cdr_notrack(pdata
);
2977 static void xgbe_phy_stop(struct xgbe_prv_data
*pdata
)
2979 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
2981 /* If we have an external PHY, free it */
2982 xgbe_phy_free_phy_device(pdata
);
2984 /* Reset SFP data */
2985 xgbe_phy_sfp_reset(phy_data
);
2986 xgbe_phy_sfp_mod_absent(pdata
);
2988 /* Reset CDR support */
2989 xgbe_phy_cdr_track(pdata
);
2991 /* Power off the PHY */
2992 xgbe_phy_power_off(pdata
);
2994 /* Stop the I2C controller */
2995 pdata
->i2c_if
.i2c_stop(pdata
);
2998 static int xgbe_phy_start(struct xgbe_prv_data
*pdata
)
3000 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
3003 /* Start the I2C controller */
3004 ret
= pdata
->i2c_if
.i2c_start(pdata
);
3008 /* Set the proper MDIO mode for the re-driver */
3009 if (phy_data
->redrv
&& !phy_data
->redrv_if
) {
3010 ret
= pdata
->hw_if
.set_ext_mii_mode(pdata
, phy_data
->redrv_addr
,
3011 XGBE_MDIO_MODE_CL22
);
3013 netdev_err(pdata
->netdev
,
3014 "redriver mdio port not compatible (%u)\n",
3015 phy_data
->redrv_addr
);
3020 /* Start in highest supported mode */
3021 xgbe_phy_set_mode(pdata
, phy_data
->start_mode
);
3023 /* Reset CDR support */
3024 xgbe_phy_cdr_track(pdata
);
3026 /* After starting the I2C controller, we can check for an SFP */
3027 switch (phy_data
->port_mode
) {
3028 case XGBE_PORT_MODE_SFP
:
3029 xgbe_phy_sfp_detect(pdata
);
3035 /* If we have an external PHY, start it */
3036 ret
= xgbe_phy_find_phy_device(pdata
);
3043 pdata
->i2c_if
.i2c_stop(pdata
);
3048 static int xgbe_phy_reset(struct xgbe_prv_data
*pdata
)
3050 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
3051 enum xgbe_mode cur_mode
;
3054 /* Reset by power cycling the PHY */
3055 cur_mode
= phy_data
->cur_mode
;
3056 xgbe_phy_power_off(pdata
);
3057 xgbe_phy_set_mode(pdata
, cur_mode
);
3059 if (!phy_data
->phydev
)
3062 /* Reset the external PHY */
3063 ret
= xgbe_phy_mdio_reset(pdata
);
3067 return phy_init_hw(phy_data
->phydev
);
3070 static void xgbe_phy_exit(struct xgbe_prv_data
*pdata
)
3072 struct xgbe_phy_data
*phy_data
= pdata
->phy_data
;
3074 /* Unregister for driving external PHYs */
3075 mdiobus_unregister(phy_data
->mii
);
3078 static int xgbe_phy_init(struct xgbe_prv_data
*pdata
)
3080 struct ethtool_link_ksettings
*lks
= &pdata
->phy
.lks
;
3081 struct xgbe_phy_data
*phy_data
;
3082 struct mii_bus
*mii
;
3085 /* Check if enabled */
3086 if (!xgbe_phy_port_enabled(pdata
)) {
3087 dev_info(pdata
->dev
, "device is not enabled\n");
3091 /* Initialize the I2C controller */
3092 ret
= pdata
->i2c_if
.i2c_init(pdata
);
3096 phy_data
= devm_kzalloc(pdata
->dev
, sizeof(*phy_data
), GFP_KERNEL
);
3099 pdata
->phy_data
= phy_data
;
3101 phy_data
->port_mode
= XP_GET_BITS(pdata
->pp0
, XP_PROP_0
, PORT_MODE
);
3102 phy_data
->port_id
= XP_GET_BITS(pdata
->pp0
, XP_PROP_0
, PORT_ID
);
3103 phy_data
->port_speeds
= XP_GET_BITS(pdata
->pp0
, XP_PROP_0
, PORT_SPEEDS
);
3104 phy_data
->conn_type
= XP_GET_BITS(pdata
->pp0
, XP_PROP_0
, CONN_TYPE
);
3105 phy_data
->mdio_addr
= XP_GET_BITS(pdata
->pp0
, XP_PROP_0
, MDIO_ADDR
);
3106 if (netif_msg_probe(pdata
)) {
3107 dev_dbg(pdata
->dev
, "port mode=%u\n", phy_data
->port_mode
);
3108 dev_dbg(pdata
->dev
, "port id=%u\n", phy_data
->port_id
);
3109 dev_dbg(pdata
->dev
, "port speeds=%#x\n", phy_data
->port_speeds
);
3110 dev_dbg(pdata
->dev
, "conn type=%u\n", phy_data
->conn_type
);
3111 dev_dbg(pdata
->dev
, "mdio addr=%u\n", phy_data
->mdio_addr
);
3114 phy_data
->redrv
= XP_GET_BITS(pdata
->pp4
, XP_PROP_4
, REDRV_PRESENT
);
3115 phy_data
->redrv_if
= XP_GET_BITS(pdata
->pp4
, XP_PROP_4
, REDRV_IF
);
3116 phy_data
->redrv_addr
= XP_GET_BITS(pdata
->pp4
, XP_PROP_4
, REDRV_ADDR
);
3117 phy_data
->redrv_lane
= XP_GET_BITS(pdata
->pp4
, XP_PROP_4
, REDRV_LANE
);
3118 phy_data
->redrv_model
= XP_GET_BITS(pdata
->pp4
, XP_PROP_4
, REDRV_MODEL
);
3119 if (phy_data
->redrv
&& netif_msg_probe(pdata
)) {
3120 dev_dbg(pdata
->dev
, "redrv present\n");
3121 dev_dbg(pdata
->dev
, "redrv i/f=%u\n", phy_data
->redrv_if
);
3122 dev_dbg(pdata
->dev
, "redrv addr=%#x\n", phy_data
->redrv_addr
);
3123 dev_dbg(pdata
->dev
, "redrv lane=%u\n", phy_data
->redrv_lane
);
3124 dev_dbg(pdata
->dev
, "redrv model=%u\n", phy_data
->redrv_model
);
3127 /* Validate the connection requested */
3128 if (xgbe_phy_conn_type_mismatch(pdata
)) {
3129 dev_err(pdata
->dev
, "phy mode/connection mismatch (%#x/%#x)\n",
3130 phy_data
->port_mode
, phy_data
->conn_type
);
3134 /* Validate the mode requested */
3135 if (xgbe_phy_port_mode_mismatch(pdata
)) {
3136 dev_err(pdata
->dev
, "phy mode/speed mismatch (%#x/%#x)\n",
3137 phy_data
->port_mode
, phy_data
->port_speeds
);
3141 /* Check for and validate MDIO reset support */
3142 ret
= xgbe_phy_mdio_reset_setup(pdata
);
3146 /* Validate the re-driver information */
3147 if (xgbe_phy_redrv_error(phy_data
)) {
3148 dev_err(pdata
->dev
, "phy re-driver settings error\n");
3151 pdata
->kr_redrv
= phy_data
->redrv
;
3153 /* Indicate current mode is unknown */
3154 phy_data
->cur_mode
= XGBE_MODE_UNKNOWN
;
3156 /* Initialize supported features */
3159 switch (phy_data
->port_mode
) {
3160 /* Backplane support */
3161 case XGBE_PORT_MODE_BACKPLANE
:
3162 XGBE_SET_SUP(lks
, Autoneg
);
3163 XGBE_SET_SUP(lks
, Pause
);
3164 XGBE_SET_SUP(lks
, Asym_Pause
);
3165 XGBE_SET_SUP(lks
, Backplane
);
3166 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_1000
) {
3167 XGBE_SET_SUP(lks
, 1000baseKX_Full
);
3168 phy_data
->start_mode
= XGBE_MODE_KX_1000
;
3170 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_10000
) {
3171 XGBE_SET_SUP(lks
, 10000baseKR_Full
);
3172 if (pdata
->fec_ability
& MDIO_PMA_10GBR_FECABLE_ABLE
)
3173 XGBE_SET_SUP(lks
, 10000baseR_FEC
);
3174 phy_data
->start_mode
= XGBE_MODE_KR
;
3177 phy_data
->phydev_mode
= XGBE_MDIO_MODE_NONE
;
3179 case XGBE_PORT_MODE_BACKPLANE_2500
:
3180 XGBE_SET_SUP(lks
, Pause
);
3181 XGBE_SET_SUP(lks
, Asym_Pause
);
3182 XGBE_SET_SUP(lks
, Backplane
);
3183 XGBE_SET_SUP(lks
, 2500baseX_Full
);
3184 phy_data
->start_mode
= XGBE_MODE_KX_2500
;
3186 phy_data
->phydev_mode
= XGBE_MDIO_MODE_NONE
;
3189 /* MDIO 1GBase-T support */
3190 case XGBE_PORT_MODE_1000BASE_T
:
3191 XGBE_SET_SUP(lks
, Autoneg
);
3192 XGBE_SET_SUP(lks
, Pause
);
3193 XGBE_SET_SUP(lks
, Asym_Pause
);
3194 XGBE_SET_SUP(lks
, TP
);
3195 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_100
) {
3196 XGBE_SET_SUP(lks
, 100baseT_Full
);
3197 phy_data
->start_mode
= XGBE_MODE_SGMII_100
;
3199 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_1000
) {
3200 XGBE_SET_SUP(lks
, 1000baseT_Full
);
3201 phy_data
->start_mode
= XGBE_MODE_SGMII_1000
;
3204 phy_data
->phydev_mode
= XGBE_MDIO_MODE_CL22
;
3207 /* MDIO Base-X support */
3208 case XGBE_PORT_MODE_1000BASE_X
:
3209 XGBE_SET_SUP(lks
, Autoneg
);
3210 XGBE_SET_SUP(lks
, Pause
);
3211 XGBE_SET_SUP(lks
, Asym_Pause
);
3212 XGBE_SET_SUP(lks
, FIBRE
);
3213 XGBE_SET_SUP(lks
, 1000baseX_Full
);
3214 phy_data
->start_mode
= XGBE_MODE_X
;
3216 phy_data
->phydev_mode
= XGBE_MDIO_MODE_CL22
;
3219 /* MDIO NBase-T support */
3220 case XGBE_PORT_MODE_NBASE_T
:
3221 XGBE_SET_SUP(lks
, Autoneg
);
3222 XGBE_SET_SUP(lks
, Pause
);
3223 XGBE_SET_SUP(lks
, Asym_Pause
);
3224 XGBE_SET_SUP(lks
, TP
);
3225 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_100
) {
3226 XGBE_SET_SUP(lks
, 100baseT_Full
);
3227 phy_data
->start_mode
= XGBE_MODE_SGMII_100
;
3229 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_1000
) {
3230 XGBE_SET_SUP(lks
, 1000baseT_Full
);
3231 phy_data
->start_mode
= XGBE_MODE_SGMII_1000
;
3233 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_2500
) {
3234 XGBE_SET_SUP(lks
, 2500baseT_Full
);
3235 phy_data
->start_mode
= XGBE_MODE_KX_2500
;
3238 phy_data
->phydev_mode
= XGBE_MDIO_MODE_CL45
;
3241 /* 10GBase-T support */
3242 case XGBE_PORT_MODE_10GBASE_T
:
3243 XGBE_SET_SUP(lks
, Autoneg
);
3244 XGBE_SET_SUP(lks
, Pause
);
3245 XGBE_SET_SUP(lks
, Asym_Pause
);
3246 XGBE_SET_SUP(lks
, TP
);
3247 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_100
) {
3248 XGBE_SET_SUP(lks
, 100baseT_Full
);
3249 phy_data
->start_mode
= XGBE_MODE_SGMII_100
;
3251 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_1000
) {
3252 XGBE_SET_SUP(lks
, 1000baseT_Full
);
3253 phy_data
->start_mode
= XGBE_MODE_SGMII_1000
;
3255 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_10000
) {
3256 XGBE_SET_SUP(lks
, 10000baseT_Full
);
3257 phy_data
->start_mode
= XGBE_MODE_KR
;
3260 phy_data
->phydev_mode
= XGBE_MDIO_MODE_CL45
;
3263 /* 10GBase-R support */
3264 case XGBE_PORT_MODE_10GBASE_R
:
3265 XGBE_SET_SUP(lks
, Autoneg
);
3266 XGBE_SET_SUP(lks
, Pause
);
3267 XGBE_SET_SUP(lks
, Asym_Pause
);
3268 XGBE_SET_SUP(lks
, FIBRE
);
3269 XGBE_SET_SUP(lks
, 10000baseSR_Full
);
3270 XGBE_SET_SUP(lks
, 10000baseLR_Full
);
3271 XGBE_SET_SUP(lks
, 10000baseLRM_Full
);
3272 XGBE_SET_SUP(lks
, 10000baseER_Full
);
3273 if (pdata
->fec_ability
& MDIO_PMA_10GBR_FECABLE_ABLE
)
3274 XGBE_SET_SUP(lks
, 10000baseR_FEC
);
3275 phy_data
->start_mode
= XGBE_MODE_SFI
;
3277 phy_data
->phydev_mode
= XGBE_MDIO_MODE_NONE
;
3281 case XGBE_PORT_MODE_SFP
:
3282 XGBE_SET_SUP(lks
, Autoneg
);
3283 XGBE_SET_SUP(lks
, Pause
);
3284 XGBE_SET_SUP(lks
, Asym_Pause
);
3285 XGBE_SET_SUP(lks
, TP
);
3286 XGBE_SET_SUP(lks
, FIBRE
);
3287 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_100
)
3288 phy_data
->start_mode
= XGBE_MODE_SGMII_100
;
3289 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_1000
)
3290 phy_data
->start_mode
= XGBE_MODE_SGMII_1000
;
3291 if (phy_data
->port_speeds
& XGBE_PHY_PORT_SPEED_10000
)
3292 phy_data
->start_mode
= XGBE_MODE_SFI
;
3294 phy_data
->phydev_mode
= XGBE_MDIO_MODE_CL22
;
3296 xgbe_phy_sfp_setup(pdata
);
3302 if (netif_msg_probe(pdata
))
3303 dev_dbg(pdata
->dev
, "phy supported=0x%*pb\n",
3304 __ETHTOOL_LINK_MODE_MASK_NBITS
,
3305 lks
->link_modes
.supported
);
3307 if ((phy_data
->conn_type
& XGBE_CONN_TYPE_MDIO
) &&
3308 (phy_data
->phydev_mode
!= XGBE_MDIO_MODE_NONE
)) {
3309 ret
= pdata
->hw_if
.set_ext_mii_mode(pdata
, phy_data
->mdio_addr
,
3310 phy_data
->phydev_mode
);
3313 "mdio port/clause not compatible (%d/%u)\n",
3314 phy_data
->mdio_addr
, phy_data
->phydev_mode
);
3319 if (phy_data
->redrv
&& !phy_data
->redrv_if
) {
3320 ret
= pdata
->hw_if
.set_ext_mii_mode(pdata
, phy_data
->redrv_addr
,
3321 XGBE_MDIO_MODE_CL22
);
3324 "redriver mdio port not compatible (%u)\n",
3325 phy_data
->redrv_addr
);
3330 phy_data
->phy_cdr_delay
= XGBE_CDR_DELAY_INIT
;
3332 /* Register for driving external PHYs */
3333 mii
= devm_mdiobus_alloc(pdata
->dev
);
3335 dev_err(pdata
->dev
, "mdiobus_alloc failed\n");
3340 mii
->name
= "amd-xgbe-mii";
3341 mii
->read
= xgbe_phy_mii_read
;
3342 mii
->write
= xgbe_phy_mii_write
;
3343 mii
->parent
= pdata
->dev
;
3345 snprintf(mii
->id
, sizeof(mii
->id
), "%s", dev_name(pdata
->dev
));
3346 ret
= mdiobus_register(mii
);
3348 dev_err(pdata
->dev
, "mdiobus_register failed\n");
3351 phy_data
->mii
= mii
;
3356 void xgbe_init_function_ptrs_phy_v2(struct xgbe_phy_if
*phy_if
)
3358 struct xgbe_phy_impl_if
*phy_impl
= &phy_if
->phy_impl
;
3360 phy_impl
->init
= xgbe_phy_init
;
3361 phy_impl
->exit
= xgbe_phy_exit
;
3363 phy_impl
->reset
= xgbe_phy_reset
;
3364 phy_impl
->start
= xgbe_phy_start
;
3365 phy_impl
->stop
= xgbe_phy_stop
;
3367 phy_impl
->link_status
= xgbe_phy_link_status
;
3369 phy_impl
->valid_speed
= xgbe_phy_valid_speed
;
3371 phy_impl
->use_mode
= xgbe_phy_use_mode
;
3372 phy_impl
->set_mode
= xgbe_phy_set_mode
;
3373 phy_impl
->get_mode
= xgbe_phy_get_mode
;
3374 phy_impl
->switch_mode
= xgbe_phy_switch_mode
;
3375 phy_impl
->cur_mode
= xgbe_phy_cur_mode
;
3377 phy_impl
->an_mode
= xgbe_phy_an_mode
;
3379 phy_impl
->an_config
= xgbe_phy_an_config
;
3381 phy_impl
->an_advertising
= xgbe_phy_an_advertising
;
3383 phy_impl
->an_outcome
= xgbe_phy_an_outcome
;
3385 phy_impl
->an_pre
= xgbe_phy_an_pre
;
3386 phy_impl
->an_post
= xgbe_phy_an_post
;
3388 phy_impl
->kr_training_pre
= xgbe_phy_kr_training_pre
;
3389 phy_impl
->kr_training_post
= xgbe_phy_kr_training_post
;
3391 phy_impl
->module_info
= xgbe_phy_module_info
;
3392 phy_impl
->module_eeprom
= xgbe_phy_module_eeprom
;