فهرست منبع

net: dsa: b53: Support prepended Broadcom tags

On BCM58xx devices (Northstar Plus), there is an accelerator attached to
port 8 which would only work if we use prepended Broadcom tags. Resolve
that difference in our get_tag_protocol() function by setting the
appropriate tagging protocol in that case. We need to change
b53_brcm_hdr_setup() a little bit now since we can deal with two types
of Broadcom tags.

Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
Florian Fainelli 7 سال پیش
والد
کامیت
1160603960
2فایلهای تغییر یافته به همراه11 افزوده شده و 4 حذف شده
  1. 1 0
      drivers/net/dsa/b53/Kconfig
  2. 10 4
      drivers/net/dsa/b53/b53_common.c

+ 1 - 0
drivers/net/dsa/b53/Kconfig

@@ -2,6 +2,7 @@ menuconfig B53
 	tristate "Broadcom BCM53xx managed switch support"
 	tristate "Broadcom BCM53xx managed switch support"
 	depends on NET_DSA
 	depends on NET_DSA
 	select NET_DSA_TAG_BRCM
 	select NET_DSA_TAG_BRCM
+	select NET_DSA_TAG_BRCM_PREPEND
 	help
 	help
 	  This driver adds support for Broadcom managed switch chips. It supports
 	  This driver adds support for Broadcom managed switch chips. It supports
 	  BCM5325E, BCM5365, BCM539x, BCM53115 and BCM53125 as well as BCM63XX
 	  BCM5325E, BCM5365, BCM539x, BCM53115 and BCM53125 as well as BCM63XX

+ 10 - 4
drivers/net/dsa/b53/b53_common.c

@@ -541,8 +541,8 @@ EXPORT_SYMBOL(b53_disable_port);
 
 
 void b53_brcm_hdr_setup(struct dsa_switch *ds, int port)
 void b53_brcm_hdr_setup(struct dsa_switch *ds, int port)
 {
 {
-	bool tag_en = !!(ds->ops->get_tag_protocol(ds, port) ==
-			 DSA_TAG_PROTO_BRCM);
+	bool tag_en = !(ds->ops->get_tag_protocol(ds, port) ==
+			 DSA_TAG_PROTO_NONE);
 	struct b53_device *dev = ds->priv;
 	struct b53_device *dev = ds->priv;
 	u8 hdr_ctl, val;
 	u8 hdr_ctl, val;
 	u16 reg;
 	u16 reg;
@@ -1505,8 +1505,14 @@ static enum dsa_tag_protocol b53_get_tag_protocol(struct dsa_switch *ds,
 	 */
 	 */
 	if (is5325(dev) || is5365(dev) || !b53_can_enable_brcm_tags(ds, port))
 	if (is5325(dev) || is5365(dev) || !b53_can_enable_brcm_tags(ds, port))
 		return DSA_TAG_PROTO_NONE;
 		return DSA_TAG_PROTO_NONE;
-	else
-		return DSA_TAG_PROTO_BRCM;
+
+	/* Broadcom BCM58xx chips have a flow accelerator on Port 8
+	 * which requires us to use the prepended Broadcom tag type
+	 */
+	if (dev->chip_id == BCM58XX_DEVICE_ID && port == B53_CPU_PORT)
+		return DSA_TAG_PROTO_BRCM_PREPEND;
+
+	return DSA_TAG_PROTO_BRCM;
 }
 }
 
 
 int b53_mirror_add(struct dsa_switch *ds, int port,
 int b53_mirror_add(struct dsa_switch *ds, int port,