From: Rafał Miłecki <rafal@milecki.pl>
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 <redacted>
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
---
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/ce4d9b7b-aaf6-4796-94fb-8c3d6a1dcd4d@gmail.com/
+ */
+ 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