xref: /linux/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c (revision 2c7e63d702f6c4209c5af833308e7fcbc7d4ab17)
1 // SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-3-Clause)
2 /*
3  * Copyright (c) 2014-2025, Advanced Micro Devices, Inc.
4  * Copyright (c) 2014, Synopsys, Inc.
5  * All rights reserved
6  */
7 
8 #include <linux/module.h>
9 #include <linux/device.h>
10 #include <linux/kmod.h>
11 #include <linux/mdio.h>
12 #include <linux/phy.h>
13 #include <linux/ethtool.h>
14 
15 #include "xgbe.h"
16 #include "xgbe-common.h"
17 
18 #define XGBE_PHY_PORT_SPEED_10		BIT(0)
19 #define XGBE_PHY_PORT_SPEED_100		BIT(1)
20 #define XGBE_PHY_PORT_SPEED_1000	BIT(2)
21 #define XGBE_PHY_PORT_SPEED_2500	BIT(3)
22 #define XGBE_PHY_PORT_SPEED_10000	BIT(4)
23 
24 #define XGBE_MUTEX_RELEASE		0x80000000
25 
26 #define XGBE_SFP_DIRECT			7
27 
28 /* I2C target addresses */
29 #define XGBE_SFP_SERIAL_ID_ADDRESS	0x50
30 #define XGBE_SFP_DIAG_INFO_ADDRESS	0x51
31 #define XGBE_SFP_PHY_ADDRESS		0x56
32 #define XGBE_GPIO_ADDRESS_PCA9555	0x20
33 
34 /* SFP sideband signal indicators */
35 #define XGBE_GPIO_NO_TX_FAULT		BIT(0)
36 #define XGBE_GPIO_NO_RATE_SELECT	BIT(1)
37 #define XGBE_GPIO_NO_MOD_ABSENT		BIT(2)
38 #define XGBE_GPIO_NO_RX_LOS		BIT(3)
39 
40 /* Rate-change complete wait/retry count */
41 #define XGBE_RATECHANGE_COUNT		500
42 
43 /* CDR delay values for KR support (in usec) */
44 #define XGBE_CDR_DELAY_INIT		10000
45 #define XGBE_CDR_DELAY_INC		10000
46 #define XGBE_CDR_DELAY_MAX		100000
47 
48 /* RRC frequency during link status check */
49 #define XGBE_RRC_FREQUENCY		10
50 
51 enum xgbe_port_mode {
52 	XGBE_PORT_MODE_RSVD = 0,
53 	XGBE_PORT_MODE_BACKPLANE,
54 	XGBE_PORT_MODE_BACKPLANE_2500,
55 	XGBE_PORT_MODE_1000BASE_T,
56 	XGBE_PORT_MODE_1000BASE_X,
57 	XGBE_PORT_MODE_NBASE_T,
58 	XGBE_PORT_MODE_10GBASE_T,
59 	XGBE_PORT_MODE_10GBASE_R,
60 	XGBE_PORT_MODE_SFP,
61 	XGBE_PORT_MODE_BACKPLANE_NO_AUTONEG,
62 	XGBE_PORT_MODE_MAX,
63 };
64 
65 enum xgbe_conn_type {
66 	XGBE_CONN_TYPE_NONE = 0,
67 	XGBE_CONN_TYPE_SFP,
68 	XGBE_CONN_TYPE_MDIO,
69 	XGBE_CONN_TYPE_RSVD1,
70 	XGBE_CONN_TYPE_BACKPLANE,
71 	XGBE_CONN_TYPE_MAX,
72 };
73 
74 /* SFP/SFP+ related definitions */
75 enum xgbe_sfp_comm {
76 	XGBE_SFP_COMM_DIRECT = 0,
77 	XGBE_SFP_COMM_PCA9545,
78 };
79 
80 enum xgbe_sfp_cable {
81 	XGBE_SFP_CABLE_UNKNOWN = 0,
82 	XGBE_SFP_CABLE_ACTIVE,
83 	XGBE_SFP_CABLE_PASSIVE,
84 	XGBE_SFP_CABLE_FIBER,
85 };
86 
87 enum xgbe_sfp_base {
88 	XGBE_SFP_BASE_UNKNOWN = 0,
89 	XGBE_SFP_BASE_1000_T,
90 	XGBE_SFP_BASE_1000_SX,
91 	XGBE_SFP_BASE_1000_LX,
92 	XGBE_SFP_BASE_1000_CX,
93 	XGBE_SFP_BASE_10000_SR,
94 	XGBE_SFP_BASE_10000_LR,
95 	XGBE_SFP_BASE_10000_LRM,
96 	XGBE_SFP_BASE_10000_ER,
97 	XGBE_SFP_BASE_10000_CR,
98 };
99 
100 enum xgbe_sfp_speed {
101 	XGBE_SFP_SPEED_UNKNOWN = 0,
102 	XGBE_SFP_SPEED_100_1000,
103 	XGBE_SFP_SPEED_1000,
104 	XGBE_SFP_SPEED_10000,
105 };
106 
107 /* SFP Serial ID Base ID values relative to an offset of 0 */
108 #define XGBE_SFP_BASE_ID			0
109 #define XGBE_SFP_ID_SFP				0x03
110 
111 #define XGBE_SFP_BASE_EXT_ID			1
112 #define XGBE_SFP_EXT_ID_SFP			0x04
113 
114 #define XGBE_SFP_BASE_10GBE_CC			3
115 #define XGBE_SFP_BASE_10GBE_CC_SR		BIT(4)
116 #define XGBE_SFP_BASE_10GBE_CC_LR		BIT(5)
117 #define XGBE_SFP_BASE_10GBE_CC_LRM		BIT(6)
118 #define XGBE_SFP_BASE_10GBE_CC_ER		BIT(7)
119 
120 #define XGBE_SFP_BASE_1GBE_CC			6
121 #define XGBE_SFP_BASE_1GBE_CC_SX		BIT(0)
122 #define XGBE_SFP_BASE_1GBE_CC_LX		BIT(1)
123 #define XGBE_SFP_BASE_1GBE_CC_CX		BIT(2)
124 #define XGBE_SFP_BASE_1GBE_CC_T			BIT(3)
125 
126 #define XGBE_SFP_BASE_CABLE			8
127 #define XGBE_SFP_BASE_CABLE_PASSIVE		BIT(2)
128 #define XGBE_SFP_BASE_CABLE_ACTIVE		BIT(3)
129 
130 #define XGBE_SFP_BASE_BR			12
131 #define XGBE_SFP_BASE_BR_1GBE_MIN		0x0a
132 #define XGBE_SFP_BASE_BR_10GBE_MIN		0x64
133 
134 #define XGBE_SFP_BASE_CU_CABLE_LEN		18
135 
136 #define XGBE_SFP_BASE_VENDOR_NAME		20
137 #define XGBE_SFP_BASE_VENDOR_NAME_LEN		16
138 #define XGBE_SFP_BASE_VENDOR_PN			40
139 #define XGBE_SFP_BASE_VENDOR_PN_LEN		16
140 #define XGBE_SFP_BASE_VENDOR_REV		56
141 #define XGBE_SFP_BASE_VENDOR_REV_LEN		4
142 
143 #define XGBE_SFP_BASE_CC			63
144 
145 /* SFP Serial ID Extended ID values relative to an offset of 64 */
146 #define XGBE_SFP_BASE_VENDOR_SN			4
147 #define XGBE_SFP_BASE_VENDOR_SN_LEN		16
148 
149 #define XGBE_SFP_EXTD_OPT1			1
150 #define XGBE_SFP_EXTD_OPT1_RX_LOS		BIT(1)
151 #define XGBE_SFP_EXTD_OPT1_TX_FAULT		BIT(3)
152 
153 #define XGBE_SFP_EXTD_DIAG			28
154 #define XGBE_SFP_EXTD_DIAG_ADDR_CHANGE		BIT(2)
155 
156 #define XGBE_SFP_EXTD_SFF_8472			30
157 
158 #define XGBE_SFP_EXTD_CC			31
159 
160 struct xgbe_sfp_eeprom {
161 	u8 base[64];
162 	u8 extd[32];
163 	u8 vendor[32];
164 };
165 
166 #define XGBE_SFP_DIAGS_SUPPORTED(_x)			\
167 	((_x)->extd[XGBE_SFP_EXTD_SFF_8472] &&		\
168 	 !((_x)->extd[XGBE_SFP_EXTD_DIAG] & XGBE_SFP_EXTD_DIAG_ADDR_CHANGE))
169 
170 #define XGBE_SFP_EEPROM_BASE_LEN	256
171 #define XGBE_SFP_EEPROM_DIAG_LEN	256
172 #define XGBE_SFP_EEPROM_MAX		(XGBE_SFP_EEPROM_BASE_LEN +	\
173 					 XGBE_SFP_EEPROM_DIAG_LEN)
174 
175 #define XGBE_BEL_FUSE_VENDOR	"BEL-FUSE        "
176 #define XGBE_BEL_FUSE_PARTNO	"1GBT-SFP06      "
177 
178 #define XGBE_MOLEX_VENDOR	"Molex Inc.      "
179 
180 struct xgbe_sfp_ascii {
181 	union {
182 		char vendor[XGBE_SFP_BASE_VENDOR_NAME_LEN + 1];
183 		char partno[XGBE_SFP_BASE_VENDOR_PN_LEN + 1];
184 		char rev[XGBE_SFP_BASE_VENDOR_REV_LEN + 1];
185 		char serno[XGBE_SFP_BASE_VENDOR_SN_LEN + 1];
186 	} u;
187 };
188 
189 /* MDIO PHY reset types */
190 enum xgbe_mdio_reset {
191 	XGBE_MDIO_RESET_NONE = 0,
192 	XGBE_MDIO_RESET_I2C_GPIO,
193 	XGBE_MDIO_RESET_INT_GPIO,
194 	XGBE_MDIO_RESET_MAX,
195 };
196 
197 /* Re-driver related definitions */
198 enum xgbe_phy_redrv_if {
199 	XGBE_PHY_REDRV_IF_MDIO = 0,
200 	XGBE_PHY_REDRV_IF_I2C,
201 	XGBE_PHY_REDRV_IF_MAX,
202 };
203 
204 enum xgbe_phy_redrv_model {
205 	XGBE_PHY_REDRV_MODEL_4223 = 0,
206 	XGBE_PHY_REDRV_MODEL_4227,
207 	XGBE_PHY_REDRV_MODEL_MAX,
208 };
209 
210 enum xgbe_phy_redrv_mode {
211 	XGBE_PHY_REDRV_MODE_CX = 5,
212 	XGBE_PHY_REDRV_MODE_SR = 9,
213 };
214 
215 #define XGBE_PHY_REDRV_MODE_REG	0x12b0
216 
217 /* PHY related configuration information */
218 struct xgbe_phy_data {
219 	enum xgbe_port_mode port_mode;
220 
221 	unsigned int port_id;
222 
223 	unsigned int port_speeds;
224 
225 	enum xgbe_conn_type conn_type;
226 
227 	enum xgbe_mode cur_mode;
228 	enum xgbe_mode start_mode;
229 
230 	unsigned int rrc_count;
231 
232 	unsigned int mdio_addr;
233 
234 	/* SFP Support */
235 	enum xgbe_sfp_comm sfp_comm;
236 	unsigned int sfp_mux_address;
237 	unsigned int sfp_mux_channel;
238 
239 	unsigned int sfp_gpio_address;
240 	unsigned int sfp_gpio_mask;
241 	unsigned int sfp_gpio_inputs;
242 	unsigned int sfp_gpio_rx_los;
243 	unsigned int sfp_gpio_tx_fault;
244 	unsigned int sfp_gpio_mod_absent;
245 	unsigned int sfp_gpio_rate_select;
246 
247 	unsigned int sfp_rx_los;
248 	unsigned int sfp_tx_fault;
249 	unsigned int sfp_mod_absent;
250 	unsigned int sfp_changed;
251 	unsigned int sfp_phy_avail;
252 	unsigned int sfp_cable_len;
253 	enum xgbe_sfp_base sfp_base;
254 	enum xgbe_sfp_cable sfp_cable;
255 	enum xgbe_sfp_speed sfp_speed;
256 	struct xgbe_sfp_eeprom sfp_eeprom;
257 
258 	/* External PHY support */
259 	enum xgbe_mdio_mode phydev_mode;
260 	struct mii_bus *mii;
261 	struct phy_device *phydev;
262 	enum xgbe_mdio_reset mdio_reset;
263 	unsigned int mdio_reset_addr;
264 	unsigned int mdio_reset_gpio;
265 
266 	/* Re-driver support */
267 	unsigned int redrv;
268 	unsigned int redrv_if;
269 	unsigned int redrv_addr;
270 	unsigned int redrv_lane;
271 	unsigned int redrv_model;
272 
273 	/* KR AN support */
274 	unsigned int phy_cdr_notrack;
275 	unsigned int phy_cdr_delay;
276 };
277 
278 /* I2C, MDIO and GPIO lines are muxed, so only one device at a time */
279 static DEFINE_MUTEX(xgbe_phy_comm_lock);
280 
281 static enum xgbe_an_mode xgbe_phy_an_mode(struct xgbe_prv_data *pdata);
282 static void xgbe_phy_rrc(struct xgbe_prv_data *pdata);
283 static void xgbe_phy_perform_ratechange(struct xgbe_prv_data *pdata,
284 					enum xgbe_mb_cmd cmd,
285 					enum xgbe_mb_subcmd sub_cmd);
286 
xgbe_phy_i2c_xfer(struct xgbe_prv_data * pdata,struct xgbe_i2c_op * i2c_op)287 static int xgbe_phy_i2c_xfer(struct xgbe_prv_data *pdata,
288 			     struct xgbe_i2c_op *i2c_op)
289 {
290 	return pdata->i2c_if.i2c_xfer(pdata, i2c_op);
291 }
292 
xgbe_phy_redrv_write(struct xgbe_prv_data * pdata,unsigned int reg,unsigned int val)293 static int xgbe_phy_redrv_write(struct xgbe_prv_data *pdata, unsigned int reg,
294 				unsigned int val)
295 {
296 	struct xgbe_phy_data *phy_data = pdata->phy_data;
297 	struct xgbe_i2c_op i2c_op;
298 	__be16 *redrv_val;
299 	u8 redrv_data[5], csum;
300 	unsigned int i, retry;
301 	int ret;
302 
303 	/* High byte of register contains read/write indicator */
304 	redrv_data[0] = ((reg >> 8) & 0xff) << 1;
305 	redrv_data[1] = reg & 0xff;
306 	redrv_val = (__be16 *)&redrv_data[2];
307 	*redrv_val = cpu_to_be16(val);
308 
309 	/* Calculate 1 byte checksum */
310 	csum = 0;
311 	for (i = 0; i < 4; i++) {
312 		csum += redrv_data[i];
313 		if (redrv_data[i] > csum)
314 			csum++;
315 	}
316 	redrv_data[4] = ~csum;
317 
318 	retry = 1;
319 again1:
320 	i2c_op.cmd = XGBE_I2C_CMD_WRITE;
321 	i2c_op.target = phy_data->redrv_addr;
322 	i2c_op.len = sizeof(redrv_data);
323 	i2c_op.buf = redrv_data;
324 	ret = xgbe_phy_i2c_xfer(pdata, &i2c_op);
325 	if (ret) {
326 		if ((ret == -EAGAIN) && retry--)
327 			goto again1;
328 
329 		return ret;
330 	}
331 
332 	retry = 1;
333 again2:
334 	i2c_op.cmd = XGBE_I2C_CMD_READ;
335 	i2c_op.target = phy_data->redrv_addr;
336 	i2c_op.len = 1;
337 	i2c_op.buf = redrv_data;
338 	ret = xgbe_phy_i2c_xfer(pdata, &i2c_op);
339 	if (ret) {
340 		if ((ret == -EAGAIN) && retry--)
341 			goto again2;
342 
343 		return ret;
344 	}
345 
346 	if (redrv_data[0] != 0xff) {
347 		netif_dbg(pdata, drv, pdata->netdev,
348 			  "Redriver write checksum error\n");
349 		ret = -EIO;
350 	}
351 
352 	return ret;
353 }
354 
xgbe_phy_i2c_write(struct xgbe_prv_data * pdata,unsigned int target,void * val,unsigned int val_len)355 static int xgbe_phy_i2c_write(struct xgbe_prv_data *pdata, unsigned int target,
356 			      void *val, unsigned int val_len)
357 {
358 	struct xgbe_i2c_op i2c_op;
359 	int retry, ret;
360 
361 	retry = 1;
362 again:
363 	/* Write the specfied register */
364 	i2c_op.cmd = XGBE_I2C_CMD_WRITE;
365 	i2c_op.target = target;
366 	i2c_op.len = val_len;
367 	i2c_op.buf = val;
368 	ret = xgbe_phy_i2c_xfer(pdata, &i2c_op);
369 	if ((ret == -EAGAIN) && retry--)
370 		goto again;
371 
372 	return ret;
373 }
374 
xgbe_phy_i2c_read(struct xgbe_prv_data * pdata,unsigned int target,void * reg,unsigned int reg_len,void * val,unsigned int val_len)375 static int xgbe_phy_i2c_read(struct xgbe_prv_data *pdata, unsigned int target,
376 			     void *reg, unsigned int reg_len,
377 			     void *val, unsigned int val_len)
378 {
379 	struct xgbe_i2c_op i2c_op;
380 	int retry, ret;
381 
382 	retry = 1;
383 again1:
384 	/* Set the specified register to read */
385 	i2c_op.cmd = XGBE_I2C_CMD_WRITE;
386 	i2c_op.target = target;
387 	i2c_op.len = reg_len;
388 	i2c_op.buf = reg;
389 	ret = xgbe_phy_i2c_xfer(pdata, &i2c_op);
390 	if (ret) {
391 		if ((ret == -EAGAIN) && retry--)
392 			goto again1;
393 
394 		return ret;
395 	}
396 
397 	retry = 1;
398 again2:
399 	/* Read the specfied register */
400 	i2c_op.cmd = XGBE_I2C_CMD_READ;
401 	i2c_op.target = target;
402 	i2c_op.len = val_len;
403 	i2c_op.buf = val;
404 	ret = xgbe_phy_i2c_xfer(pdata, &i2c_op);
405 	if ((ret == -EAGAIN) && retry--)
406 		goto again2;
407 
408 	return ret;
409 }
410 
xgbe_phy_sfp_put_mux(struct xgbe_prv_data * pdata)411 static int xgbe_phy_sfp_put_mux(struct xgbe_prv_data *pdata)
412 {
413 	struct xgbe_phy_data *phy_data = pdata->phy_data;
414 	struct xgbe_i2c_op i2c_op;
415 	u8 mux_channel;
416 
417 	if (phy_data->sfp_comm == XGBE_SFP_COMM_DIRECT)
418 		return 0;
419 
420 	/* Select no mux channels */
421 	mux_channel = 0;
422 	i2c_op.cmd = XGBE_I2C_CMD_WRITE;
423 	i2c_op.target = phy_data->sfp_mux_address;
424 	i2c_op.len = sizeof(mux_channel);
425 	i2c_op.buf = &mux_channel;
426 
427 	return xgbe_phy_i2c_xfer(pdata, &i2c_op);
428 }
429 
xgbe_phy_sfp_get_mux(struct xgbe_prv_data * pdata)430 static int xgbe_phy_sfp_get_mux(struct xgbe_prv_data *pdata)
431 {
432 	struct xgbe_phy_data *phy_data = pdata->phy_data;
433 	struct xgbe_i2c_op i2c_op;
434 	u8 mux_channel;
435 
436 	if (phy_data->sfp_comm == XGBE_SFP_COMM_DIRECT)
437 		return 0;
438 
439 	/* Select desired mux channel */
440 	mux_channel = 1 << phy_data->sfp_mux_channel;
441 	i2c_op.cmd = XGBE_I2C_CMD_WRITE;
442 	i2c_op.target = phy_data->sfp_mux_address;
443 	i2c_op.len = sizeof(mux_channel);
444 	i2c_op.buf = &mux_channel;
445 
446 	return xgbe_phy_i2c_xfer(pdata, &i2c_op);
447 }
448 
xgbe_phy_put_comm_ownership(struct xgbe_prv_data * pdata)449 static void xgbe_phy_put_comm_ownership(struct xgbe_prv_data *pdata)
450 {
451 	mutex_unlock(&xgbe_phy_comm_lock);
452 }
453 
xgbe_phy_get_comm_ownership(struct xgbe_prv_data * pdata)454 static int xgbe_phy_get_comm_ownership(struct xgbe_prv_data *pdata)
455 {
456 	struct xgbe_phy_data *phy_data = pdata->phy_data;
457 	unsigned long timeout;
458 	unsigned int mutex_id;
459 
460 	/* The I2C and MDIO/GPIO bus is multiplexed between multiple devices,
461 	 * the driver needs to take the software mutex and then the hardware
462 	 * mutexes before being able to use the busses.
463 	 */
464 	mutex_lock(&xgbe_phy_comm_lock);
465 
466 	/* Clear the mutexes */
467 	XP_IOWRITE(pdata, XP_I2C_MUTEX, XGBE_MUTEX_RELEASE);
468 	XP_IOWRITE(pdata, XP_MDIO_MUTEX, XGBE_MUTEX_RELEASE);
469 
470 	/* Mutex formats are the same for I2C and MDIO/GPIO */
471 	mutex_id = 0;
472 	XP_SET_BITS(mutex_id, XP_I2C_MUTEX, ID, phy_data->port_id);
473 	XP_SET_BITS(mutex_id, XP_I2C_MUTEX, ACTIVE, 1);
474 
475 	timeout = jiffies + (5 * HZ);
476 	while (time_before(jiffies, timeout)) {
477 		/* Must be all zeroes in order to obtain the mutex */
478 		if (XP_IOREAD(pdata, XP_I2C_MUTEX) ||
479 		    XP_IOREAD(pdata, XP_MDIO_MUTEX)) {
480 			usleep_range(100, 200);
481 			continue;
482 		}
483 
484 		/* Obtain the mutex */
485 		XP_IOWRITE(pdata, XP_I2C_MUTEX, mutex_id);
486 		XP_IOWRITE(pdata, XP_MDIO_MUTEX, mutex_id);
487 
488 		return 0;
489 	}
490 
491 	mutex_unlock(&xgbe_phy_comm_lock);
492 
493 	netdev_err(pdata->netdev, "unable to obtain hardware mutexes\n");
494 
495 	return -ETIMEDOUT;
496 }
497 
xgbe_phy_mdio_mii_write_c22(struct xgbe_prv_data * pdata,int addr,int reg,u16 val)498 static int xgbe_phy_mdio_mii_write_c22(struct xgbe_prv_data *pdata, int addr,
499 				       int reg, u16 val)
500 {
501 	struct xgbe_phy_data *phy_data = pdata->phy_data;
502 
503 	if (phy_data->phydev_mode != XGBE_MDIO_MODE_CL22)
504 		return -EOPNOTSUPP;
505 
506 	return pdata->hw_if.write_ext_mii_regs_c22(pdata, addr, reg, val);
507 }
508 
xgbe_phy_mdio_mii_write_c45(struct xgbe_prv_data * pdata,int addr,int devad,int reg,u16 val)509 static int xgbe_phy_mdio_mii_write_c45(struct xgbe_prv_data *pdata, int addr,
510 				       int devad, int reg, u16 val)
511 {
512 	struct xgbe_phy_data *phy_data = pdata->phy_data;
513 
514 	if (phy_data->phydev_mode != XGBE_MDIO_MODE_CL45)
515 		return -EOPNOTSUPP;
516 
517 	return pdata->hw_if.write_ext_mii_regs_c45(pdata, addr, devad,
518 						   reg, val);
519 }
520 
xgbe_phy_i2c_mii_write(struct xgbe_prv_data * pdata,int reg,u16 val)521 static int xgbe_phy_i2c_mii_write(struct xgbe_prv_data *pdata, int reg, u16 val)
522 {
523 	__be16 *mii_val;
524 	u8 mii_data[3];
525 	int ret;
526 
527 	ret = xgbe_phy_sfp_get_mux(pdata);
528 	if (ret)
529 		return ret;
530 
531 	mii_data[0] = reg & 0xff;
532 	mii_val = (__be16 *)&mii_data[1];
533 	*mii_val = cpu_to_be16(val);
534 
535 	ret = xgbe_phy_i2c_write(pdata, XGBE_SFP_PHY_ADDRESS,
536 				 mii_data, sizeof(mii_data));
537 
538 	xgbe_phy_sfp_put_mux(pdata);
539 
540 	return ret;
541 }
542 
xgbe_phy_mii_write_c22(struct mii_bus * mii,int addr,int reg,u16 val)543 static int xgbe_phy_mii_write_c22(struct mii_bus *mii, int addr, int reg,
544 				  u16 val)
545 {
546 	struct xgbe_prv_data *pdata = mii->priv;
547 	struct xgbe_phy_data *phy_data = pdata->phy_data;
548 	int ret;
549 
550 	ret = xgbe_phy_get_comm_ownership(pdata);
551 	if (ret)
552 		return ret;
553 
554 	if (phy_data->conn_type == XGBE_CONN_TYPE_SFP)
555 		ret = xgbe_phy_i2c_mii_write(pdata, reg, val);
556 	else if (phy_data->conn_type & XGBE_CONN_TYPE_MDIO)
557 		ret = xgbe_phy_mdio_mii_write_c22(pdata, addr, reg, val);
558 	else
559 		ret = -EOPNOTSUPP;
560 
561 	xgbe_phy_put_comm_ownership(pdata);
562 
563 	return ret;
564 }
565 
xgbe_phy_mii_write_c45(struct mii_bus * mii,int addr,int devad,int reg,u16 val)566 static int xgbe_phy_mii_write_c45(struct mii_bus *mii, int addr, int devad,
567 				  int reg, u16 val)
568 {
569 	struct xgbe_prv_data *pdata = mii->priv;
570 	struct xgbe_phy_data *phy_data = pdata->phy_data;
571 	int ret;
572 
573 	ret = xgbe_phy_get_comm_ownership(pdata);
574 	if (ret)
575 		return ret;
576 
577 	if (phy_data->conn_type == XGBE_CONN_TYPE_SFP)
578 		ret = -EOPNOTSUPP;
579 	else if (phy_data->conn_type & XGBE_CONN_TYPE_MDIO)
580 		ret = xgbe_phy_mdio_mii_write_c45(pdata, addr, devad, reg, val);
581 	else
582 		ret = -EOPNOTSUPP;
583 
584 	xgbe_phy_put_comm_ownership(pdata);
585 
586 	return ret;
587 }
588 
xgbe_phy_mdio_mii_read_c22(struct xgbe_prv_data * pdata,int addr,int reg)589 static int xgbe_phy_mdio_mii_read_c22(struct xgbe_prv_data *pdata, int addr,
590 				      int reg)
591 {
592 	struct xgbe_phy_data *phy_data = pdata->phy_data;
593 
594 	if (phy_data->phydev_mode != XGBE_MDIO_MODE_CL22)
595 		return -EOPNOTSUPP;
596 
597 	return pdata->hw_if.read_ext_mii_regs_c22(pdata, addr, reg);
598 }
599 
xgbe_phy_mdio_mii_read_c45(struct xgbe_prv_data * pdata,int addr,int devad,int reg)600 static int xgbe_phy_mdio_mii_read_c45(struct xgbe_prv_data *pdata, int addr,
601 				      int devad, int reg)
602 {
603 	struct xgbe_phy_data *phy_data = pdata->phy_data;
604 
605 	if (phy_data->phydev_mode != XGBE_MDIO_MODE_CL45)
606 		return -EOPNOTSUPP;
607 
608 	return pdata->hw_if.read_ext_mii_regs_c45(pdata, addr, devad, reg);
609 }
610 
xgbe_phy_i2c_mii_read(struct xgbe_prv_data * pdata,int reg)611 static int xgbe_phy_i2c_mii_read(struct xgbe_prv_data *pdata, int reg)
612 {
613 	__be16 mii_val;
614 	u8 mii_reg;
615 	int ret;
616 
617 	ret = xgbe_phy_sfp_get_mux(pdata);
618 	if (ret)
619 		return ret;
620 
621 	mii_reg = reg;
622 	ret = xgbe_phy_i2c_read(pdata, XGBE_SFP_PHY_ADDRESS,
623 				&mii_reg, sizeof(mii_reg),
624 				&mii_val, sizeof(mii_val));
625 	if (!ret)
626 		ret = be16_to_cpu(mii_val);
627 
628 	xgbe_phy_sfp_put_mux(pdata);
629 
630 	return ret;
631 }
632 
xgbe_phy_mii_read_c22(struct mii_bus * mii,int addr,int reg)633 static int xgbe_phy_mii_read_c22(struct mii_bus *mii, int addr, int reg)
634 {
635 	struct xgbe_prv_data *pdata = mii->priv;
636 	struct xgbe_phy_data *phy_data = pdata->phy_data;
637 	int ret;
638 
639 	ret = xgbe_phy_get_comm_ownership(pdata);
640 	if (ret)
641 		return ret;
642 
643 	if (phy_data->conn_type == XGBE_CONN_TYPE_SFP)
644 		ret = xgbe_phy_i2c_mii_read(pdata, reg);
645 	else if (phy_data->conn_type & XGBE_CONN_TYPE_MDIO)
646 		ret = xgbe_phy_mdio_mii_read_c22(pdata, addr, reg);
647 	else
648 		ret = -EOPNOTSUPP;
649 
650 	xgbe_phy_put_comm_ownership(pdata);
651 
652 	return ret;
653 }
654 
xgbe_phy_mii_read_c45(struct mii_bus * mii,int addr,int devad,int reg)655 static int xgbe_phy_mii_read_c45(struct mii_bus *mii, int addr, int devad,
656 				 int reg)
657 {
658 	struct xgbe_prv_data *pdata = mii->priv;
659 	struct xgbe_phy_data *phy_data = pdata->phy_data;
660 	int ret;
661 
662 	ret = xgbe_phy_get_comm_ownership(pdata);
663 	if (ret)
664 		return ret;
665 
666 	if (phy_data->conn_type == XGBE_CONN_TYPE_SFP)
667 		ret = -EOPNOTSUPP;
668 	else if (phy_data->conn_type & XGBE_CONN_TYPE_MDIO)
669 		ret = xgbe_phy_mdio_mii_read_c45(pdata, addr, devad, reg);
670 	else
671 		ret = -EOPNOTSUPP;
672 
673 	xgbe_phy_put_comm_ownership(pdata);
674 
675 	return ret;
676 }
677 
xgbe_phy_sfp_phy_settings(struct xgbe_prv_data * pdata)678 static void xgbe_phy_sfp_phy_settings(struct xgbe_prv_data *pdata)
679 {
680 	struct ethtool_link_ksettings *lks = &pdata->phy.lks;
681 	struct xgbe_phy_data *phy_data = pdata->phy_data;
682 
683 	if (!phy_data->sfp_mod_absent && !phy_data->sfp_changed)
684 		return;
685 
686 	XGBE_ZERO_SUP(lks);
687 
688 	if (phy_data->sfp_mod_absent) {
689 		pdata->phy.speed = SPEED_UNKNOWN;
690 		pdata->phy.duplex = DUPLEX_UNKNOWN;
691 		pdata->phy.autoneg = AUTONEG_ENABLE;
692 		pdata->phy.pause_autoneg = AUTONEG_ENABLE;
693 
694 		XGBE_SET_SUP(lks, Autoneg);
695 		XGBE_SET_SUP(lks, Pause);
696 		XGBE_SET_SUP(lks, Asym_Pause);
697 		XGBE_SET_SUP(lks, TP);
698 		XGBE_SET_SUP(lks, FIBRE);
699 
700 		XGBE_LM_COPY(lks, advertising, lks, supported);
701 
702 		return;
703 	}
704 
705 	switch (phy_data->sfp_base) {
706 	case XGBE_SFP_BASE_1000_T:
707 	case XGBE_SFP_BASE_1000_SX:
708 	case XGBE_SFP_BASE_1000_LX:
709 	case XGBE_SFP_BASE_1000_CX:
710 		pdata->phy.speed = SPEED_UNKNOWN;
711 		pdata->phy.duplex = DUPLEX_UNKNOWN;
712 		pdata->phy.autoneg = AUTONEG_ENABLE;
713 		pdata->phy.pause_autoneg = AUTONEG_ENABLE;
714 		XGBE_SET_SUP(lks, Autoneg);
715 		XGBE_SET_SUP(lks, Pause);
716 		XGBE_SET_SUP(lks, Asym_Pause);
717 		if (phy_data->sfp_base == XGBE_SFP_BASE_1000_T) {
718 			if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10)
719 				XGBE_SET_SUP(lks, 10baseT_Full);
720 			if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100)
721 				XGBE_SET_SUP(lks, 100baseT_Full);
722 			if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000)
723 				XGBE_SET_SUP(lks, 1000baseT_Full);
724 		} else {
725 			if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000)
726 				XGBE_SET_SUP(lks, 1000baseX_Full);
727 		}
728 		break;
729 	case XGBE_SFP_BASE_10000_SR:
730 	case XGBE_SFP_BASE_10000_LR:
731 	case XGBE_SFP_BASE_10000_LRM:
732 	case XGBE_SFP_BASE_10000_ER:
733 	case XGBE_SFP_BASE_10000_CR:
734 		pdata->phy.speed = SPEED_10000;
735 		pdata->phy.duplex = DUPLEX_FULL;
736 		pdata->phy.autoneg = AUTONEG_DISABLE;
737 		pdata->phy.pause_autoneg = AUTONEG_DISABLE;
738 		if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) {
739 			switch (phy_data->sfp_base) {
740 			case XGBE_SFP_BASE_10000_SR:
741 				XGBE_SET_SUP(lks, 10000baseSR_Full);
742 				break;
743 			case XGBE_SFP_BASE_10000_LR:
744 				XGBE_SET_SUP(lks, 10000baseLR_Full);
745 				break;
746 			case XGBE_SFP_BASE_10000_LRM:
747 				XGBE_SET_SUP(lks, 10000baseLRM_Full);
748 				break;
749 			case XGBE_SFP_BASE_10000_ER:
750 				XGBE_SET_SUP(lks, 10000baseER_Full);
751 				break;
752 			case XGBE_SFP_BASE_10000_CR:
753 				XGBE_SET_SUP(lks, 10000baseCR_Full);
754 				break;
755 			default:
756 				break;
757 			}
758 		}
759 		break;
760 	default:
761 		pdata->phy.speed = SPEED_UNKNOWN;
762 		pdata->phy.duplex = DUPLEX_UNKNOWN;
763 		pdata->phy.autoneg = AUTONEG_DISABLE;
764 		pdata->phy.pause_autoneg = AUTONEG_DISABLE;
765 		break;
766 	}
767 
768 	switch (phy_data->sfp_base) {
769 	case XGBE_SFP_BASE_1000_T:
770 	case XGBE_SFP_BASE_1000_CX:
771 	case XGBE_SFP_BASE_10000_CR:
772 		XGBE_SET_SUP(lks, TP);
773 		break;
774 	default:
775 		XGBE_SET_SUP(lks, FIBRE);
776 		break;
777 	}
778 
779 	XGBE_LM_COPY(lks, advertising, lks, supported);
780 }
781 
xgbe_phy_sfp_bit_rate(struct xgbe_sfp_eeprom * sfp_eeprom,enum xgbe_sfp_speed sfp_speed)782 static bool xgbe_phy_sfp_bit_rate(struct xgbe_sfp_eeprom *sfp_eeprom,
783 				  enum xgbe_sfp_speed sfp_speed)
784 {
785 	u8 *sfp_base, min;
786 
787 	sfp_base = sfp_eeprom->base;
788 
789 	switch (sfp_speed) {
790 	case XGBE_SFP_SPEED_1000:
791 		min = XGBE_SFP_BASE_BR_1GBE_MIN;
792 		break;
793 	case XGBE_SFP_SPEED_10000:
794 		min = XGBE_SFP_BASE_BR_10GBE_MIN;
795 		break;
796 	default:
797 		return false;
798 	}
799 
800 	return sfp_base[XGBE_SFP_BASE_BR] >= min;
801 }
802 
xgbe_phy_free_phy_device(struct xgbe_prv_data * pdata)803 static void xgbe_phy_free_phy_device(struct xgbe_prv_data *pdata)
804 {
805 	struct xgbe_phy_data *phy_data = pdata->phy_data;
806 
807 	if (phy_data->phydev) {
808 		phy_detach(phy_data->phydev);
809 		phy_device_remove(phy_data->phydev);
810 		phy_device_free(phy_data->phydev);
811 		phy_data->phydev = NULL;
812 	}
813 }
814 
xgbe_phy_finisar_phy_quirks(struct xgbe_prv_data * pdata)815 static bool xgbe_phy_finisar_phy_quirks(struct xgbe_prv_data *pdata)
816 {
817 	struct xgbe_phy_data *phy_data = pdata->phy_data;
818 	unsigned int phy_id = phy_data->phydev->phy_id;
819 
820 	if (phy_data->port_mode != XGBE_PORT_MODE_SFP)
821 		return false;
822 
823 	if ((phy_id & 0xfffffff0) != 0x01ff0cc0)
824 		return false;
825 
826 	/* Enable Base-T AN */
827 	phy_write(phy_data->phydev, 0x16, 0x0001);
828 	phy_write(phy_data->phydev, 0x00, 0x9140);
829 	phy_write(phy_data->phydev, 0x16, 0x0000);
830 
831 	/* Enable SGMII at 100Base-T/1000Base-T Full Duplex */
832 	phy_write(phy_data->phydev, 0x1b, 0x9084);
833 	phy_write(phy_data->phydev, 0x09, 0x0e00);
834 	phy_write(phy_data->phydev, 0x00, 0x8140);
835 	phy_write(phy_data->phydev, 0x04, 0x0d01);
836 	phy_write(phy_data->phydev, 0x00, 0x9140);
837 
838 	linkmode_copy(phy_data->phydev->supported, PHY_GBIT_FEATURES);
839 
840 	phy_support_asym_pause(phy_data->phydev);
841 
842 	netif_dbg(pdata, drv, pdata->netdev,
843 		  "Finisar PHY quirk in place\n");
844 
845 	return true;
846 }
847 
xgbe_phy_belfuse_phy_quirks(struct xgbe_prv_data * pdata)848 static bool xgbe_phy_belfuse_phy_quirks(struct xgbe_prv_data *pdata)
849 {
850 	struct xgbe_phy_data *phy_data = pdata->phy_data;
851 	struct xgbe_sfp_eeprom *sfp_eeprom = &phy_data->sfp_eeprom;
852 	unsigned int phy_id = phy_data->phydev->phy_id;
853 	int reg;
854 
855 	if (phy_data->port_mode != XGBE_PORT_MODE_SFP)
856 		return false;
857 
858 	if (memcmp(&sfp_eeprom->base[XGBE_SFP_BASE_VENDOR_NAME],
859 		   XGBE_BEL_FUSE_VENDOR, XGBE_SFP_BASE_VENDOR_NAME_LEN))
860 		return false;
861 
862 	/* For Bel-Fuse, use the extra AN flag */
863 	pdata->an_again = 1;
864 
865 	if (memcmp(&sfp_eeprom->base[XGBE_SFP_BASE_VENDOR_PN],
866 		   XGBE_BEL_FUSE_PARTNO, XGBE_SFP_BASE_VENDOR_PN_LEN))
867 		return false;
868 
869 	if ((phy_id & 0xfffffff0) != 0x03625d10)
870 		return false;
871 
872 	/* Reset PHY - wait for self-clearing reset bit to clear */
873 	genphy_soft_reset(phy_data->phydev);
874 
875 	/* Disable RGMII mode */
876 	phy_write(phy_data->phydev, 0x18, 0x7007);
877 	reg = phy_read(phy_data->phydev, 0x18);
878 	phy_write(phy_data->phydev, 0x18, reg & ~0x0080);
879 
880 	/* Enable fiber register bank */
881 	phy_write(phy_data->phydev, 0x1c, 0x7c00);
882 	reg = phy_read(phy_data->phydev, 0x1c);
883 	reg &= 0x03ff;
884 	reg &= ~0x0001;
885 	phy_write(phy_data->phydev, 0x1c, 0x8000 | 0x7c00 | reg | 0x0001);
886 
887 	/* Power down SerDes */
888 	reg = phy_read(phy_data->phydev, 0x00);
889 	phy_write(phy_data->phydev, 0x00, reg | 0x00800);
890 
891 	/* Configure SGMII-to-Copper mode */
892 	phy_write(phy_data->phydev, 0x1c, 0x7c00);
893 	reg = phy_read(phy_data->phydev, 0x1c);
894 	reg &= 0x03ff;
895 	reg &= ~0x0006;
896 	phy_write(phy_data->phydev, 0x1c, 0x8000 | 0x7c00 | reg | 0x0004);
897 
898 	/* Power up SerDes */
899 	reg = phy_read(phy_data->phydev, 0x00);
900 	phy_write(phy_data->phydev, 0x00, reg & ~0x00800);
901 
902 	/* Enable copper register bank */
903 	phy_write(phy_data->phydev, 0x1c, 0x7c00);
904 	reg = phy_read(phy_data->phydev, 0x1c);
905 	reg &= 0x03ff;
906 	reg &= ~0x0001;
907 	phy_write(phy_data->phydev, 0x1c, 0x8000 | 0x7c00 | reg);
908 
909 	/* Power up SerDes */
910 	reg = phy_read(phy_data->phydev, 0x00);
911 	phy_write(phy_data->phydev, 0x00, reg & ~0x00800);
912 
913 	linkmode_copy(phy_data->phydev->supported, PHY_GBIT_FEATURES);
914 	phy_support_asym_pause(phy_data->phydev);
915 
916 	netif_dbg(pdata, drv, pdata->netdev,
917 		  "BelFuse PHY quirk in place\n");
918 
919 	return true;
920 }
921 
xgbe_phy_external_phy_quirks(struct xgbe_prv_data * pdata)922 static void xgbe_phy_external_phy_quirks(struct xgbe_prv_data *pdata)
923 {
924 	if (xgbe_phy_belfuse_phy_quirks(pdata))
925 		return;
926 
927 	if (xgbe_phy_finisar_phy_quirks(pdata))
928 		return;
929 }
930 
xgbe_phy_find_phy_device(struct xgbe_prv_data * pdata)931 static int xgbe_phy_find_phy_device(struct xgbe_prv_data *pdata)
932 {
933 	struct ethtool_link_ksettings *lks = &pdata->phy.lks;
934 	struct xgbe_phy_data *phy_data = pdata->phy_data;
935 	struct phy_device *phydev;
936 	int ret;
937 
938 	/* If we already have a PHY, just return */
939 	if (phy_data->phydev)
940 		return 0;
941 
942 	/* Clear the extra AN flag */
943 	pdata->an_again = 0;
944 
945 	/* Check for the use of an external PHY */
946 	if (phy_data->phydev_mode == XGBE_MDIO_MODE_NONE)
947 		return 0;
948 
949 	/* For SFP, only use an external PHY if available */
950 	if ((phy_data->port_mode == XGBE_PORT_MODE_SFP) &&
951 	    !phy_data->sfp_phy_avail)
952 		return 0;
953 
954 	/* Set the proper MDIO mode for the PHY */
955 	ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->mdio_addr,
956 					    phy_data->phydev_mode);
957 	if (ret) {
958 		netdev_err(pdata->netdev,
959 			   "mdio port/clause not compatible (%u/%u)\n",
960 			   phy_data->mdio_addr, phy_data->phydev_mode);
961 		return ret;
962 	}
963 
964 	/* Create and connect to the PHY device */
965 	phydev = get_phy_device(phy_data->mii, phy_data->mdio_addr,
966 				(phy_data->phydev_mode == XGBE_MDIO_MODE_CL45));
967 	if (IS_ERR(phydev)) {
968 		netdev_err(pdata->netdev, "get_phy_device failed\n");
969 		return -ENODEV;
970 	}
971 	netif_dbg(pdata, drv, pdata->netdev, "external PHY id is %#010x\n",
972 		  phydev->phy_id);
973 
974 	/*TODO: If c45, add request_module based on one of the MMD ids? */
975 
976 	ret = phy_device_register(phydev);
977 	if (ret) {
978 		netdev_err(pdata->netdev, "phy_device_register failed\n");
979 		phy_device_free(phydev);
980 		return ret;
981 	}
982 
983 	ret = phy_attach_direct(pdata->netdev, phydev, phydev->dev_flags,
984 				PHY_INTERFACE_MODE_SGMII);
985 	if (ret) {
986 		netdev_err(pdata->netdev, "phy_attach_direct failed\n");
987 		phy_device_remove(phydev);
988 		phy_device_free(phydev);
989 		return ret;
990 	}
991 	phy_data->phydev = phydev;
992 	phy_data->phydev->mac_managed_pm = true;
993 
994 	xgbe_phy_external_phy_quirks(pdata);
995 
996 	linkmode_and(phydev->advertising, phydev->advertising,
997 		     lks->link_modes.advertising);
998 
999 	phy_start_aneg(phy_data->phydev);
1000 
1001 	return 0;
1002 }
1003 
xgbe_phy_sfp_external_phy(struct xgbe_prv_data * pdata)1004 static void xgbe_phy_sfp_external_phy(struct xgbe_prv_data *pdata)
1005 {
1006 	struct xgbe_phy_data *phy_data = pdata->phy_data;
1007 	int ret;
1008 
1009 	if (!phy_data->sfp_changed)
1010 		return;
1011 
1012 	phy_data->sfp_phy_avail = 0;
1013 
1014 	if (phy_data->sfp_base != XGBE_SFP_BASE_1000_T)
1015 		return;
1016 
1017 	/* Check access to the PHY by reading CTRL1 */
1018 	ret = xgbe_phy_i2c_mii_read(pdata, MII_BMCR);
1019 	if (ret < 0)
1020 		return;
1021 
1022 	/* Successfully accessed the PHY */
1023 	phy_data->sfp_phy_avail = 1;
1024 }
1025 
xgbe_phy_check_sfp_rx_los(struct xgbe_phy_data * phy_data)1026 static bool xgbe_phy_check_sfp_rx_los(struct xgbe_phy_data *phy_data)
1027 {
1028 	u8 *sfp_extd = phy_data->sfp_eeprom.extd;
1029 
1030 	if (!(sfp_extd[XGBE_SFP_EXTD_OPT1] & XGBE_SFP_EXTD_OPT1_RX_LOS))
1031 		return false;
1032 
1033 	if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_RX_LOS)
1034 		return false;
1035 
1036 	if (phy_data->sfp_gpio_inputs & (1 << phy_data->sfp_gpio_rx_los))
1037 		return true;
1038 
1039 	return false;
1040 }
1041 
xgbe_phy_check_sfp_tx_fault(struct xgbe_phy_data * phy_data)1042 static bool xgbe_phy_check_sfp_tx_fault(struct xgbe_phy_data *phy_data)
1043 {
1044 	u8 *sfp_extd = phy_data->sfp_eeprom.extd;
1045 
1046 	if (!(sfp_extd[XGBE_SFP_EXTD_OPT1] & XGBE_SFP_EXTD_OPT1_TX_FAULT))
1047 		return false;
1048 
1049 	if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_TX_FAULT)
1050 		return false;
1051 
1052 	if (phy_data->sfp_gpio_inputs & (1 << phy_data->sfp_gpio_tx_fault))
1053 		return true;
1054 
1055 	return false;
1056 }
1057 
xgbe_phy_check_sfp_mod_absent(struct xgbe_phy_data * phy_data)1058 static bool xgbe_phy_check_sfp_mod_absent(struct xgbe_phy_data *phy_data)
1059 {
1060 	if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_MOD_ABSENT)
1061 		return false;
1062 
1063 	if (phy_data->sfp_gpio_inputs & (1 << phy_data->sfp_gpio_mod_absent))
1064 		return true;
1065 
1066 	return false;
1067 }
1068 
xgbe_phy_sfp_parse_eeprom(struct xgbe_prv_data * pdata)1069 static void xgbe_phy_sfp_parse_eeprom(struct xgbe_prv_data *pdata)
1070 {
1071 	struct xgbe_phy_data *phy_data = pdata->phy_data;
1072 	struct xgbe_sfp_eeprom *sfp_eeprom = &phy_data->sfp_eeprom;
1073 	u8 *sfp_base;
1074 
1075 	sfp_base = sfp_eeprom->base;
1076 
1077 	if (sfp_base[XGBE_SFP_BASE_ID] != XGBE_SFP_ID_SFP)
1078 		return;
1079 
1080 	if (sfp_base[XGBE_SFP_BASE_EXT_ID] != XGBE_SFP_EXT_ID_SFP)
1081 		return;
1082 
1083 	/* Update transceiver signals (eeprom extd/options) */
1084 	phy_data->sfp_tx_fault = xgbe_phy_check_sfp_tx_fault(phy_data);
1085 	phy_data->sfp_rx_los = xgbe_phy_check_sfp_rx_los(phy_data);
1086 
1087 	/* Assume FIBER cable unless told otherwise */
1088 	if (sfp_base[XGBE_SFP_BASE_CABLE] & XGBE_SFP_BASE_CABLE_PASSIVE) {
1089 		phy_data->sfp_cable = XGBE_SFP_CABLE_PASSIVE;
1090 		phy_data->sfp_cable_len = sfp_base[XGBE_SFP_BASE_CU_CABLE_LEN];
1091 	} else if (sfp_base[XGBE_SFP_BASE_CABLE] & XGBE_SFP_BASE_CABLE_ACTIVE) {
1092 		phy_data->sfp_cable = XGBE_SFP_CABLE_ACTIVE;
1093 	} else {
1094 		phy_data->sfp_cable = XGBE_SFP_CABLE_FIBER;
1095 	}
1096 
1097 	/* Determine the type of SFP */
1098 	if (phy_data->sfp_cable != XGBE_SFP_CABLE_FIBER &&
1099 	    xgbe_phy_sfp_bit_rate(sfp_eeprom, XGBE_SFP_SPEED_10000))
1100 		phy_data->sfp_base = XGBE_SFP_BASE_10000_CR;
1101 	else if (sfp_base[XGBE_SFP_BASE_10GBE_CC] & XGBE_SFP_BASE_10GBE_CC_SR)
1102 		phy_data->sfp_base = XGBE_SFP_BASE_10000_SR;
1103 	else if (sfp_base[XGBE_SFP_BASE_10GBE_CC] & XGBE_SFP_BASE_10GBE_CC_LR)
1104 		phy_data->sfp_base = XGBE_SFP_BASE_10000_LR;
1105 	else if (sfp_base[XGBE_SFP_BASE_10GBE_CC] & XGBE_SFP_BASE_10GBE_CC_LRM)
1106 		phy_data->sfp_base = XGBE_SFP_BASE_10000_LRM;
1107 	else if (sfp_base[XGBE_SFP_BASE_10GBE_CC] & XGBE_SFP_BASE_10GBE_CC_ER)
1108 		phy_data->sfp_base = XGBE_SFP_BASE_10000_ER;
1109 	else if (sfp_base[XGBE_SFP_BASE_1GBE_CC] & XGBE_SFP_BASE_1GBE_CC_SX)
1110 		phy_data->sfp_base = XGBE_SFP_BASE_1000_SX;
1111 	else if (sfp_base[XGBE_SFP_BASE_1GBE_CC] & XGBE_SFP_BASE_1GBE_CC_LX)
1112 		phy_data->sfp_base = XGBE_SFP_BASE_1000_LX;
1113 	else if (sfp_base[XGBE_SFP_BASE_1GBE_CC] & XGBE_SFP_BASE_1GBE_CC_CX)
1114 		phy_data->sfp_base = XGBE_SFP_BASE_1000_CX;
1115 	else if (sfp_base[XGBE_SFP_BASE_1GBE_CC] & XGBE_SFP_BASE_1GBE_CC_T)
1116 		phy_data->sfp_base = XGBE_SFP_BASE_1000_T;
1117 
1118 	switch (phy_data->sfp_base) {
1119 	case XGBE_SFP_BASE_1000_T:
1120 		phy_data->sfp_speed = XGBE_SFP_SPEED_100_1000;
1121 		break;
1122 	case XGBE_SFP_BASE_1000_SX:
1123 	case XGBE_SFP_BASE_1000_LX:
1124 	case XGBE_SFP_BASE_1000_CX:
1125 		phy_data->sfp_speed = XGBE_SFP_SPEED_1000;
1126 		break;
1127 	case XGBE_SFP_BASE_10000_SR:
1128 	case XGBE_SFP_BASE_10000_LR:
1129 	case XGBE_SFP_BASE_10000_LRM:
1130 	case XGBE_SFP_BASE_10000_ER:
1131 	case XGBE_SFP_BASE_10000_CR:
1132 		phy_data->sfp_speed = XGBE_SFP_SPEED_10000;
1133 		break;
1134 	default:
1135 		break;
1136 	}
1137 }
1138 
xgbe_phy_sfp_eeprom_info(struct xgbe_prv_data * pdata,struct xgbe_sfp_eeprom * sfp_eeprom)1139 static void xgbe_phy_sfp_eeprom_info(struct xgbe_prv_data *pdata,
1140 				     struct xgbe_sfp_eeprom *sfp_eeprom)
1141 {
1142 	struct xgbe_sfp_ascii sfp_ascii;
1143 	char *sfp_data = (char *)&sfp_ascii;
1144 
1145 	netif_dbg(pdata, drv, pdata->netdev, "SFP detected:\n");
1146 	memcpy(sfp_data, &sfp_eeprom->base[XGBE_SFP_BASE_VENDOR_NAME],
1147 	       XGBE_SFP_BASE_VENDOR_NAME_LEN);
1148 	sfp_data[XGBE_SFP_BASE_VENDOR_NAME_LEN] = '\0';
1149 	netif_dbg(pdata, drv, pdata->netdev, "  vendor:         %s\n",
1150 		  sfp_data);
1151 
1152 	memcpy(sfp_data, &sfp_eeprom->base[XGBE_SFP_BASE_VENDOR_PN],
1153 	       XGBE_SFP_BASE_VENDOR_PN_LEN);
1154 	sfp_data[XGBE_SFP_BASE_VENDOR_PN_LEN] = '\0';
1155 	netif_dbg(pdata, drv, pdata->netdev, "  part number:    %s\n",
1156 		  sfp_data);
1157 
1158 	memcpy(sfp_data, &sfp_eeprom->base[XGBE_SFP_BASE_VENDOR_REV],
1159 	       XGBE_SFP_BASE_VENDOR_REV_LEN);
1160 	sfp_data[XGBE_SFP_BASE_VENDOR_REV_LEN] = '\0';
1161 	netif_dbg(pdata, drv, pdata->netdev, "  revision level: %s\n",
1162 		  sfp_data);
1163 
1164 	memcpy(sfp_data, &sfp_eeprom->extd[XGBE_SFP_BASE_VENDOR_SN],
1165 	       XGBE_SFP_BASE_VENDOR_SN_LEN);
1166 	sfp_data[XGBE_SFP_BASE_VENDOR_SN_LEN] = '\0';
1167 	netif_dbg(pdata, drv, pdata->netdev, "  serial number:  %s\n",
1168 		  sfp_data);
1169 }
1170 
xgbe_phy_sfp_verify_eeprom(u8 cc_in,u8 * buf,unsigned int len)1171 static bool xgbe_phy_sfp_verify_eeprom(u8 cc_in, u8 *buf, unsigned int len)
1172 {
1173 	u8 cc;
1174 
1175 	for (cc = 0; len; buf++, len--)
1176 		cc += *buf;
1177 
1178 	return cc == cc_in;
1179 }
1180 
xgbe_phy_sfp_read_eeprom(struct xgbe_prv_data * pdata)1181 static int xgbe_phy_sfp_read_eeprom(struct xgbe_prv_data *pdata)
1182 {
1183 	struct xgbe_phy_data *phy_data = pdata->phy_data;
1184 	struct xgbe_sfp_eeprom sfp_eeprom;
1185 	u8 eeprom_addr;
1186 	int ret;
1187 
1188 	ret = xgbe_phy_sfp_get_mux(pdata);
1189 	if (ret) {
1190 		dev_err_once(pdata->dev, "%s: I2C error setting SFP MUX\n",
1191 			     netdev_name(pdata->netdev));
1192 		return ret;
1193 	}
1194 
1195 	/* Read the SFP serial ID eeprom */
1196 	eeprom_addr = 0;
1197 	ret = xgbe_phy_i2c_read(pdata, XGBE_SFP_SERIAL_ID_ADDRESS,
1198 				&eeprom_addr, sizeof(eeprom_addr),
1199 				&sfp_eeprom, sizeof(sfp_eeprom));
1200 	if (ret) {
1201 		dev_err_once(pdata->dev, "%s: I2C error reading SFP EEPROM\n",
1202 			     netdev_name(pdata->netdev));
1203 		goto put;
1204 	}
1205 
1206 	/* Validate the contents read */
1207 	if (!xgbe_phy_sfp_verify_eeprom(sfp_eeprom.base[XGBE_SFP_BASE_CC],
1208 					sfp_eeprom.base,
1209 					sizeof(sfp_eeprom.base) - 1)) {
1210 		ret = -EINVAL;
1211 		goto put;
1212 	}
1213 
1214 	if (!xgbe_phy_sfp_verify_eeprom(sfp_eeprom.extd[XGBE_SFP_EXTD_CC],
1215 					sfp_eeprom.extd,
1216 					sizeof(sfp_eeprom.extd) - 1)) {
1217 		ret = -EINVAL;
1218 		goto put;
1219 	}
1220 
1221 	/* Check for an added or changed SFP */
1222 	if (memcmp(&phy_data->sfp_eeprom, &sfp_eeprom, sizeof(sfp_eeprom))) {
1223 		phy_data->sfp_changed = 1;
1224 
1225 		if (netif_msg_drv(pdata))
1226 			xgbe_phy_sfp_eeprom_info(pdata, &sfp_eeprom);
1227 
1228 		memcpy(&phy_data->sfp_eeprom, &sfp_eeprom, sizeof(sfp_eeprom));
1229 
1230 		xgbe_phy_free_phy_device(pdata);
1231 	} else {
1232 		phy_data->sfp_changed = 0;
1233 	}
1234 
1235 put:
1236 	xgbe_phy_sfp_put_mux(pdata);
1237 
1238 	return ret;
1239 }
1240 
xgbe_phy_sfp_signals(struct xgbe_prv_data * pdata)1241 static void xgbe_phy_sfp_signals(struct xgbe_prv_data *pdata)
1242 {
1243 	struct xgbe_phy_data *phy_data = pdata->phy_data;
1244 	u8 gpio_reg, gpio_ports[2];
1245 	int ret;
1246 
1247 	/* Read the input port registers */
1248 	gpio_reg = 0;
1249 	ret = xgbe_phy_i2c_read(pdata, phy_data->sfp_gpio_address,
1250 				&gpio_reg, sizeof(gpio_reg),
1251 				gpio_ports, sizeof(gpio_ports));
1252 	if (ret) {
1253 		dev_err_once(pdata->dev, "%s: I2C error reading SFP GPIOs\n",
1254 			     netdev_name(pdata->netdev));
1255 		return;
1256 	}
1257 
1258 	phy_data->sfp_gpio_inputs = (gpio_ports[1] << 8) | gpio_ports[0];
1259 
1260 	phy_data->sfp_mod_absent = xgbe_phy_check_sfp_mod_absent(phy_data);
1261 }
1262 
xgbe_phy_sfp_mod_absent(struct xgbe_prv_data * pdata)1263 static void xgbe_phy_sfp_mod_absent(struct xgbe_prv_data *pdata)
1264 {
1265 	struct xgbe_phy_data *phy_data = pdata->phy_data;
1266 
1267 	xgbe_phy_free_phy_device(pdata);
1268 
1269 	phy_data->sfp_mod_absent = 1;
1270 	phy_data->sfp_phy_avail = 0;
1271 	memset(&phy_data->sfp_eeprom, 0, sizeof(phy_data->sfp_eeprom));
1272 }
1273 
xgbe_phy_sfp_reset(struct xgbe_phy_data * phy_data)1274 static void xgbe_phy_sfp_reset(struct xgbe_phy_data *phy_data)
1275 {
1276 	phy_data->sfp_rx_los = 0;
1277 	phy_data->sfp_tx_fault = 0;
1278 	phy_data->sfp_mod_absent = 1;
1279 	phy_data->sfp_base = XGBE_SFP_BASE_UNKNOWN;
1280 	phy_data->sfp_cable = XGBE_SFP_CABLE_UNKNOWN;
1281 	phy_data->sfp_speed = XGBE_SFP_SPEED_UNKNOWN;
1282 }
1283 
xgbe_phy_sfp_detect(struct xgbe_prv_data * pdata)1284 static void xgbe_phy_sfp_detect(struct xgbe_prv_data *pdata)
1285 {
1286 	struct xgbe_phy_data *phy_data = pdata->phy_data;
1287 	int ret;
1288 
1289 	/* Reset the SFP signals and info */
1290 	xgbe_phy_sfp_reset(phy_data);
1291 
1292 	ret = xgbe_phy_get_comm_ownership(pdata);
1293 	if (ret)
1294 		return;
1295 
1296 	/* Read the SFP signals and check for module presence */
1297 	xgbe_phy_sfp_signals(pdata);
1298 	if (phy_data->sfp_mod_absent) {
1299 		xgbe_phy_sfp_mod_absent(pdata);
1300 		goto put;
1301 	}
1302 
1303 	ret = xgbe_phy_sfp_read_eeprom(pdata);
1304 	if (ret) {
1305 		/* Treat any error as if there isn't an SFP plugged in */
1306 		xgbe_phy_sfp_reset(phy_data);
1307 		xgbe_phy_sfp_mod_absent(pdata);
1308 		goto put;
1309 	}
1310 
1311 	xgbe_phy_sfp_parse_eeprom(pdata);
1312 
1313 	xgbe_phy_sfp_external_phy(pdata);
1314 
1315 put:
1316 	xgbe_phy_sfp_phy_settings(pdata);
1317 
1318 	xgbe_phy_put_comm_ownership(pdata);
1319 }
1320 
xgbe_phy_module_eeprom(struct xgbe_prv_data * pdata,struct ethtool_eeprom * eeprom,u8 * data)1321 static int xgbe_phy_module_eeprom(struct xgbe_prv_data *pdata,
1322 				  struct ethtool_eeprom *eeprom, u8 *data)
1323 {
1324 	struct xgbe_phy_data *phy_data = pdata->phy_data;
1325 	u8 eeprom_addr, eeprom_data[XGBE_SFP_EEPROM_MAX];
1326 	struct xgbe_sfp_eeprom *sfp_eeprom;
1327 	unsigned int i, j, rem;
1328 	int ret;
1329 
1330 	rem = eeprom->len;
1331 
1332 	if (!eeprom->len) {
1333 		ret = -EINVAL;
1334 		goto done;
1335 	}
1336 
1337 	if ((eeprom->offset + eeprom->len) > XGBE_SFP_EEPROM_MAX) {
1338 		ret = -EINVAL;
1339 		goto done;
1340 	}
1341 
1342 	if (phy_data->port_mode != XGBE_PORT_MODE_SFP) {
1343 		ret = -ENXIO;
1344 		goto done;
1345 	}
1346 
1347 	if (!netif_running(pdata->netdev)) {
1348 		ret = -EIO;
1349 		goto done;
1350 	}
1351 
1352 	if (phy_data->sfp_mod_absent) {
1353 		ret = -EIO;
1354 		goto done;
1355 	}
1356 
1357 	ret = xgbe_phy_get_comm_ownership(pdata);
1358 	if (ret) {
1359 		ret = -EIO;
1360 		goto done;
1361 	}
1362 
1363 	ret = xgbe_phy_sfp_get_mux(pdata);
1364 	if (ret) {
1365 		netdev_err(pdata->netdev, "I2C error setting SFP MUX\n");
1366 		ret = -EIO;
1367 		goto put_own;
1368 	}
1369 
1370 	/* Read the SFP serial ID eeprom */
1371 	eeprom_addr = 0;
1372 	ret = xgbe_phy_i2c_read(pdata, XGBE_SFP_SERIAL_ID_ADDRESS,
1373 				&eeprom_addr, sizeof(eeprom_addr),
1374 				eeprom_data, XGBE_SFP_EEPROM_BASE_LEN);
1375 	if (ret) {
1376 		netdev_err(pdata->netdev,
1377 			   "I2C error reading SFP EEPROM\n");
1378 		ret = -EIO;
1379 		goto put_mux;
1380 	}
1381 
1382 	sfp_eeprom = (struct xgbe_sfp_eeprom *)eeprom_data;
1383 
1384 	if (XGBE_SFP_DIAGS_SUPPORTED(sfp_eeprom)) {
1385 		/* Read the SFP diagnostic eeprom */
1386 		eeprom_addr = 0;
1387 		ret = xgbe_phy_i2c_read(pdata, XGBE_SFP_DIAG_INFO_ADDRESS,
1388 					&eeprom_addr, sizeof(eeprom_addr),
1389 					eeprom_data + XGBE_SFP_EEPROM_BASE_LEN,
1390 					XGBE_SFP_EEPROM_DIAG_LEN);
1391 		if (ret) {
1392 			netdev_err(pdata->netdev,
1393 				   "I2C error reading SFP DIAGS\n");
1394 			ret = -EIO;
1395 			goto put_mux;
1396 		}
1397 	}
1398 
1399 	for (i = 0, j = eeprom->offset; i < eeprom->len; i++, j++) {
1400 		if ((j >= XGBE_SFP_EEPROM_BASE_LEN) &&
1401 		    !XGBE_SFP_DIAGS_SUPPORTED(sfp_eeprom))
1402 			break;
1403 
1404 		data[i] = eeprom_data[j];
1405 		rem--;
1406 	}
1407 
1408 put_mux:
1409 	xgbe_phy_sfp_put_mux(pdata);
1410 
1411 put_own:
1412 	xgbe_phy_put_comm_ownership(pdata);
1413 
1414 done:
1415 	eeprom->len -= rem;
1416 
1417 	return ret;
1418 }
1419 
xgbe_phy_module_info(struct xgbe_prv_data * pdata,struct ethtool_modinfo * modinfo)1420 static int xgbe_phy_module_info(struct xgbe_prv_data *pdata,
1421 				struct ethtool_modinfo *modinfo)
1422 {
1423 	struct xgbe_phy_data *phy_data = pdata->phy_data;
1424 
1425 	if (phy_data->port_mode != XGBE_PORT_MODE_SFP)
1426 		return -ENXIO;
1427 
1428 	if (!netif_running(pdata->netdev))
1429 		return -EIO;
1430 
1431 	if (phy_data->sfp_mod_absent)
1432 		return -EIO;
1433 
1434 	if (XGBE_SFP_DIAGS_SUPPORTED(&phy_data->sfp_eeprom)) {
1435 		modinfo->type = ETH_MODULE_SFF_8472;
1436 		modinfo->eeprom_len = ETH_MODULE_SFF_8472_LEN;
1437 	} else {
1438 		modinfo->type = ETH_MODULE_SFF_8079;
1439 		modinfo->eeprom_len = ETH_MODULE_SFF_8079_LEN;
1440 	}
1441 
1442 	return 0;
1443 }
1444 
xgbe_phy_phydev_flowctrl(struct xgbe_prv_data * pdata)1445 static void xgbe_phy_phydev_flowctrl(struct xgbe_prv_data *pdata)
1446 {
1447 	struct ethtool_link_ksettings *lks = &pdata->phy.lks;
1448 	struct xgbe_phy_data *phy_data = pdata->phy_data;
1449 	u16 lcl_adv = 0, rmt_adv = 0;
1450 	u8 fc;
1451 
1452 	pdata->phy.tx_pause = 0;
1453 	pdata->phy.rx_pause = 0;
1454 
1455 	if (!phy_data->phydev)
1456 		return;
1457 
1458 	lcl_adv = linkmode_adv_to_lcl_adv_t(phy_data->phydev->advertising);
1459 
1460 	if (phy_data->phydev->pause) {
1461 		XGBE_SET_LP_ADV(lks, Pause);
1462 		rmt_adv |= LPA_PAUSE_CAP;
1463 	}
1464 	if (phy_data->phydev->asym_pause) {
1465 		XGBE_SET_LP_ADV(lks, Asym_Pause);
1466 		rmt_adv |= LPA_PAUSE_ASYM;
1467 	}
1468 
1469 	fc = mii_resolve_flowctrl_fdx(lcl_adv, rmt_adv);
1470 	if (fc & FLOW_CTRL_TX)
1471 		pdata->phy.tx_pause = 1;
1472 	if (fc & FLOW_CTRL_RX)
1473 		pdata->phy.rx_pause = 1;
1474 }
1475 
xgbe_phy_an37_sgmii_outcome(struct xgbe_prv_data * pdata)1476 static enum xgbe_mode xgbe_phy_an37_sgmii_outcome(struct xgbe_prv_data *pdata)
1477 {
1478 	struct ethtool_link_ksettings *lks = &pdata->phy.lks;
1479 	enum xgbe_mode mode;
1480 
1481 	XGBE_SET_LP_ADV(lks, Autoneg);
1482 	XGBE_SET_LP_ADV(lks, TP);
1483 
1484 	/* Use external PHY to determine flow control */
1485 	if (pdata->phy.pause_autoneg)
1486 		xgbe_phy_phydev_flowctrl(pdata);
1487 
1488 	switch (pdata->an_status & XGBE_SGMII_AN_LINK_SPEED) {
1489 	case XGBE_SGMII_AN_LINK_SPEED_10:
1490 		if (pdata->an_status & XGBE_SGMII_AN_LINK_DUPLEX) {
1491 			XGBE_SET_LP_ADV(lks, 10baseT_Full);
1492 			mode = XGBE_MODE_SGMII_10;
1493 		} else {
1494 			/* Half-duplex not supported */
1495 			XGBE_SET_LP_ADV(lks, 10baseT_Half);
1496 			mode = XGBE_MODE_UNKNOWN;
1497 		}
1498 		break;
1499 	case XGBE_SGMII_AN_LINK_SPEED_100:
1500 		if (pdata->an_status & XGBE_SGMII_AN_LINK_DUPLEX) {
1501 			XGBE_SET_LP_ADV(lks, 100baseT_Full);
1502 			mode = XGBE_MODE_SGMII_100;
1503 		} else {
1504 			/* Half-duplex not supported */
1505 			XGBE_SET_LP_ADV(lks, 100baseT_Half);
1506 			mode = XGBE_MODE_UNKNOWN;
1507 		}
1508 		break;
1509 	case XGBE_SGMII_AN_LINK_SPEED_1000:
1510 		if (pdata->an_status & XGBE_SGMII_AN_LINK_DUPLEX) {
1511 			XGBE_SET_LP_ADV(lks, 1000baseT_Full);
1512 			mode = XGBE_MODE_SGMII_1000;
1513 		} else {
1514 			/* Half-duplex not supported */
1515 			XGBE_SET_LP_ADV(lks, 1000baseT_Half);
1516 			mode = XGBE_MODE_UNKNOWN;
1517 		}
1518 		break;
1519 	default:
1520 		mode = XGBE_MODE_UNKNOWN;
1521 	}
1522 
1523 	return mode;
1524 }
1525 
xgbe_phy_an37_outcome(struct xgbe_prv_data * pdata)1526 static enum xgbe_mode xgbe_phy_an37_outcome(struct xgbe_prv_data *pdata)
1527 {
1528 	struct ethtool_link_ksettings *lks = &pdata->phy.lks;
1529 	enum xgbe_mode mode;
1530 	unsigned int ad_reg, lp_reg;
1531 
1532 	XGBE_SET_LP_ADV(lks, Autoneg);
1533 	XGBE_SET_LP_ADV(lks, FIBRE);
1534 
1535 	/* Compare Advertisement and Link Partner register */
1536 	ad_reg = XMDIO_READ(pdata, MDIO_MMD_VEND2, MDIO_VEND2_AN_ADVERTISE);
1537 	lp_reg = XMDIO_READ(pdata, MDIO_MMD_VEND2, MDIO_VEND2_AN_LP_ABILITY);
1538 	if (lp_reg & 0x100)
1539 		XGBE_SET_LP_ADV(lks, Pause);
1540 	if (lp_reg & 0x80)
1541 		XGBE_SET_LP_ADV(lks, Asym_Pause);
1542 
1543 	if (pdata->phy.pause_autoneg) {
1544 		/* Set flow control based on auto-negotiation result */
1545 		pdata->phy.tx_pause = 0;
1546 		pdata->phy.rx_pause = 0;
1547 
1548 		if (ad_reg & lp_reg & 0x100) {
1549 			pdata->phy.tx_pause = 1;
1550 			pdata->phy.rx_pause = 1;
1551 		} else if (ad_reg & lp_reg & 0x80) {
1552 			if (ad_reg & 0x100)
1553 				pdata->phy.rx_pause = 1;
1554 			else if (lp_reg & 0x100)
1555 				pdata->phy.tx_pause = 1;
1556 		}
1557 	}
1558 
1559 	if (lp_reg & 0x20)
1560 		XGBE_SET_LP_ADV(lks, 1000baseX_Full);
1561 
1562 	/* Half duplex is not supported */
1563 	ad_reg &= lp_reg;
1564 	mode = (ad_reg & 0x20) ? XGBE_MODE_X : XGBE_MODE_UNKNOWN;
1565 
1566 	return mode;
1567 }
1568 
xgbe_phy_an73_redrv_outcome(struct xgbe_prv_data * pdata)1569 static enum xgbe_mode xgbe_phy_an73_redrv_outcome(struct xgbe_prv_data *pdata)
1570 {
1571 	struct ethtool_link_ksettings *lks = &pdata->phy.lks;
1572 	struct xgbe_phy_data *phy_data = pdata->phy_data;
1573 	enum xgbe_mode mode;
1574 	unsigned int ad_reg, lp_reg;
1575 
1576 	XGBE_SET_LP_ADV(lks, Autoneg);
1577 	XGBE_SET_LP_ADV(lks, Backplane);
1578 
1579 	/* Use external PHY to determine flow control */
1580 	if (pdata->phy.pause_autoneg)
1581 		xgbe_phy_phydev_flowctrl(pdata);
1582 
1583 	/* Compare Advertisement and Link Partner register 2 */
1584 	ad_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_ADVERTISE + 1);
1585 	lp_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_LPA + 1);
1586 	if (lp_reg & 0x80)
1587 		XGBE_SET_LP_ADV(lks, 10000baseKR_Full);
1588 	if (lp_reg & 0x20)
1589 		XGBE_SET_LP_ADV(lks, 1000baseKX_Full);
1590 
1591 	ad_reg &= lp_reg;
1592 	if (ad_reg & 0x80) {
1593 		switch (phy_data->port_mode) {
1594 		case XGBE_PORT_MODE_BACKPLANE:
1595 		case XGBE_PORT_MODE_BACKPLANE_NO_AUTONEG:
1596 			mode = XGBE_MODE_KR;
1597 			break;
1598 		default:
1599 			mode = XGBE_MODE_SFI;
1600 			break;
1601 		}
1602 	} else if (ad_reg & 0x20) {
1603 		switch (phy_data->port_mode) {
1604 		case XGBE_PORT_MODE_BACKPLANE:
1605 		case XGBE_PORT_MODE_BACKPLANE_NO_AUTONEG:
1606 			mode = XGBE_MODE_KX_1000;
1607 			break;
1608 		case XGBE_PORT_MODE_1000BASE_X:
1609 			mode = XGBE_MODE_X;
1610 			break;
1611 		case XGBE_PORT_MODE_SFP:
1612 			switch (phy_data->sfp_base) {
1613 			case XGBE_SFP_BASE_1000_T:
1614 				if (phy_data->phydev &&
1615 				    (phy_data->phydev->speed == SPEED_10))
1616 					mode = XGBE_MODE_SGMII_10;
1617 				else if (phy_data->phydev &&
1618 					 (phy_data->phydev->speed == SPEED_100))
1619 					mode = XGBE_MODE_SGMII_100;
1620 				else
1621 					mode = XGBE_MODE_SGMII_1000;
1622 				break;
1623 			case XGBE_SFP_BASE_1000_SX:
1624 			case XGBE_SFP_BASE_1000_LX:
1625 			case XGBE_SFP_BASE_1000_CX:
1626 			default:
1627 				mode = XGBE_MODE_X;
1628 				break;
1629 			}
1630 			break;
1631 		default:
1632 			if (phy_data->phydev &&
1633 			    (phy_data->phydev->speed == SPEED_10))
1634 				mode = XGBE_MODE_SGMII_10;
1635 			else if (phy_data->phydev &&
1636 				 (phy_data->phydev->speed == SPEED_100))
1637 				mode = XGBE_MODE_SGMII_100;
1638 			else
1639 				mode = XGBE_MODE_SGMII_1000;
1640 			break;
1641 		}
1642 	} else {
1643 		mode = XGBE_MODE_UNKNOWN;
1644 	}
1645 
1646 	/* Compare Advertisement and Link Partner register 3 */
1647 	ad_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_ADVERTISE + 2);
1648 	lp_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_LPA + 2);
1649 	if (lp_reg & 0xc000)
1650 		XGBE_SET_LP_ADV(lks, 10000baseR_FEC);
1651 
1652 	return mode;
1653 }
1654 
xgbe_phy_an73_outcome(struct xgbe_prv_data * pdata)1655 static enum xgbe_mode xgbe_phy_an73_outcome(struct xgbe_prv_data *pdata)
1656 {
1657 	struct ethtool_link_ksettings *lks = &pdata->phy.lks;
1658 	enum xgbe_mode mode;
1659 	unsigned int ad_reg, lp_reg;
1660 
1661 	XGBE_SET_LP_ADV(lks, Autoneg);
1662 	XGBE_SET_LP_ADV(lks, Backplane);
1663 
1664 	/* Compare Advertisement and Link Partner register 1 */
1665 	ad_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_ADVERTISE);
1666 	lp_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_LPA);
1667 	if (lp_reg & 0x400)
1668 		XGBE_SET_LP_ADV(lks, Pause);
1669 	if (lp_reg & 0x800)
1670 		XGBE_SET_LP_ADV(lks, Asym_Pause);
1671 
1672 	if (pdata->phy.pause_autoneg) {
1673 		/* Set flow control based on auto-negotiation result */
1674 		pdata->phy.tx_pause = 0;
1675 		pdata->phy.rx_pause = 0;
1676 
1677 		if (ad_reg & lp_reg & 0x400) {
1678 			pdata->phy.tx_pause = 1;
1679 			pdata->phy.rx_pause = 1;
1680 		} else if (ad_reg & lp_reg & 0x800) {
1681 			if (ad_reg & 0x400)
1682 				pdata->phy.rx_pause = 1;
1683 			else if (lp_reg & 0x400)
1684 				pdata->phy.tx_pause = 1;
1685 		}
1686 	}
1687 
1688 	/* Compare Advertisement and Link Partner register 2 */
1689 	ad_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_ADVERTISE + 1);
1690 	lp_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_LPA + 1);
1691 	if (lp_reg & 0x80)
1692 		XGBE_SET_LP_ADV(lks, 10000baseKR_Full);
1693 	if (lp_reg & 0x20)
1694 		XGBE_SET_LP_ADV(lks, 1000baseKX_Full);
1695 
1696 	ad_reg &= lp_reg;
1697 	if (ad_reg & 0x80)
1698 		mode = XGBE_MODE_KR;
1699 	else if (ad_reg & 0x20)
1700 		mode = XGBE_MODE_KX_1000;
1701 	else
1702 		mode = XGBE_MODE_UNKNOWN;
1703 
1704 	/* Compare Advertisement and Link Partner register 3 */
1705 	ad_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_ADVERTISE + 2);
1706 	lp_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_LPA + 2);
1707 	if (lp_reg & 0xc000)
1708 		XGBE_SET_LP_ADV(lks, 10000baseR_FEC);
1709 
1710 	return mode;
1711 }
1712 
xgbe_phy_an_outcome(struct xgbe_prv_data * pdata)1713 static enum xgbe_mode xgbe_phy_an_outcome(struct xgbe_prv_data *pdata)
1714 {
1715 	switch (pdata->an_mode) {
1716 	case XGBE_AN_MODE_CL73:
1717 		return xgbe_phy_an73_outcome(pdata);
1718 	case XGBE_AN_MODE_CL73_REDRV:
1719 		return xgbe_phy_an73_redrv_outcome(pdata);
1720 	case XGBE_AN_MODE_CL37:
1721 		return xgbe_phy_an37_outcome(pdata);
1722 	case XGBE_AN_MODE_CL37_SGMII:
1723 		return xgbe_phy_an37_sgmii_outcome(pdata);
1724 	default:
1725 		return XGBE_MODE_UNKNOWN;
1726 	}
1727 }
1728 
xgbe_phy_an_advertising(struct xgbe_prv_data * pdata,struct ethtool_link_ksettings * dlks)1729 static void xgbe_phy_an_advertising(struct xgbe_prv_data *pdata,
1730 				    struct ethtool_link_ksettings *dlks)
1731 {
1732 	struct ethtool_link_ksettings *slks = &pdata->phy.lks;
1733 	struct xgbe_phy_data *phy_data = pdata->phy_data;
1734 
1735 	XGBE_LM_COPY(dlks, advertising, slks, advertising);
1736 
1737 	/* Without a re-driver, just return current advertising */
1738 	if (!phy_data->redrv)
1739 		return;
1740 
1741 	/* With the KR re-driver we need to advertise a single speed */
1742 	XGBE_CLR_ADV(dlks, 1000baseKX_Full);
1743 	XGBE_CLR_ADV(dlks, 10000baseKR_Full);
1744 
1745 	/* Advertise FEC support is present */
1746 	if (pdata->fec_ability & MDIO_PMA_10GBR_FECABLE_ABLE)
1747 		XGBE_SET_ADV(dlks, 10000baseR_FEC);
1748 
1749 	switch (phy_data->port_mode) {
1750 	case XGBE_PORT_MODE_BACKPLANE:
1751 	case XGBE_PORT_MODE_BACKPLANE_NO_AUTONEG:
1752 		XGBE_SET_ADV(dlks, 10000baseKR_Full);
1753 		break;
1754 	case XGBE_PORT_MODE_BACKPLANE_2500:
1755 		XGBE_SET_ADV(dlks, 1000baseKX_Full);
1756 		break;
1757 	case XGBE_PORT_MODE_1000BASE_T:
1758 	case XGBE_PORT_MODE_1000BASE_X:
1759 	case XGBE_PORT_MODE_NBASE_T:
1760 		XGBE_SET_ADV(dlks, 1000baseKX_Full);
1761 		break;
1762 	case XGBE_PORT_MODE_10GBASE_T:
1763 		if (phy_data->phydev &&
1764 		    (phy_data->phydev->speed == SPEED_10000))
1765 			XGBE_SET_ADV(dlks, 10000baseKR_Full);
1766 		else if (phy_data->phydev &&
1767 			 (phy_data->phydev->speed == SPEED_2500))
1768 			XGBE_SET_ADV(dlks, 2500baseX_Full);
1769 		else
1770 			XGBE_SET_ADV(dlks, 1000baseKX_Full);
1771 		break;
1772 	case XGBE_PORT_MODE_10GBASE_R:
1773 		XGBE_SET_ADV(dlks, 10000baseKR_Full);
1774 		break;
1775 	case XGBE_PORT_MODE_SFP:
1776 		switch (phy_data->sfp_base) {
1777 		case XGBE_SFP_BASE_1000_T:
1778 		case XGBE_SFP_BASE_1000_SX:
1779 		case XGBE_SFP_BASE_1000_LX:
1780 		case XGBE_SFP_BASE_1000_CX:
1781 			XGBE_SET_ADV(dlks, 1000baseKX_Full);
1782 			break;
1783 		default:
1784 			XGBE_SET_ADV(dlks, 10000baseKR_Full);
1785 			break;
1786 		}
1787 		break;
1788 	default:
1789 		XGBE_SET_ADV(dlks, 10000baseKR_Full);
1790 		break;
1791 	}
1792 }
1793 
xgbe_phy_an_config(struct xgbe_prv_data * pdata)1794 static int xgbe_phy_an_config(struct xgbe_prv_data *pdata)
1795 {
1796 	struct ethtool_link_ksettings *lks = &pdata->phy.lks;
1797 	struct xgbe_phy_data *phy_data = pdata->phy_data;
1798 	int ret;
1799 
1800 	ret = xgbe_phy_find_phy_device(pdata);
1801 	if (ret)
1802 		return ret;
1803 
1804 	if (!phy_data->phydev)
1805 		return 0;
1806 
1807 	phy_data->phydev->autoneg = pdata->phy.autoneg;
1808 	linkmode_and(phy_data->phydev->advertising,
1809 		     phy_data->phydev->supported,
1810 		     lks->link_modes.advertising);
1811 
1812 	if (pdata->phy.autoneg != AUTONEG_ENABLE) {
1813 		phy_data->phydev->speed = pdata->phy.speed;
1814 		phy_data->phydev->duplex = pdata->phy.duplex;
1815 	}
1816 
1817 	ret = phy_start_aneg(phy_data->phydev);
1818 
1819 	return ret;
1820 }
1821 
xgbe_phy_an_sfp_mode(struct xgbe_phy_data * phy_data)1822 static enum xgbe_an_mode xgbe_phy_an_sfp_mode(struct xgbe_phy_data *phy_data)
1823 {
1824 	switch (phy_data->sfp_base) {
1825 	case XGBE_SFP_BASE_1000_T:
1826 		return XGBE_AN_MODE_CL37_SGMII;
1827 	case XGBE_SFP_BASE_1000_SX:
1828 	case XGBE_SFP_BASE_1000_LX:
1829 	case XGBE_SFP_BASE_1000_CX:
1830 		return XGBE_AN_MODE_CL37;
1831 	default:
1832 		return XGBE_AN_MODE_NONE;
1833 	}
1834 }
1835 
xgbe_phy_an_mode(struct xgbe_prv_data * pdata)1836 static enum xgbe_an_mode xgbe_phy_an_mode(struct xgbe_prv_data *pdata)
1837 {
1838 	struct xgbe_phy_data *phy_data = pdata->phy_data;
1839 
1840 	/* A KR re-driver will always require CL73 AN */
1841 	if (phy_data->redrv)
1842 		return XGBE_AN_MODE_CL73_REDRV;
1843 
1844 	switch (phy_data->port_mode) {
1845 	case XGBE_PORT_MODE_BACKPLANE:
1846 		return XGBE_AN_MODE_CL73;
1847 	case XGBE_PORT_MODE_BACKPLANE_NO_AUTONEG:
1848 	case XGBE_PORT_MODE_BACKPLANE_2500:
1849 		return XGBE_AN_MODE_NONE;
1850 	case XGBE_PORT_MODE_1000BASE_T:
1851 		return XGBE_AN_MODE_CL37_SGMII;
1852 	case XGBE_PORT_MODE_1000BASE_X:
1853 		return XGBE_AN_MODE_CL37;
1854 	case XGBE_PORT_MODE_NBASE_T:
1855 		return XGBE_AN_MODE_CL37_SGMII;
1856 	case XGBE_PORT_MODE_10GBASE_T:
1857 		return XGBE_AN_MODE_CL73;
1858 	case XGBE_PORT_MODE_10GBASE_R:
1859 		return XGBE_AN_MODE_NONE;
1860 	case XGBE_PORT_MODE_SFP:
1861 		return xgbe_phy_an_sfp_mode(phy_data);
1862 	default:
1863 		return XGBE_AN_MODE_NONE;
1864 	}
1865 }
1866 
xgbe_phy_set_redrv_mode_mdio(struct xgbe_prv_data * pdata,enum xgbe_phy_redrv_mode mode)1867 static int xgbe_phy_set_redrv_mode_mdio(struct xgbe_prv_data *pdata,
1868 					enum xgbe_phy_redrv_mode mode)
1869 {
1870 	struct xgbe_phy_data *phy_data = pdata->phy_data;
1871 	u16 redrv_reg, redrv_val;
1872 
1873 	redrv_reg = XGBE_PHY_REDRV_MODE_REG + (phy_data->redrv_lane * 0x1000);
1874 	redrv_val = (u16)mode;
1875 
1876 	return pdata->hw_if.write_ext_mii_regs_c22(pdata, phy_data->redrv_addr,
1877 						   redrv_reg, redrv_val);
1878 }
1879 
xgbe_phy_set_redrv_mode_i2c(struct xgbe_prv_data * pdata,enum xgbe_phy_redrv_mode mode)1880 static int xgbe_phy_set_redrv_mode_i2c(struct xgbe_prv_data *pdata,
1881 				       enum xgbe_phy_redrv_mode mode)
1882 {
1883 	struct xgbe_phy_data *phy_data = pdata->phy_data;
1884 	unsigned int redrv_reg;
1885 	int ret;
1886 
1887 	/* Calculate the register to write */
1888 	redrv_reg = XGBE_PHY_REDRV_MODE_REG + (phy_data->redrv_lane * 0x1000);
1889 
1890 	ret = xgbe_phy_redrv_write(pdata, redrv_reg, mode);
1891 
1892 	return ret;
1893 }
1894 
xgbe_phy_set_redrv_mode(struct xgbe_prv_data * pdata)1895 static void xgbe_phy_set_redrv_mode(struct xgbe_prv_data *pdata)
1896 {
1897 	struct xgbe_phy_data *phy_data = pdata->phy_data;
1898 	enum xgbe_phy_redrv_mode mode;
1899 	int ret;
1900 
1901 	if (!phy_data->redrv)
1902 		return;
1903 
1904 	mode = XGBE_PHY_REDRV_MODE_CX;
1905 	if ((phy_data->port_mode == XGBE_PORT_MODE_SFP) &&
1906 	    (phy_data->sfp_base != XGBE_SFP_BASE_1000_CX) &&
1907 	    (phy_data->sfp_base != XGBE_SFP_BASE_10000_CR))
1908 		mode = XGBE_PHY_REDRV_MODE_SR;
1909 
1910 	ret = xgbe_phy_get_comm_ownership(pdata);
1911 	if (ret)
1912 		return;
1913 
1914 	if (phy_data->redrv_if)
1915 		xgbe_phy_set_redrv_mode_i2c(pdata, mode);
1916 	else
1917 		xgbe_phy_set_redrv_mode_mdio(pdata, mode);
1918 
1919 	xgbe_phy_put_comm_ownership(pdata);
1920 }
1921 
1922 #define MAX_RX_ADAPT_RETRIES		1
1923 #define XGBE_PMA_RX_VAL_SIG_MASK	(XGBE_PMA_RX_SIG_DET_0_MASK | \
1924 					 XGBE_PMA_RX_VALID_0_MASK)
1925 
xgbe_set_rx_adap_mode(struct xgbe_prv_data * pdata,enum xgbe_mode mode)1926 static void xgbe_set_rx_adap_mode(struct xgbe_prv_data *pdata,
1927 				  enum xgbe_mode mode)
1928 {
1929 	if (pdata->rx_adapt_retries++ >= MAX_RX_ADAPT_RETRIES) {
1930 		pdata->rx_adapt_retries = 0;
1931 		pdata->mode_set = false;
1932 		return;
1933 	}
1934 
1935 	xgbe_phy_perform_ratechange(pdata,
1936 				    mode == XGBE_MODE_KR ?
1937 				    XGBE_MB_CMD_SET_10G_KR :
1938 				    XGBE_MB_CMD_SET_10G_SFI,
1939 				    XGBE_MB_SUBCMD_RX_ADAP);
1940 }
1941 
xgbe_rx_adaptation(struct xgbe_prv_data * pdata)1942 static void xgbe_rx_adaptation(struct xgbe_prv_data *pdata)
1943 {
1944 	struct xgbe_phy_data *phy_data = pdata->phy_data;
1945 	int reg;
1946 
1947 	/* step 2: force PCS to send RX_ADAPT Req to PHY */
1948 	XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_RX_EQ_CTRL4,
1949 			 XGBE_PMA_RX_AD_REQ_MASK, XGBE_PMA_RX_AD_REQ_ENABLE);
1950 
1951 	/* Step 3: Wait for RX_ADAPT ACK from the PHY */
1952 	msleep(200);
1953 
1954 	/* Software polls for coefficient update command (given by local PHY) */
1955 	reg = XMDIO_READ(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_PHY_RX_EQ_CEU);
1956 
1957 	/* Clear the RX_AD_REQ bit */
1958 	XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_RX_EQ_CTRL4,
1959 			 XGBE_PMA_RX_AD_REQ_MASK, XGBE_PMA_RX_AD_REQ_DISABLE);
1960 
1961 	/* Check if coefficient update command is set */
1962 	if ((reg & XGBE_PMA_CFF_UPDT_MASK) != XGBE_PMA_CFF_UPDT_MASK)
1963 		goto set_mode;
1964 
1965 	/* Step 4: Check for Block lock */
1966 
1967 	reg = XMDIO_READ(pdata, MDIO_MMD_PCS, MDIO_STAT1);
1968 	if (reg < 0)
1969 		goto set_mode;
1970 
1971 	/* Link status is latched low so that momentary link drops
1972 	 * can be detected. If link was already down read again
1973 	 * to get the latest state.
1974 	 */
1975 	if (!pdata->phy.link && !(reg & MDIO_STAT1_LSTATUS)) {
1976 		reg = XMDIO_READ(pdata, MDIO_MMD_PCS, MDIO_STAT1);
1977 		if (reg < 0)
1978 			goto set_mode;
1979 	}
1980 
1981 	if (reg & MDIO_STAT1_LSTATUS) {
1982 		/* If the block lock is found, update the helpers
1983 		 * and declare the link up
1984 		 */
1985 		netif_dbg(pdata, link, pdata->netdev, "Block_lock done");
1986 		pdata->rx_adapt_done = true;
1987 		pdata->rx_adapt_retries = 0;
1988 		pdata->mode_set = false;
1989 		return;
1990 	}
1991 
1992 set_mode:
1993 	xgbe_set_rx_adap_mode(pdata, phy_data->cur_mode);
1994 }
1995 
xgbe_phy_rx_adaptation(struct xgbe_prv_data * pdata)1996 static void xgbe_phy_rx_adaptation(struct xgbe_prv_data *pdata)
1997 {
1998 	unsigned int reg;
1999 
2000 rx_adapt_reinit:
2001 	reg = XMDIO_READ_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_RX_LSTS,
2002 			      XGBE_PMA_RX_VAL_SIG_MASK);
2003 
2004 	/* step 1: Check for RX_VALID && LF_SIGDET */
2005 	if ((reg & XGBE_PMA_RX_VAL_SIG_MASK) != XGBE_PMA_RX_VAL_SIG_MASK) {
2006 		netif_dbg(pdata, link, pdata->netdev,
2007 			  "RX_VALID or LF_SIGDET is unset, issue rrc");
2008 		xgbe_phy_rrc(pdata);
2009 		if (pdata->rx_adapt_retries++ >= MAX_RX_ADAPT_RETRIES) {
2010 			pdata->rx_adapt_retries = 0;
2011 			return;
2012 		}
2013 		goto rx_adapt_reinit;
2014 	}
2015 
2016 	/* perform rx adaptation */
2017 	xgbe_rx_adaptation(pdata);
2018 }
2019 
2020 /*
2021  * xgbe_phy_stop_data_path - Stop TX/RX to prevent packet corruption
2022  * @pdata: driver private data
2023  *
2024  * This function stops the data path (TX and RX) to prevent packet
2025  * corruption during critical PHY operations like RX adaptation.
2026  * Must be called before initiating RX adaptation when link goes down.
2027  */
xgbe_phy_stop_data_path(struct xgbe_prv_data * pdata)2028 static void xgbe_phy_stop_data_path(struct xgbe_prv_data *pdata)
2029 {
2030 	if (pdata->data_path_stopped)
2031 		return;
2032 
2033 	/* Stop TX/RX to prevent packet corruption during RX adaptation */
2034 	pdata->hw_if.disable_tx(pdata);
2035 	pdata->hw_if.disable_rx(pdata);
2036 	pdata->data_path_stopped = true;
2037 
2038 	netif_dbg(pdata, link, pdata->netdev,
2039 		  "stopping data path for RX adaptation\n");
2040 }
2041 
2042 /*
2043  * xgbe_phy_start_data_path - Re-enable TX/RX after RX adaptation
2044  * @pdata: driver private data
2045  *
2046  * This function re-enables the data path (TX and RX) after RX adaptation
2047  * has completed successfully. Only called when link is confirmed up.
2048  */
xgbe_phy_start_data_path(struct xgbe_prv_data * pdata)2049 static void xgbe_phy_start_data_path(struct xgbe_prv_data *pdata)
2050 {
2051 	if (!pdata->data_path_stopped)
2052 		return;
2053 
2054 	pdata->hw_if.enable_rx(pdata);
2055 	pdata->hw_if.enable_tx(pdata);
2056 	pdata->data_path_stopped = false;
2057 
2058 	netif_dbg(pdata, link, pdata->netdev,
2059 		  "restarting data path after RX adaptation\n");
2060 }
2061 
xgbe_phy_rx_reset(struct xgbe_prv_data * pdata)2062 static void xgbe_phy_rx_reset(struct xgbe_prv_data *pdata)
2063 {
2064 	int reg;
2065 
2066 	reg = XMDIO_READ_BITS(pdata, MDIO_MMD_PCS, MDIO_PCS_DIGITAL_STAT,
2067 			      XGBE_PCS_PSEQ_STATE_MASK);
2068 	if (reg == XGBE_PCS_PSEQ_STATE_POWER_GOOD) {
2069 		/* Mailbox command timed out, reset of RX block is required.
2070 		 * This can be done by asseting the reset bit and wait for
2071 		 * its compeletion.
2072 		 */
2073 		XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_RX_CTRL1,
2074 				 XGBE_PMA_RX_RST_0_MASK, XGBE_PMA_RX_RST_0_RESET_ON);
2075 		ndelay(20);
2076 		XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_RX_CTRL1,
2077 				 XGBE_PMA_RX_RST_0_MASK, XGBE_PMA_RX_RST_0_RESET_OFF);
2078 		usleep_range(40, 50);
2079 		netif_err(pdata, link, pdata->netdev, "firmware mailbox reset performed\n");
2080 	}
2081 }
2082 
xgbe_phy_pll_ctrl(struct xgbe_prv_data * pdata,bool enable)2083 static void xgbe_phy_pll_ctrl(struct xgbe_prv_data *pdata, bool enable)
2084 {
2085 	/* PLL_CTRL feature needs to be enabled for fixed PHY modes (Non-Autoneg) only */
2086 	if (pdata->phy.autoneg != AUTONEG_DISABLE)
2087 		return;
2088 
2089 	XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_VEND2_PMA_MISC_CTRL0,
2090 			 XGBE_PMA_PLL_CTRL_MASK,
2091 			 enable ? XGBE_PMA_PLL_CTRL_ENABLE
2092 				: XGBE_PMA_PLL_CTRL_DISABLE);
2093 
2094 	/* Wait for command to complete */
2095 	usleep_range(100, 200);
2096 }
2097 
xgbe_phy_perform_ratechange(struct xgbe_prv_data * pdata,enum xgbe_mb_cmd cmd,enum xgbe_mb_subcmd sub_cmd)2098 static void xgbe_phy_perform_ratechange(struct xgbe_prv_data *pdata,
2099 					enum xgbe_mb_cmd cmd, enum xgbe_mb_subcmd sub_cmd)
2100 {
2101 	unsigned int s0 = 0;
2102 	unsigned int wait;
2103 
2104 	/* Disable PLL re-initialization during FW command processing */
2105 	xgbe_phy_pll_ctrl(pdata, false);
2106 
2107 	/* Log if a previous command did not complete */
2108 	if (XP_IOREAD_BITS(pdata, XP_DRIVER_INT_RO, STATUS)) {
2109 		netif_dbg(pdata, link, pdata->netdev,
2110 			  "firmware mailbox not ready for command\n");
2111 		xgbe_phy_rx_reset(pdata);
2112 	}
2113 
2114 	/* Construct the command */
2115 	XP_SET_BITS(s0, XP_DRIVER_SCRATCH_0, COMMAND, cmd);
2116 	XP_SET_BITS(s0, XP_DRIVER_SCRATCH_0, SUB_COMMAND, sub_cmd);
2117 
2118 	/* Issue the command */
2119 	XP_IOWRITE(pdata, XP_DRIVER_SCRATCH_0, s0);
2120 	XP_IOWRITE(pdata, XP_DRIVER_SCRATCH_1, 0);
2121 	XP_IOWRITE_BITS(pdata, XP_DRIVER_INT_REQ, REQUEST, 1);
2122 
2123 	/* Wait for command to complete */
2124 	wait = XGBE_RATECHANGE_COUNT;
2125 	while (wait--) {
2126 		if (!XP_IOREAD_BITS(pdata, XP_DRIVER_INT_RO, STATUS))
2127 			goto do_rx_adaptation;
2128 
2129 		usleep_range(1000, 2000);
2130 	}
2131 
2132 	netif_dbg(pdata, link, pdata->netdev,
2133 		  "firmware mailbox command did not complete\n");
2134 
2135 	/* Reset on error */
2136 	xgbe_phy_rx_reset(pdata);
2137 	goto reenable_pll;
2138 
2139 do_rx_adaptation:
2140 	if (pdata->en_rx_adap && sub_cmd == XGBE_MB_SUBCMD_RX_ADAP &&
2141 	    (cmd == XGBE_MB_CMD_SET_10G_KR || cmd == XGBE_MB_CMD_SET_10G_SFI)) {
2142 		netif_dbg(pdata, link, pdata->netdev,
2143 			  "Enabling RX adaptation\n");
2144 		pdata->mode_set = true;
2145 		xgbe_phy_rx_adaptation(pdata);
2146 		/* return from here to avoid enabling PLL ctrl
2147 		 * during adaptation phase
2148 		 */
2149 		return;
2150 	}
2151 
2152 reenable_pll:
2153 	/* Enable PLL re-initialization, not needed for PHY Power Off and RRC cmds */
2154 	if (cmd != XGBE_MB_CMD_POWER_OFF &&
2155 	    cmd != XGBE_MB_CMD_RRC)
2156 		xgbe_phy_pll_ctrl(pdata, true);
2157 }
2158 
xgbe_phy_rrc(struct xgbe_prv_data * pdata)2159 static void xgbe_phy_rrc(struct xgbe_prv_data *pdata)
2160 {
2161 	/* Receiver Reset Cycle */
2162 	xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_RRC, XGBE_MB_SUBCMD_NONE);
2163 
2164 	netif_dbg(pdata, link, pdata->netdev, "receiver reset complete\n");
2165 }
2166 
xgbe_phy_power_off(struct xgbe_prv_data * pdata)2167 static void xgbe_phy_power_off(struct xgbe_prv_data *pdata)
2168 {
2169 	struct xgbe_phy_data *phy_data = pdata->phy_data;
2170 
2171 	/* Power off */
2172 	xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_POWER_OFF, XGBE_MB_SUBCMD_NONE);
2173 
2174 	phy_data->cur_mode = XGBE_MODE_UNKNOWN;
2175 
2176 	netif_dbg(pdata, link, pdata->netdev, "phy powered off\n");
2177 }
2178 
enable_rx_adap(struct xgbe_prv_data * pdata,enum xgbe_mode mode)2179 static bool enable_rx_adap(struct xgbe_prv_data *pdata, enum xgbe_mode mode)
2180 {
2181 	struct xgbe_phy_data *phy_data = pdata->phy_data;
2182 	unsigned int ver;
2183 
2184 	/* Rx-Adaptation is not supported on older platforms(< 0x30H) */
2185 	ver = XGMAC_GET_BITS(pdata->hw_feat.version, MAC_VR, SNPSVER);
2186 	if (ver < 0x30)
2187 		return false;
2188 
2189 	/* Re-driver models 4223 && 4227 do not support Rx-Adaptation */
2190 	if (phy_data->redrv &&
2191 	    (phy_data->redrv_model == XGBE_PHY_REDRV_MODEL_4223 ||
2192 	     phy_data->redrv_model == XGBE_PHY_REDRV_MODEL_4227))
2193 		return false;
2194 
2195 	/* 10G KR mode with AN does not support Rx-Adaptation */
2196 	if (mode == XGBE_MODE_KR &&
2197 	    phy_data->port_mode != XGBE_PORT_MODE_BACKPLANE_NO_AUTONEG)
2198 		return false;
2199 
2200 	pdata->en_rx_adap = 1;
2201 	return true;
2202 }
2203 
xgbe_phy_sfi_mode(struct xgbe_prv_data * pdata)2204 static void xgbe_phy_sfi_mode(struct xgbe_prv_data *pdata)
2205 {
2206 	struct xgbe_phy_data *phy_data = pdata->phy_data;
2207 
2208 	xgbe_phy_set_redrv_mode(pdata);
2209 
2210 	/* 10G/SFI */
2211 	if (phy_data->sfp_cable != XGBE_SFP_CABLE_PASSIVE) {
2212 		pdata->en_rx_adap = 0;
2213 		xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_SET_10G_SFI, XGBE_MB_SUBCMD_ACTIVE);
2214 	} else if ((phy_data->sfp_cable == XGBE_SFP_CABLE_PASSIVE) &&
2215 		   (enable_rx_adap(pdata, XGBE_MODE_SFI))) {
2216 		xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_SET_10G_SFI,
2217 					    XGBE_MB_SUBCMD_RX_ADAP);
2218 	} else {
2219 		if (phy_data->sfp_cable_len <= 1)
2220 			xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_SET_10G_SFI,
2221 						    XGBE_MB_SUBCMD_PASSIVE_1M);
2222 		else if (phy_data->sfp_cable_len <= 3)
2223 			xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_SET_10G_SFI,
2224 						    XGBE_MB_SUBCMD_PASSIVE_3M);
2225 		else
2226 			xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_SET_10G_SFI,
2227 						    XGBE_MB_SUBCMD_PASSIVE_OTHER);
2228 	}
2229 
2230 	phy_data->cur_mode = XGBE_MODE_SFI;
2231 
2232 	netif_dbg(pdata, link, pdata->netdev, "10GbE SFI mode set\n");
2233 }
2234 
xgbe_phy_x_mode(struct xgbe_prv_data * pdata)2235 static void xgbe_phy_x_mode(struct xgbe_prv_data *pdata)
2236 {
2237 	struct xgbe_phy_data *phy_data = pdata->phy_data;
2238 
2239 	xgbe_phy_set_redrv_mode(pdata);
2240 
2241 	/* 1G/X */
2242 	xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_SET_1G, XGBE_MB_SUBCMD_1G_KX);
2243 
2244 	phy_data->cur_mode = XGBE_MODE_X;
2245 
2246 	netif_dbg(pdata, link, pdata->netdev, "1GbE X mode set\n");
2247 }
2248 
xgbe_phy_sgmii_1000_mode(struct xgbe_prv_data * pdata)2249 static void xgbe_phy_sgmii_1000_mode(struct xgbe_prv_data *pdata)
2250 {
2251 	struct xgbe_phy_data *phy_data = pdata->phy_data;
2252 
2253 	xgbe_phy_set_redrv_mode(pdata);
2254 
2255 	/* 1G/SGMII */
2256 	xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_SET_1G, XGBE_MB_SUBCMD_1G_SGMII);
2257 
2258 	phy_data->cur_mode = XGBE_MODE_SGMII_1000;
2259 
2260 	netif_dbg(pdata, link, pdata->netdev, "1GbE SGMII mode set\n");
2261 }
2262 
xgbe_phy_sgmii_100_mode(struct xgbe_prv_data * pdata)2263 static void xgbe_phy_sgmii_100_mode(struct xgbe_prv_data *pdata)
2264 {
2265 	struct xgbe_phy_data *phy_data = pdata->phy_data;
2266 
2267 	xgbe_phy_set_redrv_mode(pdata);
2268 
2269 	/* 100M/SGMII */
2270 	xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_SET_1G, XGBE_MB_SUBCMD_100MBITS);
2271 
2272 	phy_data->cur_mode = XGBE_MODE_SGMII_100;
2273 
2274 	netif_dbg(pdata, link, pdata->netdev, "100MbE SGMII mode set\n");
2275 }
2276 
xgbe_phy_sgmii_10_mode(struct xgbe_prv_data * pdata)2277 static void xgbe_phy_sgmii_10_mode(struct xgbe_prv_data *pdata)
2278 {
2279 	struct xgbe_phy_data *phy_data = pdata->phy_data;
2280 
2281 	xgbe_phy_set_redrv_mode(pdata);
2282 
2283 	/* 10M/SGMII */
2284 	xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_SET_1G, XGBE_MB_SUBCMD_10MBITS);
2285 
2286 	phy_data->cur_mode = XGBE_MODE_SGMII_10;
2287 
2288 	netif_dbg(pdata, link, pdata->netdev, "10MbE SGMII mode set\n");
2289 }
2290 
xgbe_phy_kr_mode(struct xgbe_prv_data * pdata)2291 static void xgbe_phy_kr_mode(struct xgbe_prv_data *pdata)
2292 {
2293 	struct xgbe_phy_data *phy_data = pdata->phy_data;
2294 
2295 	xgbe_phy_set_redrv_mode(pdata);
2296 
2297 	/* 10G/KR */
2298 	if (enable_rx_adap(pdata, XGBE_MODE_KR))
2299 		xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_SET_10G_KR,
2300 					    XGBE_MB_SUBCMD_RX_ADAP);
2301 	else
2302 		xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_SET_10G_KR,
2303 					    XGBE_MB_SUBCMD_NONE);
2304 
2305 	phy_data->cur_mode = XGBE_MODE_KR;
2306 
2307 	netif_dbg(pdata, link, pdata->netdev, "10GbE KR mode set\n");
2308 }
2309 
xgbe_phy_kx_2500_mode(struct xgbe_prv_data * pdata)2310 static void xgbe_phy_kx_2500_mode(struct xgbe_prv_data *pdata)
2311 {
2312 	struct xgbe_phy_data *phy_data = pdata->phy_data;
2313 
2314 	xgbe_phy_set_redrv_mode(pdata);
2315 
2316 	/* 2.5G/KX */
2317 	xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_SET_2_5G, XGBE_MB_SUBCMD_NONE);
2318 
2319 	phy_data->cur_mode = XGBE_MODE_KX_2500;
2320 
2321 	netif_dbg(pdata, link, pdata->netdev, "2.5GbE KX mode set\n");
2322 }
2323 
xgbe_phy_kx_1000_mode(struct xgbe_prv_data * pdata)2324 static void xgbe_phy_kx_1000_mode(struct xgbe_prv_data *pdata)
2325 {
2326 	struct xgbe_phy_data *phy_data = pdata->phy_data;
2327 
2328 	xgbe_phy_set_redrv_mode(pdata);
2329 
2330 	/* 1G/KX */
2331 	xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_SET_1G, XGBE_MB_SUBCMD_1G_KX);
2332 
2333 	phy_data->cur_mode = XGBE_MODE_KX_1000;
2334 
2335 	netif_dbg(pdata, link, pdata->netdev, "1GbE KX mode set\n");
2336 }
2337 
xgbe_phy_cur_mode(struct xgbe_prv_data * pdata)2338 static enum xgbe_mode xgbe_phy_cur_mode(struct xgbe_prv_data *pdata)
2339 {
2340 	struct xgbe_phy_data *phy_data = pdata->phy_data;
2341 
2342 	return phy_data->cur_mode;
2343 }
2344 
xgbe_phy_switch_baset_mode(struct xgbe_prv_data * pdata)2345 static enum xgbe_mode xgbe_phy_switch_baset_mode(struct xgbe_prv_data *pdata)
2346 {
2347 	struct xgbe_phy_data *phy_data = pdata->phy_data;
2348 
2349 	/* No switching if not 10GBase-T */
2350 	if (phy_data->port_mode != XGBE_PORT_MODE_10GBASE_T)
2351 		return xgbe_phy_cur_mode(pdata);
2352 
2353 	switch (xgbe_phy_cur_mode(pdata)) {
2354 	case XGBE_MODE_SGMII_10:
2355 	case XGBE_MODE_SGMII_100:
2356 	case XGBE_MODE_SGMII_1000:
2357 		return XGBE_MODE_KR;
2358 	case XGBE_MODE_KX_2500:
2359 		return XGBE_MODE_SGMII_1000;
2360 	case XGBE_MODE_KR:
2361 	default:
2362 		return XGBE_MODE_KX_2500;
2363 	}
2364 }
2365 
xgbe_phy_switch_bp_2500_mode(struct xgbe_prv_data * pdata)2366 static enum xgbe_mode xgbe_phy_switch_bp_2500_mode(struct xgbe_prv_data *pdata)
2367 {
2368 	return XGBE_MODE_KX_2500;
2369 }
2370 
xgbe_phy_switch_bp_mode(struct xgbe_prv_data * pdata)2371 static enum xgbe_mode xgbe_phy_switch_bp_mode(struct xgbe_prv_data *pdata)
2372 {
2373 	/* If we are in KR switch to KX, and vice-versa */
2374 	switch (xgbe_phy_cur_mode(pdata)) {
2375 	case XGBE_MODE_KX_1000:
2376 		return XGBE_MODE_KR;
2377 	case XGBE_MODE_KR:
2378 	default:
2379 		return XGBE_MODE_KX_1000;
2380 	}
2381 }
2382 
xgbe_phy_switch_mode(struct xgbe_prv_data * pdata)2383 static enum xgbe_mode xgbe_phy_switch_mode(struct xgbe_prv_data *pdata)
2384 {
2385 	struct xgbe_phy_data *phy_data = pdata->phy_data;
2386 
2387 	switch (phy_data->port_mode) {
2388 	case XGBE_PORT_MODE_BACKPLANE:
2389 	case XGBE_PORT_MODE_BACKPLANE_NO_AUTONEG:
2390 		return xgbe_phy_switch_bp_mode(pdata);
2391 	case XGBE_PORT_MODE_BACKPLANE_2500:
2392 		return xgbe_phy_switch_bp_2500_mode(pdata);
2393 	case XGBE_PORT_MODE_1000BASE_T:
2394 	case XGBE_PORT_MODE_NBASE_T:
2395 	case XGBE_PORT_MODE_10GBASE_T:
2396 		return xgbe_phy_switch_baset_mode(pdata);
2397 	case XGBE_PORT_MODE_1000BASE_X:
2398 	case XGBE_PORT_MODE_10GBASE_R:
2399 	case XGBE_PORT_MODE_SFP:
2400 		/* No switching, so just return current mode */
2401 		return xgbe_phy_cur_mode(pdata);
2402 	default:
2403 		return XGBE_MODE_UNKNOWN;
2404 	}
2405 }
2406 
xgbe_phy_get_basex_mode(struct xgbe_phy_data * phy_data,int speed)2407 static enum xgbe_mode xgbe_phy_get_basex_mode(struct xgbe_phy_data *phy_data,
2408 					      int speed)
2409 {
2410 	switch (speed) {
2411 	case SPEED_1000:
2412 		return XGBE_MODE_X;
2413 	case SPEED_10000:
2414 		return XGBE_MODE_KR;
2415 	default:
2416 		return XGBE_MODE_UNKNOWN;
2417 	}
2418 }
2419 
xgbe_phy_get_baset_mode(struct xgbe_phy_data * phy_data,int speed)2420 static enum xgbe_mode xgbe_phy_get_baset_mode(struct xgbe_phy_data *phy_data,
2421 					      int speed)
2422 {
2423 	switch (speed) {
2424 	case SPEED_10:
2425 		return XGBE_MODE_SGMII_10;
2426 	case SPEED_100:
2427 		return XGBE_MODE_SGMII_100;
2428 	case SPEED_1000:
2429 		return XGBE_MODE_SGMII_1000;
2430 	case SPEED_2500:
2431 		return XGBE_MODE_KX_2500;
2432 	case SPEED_10000:
2433 		return XGBE_MODE_KR;
2434 	default:
2435 		return XGBE_MODE_UNKNOWN;
2436 	}
2437 }
2438 
xgbe_phy_get_sfp_mode(struct xgbe_phy_data * phy_data,int speed)2439 static enum xgbe_mode xgbe_phy_get_sfp_mode(struct xgbe_phy_data *phy_data,
2440 					    int speed)
2441 {
2442 	switch (speed) {
2443 	case SPEED_10:
2444 		return XGBE_MODE_SGMII_10;
2445 	case SPEED_100:
2446 		return XGBE_MODE_SGMII_100;
2447 	case SPEED_1000:
2448 		if (phy_data->sfp_base == XGBE_SFP_BASE_1000_T)
2449 			return XGBE_MODE_SGMII_1000;
2450 		else
2451 			return XGBE_MODE_X;
2452 	case SPEED_10000:
2453 	case SPEED_UNKNOWN:
2454 		return XGBE_MODE_SFI;
2455 	default:
2456 		return XGBE_MODE_UNKNOWN;
2457 	}
2458 }
2459 
xgbe_phy_get_bp_2500_mode(int speed)2460 static enum xgbe_mode xgbe_phy_get_bp_2500_mode(int speed)
2461 {
2462 	switch (speed) {
2463 	case SPEED_2500:
2464 		return XGBE_MODE_KX_2500;
2465 	default:
2466 		return XGBE_MODE_UNKNOWN;
2467 	}
2468 }
2469 
xgbe_phy_get_bp_mode(int speed)2470 static enum xgbe_mode xgbe_phy_get_bp_mode(int speed)
2471 {
2472 	switch (speed) {
2473 	case SPEED_1000:
2474 		return XGBE_MODE_KX_1000;
2475 	case SPEED_10000:
2476 		return XGBE_MODE_KR;
2477 	default:
2478 		return XGBE_MODE_UNKNOWN;
2479 	}
2480 }
2481 
xgbe_phy_get_mode(struct xgbe_prv_data * pdata,int speed)2482 static enum xgbe_mode xgbe_phy_get_mode(struct xgbe_prv_data *pdata,
2483 					int speed)
2484 {
2485 	struct xgbe_phy_data *phy_data = pdata->phy_data;
2486 
2487 	switch (phy_data->port_mode) {
2488 	case XGBE_PORT_MODE_BACKPLANE:
2489 	case XGBE_PORT_MODE_BACKPLANE_NO_AUTONEG:
2490 		return xgbe_phy_get_bp_mode(speed);
2491 	case XGBE_PORT_MODE_BACKPLANE_2500:
2492 		return xgbe_phy_get_bp_2500_mode(speed);
2493 	case XGBE_PORT_MODE_1000BASE_T:
2494 	case XGBE_PORT_MODE_NBASE_T:
2495 	case XGBE_PORT_MODE_10GBASE_T:
2496 		return xgbe_phy_get_baset_mode(phy_data, speed);
2497 	case XGBE_PORT_MODE_1000BASE_X:
2498 	case XGBE_PORT_MODE_10GBASE_R:
2499 		return xgbe_phy_get_basex_mode(phy_data, speed);
2500 	case XGBE_PORT_MODE_SFP:
2501 		return xgbe_phy_get_sfp_mode(phy_data, speed);
2502 	default:
2503 		return XGBE_MODE_UNKNOWN;
2504 	}
2505 }
2506 
xgbe_phy_set_mode(struct xgbe_prv_data * pdata,enum xgbe_mode mode)2507 static void xgbe_phy_set_mode(struct xgbe_prv_data *pdata, enum xgbe_mode mode)
2508 {
2509 	switch (mode) {
2510 	case XGBE_MODE_KX_1000:
2511 		xgbe_phy_kx_1000_mode(pdata);
2512 		break;
2513 	case XGBE_MODE_KX_2500:
2514 		xgbe_phy_kx_2500_mode(pdata);
2515 		break;
2516 	case XGBE_MODE_KR:
2517 		xgbe_phy_kr_mode(pdata);
2518 		break;
2519 	case XGBE_MODE_SGMII_10:
2520 		xgbe_phy_sgmii_10_mode(pdata);
2521 		break;
2522 	case XGBE_MODE_SGMII_100:
2523 		xgbe_phy_sgmii_100_mode(pdata);
2524 		break;
2525 	case XGBE_MODE_SGMII_1000:
2526 		xgbe_phy_sgmii_1000_mode(pdata);
2527 		break;
2528 	case XGBE_MODE_X:
2529 		xgbe_phy_x_mode(pdata);
2530 		break;
2531 	case XGBE_MODE_SFI:
2532 		xgbe_phy_sfi_mode(pdata);
2533 		break;
2534 	default:
2535 		break;
2536 	}
2537 }
2538 
xgbe_phy_check_mode(struct xgbe_prv_data * pdata,enum xgbe_mode mode,bool advert)2539 static bool xgbe_phy_check_mode(struct xgbe_prv_data *pdata,
2540 				enum xgbe_mode mode, bool advert)
2541 {
2542 	if (pdata->phy.autoneg == AUTONEG_ENABLE) {
2543 		return advert;
2544 	} else {
2545 		enum xgbe_mode cur_mode;
2546 
2547 		cur_mode = xgbe_phy_get_mode(pdata, pdata->phy.speed);
2548 		if (cur_mode == mode)
2549 			return true;
2550 	}
2551 
2552 	return false;
2553 }
2554 
xgbe_phy_use_basex_mode(struct xgbe_prv_data * pdata,enum xgbe_mode mode)2555 static bool xgbe_phy_use_basex_mode(struct xgbe_prv_data *pdata,
2556 				    enum xgbe_mode mode)
2557 {
2558 	struct ethtool_link_ksettings *lks = &pdata->phy.lks;
2559 
2560 	switch (mode) {
2561 	case XGBE_MODE_X:
2562 		return xgbe_phy_check_mode(pdata, mode,
2563 					   XGBE_ADV(lks, 1000baseX_Full));
2564 	case XGBE_MODE_KR:
2565 		return xgbe_phy_check_mode(pdata, mode,
2566 					   XGBE_ADV(lks, 10000baseKR_Full));
2567 	default:
2568 		return false;
2569 	}
2570 }
2571 
xgbe_phy_use_baset_mode(struct xgbe_prv_data * pdata,enum xgbe_mode mode)2572 static bool xgbe_phy_use_baset_mode(struct xgbe_prv_data *pdata,
2573 				    enum xgbe_mode mode)
2574 {
2575 	struct ethtool_link_ksettings *lks = &pdata->phy.lks;
2576 
2577 	switch (mode) {
2578 	case XGBE_MODE_SGMII_10:
2579 		return xgbe_phy_check_mode(pdata, mode,
2580 					   XGBE_ADV(lks, 10baseT_Full));
2581 	case XGBE_MODE_SGMII_100:
2582 		return xgbe_phy_check_mode(pdata, mode,
2583 					   XGBE_ADV(lks, 100baseT_Full));
2584 	case XGBE_MODE_SGMII_1000:
2585 		return xgbe_phy_check_mode(pdata, mode,
2586 					   XGBE_ADV(lks, 1000baseT_Full));
2587 	case XGBE_MODE_KX_2500:
2588 		return xgbe_phy_check_mode(pdata, mode,
2589 					   XGBE_ADV(lks, 2500baseT_Full));
2590 	case XGBE_MODE_KR:
2591 		return xgbe_phy_check_mode(pdata, mode,
2592 					   XGBE_ADV(lks, 10000baseT_Full));
2593 	default:
2594 		return false;
2595 	}
2596 }
2597 
xgbe_phy_use_sfp_mode(struct xgbe_prv_data * pdata,enum xgbe_mode mode)2598 static bool xgbe_phy_use_sfp_mode(struct xgbe_prv_data *pdata,
2599 				  enum xgbe_mode mode)
2600 {
2601 	struct ethtool_link_ksettings *lks = &pdata->phy.lks;
2602 	struct xgbe_phy_data *phy_data = pdata->phy_data;
2603 
2604 	switch (mode) {
2605 	case XGBE_MODE_X:
2606 		if (phy_data->sfp_base == XGBE_SFP_BASE_1000_T)
2607 			return false;
2608 		return xgbe_phy_check_mode(pdata, mode,
2609 					   XGBE_ADV(lks, 1000baseX_Full));
2610 	case XGBE_MODE_SGMII_10:
2611 		if (phy_data->sfp_base != XGBE_SFP_BASE_1000_T)
2612 			return false;
2613 		return xgbe_phy_check_mode(pdata, mode,
2614 					   XGBE_ADV(lks, 10baseT_Full));
2615 	case XGBE_MODE_SGMII_100:
2616 		if (phy_data->sfp_base != XGBE_SFP_BASE_1000_T)
2617 			return false;
2618 		return xgbe_phy_check_mode(pdata, mode,
2619 					   XGBE_ADV(lks, 100baseT_Full));
2620 	case XGBE_MODE_SGMII_1000:
2621 		if (phy_data->sfp_base != XGBE_SFP_BASE_1000_T)
2622 			return false;
2623 		return xgbe_phy_check_mode(pdata, mode,
2624 					   XGBE_ADV(lks, 1000baseT_Full));
2625 	case XGBE_MODE_SFI:
2626 		if (phy_data->sfp_mod_absent)
2627 			return true;
2628 		return xgbe_phy_check_mode(pdata, mode,
2629 					   XGBE_ADV(lks, 10000baseSR_Full)  ||
2630 					   XGBE_ADV(lks, 10000baseLR_Full)  ||
2631 					   XGBE_ADV(lks, 10000baseLRM_Full) ||
2632 					   XGBE_ADV(lks, 10000baseER_Full)  ||
2633 					   XGBE_ADV(lks, 10000baseCR_Full));
2634 	default:
2635 		return false;
2636 	}
2637 }
2638 
xgbe_phy_use_bp_2500_mode(struct xgbe_prv_data * pdata,enum xgbe_mode mode)2639 static bool xgbe_phy_use_bp_2500_mode(struct xgbe_prv_data *pdata,
2640 				      enum xgbe_mode mode)
2641 {
2642 	struct ethtool_link_ksettings *lks = &pdata->phy.lks;
2643 
2644 	switch (mode) {
2645 	case XGBE_MODE_KX_2500:
2646 		return xgbe_phy_check_mode(pdata, mode,
2647 					   XGBE_ADV(lks, 2500baseX_Full));
2648 	default:
2649 		return false;
2650 	}
2651 }
2652 
xgbe_phy_use_bp_mode(struct xgbe_prv_data * pdata,enum xgbe_mode mode)2653 static bool xgbe_phy_use_bp_mode(struct xgbe_prv_data *pdata,
2654 				 enum xgbe_mode mode)
2655 {
2656 	struct ethtool_link_ksettings *lks = &pdata->phy.lks;
2657 
2658 	switch (mode) {
2659 	case XGBE_MODE_KX_1000:
2660 		return xgbe_phy_check_mode(pdata, mode,
2661 					   XGBE_ADV(lks, 1000baseKX_Full));
2662 	case XGBE_MODE_KR:
2663 		return xgbe_phy_check_mode(pdata, mode,
2664 					   XGBE_ADV(lks, 10000baseKR_Full));
2665 	default:
2666 		return false;
2667 	}
2668 }
2669 
xgbe_phy_use_mode(struct xgbe_prv_data * pdata,enum xgbe_mode mode)2670 static bool xgbe_phy_use_mode(struct xgbe_prv_data *pdata, enum xgbe_mode mode)
2671 {
2672 	struct xgbe_phy_data *phy_data = pdata->phy_data;
2673 
2674 	switch (phy_data->port_mode) {
2675 	case XGBE_PORT_MODE_BACKPLANE:
2676 	case XGBE_PORT_MODE_BACKPLANE_NO_AUTONEG:
2677 		return xgbe_phy_use_bp_mode(pdata, mode);
2678 	case XGBE_PORT_MODE_BACKPLANE_2500:
2679 		return xgbe_phy_use_bp_2500_mode(pdata, mode);
2680 	case XGBE_PORT_MODE_1000BASE_T:
2681 	case XGBE_PORT_MODE_NBASE_T:
2682 	case XGBE_PORT_MODE_10GBASE_T:
2683 		return xgbe_phy_use_baset_mode(pdata, mode);
2684 	case XGBE_PORT_MODE_1000BASE_X:
2685 	case XGBE_PORT_MODE_10GBASE_R:
2686 		return xgbe_phy_use_basex_mode(pdata, mode);
2687 	case XGBE_PORT_MODE_SFP:
2688 		return xgbe_phy_use_sfp_mode(pdata, mode);
2689 	default:
2690 		return false;
2691 	}
2692 }
2693 
xgbe_phy_valid_speed_basex_mode(struct xgbe_phy_data * phy_data,int speed)2694 static bool xgbe_phy_valid_speed_basex_mode(struct xgbe_phy_data *phy_data,
2695 					    int speed)
2696 {
2697 	switch (speed) {
2698 	case SPEED_1000:
2699 		return (phy_data->port_mode == XGBE_PORT_MODE_1000BASE_X);
2700 	case SPEED_10000:
2701 		return (phy_data->port_mode == XGBE_PORT_MODE_10GBASE_R);
2702 	default:
2703 		return false;
2704 	}
2705 }
2706 
xgbe_phy_valid_speed_baset_mode(struct xgbe_prv_data * pdata,int speed)2707 static bool xgbe_phy_valid_speed_baset_mode(struct xgbe_prv_data *pdata,
2708 					    int speed)
2709 {
2710 	struct xgbe_phy_data *phy_data = pdata->phy_data;
2711 	unsigned int ver;
2712 
2713 	switch (speed) {
2714 	case SPEED_10:
2715 		/* Supported in ver 21H and ver >= 30H */
2716 		ver = XGMAC_GET_BITS(pdata->hw_feat.version, MAC_VR, SNPSVER);
2717 		return (ver == 0x21 || ver >= 0x30);
2718 	case SPEED_100:
2719 	case SPEED_1000:
2720 		return true;
2721 	case SPEED_2500:
2722 		return ((phy_data->port_mode == XGBE_PORT_MODE_10GBASE_T) ||
2723 			(phy_data->port_mode == XGBE_PORT_MODE_NBASE_T));
2724 	case SPEED_10000:
2725 		return (phy_data->port_mode == XGBE_PORT_MODE_10GBASE_T);
2726 	default:
2727 		return false;
2728 	}
2729 }
2730 
xgbe_phy_valid_speed_sfp_mode(struct xgbe_prv_data * pdata,int speed)2731 static bool xgbe_phy_valid_speed_sfp_mode(struct xgbe_prv_data *pdata,
2732 					  int speed)
2733 {
2734 	struct xgbe_phy_data *phy_data = pdata->phy_data;
2735 	unsigned int ver;
2736 
2737 	switch (speed) {
2738 	case SPEED_10:
2739 		/* Supported in ver 21H and ver >= 30H */
2740 		ver = XGMAC_GET_BITS(pdata->hw_feat.version, MAC_VR, SNPSVER);
2741 		return ((ver == 0x21 || ver >= 0x30) &&
2742 			(phy_data->sfp_speed == XGBE_SFP_SPEED_100_1000));
2743 	case SPEED_100:
2744 		return (phy_data->sfp_speed == XGBE_SFP_SPEED_100_1000);
2745 	case SPEED_1000:
2746 		return ((phy_data->sfp_speed == XGBE_SFP_SPEED_100_1000) ||
2747 			(phy_data->sfp_speed == XGBE_SFP_SPEED_1000));
2748 	case SPEED_10000:
2749 		return (phy_data->sfp_speed == XGBE_SFP_SPEED_10000);
2750 	default:
2751 		return false;
2752 	}
2753 }
2754 
xgbe_phy_valid_speed_bp_2500_mode(int speed)2755 static bool xgbe_phy_valid_speed_bp_2500_mode(int speed)
2756 {
2757 	switch (speed) {
2758 	case SPEED_2500:
2759 		return true;
2760 	default:
2761 		return false;
2762 	}
2763 }
2764 
xgbe_phy_valid_speed_bp_mode(int speed)2765 static bool xgbe_phy_valid_speed_bp_mode(int speed)
2766 {
2767 	switch (speed) {
2768 	case SPEED_1000:
2769 	case SPEED_10000:
2770 		return true;
2771 	default:
2772 		return false;
2773 	}
2774 }
2775 
xgbe_phy_valid_speed(struct xgbe_prv_data * pdata,int speed)2776 static bool xgbe_phy_valid_speed(struct xgbe_prv_data *pdata, int speed)
2777 {
2778 	struct xgbe_phy_data *phy_data = pdata->phy_data;
2779 
2780 	switch (phy_data->port_mode) {
2781 	case XGBE_PORT_MODE_BACKPLANE:
2782 	case XGBE_PORT_MODE_BACKPLANE_NO_AUTONEG:
2783 		return xgbe_phy_valid_speed_bp_mode(speed);
2784 	case XGBE_PORT_MODE_BACKPLANE_2500:
2785 		return xgbe_phy_valid_speed_bp_2500_mode(speed);
2786 	case XGBE_PORT_MODE_1000BASE_T:
2787 	case XGBE_PORT_MODE_NBASE_T:
2788 	case XGBE_PORT_MODE_10GBASE_T:
2789 		return xgbe_phy_valid_speed_baset_mode(pdata, speed);
2790 	case XGBE_PORT_MODE_1000BASE_X:
2791 	case XGBE_PORT_MODE_10GBASE_R:
2792 		return xgbe_phy_valid_speed_basex_mode(phy_data, speed);
2793 	case XGBE_PORT_MODE_SFP:
2794 		return xgbe_phy_valid_speed_sfp_mode(pdata, speed);
2795 	default:
2796 		return false;
2797 	}
2798 }
2799 
xgbe_phy_link_status(struct xgbe_prv_data * pdata,int * an_restart)2800 static int xgbe_phy_link_status(struct xgbe_prv_data *pdata, int *an_restart)
2801 {
2802 	struct xgbe_phy_data *phy_data = pdata->phy_data;
2803 	int reg, ret;
2804 
2805 	*an_restart = 0;
2806 
2807 	if (phy_data->port_mode == XGBE_PORT_MODE_SFP) {
2808 		/* Check SFP signals */
2809 		xgbe_phy_sfp_detect(pdata);
2810 
2811 		if (phy_data->sfp_changed) {
2812 			*an_restart = 1;
2813 			return 0;
2814 		}
2815 
2816 		if (phy_data->sfp_mod_absent || phy_data->sfp_rx_los) {
2817 			if (pdata->en_rx_adap)
2818 				pdata->rx_adapt_done = false;
2819 			return 0;
2820 		}
2821 	}
2822 
2823 	if (phy_data->phydev) {
2824 		/* Check external PHY */
2825 		ret = phy_read_status(phy_data->phydev);
2826 		if (ret < 0)
2827 			return 0;
2828 
2829 		if ((pdata->phy.autoneg == AUTONEG_ENABLE) &&
2830 		    !phy_aneg_done(phy_data->phydev))
2831 			return 0;
2832 
2833 		if (!phy_data->phydev->link)
2834 			return 0;
2835 	}
2836 
2837 	reg = XMDIO_READ(pdata, MDIO_MMD_PCS, MDIO_STAT1);
2838 	if (reg < 0)
2839 		return reg;
2840 
2841 	/* Link status is latched low so that momentary link drops
2842 	 * can be detected. If link was already down read again
2843 	 * to get the latest state.
2844 	 */
2845 
2846 	if (!pdata->phy.link && !(reg & MDIO_STAT1_LSTATUS)) {
2847 		reg = XMDIO_READ(pdata, MDIO_MMD_PCS, MDIO_STAT1);
2848 		if (reg < 0)
2849 			return reg;
2850 	}
2851 
2852 	if (pdata->en_rx_adap) {
2853 		/* if the link is available and adaptation is done,
2854 		 * declare link up
2855 		 *
2856 		 * Note: When link is up and adaptation is done, we can
2857 		 * safely re-enable the data path if it was stopped
2858 		 * for adaptation.
2859 		 */
2860 		if ((reg & MDIO_STAT1_LSTATUS) && pdata->rx_adapt_done) {
2861 			xgbe_phy_start_data_path(pdata);
2862 			return 1;
2863 		}
2864 		/* If either link is not available or adaptation is not done,
2865 		 * retrigger the adaptation logic. (if the mode is not set,
2866 		 * then issue mailbox command first)
2867 		 */
2868 
2869 		/* CRITICAL: Stop data path BEFORE triggering RX adaptation
2870 		 * to prevent CRC errors from packets corrupted during
2871 		 * the adaptation process. This is especially important
2872 		 * when AN is OFF in 10G KR mode.
2873 		 */
2874 		xgbe_phy_stop_data_path(pdata);
2875 
2876 		if (pdata->mode_set) {
2877 			xgbe_phy_rx_adaptation(pdata);
2878 		} else {
2879 			pdata->rx_adapt_done = false;
2880 			xgbe_phy_set_mode(pdata, phy_data->cur_mode);
2881 		}
2882 
2883 		if (pdata->rx_adapt_done) {
2884 			/* Adaptation complete, safe to re-enable data path */
2885 			xgbe_phy_start_data_path(pdata);
2886 			return 1;
2887 		}
2888 	} else if (reg & MDIO_STAT1_LSTATUS)
2889 		return 1;
2890 
2891 	if (pdata->phy.autoneg == AUTONEG_ENABLE &&
2892 	    phy_data->port_mode == XGBE_PORT_MODE_BACKPLANE) {
2893 		if (!test_bit(XGBE_LINK_INIT, &pdata->dev_state)) {
2894 			netif_carrier_off(pdata->netdev);
2895 			*an_restart = 1;
2896 		}
2897 	}
2898 
2899 	/* No link, attempt a receiver reset cycle */
2900 	if (pdata->vdata->enable_rrc && phy_data->rrc_count++ > XGBE_RRC_FREQUENCY) {
2901 		phy_data->rrc_count = 0;
2902 		xgbe_phy_rrc(pdata);
2903 	}
2904 
2905 	return 0;
2906 }
2907 
xgbe_phy_sfp_gpio_setup(struct xgbe_prv_data * pdata)2908 static void xgbe_phy_sfp_gpio_setup(struct xgbe_prv_data *pdata)
2909 {
2910 	struct xgbe_phy_data *phy_data = pdata->phy_data;
2911 
2912 	phy_data->sfp_gpio_address = XGBE_GPIO_ADDRESS_PCA9555 +
2913 				     XP_GET_BITS(pdata->pp3, XP_PROP_3,
2914 						 GPIO_ADDR);
2915 
2916 	phy_data->sfp_gpio_mask = XP_GET_BITS(pdata->pp3, XP_PROP_3,
2917 					      GPIO_MASK);
2918 
2919 	phy_data->sfp_gpio_rx_los = XP_GET_BITS(pdata->pp3, XP_PROP_3,
2920 						GPIO_RX_LOS);
2921 	phy_data->sfp_gpio_tx_fault = XP_GET_BITS(pdata->pp3, XP_PROP_3,
2922 						  GPIO_TX_FAULT);
2923 	phy_data->sfp_gpio_mod_absent = XP_GET_BITS(pdata->pp3, XP_PROP_3,
2924 						    GPIO_MOD_ABS);
2925 	phy_data->sfp_gpio_rate_select = XP_GET_BITS(pdata->pp3, XP_PROP_3,
2926 						     GPIO_RATE_SELECT);
2927 
2928 	if (netif_msg_probe(pdata)) {
2929 		dev_dbg(pdata->dev, "SFP: gpio_address=%#x\n",
2930 			phy_data->sfp_gpio_address);
2931 		dev_dbg(pdata->dev, "SFP: gpio_mask=%#x\n",
2932 			phy_data->sfp_gpio_mask);
2933 		dev_dbg(pdata->dev, "SFP: gpio_rx_los=%u\n",
2934 			phy_data->sfp_gpio_rx_los);
2935 		dev_dbg(pdata->dev, "SFP: gpio_tx_fault=%u\n",
2936 			phy_data->sfp_gpio_tx_fault);
2937 		dev_dbg(pdata->dev, "SFP: gpio_mod_absent=%u\n",
2938 			phy_data->sfp_gpio_mod_absent);
2939 		dev_dbg(pdata->dev, "SFP: gpio_rate_select=%u\n",
2940 			phy_data->sfp_gpio_rate_select);
2941 	}
2942 }
2943 
xgbe_phy_sfp_comm_setup(struct xgbe_prv_data * pdata)2944 static void xgbe_phy_sfp_comm_setup(struct xgbe_prv_data *pdata)
2945 {
2946 	struct xgbe_phy_data *phy_data = pdata->phy_data;
2947 	unsigned int mux_addr_hi, mux_addr_lo;
2948 
2949 	mux_addr_hi = XP_GET_BITS(pdata->pp4, XP_PROP_4, MUX_ADDR_HI);
2950 	mux_addr_lo = XP_GET_BITS(pdata->pp4, XP_PROP_4, MUX_ADDR_LO);
2951 	if (mux_addr_lo == XGBE_SFP_DIRECT)
2952 		return;
2953 
2954 	phy_data->sfp_comm = XGBE_SFP_COMM_PCA9545;
2955 	phy_data->sfp_mux_address = (mux_addr_hi << 2) + mux_addr_lo;
2956 	phy_data->sfp_mux_channel = XP_GET_BITS(pdata->pp4, XP_PROP_4,
2957 						MUX_CHAN);
2958 
2959 	if (netif_msg_probe(pdata)) {
2960 		dev_dbg(pdata->dev, "SFP: mux_address=%#x\n",
2961 			phy_data->sfp_mux_address);
2962 		dev_dbg(pdata->dev, "SFP: mux_channel=%u\n",
2963 			phy_data->sfp_mux_channel);
2964 	}
2965 }
2966 
xgbe_phy_sfp_setup(struct xgbe_prv_data * pdata)2967 static void xgbe_phy_sfp_setup(struct xgbe_prv_data *pdata)
2968 {
2969 	xgbe_phy_sfp_comm_setup(pdata);
2970 	xgbe_phy_sfp_gpio_setup(pdata);
2971 }
2972 
xgbe_phy_int_mdio_reset(struct xgbe_prv_data * pdata)2973 static int xgbe_phy_int_mdio_reset(struct xgbe_prv_data *pdata)
2974 {
2975 	struct xgbe_phy_data *phy_data = pdata->phy_data;
2976 	int ret;
2977 
2978 	ret = pdata->hw_if.set_gpio(pdata, phy_data->mdio_reset_gpio);
2979 	if (ret)
2980 		return ret;
2981 
2982 	ret = pdata->hw_if.clr_gpio(pdata, phy_data->mdio_reset_gpio);
2983 
2984 	return ret;
2985 }
2986 
xgbe_phy_i2c_mdio_reset(struct xgbe_prv_data * pdata)2987 static int xgbe_phy_i2c_mdio_reset(struct xgbe_prv_data *pdata)
2988 {
2989 	struct xgbe_phy_data *phy_data = pdata->phy_data;
2990 	u8 gpio_reg, gpio_ports[2], gpio_data[3];
2991 	int ret;
2992 
2993 	/* Read the output port registers */
2994 	gpio_reg = 2;
2995 	ret = xgbe_phy_i2c_read(pdata, phy_data->mdio_reset_addr,
2996 				&gpio_reg, sizeof(gpio_reg),
2997 				gpio_ports, sizeof(gpio_ports));
2998 	if (ret)
2999 		return ret;
3000 
3001 	/* Prepare to write the GPIO data */
3002 	gpio_data[0] = 2;
3003 	gpio_data[1] = gpio_ports[0];
3004 	gpio_data[2] = gpio_ports[1];
3005 
3006 	/* Set the GPIO pin */
3007 	if (phy_data->mdio_reset_gpio < 8)
3008 		gpio_data[1] |= (1 << (phy_data->mdio_reset_gpio % 8));
3009 	else
3010 		gpio_data[2] |= (1 << (phy_data->mdio_reset_gpio % 8));
3011 
3012 	/* Write the output port registers */
3013 	ret = xgbe_phy_i2c_write(pdata, phy_data->mdio_reset_addr,
3014 				 gpio_data, sizeof(gpio_data));
3015 	if (ret)
3016 		return ret;
3017 
3018 	/* Clear the GPIO pin */
3019 	if (phy_data->mdio_reset_gpio < 8)
3020 		gpio_data[1] &= ~(1 << (phy_data->mdio_reset_gpio % 8));
3021 	else
3022 		gpio_data[2] &= ~(1 << (phy_data->mdio_reset_gpio % 8));
3023 
3024 	/* Write the output port registers */
3025 	ret = xgbe_phy_i2c_write(pdata, phy_data->mdio_reset_addr,
3026 				 gpio_data, sizeof(gpio_data));
3027 
3028 	return ret;
3029 }
3030 
xgbe_phy_mdio_reset(struct xgbe_prv_data * pdata)3031 static int xgbe_phy_mdio_reset(struct xgbe_prv_data *pdata)
3032 {
3033 	struct xgbe_phy_data *phy_data = pdata->phy_data;
3034 	int ret;
3035 
3036 	if (phy_data->conn_type != XGBE_CONN_TYPE_MDIO)
3037 		return 0;
3038 
3039 	ret = xgbe_phy_get_comm_ownership(pdata);
3040 	if (ret)
3041 		return ret;
3042 
3043 	if (phy_data->mdio_reset == XGBE_MDIO_RESET_I2C_GPIO)
3044 		ret = xgbe_phy_i2c_mdio_reset(pdata);
3045 	else if (phy_data->mdio_reset == XGBE_MDIO_RESET_INT_GPIO)
3046 		ret = xgbe_phy_int_mdio_reset(pdata);
3047 
3048 	xgbe_phy_put_comm_ownership(pdata);
3049 
3050 	return ret;
3051 }
3052 
xgbe_phy_redrv_error(struct xgbe_phy_data * phy_data)3053 static bool xgbe_phy_redrv_error(struct xgbe_phy_data *phy_data)
3054 {
3055 	if (!phy_data->redrv)
3056 		return false;
3057 
3058 	if (phy_data->redrv_if >= XGBE_PHY_REDRV_IF_MAX)
3059 		return true;
3060 
3061 	switch (phy_data->redrv_model) {
3062 	case XGBE_PHY_REDRV_MODEL_4223:
3063 		if (phy_data->redrv_lane > 3)
3064 			return true;
3065 		break;
3066 	case XGBE_PHY_REDRV_MODEL_4227:
3067 		if (phy_data->redrv_lane > 1)
3068 			return true;
3069 		break;
3070 	default:
3071 		return true;
3072 	}
3073 
3074 	return false;
3075 }
3076 
xgbe_phy_mdio_reset_setup(struct xgbe_prv_data * pdata)3077 static int xgbe_phy_mdio_reset_setup(struct xgbe_prv_data *pdata)
3078 {
3079 	struct xgbe_phy_data *phy_data = pdata->phy_data;
3080 
3081 	if (phy_data->conn_type != XGBE_CONN_TYPE_MDIO)
3082 		return 0;
3083 
3084 	phy_data->mdio_reset = XP_GET_BITS(pdata->pp3, XP_PROP_3, MDIO_RESET);
3085 	switch (phy_data->mdio_reset) {
3086 	case XGBE_MDIO_RESET_NONE:
3087 	case XGBE_MDIO_RESET_I2C_GPIO:
3088 	case XGBE_MDIO_RESET_INT_GPIO:
3089 		break;
3090 	default:
3091 		dev_err(pdata->dev, "unsupported MDIO reset (%#x)\n",
3092 			phy_data->mdio_reset);
3093 		return -EINVAL;
3094 	}
3095 
3096 	if (phy_data->mdio_reset == XGBE_MDIO_RESET_I2C_GPIO) {
3097 		phy_data->mdio_reset_addr = XGBE_GPIO_ADDRESS_PCA9555 +
3098 					    XP_GET_BITS(pdata->pp3, XP_PROP_3,
3099 							MDIO_RESET_I2C_ADDR);
3100 		phy_data->mdio_reset_gpio = XP_GET_BITS(pdata->pp3, XP_PROP_3,
3101 							MDIO_RESET_I2C_GPIO);
3102 	} else if (phy_data->mdio_reset == XGBE_MDIO_RESET_INT_GPIO) {
3103 		phy_data->mdio_reset_gpio = XP_GET_BITS(pdata->pp3, XP_PROP_3,
3104 							MDIO_RESET_INT_GPIO);
3105 	}
3106 
3107 	return 0;
3108 }
3109 
xgbe_phy_port_mode_mismatch(struct xgbe_prv_data * pdata)3110 static bool xgbe_phy_port_mode_mismatch(struct xgbe_prv_data *pdata)
3111 {
3112 	struct xgbe_phy_data *phy_data = pdata->phy_data;
3113 	unsigned int ver;
3114 
3115 	/* 10 Mbps speed is supported in ver 21H and ver >= 30H */
3116 	ver = XGMAC_GET_BITS(pdata->hw_feat.version, MAC_VR, SNPSVER);
3117 	if ((ver < 0x30 && ver != 0x21) && (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10))
3118 		return true;
3119 
3120 	switch (phy_data->port_mode) {
3121 	case XGBE_PORT_MODE_BACKPLANE:
3122 	case XGBE_PORT_MODE_BACKPLANE_NO_AUTONEG:
3123 		if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) ||
3124 		    (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000))
3125 			return false;
3126 		break;
3127 	case XGBE_PORT_MODE_BACKPLANE_2500:
3128 		if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_2500)
3129 			return false;
3130 		break;
3131 	case XGBE_PORT_MODE_1000BASE_T:
3132 		if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10) ||
3133 		    (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) ||
3134 		    (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000))
3135 			return false;
3136 		break;
3137 	case XGBE_PORT_MODE_1000BASE_X:
3138 		if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000)
3139 			return false;
3140 		break;
3141 	case XGBE_PORT_MODE_NBASE_T:
3142 		if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10) ||
3143 		    (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) ||
3144 		    (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) ||
3145 		    (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_2500))
3146 			return false;
3147 		break;
3148 	case XGBE_PORT_MODE_10GBASE_T:
3149 		if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10) ||
3150 		    (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) ||
3151 		    (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) ||
3152 		    (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_2500) ||
3153 		    (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000))
3154 			return false;
3155 		break;
3156 	case XGBE_PORT_MODE_10GBASE_R:
3157 		if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000)
3158 			return false;
3159 		break;
3160 	case XGBE_PORT_MODE_SFP:
3161 		if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10) ||
3162 		    (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) ||
3163 		    (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) ||
3164 		    (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000))
3165 			return false;
3166 		break;
3167 	default:
3168 		break;
3169 	}
3170 
3171 	return true;
3172 }
3173 
xgbe_phy_conn_type_mismatch(struct xgbe_prv_data * pdata)3174 static bool xgbe_phy_conn_type_mismatch(struct xgbe_prv_data *pdata)
3175 {
3176 	struct xgbe_phy_data *phy_data = pdata->phy_data;
3177 
3178 	switch (phy_data->port_mode) {
3179 	case XGBE_PORT_MODE_BACKPLANE:
3180 	case XGBE_PORT_MODE_BACKPLANE_NO_AUTONEG:
3181 	case XGBE_PORT_MODE_BACKPLANE_2500:
3182 		if (phy_data->conn_type == XGBE_CONN_TYPE_BACKPLANE)
3183 			return false;
3184 		break;
3185 	case XGBE_PORT_MODE_1000BASE_T:
3186 	case XGBE_PORT_MODE_1000BASE_X:
3187 	case XGBE_PORT_MODE_NBASE_T:
3188 	case XGBE_PORT_MODE_10GBASE_T:
3189 	case XGBE_PORT_MODE_10GBASE_R:
3190 		if (phy_data->conn_type == XGBE_CONN_TYPE_MDIO)
3191 			return false;
3192 		break;
3193 	case XGBE_PORT_MODE_SFP:
3194 		if (phy_data->conn_type == XGBE_CONN_TYPE_SFP)
3195 			return false;
3196 		break;
3197 	default:
3198 		break;
3199 	}
3200 
3201 	return true;
3202 }
3203 
xgbe_phy_port_enabled(struct xgbe_prv_data * pdata)3204 static bool xgbe_phy_port_enabled(struct xgbe_prv_data *pdata)
3205 {
3206 	if (!XP_GET_BITS(pdata->pp0, XP_PROP_0, PORT_SPEEDS))
3207 		return false;
3208 	if (!XP_GET_BITS(pdata->pp0, XP_PROP_0, CONN_TYPE))
3209 		return false;
3210 
3211 	return true;
3212 }
3213 
xgbe_phy_cdr_track(struct xgbe_prv_data * pdata)3214 static void xgbe_phy_cdr_track(struct xgbe_prv_data *pdata)
3215 {
3216 	struct xgbe_phy_data *phy_data = pdata->phy_data;
3217 
3218 	if (!pdata->debugfs_an_cdr_workaround)
3219 		return;
3220 
3221 	if (!phy_data->phy_cdr_notrack)
3222 		return;
3223 
3224 	usleep_range(phy_data->phy_cdr_delay,
3225 		     phy_data->phy_cdr_delay + 500);
3226 
3227 	XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_VEND2_PMA_CDR_CONTROL,
3228 			 XGBE_PMA_CDR_TRACK_EN_MASK,
3229 			 XGBE_PMA_CDR_TRACK_EN_ON);
3230 
3231 	phy_data->phy_cdr_notrack = 0;
3232 }
3233 
xgbe_phy_cdr_notrack(struct xgbe_prv_data * pdata)3234 static void xgbe_phy_cdr_notrack(struct xgbe_prv_data *pdata)
3235 {
3236 	struct xgbe_phy_data *phy_data = pdata->phy_data;
3237 
3238 	if (!pdata->debugfs_an_cdr_workaround)
3239 		return;
3240 
3241 	if (phy_data->phy_cdr_notrack)
3242 		return;
3243 
3244 	XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_VEND2_PMA_CDR_CONTROL,
3245 			 XGBE_PMA_CDR_TRACK_EN_MASK,
3246 			 XGBE_PMA_CDR_TRACK_EN_OFF);
3247 
3248 	xgbe_phy_rrc(pdata);
3249 
3250 	phy_data->phy_cdr_notrack = 1;
3251 }
3252 
xgbe_phy_kr_training_post(struct xgbe_prv_data * pdata)3253 static void xgbe_phy_kr_training_post(struct xgbe_prv_data *pdata)
3254 {
3255 	if (!pdata->debugfs_an_cdr_track_early)
3256 		xgbe_phy_cdr_track(pdata);
3257 }
3258 
xgbe_phy_kr_training_pre(struct xgbe_prv_data * pdata)3259 static void xgbe_phy_kr_training_pre(struct xgbe_prv_data *pdata)
3260 {
3261 	if (pdata->debugfs_an_cdr_track_early)
3262 		xgbe_phy_cdr_track(pdata);
3263 }
3264 
xgbe_phy_an_post(struct xgbe_prv_data * pdata)3265 static void xgbe_phy_an_post(struct xgbe_prv_data *pdata)
3266 {
3267 	struct xgbe_phy_data *phy_data = pdata->phy_data;
3268 
3269 	switch (pdata->an_mode) {
3270 	case XGBE_AN_MODE_CL73:
3271 	case XGBE_AN_MODE_CL73_REDRV:
3272 		if (phy_data->cur_mode != XGBE_MODE_KR)
3273 			break;
3274 
3275 		xgbe_phy_cdr_track(pdata);
3276 
3277 		switch (pdata->an_result) {
3278 		case XGBE_AN_READY:
3279 		case XGBE_AN_COMPLETE:
3280 			break;
3281 		default:
3282 			if (phy_data->phy_cdr_delay < XGBE_CDR_DELAY_MAX)
3283 				phy_data->phy_cdr_delay += XGBE_CDR_DELAY_INC;
3284 			else
3285 				phy_data->phy_cdr_delay = XGBE_CDR_DELAY_INIT;
3286 			break;
3287 		}
3288 		break;
3289 	default:
3290 		break;
3291 	}
3292 }
3293 
xgbe_phy_an_pre(struct xgbe_prv_data * pdata)3294 static void xgbe_phy_an_pre(struct xgbe_prv_data *pdata)
3295 {
3296 	struct xgbe_phy_data *phy_data = pdata->phy_data;
3297 
3298 	switch (pdata->an_mode) {
3299 	case XGBE_AN_MODE_CL73:
3300 	case XGBE_AN_MODE_CL73_REDRV:
3301 		if (phy_data->cur_mode != XGBE_MODE_KR)
3302 			break;
3303 
3304 		xgbe_phy_cdr_notrack(pdata);
3305 		break;
3306 	default:
3307 		break;
3308 	}
3309 }
3310 
xgbe_phy_stop(struct xgbe_prv_data * pdata)3311 static void xgbe_phy_stop(struct xgbe_prv_data *pdata)
3312 {
3313 	struct xgbe_phy_data *phy_data = pdata->phy_data;
3314 
3315 	/* If we have an external PHY, free it */
3316 	xgbe_phy_free_phy_device(pdata);
3317 
3318 	/* Reset SFP data */
3319 	xgbe_phy_sfp_reset(phy_data);
3320 	xgbe_phy_sfp_mod_absent(pdata);
3321 
3322 	/* Reset CDR support */
3323 	xgbe_phy_cdr_track(pdata);
3324 
3325 	/* Power off the PHY */
3326 	xgbe_phy_power_off(pdata);
3327 
3328 	/* Stop the I2C controller */
3329 	pdata->i2c_if.i2c_stop(pdata);
3330 }
3331 
xgbe_phy_start(struct xgbe_prv_data * pdata)3332 static int xgbe_phy_start(struct xgbe_prv_data *pdata)
3333 {
3334 	struct xgbe_phy_data *phy_data = pdata->phy_data;
3335 	int ret;
3336 
3337 	/* Start the I2C controller */
3338 	ret = pdata->i2c_if.i2c_start(pdata);
3339 	if (ret)
3340 		return ret;
3341 
3342 	/* Set the proper MDIO mode for the re-driver */
3343 	if (phy_data->redrv && !phy_data->redrv_if) {
3344 		ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->redrv_addr,
3345 						    XGBE_MDIO_MODE_CL22);
3346 		if (ret) {
3347 			netdev_err(pdata->netdev,
3348 				   "redriver mdio port not compatible (%u)\n",
3349 				   phy_data->redrv_addr);
3350 			return ret;
3351 		}
3352 	}
3353 
3354 	/* Start in highest supported mode */
3355 	xgbe_phy_set_mode(pdata, phy_data->start_mode);
3356 
3357 	/* Reset CDR support */
3358 	xgbe_phy_cdr_track(pdata);
3359 
3360 	/* After starting the I2C controller, we can check for an SFP */
3361 	switch (phy_data->port_mode) {
3362 	case XGBE_PORT_MODE_SFP:
3363 		xgbe_phy_sfp_detect(pdata);
3364 		break;
3365 	default:
3366 		break;
3367 	}
3368 
3369 	/* If we have an external PHY, start it */
3370 	ret = xgbe_phy_find_phy_device(pdata);
3371 	if (ret)
3372 		goto err_i2c;
3373 
3374 	return 0;
3375 
3376 err_i2c:
3377 	pdata->i2c_if.i2c_stop(pdata);
3378 
3379 	return ret;
3380 }
3381 
xgbe_phy_reset(struct xgbe_prv_data * pdata)3382 static int xgbe_phy_reset(struct xgbe_prv_data *pdata)
3383 {
3384 	struct xgbe_phy_data *phy_data = pdata->phy_data;
3385 	enum xgbe_mode cur_mode;
3386 	int ret;
3387 
3388 	/* Reset by power cycling the PHY */
3389 	cur_mode = phy_data->cur_mode;
3390 	xgbe_phy_power_off(pdata);
3391 	xgbe_phy_set_mode(pdata, cur_mode);
3392 
3393 	if (!phy_data->phydev)
3394 		return 0;
3395 
3396 	/* Reset the external PHY */
3397 	ret = xgbe_phy_mdio_reset(pdata);
3398 	if (ret)
3399 		return ret;
3400 
3401 	return phy_init_hw(phy_data->phydev);
3402 }
3403 
xgbe_phy_exit(struct xgbe_prv_data * pdata)3404 static void xgbe_phy_exit(struct xgbe_prv_data *pdata)
3405 {
3406 	struct xgbe_phy_data *phy_data = pdata->phy_data;
3407 
3408 	/* Unregister for driving external PHYs */
3409 	mdiobus_unregister(phy_data->mii);
3410 }
3411 
xgbe_phy_init(struct xgbe_prv_data * pdata)3412 static int xgbe_phy_init(struct xgbe_prv_data *pdata)
3413 {
3414 	struct ethtool_link_ksettings *lks = &pdata->phy.lks;
3415 	struct xgbe_phy_data *phy_data;
3416 	struct mii_bus *mii;
3417 	int ret;
3418 
3419 	/* Check if enabled */
3420 	if (!xgbe_phy_port_enabled(pdata)) {
3421 		dev_info(pdata->dev, "device is not enabled\n");
3422 		return -ENODEV;
3423 	}
3424 
3425 	/* Initialize the I2C controller */
3426 	ret = pdata->i2c_if.i2c_init(pdata);
3427 	if (ret)
3428 		return ret;
3429 
3430 	phy_data = devm_kzalloc(pdata->dev, sizeof(*phy_data), GFP_KERNEL);
3431 	if (!phy_data)
3432 		return -ENOMEM;
3433 	pdata->phy_data = phy_data;
3434 
3435 	phy_data->port_mode = XP_GET_BITS(pdata->pp0, XP_PROP_0, PORT_MODE);
3436 	phy_data->port_id = XP_GET_BITS(pdata->pp0, XP_PROP_0, PORT_ID);
3437 	phy_data->port_speeds = XP_GET_BITS(pdata->pp0, XP_PROP_0, PORT_SPEEDS);
3438 	phy_data->conn_type = XP_GET_BITS(pdata->pp0, XP_PROP_0, CONN_TYPE);
3439 	phy_data->mdio_addr = XP_GET_BITS(pdata->pp0, XP_PROP_0, MDIO_ADDR);
3440 	if (netif_msg_probe(pdata)) {
3441 		dev_dbg(pdata->dev, "port mode=%u\n", phy_data->port_mode);
3442 		dev_dbg(pdata->dev, "port id=%u\n", phy_data->port_id);
3443 		dev_dbg(pdata->dev, "port speeds=%#x\n", phy_data->port_speeds);
3444 		dev_dbg(pdata->dev, "conn type=%u\n", phy_data->conn_type);
3445 		dev_dbg(pdata->dev, "mdio addr=%u\n", phy_data->mdio_addr);
3446 	}
3447 
3448 	phy_data->redrv = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_PRESENT);
3449 	phy_data->redrv_if = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_IF);
3450 	phy_data->redrv_addr = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_ADDR);
3451 	phy_data->redrv_lane = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_LANE);
3452 	phy_data->redrv_model = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_MODEL);
3453 	if (phy_data->redrv && netif_msg_probe(pdata)) {
3454 		dev_dbg(pdata->dev, "redrv present\n");
3455 		dev_dbg(pdata->dev, "redrv i/f=%u\n", phy_data->redrv_if);
3456 		dev_dbg(pdata->dev, "redrv addr=%#x\n", phy_data->redrv_addr);
3457 		dev_dbg(pdata->dev, "redrv lane=%u\n", phy_data->redrv_lane);
3458 		dev_dbg(pdata->dev, "redrv model=%u\n", phy_data->redrv_model);
3459 	}
3460 
3461 	/* Validate the connection requested */
3462 	if (xgbe_phy_conn_type_mismatch(pdata)) {
3463 		dev_err(pdata->dev, "phy mode/connection mismatch (%#x/%#x)\n",
3464 			phy_data->port_mode, phy_data->conn_type);
3465 		return -EINVAL;
3466 	}
3467 
3468 	/* Validate the mode requested */
3469 	if (xgbe_phy_port_mode_mismatch(pdata)) {
3470 		dev_err(pdata->dev, "phy mode/speed mismatch (%#x/%#x)\n",
3471 			phy_data->port_mode, phy_data->port_speeds);
3472 		return -EINVAL;
3473 	}
3474 
3475 	/* Check for and validate MDIO reset support */
3476 	ret = xgbe_phy_mdio_reset_setup(pdata);
3477 	if (ret)
3478 		return ret;
3479 
3480 	/* Validate the re-driver information */
3481 	if (xgbe_phy_redrv_error(phy_data)) {
3482 		dev_err(pdata->dev, "phy re-driver settings error\n");
3483 		return -EINVAL;
3484 	}
3485 	pdata->kr_redrv = phy_data->redrv;
3486 
3487 	/* Indicate current mode is unknown */
3488 	phy_data->cur_mode = XGBE_MODE_UNKNOWN;
3489 
3490 	/* Initialize supported features */
3491 	XGBE_ZERO_SUP(lks);
3492 
3493 	switch (phy_data->port_mode) {
3494 	/* Backplane support */
3495 	case XGBE_PORT_MODE_BACKPLANE:
3496 		XGBE_SET_SUP(lks, Autoneg);
3497 		fallthrough;
3498 	case XGBE_PORT_MODE_BACKPLANE_NO_AUTONEG:
3499 		XGBE_SET_SUP(lks, Pause);
3500 		XGBE_SET_SUP(lks, Asym_Pause);
3501 		XGBE_SET_SUP(lks, Backplane);
3502 		if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) {
3503 			XGBE_SET_SUP(lks, 1000baseKX_Full);
3504 			phy_data->start_mode = XGBE_MODE_KX_1000;
3505 		}
3506 		if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) {
3507 			XGBE_SET_SUP(lks, 10000baseKR_Full);
3508 			if (pdata->fec_ability & MDIO_PMA_10GBR_FECABLE_ABLE)
3509 				XGBE_SET_SUP(lks, 10000baseR_FEC);
3510 			phy_data->start_mode = XGBE_MODE_KR;
3511 		}
3512 
3513 		phy_data->phydev_mode = XGBE_MDIO_MODE_NONE;
3514 		break;
3515 	case XGBE_PORT_MODE_BACKPLANE_2500:
3516 		XGBE_SET_SUP(lks, Pause);
3517 		XGBE_SET_SUP(lks, Asym_Pause);
3518 		XGBE_SET_SUP(lks, Backplane);
3519 		XGBE_SET_SUP(lks, 2500baseX_Full);
3520 		phy_data->start_mode = XGBE_MODE_KX_2500;
3521 
3522 		phy_data->phydev_mode = XGBE_MDIO_MODE_NONE;
3523 		break;
3524 
3525 	/* MDIO 1GBase-T support */
3526 	case XGBE_PORT_MODE_1000BASE_T:
3527 		XGBE_SET_SUP(lks, Autoneg);
3528 		XGBE_SET_SUP(lks, Pause);
3529 		XGBE_SET_SUP(lks, Asym_Pause);
3530 		XGBE_SET_SUP(lks, TP);
3531 		if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10) {
3532 			XGBE_SET_SUP(lks, 10baseT_Full);
3533 			phy_data->start_mode = XGBE_MODE_SGMII_10;
3534 		}
3535 		if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) {
3536 			XGBE_SET_SUP(lks, 100baseT_Full);
3537 			phy_data->start_mode = XGBE_MODE_SGMII_100;
3538 		}
3539 		if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) {
3540 			XGBE_SET_SUP(lks, 1000baseT_Full);
3541 			phy_data->start_mode = XGBE_MODE_SGMII_1000;
3542 		}
3543 
3544 		phy_data->phydev_mode = XGBE_MDIO_MODE_CL22;
3545 		break;
3546 
3547 	/* MDIO Base-X support */
3548 	case XGBE_PORT_MODE_1000BASE_X:
3549 		XGBE_SET_SUP(lks, Autoneg);
3550 		XGBE_SET_SUP(lks, Pause);
3551 		XGBE_SET_SUP(lks, Asym_Pause);
3552 		XGBE_SET_SUP(lks, FIBRE);
3553 		XGBE_SET_SUP(lks, 1000baseX_Full);
3554 		phy_data->start_mode = XGBE_MODE_X;
3555 
3556 		phy_data->phydev_mode = XGBE_MDIO_MODE_CL22;
3557 		break;
3558 
3559 	/* MDIO NBase-T support */
3560 	case XGBE_PORT_MODE_NBASE_T:
3561 		XGBE_SET_SUP(lks, Autoneg);
3562 		XGBE_SET_SUP(lks, Pause);
3563 		XGBE_SET_SUP(lks, Asym_Pause);
3564 		XGBE_SET_SUP(lks, TP);
3565 		if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10) {
3566 			XGBE_SET_SUP(lks, 10baseT_Full);
3567 			phy_data->start_mode = XGBE_MODE_SGMII_10;
3568 		}
3569 		if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) {
3570 			XGBE_SET_SUP(lks, 100baseT_Full);
3571 			phy_data->start_mode = XGBE_MODE_SGMII_100;
3572 		}
3573 		if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) {
3574 			XGBE_SET_SUP(lks, 1000baseT_Full);
3575 			phy_data->start_mode = XGBE_MODE_SGMII_1000;
3576 		}
3577 		if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_2500) {
3578 			XGBE_SET_SUP(lks, 2500baseT_Full);
3579 			phy_data->start_mode = XGBE_MODE_KX_2500;
3580 		}
3581 
3582 		phy_data->phydev_mode = XGBE_MDIO_MODE_CL45;
3583 		break;
3584 
3585 	/* 10GBase-T support */
3586 	case XGBE_PORT_MODE_10GBASE_T:
3587 		XGBE_SET_SUP(lks, Autoneg);
3588 		XGBE_SET_SUP(lks, Pause);
3589 		XGBE_SET_SUP(lks, Asym_Pause);
3590 		XGBE_SET_SUP(lks, TP);
3591 		if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10) {
3592 			XGBE_SET_SUP(lks, 10baseT_Full);
3593 			phy_data->start_mode = XGBE_MODE_SGMII_10;
3594 		}
3595 		if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) {
3596 			XGBE_SET_SUP(lks, 100baseT_Full);
3597 			phy_data->start_mode = XGBE_MODE_SGMII_100;
3598 		}
3599 		if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) {
3600 			XGBE_SET_SUP(lks, 1000baseT_Full);
3601 			phy_data->start_mode = XGBE_MODE_SGMII_1000;
3602 		}
3603 		if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_2500) {
3604 			XGBE_SET_SUP(lks, 2500baseT_Full);
3605 			phy_data->start_mode = XGBE_MODE_KX_2500;
3606 		}
3607 		if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) {
3608 			XGBE_SET_SUP(lks, 10000baseT_Full);
3609 			phy_data->start_mode = XGBE_MODE_KR;
3610 		}
3611 
3612 		phy_data->phydev_mode = XGBE_MDIO_MODE_CL45;
3613 		break;
3614 
3615 	/* 10GBase-R support */
3616 	case XGBE_PORT_MODE_10GBASE_R:
3617 		XGBE_SET_SUP(lks, Autoneg);
3618 		XGBE_SET_SUP(lks, Pause);
3619 		XGBE_SET_SUP(lks, Asym_Pause);
3620 		XGBE_SET_SUP(lks, FIBRE);
3621 		XGBE_SET_SUP(lks, 10000baseSR_Full);
3622 		XGBE_SET_SUP(lks, 10000baseLR_Full);
3623 		XGBE_SET_SUP(lks, 10000baseLRM_Full);
3624 		XGBE_SET_SUP(lks, 10000baseER_Full);
3625 		if (pdata->fec_ability & MDIO_PMA_10GBR_FECABLE_ABLE)
3626 			XGBE_SET_SUP(lks, 10000baseR_FEC);
3627 		phy_data->start_mode = XGBE_MODE_SFI;
3628 
3629 		phy_data->phydev_mode = XGBE_MDIO_MODE_NONE;
3630 		break;
3631 
3632 	/* SFP support */
3633 	case XGBE_PORT_MODE_SFP:
3634 		XGBE_SET_SUP(lks, Autoneg);
3635 		XGBE_SET_SUP(lks, Pause);
3636 		XGBE_SET_SUP(lks, Asym_Pause);
3637 		XGBE_SET_SUP(lks, TP);
3638 		XGBE_SET_SUP(lks, FIBRE);
3639 		if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10)
3640 			phy_data->start_mode = XGBE_MODE_SGMII_10;
3641 		if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100)
3642 			phy_data->start_mode = XGBE_MODE_SGMII_100;
3643 		if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000)
3644 			phy_data->start_mode = XGBE_MODE_SGMII_1000;
3645 		if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000)
3646 			phy_data->start_mode = XGBE_MODE_SFI;
3647 
3648 		phy_data->phydev_mode = XGBE_MDIO_MODE_CL22;
3649 
3650 		xgbe_phy_sfp_setup(pdata);
3651 		break;
3652 	default:
3653 		return -EINVAL;
3654 	}
3655 
3656 	if (netif_msg_probe(pdata))
3657 		dev_dbg(pdata->dev, "phy supported=0x%*pb\n",
3658 			__ETHTOOL_LINK_MODE_MASK_NBITS,
3659 			lks->link_modes.supported);
3660 
3661 	if ((phy_data->conn_type & XGBE_CONN_TYPE_MDIO) &&
3662 	    (phy_data->phydev_mode != XGBE_MDIO_MODE_NONE)) {
3663 		ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->mdio_addr,
3664 						    phy_data->phydev_mode);
3665 		if (ret) {
3666 			dev_err(pdata->dev,
3667 				"mdio port/clause not compatible (%d/%u)\n",
3668 				phy_data->mdio_addr, phy_data->phydev_mode);
3669 			return -EINVAL;
3670 		}
3671 	}
3672 
3673 	if (phy_data->redrv && !phy_data->redrv_if) {
3674 		ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->redrv_addr,
3675 						    XGBE_MDIO_MODE_CL22);
3676 		if (ret) {
3677 			dev_err(pdata->dev,
3678 				"redriver mdio port not compatible (%u)\n",
3679 				phy_data->redrv_addr);
3680 			return -EINVAL;
3681 		}
3682 	}
3683 
3684 	phy_data->phy_cdr_delay = XGBE_CDR_DELAY_INIT;
3685 
3686 	/* Register for driving external PHYs */
3687 	mii = devm_mdiobus_alloc(pdata->dev);
3688 	if (!mii) {
3689 		dev_err(pdata->dev, "mdiobus_alloc failed\n");
3690 		return -ENOMEM;
3691 	}
3692 
3693 	mii->priv = pdata;
3694 	mii->name = "amd-xgbe-mii";
3695 	mii->read = xgbe_phy_mii_read_c22;
3696 	mii->write = xgbe_phy_mii_write_c22;
3697 	mii->read_c45 = xgbe_phy_mii_read_c45;
3698 	mii->write_c45 = xgbe_phy_mii_write_c45;
3699 	mii->parent = pdata->dev;
3700 	mii->phy_mask = ~0;
3701 	snprintf(mii->id, sizeof(mii->id), "%s", dev_name(pdata->dev));
3702 	ret = mdiobus_register(mii);
3703 	if (ret) {
3704 		dev_err(pdata->dev, "mdiobus_register failed\n");
3705 		return ret;
3706 	}
3707 	phy_data->mii = mii;
3708 
3709 	return 0;
3710 }
3711 
xgbe_init_function_ptrs_phy_v2(struct xgbe_phy_if * phy_if)3712 void xgbe_init_function_ptrs_phy_v2(struct xgbe_phy_if *phy_if)
3713 {
3714 	struct xgbe_phy_impl_if *phy_impl = &phy_if->phy_impl;
3715 
3716 	phy_impl->init			= xgbe_phy_init;
3717 	phy_impl->exit			= xgbe_phy_exit;
3718 
3719 	phy_impl->reset			= xgbe_phy_reset;
3720 	phy_impl->start			= xgbe_phy_start;
3721 	phy_impl->stop			= xgbe_phy_stop;
3722 
3723 	phy_impl->link_status		= xgbe_phy_link_status;
3724 
3725 	phy_impl->valid_speed		= xgbe_phy_valid_speed;
3726 
3727 	phy_impl->use_mode		= xgbe_phy_use_mode;
3728 	phy_impl->set_mode		= xgbe_phy_set_mode;
3729 	phy_impl->get_mode		= xgbe_phy_get_mode;
3730 	phy_impl->switch_mode		= xgbe_phy_switch_mode;
3731 	phy_impl->cur_mode		= xgbe_phy_cur_mode;
3732 
3733 	phy_impl->an_mode		= xgbe_phy_an_mode;
3734 
3735 	phy_impl->an_config		= xgbe_phy_an_config;
3736 
3737 	phy_impl->an_advertising	= xgbe_phy_an_advertising;
3738 
3739 	phy_impl->an_outcome		= xgbe_phy_an_outcome;
3740 
3741 	phy_impl->an_pre		= xgbe_phy_an_pre;
3742 	phy_impl->an_post		= xgbe_phy_an_post;
3743 
3744 	phy_impl->kr_training_pre	= xgbe_phy_kr_training_pre;
3745 	phy_impl->kr_training_post	= xgbe_phy_kr_training_post;
3746 
3747 	phy_impl->module_info		= xgbe_phy_module_info;
3748 	phy_impl->module_eeprom		= xgbe_phy_module_eeprom;
3749 }
3750