Swap pending with accepted patches, rebase remaining pending patches on top of new upstream. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
82 lines
3.1 KiB
Diff
82 lines
3.1 KiB
Diff
From 8856f7610167a3005ecef401c8528111d153b554 Mon Sep 17 00:00:00 2001
|
|
From: Daniel Golle <daniel@makrotopia.org>
|
|
Date: Tue, 24 Mar 2026 18:17:49 +0000
|
|
Subject: [PATCH 18/19] DO NOT SUBMIT: net: dsa: mxl862xx: re-introduce PCE
|
|
workaround for old firmware
|
|
|
|
Re-introduce the mxl862xx_disable_fw_global_rules() function that
|
|
disables firmware default global PCE rules for firmware versions
|
|
older than 1.0.80. The upstream submission replaced this with a
|
|
dev_warn() since firmware >= 1.0.80 no longer installs these rules,
|
|
but downstream deployments may still run older firmware.
|
|
|
|
This commit is for downstream use only and must not be submitted
|
|
upstream.
|
|
|
|
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|
---
|
|
drivers/net/dsa/mxl862xx/mxl862xx.c | 45 +++++++++++++++++++++++++++--
|
|
1 file changed, 42 insertions(+), 3 deletions(-)
|
|
|
|
--- a/drivers/net/dsa/mxl862xx/mxl862xx.c
|
|
+++ b/drivers/net/dsa/mxl862xx/mxl862xx.c
|
|
@@ -449,6 +449,43 @@ static int mxl862xx_setup_drop_meter(str
|
|
return MXL862XX_API_WRITE(priv, MXL862XX_COMMON_REGISTERMOD, reg);
|
|
}
|
|
|
|
+/* Disable firmware global PCE rules that trap various protocols to the
|
|
+ * on-die microcontroller (port 0) via PORTMAP_CPU. Under DSA, these
|
|
+ * frames must either reach the host CPU via per-port rules (link-local)
|
|
+ * or through the normal bridge forwarding path (ARP broadcast), so the
|
|
+ * global firmware rules are not needed. With the microcontroller port
|
|
+ * disabled they would silently drop matching traffic.
|
|
+ *
|
|
+ * Global rules have lower indices than CTP rules, hence higher priority
|
|
+ * in the PCE pipeline -- they must be explicitly disabled or they will
|
|
+ * shadow the per-CTP traps.
|
|
+ *
|
|
+ * Indices from gsw_flow_index.h:
|
|
+ * 1 -- BPDU (STP/RSTP, dst 01:80:c2:00:00:00)
|
|
+ * 3 -- LLDP (EtherType 0x88cc)
|
|
+ * 4 -- OAM/LACP (EtherType 0x8809)
|
|
+ * 6 -- System MAC (dst 02:e0:92:00:00:01, vendor management MAC)
|
|
+ * 7 -- ARP Request (broadcast + EtherType 0x0806 + TPA 192.0.2.1)
|
|
+ */
|
|
+static int mxl862xx_disable_fw_global_rules(struct dsa_switch *ds)
|
|
+{
|
|
+ static const u16 indices[] = { 1, 3, 4, 6, 7 };
|
|
+ struct mxl862xx_pce_rule rule;
|
|
+ int i, ret;
|
|
+
|
|
+ for (i = 0; i < ARRAY_SIZE(indices); i++) {
|
|
+ memset(&rule, 0, sizeof(rule));
|
|
+ rule.pattern.index = cpu_to_le16(indices[i]);
|
|
+ /* pattern.enable == 0 -> rule is disabled */
|
|
+
|
|
+ ret = MXL862XX_API_WRITE(ds->priv,
|
|
+ MXL862XX_TFLOW_PCERULEWRITE, rule);
|
|
+ if (ret)
|
|
+ return ret;
|
|
+ }
|
|
+
|
|
+ return 0;
|
|
+}
|
|
|
|
/* Per-CTP offsets for protocol trap rules. Each port's CTP flow-table
|
|
* block is pre-allocated by the firmware during init (44 entries per
|
|
@@ -1114,9 +1151,11 @@ static int mxl862xx_setup(struct dsa_swi
|
|
if (ret)
|
|
return ret;
|
|
|
|
- if (!MXL862XX_FW_VER_MIN(priv, 1, 0, 80))
|
|
- dev_warn(ds->dev, "firmware < 1.0.80 installs global PCE rules "
|
|
- "that interfere with DSA operation, please update\n");
|
|
+ if (!MXL862XX_FW_VER_MIN(priv, 1, 0, 80)) {
|
|
+ ret = mxl862xx_disable_fw_global_rules(ds);
|
|
+ if (ret)
|
|
+ return ret;
|
|
+ }
|
|
|
|
/* Pre-allocate firmware resources for all ports. The DSA core
|
|
* calls change_tag_protocol() between setup() and port_setup(),
|