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