Lines Matching +full:10 +full:gbase +full:- +full:r

1 // SPDX-License-Identifier: GPL-2.0-or-later
57 state->link = !!(status & MV88E6390_SGMII_PHY_STATUS_LINK); in mv88e6xxx_serdes_pcs_get_state()
58 state->duplex = status & in mv88e6xxx_serdes_pcs_get_state()
63 state->pause |= MLO_PAUSE_TX; in mv88e6xxx_serdes_pcs_get_state()
65 state->pause |= MLO_PAUSE_RX; in mv88e6xxx_serdes_pcs_get_state()
69 if (state->interface == PHY_INTERFACE_MODE_2500BASEX) in mv88e6xxx_serdes_pcs_get_state()
70 state->speed = SPEED_2500; in mv88e6xxx_serdes_pcs_get_state()
72 state->speed = SPEED_1000; in mv88e6xxx_serdes_pcs_get_state()
75 state->speed = SPEED_100; in mv88e6xxx_serdes_pcs_get_state()
78 state->speed = SPEED_10; in mv88e6xxx_serdes_pcs_get_state()
81 dev_err(chip->dev, "invalid PHY speed\n"); in mv88e6xxx_serdes_pcs_get_state()
82 return -EINVAL; in mv88e6xxx_serdes_pcs_get_state()
85 state->link = false; in mv88e6xxx_serdes_pcs_get_state()
88 if (state->interface == PHY_INTERFACE_MODE_2500BASEX) in mv88e6xxx_serdes_pcs_get_state()
89 mii_lpa_mod_linkmode_x(state->lp_advertising, lpa, in mv88e6xxx_serdes_pcs_get_state()
91 else if (state->interface == PHY_INTERFACE_MODE_1000BASEX) in mv88e6xxx_serdes_pcs_get_state()
92 mii_lpa_mod_linkmode_x(state->lp_advertising, lpa, in mv88e6xxx_serdes_pcs_get_state()
176 dev_err(chip->dev, "can't read Serdes PHY status: %d\n", err); in mv88e6352_serdes_pcs_get_state()
182 dev_err(chip->dev, "can't read Serdes PHY LPA: %d\n", err); in mv88e6352_serdes_pcs_get_state()
235 u8 cmode = chip->ports[port].cmode; in mv88e6352_serdes_get_lane()
236 int lane = -ENODEV; in mv88e6352_serdes_get_lane()
284 memcpy(data + i * ETH_GSTRING_LEN, stat->string, in mv88e6352_serdes_get_strings()
297 err = mv88e6352_serdes_read(chip, stat->reg, &reg); in mv88e6352_serdes_get_stat()
299 dev_err(chip->dev, "failed to read statistic\n"); in mv88e6352_serdes_get_stat()
305 if (stat->sizeof_stat == 32) { in mv88e6352_serdes_get_stat()
306 err = mv88e6352_serdes_read(chip, stat->reg + 1, &reg); in mv88e6352_serdes_get_stat()
308 dev_err(chip->dev, "failed to read statistic\n"); in mv88e6352_serdes_get_stat()
320 struct mv88e6xxx_port *mv88e6xxx_port = &chip->ports[port]; in mv88e6352_serdes_get_stats()
329 ARRAY_SIZE(mv88e6xxx_port->serdes_stats)); in mv88e6352_serdes_get_stats()
334 mv88e6xxx_port->serdes_stats[i] += value; in mv88e6352_serdes_get_stats()
335 data[i] = mv88e6xxx_port->serdes_stats[i]; in mv88e6352_serdes_get_stats()
349 dev_err(chip->dev, "can't read Serdes BMSR: %d\n", err); in mv88e6352_serdes_irq_link()
353 dsa_port_phylink_mac_change(chip->ds, port, !!(bmsr & BMSR_LSTATUS)); in mv88e6352_serdes_irq_link()
388 return irq_find_mapping(chip->g2_irq.domain, MV88E6352_SERDES_IRQ); in mv88e6352_serdes_irq_mapping()
418 u8 cmode = chip->ports[port].cmode; in mv88e6341_serdes_get_lane()
419 int lane = -ENODEV; in mv88e6341_serdes_get_lane()
437 * to supply this function to avoid returning -EOPNOTSUPP in in mv88e6185_serdes_power()
446 * need to return a non-negative lane number so that callers of in mv88e6185_serdes_get_lane()
449 switch (chip->ports[port].cmode) { in mv88e6185_serdes_get_lane()
454 return -ENODEV; in mv88e6185_serdes_get_lane()
468 state->link = !!(status & MV88E6XXX_PORT_STS_LINK); in mv88e6185_serdes_pcs_get_state()
470 if (state->link) { in mv88e6185_serdes_pcs_get_state()
471 state->duplex = status & MV88E6XXX_PORT_STS_DUPLEX ? DUPLEX_FULL : DUPLEX_HALF; in mv88e6185_serdes_pcs_get_state()
475 state->speed = SPEED_1000; in mv88e6185_serdes_pcs_get_state()
478 state->speed = SPEED_100; in mv88e6185_serdes_pcs_get_state()
481 state->speed = SPEED_10; in mv88e6185_serdes_pcs_get_state()
484 dev_err(chip->dev, "invalid PHY speed\n"); in mv88e6185_serdes_pcs_get_state()
485 return -EINVAL; in mv88e6185_serdes_pcs_get_state()
488 state->duplex = DUPLEX_UNKNOWN; in mv88e6185_serdes_pcs_get_state()
489 state->speed = SPEED_UNKNOWN; in mv88e6185_serdes_pcs_get_state()
498 u8 cmode = chip->ports[port].cmode; in mv88e6097_serdes_irq_enable()
501 * need to return 0 to avoid returning -EOPNOTSUPP in in mv88e6097_serdes_irq_enable()
510 return -EOPNOTSUPP; in mv88e6097_serdes_irq_enable()
520 dev_err(chip->dev, "can't read port status: %d\n", err); in mv88e6097_serdes_irq_link()
524 dsa_port_phylink_mac_change(chip->ds, port, !!(status & MV88E6XXX_PORT_STS_LINK)); in mv88e6097_serdes_irq_link()
530 u8 cmode = chip->ports[port].cmode; in mv88e6097_serdes_irq_status()
544 u8 cmode = chip->ports[port].cmode; in mv88e6390_serdes_get_lane()
545 int lane = -ENODEV; in mv88e6390_serdes_get_lane()
554 case 10: in mv88e6390_serdes_get_lane()
567 u8 cmode_port = chip->ports[port].cmode; in mv88e6390x_serdes_get_lane()
568 u8 cmode_port10 = chip->ports[10].cmode; in mv88e6390x_serdes_get_lane()
569 u8 cmode_port9 = chip->ports[9].cmode; in mv88e6390x_serdes_get_lane()
570 int lane = -ENODEV; in mv88e6390x_serdes_get_lane()
627 case 10: in mv88e6390x_serdes_get_lane()
640 /* Only Ports 0, 9 and 10 have SERDES lanes. Return the SERDES lane address
641 * a port is using else Returns -ENODEV.
645 u8 cmode = chip->ports[port].cmode; in mv88e6393x_serdes_get_lane()
646 int lane = -ENODEV; in mv88e6393x_serdes_get_lane()
648 if (port != 0 && port != 9 && port != 10) in mv88e6393x_serdes_get_lane()
649 return -EOPNOTSUPP; in mv88e6393x_serdes_get_lane()
661 /* Set power up/down for 10GBASE-R and 10GBASE-X4/X2 */
688 /* Set power up/down for SGMII and 1000Base-X */
742 memcpy(data + i * ETH_GSTRING_LEN, stat->string, in mv88e6390_serdes_get_strings()
756 stat->reg + i, &reg[i]); in mv88e6390_serdes_get_stat()
758 dev_err(chip->dev, "failed to read statistic\n"); in mv88e6390_serdes_get_stat()
803 u8 cmode = chip->ports[port].cmode; in mv88e6390_serdes_power()
892 dev_err(chip->dev, "can't read Serdes PHY status: %d\n", err); in mv88e6390_serdes_pcs_get_state_sgmii()
899 dev_err(chip->dev, "can't read Serdes PHY LPA: %d\n", err); in mv88e6390_serdes_pcs_get_state_sgmii()
917 state->link = !!(status & MDIO_STAT1_LSTATUS); in mv88e6390_serdes_pcs_get_state_10g()
918 if (state->link) { in mv88e6390_serdes_pcs_get_state_10g()
919 state->speed = SPEED_10000; in mv88e6390_serdes_pcs_get_state_10g()
920 state->duplex = DUPLEX_FULL; in mv88e6390_serdes_pcs_get_state_10g()
938 state->link = !!(status & MDIO_STAT1_LSTATUS); in mv88e6393x_serdes_pcs_get_state_10g()
939 if (state->link) { in mv88e6393x_serdes_pcs_get_state_10g()
940 if (state->interface == PHY_INTERFACE_MODE_5GBASER) in mv88e6393x_serdes_pcs_get_state_10g()
941 state->speed = SPEED_5000; in mv88e6393x_serdes_pcs_get_state_10g()
943 state->speed = SPEED_10000; in mv88e6393x_serdes_pcs_get_state_10g()
944 state->duplex = DUPLEX_FULL; in mv88e6393x_serdes_pcs_get_state_10g()
953 switch (state->interface) { in mv88e6390_serdes_pcs_get_state()
965 return -EOPNOTSUPP; in mv88e6390_serdes_pcs_get_state()
972 switch (state->interface) { in mv88e6393x_serdes_pcs_get_state()
984 return -EOPNOTSUPP; in mv88e6393x_serdes_pcs_get_state()
1048 dev_err(chip->dev, "can't read Serdes BMSR: %d\n", err); in mv88e6390_serdes_irq_link_sgmii()
1052 dsa_port_phylink_mac_change(chip->ds, port, !!(bmsr & BMSR_LSTATUS)); in mv88e6390_serdes_irq_link_sgmii()
1065 dev_err(chip->dev, "can't read Serdes STAT1: %d\n", err); in mv88e6393x_serdes_irq_link_10g()
1069 dsa_port_phylink_mac_change(chip->ds, port, !!(status & MDIO_STAT1_LSTATUS)); in mv88e6393x_serdes_irq_link_10g()
1088 u8 cmode = chip->ports[port].cmode; in mv88e6390_serdes_irq_enable()
1126 u8 cmode = chip->ports[port].cmode; in mv88e6393x_serdes_irq_enable()
1155 u8 cmode = chip->ports[port].cmode; in mv88e6393x_serdes_irq_status()
1191 u8 cmode = chip->ports[port].cmode; in mv88e6390_serdes_irq_status()
1215 return irq_find_mapping(chip->g2_irq.domain, port); in mv88e6390_serdes_irq_mapping()
1233 /* 10Gbase-X */
1241 /* 10Gbase-R */
1309 * When a SERDES port is operating in 1000BASE-X or SGMII mode link may in mv88e6393x_serdes_port_errata()
1355 u8 cmode = chip->ports[port].cmode; in mv88e6393x_serdes_power()
1357 if (port != 0 && port != 9 && port != 10) in mv88e6393x_serdes_power()
1358 return -EOPNOTSUPP; in mv88e6393x_serdes_power()