xref: /linux-6.15/drivers/net/phy/micrel.c (revision 9f6b3a49)
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 <[email protected]>
11  *
12  * Support : Micrel Phys:
13  *		Giga phys: ksz9021, ksz9031, ksz9131, lan8841, lan8814
14  *		100/10 Phys : ksz8001, ksz8721, ksz8737, ksz8041
15  *			   ksz8021, ksz8031, ksz8051,
16  *			   ksz8081, ksz8091,
17  *			   ksz8061,
18  *		Switch : ksz8873, ksz886x
19  *			 ksz9477, lan8804
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 #define LAN8814_EEE_STATE			0x38
118 #define LAN8814_EEE_STATE_MASK2P5P		BIT(10)
119 
120 #define LAN8814_PD_CONTROLS			0x9d
121 #define LAN8814_PD_CONTROLS_PD_MEAS_TIME_MASK	GENMASK(3, 0)
122 #define LAN8814_PD_CONTROLS_PD_MEAS_TIME_VAL	0xb
123 
124 /* Represents 1ppm adjustment in 2^32 format with
125  * each nsec contains 4 clock cycles.
126  * The value is calculated as following: (1/1000000)/((2^-32)/4)
127  */
128 #define LAN8814_1PPM_FORMAT			17179
129 
130 /* Represents 1ppm adjustment in 2^32 format with
131  * each nsec contains 8 clock cycles.
132  * The value is calculated as following: (1/1000000)/((2^-32)/8)
133  */
134 #define LAN8841_1PPM_FORMAT			34360
135 
136 #define PTP_RX_VERSION				0x0248
137 #define PTP_TX_VERSION				0x0288
138 #define PTP_MAX_VERSION(x)			(((x) & GENMASK(7, 0)) << 8)
139 #define PTP_MIN_VERSION(x)			((x) & GENMASK(7, 0))
140 
141 #define PTP_RX_MOD				0x024F
142 #define PTP_RX_MOD_BAD_UDPV4_CHKSUM_FORCE_FCS_DIS_ BIT(3)
143 #define PTP_RX_TIMESTAMP_EN			0x024D
144 #define PTP_TX_TIMESTAMP_EN			0x028D
145 
146 #define PTP_TIMESTAMP_EN_SYNC_			BIT(0)
147 #define PTP_TIMESTAMP_EN_DREQ_			BIT(1)
148 #define PTP_TIMESTAMP_EN_PDREQ_			BIT(2)
149 #define PTP_TIMESTAMP_EN_PDRES_			BIT(3)
150 
151 #define PTP_TX_PARSE_L2_ADDR_EN			0x0284
152 #define PTP_RX_PARSE_L2_ADDR_EN			0x0244
153 
154 #define PTP_TX_PARSE_IP_ADDR_EN			0x0285
155 #define PTP_RX_PARSE_IP_ADDR_EN			0x0245
156 #define LTC_HARD_RESET				0x023F
157 #define LTC_HARD_RESET_				BIT(0)
158 
159 #define TSU_HARD_RESET				0x02C1
160 #define TSU_HARD_RESET_				BIT(0)
161 
162 #define PTP_CMD_CTL				0x0200
163 #define PTP_CMD_CTL_PTP_DISABLE_		BIT(0)
164 #define PTP_CMD_CTL_PTP_ENABLE_			BIT(1)
165 #define PTP_CMD_CTL_PTP_CLOCK_READ_		BIT(3)
166 #define PTP_CMD_CTL_PTP_CLOCK_LOAD_		BIT(4)
167 #define PTP_CMD_CTL_PTP_LTC_STEP_SEC_		BIT(5)
168 #define PTP_CMD_CTL_PTP_LTC_STEP_NSEC_		BIT(6)
169 
170 #define PTP_CLOCK_SET_SEC_HI			0x0205
171 #define PTP_CLOCK_SET_SEC_MID			0x0206
172 #define PTP_CLOCK_SET_SEC_LO			0x0207
173 #define PTP_CLOCK_SET_NS_HI			0x0208
174 #define PTP_CLOCK_SET_NS_LO			0x0209
175 
176 #define PTP_CLOCK_READ_SEC_HI			0x0229
177 #define PTP_CLOCK_READ_SEC_MID			0x022A
178 #define PTP_CLOCK_READ_SEC_LO			0x022B
179 #define PTP_CLOCK_READ_NS_HI			0x022C
180 #define PTP_CLOCK_READ_NS_LO			0x022D
181 
182 #define PTP_OPERATING_MODE			0x0241
183 #define PTP_OPERATING_MODE_STANDALONE_		BIT(0)
184 
185 #define PTP_TX_MOD				0x028F
186 #define PTP_TX_MOD_TX_PTP_SYNC_TS_INSERT_	BIT(12)
187 #define PTP_TX_MOD_BAD_UDPV4_CHKSUM_FORCE_FCS_DIS_ BIT(3)
188 
189 #define PTP_RX_PARSE_CONFIG			0x0242
190 #define PTP_RX_PARSE_CONFIG_LAYER2_EN_		BIT(0)
191 #define PTP_RX_PARSE_CONFIG_IPV4_EN_		BIT(1)
192 #define PTP_RX_PARSE_CONFIG_IPV6_EN_		BIT(2)
193 
194 #define PTP_TX_PARSE_CONFIG			0x0282
195 #define PTP_TX_PARSE_CONFIG_LAYER2_EN_		BIT(0)
196 #define PTP_TX_PARSE_CONFIG_IPV4_EN_		BIT(1)
197 #define PTP_TX_PARSE_CONFIG_IPV6_EN_		BIT(2)
198 
199 #define PTP_CLOCK_RATE_ADJ_HI			0x020C
200 #define PTP_CLOCK_RATE_ADJ_LO			0x020D
201 #define PTP_CLOCK_RATE_ADJ_DIR_			BIT(15)
202 
203 #define PTP_LTC_STEP_ADJ_HI			0x0212
204 #define PTP_LTC_STEP_ADJ_LO			0x0213
205 #define PTP_LTC_STEP_ADJ_DIR_			BIT(15)
206 
207 #define LAN8814_INTR_STS_REG			0x0033
208 #define LAN8814_INTR_STS_REG_1588_TSU0_		BIT(0)
209 #define LAN8814_INTR_STS_REG_1588_TSU1_		BIT(1)
210 #define LAN8814_INTR_STS_REG_1588_TSU2_		BIT(2)
211 #define LAN8814_INTR_STS_REG_1588_TSU3_		BIT(3)
212 
213 #define PTP_CAP_INFO				0x022A
214 #define PTP_CAP_INFO_TX_TS_CNT_GET_(reg_val)	(((reg_val) & 0x0f00) >> 8)
215 #define PTP_CAP_INFO_RX_TS_CNT_GET_(reg_val)	((reg_val) & 0x000f)
216 
217 #define PTP_TX_EGRESS_SEC_HI			0x0296
218 #define PTP_TX_EGRESS_SEC_LO			0x0297
219 #define PTP_TX_EGRESS_NS_HI			0x0294
220 #define PTP_TX_EGRESS_NS_LO			0x0295
221 #define PTP_TX_MSG_HEADER2			0x0299
222 
223 #define PTP_RX_INGRESS_SEC_HI			0x0256
224 #define PTP_RX_INGRESS_SEC_LO			0x0257
225 #define PTP_RX_INGRESS_NS_HI			0x0254
226 #define PTP_RX_INGRESS_NS_LO			0x0255
227 #define PTP_RX_MSG_HEADER2			0x0259
228 
229 #define PTP_TSU_INT_EN				0x0200
230 #define PTP_TSU_INT_EN_PTP_TX_TS_OVRFL_EN_	BIT(3)
231 #define PTP_TSU_INT_EN_PTP_TX_TS_EN_		BIT(2)
232 #define PTP_TSU_INT_EN_PTP_RX_TS_OVRFL_EN_	BIT(1)
233 #define PTP_TSU_INT_EN_PTP_RX_TS_EN_		BIT(0)
234 
235 #define PTP_TSU_INT_STS				0x0201
236 #define PTP_TSU_INT_STS_PTP_TX_TS_OVRFL_INT_	BIT(3)
237 #define PTP_TSU_INT_STS_PTP_TX_TS_EN_		BIT(2)
238 #define PTP_TSU_INT_STS_PTP_RX_TS_OVRFL_INT_	BIT(1)
239 #define PTP_TSU_INT_STS_PTP_RX_TS_EN_		BIT(0)
240 
241 #define LAN8814_LED_CTRL_1			0x0
242 #define LAN8814_LED_CTRL_1_KSZ9031_LED_MODE_	BIT(6)
243 
244 /* PHY Control 1 */
245 #define MII_KSZPHY_CTRL_1			0x1e
246 #define KSZ8081_CTRL1_MDIX_STAT			BIT(4)
247 
248 /* PHY Control 2 / PHY Control (if no PHY Control 1) */
249 #define MII_KSZPHY_CTRL_2			0x1f
250 #define MII_KSZPHY_CTRL				MII_KSZPHY_CTRL_2
251 /* bitmap of PHY register to set interrupt mode */
252 #define KSZ8081_CTRL2_HP_MDIX			BIT(15)
253 #define KSZ8081_CTRL2_MDI_MDI_X_SELECT		BIT(14)
254 #define KSZ8081_CTRL2_DISABLE_AUTO_MDIX		BIT(13)
255 #define KSZ8081_CTRL2_FORCE_LINK		BIT(11)
256 #define KSZ8081_CTRL2_POWER_SAVING		BIT(10)
257 #define KSZPHY_CTRL_INT_ACTIVE_HIGH		BIT(9)
258 #define KSZPHY_RMII_REF_CLK_SEL			BIT(7)
259 
260 /* Write/read to/from extended registers */
261 #define MII_KSZPHY_EXTREG			0x0b
262 #define KSZPHY_EXTREG_WRITE			0x8000
263 
264 #define MII_KSZPHY_EXTREG_WRITE			0x0c
265 #define MII_KSZPHY_EXTREG_READ			0x0d
266 
267 /* Extended registers */
268 #define MII_KSZPHY_CLK_CONTROL_PAD_SKEW		0x104
269 #define MII_KSZPHY_RX_DATA_PAD_SKEW		0x105
270 #define MII_KSZPHY_TX_DATA_PAD_SKEW		0x106
271 
272 #define PS_TO_REG				200
273 #define FIFO_SIZE				8
274 
275 /* Delay used to get the second part from the LTC */
276 #define LAN8841_GET_SEC_LTC_DELAY		(500 * NSEC_PER_MSEC)
277 
278 struct kszphy_hw_stat {
279 	const char *string;
280 	u8 reg;
281 	u8 bits;
282 };
283 
284 static struct kszphy_hw_stat kszphy_hw_stats[] = {
285 	{ "phy_receive_errors", 21, 16},
286 	{ "phy_idle_errors", 10, 8 },
287 };
288 
289 struct kszphy_type {
290 	u32 led_mode_reg;
291 	u16 interrupt_level_mask;
292 	u16 cable_diag_reg;
293 	unsigned long pair_mask;
294 	u16 disable_dll_tx_bit;
295 	u16 disable_dll_rx_bit;
296 	u16 disable_dll_mask;
297 	bool has_broadcast_disable;
298 	bool has_nand_tree_disable;
299 	bool has_rmii_ref_clk_sel;
300 };
301 
302 /* Shared structure between the PHYs of the same package. */
303 struct lan8814_shared_priv {
304 	struct phy_device *phydev;
305 	struct ptp_clock *ptp_clock;
306 	struct ptp_clock_info ptp_clock_info;
307 
308 	/* Lock for ptp_clock */
309 	struct mutex shared_lock;
310 };
311 
312 struct lan8814_ptp_rx_ts {
313 	struct list_head list;
314 	u32 seconds;
315 	u32 nsec;
316 	u16 seq_id;
317 };
318 
319 struct kszphy_ptp_priv {
320 	struct mii_timestamper mii_ts;
321 	struct phy_device *phydev;
322 
323 	struct sk_buff_head tx_queue;
324 	struct sk_buff_head rx_queue;
325 
326 	struct list_head rx_ts_list;
327 	/* Lock for Rx ts fifo */
328 	spinlock_t rx_ts_lock;
329 
330 	int hwts_tx_type;
331 	enum hwtstamp_rx_filters rx_filter;
332 	int layer;
333 	int version;
334 
335 	struct ptp_clock *ptp_clock;
336 	struct ptp_clock_info ptp_clock_info;
337 	/* Lock for ptp_clock */
338 	struct mutex ptp_lock;
339 	struct ptp_pin_desc *pin_config;
340 
341 	s64 seconds;
342 	/* Lock for accessing seconds */
343 	spinlock_t seconds_lock;
344 };
345 
346 struct kszphy_priv {
347 	struct kszphy_ptp_priv ptp_priv;
348 	const struct kszphy_type *type;
349 	int led_mode;
350 	u16 vct_ctrl1000;
351 	bool rmii_ref_clk_sel;
352 	bool rmii_ref_clk_sel_val;
353 	u64 stats[ARRAY_SIZE(kszphy_hw_stats)];
354 };
355 
356 static const struct kszphy_type lan8814_type = {
357 	.led_mode_reg		= ~LAN8814_LED_CTRL_1,
358 	.cable_diag_reg		= LAN8814_CABLE_DIAG,
359 	.pair_mask		= LAN8814_WIRE_PAIR_MASK,
360 };
361 
362 static const struct kszphy_type ksz886x_type = {
363 	.cable_diag_reg		= KSZ8081_LMD,
364 	.pair_mask		= KSZPHY_WIRE_PAIR_MASK,
365 };
366 
367 static const struct kszphy_type ksz8021_type = {
368 	.led_mode_reg		= MII_KSZPHY_CTRL_2,
369 	.has_broadcast_disable	= true,
370 	.has_nand_tree_disable	= true,
371 	.has_rmii_ref_clk_sel	= true,
372 };
373 
374 static const struct kszphy_type ksz8041_type = {
375 	.led_mode_reg		= MII_KSZPHY_CTRL_1,
376 };
377 
378 static const struct kszphy_type ksz8051_type = {
379 	.led_mode_reg		= MII_KSZPHY_CTRL_2,
380 	.has_nand_tree_disable	= true,
381 };
382 
383 static const struct kszphy_type ksz8081_type = {
384 	.led_mode_reg		= MII_KSZPHY_CTRL_2,
385 	.has_broadcast_disable	= true,
386 	.has_nand_tree_disable	= true,
387 	.has_rmii_ref_clk_sel	= true,
388 };
389 
390 static const struct kszphy_type ks8737_type = {
391 	.interrupt_level_mask	= BIT(14),
392 };
393 
394 static const struct kszphy_type ksz9021_type = {
395 	.interrupt_level_mask	= BIT(14),
396 };
397 
398 static const struct kszphy_type ksz9131_type = {
399 	.interrupt_level_mask	= BIT(14),
400 	.disable_dll_tx_bit	= BIT(12),
401 	.disable_dll_rx_bit	= BIT(12),
402 	.disable_dll_mask	= BIT_MASK(12),
403 };
404 
405 static const struct kszphy_type lan8841_type = {
406 	.disable_dll_tx_bit	= BIT(14),
407 	.disable_dll_rx_bit	= BIT(14),
408 	.disable_dll_mask	= BIT_MASK(14),
409 	.cable_diag_reg		= LAN8814_CABLE_DIAG,
410 	.pair_mask		= LAN8814_WIRE_PAIR_MASK,
411 };
412 
413 static int kszphy_extended_write(struct phy_device *phydev,
414 				u32 regnum, u16 val)
415 {
416 	phy_write(phydev, MII_KSZPHY_EXTREG, KSZPHY_EXTREG_WRITE | regnum);
417 	return phy_write(phydev, MII_KSZPHY_EXTREG_WRITE, val);
418 }
419 
420 static int kszphy_extended_read(struct phy_device *phydev,
421 				u32 regnum)
422 {
423 	phy_write(phydev, MII_KSZPHY_EXTREG, regnum);
424 	return phy_read(phydev, MII_KSZPHY_EXTREG_READ);
425 }
426 
427 static int kszphy_ack_interrupt(struct phy_device *phydev)
428 {
429 	/* bit[7..0] int status, which is a read and clear register. */
430 	int rc;
431 
432 	rc = phy_read(phydev, MII_KSZPHY_INTCS);
433 
434 	return (rc < 0) ? rc : 0;
435 }
436 
437 static int kszphy_config_intr(struct phy_device *phydev)
438 {
439 	const struct kszphy_type *type = phydev->drv->driver_data;
440 	int temp, err;
441 	u16 mask;
442 
443 	if (type && type->interrupt_level_mask)
444 		mask = type->interrupt_level_mask;
445 	else
446 		mask = KSZPHY_CTRL_INT_ACTIVE_HIGH;
447 
448 	/* set the interrupt pin active low */
449 	temp = phy_read(phydev, MII_KSZPHY_CTRL);
450 	if (temp < 0)
451 		return temp;
452 	temp &= ~mask;
453 	phy_write(phydev, MII_KSZPHY_CTRL, temp);
454 
455 	/* enable / disable interrupts */
456 	if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
457 		err = kszphy_ack_interrupt(phydev);
458 		if (err)
459 			return err;
460 
461 		err = phy_write(phydev, MII_KSZPHY_INTCS, KSZPHY_INTCS_ALL);
462 	} else {
463 		err = phy_write(phydev, MII_KSZPHY_INTCS, 0);
464 		if (err)
465 			return err;
466 
467 		err = kszphy_ack_interrupt(phydev);
468 	}
469 
470 	return err;
471 }
472 
473 static irqreturn_t kszphy_handle_interrupt(struct phy_device *phydev)
474 {
475 	int irq_status;
476 
477 	irq_status = phy_read(phydev, MII_KSZPHY_INTCS);
478 	if (irq_status < 0) {
479 		phy_error(phydev);
480 		return IRQ_NONE;
481 	}
482 
483 	if (!(irq_status & KSZPHY_INTCS_STATUS))
484 		return IRQ_NONE;
485 
486 	phy_trigger_machine(phydev);
487 
488 	return IRQ_HANDLED;
489 }
490 
491 static int kszphy_rmii_clk_sel(struct phy_device *phydev, bool val)
492 {
493 	int ctrl;
494 
495 	ctrl = phy_read(phydev, MII_KSZPHY_CTRL);
496 	if (ctrl < 0)
497 		return ctrl;
498 
499 	if (val)
500 		ctrl |= KSZPHY_RMII_REF_CLK_SEL;
501 	else
502 		ctrl &= ~KSZPHY_RMII_REF_CLK_SEL;
503 
504 	return phy_write(phydev, MII_KSZPHY_CTRL, ctrl);
505 }
506 
507 static int kszphy_setup_led(struct phy_device *phydev, u32 reg, int val)
508 {
509 	int rc, temp, shift;
510 
511 	switch (reg) {
512 	case MII_KSZPHY_CTRL_1:
513 		shift = 14;
514 		break;
515 	case MII_KSZPHY_CTRL_2:
516 		shift = 4;
517 		break;
518 	default:
519 		return -EINVAL;
520 	}
521 
522 	temp = phy_read(phydev, reg);
523 	if (temp < 0) {
524 		rc = temp;
525 		goto out;
526 	}
527 
528 	temp &= ~(3 << shift);
529 	temp |= val << shift;
530 	rc = phy_write(phydev, reg, temp);
531 out:
532 	if (rc < 0)
533 		phydev_err(phydev, "failed to set led mode\n");
534 
535 	return rc;
536 }
537 
538 /* Disable PHY address 0 as the broadcast address, so that it can be used as a
539  * unique (non-broadcast) address on a shared bus.
540  */
541 static int kszphy_broadcast_disable(struct phy_device *phydev)
542 {
543 	int ret;
544 
545 	ret = phy_read(phydev, MII_KSZPHY_OMSO);
546 	if (ret < 0)
547 		goto out;
548 
549 	ret = phy_write(phydev, MII_KSZPHY_OMSO, ret | KSZPHY_OMSO_B_CAST_OFF);
550 out:
551 	if (ret)
552 		phydev_err(phydev, "failed to disable broadcast address\n");
553 
554 	return ret;
555 }
556 
557 static int kszphy_nand_tree_disable(struct phy_device *phydev)
558 {
559 	int ret;
560 
561 	ret = phy_read(phydev, MII_KSZPHY_OMSO);
562 	if (ret < 0)
563 		goto out;
564 
565 	if (!(ret & KSZPHY_OMSO_NAND_TREE_ON))
566 		return 0;
567 
568 	ret = phy_write(phydev, MII_KSZPHY_OMSO,
569 			ret & ~KSZPHY_OMSO_NAND_TREE_ON);
570 out:
571 	if (ret)
572 		phydev_err(phydev, "failed to disable NAND tree mode\n");
573 
574 	return ret;
575 }
576 
577 /* Some config bits need to be set again on resume, handle them here. */
578 static int kszphy_config_reset(struct phy_device *phydev)
579 {
580 	struct kszphy_priv *priv = phydev->priv;
581 	int ret;
582 
583 	if (priv->rmii_ref_clk_sel) {
584 		ret = kszphy_rmii_clk_sel(phydev, priv->rmii_ref_clk_sel_val);
585 		if (ret) {
586 			phydev_err(phydev,
587 				   "failed to set rmii reference clock\n");
588 			return ret;
589 		}
590 	}
591 
592 	if (priv->type && priv->led_mode >= 0)
593 		kszphy_setup_led(phydev, priv->type->led_mode_reg, priv->led_mode);
594 
595 	return 0;
596 }
597 
598 static int kszphy_config_init(struct phy_device *phydev)
599 {
600 	struct kszphy_priv *priv = phydev->priv;
601 	const struct kszphy_type *type;
602 
603 	if (!priv)
604 		return 0;
605 
606 	type = priv->type;
607 
608 	if (type && type->has_broadcast_disable)
609 		kszphy_broadcast_disable(phydev);
610 
611 	if (type && type->has_nand_tree_disable)
612 		kszphy_nand_tree_disable(phydev);
613 
614 	return kszphy_config_reset(phydev);
615 }
616 
617 static int ksz8041_fiber_mode(struct phy_device *phydev)
618 {
619 	struct device_node *of_node = phydev->mdio.dev.of_node;
620 
621 	return of_property_read_bool(of_node, "micrel,fiber-mode");
622 }
623 
624 static int ksz8041_config_init(struct phy_device *phydev)
625 {
626 	__ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, };
627 
628 	/* Limit supported and advertised modes in fiber mode */
629 	if (ksz8041_fiber_mode(phydev)) {
630 		phydev->dev_flags |= MICREL_PHY_FXEN;
631 		linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, mask);
632 		linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT, mask);
633 
634 		linkmode_and(phydev->supported, phydev->supported, mask);
635 		linkmode_set_bit(ETHTOOL_LINK_MODE_FIBRE_BIT,
636 				 phydev->supported);
637 		linkmode_and(phydev->advertising, phydev->advertising, mask);
638 		linkmode_set_bit(ETHTOOL_LINK_MODE_FIBRE_BIT,
639 				 phydev->advertising);
640 		phydev->autoneg = AUTONEG_DISABLE;
641 	}
642 
643 	return kszphy_config_init(phydev);
644 }
645 
646 static int ksz8041_config_aneg(struct phy_device *phydev)
647 {
648 	/* Skip auto-negotiation in fiber mode */
649 	if (phydev->dev_flags & MICREL_PHY_FXEN) {
650 		phydev->speed = SPEED_100;
651 		return 0;
652 	}
653 
654 	return genphy_config_aneg(phydev);
655 }
656 
657 static int ksz8051_ksz8795_match_phy_device(struct phy_device *phydev,
658 					    const bool ksz_8051)
659 {
660 	int ret;
661 
662 	if (!phy_id_compare(phydev->phy_id, PHY_ID_KSZ8051, MICREL_PHY_ID_MASK))
663 		return 0;
664 
665 	ret = phy_read(phydev, MII_BMSR);
666 	if (ret < 0)
667 		return ret;
668 
669 	/* KSZ8051 PHY and KSZ8794/KSZ8795/KSZ8765 switch share the same
670 	 * exact PHY ID. However, they can be told apart by the extended
671 	 * capability registers presence. The KSZ8051 PHY has them while
672 	 * the switch does not.
673 	 */
674 	ret &= BMSR_ERCAP;
675 	if (ksz_8051)
676 		return ret;
677 	else
678 		return !ret;
679 }
680 
681 static int ksz8051_match_phy_device(struct phy_device *phydev)
682 {
683 	return ksz8051_ksz8795_match_phy_device(phydev, true);
684 }
685 
686 static int ksz8081_config_init(struct phy_device *phydev)
687 {
688 	/* KSZPHY_OMSO_FACTORY_TEST is set at de-assertion of the reset line
689 	 * based on the RXER (KSZ8081RNA/RND) or TXC (KSZ8081MNX/RNB) pin. If a
690 	 * pull-down is missing, the factory test mode should be cleared by
691 	 * manually writing a 0.
692 	 */
693 	phy_clear_bits(phydev, MII_KSZPHY_OMSO, KSZPHY_OMSO_FACTORY_TEST);
694 
695 	return kszphy_config_init(phydev);
696 }
697 
698 static int ksz8081_config_mdix(struct phy_device *phydev, u8 ctrl)
699 {
700 	u16 val;
701 
702 	switch (ctrl) {
703 	case ETH_TP_MDI:
704 		val = KSZ8081_CTRL2_DISABLE_AUTO_MDIX;
705 		break;
706 	case ETH_TP_MDI_X:
707 		val = KSZ8081_CTRL2_DISABLE_AUTO_MDIX |
708 			KSZ8081_CTRL2_MDI_MDI_X_SELECT;
709 		break;
710 	case ETH_TP_MDI_AUTO:
711 		val = 0;
712 		break;
713 	default:
714 		return 0;
715 	}
716 
717 	return phy_modify(phydev, MII_KSZPHY_CTRL_2,
718 			  KSZ8081_CTRL2_HP_MDIX |
719 			  KSZ8081_CTRL2_MDI_MDI_X_SELECT |
720 			  KSZ8081_CTRL2_DISABLE_AUTO_MDIX,
721 			  KSZ8081_CTRL2_HP_MDIX | val);
722 }
723 
724 static int ksz8081_config_aneg(struct phy_device *phydev)
725 {
726 	int ret;
727 
728 	ret = genphy_config_aneg(phydev);
729 	if (ret)
730 		return ret;
731 
732 	/* The MDI-X configuration is automatically changed by the PHY after
733 	 * switching from autoneg off to on. So, take MDI-X configuration under
734 	 * own control and set it after autoneg configuration was done.
735 	 */
736 	return ksz8081_config_mdix(phydev, phydev->mdix_ctrl);
737 }
738 
739 static int ksz8081_mdix_update(struct phy_device *phydev)
740 {
741 	int ret;
742 
743 	ret = phy_read(phydev, MII_KSZPHY_CTRL_2);
744 	if (ret < 0)
745 		return ret;
746 
747 	if (ret & KSZ8081_CTRL2_DISABLE_AUTO_MDIX) {
748 		if (ret & KSZ8081_CTRL2_MDI_MDI_X_SELECT)
749 			phydev->mdix_ctrl = ETH_TP_MDI_X;
750 		else
751 			phydev->mdix_ctrl = ETH_TP_MDI;
752 	} else {
753 		phydev->mdix_ctrl = ETH_TP_MDI_AUTO;
754 	}
755 
756 	ret = phy_read(phydev, MII_KSZPHY_CTRL_1);
757 	if (ret < 0)
758 		return ret;
759 
760 	if (ret & KSZ8081_CTRL1_MDIX_STAT)
761 		phydev->mdix = ETH_TP_MDI;
762 	else
763 		phydev->mdix = ETH_TP_MDI_X;
764 
765 	return 0;
766 }
767 
768 static int ksz8081_read_status(struct phy_device *phydev)
769 {
770 	int ret;
771 
772 	ret = ksz8081_mdix_update(phydev);
773 	if (ret < 0)
774 		return ret;
775 
776 	return genphy_read_status(phydev);
777 }
778 
779 static int ksz8061_config_init(struct phy_device *phydev)
780 {
781 	int ret;
782 
783 	ret = phy_write_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_DEVID1, 0xB61A);
784 	if (ret)
785 		return ret;
786 
787 	return kszphy_config_init(phydev);
788 }
789 
790 static int ksz8795_match_phy_device(struct phy_device *phydev)
791 {
792 	return ksz8051_ksz8795_match_phy_device(phydev, false);
793 }
794 
795 static int ksz9021_load_values_from_of(struct phy_device *phydev,
796 				       const struct device_node *of_node,
797 				       u16 reg,
798 				       const char *field1, const char *field2,
799 				       const char *field3, const char *field4)
800 {
801 	int val1 = -1;
802 	int val2 = -2;
803 	int val3 = -3;
804 	int val4 = -4;
805 	int newval;
806 	int matches = 0;
807 
808 	if (!of_property_read_u32(of_node, field1, &val1))
809 		matches++;
810 
811 	if (!of_property_read_u32(of_node, field2, &val2))
812 		matches++;
813 
814 	if (!of_property_read_u32(of_node, field3, &val3))
815 		matches++;
816 
817 	if (!of_property_read_u32(of_node, field4, &val4))
818 		matches++;
819 
820 	if (!matches)
821 		return 0;
822 
823 	if (matches < 4)
824 		newval = kszphy_extended_read(phydev, reg);
825 	else
826 		newval = 0;
827 
828 	if (val1 != -1)
829 		newval = ((newval & 0xfff0) | ((val1 / PS_TO_REG) & 0xf) << 0);
830 
831 	if (val2 != -2)
832 		newval = ((newval & 0xff0f) | ((val2 / PS_TO_REG) & 0xf) << 4);
833 
834 	if (val3 != -3)
835 		newval = ((newval & 0xf0ff) | ((val3 / PS_TO_REG) & 0xf) << 8);
836 
837 	if (val4 != -4)
838 		newval = ((newval & 0x0fff) | ((val4 / PS_TO_REG) & 0xf) << 12);
839 
840 	return kszphy_extended_write(phydev, reg, newval);
841 }
842 
843 static int ksz9021_config_init(struct phy_device *phydev)
844 {
845 	const struct device_node *of_node;
846 	const struct device *dev_walker;
847 
848 	/* The Micrel driver has a deprecated option to place phy OF
849 	 * properties in the MAC node. Walk up the tree of devices to
850 	 * find a device with an OF node.
851 	 */
852 	dev_walker = &phydev->mdio.dev;
853 	do {
854 		of_node = dev_walker->of_node;
855 		dev_walker = dev_walker->parent;
856 
857 	} while (!of_node && dev_walker);
858 
859 	if (of_node) {
860 		ksz9021_load_values_from_of(phydev, of_node,
861 				    MII_KSZPHY_CLK_CONTROL_PAD_SKEW,
862 				    "txen-skew-ps", "txc-skew-ps",
863 				    "rxdv-skew-ps", "rxc-skew-ps");
864 		ksz9021_load_values_from_of(phydev, of_node,
865 				    MII_KSZPHY_RX_DATA_PAD_SKEW,
866 				    "rxd0-skew-ps", "rxd1-skew-ps",
867 				    "rxd2-skew-ps", "rxd3-skew-ps");
868 		ksz9021_load_values_from_of(phydev, of_node,
869 				    MII_KSZPHY_TX_DATA_PAD_SKEW,
870 				    "txd0-skew-ps", "txd1-skew-ps",
871 				    "txd2-skew-ps", "txd3-skew-ps");
872 	}
873 	return 0;
874 }
875 
876 #define KSZ9031_PS_TO_REG		60
877 
878 /* Extended registers */
879 /* MMD Address 0x0 */
880 #define MII_KSZ9031RN_FLP_BURST_TX_LO	3
881 #define MII_KSZ9031RN_FLP_BURST_TX_HI	4
882 
883 /* MMD Address 0x2 */
884 #define MII_KSZ9031RN_CONTROL_PAD_SKEW	4
885 #define MII_KSZ9031RN_RX_CTL_M		GENMASK(7, 4)
886 #define MII_KSZ9031RN_TX_CTL_M		GENMASK(3, 0)
887 
888 #define MII_KSZ9031RN_RX_DATA_PAD_SKEW	5
889 #define MII_KSZ9031RN_RXD3		GENMASK(15, 12)
890 #define MII_KSZ9031RN_RXD2		GENMASK(11, 8)
891 #define MII_KSZ9031RN_RXD1		GENMASK(7, 4)
892 #define MII_KSZ9031RN_RXD0		GENMASK(3, 0)
893 
894 #define MII_KSZ9031RN_TX_DATA_PAD_SKEW	6
895 #define MII_KSZ9031RN_TXD3		GENMASK(15, 12)
896 #define MII_KSZ9031RN_TXD2		GENMASK(11, 8)
897 #define MII_KSZ9031RN_TXD1		GENMASK(7, 4)
898 #define MII_KSZ9031RN_TXD0		GENMASK(3, 0)
899 
900 #define MII_KSZ9031RN_CLK_PAD_SKEW	8
901 #define MII_KSZ9031RN_GTX_CLK		GENMASK(9, 5)
902 #define MII_KSZ9031RN_RX_CLK		GENMASK(4, 0)
903 
904 /* KSZ9031 has internal RGMII_IDRX = 1.2ns and RGMII_IDTX = 0ns. To
905  * provide different RGMII options we need to configure delay offset
906  * for each pad relative to build in delay.
907  */
908 /* keep rx as "No delay adjustment" and set rx_clk to +0.60ns to get delays of
909  * 1.80ns
910  */
911 #define RX_ID				0x7
912 #define RX_CLK_ID			0x19
913 
914 /* set rx to +0.30ns and rx_clk to -0.90ns to compensate the
915  * internal 1.2ns delay.
916  */
917 #define RX_ND				0xc
918 #define RX_CLK_ND			0x0
919 
920 /* set tx to -0.42ns and tx_clk to +0.96ns to get 1.38ns delay */
921 #define TX_ID				0x0
922 #define TX_CLK_ID			0x1f
923 
924 /* set tx and tx_clk to "No delay adjustment" to keep 0ns
925  * dealy
926  */
927 #define TX_ND				0x7
928 #define TX_CLK_ND			0xf
929 
930 /* MMD Address 0x1C */
931 #define MII_KSZ9031RN_EDPD		0x23
932 #define MII_KSZ9031RN_EDPD_ENABLE	BIT(0)
933 
934 static int ksz9031_of_load_skew_values(struct phy_device *phydev,
935 				       const struct device_node *of_node,
936 				       u16 reg, size_t field_sz,
937 				       const char *field[], u8 numfields,
938 				       bool *update)
939 {
940 	int val[4] = {-1, -2, -3, -4};
941 	int matches = 0;
942 	u16 mask;
943 	u16 maxval;
944 	u16 newval;
945 	int i;
946 
947 	for (i = 0; i < numfields; i++)
948 		if (!of_property_read_u32(of_node, field[i], val + i))
949 			matches++;
950 
951 	if (!matches)
952 		return 0;
953 
954 	*update |= true;
955 
956 	if (matches < numfields)
957 		newval = phy_read_mmd(phydev, 2, reg);
958 	else
959 		newval = 0;
960 
961 	maxval = (field_sz == 4) ? 0xf : 0x1f;
962 	for (i = 0; i < numfields; i++)
963 		if (val[i] != -(i + 1)) {
964 			mask = 0xffff;
965 			mask ^= maxval << (field_sz * i);
966 			newval = (newval & mask) |
967 				(((val[i] / KSZ9031_PS_TO_REG) & maxval)
968 					<< (field_sz * i));
969 		}
970 
971 	return phy_write_mmd(phydev, 2, reg, newval);
972 }
973 
974 /* Center KSZ9031RNX FLP timing at 16ms. */
975 static int ksz9031_center_flp_timing(struct phy_device *phydev)
976 {
977 	int result;
978 
979 	result = phy_write_mmd(phydev, 0, MII_KSZ9031RN_FLP_BURST_TX_HI,
980 			       0x0006);
981 	if (result)
982 		return result;
983 
984 	result = phy_write_mmd(phydev, 0, MII_KSZ9031RN_FLP_BURST_TX_LO,
985 			       0x1A80);
986 	if (result)
987 		return result;
988 
989 	return genphy_restart_aneg(phydev);
990 }
991 
992 /* Enable energy-detect power-down mode */
993 static int ksz9031_enable_edpd(struct phy_device *phydev)
994 {
995 	int reg;
996 
997 	reg = phy_read_mmd(phydev, 0x1C, MII_KSZ9031RN_EDPD);
998 	if (reg < 0)
999 		return reg;
1000 	return phy_write_mmd(phydev, 0x1C, MII_KSZ9031RN_EDPD,
1001 			     reg | MII_KSZ9031RN_EDPD_ENABLE);
1002 }
1003 
1004 static int ksz9031_config_rgmii_delay(struct phy_device *phydev)
1005 {
1006 	u16 rx, tx, rx_clk, tx_clk;
1007 	int ret;
1008 
1009 	switch (phydev->interface) {
1010 	case PHY_INTERFACE_MODE_RGMII:
1011 		tx = TX_ND;
1012 		tx_clk = TX_CLK_ND;
1013 		rx = RX_ND;
1014 		rx_clk = RX_CLK_ND;
1015 		break;
1016 	case PHY_INTERFACE_MODE_RGMII_ID:
1017 		tx = TX_ID;
1018 		tx_clk = TX_CLK_ID;
1019 		rx = RX_ID;
1020 		rx_clk = RX_CLK_ID;
1021 		break;
1022 	case PHY_INTERFACE_MODE_RGMII_RXID:
1023 		tx = TX_ND;
1024 		tx_clk = TX_CLK_ND;
1025 		rx = RX_ID;
1026 		rx_clk = RX_CLK_ID;
1027 		break;
1028 	case PHY_INTERFACE_MODE_RGMII_TXID:
1029 		tx = TX_ID;
1030 		tx_clk = TX_CLK_ID;
1031 		rx = RX_ND;
1032 		rx_clk = RX_CLK_ND;
1033 		break;
1034 	default:
1035 		return 0;
1036 	}
1037 
1038 	ret = phy_write_mmd(phydev, 2, MII_KSZ9031RN_CONTROL_PAD_SKEW,
1039 			    FIELD_PREP(MII_KSZ9031RN_RX_CTL_M, rx) |
1040 			    FIELD_PREP(MII_KSZ9031RN_TX_CTL_M, tx));
1041 	if (ret < 0)
1042 		return ret;
1043 
1044 	ret = phy_write_mmd(phydev, 2, MII_KSZ9031RN_RX_DATA_PAD_SKEW,
1045 			    FIELD_PREP(MII_KSZ9031RN_RXD3, rx) |
1046 			    FIELD_PREP(MII_KSZ9031RN_RXD2, rx) |
1047 			    FIELD_PREP(MII_KSZ9031RN_RXD1, rx) |
1048 			    FIELD_PREP(MII_KSZ9031RN_RXD0, rx));
1049 	if (ret < 0)
1050 		return ret;
1051 
1052 	ret = phy_write_mmd(phydev, 2, MII_KSZ9031RN_TX_DATA_PAD_SKEW,
1053 			    FIELD_PREP(MII_KSZ9031RN_TXD3, tx) |
1054 			    FIELD_PREP(MII_KSZ9031RN_TXD2, tx) |
1055 			    FIELD_PREP(MII_KSZ9031RN_TXD1, tx) |
1056 			    FIELD_PREP(MII_KSZ9031RN_TXD0, tx));
1057 	if (ret < 0)
1058 		return ret;
1059 
1060 	return phy_write_mmd(phydev, 2, MII_KSZ9031RN_CLK_PAD_SKEW,
1061 			     FIELD_PREP(MII_KSZ9031RN_GTX_CLK, tx_clk) |
1062 			     FIELD_PREP(MII_KSZ9031RN_RX_CLK, rx_clk));
1063 }
1064 
1065 static int ksz9031_config_init(struct phy_device *phydev)
1066 {
1067 	const struct device_node *of_node;
1068 	static const char *clk_skews[2] = {"rxc-skew-ps", "txc-skew-ps"};
1069 	static const char *rx_data_skews[4] = {
1070 		"rxd0-skew-ps", "rxd1-skew-ps",
1071 		"rxd2-skew-ps", "rxd3-skew-ps"
1072 	};
1073 	static const char *tx_data_skews[4] = {
1074 		"txd0-skew-ps", "txd1-skew-ps",
1075 		"txd2-skew-ps", "txd3-skew-ps"
1076 	};
1077 	static const char *control_skews[2] = {"txen-skew-ps", "rxdv-skew-ps"};
1078 	const struct device *dev_walker;
1079 	int result;
1080 
1081 	result = ksz9031_enable_edpd(phydev);
1082 	if (result < 0)
1083 		return result;
1084 
1085 	/* The Micrel driver has a deprecated option to place phy OF
1086 	 * properties in the MAC node. Walk up the tree of devices to
1087 	 * find a device with an OF node.
1088 	 */
1089 	dev_walker = &phydev->mdio.dev;
1090 	do {
1091 		of_node = dev_walker->of_node;
1092 		dev_walker = dev_walker->parent;
1093 	} while (!of_node && dev_walker);
1094 
1095 	if (of_node) {
1096 		bool update = false;
1097 
1098 		if (phy_interface_is_rgmii(phydev)) {
1099 			result = ksz9031_config_rgmii_delay(phydev);
1100 			if (result < 0)
1101 				return result;
1102 		}
1103 
1104 		ksz9031_of_load_skew_values(phydev, of_node,
1105 				MII_KSZ9031RN_CLK_PAD_SKEW, 5,
1106 				clk_skews, 2, &update);
1107 
1108 		ksz9031_of_load_skew_values(phydev, of_node,
1109 				MII_KSZ9031RN_CONTROL_PAD_SKEW, 4,
1110 				control_skews, 2, &update);
1111 
1112 		ksz9031_of_load_skew_values(phydev, of_node,
1113 				MII_KSZ9031RN_RX_DATA_PAD_SKEW, 4,
1114 				rx_data_skews, 4, &update);
1115 
1116 		ksz9031_of_load_skew_values(phydev, of_node,
1117 				MII_KSZ9031RN_TX_DATA_PAD_SKEW, 4,
1118 				tx_data_skews, 4, &update);
1119 
1120 		if (update && !phy_interface_is_rgmii(phydev))
1121 			phydev_warn(phydev,
1122 				    "*-skew-ps values should be used only with RGMII PHY modes\n");
1123 
1124 		/* Silicon Errata Sheet (DS80000691D or DS80000692D):
1125 		 * When the device links in the 1000BASE-T slave mode only,
1126 		 * the optional 125MHz reference output clock (CLK125_NDO)
1127 		 * has wide duty cycle variation.
1128 		 *
1129 		 * The optional CLK125_NDO clock does not meet the RGMII
1130 		 * 45/55 percent (min/max) duty cycle requirement and therefore
1131 		 * cannot be used directly by the MAC side for clocking
1132 		 * applications that have setup/hold time requirements on
1133 		 * rising and falling clock edges.
1134 		 *
1135 		 * Workaround:
1136 		 * Force the phy to be the master to receive a stable clock
1137 		 * which meets the duty cycle requirement.
1138 		 */
1139 		if (of_property_read_bool(of_node, "micrel,force-master")) {
1140 			result = phy_read(phydev, MII_CTRL1000);
1141 			if (result < 0)
1142 				goto err_force_master;
1143 
1144 			/* enable master mode, config & prefer master */
1145 			result |= CTL1000_ENABLE_MASTER | CTL1000_AS_MASTER;
1146 			result = phy_write(phydev, MII_CTRL1000, result);
1147 			if (result < 0)
1148 				goto err_force_master;
1149 		}
1150 	}
1151 
1152 	return ksz9031_center_flp_timing(phydev);
1153 
1154 err_force_master:
1155 	phydev_err(phydev, "failed to force the phy to master mode\n");
1156 	return result;
1157 }
1158 
1159 #define KSZ9131_SKEW_5BIT_MAX	2400
1160 #define KSZ9131_SKEW_4BIT_MAX	800
1161 #define KSZ9131_OFFSET		700
1162 #define KSZ9131_STEP		100
1163 
1164 static int ksz9131_of_load_skew_values(struct phy_device *phydev,
1165 				       struct device_node *of_node,
1166 				       u16 reg, size_t field_sz,
1167 				       char *field[], u8 numfields)
1168 {
1169 	int val[4] = {-(1 + KSZ9131_OFFSET), -(2 + KSZ9131_OFFSET),
1170 		      -(3 + KSZ9131_OFFSET), -(4 + KSZ9131_OFFSET)};
1171 	int skewval, skewmax = 0;
1172 	int matches = 0;
1173 	u16 maxval;
1174 	u16 newval;
1175 	u16 mask;
1176 	int i;
1177 
1178 	/* psec properties in dts should mean x pico seconds */
1179 	if (field_sz == 5)
1180 		skewmax = KSZ9131_SKEW_5BIT_MAX;
1181 	else
1182 		skewmax = KSZ9131_SKEW_4BIT_MAX;
1183 
1184 	for (i = 0; i < numfields; i++)
1185 		if (!of_property_read_s32(of_node, field[i], &skewval)) {
1186 			if (skewval < -KSZ9131_OFFSET)
1187 				skewval = -KSZ9131_OFFSET;
1188 			else if (skewval > skewmax)
1189 				skewval = skewmax;
1190 
1191 			val[i] = skewval + KSZ9131_OFFSET;
1192 			matches++;
1193 		}
1194 
1195 	if (!matches)
1196 		return 0;
1197 
1198 	if (matches < numfields)
1199 		newval = phy_read_mmd(phydev, 2, reg);
1200 	else
1201 		newval = 0;
1202 
1203 	maxval = (field_sz == 4) ? 0xf : 0x1f;
1204 	for (i = 0; i < numfields; i++)
1205 		if (val[i] != -(i + 1 + KSZ9131_OFFSET)) {
1206 			mask = 0xffff;
1207 			mask ^= maxval << (field_sz * i);
1208 			newval = (newval & mask) |
1209 				(((val[i] / KSZ9131_STEP) & maxval)
1210 					<< (field_sz * i));
1211 		}
1212 
1213 	return phy_write_mmd(phydev, 2, reg, newval);
1214 }
1215 
1216 #define KSZ9131RN_MMD_COMMON_CTRL_REG	2
1217 #define KSZ9131RN_RXC_DLL_CTRL		76
1218 #define KSZ9131RN_TXC_DLL_CTRL		77
1219 #define KSZ9131RN_DLL_ENABLE_DELAY	0
1220 
1221 static int ksz9131_config_rgmii_delay(struct phy_device *phydev)
1222 {
1223 	const struct kszphy_type *type = phydev->drv->driver_data;
1224 	u16 rxcdll_val, txcdll_val;
1225 	int ret;
1226 
1227 	switch (phydev->interface) {
1228 	case PHY_INTERFACE_MODE_RGMII:
1229 		rxcdll_val = type->disable_dll_rx_bit;
1230 		txcdll_val = type->disable_dll_tx_bit;
1231 		break;
1232 	case PHY_INTERFACE_MODE_RGMII_ID:
1233 		rxcdll_val = KSZ9131RN_DLL_ENABLE_DELAY;
1234 		txcdll_val = KSZ9131RN_DLL_ENABLE_DELAY;
1235 		break;
1236 	case PHY_INTERFACE_MODE_RGMII_RXID:
1237 		rxcdll_val = KSZ9131RN_DLL_ENABLE_DELAY;
1238 		txcdll_val = type->disable_dll_tx_bit;
1239 		break;
1240 	case PHY_INTERFACE_MODE_RGMII_TXID:
1241 		rxcdll_val = type->disable_dll_rx_bit;
1242 		txcdll_val = KSZ9131RN_DLL_ENABLE_DELAY;
1243 		break;
1244 	default:
1245 		return 0;
1246 	}
1247 
1248 	ret = phy_modify_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
1249 			     KSZ9131RN_RXC_DLL_CTRL, type->disable_dll_mask,
1250 			     rxcdll_val);
1251 	if (ret < 0)
1252 		return ret;
1253 
1254 	return phy_modify_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
1255 			      KSZ9131RN_TXC_DLL_CTRL, type->disable_dll_mask,
1256 			      txcdll_val);
1257 }
1258 
1259 /* Silicon Errata DS80000693B
1260  *
1261  * When LEDs are configured in Individual Mode, LED1 is ON in a no-link
1262  * condition. Workaround is to set register 0x1e, bit 9, this way LED1 behaves
1263  * according to the datasheet (off if there is no link).
1264  */
1265 static int ksz9131_led_errata(struct phy_device *phydev)
1266 {
1267 	int reg;
1268 
1269 	reg = phy_read_mmd(phydev, 2, 0);
1270 	if (reg < 0)
1271 		return reg;
1272 
1273 	if (!(reg & BIT(4)))
1274 		return 0;
1275 
1276 	return phy_set_bits(phydev, 0x1e, BIT(9));
1277 }
1278 
1279 static int ksz9131_config_init(struct phy_device *phydev)
1280 {
1281 	struct device_node *of_node;
1282 	char *clk_skews[2] = {"rxc-skew-psec", "txc-skew-psec"};
1283 	char *rx_data_skews[4] = {
1284 		"rxd0-skew-psec", "rxd1-skew-psec",
1285 		"rxd2-skew-psec", "rxd3-skew-psec"
1286 	};
1287 	char *tx_data_skews[4] = {
1288 		"txd0-skew-psec", "txd1-skew-psec",
1289 		"txd2-skew-psec", "txd3-skew-psec"
1290 	};
1291 	char *control_skews[2] = {"txen-skew-psec", "rxdv-skew-psec"};
1292 	const struct device *dev_walker;
1293 	int ret;
1294 
1295 	dev_walker = &phydev->mdio.dev;
1296 	do {
1297 		of_node = dev_walker->of_node;
1298 		dev_walker = dev_walker->parent;
1299 	} while (!of_node && dev_walker);
1300 
1301 	if (!of_node)
1302 		return 0;
1303 
1304 	if (phy_interface_is_rgmii(phydev)) {
1305 		ret = ksz9131_config_rgmii_delay(phydev);
1306 		if (ret < 0)
1307 			return ret;
1308 	}
1309 
1310 	ret = ksz9131_of_load_skew_values(phydev, of_node,
1311 					  MII_KSZ9031RN_CLK_PAD_SKEW, 5,
1312 					  clk_skews, 2);
1313 	if (ret < 0)
1314 		return ret;
1315 
1316 	ret = ksz9131_of_load_skew_values(phydev, of_node,
1317 					  MII_KSZ9031RN_CONTROL_PAD_SKEW, 4,
1318 					  control_skews, 2);
1319 	if (ret < 0)
1320 		return ret;
1321 
1322 	ret = ksz9131_of_load_skew_values(phydev, of_node,
1323 					  MII_KSZ9031RN_RX_DATA_PAD_SKEW, 4,
1324 					  rx_data_skews, 4);
1325 	if (ret < 0)
1326 		return ret;
1327 
1328 	ret = ksz9131_of_load_skew_values(phydev, of_node,
1329 					  MII_KSZ9031RN_TX_DATA_PAD_SKEW, 4,
1330 					  tx_data_skews, 4);
1331 	if (ret < 0)
1332 		return ret;
1333 
1334 	ret = ksz9131_led_errata(phydev);
1335 	if (ret < 0)
1336 		return ret;
1337 
1338 	return 0;
1339 }
1340 
1341 #define MII_KSZ9131_AUTO_MDIX		0x1C
1342 #define MII_KSZ9131_AUTO_MDI_SET	BIT(7)
1343 #define MII_KSZ9131_AUTO_MDIX_SWAP_OFF	BIT(6)
1344 
1345 static int ksz9131_mdix_update(struct phy_device *phydev)
1346 {
1347 	int ret;
1348 
1349 	ret = phy_read(phydev, MII_KSZ9131_AUTO_MDIX);
1350 	if (ret < 0)
1351 		return ret;
1352 
1353 	if (ret & MII_KSZ9131_AUTO_MDIX_SWAP_OFF) {
1354 		if (ret & MII_KSZ9131_AUTO_MDI_SET)
1355 			phydev->mdix_ctrl = ETH_TP_MDI;
1356 		else
1357 			phydev->mdix_ctrl = ETH_TP_MDI_X;
1358 	} else {
1359 		phydev->mdix_ctrl = ETH_TP_MDI_AUTO;
1360 	}
1361 
1362 	if (ret & MII_KSZ9131_AUTO_MDI_SET)
1363 		phydev->mdix = ETH_TP_MDI;
1364 	else
1365 		phydev->mdix = ETH_TP_MDI_X;
1366 
1367 	return 0;
1368 }
1369 
1370 static int ksz9131_config_mdix(struct phy_device *phydev, u8 ctrl)
1371 {
1372 	u16 val;
1373 
1374 	switch (ctrl) {
1375 	case ETH_TP_MDI:
1376 		val = MII_KSZ9131_AUTO_MDIX_SWAP_OFF |
1377 		      MII_KSZ9131_AUTO_MDI_SET;
1378 		break;
1379 	case ETH_TP_MDI_X:
1380 		val = MII_KSZ9131_AUTO_MDIX_SWAP_OFF;
1381 		break;
1382 	case ETH_TP_MDI_AUTO:
1383 		val = 0;
1384 		break;
1385 	default:
1386 		return 0;
1387 	}
1388 
1389 	return phy_modify(phydev, MII_KSZ9131_AUTO_MDIX,
1390 			  MII_KSZ9131_AUTO_MDIX_SWAP_OFF |
1391 			  MII_KSZ9131_AUTO_MDI_SET, val);
1392 }
1393 
1394 static int ksz9131_read_status(struct phy_device *phydev)
1395 {
1396 	int ret;
1397 
1398 	ret = ksz9131_mdix_update(phydev);
1399 	if (ret < 0)
1400 		return ret;
1401 
1402 	return genphy_read_status(phydev);
1403 }
1404 
1405 static int ksz9131_config_aneg(struct phy_device *phydev)
1406 {
1407 	int ret;
1408 
1409 	ret = ksz9131_config_mdix(phydev, phydev->mdix_ctrl);
1410 	if (ret)
1411 		return ret;
1412 
1413 	return genphy_config_aneg(phydev);
1414 }
1415 
1416 static int ksz9477_get_features(struct phy_device *phydev)
1417 {
1418 	int ret;
1419 
1420 	ret = genphy_read_abilities(phydev);
1421 	if (ret)
1422 		return ret;
1423 
1424 	/* The "EEE control and capability 1" (Register 3.20) seems to be
1425 	 * influenced by the "EEE advertisement 1" (Register 7.60). Changes
1426 	 * on the 7.60 will affect 3.20. So, we need to construct our own list
1427 	 * of caps.
1428 	 * KSZ8563R should have 100BaseTX/Full only.
1429 	 */
1430 	linkmode_and(phydev->supported_eee, phydev->supported,
1431 		     PHY_EEE_CAP1_FEATURES);
1432 
1433 	return 0;
1434 }
1435 
1436 #define KSZ8873MLL_GLOBAL_CONTROL_4	0x06
1437 #define KSZ8873MLL_GLOBAL_CONTROL_4_DUPLEX	BIT(6)
1438 #define KSZ8873MLL_GLOBAL_CONTROL_4_SPEED	BIT(4)
1439 static int ksz8873mll_read_status(struct phy_device *phydev)
1440 {
1441 	int regval;
1442 
1443 	/* dummy read */
1444 	regval = phy_read(phydev, KSZ8873MLL_GLOBAL_CONTROL_4);
1445 
1446 	regval = phy_read(phydev, KSZ8873MLL_GLOBAL_CONTROL_4);
1447 
1448 	if (regval & KSZ8873MLL_GLOBAL_CONTROL_4_DUPLEX)
1449 		phydev->duplex = DUPLEX_HALF;
1450 	else
1451 		phydev->duplex = DUPLEX_FULL;
1452 
1453 	if (regval & KSZ8873MLL_GLOBAL_CONTROL_4_SPEED)
1454 		phydev->speed = SPEED_10;
1455 	else
1456 		phydev->speed = SPEED_100;
1457 
1458 	phydev->link = 1;
1459 	phydev->pause = phydev->asym_pause = 0;
1460 
1461 	return 0;
1462 }
1463 
1464 static int ksz9031_get_features(struct phy_device *phydev)
1465 {
1466 	int ret;
1467 
1468 	ret = genphy_read_abilities(phydev);
1469 	if (ret < 0)
1470 		return ret;
1471 
1472 	/* Silicon Errata Sheet (DS80000691D or DS80000692D):
1473 	 * Whenever the device's Asymmetric Pause capability is set to 1,
1474 	 * link-up may fail after a link-up to link-down transition.
1475 	 *
1476 	 * The Errata Sheet is for ksz9031, but ksz9021 has the same issue
1477 	 *
1478 	 * Workaround:
1479 	 * Do not enable the Asymmetric Pause capability bit.
1480 	 */
1481 	linkmode_clear_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, phydev->supported);
1482 
1483 	/* We force setting the Pause capability as the core will force the
1484 	 * Asymmetric Pause capability to 1 otherwise.
1485 	 */
1486 	linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT, phydev->supported);
1487 
1488 	return 0;
1489 }
1490 
1491 static int ksz9031_read_status(struct phy_device *phydev)
1492 {
1493 	int err;
1494 	int regval;
1495 
1496 	err = genphy_read_status(phydev);
1497 	if (err)
1498 		return err;
1499 
1500 	/* Make sure the PHY is not broken. Read idle error count,
1501 	 * and reset the PHY if it is maxed out.
1502 	 */
1503 	regval = phy_read(phydev, MII_STAT1000);
1504 	if ((regval & 0xFF) == 0xFF) {
1505 		phy_init_hw(phydev);
1506 		phydev->link = 0;
1507 		if (phydev->drv->config_intr && phy_interrupt_is_valid(phydev))
1508 			phydev->drv->config_intr(phydev);
1509 		return genphy_config_aneg(phydev);
1510 	}
1511 
1512 	return 0;
1513 }
1514 
1515 static int ksz9x31_cable_test_start(struct phy_device *phydev)
1516 {
1517 	struct kszphy_priv *priv = phydev->priv;
1518 	int ret;
1519 
1520 	/* KSZ9131RNX, DS00002841B-page 38, 4.14 LinkMD (R) Cable Diagnostic
1521 	 * Prior to running the cable diagnostics, Auto-negotiation should
1522 	 * be disabled, full duplex set and the link speed set to 1000Mbps
1523 	 * via the Basic Control Register.
1524 	 */
1525 	ret = phy_modify(phydev, MII_BMCR,
1526 			 BMCR_SPEED1000 | BMCR_FULLDPLX |
1527 			 BMCR_ANENABLE | BMCR_SPEED100,
1528 			 BMCR_SPEED1000 | BMCR_FULLDPLX);
1529 	if (ret)
1530 		return ret;
1531 
1532 	/* KSZ9131RNX, DS00002841B-page 38, 4.14 LinkMD (R) Cable Diagnostic
1533 	 * The Master-Slave configuration should be set to Slave by writing
1534 	 * a value of 0x1000 to the Auto-Negotiation Master Slave Control
1535 	 * Register.
1536 	 */
1537 	ret = phy_read(phydev, MII_CTRL1000);
1538 	if (ret < 0)
1539 		return ret;
1540 
1541 	/* Cache these bits, they need to be restored once LinkMD finishes. */
1542 	priv->vct_ctrl1000 = ret & (CTL1000_ENABLE_MASTER | CTL1000_AS_MASTER);
1543 	ret &= ~(CTL1000_ENABLE_MASTER | CTL1000_AS_MASTER);
1544 	ret |= CTL1000_ENABLE_MASTER;
1545 
1546 	return phy_write(phydev, MII_CTRL1000, ret);
1547 }
1548 
1549 static int ksz9x31_cable_test_result_trans(u16 status)
1550 {
1551 	switch (FIELD_GET(KSZ9x31_LMD_VCT_ST_MASK, status)) {
1552 	case KSZ9x31_LMD_VCT_ST_NORMAL:
1553 		return ETHTOOL_A_CABLE_RESULT_CODE_OK;
1554 	case KSZ9x31_LMD_VCT_ST_OPEN:
1555 		return ETHTOOL_A_CABLE_RESULT_CODE_OPEN;
1556 	case KSZ9x31_LMD_VCT_ST_SHORT:
1557 		return ETHTOOL_A_CABLE_RESULT_CODE_SAME_SHORT;
1558 	case KSZ9x31_LMD_VCT_ST_FAIL:
1559 		fallthrough;
1560 	default:
1561 		return ETHTOOL_A_CABLE_RESULT_CODE_UNSPEC;
1562 	}
1563 }
1564 
1565 static bool ksz9x31_cable_test_failed(u16 status)
1566 {
1567 	int stat = FIELD_GET(KSZ9x31_LMD_VCT_ST_MASK, status);
1568 
1569 	return stat == KSZ9x31_LMD_VCT_ST_FAIL;
1570 }
1571 
1572 static bool ksz9x31_cable_test_fault_length_valid(u16 status)
1573 {
1574 	switch (FIELD_GET(KSZ9x31_LMD_VCT_ST_MASK, status)) {
1575 	case KSZ9x31_LMD_VCT_ST_OPEN:
1576 		fallthrough;
1577 	case KSZ9x31_LMD_VCT_ST_SHORT:
1578 		return true;
1579 	}
1580 	return false;
1581 }
1582 
1583 static int ksz9x31_cable_test_fault_length(struct phy_device *phydev, u16 stat)
1584 {
1585 	int dt = FIELD_GET(KSZ9x31_LMD_VCT_DATA_MASK, stat);
1586 
1587 	/* KSZ9131RNX, DS00002841B-page 38, 4.14 LinkMD (R) Cable Diagnostic
1588 	 *
1589 	 * distance to fault = (VCT_DATA - 22) * 4 / cable propagation velocity
1590 	 */
1591 	if (phydev_id_compare(phydev, PHY_ID_KSZ9131))
1592 		dt = clamp(dt - 22, 0, 255);
1593 
1594 	return (dt * 400) / 10;
1595 }
1596 
1597 static int ksz9x31_cable_test_wait_for_completion(struct phy_device *phydev)
1598 {
1599 	int val, ret;
1600 
1601 	ret = phy_read_poll_timeout(phydev, KSZ9x31_LMD, val,
1602 				    !(val & KSZ9x31_LMD_VCT_EN),
1603 				    30000, 100000, true);
1604 
1605 	return ret < 0 ? ret : 0;
1606 }
1607 
1608 static int ksz9x31_cable_test_get_pair(int pair)
1609 {
1610 	static const int ethtool_pair[] = {
1611 		ETHTOOL_A_CABLE_PAIR_A,
1612 		ETHTOOL_A_CABLE_PAIR_B,
1613 		ETHTOOL_A_CABLE_PAIR_C,
1614 		ETHTOOL_A_CABLE_PAIR_D,
1615 	};
1616 
1617 	return ethtool_pair[pair];
1618 }
1619 
1620 static int ksz9x31_cable_test_one_pair(struct phy_device *phydev, int pair)
1621 {
1622 	int ret, val;
1623 
1624 	/* KSZ9131RNX, DS00002841B-page 38, 4.14 LinkMD (R) Cable Diagnostic
1625 	 * To test each individual cable pair, set the cable pair in the Cable
1626 	 * Diagnostics Test Pair (VCT_PAIR[1:0]) field of the LinkMD Cable
1627 	 * Diagnostic Register, along with setting the Cable Diagnostics Test
1628 	 * Enable (VCT_EN) bit. The Cable Diagnostics Test Enable (VCT_EN) bit
1629 	 * will self clear when the test is concluded.
1630 	 */
1631 	ret = phy_write(phydev, KSZ9x31_LMD,
1632 			KSZ9x31_LMD_VCT_EN | KSZ9x31_LMD_VCT_PAIR(pair));
1633 	if (ret)
1634 		return ret;
1635 
1636 	ret = ksz9x31_cable_test_wait_for_completion(phydev);
1637 	if (ret)
1638 		return ret;
1639 
1640 	val = phy_read(phydev, KSZ9x31_LMD);
1641 	if (val < 0)
1642 		return val;
1643 
1644 	if (ksz9x31_cable_test_failed(val))
1645 		return -EAGAIN;
1646 
1647 	ret = ethnl_cable_test_result(phydev,
1648 				      ksz9x31_cable_test_get_pair(pair),
1649 				      ksz9x31_cable_test_result_trans(val));
1650 	if (ret)
1651 		return ret;
1652 
1653 	if (!ksz9x31_cable_test_fault_length_valid(val))
1654 		return 0;
1655 
1656 	return ethnl_cable_test_fault_length(phydev,
1657 					     ksz9x31_cable_test_get_pair(pair),
1658 					     ksz9x31_cable_test_fault_length(phydev, val));
1659 }
1660 
1661 static int ksz9x31_cable_test_get_status(struct phy_device *phydev,
1662 					 bool *finished)
1663 {
1664 	struct kszphy_priv *priv = phydev->priv;
1665 	unsigned long pair_mask = 0xf;
1666 	int retries = 20;
1667 	int pair, ret, rv;
1668 
1669 	*finished = false;
1670 
1671 	/* Try harder if link partner is active */
1672 	while (pair_mask && retries--) {
1673 		for_each_set_bit(pair, &pair_mask, 4) {
1674 			ret = ksz9x31_cable_test_one_pair(phydev, pair);
1675 			if (ret == -EAGAIN)
1676 				continue;
1677 			if (ret < 0)
1678 				return ret;
1679 			clear_bit(pair, &pair_mask);
1680 		}
1681 		/* If link partner is in autonegotiation mode it will send 2ms
1682 		 * of FLPs with at least 6ms of silence.
1683 		 * Add 2ms sleep to have better chances to hit this silence.
1684 		 */
1685 		if (pair_mask)
1686 			usleep_range(2000, 3000);
1687 	}
1688 
1689 	/* Report remaining unfinished pair result as unknown. */
1690 	for_each_set_bit(pair, &pair_mask, 4) {
1691 		ret = ethnl_cable_test_result(phydev,
1692 					      ksz9x31_cable_test_get_pair(pair),
1693 					      ETHTOOL_A_CABLE_RESULT_CODE_UNSPEC);
1694 	}
1695 
1696 	*finished = true;
1697 
1698 	/* Restore cached bits from before LinkMD got started. */
1699 	rv = phy_modify(phydev, MII_CTRL1000,
1700 			CTL1000_ENABLE_MASTER | CTL1000_AS_MASTER,
1701 			priv->vct_ctrl1000);
1702 	if (rv)
1703 		return rv;
1704 
1705 	return ret;
1706 }
1707 
1708 static int ksz8873mll_config_aneg(struct phy_device *phydev)
1709 {
1710 	return 0;
1711 }
1712 
1713 static int ksz886x_config_mdix(struct phy_device *phydev, u8 ctrl)
1714 {
1715 	u16 val;
1716 
1717 	switch (ctrl) {
1718 	case ETH_TP_MDI:
1719 		val = KSZ886X_BMCR_DISABLE_AUTO_MDIX;
1720 		break;
1721 	case ETH_TP_MDI_X:
1722 		/* Note: The naming of the bit KSZ886X_BMCR_FORCE_MDI is bit
1723 		 * counter intuitive, the "-X" in "1 = Force MDI" in the data
1724 		 * sheet seems to be missing:
1725 		 * 1 = Force MDI (sic!) (transmit on RX+/RX- pins)
1726 		 * 0 = Normal operation (transmit on TX+/TX- pins)
1727 		 */
1728 		val = KSZ886X_BMCR_DISABLE_AUTO_MDIX | KSZ886X_BMCR_FORCE_MDI;
1729 		break;
1730 	case ETH_TP_MDI_AUTO:
1731 		val = 0;
1732 		break;
1733 	default:
1734 		return 0;
1735 	}
1736 
1737 	return phy_modify(phydev, MII_BMCR,
1738 			  KSZ886X_BMCR_HP_MDIX | KSZ886X_BMCR_FORCE_MDI |
1739 			  KSZ886X_BMCR_DISABLE_AUTO_MDIX,
1740 			  KSZ886X_BMCR_HP_MDIX | val);
1741 }
1742 
1743 static int ksz886x_config_aneg(struct phy_device *phydev)
1744 {
1745 	int ret;
1746 
1747 	ret = genphy_config_aneg(phydev);
1748 	if (ret)
1749 		return ret;
1750 
1751 	if (phydev->autoneg != AUTONEG_ENABLE) {
1752 		/* When autonegotation is disabled, we need to manually force
1753 		 * the link state. If we don't do this, the PHY will keep
1754 		 * sending Fast Link Pulses (FLPs) which are part of the
1755 		 * autonegotiation process. This is not desired when
1756 		 * autonegotiation is off.
1757 		 */
1758 		ret = phy_set_bits(phydev, MII_KSZPHY_CTRL,
1759 				   KSZ886X_CTRL_FORCE_LINK);
1760 		if (ret)
1761 			return ret;
1762 	} else {
1763 		/* If we had previously forced the link state, we need to
1764 		 * clear KSZ886X_CTRL_FORCE_LINK bit now. Otherwise, the PHY
1765 		 * will not perform autonegotiation.
1766 		 */
1767 		ret = phy_clear_bits(phydev, MII_KSZPHY_CTRL,
1768 				     KSZ886X_CTRL_FORCE_LINK);
1769 		if (ret)
1770 			return ret;
1771 	}
1772 
1773 	/* The MDI-X configuration is automatically changed by the PHY after
1774 	 * switching from autoneg off to on. So, take MDI-X configuration under
1775 	 * own control and set it after autoneg configuration was done.
1776 	 */
1777 	return ksz886x_config_mdix(phydev, phydev->mdix_ctrl);
1778 }
1779 
1780 static int ksz886x_mdix_update(struct phy_device *phydev)
1781 {
1782 	int ret;
1783 
1784 	ret = phy_read(phydev, MII_BMCR);
1785 	if (ret < 0)
1786 		return ret;
1787 
1788 	if (ret & KSZ886X_BMCR_DISABLE_AUTO_MDIX) {
1789 		if (ret & KSZ886X_BMCR_FORCE_MDI)
1790 			phydev->mdix_ctrl = ETH_TP_MDI_X;
1791 		else
1792 			phydev->mdix_ctrl = ETH_TP_MDI;
1793 	} else {
1794 		phydev->mdix_ctrl = ETH_TP_MDI_AUTO;
1795 	}
1796 
1797 	ret = phy_read(phydev, MII_KSZPHY_CTRL);
1798 	if (ret < 0)
1799 		return ret;
1800 
1801 	/* Same reverse logic as KSZ886X_BMCR_FORCE_MDI */
1802 	if (ret & KSZ886X_CTRL_MDIX_STAT)
1803 		phydev->mdix = ETH_TP_MDI_X;
1804 	else
1805 		phydev->mdix = ETH_TP_MDI;
1806 
1807 	return 0;
1808 }
1809 
1810 static int ksz886x_read_status(struct phy_device *phydev)
1811 {
1812 	int ret;
1813 
1814 	ret = ksz886x_mdix_update(phydev);
1815 	if (ret < 0)
1816 		return ret;
1817 
1818 	return genphy_read_status(phydev);
1819 }
1820 
1821 struct ksz9477_errata_write {
1822 	u8 dev_addr;
1823 	u8 reg_addr;
1824 	u16 val;
1825 };
1826 
1827 static const struct ksz9477_errata_write ksz9477_errata_writes[] = {
1828 	 /* Register settings are needed to improve PHY receive performance */
1829 	{0x01, 0x6f, 0xdd0b},
1830 	{0x01, 0x8f, 0x6032},
1831 	{0x01, 0x9d, 0x248c},
1832 	{0x01, 0x75, 0x0060},
1833 	{0x01, 0xd3, 0x7777},
1834 	{0x1c, 0x06, 0x3008},
1835 	{0x1c, 0x08, 0x2000},
1836 
1837 	/* Transmit waveform amplitude can be improved (1000BASE-T, 100BASE-TX, 10BASE-Te) */
1838 	{0x1c, 0x04, 0x00d0},
1839 
1840 	/* Register settings are required to meet data sheet supply current specifications */
1841 	{0x1c, 0x13, 0x6eff},
1842 	{0x1c, 0x14, 0xe6ff},
1843 	{0x1c, 0x15, 0x6eff},
1844 	{0x1c, 0x16, 0xe6ff},
1845 	{0x1c, 0x17, 0x00ff},
1846 	{0x1c, 0x18, 0x43ff},
1847 	{0x1c, 0x19, 0xc3ff},
1848 	{0x1c, 0x1a, 0x6fff},
1849 	{0x1c, 0x1b, 0x07ff},
1850 	{0x1c, 0x1c, 0x0fff},
1851 	{0x1c, 0x1d, 0xe7ff},
1852 	{0x1c, 0x1e, 0xefff},
1853 	{0x1c, 0x20, 0xeeee},
1854 };
1855 
1856 static int ksz9477_config_init(struct phy_device *phydev)
1857 {
1858 	int err;
1859 	int i;
1860 
1861 	/* Apply PHY settings to address errata listed in
1862 	 * KSZ9477, KSZ9897, KSZ9896, KSZ9567, KSZ8565
1863 	 * Silicon Errata and Data Sheet Clarification documents.
1864 	 *
1865 	 * Document notes: Before configuring the PHY MMD registers, it is
1866 	 * necessary to set the PHY to 100 Mbps speed with auto-negotiation
1867 	 * disabled by writing to register 0xN100-0xN101. After writing the
1868 	 * MMD registers, and after all errata workarounds that involve PHY
1869 	 * register settings, write register 0xN100-0xN101 again to enable
1870 	 * and restart auto-negotiation.
1871 	 */
1872 	err = phy_write(phydev, MII_BMCR, BMCR_SPEED100 | BMCR_FULLDPLX);
1873 	if (err)
1874 		return err;
1875 
1876 	for (i = 0; i < ARRAY_SIZE(ksz9477_errata_writes); ++i) {
1877 		const struct ksz9477_errata_write *errata = &ksz9477_errata_writes[i];
1878 
1879 		err = phy_write_mmd(phydev, errata->dev_addr, errata->reg_addr, errata->val);
1880 		if (err)
1881 			return err;
1882 	}
1883 
1884 	/* According to KSZ9477 Errata DS80000754C (Module 4) all EEE modes
1885 	 * in this switch shall be regarded as broken.
1886 	 */
1887 	if (phydev->dev_flags & MICREL_NO_EEE)
1888 		phydev->eee_broken_modes = -1;
1889 
1890 	err = genphy_restart_aneg(phydev);
1891 	if (err)
1892 		return err;
1893 
1894 	return kszphy_config_init(phydev);
1895 }
1896 
1897 static int kszphy_get_sset_count(struct phy_device *phydev)
1898 {
1899 	return ARRAY_SIZE(kszphy_hw_stats);
1900 }
1901 
1902 static void kszphy_get_strings(struct phy_device *phydev, u8 *data)
1903 {
1904 	int i;
1905 
1906 	for (i = 0; i < ARRAY_SIZE(kszphy_hw_stats); i++) {
1907 		strscpy(data + i * ETH_GSTRING_LEN,
1908 			kszphy_hw_stats[i].string, ETH_GSTRING_LEN);
1909 	}
1910 }
1911 
1912 static u64 kszphy_get_stat(struct phy_device *phydev, int i)
1913 {
1914 	struct kszphy_hw_stat stat = kszphy_hw_stats[i];
1915 	struct kszphy_priv *priv = phydev->priv;
1916 	int val;
1917 	u64 ret;
1918 
1919 	val = phy_read(phydev, stat.reg);
1920 	if (val < 0) {
1921 		ret = U64_MAX;
1922 	} else {
1923 		val = val & ((1 << stat.bits) - 1);
1924 		priv->stats[i] += val;
1925 		ret = priv->stats[i];
1926 	}
1927 
1928 	return ret;
1929 }
1930 
1931 static void kszphy_get_stats(struct phy_device *phydev,
1932 			     struct ethtool_stats *stats, u64 *data)
1933 {
1934 	int i;
1935 
1936 	for (i = 0; i < ARRAY_SIZE(kszphy_hw_stats); i++)
1937 		data[i] = kszphy_get_stat(phydev, i);
1938 }
1939 
1940 static int kszphy_suspend(struct phy_device *phydev)
1941 {
1942 	/* Disable PHY Interrupts */
1943 	if (phy_interrupt_is_valid(phydev)) {
1944 		phydev->interrupts = PHY_INTERRUPT_DISABLED;
1945 		if (phydev->drv->config_intr)
1946 			phydev->drv->config_intr(phydev);
1947 	}
1948 
1949 	return genphy_suspend(phydev);
1950 }
1951 
1952 static void kszphy_parse_led_mode(struct phy_device *phydev)
1953 {
1954 	const struct kszphy_type *type = phydev->drv->driver_data;
1955 	const struct device_node *np = phydev->mdio.dev.of_node;
1956 	struct kszphy_priv *priv = phydev->priv;
1957 	int ret;
1958 
1959 	if (type && type->led_mode_reg) {
1960 		ret = of_property_read_u32(np, "micrel,led-mode",
1961 					   &priv->led_mode);
1962 
1963 		if (ret)
1964 			priv->led_mode = -1;
1965 
1966 		if (priv->led_mode > 3) {
1967 			phydev_err(phydev, "invalid led mode: 0x%02x\n",
1968 				   priv->led_mode);
1969 			priv->led_mode = -1;
1970 		}
1971 	} else {
1972 		priv->led_mode = -1;
1973 	}
1974 }
1975 
1976 static int kszphy_resume(struct phy_device *phydev)
1977 {
1978 	int ret;
1979 
1980 	genphy_resume(phydev);
1981 
1982 	/* After switching from power-down to normal mode, an internal global
1983 	 * reset is automatically generated. Wait a minimum of 1 ms before
1984 	 * read/write access to the PHY registers.
1985 	 */
1986 	usleep_range(1000, 2000);
1987 
1988 	ret = kszphy_config_reset(phydev);
1989 	if (ret)
1990 		return ret;
1991 
1992 	/* Enable PHY Interrupts */
1993 	if (phy_interrupt_is_valid(phydev)) {
1994 		phydev->interrupts = PHY_INTERRUPT_ENABLED;
1995 		if (phydev->drv->config_intr)
1996 			phydev->drv->config_intr(phydev);
1997 	}
1998 
1999 	return 0;
2000 }
2001 
2002 static int kszphy_probe(struct phy_device *phydev)
2003 {
2004 	const struct kszphy_type *type = phydev->drv->driver_data;
2005 	const struct device_node *np = phydev->mdio.dev.of_node;
2006 	struct kszphy_priv *priv;
2007 	struct clk *clk;
2008 
2009 	priv = devm_kzalloc(&phydev->mdio.dev, sizeof(*priv), GFP_KERNEL);
2010 	if (!priv)
2011 		return -ENOMEM;
2012 
2013 	phydev->priv = priv;
2014 
2015 	priv->type = type;
2016 
2017 	kszphy_parse_led_mode(phydev);
2018 
2019 	clk = devm_clk_get_optional_enabled(&phydev->mdio.dev, "rmii-ref");
2020 	/* NOTE: clk may be NULL if building without CONFIG_HAVE_CLK */
2021 	if (!IS_ERR_OR_NULL(clk)) {
2022 		unsigned long rate = clk_get_rate(clk);
2023 		bool rmii_ref_clk_sel_25_mhz;
2024 
2025 		if (type)
2026 			priv->rmii_ref_clk_sel = type->has_rmii_ref_clk_sel;
2027 		rmii_ref_clk_sel_25_mhz = of_property_read_bool(np,
2028 				"micrel,rmii-reference-clock-select-25-mhz");
2029 
2030 		if (rate > 24500000 && rate < 25500000) {
2031 			priv->rmii_ref_clk_sel_val = rmii_ref_clk_sel_25_mhz;
2032 		} else if (rate > 49500000 && rate < 50500000) {
2033 			priv->rmii_ref_clk_sel_val = !rmii_ref_clk_sel_25_mhz;
2034 		} else {
2035 			phydev_err(phydev, "Clock rate out of range: %ld\n",
2036 				   rate);
2037 			return -EINVAL;
2038 		}
2039 	} else if (!clk) {
2040 		/* unnamed clock from the generic ethernet-phy binding */
2041 		clk = devm_clk_get_optional_enabled(&phydev->mdio.dev, NULL);
2042 		if (IS_ERR(clk))
2043 			return PTR_ERR(clk);
2044 	}
2045 
2046 	if (ksz8041_fiber_mode(phydev))
2047 		phydev->port = PORT_FIBRE;
2048 
2049 	/* Support legacy board-file configuration */
2050 	if (phydev->dev_flags & MICREL_PHY_50MHZ_CLK) {
2051 		priv->rmii_ref_clk_sel = true;
2052 		priv->rmii_ref_clk_sel_val = true;
2053 	}
2054 
2055 	return 0;
2056 }
2057 
2058 static int lan8814_cable_test_start(struct phy_device *phydev)
2059 {
2060 	/* If autoneg is enabled, we won't be able to test cross pair
2061 	 * short. In this case, the PHY will "detect" a link and
2062 	 * confuse the internal state machine - disable auto neg here.
2063 	 * Set the speed to 1000mbit and full duplex.
2064 	 */
2065 	return phy_modify(phydev, MII_BMCR, BMCR_ANENABLE | BMCR_SPEED100,
2066 			  BMCR_SPEED1000 | BMCR_FULLDPLX);
2067 }
2068 
2069 static int ksz886x_cable_test_start(struct phy_device *phydev)
2070 {
2071 	if (phydev->dev_flags & MICREL_KSZ8_P1_ERRATA)
2072 		return -EOPNOTSUPP;
2073 
2074 	/* If autoneg is enabled, we won't be able to test cross pair
2075 	 * short. In this case, the PHY will "detect" a link and
2076 	 * confuse the internal state machine - disable auto neg here.
2077 	 * If autoneg is disabled, we should set the speed to 10mbit.
2078 	 */
2079 	return phy_clear_bits(phydev, MII_BMCR, BMCR_ANENABLE | BMCR_SPEED100);
2080 }
2081 
2082 static __always_inline int ksz886x_cable_test_result_trans(u16 status, u16 mask)
2083 {
2084 	switch (FIELD_GET(mask, status)) {
2085 	case KSZ8081_LMD_STAT_NORMAL:
2086 		return ETHTOOL_A_CABLE_RESULT_CODE_OK;
2087 	case KSZ8081_LMD_STAT_SHORT:
2088 		return ETHTOOL_A_CABLE_RESULT_CODE_SAME_SHORT;
2089 	case KSZ8081_LMD_STAT_OPEN:
2090 		return ETHTOOL_A_CABLE_RESULT_CODE_OPEN;
2091 	case KSZ8081_LMD_STAT_FAIL:
2092 		fallthrough;
2093 	default:
2094 		return ETHTOOL_A_CABLE_RESULT_CODE_UNSPEC;
2095 	}
2096 }
2097 
2098 static __always_inline bool ksz886x_cable_test_failed(u16 status, u16 mask)
2099 {
2100 	return FIELD_GET(mask, status) ==
2101 		KSZ8081_LMD_STAT_FAIL;
2102 }
2103 
2104 static __always_inline bool ksz886x_cable_test_fault_length_valid(u16 status, u16 mask)
2105 {
2106 	switch (FIELD_GET(mask, status)) {
2107 	case KSZ8081_LMD_STAT_OPEN:
2108 		fallthrough;
2109 	case KSZ8081_LMD_STAT_SHORT:
2110 		return true;
2111 	}
2112 	return false;
2113 }
2114 
2115 static __always_inline int ksz886x_cable_test_fault_length(struct phy_device *phydev,
2116 							   u16 status, u16 data_mask)
2117 {
2118 	int dt;
2119 
2120 	/* According to the data sheet the distance to the fault is
2121 	 * DELTA_TIME * 0.4 meters for ksz phys.
2122 	 * (DELTA_TIME - 22) * 0.8 for lan8814 phy.
2123 	 */
2124 	dt = FIELD_GET(data_mask, status);
2125 
2126 	if (phydev_id_compare(phydev, PHY_ID_LAN8814))
2127 		return ((dt - 22) * 800) / 10;
2128 	else
2129 		return (dt * 400) / 10;
2130 }
2131 
2132 static int ksz886x_cable_test_wait_for_completion(struct phy_device *phydev)
2133 {
2134 	const struct kszphy_type *type = phydev->drv->driver_data;
2135 	int val, ret;
2136 
2137 	ret = phy_read_poll_timeout(phydev, type->cable_diag_reg, val,
2138 				    !(val & KSZ8081_LMD_ENABLE_TEST),
2139 				    30000, 100000, true);
2140 
2141 	return ret < 0 ? ret : 0;
2142 }
2143 
2144 static int lan8814_cable_test_one_pair(struct phy_device *phydev, int pair)
2145 {
2146 	static const int ethtool_pair[] = { ETHTOOL_A_CABLE_PAIR_A,
2147 					    ETHTOOL_A_CABLE_PAIR_B,
2148 					    ETHTOOL_A_CABLE_PAIR_C,
2149 					    ETHTOOL_A_CABLE_PAIR_D,
2150 					  };
2151 	u32 fault_length;
2152 	int ret;
2153 	int val;
2154 
2155 	val = KSZ8081_LMD_ENABLE_TEST;
2156 	val = val | (pair << LAN8814_PAIR_BIT_SHIFT);
2157 
2158 	ret = phy_write(phydev, LAN8814_CABLE_DIAG, val);
2159 	if (ret < 0)
2160 		return ret;
2161 
2162 	ret = ksz886x_cable_test_wait_for_completion(phydev);
2163 	if (ret)
2164 		return ret;
2165 
2166 	val = phy_read(phydev, LAN8814_CABLE_DIAG);
2167 	if (val < 0)
2168 		return val;
2169 
2170 	if (ksz886x_cable_test_failed(val, LAN8814_CABLE_DIAG_STAT_MASK))
2171 		return -EAGAIN;
2172 
2173 	ret = ethnl_cable_test_result(phydev, ethtool_pair[pair],
2174 				      ksz886x_cable_test_result_trans(val,
2175 								      LAN8814_CABLE_DIAG_STAT_MASK
2176 								      ));
2177 	if (ret)
2178 		return ret;
2179 
2180 	if (!ksz886x_cable_test_fault_length_valid(val, LAN8814_CABLE_DIAG_STAT_MASK))
2181 		return 0;
2182 
2183 	fault_length = ksz886x_cable_test_fault_length(phydev, val,
2184 						       LAN8814_CABLE_DIAG_VCT_DATA_MASK);
2185 
2186 	return ethnl_cable_test_fault_length(phydev, ethtool_pair[pair], fault_length);
2187 }
2188 
2189 static int ksz886x_cable_test_one_pair(struct phy_device *phydev, int pair)
2190 {
2191 	static const int ethtool_pair[] = {
2192 		ETHTOOL_A_CABLE_PAIR_A,
2193 		ETHTOOL_A_CABLE_PAIR_B,
2194 	};
2195 	int ret, val, mdix;
2196 	u32 fault_length;
2197 
2198 	/* There is no way to choice the pair, like we do one ksz9031.
2199 	 * We can workaround this limitation by using the MDI-X functionality.
2200 	 */
2201 	if (pair == 0)
2202 		mdix = ETH_TP_MDI;
2203 	else
2204 		mdix = ETH_TP_MDI_X;
2205 
2206 	switch (phydev->phy_id & MICREL_PHY_ID_MASK) {
2207 	case PHY_ID_KSZ8081:
2208 		ret = ksz8081_config_mdix(phydev, mdix);
2209 		break;
2210 	case PHY_ID_KSZ886X:
2211 		ret = ksz886x_config_mdix(phydev, mdix);
2212 		break;
2213 	default:
2214 		ret = -ENODEV;
2215 	}
2216 
2217 	if (ret)
2218 		return ret;
2219 
2220 	/* Now we are ready to fire. This command will send a 100ns pulse
2221 	 * to the pair.
2222 	 */
2223 	ret = phy_write(phydev, KSZ8081_LMD, KSZ8081_LMD_ENABLE_TEST);
2224 	if (ret)
2225 		return ret;
2226 
2227 	ret = ksz886x_cable_test_wait_for_completion(phydev);
2228 	if (ret)
2229 		return ret;
2230 
2231 	val = phy_read(phydev, KSZ8081_LMD);
2232 	if (val < 0)
2233 		return val;
2234 
2235 	if (ksz886x_cable_test_failed(val, KSZ8081_LMD_STAT_MASK))
2236 		return -EAGAIN;
2237 
2238 	ret = ethnl_cable_test_result(phydev, ethtool_pair[pair],
2239 				      ksz886x_cable_test_result_trans(val, KSZ8081_LMD_STAT_MASK));
2240 	if (ret)
2241 		return ret;
2242 
2243 	if (!ksz886x_cable_test_fault_length_valid(val, KSZ8081_LMD_STAT_MASK))
2244 		return 0;
2245 
2246 	fault_length = ksz886x_cable_test_fault_length(phydev, val, KSZ8081_LMD_DELTA_TIME_MASK);
2247 
2248 	return ethnl_cable_test_fault_length(phydev, ethtool_pair[pair], fault_length);
2249 }
2250 
2251 static int ksz886x_cable_test_get_status(struct phy_device *phydev,
2252 					 bool *finished)
2253 {
2254 	const struct kszphy_type *type = phydev->drv->driver_data;
2255 	unsigned long pair_mask = type->pair_mask;
2256 	int retries = 20;
2257 	int ret = 0;
2258 	int pair;
2259 
2260 	*finished = false;
2261 
2262 	/* Try harder if link partner is active */
2263 	while (pair_mask && retries--) {
2264 		for_each_set_bit(pair, &pair_mask, 4) {
2265 			if (type->cable_diag_reg == LAN8814_CABLE_DIAG)
2266 				ret = lan8814_cable_test_one_pair(phydev, pair);
2267 			else
2268 				ret = ksz886x_cable_test_one_pair(phydev, pair);
2269 			if (ret == -EAGAIN)
2270 				continue;
2271 			if (ret < 0)
2272 				return ret;
2273 			clear_bit(pair, &pair_mask);
2274 		}
2275 		/* If link partner is in autonegotiation mode it will send 2ms
2276 		 * of FLPs with at least 6ms of silence.
2277 		 * Add 2ms sleep to have better chances to hit this silence.
2278 		 */
2279 		if (pair_mask)
2280 			msleep(2);
2281 	}
2282 
2283 	*finished = true;
2284 
2285 	return ret;
2286 }
2287 
2288 #define LAN_EXT_PAGE_ACCESS_CONTROL			0x16
2289 #define LAN_EXT_PAGE_ACCESS_ADDRESS_DATA		0x17
2290 #define LAN_EXT_PAGE_ACCESS_CTRL_EP_FUNC		0x4000
2291 
2292 #define LAN8814_QSGMII_SOFT_RESET			0x43
2293 #define LAN8814_QSGMII_SOFT_RESET_BIT			BIT(0)
2294 #define LAN8814_QSGMII_PCS1G_ANEG_CONFIG		0x13
2295 #define LAN8814_QSGMII_PCS1G_ANEG_CONFIG_ANEG_ENA	BIT(3)
2296 #define LAN8814_ALIGN_SWAP				0x4a
2297 #define LAN8814_ALIGN_TX_A_B_SWAP			0x1
2298 #define LAN8814_ALIGN_TX_A_B_SWAP_MASK			GENMASK(2, 0)
2299 
2300 #define LAN8804_ALIGN_SWAP				0x4a
2301 #define LAN8804_ALIGN_TX_A_B_SWAP			0x1
2302 #define LAN8804_ALIGN_TX_A_B_SWAP_MASK			GENMASK(2, 0)
2303 #define LAN8814_CLOCK_MANAGEMENT			0xd
2304 #define LAN8814_LINK_QUALITY				0x8e
2305 
2306 static int lanphy_read_page_reg(struct phy_device *phydev, int page, u32 addr)
2307 {
2308 	int data;
2309 
2310 	phy_lock_mdio_bus(phydev);
2311 	__phy_write(phydev, LAN_EXT_PAGE_ACCESS_CONTROL, page);
2312 	__phy_write(phydev, LAN_EXT_PAGE_ACCESS_ADDRESS_DATA, addr);
2313 	__phy_write(phydev, LAN_EXT_PAGE_ACCESS_CONTROL,
2314 		    (page | LAN_EXT_PAGE_ACCESS_CTRL_EP_FUNC));
2315 	data = __phy_read(phydev, LAN_EXT_PAGE_ACCESS_ADDRESS_DATA);
2316 	phy_unlock_mdio_bus(phydev);
2317 
2318 	return data;
2319 }
2320 
2321 static int lanphy_write_page_reg(struct phy_device *phydev, int page, u16 addr,
2322 				 u16 val)
2323 {
2324 	phy_lock_mdio_bus(phydev);
2325 	__phy_write(phydev, LAN_EXT_PAGE_ACCESS_CONTROL, page);
2326 	__phy_write(phydev, LAN_EXT_PAGE_ACCESS_ADDRESS_DATA, addr);
2327 	__phy_write(phydev, LAN_EXT_PAGE_ACCESS_CONTROL,
2328 		    page | LAN_EXT_PAGE_ACCESS_CTRL_EP_FUNC);
2329 
2330 	val = __phy_write(phydev, LAN_EXT_PAGE_ACCESS_ADDRESS_DATA, val);
2331 	if (val != 0)
2332 		phydev_err(phydev, "Error: phy_write has returned error %d\n",
2333 			   val);
2334 	phy_unlock_mdio_bus(phydev);
2335 	return val;
2336 }
2337 
2338 static int lan8814_config_ts_intr(struct phy_device *phydev, bool enable)
2339 {
2340 	u16 val = 0;
2341 
2342 	if (enable)
2343 		val = PTP_TSU_INT_EN_PTP_TX_TS_EN_ |
2344 		      PTP_TSU_INT_EN_PTP_TX_TS_OVRFL_EN_ |
2345 		      PTP_TSU_INT_EN_PTP_RX_TS_EN_ |
2346 		      PTP_TSU_INT_EN_PTP_RX_TS_OVRFL_EN_;
2347 
2348 	return lanphy_write_page_reg(phydev, 5, PTP_TSU_INT_EN, val);
2349 }
2350 
2351 static void lan8814_ptp_rx_ts_get(struct phy_device *phydev,
2352 				  u32 *seconds, u32 *nano_seconds, u16 *seq_id)
2353 {
2354 	*seconds = lanphy_read_page_reg(phydev, 5, PTP_RX_INGRESS_SEC_HI);
2355 	*seconds = (*seconds << 16) |
2356 		   lanphy_read_page_reg(phydev, 5, PTP_RX_INGRESS_SEC_LO);
2357 
2358 	*nano_seconds = lanphy_read_page_reg(phydev, 5, PTP_RX_INGRESS_NS_HI);
2359 	*nano_seconds = ((*nano_seconds & 0x3fff) << 16) |
2360 			lanphy_read_page_reg(phydev, 5, PTP_RX_INGRESS_NS_LO);
2361 
2362 	*seq_id = lanphy_read_page_reg(phydev, 5, PTP_RX_MSG_HEADER2);
2363 }
2364 
2365 static void lan8814_ptp_tx_ts_get(struct phy_device *phydev,
2366 				  u32 *seconds, u32 *nano_seconds, u16 *seq_id)
2367 {
2368 	*seconds = lanphy_read_page_reg(phydev, 5, PTP_TX_EGRESS_SEC_HI);
2369 	*seconds = *seconds << 16 |
2370 		   lanphy_read_page_reg(phydev, 5, PTP_TX_EGRESS_SEC_LO);
2371 
2372 	*nano_seconds = lanphy_read_page_reg(phydev, 5, PTP_TX_EGRESS_NS_HI);
2373 	*nano_seconds = ((*nano_seconds & 0x3fff) << 16) |
2374 			lanphy_read_page_reg(phydev, 5, PTP_TX_EGRESS_NS_LO);
2375 
2376 	*seq_id = lanphy_read_page_reg(phydev, 5, PTP_TX_MSG_HEADER2);
2377 }
2378 
2379 static int lan8814_ts_info(struct mii_timestamper *mii_ts, struct ethtool_ts_info *info)
2380 {
2381 	struct kszphy_ptp_priv *ptp_priv = container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
2382 	struct phy_device *phydev = ptp_priv->phydev;
2383 	struct lan8814_shared_priv *shared = phydev->shared->priv;
2384 
2385 	info->so_timestamping = SOF_TIMESTAMPING_TX_HARDWARE |
2386 				SOF_TIMESTAMPING_RX_HARDWARE |
2387 				SOF_TIMESTAMPING_RAW_HARDWARE;
2388 
2389 	info->phc_index = ptp_clock_index(shared->ptp_clock);
2390 
2391 	info->tx_types =
2392 		(1 << HWTSTAMP_TX_OFF) |
2393 		(1 << HWTSTAMP_TX_ON) |
2394 		(1 << HWTSTAMP_TX_ONESTEP_SYNC);
2395 
2396 	info->rx_filters =
2397 		(1 << HWTSTAMP_FILTER_NONE) |
2398 		(1 << HWTSTAMP_FILTER_PTP_V1_L4_EVENT) |
2399 		(1 << HWTSTAMP_FILTER_PTP_V2_L4_EVENT) |
2400 		(1 << HWTSTAMP_FILTER_PTP_V2_L2_EVENT) |
2401 		(1 << HWTSTAMP_FILTER_PTP_V2_EVENT);
2402 
2403 	return 0;
2404 }
2405 
2406 static void lan8814_flush_fifo(struct phy_device *phydev, bool egress)
2407 {
2408 	int i;
2409 
2410 	for (i = 0; i < FIFO_SIZE; ++i)
2411 		lanphy_read_page_reg(phydev, 5,
2412 				     egress ? PTP_TX_MSG_HEADER2 : PTP_RX_MSG_HEADER2);
2413 
2414 	/* Read to clear overflow status bit */
2415 	lanphy_read_page_reg(phydev, 5, PTP_TSU_INT_STS);
2416 }
2417 
2418 static int lan8814_hwtstamp(struct mii_timestamper *mii_ts,
2419 			    struct kernel_hwtstamp_config *config,
2420 			    struct netlink_ext_ack *extack)
2421 {
2422 	struct kszphy_ptp_priv *ptp_priv =
2423 			  container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
2424 	struct lan8814_ptp_rx_ts *rx_ts, *tmp;
2425 	int txcfg = 0, rxcfg = 0;
2426 	int pkt_ts_enable;
2427 	int tx_mod;
2428 
2429 	ptp_priv->hwts_tx_type = config->tx_type;
2430 	ptp_priv->rx_filter = config->rx_filter;
2431 
2432 	switch (config->rx_filter) {
2433 	case HWTSTAMP_FILTER_NONE:
2434 		ptp_priv->layer = 0;
2435 		ptp_priv->version = 0;
2436 		break;
2437 	case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
2438 	case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
2439 	case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
2440 		ptp_priv->layer = PTP_CLASS_L4;
2441 		ptp_priv->version = PTP_CLASS_V2;
2442 		break;
2443 	case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
2444 	case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
2445 	case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
2446 		ptp_priv->layer = PTP_CLASS_L2;
2447 		ptp_priv->version = PTP_CLASS_V2;
2448 		break;
2449 	case HWTSTAMP_FILTER_PTP_V2_EVENT:
2450 	case HWTSTAMP_FILTER_PTP_V2_SYNC:
2451 	case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
2452 		ptp_priv->layer = PTP_CLASS_L4 | PTP_CLASS_L2;
2453 		ptp_priv->version = PTP_CLASS_V2;
2454 		break;
2455 	default:
2456 		return -ERANGE;
2457 	}
2458 
2459 	if (ptp_priv->layer & PTP_CLASS_L2) {
2460 		rxcfg = PTP_RX_PARSE_CONFIG_LAYER2_EN_;
2461 		txcfg = PTP_TX_PARSE_CONFIG_LAYER2_EN_;
2462 	} else if (ptp_priv->layer & PTP_CLASS_L4) {
2463 		rxcfg |= PTP_RX_PARSE_CONFIG_IPV4_EN_ | PTP_RX_PARSE_CONFIG_IPV6_EN_;
2464 		txcfg |= PTP_TX_PARSE_CONFIG_IPV4_EN_ | PTP_TX_PARSE_CONFIG_IPV6_EN_;
2465 	}
2466 	lanphy_write_page_reg(ptp_priv->phydev, 5, PTP_RX_PARSE_CONFIG, rxcfg);
2467 	lanphy_write_page_reg(ptp_priv->phydev, 5, PTP_TX_PARSE_CONFIG, txcfg);
2468 
2469 	pkt_ts_enable = PTP_TIMESTAMP_EN_SYNC_ | PTP_TIMESTAMP_EN_DREQ_ |
2470 			PTP_TIMESTAMP_EN_PDREQ_ | PTP_TIMESTAMP_EN_PDRES_;
2471 	lanphy_write_page_reg(ptp_priv->phydev, 5, PTP_RX_TIMESTAMP_EN, pkt_ts_enable);
2472 	lanphy_write_page_reg(ptp_priv->phydev, 5, PTP_TX_TIMESTAMP_EN, pkt_ts_enable);
2473 
2474 	tx_mod = lanphy_read_page_reg(ptp_priv->phydev, 5, PTP_TX_MOD);
2475 	if (ptp_priv->hwts_tx_type == HWTSTAMP_TX_ONESTEP_SYNC) {
2476 		lanphy_write_page_reg(ptp_priv->phydev, 5, PTP_TX_MOD,
2477 				      tx_mod | PTP_TX_MOD_TX_PTP_SYNC_TS_INSERT_);
2478 	} else if (ptp_priv->hwts_tx_type == HWTSTAMP_TX_ON) {
2479 		lanphy_write_page_reg(ptp_priv->phydev, 5, PTP_TX_MOD,
2480 				      tx_mod & ~PTP_TX_MOD_TX_PTP_SYNC_TS_INSERT_);
2481 	}
2482 
2483 	if (config->rx_filter != HWTSTAMP_FILTER_NONE)
2484 		lan8814_config_ts_intr(ptp_priv->phydev, true);
2485 	else
2486 		lan8814_config_ts_intr(ptp_priv->phydev, false);
2487 
2488 	/* In case of multiple starts and stops, these needs to be cleared */
2489 	list_for_each_entry_safe(rx_ts, tmp, &ptp_priv->rx_ts_list, list) {
2490 		list_del(&rx_ts->list);
2491 		kfree(rx_ts);
2492 	}
2493 	skb_queue_purge(&ptp_priv->rx_queue);
2494 	skb_queue_purge(&ptp_priv->tx_queue);
2495 
2496 	lan8814_flush_fifo(ptp_priv->phydev, false);
2497 	lan8814_flush_fifo(ptp_priv->phydev, true);
2498 
2499 	return 0;
2500 }
2501 
2502 static void lan8814_txtstamp(struct mii_timestamper *mii_ts,
2503 			     struct sk_buff *skb, int type)
2504 {
2505 	struct kszphy_ptp_priv *ptp_priv = container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
2506 
2507 	switch (ptp_priv->hwts_tx_type) {
2508 	case HWTSTAMP_TX_ONESTEP_SYNC:
2509 		if (ptp_msg_is_sync(skb, type)) {
2510 			kfree_skb(skb);
2511 			return;
2512 		}
2513 		fallthrough;
2514 	case HWTSTAMP_TX_ON:
2515 		skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
2516 		skb_queue_tail(&ptp_priv->tx_queue, skb);
2517 		break;
2518 	case HWTSTAMP_TX_OFF:
2519 	default:
2520 		kfree_skb(skb);
2521 		break;
2522 	}
2523 }
2524 
2525 static bool lan8814_get_sig_rx(struct sk_buff *skb, u16 *sig)
2526 {
2527 	struct ptp_header *ptp_header;
2528 	u32 type;
2529 
2530 	skb_push(skb, ETH_HLEN);
2531 	type = ptp_classify_raw(skb);
2532 	ptp_header = ptp_parse_header(skb, type);
2533 	skb_pull_inline(skb, ETH_HLEN);
2534 
2535 	if (!ptp_header)
2536 		return false;
2537 
2538 	*sig = (__force u16)(ntohs(ptp_header->sequence_id));
2539 	return true;
2540 }
2541 
2542 static bool lan8814_match_rx_skb(struct kszphy_ptp_priv *ptp_priv,
2543 				 struct sk_buff *skb)
2544 {
2545 	struct skb_shared_hwtstamps *shhwtstamps;
2546 	struct lan8814_ptp_rx_ts *rx_ts, *tmp;
2547 	unsigned long flags;
2548 	bool ret = false;
2549 	u16 skb_sig;
2550 
2551 	if (!lan8814_get_sig_rx(skb, &skb_sig))
2552 		return ret;
2553 
2554 	/* Iterate over all RX timestamps and match it with the received skbs */
2555 	spin_lock_irqsave(&ptp_priv->rx_ts_lock, flags);
2556 	list_for_each_entry_safe(rx_ts, tmp, &ptp_priv->rx_ts_list, list) {
2557 		/* Check if we found the signature we were looking for. */
2558 		if (memcmp(&skb_sig, &rx_ts->seq_id, sizeof(rx_ts->seq_id)))
2559 			continue;
2560 
2561 		shhwtstamps = skb_hwtstamps(skb);
2562 		memset(shhwtstamps, 0, sizeof(*shhwtstamps));
2563 		shhwtstamps->hwtstamp = ktime_set(rx_ts->seconds,
2564 						  rx_ts->nsec);
2565 		list_del(&rx_ts->list);
2566 		kfree(rx_ts);
2567 
2568 		ret = true;
2569 		break;
2570 	}
2571 	spin_unlock_irqrestore(&ptp_priv->rx_ts_lock, flags);
2572 
2573 	if (ret)
2574 		netif_rx(skb);
2575 	return ret;
2576 }
2577 
2578 static bool lan8814_rxtstamp(struct mii_timestamper *mii_ts, struct sk_buff *skb, int type)
2579 {
2580 	struct kszphy_ptp_priv *ptp_priv =
2581 			container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
2582 
2583 	if (ptp_priv->rx_filter == HWTSTAMP_FILTER_NONE ||
2584 	    type == PTP_CLASS_NONE)
2585 		return false;
2586 
2587 	if ((type & ptp_priv->version) == 0 || (type & ptp_priv->layer) == 0)
2588 		return false;
2589 
2590 	/* If we failed to match then add it to the queue for when the timestamp
2591 	 * will come
2592 	 */
2593 	if (!lan8814_match_rx_skb(ptp_priv, skb))
2594 		skb_queue_tail(&ptp_priv->rx_queue, skb);
2595 
2596 	return true;
2597 }
2598 
2599 static void lan8814_ptp_clock_set(struct phy_device *phydev,
2600 				  time64_t sec, u32 nsec)
2601 {
2602 	lanphy_write_page_reg(phydev, 4, PTP_CLOCK_SET_SEC_LO, lower_16_bits(sec));
2603 	lanphy_write_page_reg(phydev, 4, PTP_CLOCK_SET_SEC_MID, upper_16_bits(sec));
2604 	lanphy_write_page_reg(phydev, 4, PTP_CLOCK_SET_SEC_HI, upper_32_bits(sec));
2605 	lanphy_write_page_reg(phydev, 4, PTP_CLOCK_SET_NS_LO, lower_16_bits(nsec));
2606 	lanphy_write_page_reg(phydev, 4, PTP_CLOCK_SET_NS_HI, upper_16_bits(nsec));
2607 
2608 	lanphy_write_page_reg(phydev, 4, PTP_CMD_CTL, PTP_CMD_CTL_PTP_CLOCK_LOAD_);
2609 }
2610 
2611 static void lan8814_ptp_clock_get(struct phy_device *phydev,
2612 				  time64_t *sec, u32 *nsec)
2613 {
2614 	lanphy_write_page_reg(phydev, 4, PTP_CMD_CTL, PTP_CMD_CTL_PTP_CLOCK_READ_);
2615 
2616 	*sec = lanphy_read_page_reg(phydev, 4, PTP_CLOCK_READ_SEC_HI);
2617 	*sec <<= 16;
2618 	*sec |= lanphy_read_page_reg(phydev, 4, PTP_CLOCK_READ_SEC_MID);
2619 	*sec <<= 16;
2620 	*sec |= lanphy_read_page_reg(phydev, 4, PTP_CLOCK_READ_SEC_LO);
2621 
2622 	*nsec = lanphy_read_page_reg(phydev, 4, PTP_CLOCK_READ_NS_HI);
2623 	*nsec <<= 16;
2624 	*nsec |= lanphy_read_page_reg(phydev, 4, PTP_CLOCK_READ_NS_LO);
2625 }
2626 
2627 static int lan8814_ptpci_gettime64(struct ptp_clock_info *ptpci,
2628 				   struct timespec64 *ts)
2629 {
2630 	struct lan8814_shared_priv *shared = container_of(ptpci, struct lan8814_shared_priv,
2631 							  ptp_clock_info);
2632 	struct phy_device *phydev = shared->phydev;
2633 	u32 nano_seconds;
2634 	time64_t seconds;
2635 
2636 	mutex_lock(&shared->shared_lock);
2637 	lan8814_ptp_clock_get(phydev, &seconds, &nano_seconds);
2638 	mutex_unlock(&shared->shared_lock);
2639 	ts->tv_sec = seconds;
2640 	ts->tv_nsec = nano_seconds;
2641 
2642 	return 0;
2643 }
2644 
2645 static int lan8814_ptpci_settime64(struct ptp_clock_info *ptpci,
2646 				   const struct timespec64 *ts)
2647 {
2648 	struct lan8814_shared_priv *shared = container_of(ptpci, struct lan8814_shared_priv,
2649 							  ptp_clock_info);
2650 	struct phy_device *phydev = shared->phydev;
2651 
2652 	mutex_lock(&shared->shared_lock);
2653 	lan8814_ptp_clock_set(phydev, ts->tv_sec, ts->tv_nsec);
2654 	mutex_unlock(&shared->shared_lock);
2655 
2656 	return 0;
2657 }
2658 
2659 static void lan8814_ptp_clock_step(struct phy_device *phydev,
2660 				   s64 time_step_ns)
2661 {
2662 	u32 nano_seconds_step;
2663 	u64 abs_time_step_ns;
2664 	time64_t set_seconds;
2665 	u32 nano_seconds;
2666 	u32 remainder;
2667 	s32 seconds;
2668 
2669 	if (time_step_ns >  15000000000LL) {
2670 		/* convert to clock set */
2671 		lan8814_ptp_clock_get(phydev, &set_seconds, &nano_seconds);
2672 		set_seconds += div_u64_rem(time_step_ns, 1000000000LL,
2673 					   &remainder);
2674 		nano_seconds += remainder;
2675 		if (nano_seconds >= 1000000000) {
2676 			set_seconds++;
2677 			nano_seconds -= 1000000000;
2678 		}
2679 		lan8814_ptp_clock_set(phydev, set_seconds, nano_seconds);
2680 		return;
2681 	} else if (time_step_ns < -15000000000LL) {
2682 		/* convert to clock set */
2683 		time_step_ns = -time_step_ns;
2684 
2685 		lan8814_ptp_clock_get(phydev, &set_seconds, &nano_seconds);
2686 		set_seconds -= div_u64_rem(time_step_ns, 1000000000LL,
2687 					   &remainder);
2688 		nano_seconds_step = remainder;
2689 		if (nano_seconds < nano_seconds_step) {
2690 			set_seconds--;
2691 			nano_seconds += 1000000000;
2692 		}
2693 		nano_seconds -= nano_seconds_step;
2694 		lan8814_ptp_clock_set(phydev, set_seconds, nano_seconds);
2695 		return;
2696 	}
2697 
2698 	/* do clock step */
2699 	if (time_step_ns >= 0) {
2700 		abs_time_step_ns = (u64)time_step_ns;
2701 		seconds = (s32)div_u64_rem(abs_time_step_ns, 1000000000,
2702 					   &remainder);
2703 		nano_seconds = remainder;
2704 	} else {
2705 		abs_time_step_ns = (u64)(-time_step_ns);
2706 		seconds = -((s32)div_u64_rem(abs_time_step_ns, 1000000000,
2707 			    &remainder));
2708 		nano_seconds = remainder;
2709 		if (nano_seconds > 0) {
2710 			/* subtracting nano seconds is not allowed
2711 			 * convert to subtracting from seconds,
2712 			 * and adding to nanoseconds
2713 			 */
2714 			seconds--;
2715 			nano_seconds = (1000000000 - nano_seconds);
2716 		}
2717 	}
2718 
2719 	if (nano_seconds > 0) {
2720 		/* add 8 ns to cover the likely normal increment */
2721 		nano_seconds += 8;
2722 	}
2723 
2724 	if (nano_seconds >= 1000000000) {
2725 		/* carry into seconds */
2726 		seconds++;
2727 		nano_seconds -= 1000000000;
2728 	}
2729 
2730 	while (seconds) {
2731 		if (seconds > 0) {
2732 			u32 adjustment_value = (u32)seconds;
2733 			u16 adjustment_value_lo, adjustment_value_hi;
2734 
2735 			if (adjustment_value > 0xF)
2736 				adjustment_value = 0xF;
2737 
2738 			adjustment_value_lo = adjustment_value & 0xffff;
2739 			adjustment_value_hi = (adjustment_value >> 16) & 0x3fff;
2740 
2741 			lanphy_write_page_reg(phydev, 4, PTP_LTC_STEP_ADJ_LO,
2742 					      adjustment_value_lo);
2743 			lanphy_write_page_reg(phydev, 4, PTP_LTC_STEP_ADJ_HI,
2744 					      PTP_LTC_STEP_ADJ_DIR_ |
2745 					      adjustment_value_hi);
2746 			seconds -= ((s32)adjustment_value);
2747 		} else {
2748 			u32 adjustment_value = (u32)(-seconds);
2749 			u16 adjustment_value_lo, adjustment_value_hi;
2750 
2751 			if (adjustment_value > 0xF)
2752 				adjustment_value = 0xF;
2753 
2754 			adjustment_value_lo = adjustment_value & 0xffff;
2755 			adjustment_value_hi = (adjustment_value >> 16) & 0x3fff;
2756 
2757 			lanphy_write_page_reg(phydev, 4, PTP_LTC_STEP_ADJ_LO,
2758 					      adjustment_value_lo);
2759 			lanphy_write_page_reg(phydev, 4, PTP_LTC_STEP_ADJ_HI,
2760 					      adjustment_value_hi);
2761 			seconds += ((s32)adjustment_value);
2762 		}
2763 		lanphy_write_page_reg(phydev, 4, PTP_CMD_CTL,
2764 				      PTP_CMD_CTL_PTP_LTC_STEP_SEC_);
2765 	}
2766 	if (nano_seconds) {
2767 		u16 nano_seconds_lo;
2768 		u16 nano_seconds_hi;
2769 
2770 		nano_seconds_lo = nano_seconds & 0xffff;
2771 		nano_seconds_hi = (nano_seconds >> 16) & 0x3fff;
2772 
2773 		lanphy_write_page_reg(phydev, 4, PTP_LTC_STEP_ADJ_LO,
2774 				      nano_seconds_lo);
2775 		lanphy_write_page_reg(phydev, 4, PTP_LTC_STEP_ADJ_HI,
2776 				      PTP_LTC_STEP_ADJ_DIR_ |
2777 				      nano_seconds_hi);
2778 		lanphy_write_page_reg(phydev, 4, PTP_CMD_CTL,
2779 				      PTP_CMD_CTL_PTP_LTC_STEP_NSEC_);
2780 	}
2781 }
2782 
2783 static int lan8814_ptpci_adjtime(struct ptp_clock_info *ptpci, s64 delta)
2784 {
2785 	struct lan8814_shared_priv *shared = container_of(ptpci, struct lan8814_shared_priv,
2786 							  ptp_clock_info);
2787 	struct phy_device *phydev = shared->phydev;
2788 
2789 	mutex_lock(&shared->shared_lock);
2790 	lan8814_ptp_clock_step(phydev, delta);
2791 	mutex_unlock(&shared->shared_lock);
2792 
2793 	return 0;
2794 }
2795 
2796 static int lan8814_ptpci_adjfine(struct ptp_clock_info *ptpci, long scaled_ppm)
2797 {
2798 	struct lan8814_shared_priv *shared = container_of(ptpci, struct lan8814_shared_priv,
2799 							  ptp_clock_info);
2800 	struct phy_device *phydev = shared->phydev;
2801 	u16 kszphy_rate_adj_lo, kszphy_rate_adj_hi;
2802 	bool positive = true;
2803 	u32 kszphy_rate_adj;
2804 
2805 	if (scaled_ppm < 0) {
2806 		scaled_ppm = -scaled_ppm;
2807 		positive = false;
2808 	}
2809 
2810 	kszphy_rate_adj = LAN8814_1PPM_FORMAT * (scaled_ppm >> 16);
2811 	kszphy_rate_adj += (LAN8814_1PPM_FORMAT * (0xffff & scaled_ppm)) >> 16;
2812 
2813 	kszphy_rate_adj_lo = kszphy_rate_adj & 0xffff;
2814 	kszphy_rate_adj_hi = (kszphy_rate_adj >> 16) & 0x3fff;
2815 
2816 	if (positive)
2817 		kszphy_rate_adj_hi |= PTP_CLOCK_RATE_ADJ_DIR_;
2818 
2819 	mutex_lock(&shared->shared_lock);
2820 	lanphy_write_page_reg(phydev, 4, PTP_CLOCK_RATE_ADJ_HI, kszphy_rate_adj_hi);
2821 	lanphy_write_page_reg(phydev, 4, PTP_CLOCK_RATE_ADJ_LO, kszphy_rate_adj_lo);
2822 	mutex_unlock(&shared->shared_lock);
2823 
2824 	return 0;
2825 }
2826 
2827 static bool lan8814_get_sig_tx(struct sk_buff *skb, u16 *sig)
2828 {
2829 	struct ptp_header *ptp_header;
2830 	u32 type;
2831 
2832 	type = ptp_classify_raw(skb);
2833 	ptp_header = ptp_parse_header(skb, type);
2834 
2835 	if (!ptp_header)
2836 		return false;
2837 
2838 	*sig = (__force u16)(ntohs(ptp_header->sequence_id));
2839 	return true;
2840 }
2841 
2842 static void lan8814_match_tx_skb(struct kszphy_ptp_priv *ptp_priv,
2843 				 u32 seconds, u32 nsec, u16 seq_id)
2844 {
2845 	struct skb_shared_hwtstamps shhwtstamps;
2846 	struct sk_buff *skb, *skb_tmp;
2847 	unsigned long flags;
2848 	bool ret = false;
2849 	u16 skb_sig;
2850 
2851 	spin_lock_irqsave(&ptp_priv->tx_queue.lock, flags);
2852 	skb_queue_walk_safe(&ptp_priv->tx_queue, skb, skb_tmp) {
2853 		if (!lan8814_get_sig_tx(skb, &skb_sig))
2854 			continue;
2855 
2856 		if (memcmp(&skb_sig, &seq_id, sizeof(seq_id)))
2857 			continue;
2858 
2859 		__skb_unlink(skb, &ptp_priv->tx_queue);
2860 		ret = true;
2861 		break;
2862 	}
2863 	spin_unlock_irqrestore(&ptp_priv->tx_queue.lock, flags);
2864 
2865 	if (ret) {
2866 		memset(&shhwtstamps, 0, sizeof(shhwtstamps));
2867 		shhwtstamps.hwtstamp = ktime_set(seconds, nsec);
2868 		skb_complete_tx_timestamp(skb, &shhwtstamps);
2869 	}
2870 }
2871 
2872 static void lan8814_dequeue_tx_skb(struct kszphy_ptp_priv *ptp_priv)
2873 {
2874 	struct phy_device *phydev = ptp_priv->phydev;
2875 	u32 seconds, nsec;
2876 	u16 seq_id;
2877 
2878 	lan8814_ptp_tx_ts_get(phydev, &seconds, &nsec, &seq_id);
2879 	lan8814_match_tx_skb(ptp_priv, seconds, nsec, seq_id);
2880 }
2881 
2882 static void lan8814_get_tx_ts(struct kszphy_ptp_priv *ptp_priv)
2883 {
2884 	struct phy_device *phydev = ptp_priv->phydev;
2885 	u32 reg;
2886 
2887 	do {
2888 		lan8814_dequeue_tx_skb(ptp_priv);
2889 
2890 		/* If other timestamps are available in the FIFO,
2891 		 * process them.
2892 		 */
2893 		reg = lanphy_read_page_reg(phydev, 5, PTP_CAP_INFO);
2894 	} while (PTP_CAP_INFO_TX_TS_CNT_GET_(reg) > 0);
2895 }
2896 
2897 static bool lan8814_match_skb(struct kszphy_ptp_priv *ptp_priv,
2898 			      struct lan8814_ptp_rx_ts *rx_ts)
2899 {
2900 	struct skb_shared_hwtstamps *shhwtstamps;
2901 	struct sk_buff *skb, *skb_tmp;
2902 	unsigned long flags;
2903 	bool ret = false;
2904 	u16 skb_sig;
2905 
2906 	spin_lock_irqsave(&ptp_priv->rx_queue.lock, flags);
2907 	skb_queue_walk_safe(&ptp_priv->rx_queue, skb, skb_tmp) {
2908 		if (!lan8814_get_sig_rx(skb, &skb_sig))
2909 			continue;
2910 
2911 		if (memcmp(&skb_sig, &rx_ts->seq_id, sizeof(rx_ts->seq_id)))
2912 			continue;
2913 
2914 		__skb_unlink(skb, &ptp_priv->rx_queue);
2915 
2916 		ret = true;
2917 		break;
2918 	}
2919 	spin_unlock_irqrestore(&ptp_priv->rx_queue.lock, flags);
2920 
2921 	if (ret) {
2922 		shhwtstamps = skb_hwtstamps(skb);
2923 		memset(shhwtstamps, 0, sizeof(*shhwtstamps));
2924 		shhwtstamps->hwtstamp = ktime_set(rx_ts->seconds, rx_ts->nsec);
2925 		netif_rx(skb);
2926 	}
2927 
2928 	return ret;
2929 }
2930 
2931 static void lan8814_match_rx_ts(struct kszphy_ptp_priv *ptp_priv,
2932 				struct lan8814_ptp_rx_ts *rx_ts)
2933 {
2934 	unsigned long flags;
2935 
2936 	/* If we failed to match the skb add it to the queue for when
2937 	 * the frame will come
2938 	 */
2939 	if (!lan8814_match_skb(ptp_priv, rx_ts)) {
2940 		spin_lock_irqsave(&ptp_priv->rx_ts_lock, flags);
2941 		list_add(&rx_ts->list, &ptp_priv->rx_ts_list);
2942 		spin_unlock_irqrestore(&ptp_priv->rx_ts_lock, flags);
2943 	} else {
2944 		kfree(rx_ts);
2945 	}
2946 }
2947 
2948 static void lan8814_get_rx_ts(struct kszphy_ptp_priv *ptp_priv)
2949 {
2950 	struct phy_device *phydev = ptp_priv->phydev;
2951 	struct lan8814_ptp_rx_ts *rx_ts;
2952 	u32 reg;
2953 
2954 	do {
2955 		rx_ts = kzalloc(sizeof(*rx_ts), GFP_KERNEL);
2956 		if (!rx_ts)
2957 			return;
2958 
2959 		lan8814_ptp_rx_ts_get(phydev, &rx_ts->seconds, &rx_ts->nsec,
2960 				      &rx_ts->seq_id);
2961 		lan8814_match_rx_ts(ptp_priv, rx_ts);
2962 
2963 		/* If other timestamps are available in the FIFO,
2964 		 * process them.
2965 		 */
2966 		reg = lanphy_read_page_reg(phydev, 5, PTP_CAP_INFO);
2967 	} while (PTP_CAP_INFO_RX_TS_CNT_GET_(reg) > 0);
2968 }
2969 
2970 static void lan8814_handle_ptp_interrupt(struct phy_device *phydev, u16 status)
2971 {
2972 	struct kszphy_priv *priv = phydev->priv;
2973 	struct kszphy_ptp_priv *ptp_priv = &priv->ptp_priv;
2974 
2975 	if (status & PTP_TSU_INT_STS_PTP_TX_TS_EN_)
2976 		lan8814_get_tx_ts(ptp_priv);
2977 
2978 	if (status & PTP_TSU_INT_STS_PTP_RX_TS_EN_)
2979 		lan8814_get_rx_ts(ptp_priv);
2980 
2981 	if (status & PTP_TSU_INT_STS_PTP_TX_TS_OVRFL_INT_) {
2982 		lan8814_flush_fifo(phydev, true);
2983 		skb_queue_purge(&ptp_priv->tx_queue);
2984 	}
2985 
2986 	if (status & PTP_TSU_INT_STS_PTP_RX_TS_OVRFL_INT_) {
2987 		lan8814_flush_fifo(phydev, false);
2988 		skb_queue_purge(&ptp_priv->rx_queue);
2989 	}
2990 }
2991 
2992 static int lan8804_config_init(struct phy_device *phydev)
2993 {
2994 	int val;
2995 
2996 	/* MDI-X setting for swap A,B transmit */
2997 	val = lanphy_read_page_reg(phydev, 2, LAN8804_ALIGN_SWAP);
2998 	val &= ~LAN8804_ALIGN_TX_A_B_SWAP_MASK;
2999 	val |= LAN8804_ALIGN_TX_A_B_SWAP;
3000 	lanphy_write_page_reg(phydev, 2, LAN8804_ALIGN_SWAP, val);
3001 
3002 	/* Make sure that the PHY will not stop generating the clock when the
3003 	 * link partner goes down
3004 	 */
3005 	lanphy_write_page_reg(phydev, 31, LAN8814_CLOCK_MANAGEMENT, 0x27e);
3006 	lanphy_read_page_reg(phydev, 1, LAN8814_LINK_QUALITY);
3007 
3008 	return 0;
3009 }
3010 
3011 static irqreturn_t lan8804_handle_interrupt(struct phy_device *phydev)
3012 {
3013 	int status;
3014 
3015 	status = phy_read(phydev, LAN8814_INTS);
3016 	if (status < 0) {
3017 		phy_error(phydev);
3018 		return IRQ_NONE;
3019 	}
3020 
3021 	if (status > 0)
3022 		phy_trigger_machine(phydev);
3023 
3024 	return IRQ_HANDLED;
3025 }
3026 
3027 #define LAN8804_OUTPUT_CONTROL			25
3028 #define LAN8804_OUTPUT_CONTROL_INTR_BUFFER	BIT(14)
3029 #define LAN8804_CONTROL				31
3030 #define LAN8804_CONTROL_INTR_POLARITY		BIT(14)
3031 
3032 static int lan8804_config_intr(struct phy_device *phydev)
3033 {
3034 	int err;
3035 
3036 	/* This is an internal PHY of lan966x and is not possible to change the
3037 	 * polarity on the GIC found in lan966x, therefore change the polarity
3038 	 * of the interrupt in the PHY from being active low instead of active
3039 	 * high.
3040 	 */
3041 	phy_write(phydev, LAN8804_CONTROL, LAN8804_CONTROL_INTR_POLARITY);
3042 
3043 	/* By default interrupt buffer is open-drain in which case the interrupt
3044 	 * can be active only low. Therefore change the interrupt buffer to be
3045 	 * push-pull to be able to change interrupt polarity
3046 	 */
3047 	phy_write(phydev, LAN8804_OUTPUT_CONTROL,
3048 		  LAN8804_OUTPUT_CONTROL_INTR_BUFFER);
3049 
3050 	if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
3051 		err = phy_read(phydev, LAN8814_INTS);
3052 		if (err < 0)
3053 			return err;
3054 
3055 		err = phy_write(phydev, LAN8814_INTC, LAN8814_INT_LINK);
3056 		if (err)
3057 			return err;
3058 	} else {
3059 		err = phy_write(phydev, LAN8814_INTC, 0);
3060 		if (err)
3061 			return err;
3062 
3063 		err = phy_read(phydev, LAN8814_INTS);
3064 		if (err < 0)
3065 			return err;
3066 	}
3067 
3068 	return 0;
3069 }
3070 
3071 static irqreturn_t lan8814_handle_interrupt(struct phy_device *phydev)
3072 {
3073 	int ret = IRQ_NONE;
3074 	int irq_status;
3075 
3076 	irq_status = phy_read(phydev, LAN8814_INTS);
3077 	if (irq_status < 0) {
3078 		phy_error(phydev);
3079 		return IRQ_NONE;
3080 	}
3081 
3082 	if (irq_status & LAN8814_INT_LINK) {
3083 		phy_trigger_machine(phydev);
3084 		ret = IRQ_HANDLED;
3085 	}
3086 
3087 	while (true) {
3088 		irq_status = lanphy_read_page_reg(phydev, 5, PTP_TSU_INT_STS);
3089 		if (!irq_status)
3090 			break;
3091 
3092 		lan8814_handle_ptp_interrupt(phydev, irq_status);
3093 		ret = IRQ_HANDLED;
3094 	}
3095 
3096 	return ret;
3097 }
3098 
3099 static int lan8814_ack_interrupt(struct phy_device *phydev)
3100 {
3101 	/* bit[12..0] int status, which is a read and clear register. */
3102 	int rc;
3103 
3104 	rc = phy_read(phydev, LAN8814_INTS);
3105 
3106 	return (rc < 0) ? rc : 0;
3107 }
3108 
3109 static int lan8814_config_intr(struct phy_device *phydev)
3110 {
3111 	int err;
3112 
3113 	lanphy_write_page_reg(phydev, 4, LAN8814_INTR_CTRL_REG,
3114 			      LAN8814_INTR_CTRL_REG_POLARITY |
3115 			      LAN8814_INTR_CTRL_REG_INTR_ENABLE);
3116 
3117 	/* enable / disable interrupts */
3118 	if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
3119 		err = lan8814_ack_interrupt(phydev);
3120 		if (err)
3121 			return err;
3122 
3123 		err = phy_write(phydev, LAN8814_INTC, LAN8814_INT_LINK);
3124 	} else {
3125 		err = phy_write(phydev, LAN8814_INTC, 0);
3126 		if (err)
3127 			return err;
3128 
3129 		err = lan8814_ack_interrupt(phydev);
3130 	}
3131 
3132 	return err;
3133 }
3134 
3135 static void lan8814_ptp_init(struct phy_device *phydev)
3136 {
3137 	struct kszphy_priv *priv = phydev->priv;
3138 	struct kszphy_ptp_priv *ptp_priv = &priv->ptp_priv;
3139 	u32 temp;
3140 
3141 	if (!IS_ENABLED(CONFIG_PTP_1588_CLOCK) ||
3142 	    !IS_ENABLED(CONFIG_NETWORK_PHY_TIMESTAMPING))
3143 		return;
3144 
3145 	lanphy_write_page_reg(phydev, 5, TSU_HARD_RESET, TSU_HARD_RESET_);
3146 
3147 	temp = lanphy_read_page_reg(phydev, 5, PTP_TX_MOD);
3148 	temp |= PTP_TX_MOD_BAD_UDPV4_CHKSUM_FORCE_FCS_DIS_;
3149 	lanphy_write_page_reg(phydev, 5, PTP_TX_MOD, temp);
3150 
3151 	temp = lanphy_read_page_reg(phydev, 5, PTP_RX_MOD);
3152 	temp |= PTP_RX_MOD_BAD_UDPV4_CHKSUM_FORCE_FCS_DIS_;
3153 	lanphy_write_page_reg(phydev, 5, PTP_RX_MOD, temp);
3154 
3155 	lanphy_write_page_reg(phydev, 5, PTP_RX_PARSE_CONFIG, 0);
3156 	lanphy_write_page_reg(phydev, 5, PTP_TX_PARSE_CONFIG, 0);
3157 
3158 	/* Removing default registers configs related to L2 and IP */
3159 	lanphy_write_page_reg(phydev, 5, PTP_TX_PARSE_L2_ADDR_EN, 0);
3160 	lanphy_write_page_reg(phydev, 5, PTP_RX_PARSE_L2_ADDR_EN, 0);
3161 	lanphy_write_page_reg(phydev, 5, PTP_TX_PARSE_IP_ADDR_EN, 0);
3162 	lanphy_write_page_reg(phydev, 5, PTP_RX_PARSE_IP_ADDR_EN, 0);
3163 
3164 	/* Disable checking for minorVersionPTP field */
3165 	lanphy_write_page_reg(phydev, 5, PTP_RX_VERSION,
3166 			      PTP_MAX_VERSION(0xff) | PTP_MIN_VERSION(0x0));
3167 	lanphy_write_page_reg(phydev, 5, PTP_TX_VERSION,
3168 			      PTP_MAX_VERSION(0xff) | PTP_MIN_VERSION(0x0));
3169 
3170 	skb_queue_head_init(&ptp_priv->tx_queue);
3171 	skb_queue_head_init(&ptp_priv->rx_queue);
3172 	INIT_LIST_HEAD(&ptp_priv->rx_ts_list);
3173 	spin_lock_init(&ptp_priv->rx_ts_lock);
3174 
3175 	ptp_priv->phydev = phydev;
3176 
3177 	ptp_priv->mii_ts.rxtstamp = lan8814_rxtstamp;
3178 	ptp_priv->mii_ts.txtstamp = lan8814_txtstamp;
3179 	ptp_priv->mii_ts.hwtstamp = lan8814_hwtstamp;
3180 	ptp_priv->mii_ts.ts_info  = lan8814_ts_info;
3181 
3182 	phydev->mii_ts = &ptp_priv->mii_ts;
3183 }
3184 
3185 static int lan8814_ptp_probe_once(struct phy_device *phydev)
3186 {
3187 	struct lan8814_shared_priv *shared = phydev->shared->priv;
3188 
3189 	/* Initialise shared lock for clock*/
3190 	mutex_init(&shared->shared_lock);
3191 
3192 	shared->ptp_clock_info.owner = THIS_MODULE;
3193 	snprintf(shared->ptp_clock_info.name, 30, "%s", phydev->drv->name);
3194 	shared->ptp_clock_info.max_adj = 31249999;
3195 	shared->ptp_clock_info.n_alarm = 0;
3196 	shared->ptp_clock_info.n_ext_ts = 0;
3197 	shared->ptp_clock_info.n_pins = 0;
3198 	shared->ptp_clock_info.pps = 0;
3199 	shared->ptp_clock_info.pin_config = NULL;
3200 	shared->ptp_clock_info.adjfine = lan8814_ptpci_adjfine;
3201 	shared->ptp_clock_info.adjtime = lan8814_ptpci_adjtime;
3202 	shared->ptp_clock_info.gettime64 = lan8814_ptpci_gettime64;
3203 	shared->ptp_clock_info.settime64 = lan8814_ptpci_settime64;
3204 	shared->ptp_clock_info.getcrosststamp = NULL;
3205 
3206 	shared->ptp_clock = ptp_clock_register(&shared->ptp_clock_info,
3207 					       &phydev->mdio.dev);
3208 	if (IS_ERR(shared->ptp_clock)) {
3209 		phydev_err(phydev, "ptp_clock_register failed %lu\n",
3210 			   PTR_ERR(shared->ptp_clock));
3211 		return -EINVAL;
3212 	}
3213 
3214 	/* Check if PHC support is missing at the configuration level */
3215 	if (!shared->ptp_clock)
3216 		return 0;
3217 
3218 	phydev_dbg(phydev, "successfully registered ptp clock\n");
3219 
3220 	shared->phydev = phydev;
3221 
3222 	/* The EP.4 is shared between all the PHYs in the package and also it
3223 	 * can be accessed by any of the PHYs
3224 	 */
3225 	lanphy_write_page_reg(phydev, 4, LTC_HARD_RESET, LTC_HARD_RESET_);
3226 	lanphy_write_page_reg(phydev, 4, PTP_OPERATING_MODE,
3227 			      PTP_OPERATING_MODE_STANDALONE_);
3228 
3229 	/* Enable ptp to run LTC clock for ptp and gpio 1PPS operation */
3230 	lanphy_write_page_reg(phydev, 4, PTP_CMD_CTL, PTP_CMD_CTL_PTP_ENABLE_);
3231 
3232 	return 0;
3233 }
3234 
3235 static void lan8814_setup_led(struct phy_device *phydev, int val)
3236 {
3237 	int temp;
3238 
3239 	temp = lanphy_read_page_reg(phydev, 5, LAN8814_LED_CTRL_1);
3240 
3241 	if (val)
3242 		temp |= LAN8814_LED_CTRL_1_KSZ9031_LED_MODE_;
3243 	else
3244 		temp &= ~LAN8814_LED_CTRL_1_KSZ9031_LED_MODE_;
3245 
3246 	lanphy_write_page_reg(phydev, 5, LAN8814_LED_CTRL_1, temp);
3247 }
3248 
3249 static int lan8814_config_init(struct phy_device *phydev)
3250 {
3251 	struct kszphy_priv *lan8814 = phydev->priv;
3252 	int val;
3253 
3254 	/* Reset the PHY */
3255 	val = lanphy_read_page_reg(phydev, 4, LAN8814_QSGMII_SOFT_RESET);
3256 	val |= LAN8814_QSGMII_SOFT_RESET_BIT;
3257 	lanphy_write_page_reg(phydev, 4, LAN8814_QSGMII_SOFT_RESET, val);
3258 
3259 	/* Disable ANEG with QSGMII PCS Host side */
3260 	val = lanphy_read_page_reg(phydev, 5, LAN8814_QSGMII_PCS1G_ANEG_CONFIG);
3261 	val &= ~LAN8814_QSGMII_PCS1G_ANEG_CONFIG_ANEG_ENA;
3262 	lanphy_write_page_reg(phydev, 5, LAN8814_QSGMII_PCS1G_ANEG_CONFIG, val);
3263 
3264 	/* MDI-X setting for swap A,B transmit */
3265 	val = lanphy_read_page_reg(phydev, 2, LAN8814_ALIGN_SWAP);
3266 	val &= ~LAN8814_ALIGN_TX_A_B_SWAP_MASK;
3267 	val |= LAN8814_ALIGN_TX_A_B_SWAP;
3268 	lanphy_write_page_reg(phydev, 2, LAN8814_ALIGN_SWAP, val);
3269 
3270 	if (lan8814->led_mode >= 0)
3271 		lan8814_setup_led(phydev, lan8814->led_mode);
3272 
3273 	return 0;
3274 }
3275 
3276 /* It is expected that there will not be any 'lan8814_take_coma_mode'
3277  * function called in suspend. Because the GPIO line can be shared, so if one of
3278  * the phys goes back in coma mode, then all the other PHYs will go, which is
3279  * wrong.
3280  */
3281 static int lan8814_release_coma_mode(struct phy_device *phydev)
3282 {
3283 	struct gpio_desc *gpiod;
3284 
3285 	gpiod = devm_gpiod_get_optional(&phydev->mdio.dev, "coma-mode",
3286 					GPIOD_OUT_HIGH_OPEN_DRAIN |
3287 					GPIOD_FLAGS_BIT_NONEXCLUSIVE);
3288 	if (IS_ERR(gpiod))
3289 		return PTR_ERR(gpiod);
3290 
3291 	gpiod_set_consumer_name(gpiod, "LAN8814 coma mode");
3292 	gpiod_set_value_cansleep(gpiod, 0);
3293 
3294 	return 0;
3295 }
3296 
3297 static void lan8814_clear_2psp_bit(struct phy_device *phydev)
3298 {
3299 	u16 val;
3300 
3301 	/* It was noticed that when traffic is passing through the PHY and the
3302 	 * cable is removed then the LED was still one even though there is no
3303 	 * link
3304 	 */
3305 	val = lanphy_read_page_reg(phydev, 2, LAN8814_EEE_STATE);
3306 	val &= ~LAN8814_EEE_STATE_MASK2P5P;
3307 	lanphy_write_page_reg(phydev, 2, LAN8814_EEE_STATE, val);
3308 }
3309 
3310 static void lan8814_update_meas_time(struct phy_device *phydev)
3311 {
3312 	u16 val;
3313 
3314 	/* By setting the measure time to a value of 0xb this will allow cables
3315 	 * longer than 100m to be used. This configuration can be used
3316 	 * regardless of the mode of operation of the PHY
3317 	 */
3318 	val = lanphy_read_page_reg(phydev, 1, LAN8814_PD_CONTROLS);
3319 	val &= ~LAN8814_PD_CONTROLS_PD_MEAS_TIME_MASK;
3320 	val |= LAN8814_PD_CONTROLS_PD_MEAS_TIME_VAL;
3321 	lanphy_write_page_reg(phydev, 1, LAN8814_PD_CONTROLS, val);
3322 }
3323 
3324 static int lan8814_probe(struct phy_device *phydev)
3325 {
3326 	const struct kszphy_type *type = phydev->drv->driver_data;
3327 	struct kszphy_priv *priv;
3328 	u16 addr;
3329 	int err;
3330 
3331 	priv = devm_kzalloc(&phydev->mdio.dev, sizeof(*priv), GFP_KERNEL);
3332 	if (!priv)
3333 		return -ENOMEM;
3334 
3335 	phydev->priv = priv;
3336 
3337 	priv->type = type;
3338 
3339 	kszphy_parse_led_mode(phydev);
3340 
3341 	/* Strap-in value for PHY address, below register read gives starting
3342 	 * phy address value
3343 	 */
3344 	addr = lanphy_read_page_reg(phydev, 4, 0) & 0x1F;
3345 	devm_phy_package_join(&phydev->mdio.dev, phydev,
3346 			      addr, sizeof(struct lan8814_shared_priv));
3347 
3348 	if (phy_package_init_once(phydev)) {
3349 		err = lan8814_release_coma_mode(phydev);
3350 		if (err)
3351 			return err;
3352 
3353 		err = lan8814_ptp_probe_once(phydev);
3354 		if (err)
3355 			return err;
3356 	}
3357 
3358 	lan8814_ptp_init(phydev);
3359 
3360 	/* Errata workarounds */
3361 	lan8814_clear_2psp_bit(phydev);
3362 	lan8814_update_meas_time(phydev);
3363 
3364 	return 0;
3365 }
3366 
3367 #define LAN8841_MMD_TIMER_REG			0
3368 #define LAN8841_MMD0_REGISTER_17		17
3369 #define LAN8841_MMD0_REGISTER_17_DROP_OPT(x)	((x) & 0x3)
3370 #define LAN8841_MMD0_REGISTER_17_XMIT_TOG_TX_DIS	BIT(3)
3371 #define LAN8841_OPERATION_MODE_STRAP_OVERRIDE_LOW_REG	2
3372 #define LAN8841_OPERATION_MODE_STRAP_OVERRIDE_LOW_REG_MAGJACK	BIT(14)
3373 #define LAN8841_MMD_ANALOG_REG			28
3374 #define LAN8841_ANALOG_CONTROL_1		1
3375 #define LAN8841_ANALOG_CONTROL_1_PLL_TRIM(x)	(((x) & 0x3) << 5)
3376 #define LAN8841_ANALOG_CONTROL_10		13
3377 #define LAN8841_ANALOG_CONTROL_10_PLL_DIV(x)	((x) & 0x3)
3378 #define LAN8841_ANALOG_CONTROL_11		14
3379 #define LAN8841_ANALOG_CONTROL_11_LDO_REF(x)	(((x) & 0x7) << 12)
3380 #define LAN8841_TX_LOW_I_CH_C_D_POWER_MANAGMENT	69
3381 #define LAN8841_TX_LOW_I_CH_C_D_POWER_MANAGMENT_VAL 0xbffc
3382 #define LAN8841_BTRX_POWER_DOWN			70
3383 #define LAN8841_BTRX_POWER_DOWN_QBIAS_CH_A	BIT(0)
3384 #define LAN8841_BTRX_POWER_DOWN_BTRX_CH_A	BIT(1)
3385 #define LAN8841_BTRX_POWER_DOWN_QBIAS_CH_B	BIT(2)
3386 #define LAN8841_BTRX_POWER_DOWN_BTRX_CH_B	BIT(3)
3387 #define LAN8841_BTRX_POWER_DOWN_BTRX_CH_C	BIT(5)
3388 #define LAN8841_BTRX_POWER_DOWN_BTRX_CH_D	BIT(7)
3389 #define LAN8841_ADC_CHANNEL_MASK		198
3390 #define LAN8841_PTP_RX_PARSE_L2_ADDR_EN		370
3391 #define LAN8841_PTP_RX_PARSE_IP_ADDR_EN		371
3392 #define LAN8841_PTP_RX_VERSION			374
3393 #define LAN8841_PTP_TX_PARSE_L2_ADDR_EN		434
3394 #define LAN8841_PTP_TX_PARSE_IP_ADDR_EN		435
3395 #define LAN8841_PTP_TX_VERSION			438
3396 #define LAN8841_PTP_CMD_CTL			256
3397 #define LAN8841_PTP_CMD_CTL_PTP_ENABLE		BIT(2)
3398 #define LAN8841_PTP_CMD_CTL_PTP_DISABLE		BIT(1)
3399 #define LAN8841_PTP_CMD_CTL_PTP_RESET		BIT(0)
3400 #define LAN8841_PTP_RX_PARSE_CONFIG		368
3401 #define LAN8841_PTP_TX_PARSE_CONFIG		432
3402 #define LAN8841_PTP_RX_MODE			381
3403 #define LAN8841_PTP_INSERT_TS_EN		BIT(0)
3404 #define LAN8841_PTP_INSERT_TS_32BIT		BIT(1)
3405 
3406 static int lan8841_config_init(struct phy_device *phydev)
3407 {
3408 	int ret;
3409 
3410 	ret = ksz9131_config_init(phydev);
3411 	if (ret)
3412 		return ret;
3413 
3414 	/* Initialize the HW by resetting everything */
3415 	phy_modify_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
3416 		       LAN8841_PTP_CMD_CTL,
3417 		       LAN8841_PTP_CMD_CTL_PTP_RESET,
3418 		       LAN8841_PTP_CMD_CTL_PTP_RESET);
3419 
3420 	phy_modify_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
3421 		       LAN8841_PTP_CMD_CTL,
3422 		       LAN8841_PTP_CMD_CTL_PTP_ENABLE,
3423 		       LAN8841_PTP_CMD_CTL_PTP_ENABLE);
3424 
3425 	/* Don't process any frames */
3426 	phy_write_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
3427 		      LAN8841_PTP_RX_PARSE_CONFIG, 0);
3428 	phy_write_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
3429 		      LAN8841_PTP_TX_PARSE_CONFIG, 0);
3430 	phy_write_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
3431 		      LAN8841_PTP_TX_PARSE_L2_ADDR_EN, 0);
3432 	phy_write_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
3433 		      LAN8841_PTP_RX_PARSE_L2_ADDR_EN, 0);
3434 	phy_write_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
3435 		      LAN8841_PTP_TX_PARSE_IP_ADDR_EN, 0);
3436 	phy_write_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
3437 		      LAN8841_PTP_RX_PARSE_IP_ADDR_EN, 0);
3438 
3439 	/* Disable checking for minorVersionPTP field */
3440 	phy_write_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
3441 		      LAN8841_PTP_RX_VERSION, 0xff00);
3442 	phy_write_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
3443 		      LAN8841_PTP_TX_VERSION, 0xff00);
3444 
3445 	/* 100BT Clause 40 improvenent errata */
3446 	phy_write_mmd(phydev, LAN8841_MMD_ANALOG_REG,
3447 		      LAN8841_ANALOG_CONTROL_1,
3448 		      LAN8841_ANALOG_CONTROL_1_PLL_TRIM(0x2));
3449 	phy_write_mmd(phydev, LAN8841_MMD_ANALOG_REG,
3450 		      LAN8841_ANALOG_CONTROL_10,
3451 		      LAN8841_ANALOG_CONTROL_10_PLL_DIV(0x1));
3452 
3453 	/* 10M/100M Ethernet Signal Tuning Errata for Shorted-Center Tap
3454 	 * Magnetics
3455 	 */
3456 	ret = phy_read_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
3457 			   LAN8841_OPERATION_MODE_STRAP_OVERRIDE_LOW_REG);
3458 	if (ret & LAN8841_OPERATION_MODE_STRAP_OVERRIDE_LOW_REG_MAGJACK) {
3459 		phy_write_mmd(phydev, LAN8841_MMD_ANALOG_REG,
3460 			      LAN8841_TX_LOW_I_CH_C_D_POWER_MANAGMENT,
3461 			      LAN8841_TX_LOW_I_CH_C_D_POWER_MANAGMENT_VAL);
3462 		phy_write_mmd(phydev, LAN8841_MMD_ANALOG_REG,
3463 			      LAN8841_BTRX_POWER_DOWN,
3464 			      LAN8841_BTRX_POWER_DOWN_QBIAS_CH_A |
3465 			      LAN8841_BTRX_POWER_DOWN_BTRX_CH_A |
3466 			      LAN8841_BTRX_POWER_DOWN_QBIAS_CH_B |
3467 			      LAN8841_BTRX_POWER_DOWN_BTRX_CH_B |
3468 			      LAN8841_BTRX_POWER_DOWN_BTRX_CH_C |
3469 			      LAN8841_BTRX_POWER_DOWN_BTRX_CH_D);
3470 	}
3471 
3472 	/* LDO Adjustment errata */
3473 	phy_write_mmd(phydev, LAN8841_MMD_ANALOG_REG,
3474 		      LAN8841_ANALOG_CONTROL_11,
3475 		      LAN8841_ANALOG_CONTROL_11_LDO_REF(1));
3476 
3477 	/* 100BT RGMII latency tuning errata */
3478 	phy_write_mmd(phydev, MDIO_MMD_PMAPMD,
3479 		      LAN8841_ADC_CHANNEL_MASK, 0x0);
3480 	phy_write_mmd(phydev, LAN8841_MMD_TIMER_REG,
3481 		      LAN8841_MMD0_REGISTER_17,
3482 		      LAN8841_MMD0_REGISTER_17_DROP_OPT(2) |
3483 		      LAN8841_MMD0_REGISTER_17_XMIT_TOG_TX_DIS);
3484 
3485 	return 0;
3486 }
3487 
3488 #define LAN8841_OUTPUT_CTRL			25
3489 #define LAN8841_OUTPUT_CTRL_INT_BUFFER		BIT(14)
3490 #define LAN8841_INT_PTP				BIT(9)
3491 
3492 static int lan8841_config_intr(struct phy_device *phydev)
3493 {
3494 	int err;
3495 
3496 	phy_modify(phydev, LAN8841_OUTPUT_CTRL,
3497 		   LAN8841_OUTPUT_CTRL_INT_BUFFER, 0);
3498 
3499 	if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
3500 		err = phy_read(phydev, LAN8814_INTS);
3501 		if (err)
3502 			return err;
3503 
3504 		/* Enable / disable interrupts. It is OK to enable PTP interrupt
3505 		 * even if it PTP is not enabled. Because the underneath blocks
3506 		 * will not enable the PTP so we will never get the PTP
3507 		 * interrupt.
3508 		 */
3509 		err = phy_write(phydev, LAN8814_INTC,
3510 				LAN8814_INT_LINK | LAN8841_INT_PTP);
3511 	} else {
3512 		err = phy_write(phydev, LAN8814_INTC, 0);
3513 		if (err)
3514 			return err;
3515 
3516 		err = phy_read(phydev, LAN8814_INTS);
3517 	}
3518 
3519 	return err;
3520 }
3521 
3522 #define LAN8841_PTP_TX_EGRESS_SEC_LO			453
3523 #define LAN8841_PTP_TX_EGRESS_SEC_HI			452
3524 #define LAN8841_PTP_TX_EGRESS_NS_LO			451
3525 #define LAN8841_PTP_TX_EGRESS_NS_HI			450
3526 #define LAN8841_PTP_TX_EGRESS_NSEC_HI_VALID		BIT(15)
3527 #define LAN8841_PTP_TX_MSG_HEADER2			455
3528 
3529 static bool lan8841_ptp_get_tx_ts(struct kszphy_ptp_priv *ptp_priv,
3530 				  u32 *sec, u32 *nsec, u16 *seq)
3531 {
3532 	struct phy_device *phydev = ptp_priv->phydev;
3533 
3534 	*nsec = phy_read_mmd(phydev, 2, LAN8841_PTP_TX_EGRESS_NS_HI);
3535 	if (!(*nsec & LAN8841_PTP_TX_EGRESS_NSEC_HI_VALID))
3536 		return false;
3537 
3538 	*nsec = ((*nsec & 0x3fff) << 16);
3539 	*nsec = *nsec | phy_read_mmd(phydev, 2, LAN8841_PTP_TX_EGRESS_NS_LO);
3540 
3541 	*sec = phy_read_mmd(phydev, 2, LAN8841_PTP_TX_EGRESS_SEC_HI);
3542 	*sec = *sec << 16;
3543 	*sec = *sec | phy_read_mmd(phydev, 2, LAN8841_PTP_TX_EGRESS_SEC_LO);
3544 
3545 	*seq = phy_read_mmd(phydev, 2, LAN8841_PTP_TX_MSG_HEADER2);
3546 
3547 	return true;
3548 }
3549 
3550 static void lan8841_ptp_process_tx_ts(struct kszphy_ptp_priv *ptp_priv)
3551 {
3552 	u32 sec, nsec;
3553 	u16 seq;
3554 
3555 	while (lan8841_ptp_get_tx_ts(ptp_priv, &sec, &nsec, &seq))
3556 		lan8814_match_tx_skb(ptp_priv, sec, nsec, seq);
3557 }
3558 
3559 #define LAN8841_PTP_INT_STS			259
3560 #define LAN8841_PTP_INT_STS_PTP_TX_TS_OVRFL_INT	BIT(13)
3561 #define LAN8841_PTP_INT_STS_PTP_TX_TS_INT	BIT(12)
3562 #define LAN8841_PTP_INT_STS_PTP_GPIO_CAP_INT	BIT(2)
3563 
3564 static void lan8841_ptp_flush_fifo(struct kszphy_ptp_priv *ptp_priv)
3565 {
3566 	struct phy_device *phydev = ptp_priv->phydev;
3567 	int i;
3568 
3569 	for (i = 0; i < FIFO_SIZE; ++i)
3570 		phy_read_mmd(phydev, 2, LAN8841_PTP_TX_MSG_HEADER2);
3571 
3572 	phy_read_mmd(phydev, 2, LAN8841_PTP_INT_STS);
3573 }
3574 
3575 #define LAN8841_PTP_GPIO_CAP_STS			506
3576 #define LAN8841_PTP_GPIO_SEL				327
3577 #define LAN8841_PTP_GPIO_SEL_GPIO_SEL(gpio)		((gpio) << 8)
3578 #define LAN8841_PTP_GPIO_RE_LTC_SEC_HI_CAP		498
3579 #define LAN8841_PTP_GPIO_RE_LTC_SEC_LO_CAP		499
3580 #define LAN8841_PTP_GPIO_RE_LTC_NS_HI_CAP		500
3581 #define LAN8841_PTP_GPIO_RE_LTC_NS_LO_CAP		501
3582 #define LAN8841_PTP_GPIO_FE_LTC_SEC_HI_CAP		502
3583 #define LAN8841_PTP_GPIO_FE_LTC_SEC_LO_CAP		503
3584 #define LAN8841_PTP_GPIO_FE_LTC_NS_HI_CAP		504
3585 #define LAN8841_PTP_GPIO_FE_LTC_NS_LO_CAP		505
3586 
3587 static void lan8841_gpio_process_cap(struct kszphy_ptp_priv *ptp_priv)
3588 {
3589 	struct phy_device *phydev = ptp_priv->phydev;
3590 	struct ptp_clock_event ptp_event = {0};
3591 	int pin, ret, tmp;
3592 	s32 sec, nsec;
3593 
3594 	pin = ptp_find_pin_unlocked(ptp_priv->ptp_clock, PTP_PF_EXTTS, 0);
3595 	if (pin == -1)
3596 		return;
3597 
3598 	tmp = phy_read_mmd(phydev, 2, LAN8841_PTP_GPIO_CAP_STS);
3599 	if (tmp < 0)
3600 		return;
3601 
3602 	ret = phy_write_mmd(phydev, 2, LAN8841_PTP_GPIO_SEL,
3603 			    LAN8841_PTP_GPIO_SEL_GPIO_SEL(pin));
3604 	if (ret)
3605 		return;
3606 
3607 	mutex_lock(&ptp_priv->ptp_lock);
3608 	if (tmp & BIT(pin)) {
3609 		sec = phy_read_mmd(phydev, 2, LAN8841_PTP_GPIO_RE_LTC_SEC_HI_CAP);
3610 		sec <<= 16;
3611 		sec |= phy_read_mmd(phydev, 2, LAN8841_PTP_GPIO_RE_LTC_SEC_LO_CAP);
3612 
3613 		nsec = phy_read_mmd(phydev, 2, LAN8841_PTP_GPIO_RE_LTC_NS_HI_CAP) & 0x3fff;
3614 		nsec <<= 16;
3615 		nsec |= phy_read_mmd(phydev, 2, LAN8841_PTP_GPIO_RE_LTC_NS_LO_CAP);
3616 	} else {
3617 		sec = phy_read_mmd(phydev, 2, LAN8841_PTP_GPIO_FE_LTC_SEC_HI_CAP);
3618 		sec <<= 16;
3619 		sec |= phy_read_mmd(phydev, 2, LAN8841_PTP_GPIO_FE_LTC_SEC_LO_CAP);
3620 
3621 		nsec = phy_read_mmd(phydev, 2, LAN8841_PTP_GPIO_FE_LTC_NS_HI_CAP) & 0x3fff;
3622 		nsec <<= 16;
3623 		nsec |= phy_read_mmd(phydev, 2, LAN8841_PTP_GPIO_FE_LTC_NS_LO_CAP);
3624 	}
3625 	mutex_unlock(&ptp_priv->ptp_lock);
3626 	ret = phy_write_mmd(phydev, 2, LAN8841_PTP_GPIO_SEL, 0);
3627 	if (ret)
3628 		return;
3629 
3630 	ptp_event.index = 0;
3631 	ptp_event.timestamp = ktime_set(sec, nsec);
3632 	ptp_event.type = PTP_CLOCK_EXTTS;
3633 	ptp_clock_event(ptp_priv->ptp_clock, &ptp_event);
3634 }
3635 
3636 static void lan8841_handle_ptp_interrupt(struct phy_device *phydev)
3637 {
3638 	struct kszphy_priv *priv = phydev->priv;
3639 	struct kszphy_ptp_priv *ptp_priv = &priv->ptp_priv;
3640 	u16 status;
3641 
3642 	do {
3643 		status = phy_read_mmd(phydev, 2, LAN8841_PTP_INT_STS);
3644 
3645 		if (status & LAN8841_PTP_INT_STS_PTP_TX_TS_INT)
3646 			lan8841_ptp_process_tx_ts(ptp_priv);
3647 
3648 		if (status & LAN8841_PTP_INT_STS_PTP_GPIO_CAP_INT)
3649 			lan8841_gpio_process_cap(ptp_priv);
3650 
3651 		if (status & LAN8841_PTP_INT_STS_PTP_TX_TS_OVRFL_INT) {
3652 			lan8841_ptp_flush_fifo(ptp_priv);
3653 			skb_queue_purge(&ptp_priv->tx_queue);
3654 		}
3655 
3656 	} while (status & (LAN8841_PTP_INT_STS_PTP_TX_TS_INT |
3657 			   LAN8841_PTP_INT_STS_PTP_GPIO_CAP_INT |
3658 			   LAN8841_PTP_INT_STS_PTP_TX_TS_OVRFL_INT));
3659 }
3660 
3661 #define LAN8841_INTS_PTP		BIT(9)
3662 
3663 static irqreturn_t lan8841_handle_interrupt(struct phy_device *phydev)
3664 {
3665 	irqreturn_t ret = IRQ_NONE;
3666 	int irq_status;
3667 
3668 	irq_status = phy_read(phydev, LAN8814_INTS);
3669 	if (irq_status < 0) {
3670 		phy_error(phydev);
3671 		return IRQ_NONE;
3672 	}
3673 
3674 	if (irq_status & LAN8814_INT_LINK) {
3675 		phy_trigger_machine(phydev);
3676 		ret = IRQ_HANDLED;
3677 	}
3678 
3679 	if (irq_status & LAN8841_INTS_PTP) {
3680 		lan8841_handle_ptp_interrupt(phydev);
3681 		ret = IRQ_HANDLED;
3682 	}
3683 
3684 	return ret;
3685 }
3686 
3687 static int lan8841_ts_info(struct mii_timestamper *mii_ts,
3688 			   struct ethtool_ts_info *info)
3689 {
3690 	struct kszphy_ptp_priv *ptp_priv;
3691 
3692 	ptp_priv = container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
3693 
3694 	info->phc_index = ptp_priv->ptp_clock ?
3695 				ptp_clock_index(ptp_priv->ptp_clock) : -1;
3696 	if (info->phc_index == -1)
3697 		return 0;
3698 
3699 	info->so_timestamping = SOF_TIMESTAMPING_TX_HARDWARE |
3700 				SOF_TIMESTAMPING_RX_HARDWARE |
3701 				SOF_TIMESTAMPING_RAW_HARDWARE;
3702 
3703 	info->tx_types = (1 << HWTSTAMP_TX_OFF) |
3704 			 (1 << HWTSTAMP_TX_ON) |
3705 			 (1 << HWTSTAMP_TX_ONESTEP_SYNC);
3706 
3707 	info->rx_filters = (1 << HWTSTAMP_FILTER_NONE) |
3708 			   (1 << HWTSTAMP_FILTER_PTP_V2_L4_EVENT) |
3709 			   (1 << HWTSTAMP_FILTER_PTP_V2_L2_EVENT) |
3710 			   (1 << HWTSTAMP_FILTER_PTP_V2_EVENT);
3711 
3712 	return 0;
3713 }
3714 
3715 #define LAN8841_PTP_INT_EN			260
3716 #define LAN8841_PTP_INT_EN_PTP_TX_TS_OVRFL_EN	BIT(13)
3717 #define LAN8841_PTP_INT_EN_PTP_TX_TS_EN		BIT(12)
3718 
3719 static void lan8841_ptp_enable_processing(struct kszphy_ptp_priv *ptp_priv,
3720 					  bool enable)
3721 {
3722 	struct phy_device *phydev = ptp_priv->phydev;
3723 
3724 	if (enable) {
3725 		/* Enable interrupts on the TX side */
3726 		phy_modify_mmd(phydev, 2, LAN8841_PTP_INT_EN,
3727 			       LAN8841_PTP_INT_EN_PTP_TX_TS_OVRFL_EN |
3728 			       LAN8841_PTP_INT_EN_PTP_TX_TS_EN,
3729 			       LAN8841_PTP_INT_EN_PTP_TX_TS_OVRFL_EN |
3730 			       LAN8841_PTP_INT_EN_PTP_TX_TS_EN);
3731 
3732 		/* Enable the modification of the frame on RX side,
3733 		 * this will add the ns and 2 bits of sec in the reserved field
3734 		 * of the PTP header
3735 		 */
3736 		phy_modify_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
3737 			       LAN8841_PTP_RX_MODE,
3738 			       LAN8841_PTP_INSERT_TS_EN |
3739 			       LAN8841_PTP_INSERT_TS_32BIT,
3740 			       LAN8841_PTP_INSERT_TS_EN |
3741 			       LAN8841_PTP_INSERT_TS_32BIT);
3742 
3743 		ptp_schedule_worker(ptp_priv->ptp_clock, 0);
3744 	} else {
3745 		/* Disable interrupts on the TX side */
3746 		phy_modify_mmd(phydev, 2, LAN8841_PTP_INT_EN,
3747 			       LAN8841_PTP_INT_EN_PTP_TX_TS_OVRFL_EN |
3748 			       LAN8841_PTP_INT_EN_PTP_TX_TS_EN, 0);
3749 
3750 		/* Disable modification of the RX frames */
3751 		phy_modify_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
3752 			       LAN8841_PTP_RX_MODE,
3753 			       LAN8841_PTP_INSERT_TS_EN |
3754 			       LAN8841_PTP_INSERT_TS_32BIT, 0);
3755 
3756 		ptp_cancel_worker_sync(ptp_priv->ptp_clock);
3757 	}
3758 }
3759 
3760 #define LAN8841_PTP_RX_TIMESTAMP_EN		379
3761 #define LAN8841_PTP_TX_TIMESTAMP_EN		443
3762 #define LAN8841_PTP_TX_MOD			445
3763 
3764 static int lan8841_hwtstamp(struct mii_timestamper *mii_ts,
3765 			    struct kernel_hwtstamp_config *config,
3766 			    struct netlink_ext_ack *extack)
3767 {
3768 	struct kszphy_ptp_priv *ptp_priv = container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
3769 	struct phy_device *phydev = ptp_priv->phydev;
3770 	int txcfg = 0, rxcfg = 0;
3771 	int pkt_ts_enable;
3772 
3773 	ptp_priv->hwts_tx_type = config->tx_type;
3774 	ptp_priv->rx_filter = config->rx_filter;
3775 
3776 	switch (config->rx_filter) {
3777 	case HWTSTAMP_FILTER_NONE:
3778 		ptp_priv->layer = 0;
3779 		ptp_priv->version = 0;
3780 		break;
3781 	case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
3782 	case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
3783 	case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
3784 		ptp_priv->layer = PTP_CLASS_L4;
3785 		ptp_priv->version = PTP_CLASS_V2;
3786 		break;
3787 	case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
3788 	case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
3789 	case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
3790 		ptp_priv->layer = PTP_CLASS_L2;
3791 		ptp_priv->version = PTP_CLASS_V2;
3792 		break;
3793 	case HWTSTAMP_FILTER_PTP_V2_EVENT:
3794 	case HWTSTAMP_FILTER_PTP_V2_SYNC:
3795 	case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
3796 		ptp_priv->layer = PTP_CLASS_L4 | PTP_CLASS_L2;
3797 		ptp_priv->version = PTP_CLASS_V2;
3798 		break;
3799 	default:
3800 		return -ERANGE;
3801 	}
3802 
3803 	/* Setup parsing of the frames and enable the timestamping for ptp
3804 	 * frames
3805 	 */
3806 	if (ptp_priv->layer & PTP_CLASS_L2) {
3807 		rxcfg |= PTP_RX_PARSE_CONFIG_LAYER2_EN_;
3808 		txcfg |= PTP_TX_PARSE_CONFIG_LAYER2_EN_;
3809 	} else if (ptp_priv->layer & PTP_CLASS_L4) {
3810 		rxcfg |= PTP_RX_PARSE_CONFIG_IPV4_EN_ | PTP_RX_PARSE_CONFIG_IPV6_EN_;
3811 		txcfg |= PTP_TX_PARSE_CONFIG_IPV4_EN_ | PTP_TX_PARSE_CONFIG_IPV6_EN_;
3812 	}
3813 
3814 	phy_write_mmd(phydev, 2, LAN8841_PTP_RX_PARSE_CONFIG, rxcfg);
3815 	phy_write_mmd(phydev, 2, LAN8841_PTP_TX_PARSE_CONFIG, txcfg);
3816 
3817 	pkt_ts_enable = PTP_TIMESTAMP_EN_SYNC_ | PTP_TIMESTAMP_EN_DREQ_ |
3818 			PTP_TIMESTAMP_EN_PDREQ_ | PTP_TIMESTAMP_EN_PDRES_;
3819 	phy_write_mmd(phydev, 2, LAN8841_PTP_RX_TIMESTAMP_EN, pkt_ts_enable);
3820 	phy_write_mmd(phydev, 2, LAN8841_PTP_TX_TIMESTAMP_EN, pkt_ts_enable);
3821 
3822 	/* Enable / disable of the TX timestamp in the SYNC frames */
3823 	phy_modify_mmd(phydev, 2, LAN8841_PTP_TX_MOD,
3824 		       PTP_TX_MOD_TX_PTP_SYNC_TS_INSERT_,
3825 		       ptp_priv->hwts_tx_type == HWTSTAMP_TX_ONESTEP_SYNC ?
3826 				PTP_TX_MOD_TX_PTP_SYNC_TS_INSERT_ : 0);
3827 
3828 	/* Now enable/disable the timestamping */
3829 	lan8841_ptp_enable_processing(ptp_priv,
3830 				      config->rx_filter != HWTSTAMP_FILTER_NONE);
3831 
3832 	skb_queue_purge(&ptp_priv->tx_queue);
3833 
3834 	lan8841_ptp_flush_fifo(ptp_priv);
3835 
3836 	return 0;
3837 }
3838 
3839 static bool lan8841_rxtstamp(struct mii_timestamper *mii_ts,
3840 			     struct sk_buff *skb, int type)
3841 {
3842 	struct kszphy_ptp_priv *ptp_priv =
3843 			container_of(mii_ts, struct kszphy_ptp_priv, mii_ts);
3844 	struct ptp_header *header = ptp_parse_header(skb, type);
3845 	struct skb_shared_hwtstamps *shhwtstamps;
3846 	struct timespec64 ts;
3847 	unsigned long flags;
3848 	u32 ts_header;
3849 
3850 	if (!header)
3851 		return false;
3852 
3853 	if (ptp_priv->rx_filter == HWTSTAMP_FILTER_NONE ||
3854 	    type == PTP_CLASS_NONE)
3855 		return false;
3856 
3857 	if ((type & ptp_priv->version) == 0 || (type & ptp_priv->layer) == 0)
3858 		return false;
3859 
3860 	spin_lock_irqsave(&ptp_priv->seconds_lock, flags);
3861 	ts.tv_sec = ptp_priv->seconds;
3862 	spin_unlock_irqrestore(&ptp_priv->seconds_lock, flags);
3863 	ts_header = __be32_to_cpu(header->reserved2);
3864 
3865 	shhwtstamps = skb_hwtstamps(skb);
3866 	memset(shhwtstamps, 0, sizeof(*shhwtstamps));
3867 
3868 	/* Check for any wrap arounds for the second part */
3869 	if ((ts.tv_sec & GENMASK(1, 0)) == 0 && (ts_header >> 30) == 3)
3870 		ts.tv_sec -= GENMASK(1, 0) + 1;
3871 	else if ((ts.tv_sec & GENMASK(1, 0)) == 3 && (ts_header >> 30) == 0)
3872 		ts.tv_sec += 1;
3873 
3874 	shhwtstamps->hwtstamp =
3875 		ktime_set((ts.tv_sec & ~(GENMASK(1, 0))) | ts_header >> 30,
3876 			  ts_header & GENMASK(29, 0));
3877 	header->reserved2 = 0;
3878 
3879 	netif_rx(skb);
3880 
3881 	return true;
3882 }
3883 
3884 #define LAN8841_EVENT_A		0
3885 #define LAN8841_EVENT_B		1
3886 #define LAN8841_PTP_LTC_TARGET_SEC_HI(event)	((event) == LAN8841_EVENT_A ? 278 : 288)
3887 #define LAN8841_PTP_LTC_TARGET_SEC_LO(event)	((event) == LAN8841_EVENT_A ? 279 : 289)
3888 #define LAN8841_PTP_LTC_TARGET_NS_HI(event)	((event) == LAN8841_EVENT_A ? 280 : 290)
3889 #define LAN8841_PTP_LTC_TARGET_NS_LO(event)	((event) == LAN8841_EVENT_A ? 281 : 291)
3890 
3891 static int lan8841_ptp_set_target(struct kszphy_ptp_priv *ptp_priv, u8 event,
3892 				  s64 sec, u32 nsec)
3893 {
3894 	struct phy_device *phydev = ptp_priv->phydev;
3895 	int ret;
3896 
3897 	ret = phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_TARGET_SEC_HI(event),
3898 			    upper_16_bits(sec));
3899 	if (ret)
3900 		return ret;
3901 
3902 	ret = phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_TARGET_SEC_LO(event),
3903 			    lower_16_bits(sec));
3904 	if (ret)
3905 		return ret;
3906 
3907 	ret = phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_TARGET_NS_HI(event) & 0x3fff,
3908 			    upper_16_bits(nsec));
3909 	if (ret)
3910 		return ret;
3911 
3912 	return phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_TARGET_NS_LO(event),
3913 			    lower_16_bits(nsec));
3914 }
3915 
3916 #define LAN8841_BUFFER_TIME	2
3917 
3918 static int lan8841_ptp_update_target(struct kszphy_ptp_priv *ptp_priv,
3919 				     const struct timespec64 *ts)
3920 {
3921 	return lan8841_ptp_set_target(ptp_priv, LAN8841_EVENT_A,
3922 				      ts->tv_sec + LAN8841_BUFFER_TIME, 0);
3923 }
3924 
3925 #define LAN8841_PTP_LTC_TARGET_RELOAD_SEC_HI(event)	((event) == LAN8841_EVENT_A ? 282 : 292)
3926 #define LAN8841_PTP_LTC_TARGET_RELOAD_SEC_LO(event)	((event) == LAN8841_EVENT_A ? 283 : 293)
3927 #define LAN8841_PTP_LTC_TARGET_RELOAD_NS_HI(event)	((event) == LAN8841_EVENT_A ? 284 : 294)
3928 #define LAN8841_PTP_LTC_TARGET_RELOAD_NS_LO(event)	((event) == LAN8841_EVENT_A ? 285 : 295)
3929 
3930 static int lan8841_ptp_set_reload(struct kszphy_ptp_priv *ptp_priv, u8 event,
3931 				  s64 sec, u32 nsec)
3932 {
3933 	struct phy_device *phydev = ptp_priv->phydev;
3934 	int ret;
3935 
3936 	ret = phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_TARGET_RELOAD_SEC_HI(event),
3937 			    upper_16_bits(sec));
3938 	if (ret)
3939 		return ret;
3940 
3941 	ret = phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_TARGET_RELOAD_SEC_LO(event),
3942 			    lower_16_bits(sec));
3943 	if (ret)
3944 		return ret;
3945 
3946 	ret = phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_TARGET_RELOAD_NS_HI(event) & 0x3fff,
3947 			    upper_16_bits(nsec));
3948 	if (ret)
3949 		return ret;
3950 
3951 	return phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_TARGET_RELOAD_NS_LO(event),
3952 			     lower_16_bits(nsec));
3953 }
3954 
3955 #define LAN8841_PTP_LTC_SET_SEC_HI	262
3956 #define LAN8841_PTP_LTC_SET_SEC_MID	263
3957 #define LAN8841_PTP_LTC_SET_SEC_LO	264
3958 #define LAN8841_PTP_LTC_SET_NS_HI	265
3959 #define LAN8841_PTP_LTC_SET_NS_LO	266
3960 #define LAN8841_PTP_CMD_CTL_PTP_LTC_LOAD	BIT(4)
3961 
3962 static int lan8841_ptp_settime64(struct ptp_clock_info *ptp,
3963 				 const struct timespec64 *ts)
3964 {
3965 	struct kszphy_ptp_priv *ptp_priv = container_of(ptp, struct kszphy_ptp_priv,
3966 							ptp_clock_info);
3967 	struct phy_device *phydev = ptp_priv->phydev;
3968 	unsigned long flags;
3969 	int ret;
3970 
3971 	/* Set the value to be stored */
3972 	mutex_lock(&ptp_priv->ptp_lock);
3973 	phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_SET_SEC_LO, lower_16_bits(ts->tv_sec));
3974 	phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_SET_SEC_MID, upper_16_bits(ts->tv_sec));
3975 	phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_SET_SEC_HI, upper_32_bits(ts->tv_sec) & 0xffff);
3976 	phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_SET_NS_LO, lower_16_bits(ts->tv_nsec));
3977 	phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_SET_NS_HI, upper_16_bits(ts->tv_nsec) & 0x3fff);
3978 
3979 	/* Set the command to load the LTC */
3980 	phy_write_mmd(phydev, 2, LAN8841_PTP_CMD_CTL,
3981 		      LAN8841_PTP_CMD_CTL_PTP_LTC_LOAD);
3982 	ret = lan8841_ptp_update_target(ptp_priv, ts);
3983 	mutex_unlock(&ptp_priv->ptp_lock);
3984 
3985 	spin_lock_irqsave(&ptp_priv->seconds_lock, flags);
3986 	ptp_priv->seconds = ts->tv_sec;
3987 	spin_unlock_irqrestore(&ptp_priv->seconds_lock, flags);
3988 
3989 	return ret;
3990 }
3991 
3992 #define LAN8841_PTP_LTC_RD_SEC_HI	358
3993 #define LAN8841_PTP_LTC_RD_SEC_MID	359
3994 #define LAN8841_PTP_LTC_RD_SEC_LO	360
3995 #define LAN8841_PTP_LTC_RD_NS_HI	361
3996 #define LAN8841_PTP_LTC_RD_NS_LO	362
3997 #define LAN8841_PTP_CMD_CTL_PTP_LTC_READ	BIT(3)
3998 
3999 static int lan8841_ptp_gettime64(struct ptp_clock_info *ptp,
4000 				 struct timespec64 *ts)
4001 {
4002 	struct kszphy_ptp_priv *ptp_priv = container_of(ptp, struct kszphy_ptp_priv,
4003 							ptp_clock_info);
4004 	struct phy_device *phydev = ptp_priv->phydev;
4005 	time64_t s;
4006 	s64 ns;
4007 
4008 	mutex_lock(&ptp_priv->ptp_lock);
4009 	/* Issue the command to read the LTC */
4010 	phy_write_mmd(phydev, 2, LAN8841_PTP_CMD_CTL,
4011 		      LAN8841_PTP_CMD_CTL_PTP_LTC_READ);
4012 
4013 	/* Read the LTC */
4014 	s = phy_read_mmd(phydev, 2, LAN8841_PTP_LTC_RD_SEC_HI);
4015 	s <<= 16;
4016 	s |= phy_read_mmd(phydev, 2, LAN8841_PTP_LTC_RD_SEC_MID);
4017 	s <<= 16;
4018 	s |= phy_read_mmd(phydev, 2, LAN8841_PTP_LTC_RD_SEC_LO);
4019 
4020 	ns = phy_read_mmd(phydev, 2, LAN8841_PTP_LTC_RD_NS_HI) & 0x3fff;
4021 	ns <<= 16;
4022 	ns |= phy_read_mmd(phydev, 2, LAN8841_PTP_LTC_RD_NS_LO);
4023 	mutex_unlock(&ptp_priv->ptp_lock);
4024 
4025 	set_normalized_timespec64(ts, s, ns);
4026 	return 0;
4027 }
4028 
4029 static void lan8841_ptp_getseconds(struct ptp_clock_info *ptp,
4030 				   struct timespec64 *ts)
4031 {
4032 	struct kszphy_ptp_priv *ptp_priv = container_of(ptp, struct kszphy_ptp_priv,
4033 							ptp_clock_info);
4034 	struct phy_device *phydev = ptp_priv->phydev;
4035 	time64_t s;
4036 
4037 	mutex_lock(&ptp_priv->ptp_lock);
4038 	/* Issue the command to read the LTC */
4039 	phy_write_mmd(phydev, 2, LAN8841_PTP_CMD_CTL,
4040 		      LAN8841_PTP_CMD_CTL_PTP_LTC_READ);
4041 
4042 	/* Read the LTC */
4043 	s = phy_read_mmd(phydev, 2, LAN8841_PTP_LTC_RD_SEC_HI);
4044 	s <<= 16;
4045 	s |= phy_read_mmd(phydev, 2, LAN8841_PTP_LTC_RD_SEC_MID);
4046 	s <<= 16;
4047 	s |= phy_read_mmd(phydev, 2, LAN8841_PTP_LTC_RD_SEC_LO);
4048 	mutex_unlock(&ptp_priv->ptp_lock);
4049 
4050 	set_normalized_timespec64(ts, s, 0);
4051 }
4052 
4053 #define LAN8841_PTP_LTC_STEP_ADJ_LO			276
4054 #define LAN8841_PTP_LTC_STEP_ADJ_HI			275
4055 #define LAN8841_PTP_LTC_STEP_ADJ_DIR			BIT(15)
4056 #define LAN8841_PTP_CMD_CTL_PTP_LTC_STEP_SECONDS	BIT(5)
4057 #define LAN8841_PTP_CMD_CTL_PTP_LTC_STEP_NANOSECONDS	BIT(6)
4058 
4059 static int lan8841_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
4060 {
4061 	struct kszphy_ptp_priv *ptp_priv = container_of(ptp, struct kszphy_ptp_priv,
4062 							ptp_clock_info);
4063 	struct phy_device *phydev = ptp_priv->phydev;
4064 	struct timespec64 ts;
4065 	bool add = true;
4066 	u32 nsec;
4067 	s32 sec;
4068 	int ret;
4069 
4070 	/* The HW allows up to 15 sec to adjust the time, but here we limit to
4071 	 * 10 sec the adjustment. The reason is, in case the adjustment is 14
4072 	 * sec and 999999999 nsec, then we add 8ns to compansate the actual
4073 	 * increment so the value can be bigger than 15 sec. Therefore limit the
4074 	 * possible adjustments so we will not have these corner cases
4075 	 */
4076 	if (delta > 10000000000LL || delta < -10000000000LL) {
4077 		/* The timeadjustment is too big, so fall back using set time */
4078 		u64 now;
4079 
4080 		ptp->gettime64(ptp, &ts);
4081 
4082 		now = ktime_to_ns(timespec64_to_ktime(ts));
4083 		ts = ns_to_timespec64(now + delta);
4084 
4085 		ptp->settime64(ptp, &ts);
4086 		return 0;
4087 	}
4088 
4089 	sec = div_u64_rem(delta < 0 ? -delta : delta, NSEC_PER_SEC, &nsec);
4090 	if (delta < 0 && nsec != 0) {
4091 		/* It is not allowed to adjust low the nsec part, therefore
4092 		 * subtract more from second part and add to nanosecond such
4093 		 * that would roll over, so the second part will increase
4094 		 */
4095 		sec--;
4096 		nsec = NSEC_PER_SEC - nsec;
4097 	}
4098 
4099 	/* Calculate the adjustments and the direction */
4100 	if (delta < 0)
4101 		add = false;
4102 
4103 	if (nsec > 0)
4104 		/* add 8 ns to cover the likely normal increment */
4105 		nsec += 8;
4106 
4107 	if (nsec >= NSEC_PER_SEC) {
4108 		/* carry into seconds */
4109 		sec++;
4110 		nsec -= NSEC_PER_SEC;
4111 	}
4112 
4113 	mutex_lock(&ptp_priv->ptp_lock);
4114 	if (sec) {
4115 		phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_STEP_ADJ_LO, sec);
4116 		phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_STEP_ADJ_HI,
4117 			      add ? LAN8841_PTP_LTC_STEP_ADJ_DIR : 0);
4118 		phy_write_mmd(phydev, 2, LAN8841_PTP_CMD_CTL,
4119 			      LAN8841_PTP_CMD_CTL_PTP_LTC_STEP_SECONDS);
4120 	}
4121 
4122 	if (nsec) {
4123 		phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_STEP_ADJ_LO,
4124 			      nsec & 0xffff);
4125 		phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_STEP_ADJ_HI,
4126 			      (nsec >> 16) & 0x3fff);
4127 		phy_write_mmd(phydev, 2, LAN8841_PTP_CMD_CTL,
4128 			      LAN8841_PTP_CMD_CTL_PTP_LTC_STEP_NANOSECONDS);
4129 	}
4130 	mutex_unlock(&ptp_priv->ptp_lock);
4131 
4132 	/* Update the target clock */
4133 	ptp->gettime64(ptp, &ts);
4134 	mutex_lock(&ptp_priv->ptp_lock);
4135 	ret = lan8841_ptp_update_target(ptp_priv, &ts);
4136 	mutex_unlock(&ptp_priv->ptp_lock);
4137 
4138 	return ret;
4139 }
4140 
4141 #define LAN8841_PTP_LTC_RATE_ADJ_HI		269
4142 #define LAN8841_PTP_LTC_RATE_ADJ_HI_DIR		BIT(15)
4143 #define LAN8841_PTP_LTC_RATE_ADJ_LO		270
4144 
4145 static int lan8841_ptp_adjfine(struct ptp_clock_info *ptp, long scaled_ppm)
4146 {
4147 	struct kszphy_ptp_priv *ptp_priv = container_of(ptp, struct kszphy_ptp_priv,
4148 							ptp_clock_info);
4149 	struct phy_device *phydev = ptp_priv->phydev;
4150 	bool faster = true;
4151 	u32 rate;
4152 
4153 	if (!scaled_ppm)
4154 		return 0;
4155 
4156 	if (scaled_ppm < 0) {
4157 		scaled_ppm = -scaled_ppm;
4158 		faster = false;
4159 	}
4160 
4161 	rate = LAN8841_1PPM_FORMAT * (upper_16_bits(scaled_ppm));
4162 	rate += (LAN8841_1PPM_FORMAT * (lower_16_bits(scaled_ppm))) >> 16;
4163 
4164 	mutex_lock(&ptp_priv->ptp_lock);
4165 	phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_RATE_ADJ_HI,
4166 		      faster ? LAN8841_PTP_LTC_RATE_ADJ_HI_DIR | (upper_16_bits(rate) & 0x3fff)
4167 			     : upper_16_bits(rate) & 0x3fff);
4168 	phy_write_mmd(phydev, 2, LAN8841_PTP_LTC_RATE_ADJ_LO, lower_16_bits(rate));
4169 	mutex_unlock(&ptp_priv->ptp_lock);
4170 
4171 	return 0;
4172 }
4173 
4174 static int lan8841_ptp_verify(struct ptp_clock_info *ptp, unsigned int pin,
4175 			      enum ptp_pin_function func, unsigned int chan)
4176 {
4177 	switch (func) {
4178 	case PTP_PF_NONE:
4179 	case PTP_PF_PEROUT:
4180 	case PTP_PF_EXTTS:
4181 		break;
4182 	default:
4183 		return -1;
4184 	}
4185 
4186 	return 0;
4187 }
4188 
4189 #define LAN8841_PTP_GPIO_NUM	10
4190 #define LAN8841_GPIO_EN		128
4191 #define LAN8841_GPIO_DIR	129
4192 #define LAN8841_GPIO_BUF	130
4193 
4194 static int lan8841_ptp_perout_off(struct kszphy_ptp_priv *ptp_priv, int pin)
4195 {
4196 	struct phy_device *phydev = ptp_priv->phydev;
4197 	int ret;
4198 
4199 	ret = phy_clear_bits_mmd(phydev, 2, LAN8841_GPIO_EN, BIT(pin));
4200 	if (ret)
4201 		return ret;
4202 
4203 	ret = phy_clear_bits_mmd(phydev, 2, LAN8841_GPIO_DIR, BIT(pin));
4204 	if (ret)
4205 		return ret;
4206 
4207 	return phy_clear_bits_mmd(phydev, 2, LAN8841_GPIO_BUF, BIT(pin));
4208 }
4209 
4210 static int lan8841_ptp_perout_on(struct kszphy_ptp_priv *ptp_priv, int pin)
4211 {
4212 	struct phy_device *phydev = ptp_priv->phydev;
4213 	int ret;
4214 
4215 	ret = phy_set_bits_mmd(phydev, 2, LAN8841_GPIO_EN, BIT(pin));
4216 	if (ret)
4217 		return ret;
4218 
4219 	ret = phy_set_bits_mmd(phydev, 2, LAN8841_GPIO_DIR, BIT(pin));
4220 	if (ret)
4221 		return ret;
4222 
4223 	return phy_set_bits_mmd(phydev, 2, LAN8841_GPIO_BUF, BIT(pin));
4224 }
4225 
4226 #define LAN8841_GPIO_DATA_SEL1				131
4227 #define LAN8841_GPIO_DATA_SEL2				132
4228 #define LAN8841_GPIO_DATA_SEL_GPIO_DATA_SEL_EVENT_MASK	GENMASK(2, 0)
4229 #define LAN8841_GPIO_DATA_SEL_GPIO_DATA_SEL_EVENT_A	1
4230 #define LAN8841_GPIO_DATA_SEL_GPIO_DATA_SEL_EVENT_B	2
4231 #define LAN8841_PTP_GENERAL_CONFIG			257
4232 #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_POL_A	BIT(1)
4233 #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_POL_B	BIT(3)
4234 #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_A_MASK	GENMASK(7, 4)
4235 #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_B_MASK	GENMASK(11, 8)
4236 #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_A		4
4237 #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_B		7
4238 
4239 static int lan8841_ptp_remove_event(struct kszphy_ptp_priv *ptp_priv, int pin,
4240 				    u8 event)
4241 {
4242 	struct phy_device *phydev = ptp_priv->phydev;
4243 	u16 tmp;
4244 	int ret;
4245 
4246 	/* Now remove pin from the event. GPIO_DATA_SEL1 contains the GPIO
4247 	 * pins 0-4 while GPIO_DATA_SEL2 contains GPIO pins 5-9, therefore
4248 	 * depending on the pin, it requires to read a different register
4249 	 */
4250 	if (pin < 5) {
4251 		tmp = LAN8841_GPIO_DATA_SEL_GPIO_DATA_SEL_EVENT_MASK << (3 * pin);
4252 		ret = phy_clear_bits_mmd(phydev, 2, LAN8841_GPIO_DATA_SEL1, tmp);
4253 	} else {
4254 		tmp = LAN8841_GPIO_DATA_SEL_GPIO_DATA_SEL_EVENT_MASK << (3 * (pin - 5));
4255 		ret = phy_clear_bits_mmd(phydev, 2, LAN8841_GPIO_DATA_SEL2, tmp);
4256 	}
4257 	if (ret)
4258 		return ret;
4259 
4260 	/* Disable the event */
4261 	if (event == LAN8841_EVENT_A)
4262 		tmp = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_POL_A |
4263 		      LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_A_MASK;
4264 	else
4265 		tmp = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_POL_B |
4266 		      LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_B_MASK;
4267 	return phy_clear_bits_mmd(phydev, 2, LAN8841_GPIO_EN, tmp);
4268 }
4269 
4270 static int lan8841_ptp_enable_event(struct kszphy_ptp_priv *ptp_priv, int pin,
4271 				    u8 event, int pulse_width)
4272 {
4273 	struct phy_device *phydev = ptp_priv->phydev;
4274 	u16 tmp;
4275 	int ret;
4276 
4277 	/* Enable the event */
4278 	if (event == LAN8841_EVENT_A)
4279 		ret = phy_modify_mmd(phydev, 2, LAN8841_PTP_GENERAL_CONFIG,
4280 				     LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_POL_A |
4281 				     LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_A_MASK,
4282 				     LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_POL_A |
4283 				     pulse_width << LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_A);
4284 	else
4285 		ret = phy_modify_mmd(phydev, 2, LAN8841_PTP_GENERAL_CONFIG,
4286 				     LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_POL_B |
4287 				     LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_B_MASK,
4288 				     LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_POL_B |
4289 				     pulse_width << LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_B);
4290 	if (ret)
4291 		return ret;
4292 
4293 	/* Now connect the pin to the event. GPIO_DATA_SEL1 contains the GPIO
4294 	 * pins 0-4 while GPIO_DATA_SEL2 contains GPIO pins 5-9, therefore
4295 	 * depending on the pin, it requires to read a different register
4296 	 */
4297 	if (event == LAN8841_EVENT_A)
4298 		tmp = LAN8841_GPIO_DATA_SEL_GPIO_DATA_SEL_EVENT_A;
4299 	else
4300 		tmp = LAN8841_GPIO_DATA_SEL_GPIO_DATA_SEL_EVENT_B;
4301 
4302 	if (pin < 5)
4303 		ret = phy_set_bits_mmd(phydev, 2, LAN8841_GPIO_DATA_SEL1,
4304 				       tmp << (3 * pin));
4305 	else
4306 		ret = phy_set_bits_mmd(phydev, 2, LAN8841_GPIO_DATA_SEL2,
4307 				       tmp << (3 * (pin - 5)));
4308 
4309 	return ret;
4310 }
4311 
4312 #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_200MS	13
4313 #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_100MS	12
4314 #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_50MS	11
4315 #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_10MS	10
4316 #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_5MS	9
4317 #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_1MS	8
4318 #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_500US	7
4319 #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_100US	6
4320 #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_50US	5
4321 #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_10US	4
4322 #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_5US	3
4323 #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_1US	2
4324 #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_500NS	1
4325 #define LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_100NS	0
4326 
4327 static int lan8841_ptp_perout(struct ptp_clock_info *ptp,
4328 			      struct ptp_clock_request *rq, int on)
4329 {
4330 	struct kszphy_ptp_priv *ptp_priv = container_of(ptp, struct kszphy_ptp_priv,
4331 							ptp_clock_info);
4332 	struct phy_device *phydev = ptp_priv->phydev;
4333 	struct timespec64 ts_on, ts_period;
4334 	s64 on_nsec, period_nsec;
4335 	int pulse_width;
4336 	int pin;
4337 	int ret;
4338 
4339 	if (rq->perout.flags & ~PTP_PEROUT_DUTY_CYCLE)
4340 		return -EOPNOTSUPP;
4341 
4342 	pin = ptp_find_pin(ptp_priv->ptp_clock, PTP_PF_PEROUT, rq->perout.index);
4343 	if (pin == -1 || pin >= LAN8841_PTP_GPIO_NUM)
4344 		return -EINVAL;
4345 
4346 	if (!on) {
4347 		ret = lan8841_ptp_perout_off(ptp_priv, pin);
4348 		if (ret)
4349 			return ret;
4350 
4351 		return lan8841_ptp_remove_event(ptp_priv, LAN8841_EVENT_A, pin);
4352 	}
4353 
4354 	ts_on.tv_sec = rq->perout.on.sec;
4355 	ts_on.tv_nsec = rq->perout.on.nsec;
4356 	on_nsec = timespec64_to_ns(&ts_on);
4357 
4358 	ts_period.tv_sec = rq->perout.period.sec;
4359 	ts_period.tv_nsec = rq->perout.period.nsec;
4360 	period_nsec = timespec64_to_ns(&ts_period);
4361 
4362 	if (period_nsec < 200) {
4363 		pr_warn_ratelimited("%s: perout period too small, minimum is 200 nsec\n",
4364 				    phydev_name(phydev));
4365 		return -EOPNOTSUPP;
4366 	}
4367 
4368 	if (on_nsec >= period_nsec) {
4369 		pr_warn_ratelimited("%s: pulse width must be smaller than period\n",
4370 				    phydev_name(phydev));
4371 		return -EINVAL;
4372 	}
4373 
4374 	switch (on_nsec) {
4375 	case 200000000:
4376 		pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_200MS;
4377 		break;
4378 	case 100000000:
4379 		pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_100MS;
4380 		break;
4381 	case 50000000:
4382 		pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_50MS;
4383 		break;
4384 	case 10000000:
4385 		pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_10MS;
4386 		break;
4387 	case 5000000:
4388 		pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_5MS;
4389 		break;
4390 	case 1000000:
4391 		pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_1MS;
4392 		break;
4393 	case 500000:
4394 		pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_500US;
4395 		break;
4396 	case 100000:
4397 		pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_100US;
4398 		break;
4399 	case 50000:
4400 		pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_50US;
4401 		break;
4402 	case 10000:
4403 		pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_10US;
4404 		break;
4405 	case 5000:
4406 		pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_5US;
4407 		break;
4408 	case 1000:
4409 		pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_1US;
4410 		break;
4411 	case 500:
4412 		pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_500NS;
4413 		break;
4414 	case 100:
4415 		pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_100NS;
4416 		break;
4417 	default:
4418 		pr_warn_ratelimited("%s: Use default duty cycle of 100ns\n",
4419 				    phydev_name(phydev));
4420 		pulse_width = LAN8841_PTP_GENERAL_CONFIG_LTC_EVENT_100NS;
4421 		break;
4422 	}
4423 
4424 	mutex_lock(&ptp_priv->ptp_lock);
4425 	ret = lan8841_ptp_set_target(ptp_priv, LAN8841_EVENT_A, rq->perout.start.sec,
4426 				     rq->perout.start.nsec);
4427 	mutex_unlock(&ptp_priv->ptp_lock);
4428 	if (ret)
4429 		return ret;
4430 
4431 	ret = lan8841_ptp_set_reload(ptp_priv, LAN8841_EVENT_A, rq->perout.period.sec,
4432 				     rq->perout.period.nsec);
4433 	if (ret)
4434 		return ret;
4435 
4436 	ret = lan8841_ptp_enable_event(ptp_priv, pin, LAN8841_EVENT_A,
4437 				       pulse_width);
4438 	if (ret)
4439 		return ret;
4440 
4441 	ret = lan8841_ptp_perout_on(ptp_priv, pin);
4442 	if (ret)
4443 		lan8841_ptp_remove_event(ptp_priv, pin, LAN8841_EVENT_A);
4444 
4445 	return ret;
4446 }
4447 
4448 #define LAN8841_PTP_GPIO_CAP_EN			496
4449 #define LAN8841_PTP_GPIO_CAP_EN_GPIO_RE_CAPTURE_ENABLE(gpio)	(BIT(gpio))
4450 #define LAN8841_PTP_GPIO_CAP_EN_GPIO_FE_CAPTURE_ENABLE(gpio)	(BIT(gpio) << 8)
4451 #define LAN8841_PTP_INT_EN_PTP_GPIO_CAP_EN	BIT(2)
4452 
4453 static int lan8841_ptp_extts_on(struct kszphy_ptp_priv *ptp_priv, int pin,
4454 				u32 flags)
4455 {
4456 	struct phy_device *phydev = ptp_priv->phydev;
4457 	u16 tmp = 0;
4458 	int ret;
4459 
4460 	/* Set GPIO to be intput */
4461 	ret = phy_set_bits_mmd(phydev, 2, LAN8841_GPIO_EN, BIT(pin));
4462 	if (ret)
4463 		return ret;
4464 
4465 	ret = phy_clear_bits_mmd(phydev, 2, LAN8841_GPIO_BUF, BIT(pin));
4466 	if (ret)
4467 		return ret;
4468 
4469 	/* Enable capture on the edges of the pin */
4470 	if (flags & PTP_RISING_EDGE)
4471 		tmp |= LAN8841_PTP_GPIO_CAP_EN_GPIO_RE_CAPTURE_ENABLE(pin);
4472 	if (flags & PTP_FALLING_EDGE)
4473 		tmp |= LAN8841_PTP_GPIO_CAP_EN_GPIO_FE_CAPTURE_ENABLE(pin);
4474 	ret = phy_write_mmd(phydev, 2, LAN8841_PTP_GPIO_CAP_EN, tmp);
4475 	if (ret)
4476 		return ret;
4477 
4478 	/* Enable interrupt */
4479 	return phy_modify_mmd(phydev, 2, LAN8841_PTP_INT_EN,
4480 			      LAN8841_PTP_INT_EN_PTP_GPIO_CAP_EN,
4481 			      LAN8841_PTP_INT_EN_PTP_GPIO_CAP_EN);
4482 }
4483 
4484 static int lan8841_ptp_extts_off(struct kszphy_ptp_priv *ptp_priv, int pin)
4485 {
4486 	struct phy_device *phydev = ptp_priv->phydev;
4487 	int ret;
4488 
4489 	/* Set GPIO to be output */
4490 	ret = phy_clear_bits_mmd(phydev, 2, LAN8841_GPIO_EN, BIT(pin));
4491 	if (ret)
4492 		return ret;
4493 
4494 	ret = phy_clear_bits_mmd(phydev, 2, LAN8841_GPIO_BUF, BIT(pin));
4495 	if (ret)
4496 		return ret;
4497 
4498 	/* Disable capture on both of the edges */
4499 	ret = phy_modify_mmd(phydev, 2, LAN8841_PTP_GPIO_CAP_EN,
4500 			     LAN8841_PTP_GPIO_CAP_EN_GPIO_RE_CAPTURE_ENABLE(pin) |
4501 			     LAN8841_PTP_GPIO_CAP_EN_GPIO_FE_CAPTURE_ENABLE(pin),
4502 			     0);
4503 	if (ret)
4504 		return ret;
4505 
4506 	/* Disable interrupt */
4507 	return phy_modify_mmd(phydev, 2, LAN8841_PTP_INT_EN,
4508 			      LAN8841_PTP_INT_EN_PTP_GPIO_CAP_EN,
4509 			      0);
4510 }
4511 
4512 static int lan8841_ptp_extts(struct ptp_clock_info *ptp,
4513 			     struct ptp_clock_request *rq, int on)
4514 {
4515 	struct kszphy_ptp_priv *ptp_priv = container_of(ptp, struct kszphy_ptp_priv,
4516 							ptp_clock_info);
4517 	int pin;
4518 	int ret;
4519 
4520 	/* Reject requests with unsupported flags */
4521 	if (rq->extts.flags & ~(PTP_ENABLE_FEATURE |
4522 				PTP_EXTTS_EDGES |
4523 				PTP_STRICT_FLAGS))
4524 		return -EOPNOTSUPP;
4525 
4526 	pin = ptp_find_pin(ptp_priv->ptp_clock, PTP_PF_EXTTS, rq->extts.index);
4527 	if (pin == -1 || pin >= LAN8841_PTP_GPIO_NUM)
4528 		return -EINVAL;
4529 
4530 	mutex_lock(&ptp_priv->ptp_lock);
4531 	if (on)
4532 		ret = lan8841_ptp_extts_on(ptp_priv, pin, rq->extts.flags);
4533 	else
4534 		ret = lan8841_ptp_extts_off(ptp_priv, pin);
4535 	mutex_unlock(&ptp_priv->ptp_lock);
4536 
4537 	return ret;
4538 }
4539 
4540 static int lan8841_ptp_enable(struct ptp_clock_info *ptp,
4541 			      struct ptp_clock_request *rq, int on)
4542 {
4543 	switch (rq->type) {
4544 	case PTP_CLK_REQ_EXTTS:
4545 		return lan8841_ptp_extts(ptp, rq, on);
4546 	case PTP_CLK_REQ_PEROUT:
4547 		return lan8841_ptp_perout(ptp, rq, on);
4548 	default:
4549 		return -EOPNOTSUPP;
4550 	}
4551 
4552 	return 0;
4553 }
4554 
4555 static long lan8841_ptp_do_aux_work(struct ptp_clock_info *ptp)
4556 {
4557 	struct kszphy_ptp_priv *ptp_priv = container_of(ptp, struct kszphy_ptp_priv,
4558 							ptp_clock_info);
4559 	struct timespec64 ts;
4560 	unsigned long flags;
4561 
4562 	lan8841_ptp_getseconds(&ptp_priv->ptp_clock_info, &ts);
4563 
4564 	spin_lock_irqsave(&ptp_priv->seconds_lock, flags);
4565 	ptp_priv->seconds = ts.tv_sec;
4566 	spin_unlock_irqrestore(&ptp_priv->seconds_lock, flags);
4567 
4568 	return nsecs_to_jiffies(LAN8841_GET_SEC_LTC_DELAY);
4569 }
4570 
4571 static struct ptp_clock_info lan8841_ptp_clock_info = {
4572 	.owner		= THIS_MODULE,
4573 	.name		= "lan8841 ptp",
4574 	.max_adj	= 31249999,
4575 	.gettime64	= lan8841_ptp_gettime64,
4576 	.settime64	= lan8841_ptp_settime64,
4577 	.adjtime	= lan8841_ptp_adjtime,
4578 	.adjfine	= lan8841_ptp_adjfine,
4579 	.verify         = lan8841_ptp_verify,
4580 	.enable         = lan8841_ptp_enable,
4581 	.do_aux_work	= lan8841_ptp_do_aux_work,
4582 	.n_per_out      = LAN8841_PTP_GPIO_NUM,
4583 	.n_ext_ts       = LAN8841_PTP_GPIO_NUM,
4584 	.n_pins         = LAN8841_PTP_GPIO_NUM,
4585 };
4586 
4587 #define LAN8841_OPERATION_MODE_STRAP_LOW_REGISTER 3
4588 #define LAN8841_OPERATION_MODE_STRAP_LOW_REGISTER_STRAP_RGMII_EN BIT(0)
4589 
4590 static int lan8841_probe(struct phy_device *phydev)
4591 {
4592 	struct kszphy_ptp_priv *ptp_priv;
4593 	struct kszphy_priv *priv;
4594 	int err;
4595 
4596 	err = kszphy_probe(phydev);
4597 	if (err)
4598 		return err;
4599 
4600 	if (phy_read_mmd(phydev, KSZ9131RN_MMD_COMMON_CTRL_REG,
4601 			 LAN8841_OPERATION_MODE_STRAP_LOW_REGISTER) &
4602 	    LAN8841_OPERATION_MODE_STRAP_LOW_REGISTER_STRAP_RGMII_EN)
4603 		phydev->interface = PHY_INTERFACE_MODE_RGMII_RXID;
4604 
4605 	/* Register the clock */
4606 	if (!IS_ENABLED(CONFIG_NETWORK_PHY_TIMESTAMPING))
4607 		return 0;
4608 
4609 	priv = phydev->priv;
4610 	ptp_priv = &priv->ptp_priv;
4611 
4612 	ptp_priv->pin_config = devm_kcalloc(&phydev->mdio.dev,
4613 					    LAN8841_PTP_GPIO_NUM,
4614 					    sizeof(*ptp_priv->pin_config),
4615 					    GFP_KERNEL);
4616 	if (!ptp_priv->pin_config)
4617 		return -ENOMEM;
4618 
4619 	for (int i = 0; i < LAN8841_PTP_GPIO_NUM; ++i) {
4620 		struct ptp_pin_desc *p = &ptp_priv->pin_config[i];
4621 
4622 		snprintf(p->name, sizeof(p->name), "pin%d", i);
4623 		p->index = i;
4624 		p->func = PTP_PF_NONE;
4625 	}
4626 
4627 	ptp_priv->ptp_clock_info = lan8841_ptp_clock_info;
4628 	ptp_priv->ptp_clock_info.pin_config = ptp_priv->pin_config;
4629 	ptp_priv->ptp_clock = ptp_clock_register(&ptp_priv->ptp_clock_info,
4630 						 &phydev->mdio.dev);
4631 	if (IS_ERR(ptp_priv->ptp_clock)) {
4632 		phydev_err(phydev, "ptp_clock_register failed: %lu\n",
4633 			   PTR_ERR(ptp_priv->ptp_clock));
4634 		return -EINVAL;
4635 	}
4636 
4637 	if (!ptp_priv->ptp_clock)
4638 		return 0;
4639 
4640 	/* Initialize the SW */
4641 	skb_queue_head_init(&ptp_priv->tx_queue);
4642 	ptp_priv->phydev = phydev;
4643 	mutex_init(&ptp_priv->ptp_lock);
4644 	spin_lock_init(&ptp_priv->seconds_lock);
4645 
4646 	ptp_priv->mii_ts.rxtstamp = lan8841_rxtstamp;
4647 	ptp_priv->mii_ts.txtstamp = lan8814_txtstamp;
4648 	ptp_priv->mii_ts.hwtstamp = lan8841_hwtstamp;
4649 	ptp_priv->mii_ts.ts_info = lan8841_ts_info;
4650 
4651 	phydev->mii_ts = &ptp_priv->mii_ts;
4652 
4653 	return 0;
4654 }
4655 
4656 static int lan8841_suspend(struct phy_device *phydev)
4657 {
4658 	struct kszphy_priv *priv = phydev->priv;
4659 	struct kszphy_ptp_priv *ptp_priv = &priv->ptp_priv;
4660 
4661 	ptp_cancel_worker_sync(ptp_priv->ptp_clock);
4662 
4663 	return genphy_suspend(phydev);
4664 }
4665 
4666 static struct phy_driver ksphy_driver[] = {
4667 {
4668 	.phy_id		= PHY_ID_KS8737,
4669 	.phy_id_mask	= MICREL_PHY_ID_MASK,
4670 	.name		= "Micrel KS8737",
4671 	/* PHY_BASIC_FEATURES */
4672 	.driver_data	= &ks8737_type,
4673 	.probe		= kszphy_probe,
4674 	.config_init	= kszphy_config_init,
4675 	.config_intr	= kszphy_config_intr,
4676 	.handle_interrupt = kszphy_handle_interrupt,
4677 	.suspend	= kszphy_suspend,
4678 	.resume		= kszphy_resume,
4679 }, {
4680 	.phy_id		= PHY_ID_KSZ8021,
4681 	.phy_id_mask	= 0x00ffffff,
4682 	.name		= "Micrel KSZ8021 or KSZ8031",
4683 	/* PHY_BASIC_FEATURES */
4684 	.driver_data	= &ksz8021_type,
4685 	.probe		= kszphy_probe,
4686 	.config_init	= kszphy_config_init,
4687 	.config_intr	= kszphy_config_intr,
4688 	.handle_interrupt = kszphy_handle_interrupt,
4689 	.get_sset_count = kszphy_get_sset_count,
4690 	.get_strings	= kszphy_get_strings,
4691 	.get_stats	= kszphy_get_stats,
4692 	.suspend	= kszphy_suspend,
4693 	.resume		= kszphy_resume,
4694 }, {
4695 	.phy_id		= PHY_ID_KSZ8031,
4696 	.phy_id_mask	= 0x00ffffff,
4697 	.name		= "Micrel KSZ8031",
4698 	/* PHY_BASIC_FEATURES */
4699 	.driver_data	= &ksz8021_type,
4700 	.probe		= kszphy_probe,
4701 	.config_init	= kszphy_config_init,
4702 	.config_intr	= kszphy_config_intr,
4703 	.handle_interrupt = kszphy_handle_interrupt,
4704 	.get_sset_count = kszphy_get_sset_count,
4705 	.get_strings	= kszphy_get_strings,
4706 	.get_stats	= kszphy_get_stats,
4707 	.suspend	= kszphy_suspend,
4708 	.resume		= kszphy_resume,
4709 }, {
4710 	.phy_id		= PHY_ID_KSZ8041,
4711 	.phy_id_mask	= MICREL_PHY_ID_MASK,
4712 	.name		= "Micrel KSZ8041",
4713 	/* PHY_BASIC_FEATURES */
4714 	.driver_data	= &ksz8041_type,
4715 	.probe		= kszphy_probe,
4716 	.config_init	= ksz8041_config_init,
4717 	.config_aneg	= ksz8041_config_aneg,
4718 	.config_intr	= kszphy_config_intr,
4719 	.handle_interrupt = kszphy_handle_interrupt,
4720 	.get_sset_count = kszphy_get_sset_count,
4721 	.get_strings	= kszphy_get_strings,
4722 	.get_stats	= kszphy_get_stats,
4723 	/* No suspend/resume callbacks because of errata DS80000700A,
4724 	 * receiver error following software power down.
4725 	 */
4726 }, {
4727 	.phy_id		= PHY_ID_KSZ8041RNLI,
4728 	.phy_id_mask	= MICREL_PHY_ID_MASK,
4729 	.name		= "Micrel KSZ8041RNLI",
4730 	/* PHY_BASIC_FEATURES */
4731 	.driver_data	= &ksz8041_type,
4732 	.probe		= kszphy_probe,
4733 	.config_init	= kszphy_config_init,
4734 	.config_intr	= kszphy_config_intr,
4735 	.handle_interrupt = kszphy_handle_interrupt,
4736 	.get_sset_count = kszphy_get_sset_count,
4737 	.get_strings	= kszphy_get_strings,
4738 	.get_stats	= kszphy_get_stats,
4739 	.suspend	= kszphy_suspend,
4740 	.resume		= kszphy_resume,
4741 }, {
4742 	.name		= "Micrel KSZ8051",
4743 	/* PHY_BASIC_FEATURES */
4744 	.driver_data	= &ksz8051_type,
4745 	.probe		= kszphy_probe,
4746 	.config_init	= kszphy_config_init,
4747 	.config_intr	= kszphy_config_intr,
4748 	.handle_interrupt = kszphy_handle_interrupt,
4749 	.get_sset_count = kszphy_get_sset_count,
4750 	.get_strings	= kszphy_get_strings,
4751 	.get_stats	= kszphy_get_stats,
4752 	.match_phy_device = ksz8051_match_phy_device,
4753 	.suspend	= kszphy_suspend,
4754 	.resume		= kszphy_resume,
4755 }, {
4756 	.phy_id		= PHY_ID_KSZ8001,
4757 	.name		= "Micrel KSZ8001 or KS8721",
4758 	.phy_id_mask	= 0x00fffffc,
4759 	/* PHY_BASIC_FEATURES */
4760 	.driver_data	= &ksz8041_type,
4761 	.probe		= kszphy_probe,
4762 	.config_init	= kszphy_config_init,
4763 	.config_intr	= kszphy_config_intr,
4764 	.handle_interrupt = kszphy_handle_interrupt,
4765 	.get_sset_count = kszphy_get_sset_count,
4766 	.get_strings	= kszphy_get_strings,
4767 	.get_stats	= kszphy_get_stats,
4768 	.suspend	= kszphy_suspend,
4769 	.resume		= kszphy_resume,
4770 }, {
4771 	.phy_id		= PHY_ID_KSZ8081,
4772 	.name		= "Micrel KSZ8081 or KSZ8091",
4773 	.phy_id_mask	= MICREL_PHY_ID_MASK,
4774 	.flags		= PHY_POLL_CABLE_TEST,
4775 	/* PHY_BASIC_FEATURES */
4776 	.driver_data	= &ksz8081_type,
4777 	.probe		= kszphy_probe,
4778 	.config_init	= ksz8081_config_init,
4779 	.soft_reset	= genphy_soft_reset,
4780 	.config_aneg	= ksz8081_config_aneg,
4781 	.read_status	= ksz8081_read_status,
4782 	.config_intr	= kszphy_config_intr,
4783 	.handle_interrupt = kszphy_handle_interrupt,
4784 	.get_sset_count = kszphy_get_sset_count,
4785 	.get_strings	= kszphy_get_strings,
4786 	.get_stats	= kszphy_get_stats,
4787 	.suspend	= kszphy_suspend,
4788 	.resume		= kszphy_resume,
4789 	.cable_test_start	= ksz886x_cable_test_start,
4790 	.cable_test_get_status	= ksz886x_cable_test_get_status,
4791 }, {
4792 	.phy_id		= PHY_ID_KSZ8061,
4793 	.name		= "Micrel KSZ8061",
4794 	.phy_id_mask	= MICREL_PHY_ID_MASK,
4795 	/* PHY_BASIC_FEATURES */
4796 	.probe		= kszphy_probe,
4797 	.config_init	= ksz8061_config_init,
4798 	.config_intr	= kszphy_config_intr,
4799 	.handle_interrupt = kszphy_handle_interrupt,
4800 	.suspend	= kszphy_suspend,
4801 	.resume		= kszphy_resume,
4802 }, {
4803 	.phy_id		= PHY_ID_KSZ9021,
4804 	.phy_id_mask	= 0x000ffffe,
4805 	.name		= "Micrel KSZ9021 Gigabit PHY",
4806 	/* PHY_GBIT_FEATURES */
4807 	.driver_data	= &ksz9021_type,
4808 	.probe		= kszphy_probe,
4809 	.get_features	= ksz9031_get_features,
4810 	.config_init	= ksz9021_config_init,
4811 	.config_intr	= kszphy_config_intr,
4812 	.handle_interrupt = kszphy_handle_interrupt,
4813 	.get_sset_count = kszphy_get_sset_count,
4814 	.get_strings	= kszphy_get_strings,
4815 	.get_stats	= kszphy_get_stats,
4816 	.suspend	= kszphy_suspend,
4817 	.resume		= kszphy_resume,
4818 	.read_mmd	= genphy_read_mmd_unsupported,
4819 	.write_mmd	= genphy_write_mmd_unsupported,
4820 }, {
4821 	.phy_id		= PHY_ID_KSZ9031,
4822 	.phy_id_mask	= MICREL_PHY_ID_MASK,
4823 	.name		= "Micrel KSZ9031 Gigabit PHY",
4824 	.flags		= PHY_POLL_CABLE_TEST,
4825 	.driver_data	= &ksz9021_type,
4826 	.probe		= kszphy_probe,
4827 	.get_features	= ksz9031_get_features,
4828 	.config_init	= ksz9031_config_init,
4829 	.soft_reset	= genphy_soft_reset,
4830 	.read_status	= ksz9031_read_status,
4831 	.config_intr	= kszphy_config_intr,
4832 	.handle_interrupt = kszphy_handle_interrupt,
4833 	.get_sset_count = kszphy_get_sset_count,
4834 	.get_strings	= kszphy_get_strings,
4835 	.get_stats	= kszphy_get_stats,
4836 	.suspend	= kszphy_suspend,
4837 	.resume		= kszphy_resume,
4838 	.cable_test_start	= ksz9x31_cable_test_start,
4839 	.cable_test_get_status	= ksz9x31_cable_test_get_status,
4840 }, {
4841 	.phy_id		= PHY_ID_LAN8814,
4842 	.phy_id_mask	= MICREL_PHY_ID_MASK,
4843 	.name		= "Microchip INDY Gigabit Quad PHY",
4844 	.flags          = PHY_POLL_CABLE_TEST,
4845 	.config_init	= lan8814_config_init,
4846 	.driver_data	= &lan8814_type,
4847 	.probe		= lan8814_probe,
4848 	.soft_reset	= genphy_soft_reset,
4849 	.read_status	= ksz9031_read_status,
4850 	.get_sset_count	= kszphy_get_sset_count,
4851 	.get_strings	= kszphy_get_strings,
4852 	.get_stats	= kszphy_get_stats,
4853 	.suspend	= genphy_suspend,
4854 	.resume		= kszphy_resume,
4855 	.config_intr	= lan8814_config_intr,
4856 	.handle_interrupt = lan8814_handle_interrupt,
4857 	.cable_test_start	= lan8814_cable_test_start,
4858 	.cable_test_get_status	= ksz886x_cable_test_get_status,
4859 }, {
4860 	.phy_id		= PHY_ID_LAN8804,
4861 	.phy_id_mask	= MICREL_PHY_ID_MASK,
4862 	.name		= "Microchip LAN966X Gigabit PHY",
4863 	.config_init	= lan8804_config_init,
4864 	.driver_data	= &ksz9021_type,
4865 	.probe		= kszphy_probe,
4866 	.soft_reset	= genphy_soft_reset,
4867 	.read_status	= ksz9031_read_status,
4868 	.get_sset_count	= kszphy_get_sset_count,
4869 	.get_strings	= kszphy_get_strings,
4870 	.get_stats	= kszphy_get_stats,
4871 	.suspend	= genphy_suspend,
4872 	.resume		= kszphy_resume,
4873 	.config_intr	= lan8804_config_intr,
4874 	.handle_interrupt = lan8804_handle_interrupt,
4875 }, {
4876 	.phy_id		= PHY_ID_LAN8841,
4877 	.phy_id_mask	= MICREL_PHY_ID_MASK,
4878 	.name		= "Microchip LAN8841 Gigabit PHY",
4879 	.flags		= PHY_POLL_CABLE_TEST,
4880 	.driver_data	= &lan8841_type,
4881 	.config_init	= lan8841_config_init,
4882 	.probe		= lan8841_probe,
4883 	.soft_reset	= genphy_soft_reset,
4884 	.config_intr	= lan8841_config_intr,
4885 	.handle_interrupt = lan8841_handle_interrupt,
4886 	.get_sset_count = kszphy_get_sset_count,
4887 	.get_strings	= kszphy_get_strings,
4888 	.get_stats	= kszphy_get_stats,
4889 	.suspend	= lan8841_suspend,
4890 	.resume		= genphy_resume,
4891 	.cable_test_start	= lan8814_cable_test_start,
4892 	.cable_test_get_status	= ksz886x_cable_test_get_status,
4893 }, {
4894 	.phy_id		= PHY_ID_KSZ9131,
4895 	.phy_id_mask	= MICREL_PHY_ID_MASK,
4896 	.name		= "Microchip KSZ9131 Gigabit PHY",
4897 	/* PHY_GBIT_FEATURES */
4898 	.flags		= PHY_POLL_CABLE_TEST,
4899 	.driver_data	= &ksz9131_type,
4900 	.probe		= kszphy_probe,
4901 	.soft_reset	= genphy_soft_reset,
4902 	.config_init	= ksz9131_config_init,
4903 	.config_intr	= kszphy_config_intr,
4904 	.config_aneg	= ksz9131_config_aneg,
4905 	.read_status	= ksz9131_read_status,
4906 	.handle_interrupt = kszphy_handle_interrupt,
4907 	.get_sset_count = kszphy_get_sset_count,
4908 	.get_strings	= kszphy_get_strings,
4909 	.get_stats	= kszphy_get_stats,
4910 	.suspend	= kszphy_suspend,
4911 	.resume		= kszphy_resume,
4912 	.cable_test_start	= ksz9x31_cable_test_start,
4913 	.cable_test_get_status	= ksz9x31_cable_test_get_status,
4914 	.get_features	= ksz9477_get_features,
4915 }, {
4916 	.phy_id		= PHY_ID_KSZ8873MLL,
4917 	.phy_id_mask	= MICREL_PHY_ID_MASK,
4918 	.name		= "Micrel KSZ8873MLL Switch",
4919 	/* PHY_BASIC_FEATURES */
4920 	.config_init	= kszphy_config_init,
4921 	.config_aneg	= ksz8873mll_config_aneg,
4922 	.read_status	= ksz8873mll_read_status,
4923 	.suspend	= genphy_suspend,
4924 	.resume		= genphy_resume,
4925 }, {
4926 	.phy_id		= PHY_ID_KSZ886X,
4927 	.phy_id_mask	= MICREL_PHY_ID_MASK,
4928 	.name		= "Micrel KSZ8851 Ethernet MAC or KSZ886X Switch",
4929 	.driver_data	= &ksz886x_type,
4930 	/* PHY_BASIC_FEATURES */
4931 	.flags		= PHY_POLL_CABLE_TEST,
4932 	.config_init	= kszphy_config_init,
4933 	.config_aneg	= ksz886x_config_aneg,
4934 	.read_status	= ksz886x_read_status,
4935 	.suspend	= genphy_suspend,
4936 	.resume		= genphy_resume,
4937 	.cable_test_start	= ksz886x_cable_test_start,
4938 	.cable_test_get_status	= ksz886x_cable_test_get_status,
4939 }, {
4940 	.name		= "Micrel KSZ87XX Switch",
4941 	/* PHY_BASIC_FEATURES */
4942 	.config_init	= kszphy_config_init,
4943 	.match_phy_device = ksz8795_match_phy_device,
4944 	.suspend	= genphy_suspend,
4945 	.resume		= genphy_resume,
4946 }, {
4947 	.phy_id		= PHY_ID_KSZ9477,
4948 	.phy_id_mask	= MICREL_PHY_ID_MASK,
4949 	.name		= "Microchip KSZ9477",
4950 	/* PHY_GBIT_FEATURES */
4951 	.config_init	= ksz9477_config_init,
4952 	.config_intr	= kszphy_config_intr,
4953 	.handle_interrupt = kszphy_handle_interrupt,
4954 	.suspend	= genphy_suspend,
4955 	.resume		= genphy_resume,
4956 	.get_features	= ksz9477_get_features,
4957 } };
4958 
4959 module_phy_driver(ksphy_driver);
4960 
4961 MODULE_DESCRIPTION("Micrel PHY driver");
4962 MODULE_AUTHOR("David J. Choi");
4963 MODULE_LICENSE("GPL");
4964 
4965 static struct mdio_device_id __maybe_unused micrel_tbl[] = {
4966 	{ PHY_ID_KSZ9021, 0x000ffffe },
4967 	{ PHY_ID_KSZ9031, MICREL_PHY_ID_MASK },
4968 	{ PHY_ID_KSZ9131, MICREL_PHY_ID_MASK },
4969 	{ PHY_ID_KSZ8001, 0x00fffffc },
4970 	{ PHY_ID_KS8737, MICREL_PHY_ID_MASK },
4971 	{ PHY_ID_KSZ8021, 0x00ffffff },
4972 	{ PHY_ID_KSZ8031, 0x00ffffff },
4973 	{ PHY_ID_KSZ8041, MICREL_PHY_ID_MASK },
4974 	{ PHY_ID_KSZ8051, MICREL_PHY_ID_MASK },
4975 	{ PHY_ID_KSZ8061, MICREL_PHY_ID_MASK },
4976 	{ PHY_ID_KSZ8081, MICREL_PHY_ID_MASK },
4977 	{ PHY_ID_KSZ8873MLL, MICREL_PHY_ID_MASK },
4978 	{ PHY_ID_KSZ886X, MICREL_PHY_ID_MASK },
4979 	{ PHY_ID_LAN8814, MICREL_PHY_ID_MASK },
4980 	{ PHY_ID_LAN8804, MICREL_PHY_ID_MASK },
4981 	{ PHY_ID_LAN8841, MICREL_PHY_ID_MASK },
4982 	{ }
4983 };
4984 
4985 MODULE_DEVICE_TABLE(mdio, micrel_tbl);
4986