]> git.baikalelectronics.ru Git - kernel.git/commitdiff
net: dsa: microchip: lan937x: add phylink_get_caps support
authorArun Ramadoss <arun.ramadoss@microchip.com>
Fri, 1 Jul 2022 15:10:34 +0000 (20:40 +0530)
committerDavid S. Miller <davem@davemloft.net>
Sat, 2 Jul 2022 15:34:05 +0000 (16:34 +0100)
The internal phy of the LAN937x are capable of 100Mbps Full duplex. The
xMII port of switch is capable of 10Mbps Full & Half Duplex, 100Mbps
Full & Half Duplex and 1000Mbps Half duplex. xMII port also supports Tx
and Rx Flow control.

Signed-off-by: Arun Ramadoss <arun.ramadoss@microchip.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/microchip/ksz_common.c
drivers/net/dsa/microchip/lan937x.h
drivers/net/dsa/microchip/lan937x_main.c

index fb0de48a3f5e51ab119ba1c76311658c0043ff7c..ca7ca327285d215995cb08338d764c226048d71f 100644 (file)
@@ -220,6 +220,7 @@ static const struct ksz_dev_ops lan937x_dev_ops = {
        .vlan_del = ksz9477_port_vlan_del,
        .mirror_add = ksz9477_port_mirror_add,
        .mirror_del = ksz9477_port_mirror_del,
+       .get_caps = lan937x_phylink_get_caps,
        .fdb_dump = ksz9477_fdb_dump,
        .fdb_add = ksz9477_fdb_add,
        .fdb_del = ksz9477_fdb_del,
index 50563874600dd30703ffd654dccf47775c63bc87..d4207e97a1309be03f2009c19b03bd714475d8fc 100644 (file)
@@ -15,4 +15,6 @@ void lan937x_switch_exit(struct ksz_device *dev);
 void lan937x_r_phy(struct ksz_device *dev, u16 addr, u16 reg, u16 *data);
 void lan937x_w_phy(struct ksz_device *dev, u16 addr, u16 reg, u16 val);
 int lan937x_change_mtu(struct ksz_device *dev, int port, int new_mtu);
+void lan937x_phylink_get_caps(struct ksz_device *dev, int port,
+                             struct phylink_config *config);
 #endif
index 5917cc11ba59f82ac65150a7cba2611f5c77418a..8cb46caf5340a620a62e1d65179f36b96a884569 100644 (file)
@@ -312,6 +312,18 @@ int lan937x_change_mtu(struct ksz_device *dev, int port, int new_mtu)
        return 0;
 }
 
+void lan937x_phylink_get_caps(struct ksz_device *dev, int port,
+                             struct phylink_config *config)
+{
+       config->mac_capabilities = MAC_100FD;
+
+       if (dev->info->supports_rgmii[port]) {
+               /* MII/RMII/RGMII ports */
+               config->mac_capabilities |= MAC_ASYM_PAUSE | MAC_SYM_PAUSE |
+                                           MAC_100HD | MAC_10 | MAC_1000FD;
+       }
+}
+
 int lan937x_setup(struct dsa_switch *ds)
 {
        struct ksz_device *dev = ds->priv;