162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci%YAML 1.2
362306a36Sopenharmony_ci---
462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/interconnect/fsl,imx8m-noc.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: Generic i.MX bus frequency device
862306a36Sopenharmony_ci
962306a36Sopenharmony_cimaintainers:
1062306a36Sopenharmony_ci  - Peng Fan <peng.fan@nxp.com>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cidescription: |
1362306a36Sopenharmony_ci  The i.MX SoC family has multiple buses for which clock frequency (and
1462306a36Sopenharmony_ci  sometimes voltage) can be adjusted.
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci  Some of those buses expose register areas mentioned in the memory maps as GPV
1762306a36Sopenharmony_ci  ("Global Programmers View") but not all. Access to this area might be denied
1862306a36Sopenharmony_ci  for normal (non-secure) world.
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci  The buses are based on externally licensed IPs such as ARM NIC-301 and
2162306a36Sopenharmony_ci  Arteris FlexNOC but DT bindings are specific to the integration of these bus
2262306a36Sopenharmony_ci  interconnect IPs into imx SOCs.
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ciproperties:
2562306a36Sopenharmony_ci  compatible:
2662306a36Sopenharmony_ci    oneOf:
2762306a36Sopenharmony_ci      - items:
2862306a36Sopenharmony_ci          - enum:
2962306a36Sopenharmony_ci              - fsl,imx8mm-nic
3062306a36Sopenharmony_ci              - fsl,imx8mn-nic
3162306a36Sopenharmony_ci              - fsl,imx8mp-nic
3262306a36Sopenharmony_ci              - fsl,imx8mq-nic
3362306a36Sopenharmony_ci          - const: fsl,imx8m-nic
3462306a36Sopenharmony_ci      - items:
3562306a36Sopenharmony_ci          - enum:
3662306a36Sopenharmony_ci              - fsl,imx8mm-noc
3762306a36Sopenharmony_ci              - fsl,imx8mn-noc
3862306a36Sopenharmony_ci              - fsl,imx8mp-noc
3962306a36Sopenharmony_ci              - fsl,imx8mq-noc
4062306a36Sopenharmony_ci          - const: fsl,imx8m-noc
4162306a36Sopenharmony_ci      - const: fsl,imx8m-nic
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci  reg:
4462306a36Sopenharmony_ci    maxItems: 1
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci  clocks:
4762306a36Sopenharmony_ci    maxItems: 1
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci  operating-points-v2: true
5062306a36Sopenharmony_ci  opp-table:
5162306a36Sopenharmony_ci    type: object
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci  fsl,ddrc:
5462306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/phandle
5562306a36Sopenharmony_ci    description:
5662306a36Sopenharmony_ci      Phandle to DDR Controller.
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci  '#interconnect-cells':
5962306a36Sopenharmony_ci    description:
6062306a36Sopenharmony_ci      If specified then also act as an interconnect provider. Should only be
6162306a36Sopenharmony_ci      set once per soc on the main noc.
6262306a36Sopenharmony_ci    const: 1
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_cirequired:
6562306a36Sopenharmony_ci  - compatible
6662306a36Sopenharmony_ci  - clocks
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ciadditionalProperties: false
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ciexamples:
7162306a36Sopenharmony_ci  - |
7262306a36Sopenharmony_ci    #include <dt-bindings/clock/imx8mm-clock.h>
7362306a36Sopenharmony_ci    #include <dt-bindings/interconnect/imx8mm.h>
7462306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/arm-gic.h>
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_ci    noc: interconnect@32700000 {
7762306a36Sopenharmony_ci        compatible = "fsl,imx8mm-noc", "fsl,imx8m-noc";
7862306a36Sopenharmony_ci        reg = <0x32700000 0x100000>;
7962306a36Sopenharmony_ci        clocks = <&clk IMX8MM_CLK_NOC>;
8062306a36Sopenharmony_ci        #interconnect-cells = <1>;
8162306a36Sopenharmony_ci        fsl,ddrc = <&ddrc>;
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ci        operating-points-v2 = <&noc_opp_table>;
8462306a36Sopenharmony_ci        noc_opp_table: opp-table {
8562306a36Sopenharmony_ci            compatible = "operating-points-v2";
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_ci            opp-133333333 {
8862306a36Sopenharmony_ci                opp-hz = /bits/ 64 <133333333>;
8962306a36Sopenharmony_ci            };
9062306a36Sopenharmony_ci            opp-800000000 {
9162306a36Sopenharmony_ci                opp-hz = /bits/ 64 <800000000>;
9262306a36Sopenharmony_ci            };
9362306a36Sopenharmony_ci        };
9462306a36Sopenharmony_ci    };
9562306a36Sopenharmony_ci
9662306a36Sopenharmony_ci    ddrc: memory-controller@3d400000 {
9762306a36Sopenharmony_ci        compatible = "fsl,imx8mm-ddrc", "fsl,imx8m-ddrc";
9862306a36Sopenharmony_ci        reg = <0x3d400000 0x400000>;
9962306a36Sopenharmony_ci        clock-names = "core", "pll", "alt", "apb";
10062306a36Sopenharmony_ci        clocks = <&clk IMX8MM_CLK_DRAM_CORE>,
10162306a36Sopenharmony_ci                 <&clk IMX8MM_DRAM_PLL>,
10262306a36Sopenharmony_ci                 <&clk IMX8MM_CLK_DRAM_ALT>,
10362306a36Sopenharmony_ci                 <&clk IMX8MM_CLK_DRAM_APB>;
10462306a36Sopenharmony_ci    };
105