|
@@ -2482,7 +2482,7 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port)
|
|
PORT_CONTROL_USE_TAG | PORT_CONTROL_USE_IP |
|
|
PORT_CONTROL_USE_TAG | PORT_CONTROL_USE_IP |
|
|
PORT_CONTROL_STATE_FORWARDING;
|
|
PORT_CONTROL_STATE_FORWARDING;
|
|
if (dsa_is_cpu_port(ds, port)) {
|
|
if (dsa_is_cpu_port(ds, port)) {
|
|
- if (mv88e6xxx_has(chip, MV88E6XXX_FLAG_EDSA))
|
|
|
|
|
|
+ if (chip->info->tag_protocol == DSA_TAG_PROTO_EDSA)
|
|
reg |= PORT_CONTROL_FRAME_ETHER_TYPE_DSA |
|
|
reg |= PORT_CONTROL_FRAME_ETHER_TYPE_DSA |
|
|
PORT_CONTROL_FORWARD_UNKNOWN_MC;
|
|
PORT_CONTROL_FORWARD_UNKNOWN_MC;
|
|
else
|
|
else
|
|
@@ -2611,7 +2611,7 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port)
|
|
/* Port Ethertype: use the Ethertype DSA Ethertype
|
|
/* Port Ethertype: use the Ethertype DSA Ethertype
|
|
* value.
|
|
* value.
|
|
*/
|
|
*/
|
|
- if (mv88e6xxx_has(chip, MV88E6XXX_FLAG_EDSA)) {
|
|
|
|
|
|
+ if (chip->info->tag_protocol == DSA_TAG_PROTO_EDSA) {
|
|
err = mv88e6xxx_port_write(chip, port, PORT_ETH_TYPE,
|
|
err = mv88e6xxx_port_write(chip, port, PORT_ETH_TYPE,
|
|
ETH_P_EDSA);
|
|
ETH_P_EDSA);
|
|
if (err)
|
|
if (err)
|
|
@@ -3637,6 +3637,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
.age_time_coeff = 15000,
|
|
.age_time_coeff = 15000,
|
|
.g1_irqs = 8,
|
|
.g1_irqs = 8,
|
|
|
|
+ .tag_protocol = DSA_TAG_PROTO_DSA,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6097,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6097,
|
|
.ops = &mv88e6085_ops,
|
|
.ops = &mv88e6085_ops,
|
|
},
|
|
},
|
|
@@ -3651,6 +3652,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
.age_time_coeff = 15000,
|
|
.age_time_coeff = 15000,
|
|
.g1_irqs = 8,
|
|
.g1_irqs = 8,
|
|
|
|
+ .tag_protocol = DSA_TAG_PROTO_DSA,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6095,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6095,
|
|
.ops = &mv88e6095_ops,
|
|
.ops = &mv88e6095_ops,
|
|
},
|
|
},
|
|
@@ -3679,6 +3681,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
.age_time_coeff = 15000,
|
|
.age_time_coeff = 15000,
|
|
.g1_irqs = 9,
|
|
.g1_irqs = 9,
|
|
|
|
+ .tag_protocol = DSA_TAG_PROTO_DSA,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6165,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6165,
|
|
.ops = &mv88e6123_ops,
|
|
.ops = &mv88e6123_ops,
|
|
},
|
|
},
|
|
@@ -3693,6 +3696,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
.age_time_coeff = 15000,
|
|
.age_time_coeff = 15000,
|
|
.g1_irqs = 9,
|
|
.g1_irqs = 9,
|
|
|
|
+ .tag_protocol = DSA_TAG_PROTO_DSA,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6185,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6185,
|
|
.ops = &mv88e6131_ops,
|
|
.ops = &mv88e6131_ops,
|
|
},
|
|
},
|
|
@@ -3707,6 +3711,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
.age_time_coeff = 15000,
|
|
.age_time_coeff = 15000,
|
|
.g1_irqs = 9,
|
|
.g1_irqs = 9,
|
|
|
|
+ .tag_protocol = DSA_TAG_PROTO_DSA,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6165,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6165,
|
|
.ops = &mv88e6161_ops,
|
|
.ops = &mv88e6161_ops,
|
|
},
|
|
},
|
|
@@ -3721,6 +3726,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
.age_time_coeff = 15000,
|
|
.age_time_coeff = 15000,
|
|
.g1_irqs = 9,
|
|
.g1_irqs = 9,
|
|
|
|
+ .tag_protocol = DSA_TAG_PROTO_DSA,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6165,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6165,
|
|
.ops = &mv88e6165_ops,
|
|
.ops = &mv88e6165_ops,
|
|
},
|
|
},
|
|
@@ -3735,6 +3741,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
.age_time_coeff = 15000,
|
|
.age_time_coeff = 15000,
|
|
.g1_irqs = 9,
|
|
.g1_irqs = 9,
|
|
|
|
+ .tag_protocol = DSA_TAG_PROTO_EDSA,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6351,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6351,
|
|
.ops = &mv88e6171_ops,
|
|
.ops = &mv88e6171_ops,
|
|
},
|
|
},
|
|
@@ -3749,6 +3756,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
.age_time_coeff = 15000,
|
|
.age_time_coeff = 15000,
|
|
.g1_irqs = 9,
|
|
.g1_irqs = 9,
|
|
|
|
+ .tag_protocol = DSA_TAG_PROTO_EDSA,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6352,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6352,
|
|
.ops = &mv88e6172_ops,
|
|
.ops = &mv88e6172_ops,
|
|
},
|
|
},
|
|
@@ -3763,6 +3771,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
.age_time_coeff = 15000,
|
|
.age_time_coeff = 15000,
|
|
.g1_irqs = 9,
|
|
.g1_irqs = 9,
|
|
|
|
+ .tag_protocol = DSA_TAG_PROTO_EDSA,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6351,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6351,
|
|
.ops = &mv88e6175_ops,
|
|
.ops = &mv88e6175_ops,
|
|
},
|
|
},
|
|
@@ -3777,6 +3786,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
.age_time_coeff = 15000,
|
|
.age_time_coeff = 15000,
|
|
.g1_irqs = 9,
|
|
.g1_irqs = 9,
|
|
|
|
+ .tag_protocol = DSA_TAG_PROTO_EDSA,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6352,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6352,
|
|
.ops = &mv88e6176_ops,
|
|
.ops = &mv88e6176_ops,
|
|
},
|
|
},
|
|
@@ -3791,6 +3801,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
.age_time_coeff = 15000,
|
|
.age_time_coeff = 15000,
|
|
.g1_irqs = 8,
|
|
.g1_irqs = 8,
|
|
|
|
+ .tag_protocol = DSA_TAG_PROTO_EDSA,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6185,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6185,
|
|
.ops = &mv88e6185_ops,
|
|
.ops = &mv88e6185_ops,
|
|
},
|
|
},
|
|
@@ -3803,6 +3814,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.num_ports = 11, /* 10 + Z80 */
|
|
.num_ports = 11, /* 10 + Z80 */
|
|
.port_base_addr = 0x0,
|
|
.port_base_addr = 0x0,
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
|
|
+ .tag_protocol = DSA_TAG_PROTO_DSA,
|
|
.age_time_coeff = 15000,
|
|
.age_time_coeff = 15000,
|
|
.g1_irqs = 9,
|
|
.g1_irqs = 9,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6390,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6390,
|
|
@@ -3819,6 +3831,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
.age_time_coeff = 15000,
|
|
.age_time_coeff = 15000,
|
|
.g1_irqs = 9,
|
|
.g1_irqs = 9,
|
|
|
|
+ .tag_protocol = DSA_TAG_PROTO_DSA,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6390,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6390,
|
|
.ops = &mv88e6190x_ops,
|
|
.ops = &mv88e6190x_ops,
|
|
},
|
|
},
|
|
@@ -3832,6 +3845,8 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.port_base_addr = 0x0,
|
|
.port_base_addr = 0x0,
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
.age_time_coeff = 15000,
|
|
.age_time_coeff = 15000,
|
|
|
|
+ .g1_irqs = 9,
|
|
|
|
+ .tag_protocol = DSA_TAG_PROTO_DSA,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6390,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6390,
|
|
.ops = &mv88e6391_ops,
|
|
.ops = &mv88e6391_ops,
|
|
},
|
|
},
|
|
@@ -3846,6 +3861,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
.age_time_coeff = 15000,
|
|
.age_time_coeff = 15000,
|
|
.g1_irqs = 9,
|
|
.g1_irqs = 9,
|
|
|
|
+ .tag_protocol = DSA_TAG_PROTO_EDSA,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6352,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6352,
|
|
.ops = &mv88e6240_ops,
|
|
.ops = &mv88e6240_ops,
|
|
},
|
|
},
|
|
@@ -3860,6 +3876,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
.age_time_coeff = 15000,
|
|
.age_time_coeff = 15000,
|
|
.g1_irqs = 9,
|
|
.g1_irqs = 9,
|
|
|
|
+ .tag_protocol = DSA_TAG_PROTO_DSA,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6390,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6390,
|
|
.ops = &mv88e6290_ops,
|
|
.ops = &mv88e6290_ops,
|
|
},
|
|
},
|
|
@@ -3874,6 +3891,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
.age_time_coeff = 15000,
|
|
.age_time_coeff = 15000,
|
|
.g1_irqs = 8,
|
|
.g1_irqs = 8,
|
|
|
|
+ .tag_protocol = DSA_TAG_PROTO_EDSA,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6320,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6320,
|
|
.ops = &mv88e6320_ops,
|
|
.ops = &mv88e6320_ops,
|
|
},
|
|
},
|
|
@@ -3888,6 +3906,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
.age_time_coeff = 15000,
|
|
.age_time_coeff = 15000,
|
|
.g1_irqs = 8,
|
|
.g1_irqs = 8,
|
|
|
|
+ .tag_protocol = DSA_TAG_PROTO_EDSA,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6320,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6320,
|
|
.ops = &mv88e6321_ops,
|
|
.ops = &mv88e6321_ops,
|
|
},
|
|
},
|
|
@@ -3902,6 +3921,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
.age_time_coeff = 15000,
|
|
.age_time_coeff = 15000,
|
|
.g1_irqs = 9,
|
|
.g1_irqs = 9,
|
|
|
|
+ .tag_protocol = DSA_TAG_PROTO_EDSA,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6351,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6351,
|
|
.ops = &mv88e6350_ops,
|
|
.ops = &mv88e6350_ops,
|
|
},
|
|
},
|
|
@@ -3916,6 +3936,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
.age_time_coeff = 15000,
|
|
.age_time_coeff = 15000,
|
|
.g1_irqs = 9,
|
|
.g1_irqs = 9,
|
|
|
|
+ .tag_protocol = DSA_TAG_PROTO_EDSA,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6351,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6351,
|
|
.ops = &mv88e6351_ops,
|
|
.ops = &mv88e6351_ops,
|
|
},
|
|
},
|
|
@@ -3930,6 +3951,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
.age_time_coeff = 15000,
|
|
.age_time_coeff = 15000,
|
|
.g1_irqs = 9,
|
|
.g1_irqs = 9,
|
|
|
|
+ .tag_protocol = DSA_TAG_PROTO_EDSA,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6352,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6352,
|
|
.ops = &mv88e6352_ops,
|
|
.ops = &mv88e6352_ops,
|
|
},
|
|
},
|
|
@@ -3943,6 +3965,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
.age_time_coeff = 15000,
|
|
.age_time_coeff = 15000,
|
|
.g1_irqs = 9,
|
|
.g1_irqs = 9,
|
|
|
|
+ .tag_protocol = DSA_TAG_PROTO_DSA,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6390,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6390,
|
|
.ops = &mv88e6390_ops,
|
|
.ops = &mv88e6390_ops,
|
|
},
|
|
},
|
|
@@ -3956,6 +3979,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
.global1_addr = 0x1b,
|
|
.global1_addr = 0x1b,
|
|
.age_time_coeff = 15000,
|
|
.age_time_coeff = 15000,
|
|
.g1_irqs = 9,
|
|
.g1_irqs = 9,
|
|
|
|
+ .tag_protocol = DSA_TAG_PROTO_DSA,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6390,
|
|
.flags = MV88E6XXX_FLAGS_FAMILY_6390,
|
|
.ops = &mv88e6390x_ops,
|
|
.ops = &mv88e6390x_ops,
|
|
},
|
|
},
|
|
@@ -4056,10 +4080,7 @@ static enum dsa_tag_protocol mv88e6xxx_get_tag_protocol(struct dsa_switch *ds)
|
|
{
|
|
{
|
|
struct mv88e6xxx_chip *chip = ds->priv;
|
|
struct mv88e6xxx_chip *chip = ds->priv;
|
|
|
|
|
|
- if (mv88e6xxx_has(chip, MV88E6XXX_FLAG_EDSA))
|
|
|
|
- return DSA_TAG_PROTO_EDSA;
|
|
|
|
-
|
|
|
|
- return DSA_TAG_PROTO_DSA;
|
|
|
|
|
|
+ return chip->info->tag_protocol;
|
|
}
|
|
}
|
|
|
|
|
|
static const char *mv88e6xxx_drv_probe(struct device *dsa_dev,
|
|
static const char *mv88e6xxx_drv_probe(struct device *dsa_dev,
|