AI Trajectory


Trajectory: (Expand/Collapse All)
Seq Timestamp Type Name Duration
0/0 2026/09/07 11:15 flow patch-triage
0m Args:
null

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "KMSANReasoning": "",
  "NeedsKMSAN": false,
  "Reasoning": "The patch series introduces a platform glue driver for the UltraRISC DP1000 SoC GMAC Ethernet controller and refactors internal MAC delay configuration in the stmmac platform glue code (used by SoC-specific platform drivers like EIC7700 and Sophgo). These changes only affect embedded SoC hardware drivers relying on Device Tree, which are structurally unreachable in standard virtualized fuzzing environments on amd64.",
  "WorthFuzzing": false
}

1/1 2026/09/07 11:15 action read-patch-diff
0m Args:
null

Results:
{
  "PatchDiff": "commit 90279cbb24671191e1a0343e11a9b3b7a494304a\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate:   Mon Sep 7 11:15:30 2026 +0000\n\n    syz-cluster: applied patch under review\n\ndiff --git a/Documentation/devicetree/bindings/net/snps,dwmac.yaml b/Documentation/devicetree/bindings/net/snps,dwmac.yaml\nindex 2449311c6d28e..2ed4564ae99d7 100644\n--- a/Documentation/devicetree/bindings/net/snps,dwmac.yaml\n+++ b/Documentation/devicetree/bindings/net/snps,dwmac.yaml\n@@ -119,6 +119,7 @@ properties:\n         - starfive,jh7110-dwmac\n         - tesla,fsd-ethqos\n         - thead,th1520-gmac\n+        - ultrarisc,dp1000-gmac\n \n   reg:\n     minItems: 1\ndiff --git a/Documentation/devicetree/bindings/net/ultrarisc,dp1000-gmac.yaml b/Documentation/devicetree/bindings/net/ultrarisc,dp1000-gmac.yaml\nnew file mode 100644\nindex 0000000000000..13029302877ba\n--- /dev/null\n+++ b/Documentation/devicetree/bindings/net/ultrarisc,dp1000-gmac.yaml\n@@ -0,0 +1,74 @@\n+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)\n+%YAML 1.2\n+---\n+$id: http://devicetree.org/schemas/net/ultrarisc,dp1000-gmac.yaml#\n+$schema: http://devicetree.org/meta-schemas/core.yaml#\n+\n+title: UltraRISC DP1000 DWMAC Ethernet controller\n+\n+maintainers:\n+  - Jia Wang \u003cwangjia@ultrarisc.com\u003e\n+\n+description:\n+  The DP1000 integrates a Synopsys DesignWare GMAC controller from the\n+  5.20 series. The SoC integration adds fixed RGMII TX and RX clock delays\n+  which cannot be disabled. Consequently, a functional RGMII link requires\n+  a PCB without TX or RX clock delays, represented by \"rgmii-id\".\n+\n+select:\n+  properties:\n+    compatible:\n+      contains:\n+        const: ultrarisc,dp1000-gmac\n+  required:\n+    - compatible\n+\n+properties:\n+  compatible:\n+    items:\n+      - const: ultrarisc,dp1000-gmac\n+      - const: snps,dwmac-5.20\n+\n+  reg:\n+    maxItems: 1\n+\n+  clocks:\n+    maxItems: 1\n+\n+  clock-names:\n+    const: stmmaceth\n+\n+  interrupts:\n+    maxItems: 1\n+\n+  interrupt-names:\n+    const: macirq\n+\n+  phy-mode:\n+    const: rgmii-id\n+\n+required:\n+  - compatible\n+  - reg\n+  - clocks\n+  - clock-names\n+  - interrupts\n+  - interrupt-names\n+  - phy-mode\n+\n+allOf:\n+  - $ref: snps,dwmac.yaml#\n+\n+unevaluatedProperties: false\n+\n+examples:\n+  - |\n+    ethernet@38000000 {\n+        compatible = \"ultrarisc,dp1000-gmac\", \"snps,dwmac-5.20\";\n+        reg = \u003c0x38000000 0x1000000\u003e;\n+        clocks = \u003c\u0026clk 0\u003e;\n+        clock-names = \"stmmaceth\";\n+        interrupts = \u003c84\u003e;\n+        interrupt-names = \"macirq\";\n+        phy-mode = \"rgmii-id\";\n+    };\ndiff --git a/MAINTAINERS b/MAINTAINERS\nindex 6215fcb077705..d6fb876227e96 100644\n--- a/MAINTAINERS\n+++ b/MAINTAINERS\n@@ -27995,6 +27995,12 @@ F:\tDocumentation/devicetree/bindings/clock/ultrarisc,dp1000-clk.yaml\n F:\tdrivers/clk/ultrarisc/*\n F:\tinclude/dt-bindings/clock/ultrarisc,dp1000-clk.h\n \n+ULTRARISC DP1000 DWMAC GLUE LAYER\n+M:\tJia Wang \u003cwangjia@ultrarisc.com\u003e\n+S:\tMaintained\n+F:\tDocumentation/devicetree/bindings/net/ultrarisc,dp1000-gmac.yaml\n+F:\tdrivers/net/ethernet/stmicro/stmmac/dwmac-ultrarisc.c\n+\n ULTRARISC DP1000 PINCTRL DRIVER\n M:\tJia Wang \u003cwangjia@ultrarisc.com\u003e\n L:\tlinux-gpio@vger.kernel.org\ndiff --git a/drivers/net/ethernet/stmicro/stmmac/Kconfig b/drivers/net/ethernet/stmicro/stmmac/Kconfig\nindex e3dd5adda5aca..ab3c4cf964239 100644\n--- a/drivers/net/ethernet/stmicro/stmmac/Kconfig\n+++ b/drivers/net/ethernet/stmicro/stmmac/Kconfig\n@@ -319,6 +319,17 @@ config DWMAC_THEAD\n \t  the stmmac device driver. This driver is used for T-HEAD TH1520\n \t  ethernet controller.\n \n+config DWMAC_ULTRARISC\n+\ttristate \"UltraRISC DWMAC support\"\n+\tdefault ARCH_ULTRARISC\n+\tdepends on OF \u0026\u0026 (ARCH_ULTRARISC || COMPILE_TEST)\n+\thelp\n+\t  Support for the Ethernet controller on the UltraRISC DP1000 SoC.\n+\n+\t  This selects the UltraRISC platform specific glue layer support\n+\t  for the stmmac device driver. This driver is used for the DP1000\n+\t  GMAC Ethernet controller.\n+\n config DWMAC_IMX8\n \ttristate \"NXP IMX8 DWMAC support\"\n \tdefault ARCH_MXC\ndiff --git a/drivers/net/ethernet/stmicro/stmmac/Makefile b/drivers/net/ethernet/stmicro/stmmac/Makefile\nindex a1cea2f57252e..b16a456b730ec 100644\n--- a/drivers/net/ethernet/stmicro/stmmac/Makefile\n+++ b/drivers/net/ethernet/stmicro/stmmac/Makefile\n@@ -36,6 +36,7 @@ obj-$(CONFIG_DWMAC_SUNXI)\t+= dwmac-sunxi.o\n obj-$(CONFIG_DWMAC_SUN8I)\t+= dwmac-sun8i.o\n obj-$(CONFIG_DWMAC_SUN55I)\t+= dwmac-sun55i.o\n obj-$(CONFIG_DWMAC_THEAD)\t+= dwmac-thead.o\n+obj-$(CONFIG_DWMAC_ULTRARISC)\t+= dwmac-ultrarisc.o\n obj-$(CONFIG_DWMAC_DWC_QOS_ETH)\t+= dwmac-dwc-qos-eth.o\n obj-$(CONFIG_DWMAC_INTEL_PLAT)\t+= dwmac-intel-plat.o\n obj-$(CONFIG_DWMAC_LOONGSON1)\t+= dwmac-loongson1.o\ndiff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c\nindex eab8c13fbdcc0..0d654ec07f33f 100644\n--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c\n+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c\n@@ -198,18 +198,9 @@ static int eic7700_dwmac_probe(struct platform_device *pdev)\n \t/*\n \t * The MAC silicon unconditionally adds ~2 ns TX delay; prevent\n \t * the PHY from also adding TX delay to avoid doubling it.\n-\t *\n-\t * DT specifies rgmii-id (TX from MAC silicon, RX from PHY);\n-\t * override to rgmii-rxid so the PHY only adds its RX delay.\n+\t * The common platform code adjusts the PHY interface accordingly.\n \t */\n-\tif (data-\u003ehas_internal_tx_delay) {\n-\t\tplat_dat-\u003ephy_interface =\n-\t\t\t\t phy_fix_phy_mode_for_mac_delays(plat_dat-\u003ephy_interface,\n-\t\t\t\t\t\t\t\t true, false);\n-\t\tif (plat_dat-\u003ephy_interface == PHY_INTERFACE_MODE_NA)\n-\t\t\treturn dev_err_probe(\u0026pdev-\u003edev, -EINVAL,\n-\t\t\t\t\"phy interface mode is NA\\n\");\n-\t}\n+\tplat_dat-\u003ehas_internal_tx_delay = data-\u003ehas_internal_tx_delay;\n \n \t/* Read rx-internal-delay-ps and update rx_clk delay */\n \tif (!of_property_read_u32(pdev-\u003edev.of_node,\ndiff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-sophgo.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-sophgo.c\nindex e02ad3762b5f7..f62c803665ad4 100644\n--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sophgo.c\n+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sophgo.c\n@@ -55,14 +55,10 @@ static int sophgo_dwmac_probe(struct platform_device *pdev)\n \t\treturn ret;\n \n \tdata = device_get_match_data(\u0026pdev-\u003edev);\n-\tif (data \u0026\u0026 data-\u003ehas_internal_rx_delay) {\n-\t\tplat_dat-\u003ephy_interface = phy_fix_phy_mode_for_mac_delays(plat_dat-\u003ephy_interface,\n-\t\t\t\t\t\t\t\t\t  false, true);\n-\t\tif (plat_dat-\u003ephy_interface == PHY_INTERFACE_MODE_NA)\n-\t\t\treturn -EINVAL;\n-\t}\n-\n-\treturn stmmac_dvr_probe(dev, plat_dat, \u0026stmmac_res);\n+\tif (data)\n+\t\tplat_dat-\u003ehas_internal_rx_delay = data-\u003ehas_internal_rx_delay;\n+\n+\treturn stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\n }\n \n static const struct sophgo_dwmac_data sg2042_dwmac_data = {\ndiff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-ultrarisc.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-ultrarisc.c\nnew file mode 100644\nindex 0000000000000..0b62a75b782a2\n--- /dev/null\n+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-ultrarisc.c\n@@ -0,0 +1,52 @@\n+// SPDX-License-Identifier: GPL-2.0-only\n+/*\n+ * UltraRISC DWMAC platform driver\n+ *\n+ * Copyright (C) 2026 UltraRISC Technology (Shanghai) Co., Ltd.\n+ */\n+\n+#include \u003clinux/module.h\u003e\n+#include \u003clinux/platform_device.h\u003e\n+\n+#include \"stmmac_platform.h\"\n+\n+static int ultrarisc_dwmac_probe(struct platform_device *pdev)\n+{\n+\tstruct plat_stmmacenet_data *plat_dat;\n+\tstruct stmmac_resources stmmac_res;\n+\tstruct device *dev = \u0026pdev-\u003edev;\n+\tint ret;\n+\n+\tret = stmmac_get_platform_resources(pdev, \u0026stmmac_res);\n+\tif (ret)\n+\t\treturn dev_err_probe(dev, ret, \"failed to get resources\\n\");\n+\n+\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\n+\tif (IS_ERR(plat_dat))\n+\t\treturn dev_err_probe(dev, PTR_ERR(plat_dat),\n+\t\t\t\t     \"failed to parse DT parameters\\n\");\n+\n+\tplat_dat-\u003ehas_internal_tx_delay = true;\n+\tplat_dat-\u003ehas_internal_rx_delay = true;\n+\n+\treturn devm_stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\n+}\n+\n+static const struct of_device_id ultrarisc_dwmac_match[] = {\n+\t{ .compatible = \"ultrarisc,dp1000-gmac\" },\n+\t{ }\n+};\n+MODULE_DEVICE_TABLE(of, ultrarisc_dwmac_match);\n+\n+static struct platform_driver ultrarisc_dwmac_driver = {\n+\t.probe = ultrarisc_dwmac_probe,\n+\t.driver = {\n+\t\t.name = \"ultrarisc-dwmac\",\n+\t\t.pm = \u0026stmmac_pltfr_pm_ops,\n+\t\t.of_match_table = ultrarisc_dwmac_match,\n+\t},\n+};\n+module_platform_driver(ultrarisc_dwmac_driver);\n+\n+MODULE_DESCRIPTION(\"UltraRISC DWMAC platform driver\");\n+MODULE_LICENSE(\"GPL\");\ndiff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c\nindex 6128ed1bd521a..93b9af203a181 100644\n--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c\n+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c\n@@ -16,6 +16,7 @@\n #include \u003clinux/of.h\u003e\n #include \u003clinux/of_net.h\u003e\n #include \u003clinux/of_mdio.h\u003e\n+#include \u003clinux/phy.h\u003e\n \n #include \"stmmac.h\"\n #include \"stmmac_platform.h\"\n@@ -847,6 +848,16 @@ int stmmac_pltfr_probe(struct platform_device *pdev,\n \t\t       struct plat_stmmacenet_data *plat,\n \t\t       struct stmmac_resources *res)\n {\n+\tif (plat-\u003ehas_internal_tx_delay || plat-\u003ehas_internal_rx_delay) {\n+\t\tplat-\u003ephy_interface =\n+\t\t\tphy_fix_phy_mode_for_mac_delays(plat-\u003ephy_interface,\n+\t\t\t\t\t\t\tplat-\u003ehas_internal_tx_delay,\n+\t\t\t\t\t\t\tplat-\u003ehas_internal_rx_delay);\n+\t\tif (plat-\u003ephy_interface == PHY_INTERFACE_MODE_NA)\n+\t\t\treturn dev_err_probe(\u0026pdev-\u003edev, -EINVAL,\n+\t\t\t\t\t     \"unsupported phy interface mode\\n\");\n+\t}\n+\n \tif (!plat-\u003esuspend \u0026\u0026 plat-\u003eexit)\n \t\tplat-\u003esuspend = stmmac_plat_suspend;\n \tif (!plat-\u003eresume \u0026\u0026 plat-\u003einit)\ndiff --git a/include/linux/stmmac.h b/include/linux/stmmac.h\nindex 4430b967abdeb..00be2df63d220 100644\n--- a/include/linux/stmmac.h\n+++ b/include/linux/stmmac.h\n@@ -242,6 +242,8 @@ struct plat_stmmacenet_data {\n \t * that phylink uses.\n \t */\n \tphy_interface_t phy_interface;\n+\tbool has_internal_tx_delay;\n+\tbool has_internal_rx_delay;\n \tstruct stmmac_mdio_bus_data *mdio_bus_data;\n \tstruct device_node *phy_node;\n \tstruct device_node *mdio_node;\n"
}

