AI Trajectory


Trajectory: (Expand/Collapse All)
Seq Timestamp Type Name Duration
0/0 2026/07/28 00:54 flow patch-triage
2m Args:
null

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "Reasoning": "The patch adds a PCS loopback feature to the stmmac (Synopsys DesignWare MAC) driver and a corresponding API in phylink. The stmmac driver requires specific physical hardware or SoC emulation (e.g., Intel Quark/Elkhart Lake for PCI, or specific ARM SoCs for platform). These devices are not emulated in standard QEMU environments (like 'pc' or 'virt' machines) used by syzkaller. Without the hardware, the driver will fail to probe, making the selftest and the new phylink loopback code unreachable.",
  "WorthFuzzing": false
}

1/1 2026/07/28 00:54 action read-patch-diff
0m Args:
null

Results:
{
  "PatchDiff": "commit ea71ec746d044deb009359c3bcdee1e644b80693\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate:   Tue Jul 28 00:53:59 2026 +0000\n\n    syz-cluster: applied patch under review\n\ndiff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_pcs.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_pcs.c\nindex df37af5ab837af..90a21a2f7e8731 100644\n--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_pcs.c\n+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_pcs.c\n@@ -168,6 +168,22 @@ static void dwmac_integrated_pcs_an_restart(struct phylink_pcs *pcs)\n \t}\n }\n \n+static int dwmac_integrated_pcs_loopback(struct phylink_pcs *pcs, bool enable)\n+{\n+\tstruct stmmac_pcs *spcs = phylink_pcs_to_stmmac_pcs(pcs);\n+\tvoid __iomem *an_control = spcs-\u003ebase + GMAC_AN_CTRL(0);\n+\tu32 ctrl;\n+\n+\tctrl = readl(an_control);\n+\tif (enable)\n+\t\tctrl |= GMAC_AN_CTRL_ELE;\n+\telse\n+\t\tctrl \u0026= ~GMAC_AN_CTRL_ELE;\n+\twritel(ctrl, an_control);\n+\n+\treturn 0;\n+}\n+\n static const struct phylink_pcs_ops dwmac_integrated_pcs_ops = {\n \t.pcs_inband_caps = dwmac_integrated_pcs_inband_caps,\n \t.pcs_enable = dwmac_integrated_pcs_enable,\n@@ -175,6 +191,7 @@ static const struct phylink_pcs_ops dwmac_integrated_pcs_ops = {\n \t.pcs_get_state = dwmac_integrated_pcs_get_state,\n \t.pcs_config = dwmac_integrated_pcs_config,\n \t.pcs_an_restart = dwmac_integrated_pcs_an_restart,\n+\t.pcs_loopback = dwmac_integrated_pcs_loopback,\n };\n \n void stmmac_integrated_pcs_irq(struct stmmac_priv *priv, u32 status,\ndiff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c\nindex 29e824bd90ca6b..77a457b2fa5cf7 100644\n--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c\n+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c\n@@ -19,6 +19,7 @@\n #include \u003cnet/udp.h\u003e\n #include \u003cnet/tc_act/tc_gact.h\u003e\n #include \"stmmac.h\"\n+#include \"stmmac_pcs.h\"\n \n struct stmmachdr {\n \t__be32 version;\n@@ -374,23 +375,51 @@ static int stmmac_test_mac_loopback(struct stmmac_priv *priv)\n \treturn __stmmac_test_loopback(priv, \u0026attr);\n }\n \n+static struct phylink_pcs *stmmac_selftest_get_pcs(struct stmmac_priv *priv)\n+{\n+\t/* Try glue driver's PCS first, then the integrated PCS. */\n+\tif (priv-\u003ehw-\u003ephylink_pcs)\n+\t\treturn priv-\u003ehw-\u003ephylink_pcs;\n+\n+\tif (priv-\u003eintegrated_pcs)\n+\t\treturn \u0026priv-\u003eintegrated_pcs-\u003epcs;\n+\n+\treturn NULL;\n+}\n+\n static int stmmac_test_phy_loopback(struct stmmac_priv *priv)\n {\n \tstruct stmmac_packet_attrs attr = { };\n+\tstruct phylink_pcs *pcs;\n \tint ret;\n \n-\tif (!priv-\u003edev-\u003ephydev)\n-\t\treturn -EOPNOTSUPP;\n+\tif (priv-\u003edev-\u003ephydev) {\n+\t\tret = phy_loopback(priv-\u003edev-\u003ephydev, true, 0);\n+\t\tif (ret)\n+\t\t\treturn ret;\n \n-\tret = phy_loopback(priv-\u003edev-\u003ephydev, true, 0);\n-\tif (ret)\n+\t\tattr.dst = priv-\u003edev-\u003edev_addr;\n+\t\tret = __stmmac_test_loopback(priv, \u0026attr);\n+\n+\t\tphy_loopback(priv-\u003edev-\u003ephydev, false, 0);\n \t\treturn ret;\n+\t}\n \n-\tattr.dst = priv-\u003edev-\u003edev_addr;\n-\tret = __stmmac_test_loopback(priv, \u0026attr);\n+\t/* Use PCS loopback for interfaces without an external PHY. */\n+\tpcs = stmmac_selftest_get_pcs(priv);\n+\tif (pcs) {\n+\t\tret = phylink_pcs_loopback(pcs, true);\n+\t\tif (ret)\n+\t\t\treturn ret;\n \n-\tphy_loopback(priv-\u003edev-\u003ephydev, false, 0);\n-\treturn ret;\n+\t\tattr.dst = priv-\u003edev-\u003edev_addr;\n+\t\tret = __stmmac_test_loopback(priv, \u0026attr);\n+\n+\t\tphylink_pcs_loopback(pcs, false);\n+\t\treturn ret;\n+\t}\n+\n+\treturn -EOPNOTSUPP;\n }\n \n static int stmmac_test_mmc(struct stmmac_priv *priv)\n@@ -1986,6 +2015,9 @@ void stmmac_selftest_run(struct net_device *dev,\n \t\t\tret = -EOPNOTSUPP;\n \t\t\tif (dev-\u003ephydev)\n \t\t\t\tret = phy_loopback(dev-\u003ephydev, true, 0);\n+\t\t\telse\n+\t\t\t\tret = phylink_pcs_loopback(stmmac_selftest_get_pcs(priv),\n+\t\t\t\t\t\t\t   true);\n \t\t\tif (!ret)\n \t\t\t\tbreak;\n \t\t\tfallthrough;\n@@ -2019,6 +2051,9 @@ void stmmac_selftest_run(struct net_device *dev,\n \t\t\tret = -EOPNOTSUPP;\n \t\t\tif (dev-\u003ephydev)\n \t\t\t\tret = phy_loopback(dev-\u003ephydev, false, 0);\n+\t\t\telse\n+\t\t\t\tret = phylink_pcs_loopback(stmmac_selftest_get_pcs(priv),\n+\t\t\t\t\t\t\t   false);\n \t\t\tif (!ret)\n \t\t\t\tbreak;\n \t\t\tfallthrough;\ndiff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c\nindex 59dfe35afa54fc..69242caffaef51 100644\n--- a/drivers/net/phy/phylink.c\n+++ b/drivers/net/phy/phylink.c\n@@ -997,6 +997,25 @@ int phylink_pcs_pre_init(struct phylink *pl, struct phylink_pcs *pcs)\n }\n EXPORT_SYMBOL_GPL(phylink_pcs_pre_init);\n \n+/**\n+ * phylink_pcs_loopback() - Enable or disable loopback at the PCS\n+ * @pcs: a pointer to a \u0026struct phylink_pcs.\n+ * @enable: true to enable loopback, false to disable\n+ *\n+ * Enable or disable loopback mode at the PCS level. This is used by MAC\n+ * drivers for selftest purposes when no external PHY is present.\n+ *\n+ * Returns 0 on success, negative error code on failure.\n+ */\n+int phylink_pcs_loopback(struct phylink_pcs *pcs, bool enable)\n+{\n+\tif (pcs \u0026\u0026 pcs-\u003eops-\u003epcs_loopback)\n+\t\treturn pcs-\u003eops-\u003epcs_loopback(pcs, enable);\n+\n+\treturn -EOPNOTSUPP;\n+}\n+EXPORT_SYMBOL_GPL(phylink_pcs_loopback);\n+\n static void phylink_mac_config(struct phylink *pl,\n \t\t\t       const struct phylink_link_state *state)\n {\ndiff --git a/include/linux/phylink.h b/include/linux/phylink.h\nindex 2bc0db3d52ac8d..66c7016d4acdcb 100644\n--- a/include/linux/phylink.h\n+++ b/include/linux/phylink.h\n@@ -518,6 +518,7 @@ struct phylink_pcs {\n  *\t\t    the MAC.\n  * @pcs_pre_init: configure PCS components necessary for MAC hardware\n  *                initialization e.g. RX clock for stmmac.\n+ * @pcs_loopback: enable/disable loopback mode at the PCS.\n  */\n struct phylink_pcs_ops {\n \tint (*pcs_validate)(struct phylink_pcs *pcs, unsigned long *supported,\n@@ -542,6 +543,7 @@ struct phylink_pcs_ops {\n \tvoid (*pcs_disable_eee)(struct phylink_pcs *pcs);\n \tvoid (*pcs_enable_eee)(struct phylink_pcs *pcs);\n \tint (*pcs_pre_init)(struct phylink_pcs *pcs);\n+\tint (*pcs_loopback)(struct phylink_pcs *pcs, bool enable);\n };\n \n #if 0 /* For kernel-doc purposes only. */\n@@ -717,8 +719,22 @@ void pcs_enable_eee(struct phylink_pcs *pcs);\n  */\n int pcs_pre_init(struct phylink_pcs *pcs);\n \n+/**\n+ * pcs_loopback() - Enable or disable loopback at the PCS\n+ * @pcs: a pointer to a \u0026struct phylink_pcs.\n+ * @enable: true to enable loopback, false to disable\n+ *\n+ * Enable or disable loopback mode at the PCS level. This is used by MAC\n+ * drivers for selftest purposes when no external PHY is present.\n+ *\n+ * Returns 0 on success, or a negative error code on failure.\n+ */\n+int pcs_loopback(struct phylink_pcs *pcs, bool enable);\n+\n #endif\n \n+int phylink_pcs_loopback(struct phylink_pcs *pcs, bool enable);\n+\n struct phylink *phylink_create(struct phylink_config *,\n \t\t\t       const struct fwnode_handle *,\n \t\t\t       phy_interface_t,\n"
}

2/1 2026/07/28 00:54 agent patch-evaluator
2m Model:
best-expensive

Args:
null

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "Reasoning": "The patch adds a PCS loopback feature to the stmmac (Synopsys DesignWare MAC) driver and a corresponding API in phylink. The stmmac driver requires specific physical hardware or SoC emulation (e.g., Intel Quark/Elkhart Lake for PCI, or specific ARM SoCs for platform). These devices are not emulated in standard QEMU environments (like 'pc' or 'virt' machines) used by syzkaller. Without the hardware, the driver will fail to probe, making the selftest and the new phylink loopback code unreachable.",
  "WorthFuzzing": false
}

Instruction:
You are an expert Linux kernel maintainer.
Your job is to review a provided patch series and determine
if it makes functional changes to the kernel that should be fuzzed.

IMPORTANT: The changes have ALREADY been applied and committed as the HEAD commit in
your workspace. Do NOT rely on your internal knowledge of the kernel. You must actively
use your code access tools to examine the actual source code and confirm any assumptions.

Return WorthFuzzing=false if the patch only contains:
- Modifications to Documentation/, Kconfig files, or code comments.
- Purely decorative changes, such as logging (e.g., pr_err, printk) or tracepoints.
- Changes to numeric constants or macros that do not functionally alter execution flow.
- Code paths that are impossible to reach in virtualized environments like GCE or QEMU,
  even when utilizing software-emulated hardware (e.g., usb gadget, mac80211_hwsim).
- Code in vendor-specific PCIe switch, SmartNIC, or GPU drivers (e.g., mlxsw, pds_core, qed,
  ionic, amdgpu) that require physical PCIe hardware cards not emulated in standard QEMU.
- Driver .remove, .shutdown, or pci_unregister_driver teardown callbacks (e.g., igb_remove)
  that are executed only during PCI hot-unplug or sysfs driver unbind operations.

If it modifies reachable core kernel logic, drivers, or architectures, use your code search
tools to verify the code can be executed, then return WorthFuzzing=true.

When returning WorthFuzzing=true, you MUST ALSO:
1. Extract any specific kernel functions that should be heavily fuzzed into FocusSymbols.
   Avoid listing generic hot-path functions to prevent skewed test distributions.
   Prefer non-static, non-inlined API entrypoint functions over internal static helper functions
   (which are inlined by the compiler and do not have distinct symbol addresses).
2. Identify any specific CONFIG_ options required to properly test this new/modified feature.
   Go and look into the Kconfig files and check for ifdefs around the code, do not make assumptions.
   Also check "depends on" lines in Kconfig to include any non-standard parent subsystem configs
   needed for Kbuild to compile the code statically into vmlinux. List them in the EnableConfigs
   output array, and DO NOT add a 'CONFIG_' prefix (e.g., return "NET_IPV4" instead of "CONFIG_NET_IPV4").
