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