Commit 11606039 authored by Florian Fainelli's avatar Florian Fainelli Committed by David S. Miller

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: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent b74b70c4
...@@ -2,6 +2,7 @@ menuconfig B53 ...@@ -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
......
...@@ -541,8 +541,8 @@ EXPORT_SYMBOL(b53_disable_port); ...@@ -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) == bool tag_en = !(ds->ops->get_tag_protocol(ds, port) ==
DSA_TAG_PROTO_BRCM); 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, ...@@ -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,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment