# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
# Copyright 2018 Linaro Ltd.
%YAML 1.2
---
$id: http://devicetree.org/schemas/net/intel,ixp4xx-ethernet.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Intel IXP4xx ethernet

allOf:
  - $ref: ethernet-controller.yaml#

maintainers:
  - Linus Walleij <linus.walleij@linaro.org>

description: |
  The Intel IXP4xx ethernet makes use of the IXP4xx NPE (Network
  Processing Engine) and the IXP4xx Queue Manager to process
  the ethernet frames. It can optionally contain an MDIO bus to
  talk to PHYs.

properties:
  compatible:
    const: intel,ixp4xx-ethernet

  reg:
    maxItems: 1
    description: Ethernet MMIO address range

  queue-rx:
    $ref: /schemas/types.yaml#/definitions/phandle-array
    items:
      - items:
          - description: phandle to the RX queue node
          - description: RX queue instance to use
    description: phandle to the RX queue on the NPE

  queue-txready:
    $ref: /schemas/types.yaml#/definitions/phandle-array
    items:
      - items:
          - description: phandle to the TX READY queue node
          - description: TX READY queue instance to use
    description: phandle to the TX READY queue on the NPE

  phy-mode: true

  phy-handle: true

  intel,npe-handle:
    $ref: /schemas/types.yaml#/definitions/phandle-array
    items:
      - items:
          - description: phandle to the NPE this ethernet instance is using
          - description: the NPE instance to use
    description: phandle to the NPE this ethernet instance is using
      and the instance to use in the second cell

  mdio:
    $ref: mdio.yaml#
    unevaluatedProperties: false
    description: optional node for embedded MDIO controller

required:
  - compatible
  - reg
  - queue-rx
  - queue-txready
  - intel,npe-handle

additionalProperties: false

examples:
  - |
    npe: npe@c8006000 {
      compatible = "intel,ixp4xx-network-processing-engine";
      reg = <0xc8006000 0x1000>, <0xc8007000 0x1000>, <0xc8008000 0x1000>;
    };

    ethernet@c8009000 {
      compatible = "intel,ixp4xx-ethernet";
      reg = <0xc8009000 0x1000>;
      queue-rx = <&qmgr 4>;
      queue-txready = <&qmgr 21>;
      intel,npe-handle = <&npe 1>;
      phy-mode = "rgmii";
      phy-handle = <&phy1>;
    };

    ethernet@c800c000 {
      compatible = "intel,ixp4xx-ethernet";
      reg = <0xc800c000 0x1000>;
      queue-rx = <&qmgr 3>;
      queue-txready = <&qmgr 20>;
      intel,npe-handle = <&npe 2>;
      phy-mode = "rgmii";
      phy-handle = <&phy2>;

      mdio {
        #address-cells = <1>;
        #size-cells = <0>;
        phy1: ethernet-phy@1 {
          reg = <1>;
        };
        phy2: ethernet-phy@2 {
          reg = <2>;
        };
      };
    };