From: Sean Anderson <sean.anderson@seco.com>
To: Rob Herring <robh@kernel.org>
Cc: "David S . Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>,
Madalin Bucur <madalin.bucur@nxp.com>,
netdev@vger.kernel.org, Russell King <linux@armlinux.org.uk>,
Paolo Abeni <pabeni@redhat.com>,
linux-arm-kernel@lists.infradead.org,
Eric Dumazet <edumazet@google.com>,
linux-kernel@vger.kernel.org,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
devicetree@vger.kernel.org
Subject: Re: [PATCH net-next v2 03/35] dt-bindings: net: fman: Add additional interface properties
Date: Thu, 30 Jun 2022 12:11:10 -0400 [thread overview]
Message-ID: <e154ff02-7bcd-916a-0ec4-56bf624ccf7b@seco.com> (raw)
In-Reply-To: <20220630160156.GA2745952-robh@kernel.org>
Hi Rob,
On 6/30/22 12:01 PM, Rob Herring wrote:
> On Tue, Jun 28, 2022 at 06:13:32PM -0400, Sean Anderson wrote:
>> At the moment, mEMACs are configured almost completely based on the
>> phy-connection-type. That is, if the phy interface is RGMII, it assumed
>> that RGMII is supported. For some interfaces, it is assumed that the
>> RCW/bootloader has set up the SerDes properly. This is generally OK, but
>> restricts runtime reconfiguration. The actual link state is never
>> reported.
>>
>> To address these shortcomings, the driver will need additional
>> information. First, it needs to know how to access the PCS/PMAs (in
>> order to configure them and get the link status). The SGMII PCS/PMA is
>> the only currently-described PCS/PMA. Add the XFI and QSGMII PCS/PMAs as
>> well. The XFI (and 1GBase-KR) PCS/PMA is a c45 "phy" which sits on the
>> same MDIO bus as SGMII PCS/PMA. By default they will have conflicting
>> addresses, but they are also not enabled at the same time by default.
>> Therefore, we can let the XFI PCS/PMA be the default when
>> phy-connection-type is xgmii. This will allow for
>> backwards-compatibility.
>>
>> QSGMII, however, cannot work with the current binding. This is because
>> the QSGMII PCS/PMAs are only present on one MAC's MDIO bus. At the
>> moment this is worked around by having every MAC write to the PCS/PMA
>> addresses (without checking if they are present). This only works if
>> each MAC has the same configuration, and only if we don't need to know
>> the status. Because the QSGMII PCS/PMA will typically be located on a
>> different MDIO bus than the MAC's SGMII PCS/PMA, there is no fallback
>> for the QSGMII PCS/PMA.
>>
>> mEMACs (across all SoCs) support the following protocols:
>>
>> - MII
>> - RGMII
>> - SGMII, 1000Base-X, and 1000Base-KX
>> - 2500Base-X (aka 2.5G SGMII)
>> - QSGMII
>> - 10GBase-R (aka XFI) and 10GBase-KR
>> - XAUI and HiGig
>>
>> Each line documents a set of orthogonal protocols (e.g. XAUI is
>> supported if and only if HiGig is supported). Additionally,
>>
>> - XAUI implies support for 10GBase-R
>> - 10GBase-R is supported if and only if RGMII is not supported
>> - 2500Base-X implies support for 1000Base-X
>> - MII implies support for RGMII
>>
>> To switch between different protocols, we must reconfigure the SerDes.
>> This is done by using the standard phys property. We can also use it to
>> validate whether different protocols are supported (e.g. using
>> phy_validate). This will work for serial protocols, but not RGMII or
>> MII. Additionally, we still need to be compatible when there is no
>> SerDes.
>>
>> While we can detect 10G support by examining the port speed (as set by
>> fsl,fman-10g-port), we cannot determine support for any of the other
>> protocols based on the existing binding. In fact, the binding works
>> against us in some respects, because pcsphy-handle is required even if
>> there is no possible PCS/PMA for that MAC. To allow for backwards-
>> compatibility, we use a boolean-style property for RGMII (instead of
>> presence/absence-style). When the property for RGMII is missing, we will
>> assume that it is supported. The exception is MII, since no existing
>> device trees use it (as far as I could tell).
>>
>> Unfortunately, QSGMII support will be broken for old device trees. There
>> is nothing we can do about this because of the PCS/PMA situation (as
>> described above).
>>
>> Signed-off-by: Sean Anderson <sean.anderson@seco.com>
>> ---
>>
>> Changes in v2:
>> - Better document how we select which PCS to use in the default case
>>
>> .../bindings/net/fsl,fman-dtsec.yaml | 52 +++++++++++++++++--
>> .../devicetree/bindings/net/fsl-fman.txt | 5 +-
>> 2 files changed, 51 insertions(+), 6 deletions(-)
>>
>> diff --git a/Documentation/devicetree/bindings/net/fsl,fman-dtsec.yaml b/Documentation/devicetree/bindings/net/fsl,fman-dtsec.yaml
>> index 809df1589f20..ecb772258164 100644
>> --- a/Documentation/devicetree/bindings/net/fsl,fman-dtsec.yaml
>> +++ b/Documentation/devicetree/bindings/net/fsl,fman-dtsec.yaml
>> @@ -85,9 +85,41 @@ properties:
>> $ref: /schemas/types.yaml#/definitions/phandle
>> description: A reference to the IEEE1588 timer
>>
>> + phys:
>> + description: A reference to the SerDes lane(s)
>> + maxItems: 1
>> +
>> + phy-names:
>> + items:
>> + - const: serdes
>> +
>> pcsphy-handle:
>> - $ref: /schemas/types.yaml#/definitions/phandle
>> - description: A reference to the PCS (typically found on the SerDes)
>> + $ref: /schemas/types.yaml#/definitions/phandle-array
>> + minItems: 1
>> + maxItems: 3
>
> What determines how many entries?
It depends on what the particular MAC supports. From what I can tell, the following
combinations are valid:
- Neither SGMII, QSGMII, or XFI
- Just SGMII
- Just QSGMII
- SGMII and QSGMII
- SGMII and XFI
- All of SGMII, QSGMII, and XFI
All of these are used on different SoCs.
>> + description: |
>> + A reference to the various PCSs (typically found on the SerDes). If
>> + pcs-names is absent, and phy-connection-type is "xgmii", then the first
>> + reference will be assumed to be for "xfi". Otherwise, if pcs-names is
>> + absent, then the first reference will be assumed to be for "sgmii".
>> +
>> + pcs-names:
>> + $ref: /schemas/types.yaml#/definitions/string-array
>> + minItems: 1
>> + maxItems: 3
>> + contains:
>> + enum:
>> + - sgmii
>> + - qsgmii
>> + - xfi
>
> This means '"foo", "xfi", "bar"' is valid. I think you want to
> s/contains/items/.
>
>> + description: The type of each PCS in pcsphy-handle.
>> +
>
>> + rgmii:
>> + enum: [0, 1]
>> + description: 1 indicates RGMII is supported, and 0 indicates it is not.
>> +
>> + mii:
>> + description: If present, indicates that MII is supported.
>
> Types? Need vendor prefixes.
OK.
> Are these board specific or SoC specific? Properties are appropriate for
> the former. The latter case should be implied by the compatible string.
Unfortunately, there are not existing specific compatible strings for each
device in each SoC. I suppose those could be added; however, this basically
reflects how each device is hooked up. E.g. on one SoC a device would be
connected to the RGMII pins, but not on another SoC. The MAC itself still
has hardware support for RGMII, but such a configuration would not function.
--Sean
>>
>> tbi-handle:
>> $ref: /schemas/types.yaml#/definitions/phandle
>> @@ -100,6 +132,10 @@ required:
>> - fsl,fman-ports
>> - ptp-timer
>>
>> +dependencies:
>> + pcs-names: [pcsphy-handle]
>> + mii: [rgmii]
>> +
>> allOf:
>> - $ref: "ethernet-controller.yaml#"
>> - if:
>> @@ -117,7 +153,11 @@ allOf:
>> const: fsl,fman-memac
>> then:
>> required:
>> - - pcsphy-handle
>> + - rgmii
>> + else:
>> + properties:
>> + rgmii: false
>> + mii: false
>>
>> unevaluatedProperties: false
>>
>> @@ -138,7 +178,11 @@ examples:
>> reg = <0xe8000 0x1000>;
>> fsl,fman-ports = <&fman0_rx_0x0c &fman0_tx_0x2c>;
>> ptp-timer = <&ptp_timer0>;
>> - pcsphy-handle = <&pcsphy4>;
>> + pcsphy-handle = <&pcsphy4>, <&qsgmiib_pcs1>;
>> + pcs-names = "sgmii", "qsgmii";
>> + rgmii = <0>;
>> phy-handle = <&sgmii_phy1>;
>> phy-connection-type = "sgmii";
>> + phys = <&serdes1 1>;
>> + phy-names = "serdes";
>> };
>> diff --git a/Documentation/devicetree/bindings/net/fsl-fman.txt b/Documentation/devicetree/bindings/net/fsl-fman.txt
>> index b9055335db3b..bda4b41af074 100644
>> --- a/Documentation/devicetree/bindings/net/fsl-fman.txt
>> +++ b/Documentation/devicetree/bindings/net/fsl-fman.txt
>> @@ -320,8 +320,9 @@ For internal PHY device on internal mdio bus, a PHY node should be created.
>> See the definition of the PHY node in booting-without-of.txt for an
>> example of how to define a PHY (Internal PHY has no interrupt line).
>> - For "fsl,fman-mdio" compatible internal mdio bus, the PHY is TBI PHY.
>> -- For "fsl,fman-memac-mdio" compatible internal mdio bus, the PHY is PCS PHY,
>> - PCS PHY addr must be '0'.
>> +- For "fsl,fman-memac-mdio" compatible internal mdio bus, the PHY is PCS PHY.
>> + The PCS PHY address should correspond to the value of the appropriate
>> + MDEV_PORT.
>>
>> EXAMPLE
>>
>> --
>> 2.35.1.1320.gc452695387.dirty
>>
>>
>
next prev parent reply other threads:[~2022-06-30 16:11 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-28 22:13 [PATCH net-next v2 00/35] [RFT] net: dpaa: Convert to phylink Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 01/35] dt-bindings: phy: Add QorIQ SerDes binding Sean Anderson
2022-06-29 2:09 ` Rob Herring
2022-06-30 15:53 ` Sean Anderson
2022-06-30 17:27 ` Rob Herring
2022-06-30 18:01 ` Sean Anderson
2022-06-30 18:08 ` Krzysztof Kozlowski
2022-06-30 18:16 ` Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 02/35] dt-bindings: net: Convert FMan MAC bindings to yaml Sean Anderson
2022-06-29 2:09 ` Rob Herring
2022-06-29 14:50 ` Russell King (Oracle)
2022-06-30 14:59 ` Sean Anderson
2022-07-01 0:01 ` Rob Herring
2022-06-28 22:13 ` [PATCH net-next v2 03/35] dt-bindings: net: fman: Add additional interface properties Sean Anderson
2022-06-30 16:01 ` Rob Herring
2022-06-30 16:11 ` Sean Anderson [this message]
2022-07-12 19:36 ` Rob Herring
2022-07-12 19:56 ` Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 04/35] [RFC] phy: fsl: Add Lynx 10G SerDes driver Sean Anderson
2022-06-30 15:56 ` Ioana Ciornei
2022-06-30 18:11 ` Sean Anderson
2022-07-01 10:03 ` Ioana Ciornei
2022-07-01 15:51 ` Sean Anderson
[not found] ` <343faa45-4e4a-7a7f-b0c3-fcc9db89e976@seco.com>
2022-07-01 21:04 ` Sean Anderson
2022-07-05 6:12 ` Vinod Koul
2022-07-05 15:29 ` Sean Anderson
2022-07-06 16:57 ` Vinod Koul
2022-07-07 15:00 ` Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 05/35] net: fman: Convert to SPDX identifiers Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 06/35] net: fman: Don't pass comm_mode to enable/disable Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 07/35] net: fman: Store en/disable in mac_device instead of mac_priv_s Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 08/35] net: fman: dtsec: Always gracefully stop/start Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 09/35] net: fman: Get PCS node in per-mac init Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 10/35] net: fman: Store initialization function in match data Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 11/35] net: fman: Move struct dev to mac_device Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 12/35] net: fman: Configure fixed link in memac_initialization Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 13/35] net: fman: Export/rename some common functions Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 14/35] net: fman: memac: Use params instead of priv for max_speed Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 15/35] net: fman: Move initialization to mac-specific files Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 16/35] net: fman: Mark mac methods static Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 17/35] net: fman: Inline several functions into initialization Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 18/35] net: fman: Remove internal_phy_node from params Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 19/35] net: fman: Map the base address once Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 20/35] net: fman: Pass params directly to mac init Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 21/35] net: fman: Use mac_dev for some params Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 22/35] net: fman: Specify type of mac_dev for exception_cb Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 23/35] net: fman: Clean up error handling Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 24/35] net: fman: Change return type of disable to void Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 25/35] net: dpaa: Use mac_dev variable in dpaa_netdev_init Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 26/35] soc: fsl: qbman: Add helper for sanity checking cgr ops Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 27/35] soc: fsl: qbman: Add CGR update function Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 28/35] net: dpaa: Adjust queue depth on rate change Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 29/35] net: fman: memac: Add serdes support Sean Anderson
2022-06-28 22:13 ` [PATCH net-next v2 30/35] net: fman: memac: Use lynx pcs driver Sean Anderson
2022-06-28 22:14 ` [PATCH net-next v2 31/35] [RFT] net: dpaa: Convert to phylink Sean Anderson
2022-06-29 14:44 ` Russell King (Oracle)
2022-06-30 15:56 ` Sean Anderson
2022-06-28 22:14 ` [PATCH net-next v2 32/35] qoriq: Specify which MACs support RGMII Sean Anderson
2022-06-28 22:14 ` [PATCH net-next v2 33/35] qoriq: Add nodes for QSGMII PCSs Sean Anderson
2022-06-28 22:14 ` [PATCH net-next v2 34/35] arm64: dts: ls1046a: Add serdes bindings Sean Anderson
2022-06-28 22:14 ` [PATCH net-next v2 35/35] arm64: dts: ls1046ardb: " Sean Anderson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e154ff02-7bcd-916a-0ec4-56bf624ccf7b@seco.com \
--to=sean.anderson@seco.com \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=edumazet@google.com \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=kuba@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=madalin.bucur@nxp.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=robh@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®