2/1 2026/09/07 11:15 agent patch-evaluator
0m Model:
core

Args:
null

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "Reasoning": "The patch series introduces a platform glue driver for the UltraRISC DP1000 SoC GMAC Ethernet controller and refactors internal MAC delay configuration in the stmmac platform glue code (used by SoC-specific platform drivers like EIC7700 and Sophgo). These changes only affect embedded SoC hardware drivers relying on Device Tree, which are structurally unreachable in standard virtualized fuzzing environments on amd64.",
  "WorthFuzzing": false
}

Instruction:
You are an expert Linux kernel maintainer and security engineer.
Your job is to review a provided patch series and evaluate whether it warrants fuzzing with syzkaller.

IMPORTANT: The changes have ALREADY been applied and committed as the HEAD commit in
your workspace. Do NOT rely on internal assumptions. You must actively use your code access
tools to inspect the actual source code, callers, and surrounding context.

================================================================================
1. CORE TRIAGE PHILOSOPHY
================================================================================
The goal of patch fuzzing is to discover crashes, regressions, exposed latent bugs,
and newly triggered assertions introduced by the patch series.

- REACHABILITY IS THE PRIMARY GATE:
  Fuzzing can only discover bugs in code that can actually execute in standard virtualized
  environments (GCE or QEMU, utilizing software-emulated devices like USB gadgets, netdev, tun/tap).
  If the modified code is structurally unreachable (see Section 2), it MUST NOT be fuzzed,
  regardless of whether it adds assertions or complex logic.

