|
@@ -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);
|