net: dsa: sja1105: fix broken connection with the sja1110 tagger
authorVladimir Oltean <vladimir.oltean@nxp.com>
Tue, 14 Dec 2021 01:45:35 +0000 (03:45 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 14 Dec 2021 12:45:16 +0000 (12:45 +0000)
The driver was incorrectly converted assuming that "sja1105" is the only
tagger supported by this driver. This results in SJA1110 switches
failing to probe:

sja1105 spi1.0: Unable to connect to tag protocol "sja1110": -EPROTONOSUPPORT
sja1105: probe of spi1.2 failed with error -93

Add DSA_TAG_PROTO_SJA1110 to the list of supported taggers by the
sja1105 driver. The sja1105_tagger_data structure format is common for
the two tagging protocols.

Fixes: c79e84866d2a ("net: dsa: tag_sja1105: convert to tagger-owned data")
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/sja1105/sja1105_main.c
include/linux/dsa/sja1105.h

index 9171fbe..b513713 100644 (file)
@@ -2708,17 +2708,17 @@ static void sja1105_port_deferred_xmit(struct kthread_work *work)
 static int sja1105_connect_tag_protocol(struct dsa_switch *ds,
                                        enum dsa_tag_protocol proto)
 {
+       struct sja1105_private *priv = ds->priv;
        struct sja1105_tagger_data *tagger_data;
 
-       switch (proto) {
-       case DSA_TAG_PROTO_SJA1105:
-               tagger_data = sja1105_tagger_data(ds);
-               tagger_data->xmit_work_fn = sja1105_port_deferred_xmit;
-               tagger_data->meta_tstamp_handler = sja1110_process_meta_tstamp;
-               return 0;
-       default:
+       if (proto != priv->info->tag_proto)
                return -EPROTONOSUPPORT;
-       }
+
+       tagger_data = sja1105_tagger_data(ds);
+       tagger_data->xmit_work_fn = sja1105_port_deferred_xmit;
+       tagger_data->meta_tstamp_handler = sja1110_process_meta_tstamp;
+
+       return 0;
 }
 
 /* The MAXAGE setting belongs to the L2 Forwarding Parameters table,
index e9cb1ae..159e431 100644 (file)
@@ -70,7 +70,8 @@ struct sja1105_skb_cb {
 static inline struct sja1105_tagger_data *
 sja1105_tagger_data(struct dsa_switch *ds)
 {
-       BUG_ON(ds->dst->tag_ops->proto != DSA_TAG_PROTO_SJA1105);
+       BUG_ON(ds->dst->tag_ops->proto != DSA_TAG_PROTO_SJA1105 &&
+              ds->dst->tag_ops->proto != DSA_TAG_PROTO_SJA1110);
 
        return ds->tagger_data;
 }