162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci%YAML 1.2 362306a36Sopenharmony_ci--- 462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/memory-controllers/fsl/imx8m-ddrc.yaml# 562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml# 662306a36Sopenharmony_ci 762306a36Sopenharmony_cititle: i.MX8M DDR Controller 862306a36Sopenharmony_ci 962306a36Sopenharmony_cimaintainers: 1062306a36Sopenharmony_ci - Peng Fan <peng.fan@nxp.com> 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_cidescription: 1362306a36Sopenharmony_ci The DDRC block is integrated in i.MX8M for interfacing with DDR based 1462306a36Sopenharmony_ci memories. 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci It supports switching between different frequencies at runtime but during 1762306a36Sopenharmony_ci this process RAM itself becomes briefly inaccessible so actual frequency 1862306a36Sopenharmony_ci switching is implemented by TF-A code which runs from a SRAM area. 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci The Linux driver for the DDRC doesn't even map registers (they're included 2162306a36Sopenharmony_ci for the sake of "describing hardware"), it mostly just exposes firmware 2262306a36Sopenharmony_ci capabilities through standard Linux mechanism like devfreq and OPP tables. 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ciproperties: 2562306a36Sopenharmony_ci compatible: 2662306a36Sopenharmony_ci items: 2762306a36Sopenharmony_ci - enum: 2862306a36Sopenharmony_ci - fsl,imx8mn-ddrc 2962306a36Sopenharmony_ci - fsl,imx8mm-ddrc 3062306a36Sopenharmony_ci - fsl,imx8mq-ddrc 3162306a36Sopenharmony_ci - const: fsl,imx8m-ddrc 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci reg: 3462306a36Sopenharmony_ci maxItems: 1 3562306a36Sopenharmony_ci description: 3662306a36Sopenharmony_ci Base address and size of DDRC CTL area. 3762306a36Sopenharmony_ci This is not currently mapped by the imx8m-ddrc driver. 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci clocks: 4062306a36Sopenharmony_ci maxItems: 4 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci clock-names: 4362306a36Sopenharmony_ci items: 4462306a36Sopenharmony_ci - const: core 4562306a36Sopenharmony_ci - const: pll 4662306a36Sopenharmony_ci - const: alt 4762306a36Sopenharmony_ci - const: apb 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci operating-points-v2: true 5062306a36Sopenharmony_ci opp-table: 5162306a36Sopenharmony_ci type: object 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_cirequired: 5462306a36Sopenharmony_ci - reg 5562306a36Sopenharmony_ci - compatible 5662306a36Sopenharmony_ci - clocks 5762306a36Sopenharmony_ci - clock-names 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ciadditionalProperties: false 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ciexamples: 6262306a36Sopenharmony_ci - | 6362306a36Sopenharmony_ci #include <dt-bindings/clock/imx8mm-clock.h> 6462306a36Sopenharmony_ci ddrc: memory-controller@3d400000 { 6562306a36Sopenharmony_ci compatible = "fsl,imx8mm-ddrc", "fsl,imx8m-ddrc"; 6662306a36Sopenharmony_ci reg = <0x3d400000 0x400000>; 6762306a36Sopenharmony_ci clock-names = "core", "pll", "alt", "apb"; 6862306a36Sopenharmony_ci clocks = <&clk IMX8MM_CLK_DRAM_CORE>, 6962306a36Sopenharmony_ci <&clk IMX8MM_DRAM_PLL>, 7062306a36Sopenharmony_ci <&clk IMX8MM_CLK_DRAM_ALT>, 7162306a36Sopenharmony_ci <&clk IMX8MM_CLK_DRAM_APB>; 7262306a36Sopenharmony_ci operating-points-v2 = <&ddrc_opp_table>; 7362306a36Sopenharmony_ci }; 74