From aa2df753cf775da5bbb198ba46239432056f635b Mon Sep 17 00:00:00 2001 From: LGA1150 Date: Sat, 10 Oct 2020 04:36:30 +0800 Subject: [PATCH] ipq40xx: ar40xx: add switch led blink support --- .../files-5.4/drivers/net/phy/ar40xx.c | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/target/linux/ipq40xx/files-5.4/drivers/net/phy/ar40xx.c b/target/linux/ipq40xx/files-5.4/drivers/net/phy/ar40xx.c index 18ff26affc..084a8d9116 100644 --- a/target/linux/ipq40xx/files-5.4/drivers/net/phy/ar40xx.c +++ b/target/linux/ipq40xx/files-5.4/drivers/net/phy/ar40xx.c @@ -770,6 +770,37 @@ ar40xx_sw_get_port_link(struct switch_dev *dev, int port, return 0; } +static int +ar40xx_sw_get_port_stats(struct switch_dev *dev, int port, + struct switch_port_stats *stats) +{ + struct ar40xx_priv *priv = swdev_to_ar40xx(dev); + u32 num_mibs = ARRAY_SIZE(ar40xx_mibs); + u64 *mib_stats; + int ret = 0; + static int last_port = AR40XX_NUM_PORTS - 1; + + mutex_lock(&priv->mib_lock); + + /* Avoid unnecessary capture */ + if (last_port >= port) { + ret = ar40xx_mib_capture(priv); + if (ret) + goto unlock; + } + last_port = port; + + ar40xx_mib_fetch_port_stat(priv, port, false); + + mib_stats = &priv->mib_stats[port * num_mibs]; + /* 15: TXBYTE, 31: RXGOODBYTE */ + stats->tx_bytes = mib_stats[15]; + stats->rx_bytes = mib_stats[31]; +unlock: + mutex_unlock(&priv->mib_lock); + return ret; +} + static const struct switch_attr ar40xx_sw_attr_globals[] = { { .type = SWITCH_TYPE_INT, @@ -1148,6 +1179,7 @@ ar40xx_psgmii_self_test_clean(struct ar40xx_priv *priv) /* disable phy internal loopback */ mdiobus_write(bus, 0x1f, 0x10, 0x6860); mdiobus_write(bus, 0x1f, 0x0, 0x9040); + ar40xx_phy_mmd_write(priv, 0x1f, 7, 0x8076, 0x0670); for (phy = 0; phy < AR40XX_NUM_PORTS - 1; phy++) { /* disable mac loop back */ @@ -1761,6 +1793,7 @@ static const struct switch_dev_ops ar40xx_sw_ops = { .apply_config = ar40xx_sw_hw_apply, .reset_switch = ar40xx_sw_reset_switch, .get_port_link = ar40xx_sw_get_port_link, + .get_port_stats = ar40xx_sw_get_port_stats, }; /* Start of phy driver support */