diff options
Diffstat (limited to 'net/dsa/mv88e6131.c')
| -rw-r--r-- | net/dsa/mv88e6131.c | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/net/dsa/mv88e6131.c b/net/dsa/mv88e6131.c index 3da418894efc..45f7411e90ba 100644 --- a/net/dsa/mv88e6131.c +++ b/net/dsa/mv88e6131.c | |||
| @@ -207,8 +207,15 @@ static int mv88e6131_setup_port(struct dsa_switch *ds, int p) | |||
| 207 | * mode, but do not enable forwarding of unknown unicasts. | 207 | * mode, but do not enable forwarding of unknown unicasts. |
| 208 | */ | 208 | */ |
| 209 | val = 0x0433; | 209 | val = 0x0433; |
| 210 | if (p == dsa_upstream_port(ds)) | 210 | if (p == dsa_upstream_port(ds)) { |
| 211 | val |= 0x0104; | 211 | val |= 0x0104; |
| 212 | /* | ||
| 213 | * On 6085, unknown multicast forward is controlled | ||
| 214 | * here rather than in Port Control 2 register. | ||
| 215 | */ | ||
| 216 | if (ps->id == ID_6085) | ||
| 217 | val |= 0x0008; | ||
| 218 | } | ||
| 212 | if (ds->dsa_port_mask & (1 << p)) | 219 | if (ds->dsa_port_mask & (1 << p)) |
| 213 | val |= 0x0100; | 220 | val |= 0x0100; |
| 214 | REG_WRITE(addr, 0x04, val); | 221 | REG_WRITE(addr, 0x04, val); |
| @@ -251,10 +258,19 @@ static int mv88e6131_setup_port(struct dsa_switch *ds, int p) | |||
| 251 | * If this is the upstream port for this switch, enable | 258 | * If this is the upstream port for this switch, enable |
| 252 | * forwarding of unknown multicast addresses. | 259 | * forwarding of unknown multicast addresses. |
| 253 | */ | 260 | */ |
| 254 | val = 0x0080 | dsa_upstream_port(ds); | 261 | if (ps->id == ID_6085) |
| 255 | if (p == dsa_upstream_port(ds)) | 262 | /* |
| 256 | val |= 0x0040; | 263 | * on 6085, bits 3:0 are reserved, bit 6 control ARP |
| 257 | REG_WRITE(addr, 0x08, val); | 264 | * mirroring, and multicast forward is handled in |
| 265 | * Port Control register. | ||
| 266 | */ | ||
| 267 | REG_WRITE(addr, 0x08, 0x0080); | ||
| 268 | else { | ||
| 269 | val = 0x0080 | dsa_upstream_port(ds); | ||
| 270 | if (p == dsa_upstream_port(ds)) | ||
| 271 | val |= 0x0040; | ||
| 272 | REG_WRITE(addr, 0x08, val); | ||
| 273 | } | ||
| 258 | 274 | ||
| 259 | /* | 275 | /* |
| 260 | * Rate Control: disable ingress rate limiting. | 276 | * Rate Control: disable ingress rate limiting. |
