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