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