1 // SPDX-License-Identifier: GPL-2.0+
3 * drivers/net/phy/at803x.c
5 * Driver for Qualcomm Atheros AR803x PHY
10 #include <linux/phy.h>
11 #include <linux/module.h>
12 #include <linux/string.h>
13 #include <linux/netdevice.h>
14 #include <linux/etherdevice.h>
15 #include <linux/ethtool_netlink.h>
16 #include <linux/of_gpio.h>
17 #include <linux/bitfield.h>
18 #include <linux/gpio/consumer.h>
19 #include <linux/regulator/of_regulator.h>
20 #include <linux/regulator/driver.h>
21 #include <linux/regulator/consumer.h>
22 #include <dt-bindings/net/qca-ar803x.h>
24 #define AT803X_SPECIFIC_FUNCTION_CONTROL 0x10
25 #define AT803X_SFC_ASSERT_CRS BIT(11)
26 #define AT803X_SFC_FORCE_LINK BIT(10)
27 #define AT803X_SFC_MDI_CROSSOVER_MODE_M GENMASK(6, 5)
28 #define AT803X_SFC_AUTOMATIC_CROSSOVER 0x3
29 #define AT803X_SFC_MANUAL_MDIX 0x1
30 #define AT803X_SFC_MANUAL_MDI 0x0
31 #define AT803X_SFC_SQE_TEST BIT(2)
32 #define AT803X_SFC_POLARITY_REVERSAL BIT(1)
33 #define AT803X_SFC_DISABLE_JABBER BIT(0)
35 #define AT803X_SPECIFIC_STATUS 0x11
36 #define AT803X_SS_SPEED_MASK (3 << 14)
37 #define AT803X_SS_SPEED_1000 (2 << 14)
38 #define AT803X_SS_SPEED_100 (1 << 14)
39 #define AT803X_SS_SPEED_10 (0 << 14)
40 #define AT803X_SS_DUPLEX BIT(13)
41 #define AT803X_SS_SPEED_DUPLEX_RESOLVED BIT(11)
42 #define AT803X_SS_MDIX BIT(6)
44 #define AT803X_INTR_ENABLE 0x12
45 #define AT803X_INTR_ENABLE_AUTONEG_ERR BIT(15)
46 #define AT803X_INTR_ENABLE_SPEED_CHANGED BIT(14)
47 #define AT803X_INTR_ENABLE_DUPLEX_CHANGED BIT(13)
48 #define AT803X_INTR_ENABLE_PAGE_RECEIVED BIT(12)
49 #define AT803X_INTR_ENABLE_LINK_FAIL BIT(11)
50 #define AT803X_INTR_ENABLE_LINK_SUCCESS BIT(10)
51 #define AT803X_INTR_ENABLE_WIRESPEED_DOWNGRADE BIT(5)
52 #define AT803X_INTR_ENABLE_POLARITY_CHANGED BIT(1)
53 #define AT803X_INTR_ENABLE_WOL BIT(0)
55 #define AT803X_INTR_STATUS 0x13
57 #define AT803X_SMART_SPEED 0x14
58 #define AT803X_SMART_SPEED_ENABLE BIT(5)
59 #define AT803X_SMART_SPEED_RETRY_LIMIT_MASK GENMASK(4, 2)
60 #define AT803X_SMART_SPEED_BYPASS_TIMER BIT(1)
61 #define AT803X_CDT 0x16
62 #define AT803X_CDT_MDI_PAIR_MASK GENMASK(9, 8)
63 #define AT803X_CDT_ENABLE_TEST BIT(0)
64 #define AT803X_CDT_STATUS 0x1c
65 #define AT803X_CDT_STATUS_STAT_NORMAL 0
66 #define AT803X_CDT_STATUS_STAT_SHORT 1
67 #define AT803X_CDT_STATUS_STAT_OPEN 2
68 #define AT803X_CDT_STATUS_STAT_FAIL 3
69 #define AT803X_CDT_STATUS_STAT_MASK GENMASK(9, 8)
70 #define AT803X_CDT_STATUS_DELTA_TIME_MASK GENMASK(7, 0)
71 #define AT803X_LED_CONTROL 0x18
73 #define AT803X_DEVICE_ADDR 0x03
74 #define AT803X_LOC_MAC_ADDR_0_15_OFFSET 0x804C
75 #define AT803X_LOC_MAC_ADDR_16_31_OFFSET 0x804B
76 #define AT803X_LOC_MAC_ADDR_32_47_OFFSET 0x804A
77 #define AT803X_REG_CHIP_CONFIG 0x1f
78 #define AT803X_BT_BX_REG_SEL 0x8000
80 #define AT803X_DEBUG_ADDR 0x1D
81 #define AT803X_DEBUG_DATA 0x1E
83 #define AT803X_MODE_CFG_MASK 0x0F
84 #define AT803X_MODE_CFG_SGMII 0x01
86 #define AT803X_PSSR 0x11 /*PHY-Specific Status Register*/
87 #define AT803X_PSSR_MR_AN_COMPLETE 0x0200
89 #define AT803X_DEBUG_REG_0 0x00
90 #define AT803X_DEBUG_RX_CLK_DLY_EN BIT(15)
92 #define AT803X_DEBUG_REG_5 0x05
93 #define AT803X_DEBUG_TX_CLK_DLY_EN BIT(8)
95 #define AT803X_DEBUG_REG_1F 0x1F
96 #define AT803X_DEBUG_PLL_ON BIT(2)
97 #define AT803X_DEBUG_RGMII_1V8 BIT(3)
99 /* AT803x supports either the XTAL input pad, an internal PLL or the
100 * DSP as clock reference for the clock output pad. The XTAL reference
101 * is only used for 25 MHz output, all other frequencies need the PLL.
102 * The DSP as a clock reference is used in synchronous ethernet
105 * By default the PLL is only enabled if there is a link. Otherwise
106 * the PHY will go into low power state and disabled the PLL. You can
107 * set the PLL_ON bit (see debug register 0x1f) to keep the PLL always
110 #define AT803X_MMD7_CLK25M 0x8016
111 #define AT803X_CLK_OUT_MASK GENMASK(4, 2)
112 #define AT803X_CLK_OUT_25MHZ_XTAL 0
113 #define AT803X_CLK_OUT_25MHZ_DSP 1
114 #define AT803X_CLK_OUT_50MHZ_PLL 2
115 #define AT803X_CLK_OUT_50MHZ_DSP 3
116 #define AT803X_CLK_OUT_62_5MHZ_PLL 4
117 #define AT803X_CLK_OUT_62_5MHZ_DSP 5
118 #define AT803X_CLK_OUT_125MHZ_PLL 6
119 #define AT803X_CLK_OUT_125MHZ_DSP 7
121 /* The AR8035 has another mask which is compatible with the AR8031/AR8033 mask
122 * but doesn't support choosing between XTAL/PLL and DSP.
124 #define AT8035_CLK_OUT_MASK GENMASK(4, 3)
126 #define AT803X_CLK_OUT_STRENGTH_MASK GENMASK(8, 7)
127 #define AT803X_CLK_OUT_STRENGTH_FULL 0
128 #define AT803X_CLK_OUT_STRENGTH_HALF 1
129 #define AT803X_CLK_OUT_STRENGTH_QUARTER 2
131 #define AT803X_DEFAULT_DOWNSHIFT 5
132 #define AT803X_MIN_DOWNSHIFT 2
133 #define AT803X_MAX_DOWNSHIFT 9
135 #define ATH9331_PHY_ID 0x004dd041
136 #define ATH8030_PHY_ID 0x004dd076
137 #define ATH8031_PHY_ID 0x004dd074
138 #define ATH8032_PHY_ID 0x004dd023
139 #define ATH8035_PHY_ID 0x004dd072
140 #define AT8030_PHY_ID_MASK 0xffffffef
142 MODULE_DESCRIPTION("Qualcomm Atheros AR803x PHY driver");
143 MODULE_AUTHOR("Matus Ujhelyi");
144 MODULE_LICENSE("GPL");
148 #define AT803X_KEEP_PLL_ENABLED BIT(0) /* don't turn off internal PLL */
151 struct regulator_dev *vddio_rdev;
152 struct regulator_dev *vddh_rdev;
153 struct regulator *vddio;
156 struct at803x_context {
165 static int at803x_debug_reg_read(struct phy_device *phydev, u16 reg)
169 ret = phy_write(phydev, AT803X_DEBUG_ADDR, reg);
173 return phy_read(phydev, AT803X_DEBUG_DATA);
176 static int at803x_debug_reg_mask(struct phy_device *phydev, u16 reg,
182 ret = at803x_debug_reg_read(phydev, reg);
190 return phy_write(phydev, AT803X_DEBUG_DATA, val);
193 static int at803x_enable_rx_delay(struct phy_device *phydev)
195 return at803x_debug_reg_mask(phydev, AT803X_DEBUG_REG_0, 0,
196 AT803X_DEBUG_RX_CLK_DLY_EN);
199 static int at803x_enable_tx_delay(struct phy_device *phydev)
201 return at803x_debug_reg_mask(phydev, AT803X_DEBUG_REG_5, 0,
202 AT803X_DEBUG_TX_CLK_DLY_EN);
205 static int at803x_disable_rx_delay(struct phy_device *phydev)
207 return at803x_debug_reg_mask(phydev, AT803X_DEBUG_REG_0,
208 AT803X_DEBUG_RX_CLK_DLY_EN, 0);
211 static int at803x_disable_tx_delay(struct phy_device *phydev)
213 return at803x_debug_reg_mask(phydev, AT803X_DEBUG_REG_5,
214 AT803X_DEBUG_TX_CLK_DLY_EN, 0);
217 /* save relevant PHY registers to private copy */
218 static void at803x_context_save(struct phy_device *phydev,
219 struct at803x_context *context)
221 context->bmcr = phy_read(phydev, MII_BMCR);
222 context->advertise = phy_read(phydev, MII_ADVERTISE);
223 context->control1000 = phy_read(phydev, MII_CTRL1000);
224 context->int_enable = phy_read(phydev, AT803X_INTR_ENABLE);
225 context->smart_speed = phy_read(phydev, AT803X_SMART_SPEED);
226 context->led_control = phy_read(phydev, AT803X_LED_CONTROL);
229 /* restore relevant PHY registers from private copy */
230 static void at803x_context_restore(struct phy_device *phydev,
231 const struct at803x_context *context)
233 phy_write(phydev, MII_BMCR, context->bmcr);
234 phy_write(phydev, MII_ADVERTISE, context->advertise);
235 phy_write(phydev, MII_CTRL1000, context->control1000);
236 phy_write(phydev, AT803X_INTR_ENABLE, context->int_enable);
237 phy_write(phydev, AT803X_SMART_SPEED, context->smart_speed);
238 phy_write(phydev, AT803X_LED_CONTROL, context->led_control);
241 static int at803x_set_wol(struct phy_device *phydev,
242 struct ethtool_wolinfo *wol)
244 struct net_device *ndev = phydev->attached_dev;
248 unsigned int i, offsets[] = {
249 AT803X_LOC_MAC_ADDR_32_47_OFFSET,
250 AT803X_LOC_MAC_ADDR_16_31_OFFSET,
251 AT803X_LOC_MAC_ADDR_0_15_OFFSET,
257 if (wol->wolopts & WAKE_MAGIC) {
258 mac = (const u8 *) ndev->dev_addr;
260 if (!is_valid_ether_addr(mac))
263 for (i = 0; i < 3; i++)
264 phy_write_mmd(phydev, AT803X_DEVICE_ADDR, offsets[i],
265 mac[(i * 2) + 1] | (mac[(i * 2)] << 8));
267 value = phy_read(phydev, AT803X_INTR_ENABLE);
268 value |= AT803X_INTR_ENABLE_WOL;
269 ret = phy_write(phydev, AT803X_INTR_ENABLE, value);
272 value = phy_read(phydev, AT803X_INTR_STATUS);
274 value = phy_read(phydev, AT803X_INTR_ENABLE);
275 value &= (~AT803X_INTR_ENABLE_WOL);
276 ret = phy_write(phydev, AT803X_INTR_ENABLE, value);
279 value = phy_read(phydev, AT803X_INTR_STATUS);
285 static void at803x_get_wol(struct phy_device *phydev,
286 struct ethtool_wolinfo *wol)
290 wol->supported = WAKE_MAGIC;
293 value = phy_read(phydev, AT803X_INTR_ENABLE);
294 if (value & AT803X_INTR_ENABLE_WOL)
295 wol->wolopts |= WAKE_MAGIC;
298 static int at803x_suspend(struct phy_device *phydev)
303 value = phy_read(phydev, AT803X_INTR_ENABLE);
304 wol_enabled = value & AT803X_INTR_ENABLE_WOL;
307 value = BMCR_ISOLATE;
311 phy_modify(phydev, MII_BMCR, 0, value);
316 static int at803x_resume(struct phy_device *phydev)
318 return phy_modify(phydev, MII_BMCR, BMCR_PDOWN | BMCR_ISOLATE, 0);
321 static int at803x_rgmii_reg_set_voltage_sel(struct regulator_dev *rdev,
322 unsigned int selector)
324 struct phy_device *phydev = rdev_get_drvdata(rdev);
327 return at803x_debug_reg_mask(phydev, AT803X_DEBUG_REG_1F,
328 0, AT803X_DEBUG_RGMII_1V8);
330 return at803x_debug_reg_mask(phydev, AT803X_DEBUG_REG_1F,
331 AT803X_DEBUG_RGMII_1V8, 0);
334 static int at803x_rgmii_reg_get_voltage_sel(struct regulator_dev *rdev)
336 struct phy_device *phydev = rdev_get_drvdata(rdev);
339 val = at803x_debug_reg_read(phydev, AT803X_DEBUG_REG_1F);
343 return (val & AT803X_DEBUG_RGMII_1V8) ? 1 : 0;
346 static struct regulator_ops vddio_regulator_ops = {
347 .list_voltage = regulator_list_voltage_table,
348 .set_voltage_sel = at803x_rgmii_reg_set_voltage_sel,
349 .get_voltage_sel = at803x_rgmii_reg_get_voltage_sel,
352 static const unsigned int vddio_voltage_table[] = {
357 static const struct regulator_desc vddio_desc = {
359 .of_match = of_match_ptr("vddio-regulator"),
360 .n_voltages = ARRAY_SIZE(vddio_voltage_table),
361 .volt_table = vddio_voltage_table,
362 .ops = &vddio_regulator_ops,
363 .type = REGULATOR_VOLTAGE,
364 .owner = THIS_MODULE,
367 static struct regulator_ops vddh_regulator_ops = {
370 static const struct regulator_desc vddh_desc = {
372 .of_match = of_match_ptr("vddh-regulator"),
375 .ops = &vddh_regulator_ops,
376 .type = REGULATOR_VOLTAGE,
377 .owner = THIS_MODULE,
380 static int at8031_register_regulators(struct phy_device *phydev)
382 struct at803x_priv *priv = phydev->priv;
383 struct device *dev = &phydev->mdio.dev;
384 struct regulator_config config = { };
387 config.driver_data = phydev;
389 priv->vddio_rdev = devm_regulator_register(dev, &vddio_desc, &config);
390 if (IS_ERR(priv->vddio_rdev)) {
391 phydev_err(phydev, "failed to register VDDIO regulator\n");
392 return PTR_ERR(priv->vddio_rdev);
395 priv->vddh_rdev = devm_regulator_register(dev, &vddh_desc, &config);
396 if (IS_ERR(priv->vddh_rdev)) {
397 phydev_err(phydev, "failed to register VDDH regulator\n");
398 return PTR_ERR(priv->vddh_rdev);
404 static bool at803x_match_phy_id(struct phy_device *phydev, u32 phy_id)
406 return (phydev->phy_id & phydev->drv->phy_id_mask)
407 == (phy_id & phydev->drv->phy_id_mask);
410 static int at803x_parse_dt(struct phy_device *phydev)
412 struct device_node *node = phydev->mdio.dev.of_node;
413 struct at803x_priv *priv = phydev->priv;
418 if (!IS_ENABLED(CONFIG_OF_MDIO))
421 ret = of_property_read_u32(node, "qca,clk-out-frequency", &freq);
425 sel = AT803X_CLK_OUT_25MHZ_XTAL;
428 sel = AT803X_CLK_OUT_50MHZ_PLL;
431 sel = AT803X_CLK_OUT_62_5MHZ_PLL;
434 sel = AT803X_CLK_OUT_125MHZ_PLL;
437 phydev_err(phydev, "invalid qca,clk-out-frequency\n");
441 priv->clk_25m_reg |= FIELD_PREP(AT803X_CLK_OUT_MASK, sel);
442 priv->clk_25m_mask |= AT803X_CLK_OUT_MASK;
444 /* Fixup for the AR8030/AR8035. This chip has another mask and
445 * doesn't support the DSP reference. Eg. the lowest bit of the
446 * mask. The upper two bits select the same frequencies. Mask
447 * the lowest bit here.
450 * There was no datasheet for the AR8030 available so this is
451 * just a guess. But the AR8035 is listed as pin compatible
452 * to the AR8030 so there might be a good chance it works on
455 if (at803x_match_phy_id(phydev, ATH8030_PHY_ID) ||
456 at803x_match_phy_id(phydev, ATH8035_PHY_ID)) {
457 priv->clk_25m_reg &= AT8035_CLK_OUT_MASK;
458 priv->clk_25m_mask &= AT8035_CLK_OUT_MASK;
462 ret = of_property_read_u32(node, "qca,clk-out-strength", &strength);
464 priv->clk_25m_mask |= AT803X_CLK_OUT_STRENGTH_MASK;
466 case AR803X_STRENGTH_FULL:
467 priv->clk_25m_reg |= AT803X_CLK_OUT_STRENGTH_FULL;
469 case AR803X_STRENGTH_HALF:
470 priv->clk_25m_reg |= AT803X_CLK_OUT_STRENGTH_HALF;
472 case AR803X_STRENGTH_QUARTER:
473 priv->clk_25m_reg |= AT803X_CLK_OUT_STRENGTH_QUARTER;
476 phydev_err(phydev, "invalid qca,clk-out-strength\n");
481 /* Only supported on AR8031/AR8033, the AR8030/AR8035 use strapping
484 if (at803x_match_phy_id(phydev, ATH8031_PHY_ID)) {
485 if (of_property_read_bool(node, "qca,keep-pll-enabled"))
486 priv->flags |= AT803X_KEEP_PLL_ENABLED;
488 ret = at8031_register_regulators(phydev);
492 priv->vddio = devm_regulator_get_optional(&phydev->mdio.dev,
494 if (IS_ERR(priv->vddio)) {
495 phydev_err(phydev, "failed to get VDDIO regulator\n");
496 return PTR_ERR(priv->vddio);
499 ret = regulator_enable(priv->vddio);
507 static int at803x_probe(struct phy_device *phydev)
509 struct device *dev = &phydev->mdio.dev;
510 struct at803x_priv *priv;
512 priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
518 return at803x_parse_dt(phydev);
521 static void at803x_remove(struct phy_device *phydev)
523 struct at803x_priv *priv = phydev->priv;
526 regulator_disable(priv->vddio);
529 static int at803x_clk_out_config(struct phy_device *phydev)
531 struct at803x_priv *priv = phydev->priv;
534 if (!priv->clk_25m_mask)
537 val = phy_read_mmd(phydev, MDIO_MMD_AN, AT803X_MMD7_CLK25M);
541 val &= ~priv->clk_25m_mask;
542 val |= priv->clk_25m_reg;
544 return phy_write_mmd(phydev, MDIO_MMD_AN, AT803X_MMD7_CLK25M, val);
547 static int at8031_pll_config(struct phy_device *phydev)
549 struct at803x_priv *priv = phydev->priv;
551 /* The default after hardware reset is PLL OFF. After a soft reset, the
552 * values are retained.
554 if (priv->flags & AT803X_KEEP_PLL_ENABLED)
555 return at803x_debug_reg_mask(phydev, AT803X_DEBUG_REG_1F,
556 0, AT803X_DEBUG_PLL_ON);
558 return at803x_debug_reg_mask(phydev, AT803X_DEBUG_REG_1F,
559 AT803X_DEBUG_PLL_ON, 0);
562 static int at803x_config_init(struct phy_device *phydev)
566 /* The RX and TX delay default is:
567 * after HW reset: RX delay enabled and TX delay disabled
568 * after SW reset: RX delay enabled, while TX delay retains the
569 * value before reset.
571 if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID ||
572 phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID)
573 ret = at803x_enable_rx_delay(phydev);
575 ret = at803x_disable_rx_delay(phydev);
579 if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID ||
580 phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID)
581 ret = at803x_enable_tx_delay(phydev);
583 ret = at803x_disable_tx_delay(phydev);
587 ret = at803x_clk_out_config(phydev);
591 if (at803x_match_phy_id(phydev, ATH8031_PHY_ID)) {
592 ret = at8031_pll_config(phydev);
600 static int at803x_ack_interrupt(struct phy_device *phydev)
604 err = phy_read(phydev, AT803X_INTR_STATUS);
606 return (err < 0) ? err : 0;
609 static int at803x_config_intr(struct phy_device *phydev)
614 value = phy_read(phydev, AT803X_INTR_ENABLE);
616 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
617 value |= AT803X_INTR_ENABLE_AUTONEG_ERR;
618 value |= AT803X_INTR_ENABLE_SPEED_CHANGED;
619 value |= AT803X_INTR_ENABLE_DUPLEX_CHANGED;
620 value |= AT803X_INTR_ENABLE_LINK_FAIL;
621 value |= AT803X_INTR_ENABLE_LINK_SUCCESS;
623 err = phy_write(phydev, AT803X_INTR_ENABLE, value);
626 err = phy_write(phydev, AT803X_INTR_ENABLE, 0);
631 static void at803x_link_change_notify(struct phy_device *phydev)
634 * Conduct a hardware reset for AT8030 every time a link loss is
635 * signalled. This is necessary to circumvent a hardware bug that
636 * occurs when the cable is unplugged while TX packets are pending
637 * in the FIFO. In such cases, the FIFO enters an error mode it
638 * cannot recover from by software.
640 if (phydev->state == PHY_NOLINK && phydev->mdio.reset_gpio) {
641 struct at803x_context context;
643 at803x_context_save(phydev, &context);
645 phy_device_reset(phydev, 1);
647 phy_device_reset(phydev, 0);
650 at803x_context_restore(phydev, &context);
652 phydev_dbg(phydev, "%s(): phy was reset\n", __func__);
656 static int at803x_aneg_done(struct phy_device *phydev)
660 int aneg_done = genphy_aneg_done(phydev);
661 if (aneg_done != BMSR_ANEGCOMPLETE)
665 * in SGMII mode, if copper side autoneg is successful,
666 * also check SGMII side autoneg result
668 ccr = phy_read(phydev, AT803X_REG_CHIP_CONFIG);
669 if ((ccr & AT803X_MODE_CFG_MASK) != AT803X_MODE_CFG_SGMII)
672 /* switch to SGMII/fiber page */
673 phy_write(phydev, AT803X_REG_CHIP_CONFIG, ccr & ~AT803X_BT_BX_REG_SEL);
675 /* check if the SGMII link is OK. */
676 if (!(phy_read(phydev, AT803X_PSSR) & AT803X_PSSR_MR_AN_COMPLETE)) {
677 phydev_warn(phydev, "803x_aneg_done: SGMII link is not ok\n");
680 /* switch back to copper page */
681 phy_write(phydev, AT803X_REG_CHIP_CONFIG, ccr | AT803X_BT_BX_REG_SEL);
686 static int at803x_read_status(struct phy_device *phydev)
688 int ss, err, old_link = phydev->link;
690 /* Update the link, but return if there was an error */
691 err = genphy_update_link(phydev);
695 /* why bother the PHY if nothing can have changed */
696 if (phydev->autoneg == AUTONEG_ENABLE && old_link && phydev->link)
699 phydev->speed = SPEED_UNKNOWN;
700 phydev->duplex = DUPLEX_UNKNOWN;
702 phydev->asym_pause = 0;
704 err = genphy_read_lpa(phydev);
708 /* Read the AT8035 PHY-Specific Status register, which indicates the
709 * speed and duplex that the PHY is actually using, irrespective of
710 * whether we are in autoneg mode or not.
712 ss = phy_read(phydev, AT803X_SPECIFIC_STATUS);
716 if (ss & AT803X_SS_SPEED_DUPLEX_RESOLVED) {
719 sfc = phy_read(phydev, AT803X_SPECIFIC_FUNCTION_CONTROL);
723 switch (ss & AT803X_SS_SPEED_MASK) {
724 case AT803X_SS_SPEED_10:
725 phydev->speed = SPEED_10;
727 case AT803X_SS_SPEED_100:
728 phydev->speed = SPEED_100;
730 case AT803X_SS_SPEED_1000:
731 phydev->speed = SPEED_1000;
734 if (ss & AT803X_SS_DUPLEX)
735 phydev->duplex = DUPLEX_FULL;
737 phydev->duplex = DUPLEX_HALF;
739 if (ss & AT803X_SS_MDIX)
740 phydev->mdix = ETH_TP_MDI_X;
742 phydev->mdix = ETH_TP_MDI;
744 switch (FIELD_GET(AT803X_SFC_MDI_CROSSOVER_MODE_M, sfc)) {
745 case AT803X_SFC_MANUAL_MDI:
746 phydev->mdix_ctrl = ETH_TP_MDI;
748 case AT803X_SFC_MANUAL_MDIX:
749 phydev->mdix_ctrl = ETH_TP_MDI_X;
751 case AT803X_SFC_AUTOMATIC_CROSSOVER:
752 phydev->mdix_ctrl = ETH_TP_MDI_AUTO;
757 if (phydev->autoneg == AUTONEG_ENABLE && phydev->autoneg_complete)
758 phy_resolve_aneg_pause(phydev);
763 static int at803x_config_mdix(struct phy_device *phydev, u8 ctrl)
769 val = AT803X_SFC_MANUAL_MDI;
772 val = AT803X_SFC_MANUAL_MDIX;
774 case ETH_TP_MDI_AUTO:
775 val = AT803X_SFC_AUTOMATIC_CROSSOVER;
781 return phy_modify_changed(phydev, AT803X_SPECIFIC_FUNCTION_CONTROL,
782 AT803X_SFC_MDI_CROSSOVER_MODE_M,
783 FIELD_PREP(AT803X_SFC_MDI_CROSSOVER_MODE_M, val));
786 static int at803x_config_aneg(struct phy_device *phydev)
790 ret = at803x_config_mdix(phydev, phydev->mdix_ctrl);
794 /* Changes of the midx bits are disruptive to the normal operation;
795 * therefore any changes to these registers must be followed by a
796 * software reset to take effect.
799 ret = genphy_soft_reset(phydev);
804 return genphy_config_aneg(phydev);
807 static int at803x_get_downshift(struct phy_device *phydev, u8 *d)
811 val = phy_read(phydev, AT803X_SMART_SPEED);
815 if (val & AT803X_SMART_SPEED_ENABLE)
816 *d = FIELD_GET(AT803X_SMART_SPEED_RETRY_LIMIT_MASK, val) + 2;
818 *d = DOWNSHIFT_DEV_DISABLE;
823 static int at803x_set_downshift(struct phy_device *phydev, u8 cnt)
829 case DOWNSHIFT_DEV_DEFAULT_COUNT:
830 cnt = AT803X_DEFAULT_DOWNSHIFT;
832 case AT803X_MIN_DOWNSHIFT ... AT803X_MAX_DOWNSHIFT:
833 set = AT803X_SMART_SPEED_ENABLE |
834 AT803X_SMART_SPEED_BYPASS_TIMER |
835 FIELD_PREP(AT803X_SMART_SPEED_RETRY_LIMIT_MASK, cnt - 2);
836 mask = AT803X_SMART_SPEED_RETRY_LIMIT_MASK;
838 case DOWNSHIFT_DEV_DISABLE:
840 mask = AT803X_SMART_SPEED_ENABLE |
841 AT803X_SMART_SPEED_BYPASS_TIMER;
847 ret = phy_modify_changed(phydev, AT803X_SMART_SPEED, mask, set);
849 /* After changing the smart speed settings, we need to perform a
850 * software reset, use phy_init_hw() to make sure we set the
851 * reapply any values which might got lost during software reset.
854 ret = phy_init_hw(phydev);
859 static int at803x_get_tunable(struct phy_device *phydev,
860 struct ethtool_tunable *tuna, void *data)
863 case ETHTOOL_PHY_DOWNSHIFT:
864 return at803x_get_downshift(phydev, data);
870 static int at803x_set_tunable(struct phy_device *phydev,
871 struct ethtool_tunable *tuna, const void *data)
874 case ETHTOOL_PHY_DOWNSHIFT:
875 return at803x_set_downshift(phydev, *(const u8 *)data);
881 static int at803x_cable_test_result_trans(u16 status)
883 switch (FIELD_GET(AT803X_CDT_STATUS_STAT_MASK, status)) {
884 case AT803X_CDT_STATUS_STAT_NORMAL:
885 return ETHTOOL_A_CABLE_RESULT_CODE_OK;
886 case AT803X_CDT_STATUS_STAT_SHORT:
887 return ETHTOOL_A_CABLE_RESULT_CODE_SAME_SHORT;
888 case AT803X_CDT_STATUS_STAT_OPEN:
889 return ETHTOOL_A_CABLE_RESULT_CODE_OPEN;
890 case AT803X_CDT_STATUS_STAT_FAIL:
892 return ETHTOOL_A_CABLE_RESULT_CODE_UNSPEC;
896 static bool at803x_cdt_test_failed(u16 status)
898 return FIELD_GET(AT803X_CDT_STATUS_STAT_MASK, status) ==
899 AT803X_CDT_STATUS_STAT_FAIL;
902 static bool at803x_cdt_fault_length_valid(u16 status)
904 switch (FIELD_GET(AT803X_CDT_STATUS_STAT_MASK, status)) {
905 case AT803X_CDT_STATUS_STAT_OPEN:
906 case AT803X_CDT_STATUS_STAT_SHORT:
912 static int at803x_cdt_fault_length(u16 status)
916 /* According to the datasheet the distance to the fault is
917 * DELTA_TIME * 0.824 meters.
919 * The author suspect the correct formula is:
921 * fault_distance = DELTA_TIME * (c * VF) / 125MHz / 2
923 * where c is the speed of light, VF is the velocity factor of
924 * the twisted pair cable, 125MHz the counter frequency and
925 * we need to divide by 2 because the hardware will measure the
926 * round trip time to the fault and back to the PHY.
928 * With a VF of 0.69 we get the factor 0.824 mentioned in the
931 dt = FIELD_GET(AT803X_CDT_STATUS_DELTA_TIME_MASK, status);
933 return (dt * 824) / 10;
936 static int at803x_cdt_start(struct phy_device *phydev, int pair)
940 cdt = FIELD_PREP(AT803X_CDT_MDI_PAIR_MASK, pair) |
941 AT803X_CDT_ENABLE_TEST;
943 return phy_write(phydev, AT803X_CDT, cdt);
946 static int at803x_cdt_wait_for_completion(struct phy_device *phydev)
950 /* One test run takes about 25ms */
951 ret = phy_read_poll_timeout(phydev, AT803X_CDT, val,
952 !(val & AT803X_CDT_ENABLE_TEST),
953 30000, 100000, true);
955 return ret < 0 ? ret : 0;
958 static int at803x_cable_test_one_pair(struct phy_device *phydev, int pair)
960 static const int ethtool_pair[] = {
961 ETHTOOL_A_CABLE_PAIR_A,
962 ETHTOOL_A_CABLE_PAIR_B,
963 ETHTOOL_A_CABLE_PAIR_C,
964 ETHTOOL_A_CABLE_PAIR_D,
968 ret = at803x_cdt_start(phydev, pair);
972 ret = at803x_cdt_wait_for_completion(phydev);
976 val = phy_read(phydev, AT803X_CDT_STATUS);
980 if (at803x_cdt_test_failed(val))
983 ethnl_cable_test_result(phydev, ethtool_pair[pair],
984 at803x_cable_test_result_trans(val));
986 if (at803x_cdt_fault_length_valid(val))
987 ethnl_cable_test_fault_length(phydev, ethtool_pair[pair],
988 at803x_cdt_fault_length(val));
993 static int at803x_cable_test_get_status(struct phy_device *phydev,
996 unsigned long pair_mask;
1000 if (phydev->phy_id == ATH9331_PHY_ID ||
1001 phydev->phy_id == ATH8032_PHY_ID)
1008 /* According to the datasheet the CDT can be performed when
1009 * there is no link partner or when the link partner is
1010 * auto-negotiating. Starting the test will restart the AN
1011 * automatically. It seems that doing this repeatedly we will
1012 * get a slot where our link partner won't disturb our
1015 while (pair_mask && retries--) {
1016 for_each_set_bit(pair, &pair_mask, 4) {
1017 ret = at803x_cable_test_one_pair(phydev, pair);
1021 clear_bit(pair, &pair_mask);
1032 static int at803x_cable_test_start(struct phy_device *phydev)
1034 /* Enable auto-negotiation, but advertise no capabilities, no link
1035 * will be established. A restart of the auto-negotiation is not
1036 * required, because the cable test will automatically break the link.
1038 phy_write(phydev, MII_BMCR, BMCR_ANENABLE);
1039 phy_write(phydev, MII_ADVERTISE, ADVERTISE_CSMA);
1040 if (phydev->phy_id != ATH9331_PHY_ID &&
1041 phydev->phy_id != ATH8032_PHY_ID)
1042 phy_write(phydev, MII_CTRL1000, 0);
1044 /* we do all the (time consuming) work later */
1048 static struct phy_driver at803x_driver[] = {
1050 /* Qualcomm Atheros AR8035 */
1051 PHY_ID_MATCH_EXACT(ATH8035_PHY_ID),
1052 .name = "Qualcomm Atheros AR8035",
1053 .flags = PHY_POLL_CABLE_TEST,
1054 .probe = at803x_probe,
1055 .remove = at803x_remove,
1056 .config_aneg = at803x_config_aneg,
1057 .config_init = at803x_config_init,
1058 .soft_reset = genphy_soft_reset,
1059 .set_wol = at803x_set_wol,
1060 .get_wol = at803x_get_wol,
1061 .suspend = at803x_suspend,
1062 .resume = at803x_resume,
1063 /* PHY_GBIT_FEATURES */
1064 .read_status = at803x_read_status,
1065 .ack_interrupt = at803x_ack_interrupt,
1066 .config_intr = at803x_config_intr,
1067 .get_tunable = at803x_get_tunable,
1068 .set_tunable = at803x_set_tunable,
1069 .cable_test_start = at803x_cable_test_start,
1070 .cable_test_get_status = at803x_cable_test_get_status,
1072 /* Qualcomm Atheros AR8030 */
1073 .phy_id = ATH8030_PHY_ID,
1074 .name = "Qualcomm Atheros AR8030",
1075 .phy_id_mask = AT8030_PHY_ID_MASK,
1076 .probe = at803x_probe,
1077 .remove = at803x_remove,
1078 .config_init = at803x_config_init,
1079 .link_change_notify = at803x_link_change_notify,
1080 .set_wol = at803x_set_wol,
1081 .get_wol = at803x_get_wol,
1082 .suspend = at803x_suspend,
1083 .resume = at803x_resume,
1084 /* PHY_BASIC_FEATURES */
1085 .ack_interrupt = at803x_ack_interrupt,
1086 .config_intr = at803x_config_intr,
1088 /* Qualcomm Atheros AR8031/AR8033 */
1089 PHY_ID_MATCH_EXACT(ATH8031_PHY_ID),
1090 .name = "Qualcomm Atheros AR8031/AR8033",
1091 .flags = PHY_POLL_CABLE_TEST,
1092 .probe = at803x_probe,
1093 .remove = at803x_remove,
1094 .config_init = at803x_config_init,
1095 .soft_reset = genphy_soft_reset,
1096 .set_wol = at803x_set_wol,
1097 .get_wol = at803x_get_wol,
1098 .suspend = at803x_suspend,
1099 .resume = at803x_resume,
1100 /* PHY_GBIT_FEATURES */
1101 .read_status = at803x_read_status,
1102 .aneg_done = at803x_aneg_done,
1103 .ack_interrupt = &at803x_ack_interrupt,
1104 .config_intr = &at803x_config_intr,
1105 .get_tunable = at803x_get_tunable,
1106 .set_tunable = at803x_set_tunable,
1107 .cable_test_start = at803x_cable_test_start,
1108 .cable_test_get_status = at803x_cable_test_get_status,
1110 /* Qualcomm Atheros AR8032 */
1111 PHY_ID_MATCH_EXACT(ATH8032_PHY_ID),
1112 .name = "Qualcomm Atheros AR8032",
1113 .probe = at803x_probe,
1114 .remove = at803x_remove,
1115 .flags = PHY_POLL_CABLE_TEST,
1116 .config_init = at803x_config_init,
1117 .link_change_notify = at803x_link_change_notify,
1118 .set_wol = at803x_set_wol,
1119 .get_wol = at803x_get_wol,
1120 .suspend = at803x_suspend,
1121 .resume = at803x_resume,
1122 /* PHY_BASIC_FEATURES */
1123 .ack_interrupt = at803x_ack_interrupt,
1124 .config_intr = at803x_config_intr,
1125 .cable_test_start = at803x_cable_test_start,
1126 .cable_test_get_status = at803x_cable_test_get_status,
1128 /* ATHEROS AR9331 */
1129 PHY_ID_MATCH_EXACT(ATH9331_PHY_ID),
1130 .name = "Qualcomm Atheros AR9331 built-in PHY",
1131 .suspend = at803x_suspend,
1132 .resume = at803x_resume,
1133 .flags = PHY_POLL_CABLE_TEST,
1134 /* PHY_BASIC_FEATURES */
1135 .ack_interrupt = &at803x_ack_interrupt,
1136 .config_intr = &at803x_config_intr,
1137 .cable_test_start = at803x_cable_test_start,
1138 .cable_test_get_status = at803x_cable_test_get_status,
1139 .read_status = at803x_read_status,
1140 .soft_reset = genphy_soft_reset,
1141 .config_aneg = at803x_config_aneg,
1144 module_phy_driver(at803x_driver);
1146 static struct mdio_device_id __maybe_unused atheros_tbl[] = {
1147 { ATH8030_PHY_ID, AT8030_PHY_ID_MASK },
1148 { PHY_ID_MATCH_EXACT(ATH8031_PHY_ID) },
1149 { PHY_ID_MATCH_EXACT(ATH8032_PHY_ID) },
1150 { PHY_ID_MATCH_EXACT(ATH8035_PHY_ID) },
1151 { PHY_ID_MATCH_EXACT(ATH9331_PHY_ID) },
1155 MODULE_DEVICE_TABLE(mdio, atheros_tbl);