Prefer calling several tools at the same time to save round-trips.


Use set-results tool to provide results of the analysis.
It must be called exactly once before the final reply.
Ignore results of this tool.

Prompt:
For your convenience, here is the diff of the changes:
commit ea71ec746d044deb009359c3bcdee1e644b80693
Author: syz-cluster <triage@syzkaller.com>
Date:   Tue Jul 28 00:53:59 2026 +0000

    syz-cluster: applied patch under review

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_pcs.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_pcs.c
index df37af5ab837af..90a21a2f7e8731 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_pcs.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_pcs.c
@@ -168,6 +168,22 @@ static void dwmac_integrated_pcs_an_restart(struct phylink_pcs *pcs)
 	}
 }
 
+static int dwmac_integrated_pcs_loopback(struct phylink_pcs *pcs, bool enable)
+{
+	struct stmmac_pcs *spcs = phylink_pcs_to_stmmac_pcs(pcs);
+	void __iomem *an_control = spcs->base + GMAC_AN_CTRL(0);
+	u32 ctrl;
+
+	ctrl = readl(an_control);
+	if (enable)
+		ctrl |= GMAC_AN_CTRL_ELE;
+	else
+		ctrl &= ~GMAC_AN_CTRL_ELE;
+	writel(ctrl, an_control);
+
+	return 0;
+}
+
 static const struct phylink_pcs_ops dwmac_integrated_pcs_ops = {
 	.pcs_inband_caps = dwmac_integrated_pcs_inband_caps,
 	.pcs_enable = dwmac_integrated_pcs_enable,
@@ -175,6 +191,7 @@ static const struct phylink_pcs_ops dwmac_integrated_pcs_ops = {
 	.pcs_get_state = dwmac_integrated_pcs_get_state,
 	.pcs_config = dwmac_integrated_pcs_config,
 	.pcs_an_restart = dwmac_integrated_pcs_an_restart,
+	.pcs_loopback = dwmac_integrated_pcs_loopback,
 };
 
 void stmmac_integrated_pcs_irq(struct stmmac_priv *priv, u32 status,
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
index 29e824bd90ca6b..77a457b2fa5cf7 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
@@ -19,6 +19,7 @@
 #include <net/udp.h>
 #include <net/tc_act/tc_gact.h>
 #include "stmmac.h"
+#include "stmmac_pcs.h"
 
 struct stmmachdr {
 	__be32 version;
@@ -374,23 +375,51 @@ static int stmmac_test_mac_loopback(struct stmmac_priv *priv)
 	return __stmmac_test_loopback(priv, &attr);
 }
 
+static struct phylink_pcs *stmmac_selftest_get_pcs(struct stmmac_priv *priv)
+{
+	/* Try glue driver's PCS first, then the integrated PCS. */
+	if (priv->hw->phylink_pcs)
+		return priv->hw->phylink_pcs;
+
+	if (priv->integrated_pcs)
+		return &priv->integrated_pcs->pcs;
+
+	return NULL;
+}
+
 static int stmmac_test_phy_loopback(struct stmmac_priv *priv)
 {
 	struct stmmac_packet_attrs attr = { };
+	struct phylink_pcs *pcs;
 	int ret;
 
-	if (!priv->dev->phydev)
-		return -EOPNOTSUPP;
+	if (priv->dev->phydev) {
+		ret = phy_loopback(priv->dev->phydev, true, 0);
+		if (ret)
+			return ret;
 
-	ret = phy_loopback(priv->dev->phydev, true, 0);
-	if (ret)
+		attr.dst = priv->dev->dev_addr;
+		ret = __stmmac_test_loopback(priv, &attr);
+
+		phy_loopback(priv->dev->phydev, false, 0);
 		return ret;
+	}
 
-	attr.dst = priv->dev->dev_addr;
-	ret = __stmmac_test_loopback(priv, &attr);
+	/* Use PCS loopback for interfaces without an external PHY. */
+	pcs = stmmac_selftest_get_pcs(priv);
+	if (pcs) {
+		ret = phylink_pcs_loopback(pcs, true);
+		if (ret)
+			return ret;
 
-	phy_loopback(priv->dev->phydev, false, 0);
-	return ret;
+		attr.dst = priv->dev->dev_addr;
+		ret = __stmmac_test_loopback(priv, &attr);
+
+		phylink_pcs_loopback(pcs, false);
+		return ret;
+	}
+
+	return -EOPNOTSUPP;
 }
 
 static int stmmac_test_mmc(struct stmmac_priv *priv)
@@ -1986,6 +2015,9 @@ void stmmac_selftest_run(struct net_device *dev,
 			ret = -EOPNOTSUPP;
 			if (dev->phydev)
 				ret = phy_loopback(dev->phydev, true, 0);
+			else
+				ret = phylink_pcs_loopback(stmmac_selftest_get_pcs(priv),
+							   true);
 			if (!ret)
 				break;
 			fallthrough;
@@ -2019,6 +2051,9 @@ void stmmac_selftest_run(struct net_device *dev,
 			ret = -EOPNOTSUPP;
 			if (dev->phydev)
 				ret = phy_loopback(dev->phydev, false, 0);
+			else
+				ret = phylink_pcs_loopback(stmmac_selftest_get_pcs(priv),
+							   false);
 			if (!ret)
 				break;
 			fallthrough;
diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c
index 59dfe35afa54fc..69242caffaef51 100644
--- a/drivers/net/phy/phylink.c
+++ b/drivers/net/phy/phylink.c
@@ -997,6 +997,25 @@ int phylink_pcs_pre_init(struct phylink *pl, struct phylink_pcs *pcs)
 }
 EXPORT_SYMBOL_GPL(phylink_pcs_pre_init);
 
+/**
+ * phylink_pcs_loopback() - Enable or disable loopback at the PCS
+ * @pcs: a pointer to a &struct phylink_pcs.
+ * @enable: true to enable loopback, false to disable
+ *
+ * Enable or disable loopback mode at the PCS level. This is used by MAC
+ * drivers for selftest purposes when no external PHY is present.
+ *
+ * Returns 0 on success, negative error code on failure.
+ */
+int phylink_pcs_loopback(struct phylink_pcs *pcs, bool enable)
+{
+	if (pcs && pcs->ops->pcs_loopback)
+		return pcs->ops->pcs_loopback(pcs, enable);
+
+	return -EOPNOTSUPP;
+}
+EXPORT_SYMBOL_GPL(phylink_pcs_loopback);
+
 static void phylink_mac_config(struct phylink *pl,
 			       const struct phylink_link_state *state)
 {
diff --git a/include/linux/phylink.h b/include/linux/phylink.h
index 2bc0db3d52ac8d..66c7016d4acdcb 100644
--- a/include/linux/phylink.h
+++ b/include/linux/phylink.h
@@ -518,6 +518,7 @@ struct phylink_pcs {
  *		    the MAC.
  * @pcs_pre_init: configure PCS components necessary for MAC hardware
  *                initialization e.g. RX clock for stmmac.
+ * @pcs_loopback: enable/disable loopback mode at the PCS.
  */
 struct phylink_pcs_ops {
 	int (*pcs_validate)(struct phylink_pcs *pcs, unsigned long *supported,
@@ -542,6 +543,7 @@ struct phylink_pcs_ops {
 	void (*pcs_disable_eee)(struct phylink_pcs *pcs);
 	void (*pcs_enable_eee)(struct phylink_pcs *pcs);
 	int (*pcs_pre_init)(struct phylink_pcs *pcs);
+	int (*pcs_loopback)(struct phylink_pcs *pcs, bool enable);
 };
 
 #if 0 /* For kernel-doc purposes only. */
@@ -717,8 +719,22 @@ void pcs_enable_eee(struct phylink_pcs *pcs);
  */
 int pcs_pre_init(struct phylink_pcs *pcs);
 
+/**
+ * pcs_loopback() - Enable or disable loopback at the PCS
+ * @pcs: a pointer to a &struct phylink_pcs.
+ * @enable: true to enable loopback, false to disable
+ *
+ * Enable or disable loopback mode at the PCS level. This is used by MAC
+ * drivers for selftest purposes when no external PHY is present.
+ *
+ * Returns 0 on success, or a negative error code on failure.
+ */
+int pcs_loopback(struct phylink_pcs *pcs, bool enable);
+
 #endif
 
+int phylink_pcs_loopback(struct phylink_pcs *pcs, bool enable);
+
 struct phylink *phylink_create(struct phylink_config *,
 			       const struct fwnode_handle *,
 			       phy_interface_t,

3/2 2026/07/28 00:54 llm patch-evaluator
1m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 4464
							output: 20
							thoughts: 707
						

Thoughts:
**Fuzzing Potential of a New PCS Loopback Operation**

Okay, so I've got this patch introducing a `pcs_loopback` operation within `phylink_pcs_ops` and specifically implementing it for `dwmac_integrated_pcs_loopback` in `stmmac_pcs.c`.  It's also being used within `stmmac_selftests.c` when we're not dealing with an external PHY. The code touches a few files: `stmmac_pcs.c`, `stmmac_selftests.c`, `phylink.c`, and the `phylink.h` include file.  My immediate thought is, "Can we fuzz this?"

The changes are within the STMicroelectronics stmmac Ethernet driver and phylink, right? The stmmac driver is for the Synopsys DesignWare MAC, which is usually hardware-specific. That's the first hurdle – is this code even reachable in a virtualized or emulated environment?  stmmac is a platform driver primarily, but it *does* have a PCI wrapper (`stmmac_pci.c`). That's interesting; it's a good sign.  The question is, can stmmac be emulated, or is it purely reliant on hardware?

Ah, right, looking more closely, the stmmac PCI driver claims to support some Intel platforms, like Quark and Apollo Lake. That's promising for potential fuzzing. Generally, hardware-specific Ethernet drivers are difficult to fuzz unless they have a virtual device component or are part of a more widely emulated PCI device. However, this patch *does* trigger `stmmac_selftests.c` via the ethtool selftest mechanism. That's a good entry point.

Okay, is stmmac emulated in QEMU? QEMU doesn't seem to have stmmac support out of the box, but maybe there's something relevant?  Let me see... QEMU has emulations for a bunch of other network cards: `imx_fec`, `cadence_gem`, `igb`, `e1000`, `rtl8139`, `tulip`, `vmxnet3`, `sungem`, `sunhme`, `pcnet`, `ne2000`, and `eepro100`. But stmmac specifically? Wait, QEMU *does* emulate "designware" Ethernet! The file `hw/net/designware.c` exists. That's a huge clue.

Now, does the `stmmac` driver actually bind to the QEMU `designware` emulation? QEMU's `designware` is a platform device, which means it would typically be used on certain ARM boards like `mcimx6ul-evk`, `sifive_u` or `allwinner-h3`. But syzkaller generally works best with PCI devices or virtual devices. So, does stmmac have PCI support?

Let me check `drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c`...



4/2 2026/07/28 00:55 tool grepper
0m Args:
{
  "Expression": "stmmac_pci"
}

Results:
{
  "Output": "Documentation/networking/device_drivers/ethernet/stmicro/stmmac.rst=107=syntax (e.g. for PCI module)::\nDocumentation/networking/device_drivers/ethernet/stmicro/stmmac.rst-108-\nDocumentation/networking/device_drivers/ethernet/stmicro/stmmac.rst:109:    modprobe stmmac_pci [\u003coption\u003e=\u003cVAL1\u003e,\u003cVAL2\u003e,...]\nDocumentation/networking/device_drivers/ethernet/stmicro/stmmac.rst-110-\n--\ndrivers/net/ethernet/stmicro/stmmac/Makefile=53=obj-$(CONFIG_DWMAC_MOTORCOMM)\t+= dwmac-motorcomm.o\ndrivers/net/ethernet/stmicro/stmmac/Makefile:54:stmmac-pci-objs:= stmmac_pci.o\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=25=struct intel_priv_data {\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-39- */\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:40:struct stmmac_pci_func_data {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-41-\tunsigned int func;\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-44-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:45:struct stmmac_pci_dmi_data {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:46:\tconst struct stmmac_pci_func_data *func;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-47-\tsize_t nfuncs;\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-49-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:50:struct stmmac_pci_info {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-51-\tint (*setup)(struct pci_dev *pdev, struct plat_stmmacenet_data *plat);\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=91=static const int adln_tsn_lane_regs[] = {6};\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-92-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:93:static int stmmac_pci_find_phy_addr(struct pci_dev *pdev,\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-94-\t\t\t\t    const struct dmi_system_id *dmi_list)\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-95-{\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:96:\tconst struct stmmac_pci_func_data *func_data;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:97:\tconst struct stmmac_pci_dmi_data *dmi_data;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-98-\tconst struct dmi_system_id *dmi_id;\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=755=static int ehl_sgmii_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-774-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:775:static struct stmmac_pci_info ehl_sgmii1g_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-776-\t.setup = ehl_sgmii_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=779=static int ehl_rgmii_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-789-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:790:static struct stmmac_pci_info ehl_rgmii1g_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-791-\t.setup = ehl_rgmii_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=810=static int ehl_pse0_rgmii1g_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-816-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:817:static struct stmmac_pci_info ehl_pse0_rgmii1g_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-818-\t.setup = ehl_pse0_rgmii1g_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=821=static int ehl_pse0_sgmii1g_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-838-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:839:static struct stmmac_pci_info ehl_pse0_sgmii1g_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-840-\t.setup = ehl_pse0_sgmii1g_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=859=static int ehl_pse1_rgmii1g_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-865-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:866:static struct stmmac_pci_info ehl_pse1_rgmii1g_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-867-\t.setup = ehl_pse1_rgmii1g_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=870=static int ehl_pse1_sgmii1g_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-887-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:888:static struct stmmac_pci_info ehl_pse1_sgmii1g_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-889-\t.setup = ehl_pse1_sgmii1g_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=913=static int tgl_sgmii_phy0_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-921-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:922:static struct stmmac_pci_info tgl_sgmii1g_phy0_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-923-\t.setup = tgl_sgmii_phy0_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=926=static int tgl_sgmii_phy1_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-934-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:935:static struct stmmac_pci_info tgl_sgmii1g_phy1_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-936-\t.setup = tgl_sgmii_phy1_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=939=static int adls_sgmii_phy0_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-948-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:949:static struct stmmac_pci_info adls_sgmii1g_phy0_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-950-\t.setup = adls_sgmii_phy0_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=953=static int adls_sgmii_phy1_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-962-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:963:static struct stmmac_pci_info adls_sgmii1g_phy1_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-964-\t.setup = adls_sgmii_phy1_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=992=static int adln_sgmii_phy0_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1010-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:1011:static struct stmmac_pci_info adln_sgmii1g_phy0_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1012-\t.setup = adln_sgmii_phy0_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1014-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:1015:static const struct stmmac_pci_func_data galileo_stmmac_func_data[] = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1016-\t{\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1021-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:1022:static const struct stmmac_pci_dmi_data galileo_stmmac_dmi_data = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1023-\t.func = galileo_stmmac_func_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1026-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:1027:static const struct stmmac_pci_func_data iot2040_stmmac_func_data[] = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1028-\t{\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1037-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:1038:static const struct stmmac_pci_dmi_data iot2040_stmmac_dmi_data = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1039-\t.func = iot2040_stmmac_func_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=1078=static int quark_default_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1088-\t */\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:1089:\tret = stmmac_pci_find_phy_addr(pdev, quark_pci_dmi);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1090-\tif (ret \u003c 0) {\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1113-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:1114:static const struct stmmac_pci_info quark_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1115-\t.setup = quark_default_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=1232=static int intel_eth_pci_probe(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1234-{\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:1235:\tstruct stmmac_pci_info *info = (struct stmmac_pci_info *)id-\u003edriver_data;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1236-\tstruct intel_priv_data *intel_priv;\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c=76=struct loongson_data {\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-81-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c:82:struct stmmac_pci_info {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-83-\tint (*setup)(struct pci_dev *pdev, struct plat_stmmacenet_data *plat);\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c=132=static int loongson_gmac_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-141-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c:142:static struct stmmac_pci_info loongson_gmac_pci_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-143-\t.setup = loongson_gmac_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c=165=static int loongson_gnet_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-176-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c:177:static struct stmmac_pci_info loongson_gnet_pci_info = {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-178-\t.setup = loongson_gnet_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c=498=static int loongson_dwmac_probe(struct pci_dev *pdev, const struct pci_device_id *id)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-501-\tstruct stmmac_resources res = {};\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c:502:\tstruct stmmac_pci_info *info;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-503-\tstruct loongson_data *ld;\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-537-\tplat-\u003efix_soc_reset = loongson_dwmac_fix_reset;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c:538:\tplat-\u003esuspend = stmmac_pci_plat_suspend;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c:539:\tplat-\u003eresume = stmmac_pci_plat_resume;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-540-\tld-\u003edev = \u0026pdev-\u003edev;\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-542-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c:543:\tinfo = (struct stmmac_pci_info *)id-\u003edriver_data;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-544-\tret = info-\u003esetup(pdev, plat);\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.c=188=static int motorcomm_resume(struct device *dev, void *bsp_priv)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.c-192-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.c:193:\tret = stmmac_pci_plat_resume(dev, bsp_priv);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.c-194-\tif (ret)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.c=208=motorcomm_default_plat_data(struct pci_dev *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.c-248-\tplat-\u003ecore_type\t\t= DWMAC_CORE_GMAC4;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.c:249:\tplat-\u003esuspend\t\t= stmmac_pci_plat_suspend;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.c-250-\tplat-\u003eresume\t\t= motorcomm_resume;\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.c-11-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.c:12:int stmmac_pci_plat_suspend(struct device *dev, void *bsp_priv)\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.c-13-{\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.c-25-}\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.c:26:EXPORT_SYMBOL_GPL(stmmac_pci_plat_suspend);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.c-27-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.c:28:int stmmac_pci_plat_resume(struct device *dev, void *bsp_priv)\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.c-29-{\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.c-43-}\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.c:44:EXPORT_SYMBOL_GPL(stmmac_pci_plat_resume);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.c-45-\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.h-8-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.h:9:int stmmac_pci_plat_suspend(struct device *dev, void *bsp_priv);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.h:10:int stmmac_pci_plat_resume(struct device *dev, void *bsp_priv);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_libpci.h-11-\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-18-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:19:struct stmmac_pci_info {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-20-\tint (*setup)(struct pci_dev *pdev, struct plat_stmmacenet_data *plat);\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c=33=static int stmmac_default_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-49-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:50:static const struct stmmac_pci_info stmmac_pci_info = {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-51-\t.setup = stmmac_default_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c=54=static int snps_gmac5_default_data(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-101-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:102:static const struct stmmac_pci_info snps_gmac5_pci_info = {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-103-\t.setup = snps_gmac5_default_data,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-106-/**\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:107: * stmmac_pci_probe\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-108- *\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-117- */\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:118:static int stmmac_pci_probe(struct pci_dev *pdev,\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-119-\t\t\t    const struct pci_device_id *id)\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-120-{\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:121:\tstruct stmmac_pci_info *info = (struct stmmac_pci_info *)id-\u003edriver_data;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-122-\tstruct plat_stmmacenet_data *plat;\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-179-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:180:\tplat-\u003esuspend = stmmac_pci_plat_suspend;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:181:\tplat-\u003eresume = stmmac_pci_plat_resume;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-182-\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-186-/**\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:187: * stmmac_pci_remove\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-188- *\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-191- */\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:192:static void stmmac_pci_remove(struct pci_dev *pdev)\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-193-{\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c=203=static const struct pci_device_id stmmac_id_table[] = {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:204:\t{ PCI_DEVICE_DATA(STMMAC, STMMAC, \u0026stmmac_pci_info) },\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:205:\t{ PCI_DEVICE_DATA(STMICRO, MAC, \u0026stmmac_pci_info) },\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-206-\t{ PCI_DEVICE_DATA(SYNOPSYS, GMAC5_ID, \u0026snps_gmac5_pci_info) },\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c=210=MODULE_DEVICE_TABLE(pci, stmmac_id_table);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-211-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:212:static struct pci_driver stmmac_pci_driver = {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-213-\t.name = STMMAC_RESOURCE_NAME,\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-214-\t.id_table = stmmac_id_table,\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:215:\t.probe = stmmac_pci_probe,\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:216:\t.remove = stmmac_pci_remove,\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-217-\t.driver         = {\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-221-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:222:module_pci_driver(stmmac_pci_driver);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-223-\n"
}

5/2 2026/07/28 00:55 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 13225
							output: 56
							thoughts: 390
						

Thoughts:
**Fuzzing the `stmmac` PCI Driver with PCS Loopback**

Okay, so I'm looking at this patch for the `stmmac_pci` driver. Right, it's a PCI driver, so it binds to PCI devices. The core of this seems to be the addition of this `dwmac_integrated_pcs_loopback` function, which is then used in `stmmac_selftests.c`. The selftest itself is invoked via `ethtool -t`, which is important because I know syzkaller can trigger that through netlink or ioctl. That's immediately interesting, could this be a fuzzing target?

The patch is introducing a loopback capability for the integrated PCS, which implies a functional change within the driver itself. But hang on, does it modify core kernel logic? Ah, yes, it *does*. It modifies `phylink.c` and adds `phylink_pcs_loopback` and `pcs_loopback` to `struct phylink_pcs_ops`. This looks like a new API specifically within `phylink`. And specifically, it *implements* it for `stmmac`.

The next important question is, can this be triggered in a virtualized environment? If `stmmac` isn't emulated, that part will be unreachable. But then again, `phylink_pcs_loopback` is exported. That means other drivers could potentially use this new functionality in the future, even though currently, only `stmmac` is doing so. It broadens the scope of what is being changed, though, so it's worth deeper consideration.

Now, does QEMU emulate any of the PCI IDs that the `stmmac` driver handles? Let me check which PCI IDs it binds to. Looks like: `PCI_DEVICE_DATA(STMMAC, STMMAC, &stmmac_pci_info)`, `PCI_DEVICE_DATA(STMICRO, MAC, &stmmac_pci_info)`, and `PCI_DEVICE_DATA(SYNOPSYS, GMAC5_ID, &snps_gmac5_pci_info)`. Right, I'll need to check `include/linux/pci_ids.h` to see how those translate and whether any of those are emulated within QEMU. That's the next step to figure out the reachability of this new API.



6/2 2026/07/28 00:55 tool grepper
0m Args:
{
  "Expression": "PCI_DEVICE_ID_STMMAC_STMMAC|PCI_DEVICE_ID_STMICRO_MAC|PCI_DEVICE_ID_SYNOPSYS_GMAC5_ID"
}

Results:
{
  "Output": "drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c=192=static void stmmac_pci_remove(struct pci_dev *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-199-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:200:#define PCI_DEVICE_ID_STMMAC_STMMAC\t\t0x1108\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:201:#define PCI_DEVICE_ID_SYNOPSYS_GMAC5_ID\t\t0x7102\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-202-\n--\ninclude/linux/pci_ids.h-861-#define PCI_DEVICE_ID_STMICRO_SPI_HS\t0xCC08\ninclude/linux/pci_ids.h:862:#define PCI_DEVICE_ID_STMICRO_MAC\t0xCC09\ninclude/linux/pci_ids.h-863-#define PCI_DEVICE_ID_STMICRO_SDIO_EMMC 0xCC0A\n"
}

7/2 2026/07/28 00:55 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 14522
							output: 21
							thoughts: 367
						

Thoughts:
**My Syzkaller PCI Fuzzing Perspective**

Okay, so I'm thinking about Syzkaller's approach to PCI device fuzzing. My initial thought was that `syz_pci_setup` could potentially emulate arbitrary PCI devices, as long as the kernel had a corresponding driver. But that's not quite right. It seems Syzkaller doesn't directly emulate the hardware MMIO registers.

It appears Syzkaller *does* have a `vhci/pci` pseudo-device which injects PCI devices, but it's not the same as full emulation, right? So, `syz_pci_setup` isn't used to *inject* devices. It's more of a configuration tool, setting things up, and if the driver is making MMIO reads/writes, it's just dealing with dummy memory, potentially returning zeros or ones, or causing a crash if the driver needs specific hardware responses.

Hold on, I thought Syzkaller had *some* form of PCI device emulator? No, that's not it either. The PCI fuzzing, whether it’s through `syz_pci_setup` or even through `syz_kvm_setup_cpu`, is primarily aimed at either the PCI core itself or drivers robust enough to handle the dummy MMIO behavior. So, not a full emulator, really.

So it is not correct to claim Syzkaller emulates PCI drivers through vhci, it uses the `pci_test` framework or something similar, right? No, not quite. The correct idea is that `syz_pci_setup` injects a PCI device, either through a custom kernel module or maybe leveraging QEMU's `pci-testdev`.

Wait, isn't `syz_pci_setup` not a pseudo-syscall? Aha! Right, it's a Syzkaller function, not a system call in itself. I need to make sure I get that straight. Let me double-check. I see it in `sys/linux/pci.txt`. Right.



8/2 2026/07/28 00:55 tool grepper
0m Error:
no matches

Args:
{
  "Expression": "syz_pci_setup"
}

Results:
{
  "error": "no matches"
}

9/2 2026/07/28 00:55 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 15370
							output: 21
							thoughts: 306
						

Thoughts:
**My Line of Reasoning**

Okay, first things first, I need to ditch the idea of using grepper to find something related to `syz_`. My intuition is telling me that I should be using `read-file` or perhaps I just need to remember that Syzkaller's PCI hardware emulation isn't very robust, especially for arbitrary devices. It heavily depends on QEMU, which in turn might not emulate the exact STMMAC PCI device I'm interested in, potentially leading to driver probe failures or, more importantly, skipping the selftest code.

Wait a minute, isn't `stmmac` also a platform driver? So, does QEMU emulate it?

Ah, right, QEMU *does* have `hw/net/designware.c`. That's encouraging. Now, I need to figure out if Syzkaller actually leverages QEMU's DesignWare Ethernet implementation.

Let's see... Syzkaller typically runs `qemu-system-x86_64` with a specific device configuration – e1000, e1000e, rtl8139, vmxnet3, and virtio-net. It's not usually configured with ARM boards where `designware` would be present.

Hold on, there's that `phylink` change I need to take into account.

Okay, the patch adds `phylink_pcs_loopback`. Is `phylink` even *reachable* in the Syzkaller context? Yes, absolutely. Plenty of drivers use `phylink`.

But the crucial detail here is that `phylink_pcs_loopback` appears to be called only from `stmmac_selftests.c` in *this* specific patch.

So, let's broaden the scope and check if *any* other driver calls `phylink_pcs_loopback`.



10/2 2026/07/28 00:55 tool grepper
0m Args:
{
  "Expression": "phylink_pcs_loopback"
}

Results:
{
  "Output": "drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c=390=static int stmmac_test_phy_loopback(struct stmmac_priv *priv)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c-410-\tif (pcs) {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c:411:\t\tret = phylink_pcs_loopback(pcs, true);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c-412-\t\tif (ret)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c-417-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c:418:\t\tphylink_pcs_loopback(pcs, false);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c-419-\t\treturn ret;\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c=1987=void stmmac_selftest_run(struct net_device *dev,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c-2018-\t\t\telse\ndrivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c:2019:\t\t\t\tret = phylink_pcs_loopback(stmmac_selftest_get_pcs(priv),\ndrivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c-2020-\t\t\t\t\t\t\t   true);\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c-2054-\t\t\telse\ndrivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c:2055:\t\t\t\tret = phylink_pcs_loopback(stmmac_selftest_get_pcs(priv),\ndrivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c-2056-\t\t\t\t\t\t\t   false);\n--\ndrivers/net/phy/phylink.c=998=EXPORT_SYMBOL_GPL(phylink_pcs_pre_init);\n--\ndrivers/net/phy/phylink.c-1000-/**\ndrivers/net/phy/phylink.c:1001: * phylink_pcs_loopback() - Enable or disable loopback at the PCS\ndrivers/net/phy/phylink.c-1002- * @pcs: a pointer to a \u0026struct phylink_pcs.\n--\ndrivers/net/phy/phylink.c-1009- */\ndrivers/net/phy/phylink.c:1010:int phylink_pcs_loopback(struct phylink_pcs *pcs, bool enable)\ndrivers/net/phy/phylink.c-1011-{\n--\ndrivers/net/phy/phylink.c-1016-}\ndrivers/net/phy/phylink.c:1017:EXPORT_SYMBOL_GPL(phylink_pcs_loopback);\ndrivers/net/phy/phylink.c-1018-\n--\ninclude/linux/phylink.h=732=int pcs_loopback(struct phylink_pcs *pcs, bool enable);\n--\ninclude/linux/phylink.h-735-\ninclude/linux/phylink.h:736:int phylink_pcs_loopback(struct phylink_pcs *pcs, bool enable);\ninclude/linux/phylink.h-737-\n"
}

11/2 2026/07/28 00:55 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 17040
							output: 17
							thoughts: 571
						

Thoughts:
**My Assessment of the `stmmac` Code Reachability**

Okay, so I'm focusing on this `stmmac` driver. The immediate thought is, this code path only gets used by `stmmac`. Now, the key is whether it's reachable in standard QEMU x86_64 environments, which is crucial because that's what syzkaller uses. If `stmmac` is inaccessible, then the code, by definition, is unreachable.

Wait a second, does syzkaller even *fuzz* `stmmac`? I need to verify that. I'll need to check the syzkaller configuration for `stmmac` enablement or reachability. Let's see... does syzkaller have `CONFIG_STMMAC_ETH=y` or `CONFIG_STMMAC_PCI=y` set in its configs? If so, that's a good sign. Okay, it seems that there's PCI support enabled.

If `CONFIG_STMMAC_PCI=y` is set, then the driver is likely present, but is it *reachable*? Can syzkaller inject PCI devices? There's no generic `syz_pci_setup` pseudo-syscall, but it does have `syz_usb_connect`. So PCI is different: syzkaller relies on QEMU's emulated devices for PCI.

Right, syzkaller is using `qemu-system-x86_64`, so now the question is: does QEMU emulate the `STMMAC` PCI device? No, it doesn't. However, wasn't there something about recent PCI fuzzing capabilities added to syzkaller? No, that was mostly USB and some virtual devices.

Here's the problem: what if the patch is buried in a driver that requires physical hardware not emulated by standard QEMU? Ah, the document mentions "vendor-specific PCIe switch, SmartNIC, or GPU drivers (e.g., mlxsw, pds_core, qed, ionic, amdgpu) that require physical PCIe hardware cards not emulated in standard QEMU."

Is `stmmac` a vendor-specific hardware driver? It's the Synopsys DesignWare MAC, which is usually found on SoCs (ARM, etc.) or some Intel platforms like Quark or Elkhart Lake, so I'd say that is correct. It needs physical hardware or, at the very least, specific SoC emulation. Since syzkaller runs in x86_64 QEMU, it won't have those platform devices. Specifically, regarding the PCI version, QEMU doesn't emulate the Intel Quark or Elkhart Lake STMMAC PCI devices.

Therefore, the `stmmac` driver probe is extremely unlikely to succeed, and the selftest code in question is likely never reached. But wait, it's worth seeing if there is any chance that the driver gets fuzzed. It's time to check if there are any existing syzbot bugs reported for `stmmac`.



12/2 2026/07/28 00:55 tool grepper
0m Args:
{
  "Expression": "stmmac"
}

Results:
{
  "Output": "\nFull output is too long, showing 500 out of 14090 lines.\nUse more precise expression if possible.\n\nDocumentation/.renames.txt=823=networking/device_drivers/qualcomm/rmnet networking/device_drivers/cellular/qualcomm/rmnet\nDocumentation/.renames.txt:824:networking/device_drivers/stmicro/stmmac networking/device_drivers/ethernet/stmicro/stmmac\nDocumentation/.renames.txt-825-networking/device_drivers/ti/cpsw networking/device_drivers/ethernet/ti/cpsw\n--\nDocumentation/devicetree/bindings/net/allwinner,sun7i-a20-gmac.yaml=16=properties:\n--\nDocumentation/devicetree/bindings/net/allwinner,sun7i-a20-gmac.yaml-35-    items:\nDocumentation/devicetree/bindings/net/allwinner,sun7i-a20-gmac.yaml:36:      - const: stmmaceth\nDocumentation/devicetree/bindings/net/allwinner,sun7i-a20-gmac.yaml-37-      - const: allwinner_gmac_tx\n--\nDocumentation/devicetree/bindings/net/allwinner,sun7i-a20-gmac.yaml=54=examples:\n--\nDocumentation/devicetree/bindings/net/allwinner,sun7i-a20-gmac.yaml-61-        clocks = \u003c\u0026ahb_gates 49\u003e, \u003c\u0026gmac_tx\u003e;\nDocumentation/devicetree/bindings/net/allwinner,sun7i-a20-gmac.yaml:62:        clock-names = \"stmmaceth\", \"allwinner_gmac_tx\";\nDocumentation/devicetree/bindings/net/allwinner,sun7i-a20-gmac.yaml-63-        phy-mode = \"mii\";\n--\nDocumentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml=28=properties:\n--\nDocumentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml-63-    items:\nDocumentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml:64:      - const: stmmaceth\nDocumentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml-65-      - const: mbus\n--\nDocumentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml=255=examples:\n--\nDocumentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml-263-        resets = \u003c\u0026ccu 12\u003e;\nDocumentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml:264:        reset-names = \"stmmaceth\";\nDocumentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml-265-        clocks = \u003c\u0026ccu 27\u003e;\nDocumentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml:266:        clock-names = \"stmmaceth\";\nDocumentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml-267-\n--\nDocumentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml-314-        resets = \u003c\u0026ccu 12\u003e;\nDocumentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml:315:        reset-names = \"stmmaceth\";\nDocumentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml-316-        clocks = \u003c\u0026ccu 27\u003e;\nDocumentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml:317:        clock-names = \"stmmaceth\";\nDocumentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml-318-\n--\nDocumentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml-367-        resets = \u003c\u0026ccu 13\u003e;\nDocumentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml:368:        reset-names = \"stmmaceth\";\nDocumentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml-369-        clocks = \u003c\u0026ccu 27\u003e;\nDocumentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml:370:        clock-names = \"stmmaceth\";\nDocumentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml-371-        phy-handle = \u003c\u0026ext_rgmii_phy1\u003e;\n--\nDocumentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml-390-        clocks = \u003c\u0026ccu 117\u003e, \u003c\u0026ccu 79\u003e;\nDocumentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml:391:        clock-names = \"stmmaceth\", \"mbus\";\nDocumentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml-392-        resets = \u003c\u0026ccu 43\u003e;\nDocumentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml:393:        reset-names = \"stmmaceth\";\nDocumentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml-394-        interrupts = \u003c0 47 4\u003e;\n--\nDocumentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml-402-        snps,fixed-burst;\nDocumentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml:403:        snps,axi-config = \u003c\u0026gmac1_stmmac_axi_setup\u003e;\nDocumentation/devicetree/bindings/net/allwinner,sun8i-a83t-emac.yaml-404-\n--\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml-3----\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml:4:$id: http://devicetree.org/schemas/net/altr,socfpga-stmmac.yaml#\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml-5-$schema: http://devicetree.org/meta-schemas/core.yaml#\n--\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml=12=description:\n--\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml-15-  families of chips.\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml:16:  # TODO: Determine how to handle the Arria10 reset-name, stmmaceth-ocp, that\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml-17-  # does not validate against net/snps,dwmac.yaml.\n--\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml=19=select:\n--\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml-23-        enum:\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml:24:          - altr,socfpga-stmmac\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml:25:          - altr,socfpga-stmmac-a10-s10\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml:26:          - altr,socfpga-stmmac-agilex5\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml-27-\n--\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml=31=properties:\n--\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml-34-      - items:\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml:35:          - const: altr,socfpga-stmmac\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml-36-          - const: snps,dwmac-3.70a\n--\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml-38-      - items:\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml:39:          - const: altr,socfpga-stmmac-a10-s10\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml-40-          - const: snps,dwmac-3.72a\n--\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml-42-      - items:\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml:43:          - const: altr,socfpga-stmmac-a10-s10\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml-44-          - const: snps,dwmac-3.74a\n--\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml-46-      - items:\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml:47:          - const: altr,socfpga-stmmac-agilex5\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml-48-          - const: snps,dwxgmac-2.10\n--\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml-61-    items:\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml:62:      - const: stmmaceth\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml-63-      - const: ptp_ref\n--\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml=158=examples:\n--\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml-166-        ethernet@ff700000 {\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml:167:            compatible = \"altr,socfpga-stmmac\", \"snps,dwmac-3.70a\",\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml-168-            \"snps,dwmac\";\n--\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml-174-            clocks = \u003c\u0026emac_0_clk\u003e;\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml:175:            clock-names = \"stmmaceth\";\nDocumentation/devicetree/bindings/net/altr,socfpga-stmmac.yaml-176-            phy-mode = \"sgmii\";\n--\nDocumentation/devicetree/bindings/net/amlogic,meson-dwmac.yaml=29=allOf:\n--\nDocumentation/devicetree/bindings/net/amlogic,meson-dwmac.yaml-54-          items:\nDocumentation/devicetree/bindings/net/amlogic,meson-dwmac.yaml:55:            - const: stmmaceth\nDocumentation/devicetree/bindings/net/amlogic,meson-dwmac.yaml-56-            - const: clkin0\n--\nDocumentation/devicetree/bindings/net/amlogic,meson-dwmac.yaml=172=examples:\n--\nDocumentation/devicetree/bindings/net/amlogic,meson-dwmac.yaml-179-        clocks = \u003c\u0026clk_eth\u003e, \u003c\u0026clk_fclk_div2\u003e, \u003c\u0026clk_mpll2\u003e, \u003c\u0026clk_fclk_div2\u003e;\nDocumentation/devicetree/bindings/net/amlogic,meson-dwmac.yaml:180:        clock-names = \"stmmaceth\", \"clkin0\", \"clkin1\", \"timing-adjustment\";\nDocumentation/devicetree/bindings/net/amlogic,meson-dwmac.yaml-181-        phy-mode = \"rgmii\";\n--\nDocumentation/devicetree/bindings/net/anarion-gmac.txt-2-\nDocumentation/devicetree/bindings/net/anarion-gmac.txt:3:This device is a platform glue layer for stmmac.\nDocumentation/devicetree/bindings/net/anarion-gmac.txt:4:Please see stmmac.txt for the other unchanged properties.\nDocumentation/devicetree/bindings/net/anarion-gmac.txt-5-\n--\nDocumentation/devicetree/bindings/net/anarion-gmac.txt=11=Examples:\n--\nDocumentation/devicetree/bindings/net/anarion-gmac.txt-21-\t\tclocks = \u003c\u0026core_clk\u003e;\nDocumentation/devicetree/bindings/net/anarion-gmac.txt:22:\t\tclock-names = \"stmmaceth\";\nDocumentation/devicetree/bindings/net/anarion-gmac.txt-23-\n--\nDocumentation/devicetree/bindings/net/eswin,eic7700-eth.yaml=48=properties:\n--\nDocumentation/devicetree/bindings/net/eswin,eic7700-eth.yaml-75-      - const: cfg\nDocumentation/devicetree/bindings/net/eswin,eic7700-eth.yaml:76:      - const: stmmaceth\nDocumentation/devicetree/bindings/net/eswin,eic7700-eth.yaml-77-      - const: tx\n--\nDocumentation/devicetree/bindings/net/eswin,eic7700-eth.yaml-83-    items:\nDocumentation/devicetree/bindings/net/eswin,eic7700-eth.yaml:84:      - const: stmmaceth\nDocumentation/devicetree/bindings/net/eswin,eic7700-eth.yaml-85-\n--\nDocumentation/devicetree/bindings/net/eswin,eic7700-eth.yaml=137=examples:\n--\nDocumentation/devicetree/bindings/net/eswin,eic7700-eth.yaml-146-                \u003c\u0026d0_clock 193\u003e;\nDocumentation/devicetree/bindings/net/eswin,eic7700-eth.yaml:147:        clock-names = \"axi\", \"cfg\", \"stmmaceth\", \"tx\";\nDocumentation/devicetree/bindings/net/eswin,eic7700-eth.yaml-148-        resets = \u003c\u0026reset 95\u003e;\nDocumentation/devicetree/bindings/net/eswin,eic7700-eth.yaml:149:        reset-names = \"stmmaceth\";\nDocumentation/devicetree/bindings/net/eswin,eic7700-eth.yaml-150-        eswin,hsp-sp-csr = \u003c\u0026hsp_sp_csr 0x100 0x108 0x118 0x114 0x11c\u003e;\n--\nDocumentation/devicetree/bindings/net/eswin,eic7700-eth.yaml-155-        snps,tso;\nDocumentation/devicetree/bindings/net/eswin,eic7700-eth.yaml:156:        snps,axi-config = \u003c\u0026stmmac_axi_setup\u003e;\nDocumentation/devicetree/bindings/net/eswin,eic7700-eth.yaml-157-\nDocumentation/devicetree/bindings/net/eswin,eic7700-eth.yaml:158:        stmmac_axi_setup: stmmac-axi-config {\nDocumentation/devicetree/bindings/net/eswin,eic7700-eth.yaml-159-            snps,blen = \u003c0 0 0 0 16 8 4\u003e;\n--\nDocumentation/devicetree/bindings/net/eswin,eic7700-eth.yaml-172-                \u003c\u0026d0_clock 194\u003e;\nDocumentation/devicetree/bindings/net/eswin,eic7700-eth.yaml:173:        clock-names = \"axi\", \"cfg\", \"stmmaceth\", \"tx\";\nDocumentation/devicetree/bindings/net/eswin,eic7700-eth.yaml-174-        resets = \u003c\u0026reset 94\u003e;\nDocumentation/devicetree/bindings/net/eswin,eic7700-eth.yaml:175:        reset-names = \"stmmaceth\";\nDocumentation/devicetree/bindings/net/eswin,eic7700-eth.yaml-176-        eswin,hsp-sp-csr = \u003c\u0026hsp_sp_csr 0x200 0x208 0x218 0x214 0x21c\u003e;\n--\nDocumentation/devicetree/bindings/net/eswin,eic7700-eth.yaml-181-        snps,tso;\nDocumentation/devicetree/bindings/net/eswin,eic7700-eth.yaml:182:        snps,axi-config = \u003c\u0026stmmac_axi_setup_gmac1\u003e;\nDocumentation/devicetree/bindings/net/eswin,eic7700-eth.yaml-183-\nDocumentation/devicetree/bindings/net/eswin,eic7700-eth.yaml:184:        stmmac_axi_setup_gmac1: stmmac-axi-config {\nDocumentation/devicetree/bindings/net/eswin,eic7700-eth.yaml-185-            snps,blen = \u003c0 0 0 0 16 8 4\u003e;\n--\nDocumentation/devicetree/bindings/net/ingenic,mac.yaml=15=properties:\n--\nDocumentation/devicetree/bindings/net/ingenic,mac.yaml-36-  clock-names:\nDocumentation/devicetree/bindings/net/ingenic,mac.yaml:37:    const: stmmaceth\nDocumentation/devicetree/bindings/net/ingenic,mac.yaml-38-\n--\nDocumentation/devicetree/bindings/net/ingenic,mac.yaml=60=examples:\n--\nDocumentation/devicetree/bindings/net/ingenic,mac.yaml-72-        clocks = \u003c\u0026cgu X1000_CLK_MAC\u003e;\nDocumentation/devicetree/bindings/net/ingenic,mac.yaml:73:        clock-names = \"stmmaceth\";\nDocumentation/devicetree/bindings/net/ingenic,mac.yaml-74-\n--\nDocumentation/devicetree/bindings/net/intel,dwmac-plat.yaml=24=properties:\n--\nDocumentation/devicetree/bindings/net/intel,dwmac-plat.yaml-39-    items:\nDocumentation/devicetree/bindings/net/intel,dwmac-plat.yaml:40:      - const: stmmaceth\nDocumentation/devicetree/bindings/net/intel,dwmac-plat.yaml-41-      - const: ptp_ref\n--\nDocumentation/devicetree/bindings/net/intel,dwmac-plat.yaml=57=examples:\n--\nDocumentation/devicetree/bindings/net/intel,dwmac-plat.yaml-66-\nDocumentation/devicetree/bindings/net/intel,dwmac-plat.yaml:67:    stmmac_axi_setup: stmmac-axi-config {\nDocumentation/devicetree/bindings/net/intel,dwmac-plat.yaml-68-        snps,lpi_en;\n--\nDocumentation/devicetree/bindings/net/intel,dwmac-plat.yaml-115-        tx-fifo-depth = \u003c4096\u003e;\nDocumentation/devicetree/bindings/net/intel,dwmac-plat.yaml:116:        clock-names = \"stmmaceth\", \"ptp_ref\", \"tx_clk\";\nDocumentation/devicetree/bindings/net/intel,dwmac-plat.yaml-117-        clocks = \u003c\u0026scmi_clk MOVISOC_KMB_PSS_GBE\u003e,\n--\nDocumentation/devicetree/bindings/net/intel,dwmac-plat.yaml-120-        snps,pbl = \u003c0x4\u003e;\nDocumentation/devicetree/bindings/net/intel,dwmac-plat.yaml:121:        snps,axi-config = \u003c\u0026stmmac_axi_setup\u003e;\nDocumentation/devicetree/bindings/net/intel,dwmac-plat.yaml-122-        snps,mtl-rx-config = \u003c\u0026mtl_rx_setup\u003e;\n--\nDocumentation/devicetree/bindings/net/ipq806x-dwmac.txt-2-\nDocumentation/devicetree/bindings/net/ipq806x-dwmac.txt:3:The device inherits all the properties of the dwmac/stmmac devices\nDocumentation/devicetree/bindings/net/ipq806x-dwmac.txt:4:described in the file net/stmmac.txt with the following changes.\nDocumentation/devicetree/bindings/net/ipq806x-dwmac.txt-5-\nDocumentation/devicetree/bindings/net/ipq806x-dwmac.txt=6=Required properties:\n--\nDocumentation/devicetree/bindings/net/ipq806x-dwmac.txt-9-\t      and any applicable more detailed version number\nDocumentation/devicetree/bindings/net/ipq806x-dwmac.txt:10:\t      described in net/stmmac.txt\nDocumentation/devicetree/bindings/net/ipq806x-dwmac.txt-11-\n--\nDocumentation/devicetree/bindings/net/ipq806x-dwmac.txt=18=Example:\n--\nDocumentation/devicetree/bindings/net/ipq806x-dwmac.txt-30-\t\tclocks = \u003c\u0026gcc GMAC_CORE1_CLK\u003e;\nDocumentation/devicetree/bindings/net/ipq806x-dwmac.txt:31:\t\tclock-names = \"stmmaceth\";\nDocumentation/devicetree/bindings/net/ipq806x-dwmac.txt-32-\nDocumentation/devicetree/bindings/net/ipq806x-dwmac.txt-33-\t\tresets = \u003c\u0026gcc GMAC_CORE1_RESET\u003e;\nDocumentation/devicetree/bindings/net/ipq806x-dwmac.txt:34:\t\treset-names = \"stmmaceth\";\nDocumentation/devicetree/bindings/net/ipq806x-dwmac.txt-35-\t};\n--\nDocumentation/devicetree/bindings/net/loongson,ls1b-gmac.yaml=34=properties:\n--\nDocumentation/devicetree/bindings/net/loongson,ls1b-gmac.yaml-48-    items:\nDocumentation/devicetree/bindings/net/loongson,ls1b-gmac.yaml:49:      - const: stmmaceth\nDocumentation/devicetree/bindings/net/loongson,ls1b-gmac.yaml-50-\n--\nDocumentation/devicetree/bindings/net/loongson,ls1b-gmac.yaml=83=examples:\n--\nDocumentation/devicetree/bindings/net/loongson,ls1b-gmac.yaml-92-        clocks = \u003c\u0026clkc LS1X_CLKID_AHB\u003e;\nDocumentation/devicetree/bindings/net/loongson,ls1b-gmac.yaml:93:        clock-names = \"stmmaceth\";\nDocumentation/devicetree/bindings/net/loongson,ls1b-gmac.yaml-94-\n--\nDocumentation/devicetree/bindings/net/loongson,ls1c-emac.yaml=33=properties:\n--\nDocumentation/devicetree/bindings/net/loongson,ls1c-emac.yaml-47-    items:\nDocumentation/devicetree/bindings/net/loongson,ls1c-emac.yaml:48:      - const: stmmaceth\nDocumentation/devicetree/bindings/net/loongson,ls1c-emac.yaml-49-\n--\nDocumentation/devicetree/bindings/net/loongson,ls1c-emac.yaml=82=examples:\n--\nDocumentation/devicetree/bindings/net/loongson,ls1c-emac.yaml-91-        clocks = \u003c\u0026clkc LS1X_CLKID_AHB\u003e;\nDocumentation/devicetree/bindings/net/loongson,ls1c-emac.yaml:92:        clock-names = \"stmmaceth\";\nDocumentation/devicetree/bindings/net/loongson,ls1c-emac.yaml-93-\n--\nDocumentation/devicetree/bindings/net/mediatek-dwmac.yaml=12=description:\nDocumentation/devicetree/bindings/net/mediatek-dwmac.yaml:13:  This file documents platform glue layer for stmmac.\nDocumentation/devicetree/bindings/net/mediatek-dwmac.yaml-14-\n--\nDocumentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml=28=properties:\n--\nDocumentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml-48-    items:\nDocumentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml:49:      - const: stmmaceth\nDocumentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml-50-      - const: ptp_ref\n--\nDocumentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml-69-    items:\nDocumentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml:70:      - const: stmmaceth\nDocumentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml-71-\n--\nDocumentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml=108=examples:\n--\nDocumentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml-118-        clocks = \u003c\u0026clk EMAC0_GATE\u003e, \u003c\u0026clk EPLL_DIV8\u003e;\nDocumentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml:119:        clock-names = \"stmmaceth\", \"ptp_ref\";\nDocumentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml-120-\n--\nDocumentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml-122-        resets = \u003c\u0026sys MA35D1_RESET_GMAC0\u003e;\nDocumentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml:123:        reset-names = \"stmmaceth\";\nDocumentation/devicetree/bindings/net/nuvoton,ma35d1-dwmac.yaml-124-        snps,multicast-filter-bins = \u003c0\u003e;\n--\nDocumentation/devicetree/bindings/net/nxp,dwmac-imx.yaml=29=properties:\n--\nDocumentation/devicetree/bindings/net/nxp,dwmac-imx.yaml-52-      enum:\nDocumentation/devicetree/bindings/net/nxp,dwmac-imx.yaml:53:        - stmmaceth\nDocumentation/devicetree/bindings/net/nxp,dwmac-imx.yaml-54-        - pclk\n--\nDocumentation/devicetree/bindings/net/nxp,dwmac-imx.yaml=93=examples:\n--\nDocumentation/devicetree/bindings/net/nxp,dwmac-imx.yaml-108-                     \u003c\u0026clk IMX8MP_CLK_ENET_QOS\u003e;\nDocumentation/devicetree/bindings/net/nxp,dwmac-imx.yaml:109:            clock-names = \"stmmaceth\", \"pclk\", \"ptp_ref\", \"tx\";\nDocumentation/devicetree/bindings/net/nxp,dwmac-imx.yaml-110-            phy-mode = \"rgmii\";\n--\nDocumentation/devicetree/bindings/net/nxp,lpc1850-dwmac.yaml=22=properties:\n--\nDocumentation/devicetree/bindings/net/nxp,lpc1850-dwmac.yaml-37-    items:\nDocumentation/devicetree/bindings/net/nxp,lpc1850-dwmac.yaml:38:      - const: stmmaceth\nDocumentation/devicetree/bindings/net/nxp,lpc1850-dwmac.yaml-39-\n--\nDocumentation/devicetree/bindings/net/nxp,lpc1850-dwmac.yaml-51-    items:\nDocumentation/devicetree/bindings/net/nxp,lpc1850-dwmac.yaml:52:      - const: stmmaceth\nDocumentation/devicetree/bindings/net/nxp,lpc1850-dwmac.yaml-53-\n--\nDocumentation/devicetree/bindings/net/nxp,lpc1850-dwmac.yaml=67=examples:\n--\nDocumentation/devicetree/bindings/net/nxp,lpc1850-dwmac.yaml-76-        clocks = \u003c\u0026ccu1 CLK_CPU_ETHERNET\u003e;\nDocumentation/devicetree/bindings/net/nxp,lpc1850-dwmac.yaml:77:        clock-names = \"stmmaceth\";\nDocumentation/devicetree/bindings/net/nxp,lpc1850-dwmac.yaml-78-        resets = \u003c\u0026rgu 22\u003e;\nDocumentation/devicetree/bindings/net/nxp,lpc1850-dwmac.yaml:79:        reset-names = \"stmmaceth\";\nDocumentation/devicetree/bindings/net/nxp,lpc1850-dwmac.yaml-80-        rx-fifo-depth = \u003c256\u003e;\n--\nDocumentation/devicetree/bindings/net/nxp,s32-dwmac.yaml=22=properties:\n--\nDocumentation/devicetree/bindings/net/nxp,s32-dwmac.yaml-78-    items:\nDocumentation/devicetree/bindings/net/nxp,s32-dwmac.yaml:79:      - const: stmmaceth\nDocumentation/devicetree/bindings/net/nxp,s32-dwmac.yaml-80-      - const: tx\n--\nDocumentation/devicetree/bindings/net/nxp,s32-dwmac.yaml=93=examples:\n--\nDocumentation/devicetree/bindings/net/nxp,s32-dwmac.yaml-132-        clocks = \u003c\u0026clks 24\u003e, \u003c\u0026clks 17\u003e, \u003c\u0026clks 16\u003e, \u003c\u0026clks 15\u003e;\nDocumentation/devicetree/bindings/net/nxp,s32-dwmac.yaml:133:        clock-names = \"stmmaceth\", \"tx\", \"rx\", \"ptp_ref\";\nDocumentation/devicetree/bindings/net/nxp,s32-dwmac.yaml-134-        phy-mode = \"rgmii-id\";\n--\nDocumentation/devicetree/bindings/net/qcom,ethqos.yaml=20=properties:\n--\nDocumentation/devicetree/bindings/net/qcom,ethqos.yaml-41-    items:\nDocumentation/devicetree/bindings/net/qcom,ethqos.yaml:42:      - const: stmmaceth\nDocumentation/devicetree/bindings/net/qcom,ethqos.yaml-43-      - const: rgmii\n--\nDocumentation/devicetree/bindings/net/qcom,ethqos.yaml-63-    items:\nDocumentation/devicetree/bindings/net/qcom,ethqos.yaml:64:      - const: stmmaceth\nDocumentation/devicetree/bindings/net/qcom,ethqos.yaml-65-      - const: pclk\n--\nDocumentation/devicetree/bindings/net/qcom,ethqos.yaml=97=examples:\n--\nDocumentation/devicetree/bindings/net/qcom,ethqos.yaml-106-            \u003c0x07a96000 0x100\u003e;\nDocumentation/devicetree/bindings/net/qcom,ethqos.yaml:107:      reg-names = \"stmmaceth\", \"rgmii\";\nDocumentation/devicetree/bindings/net/qcom,ethqos.yaml:108:      clock-names = \"stmmaceth\", \"pclk\", \"ptp_ref\", \"rgmii\";\nDocumentation/devicetree/bindings/net/qcom,ethqos.yaml-109-      clocks = \u003c\u0026gcc GCC_ETH_AXI_CLK\u003e,\n--\nDocumentation/devicetree/bindings/net/renesas,rzn1-gmac.yaml=52=examples:\n--\nDocumentation/devicetree/bindings/net/renesas,rzn1-gmac.yaml-63-      interrupt-names = \"macirq\", \"eth_wake_irq\", \"eth_lpi\";\nDocumentation/devicetree/bindings/net/renesas,rzn1-gmac.yaml:64:      clock-names = \"stmmaceth\";\nDocumentation/devicetree/bindings/net/renesas,rzn1-gmac.yaml-65-      clocks = \u003c\u0026sysctrl R9A06G032_HCLK_GMAC0\u003e;\n--\nDocumentation/devicetree/bindings/net/renesas,rzv2h-gbeth.yaml=26=properties:\n--\nDocumentation/devicetree/bindings/net/renesas,rzv2h-gbeth.yaml-73-      - items:\nDocumentation/devicetree/bindings/net/renesas,rzv2h-gbeth.yaml:74:          - const: stmmaceth\nDocumentation/devicetree/bindings/net/renesas,rzv2h-gbeth.yaml-75-          - const: pclk\n--\nDocumentation/devicetree/bindings/net/renesas,rzv2h-gbeth.yaml-87-      - items:\nDocumentation/devicetree/bindings/net/renesas,rzv2h-gbeth.yaml:88:          - const: stmmaceth\nDocumentation/devicetree/bindings/net/renesas,rzv2h-gbeth.yaml-89-          - const: pclk\n--\nDocumentation/devicetree/bindings/net/renesas,rzv2h-gbeth.yaml=249=examples:\n--\nDocumentation/devicetree/bindings/net/renesas,rzv2h-gbeth.yaml-260-                  \u003c\u0026cpg CPG_MOD 0xbb\u003e;\nDocumentation/devicetree/bindings/net/renesas,rzv2h-gbeth.yaml:261:        clock-names = \"stmmaceth\", \"pclk\", \"ptp_ref\",\nDocumentation/devicetree/bindings/net/renesas,rzv2h-gbeth.yaml-262-                      \"tx\", \"rx\", \"tx-180\", \"rx-180\";\n--\nDocumentation/devicetree/bindings/net/renesas,rzv2h-gbeth.yaml-285-        snps,force_thresh_dma_mode;\nDocumentation/devicetree/bindings/net/renesas,rzv2h-gbeth.yaml:286:        snps,axi-config = \u003c\u0026stmmac_axi_setup\u003e;\nDocumentation/devicetree/bindings/net/renesas,rzv2h-gbeth.yaml-287-        snps,mtl-rx-config = \u003c\u0026mtl_rx_setup\u003e;\n--\nDocumentation/devicetree/bindings/net/renesas,rzv2h-gbeth.yaml-292-\nDocumentation/devicetree/bindings/net/renesas,rzv2h-gbeth.yaml:293:        stmmac_axi_setup: stmmac-axi-config {\nDocumentation/devicetree/bindings/net/renesas,rzv2h-gbeth.yaml-294-            snps,lpi_en;\n--\nDocumentation/devicetree/bindings/net/rockchip-dwmac.yaml=37=properties:\n--\nDocumentation/devicetree/bindings/net/rockchip-dwmac.yaml-78-      enum:\nDocumentation/devicetree/bindings/net/rockchip-dwmac.yaml:79:        - stmmaceth\nDocumentation/devicetree/bindings/net/rockchip-dwmac.yaml-80-        - mac_clk_tx\n--\nDocumentation/devicetree/bindings/net/rockchip-dwmac.yaml=164=examples:\n--\nDocumentation/devicetree/bindings/net/rockchip-dwmac.yaml-177-                 \u003c\u0026cru ACLK_GMAC\u003e, \u003c\u0026cru PCLK_GMAC\u003e;\nDocumentation/devicetree/bindings/net/rockchip-dwmac.yaml:178:        clock-names = \"stmmaceth\",\nDocumentation/devicetree/bindings/net/rockchip-dwmac.yaml-179-                      \"mac_clk_rx\", \"mac_clk_tx\",\n--\nDocumentation/devicetree/bindings/net/snps,dwc-qos-ethernet.txt=3=This binding is deprecated, but it continues to be supported, but new\nDocumentation/devicetree/bindings/net/snps,dwc-qos-ethernet.txt:4:features should be preferably added to the stmmac binding document.\nDocumentation/devicetree/bindings/net/snps,dwc-qos-ethernet.txt-5-\n--\nDocumentation/devicetree/bindings/net/snps,dwmac.yaml=46=properties:\n--\nDocumentation/devicetree/bindings/net/snps,dwmac.yaml-168-      enum:\nDocumentation/devicetree/bindings/net/snps,dwmac.yaml:169:        - stmmaceth\nDocumentation/devicetree/bindings/net/snps,dwmac.yaml-170-        - pclk\n--\nDocumentation/devicetree/bindings/net/snps,dwmac.yaml-175-    items:\nDocumentation/devicetree/bindings/net/snps,dwmac.yaml:176:      - description: GMAC stmmaceth reset\nDocumentation/devicetree/bindings/net/snps,dwmac.yaml-177-      - description: AHB reset\n--\nDocumentation/devicetree/bindings/net/snps,dwmac.yaml-181-      - items:\nDocumentation/devicetree/bindings/net/snps,dwmac.yaml:182:          - enum: [stmmaceth, ahb]\nDocumentation/devicetree/bindings/net/snps,dwmac.yaml-183-      - items:\nDocumentation/devicetree/bindings/net/snps,dwmac.yaml:184:          - const: stmmaceth\nDocumentation/devicetree/bindings/net/snps,dwmac.yaml-185-          - const: ahb\n--\nDocumentation/devicetree/bindings/net/snps,dwmac.yaml-560-\nDocumentation/devicetree/bindings/net/snps,dwmac.yaml:561:  stmmac-axi-config:\nDocumentation/devicetree/bindings/net/snps,dwmac.yaml-562-    type: object\n--\nDocumentation/devicetree/bindings/net/snps,dwmac.yaml=654=examples:\n--\nDocumentation/devicetree/bindings/net/snps,dwmac.yaml-669-        clocks = \u003c\u0026clock\u003e;\nDocumentation/devicetree/bindings/net/snps,dwmac.yaml:670:        clock-names = \"stmmaceth\";\nDocumentation/devicetree/bindings/net/snps,dwmac.yaml:671:        snps,axi-config = \u003c\u0026stmmac_axi_setup\u003e;\nDocumentation/devicetree/bindings/net/snps,dwmac.yaml-672-        snps,mtl-rx-config = \u003c\u0026mtl_rx_setup\u003e;\n--\nDocumentation/devicetree/bindings/net/snps,dwmac.yaml-674-\nDocumentation/devicetree/bindings/net/snps,dwmac.yaml:675:        stmmac_axi_setup: stmmac-axi-config {\nDocumentation/devicetree/bindings/net/snps,dwmac.yaml-676-            snps,wr_osr_lmt = \u003c0xf\u003e;\n--\nDocumentation/devicetree/bindings/net/sophgo,cv1800b-dwmac.yaml=21=properties:\n--\nDocumentation/devicetree/bindings/net/sophgo,cv1800b-dwmac.yaml-36-    items:\nDocumentation/devicetree/bindings/net/sophgo,cv1800b-dwmac.yaml:37:      - const: stmmaceth\nDocumentation/devicetree/bindings/net/sophgo,cv1800b-dwmac.yaml-38-      - const: ptp_ref\n--\nDocumentation/devicetree/bindings/net/sophgo,cv1800b-dwmac.yaml-49-  reset-names:\nDocumentation/devicetree/bindings/net/sophgo,cv1800b-dwmac.yaml:50:    const: stmmaceth\nDocumentation/devicetree/bindings/net/sophgo,cv1800b-dwmac.yaml-51-\n--\nDocumentation/devicetree/bindings/net/sophgo,cv1800b-dwmac.yaml=67=examples:\n--\nDocumentation/devicetree/bindings/net/sophgo,cv1800b-dwmac.yaml-74-      clocks = \u003c\u0026clk 35\u003e, \u003c\u0026clk 36\u003e;\nDocumentation/devicetree/bindings/net/sophgo,cv1800b-dwmac.yaml:75:      clock-names = \"stmmaceth\", \"ptp_ref\";\nDocumentation/devicetree/bindings/net/sophgo,cv1800b-dwmac.yaml-76-      interrupts = \u003c31 IRQ_TYPE_LEVEL_HIGH\u003e;\n--\nDocumentation/devicetree/bindings/net/sophgo,cv1800b-dwmac.yaml-80-      resets = \u003c\u0026rst 12\u003e;\nDocumentation/devicetree/bindings/net/sophgo,cv1800b-dwmac.yaml:81:      reset-names = \"stmmaceth\";\nDocumentation/devicetree/bindings/net/sophgo,cv1800b-dwmac.yaml-82-      rx-fifo-depth = \u003c8192\u003e;\n--\nDocumentation/devicetree/bindings/net/sophgo,cv1800b-dwmac.yaml-90-      snps,mtl-tx-config = \u003c\u0026gmac0_mtl_tx_setup\u003e;\nDocumentation/devicetree/bindings/net/sophgo,cv1800b-dwmac.yaml:91:      snps,axi-config = \u003c\u0026gmac0_stmmac_axi_setup\u003e;\nDocumentation/devicetree/bindings/net/sophgo,cv1800b-dwmac.yaml-92-\n--\nDocumentation/devicetree/bindings/net/sophgo,cv1800b-dwmac.yaml-108-\nDocumentation/devicetree/bindings/net/sophgo,cv1800b-dwmac.yaml:109:      gmac0_stmmac_axi_setup: stmmac-axi-config {\nDocumentation/devicetree/bindings/net/sophgo,cv1800b-dwmac.yaml-110-        snps,blen = \u003c16 8 4 0 0 0 0\u003e;\n--\nDocumentation/devicetree/bindings/net/sophgo,sg2044-dwmac.yaml=22=properties:\n--\nDocumentation/devicetree/bindings/net/sophgo,sg2044-dwmac.yaml-42-    items:\nDocumentation/devicetree/bindings/net/sophgo,sg2044-dwmac.yaml:43:      - const: stmmaceth\nDocumentation/devicetree/bindings/net/sophgo,sg2044-dwmac.yaml-44-      - const: ptp_ref\n--\nDocumentation/devicetree/bindings/net/sophgo,sg2044-dwmac.yaml-58-  reset-names:\nDocumentation/devicetree/bindings/net/sophgo,sg2044-dwmac.yaml:59:    const: stmmaceth\nDocumentation/devicetree/bindings/net/sophgo,sg2044-dwmac.yaml-60-\n--\nDocumentation/devicetree/bindings/net/sophgo,sg2044-dwmac.yaml=95=examples:\n--\nDocumentation/devicetree/bindings/net/sophgo,sg2044-dwmac.yaml-102-      clocks = \u003c\u0026clk 151\u003e, \u003c\u0026clk 152\u003e, \u003c\u0026clk 154\u003e;\nDocumentation/devicetree/bindings/net/sophgo,sg2044-dwmac.yaml:103:      clock-names = \"stmmaceth\", \"ptp_ref\", \"tx\";\nDocumentation/devicetree/bindings/net/sophgo,sg2044-dwmac.yaml-104-      interrupt-parent = \u003c\u0026intc\u003e;\n--\nDocumentation/devicetree/bindings/net/sophgo,sg2044-dwmac.yaml-109-      resets = \u003c\u0026rst 30\u003e;\nDocumentation/devicetree/bindings/net/sophgo,sg2044-dwmac.yaml:110:      reset-names = \"stmmaceth\";\nDocumentation/devicetree/bindings/net/sophgo,sg2044-dwmac.yaml-111-      snps,multicast-filter-bins = \u003c0\u003e;\n--\nDocumentation/devicetree/bindings/net/sophgo,sg2044-dwmac.yaml-118-      snps,mtl-tx-config = \u003c\u0026gmac0_mtl_tx_setup\u003e;\nDocumentation/devicetree/bindings/net/sophgo,sg2044-dwmac.yaml:119:      snps,axi-config = \u003c\u0026gmac0_stmmac_axi_setup\u003e;\nDocumentation/devicetree/bindings/net/sophgo,sg2044-dwmac.yaml-120-\n--\nDocumentation/devicetree/bindings/net/sophgo,sg2044-dwmac.yaml-145-\nDocumentation/devicetree/bindings/net/sophgo,sg2044-dwmac.yaml:146:      gmac0_stmmac_axi_setup: stmmac-axi-config {\nDocumentation/devicetree/bindings/net/sophgo,sg2044-dwmac.yaml-147-        snps,blen = \u003c16 8 4 0 0 0 0\u003e;\n--\nDocumentation/devicetree/bindings/net/spacemit,k3-dwmac.yaml=20=properties:\n--\nDocumentation/devicetree/bindings/net/spacemit,k3-dwmac.yaml-36-    items:\nDocumentation/devicetree/bindings/net/spacemit,k3-dwmac.yaml:37:      - const: stmmaceth\nDocumentation/devicetree/bindings/net/spacemit,k3-dwmac.yaml-38-      - const: ptp_ref\n--\nDocumentation/devicetree/bindings/net/spacemit,k3-dwmac.yaml-56-  reset-names:\nDocumentation/devicetree/bindings/net/spacemit,k3-dwmac.yaml:57:    const: stmmaceth\nDocumentation/devicetree/bindings/net/spacemit,k3-dwmac.yaml-58-\n--\nDocumentation/devicetree/bindings/net/spacemit,k3-dwmac.yaml=85=examples:\n--\nDocumentation/devicetree/bindings/net/spacemit,k3-dwmac.yaml-93-               \u003c\u0026syscon_apmu 69\u003e;\nDocumentation/devicetree/bindings/net/spacemit,k3-dwmac.yaml:94:      clock-names = \"stmmaceth\", \"ptp_ref\", \"tx\";\nDocumentation/devicetree/bindings/net/spacemit,k3-dwmac.yaml-95-      interrupts = \u003c131 IRQ_TYPE_LEVEL_HIGH\u003e, \u003c276 IRQ_TYPE_LEVEL_HIGH\u003e;\n--\nDocumentation/devicetree/bindings/net/spacemit,k3-dwmac.yaml-99-      resets = \u003c\u0026syscon_apmu 67\u003e;\nDocumentation/devicetree/bindings/net/spacemit,k3-dwmac.yaml:100:      reset-names = \"stmmaceth\";\nDocumentation/devicetree/bindings/net/spacemit,k3-dwmac.yaml-101-      spacemit,apmu = \u003c\u0026syscon_apmu 0x384 0x38c\u003e;\n--\nDocumentation/devicetree/bindings/net/starfive,jh7110-dwmac.yaml=24=properties:\n--\nDocumentation/devicetree/bindings/net/starfive,jh7110-dwmac.yaml-53-    items:\nDocumentation/devicetree/bindings/net/starfive,jh7110-dwmac.yaml:54:      - const: stmmaceth\nDocumentation/devicetree/bindings/net/starfive,jh7110-dwmac.yaml-55-      - const: pclk\n--\nDocumentation/devicetree/bindings/net/starfive,jh7110-dwmac.yaml=88=allOf:\n--\nDocumentation/devicetree/bindings/net/starfive,jh7110-dwmac.yaml-134-          reset-names:\nDocumentation/devicetree/bindings/net/starfive,jh7110-dwmac.yaml:135:            const: stmmaceth\nDocumentation/devicetree/bindings/net/starfive,jh7110-dwmac.yaml-136-      else:\n--\nDocumentation/devicetree/bindings/net/starfive,jh7110-dwmac.yaml=154=examples:\n--\nDocumentation/devicetree/bindings/net/starfive,jh7110-dwmac.yaml-160-                 \u003c\u0026clk 6\u003e, \u003c\u0026clk 111\u003e;\nDocumentation/devicetree/bindings/net/starfive,jh7110-dwmac.yaml:161:        clock-names = \"stmmaceth\", \"pclk\", \"ptp_ref\",\nDocumentation/devicetree/bindings/net/starfive,jh7110-dwmac.yaml-162-                      \"tx\", \"gtx\";\nDocumentation/devicetree/bindings/net/starfive,jh7110-dwmac.yaml-163-        resets = \u003c\u0026rst 1\u003e, \u003c\u0026rst 2\u003e;\nDocumentation/devicetree/bindings/net/starfive,jh7110-dwmac.yaml:164:        reset-names = \"stmmaceth\", \"ahb\";\nDocumentation/devicetree/bindings/net/starfive,jh7110-dwmac.yaml-165-        interrupts = \u003c7\u003e, \u003c6\u003e, \u003c5\u003e;\n--\nDocumentation/devicetree/bindings/net/starfive,jh7110-dwmac.yaml-175-        snps,force_thresh_dma_mode;\nDocumentation/devicetree/bindings/net/starfive,jh7110-dwmac.yaml:176:        snps,axi-config = \u003c\u0026stmmac_axi_setup\u003e;\nDocumentation/devicetree/bindings/net/starfive,jh7110-dwmac.yaml-177-        snps,en-tx-lpi-clockgating;\n--\nDocumentation/devicetree/bindings/net/starfive,jh7110-dwmac.yaml-192-\nDocumentation/devicetree/bindings/net/starfive,jh7110-dwmac.yaml:193:        stmmac_axi_setup: stmmac-axi-config {\nDocumentation/devicetree/bindings/net/starfive,jh7110-dwmac.yaml-194-            snps,lpi_en;\n\n"
}

13/2 2026/07/28 00:56 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 32128
							output: 21
							thoughts: 58
						

Thoughts:
**Investigating Syzkaller's Coverage of `stmmac`**

Okay, my initial observation is that I'm seeing `stmmac` mentioned within device tree bindings. That immediately makes me think of its prevalence in the ARM and RISC-V System-on-Chips landscape. It's a common Ethernet MAC driver, so its widespread use makes it an interesting target.

My next line of thought: is syzkaller already fuzzing this particular driver? That's the crux of the matter. My goal is to determine the current state of syzkaller's testing efforts against it.

Therefore, my immediate action is to search for any existing syzbot reports related to `stmmac`. This will give me a quick understanding of whether it's already on syzkaller's radar, whether it's yielding any interesting crashes or bugs, and if not, where I might need to focus my own fuzzing efforts. I need that baseline information.



14/2 2026/07/28 00:56 tool grepper
0m Error:
no matches

Args:
{
  "Expression": "syzbot.*stmmac"
}

Results:
{
  "error": "no matches"
}

15/2 2026/07/28 00:56 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 32426
							output: 20
							thoughts: 17
						

Thoughts:
Okay, here's my summary, framed as my internal thought process:

**Syzbot Report Check for dwmac**

Alright, time to get started. My initial focus is going to be on the `dwmac` driver. Specifically, I need to check for any recent syzbot reports related to it. That's always a good starting point to identify any potential new regressions or lurking bugs that might need attention. A quick scan of syzbot's database for `dwmac` reports will give me a good baseline. I'm expecting this to either be a quick yes/no, if something obvious pops up, or will require a deeper dive if there are reports. Let's see what the automated systems have found for me!



16/2 2026/07/28 00:56 tool grepper
0m Error:
no matches

Args:
{
  "Expression": "syzbot.*dwmac"
}

Results:
{
  "error": "no matches"
}

17/2 2026/07/28 00:56 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 32633
							output: 20
							thoughts: 17
						

Thoughts:
Here's my thought process, summarized as you requested:

**Checking for Phylink Syzbot Reports**

Okay, time to see what's brewing in the world of `phylink` and syzbot. I need to quickly scan for any recent reports associated with that subsystem. This is a crucial first step in my workflow. Syzbot is invaluable for identifying regressions and issues before they become widespread. I need to quickly assess if there are any new, potentially critical, failures popping up. The status of this subsystem is important for stability, especially as more advanced networking solutions are built on it. I need to know where I should prioritize my efforts. Let's get to it.



18/2 2026/07/28 00:56 tool grepper
0m Error:
no matches

Args:
{
  "Expression": "syzbot.*phylink"
}

Results:
{
  "error": "no matches"
}

19/2 2026/07/28 00:56 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 32827
							output: 23
							thoughts: 709
						

Thoughts:
**Analyzing Syzkaller's Potential for Testing a PHY Loopback Patch**

Okay, first things first, the commit author is `syz-cluster <triage@syzkaller.com>`.  That's my starting point. This patch was tested by syzkaller.  But, I have to ask myself, is the code actually being hit by the fuzzer?

The patch adds `phylink_pcs_loopback` and `dwmac_integrated_pcs_loopback`. My immediate concern is whether syzkaller *can* even reach this code path. If the `stmmac` driver, which seems related, isn't reachable, then this is all `WorthFuzzing=false`.

Now, I seem to remember `stmmac` has a PCI driver. The question then becomes, does syzkaller have a way to probe it? Does it have some `syz_pci_setup` call I'm missing? Nope. Ah, wait, isn't there something about fuzzing PCI devices? Yes! Ok, good.

The next step is to check if `stmmac_pci` is compiled into syzkaller's default configuration. I can't look at syzkaller's config directly, but I can check for reachability.

If `stmmac_pci` *is* probed, it'll call `stmmac_pci_probe`, which calls `stmmac_dvr_probe`.  And then, if the user runs `ethtool -t`, it will call `stmmac_selftest_run`, which calls `stmmac_test_phy_loopback`. If no external PHY is present, it will call `phylink_pcs_loopback(stmmac_selftest_get_pcs(priv), true)`.  This leads to `pcs->ops->pcs_loopback(pcs, enable)`, which is `dwmac_integrated_pcs_loopback`.  So, the critical question is: is it possible to reach the `stmmac_test_phy_loopback` *without* physical hardware?

I'm thinking, if syzkaller can inject a PCI device with the vendor ID `PCI_DEVICE_ID_STMMAC_STMMAC` (0x1108), the driver *should* probe. But here's the kicker: The driver does MMIO reads and writes.

Looking at `stmmac_pci_probe`, for example:
```c
pcim_iomap_regions(pdev, BIT(0), pci_name(pdev))
plat->bsp_priv = pdev;
stmmac_dvr_probe(&pdev->dev, plat, &res);
```

And in `stmmac_dvr_probe`:
```c
priv->ioaddr = res->addr;
```

This reads from `priv->ioaddr`. If that MMIO memory is just dummy data (all 0s, all 1s), the driver *might* fail to probe, or it might succeed if it's not super strict about the read values.

Hang on…  `stmmac_dvr_probe` *also* calls `stmmac_hw_setup`, and *that* reads the MAC version:

```c
priv->synopsys_id = stmmac_get_mac_version(priv, priv->ioaddr);
```

If it reads 0 or 0xffffffff, it might fail to correctly identify the MAC and return an error. Now, let's look at `stmmac_get_mac_version` to see...



20/2 2026/07/28 00:56 tool grepper
0m Error:
no matches

Args:
{
  "Expression": "stmmac_get_mac_version"
}

Results:
{
  "error": "no matches"
}

21/2 2026/07/28 00:56 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 34371
							output: 19
							thoughts: 18
						

Thoughts:
Okay, here's my attempt at summarizing those thoughts from a first-person, expert perspective, aiming for a fulsome rendering:

**Internal Investigation - Query Formulation**

Alright, time to get to work. First thing's first: what's the most likely avenue to uncover the information I need? I'm thinking I'll start with the most specific identifiers that might be available to me. I need to figure out how to track down this crucial data. Let me begin by searching for some potential keys. I'll focus on terms related to the system in question, perhaps I can use `mac_version` to start. That should provide some information to allow me to track it down. If that doesn't yield anything immediately promising, I'll need to broaden my search and try something more general, but still relevant. Perhaps `synopsys_id` would be more universal. I'll try that if the first approach hits a dead end. Okay, let's see what these queries turn up and I can determine what steps I need to take to gain the information.



22/2 2026/07/28 00:56 tool grepper
0m Args:
{
  "Expression": "synopsys_id"
}

Results:
{
  "Output": "drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c=306=static int loongson_dwmac_setup(void *apriv, struct mac_device_info *mac)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-328-\tif (ld-\u003emultichan) {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c:329:\t\tpriv-\u003esynopsys_id = DWMAC_CORE_3_70;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-330-\t\t*dma = dwmac1000_dma_ops;\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c=1043=static int sun8i_dwmac_setup(void *ppriv, struct mac_device_info *mac)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c-1071-\t/* Synopsys Id is not available */\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c:1072:\tpriv-\u003esynopsys_id = 0;\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c-1073-\n--\ndrivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c=352=static int dwxgmac2_get_hw_feature(void __iomem *ioaddr,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c-382-\tdma_cap-\u003embps_1000 = (hw_cap \u0026 XGMAC_HWFEAT_GMIISEL) \u003e\u003e 1;\ndrivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c:383:\tif (dma_cap-\u003embps_1000 \u0026\u0026 priv-\u003esynopsys_id \u003e= DWXGMAC_CORE_2_20)\ndrivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c-384-\t\tdma_cap-\u003embps_10_100 = 1;\n--\ndrivers/net/ethernet/stmicro/stmmac/hwif.c=69=static int stmmac_dwmac1_quirks(struct stmmac_priv *priv)\n--\ndrivers/net/ethernet/stmicro/stmmac/hwif.c-76-\t\t/* GMAC older than 3.50 has no extended descriptors */\ndrivers/net/ethernet/stmicro/stmmac/hwif.c:77:\t\tif (priv-\u003esynopsys_id \u003e= DWMAC_CORE_3_50) {\ndrivers/net/ethernet/stmicro/stmmac/hwif.c-78-\t\t\tdev_info(priv-\u003edevice, \"Enabled extended descriptors\\n\");\n--\ndrivers/net/ethernet/stmicro/stmmac/hwif.c=294=stmmac_hwif_find(enum dwmac_core_type core_type, u8 snpsver, u8 dev_id)\n--\ndrivers/net/ethernet/stmicro/stmmac/hwif.c-303-\t\t\tcontinue;\ndrivers/net/ethernet/stmicro/stmmac/hwif.c:304:\t\t/* Use synopsys_id var because some setups can override this */\ndrivers/net/ethernet/stmicro/stmmac/hwif.c-305-\t\tif (snpsver \u003c entry-\u003emin_id)\n--\ndrivers/net/ethernet/stmicro/stmmac/hwif.c=317=int stmmac_hwif_init(struct stmmac_priv *priv)\n--\ndrivers/net/ethernet/stmicro/stmmac/hwif.c-328-\t/* Save ID for later use */\ndrivers/net/ethernet/stmicro/stmmac/hwif.c:329:\tpriv-\u003esynopsys_id = version.snpsver;\ndrivers/net/ethernet/stmicro/stmmac/hwif.c-330-\n--\ndrivers/net/ethernet/stmicro/stmmac/hwif.c-359-\ndrivers/net/ethernet/stmicro/stmmac/hwif.c:360:\t/* Use synopsys_id var because some setups can override this */\ndrivers/net/ethernet/stmicro/stmmac/hwif.c:361:\tentry = stmmac_hwif_find(core_type, priv-\u003esynopsys_id, version.dev_id);\ndrivers/net/ethernet/stmicro/stmmac/hwif.c-362-\tif (!entry) {\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac.h=261=struct stmmac_priv {\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac.h-306-\tint hw_cap_support;\ndrivers/net/ethernet/stmicro/stmmac/stmmac.h:307:\tint synopsys_id;\ndrivers/net/ethernet/stmicro/stmmac/stmmac.h-308-\tu32 msg_enable;\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c=515=static void stmmac_get_ethtool_stats(struct net_device *dev,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c-555-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c:556:\t\tif (priv-\u003esynopsys_id \u003e= DWMAC_CORE_3_50)\ndrivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c-557-\t\t\tstmmac_mac_debug(priv, priv-\u003eioaddr,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c=642=static int stmmac_hwtstamp_set(struct net_device *dev,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-757-\t\t\tsnap_type_sel = PTP_TCR_SNAPTYPSEL_1;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:758:\t\t\tif (priv-\u003esynopsys_id \u003c DWMAC_CORE_4_10)\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-759-\t\t\t\tts_event_en = PTP_TCR_TSEVNTENA;\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c=6555=static int stmmac_dma_cap_show(struct seq_file *seq, void *v)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-6622-\t\t   (priv-\u003edma_cap.tx_coe) ? \"Y\" : \"N\");\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:6623:\tif (priv-\u003esynopsys_id \u003e= DWMAC_CORE_4_00 ||\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-6624-\t    priv-\u003eplat-\u003ecore_type == DWMAC_CORE_XGMAC) {\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c=7397=static int stmmac_hw_init(struct stmmac_priv *priv)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-7452-\t\tdev_info(priv-\u003edevice, \"RX Checksum Offload Engine supported\\n\");\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:7453:\t\tif (priv-\u003esynopsys_id \u003c DWMAC_CORE_4_00)\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-7454-\t\t\tdev_info(priv-\u003edevice, \"COE Type %d\\n\", priv-\u003ehw-\u003erx_csum);\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-7518-\t */\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:7519:\tif ((priv-\u003esynopsys_id \u003e= DWMAC_CORE_3_50 ||\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-7520-\t     priv-\u003eplat-\u003ecore_type == DWMAC_CORE_XGMAC) \u0026\u0026\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c=7786=static int __stmmac_dvr_probe(struct device *device,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-7895-\t */\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:7896:\tif (priv-\u003esynopsys_id \u003c DWMAC_CORE_5_20)\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-7897-\t\tpriv-\u003eplat-\u003edma_cfg-\u003edche = false;\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-7995-\t\tndev-\u003emax_mtu = XGMAC_JUMBO_LEN;\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:7996:\telse if (priv-\u003eplat-\u003eenh_desc || priv-\u003esynopsys_id \u003e= DWMAC_CORE_4_00)\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-7997-\t\tndev-\u003emax_mtu = JUMBO_LEN;\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c=72=static void stmmac_xgmac2_c22_format(struct stmmac_priv *priv, int phyaddr,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c-76-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c:77:\tif (priv-\u003esynopsys_id \u003c DWXGMAC_CORE_2_20) {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c-78-\t\t/* Until ver 2.20 XGMAC does not support C22 addr \u003e= 4. Those\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c=132=static int stmmac_xgmac2_mdio_read_c22(struct mii_bus *bus, int phyaddr,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c-138-\t/* Until ver 2.20 XGMAC does not support C22 addr \u003e= 4 */\ndrivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c:139:\tif (priv-\u003esynopsys_id \u003c DWXGMAC_CORE_2_20 \u0026\u0026\ndrivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c-140-\t    phyaddr \u003e MII_XGMAC_MAX_C22ADDR)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c=195=static int stmmac_xgmac2_mdio_write_c22(struct mii_bus *bus, int phyaddr,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c-201-\t/* Until ver 2.20 XGMAC does not support C22 addr \u003e= 4 */\ndrivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c:202:\tif (priv-\u003esynopsys_id \u003c DWXGMAC_CORE_2_20 \u0026\u0026\ndrivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c-203-\t    phyaddr \u003e MII_XGMAC_MAX_C22ADDR)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c=595=int stmmac_mdio_register(struct net_device *ndev)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c-627-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c:628:\t\tif (priv-\u003esynopsys_id \u003c DWXGMAC_CORE_2_20) {\ndrivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c-629-\t\t\t/* Right now only C22 phys are supported */\n"
}

23/2 2026/07/28 00:56 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 38013
							output: 149
							thoughts: 1676
						

Thoughts:
**Unreachable Code in Standard QEMU/Syzkaller Environments**

Okay, so here's the breakdown of my thinking. The code in question touches `stmmac`, specifically, the Synopsys DesignWare MAC driver. My immediate thought is, "Wait a minute, `stmmac` relies on hardware interaction, right?" It calls `stmmac_hw_setup` and reads the `priv->synopsys_id`. If that read fails (returns 0), the probe likely fails. My initial hope was maybe syzkaller could inject some dummy MMIO responses, but it doesn't have a PCI MMIO injector, so that's a dead end.

Next, I need to figure out how syzkaller *could* trigger this code. Is it because the driver is compiled in and we're fuzzing a netlink or ethtool interface to an already existing device? Or is the code actually unreachable? My understanding of `WorthFuzzing=false` is that it's for code paths impossible to reach in virtualized environments like GCE or QEMU, even with software emulated hardware. So, I need to confirm if `stmmac` fits that description.

`stmmac` is a vendor-specific MAC driver (Synopsys DesignWare MAC) that needs *physical* hardware or special SoC emulation. Does QEMU emulate this? Yes, `hw/net/designware.c` is QEMU's emulation. But is it a PCI device, or a platform device? In QEMU, `designware.c` is a *platform* device. It's used in ARM machines like `mcimx6ul-evk`, `mcimx7d-sabre`, `sifive_u`, `allwinner-h3`, and `allwinner-r40`. Does syzkaller use any of these machines? No, syzkaller usually runs on `x86_64` or ARM64, but on `arm64`, it uses the `virt` machine which uses `virtio-net`. Therefore, `stmmac` *isn't* reachable in standard syzkaller QEMU environments.

What about `stmmac_pci`? QEMU *doesn't* have a PCI wrapper for `designware`. `stmmac_pci` will *never* probe in QEMU. This means the `stmmac` driver is *impossible* to reach in syzkaller's virtualized environments.

Could it be reached another way? `vhci` or `mac80211_hwsim` are USB and WiFi. `netdevsim` is a software simulator, but it doesn't simulate `stmmac`. So, again, unreachable.

Let's revisit the prompt: "Code in vendor-specific PCIe switch, SmartNIC, or GPU drivers (e.g., mlxsw, pds_core, qed, ionic, amdgpu) that require physical PCIe hardware cards not emulated in standard QEMU." Does `stmmac` fit? Yes, it's a hardware-specific Ethernet driver that needs hardware, or specific SoC emulation not used in standard QEMU (like `virt` or `pc`).

I searched for syzkaller coverage and found *nothing* related to `stmmac`. There is `stmmac_selftests.c` triggered by `ethtool`, but if the device isn't present, `ethtool` can't be called. So that selftest code is unreachable. What about the new `phylink.c` changes? It adds `phylink_pcs_loopback` which is exported. Is it used by anything other than `stmmac_selftests.c`? No, grep says it's only called in `stmmac_selftests.c`. So the new phylink API is *also* unreachable because its only caller is.

Let's review the patch again:
```c
+int phylink_pcs_loopback(struct phylink_pcs *pcs, bool enable)
+{
+	if (pcs && pcs->ops->pcs_loopback)
+		return pcs->ops->pcs_loopback(pcs, enable);
+
+	return -EOPNOTSUPP;
+}
+EXPORT_SYMBOL_GPL(phylink_pcs_loopback);
```
It's a generic API, but *currently* only used by `stmmac`. Since `stmmac` is unreachable, this API is unreachable.

Is there any chance `stmmac` is emulated by QEMU's PCI? Let's check the QEMU source. In the


24/2 2026/07/28 00:57 tool set-results
0m Args:
{
  "EnableConfigs": [],
  "FocusSymbols": [],
  "Reasoning": "The patch adds a PCS loopback feature to the stmmac (Synopsys DesignWare MAC) driver and a corresponding API in phylink. The stmmac driver requires specific physical hardware or SoC emulation (e.g., Intel Quark/Elkhart Lake for PCI, or specific ARM SoCs for platform). These devices are not emulated in standard QEMU environments (like 'pc' or 'virt' machines) used by syzkaller. Without the hardware, the driver will fail to probe, making the selftest and the new phylink loopback code unreachable.",
  "WorthFuzzing": false
}

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "Reasoning": "The patch adds a PCS loopback feature to the stmmac (Synopsys DesignWare MAC) driver and a corresponding API in phylink. The stmmac driver requires specific physical hardware or SoC emulation (e.g., Intel Quark/Elkhart Lake for PCI, or specific ARM SoCs for platform). These devices are not emulated in standard QEMU environments (like 'pc' or 'virt' machines) used by syzkaller. Without the hardware, the driver will fail to probe, making the selftest and the new phylink loopback code unreachable.",
  "WorthFuzzing": false
}

LLM Calls Summary:
Total Calls Total Tokens Avg Tokens Total Duration (Seconds) Avg Duration (Seconds)
Tool Calls Summary:
Total Calls Total Duration (Seconds) Avg Duration (Seconds)