- DO NOT BLINDLY TRUST "NO FUNCTIONAL CHANGE" (NFCI) OR "REFACTORING" CLAIMS:
  Patch authors routinely label changes as "cleanups", "refactorings", or state
  "No functional change intended". Do NOT take these claims at face value.
  Code refactorings that rearrange logic, introduce helper functions, or alter state management
  in core subsystems frequently introduce subtle semantic shifts or uncover latent kernel bugs.
  If reachable executable code is modified or refactored, it MUST be fuzzed.

- NEW OR MODIFIED ASSERTIONS IN REACHABLE CODE MUST BE FUZZED:
  When a patch introduces or modifies runtime checks or assertions (e.g., WARN_ON*, VM_WARN_ON*,
  BUG_ON*, lockdep_assert*) in reachable code paths, it enforces new or stricter invariants.
  Even if the author believes the invariant always holds, fuzzing is essential to verify whether
  an unusual sequence of operations can violate it.

================================================================================
2. WHEN TO RETURN WorthFuzzing=false (NEGATIVE CRITERIA)
================================================================================
Return WorthFuzzing=false ONLY IF all modified code falls strictly into one or more of these categories:

- Non-kernel and non-executable changes:
  * Modifications to Documentation/, comments, or spelling fixes.
  * User-space directories, self-tests, samples, or scripts (e.g., tools/, samples/, scripts/, usr/)
    that do not affect the compiled kernel image (vmlinux) or kernel modules.
  * Purely decorative logging (e.g., message strings in pr_err, printk, dev_info) or tracepoints
    that do not alter control flow or data structures.
  * Build system or Kconfig changes that do not alter compiled C logic.
- Structurally unreachable hardware:
  * Vendor-specific PCIe switches, SmartNICs, or GPU drivers (e.g., mlxsw, pds_core, qed,
    ionic, amdgpu) requiring physical ASIC/PCIe cards not emulated in standard QEMU.
- Unreachable execution paths:
  * Driver teardown callbacks (.remove, .shutdown, pci_unregister_driver) executed only during
    physical PCI hot-unplug or manual sysfs driver unbinding.
  * Code paths exclusive to architectures other than the target architecture.

================================================================================
3. WHEN TO RETURN WorthFuzzing=true (POSITIVE CRITERIA)
================================================================================
Return WorthFuzzing=true whenever the patch touches reachable executable code, including:
- Core Subsystems:
  * Any logic modifications in memory management (mm/), synchronization/locking (kernel/locking/),
    BPF, scheduler, core networking, VFS, or syscall handling.
- Refactorings and Code Cleanups:
  * Any restructuring of reachable data structures, helper abstractions, or algorithm flows.
- Runtime Assertions and Defensive Checks:
  * Any introduction or alteration of assertions (WARN_ON*, VM_WARN_ON*, BUG_ON*, etc.) in reachable paths.
- Reachable Drivers and Protocols:
  * Drivers accessible via virtual buses (virtio, USB gadget, loopback, netlink, binder, sockets, etc.).

================================================================================
4. EXTRACTING FocusSymbols (PREVENTING DILUTION)
================================================================================
When WorthFuzzing=true, you must extract specific kernel functions into FocusSymbols to guide the fuzzer:

- AVOID UBIQUITOUS LIFECYCLE HOT-PATHS:
  Do NOT list generic, ubiquitous functions called by almost every program in the corpus
  (including, but not limited to: general memory allocators and deallocators, page fault
  and trap handlers, or core synchronization primitives; this is not an exhaustive list).
  Listing ubiquitous functions causes the fuzzer to classify thousands of unrelated tests as "focused",
  which severely dilutes fuzzing effort away from the actual changes.

- TARGET SPECIFIC FEATURE LOGIC AND ENTRYPOINTS:
  List functions that specifically implement the logic being added or altered, or direct API entrypoints
  for the subsystem feature under review.

