On Sun, Mar 28, 2021 at 17:24, Andrew Lunn <andrew@xxxxxxx> wrote: > On Fri, Mar 26, 2021 at 11:56:46AM +0100, Tobias Waldekranz wrote: >> All devices are capable of using regular DSA tags. Support for >> Ethertyped DSA tags sort into three categories: >> >> 1. No support. Older chips fall into this category. >> >> 2. Full support. Datasheet explicitly supports configuring the CPU >> port to receive FORWARDs with a DSA tag. >> >> 3. Undocumented support. Datasheet lists the configuration from >> category 2 as "reserved for future use", but does empirically >> behave like a category 2 device. > >> +static int mv88e6xxx_change_tag_protocol(struct dsa_switch *ds, int port, >> + enum dsa_tag_protocol proto) >> +{ >> + struct mv88e6xxx_chip *chip = ds->priv; >> + enum dsa_tag_protocol old_protocol; >> + int err; >> + >> + switch (proto) { >> + case DSA_TAG_PROTO_EDSA: >> + if (chip->info->tag_protocol != DSA_TAG_PROTO_EDSA) >> + dev_warn(chip->dev, "Relying on undocumented EDSA tagging behavior\n"); >> + >> + break; >> + case DSA_TAG_PROTO_DSA: >> + break; >> + default: >> + return -EPROTONOSUPPORT; >> + } > > You are handling cases 2 and 3 here, but not 1. Which makes it a bit > of a foot cannon for older devices. > > Now that we have chip->tag_protocol, maybe we should change > chip->info->tag_protocol to mean supported protocols? > > BIT(0) DSA > BIT(1) EDSA > BIT(2) Undocumented EDSA Since DSA is supported on all devices, perhaps we should just have: enum mv88e6xxx_edsa_support { MV88E6XXX_EDSA_UNSUPPORTED, MV88E6XXX_EDSA_UNDOCUMENTED, MV88E6XXX_EDSA_SUPPORTED, }; ? Do we also want to default to DSA on all devices unless there is a DT-property saying something else? Using EDSA does not really give you anything over bare tags anymore. You have fixed the tcpdump-issue, and the tagger drivers have been unified so there should be no risk of any regressions there either.