# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/arm/qcom,coresight-tnoc.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Qualcomm Trace Network On Chip - TNOC

maintainers:
  - Yuanfang Zhang <quic_yuanfang@quicinc.com>

description: >
  The Trace Network On Chip (TNOC) is an integration hierarchy hardware
  component that integrates the functionalities of TPDA and funnels.

  It sits in the different subsystem of SOC and aggregates the trace and
  transports it to Aggregation TNOC or to coresight trace sink eventually.
  TNOC embeds bridges for all the interfaces APB, ATB, TPDA and NTS (Narrow
  Time Stamp).

  TNOC can take inputs from different trace sources i.e. ATB, TPDM.

  Note this binding is specifically intended for Aggregator TNOC instances.

# Need a custom select here or 'arm,primecell' will match on lots of nodes
select:
  properties:
    compatible:
      contains:
        enum:
          - qcom,coresight-tnoc
  required:
    - compatible

properties:
  $nodename:
    pattern: "^tn(@[0-9a-f]+)$"

  compatible:
    items:
      - const: qcom,coresight-tnoc
      - const: arm,primecell

  reg:
    maxItems: 1

  clock-names:
    items:
      - const: apb_pclk

  clocks:
    items:
      - description: APB register access clock

  in-ports:
    $ref: /schemas/graph.yaml#/properties/ports

    patternProperties:
      '^port(@[0-9a-f]{1,2})?$':
        description: Input connections from CoreSight Trace Bus
        $ref: /schemas/graph.yaml#/properties/port

  out-ports:
    $ref: /schemas/graph.yaml#/properties/ports
    additionalProperties: false

    properties:
      port:
        description:
          Output connection to CoreSight Trace Bus
        $ref: /schemas/graph.yaml#/properties/port

required:
  - compatible
  - reg
  - clocks
  - clock-names
  - in-ports
  - out-ports

additionalProperties: false

examples:
  - |
    tn@109ab000  {
      compatible = "qcom,coresight-tnoc", "arm,primecell";
      reg = <0x109ab000 0x4200>;

      clocks = <&aoss_qmp>;
      clock-names = "apb_pclk";

      in-ports {
        #address-cells = <1>;
        #size-cells = <0>;

        port@0 {
          reg = <0>;

          tn_ag_in_tpdm_gcc: endpoint {
            remote-endpoint = <&tpdm_gcc_out_tn_ag>;
          };
        };
      };

      out-ports {
        port {
          tn_ag_out_funnel_in1: endpoint {
            remote-endpoint = <&funnel_in1_in_tn_ag>;
          };
        };
      };
    };
...
