diff options
author | Arun Ramadoss <arun.ramadoss@microchip.com> | 2022-07-24 14:58:17 +0530 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2022-07-27 09:39:17 +0100 |
commit | 8560664fd32aa055b3c128337356e32e8fc25b5a (patch) | |
tree | 72b84dcb58503632a3ae514b040a53133f00216e /drivers/net/dsa/microchip/lan937x_main.c | |
parent | aa5b8b73d4bd34618508165bc0e5b7eb4b7c2c20 (diff) |
net: dsa: microchip: add common duplex and flow control function
This patch add common function for configuring the Full/Half duplex and
transmit/receive flow control. KSZ8795 uses the Global control register
4 for configuring the duplex and flow control, whereas all other KSZ9477
based switch uses the xMII Control 0 register.
Signed-off-by: Arun Ramadoss <arun.ramadoss@microchip.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/dsa/microchip/lan937x_main.c')
-rw-r--r-- | drivers/net/dsa/microchip/lan937x_main.c | 25 |
1 files changed, 6 insertions, 19 deletions
diff --git a/drivers/net/dsa/microchip/lan937x_main.c b/drivers/net/dsa/microchip/lan937x_main.c index c48bae285758..450ad059d93c 100644 --- a/drivers/net/dsa/microchip/lan937x_main.c +++ b/drivers/net/dsa/microchip/lan937x_main.c @@ -234,6 +234,8 @@ int lan937x_reset_switch(struct ksz_device *dev) void lan937x_port_setup(struct ksz_device *dev, int port, bool cpu_port) { + const u32 *masks = dev->info->masks; + const u16 *regs = dev->info->regs; struct dsa_switch *ds = dev->ds; u8 member; @@ -254,8 +256,9 @@ void lan937x_port_setup(struct ksz_device *dev, int port, bool cpu_port) lan937x_port_cfg(dev, port, P_PRIO_CTRL, PORT_802_1P_PRIO_ENABLE, true); if (!dev->info->internal_phy[port]) - lan937x_port_cfg(dev, port, REG_PORT_XMII_CTRL_0, - PORT_MII_TX_FLOW_CTRL | PORT_MII_RX_FLOW_CTRL, + lan937x_port_cfg(dev, port, regs[P_XMII_CTRL_0], + masks[P_MII_TX_FLOW_CTRL] | + masks[P_MII_RX_FLOW_CTRL], true); if (cpu_port) @@ -346,25 +349,9 @@ static void lan937x_config_interface(struct ksz_device *dev, int port, int speed, int duplex, bool tx_pause, bool rx_pause) { - u8 xmii_ctrl0; - ksz_port_set_xmii_speed(dev, port, speed); - ksz_pread8(dev, port, REG_PORT_XMII_CTRL_0, &xmii_ctrl0); - - xmii_ctrl0 &= ~(PORT_MII_FULL_DUPLEX | PORT_MII_TX_FLOW_CTRL | - PORT_MII_RX_FLOW_CTRL); - - if (duplex) - xmii_ctrl0 |= PORT_MII_FULL_DUPLEX; - - if (tx_pause) - xmii_ctrl0 |= PORT_MII_TX_FLOW_CTRL; - - if (rx_pause) - xmii_ctrl0 |= PORT_MII_RX_FLOW_CTRL; - - ksz_pwrite8(dev, port, REG_PORT_XMII_CTRL_0, xmii_ctrl0); + ksz_duplex_flowctrl(dev, port, duplex, tx_pause, rx_pause); } void lan937x_phylink_get_caps(struct ksz_device *dev, int port, |