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

title: Texas Instruments ICSSM PRUSS Ethernet

maintainers:
  - Roger Quadros <rogerq@ti.com>
  - Andrew F. Davis <afd@ti.com>
  - Parvathi Pudi <parvathi@couthit.com>
  - Basharath Hussain Khaja <basharath@couthit.com>

description:
  Ethernet based on the Programmable Real-Time Unit and Industrial
  Communication Subsystem.

properties:
  compatible:
    enum:
      - ti,am57-prueth     # for AM57x SoC family
      - ti,am4376-prueth   # for AM43x SoC family
      - ti,am3359-prueth   # for AM33x SoC family

  sram:
    $ref: /schemas/types.yaml#/definitions/phandle
    description:
      phandle to OCMC SRAM node

  ti,mii-rt:
    $ref: /schemas/types.yaml#/definitions/phandle
    description:
      phandle to the MII_RT peripheral for ICSS

  ti,iep:
    $ref: /schemas/types.yaml#/definitions/phandle
    description:
      phandle to IEP (Industrial Ethernet Peripheral) for ICSS

  ti,ecap:
    $ref: /schemas/types.yaml#/definitions/phandle
    description:
      phandle to Enhanced Capture (eCAP) event for ICSS

  interrupts:
    items:
      - description: High priority Rx Interrupt specifier.
      - description: Low priority Rx Interrupt specifier.

  interrupt-names:
    items:
      - const: rx_hp
      - const: rx_lp

  ethernet-ports:
    type: object
    additionalProperties: false

    properties:
      '#address-cells':
        const: 1
      '#size-cells':
        const: 0

    patternProperties:
      ^ethernet-port@[0-1]$:
        type: object
        description: ICSSM PRUETH external ports
        $ref: ethernet-controller.yaml#
        unevaluatedProperties: false

        properties:
          reg:
            items:
              - enum: [0, 1]
            description: ICSSM PRUETH port number

          interrupts:
            maxItems: 3

          interrupt-names:
            items:
              - const: rx
              - const: emac_ptp_tx
              - const: hsr_ptp_tx

        required:
          - reg

    anyOf:
      - required:
          - ethernet-port@0
      - required:
          - ethernet-port@1

required:
  - compatible
  - sram
  - ti,mii-rt
  - ti,iep
  - ti,ecap
  - ethernet-ports
  - interrupts
  - interrupt-names

allOf:
  - $ref: /schemas/remoteproc/ti,pru-consumer.yaml#

unevaluatedProperties: false

examples:
  - |
    /* Dual-MAC Ethernet application node on PRU-ICSS2 */
    pruss2_eth: pruss2-eth {
      compatible = "ti,am57-prueth";
      ti,prus = <&pru2_0>, <&pru2_1>;
      sram = <&ocmcram1>;
      ti,mii-rt = <&pruss2_mii_rt>;
      ti,iep = <&pruss2_iep>;
      ti,ecap = <&pruss2_ecap>;
      interrupts = <20 2 2>, <21 3 3>;
      interrupt-names = "rx_hp", "rx_lp";
      interrupt-parent = <&pruss2_intc>;

      ethernet-ports {
        #address-cells = <1>;
        #size-cells = <0>;
        pruss2_emac0: ethernet-port@0 {
          reg = <0>;
          phy-handle = <&pruss2_eth0_phy>;
          phy-mode = "mii";
          interrupts = <20 2 2>, <26 6 6>, <23 6 6>;
          interrupt-names = "rx", "emac_ptp_tx", "hsr_ptp_tx";
          /* Filled in by bootloader */
          local-mac-address = [00 00 00 00 00 00];
        };

        pruss2_emac1: ethernet-port@1 {
          reg = <1>;
          phy-handle = <&pruss2_eth1_phy>;
          phy-mode = "mii";
          interrupts = <21 3 3>, <27 9 7>, <24 9 7>;
          interrupt-names = "rx", "emac_ptp_tx", "hsr_ptp_tx";
          /* Filled in by bootloader */
          local-mac-address = [00 00 00 00 00 00];
        };
      };
    };
  - |
    /* Dual-MAC Ethernet application node on PRU-ICSS1 */
    pruss1_eth: pruss1-eth {
      compatible = "ti,am4376-prueth";
      ti,prus = <&pru1_0>, <&pru1_1>;
      sram = <&ocmcram>;
      ti,mii-rt = <&pruss1_mii_rt>;
      ti,iep = <&pruss1_iep>;
      ti,ecap = <&pruss1_ecap>;
      interrupts = <20 2 2>, <21 3 3>;
      interrupt-names = "rx_hp", "rx_lp";
      interrupt-parent = <&pruss1_intc>;

      pinctrl-0 = <&pruss1_eth_default>;
      pinctrl-names = "default";

      ethernet-ports {
        #address-cells = <1>;
        #size-cells = <0>;
        pruss1_emac0: ethernet-port@0 {
          reg = <0>;
          phy-handle = <&pruss1_eth0_phy>;
          phy-mode = "mii";
          interrupts = <20 2 2>, <26 6 6>, <23 6 6>;
          interrupt-names = "rx", "emac_ptp_tx",
                                          "hsr_ptp_tx";
          /* Filled in by bootloader */
          local-mac-address = [00 00 00 00 00 00];
        };

        pruss1_emac1: ethernet-port@1 {
          reg = <1>;
          phy-handle = <&pruss1_eth1_phy>;
          phy-mode = "mii";
          interrupts = <21 3 3>, <27 9 7>, <24 9 7>;
          interrupt-names = "rx", "emac_ptp_tx",
                                          "hsr_ptp_tx";
          /* Filled in by bootloader */
          local-mac-address = [00 00 00 00 00 00];
        };
      };
    };
  - |
    /* Dual-MAC Ethernet application node on PRU-ICSS */
    pruss_eth: pruss-eth {
      compatible = "ti,am3359-prueth";
      ti,prus = <&pru0>, <&pru1>;
      sram = <&ocmcram>;
      ti,mii-rt = <&pruss_mii_rt>;
      ti,iep = <&pruss_iep>;
      ti,ecap = <&pruss_ecap>;
      interrupts = <20 2 2>, <21 3 3>;
      interrupt-names = "rx_hp", "rx_lp";
      interrupt-parent = <&pruss_intc>;

      pinctrl-0 = <&pruss_eth_default>;
      pinctrl-names = "default";

      ethernet-ports {
        #address-cells = <1>;
        #size-cells = <0>;
        pruss_emac0: ethernet-port@0 {
          reg = <0>;
          phy-handle = <&pruss_eth0_phy>;
          phy-mode = "mii";
          interrupts = <20 2 2>, <26 6 6>, <23 6 6>;
          interrupt-names = "rx", "emac_ptp_tx",
                                          "hsr_ptp_tx";
          /* Filled in by bootloader */
          local-mac-address = [00 00 00 00 00 00];
        };

        pruss_emac1: ethernet-port@1 {
          reg = <1>;
          phy-handle = <&pruss_eth1_phy>;
          phy-mode = "mii";
          interrupts = <21 3 3>, <27 9 7>, <24 9 7>;
          interrupt-names = "rx", "emac_ptp_tx",
                                          "hsr_ptp_tx";
          /* Filled in by bootloader */
          local-mac-address = [00 00 00 00 00 00];
        };
      };
    };
