Index: net/dsa/mv88e6131.c =================================================================== --- net/dsa/mv88e6131.c (.../test1-2008-08-14-branch/tools/linuxppc-2.6/net/dsa) (revision 4831) +++ net/dsa/mv88e6131.c (.../test2-2009-02-24-branch/tools/linuxppc-2.6/net/dsa) (working copy) @@ -19,8 +19,11 @@ int ret; ret = __mv88e6xxx_reg_read(bus, sw_addr, REG_PORT(0), 0x03); + printk("%s(%p, %d) = %d\n", __FUNCTION__, bus, sw_addr, ret); if (ret >= 0) { ret &= 0xfff0; + if (ret == 0x0950) + return "Marvell 88E6095/88E6095F"; if (ret == 0x1060) return "Marvell 88E6131"; } @@ -36,7 +39,7 @@ /* * Set all ports to the disabled state. */ - for (i = 0; i < 8; i++) { + for (i = 0; i < 11; i++) { ret = REG_READ(REG_PORT(i), 0x04); REG_WRITE(REG_PORT(i), 0x04, ret & 0xfffc); } @@ -91,7 +94,7 @@ * Configure the priority mapping registers. */ ret = mv88e6xxx_config_prio(ds); - if (ret < 0) + if (ret < 0) return ret; /* @@ -161,8 +164,11 @@ * MAC Forcing register: don't force link, speed, duplex * or flow control state to any particular values. */ - REG_WRITE(addr, 0x01, 0x0003); - +// REG_WRITE(addr, 0x01, 0x0003); + if (p == ds->cpu_port) + REG_WRITE(addr, 0x01, 0x003E); + else + REG_WRITE(addr, 0x01, 0x0003); /* * Port Control: disable Core Tag, disable Drop-on-Lock, * transmit frames unmodified, disable Header mode, @@ -268,7 +274,7 @@ if (ret < 0) return ret; - for (i = 0; i < 6; i++) { + for (i = 0; i < 11; i++) { ret = mv88e6131_setup_port(ds, i); if (ret < 0) return ret; @@ -279,7 +285,7 @@ static int mv88e6131_port_to_phy_addr(int port) { - if (port >= 0 && port != 3 && port <= 7) + if (port >= 0 && port <= 11) return port; return -1; } @@ -343,6 +349,12 @@ mv88e6131_get_ethtool_stats(struct dsa_switch *ds, int port, uint64_t *data) { + // HACK + if (port == 7) { + printk("%s(%d) => CPU\n", __FUNCTION__, port); + port = 10; + } + // HACK mv88e6xxx_get_ethtool_stats(ds, ARRAY_SIZE(mv88e6131_hw_stats), mv88e6131_hw_stats, port, data); }