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