Commit c14e878d authored by Arun Ramadoss's avatar Arun Ramadoss Committed by David S. Miller

net: dsa: microchip: lan937x: add phylink_get_caps support

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: default avatarArun Ramadoss <arun.ramadoss@microchip.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ab882368
...@@ -220,6 +220,7 @@ static const struct ksz_dev_ops lan937x_dev_ops = { ...@@ -220,6 +220,7 @@ static const struct ksz_dev_ops lan937x_dev_ops = {
.vlan_del = ksz9477_port_vlan_del, .vlan_del = ksz9477_port_vlan_del,
.mirror_add = ksz9477_port_mirror_add, .mirror_add = ksz9477_port_mirror_add,
.mirror_del = ksz9477_port_mirror_del, .mirror_del = ksz9477_port_mirror_del,
.get_caps = lan937x_phylink_get_caps,
.fdb_dump = ksz9477_fdb_dump, .fdb_dump = ksz9477_fdb_dump,
.fdb_add = ksz9477_fdb_add, .fdb_add = ksz9477_fdb_add,
.fdb_del = ksz9477_fdb_del, .fdb_del = ksz9477_fdb_del,
......
...@@ -15,4 +15,6 @@ void lan937x_switch_exit(struct ksz_device *dev); ...@@ -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_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); 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); 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 #endif
...@@ -312,6 +312,18 @@ int lan937x_change_mtu(struct ksz_device *dev, int port, int new_mtu) ...@@ -312,6 +312,18 @@ int lan937x_change_mtu(struct ksz_device *dev, int port, int new_mtu)
return 0; 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) int lan937x_setup(struct dsa_switch *ds)
{ {
struct ksz_device *dev = ds->priv; struct ksz_device *dev = ds->priv;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment