mirror of
https://github.com/Fishwaldo/build.git
synced 2025-07-23 13:29:33 +00:00
164 lines
5.5 KiB
Diff
164 lines
5.5 KiB
Diff
From: Russell King <rmk+kernel@arm.linux.org.uk>
|
|
Subject: [PATCH 48/84] net: dsa: mv88e6xxx: remove link polling
|
|
MIME-Version: 1.0
|
|
Content-Disposition: inline
|
|
Content-Transfer-Encoding: 8bit
|
|
Content-Type: text/plain; charset="utf-8"
|
|
|
|
The link status is polled by the generic phy layer, there's no need to
|
|
duplicate that polling with additional polling. This additional polling
|
|
adds additional MDIO traffic, and races with the generic phy layer,
|
|
resulting in missing or duplicated link status messages.
|
|
|
|
Tested-by: Andrew Lunn <andrew@lunn.ch>
|
|
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
|
---
|
|
drivers/net/dsa/mv88e6123_61_65.c | 1 -
|
|
drivers/net/dsa/mv88e6131.c | 1 -
|
|
drivers/net/dsa/mv88e6171.c | 1 -
|
|
drivers/net/dsa/mv88e6352.c | 1 -
|
|
drivers/net/dsa/mv88e6xxx.c | 67 ---------------------------------------
|
|
drivers/net/dsa/mv88e6xxx.h | 1 -
|
|
6 files changed, 72 deletions(-)
|
|
|
|
diff --git a/drivers/net/dsa/mv88e6123_61_65.c b/drivers/net/dsa/mv88e6123_61_65.c
|
|
index 3de2a6d73fdc..4bcfd683bbea 100644
|
|
--- a/drivers/net/dsa/mv88e6123_61_65.c
|
|
+++ b/drivers/net/dsa/mv88e6123_61_65.c
|
|
@@ -125,7 +125,6 @@ struct dsa_switch_driver mv88e6123_61_65_switch_driver = {
|
|
.set_addr = mv88e6xxx_set_addr_indirect,
|
|
.phy_read = mv88e6xxx_phy_read,
|
|
.phy_write = mv88e6xxx_phy_write,
|
|
- .poll_link = mv88e6xxx_poll_link,
|
|
.get_strings = mv88e6xxx_get_strings,
|
|
.get_ethtool_stats = mv88e6xxx_get_ethtool_stats,
|
|
.get_sset_count = mv88e6xxx_get_sset_count,
|
|
diff --git a/drivers/net/dsa/mv88e6131.c b/drivers/net/dsa/mv88e6131.c
|
|
index 3e8386529965..c73121c8f155 100644
|
|
--- a/drivers/net/dsa/mv88e6131.c
|
|
+++ b/drivers/net/dsa/mv88e6131.c
|
|
@@ -178,7 +178,6 @@ struct dsa_switch_driver mv88e6131_switch_driver = {
|
|
.set_addr = mv88e6xxx_set_addr_direct,
|
|
.phy_read = mv88e6131_phy_read,
|
|
.phy_write = mv88e6131_phy_write,
|
|
- .poll_link = mv88e6xxx_poll_link,
|
|
.get_strings = mv88e6xxx_get_strings,
|
|
.get_ethtool_stats = mv88e6xxx_get_ethtool_stats,
|
|
.get_sset_count = mv88e6xxx_get_sset_count,
|
|
diff --git a/drivers/net/dsa/mv88e6171.c b/drivers/net/dsa/mv88e6171.c
|
|
index c2daaf087761..c95cfab56a4f 100644
|
|
--- a/drivers/net/dsa/mv88e6171.c
|
|
+++ b/drivers/net/dsa/mv88e6171.c
|
|
@@ -104,7 +104,6 @@ struct dsa_switch_driver mv88e6171_switch_driver = {
|
|
.set_addr = mv88e6xxx_set_addr_indirect,
|
|
.phy_read = mv88e6xxx_phy_read_indirect,
|
|
.phy_write = mv88e6xxx_phy_write_indirect,
|
|
- .poll_link = mv88e6xxx_poll_link,
|
|
.get_strings = mv88e6xxx_get_strings,
|
|
.get_ethtool_stats = mv88e6xxx_get_ethtool_stats,
|
|
.get_sset_count = mv88e6xxx_get_sset_count,
|
|
diff --git a/drivers/net/dsa/mv88e6352.c b/drivers/net/dsa/mv88e6352.c
|
|
index 1f5129c105fb..37367060676f 100644
|
|
--- a/drivers/net/dsa/mv88e6352.c
|
|
+++ b/drivers/net/dsa/mv88e6352.c
|
|
@@ -324,7 +324,6 @@ struct dsa_switch_driver mv88e6352_switch_driver = {
|
|
.set_addr = mv88e6xxx_set_addr_indirect,
|
|
.phy_read = mv88e6xxx_phy_read_indirect,
|
|
.phy_write = mv88e6xxx_phy_write_indirect,
|
|
- .poll_link = mv88e6xxx_poll_link,
|
|
.get_strings = mv88e6xxx_get_strings,
|
|
.get_ethtool_stats = mv88e6xxx_get_ethtool_stats,
|
|
.get_sset_count = mv88e6xxx_get_sset_count,
|
|
diff --git a/drivers/net/dsa/mv88e6xxx.c b/drivers/net/dsa/mv88e6xxx.c
|
|
index 1f7dd927cc5e..6655acb8bf6d 100644
|
|
--- a/drivers/net/dsa/mv88e6xxx.c
|
|
+++ b/drivers/net/dsa/mv88e6xxx.c
|
|
@@ -388,73 +388,6 @@ int mv88e6xxx_phy_write_ppu(struct dsa_switch *ds, int addr,
|
|
}
|
|
#endif
|
|
|
|
-void mv88e6xxx_poll_link(struct dsa_switch *ds)
|
|
-{
|
|
- int i;
|
|
-
|
|
- for (i = 0; i < DSA_MAX_PORTS; i++) {
|
|
- struct net_device *dev;
|
|
- int uninitialized_var(port_status);
|
|
- int pcs_ctrl;
|
|
- int link;
|
|
- int speed;
|
|
- int duplex;
|
|
- int fc;
|
|
-
|
|
- dev = ds->ports[i];
|
|
- if (dev == NULL)
|
|
- continue;
|
|
-
|
|
- pcs_ctrl = mv88e6xxx_reg_read(ds, REG_PORT(i), PORT_PCS_CTRL);
|
|
- if (pcs_ctrl < 0 || pcs_ctrl & PORT_PCS_CTRL_FORCE_LINK)
|
|
- continue;
|
|
-
|
|
- link = 0;
|
|
- if (dev->flags & IFF_UP) {
|
|
- port_status = mv88e6xxx_reg_read(ds, REG_PORT(i),
|
|
- PORT_STATUS);
|
|
- if (port_status < 0)
|
|
- continue;
|
|
-
|
|
- link = !!(port_status & PORT_STATUS_LINK);
|
|
- }
|
|
-
|
|
- if (!link) {
|
|
- if (netif_carrier_ok(dev)) {
|
|
- netdev_info(dev, "link down\n");
|
|
- netif_carrier_off(dev);
|
|
- }
|
|
- continue;
|
|
- }
|
|
-
|
|
- switch (port_status & PORT_STATUS_SPEED_MASK) {
|
|
- case PORT_STATUS_SPEED_10:
|
|
- speed = 10;
|
|
- break;
|
|
- case PORT_STATUS_SPEED_100:
|
|
- speed = 100;
|
|
- break;
|
|
- case PORT_STATUS_SPEED_1000:
|
|
- speed = 1000;
|
|
- break;
|
|
- default:
|
|
- speed = -1;
|
|
- break;
|
|
- }
|
|
- duplex = (port_status & PORT_STATUS_DUPLEX) ? 1 : 0;
|
|
- fc = (port_status & PORT_STATUS_PAUSE_EN) ? 1 : 0;
|
|
-
|
|
- if (!netif_carrier_ok(dev)) {
|
|
- netdev_info(dev,
|
|
- "link up, %d Mb/s, %s duplex, flow control %sabled\n",
|
|
- speed,
|
|
- duplex ? "full" : "half",
|
|
- fc ? "en" : "dis");
|
|
- netif_carrier_on(dev);
|
|
- }
|
|
- }
|
|
-}
|
|
-
|
|
static bool mv88e6xxx_6065_family(struct dsa_switch *ds)
|
|
{
|
|
struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
|
|
diff --git a/drivers/net/dsa/mv88e6xxx.h b/drivers/net/dsa/mv88e6xxx.h
|
|
index 9b6f3d9d5ae1..d94a4e134ee2 100644
|
|
--- a/drivers/net/dsa/mv88e6xxx.h
|
|
+++ b/drivers/net/dsa/mv88e6xxx.h
|
|
@@ -442,7 +442,6 @@ void mv88e6xxx_ppu_state_init(struct dsa_switch *ds);
|
|
int mv88e6xxx_phy_read_ppu(struct dsa_switch *ds, int addr, int regnum);
|
|
int mv88e6xxx_phy_write_ppu(struct dsa_switch *ds, int addr,
|
|
int regnum, u16 val);
|
|
-void mv88e6xxx_poll_link(struct dsa_switch *ds);
|
|
void mv88e6xxx_get_strings(struct dsa_switch *ds, int port, uint8_t *data);
|
|
void mv88e6xxx_get_ethtool_stats(struct dsa_switch *ds, int port,
|
|
uint64_t *data);
|
|
--
|
|
2.1.0
|
|
|