[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20260122105654.105600-10-vladimir.oltean@nxp.com>
Date: Thu, 22 Jan 2026 12:56:48 +0200
From: Vladimir Oltean <vladimir.oltean@....com>
To: netdev@...r.kernel.org
Cc: Andrew Lunn <andrew@...n.ch>,
Heiner Kallweit <hkallweit1@...il.com>,
Russell King <linux@...linux.org.uk>,
"David S. Miller" <davem@...emloft.net>,
Eric Dumazet <edumazet@...gle.com>,
Jakub Kicinski <kuba@...nel.org>,
Paolo Abeni <pabeni@...hat.com>,
linux-kernel@...r.kernel.org,
Andy Shevchenko <andriy.shevchenko@...ux.intel.com>,
Herve Codina <herve.codina@...tlin.com>,
Mark Brown <broonie@...nel.org>,
Serge Semin <fancer.lancer@...il.com>,
Maxime Chevallier <maxime.chevallier@...tlin.com>,
Lee Jones <lee@...nel.org>,
Rob Herring <robh@...nel.org>,
Krzysztof Kozlowski <krzk+dt@...nel.org>,
Conor Dooley <conor+dt@...nel.org>,
devicetree@...r.kernel.org,
Choong Yong Liang <yong.liang.choong@...ux.intel.com>,
Jiawen Wu <jiawenwu@...stnetic.com>
Subject: [PATCH v2 net-next 09/15] dt-bindings: net: dsa: sja1105: document the PCS nodes
Some (not all) use cases are in dire need of describing the XPCS blocks
embedded in the NXP SJA1105 and SJA1110 switches in the device tree.
The use case driving this effort is specifying custom 'rx-polarity' or
'tx-polarity' property values.
These PCS blocks follow the same bindings as the other instances which
are memory-mapped using an APB3 or MCI interface.
Since the SJA1105 applies the
Documentation/devicetree/bindings/net/ethernet-switch.yaml schema
directly on the SPI device OF node, its bindings are incompatible with
describing address space regions where sub-devices like the XPCS exist.
Namely, ethernet-switch.yaml wants #address-cells and #size-cells = <0>
to satisfy the unit-address-less '^(ethernet-)?ports$' child node.
But the XPCS sub-devices want their unit address to be the start
of their "reg" region in the switch address space, and that
requires #address-cells and #size-cells = <1>.
If the SPI device OF node had an MFD-style schema, i.e. "(1)" from here:
https://lore.kernel.org/netdev/20260109121432.lu2o22iijd4i57qq@skbuf/
things would have been simpler. But that ship has sailed and we need to
continue supporting the direction in which the SJA1105 bindings have
started already.
The retrofit-ready compromise solution is for the ethernet-switch to
define a custom "regs" sub-node with #address-cells and #size-cells = <1>,
and this will hold any memory-mapped sub-devices, like the XPCS in this
case.
This solution could have been used for the "nxp,sja1110-base-t1-mdio"
and "nxp,sja1110-base-tx-mdio" sub-devices too (although that ship has
also sailed), and is further extensible for other SJA1110 sub-devices
not yet supported (GPIO controller, cascaded IRQ controller).
Document the XPCS integration-specific compatible string, positioning in
the switch's "regs" subnode, and the pcs-handle to them.
The "type: object" addition in the ethernet-port node is to suppress
a dt_binding_check warning that states "node schemas must have a type
or $ref". Rob Herring explains why this started being required just now:
https://lore.kernel.org/netdev/20251120173012.GA1563834-robh@kernel.org/
Because the regs and ethernet-pcs nodes are optional, I don't want to
pollute the example with them. However, I think I can add them to the
commit message:
compatible = "nxp,sja1105s";
...
regs {
#address-cells = <0x01>;
#size-cells = <0x01>;
ethernet-pcs@0 {
compatible = "nxp,sja1105-pcs";
reg = <0x00 0x800000>;
reg-names = "direct";
reg-io-width = <0x04>;
tx-polarity = <PHY_POL_INVERTED>;
};
};
compatible = "nxp,sja1110a";
...
regs {
#address-cells = <0x01>;
#size-cells = <0x01>;
ethernet-pcs@...000 {
compatible = "nxp,sja1110-pcs";
reg = <0x705000 0x1000>;
reg-names = "indirect";
reg-io-width = <0x04>;
tx-polarity = <PHY_POL_NORMAL>;
};
ethernet-pcs@...000 {
compatible = "nxp,sja1110-pcs";
reg = <0x706000 0x1000>;
reg-names = "indirect";
reg-io-width = <0x04>;
tx-polarity = <PHY_POL_NORMAL>;
};
ethernet-pcs@...000 {
compatible = "nxp,sja1110-pcs";
reg = <0x707000 0x1000>;
reg-names = "indirect";
reg-io-width = <0x04>;
tx-polarity = <PHY_POL_NORMAL>;
};
ethernet-pcs@...000 {
compatible = "nxp,sja1110-pcs";
reg = <0x708000 0x1000>;
reg-names = "indirect";
reg-io-width = <0x04>;
tx-polarity = <PHY_POL_NORMAL>;
};
};
Cc: Rob Herring <robh@...nel.org>
Cc: Krzysztof Kozlowski <krzk+dt@...nel.org>
Cc: Conor Dooley <conor+dt@...nel.org>
Cc: devicetree@...r.kernel.org
Signed-off-by: Vladimir Oltean <vladimir.oltean@....com>
---
v1->v2: rewrite commit message
.../bindings/net/dsa/nxp,sja1105.yaml | 27 +++++++++++++++++++
.../bindings/net/pcs/snps,dw-xpcs.yaml | 8 ++++++
2 files changed, 35 insertions(+)
diff --git a/Documentation/devicetree/bindings/net/dsa/nxp,sja1105.yaml b/Documentation/devicetree/bindings/net/dsa/nxp,sja1105.yaml
index 607b7fe8d28e..af86e425cd9a 100644
--- a/Documentation/devicetree/bindings/net/dsa/nxp,sja1105.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/nxp,sja1105.yaml
@@ -85,11 +85,31 @@ properties:
- compatible
- reg
+ regs:
+ type: object
+ description:
+ Optional container node for peripherals in the switch address space other
+ than the switching IP itself. This node and its children only need to be
+ described if board-specific properties need to be specified, like SerDes
+ lane polarity inversion. If absent, default descriptions are used.
+ additionalProperties: false
+
+ properties:
+ '#address-cells':
+ const: 1
+ '#size-cells':
+ const: 1
+
+ patternProperties:
+ "^ethernet-pcs@[0-9a-f]+$":
+ $ref: /schemas/net/pcs/snps,dw-xpcs.yaml#
+
patternProperties:
"^(ethernet-)?ports$":
additionalProperties: true
patternProperties:
"^(ethernet-)?port@[0-9]$":
+ type: object
allOf:
- if:
properties:
@@ -107,6 +127,13 @@ patternProperties:
tx-internal-delay-ps:
$ref: "#/$defs/internal-delay-ps"
+ properties:
+ pcs-handle:
+ description:
+ Phandle to a PCS device node from the "regs" container.
+ Can be skipped if the PCS description is missing - in that case,
+ the connection is implicit.
+
required:
- compatible
- reg
diff --git a/Documentation/devicetree/bindings/net/pcs/snps,dw-xpcs.yaml b/Documentation/devicetree/bindings/net/pcs/snps,dw-xpcs.yaml
index e77eec9ac9ee..46e4f611f714 100644
--- a/Documentation/devicetree/bindings/net/pcs/snps,dw-xpcs.yaml
+++ b/Documentation/devicetree/bindings/net/pcs/snps,dw-xpcs.yaml
@@ -25,6 +25,14 @@ description:
properties:
compatible:
oneOf:
+ - description:
+ Synopsys DesignWare XPCS in NXP SJA1105 switch (direct APB3 access
+ via SPI) with custom PMA
+ const: nxp,sja1105-pcs
+ - description:
+ Synopsys DesignWare XPCS in NXP SJA1110 switch (indirect APB3 access
+ via SPI) with custom PMA
+ const: nxp,sja1110-pcs
- description: Synopsys DesignWare XPCS with none or unknown PMA
const: snps,dw-xpcs
- description: Synopsys DesignWare XPCS with Consumer Gen1 3G PMA
--
2.34.1
Powered by blists - more mailing lists