[PATCH net-next v4 2/6] dt-bindings: net: xlnx,xxv-ethernet: Add Xilinx XXV 10G/25G Ethernet
Gupta, Suraj
suraj.gupta2 at amd.com
Mon Oct 12 23:04:06 PDT 2026
On 10/10/2026 5:25 PM, netdev-bot+sashiko at kernel.org wrote:
> Thank you for your contribution! Sashiko AI review found 3 potential
> issue(s) to consider.
>
> Critical: 0 · High: 1 · Medium: 1 · Low: 1
>
> If you believe none of the issues are legitimate, please reply to each
> issue of Medium severity or higher and explain why the AI is wrong.
> If any of them are legitimate and you plan to respin, please let patchwork
> know by including "pw-bot: cr" as a separate line at the end of your reply
> (one such reply per series is enough).
>
> - [High] The XXV binding never says how link management works, so a node
> that passes the schema, including both examples in the binding, cannot…
> - [Medium] The binding has no way to describe the XXV transceiver (GT)
> reference clock.
> - [Low] The new XXV binding's `dma-names` schema only checks a per-item
> pattern (`^[tr]x_chan([0-9]|1[0-5])$`) and a count of 2 to 32.
>
> --
>
> dt-bindings: net: xlnx,xxv-ethernet: Add Xilinx XXV 10G/25G Ethernet
>
> This adds a new DT binding schema for the Xilinx XXV 10G/25G Ethernet IP.
> The IP has an in-core PCS/PMA and uses an external AXI DMA or MCDMA. The
> binding covers the 10gbase-r/25gbase-r phy-modes, the rx_core/drp/s_axi
> clocks and the dmas/dma-names properties.
>
>> diff --git a/Documentation/devicetree/bindings/net/xlnx,xxv-ethernet.yaml b/Documentation/devicetree/bindings/net/xlnx,xxv-ethernet.yaml
>> new file mode 100644
>> index 0000000000000..cf31ab677a4bc
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/net/xlnx,xxv-ethernet.yaml
>> @@ -0,0 +1,110 @@
>
> [ ... ]
>
>> +description:
>> + The Xilinx XXV Ethernet Subsystem implements a 10G/25G Ethernet MAC with an
>> + in-core PCS/PMA driving a high-speed serial transceiver. It supports the
>> + 10GBASE-R and 25GBASE-R line rates, with 25G operation following the 25G
>> + Ethernet Consortium specification. Because the PCS/PMA is integrated into
>> + the IP, the subsystem has no MDIO bus master and is not managed through an
>> + external MDIO PHY; link state is read from the MAC's own status registers.
>
> [Severity: High]
> The binding says there is no external MDIO PHY. It does not require or
> show managed = "in-band-status" or a fixed-link node, though. Neither
> example has phy-handle, fixed-link or managed.
>
> The XXV support added later in this series sets only mac_capabilities and
> supported_interfaces in axienet_xxv_phylink_set_capabilities(). It does
> not set phylink_config.default_an_inband, so cfg_link_an_mode stays at
> MLO_AN_PHY.
>
> On open this gives:
>
> axienet_open()
> phylink_fwnode_phy_connect(lp->phylink, dev_fwnode(lp->dev), 0)
> fwnode_get_phy_node() fails, since there is no phy-handle
> if (pl->cfg_link_an_mode == MLO_AN_PHY)
> return -ENODEV;
>
> A node that matches this binding, including either example, would then
> fail ndo_open with "phylink_of_phy_connect() failed". Is that expected?
>
> Also, phylink_pcs_poll_start() only polls the internal PCS when
> cfg_link_an_mode == MLO_AN_INBAND.
>
> Should the binding require managed: const: in-band-status? The other
> option is for the XXV phylink_set_caps to set default_an_inband = true.
Correct. The XXV subsystem has an integrated PCS/PMA and no external
PHY, so link is managed in-band from the MAC status registers. The
driver should therefore default to in-band mode.
> Either way, could the binding document the chosen mode?
>
>> + Any SFP module management (e.g. I2C) is handled by separate IP outside this
>> + binding. Its payload is moved by an external AXI DMA (or multichannel DMA)
>> + controller referenced through the "dmas" property.
>
> [ ... ]
>
>> + clocks:
>> + items:
>> + - description: RX AXI4-Stream clock.
>> + - description: GT DRP clock.
>> + - description: AXI4-Lite register clock.
>> +
>> + clock-names:
>> + items:
>> + - const: rx_core
>> + - const: drp
>> + - const: s_axi
>
> [Severity: Medium]
> How would a DT describe the transceiver (GT) reference clock here? The
> description says the in-core PCS/PMA drives a high-speed serial
> transceiver, and that transceiver has its own reference clock input.
>
> The clocks/clock-names list is fixed at three entries, and
> unevaluatedProperties is false. A DT that also lists the GT refclk would
> fail validation. xlnx,axi-ethernet.yaml already documents mgt_clk for its
> optional internal PCS/PMA PHY.
>
> Later in the series, axienet_10g25g_clk_init() claims only s_axi, rx_core
> and drp. axienet_xxv_poll_link_ready() then fails open when GT reset-done
> times out:
>
> netdev_err(ndev, "XXV MAC GT reset not complete! Cross-check the MAC ref clock configuration\n");
>
> On boards where a Linux-managed, gateable clock provider supplies the GT
> refclk, nothing claims that clock. Unused clock cleanup could then gate
> it. This depends on the board.
>
> Could an optional trailing clock (minItems: 3) be added now?
> writing-bindings.rst asks for complete bindings even when the driver does
> not use every feature.
>
Agreed. The three current clocks (rx_core -> rx_core_clk, drp -> dclk,
s_axi -> s_axi_aclk) are correct, but per PG210 the GT has a dedicated
differential reference clock (refclk_p0/refclk_n0 -> tx_serdes_refclk)
that the list cannot express today.
I'll add an optional trailing clock, mirroring mgt_clk in
xlnx,axi-ethernet.yaml
> [ ... ]
>
>> + dma-names:
>> + items:
>> + pattern: "^[tr]x_chan([0-9]|1[0-5])$"
>> + description:
>> + Should be "tx_chan0", "tx_chan1" ... "tx_chan15" for DMA Tx channel and
>> + "rx_chan0", "rx_chan1" ... "rx_chan15" for DMA Rx channel.
>> + minItems: 2
>> + maxItems: 32
>
> [Severity: Low]
> This checks the name pattern and the count. It does not require
> "tx_chan0" and "rx_chan0", or even one TX and one RX entry. Both of these
> pass dt_binding_check:
>
> dma-names = "tx_chan1", "rx_chan1";
> dma-names = "tx_chan0", "tx_chan1";
>
> The driver requests fixed names, though:
>
> axienet_probe()
> tx_chan = dma_request_chan(lp->dev, "tx_chan0");
> if (IS_ERR(tx_chan))
> return dev_err_probe(lp->dev, PTR_ERR(tx_chan), "No Ethernet DMA (TX) channel found\n");
>
> axienet_init_dmaengine()
> lp->tx_chan = dma_request_chan(lp->dev, "tx_chan0");
> ...
> lp->rx_chan = dma_request_chan(lp->dev, "rx_chan0");
>
> Since dmas is required, XXV always takes this path. Could contains
> constraints for "tx_chan0" and "rx_chan0" be added? Another option is to
> fix the leading entries with items/additionalItems.
>
> The pattern came from xlnx,axi-ethernet.yaml, but this patch creates a
> new binding with it.
>
Agreed, the driver hard-requests "tx_chan0"/"rx_chan0". For v5 I'll add
contains constraints so at least one tx_chan0 and one rx_chan0 are
required, while still allowing the additional MCDMA channels.
Thanks,
Suraj
> [ ... ]
>
More information about the linux-arm-kernel
mailing list