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>
This commit is contained in:
Florian Fainelli 2017-11-10 15:22:55 -08:00 коммит произвёл David S. Miller
Родитель b74b70c449
Коммит 1160603960
2 изменённых файлов: 11 добавлений и 4 удалений

Просмотреть файл

@ -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);
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,7 +1505,13 @@ 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
/* 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; return DSA_TAG_PROTO_BRCM;
} }