- HANDLING STATIC INLINE FUNCTIONS IN HEADERS (.h):
  Compiler-inlined static functions (such as static inlines in mm/*.h or include/linux/*.h) lack
  distinct symbol addresses in vmlinux and cannot be targeted directly by symbol coverage filters.
  If the changes are primarily in static inline helpers, identify non-static, feature-specific caller
  functions in .c files that exercise them (avoiding ubiquitous lifecycle wrappers).

================================================================================
5. IDENTIFYING EnableConfigs
================================================================================
Identify any specific CONFIG_ options required to properly compile and reach the modified code:
- Inspect Kconfig files and #ifdef guards; do not make assumptions.
- Check "depends on" lines in Kconfig to include any non-standard parent subsystem configs needed.
- Strip any '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:
Target architecture: amd64

For your convenience, here is the diff of the changes:
commit 90279cbb24671191e1a0343e11a9b3b7a494304a
Author: syz-cluster <triage@syzkaller.com>
Date:   Mon Sep 7 11:15:30 2026 +0000

    syz-cluster: applied patch under review

diff --git a/Documentation/devicetree/bindings/net/snps,dwmac.yaml b/Documentation/devicetree/bindings/net/snps,dwmac.yaml
index 2449311c6d28e..2ed4564ae99d7 100644
--- a/Documentation/devicetree/bindings/net/snps,dwmac.yaml
+++ b/Documentation/devicetree/bindings/net/snps,dwmac.yaml
@@ -119,6 +119,7 @@ properties:
         - starfive,jh7110-dwmac
         - tesla,fsd-ethqos
         - thead,th1520-gmac
+        - ultrarisc,dp1000-gmac
 
   reg:
     minItems: 1
diff --git a/Documentation/devicetree/bindings/net/ultrarisc,dp1000-gmac.yaml b/Documentation/devicetree/bindings/net/ultrarisc,dp1000-gmac.yaml
new file mode 100644
index 0000000000000..13029302877ba
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/ultrarisc,dp1000-gmac.yaml
@@ -0,0 +1,74 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/net/ultrarisc,dp1000-gmac.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: UltraRISC DP1000 DWMAC Ethernet controller
+
+maintainers:
+  - Jia Wang <wangjia@ultrarisc.com>
+
+description:
+  The DP1000 integrates a Synopsys DesignWare GMAC controller from the
+  5.20 series. The SoC integration adds fixed RGMII TX and RX clock delays
+  which cannot be disabled. Consequently, a functional RGMII link requires
+  a PCB without TX or RX clock delays, represented by "rgmii-id".
+
+select:
+  properties:
+    compatible:
+      contains:
+        const: ultrarisc,dp1000-gmac
+  required:
+    - compatible
+
+properties:
+  compatible:
+    items:
+      - const: ultrarisc,dp1000-gmac
+      - const: snps,dwmac-5.20
+
+  reg:
+    maxItems: 1
+
+  clocks:
+    maxItems: 1
+
+  clock-names:
+    const: stmmaceth
+
+  interrupts:
+    maxItems: 1
+
+  interrupt-names:
+    const: macirq
+
+  phy-mode:
+    const: rgmii-id
+
+required:
+  - compatible
+  - reg
+  - clocks
+  - clock-names
+  - interrupts
+  - interrupt-names
+  - phy-mode
+
+allOf:
+  - $ref: snps,dwmac.yaml#
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    ethernet@38000000 {
+        compatible = "ultrarisc,dp1000-gmac", "snps,dwmac-5.20";
+        reg = <0x38000000 0x1000000>;
+        clocks = <&clk 0>;
+        clock-names = "stmmaceth";
+        interrupts = <84>;
+        interrupt-names = "macirq";
+        phy-mode = "rgmii-id";
+    };
diff --git a/MAINTAINERS b/MAINTAINERS
index 6215fcb077705..d6fb876227e96 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -27995,6 +27995,12 @@ F:	Documentation/devicetree/bindings/clock/ultrarisc,dp1000-clk.yaml
 F:	drivers/clk/ultrarisc/*
 F:	include/dt-bindings/clock/ultrarisc,dp1000-clk.h
 
+ULTRARISC DP1000 DWMAC GLUE LAYER
+M:	Jia Wang <wangjia@ultrarisc.com>
+S:	Maintained
+F:	Documentation/devicetree/bindings/net/ultrarisc,dp1000-gmac.yaml
+F:	drivers/net/ethernet/stmicro/stmmac/dwmac-ultrarisc.c
+
 ULTRARISC DP1000 PINCTRL DRIVER
 M:	Jia Wang <wangjia@ultrarisc.com>
 L:	linux-gpio@vger.kernel.org
diff --git a/drivers/net/ethernet/stmicro/stmmac/Kconfig b/drivers/net/ethernet/stmicro/stmmac/Kconfig
index e3dd5adda5aca..ab3c4cf964239 100644
--- a/drivers/net/ethernet/stmicro/stmmac/Kconfig
+++ b/drivers/net/ethernet/stmicro/stmmac/Kconfig
@@ -319,6 +319,17 @@ config DWMAC_THEAD
 	  the stmmac device driver. This driver is used for T-HEAD TH1520
 	  ethernet controller.
 
+config DWMAC_ULTRARISC
+	tristate "UltraRISC DWMAC support"
+	default ARCH_ULTRARISC
+	depends on OF && (ARCH_ULTRARISC || COMPILE_TEST)
+	help
+	  Support for the Ethernet controller on the UltraRISC DP1000 SoC.
+
+	  This selects the UltraRISC platform specific glue layer support
+	  for the stmmac device driver. This driver is used for the DP1000
+	  GMAC Ethernet controller.
+
 config DWMAC_IMX8
 	tristate "NXP IMX8 DWMAC support"
 	default ARCH_MXC
diff --git a/drivers/net/ethernet/stmicro/stmmac/Makefile b/drivers/net/ethernet/stmicro/stmmac/Makefile
index a1cea2f57252e..b16a456b730ec 100644
--- a/drivers/net/ethernet/stmicro/stmmac/Makefile
+++ b/drivers/net/ethernet/stmicro/stmmac/Makefile
@@ -36,6 +36,7 @@ obj-$(CONFIG_DWMAC_SUNXI)	+= dwmac-sunxi.o
 obj-$(CONFIG_DWMAC_SUN8I)	+= dwmac-sun8i.o
 obj-$(CONFIG_DWMAC_SUN55I)	+= dwmac-sun55i.o
 obj-$(CONFIG_DWMAC_THEAD)	+= dwmac-thead.o
+obj-$(CONFIG_DWMAC_ULTRARISC)	+= dwmac-ultrarisc.o
 obj-$(CONFIG_DWMAC_DWC_QOS_ETH)	+= dwmac-dwc-qos-eth.o
 obj-$(CONFIG_DWMAC_INTEL_PLAT)	+= dwmac-intel-plat.o
 obj-$(CONFIG_DWMAC_LOONGSON1)	+= dwmac-loongson1.o
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c
index eab8c13fbdcc0..0d654ec07f33f 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c
@@ -198,18 +198,9 @@ static int eic7700_dwmac_probe(struct platform_device *pdev)
 	/*
 	 * The MAC silicon unconditionally adds ~2 ns TX delay; prevent
 	 * the PHY from also adding TX delay to avoid doubling it.
-	 *
-	 * DT specifies rgmii-id (TX from MAC silicon, RX from PHY);
-	 * override to rgmii-rxid so the PHY only adds its RX delay.
+	 * The common platform code adjusts the PHY interface accordingly.
 	 */
-	if (data->has_internal_tx_delay) {
-		plat_dat->phy_interface =
-				 phy_fix_phy_mode_for_mac_delays(plat_dat->phy_interface,
-								 true, false);
-		if (plat_dat->phy_interface == PHY_INTERFACE_MODE_NA)
-			return dev_err_probe(&pdev->dev, -EINVAL,
-				"phy interface mode is NA\n");
-	}
+	plat_dat->has_internal_tx_delay = data->has_internal_tx_delay;
 
 	/* Read rx-internal-delay-ps and update rx_clk delay */
 	if (!of_property_read_u32(pdev->dev.of_node,
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-sophgo.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-sophgo.c
index e02ad3762b5f7..f62c803665ad4 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sophgo.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sophgo.c
@@ -55,14 +55,10 @@ static int sophgo_dwmac_probe(struct platform_device *pdev)
 		return ret;
 
 	data = device_get_match_data(&pdev->dev);
-	if (data && data->has_internal_rx_delay) {
-		plat_dat->phy_interface = phy_fix_phy_mode_for_mac_delays(plat_dat->phy_interface,
-									  false, true);
-		if (plat_dat->phy_interface == PHY_INTERFACE_MODE_NA)
-			return -EINVAL;
-	}
-
-	return stmmac_dvr_probe(dev, plat_dat, &stmmac_res);
+	if (data)
+		plat_dat->has_internal_rx_delay = data->has_internal_rx_delay;
+
+	return stmmac_pltfr_probe(pdev, plat_dat, &stmmac_res);
 }
 
 static const struct sophgo_dwmac_data sg2042_dwmac_data = {
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-ultrarisc.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-ultrarisc.c
new file mode 100644
index 0000000000000..0b62a75b782a2
--- /dev/null
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-ultrarisc.c
@@ -0,0 +1,52 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * UltraRISC DWMAC platform driver
+ *
+ * Copyright (C) 2026 UltraRISC Technology (Shanghai) Co., Ltd.
+ */
+
+#include <linux/module.h>
+#include <linux/platform_device.h>
+
+#include "stmmac_platform.h"
+
+static int ultrarisc_dwmac_probe(struct platform_device *pdev)
+{
+	struct plat_stmmacenet_data *plat_dat;
+	struct stmmac_resources stmmac_res;
+	struct device *dev = &pdev->dev;
+	int ret;
+
+	ret = stmmac_get_platform_resources(pdev, &stmmac_res);
+	if (ret)
+		return dev_err_probe(dev, ret, "failed to get resources\n");
+
+	plat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);
+	if (IS_ERR(plat_dat))
+		return dev_err_probe(dev, PTR_ERR(plat_dat),
+				     "failed to parse DT parameters\n");
+
+	plat_dat->has_internal_tx_delay = true;
+	plat_dat->has_internal_rx_delay = true;
+
+	return devm_stmmac_pltfr_probe(pdev, plat_dat, &stmmac_res);
+}
+
+static const struct of_device_id ultrarisc_dwmac_match[] = {
+	{ .compatible = "ultrarisc,dp1000-gmac" },
+	{ }
+};
+MODULE_DEVICE_TABLE(of, ultrarisc_dwmac_match);
+
+static struct platform_driver ultrarisc_dwmac_driver = {
+	.probe = ultrarisc_dwmac_probe,
+	.driver = {
+		.name = "ultrarisc-dwmac",
+		.pm = &stmmac_pltfr_pm_ops,
+		.of_match_table = ultrarisc_dwmac_match,
+	},
+};
+module_platform_driver(ultrarisc_dwmac_driver);
+
+MODULE_DESCRIPTION("UltraRISC DWMAC platform driver");
+MODULE_LICENSE("GPL");
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
index 6128ed1bd521a..93b9af203a181 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
@@ -16,6 +16,7 @@
 #include <linux/of.h>
 #include <linux/of_net.h>
 #include <linux/of_mdio.h>
+#include <linux/phy.h>
 
 #include "stmmac.h"
 #include "stmmac_platform.h"
@@ -847,6 +848,16 @@ int stmmac_pltfr_probe(struct platform_device *pdev,
 		       struct plat_stmmacenet_data *plat,
 		       struct stmmac_resources *res)
 {
+	if (plat->has_internal_tx_delay || plat->has_internal_rx_delay) {
+		plat->phy_interface =
+			phy_fix_phy_mode_for_mac_delays(plat->phy_interface,
+							plat->has_internal_tx_delay,
+							plat->has_internal_rx_delay);
+		if (plat->phy_interface == PHY_INTERFACE_MODE_NA)
+			return dev_err_probe(&pdev->dev, -EINVAL,
+					     "unsupported phy interface mode\n");
+	}
+
 	if (!plat->suspend && plat->exit)
 		plat->suspend = stmmac_plat_suspend;
 	if (!plat->resume && plat->init)
diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h
index 4430b967abdeb..00be2df63d220 100644
--- a/include/linux/stmmac.h
+++ b/include/linux/stmmac.h
@@ -242,6 +242,8 @@ struct plat_stmmacenet_data {
 	 * that phylink uses.
 	 */
 	phy_interface_t phy_interface;
+	bool has_internal_tx_delay;
+	bool has_internal_rx_delay;
 	struct stmmac_mdio_bus_data *mdio_bus_data;
 	struct device_node *phy_node;
 	struct device_node *mdio_node;

3/2 2026/09/07 11:15 llm patch-evaluator
0m Model:
gemini-3.7-flash

Args:
null

Results:
null

Tokens:
							input: 6880
							output: 22
							thoughts: 760
						

Thoughts:
**Analyzing the Patch Series for the stmmac Driver**

Okay, let's dive into this patch series. My initial thought is to analyze the changes in relation to the target architecture, which is amd64. First, I need to get a handle on what's being modified. Based on the patch summary, it looks like this:

*   **Documentation:** We've got Device Tree (DT) bindings documentation updates for the `snps,dwmac` and `ultrarisc,dp1000-gmac` Ethernet MACs. That's good; always nice to see up-to-date documentation.
*   **Maintainers:** A simple `MAINTAINERS` file update, expected.
*   **Kconfig and Makefile:** The addition of `CONFIG_DWMAC_ULTRARISC` in the Kconfig and `dwmac-ultrarisc.o` in the Makefile suggests we're enabling support for a new hardware platform.
*   **Driver Updates:** We're seeing modifications to existing SoC drivers like `dwmac-eic7700.c` and `dwmac-sophgo.c`. They're setting flags, like `has_internal_tx_delay` and `has_internal_rx_delay`.
*   **New Driver:** Critically, there's a new platform driver, `dwmac-ultrarisc.c`, for the UltraRISC DP1000 SoC GMAC. This is the core of the change.
*   **Platform Glue:** The `stmmac_platform.c` file is being updated to handle the `has_internal_tx_delay` and `has_internal_rx_delay` flags, using `phy_fix_phy_mode_for_mac_delays`. This is important for how the driver interacts with the PHY.
*   **Header Update:** We've got additions to `struct plat_stmmacenet_data` in `include/linux/stmmac.h` to include those new flags.

Now, a key question for me is whether this new code path is *reachable* in a typical development environment. Specifically, does this code get executed under standard virtualized environments like x86\_64 with QEMU or even when running fuzzing with GCE syzkaller?

A quick refresher: `stmmac` is, in my understanding, the Synopsys DesignWare Ethernet MAC driver. It's used in a wide range of SoCs.

Now, let's break down where these changes are targeted.

*   `dwmac-ultrarisc.c`: A platform driver for the UltraRISC DP1000, a RISC-V SoC.
*   `dwmac-eic7700.c`: Targets the ESWIN EIC7700 SoC.
*   `dwmac-sophgo.c`: This one is for Sophgo SG2042 SoCs.
*   `stmmac_platform.c`: This is the glue that makes it work across different platforms.

The important question is if `stmmac_platform.c` or any other "stmmac" platform devices are instantiated or probed on amd64 in QEMU, or what the emulation environment would support. I need to figure out what drivers actually get compiled on this platform and what's connected to `stmmac`.

Therefore, I am going to see if any of these pieces of code, or more specifically, the `stmmac_pltfr_probe` function, are called in the build environments I will use. If `stmmac` has virtual or emulated devices, I should check this first, otherwise, it appears to be purely SoC and physical platform devices. Let me `grep` for `stmmac_pltfr_probe` and `stmmac_pltfr_pm_ops` and check for any PCI stmmac drivers.



4/2 2026/09/07 11:15 tool grepper
0m Args:
{
  "Expression": "stmmac_pltfr_probe"
}

Results:
{
  "Output": "drivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c=93=static int anarion_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c-115-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c:116:\treturn devm_stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c-117-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c=167=static int eic7700_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c-325-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c:326:\treturn devm_stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c-327-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-generic.c=19=static int dwmac_generic_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-generic.c-48-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-generic.c:49:\treturn devm_stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-generic.c-50-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-imx.c=293=static int imx_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-imx.c-353-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-imx.c:354:\tret = stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-imx.c-355-\tif (ret)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ingenic.c=154=static int ingenic_mac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ingenic.c-214-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ingenic.c:215:\treturn devm_stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ingenic.c-216-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson1.c=158=static int ls1x_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson1.c-203-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson1.c:204:\treturn devm_stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson1.c-205-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-nuvoton.c=82=static int nvt_gmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-nuvoton.c-114-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-nuvoton.c:115:\treturn stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-nuvoton.c-116-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c=684=static int qcom_ethqos_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c-796-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c:797:\treturn devm_stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c-798-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-renesas-gbeth.c=131=static int renesas_gbeth_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-renesas-gbeth.c-196-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-renesas-gbeth.c:197:\treturn devm_stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-renesas-gbeth.c-198-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rk.c=1568=static int rk_gmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rk.c-1612-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rk.c:1613:\treturn devm_stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rk.c-1614-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-s32.c=144=static int s32_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-s32.c-212-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-s32.c:213:\treturn stmmac_pltfr_probe(pdev, plat, \u0026res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-s32.c-214-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c=596=static int socfpga_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c-654-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c:655:\treturn devm_stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c-656-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sophgo.c=35=static int sophgo_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sophgo.c-60-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sophgo.c:61:\treturn stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sophgo.c-62-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sti.c=249=static int sti_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sti.c-288-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sti.c:289:\treturn devm_stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sti.c-290-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun55i.c=105=static int sun55i_gmac200_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun55i.c-137-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun55i.c:138:\treturn devm_stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun55i.c-139-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c=1105=static int sun8i_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c-1194-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c:1195:\tret = stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c-1196-\tif (ret)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c=99=static int sun7i_gmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c-146-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c:147:\treturn devm_stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c-148-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-thead.c=216=static int thead_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-thead.c-263-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-thead.c:264:\treturn devm_stmmac_pltfr_probe(pdev, plat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-thead.c-265-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ultrarisc.c=13=static int ultrarisc_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ultrarisc.c-31-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ultrarisc.c:32:\treturn devm_stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ultrarisc.c-33-}\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c=832=static int stmmac_plat_resume(struct device *dev, void *bsp_priv)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-839-/**\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c:840: * stmmac_pltfr_probe\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-841- * @pdev: platform device pointer\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-846- */\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c:847:int stmmac_pltfr_probe(struct platform_device *pdev,\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-848-\t\t       struct plat_stmmacenet_data *plat,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-867-}\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c:868:EXPORT_SYMBOL_GPL(stmmac_pltfr_probe);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-869-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c=870=static void devm_stmmac_pltfr_remove(void *data)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-877-/**\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c:878: * devm_stmmac_pltfr_probe\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-879- * @pdev: pointer to the platform device\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-881- * @res: stmmac resources\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c:882: * Description: Devres variant of stmmac_pltfr_probe(). Allows users to skip\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-883- * calling stmmac_pltfr_remove() on driver detach.\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-884- */\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c:885:int devm_stmmac_pltfr_probe(struct platform_device *pdev,\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-886-\t\t\t    struct plat_stmmacenet_data *plat,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-890-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c:891:\tret = stmmac_pltfr_probe(pdev, plat, res);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-892-\tif (ret)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-897-}\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c:898:EXPORT_SYMBOL_GPL(devm_stmmac_pltfr_probe);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-899-\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-902- * @pdev: pointer to the platform device\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c:903: * Description: This undoes the effects of stmmac_pltfr_probe() by removing the\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-904- * driver and calling the platform's exit() callback.\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.h=20=int stmmac_get_platform_resources(struct platform_device *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.h-22-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.h:23:int stmmac_pltfr_probe(struct platform_device *pdev,\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.h-24-\t\t       struct plat_stmmacenet_data *plat,\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.h-25-\t\t       struct stmmac_resources *res);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.h:26:int devm_stmmac_pltfr_probe(struct platform_device *pdev,\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.h-27-\t\t\t    struct plat_stmmacenet_data *plat,\n"
}

5/2 2026/09/07 11:15 llm patch-evaluator
0m Model:
gemini-3.7-flash

Args:
null

Results:
null

Tokens:
							input: 12961
							output: 40
							thoughts: 274
						

Thoughts:
**Analyzing the Platform Driver Landscape**

Okay, so I'm looking at this `stmmac_pltfr_probe` function, and all the callers I see – `dwmac-anarion.c`, `dwmac-eic7700.c`, `dwmac-generic.c`, etc. – these are all OF (device tree) or platform drivers for embedded Systems-on-a-Chip (SoCs). That's the clear pattern here. Each of these files implements the driver for a specific hardware setup.

But wait, I need to make sure I'm not missing something critical. I'm operating on the assumption this is exclusively a platform device probe, but I need to quickly double-check that there's *absolutely* no use of this function within a PCI context. It's rare, but assumptions can be dangerous. I need to scan `stmmac_pci.c` or any similarly named files to be certain. Just a quick sanity check to eliminate that possibility.



6/2 2026/09/07 11:15 tool grepper
0m Args:
{
  "Expression": "stmmac_.*probe",
  "PathPrefix": "drivers/net/ethernet/stmicro/stmmac/"
}

Results:
{
  "Output": "drivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c=93=static int anarion_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c-103-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c:104:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c-105-\tif (IS_ERR(plat_dat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c-115-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c:116:\treturn devm_stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c-117-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c=283=static int dwc_eth_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-306-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:307:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-308-\tif (IS_ERR(plat_dat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-329-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c:330:\tret = stmmac_dvr_probe(\u0026pdev-\u003edev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c-331-\tif (ret)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c=167=static int eic7700_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c-180-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c:181:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c-182-\tif (IS_ERR(plat_dat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c-325-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c:326:\treturn devm_stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c-327-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-generic.c=19=static int dwmac_generic_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-generic.c-29-\tif (pdev-\u003edev.of_node) {\ndrivers/net/ethernet/stmicro/stmmac/dwmac-generic.c:30:\t\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-generic.c-31-\t\tif (IS_ERR(plat_dat)) {\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-generic.c-48-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-generic.c:49:\treturn devm_stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-generic.c-50-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-imx.c=293=static int imx_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-imx.c-308-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-imx.c:309:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-imx.c-310-\tif (IS_ERR(plat_dat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-imx.c-353-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-imx.c:354:\tret = stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-imx.c-355-\tif (ret)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ingenic.c=154=static int ingenic_mac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ingenic.c-166-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ingenic.c:167:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ingenic.c-168-\tif (IS_ERR(plat_dat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ingenic.c-214-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ingenic.c:215:\treturn devm_stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ingenic.c-216-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c=42=static int intel_eth_plat_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c-53-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c:54:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c-55-\tif (IS_ERR(plat_dat)) {\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c-117-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c:118:\tret = stmmac_dvr_probe(\u0026pdev-\u003edev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c-119-\tif (ret)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c=1263=static int intel_eth_pci_probe(struct pci_dev *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1340-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c:1341:\tret = stmmac_dvr_probe(\u0026pdev-\u003edev, plat, \u0026res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-intel.c-1342-\tif (ret) {\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c=374=static int ipq806x_gmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c-386-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c:387:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c-388-\tif (IS_ERR(plat_dat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c-482-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c:483:\treturn stmmac_dvr_probe(\u0026pdev-\u003edev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c-484-\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-561-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c:562:\tret = stmmac_dvr_probe(\u0026pdev-\u003edev, plat, \u0026res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c-563-\tif (ret)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson1.c=158=static int ls1x_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson1.c-187-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson1.c:188:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson1.c-189-\tif (IS_ERR(plat_dat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson1.c-203-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson1.c:204:\treturn devm_stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-loongson1.c-205-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c=42=static int lpc18xx_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c-52-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c:53:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c-54-\tif (IS_ERR(plat_dat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c-67-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c:68:\treturn stmmac_dvr_probe(\u0026pdev-\u003edev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c-69-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c=599=static int mediatek_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c-630-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c:631:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c-632-\tif (IS_ERR(plat_dat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c-641-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c:642:\tret = stmmac_dvr_probe(\u0026pdev-\u003edev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c-643-\tif (ret)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-meson.c=47=static int meson6_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-meson.c-57-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-meson.c:58:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-meson.c-59-\tif (IS_ERR(plat_dat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-meson.c-72-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-meson.c:73:\treturn stmmac_dvr_probe(\u0026pdev-\u003edev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-meson.c-74-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c=382=static int meson8b_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c-392-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c:393:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c-394-\tif (IS_ERR(plat_dat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c-463-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c:464:\treturn stmmac_dvr_probe(\u0026pdev-\u003edev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c-465-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.c=293=static int motorcomm_probe(struct pci_dev *pdev, const struct pci_device_id *id)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.c-358-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.c:359:\treturn stmmac_dvr_probe(\u0026pdev-\u003edev, plat, \u0026res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.c-360-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-nuvoton.c=82=static int nvt_gmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-nuvoton.c-93-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-nuvoton.c:94:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-nuvoton.c-95-\tif (IS_ERR(plat_dat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-nuvoton.c-114-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-nuvoton.c:115:\treturn stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-nuvoton.c-116-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c=684=static int qcom_ethqos_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c-698-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c:699:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c-700-\tif (IS_ERR(plat_dat)) {\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c-796-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c:797:\treturn devm_stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c-798-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-renesas-gbeth.c=131=static int renesas_gbeth_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-renesas-gbeth.c-145-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-renesas-gbeth.c:146:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-renesas-gbeth.c-147-\tif (IS_ERR(plat_dat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-renesas-gbeth.c-196-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-renesas-gbeth.c:197:\treturn devm_stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-renesas-gbeth.c-198-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rk.c=1568=static int rk_gmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rk.c-1584-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rk.c:1585:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rk.c-1586-\tif (IS_ERR(plat_dat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rk.c-1612-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rk.c:1613:\treturn devm_stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rk.c-1614-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rzn1.c=48=static int rzn1_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rzn1.c-58-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rzn1.c:59:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rzn1.c-60-\tif (IS_ERR(plat_dat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rzn1.c-67-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rzn1.c:68:\tret = stmmac_dvr_probe(dev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-rzn1.c-69-\tif (ret)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-s32.c=144=static int s32_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-s32.c-162-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-s32.c:163:\tplat = devm_stmmac_probe_config_dt(pdev, res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-s32.c-164-\tif (IS_ERR(plat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-s32.c-212-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-s32.c:213:\treturn stmmac_pltfr_probe(pdev, plat, \u0026res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-s32.c-214-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c=596=static int socfpga_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c-614-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c:615:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c-616-\tif (IS_ERR(plat_dat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c-654-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c:655:\treturn devm_stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c-656-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sophgo.c=35=static int sophgo_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sophgo.c-47-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sophgo.c:48:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sophgo.c-49-\tif (IS_ERR(plat_dat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sophgo.c-60-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sophgo.c:61:\treturn stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sophgo.c-62-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-spacemit.c=147=static int spacemit_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-spacemit.c-168-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-spacemit.c:169:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-spacemit.c-170-\tif (IS_ERR(plat_dat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-spacemit.c-206-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-spacemit.c:207:\treturn stmmac_dvr_probe(dev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-spacemit.c-208-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c=90=static int starfive_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c-102-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c:103:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c-104-\tif (IS_ERR(plat_dat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c-152-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c:153:\treturn stmmac_dvr_probe(\u0026pdev-\u003edev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c-154-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sti.c=249=static int sti_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sti.c-266-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sti.c:267:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sti.c-268-\tif (IS_ERR(plat_dat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sti.c-288-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sti.c:289:\treturn devm_stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sti.c-290-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-stm32.c=525=static int stm32_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-stm32.c-536-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-stm32.c:537:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-stm32.c-538-\tif (IS_ERR(plat_dat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-stm32.c-578-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-stm32.c:579:\tret = stmmac_dvr_probe(\u0026pdev-\u003edev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-stm32.c-580-\tif (ret)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun55i.c=105=static int sun55i_gmac200_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun55i.c-116-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun55i.c:117:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun55i.c-118-\tif (IS_ERR(plat_dat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun55i.c-137-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun55i.c:138:\treturn devm_stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun55i.c-139-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c=1105=static int sun8i_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c-1173-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c:1174:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c-1175-\tif (IS_ERR(plat_dat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c-1194-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c:1195:\tret = stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c-1196-\tif (ret)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c-1201-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c:1202:\t/* the MAC is runtime suspended after stmmac_dvr_probe(), so we\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c-1203-\t * need to ensure the MAC resume back before other operations such\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c-1208-\t/* The mux must be registered after parent MDIO\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c:1209:\t * so after stmmac_dvr_probe()\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c-1210-\t */\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c=99=static int sun7i_gmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c-110-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c:111:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c-112-\tif (IS_ERR(plat_dat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c-146-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c:147:\treturn devm_stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c-148-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-tegra.c=214=static int tegra_mgbe_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-tegra.c-319-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-tegra.c:320:\tplat = devm_stmmac_probe_config_dt(pdev, res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-tegra.c-321-\tif (IS_ERR(plat)) {\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-tegra.c-375-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-tegra.c:376:\terr = stmmac_dvr_probe(\u0026pdev-\u003edev, plat, \u0026res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-tegra.c-377-\tif (err \u003c 0)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-thead.c=216=static int thead_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-thead.c-229-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-thead.c:230:\tplat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-thead.c-231-\tif (IS_ERR(plat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-thead.c-263-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-thead.c:264:\treturn devm_stmmac_pltfr_probe(pdev, plat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-thead.c-265-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ultrarisc.c=13=static int ultrarisc_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ultrarisc.c-23-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ultrarisc.c:24:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ultrarisc.c-25-\tif (IS_ERR(plat_dat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ultrarisc.c-31-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ultrarisc.c:32:\treturn devm_stmmac_pltfr_probe(pdev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-ultrarisc.c-33-}\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-visconti.c=205=static int visconti_eth_dwmac_probe(struct platform_device *pdev)\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-visconti.c-215-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-visconti.c:216:\tplat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-visconti.c-217-\tif (IS_ERR(plat_dat))\n--\ndrivers/net/ethernet/stmicro/stmmac/dwmac-visconti.c-236-\ndrivers/net/ethernet/stmicro/stmmac/dwmac-visconti.c:237:\tret = stmmac_dvr_probe(\u0026pdev-\u003edev, plat_dat, \u0026stmmac_res);\ndrivers/net/ethernet/stmicro/stmmac/dwmac-visconti.c-238-\tif (ret)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac.h=411=void stmmac_dvr_remove(struct device *dev);\ndrivers/net/ethernet/stmicro/stmmac/stmmac.h:412:int stmmac_dvr_probe(struct device *device,\ndrivers/net/ethernet/stmicro/stmmac/stmmac.h-413-\t\t     struct plat_stmmacenet_data *plat_dat,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c=7795=EXPORT_SYMBOL_GPL(stmmac_plat_dat_alloc);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-7796-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:7797:static int __stmmac_dvr_probe(struct device *device,\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-7798-\t\t\t      struct plat_stmmacenet_data *plat_dat,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-8099-/**\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:8100: * stmmac_dvr_probe\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-8101- * @dev: device pointer\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-8108- */\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:8109:int stmmac_dvr_probe(struct device *dev, struct plat_stmmacenet_data *plat_dat,\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-8110-\t\t     struct stmmac_resources *res)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-8119-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:8120:\tret = __stmmac_dvr_probe(dev, plat_dat, res);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-8121-\tif (ret \u0026\u0026 plat_dat-\u003eexit)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-8125-}\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c:8126:EXPORT_SYMBOL_GPL(stmmac_dvr_probe);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_main.c-8127-\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c=102=static const struct stmmac_pci_info snps_gmac5_pci_info = {\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)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-182-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c:183:\treturn stmmac_dvr_probe(\u0026pdev-\u003edev, plat, \u0026res);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c-184-}\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_pci.c=212=static struct pci_driver stmmac_pci_driver = {\n--\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,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c=394=static const char * const stmmac_gmac4_compats[] = {\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-406-/**\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c:407: * stmmac_probe_config_dt - parse device-tree driver parameters\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-408- * @pdev: platform_device structure\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c=414=static struct plat_stmmacenet_data *\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c:415:stmmac_probe_config_dt(struct platform_device *pdev, u8 *mac)\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-416-{\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c=642=static void devm_stmmac_remove_config_dt(void *data)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-652-/**\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c:653: * devm_stmmac_probe_config_dt\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-654- * @pdev: platform_device structure\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-655- * @mac: MAC address to use\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c:656: * Description: Devres variant of stmmac_probe_config_dt().\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-657- */\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c=658=struct plat_stmmacenet_data *\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c:659:devm_stmmac_probe_config_dt(struct platform_device *pdev, u8 *mac)\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-660-{\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-663-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c:664:\tplat = stmmac_probe_config_dt(pdev, mac);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-665-\tif (IS_ERR(plat))\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c=676=struct plat_stmmacenet_data *\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c:677:devm_stmmac_probe_config_dt(struct platform_device *pdev, u8 *mac)\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-678-{\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-681-#endif /* CONFIG_OF */\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c:682:EXPORT_SYMBOL_GPL(devm_stmmac_probe_config_dt);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-683-\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c=832=static int stmmac_plat_resume(struct device *dev, void *bsp_priv)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-839-/**\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c:840: * stmmac_pltfr_probe\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-841- * @pdev: platform device pointer\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-846- */\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c:847:int stmmac_pltfr_probe(struct platform_device *pdev,\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-848-\t\t       struct plat_stmmacenet_data *plat,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-865-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c:866:\treturn stmmac_dvr_probe(\u0026pdev-\u003edev, plat, res);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-867-}\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c:868:EXPORT_SYMBOL_GPL(stmmac_pltfr_probe);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-869-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c=870=static void devm_stmmac_pltfr_remove(void *data)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-877-/**\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c:878: * devm_stmmac_pltfr_probe\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-879- * @pdev: pointer to the platform device\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-881- * @res: stmmac resources\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c:882: * Description: Devres variant of stmmac_pltfr_probe(). Allows users to skip\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-883- * calling stmmac_pltfr_remove() on driver detach.\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-884- */\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c:885:int devm_stmmac_pltfr_probe(struct platform_device *pdev,\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-886-\t\t\t    struct plat_stmmacenet_data *plat,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-890-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c:891:\tret = stmmac_pltfr_probe(pdev, plat, res);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-892-\tif (ret)\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-897-}\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c:898:EXPORT_SYMBOL_GPL(devm_stmmac_pltfr_probe);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-899-\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-902- * @pdev: pointer to the platform device\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c:903: * Description: This undoes the effects of stmmac_pltfr_probe() by removing the\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.c-904- * driver and calling the platform's exit() callback.\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.h=14=struct plat_stmmacenet_data *\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.h:15:devm_stmmac_probe_config_dt(struct platform_device *pdev, u8 *mac);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.h-16-\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.h=20=int stmmac_get_platform_resources(struct platform_device *pdev,\n--\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.h-22-\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.h:23:int stmmac_pltfr_probe(struct platform_device *pdev,\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.h-24-\t\t       struct plat_stmmacenet_data *plat,\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.h-25-\t\t       struct stmmac_resources *res);\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.h:26:int devm_stmmac_pltfr_probe(struct platform_device *pdev,\ndrivers/net/ethernet/stmicro/stmmac/stmmac_platform.h-27-\t\t\t    struct plat_stmmacenet_data *plat,\n"
}

7/2 2026/09/07 11:15 llm patch-evaluator
0m Model:
gemini-3.7-flash

Args:
null

Results:
null

Tokens:
							input: 27275
							output: 49
							thoughts: 1259
						

Thoughts:
**Analyzing the Potential for Fuzzing this Patchset**

Okay, let's break this down systematically. My primary goal here is to determine if these changes introduce code paths that are realistically reachable for fuzzing, particularly within the context of standard QEMU or x86/amd64 environments. Given my expertise, I need to see if any of this code is accessible by syzkaller.

First, I looked at the call sites for `stmmac_dvr_probe` and `stmmac_pltfr_probe`. It's immediately clear that drivers like those for PCI-based stmmac controllers (`stmmac_pci.c`) call `stmmac_dvr_probe` directly. Similarly, drivers for other hardware like `dwmac-intel.c`, `dwmac-loongson.c`, and `dwmac-motorcomm.c` all use `stmmac_dvr_probe`. The distinction is crucial: `stmmac_pltfr_probe` seems to be *exclusively* used by platform drivers, those relying on Open Firmware (OF) or Device Tree (DT) configurations. This is a significant clue.

The next question is whether any platform drivers, specifically the ones calling `stmmac_pltfr_probe`, are likely to be probed and initialized in a standard x86/QEMU environment. The answer seems to be a resounding "no." Standard x86/QEMU setups don't generally employ Device Tree. Even if `CONFIG_OF` is enabled (which can be the case), it's highly unlikely that a DT node matching any of the specific SoC GMACs mentioned (UltraRISC, EIC7700, Sophgo, etc.) would be instantiated. These are physical hardware or SoC devices, requiring their specific SoC hardware or a specially-crafted DT passed at boot.

Now, let's apply the prompt's criteria for determining if something is worth fuzzing. I need to identify files, and check against the negatives.

I'm carefully reviewing the files modified in this patch series. My assessments are:
1.  `Documentation/devicetree/bindings/net/snps,dwmac.yaml` - Documentation
2.  `Documentation/devicetree/bindings/net/ultrarisc,dp1000-gmac.yaml` - Documentation
3.  `MAINTAINERS` - Non-executable
4.  `drivers/net/ethernet/stmicro/stmmac/Kconfig` - Kconfig
5.  `drivers/net/ethernet/stmicro/stmmac/Makefile` - Makefile
6.  `drivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c` - ESWIN EIC7700 SoC Ethernet driver (SoC specific)
7.  `drivers/net/ethernet/stmicro/stmmac/dwmac-sophgo.c` - Sophgo SG2042 SoC Ethernet driver (SoC specific)
8.  `drivers/net/ethernet/stmicro/stmmac/dwmac-ultrarisc.c` - UltraRISC DP1000 SoC Ethernet driver (SoC specific)
9.  `drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c` - Platform glue for OpenFirmware / DT-based stmmac controllers (`stmmac_pltfr_probe`)
10. `include/linux/stmmac.h` - Header defining fields in `struct plat_stmmacenet_data`

Given the device-specific nature of drivers like `dwmac-eic7700.c`, `dwmac-sophgo.c`, and `dwmac-ultrarisc.c`, and their reliance on hardware or a DT configured at boot, I need to evaluate accessibility. `stmmac_platform.c` is also highly suspect for the same reasons.

I've checked if `stmmac_pltfr_probe` could be probed by QEMU on amd64. Again, QEMU on x86/amd64 provides standard PCI devices (e1000, igb, virtio-net, etc.), none of which utilize `stmmac_pltfr_probe` or DWMAC platform glue. These SoC ethernet controllers (UltraRISC, Sophgo, and EIC7700) are all dependent on a physical SoC hardware / DT.

To be extra certain, I need to check if there are any ACPI or PCI bindings to `stmmac_platform.c`, but it's most likely pure OF/DT.



8/2 2026/09/07 11:15 tool read-file
0m Args:
{
  "File": "drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c",
  "FirstLine": 840,
  "LineCount": 70
}

Results:
{
  "Contents": " 840:\t * stmmac_pltfr_probe\n 841:\t * @pdev: platform device pointer\n 842:\t * @plat: driver data platform structure\n 843:\t * @res: stmmac resources structure\n 844:\t * Description: This calls the platform's init() callback and probes the\n 845:\t * stmmac driver.\n 846:\t */\n 847:\tint stmmac_pltfr_probe(struct platform_device *pdev,\n 848:\t\t\t       struct plat_stmmacenet_data *plat,\n 849:\t\t\t       struct stmmac_resources *res)\n 850:\t{\n 851:\t\tif (plat-\u003ehas_internal_tx_delay || plat-\u003ehas_internal_rx_delay) {\n 852:\t\t\tplat-\u003ephy_interface =\n 853:\t\t\t\tphy_fix_phy_mode_for_mac_delays(plat-\u003ephy_interface,\n 854:\t\t\t\t\t\t\t\tplat-\u003ehas_internal_tx_delay,\n 855:\t\t\t\t\t\t\t\tplat-\u003ehas_internal_rx_delay);\n 856:\t\t\tif (plat-\u003ephy_interface == PHY_INTERFACE_MODE_NA)\n 857:\t\t\t\treturn dev_err_probe(\u0026pdev-\u003edev, -EINVAL,\n 858:\t\t\t\t\t\t     \"unsupported phy interface mode\\n\");\n 859:\t\t}\n 860:\t\n 861:\t\tif (!plat-\u003esuspend \u0026\u0026 plat-\u003eexit)\n 862:\t\t\tplat-\u003esuspend = stmmac_plat_suspend;\n 863:\t\tif (!plat-\u003eresume \u0026\u0026 plat-\u003einit)\n 864:\t\t\tplat-\u003eresume = stmmac_plat_resume;\n 865:\t\n 866:\t\treturn stmmac_dvr_probe(\u0026pdev-\u003edev, plat, res);\n 867:\t}\n 868:\tEXPORT_SYMBOL_GPL(stmmac_pltfr_probe);\n 869:\t\n 870:\tstatic void devm_stmmac_pltfr_remove(void *data)\n 871:\t{\n 872:\t\tstruct platform_device *pdev = data;\n 873:\t\n 874:\t\tstmmac_pltfr_remove(pdev);\n 875:\t}\n 876:\t\n 877:\t/**\n 878:\t * devm_stmmac_pltfr_probe\n 879:\t * @pdev: pointer to the platform device\n 880:\t * @plat: driver data platform structure\n 881:\t * @res: stmmac resources\n 882:\t * Description: Devres variant of stmmac_pltfr_probe(). Allows users to skip\n 883:\t * calling stmmac_pltfr_remove() on driver detach.\n 884:\t */\n 885:\tint devm_stmmac_pltfr_probe(struct platform_device *pdev,\n 886:\t\t\t\t    struct plat_stmmacenet_data *plat,\n 887:\t\t\t\t    struct stmmac_resources *res)\n 888:\t{\n 889:\t\tint ret;\n 890:\t\n 891:\t\tret = stmmac_pltfr_probe(pdev, plat, res);\n 892:\t\tif (ret)\n 893:\t\t\treturn ret;\n 894:\t\n 895:\t\treturn devm_add_action_or_reset(\u0026pdev-\u003edev, devm_stmmac_pltfr_remove,\n 896:\t\t\t\t\t\tpdev);\n 897:\t}\n 898:\tEXPORT_SYMBOL_GPL(devm_stmmac_pltfr_probe);\n 899:\t\n 900:\t/**\n 901:\t * stmmac_pltfr_remove\n 902:\t * @pdev: pointer to the platform device\n 903:\t * Description: This undoes the effects of stmmac_pltfr_probe() by removing the\n 904:\t * driver and calling the platform's exit() callback.\n 905:\t */\n 906:\tvoid stmmac_pltfr_remove(struct platform_device *pdev)\n 907:\t{\n 908:\t\tstmmac_dvr_remove(\u0026pdev-\u003edev);\n 909:\t}\n"
}

9/2 2026/09/07 11:15 llm patch-evaluator
0m Model:
gemini-3.7-flash

Args:
null

Results:
null

Tokens:
							input: 30734
							output: 117
							thoughts: 483
						

Thoughts:
**My Assessment of the Code Changes**

Okay, first things first, I need to see what files were modified to understand the scope of this change. Alright, I see a list of modified files, including some YAML bindings documentation, MAINTAINERS, Kconfig, Makefile, and several C files within the `stmmac` driver.

Looking at the C code, it's concentrated in `dwmac-eic7700.c`, `dwmac-sophgo.c`, `dwmac-ultrarisc.c`, and `stmmac_platform.c`. This strongly suggests we're dealing with platform-specific drivers. Given the names, it's quite likely these target specific embedded hardware like the UltraRISC DP1000, Sophgo SG2042, and ESWIN EIC7700 SoCs.

Now, considering these are hardware-specific platform drivers, they inherently rely on physical SoCs and corresponding device tree nodes. We know these types of platforms are not going to be emulated in standard environments like QEMU or GCE on amd64. I mean, we are talking about real, specific hardware.

Therefore, this change falls squarely under the category of structurally unreachable hardware and non-kernel/documentation changes. It's essentially adding support for those platforms which wouldn't be useful in normal kernel fuzzing runs.

Let's quickly confirm our assessment: The `WorthFuzzing`, `EnableConfigs`, `FocusSymbols` are empty, and the reasoning provided states that it adds a glue driver for UltraRISC DP1000 GMAC Ethernet controller and refactors internal MAC delay handling in stmmac platform glue for EIC7700 and Sophgo SoCs. This change needs real SoC hardware, not fuzzable VMs.

Alright, I am satisfied with this analysis, I will call `set-results`.



10/2 2026/09/07 11:15 tool set-results
0m Args:
{
  "EnableConfigs": [],
  "FocusSymbols": [],
  "Reasoning": "The patch series introduces a platform glue driver for the UltraRISC DP1000 SoC GMAC Ethernet controller and refactors internal MAC delay configuration in the stmmac platform glue code (used by SoC-specific platform drivers like EIC7700 and Sophgo). These changes only affect embedded SoC hardware drivers relying on Device Tree, which are structurally unreachable in standard virtualized fuzzing environments on amd64.",
  "WorthFuzzing": false
}

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "Reasoning": "The patch series introduces a platform glue driver for the UltraRISC DP1000 SoC GMAC Ethernet controller and refactors internal MAC delay configuration in the stmmac platform glue code (used by SoC-specific platform drivers like EIC7700 and Sophgo). These changes only affect embedded SoC hardware drivers relying on Device Tree, which are structurally unreachable in standard virtualized fuzzing environments on amd64.",
  "WorthFuzzing": false
}

11/1 2026/09/07 11:15 action If
0m Args:
{
  "WorthFuzzing": false
}

Results:
null

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)