[PATCH net] net: dsa: b53: skip EAP mode setup on Northstar SoCs when using port 5 or 7
Rafał Miłecki <[email protected]>
| Newsgroups | gmane.linux.network |
|---|---|
| Message-ID | <[email protected]> |
From: Rafał Miłecki <[email protected]> Northstar devices have 3 CPU ports. This design was meant for dual IMP setups when WAN traffic goes to port 5 (IMP1) and LAN traffic goes to port 8 (IMP0). While all 3 ports support Broadcom header some features are not available for ports 5 and 7. Trying to set EAP mode when using those ports breaks standalone ports. Fixes: 4227ea91e265 ("net: dsa: b53: prevent standalone from trying to forward to other ports") Cc: Semih Baskan <[email protected]> Signed-off-by: Rafał Miłecki <[email protected]> --- This fixes a regression. A very similar fix was carried by OpenWrt for about half a year now. A recent discussion in [PATCH net 0/2] net: dsa: b53: fix 8021q uppers on standalone ports allowed understanding the issue a bit better so I decided to send an upstream PATCH finally. drivers/net/dsa/b53/b53_common.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/drivers/net/dsa/b53/b53_common.c b/drivers/net/dsa/b53/b53_common.c index 3f5b9592794d..4b4a9258ecd4 100644 --- a/drivers/net/dsa/b53/b53_common.c +++ b/drivers/net/dsa/b53/b53_common.c @@ -332,6 +332,21 @@ static void b53_set_eap_mode(struct b53_device *dev, int port, int mode) { u64 eap_conf; + /* + * Northstar devices (SoCs with BCM53011 / BCM53012) have 3 Ethernet + * controllers connected to 3 switch ports: 5 (IMP1), 7 and 8 (IMP0). + * Each of those ports can be used as CPU one as all support Broadcom + * header but ports 5 and 7 have some limitations. + * + * Setting EAP_MODE_SIMPLIFIED with port 5/7 used as CPU port breaks + * standalone ports, see: + * https://lore.kernel.org/netdev/[email protected]/ + */ + if (is5301x(dev) && !dsa_is_cpu_port(dev->ds, B53_CPU_PORT)) { + dev_warn_once(dev->dev, "skipping EAP setup because of not using CPU port 8\n"); + return; + } + if (is5325(dev) || is5365(dev) || dev->chip_id == BCM5389_DEVICE_ID) return; -- 2.51.0