xref: /linux/drivers/net/phy/micrel.c (revision 436396f26d502ada54281958db0a9f6fc12ff256)
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * drivers/net/phy/micrel.c
4  *
5  * Driver for Micrel PHYs
6  *
7  * Author: David J. Choi
8  *
9  * Copyright (c) 2010-2013 Micrel, Inc.
10  * Copyright (c) 2014 Johan Hovold <johan@kernel.org>
11  *
12  * Support : Micrel Phys:
13  *		Giga phys: ksz9021, ksz9031, ksz9131
14  *		100/10 Phys : ksz8001, ksz8721, ksz8737, ksz8041
15  *			   ksz8021, ksz8031, ksz8051,
16  *			   ksz8081, ksz8091,
17  *			   ksz8061,
18  *		Switch : ksz8873, ksz886x
19  *			 ksz9477
20  */
21 
22 #include <linux/bitfield.h>
23 #include <linux/ethtool_netlink.h>
24 #include <linux/kernel.h>
25 #include <linux/module.h>
26 #include <linux/phy.h>
27 #include <linux/micrel_phy.h>
28 #include <linux/of.h>
29 #include <linux/clk.h>
30 #include <linux/delay.h>
31 #include <linux/ptp_clock_kernel.h>
32 #include <linux/ptp_clock.h>
33 #include <linux/ptp_classify.h>
34 #include <linux/net_tstamp.h>
35 #include <linux/gpio/consumer.h>
36 
37 /* Operation Mode Strap Override */
38 #define MII_KSZPHY_OMSO				0x16
39 #define KSZPHY_OMSO_FACTORY_TEST		BIT(15)
40 #define KSZPHY_OMSO_B_CAST_OFF			BIT(9)
41 #define KSZPHY_OMSO_NAND_TREE_ON		BIT(5)
42 #define KSZPHY_OMSO_RMII_OVERRIDE		BIT(1)
43 #define KSZPHY_OMSO_MII_OVERRIDE		BIT(0)
44 
45 /* general Interrupt control/status reg in vendor specific block. */
46 #define MII_KSZPHY_INTCS			0x1B
47 #define KSZPHY_INTCS_JABBER			BIT(15)
48 #define KSZPHY_INTCS_RECEIVE_ERR		BIT(14)
49 #define KSZPHY_INTCS_PAGE_RECEIVE		BIT(13)
50 #define KSZPHY_INTCS_PARELLEL			BIT(12)
51 #define KSZPHY_INTCS_LINK_PARTNER_ACK		BIT(11)
52 #define KSZPHY_INTCS_LINK_DOWN			BIT(10)
53 #define KSZPHY_INTCS_REMOTE_FAULT		BIT(9)
54 #define KSZPHY_INTCS_LINK_UP			BIT(8)
55 #define KSZPHY_INTCS_ALL			(KSZPHY_INTCS_LINK_UP |\
56 						KSZPHY_INTCS_LINK_DOWN)
57 #define KSZPHY_INTCS_LINK_DOWN_STATUS		BIT(2)
58 #define KSZPHY_INTCS_LINK_UP_STATUS		BIT(0)
59 #define KSZPHY_INTCS_STATUS			(KSZPHY_INTCS_LINK_DOWN_STATUS |\
60 						 KSZPHY_INTCS_LINK_UP_STATUS)
61 
62 /* LinkMD Control/Status */
63 #define KSZ8081_LMD				0x1d
64 #define KSZ8081_LMD_ENABLE_TEST			BIT(15)
65 #define KSZ8081_LMD_STAT_NORMAL			0
66 #define KSZ8081_LMD_STAT_OPEN			1
67 #define KSZ8081_LMD_STAT_SHORT			2
68 #define KSZ8081_LMD_STAT_FAIL			3
69 #define KSZ8081_LMD_STAT_MASK			GENMASK(14, 13)
70 /* Short cable (<10 meter) has been detected by LinkMD */
71 #define KSZ8081_LMD_SHORT_INDICATOR		BIT(12)
72 #define KSZ8081_LMD_DELTA_TIME_MASK		GENMASK(8, 0)
73 
74 #define KSZ9x31_LMD				0x12
75 #define KSZ9x31_LMD_VCT_EN			BIT(15)
76 #define KSZ9x31_LMD_VCT_DIS_TX			BIT(14)
77 #define KSZ9x31_LMD_VCT_PAIR(n)			(((n) & 0x3) << 12)
78 #define KSZ9x31_LMD_VCT_SEL_RESULT		0
79 #define KSZ9x31_LMD_VCT_SEL_THRES_HI		BIT(10)
80 #define KSZ9x31_LMD_VCT_SEL_THRES_LO		BIT(11)
81 #define KSZ9x31_LMD_VCT_SEL_MASK		GENMASK(11, 10)
82 #define KSZ9x31_LMD_VCT_ST_NORMAL		0
83 #define KSZ9x31_LMD_VCT_ST_OPEN			1
84 #define KSZ9x31_LMD_VCT_ST_SHORT		2
85 #define KSZ9x31_LMD_VCT_ST_FAIL			3
86 #define KSZ9x31_LMD_VCT_ST_MASK			GENMASK(9, 8)
87 #define KSZ9x31_LMD_VCT_DATA_REFLECTED_INVALID	BIT(7)
88 #define KSZ9x31_LMD_VCT_DATA_SIG_WAIT_TOO_LONG	BIT(6)
89 #define KSZ9x31_LMD_VCT_DATA_MASK100		BIT(5)
90 #define KSZ9x31_LMD_VCT_DATA_NLP_FLP		BIT(4)
91 #define KSZ9x31_LMD_VCT_DATA_LO_PULSE_MASK	GENMASK(3, 2)
92 #define KSZ9x31_LMD_VCT_DATA_HI_PULSE_MASK	GENMASK(1, 0)
93 #define KSZ9x31_LMD_VCT_DATA_MASK		GENMASK(7, 0)
94 
95 #define KSZPHY_WIRE_PAIR_MASK			0x3
96 
97 #define LAN8814_CABLE_DIAG			0x12
98 #define LAN8814_CABLE_DIAG_STAT_MASK		GENMASK(9, 8)
99 #define LAN8814_CABLE_DIAG_VCT_DATA_MASK	GENMASK(7, 0)
100 #define LAN8814_PAIR_BIT_SHIFT			12
101 
102 #define LAN8814_WIRE_PAIR_MASK			0xF
103 
104 /* Lan8814 general Interrupt control/status reg in GPHY specific block. */
105 #define LAN8814_INTC				0x18
106 #define LAN8814_INTS				0x1B
107 
108 #define LAN8814_INT_LINK_DOWN			BIT(2)
109 #define LAN8814_INT_LINK_UP			BIT(0)
110 #define LAN8814_INT_LINK			(LAN8814_INT_LINK_UP |\
111 						 LAN8814_INT_LINK_DOWN)
112 
113 #define LAN8814_INTR_CTRL_REG			0x34
114 #define LAN8814_INTR_CTRL_REG_POLARITY		BIT(1)
115 #define LAN8814_INTR_CTRL_REG_INTR_ENABLE	BIT(0)
116 
117 /* Represents 1ppm adjustment in 2^32 format with
118  * each nsec contains 4 clock cycles.
119  * The value is calculated as following: (1/1000000)/((2^-32)/4)
120  */
121 #define LAN8814_1PPM_FORMAT			17179
122 
123 #define PTP_RX_MOD				0x024F
124 #define PTP_RX_MOD_BAD_UDPV4_CHKSUM_FORCE_FCS_DIS_ BIT(3)
125 #define PTP_RX_TIMESTAMP_EN			0x024D
126 #define PTP_TX_TIMESTAMP_EN			0x028D
127 
128 #define PTP_TIMESTAMP_EN_SYNC_			BIT(0)
129 #define PTP_TIMESTAMP_EN_DREQ_			BIT(1)
130 #define PTP_TIMESTAMP_EN_PDREQ_			BIT(2)
131 #define PTP_TIMESTAMP_EN_PDRES_			BIT(3)
132 
133 #define PTP_TX_PARSE_L2_ADDR_EN			0x0284
134 #define PTP_RX_PARSE_L2_ADDR_EN			0x0244
135 
136 #define PTP_TX_PARSE_IP_ADDR_EN			0x0285
137 #define PTP_RX_PARSE_IP_ADDR_EN			0x0245
138 #define LTC_HARD_RESET				0x023F
139 #define LTC_HARD_RESET_				BIT(0)
140 
141 #define TSU_HARD_RESET				0x02C1
142 #define TSU_HARD_RESET_				BIT(0)
143 
144 #define PTP_CMD_CTL				0x0200
145 #define PTP_CMD_CTL_PTP_DISABLE_		BIT(0)
146 #define PTP_CMD_CTL_PTP_ENABLE_			BIT(1)
147 #define PTP_CMD_CTL_PTP_CLOCK_READ_		BIT(3)
148 #define PTP_CMD_CTL_PTP_CLOCK_LOAD_		BIT(4)
149 #define PTP_CMD_CTL_PTP_LTC_STEP_SEC_		BIT(5)
150 #define PTP_CMD_CTL_PTP_LTC_STEP_NSEC_		BIT(6)
151 
152 #define PTP_CLOCK_SET_SEC_MID			0x0206
153 #define PTP_CLOCK_SET_SEC_LO			0x0207
154 #define PTP_CLOCK_SET_NS_HI			0x0208
155 #define PTP_CLOCK_SET_NS_LO			0x0209
156 
157 #define PTP_CLOCK_READ_SEC_MID			0x022A
158 #define PTP_CLOCK_READ_SEC_LO			0x022B
159 #define PTP_CLOCK_READ_NS_HI			0x022C
160 #define PTP_CLOCK_READ_NS_LO			0x022D
161 
162 #define PTP_OPERATING_MODE			0x0241
163 #define PTP_OPERATING_MODE_STANDALONE_		BIT(0)
164 
165 #define PTP_TX_MOD				0x028F
166 #define PTP_TX_MOD_TX_PTP_SYNC_TS_INSERT_	BIT(12)
167 #define PTP_TX_MOD_BAD_UDPV4_CHKSUM_FORCE_FCS_DIS_ BIT(3)
168 
169 #define PTP_RX_PARSE_CONFIG			0x0242
170 #define PTP_RX_PARSE_CONFIG_LAYER2_EN_		BIT(0)
171 #define PTP_RX_PARSE_CONFIG_IPV4_EN_		BIT(1)
172 #define PTP_RX_PARSE_CONFIG_IPV6_EN_		BIT(2)
173 
174 #define PTP_TX_PARSE_CONFIG			0x0282
175 #define PTP_TX_PARSE_CONFIG_LAYER2_EN_		BIT(0)
176 #define PTP_TX_PARSE_CONFIG_IPV4_EN_		BIT(1)
177 #define PTP_TX_PARSE_CONFIG_IPV6_EN_		BIT(2)
178 
179 #define PTP_CLOCK_RATE_ADJ_HI			0x020C
180 #define PTP_CLOCK_RATE_ADJ_LO			0x020D
181 #define PTP_CLOCK_RATE_ADJ_DIR_			BIT(15)
182 
183 #define PTP_LTC_STEP_ADJ_HI			0x0212
184 #define PTP_LTC_STEP_ADJ_LO			0x0213
185 #define PTP_LTC_STEP_ADJ_DIR_			BIT(15)
186 
187 #define LAN8814_INTR_STS_REG			0x0033
188 #define LAN8814_INTR_STS_REG_1588_TSU0_		BIT(0)
189 #define LAN8814_INTR_STS_REG_1588_TSU1_		BIT(1)
190 #define LAN8814_INTR_STS_REG_1588_TSU2_		BIT(2)
191 #define LAN8814_INTR_STS_REG_1588_TSU3_		BIT(3)
192 
193 #define PTP_CAP_INFO				0x022A
194 #define PTP_CAP_INFO_TX_TS_CNT_GET_(reg_val)	(((reg_val) & 0x0f00) >> 8)
195 #define PTP_CAP_INFO_RX_TS_CNT_GET_(reg_val)	((reg_val) & 0x000f)
196 
197 #define PTP_TX_EGRESS_SEC_HI			0x0296
198 #define PTP_TX_EGRESS_SEC_LO			0x0297
199 #define PTP_TX_EGRESS_NS_HI			0x0294
200 #define PTP_TX_EGRESS_NS_LO			0x0295
201 #define PTP_TX_MSG_HEADER2			0x0299
202 
203 #define PTP_RX_INGRESS_SEC_HI			0x0256
204 #define PTP_RX_INGRESS_SEC_LO			0x0257
205 #define PTP_RX_INGRESS_NS_HI			0x0254
206 #define PTP_RX_INGRESS_NS_LO			0x0255
207 #define PTP_RX_MSG_HEADER2			0x0259
208 
209 #define PTP_TSU_INT_EN				0x0200
210 #define PTP_TSU_INT_EN_PTP_TX_TS_OVRFL_EN_	BIT(3)
211 #define PTP_TSU_INT_EN_PTP_TX_TS_EN_		BIT(2)
212 #define PTP_TSU_INT_EN_PTP_RX_TS_OVRFL_EN_	BIT(1)
213 #define PTP_TSU_INT_EN_PTP_RX_TS_EN_		BIT(0)
214 
215 #define PTP_TSU_INT_STS				0x0201
216 #define PTP_TSU_INT_STS_PTP_TX_TS_OVRFL_INT_	BIT(3)
217 #define PTP_TSU_INT_STS_PTP_TX_TS_EN_		BIT(2)
218 #define PTP_TSU_INT_STS_PTP_RX_TS_OVRFL_INT_	BIT(1)
219 #define PTP_TSU_INT_STS_PTP_RX_TS_EN_		BIT(0)
220 
221 #define LAN8814_LED_CTRL_1			0x0
222 #define LAN8814_LED_CTRL_1_KSZ9031_LED_MODE_	BIT(6)
223 
224 /* PHY Control 1 */
225 #define MII_KSZPHY_CTRL_1			0x1e
226 #define KSZ8081_CTRL1_MDIX_STAT			BIT(4)
227 
228 /* PHY Control 2 / PHY Control (if no PHY Control 1) */
229 #define MII_KSZPHY_CTRL_2			0x1f
230 #define MII_KSZPHY_CTRL				MII_KSZPHY_CTRL_2
231 /* bitmap of PHY register to set interrupt mode */
232 #define KSZ8081_CTRL2_HP_MDIX			BIT(15)
233 #define KSZ8081_CTRL2_MDI_MDI_X_SELECT		BIT(14)
234 #define KSZ8081_CTRL2_DISABLE_AUTO_MDIX		BIT(13)
235 #define KSZ8081_CTRL2_FORCE_LINK		BIT(11)
236 #define KSZ8081_CTRL2_POWER_SAVING		BIT(10)
237 #define KSZPHY_CTRL_INT_ACTIVE_HIGH		BIT(9)
238 #define KSZPHY_RMII_REF_CLK_SEL			BIT(7)
239 
240 /* Write/read to/from extended registers */
241 #define MII_KSZPHY_EXTREG			0x0b
242 #define KSZPHY_EXTREG_WRITE			0x8000
243 
244 #define MII_KSZPHY_EXTREG_WRITE			0x0c
245 #define MII_KSZPHY_EXTREG_READ			0x0d
246 
247 /* Extended registers */
248 #define MII_KSZPHY_CLK_CONTROL_PAD_SKEW		0x104
249 #define MII_KSZPHY_RX_DATA_PAD_SKEW		0x105
250 #define MII_KSZPHY_TX_DATA_PAD_SKEW		0x106
251 
252 #define PS_TO_REG				200
253 #define FIFO_SIZE				8
254 
255 struct kszphy_hw_stat {
256 	const char *string;
257 	u8 reg;
258 	u8 bits;
259 };
260 
261 static struct kszphy_hw_stat kszphy_hw_stats[] = {
262 	{ "phy_receive_errors", 21, 16},
263 	{ "phy_idle_errors", 10, 8 },
264 };
265 
266 struct kszphy_type {
267 	u32 led_mode_reg;
268 	u16 interrupt_level_mask;
269 	u16 cable_diag_reg;
270 	unsigned long pair_mask;
271 	u16 disable_dll_tx_bit;
272 	u16 disable_dll_rx_bit;
273 	u16 disable_dll_mask;
274 	bool has_broadcast_disable;
275 	bool has_nand_tree_disable;
276 	bool has_rmii_ref_clk_sel;
277 };
278 
279 /* Shared structure between the PHYs of the same package. */
280 struct lan8814_shared_priv {
281 	struct phy_device *phydev;
282 	struct ptp_clock *ptp_clock;
283 	struct ptp_clock_info ptp_clock_info;
284 
285 	/* Reference counter to how many ports in the package are enabling the
286 	 * timestamping
287 	 */
288 	u8 ref;
289 
290 	/* Lock for ptp_clock and ref */
291 	struct mutex shared_lock;
292 };
293 
294 struct lan8814_ptp_rx_ts {
295 	struct list_head list;
296 	u32 seconds;
297 	u32 nsec;
298 	u16 seq_id;
299 };
300 
301 struct kszphy_ptp_priv {
302 	struct mii_timestamper mii_ts;
303 	struct phy_device *phydev;
304 
305 	struct sk_buff_head tx_queue;
306 	struct sk_buff_head rx_queue;
307 
308 	struct list_head rx_ts_list;
309 	/* Lock for Rx ts fifo */
310 	spinlock_t rx_ts_lock;
311 
312 	int hwts_tx_type;
313 	enum hwtstamp_rx_filters rx_filter;
314 	int layer;
315 	int version;
316 };
317 
318 struct kszphy_priv {
319 	struct kszphy_ptp_priv ptp_priv;
320 	const struct kszphy_type *type;
321 	int led_mode;
322 	u16 vct_ctrl1000;
323 	bool rmii_ref_clk_sel;
324 	bool rmii_ref_clk_sel_val;
325 	u64 stats[ARRAY_SIZE(kszphy_hw_stats)];
326 };
327 
328 static const struct kszphy_type lan8814_type = {
329 	.led_mode_reg		= ~LAN8814_LED_CTRL_1,
330 	.cable_diag_reg		= LAN8814_CABLE_DIAG,
331 	.pair_mask		= LAN8814_WIRE_PAIR_MASK,
332 };
333 
334 static const struct kszphy_type ksz886x_type = {
335 	.cable_diag_reg		= KSZ8081_LMD,
336 	.pair_mask		= KSZPHY_WIRE_PAIR_MASK,
337 };
338 
339 static const struct kszphy_type ksz8021_type = {
340 	.led_mode_reg		= MII_KSZPHY_CTRL_2,
341 	.has_broadcast_disable	= true,
342 	.has_nand_tree_disable	= true,
343 	.has_rmii_ref_clk_sel	= true,
344 };
345 
346 static const struct kszphy_type ksz8041_type = {
347 	.led_mode_reg		= MII_KSZPHY_CTRL_1,
348 };
349 
350 static const struct kszphy_type ksz8051_type = {
351 	.led_mode_reg		= MII_KSZPHY_CTRL_2,
352 	.has_nand_tree_disable	= true,
353 };
354 
355 static const struct kszphy_type ksz8081_type = {
356 	.led_mode_reg		= MII_KSZPHY_CTRL_2,
357 	.has_broadcast_disable	= true,
358 	.has_nand_tree_disable	= true,
359 	.has_rmii_ref_clk_sel	= true,
360 };
361 
362 static const struct kszphy_type ks8737_type = {
363 	.interrupt_level_mask	= BIT(14),
364 };
365 
366 static const struct kszphy_type ksz9021_type = {
367 	.interrupt_level_mask	= BIT(14),
368 };
369 
370 static const struct kszphy_type ksz9131_type = {
371 	.interrupt_level_mask	= BIT(14),
372 	.disable_dll_tx_bit	= BIT(12),
373 	.disable_dll_rx_bit	= BIT(12),
374 	.disable_dll_mask	= BIT_MASK(12),
375 };
376 
377 static const struct kszphy_type lan8841_type = {
378 	.disable_dll_tx_bit	= BIT(14),
379 	.disable_dll_rx_bit	= BIT(14),
380 	.disable_dll_mask	= BIT_MASK(14),
381 };
382 
383 static int kszphy_extended_write(struct phy_device *phydev,
384 				u32 regnum, u16 val)
385 {
386 	phy_write(phydev, MII_KSZPHY_EXTREG, KSZPHY_EXTREG_WRITE | regnum);
387 	return phy_write(phydev, MII_KSZPHY_EXTREG_WRITE, val);
388 }
389 
390 static int kszphy_extended_read(struct phy_device *phydev,
391 				u32 regnum)
392 {
393 	phy_write(phydev, MII_KSZPHY_EXTREG, regnum);
394 	return phy_read(phydev, MII_KSZPHY_EXTREG_READ);
395 }
396 
397 static int kszphy_ack_interrupt(struct phy_device *phydev)
398 {
399 	/* bit[7..0] int status, which is a read and clear register. */
400 	int rc;
401 
402 	rc = phy_read(phydev, MII_KSZPHY_INTCS);
403 
404 	return (rc < 0) ? rc : 0;
405 }
406 
407 static int kszphy_config_intr(struct phy_device *phydev)
408 {
409 	const struct kszphy_type *type = phydev->drv->driver_data;
410 	int temp, err;
411 	u16 mask;
412 
413 	if (type && type->interrupt_level_mask)
414 		mask = type->interrupt_level_mask;
415 	else
416 		mask = KSZPHY_CTRL_INT_ACTIVE_HIGH;
417 
418 	/* set the interrupt pin active low */
419 	temp = phy_read(phydev, MII_KSZPHY_CTRL);
420 	if (temp < 0)
421 		return temp;
422 	temp &= ~mask;
423 	phy_write(phydev, MII_KSZPHY_CTRL, temp);
424 
425 	/* enable / disable interrupts */
426 	if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
427 		err = kszphy_ack_interrupt(phydev);
428 		if (err)
429 			return err;
430 
431 		temp = KSZPHY_INTCS_ALL;
432 		err = phy_write(phydev, MII_KSZPHY_INTCS, temp);
433 	} else {
434 		temp = 0;
435 		err = phy_write(phydev, MII_KSZPHY_INTCS, temp);
436 		if (err)
437 			return err;
438 
439 		err = kszphy_ack_interrupt(phydev);
440 	}
441 
442 	return err;
443 }
444 
445 static irqreturn_t kszphy_handle_interrupt(struct phy_device *phydev)
446 {
447 	int irq_status;
448 
449 	irq_status = phy_read(phydev, MII_KSZPHY_INTCS);
450 	if (irq_status < 0) {
451 		phy_error(phydev);
452 		return IRQ_NONE;
453 	}
454 
455 	if (!(irq_status & KSZPHY_INTCS_STATUS))
456 		return IRQ_NONE;
457 
458 	phy_trigger_machine(phydev);
459 
460 	return IRQ_HANDLED;
461 }
462 
463 static int kszphy_rmii_clk_sel(struct phy_device *phydev, bool val)
464 {
465 	int ctrl;
466 
467 	ctrl = phy_read(phydev, MII_KSZPHY_CTRL);
468 	if (ctrl < 0)
469 		return ctrl;
470 
471 	if (val)
472 		ctrl |= KSZPHY_RMII_REF_CLK_SEL;
473 	else
474 		ctrl &= ~KSZPHY_RMII_REF_CLK_SEL;
475 
476 	return phy_write(phydev, MII_KSZPHY_CTRL, ctrl);
477 }
478 
479 static int kszphy_setup_led(struct phy_device *phydev, u32 reg, int val)
480 {
481 	int rc, temp, shift;
482 
483 	switch (reg) {
484 	case MII_KSZPHY_CTRL_1:
485 		shift = 14;
486 		break;
487 	case MII_KSZPHY_CTRL_2:
488 		shift = 4;
489 		break;
490 	default:
491 		return -EINVAL;
492 	}
493 
494 	temp = phy_read(phydev, reg);
495 	if (temp < 0) {
496 		rc = temp;
497 		goto out;
498 	}
499 
500 	temp &= ~(3 << shift);
501 	temp |= val << shift;
502 	rc = phy_write(phydev, reg, temp);
503 out:
504 	if (rc < 0)
505 		phydev_err(phydev, "failed to set led mode\n");
506 
507 	return rc;
508 }
509 
510 /* Disable PHY address 0 as the broadcast address, so that it can be used as a
511  * unique (non-broadcast) address on a shared bus.
512  */
513 static int kszphy_broadcast_disable(struct phy_device *phydev)
514 {
515 	int ret;
516 
517 	ret = phy_read(phydev, MII_KSZPHY_OMSO);
518 	if (ret < 0)
519 		goto out;
520 
521 	ret = phy_write(phydev, MII_KSZPHY_OMSO, ret | KSZPHY_OMSO_B_CAST_OFF);
522 out:
523 	if (ret)
524 		phydev_err(phydev, "failed to disable broadcast address\n");
525 
526 	return ret;
527 }
528 
529 static int kszphy_nand_tree_disable(struct phy_device *phydev)
530 {
531 	int ret;
532 
533 	ret = phy_read(phydev, MII_KSZPHY_OMSO);
534 	if (ret < 0)
535 		goto out;
536 
537 	if (!(ret & KSZPHY_OMSO_NAND_TREE_ON))
538 		return 0;
539 
540 	ret = phy_write(phydev, MII_KSZPHY_OMSO,
541 			ret & ~KSZPHY_OMSO_NAND_TREE_ON);
542 out:
543 	if (ret)
544 		phydev_err(phydev, "failed to disable NAND tree mode\n");
545 
546 	return ret;
547 }
548 
549 /* Some config bits need to be set again on resume, handle them here. */
550 static int kszphy_config_reset(struct phy_device *phydev)
551 {
552 	struct kszphy_priv *priv = phydev->priv;
553 	int ret;
554 
555 	if (priv->rmii_ref_clk_sel) {
556 		ret = kszphy_rmii_clk_sel(phydev, priv->rmii_ref_clk_sel_val);
557 		if (ret) {
558 			phydev_err(phydev,
559 				   "failed to set rmii reference clock\n");
560 			return ret;
561 		}
562 	}
563 
564 	if (priv->type && priv->led_mode >= 0)
565 		kszphy_setup_led(phydev, priv->type->led_mode_reg, priv->led_mode);
566 
567 	return 0;
568 }
569 
570 static int kszphy_config_init(struct phy_device *phydev)
571 {
572 	struct kszphy_priv *priv = phydev->priv;
573 	const struct kszphy_type *type;
574 
575 	if (!priv)
576 		return 0;
577 
578 	type = priv->type;
579 
580 	if (type && type->has_broadcast_disable)
581 		kszphy_broadcast_disable(phydev);
582 
583 	if (type && type->has_nand_tree_disable)
584 		kszphy_nand_tree_disable(phydev);
585 
586 	return kszphy_config_reset(phydev);
587 }
588 
589 static int ksz8041_fiber_mode(struct phy_device *phydev)
590 {
591 	struct device_node *of_node = phydev->mdio.dev.of_node;
592 
593 	return of_property_read_bool(of_node, "micrel,fiber-mode");
594 }
595 
596 static int ksz8041_config_init(struct phy_device *phydev)
597 {
598 	__ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, };
599 
600 	/* Limit supported and advertised modes in fiber mode */
601 	if (ksz8041_fiber_mode(phydev)) {
602 		phydev->dev_flags |= MICREL_PHY_FXEN;
603 		linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, mask);
604 		linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT, mask);
605 
606 		linkmode_and(phydev->supported, phydev->supported, mask);
607 		linkmode_set_bit(ETHTOOL_LINK_MODE_FIBRE_BIT,
608 				 phydev->supported);
609 		linkmode_and(phydev->advertising, phydev->advertising, mask);
610 		linkmode_set_bit(ETHTOOL_LINK_MODE_FIBRE_BIT,
611 				 phydev->advertising);
612 		phydev->autoneg = AUTONEG_DISABLE;
613 	}
614 
615 	return kszphy_config_init(phydev);
616 }
617 
618 static int ksz8041_config_aneg(struct phy_device *phydev)
619 {
620 	/* Skip auto-negotiation in fiber mode */
621 	if (phydev->dev_flags & MICREL_PHY_FXEN) {
622 		phydev->speed = SPEED_100;
623 		return 0;
624 	}
625 
626 	return genphy_config_aneg(phydev);
627 }
628 
629 static int ksz8051_ksz8795_match_phy_device(struct phy_device *phydev,
630 					    const bool ksz_8051)
631 {
632 	int ret;
633 
634 	if ((phydev->phy_id & MICREL_PHY_ID_MASK) != PHY_ID_KSZ8051)
635 		return 0;
636 
637 	ret = phy_read(phydev, MII_BMSR);
638 	if (ret < 0)
639 		return ret;
640 
641 	/* KSZ8051 PHY and KSZ8794/KSZ8795/KSZ8765 switch share the same
642 	 * exact PHY ID. However, they can be told apart by the extended
643 	 * capability registers presence. The KSZ8051 PHY has them while
644 	 * the switch does not.
645 	 */
646 	ret &= BMSR_ERCAP;
647 	if (ksz_8051)
648 		return ret;
649 	else
650 		return !ret;
651 }
652 
653 static int ksz8051_match_phy_device(struct phy_device *phydev)
654 {
655 	return ksz8051_ksz8795_match_phy_device(phydev, true);
656 }
657 
658 static int ksz8081_config_init(struct phy_device *phydev)
659 {
660 	/* KSZPHY_OMSO_FACTORY_TEST is set at de-assertion of the reset line
661 	 * based on the RXER (KSZ8081RNA/RND) or TXC (KSZ8081MNX/RNB) pin. If a
662 	 * pull-down is missing, the factory test mode should be cleared by
663 	 * manually writing a 0.
664 	 */
665 	phy_clear_bits(phydev, MII_KSZPHY_OMSO, KSZPHY_OMSO_FACTORY_TEST);
666 
667 	return kszphy_config_init(phydev);
668 }
669 
670 static int ksz8081_config_mdix(struct phy_device *phydev, u8 ctrl)
671 {
672 	u16 val;
673 
674 	switch (ctrl) {
675 	case ETH_TP_MDI:
676 		val = KSZ8081_CTRL2_DISABLE_AUTO_MDIX;
677 		break;
678 	case ETH_TP_MDI_X:
679 		val = KSZ8081_CTRL2_DISABLE_AUTO_MDIX |
680 			KSZ8081_CTRL2_MDI_MDI_X_SELECT;
681 		break;
682 	case ETH_TP_MDI_AUTO:
683 		val = 0;
684 		break;
685 	default:
686 		return 0;
687 	}
688 
689 	return phy_modify(phydev, MII_KSZPHY_CTRL_2,
690 			  KSZ8081_CTRL2_HP_MDIX |
691 			  KSZ8081_CTRL2_MDI_MDI_X_SELECT |
692 			  KSZ8081_CTRL2_DISABLE_AUTO_MDIX,
693 			  KSZ8081_CTRL2_HP_MDIX | val);
694 }
695 
696 static int ksz8081_config_aneg(struct phy_device *phydev)
697 {
698 	int ret;
699 
700 	ret = genphy_config_aneg(phydev);
701 	if (ret)
702 		return ret;
703 
704 	/* The MDI-X configuration is automatically changed by the PHY after
705 	 * switching from autoneg off to on. So, take MDI-X configuration under
706 	 * own control and set it after autoneg configuration was done.
707 	 */
708 	return ksz8081_config_mdix(phydev, phydev->mdix_ctrl);
709 }
710 
711 static int ksz8081_mdix_update(struct phy_device *phydev)
712 {
713 	int ret;
714 
715 	ret = phy_read(phydev, MII_KSZPHY_CTRL_2);
716 	if (ret < 0)
717 		return ret;
718 
719 	if (ret & KSZ8081_CTRL2_DISABLE_AUTO_MDIX) {
720 		if (ret & KSZ8081_CTRL2_MDI_MDI_X_SELECT)
721 			phydev->mdix_ctrl = ETH_TP_MDI_X;
722 		else
723 			phydev->mdix_ctrl = ETH_TP_MDI;
724 	} else {
725 		phydev->mdix_ctrl = ETH_TP_MDI_AUTO;
726 	}
727 
728 	ret = phy_read(phydev, MII_KSZPHY_CTRL_1);
729 	if (ret < 0)
730 		return ret;
731 
732 	if (ret & KSZ8081_CTRL1_MDIX_STAT)
733 		phydev->mdix = ETH_TP_MDI;
734 	else
735 		phydev->mdix = ETH_TP_MDI_X;
736 
737 	return 0;
738 }
739 
740 static int ksz8081_read_status(struct phy_device *phydev)
741 {
742 	int ret;
743 
744 	ret = ksz8081_mdix_update(phydev);
745 	if (ret < 0)
746 		return ret;
747 
748 	return genphy_read_status(phydev);
749 }
750 
751 static int ksz8061_config_init(struct phy_device *phydev)
752 {
753 	int ret;
754 
755 	ret = phy_write_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_DEVID1, 0xB61A);
756 	if (ret)
757 		return ret;
758 
759 	return kszphy_config_init(phydev);
760 }
761 
762 static int ksz8795_match_phy_device(struct phy_device *phydev)
763 {
764 	return ksz8051_ksz8795_match_phy_device(phydev, false);
765 }
766 
767 static int ksz9021_load_values_from_of(struct phy_device *phydev,
768 				       const struct device_node *of_node,
769 				       u16 reg,
770 				       const char *field1, const char *field2,
771 				       const char *field3, const char *field4)
772 {
773 	int val1 = -1;
774 	int val2 = -2;
775 	int val3 = -3;
776 	int val4 = -4;
777 	int newval;
778 	int matches = 0;
779 
780 	if (!of_property_read_u32(of_node, field1, &val1))
781 		matches++;
782 
783 	if (!of_property_read_u32(of_node, field2, &val2))
784 		matches++;
785 
786 	if (!of_property_read_u32(of_node, field3, &val3))
787 		matches++;
788 
789 	if (!of_property_read_u32(of_node, field4, &val4))
790 		matches++;
791 
792 	if (!matches)
793 		return 0;
794 
795 	if (matches < 4)
796 		newval = kszphy_extended_read(phydev, reg);
797 	else
798 		newval = 0;
799 
800 	if (val1 != -1)
801 		newval = ((newval & 0xfff0) | ((val1 / PS_TO_REG) & 0xf) << 0);
802 
803 	if (val2 != -2)
804 		newval = ((newval & 0xff0f) | ((val2 / PS_TO_REG) & 0xf) << 4);
805 
806 	if (val3 != -3)
807 		newval = ((newval & 0xf0ff) | ((val3 / PS_TO_REG) & 0xf) << 8);
808 
809 	if (val4 != -4)
810 		newval = ((newval & 0x0fff) | ((val4 / PS_TO_REG) & 0xf) << 12);
811 
812 	return kszphy_extended_write(phydev, reg, newval);
813 }
814 
815 static int ksz9021_config_init(struct phy_device *phydev)
816 {
817 	const struct device_node *of_node;
818 	const struct device *dev_walker;
819 
820 	/* The Micrel driver has a deprecated option to place phy OF
821 	 * properties in the MAC node. Walk up the tree of devices to
822 	 * find a device with an OF node.
823 	 */
824 	dev_walker = &phydev->mdio.dev;
825 	do {
826 		of_node = dev_walker->of_node;
827 		dev_walker = dev_walker->parent;
828 
829 	} while (!of_node && dev_walker);
830 
831 	if (of_node) {
832 		ksz9021_load_values_from_of(phydev, of_node,
833 				    MII_KSZPHY_CLK_CONTROL_PAD_SKEW,
834 				    "txen-skew-ps", "txc-skew-ps",
835 				    "rxdv-skew-ps", "rxc-skew-ps");
836 		ksz9021_load_values_from_of(phydev, of_node,
837 				    MII_KSZPHY_RX_DATA_PAD_SKEW,
838 				    "rxd0-skew-ps", "rxd1-skew-ps",
839 				    "rxd2-skew-ps", "rxd3-skew-ps");
840 		ksz9021_load_values_from_of(phydev, of_node,
841 				    MII_KSZPHY_TX_DATA_PAD_SKEW,
842 				    "txd0-skew-ps", "txd1-skew-ps",
843 				    "txd2-skew-ps", "txd3-skew-ps");
844 	}
845 	return 0;
846 }
847 
848 #define KSZ9031_PS_TO_REG		60
849 
850 /* Extended registers */
851 /* MMD Address 0x0 */
852 #define MII_KSZ9031RN_FLP_BURST_TX_LO	3
853 #define MII_KSZ9031RN_FLP_BURST_TX_HI	4
854 
855 /* MMD Address 0x2 */
856 #define MII_KSZ9031RN_CONTROL_PAD_SKEW	4
857 #define MII_KSZ9031RN_RX_CTL_M		GENMASK(7, 4)
858 #define MII_KSZ9031RN_TX_CTL_M		GENMASK(3, 0)
859 
860 #define MII_KSZ9031RN_RX_DATA_PAD_SKEW	5
861 #define MII_KSZ9031RN_RXD3		GENMASK(15, 12)
862 #define MII_KSZ9031RN_RXD2		GENMASK(11, 8)
863 #define MII_KSZ9031RN_RXD1		GENMASK(7, 4)
864 #define MII_KSZ9031RN_RXD0		GENMASK(3, 0)
865 
866 #define MII_KSZ9031RN_TX_DATA_PAD_SKEW	6
867 #define MII_KSZ9031RN_TXD3		GENMASK(15, 12)
868 #define MII_KSZ9031RN_TXD2		GENMASK(11, 8)
869 #define MII_KSZ9031RN_TXD1		GENMASK(7, 4)
870 #define MII_KSZ9031RN_TXD0		GENMASK(3, 0)
871 
872 #define MII_KSZ9031RN_CLK_PAD_SKEW	8
873 #define MII_KSZ9031RN_GTX_CLK		GENMASK(9, 5)
874 #define MII_KSZ9031RN_RX_CLK		GENMASK(4, 0)
875 
876 /* KSZ9031 has internal RGMII_IDRX = 1.2ns and RGMII_IDTX = 0ns. To
877  * provide different RGMII options we need to configure delay offset
878  * for each pad relative to build in delay.
879  */
880 /* keep rx as "No delay adjustment" and set rx_clk to +0.60ns to get delays of
881  * 1.80ns
882  */
883 #define RX_ID				0x7
884 #define RX_CLK_ID			0x19
885 
886 /* set rx to +0.30ns and rx_clk to -0.90ns to compensate the
887  * internal 1.2ns delay.
888  */
889 #define RX_ND				0xc
890 #define RX_CLK_ND			0x0
891 
892 /* set tx to -0.42ns and tx_clk to +0.96ns to get 1.38ns delay */
893 #define TX_ID				0x0
894 #define TX_CLK_ID			0x1f
895 
896 /* set tx and tx_clk to "No delay adjustment" to keep 0ns
897  * dealy
898  */
899 #define TX_ND				0x7
900 #define TX_CLK_ND			0xf
901 
902 /* MMD Address 0x1C */
903 #define MII_KSZ9031RN_EDPD		0x23
904 #define MII_KSZ9031RN_EDPD_ENABLE	BIT(0)
905 
906 static int ksz9031_of_load_skew_values(struct phy_device *phydev,
907 				       const struct device_node *of_node,
908 				       u16 reg, size_t field_sz,
909 				       const char *field[], u8 numfields,
910 				       bool *update)
911 {
912 	int val[4] = {-1, -2, -3, -4};
913 	int matches = 0;
914 	u16 mask;
915 	u16 maxval;
916 	u16 newval;
917 	int i;
918 
919 	for (i = 0; i < numfields; i++)
920 		if (!of_property_read_u32(of_node, field[i], val + i))
921 			matches++;
922 
923 	if (!matches)
924 		return 0;
925 
926 	*update |= true;
927 
928 	if (matches < numfields)
929 		newval = phy_read_mmd(phydev, 2, reg);
930 	else
931 		newval = 0;
932 
933 	maxval = (field_sz == 4) ? 0xf : 0x1f;
934 	for (i = 0; i < numfields; i++)
935 		if (val[i] != -(i + 1)) {
936 			mask = 0xffff;
937 			mask ^= maxval << (field_sz * i);
938 			newval = (newval & mask) |
939 				(((val[i] / KSZ9031_PS_TO_REG) & maxval)
940 					<< (field_sz * i));
941 		}
942 
943 	return phy_write_mmd(phydev, 2, reg, newval);
944 }
945 
946 /* Center KSZ9031RNX FLP timing at 16ms. */
947 static int ksz9031_center_flp_timing(struct phy_device *phydev)
948 {
949 	int result;
950 
951 	result = phy_write_mmd(phydev, 0, MII_KSZ9031RN_FLP_BURST_TX_HI,
952 			       0x0006);
953 	if (result)
954 		return result;
955 
956 	result = phy_write_mmd(phydev, 0, MII_KSZ9031RN_FLP_BURST_TX_LO,
957 			       0x1A80);
958 	if (result)
959 		return result;
960 
961 	return genphy_restart_aneg(phydev);
962 }
963 
964 /* Enable energy-detect power-down mode */
965 static int ksz9031_enable_edpd(struct phy_device *phydev)
966 {
967 	int reg;
968 
969 	reg = phy_read_mmd(phydev, 0x1C, MII_KSZ9031RN_EDPD);
970 	if (reg < 0)
971 		return reg;
972 	return phy_write_mmd(phydev, 0x1C, MII_KSZ9031RN_EDPD,
973 			     reg | MII_KSZ9031RN_EDPD_ENABLE);
974 }
975 
976 static int ksz9031_config_rgmii_delay(struct phy_device *phydev)
977 {
978 	u16 rx, tx, rx_clk, tx_clk;
979 	int ret;
980 
981 	switch (phydev->interface) {
982 	case PHY_INTERFACE_MODE_RGMII:
983 		tx = TX_ND;
984 		tx_clk = TX_CLK_ND;
985 		rx = RX_ND;
986 		rx_clk = RX_CLK_ND;
987 		break;
988 	case PHY_INTERFACE_MODE_RGMII_ID:
989 		tx = TX_ID;
990 		tx_clk = TX_CLK_ID;
991 		rx = RX_ID;
992 		rx_clk = RX_CLK_ID;
993 		break;
994 	case PHY_INTERFACE_MODE_RGMII_RXID:
995 		tx = TX_ND;
996 		tx_clk = TX_CLK_ND;
997 		rx = RX_ID;
998 		rx_clk = RX_CLK_ID;
999 		break;
1000 	case PHY_INTERFACE_MODE_RGMII_TXID:
1001 		tx = TX_ID;
1002 		tx_clk = TX_CLK_ID;
1003 		rx = RX_ND;
1004 		rx_clk = RX_CLK_ND;
1005 		break;
1006 	default:
1007 		return 0;
1008 	}
1009 
1010 	ret = phy_write_mmd(phydev, 2, MII_KSZ9031RN_CONTROL_PAD_SKEW,
1011 			    FIELD_PREP(MII_KSZ9031RN_RX_CTL_M, rx) |
1012 			    FIELD_PREP(MII_KSZ9031RN_TX_CTL_M, tx));
1013 	if (ret < 0)
1014 		return ret;
1015 
1016 	ret = phy_write_mmd(phydev, 2, MII_KSZ9031RN_RX_DATA_PAD_SKEW,
1017 			    FIELD_PREP(MII_KSZ9031RN_RXD3, rx) |
1018 			    FIELD_PREP(MII_KSZ9031RN_RXD2, rx) |
1019 			    FIELD_PREP(MII_KSZ9031RN_RXD1, rx) |
1020 			    FIELD_PREP(MII_KSZ9031RN_RXD0, rx));
1021 	if (ret < 0)
1022 		return ret;
1023 
1024 	ret = phy_write_mmd(phydev, 2, MII_KSZ9031RN_TX_DATA_PAD_SKEW,
1025 			    FIELD_PREP(MII_KSZ9031RN_TXD3, tx) |
1026 			    FIELD_PREP(MII_KSZ9031RN_TXD2, tx) |
1027 			    FIELD_PREP(MII_KSZ9031RN_TXD1, tx) |
1028 			    FIELD_PREP(MII_KSZ9031RN_TXD0, tx));
1029 	if (ret < 0)
1030 		return ret;
1031 
1032 	return phy_write_mmd(phydev, 2, MII_KSZ9031RN_CLK_PAD_SKEW,
1033 			     FIELD_PREP(MII_KSZ9031RN_GTX_CLK, tx_clk) |
1034 			     FIELD_PREP(MII_KSZ9031RN_RX_CLK, rx_clk));
1035 }
1036 
1037 static int ksz9031_config_init(struct phy_device *phydev)
1038 {
1039 	const struct device_node *of_node;
1040 	static const char *clk_skews[2] = {"rxc-skew-ps", "txc-skew-ps"};
1041 	static const char *rx_data_skews[4] = {
1042 		"rxd0-skew-ps", "rxd1-skew-ps",
1043 		"rxd2-skew-ps", "rxd3-skew-ps"
1044 	};
1045 	static const char *tx_data_skews[4] = {
1046 		"txd0-skew-ps", "txd1-skew-ps",
1047 		"txd2-skew-ps", "txd3-skew-ps"
1048 	};
1049 	static const char *control_skews[2] = {"txen-skew-ps", "rxdv-skew-ps"};
1050 	const struct device *dev_walker;
1051 	int result;
1052 
1053 	result = ksz9031_enable_edpd(phydev);
1054 	if (result < 0)
1055 		return result;
1056 
1057 	/* The Micrel driver has a deprecated option to place phy OF
1058 	 * properties in the MAC node. Walk up the tree of devices to
1059 	 * find a device with an OF node.
1060 	 */
1061 	dev_walker = &phydev->mdio.dev;
1062 	do {
1063 		of_node = dev_walker->of_node;
1064 		dev_walker = dev_walker->parent;
1065 	} while (!of_node && dev_walker);
1066 
1067 	if (of_node) {
1068 		bool update = false;
1069 
1070 		if (phy_interface_is_rgmii(phydev)) {
1071 			result = ksz9031_config_rgmii_delay(phydev);
1072 			if (result < 0)
1073 				return result;
1074 		}
1075 
1076 		ksz9031_of_load_skew_values(phydev, of_node,
1077 				MII_KSZ9031RN_CLK_PAD_SKEW, 5,
1078 				clk_skews, 2, &update);
1079 
1080 		ksz9031_of_load_skew_values(phydev, of_node,
1081 				MII_KSZ9031RN_CONTROL_PAD_SKEW, 4,
1082 				control_skews, 2, &update);
1083 
1084 		ksz9031_of_load_skew_values(phydev, of_node,
1085 				MII_KSZ9031RN_RX_DATA_PAD_SKEW, 4,
1086 				rx_data_skews, 4, &update);
1087 
1088 		ksz9031_of_load_skew_values(phydev, of_node,
1089 				MII_KSZ9031RN_TX_DATA_PAD_SKEW, 4,
1090 				tx_data_skews, 4, &update);
1091 
1092 		if (update && !phy_interface_is_rgmii(phydev))
1093 			phydev_warn(phydev,
1094 				    "*-skew-ps values should be used only with RGMII PHY modes\n");
1095 
1096 		/* Silicon Errata Sheet (DS80000691D or DS80000692D):
1097 		 * When the device links in the 1000BASE-T slave mode only,
1098 		 * the optional 125MHz reference output clock (CLK125_NDO)
1099 		 * has wide duty cycle variation.
1100 		 *
1101 		 * The optional CLK125_NDO clock does not meet the RGMII
1102 		 * 45/55 percent (min/max) duty cycle requirement and therefore
1103 		 * cannot be used directly by the MAC side for clocking
1104 		 * applications that have setup/hold time requirements on
1105 		 * rising and falling clock edges.
1106 		 *
1107 		 * Workaround:
1108 		 * Force the phy to be the master to receive a stable clock
1109 		 * which meets the duty cycle requirement.
1110 		 */
1111 		if (of_property_read_bool(of_node, "micrel,force-master")) {
1112 			result = phy_read(phydev, MII_CTRL1000);
1113 			if (result < 0)
1114 				goto err_force_master;
1115 
1116 			/* enable master mode, config & prefer master */
1117 			result |= CTL1000_ENABLE_MASTER | CTL1000_AS_MASTER;
1118 			result = phy_write(phydev, MII_CTRL1000, result);
1119 			if (result < 0)
1120 				goto err_force_master;
1121 		}
1122 	}
1123 
1124 	return ksz9031_center_flp_timing(phydev);
1125 
1126 err_force_master:
1127 	phydev_err(phydev, "failed to force the phy to master mode\n");
1128 	return result;
1129 }
1130 
1131 #define KSZ9131_SKEW_5BIT_MAX	2400
1132 #define KSZ9131_SKEW_4BIT_MAX	800
1133 #define KSZ9131_OFFSET		700
1134 #define KSZ9131_STEP		100
1135 
1136 static int ksz9131_of_load_skew_values(struct phy_device *phydev,
1137 				       struct device_node *of_node,
1138 				       u16 reg, size_t field_sz,
1139 				       char *field[], u8 numfields)
1140 {
1141 	int val[4] = {-(1 + KSZ9131_OFFSET), -(2 + KSZ9131_OFFSET),
1142 		      -(3 + KSZ9131_OFFSET), -(4 + KSZ9131_OFFSET)};
1143 	int skewval, skewmax = 0;
1144 	int matches = 0;
1145 	u16 maxval;
1146 	u16 newval;
1147 	u16 mask;
1148 	int i;
1149 
1150 	/* psec properties in dts should mean x pico seconds */
1151 	if (field_sz == 5)
1152 		skewmax = KSZ9131_SKEW_5BIT_MAX;
1153 	else
1154 		skewmax = KSZ9131_SKEW_4BIT_MAX;
1155 
1156 	for (i = 0; i < numfields; i++)
1157 		if (!of_property_read_s32(of_node, field[i], &skewval)) {
1158 			if (skewval < -KSZ9131_OFFSET)
1159 				skewval = -KSZ9131_OFFSET;
1160 			else if (skewval > skewmax)
1161 				skewval = skewmax;
1162 
1163 			val[i] = skewval + KSZ9131_OFFSET;
1164 			matches++;
1165 		}
1166 
1167 	if (!matches)
1168 		return 0;
1169 
1170 	if (matches < numfields)
1171 		newval = phy_read_mmd(phydev, 2, reg);
1172 	else
1173 		newval = 0;
1174 
1175 	maxval = (field_sz == 4) ? 0xf : 0x1f;
1176 	for (i = 0; i < numfields; i++)
1177 		if (val[i] != -(i + 1 + KSZ9131_OFFSET)) {
1178 			mask = 0xffff;
1179 			mask ^= maxval << (field_sz * i);
1180 			newval = (newval & mask) |
1181 				(((val[i] / KSZ9131_STEP) & maxval)
1182 					<< (field_sz * i));
1183 		}
1184 
1185 	return phy_write_mmd(phydev, 2, reg, newval);
1186 }
1187 
1188 #define KSZ9131RN_MMD_COMMON_CTRL_REG	2
1189 #define KSZ9131RN_RXC_DLL_CTRL		76
1190 #define KSZ9131RN_TXC_DLL_CTRL		77
1191 #define KSZ9131RN_DLL_ENABLE_DELAY	0
1192 
1193 static int ksz9131_config_rgmii_delay(struct phy_device *phydev)
1194 {
1195 	const struct kszphy_type *type = phydev->drv->driver_data;
1196 	u16 rxcdll_val, txcdll_val;
1197 	int ret;
1198 
1199 	switch (phydev->interface) {
1200 	case PHY_INTERFACE_MODE_RGMII:
1201 		rxcdll_val = type->disable_dll_rx_bit;
1202 		txcdll_val = type->disable_dll_tx_bit;
1203 		break;
1204 	case PHY_INTERFACE_MODE_RGMII_ID:
1205 		rxcdll_val = KSZ9131RN_DLL_ENABLE_DELAY;
1206 		txcdll_val = KSZ9131RN_DLL_ENABLE_DELAY;
1207 		break;
1208 	case PHY_INTERFACE_MODE_RGMII_RXID:
1209 		rxcdll_val = KSZ9131RN_DLL_ENABLE_DELAY;
1210 		txcdll_val = type->disable_dll_tx_bit;
1211 		break;
1212 	case PHY_INTERFACE_MODE_RGMII_TXID:
1213 		rxcdll_val = type->disable_dll_rx_bit;
1214 		txcdll_val = KSZ9131RN_DLL_ENABLE_DELAY;
1215 		break;
1216 	default:
1217 		return 0;
1218 	}
1219 
1220 	ret = phy_modify_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
1221 			     KSZ9131RN_RXC_DLL_CTRL, type->disable_dll_mask,
1222 			     rxcdll_val);
1223 	if (ret < 0)
1224 		return ret;
1225 
1226 	return phy_modify_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
1227 			      KSZ9131RN_TXC_DLL_CTRL, type->disable_dll_mask,
1228 			      txcdll_val);
1229 }
1230 
1231 /* Silicon Errata DS80000693B
1232  *
1233  * When LEDs are configured in Individual Mode, LED1 is ON in a no-link
1234  * condition. Workaround is to set register 0x1e, bit 9, this way LED1 behaves
1235  * according to the datasheet (off if there is no link).
1236  */
1237 static int ksz9131_led_errata(struct phy_device *phydev)
1238 {
1239 	int reg;
1240 
1241 	reg = phy_read_mmd(phydev, 2, 0);
1242 	if (reg < 0)
1243 		return reg;
1244 
1245 	if (!(reg & BIT(4)))
1246 		return 0;
1247 
1248 	return phy_set_bits(phydev, 0x1e, BIT(9));
1249 }
1250 
1251 static int ksz9131_config_init(struct phy_device *phydev)
1252 {
1253 	struct device_node *of_node;
1254 	char *clk_skews[2] = {"rxc-skew-psec", "txc-skew-psec"};
1255 	char *rx_data_skews[4] = {
1256 		"rxd0-skew-psec", "rxd1-skew-psec",
1257 		"rxd2-skew-psec", "rxd3-skew-psec"
1258 	};
1259 	char *tx_data_skews[4] = {
1260 		"txd0-skew-psec", "txd1-skew-psec",
1261 		"txd2-skew-psec", "txd3-skew-psec"
1262 	};
1263 	char *control_skews[2] = {"txen-skew-psec", "rxdv-skew-psec"};
1264 	const struct device *dev_walker;
1265 	int ret;
1266 
1267 	dev_walker = &phydev->mdio.dev;
1268 	do {
1269 		of_node = dev_walker->of_node;
1270 		dev_walker = dev_walker->parent;
1271 	} while (!of_node && dev_walker);
1272 
1273 	if (!of_node)
1274 		return 0;
1275 
1276 	if (phy_interface_is_rgmii(phydev)) {
1277 		ret = ksz9131_config_rgmii_delay(phydev);
1278 		if (ret < 0)
1279 			return ret;
1280 	}
1281 
1282 	ret = ksz9131_of_load_skew_values(phydev, of_node,
1283 					  MII_KSZ9031RN_CLK_PAD_SKEW, 5,
1284 					  clk_skews, 2);
1285 	if (ret < 0)
1286 		return ret;
1287 
1288 	ret = ksz9131_of_load_skew_values(phydev, of_node,
1289 					  MII_KSZ9031RN_CONTROL_PAD_SKEW, 4,
1290 					  control_skews, 2);
1291 	if (ret < 0)
1292 		return ret;
1293 
1294 	ret = ksz9131_of_load_skew_values(phydev, of_node,
1295 					  MII_KSZ9031RN_RX_DATA_PAD_SKEW, 4,
1296 					  rx_data_skews, 4);
1297 	if (ret < 0)
1298 		return ret;
1299 
1300 	ret = ksz9131_of_load_skew_values(phydev, of_node,
1301 					  MII_KSZ9031RN_TX_DATA_PAD_SKEW, 4,
1302 					  tx_data_skews, 4);
1303 	if (ret < 0)
1304 		return ret;
1305 
1306 	ret = ksz9131_led_errata(phydev);
1307 	if (ret < 0)
1308 		return ret;
1309 
1310 	return 0;
1311 }
1312 
1313 #define MII_KSZ9131_AUTO_MDIX		0x1C
1314 #define MII_KSZ9131_AUTO_MDI_SET	BIT(7)
1315 #define MII_KSZ9131_AUTO_MDIX_SWAP_OFF	BIT(6)
1316 
1317 static int ksz9131_mdix_update(struct phy_device *phydev)
1318 {
1319 	int ret;
1320 
1321 	ret = phy_read(phydev, MII_KSZ9131_AUTO_MDIX);
1322 	if (ret < 0)
1323 		return ret;
1324 
1325 	if (ret & MII_KSZ9131_AUTO_MDIX_SWAP_OFF) {
1326 		if (ret & MII_KSZ9131_AUTO_MDI_SET)
1327 			phydev->mdix_ctrl = ETH_TP_MDI;
1328 		else
1329 			phydev->mdix_ctrl = ETH_TP_MDI_X;
1330 	} else {
1331 		phydev->mdix_ctrl = ETH_TP_MDI_AUTO;
1332 	}
1333 
1334 	if (ret & MII_KSZ9131_AUTO_MDI_SET)
1335 		phydev->mdix = ETH_TP_MDI;
1336 	else
1337 		phydev->mdix = ETH_TP_MDI_X;
1338 
1339 	return 0;
1340 }
1341 
1342 static int ksz9131_config_mdix(struct phy_device *phydev, u8 ctrl)
1343 {
1344 	u16 val;
1345 
1346 	switch (ctrl) {
1347 	case ETH_TP_MDI:
1348 		val = MII_KSZ9131_AUTO_MDIX_SWAP_OFF |
1349 		      MII_KSZ9131_AUTO_MDI_SET;
1350 		break;
1351 	case ETH_TP_MDI_X:
1352 		val = MII_KSZ9131_AUTO_MDIX_SWAP_OFF;
1353 		break;
1354 	case ETH_TP_MDI_AUTO:
1355 		val = 0;
1356 		break;
1357 	default:
1358 		return 0;
1359 	}
1360 
1361 	return phy_modify(phydev, MII_KSZ9131_AUTO_MDIX,
1362 			  MII_KSZ9131_AUTO_MDIX_SWAP_OFF |
1363 			  MII_KSZ9131_AUTO_MDI_SET, val);
1364 }
1365 
1366 static int ksz9131_read_status(struct phy_device *phydev)
1367 {
1368 	int ret;
1369 
1370 	ret = ksz9131_mdix_update(phydev);
1371 	if (ret < 0)
1372 		return ret;
1373 
1374 	return genphy_read_status(phydev);
1375 }
1376 
1377 static int ksz9131_config_aneg(struct phy_device *phydev)
1378 {
1379 	int ret;
1380 
1381 	ret = ksz9131_config_mdix(phydev, phydev->mdix_ctrl);
1382 	if (ret)
1383 		return ret;
1384 
1385 	return genphy_config_aneg(phydev);
1386 }
1387 
1388 #define KSZ8873MLL_GLOBAL_CONTROL_4	0x06
1389 #define KSZ8873MLL_GLOBAL_CONTROL_4_DUPLEX	BIT(6)
1390 #define KSZ8873MLL_GLOBAL_CONTROL_4_SPEED	BIT(4)
1391 static int ksz8873mll_read_status(struct phy_device *phydev)
1392 {
1393 	int regval;
1394 
1395 	/* dummy read */
1396 	regval = phy_read(phydev, KSZ8873MLL_GLOBAL_CONTROL_4);
1397 
1398 	regval = phy_read(phydev, KSZ8873MLL_GLOBAL_CONTROL_4);
1399 
1400 	if (regval & KSZ8873MLL_GLOBAL_CONTROL_4_DUPLEX)
1401 		phydev->duplex = DUPLEX_HALF;
1402 	else
1403 		phydev->duplex = DUPLEX_FULL;
1404 
1405 	if (regval & KSZ8873MLL_GLOBAL_CONTROL_4_SPEED)
1406 		phydev->speed = SPEED_10;
1407 	else
1408 		phydev->speed = SPEED_100;
1409 
1410 	phydev->link = 1;
1411 	phydev->pause = phydev->asym_pause = 0;
1412 
1413 	return 0;
1414 }
1415 
1416 static int ksz9031_get_features(struct phy_device *phydev)
1417 {
1418 	int ret;
1419 
1420 	ret = genphy_read_abilities(phydev);
1421 	if (ret < 0)
1422 		return ret;
1423 
1424 	/* Silicon Errata Sheet (DS80000691D or DS80000692D):
1425 	 * Whenever the device's Asymmetric Pause capability is set to 1,
1426 	 * link-up may fail after a link-up to link-down transition.
1427 	 *
1428 	 * The Errata Sheet is for ksz9031, but ksz9021 has the same issue
1429 	 *
1430 	 * Workaround:
1431 	 * Do not enable the Asymmetric Pause capability bit.
1432 	 */
1433 	linkmode_clear_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, phydev->supported);
1434 
1435 	/* We force setting the Pause capability as the core will force the
1436 	 * Asymmetric Pause capability to 1 otherwise.
1437 	 */
1438 	linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT, phydev->supported);
1439 
1440 	return 0;
1441 }
1442 
1443 static int ksz9031_read_status(struct phy_device *phydev)
1444 {
1445 	int err;
1446 	int regval;
1447 
1448 	err = genphy_read_status(phydev);
1449 	if (err)
1450 		return err;
1451 
1452 	/* Make sure the PHY is not broken. Read idle error count,
1453 	 * and reset the PHY if it is maxed out.
1454 	 */
1455 	regval = phy_read(phydev, MII_STAT1000);
1456 	if ((regval & 0xFF) == 0xFF) {
1457 		phy_init_hw(phydev);
1458 		phydev->link = 0;
1459 		if (phydev->drv->config_intr && phy_interrupt_is_valid(phydev))
1460 			phydev->drv->config_intr(phydev);
1461 		return genphy_config_aneg(phydev);
1462 	}
1463 
1464 	return 0;
1465 }
1466 
1467 static int ksz9x31_cable_test_start(struct phy_device *phydev)
1468 {
1469 	struct kszphy_priv *priv = phydev->priv;
1470 	int ret;
1471 
1472 	/* KSZ9131RNX, DS00002841B-page 38, 4.14 LinkMD (R) Cable Diagnostic
1473 	 * Prior to running the cable diagnostics, Auto-negotiation should
1474 	 * be disabled, full duplex set and the link speed set to 1000Mbps
1475 	 * via the Basic Control Register.
1476 	 */
1477 	ret = phy_modify(phydev, MII_BMCR,
1478 			 BMCR_SPEED1000 | BMCR_FULLDPLX |
1479 			 BMCR_ANENABLE | BMCR_SPEED100,
1480 			 BMCR_SPEED1000 | BMCR_FULLDPLX);
1481 	if (ret)
1482 		return ret;
1483 
1484 	/* KSZ9131RNX, DS00002841B-page 38, 4.14 LinkMD (R) Cable Diagnostic
1485 	 * The Master-Slave configuration should be set to Slave by writing
1486 	 * a value of 0x1000 to the Auto-Negotiation Master Slave Control
1487 	 * Register.
1488 	 */
1489 	ret = phy_read(phydev, MII_CTRL1000);
1490 	if (ret < 0)
1491 		return ret;
1492 
1493 	/* Cache these bits, they need to be restored once LinkMD finishes. */
1494 	priv->vct_ctrl1000 = ret & (CTL1000_ENABLE_MASTER | CTL1000_AS_MASTER);
1495 	ret &= ~(CTL1000_ENABLE_MASTER | CTL1000_AS_MASTER);
1496 	ret |= CTL1000_ENABLE_MASTER;
1497 
1498 	return phy_write(phydev, MII_CTRL1000, ret);
1499 }
1500 
1501 static int ksz9x31_cable_test_result_trans(u16 status)
1502 {
1503 	switch (FIELD_GET(KSZ9x31_LMD_VCT_ST_MASK, status)) {
1504 	case KSZ9x31_LMD_VCT_ST_NORMAL:
1505 		return ETHTOOL_A_CABLE_RESULT_CODE_OK;
1506 	case KSZ9x31_LMD_VCT_ST_OPEN:
1507 		return ETHTOOL_A_CABLE_RESULT_CODE_OPEN;
1508 	case KSZ9x31_LMD_VCT_ST_SHORT:
1509 		return ETHTOOL_A_CABLE_RESULT_CODE_SAME_SHORT;
1510 	case KSZ9x31_LMD_VCT_ST_FAIL:
1511 		fallthrough;
1512 	default:
1513 		return ETHTOOL_A_CABLE_RESULT_CODE_UNSPEC;
1514 	}
1515 }
1516 
1517 static bool ksz9x31_cable_test_failed(u16 status)
1518 {
1519 	int stat = FIELD_GET(KSZ9x31_LMD_VCT_ST_MASK, status);
1520 
1521 	return stat == KSZ9x31_LMD_VCT_ST_FAIL;
1522 }
1523 
1524 static bool ksz9x31_cable_test_fault_length_valid(u16 status)
1525 {
1526 	switch (FIELD_GET(KSZ9x31_LMD_VCT_ST_MASK, status)) {
1527 	case KSZ9x31_LMD_VCT_ST_OPEN:
1528 		fallthrough;
1529 	case KSZ9x31_LMD_VCT_ST_SHORT:
1530 		return true;
1531 	}
1532 	return false;
1533 }
1534 
1535 static int ksz9x31_cable_test_fault_length(struct phy_device *phydev, u16 stat)
1536 {
1537 	int dt = FIELD_GET(KSZ9x31_LMD_VCT_DATA_MASK, stat);
1538 
1539 	/* KSZ9131RNX, DS00002841B-page 38, 4.14 LinkMD (R) Cable Diagnostic
1540 	 *
1541 	 * distance to fault = (VCT_DATA - 22) * 4 / cable propagation velocity
1542 	 */
1543 	if ((phydev->phy_id & MICREL_PHY_ID_MASK) == PHY_ID_KSZ9131)
1544 		dt = clamp(dt - 22, 0, 255);
1545 
1546 	return (dt * 400) / 10;
1547 }
1548 
1549 static int ksz9x31_cable_test_wait_for_completion(struct phy_device *phydev)
1550 {
1551 	int val, ret;
1552 
1553 	ret = phy_read_poll_timeout(phydev, KSZ9x31_LMD, val,
1554 				    !(val & KSZ9x31_LMD_VCT_EN),
1555 				    30000, 100000, true);
1556 
1557 	return ret < 0 ? ret : 0;
1558 }
1559 
1560 static int ksz9x31_cable_test_get_pair(int pair)
1561 {
1562 	static const int ethtool_pair[] = {
1563 		ETHTOOL_A_CABLE_PAIR_A,
1564 		ETHTOOL_A_CABLE_PAIR_B,
1565 		ETHTOOL_A_CABLE_PAIR_C,
1566 		ETHTOOL_A_CABLE_PAIR_D,
1567 	};
1568 
1569 	return ethtool_pair[pair];
1570 }
1571 
1572 static int ksz9x31_cable_test_one_pair(struct phy_device *phydev, int pair)
1573 {
1574 	int ret, val;
1575 
1576 	/* KSZ9131RNX, DS00002841B-page 38, 4.14 LinkMD (R) Cable Diagnostic
1577 	 * To test each individual cable pair, set the cable pair in the Cable
1578 	 * Diagnostics Test Pair (VCT_PAIR[1:0]) field of the LinkMD Cable
1579 	 * Diagnostic Register, along with setting the Cable Diagnostics Test
1580 	 * Enable (VCT_EN) bit. The Cable Diagnostics Test Enable (VCT_EN) bit
1581 	 * will self clear when the test is concluded.
1582 	 */
1583 	ret = phy_write(phydev, KSZ9x31_LMD,
1584 			KSZ9x31_LMD_VCT_EN | KSZ9x31_LMD_VCT_PAIR(pair));
1585 	if (ret)
1586 		return ret;
1587 
1588 	ret = ksz9x31_cable_test_wait_for_completion(phydev);
1589 	if (ret)
1590 		return ret;
1591 
1592 	val = phy_read(phydev, KSZ9x31_LMD);
1593 	if (val < 0)
1594 		return val;
1595 
1596 	if (ksz9x31_cable_test_failed(val))
1597 		return -EAGAIN;
1598 
1599 	ret = ethnl_cable_test_result(phydev,
1600 				      ksz9x31_cable_test_get_pair(pair),
1601 				      ksz9x31_cable_test_result_trans(val));
1602 	if (ret)
1603 		return ret;
1604 
1605 	if (!ksz9x31_cable_test_fault_length_valid(val))
1606 		return 0;
1607 
1608 	return ethnl_cable_test_fault_length(phydev,
1609 					     ksz9x31_cable_test_get_pair(pair),
1610 					     ksz9x31_cable_test_fault_length(phydev, val));
1611 }
1612 
1613 static int ksz9x31_cable_test_get_status(struct phy_device *phydev,
1614 					 bool *finished)
1615 {
1616 	struct kszphy_priv *priv = phydev->priv;
1617 	unsigned long pair_mask = 0xf;
1618 	int retries = 20;
1619 	int pair, ret, rv;
1620 
1621 	*finished = false;
1622 
1623 	/* Try harder if link partner is active */
1624 	while (pair_mask && retries--) {
1625 		for_each_set_bit(pair, &pair_mask, 4) {
1626 			ret = ksz9x31_cable_test_one_pair(phydev, pair);
1627 			if (ret == -EAGAIN)
1628 				continue;
1629 			if (ret < 0)
1630 				return ret;
1631 			clear_bit(pair, &pair_mask);
1632 		}
1633 		/* If link partner is in autonegotiation mode it will send 2ms
1634 		 * of FLPs with at least 6ms of silence.
1635 		 * Add 2ms sleep to have better chances to hit this silence.
1636 		 */
1637 		if (pair_mask)
1638 			usleep_range(2000, 3000);
1639 	}
1640 
1641 	/* Report remaining unfinished pair result as unknown. */
1642 	for_each_set_bit(pair, &pair_mask, 4) {
1643 		ret = ethnl_cable_test_result(phydev,
1644 					      ksz9x31_cable_test_get_pair(pair),
1645 					      ETHTOOL_A_CABLE_RESULT_CODE_UNSPEC);
1646 	}
1647 
1648 	*finished = true;
1649 
1650 	/* Restore cached bits from before LinkMD got started. */
1651 	rv = phy_modify(phydev, MII_CTRL1000,
1652 			CTL1000_ENABLE_MASTER | CTL1000_AS_MASTER,
1653 			priv->vct_ctrl1000);
1654 	if (rv)
1655 		return rv;
1656 
1657 	return ret;
1658 }
1659 
1660 static int ksz8873mll_config_aneg(struct phy_device *phydev)
1661 {
1662 	return 0;
1663 }
1664 
1665 static int ksz886x_config_mdix(struct phy_device *phydev, u8 ctrl)
1666 {
1667 	u16 val;
1668 
1669 	switch (ctrl) {
1670 	case ETH_TP_MDI:
1671 		val = KSZ886X_BMCR_DISABLE_AUTO_MDIX;
1672 		break;
1673 	case ETH_TP_MDI_X:
1674 		/* Note: The naming of the bit KSZ886X_BMCR_FORCE_MDI is bit
1675 		 * counter intuitive, the "-X" in "1 = Force MDI" in the data
1676 		 * sheet seems to be missing:
1677 		 * 1 = Force MDI (sic!) (transmit on RX+/RX- pins)
1678 		 * 0 = Normal operation (transmit on TX+/TX- pins)
1679 		 */
1680 		val = KSZ886X_BMCR_DISABLE_AUTO_MDIX | KSZ886X_BMCR_FORCE_MDI;
1681 		break;
1682 	case ETH_TP_MDI_AUTO:
1683 		val = 0;
1684 		break;
1685 	default:
1686 		return 0;
1687 	}
1688 
1689 	return phy_modify(phydev, MII_BMCR,
1690 			  KSZ886X_BMCR_HP_MDIX | KSZ886X_BMCR_FORCE_MDI |
1691 			  KSZ886X_BMCR_DISABLE_AUTO_MDIX,
1692 			  KSZ886X_BMCR_HP_MDIX | val);
1693 }
1694 
1695 static int ksz886x_config_aneg(struct phy_device *phydev)
1696 {
1697 	int ret;
1698 
1699 	ret = genphy_config_aneg(phydev);
1700 	if (ret)
1701 		return ret;
1702 
1703 	/* The MDI-X configuration is automatically changed by the PHY after
1704 	 * switching from autoneg off to on. So, take MDI-X configuration under
1705 	 * own control and set it after autoneg configuration was done.
1706 	 */
1707 	return ksz886x_config_mdix(phydev, phydev->mdix_ctrl);
1708 }
1709 
1710 static int ksz886x_mdix_update(struct phy_device *phydev)
1711 {
1712 	int ret;
1713 
1714 	ret = phy_read(phydev, MII_BMCR);
1715 	if (ret < 0)
1716 		return ret;
1717 
1718 	if (ret & KSZ886X_BMCR_DISABLE_AUTO_MDIX) {
1719 		if (ret & KSZ886X_BMCR_FORCE_MDI)
1720 			phydev->mdix_ctrl = ETH_TP_MDI_X;
1721 		else
1722 			phydev->mdix_ctrl = ETH_TP_MDI;
1723 	} else {
1724 		phydev->mdix_ctrl = ETH_TP_MDI_AUTO;
1725 	}
1726 
1727 	ret = phy_read(phydev, MII_KSZPHY_CTRL);
1728 	if (ret < 0)
1729 		return ret;
1730 
1731 	/* Same reverse logic as KSZ886X_BMCR_FORCE_MDI */
1732 	if (ret & KSZ886X_CTRL_MDIX_STAT)
1733 		phydev->mdix = ETH_TP_MDI_X;
1734 	else
1735 		phydev->mdix = ETH_TP_MDI;
1736 
1737 	return 0;
1738 }
1739 
1740 static int ksz886x_read_status(struct phy_device *phydev)
1741 {
1742 	int ret;
1743 
1744 	ret = ksz886x_mdix_update(phydev);
1745 	if (ret < 0)
1746 		return ret;
1747 
1748 	return genphy_read_status(phydev);
1749 }
1750 
1751 static int kszphy_get_sset_count(struct phy_device *phydev)
1752 {
1753 	return ARRAY_SIZE(kszphy_hw_stats);
1754 }
1755 
1756 static void kszphy_get_strings(struct phy_device *phydev, u8 *data)
1757 {
1758 	int i;
1759 
1760 	for (i = 0; i < ARRAY_SIZE(kszphy_hw_stats); i++) {
1761 		strscpy(data + i * ETH_GSTRING_LEN,
1762 			kszphy_hw_stats[i].string, ETH_GSTRING_LEN);
1763 	}
1764 }
1765 
1766 static u64 kszphy_get_stat(struct phy_device *phydev, int i)
1767 {
1768 	struct kszphy_hw_stat stat = kszphy_hw_stats[i];
1769 	struct kszphy_priv *priv = phydev->priv;
1770 	int val;
1771 	u64 ret;
1772 
1773 	val = phy_read(phydev, stat.reg);
1774 	if (val < 0) {
1775 		ret = U64_MAX;
1776 	} else {
1777 		val = val & ((1 << stat.bits) - 1);
1778 		priv->stats[i] += val;
1779 		ret = priv->stats[i];
1780 	}
1781 
1782 	return ret;
1783 }
1784 
1785 static void kszphy_get_stats(struct phy_device *phydev,
1786 			     struct ethtool_stats *stats, u64 *data)
1787 {
1788 	int i;
1789 
1790 	for (i = 0; i < ARRAY_SIZE(kszphy_hw_stats); i++)
1791 		data[i] = kszphy_get_stat(phydev, i);
1792 }
1793 
1794 static int kszphy_suspend(struct phy_device *phydev)
1795 {
1796 	/* Disable PHY Interrupts */
1797 	if (phy_interrupt_is_valid(phydev)) {
1798 		phydev->interrupts = PHY_INTERRUPT_DISABLED;
1799 		if (phydev->drv->config_intr)
1800 			phydev->drv->config_intr(phydev);
1801 	}
1802 
1803 	return genphy_suspend(phydev);
1804 }
1805 
1806 static void kszphy_parse_led_mode(struct phy_device *phydev)
1807 {
1808 	const struct kszphy_type *type = phydev->drv->driver_data;
1809 	const struct device_node *np = phydev->mdio.dev.of_node;
1810 	struct kszphy_priv *priv = phydev->priv;
1811 	int ret;
1812 
1813 	if (type && type->led_mode_reg) {
1814 		ret = of_property_read_u32(np, "micrel,led-mode",
1815 					   &priv->led_mode);
1816 
1817 		if (ret)
1818 			priv->led_mode = -1;
1819 
1820 		if (priv->led_mode > 3) {
1821 			phydev_err(phydev, "invalid led mode: 0x%02x\n",
1822 				   priv->led_mode);
1823 			priv->led_mode = -1;
1824 		}
1825 	} else {
1826 		priv->led_mode = -1;
1827 	}
1828 }
1829 
1830 static int kszphy_resume(struct phy_device *phydev)
1831 {
1832 	int ret;
1833 
1834 	genphy_resume(phydev);
1835 
1836 	/* After switching from power-down to normal mode, an internal global
1837 	 * reset is automatically generated. Wait a minimum of 1 ms before
1838 	 * read/write access to the PHY registers.
1839 	 */
1840 	usleep_range(1000, 2000);
1841 
1842 	ret = kszphy_config_reset(phydev);
1843 	if (ret)
1844 		return ret;
1845 
1846 	/* Enable PHY Interrupts */
1847 	if (phy_interrupt_is_valid(phydev)) {
1848 		phydev->interrupts = PHY_INTERRUPT_ENABLED;
1849 		if (phydev->drv->config_intr)
1850 			phydev->drv->config_intr(phydev);
1851 	}
1852 
1853 	return 0;
1854 }
1855 
1856 static int kszphy_probe(struct phy_device *phydev)
1857 {
1858 	const struct kszphy_type *type = phydev->drv->driver_data;
1859 	const struct device_node *np = phydev->mdio.dev.of_node;
1860 	struct kszphy_priv *priv;
1861 	struct clk *clk;
1862 
1863 	priv = devm_kzalloc(&phydev->mdio.dev, sizeof(*priv), GFP_KERNEL);
1864 	if (!priv)
1865 		return -ENOMEM;
1866 
1867 	phydev->priv = priv;
1868 
1869 	priv->type = type;
1870 
1871 	kszphy_parse_led_mode(phydev);
1872 
1873 	clk = devm_clk_get(&phydev->mdio.dev, "rmii-ref");
1874 	/* NOTE: clk may be NULL if building without CONFIG_HAVE_CLK */
1875 	if (!IS_ERR_OR_NULL(clk)) {
1876 		unsigned long rate = clk_get_rate(clk);
1877 		bool rmii_ref_clk_sel_25_mhz;
1878 
1879 		if (type)
1880 			priv->rmii_ref_clk_sel = type->has_rmii_ref_clk_sel;
1881 		rmii_ref_clk_sel_25_mhz = of_property_read_bool(np,
1882 				"micrel,rmii-reference-clock-select-25-mhz");
1883 
1884 		if (rate > 24500000 && rate < 25500000) {
1885 			priv->rmii_ref_clk_sel_val = rmii_ref_clk_sel_25_mhz;
1886 		} else if (rate > 49500000 && rate < 50500000) {
1887 			priv->rmii_ref_clk_sel_val = !rmii_ref_clk_sel_25_mhz;
1888 		} else {
1889 			phydev_err(phydev, "Clock rate out of range: %ld\n",
1890 				   rate);
1891 			return -EINVAL;
1892 		}
1893 	}
1894 
1895 	if (ksz8041_fiber_mode(phydev))
1896 		phydev->port = PORT_FIBRE;
1897 
1898 	/* Support legacy board-file configuration */
1899 	if (phydev->dev_flags & MICREL_PHY_50MHZ_CLK) {
1900 		priv->rmii_ref_clk_sel = true;
1901 		priv->rmii_ref_clk_sel_val = true;
1902 	}
1903 
1904 	return 0;
1905 }
1906 
1907 static int lan8814_cable_test_start(struct phy_device *phydev)
1908 {
1909 	/* If autoneg is enabled, we won't be able to test cross pair
1910 	 * short. In this case, the PHY will "detect" a link and
1911 	 * confuse the internal state machine - disable auto neg here.
1912 	 * Set the speed to 1000mbit and full duplex.
1913 	 */
1914 	return phy_modify(phydev, MII_BMCR, BMCR_ANENABLE | BMCR_SPEED100,
1915 			  BMCR_SPEED1000 | BMCR_FULLDPLX);
1916 }
1917 
1918 static int ksz886x_cable_test_start(struct phy_device *phydev)
1919 {
1920 	if (phydev->dev_flags & MICREL_KSZ8_P1_ERRATA)
1921 		return -EOPNOTSUPP;
1922 
1923 	/* If autoneg is enabled, we won't be able to test cross pair
1924 	 * short. In this case, the PHY will "detect" a link and
1925 	 * confuse the internal state machine - disable auto neg here.
1926 	 * If autoneg is disabled, we should set the speed to 10mbit.
1927 	 */
1928 	return phy_clear_bits(phydev, MII_BMCR, BMCR_ANENABLE | BMCR_SPEED100);
1929 }
1930 
1931 static __always_inline int ksz886x_cable_test_result_trans(u16 status, u16 mask)
1932 {
1933 	switch (FIELD_GET(mask, status)) {
1934 	case KSZ8081_LMD_STAT_NORMAL:
1935 		return ETHTOOL_A_CABLE_RESULT_CODE_OK;
1936 	case KSZ8081_LMD_STAT_SHORT:
1937 		return ETHTOOL_A_CABLE_RESULT_CODE_SAME_SHORT;
1938 	case KSZ8081_LMD_STAT_OPEN:
1939 		return ETHTOOL_A_CABLE_RESULT_CODE_OPEN;
1940 	case KSZ8081_LMD_STAT_FAIL:
1941 		fallthrough;
1942 	default:
1943 		return ETHTOOL_A_CABLE_RESULT_CODE_UNSPEC;
1944 	}
1945 }
1946 
1947 static __always_inline bool ksz886x_cable_test_failed(u16 status, u16 mask)
1948 {
1949 	return FIELD_GET(mask, status) ==
1950 		KSZ8081_LMD_STAT_FAIL;
1951 }
1952 
1953 static __always_inline bool ksz886x_cable_test_fault_length_valid(u16 status, u16 mask)
1954 {
1955 	switch (FIELD_GET(mask, status)) {
1956 	case KSZ8081_LMD_STAT_OPEN:
1957 		fallthrough;
1958 	case KSZ8081_LMD_STAT_SHORT:
1959 		return true;
1960 	}
1961 	return false;
1962 }
1963 
1964 static __always_inline int ksz886x_cable_test_fault_length(struct phy_device *phydev,
1965 							   u16 status, u16 data_mask)
1966 {
1967 	int dt;
1968 
1969 	/* According to the data sheet the distance to the fault is
1970 	 * DELTA_TIME * 0.4 meters for ksz phys.
1971 	 * (DELTA_TIME - 22) * 0.8 for lan8814 phy.
1972 	 */
1973 	dt = FIELD_GET(data_mask, status);
1974 
1975 	if ((phydev->phy_id & MICREL_PHY_ID_MASK) == PHY_ID_LAN8814)
1976 		return ((dt - 22) * 800) / 10;
1977 	else
1978 		return (dt * 400) / 10;
1979 }
1980 
1981 static int ksz886x_cable_test_wait_for_completion(struct phy_device *phydev)
1982 {
1983 	const struct kszphy_type *type = phydev->drv->driver_data;
1984 	int val, ret;
1985 
1986 	ret = phy_read_poll_timeout(phydev, type->cable_diag_reg, val,
1987 				    !(val & KSZ8081_LMD_ENABLE_TEST),
1988 				    30000, 100000, true);
1989 
1990 	return ret < 0 ? ret : 0;
1991 }
1992 
1993 static int lan8814_cable_test_one_pair(struct phy_device *phydev, int pair)
1994 {
1995 	static const int ethtool_pair[] = { ETHTOOL_A_CABLE_PAIR_A,
1996 					    ETHTOOL_A_CABLE_PAIR_B,
1997 					    ETHTOOL_A_CABLE_PAIR_C,
1998 					    ETHTOOL_A_CABLE_PAIR_D,
1999 					  };
2000 	u32 fault_length;
2001 	int ret;
2002 	int val;
2003 
2004 	val = KSZ8081_LMD_ENABLE_TEST;
2005 	val = val | (pair << LAN8814_PAIR_BIT_SHIFT);
2006 
2007 	ret = phy_write(phydev, LAN8814_CABLE_DIAG, val);
2008 	if (ret < 0)
2009 		return ret;
2010 
2011 	ret = ksz886x_cable_test_wait_for_completion(phydev);
2012 	if (ret)
2013 		return ret;
2014 
2015 	val = phy_read(phydev, LAN8814_CABLE_DIAG);
2016 	if (val < 0)
2017 		return val;
2018 
2019 	if (ksz886x_cable_test_failed(val, LAN8814_CABLE_DIAG_STAT_MASK))
2020 		return -EAGAIN;
2021 
2022 	ret = ethnl_cable_test_result(phydev, ethtool_pair[pair],
2023 				      ksz886x_cable_test_result_trans(val,
2024 								      LAN8814_CABLE_DIAG_STAT_MASK
2025 								      ));
2026 	if (ret)
2027 		return ret;
2028 
2029 	if (!ksz886x_cable_test_fault_length_valid(val, LAN8814_CABLE_DIAG_STAT_MASK))
2030 		return 0;
2031 
2032 	fault_length = ksz886x_cable_test_fault_length(phydev, val,
2033 						       LAN8814_CABLE_DIAG_VCT_DATA_MASK);
2034 
2035 	return ethnl_cable_test_fault_length(phydev, ethtool_pair[pair], fault_length);
2036 }
2037 
2038 static int ksz886x_cable_test_one_pair(struct phy_device *phydev, int pair)
2039 {
2040 	static const int ethtool_pair[] = {
2041 		ETHTOOL_A_CABLE_PAIR_A,
2042 		ETHTOOL_A_CABLE_PAIR_B,
2043 	};
2044 	int ret, val, mdix;
2045 	u32 fault_length;
2046 
2047 	/* There is no way to choice the pair, like we do one ksz9031.
2048 	 * We can workaround this limitation by using the MDI-X functionality.
2049 	 */
2050 	if (pair == 0)
2051 		mdix = ETH_TP_MDI;
2052 	else
2053 		mdix = ETH_TP_MDI_X;
2054 
2055 	switch (phydev->phy_id & MICREL_PHY_ID_MASK) {
2056 	case PHY_ID_KSZ8081:
2057 		ret = ksz8081_config_mdix(phydev, mdix);
2058 		break;
2059 	case PHY_ID_KSZ886X:
2060 		ret = ksz886x_config_mdix(phydev, mdix);
2061 		break;
2062 	default:
2063 		ret = -ENODEV;
2064 	}
2065 
2066 	if (ret)
2067 		return ret;
2068 
2069 	/* Now we are ready to fire. This command will send a 100ns pulse
2070 	 * to the pair.
2071 	 */
2072 	ret = phy_write(phydev, KSZ8081_LMD, KSZ8081_LMD_ENABLE_TEST);
2073 	if (ret)
2074 		return ret;
2075 
2076 	ret = ksz886x_cable_test_wait_for_completion(phydev);
2077 	if (ret)
2078 		return ret;
2079 
2080 	val = phy_read(phydev, KSZ8081_LMD);
2081 	if (val < 0)
2082 		return val;
2083 
2084 	if (ksz886x_cable_test_failed(val, KSZ8081_LMD_STAT_MASK))
2085 		return -EAGAIN;
2086 
2087 	ret = ethnl_cable_test_result(phydev, ethtool_pair[pair],
2088 				      ksz886x_cable_test_result_trans(val, KSZ8081_LMD_STAT_MASK));
2089 	if (ret)
2090 		return ret;
2091 
2092 	if (!ksz886x_cable_test_fault_length_valid(val, KSZ8081_LMD_STAT_MASK))
2093 		return 0;
2094 
2095 	fault_length = ksz886x_cable_test_fault_length(phydev, val, KSZ8081_LMD_DELTA_TIME_MASK);
2096 
2097 	return ethnl_cable_test_fault_length(phydev, ethtool_pair[pair], fault_length);
2098 }
2099 
2100 static int ksz886x_cable_test_get_status(struct phy_device *phydev,
2101 					 bool *finished)
2102 {
2103 	const struct kszphy_type *type = phydev->drv->driver_data;
2104 	unsigned long pair_mask = type->pair_mask;
2105 	int retries = 20;
2106 	int ret = 0;
2107 	int pair;
2108 
2109 	*finished = false;
2110 
2111 	/* Try harder if link partner is active */
2112 	while (pair_mask && retries--) {
2113 		for_each_set_bit(pair, &pair_mask, 4) {
2114 			if (type->cable_diag_reg == LAN8814_CABLE_DIAG)
2115 				ret = lan8814_cable_test_one_pair(phydev, pair);
2116 			else
2117 				ret = ksz886x_cable_test_one_pair(phydev, pair);
2118 			if (ret == -EAGAIN)
2119 				continue;
2120 			if (ret < 0)
2121 				return ret;
2122 			clear_bit(pair, &pair_mask);
2123 		}
2124 		/* If link partner is in autonegotiation mode it will send 2ms
2125 		 * of FLPs with at least 6ms of silence.
2126 		 * Add 2ms sleep to have better chances to hit this silence.
2127 		 */
2128 		if (pair_mask)
2129 			msleep(2);
2130 	}
2131 
2132 	*finished = true;
2133 
2134 	return ret;
2135 }
2136 
2137 #define LAN_EXT_PAGE_ACCESS_CONTROL			0x16
2138 #define LAN_EXT_PAGE_ACCESS_ADDRESS_DATA		0x17
2139 #define LAN_EXT_PAGE_ACCESS_CTRL_EP_FUNC		0x4000
2140 
2141 #define LAN8814_QSGMII_SOFT_RESET			0x43
2142 #define LAN8814_QSGMII_SOFT_RESET_BIT			BIT(0)
2143 #define LAN8814_QSGMII_PCS1G_ANEG_CONFIG		0x13
2144 #define LAN8814_QSGMII_PCS1G_ANEG_CONFIG_ANEG_ENA	BIT(3)
2145 #define LAN8814_ALIGN_SWAP				0x4a
2146 #define LAN8814_ALIGN_TX_A_B_SWAP			0x1
2147 #define LAN8814_ALIGN_TX_A_B_SWAP_MASK			GENMASK(2, 0)
2148 
2149 #define LAN8804_ALIGN_SWAP				0x4a
2150 #define LAN8804_ALIGN_TX_A_B_SWAP			0x1
2151 #define LAN8804_ALIGN_TX_A_B_SWAP_MASK			GENMASK(2, 0)
2152 #define LAN8814_CLOCK_MANAGEMENT			0xd
2153 #define LAN8814_LINK_QUALITY				0x8e
2154 
2155 static int lanphy_read_page_reg(struct phy_device *phydev, int page, u32 addr)
2156 {
2157 	int data;
2158 
2159 	phy_lock_mdio_bus(phydev);
2160 	__phy_write(phydev, LAN_EXT_PAGE_ACCESS_CONTROL, page);
2161 	__phy_write(phydev, LAN_EXT_PAGE_ACCESS_ADDRESS_DATA, addr);
2162 	__phy_write(phydev, LAN_EXT_PAGE_ACCESS_CONTROL,
2163 		    (page | LAN_EXT_PAGE_ACCESS_CTRL_EP_FUNC));
2164 	data = __phy_read(phydev, LAN_EXT_PAGE_ACCESS_ADDRESS_DATA);
2165 	phy_unlock_mdio_bus(phydev);
2166 
2167 	return data;
2168 }
2169 
2170 static int lanphy_write_page_reg(struct phy_device *phydev, int page, u16 addr,
2171 				 u16 val)
2172 {
2173 	phy_lock_mdio_bus(phydev);
2174 	__phy_write(phydev, LAN_EXT_PAGE_ACCESS_CONTROL, page);
2175 	__phy_write(phydev, LAN_EXT_PAGE_ACCESS_ADDRESS_DATA, addr);
2176 	__phy_write(phydev, LAN_EXT_PAGE_ACCESS_CONTROL,
2177 		    page | LAN_EXT_PAGE_ACCESS_CTRL_EP_FUNC);
2178 
2179 	val = __phy_write(phydev, LAN_EXT_PAGE_ACCESS_ADDRESS_DATA, val);
2180 	if (val != 0)
2181 		phydev_err(phydev, "Error: phy_write has returned error %d\n",
2182 			   val);
2183 	phy_unlock_mdio_bus(phydev);
2184 	return val;
2185 }
2186 
2187 static int lan8814_config_ts_intr(struct phy_device *phydev, bool enable)
2188 {
2189 	u16 val = 0;
2190 
2191 	if (enable)
2192 		val = PTP_TSU_INT_EN_PTP_TX_TS_EN_ |
2193 		      PTP_TSU_INT_EN_PTP_TX_TS_OVRFL_EN_ |
2194 		      PTP_TSU_INT_EN_PTP_RX_TS_EN_ |
2195 		      PTP_TSU_INT_EN_PTP_RX_TS_OVRFL_EN_;
2196 
2197 	return lanphy_write_page_reg(phydev, 5, PTP_TSU_INT_EN, val);
2198 }
2199 
2200 static void lan8814_ptp_rx_ts_get(struct phy_device *phydev,
2201 				  u32 *seconds, u32 *nano_seconds, u16 *seq_id)
2202 {
2203 	*seconds = lanphy_read_page_reg(phydev, 5, PTP_RX_INGRESS_SEC_HI);
2204 	*seconds = (*seconds << 16) |
2205 		   lanphy_read_page_reg(phydev, 5, PTP_RX_INGRESS_SEC_LO);
2206 
2207 	*nano_seconds = lanphy_read_page_reg(phydev, 5, PTP_RX_INGRESS_NS_HI);
2208 	*nano_seconds = ((*nano_seconds & 0x3fff) << 16) |
2209 			lanphy_read_page_reg(phydev, 5, PTP_RX_INGRESS_NS_LO);
2210 
2211 	*seq_id = lanphy_read_page_reg(phydev, 5, PTP_RX_MSG_HEADER2);
2212 }
2213 
2214 static void lan8814_ptp_tx_ts_get(struct phy_device *phydev,
2215 				  u32 *seconds, u32 *nano_seconds, u16 *seq_id)
2216 {
2217 	*seconds = lanphy_read_page_reg(phydev, 5, PTP_TX_EGRESS_SEC_HI);
2218 	*seconds = *seconds << 16 |
2219 		   lanphy_read_page_reg(phydev, 5, PTP_TX_EGRESS_SEC_LO);
2220 
2221 	*nano_seconds = lanphy_read_page_reg(phydev, 5, PTP_TX_EGRESS_NS_HI);
2222 	*nano_seconds = ((*nano_seconds & 0x3fff) << 16) |
2223 			lanphy_read_page_reg(phydev, 5, PTP_TX_EGRESS_NS_LO);
2224 
2225 	*seq_id = lanphy_read_page_reg(phydev, 5, PTP_TX_MSG_HEADER2);
2226 }
2227 
2228 static int lan8814_ts_info(struct mii_timestamper *mii_ts, struct ethtool_ts_info *info)
2229 {
2230 	struct kszphy_ptp_priv *ptp_priv = container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
2231 	struct phy_device *phydev = ptp_priv->phydev;
2232 	struct lan8814_shared_priv *shared = phydev->shared->priv;
2233 
2234 	info->so_timestamping = SOF_TIMESTAMPING_TX_HARDWARE |
2235 				SOF_TIMESTAMPING_RX_HARDWARE |
2236 				SOF_TIMESTAMPING_RAW_HARDWARE;
2237 
2238 	info->phc_index = ptp_clock_index(shared->ptp_clock);
2239 
2240 	info->tx_types =
2241 		(1 << HWTSTAMP_TX_OFF) |
2242 		(1 << HWTSTAMP_TX_ON) |
2243 		(1 << HWTSTAMP_TX_ONESTEP_SYNC);
2244 
2245 	info->rx_filters =
2246 		(1 << HWTSTAMP_FILTER_NONE) |
2247 		(1 << HWTSTAMP_FILTER_PTP_V1_L4_EVENT) |
2248 		(1 << HWTSTAMP_FILTER_PTP_V2_L4_EVENT) |
2249 		(1 << HWTSTAMP_FILTER_PTP_V2_L2_EVENT) |
2250 		(1 << HWTSTAMP_FILTER_PTP_V2_EVENT);
2251 
2252 	return 0;
2253 }
2254 
2255 static void lan8814_flush_fifo(struct phy_device *phydev, bool egress)
2256 {
2257 	int i;
2258 
2259 	for (i = 0; i < FIFO_SIZE; ++i)
2260 		lanphy_read_page_reg(phydev, 5,
2261 				     egress ? PTP_TX_MSG_HEADER2 : PTP_RX_MSG_HEADER2);
2262 
2263 	/* Read to clear overflow status bit */
2264 	lanphy_read_page_reg(phydev, 5, PTP_TSU_INT_STS);
2265 }
2266 
2267 static int lan8814_hwtstamp(struct mii_timestamper *mii_ts, struct ifreq *ifr)
2268 {
2269 	struct kszphy_ptp_priv *ptp_priv =
2270 			  container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
2271 	struct phy_device *phydev = ptp_priv->phydev;
2272 	struct lan8814_shared_priv *shared = phydev->shared->priv;
2273 	struct lan8814_ptp_rx_ts *rx_ts, *tmp;
2274 	struct hwtstamp_config config;
2275 	int txcfg = 0, rxcfg = 0;
2276 	int pkt_ts_enable;
2277 
2278 	if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
2279 		return -EFAULT;
2280 
2281 	ptp_priv->hwts_tx_type = config.tx_type;
2282 	ptp_priv->rx_filter = config.rx_filter;
2283 
2284 	switch (config.rx_filter) {
2285 	case HWTSTAMP_FILTER_NONE:
2286 		ptp_priv->layer = 0;
2287 		ptp_priv->version = 0;
2288 		break;
2289 	case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
2290 	case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
2291 	case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
2292 		ptp_priv->layer = PTP_CLASS_L4;
2293 		ptp_priv->version = PTP_CLASS_V2;
2294 		break;
2295 	case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
2296 	case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
2297 	case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
2298 		ptp_priv->layer = PTP_CLASS_L2;
2299 		ptp_priv->version = PTP_CLASS_V2;
2300 		break;
2301 	case HWTSTAMP_FILTER_PTP_V2_EVENT:
2302 	case HWTSTAMP_FILTER_PTP_V2_SYNC:
2303 	case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
2304 		ptp_priv->layer = PTP_CLASS_L4 | PTP_CLASS_L2;
2305 		ptp_priv->version = PTP_CLASS_V2;
2306 		break;
2307 	default:
2308 		return -ERANGE;
2309 	}
2310 
2311 	if (ptp_priv->layer & PTP_CLASS_L2) {
2312 		rxcfg = PTP_RX_PARSE_CONFIG_LAYER2_EN_;
2313 		txcfg = PTP_TX_PARSE_CONFIG_LAYER2_EN_;
2314 	} else if (ptp_priv->layer & PTP_CLASS_L4) {
2315 		rxcfg |= PTP_RX_PARSE_CONFIG_IPV4_EN_ | PTP_RX_PARSE_CONFIG_IPV6_EN_;
2316 		txcfg |= PTP_TX_PARSE_CONFIG_IPV4_EN_ | PTP_TX_PARSE_CONFIG_IPV6_EN_;
2317 	}
2318 	lanphy_write_page_reg(ptp_priv->phydev, 5, PTP_RX_PARSE_CONFIG, rxcfg);
2319 	lanphy_write_page_reg(ptp_priv->phydev, 5, PTP_TX_PARSE_CONFIG, txcfg);
2320 
2321 	pkt_ts_enable = PTP_TIMESTAMP_EN_SYNC_ | PTP_TIMESTAMP_EN_DREQ_ |
2322 			PTP_TIMESTAMP_EN_PDREQ_ | PTP_TIMESTAMP_EN_PDRES_;
2323 	lanphy_write_page_reg(ptp_priv->phydev, 5, PTP_RX_TIMESTAMP_EN, pkt_ts_enable);
2324 	lanphy_write_page_reg(ptp_priv->phydev, 5, PTP_TX_TIMESTAMP_EN, pkt_ts_enable);
2325 
2326 	if (ptp_priv->hwts_tx_type == HWTSTAMP_TX_ONESTEP_SYNC)
2327 		lanphy_write_page_reg(ptp_priv->phydev, 5, PTP_TX_MOD,
2328 				      PTP_TX_MOD_TX_PTP_SYNC_TS_INSERT_);
2329 
2330 	if (config.rx_filter != HWTSTAMP_FILTER_NONE)
2331 		lan8814_config_ts_intr(ptp_priv->phydev, true);
2332 	else
2333 		lan8814_config_ts_intr(ptp_priv->phydev, false);
2334 
2335 	mutex_lock(&shared->shared_lock);
2336 	if (config.rx_filter != HWTSTAMP_FILTER_NONE)
2337 		shared->ref++;
2338 	else
2339 		shared->ref--;
2340 
2341 	if (shared->ref)
2342 		lanphy_write_page_reg(ptp_priv->phydev, 4, PTP_CMD_CTL,
2343 				      PTP_CMD_CTL_PTP_ENABLE_);
2344 	else
2345 		lanphy_write_page_reg(ptp_priv->phydev, 4, PTP_CMD_CTL,
2346 				      PTP_CMD_CTL_PTP_DISABLE_);
2347 	mutex_unlock(&shared->shared_lock);
2348 
2349 	/* In case of multiple starts and stops, these needs to be cleared */
2350 	list_for_each_entry_safe(rx_ts, tmp, &ptp_priv->rx_ts_list, list) {
2351 		list_del(&rx_ts->list);
2352 		kfree(rx_ts);
2353 	}
2354 	skb_queue_purge(&ptp_priv->rx_queue);
2355 	skb_queue_purge(&ptp_priv->tx_queue);
2356 
2357 	lan8814_flush_fifo(ptp_priv->phydev, false);
2358 	lan8814_flush_fifo(ptp_priv->phydev, true);
2359 
2360 	return copy_to_user(ifr->ifr_data, &config, sizeof(config)) ? -EFAULT : 0;
2361 }
2362 
2363 static void lan8814_txtstamp(struct mii_timestamper *mii_ts,
2364 			     struct sk_buff *skb, int type)
2365 {
2366 	struct kszphy_ptp_priv *ptp_priv = container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
2367 
2368 	switch (ptp_priv->hwts_tx_type) {
2369 	case HWTSTAMP_TX_ONESTEP_SYNC:
2370 		if (ptp_msg_is_sync(skb, type)) {
2371 			kfree_skb(skb);
2372 			return;
2373 		}
2374 		fallthrough;
2375 	case HWTSTAMP_TX_ON:
2376 		skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
2377 		skb_queue_tail(&ptp_priv->tx_queue, skb);
2378 		break;
2379 	case HWTSTAMP_TX_OFF:
2380 	default:
2381 		kfree_skb(skb);
2382 		break;
2383 	}
2384 }
2385 
2386 static void lan8814_get_sig_rx(struct sk_buff *skb, u16 *sig)
2387 {
2388 	struct ptp_header *ptp_header;
2389 	u32 type;
2390 
2391 	skb_push(skb, ETH_HLEN);
2392 	type = ptp_classify_raw(skb);
2393 	ptp_header = ptp_parse_header(skb, type);
2394 	skb_pull_inline(skb, ETH_HLEN);
2395 
2396 	*sig = (__force u16)(ntohs(ptp_header->sequence_id));
2397 }
2398 
2399 static bool lan8814_match_rx_ts(struct kszphy_ptp_priv *ptp_priv,
2400 				struct sk_buff *skb)
2401 {
2402 	struct skb_shared_hwtstamps *shhwtstamps;
2403 	struct lan8814_ptp_rx_ts *rx_ts, *tmp;
2404 	unsigned long flags;
2405 	bool ret = false;
2406 	u16 skb_sig;
2407 
2408 	lan8814_get_sig_rx(skb, &skb_sig);
2409 
2410 	/* Iterate over all RX timestamps and match it with the received skbs */
2411 	spin_lock_irqsave(&ptp_priv->rx_ts_lock, flags);
2412 	list_for_each_entry_safe(rx_ts, tmp, &ptp_priv->rx_ts_list, list) {
2413 		/* Check if we found the signature we were looking for. */
2414 		if (memcmp(&skb_sig, &rx_ts->seq_id, sizeof(rx_ts->seq_id)))
2415 			continue;
2416 
2417 		shhwtstamps = skb_hwtstamps(skb);
2418 		memset(shhwtstamps, 0, sizeof(*shhwtstamps));
2419 		shhwtstamps->hwtstamp = ktime_set(rx_ts->seconds,
2420 						  rx_ts->nsec);
2421 		list_del(&rx_ts->list);
2422 		kfree(rx_ts);
2423 
2424 		ret = true;
2425 		break;
2426 	}
2427 	spin_unlock_irqrestore(&ptp_priv->rx_ts_lock, flags);
2428 
2429 	if (ret)
2430 		netif_rx(skb);
2431 	return ret;
2432 }
2433 
2434 static bool lan8814_rxtstamp(struct mii_timestamper *mii_ts, struct sk_buff *skb, int type)
2435 {
2436 	struct kszphy_ptp_priv *ptp_priv =
2437 			container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
2438 
2439 	if (ptp_priv->rx_filter == HWTSTAMP_FILTER_NONE ||
2440 	    type == PTP_CLASS_NONE)
2441 		return false;
2442 
2443 	if ((type & ptp_priv->version) == 0 || (type & ptp_priv->layer) == 0)
2444 		return false;
2445 
2446 	/* If we failed to match then add it to the queue for when the timestamp
2447 	 * will come
2448 	 */
2449 	if (!lan8814_match_rx_ts(ptp_priv, skb))
2450 		skb_queue_tail(&ptp_priv->rx_queue, skb);
2451 
2452 	return true;
2453 }
2454 
2455 static void lan8814_ptp_clock_set(struct phy_device *phydev,
2456 				  u32 seconds, u32 nano_seconds)
2457 {
2458 	u32 sec_low, sec_high, nsec_low, nsec_high;
2459 
2460 	sec_low = seconds & 0xffff;
2461 	sec_high = (seconds >> 16) & 0xffff;
2462 	nsec_low = nano_seconds & 0xffff;
2463 	nsec_high = (nano_seconds >> 16) & 0x3fff;
2464 
2465 	lanphy_write_page_reg(phydev, 4, PTP_CLOCK_SET_SEC_LO, sec_low);
2466 	lanphy_write_page_reg(phydev, 4, PTP_CLOCK_SET_SEC_MID, sec_high);
2467 	lanphy_write_page_reg(phydev, 4, PTP_CLOCK_SET_NS_LO, nsec_low);
2468 	lanphy_write_page_reg(phydev, 4, PTP_CLOCK_SET_NS_HI, nsec_high);
2469 
2470 	lanphy_write_page_reg(phydev, 4, PTP_CMD_CTL, PTP_CMD_CTL_PTP_CLOCK_LOAD_);
2471 }
2472 
2473 static void lan8814_ptp_clock_get(struct phy_device *phydev,
2474 				  u32 *seconds, u32 *nano_seconds)
2475 {
2476 	lanphy_write_page_reg(phydev, 4, PTP_CMD_CTL, PTP_CMD_CTL_PTP_CLOCK_READ_);
2477 
2478 	*seconds = lanphy_read_page_reg(phydev, 4, PTP_CLOCK_READ_SEC_MID);
2479 	*seconds = (*seconds << 16) |
2480 		   lanphy_read_page_reg(phydev, 4, PTP_CLOCK_READ_SEC_LO);
2481 
2482 	*nano_seconds = lanphy_read_page_reg(phydev, 4, PTP_CLOCK_READ_NS_HI);
2483 	*nano_seconds = ((*nano_seconds & 0x3fff) << 16) |
2484 			lanphy_read_page_reg(phydev, 4, PTP_CLOCK_READ_NS_LO);
2485 }
2486 
2487 static int lan8814_ptpci_gettime64(struct ptp_clock_info *ptpci,
2488 				   struct timespec64 *ts)
2489 {
2490 	struct lan8814_shared_priv *shared = container_of(ptpci, struct lan8814_shared_priv,
2491 							  ptp_clock_info);
2492 	struct phy_device *phydev = shared->phydev;
2493 	u32 nano_seconds;
2494 	u32 seconds;
2495 
2496 	mutex_lock(&shared->shared_lock);
2497 	lan8814_ptp_clock_get(phydev, &seconds, &nano_seconds);
2498 	mutex_unlock(&shared->shared_lock);
2499 	ts->tv_sec = seconds;
2500 	ts->tv_nsec = nano_seconds;
2501 
2502 	return 0;
2503 }
2504 
2505 static int lan8814_ptpci_settime64(struct ptp_clock_info *ptpci,
2506 				   const struct timespec64 *ts)
2507 {
2508 	struct lan8814_shared_priv *shared = container_of(ptpci, struct lan8814_shared_priv,
2509 							  ptp_clock_info);
2510 	struct phy_device *phydev = shared->phydev;
2511 
2512 	mutex_lock(&shared->shared_lock);
2513 	lan8814_ptp_clock_set(phydev, ts->tv_sec, ts->tv_nsec);
2514 	mutex_unlock(&shared->shared_lock);
2515 
2516 	return 0;
2517 }
2518 
2519 static void lan8814_ptp_clock_step(struct phy_device *phydev,
2520 				   s64 time_step_ns)
2521 {
2522 	u32 nano_seconds_step;
2523 	u64 abs_time_step_ns;
2524 	u32 unsigned_seconds;
2525 	u32 nano_seconds;
2526 	u32 remainder;
2527 	s32 seconds;
2528 
2529 	if (time_step_ns >  15000000000LL) {
2530 		/* convert to clock set */
2531 		lan8814_ptp_clock_get(phydev, &unsigned_seconds, &nano_seconds);
2532 		unsigned_seconds += div_u64_rem(time_step_ns, 1000000000LL,
2533 						&remainder);
2534 		nano_seconds += remainder;
2535 		if (nano_seconds >= 1000000000) {
2536 			unsigned_seconds++;
2537 			nano_seconds -= 1000000000;
2538 		}
2539 		lan8814_ptp_clock_set(phydev, unsigned_seconds, nano_seconds);
2540 		return;
2541 	} else if (time_step_ns < -15000000000LL) {
2542 		/* convert to clock set */
2543 		time_step_ns = -time_step_ns;
2544 
2545 		lan8814_ptp_clock_get(phydev, &unsigned_seconds, &nano_seconds);
2546 		unsigned_seconds -= div_u64_rem(time_step_ns, 1000000000LL,
2547 						&remainder);
2548 		nano_seconds_step = remainder;
2549 		if (nano_seconds < nano_seconds_step) {
2550 			unsigned_seconds--;
2551 			nano_seconds += 1000000000;
2552 		}
2553 		nano_seconds -= nano_seconds_step;
2554 		lan8814_ptp_clock_set(phydev, unsigned_seconds,
2555 				      nano_seconds);
2556 		return;
2557 	}
2558 
2559 	/* do clock step */
2560 	if (time_step_ns >= 0) {
2561 		abs_time_step_ns = (u64)time_step_ns;
2562 		seconds = (s32)div_u64_rem(abs_time_step_ns, 1000000000,
2563 					   &remainder);
2564 		nano_seconds = remainder;
2565 	} else {
2566 		abs_time_step_ns = (u64)(-time_step_ns);
2567 		seconds = -((s32)div_u64_rem(abs_time_step_ns, 1000000000,
2568 			    &remainder));
2569 		nano_seconds = remainder;
2570 		if (nano_seconds > 0) {
2571 			/* subtracting nano seconds is not allowed
2572 			 * convert to subtracting from seconds,
2573 			 * and adding to nanoseconds
2574 			 */
2575 			seconds--;
2576 			nano_seconds = (1000000000 - nano_seconds);
2577 		}
2578 	}
2579 
2580 	if (nano_seconds > 0) {
2581 		/* add 8 ns to cover the likely normal increment */
2582 		nano_seconds += 8;
2583 	}
2584 
2585 	if (nano_seconds >= 1000000000) {
2586 		/* carry into seconds */
2587 		seconds++;
2588 		nano_seconds -= 1000000000;
2589 	}
2590 
2591 	while (seconds) {
2592 		if (seconds > 0) {
2593 			u32 adjustment_value = (u32)seconds;
2594 			u16 adjustment_value_lo, adjustment_value_hi;
2595 
2596 			if (adjustment_value > 0xF)
2597 				adjustment_value = 0xF;
2598 
2599 			adjustment_value_lo = adjustment_value & 0xffff;
2600 			adjustment_value_hi = (adjustment_value >> 16) & 0x3fff;
2601 
2602 			lanphy_write_page_reg(phydev, 4, PTP_LTC_STEP_ADJ_LO,
2603 					      adjustment_value_lo);
2604 			lanphy_write_page_reg(phydev, 4, PTP_LTC_STEP_ADJ_HI,
2605 					      PTP_LTC_STEP_ADJ_DIR_ |
2606 					      adjustment_value_hi);
2607 			seconds -= ((s32)adjustment_value);
2608 		} else {
2609 			u32 adjustment_value = (u32)(-seconds);
2610 			u16 adjustment_value_lo, adjustment_value_hi;
2611 
2612 			if (adjustment_value > 0xF)
2613 				adjustment_value = 0xF;
2614 
2615 			adjustment_value_lo = adjustment_value & 0xffff;
2616 			adjustment_value_hi = (adjustment_value >> 16) & 0x3fff;
2617 
2618 			lanphy_write_page_reg(phydev, 4, PTP_LTC_STEP_ADJ_LO,
2619 					      adjustment_value_lo);
2620 			lanphy_write_page_reg(phydev, 4, PTP_LTC_STEP_ADJ_HI,
2621 					      adjustment_value_hi);
2622 			seconds += ((s32)adjustment_value);
2623 		}
2624 		lanphy_write_page_reg(phydev, 4, PTP_CMD_CTL,
2625 				      PTP_CMD_CTL_PTP_LTC_STEP_SEC_);
2626 	}
2627 	if (nano_seconds) {
2628 		u16 nano_seconds_lo;
2629 		u16 nano_seconds_hi;
2630 
2631 		nano_seconds_lo = nano_seconds & 0xffff;
2632 		nano_seconds_hi = (nano_seconds >> 16) & 0x3fff;
2633 
2634 		lanphy_write_page_reg(phydev, 4, PTP_LTC_STEP_ADJ_LO,
2635 				      nano_seconds_lo);
2636 		lanphy_write_page_reg(phydev, 4, PTP_LTC_STEP_ADJ_HI,
2637 				      PTP_LTC_STEP_ADJ_DIR_ |
2638 				      nano_seconds_hi);
2639 		lanphy_write_page_reg(phydev, 4, PTP_CMD_CTL,
2640 				      PTP_CMD_CTL_PTP_LTC_STEP_NSEC_);
2641 	}
2642 }
2643 
2644 static int lan8814_ptpci_adjtime(struct ptp_clock_info *ptpci, s64 delta)
2645 {
2646 	struct lan8814_shared_priv *shared = container_of(ptpci, struct lan8814_shared_priv,
2647 							  ptp_clock_info);
2648 	struct phy_device *phydev = shared->phydev;
2649 
2650 	mutex_lock(&shared->shared_lock);
2651 	lan8814_ptp_clock_step(phydev, delta);
2652 	mutex_unlock(&shared->shared_lock);
2653 
2654 	return 0;
2655 }
2656 
2657 static int lan8814_ptpci_adjfine(struct ptp_clock_info *ptpci, long scaled_ppm)
2658 {
2659 	struct lan8814_shared_priv *shared = container_of(ptpci, struct lan8814_shared_priv,
2660 							  ptp_clock_info);
2661 	struct phy_device *phydev = shared->phydev;
2662 	u16 kszphy_rate_adj_lo, kszphy_rate_adj_hi;
2663 	bool positive = true;
2664 	u32 kszphy_rate_adj;
2665 
2666 	if (scaled_ppm < 0) {
2667 		scaled_ppm = -scaled_ppm;
2668 		positive = false;
2669 	}
2670 
2671 	kszphy_rate_adj = LAN8814_1PPM_FORMAT * (scaled_ppm >> 16);
2672 	kszphy_rate_adj += (LAN8814_1PPM_FORMAT * (0xffff & scaled_ppm)) >> 16;
2673 
2674 	kszphy_rate_adj_lo = kszphy_rate_adj & 0xffff;
2675 	kszphy_rate_adj_hi = (kszphy_rate_adj >> 16) & 0x3fff;
2676 
2677 	if (positive)
2678 		kszphy_rate_adj_hi |= PTP_CLOCK_RATE_ADJ_DIR_;
2679 
2680 	mutex_lock(&shared->shared_lock);
2681 	lanphy_write_page_reg(phydev, 4, PTP_CLOCK_RATE_ADJ_HI, kszphy_rate_adj_hi);
2682 	lanphy_write_page_reg(phydev, 4, PTP_CLOCK_RATE_ADJ_LO, kszphy_rate_adj_lo);
2683 	mutex_unlock(&shared->shared_lock);
2684 
2685 	return 0;
2686 }
2687 
2688 static void lan8814_get_sig_tx(struct sk_buff *skb, u16 *sig)
2689 {
2690 	struct ptp_header *ptp_header;
2691 	u32 type;
2692 
2693 	type = ptp_classify_raw(skb);
2694 	ptp_header = ptp_parse_header(skb, type);
2695 
2696 	*sig = (__force u16)(ntohs(ptp_header->sequence_id));
2697 }
2698 
2699 static void lan8814_dequeue_tx_skb(struct kszphy_ptp_priv *ptp_priv)
2700 {
2701 	struct phy_device *phydev = ptp_priv->phydev;
2702 	struct skb_shared_hwtstamps shhwtstamps;
2703 	struct sk_buff *skb, *skb_tmp;
2704 	unsigned long flags;
2705 	u32 seconds, nsec;
2706 	bool ret = false;
2707 	u16 skb_sig;
2708 	u16 seq_id;
2709 
2710 	lan8814_ptp_tx_ts_get(phydev, &seconds, &nsec, &seq_id);
2711 
2712 	spin_lock_irqsave(&ptp_priv->tx_queue.lock, flags);
2713 	skb_queue_walk_safe(&ptp_priv->tx_queue, skb, skb_tmp) {
2714 		lan8814_get_sig_tx(skb, &skb_sig);
2715 
2716 		if (memcmp(&skb_sig, &seq_id, sizeof(seq_id)))
2717 			continue;
2718 
2719 		__skb_unlink(skb, &ptp_priv->tx_queue);
2720 		ret = true;
2721 		break;
2722 	}
2723 	spin_unlock_irqrestore(&ptp_priv->tx_queue.lock, flags);
2724 
2725 	if (ret) {
2726 		memset(&shhwtstamps, 0, sizeof(shhwtstamps));
2727 		shhwtstamps.hwtstamp = ktime_set(seconds, nsec);
2728 		skb_complete_tx_timestamp(skb, &shhwtstamps);
2729 	}
2730 }
2731 
2732 static void lan8814_get_tx_ts(struct kszphy_ptp_priv *ptp_priv)
2733 {
2734 	struct phy_device *phydev = ptp_priv->phydev;
2735 	u32 reg;
2736 
2737 	do {
2738 		lan8814_dequeue_tx_skb(ptp_priv);
2739 
2740 		/* If other timestamps are available in the FIFO,
2741 		 * process them.
2742 		 */
2743 		reg = lanphy_read_page_reg(phydev, 5, PTP_CAP_INFO);
2744 	} while (PTP_CAP_INFO_TX_TS_CNT_GET_(reg) > 0);
2745 }
2746 
2747 static bool lan8814_match_skb(struct kszphy_ptp_priv *ptp_priv,
2748 			      struct lan8814_ptp_rx_ts *rx_ts)
2749 {
2750 	struct skb_shared_hwtstamps *shhwtstamps;
2751 	struct sk_buff *skb, *skb_tmp;
2752 	unsigned long flags;
2753 	bool ret = false;
2754 	u16 skb_sig;
2755 
2756 	spin_lock_irqsave(&ptp_priv->rx_queue.lock, flags);
2757 	skb_queue_walk_safe(&ptp_priv->rx_queue, skb, skb_tmp) {
2758 		lan8814_get_sig_rx(skb, &skb_sig);
2759 
2760 		if (memcmp(&skb_sig, &rx_ts->seq_id, sizeof(rx_ts->seq_id)))
2761 			continue;
2762 
2763 		__skb_unlink(skb, &ptp_priv->rx_queue);
2764 
2765 		ret = true;
2766 		break;
2767 	}
2768 	spin_unlock_irqrestore(&ptp_priv->rx_queue.lock, flags);
2769 
2770 	if (ret) {
2771 		shhwtstamps = skb_hwtstamps(skb);
2772 		memset(shhwtstamps, 0, sizeof(*shhwtstamps));
2773 		shhwtstamps->hwtstamp = ktime_set(rx_ts->seconds, rx_ts->nsec);
2774 		netif_rx(skb);
2775 	}
2776 
2777 	return ret;
2778 }
2779 
2780 static void lan8814_get_rx_ts(struct kszphy_ptp_priv *ptp_priv)
2781 {
2782 	struct phy_device *phydev = ptp_priv->phydev;
2783 	struct lan8814_ptp_rx_ts *rx_ts;
2784 	unsigned long flags;
2785 	u32 reg;
2786 
2787 	do {
2788 		rx_ts = kzalloc(sizeof(*rx_ts), GFP_KERNEL);
2789 		if (!rx_ts)
2790 			return;
2791 
2792 		lan8814_ptp_rx_ts_get(phydev, &rx_ts->seconds, &rx_ts->nsec,
2793 				      &rx_ts->seq_id);
2794 
2795 		/* If we failed to match the skb add it to the queue for when
2796 		 * the frame will come
2797 		 */
2798 		if (!lan8814_match_skb(ptp_priv, rx_ts)) {
2799 			spin_lock_irqsave(&ptp_priv->rx_ts_lock, flags);
2800 			list_add(&rx_ts->list, &ptp_priv->rx_ts_list);
2801 			spin_unlock_irqrestore(&ptp_priv->rx_ts_lock, flags);
2802 		} else {
2803 			kfree(rx_ts);
2804 		}
2805 
2806 		/* If other timestamps are available in the FIFO,
2807 		 * process them.
2808 		 */
2809 		reg = lanphy_read_page_reg(phydev, 5, PTP_CAP_INFO);
2810 	} while (PTP_CAP_INFO_RX_TS_CNT_GET_(reg) > 0);
2811 }
2812 
2813 static void lan8814_handle_ptp_interrupt(struct phy_device *phydev, u16 status)
2814 {
2815 	struct kszphy_priv *priv = phydev->priv;
2816 	struct kszphy_ptp_priv *ptp_priv = &priv->ptp_priv;
2817 
2818 	if (status & PTP_TSU_INT_STS_PTP_TX_TS_EN_)
2819 		lan8814_get_tx_ts(ptp_priv);
2820 
2821 	if (status & PTP_TSU_INT_STS_PTP_RX_TS_EN_)
2822 		lan8814_get_rx_ts(ptp_priv);
2823 
2824 	if (status & PTP_TSU_INT_STS_PTP_TX_TS_OVRFL_INT_) {
2825 		lan8814_flush_fifo(phydev, true);
2826 		skb_queue_purge(&ptp_priv->tx_queue);
2827 	}
2828 
2829 	if (status & PTP_TSU_INT_STS_PTP_RX_TS_OVRFL_INT_) {
2830 		lan8814_flush_fifo(phydev, false);
2831 		skb_queue_purge(&ptp_priv->rx_queue);
2832 	}
2833 }
2834 
2835 static int lan8804_config_init(struct phy_device *phydev)
2836 {
2837 	int val;
2838 
2839 	/* MDI-X setting for swap A,B transmit */
2840 	val = lanphy_read_page_reg(phydev, 2, LAN8804_ALIGN_SWAP);
2841 	val &= ~LAN8804_ALIGN_TX_A_B_SWAP_MASK;
2842 	val |= LAN8804_ALIGN_TX_A_B_SWAP;
2843 	lanphy_write_page_reg(phydev, 2, LAN8804_ALIGN_SWAP, val);
2844 
2845 	/* Make sure that the PHY will not stop generating the clock when the
2846 	 * link partner goes down
2847 	 */
2848 	lanphy_write_page_reg(phydev, 31, LAN8814_CLOCK_MANAGEMENT, 0x27e);
2849 	lanphy_read_page_reg(phydev, 1, LAN8814_LINK_QUALITY);
2850 
2851 	return 0;
2852 }
2853 
2854 static irqreturn_t lan8804_handle_interrupt(struct phy_device *phydev)
2855 {
2856 	int status;
2857 
2858 	status = phy_read(phydev, LAN8814_INTS);
2859 	if (status < 0) {
2860 		phy_error(phydev);
2861 		return IRQ_NONE;
2862 	}
2863 
2864 	if (status > 0)
2865 		phy_trigger_machine(phydev);
2866 
2867 	return IRQ_HANDLED;
2868 }
2869 
2870 #define LAN8804_OUTPUT_CONTROL			25
2871 #define LAN8804_OUTPUT_CONTROL_INTR_BUFFER	BIT(14)
2872 #define LAN8804_CONTROL				31
2873 #define LAN8804_CONTROL_INTR_POLARITY		BIT(14)
2874 
2875 static int lan8804_config_intr(struct phy_device *phydev)
2876 {
2877 	int err;
2878 
2879 	/* This is an internal PHY of lan966x and is not possible to change the
2880 	 * polarity on the GIC found in lan966x, therefore change the polarity
2881 	 * of the interrupt in the PHY from being active low instead of active
2882 	 * high.
2883 	 */
2884 	phy_write(phydev, LAN8804_CONTROL, LAN8804_CONTROL_INTR_POLARITY);
2885 
2886 	/* By default interrupt buffer is open-drain in which case the interrupt
2887 	 * can be active only low. Therefore change the interrupt buffer to be
2888 	 * push-pull to be able to change interrupt polarity
2889 	 */
2890 	phy_write(phydev, LAN8804_OUTPUT_CONTROL,
2891 		  LAN8804_OUTPUT_CONTROL_INTR_BUFFER);
2892 
2893 	if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
2894 		err = phy_read(phydev, LAN8814_INTS);
2895 		if (err < 0)
2896 			return err;
2897 
2898 		err = phy_write(phydev, LAN8814_INTC, LAN8814_INT_LINK);
2899 		if (err)
2900 			return err;
2901 	} else {
2902 		err = phy_write(phydev, LAN8814_INTC, 0);
2903 		if (err)
2904 			return err;
2905 
2906 		err = phy_read(phydev, LAN8814_INTS);
2907 		if (err < 0)
2908 			return err;
2909 	}
2910 
2911 	return 0;
2912 }
2913 
2914 static irqreturn_t lan8814_handle_interrupt(struct phy_device *phydev)
2915 {
2916 	int ret = IRQ_NONE;
2917 	int irq_status;
2918 
2919 	irq_status = phy_read(phydev, LAN8814_INTS);
2920 	if (irq_status < 0) {
2921 		phy_error(phydev);
2922 		return IRQ_NONE;
2923 	}
2924 
2925 	if (irq_status & LAN8814_INT_LINK) {
2926 		phy_trigger_machine(phydev);
2927 		ret = IRQ_HANDLED;
2928 	}
2929 
2930 	while (true) {
2931 		irq_status = lanphy_read_page_reg(phydev, 5, PTP_TSU_INT_STS);
2932 		if (!irq_status)
2933 			break;
2934 
2935 		lan8814_handle_ptp_interrupt(phydev, irq_status);
2936 		ret = IRQ_HANDLED;
2937 	}
2938 
2939 	return ret;
2940 }
2941 
2942 static int lan8814_ack_interrupt(struct phy_device *phydev)
2943 {
2944 	/* bit[12..0] int status, which is a read and clear register. */
2945 	int rc;
2946 
2947 	rc = phy_read(phydev, LAN8814_INTS);
2948 
2949 	return (rc < 0) ? rc : 0;
2950 }
2951 
2952 static int lan8814_config_intr(struct phy_device *phydev)
2953 {
2954 	int err;
2955 
2956 	lanphy_write_page_reg(phydev, 4, LAN8814_INTR_CTRL_REG,
2957 			      LAN8814_INTR_CTRL_REG_POLARITY |
2958 			      LAN8814_INTR_CTRL_REG_INTR_ENABLE);
2959 
2960 	/* enable / disable interrupts */
2961 	if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
2962 		err = lan8814_ack_interrupt(phydev);
2963 		if (err)
2964 			return err;
2965 
2966 		err = phy_write(phydev, LAN8814_INTC, LAN8814_INT_LINK);
2967 	} else {
2968 		err = phy_write(phydev, LAN8814_INTC, 0);
2969 		if (err)
2970 			return err;
2971 
2972 		err = lan8814_ack_interrupt(phydev);
2973 	}
2974 
2975 	return err;
2976 }
2977 
2978 static void lan8814_ptp_init(struct phy_device *phydev)
2979 {
2980 	struct kszphy_priv *priv = phydev->priv;
2981 	struct kszphy_ptp_priv *ptp_priv = &priv->ptp_priv;
2982 	u32 temp;
2983 
2984 	if (!IS_ENABLED(CONFIG_PTP_1588_CLOCK) ||
2985 	    !IS_ENABLED(CONFIG_NETWORK_PHY_TIMESTAMPING))
2986 		return;
2987 
2988 	lanphy_write_page_reg(phydev, 5, TSU_HARD_RESET, TSU_HARD_RESET_);
2989 
2990 	temp = lanphy_read_page_reg(phydev, 5, PTP_TX_MOD);
2991 	temp |= PTP_TX_MOD_BAD_UDPV4_CHKSUM_FORCE_FCS_DIS_;
2992 	lanphy_write_page_reg(phydev, 5, PTP_TX_MOD, temp);
2993 
2994 	temp = lanphy_read_page_reg(phydev, 5, PTP_RX_MOD);
2995 	temp |= PTP_RX_MOD_BAD_UDPV4_CHKSUM_FORCE_FCS_DIS_;
2996 	lanphy_write_page_reg(phydev, 5, PTP_RX_MOD, temp);
2997 
2998 	lanphy_write_page_reg(phydev, 5, PTP_RX_PARSE_CONFIG, 0);
2999 	lanphy_write_page_reg(phydev, 5, PTP_TX_PARSE_CONFIG, 0);
3000 
3001 	/* Removing default registers configs related to L2 and IP */
3002 	lanphy_write_page_reg(phydev, 5, PTP_TX_PARSE_L2_ADDR_EN, 0);
3003 	lanphy_write_page_reg(phydev, 5, PTP_RX_PARSE_L2_ADDR_EN, 0);
3004 	lanphy_write_page_reg(phydev, 5, PTP_TX_PARSE_IP_ADDR_EN, 0);
3005 	lanphy_write_page_reg(phydev, 5, PTP_RX_PARSE_IP_ADDR_EN, 0);
3006 
3007 	skb_queue_head_init(&ptp_priv->tx_queue);
3008 	skb_queue_head_init(&ptp_priv->rx_queue);
3009 	INIT_LIST_HEAD(&ptp_priv->rx_ts_list);
3010 	spin_lock_init(&ptp_priv->rx_ts_lock);
3011 
3012 	ptp_priv->phydev = phydev;
3013 
3014 	ptp_priv->mii_ts.rxtstamp = lan8814_rxtstamp;
3015 	ptp_priv->mii_ts.txtstamp = lan8814_txtstamp;
3016 	ptp_priv->mii_ts.hwtstamp = lan8814_hwtstamp;
3017 	ptp_priv->mii_ts.ts_info  = lan8814_ts_info;
3018 
3019 	phydev->mii_ts = &ptp_priv->mii_ts;
3020 }
3021 
3022 static int lan8814_ptp_probe_once(struct phy_device *phydev)
3023 {
3024 	struct lan8814_shared_priv *shared = phydev->shared->priv;
3025 
3026 	/* Initialise shared lock for clock*/
3027 	mutex_init(&shared->shared_lock);
3028 
3029 	shared->ptp_clock_info.owner = THIS_MODULE;
3030 	snprintf(shared->ptp_clock_info.name, 30, "%s", phydev->drv->name);
3031 	shared->ptp_clock_info.max_adj = 31249999;
3032 	shared->ptp_clock_info.n_alarm = 0;
3033 	shared->ptp_clock_info.n_ext_ts = 0;
3034 	shared->ptp_clock_info.n_pins = 0;
3035 	shared->ptp_clock_info.pps = 0;
3036 	shared->ptp_clock_info.pin_config = NULL;
3037 	shared->ptp_clock_info.adjfine = lan8814_ptpci_adjfine;
3038 	shared->ptp_clock_info.adjtime = lan8814_ptpci_adjtime;
3039 	shared->ptp_clock_info.gettime64 = lan8814_ptpci_gettime64;
3040 	shared->ptp_clock_info.settime64 = lan8814_ptpci_settime64;
3041 	shared->ptp_clock_info.getcrosststamp = NULL;
3042 
3043 	shared->ptp_clock = ptp_clock_register(&shared->ptp_clock_info,
3044 					       &phydev->mdio.dev);
3045 	if (IS_ERR(shared->ptp_clock)) {
3046 		phydev_err(phydev, "ptp_clock_register failed %lu\n",
3047 			   PTR_ERR(shared->ptp_clock));
3048 		return -EINVAL;
3049 	}
3050 
3051 	/* Check if PHC support is missing at the configuration level */
3052 	if (!shared->ptp_clock)
3053 		return 0;
3054 
3055 	phydev_dbg(phydev, "successfully registered ptp clock\n");
3056 
3057 	shared->phydev = phydev;
3058 
3059 	/* The EP.4 is shared between all the PHYs in the package and also it
3060 	 * can be accessed by any of the PHYs
3061 	 */
3062 	lanphy_write_page_reg(phydev, 4, LTC_HARD_RESET, LTC_HARD_RESET_);
3063 	lanphy_write_page_reg(phydev, 4, PTP_OPERATING_MODE,
3064 			      PTP_OPERATING_MODE_STANDALONE_);
3065 
3066 	return 0;
3067 }
3068 
3069 static void lan8814_setup_led(struct phy_device *phydev, int val)
3070 {
3071 	int temp;
3072 
3073 	temp = lanphy_read_page_reg(phydev, 5, LAN8814_LED_CTRL_1);
3074 
3075 	if (val)
3076 		temp |= LAN8814_LED_CTRL_1_KSZ9031_LED_MODE_;
3077 	else
3078 		temp &= ~LAN8814_LED_CTRL_1_KSZ9031_LED_MODE_;
3079 
3080 	lanphy_write_page_reg(phydev, 5, LAN8814_LED_CTRL_1, temp);
3081 }
3082 
3083 static int lan8814_config_init(struct phy_device *phydev)
3084 {
3085 	struct kszphy_priv *lan8814 = phydev->priv;
3086 	int val;
3087 
3088 	/* Reset the PHY */
3089 	val = lanphy_read_page_reg(phydev, 4, LAN8814_QSGMII_SOFT_RESET);
3090 	val |= LAN8814_QSGMII_SOFT_RESET_BIT;
3091 	lanphy_write_page_reg(phydev, 4, LAN8814_QSGMII_SOFT_RESET, val);
3092 
3093 	/* Disable ANEG with QSGMII PCS Host side */
3094 	val = lanphy_read_page_reg(phydev, 5, LAN8814_QSGMII_PCS1G_ANEG_CONFIG);
3095 	val &= ~LAN8814_QSGMII_PCS1G_ANEG_CONFIG_ANEG_ENA;
3096 	lanphy_write_page_reg(phydev, 5, LAN8814_QSGMII_PCS1G_ANEG_CONFIG, val);
3097 
3098 	/* MDI-X setting for swap A,B transmit */
3099 	val = lanphy_read_page_reg(phydev, 2, LAN8814_ALIGN_SWAP);
3100 	val &= ~LAN8814_ALIGN_TX_A_B_SWAP_MASK;
3101 	val |= LAN8814_ALIGN_TX_A_B_SWAP;
3102 	lanphy_write_page_reg(phydev, 2, LAN8814_ALIGN_SWAP, val);
3103 
3104 	if (lan8814->led_mode >= 0)
3105 		lan8814_setup_led(phydev, lan8814->led_mode);
3106 
3107 	return 0;
3108 }
3109 
3110 /* It is expected that there will not be any 'lan8814_take_coma_mode'
3111  * function called in suspend. Because the GPIO line can be shared, so if one of
3112  * the phys goes back in coma mode, then all the other PHYs will go, which is
3113  * wrong.
3114  */
3115 static int lan8814_release_coma_mode(struct phy_device *phydev)
3116 {
3117 	struct gpio_desc *gpiod;
3118 
3119 	gpiod = devm_gpiod_get_optional(&phydev->mdio.dev, "coma-mode",
3120 					GPIOD_OUT_HIGH_OPEN_DRAIN |
3121 					GPIOD_FLAGS_BIT_NONEXCLUSIVE);
3122 	if (IS_ERR(gpiod))
3123 		return PTR_ERR(gpiod);
3124 
3125 	gpiod_set_consumer_name(gpiod, "LAN8814 coma mode");
3126 	gpiod_set_value_cansleep(gpiod, 0);
3127 
3128 	return 0;
3129 }
3130 
3131 static int lan8814_probe(struct phy_device *phydev)
3132 {
3133 	const struct kszphy_type *type = phydev->drv->driver_data;
3134 	struct kszphy_priv *priv;
3135 	u16 addr;
3136 	int err;
3137 
3138 	priv = devm_kzalloc(&phydev->mdio.dev, sizeof(*priv), GFP_KERNEL);
3139 	if (!priv)
3140 		return -ENOMEM;
3141 
3142 	phydev->priv = priv;
3143 
3144 	priv->type = type;
3145 
3146 	kszphy_parse_led_mode(phydev);
3147 
3148 	/* Strap-in value for PHY address, below register read gives starting
3149 	 * phy address value
3150 	 */
3151 	addr = lanphy_read_page_reg(phydev, 4, 0) & 0x1F;
3152 	devm_phy_package_join(&phydev->mdio.dev, phydev,
3153 			      addr, sizeof(struct lan8814_shared_priv));
3154 
3155 	if (phy_package_init_once(phydev)) {
3156 		err = lan8814_release_coma_mode(phydev);
3157 		if (err)
3158 			return err;
3159 
3160 		err = lan8814_ptp_probe_once(phydev);
3161 		if (err)
3162 			return err;
3163 	}
3164 
3165 	lan8814_ptp_init(phydev);
3166 
3167 	return 0;
3168 }
3169 
3170 #define LAN8841_MMD_TIMER_REG			0
3171 #define LAN8841_MMD0_REGISTER_17		17
3172 #define LAN8841_MMD0_REGISTER_17_DROP_OPT(x)	((x) & 0x3)
3173 #define LAN8841_MMD0_REGISTER_17_XMIT_TOG_TX_DIS	BIT(3)
3174 #define LAN8841_OPERATION_MODE_STRAP_OVERRIDE_LOW_REG	2
3175 #define LAN8841_OPERATION_MODE_STRAP_OVERRIDE_LOW_REG_MAGJACK	BIT(14)
3176 #define LAN8841_MMD_ANALOG_REG			28
3177 #define LAN8841_ANALOG_CONTROL_1		1
3178 #define LAN8841_ANALOG_CONTROL_1_PLL_TRIM(x)	(((x) & 0x3) << 5)
3179 #define LAN8841_ANALOG_CONTROL_10		13
3180 #define LAN8841_ANALOG_CONTROL_10_PLL_DIV(x)	((x) & 0x3)
3181 #define LAN8841_ANALOG_CONTROL_11		14
3182 #define LAN8841_ANALOG_CONTROL_11_LDO_REF(x)	(((x) & 0x7) << 12)
3183 #define LAN8841_TX_LOW_I_CH_C_D_POWER_MANAGMENT	69
3184 #define LAN8841_TX_LOW_I_CH_C_D_POWER_MANAGMENT_VAL 0xbffc
3185 #define LAN8841_BTRX_POWER_DOWN			70
3186 #define LAN8841_BTRX_POWER_DOWN_QBIAS_CH_A	BIT(0)
3187 #define LAN8841_BTRX_POWER_DOWN_BTRX_CH_A	BIT(1)
3188 #define LAN8841_BTRX_POWER_DOWN_QBIAS_CH_B	BIT(2)
3189 #define LAN8841_BTRX_POWER_DOWN_BTRX_CH_B	BIT(3)
3190 #define LAN8841_BTRX_POWER_DOWN_BTRX_CH_C	BIT(5)
3191 #define LAN8841_BTRX_POWER_DOWN_BTRX_CH_D	BIT(7)
3192 #define LAN8841_ADC_CHANNEL_MASK		198
3193 
3194 static int lan8841_config_init(struct phy_device *phydev)
3195 {
3196 	int ret;
3197 
3198 	ret = ksz9131_config_init(phydev);
3199 	if (ret)
3200 		return ret;
3201 
3202 	/* 100BT Clause 40 improvenent errata */
3203 	phy_write_mmd(phydev, LAN8841_MMD_ANALOG_REG,
3204 		      LAN8841_ANALOG_CONTROL_1,
3205 		      LAN8841_ANALOG_CONTROL_1_PLL_TRIM(0x2));
3206 	phy_write_mmd(phydev, LAN8841_MMD_ANALOG_REG,
3207 		      LAN8841_ANALOG_CONTROL_10,
3208 		      LAN8841_ANALOG_CONTROL_10_PLL_DIV(0x1));
3209 
3210 	/* 10M/100M Ethernet Signal Tuning Errata for Shorted-Center Tap
3211 	 * Magnetics
3212 	 */
3213 	ret = phy_read_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
3214 			   LAN8841_OPERATION_MODE_STRAP_OVERRIDE_LOW_REG);
3215 	if (ret & LAN8841_OPERATION_MODE_STRAP_OVERRIDE_LOW_REG_MAGJACK) {
3216 		phy_write_mmd(phydev, LAN8841_MMD_ANALOG_REG,
3217 			      LAN8841_TX_LOW_I_CH_C_D_POWER_MANAGMENT,
3218 			      LAN8841_TX_LOW_I_CH_C_D_POWER_MANAGMENT_VAL);
3219 		phy_write_mmd(phydev, LAN8841_MMD_ANALOG_REG,
3220 			      LAN8841_BTRX_POWER_DOWN,
3221 			      LAN8841_BTRX_POWER_DOWN_QBIAS_CH_A |
3222 			      LAN8841_BTRX_POWER_DOWN_BTRX_CH_A |
3223 			      LAN8841_BTRX_POWER_DOWN_QBIAS_CH_B |
3224 			      LAN8841_BTRX_POWER_DOWN_BTRX_CH_B |
3225 			      LAN8841_BTRX_POWER_DOWN_BTRX_CH_C |
3226 			      LAN8841_BTRX_POWER_DOWN_BTRX_CH_D);
3227 	}
3228 
3229 	/* LDO Adjustment errata */
3230 	phy_write_mmd(phydev, LAN8841_MMD_ANALOG_REG,
3231 		      LAN8841_ANALOG_CONTROL_11,
3232 		      LAN8841_ANALOG_CONTROL_11_LDO_REF(1));
3233 
3234 	/* 100BT RGMII latency tuning errata */
3235 	phy_write_mmd(phydev, MDIO_MMD_PMAPMD,
3236 		      LAN8841_ADC_CHANNEL_MASK, 0x0);
3237 	phy_write_mmd(phydev, LAN8841_MMD_TIMER_REG,
3238 		      LAN8841_MMD0_REGISTER_17,
3239 		      LAN8841_MMD0_REGISTER_17_DROP_OPT(2) |
3240 		      LAN8841_MMD0_REGISTER_17_XMIT_TOG_TX_DIS);
3241 
3242 	return 0;
3243 }
3244 
3245 #define LAN8841_OUTPUT_CTRL			25
3246 #define LAN8841_OUTPUT_CTRL_INT_BUFFER		BIT(14)
3247 
3248 static int lan8841_config_intr(struct phy_device *phydev)
3249 {
3250 	int err;
3251 
3252 	phy_modify(phydev, LAN8841_OUTPUT_CTRL,
3253 		   LAN8841_OUTPUT_CTRL_INT_BUFFER, 0);
3254 
3255 	if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
3256 		err = phy_read(phydev, LAN8814_INTS);
3257 		if (err)
3258 			return err;
3259 
3260 		err = phy_write(phydev, LAN8814_INTC,
3261 				LAN8814_INT_LINK);
3262 	} else {
3263 		err = phy_write(phydev, LAN8814_INTC, 0);
3264 		if (err)
3265 			return err;
3266 
3267 		err = phy_read(phydev, LAN8814_INTS);
3268 	}
3269 
3270 	return err;
3271 }
3272 
3273 static irqreturn_t lan8841_handle_interrupt(struct phy_device *phydev)
3274 {
3275 	int irq_status;
3276 
3277 	irq_status = phy_read(phydev, LAN8814_INTS);
3278 	if (irq_status < 0) {
3279 		phy_error(phydev);
3280 		return IRQ_NONE;
3281 	}
3282 
3283 	if (irq_status & LAN8814_INT_LINK) {
3284 		phy_trigger_machine(phydev);
3285 		return IRQ_HANDLED;
3286 	}
3287 
3288 	return IRQ_NONE;
3289 }
3290 
3291 #define LAN8841_OPERATION_MODE_STRAP_LOW_REGISTER 3
3292 #define LAN8841_OPERATION_MODE_STRAP_LOW_REGISTER_STRAP_RGMII_EN BIT(0)
3293 
3294 static int lan8841_probe(struct phy_device *phydev)
3295 {
3296 	int err;
3297 
3298 	err = kszphy_probe(phydev);
3299 	if (err)
3300 		return err;
3301 
3302 	if (phy_read_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
3303 			 LAN8841_OPERATION_MODE_STRAP_LOW_REGISTER) &
3304 	    LAN8841_OPERATION_MODE_STRAP_LOW_REGISTER_STRAP_RGMII_EN)
3305 		phydev->interface = PHY_INTERFACE_MODE_RGMII_RXID;
3306 
3307 	return 0;
3308 }
3309 
3310 static struct phy_driver ksphy_driver[] = {
3311 {
3312 	.phy_id		= PHY_ID_KS8737,
3313 	.phy_id_mask	= MICREL_PHY_ID_MASK,
3314 	.name		= "Micrel KS8737",
3315 	/* PHY_BASIC_FEATURES */
3316 	.driver_data	= &ks8737_type,
3317 	.probe		= kszphy_probe,
3318 	.config_init	= kszphy_config_init,
3319 	.config_intr	= kszphy_config_intr,
3320 	.handle_interrupt = kszphy_handle_interrupt,
3321 	.suspend	= kszphy_suspend,
3322 	.resume		= kszphy_resume,
3323 }, {
3324 	.phy_id		= PHY_ID_KSZ8021,
3325 	.phy_id_mask	= 0x00ffffff,
3326 	.name		= "Micrel KSZ8021 or KSZ8031",
3327 	/* PHY_BASIC_FEATURES */
3328 	.driver_data	= &ksz8021_type,
3329 	.probe		= kszphy_probe,
3330 	.config_init	= kszphy_config_init,
3331 	.config_intr	= kszphy_config_intr,
3332 	.handle_interrupt = kszphy_handle_interrupt,
3333 	.get_sset_count = kszphy_get_sset_count,
3334 	.get_strings	= kszphy_get_strings,
3335 	.get_stats	= kszphy_get_stats,
3336 	.suspend	= kszphy_suspend,
3337 	.resume		= kszphy_resume,
3338 }, {
3339 	.phy_id		= PHY_ID_KSZ8031,
3340 	.phy_id_mask	= 0x00ffffff,
3341 	.name		= "Micrel KSZ8031",
3342 	/* PHY_BASIC_FEATURES */
3343 	.driver_data	= &ksz8021_type,
3344 	.probe		= kszphy_probe,
3345 	.config_init	= kszphy_config_init,
3346 	.config_intr	= kszphy_config_intr,
3347 	.handle_interrupt = kszphy_handle_interrupt,
3348 	.get_sset_count = kszphy_get_sset_count,
3349 	.get_strings	= kszphy_get_strings,
3350 	.get_stats	= kszphy_get_stats,
3351 	.suspend	= kszphy_suspend,
3352 	.resume		= kszphy_resume,
3353 }, {
3354 	.phy_id		= PHY_ID_KSZ8041,
3355 	.phy_id_mask	= MICREL_PHY_ID_MASK,
3356 	.name		= "Micrel KSZ8041",
3357 	/* PHY_BASIC_FEATURES */
3358 	.driver_data	= &ksz8041_type,
3359 	.probe		= kszphy_probe,
3360 	.config_init	= ksz8041_config_init,
3361 	.config_aneg	= ksz8041_config_aneg,
3362 	.config_intr	= kszphy_config_intr,
3363 	.handle_interrupt = kszphy_handle_interrupt,
3364 	.get_sset_count = kszphy_get_sset_count,
3365 	.get_strings	= kszphy_get_strings,
3366 	.get_stats	= kszphy_get_stats,
3367 	/* No suspend/resume callbacks because of errata DS80000700A,
3368 	 * receiver error following software power down.
3369 	 */
3370 }, {
3371 	.phy_id		= PHY_ID_KSZ8041RNLI,
3372 	.phy_id_mask	= MICREL_PHY_ID_MASK,
3373 	.name		= "Micrel KSZ8041RNLI",
3374 	/* PHY_BASIC_FEATURES */
3375 	.driver_data	= &ksz8041_type,
3376 	.probe		= kszphy_probe,
3377 	.config_init	= kszphy_config_init,
3378 	.config_intr	= kszphy_config_intr,
3379 	.handle_interrupt = kszphy_handle_interrupt,
3380 	.get_sset_count = kszphy_get_sset_count,
3381 	.get_strings	= kszphy_get_strings,
3382 	.get_stats	= kszphy_get_stats,
3383 	.suspend	= kszphy_suspend,
3384 	.resume		= kszphy_resume,
3385 }, {
3386 	.name		= "Micrel KSZ8051",
3387 	/* PHY_BASIC_FEATURES */
3388 	.driver_data	= &ksz8051_type,
3389 	.probe		= kszphy_probe,
3390 	.config_init	= kszphy_config_init,
3391 	.config_intr	= kszphy_config_intr,
3392 	.handle_interrupt = kszphy_handle_interrupt,
3393 	.get_sset_count = kszphy_get_sset_count,
3394 	.get_strings	= kszphy_get_strings,
3395 	.get_stats	= kszphy_get_stats,
3396 	.match_phy_device = ksz8051_match_phy_device,
3397 	.suspend	= kszphy_suspend,
3398 	.resume		= kszphy_resume,
3399 }, {
3400 	.phy_id		= PHY_ID_KSZ8001,
3401 	.name		= "Micrel KSZ8001 or KS8721",
3402 	.phy_id_mask	= 0x00fffffc,
3403 	/* PHY_BASIC_FEATURES */
3404 	.driver_data	= &ksz8041_type,
3405 	.probe		= kszphy_probe,
3406 	.config_init	= kszphy_config_init,
3407 	.config_intr	= kszphy_config_intr,
3408 	.handle_interrupt = kszphy_handle_interrupt,
3409 	.get_sset_count = kszphy_get_sset_count,
3410 	.get_strings	= kszphy_get_strings,
3411 	.get_stats	= kszphy_get_stats,
3412 	.suspend	= kszphy_suspend,
3413 	.resume		= kszphy_resume,
3414 }, {
3415 	.phy_id		= PHY_ID_KSZ8081,
3416 	.name		= "Micrel KSZ8081 or KSZ8091",
3417 	.phy_id_mask	= MICREL_PHY_ID_MASK,
3418 	.flags		= PHY_POLL_CABLE_TEST,
3419 	/* PHY_BASIC_FEATURES */
3420 	.driver_data	= &ksz8081_type,
3421 	.probe		= kszphy_probe,
3422 	.config_init	= ksz8081_config_init,
3423 	.soft_reset	= genphy_soft_reset,
3424 	.config_aneg	= ksz8081_config_aneg,
3425 	.read_status	= ksz8081_read_status,
3426 	.config_intr	= kszphy_config_intr,
3427 	.handle_interrupt = kszphy_handle_interrupt,
3428 	.get_sset_count = kszphy_get_sset_count,
3429 	.get_strings	= kszphy_get_strings,
3430 	.get_stats	= kszphy_get_stats,
3431 	.suspend	= kszphy_suspend,
3432 	.resume		= kszphy_resume,
3433 	.cable_test_start	= ksz886x_cable_test_start,
3434 	.cable_test_get_status	= ksz886x_cable_test_get_status,
3435 }, {
3436 	.phy_id		= PHY_ID_KSZ8061,
3437 	.name		= "Micrel KSZ8061",
3438 	.phy_id_mask	= MICREL_PHY_ID_MASK,
3439 	/* PHY_BASIC_FEATURES */
3440 	.probe		= kszphy_probe,
3441 	.config_init	= ksz8061_config_init,
3442 	.config_intr	= kszphy_config_intr,
3443 	.handle_interrupt = kszphy_handle_interrupt,
3444 	.suspend	= kszphy_suspend,
3445 	.resume		= kszphy_resume,
3446 }, {
3447 	.phy_id		= PHY_ID_KSZ9021,
3448 	.phy_id_mask	= 0x000ffffe,
3449 	.name		= "Micrel KSZ9021 Gigabit PHY",
3450 	/* PHY_GBIT_FEATURES */
3451 	.driver_data	= &ksz9021_type,
3452 	.probe		= kszphy_probe,
3453 	.get_features	= ksz9031_get_features,
3454 	.config_init	= ksz9021_config_init,
3455 	.config_intr	= kszphy_config_intr,
3456 	.handle_interrupt = kszphy_handle_interrupt,
3457 	.get_sset_count = kszphy_get_sset_count,
3458 	.get_strings	= kszphy_get_strings,
3459 	.get_stats	= kszphy_get_stats,
3460 	.suspend	= kszphy_suspend,
3461 	.resume		= kszphy_resume,
3462 	.read_mmd	= genphy_read_mmd_unsupported,
3463 	.write_mmd	= genphy_write_mmd_unsupported,
3464 }, {
3465 	.phy_id		= PHY_ID_KSZ9031,
3466 	.phy_id_mask	= MICREL_PHY_ID_MASK,
3467 	.name		= "Micrel KSZ9031 Gigabit PHY",
3468 	.flags		= PHY_POLL_CABLE_TEST,
3469 	.driver_data	= &ksz9021_type,
3470 	.probe		= kszphy_probe,
3471 	.get_features	= ksz9031_get_features,
3472 	.config_init	= ksz9031_config_init,
3473 	.soft_reset	= genphy_soft_reset,
3474 	.read_status	= ksz9031_read_status,
3475 	.config_intr	= kszphy_config_intr,
3476 	.handle_interrupt = kszphy_handle_interrupt,
3477 	.get_sset_count = kszphy_get_sset_count,
3478 	.get_strings	= kszphy_get_strings,
3479 	.get_stats	= kszphy_get_stats,
3480 	.suspend	= kszphy_suspend,
3481 	.resume		= kszphy_resume,
3482 	.cable_test_start	= ksz9x31_cable_test_start,
3483 	.cable_test_get_status	= ksz9x31_cable_test_get_status,
3484 }, {
3485 	.phy_id		= PHY_ID_LAN8814,
3486 	.phy_id_mask	= MICREL_PHY_ID_MASK,
3487 	.name		= "Microchip INDY Gigabit Quad PHY",
3488 	.flags          = PHY_POLL_CABLE_TEST,
3489 	.config_init	= lan8814_config_init,
3490 	.driver_data	= &lan8814_type,
3491 	.probe		= lan8814_probe,
3492 	.soft_reset	= genphy_soft_reset,
3493 	.read_status	= ksz9031_read_status,
3494 	.get_sset_count	= kszphy_get_sset_count,
3495 	.get_strings	= kszphy_get_strings,
3496 	.get_stats	= kszphy_get_stats,
3497 	.suspend	= genphy_suspend,
3498 	.resume		= kszphy_resume,
3499 	.config_intr	= lan8814_config_intr,
3500 	.handle_interrupt = lan8814_handle_interrupt,
3501 	.cable_test_start	= lan8814_cable_test_start,
3502 	.cable_test_get_status	= ksz886x_cable_test_get_status,
3503 }, {
3504 	.phy_id		= PHY_ID_LAN8804,
3505 	.phy_id_mask	= MICREL_PHY_ID_MASK,
3506 	.name		= "Microchip LAN966X Gigabit PHY",
3507 	.config_init	= lan8804_config_init,
3508 	.driver_data	= &ksz9021_type,
3509 	.probe		= kszphy_probe,
3510 	.soft_reset	= genphy_soft_reset,
3511 	.read_status	= ksz9031_read_status,
3512 	.get_sset_count	= kszphy_get_sset_count,
3513 	.get_strings	= kszphy_get_strings,
3514 	.get_stats	= kszphy_get_stats,
3515 	.suspend	= genphy_suspend,
3516 	.resume		= kszphy_resume,
3517 	.config_intr	= lan8804_config_intr,
3518 	.handle_interrupt = lan8804_handle_interrupt,
3519 }, {
3520 	.phy_id		= PHY_ID_LAN8841,
3521 	.phy_id_mask	= MICREL_PHY_ID_MASK,
3522 	.name		= "Microchip LAN8841 Gigabit PHY",
3523 	.driver_data	= &lan8841_type,
3524 	.config_init	= lan8841_config_init,
3525 	.probe		= lan8841_probe,
3526 	.soft_reset	= genphy_soft_reset,
3527 	.config_intr	= lan8841_config_intr,
3528 	.handle_interrupt = lan8841_handle_interrupt,
3529 	.get_sset_count = kszphy_get_sset_count,
3530 	.get_strings	= kszphy_get_strings,
3531 	.get_stats	= kszphy_get_stats,
3532 	.suspend	= genphy_suspend,
3533 	.resume		= genphy_resume,
3534 }, {
3535 	.phy_id		= PHY_ID_KSZ9131,
3536 	.phy_id_mask	= MICREL_PHY_ID_MASK,
3537 	.name		= "Microchip KSZ9131 Gigabit PHY",
3538 	/* PHY_GBIT_FEATURES */
3539 	.flags		= PHY_POLL_CABLE_TEST,
3540 	.driver_data	= &ksz9131_type,
3541 	.probe		= kszphy_probe,
3542 	.config_init	= ksz9131_config_init,
3543 	.config_intr	= kszphy_config_intr,
3544 	.config_aneg	= ksz9131_config_aneg,
3545 	.read_status	= ksz9131_read_status,
3546 	.handle_interrupt = kszphy_handle_interrupt,
3547 	.get_sset_count = kszphy_get_sset_count,
3548 	.get_strings	= kszphy_get_strings,
3549 	.get_stats	= kszphy_get_stats,
3550 	.suspend	= kszphy_suspend,
3551 	.resume		= kszphy_resume,
3552 	.cable_test_start	= ksz9x31_cable_test_start,
3553 	.cable_test_get_status	= ksz9x31_cable_test_get_status,
3554 }, {
3555 	.phy_id		= PHY_ID_KSZ8873MLL,
3556 	.phy_id_mask	= MICREL_PHY_ID_MASK,
3557 	.name		= "Micrel KSZ8873MLL Switch",
3558 	/* PHY_BASIC_FEATURES */
3559 	.config_init	= kszphy_config_init,
3560 	.config_aneg	= ksz8873mll_config_aneg,
3561 	.read_status	= ksz8873mll_read_status,
3562 	.suspend	= genphy_suspend,
3563 	.resume		= genphy_resume,
3564 }, {
3565 	.phy_id		= PHY_ID_KSZ886X,
3566 	.phy_id_mask	= MICREL_PHY_ID_MASK,
3567 	.name		= "Micrel KSZ8851 Ethernet MAC or KSZ886X Switch",
3568 	.driver_data	= &ksz886x_type,
3569 	/* PHY_BASIC_FEATURES */
3570 	.flags		= PHY_POLL_CABLE_TEST,
3571 	.config_init	= kszphy_config_init,
3572 	.config_aneg	= ksz886x_config_aneg,
3573 	.read_status	= ksz886x_read_status,
3574 	.suspend	= genphy_suspend,
3575 	.resume		= genphy_resume,
3576 	.cable_test_start	= ksz886x_cable_test_start,
3577 	.cable_test_get_status	= ksz886x_cable_test_get_status,
3578 }, {
3579 	.name		= "Micrel KSZ87XX Switch",
3580 	/* PHY_BASIC_FEATURES */
3581 	.config_init	= kszphy_config_init,
3582 	.match_phy_device = ksz8795_match_phy_device,
3583 	.suspend	= genphy_suspend,
3584 	.resume		= genphy_resume,
3585 }, {
3586 	.phy_id		= PHY_ID_KSZ9477,
3587 	.phy_id_mask	= MICREL_PHY_ID_MASK,
3588 	.name		= "Microchip KSZ9477",
3589 	/* PHY_GBIT_FEATURES */
3590 	.config_init	= kszphy_config_init,
3591 	.config_intr	= kszphy_config_intr,
3592 	.handle_interrupt = kszphy_handle_interrupt,
3593 	.suspend	= genphy_suspend,
3594 	.resume		= genphy_resume,
3595 } };
3596 
3597 module_phy_driver(ksphy_driver);
3598 
3599 MODULE_DESCRIPTION("Micrel PHY driver");
3600 MODULE_AUTHOR("David J. Choi");
3601 MODULE_LICENSE("GPL");
3602 
3603 static struct mdio_device_id __maybe_unused micrel_tbl[] = {
3604 	{ PHY_ID_KSZ9021, 0x000ffffe },
3605 	{ PHY_ID_KSZ9031, MICREL_PHY_ID_MASK },
3606 	{ PHY_ID_KSZ9131, MICREL_PHY_ID_MASK },
3607 	{ PHY_ID_KSZ8001, 0x00fffffc },
3608 	{ PHY_ID_KS8737, MICREL_PHY_ID_MASK },
3609 	{ PHY_ID_KSZ8021, 0x00ffffff },
3610 	{ PHY_ID_KSZ8031, 0x00ffffff },
3611 	{ PHY_ID_KSZ8041, MICREL_PHY_ID_MASK },
3612 	{ PHY_ID_KSZ8051, MICREL_PHY_ID_MASK },
3613 	{ PHY_ID_KSZ8061, MICREL_PHY_ID_MASK },
3614 	{ PHY_ID_KSZ8081, MICREL_PHY_ID_MASK },
3615 	{ PHY_ID_KSZ8873MLL, MICREL_PHY_ID_MASK },
3616 	{ PHY_ID_KSZ886X, MICREL_PHY_ID_MASK },
3617 	{ PHY_ID_LAN8814, MICREL_PHY_ID_MASK },
3618 	{ PHY_ID_LAN8804, MICREL_PHY_ID_MASK },
3619 	{ PHY_ID_LAN8841, MICREL_PHY_ID_MASK },
3620 	{ }
3621 };
3622 
3623 MODULE_DEVICE_TABLE(mdio, micrel_tbl);
3624