# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/net/fsl,fman-dtsec.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: NXP FMan MAC

maintainers:
  - Madalin Bucur <madalin.bucur@nxp.com>

description: |
  Each FMan has several MACs, each implementing an Ethernet interface. Earlier
  versions of FMan used the Datapath Three Speed Ethernet Controller (dTSEC) for
  10/100/1000 MBit/s speeds, and the 10-Gigabit Ethernet Media Access Controller
  (10GEC) for 10 Gbit/s speeds. Later versions of FMan use the Multirate
  Ethernet Media Access Controller (mEMAC) to handle all speeds.

properties:
  compatible:
    enum:
      - fsl,fman-dtsec
      - fsl,fman-xgec
      - fsl,fman-memac

  cell-index:
    maximum: 64
    description: |
      FManV2:
      register[bit]           MAC             cell-index
      ============================================================
      FM_EPI[16]              XGEC            8
      FM_EPI[16+n]            dTSECn          n-1
      FM_NPI[11+n]            dTSECn          n-1
              n = 1,..,5

      FManV3:
      register[bit]           MAC             cell-index
      ============================================================
      FM_EPI[16+n]            mEMACn          n-1
      FM_EPI[25]              mEMAC10         9

      FM_NPI[11+n]            mEMACn          n-1
      FM_NPI[10]              mEMAC10         9
      FM_NPI[11]              mEMAC9          8
              n = 1,..8

      FM_EPI and FM_NPI are located in the FMan memory map.

      2. SoC registers:

      - P2041, P3041, P4080 P5020, P5040:
      register[bit]           FMan            MAC             cell
                              Unit                            index
      ============================================================
      DCFG_DEVDISR2[7]        1               XGEC            8
      DCFG_DEVDISR2[7+n]      1               dTSECn          n-1
      DCFG_DEVDISR2[15]       2               XGEC            8
      DCFG_DEVDISR2[15+n]     2               dTSECn          n-1
              n = 1,..5

      - T1040, T2080, T4240, B4860:
      register[bit]                   FMan    MAC             cell
                                      Unit                    index
      ============================================================
      DCFG_CCSR_DEVDISR2[n-1]         1       mEMACn          n-1
      DCFG_CCSR_DEVDISR2[11+n]        2       mEMACn          n-1
              n = 1,..6,9,10

      EVDISR, DCFG_DEVDISR2 and DCFG_CCSR_DEVDISR2 are located in
      the specific SoC "Device Configuration/Pin Control" Memory
      Map.

  reg:
    maxItems: 1

  fsl,fman-ports:
    $ref: /schemas/types.yaml#/definitions/phandle-array
    maxItems: 2
    description: |
      An array of two references: the first is the FMan RX port and the second
      is the TX port used by this MAC.

  ptp-timer:
    $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-array
    minItems: 1
    maxItems: 3
    deprecated: true
    description: See pcs-handle.

  pcs-handle:
    minItems: 1
    maxItems: 3
    description: |
      A reference to the various PCSs (typically found on the SerDes). If
      pcs-handle-names is absent, and phy-connection-type is "xgmii", then the first
      reference will be assumed to be for "xfi". Otherwise, if pcs-handle-names is
      absent, then the first reference will be assumed to be for "sgmii".

  pcs-handle-names:
    minItems: 1
    maxItems: 3
    items:
      enum:
        - sgmii
        - qsgmii
        - xfi
    description: The type of each PCS in pcsphy-handle.

  tbi-handle:
    $ref: /schemas/types.yaml#/definitions/phandle
    description: A reference to the (TBI-based) PCS

required:
  - compatible
  - cell-index
  - reg
  - fsl,fman-ports
  - ptp-timer

dependencies:
  pcs-handle-names:
    - pcs-handle

allOf:
  - $ref: ethernet-controller.yaml#
  - if:
      properties:
        compatible:
          contains:
            const: fsl,fman-dtsec
    then:
      required:
        - tbi-handle

unevaluatedProperties: false

examples:
  - |
    ethernet@e0000 {
            compatible = "fsl,fman-dtsec";
            cell-index = <0>;
            reg = <0xe0000 0x1000>;
            fsl,fman-ports = <&fman1_rx8 &fman1_tx28>;
            ptp-timer = <&ptp_timer>;
            tbi-handle = <&tbi0>;
    };
  - |
    ethernet@e8000 {
            cell-index = <4>;
            compatible = "fsl,fman-memac";
            reg = <0xe8000 0x1000>;
            fsl,fman-ports = <&fman0_rx_0x0c &fman0_tx_0x2c>;
            ptp-timer = <&ptp_timer0>;
            pcs-handle = <&pcsphy4>, <&qsgmiib_pcs1>;
            pcs-handle-names = "sgmii", "qsgmii";
            phys = <&serdes1 1>;
            phy-names = "serdes";
    };
...