dt-bindings: clock: Add ARTPEC-8 clock controller

Add dt-schema for Axis ARTPEC-8 SoC clock controller.

The Clock Management Unit (CMU) has a top-level block CMU_CMU
which generates clocks for other blocks.

Add device-tree binding definitions for following CMU blocks:
- CMU_CMU
- CMU_BUS
- CMU_CORE
- CMU_CPUCL
- CMU_FSYS
- CMU_IMEM
- CMU_PERI

Signed-off-by: Hakyeong Kim <hgkim05@coasia.com>
Signed-off-by: SeonGu Kang <ksk4725@coasia.com>
Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
Signed-off-by: Ravi Patel <ravi.patel@samsung.com>
Link: https://lore.kernel.org/r/20250825114436.46882-2-ravi.patel@samsung.com
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
This commit is contained in:
Hakyeong Kim 2025-08-25 17:14:27 +05:30 committed by Krzysztof Kozlowski
parent 8f5ae30d69
commit 91f98de423
2 changed files with 382 additions and 0 deletions

View File

@ -0,0 +1,213 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/clock/axis,artpec8-clock.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Axis ARTPEC-8 SoC clock controller
maintainers:
- Jesper Nilsson <jesper.nilsson@axis.com>
description: |
ARTPEC-8 clock controller is comprised of several CMU (Clock Management Unit)
units, generating clocks for different domains. Those CMU units are modeled
as separate device tree nodes, and might depend on each other.
The root clock in that root tree is an external clock: OSCCLK (25 MHz).
This external clock must be defined as a fixed-rate clock in dts.
CMU_CMU is a top-level CMU, where all base clocks are prepared using PLLs and
dividers; all other clocks of function blocks (other CMUs) are usually
derived from CMU_CMU.
Each clock is assigned an identifier and client nodes can use this identifier
to specify the clock which they consume. All clocks available for usage
in clock consumer nodes are defined as preprocessor macros in
'include/dt-bindings/clock/axis,artpec8-clk.h' header.
properties:
compatible:
enum:
- axis,artpec8-cmu-cmu
- axis,artpec8-cmu-bus
- axis,artpec8-cmu-core
- axis,artpec8-cmu-cpucl
- axis,artpec8-cmu-fsys
- axis,artpec8-cmu-imem
- axis,artpec8-cmu-peri
reg:
maxItems: 1
clocks:
minItems: 1
maxItems: 5
clock-names:
minItems: 1
maxItems: 5
"#clock-cells":
const: 1
required:
- compatible
- reg
- clocks
- clock-names
- "#clock-cells"
allOf:
- if:
properties:
compatible:
const: axis,artpec8-cmu-cmu
then:
properties:
clocks:
items:
- description: External reference clock (25 MHz)
clock-names:
items:
- const: fin_pll
- if:
properties:
compatible:
const: axis,artpec8-cmu-bus
then:
properties:
clocks:
items:
- description: External reference clock (25 MHz)
- description: CMU_BUS BUS clock (from CMU_CMU)
- description: CMU_BUS DLP clock (from CMU_CMU)
clock-names:
items:
- const: fin_pll
- const: bus
- const: dlp
- if:
properties:
compatible:
const: axis,artpec8-cmu-core
then:
properties:
clocks:
items:
- description: External reference clock (25 MHz)
- description: CMU_CORE main clock (from CMU_CMU)
- description: CMU_CORE DLP clock (from CMU_CMU)
clock-names:
items:
- const: fin_pll
- const: main
- const: dlp
- if:
properties:
compatible:
const: axis,artpec8-cmu-cpucl
then:
properties:
clocks:
items:
- description: External reference clock (25 MHz)
- description: CMU_CPUCL switch clock (from CMU_CMU)
clock-names:
items:
- const: fin_pll
- const: switch
- if:
properties:
compatible:
const: axis,artpec8-cmu-fsys
then:
properties:
clocks:
items:
- description: External reference clock (25 MHz)
- description: CMU_FSYS SCAN0 clock (from CMU_CMU)
- description: CMU_FSYS SCAN1 clock (from CMU_CMU)
- description: CMU_FSYS BUS clock (from CMU_CMU)
- description: CMU_FSYS IP clock (from CMU_CMU)
clock-names:
items:
- const: fin_pll
- const: scan0
- const: scan1
- const: bus
- const: ip
- if:
properties:
compatible:
const: axis,artpec8-cmu-imem
then:
properties:
clocks:
items:
- description: External reference clock (25 MHz)
- description: CMU_IMEM ACLK clock (from CMU_CMU)
- description: CMU_IMEM JPEG clock (from CMU_CMU)
clock-names:
items:
- const: fin_pll
- const: aclk
- const: jpeg
- if:
properties:
compatible:
const: axis,artpec8-cmu-peri
then:
properties:
clocks:
items:
- description: External reference clock (25 MHz)
- description: CMU_PERI IP clock (from CMU_CMU)
- description: CMU_PERI AUDIO clock (from CMU_CMU)
- description: CMU_PERI DISP clock (from CMU_CMU)
clock-names:
items:
- const: fin_pll
- const: ip
- const: audio
- const: disp
additionalProperties: false
examples:
# Clock controller node for CMU_FSYS
- |
#include <dt-bindings/clock/axis,artpec8-clk.h>
cmu_fsys: clock-controller@16c10000 {
compatible = "axis,artpec8-cmu-fsys";
reg = <0x16c10000 0x4000>;
#clock-cells = <1>;
clocks = <&fin_pll>,
<&cmu_cmu CLK_DOUT_CMU_FSYS_SCAN0>,
<&cmu_cmu CLK_DOUT_CMU_FSYS_SCAN1>,
<&cmu_cmu CLK_DOUT_CMU_FSYS_BUS>,
<&cmu_cmu CLK_DOUT_CMU_FSYS_IP>;
clock-names = "fin_pll", "scan0", "scan1", "bus", "ip";
};
...

View File

@ -0,0 +1,169 @@
/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
/*
* Copyright (c) 2025 Samsung Electronics Co., Ltd.
* https://www.samsung.com
* Copyright (c) 2025 Axis Communications AB.
* https://www.axis.com
*
* Device Tree binding constants for ARTPEC-8 clock controller.
*/
#ifndef _DT_BINDINGS_CLOCK_ARTPEC8_H
#define _DT_BINDINGS_CLOCK_ARTPEC8_H
/* CMU_CMU */
#define CLK_FOUT_SHARED0_PLL 1
#define CLK_DOUT_SHARED0_DIV2 2
#define CLK_DOUT_SHARED0_DIV3 3
#define CLK_DOUT_SHARED0_DIV4 4
#define CLK_FOUT_SHARED1_PLL 5
#define CLK_DOUT_SHARED1_DIV2 6
#define CLK_DOUT_SHARED1_DIV3 7
#define CLK_DOUT_SHARED1_DIV4 8
#define CLK_FOUT_AUDIO_PLL 9
#define CLK_DOUT_CMU_BUS 10
#define CLK_DOUT_CMU_BUS_DLP 11
#define CLK_DOUT_CMU_CDC_CORE 12
#define CLK_DOUT_CMU_OTP 13
#define CLK_DOUT_CMU_CORE_MAIN 14
#define CLK_DOUT_CMU_CORE_DLP 15
#define CLK_DOUT_CMU_CPUCL_SWITCH 16
#define CLK_DOUT_CMU_DLP_CORE 17
#define CLK_DOUT_CMU_FSYS_BUS 18
#define CLK_DOUT_CMU_FSYS_IP 19
#define CLK_DOUT_CMU_FSYS_SCAN0 20
#define CLK_DOUT_CMU_FSYS_SCAN1 21
#define CLK_DOUT_CMU_GPU_3D 22
#define CLK_DOUT_CMU_GPU_2D 23
#define CLK_DOUT_CMU_IMEM_ACLK 24
#define CLK_DOUT_CMU_IMEM_JPEG 25
#define CLK_DOUT_CMU_MIF_SWITCH 26
#define CLK_DOUT_CMU_MIF_BUSP 27
#define CLK_DOUT_CMU_PERI_DISP 28
#define CLK_DOUT_CMU_PERI_IP 29
#define CLK_DOUT_CMU_PERI_AUDIO 30
#define CLK_DOUT_CMU_RSP_CORE 31
#define CLK_DOUT_CMU_TRFM_CORE 32
#define CLK_DOUT_CMU_VCA_ACE 33
#define CLK_DOUT_CMU_VCA_OD 34
#define CLK_DOUT_CMU_VIO_CORE 35
#define CLK_DOUT_CMU_VIO_AUDIO 36
#define CLK_DOUT_CMU_VIP0_CORE 37
#define CLK_DOUT_CMU_VIP1_CORE 38
#define CLK_DOUT_CMU_VPP_CORE 39
/* CMU_BUS */
#define CLK_MOUT_BUS_ACLK_USER 1
#define CLK_MOUT_BUS_DLP_USER 2
#define CLK_DOUT_BUS_PCLK 3
/* CMU_CORE */
#define CLK_MOUT_CORE_ACLK_USER 1
#define CLK_MOUT_CORE_DLP_USER 2
#define CLK_DOUT_CORE_PCLK 3
/* CMU_CPUCL */
#define CLK_FOUT_CPUCL_PLL 1
#define CLK_MOUT_CPUCL_PLL 2
#define CLK_MOUT_CPUCL_SWITCH_USER 3
#define CLK_DOUT_CPUCL_CPU 4
#define CLK_DOUT_CPUCL_CLUSTER_ACLK 5
#define CLK_DOUT_CPUCL_CLUSTER_PCLKDBG 6
#define CLK_DOUT_CPUCL_CLUSTER_CNTCLK 7
#define CLK_DOUT_CPUCL_CLUSTER_ATCLK 8
#define CLK_DOUT_CPUCL_PCLK 9
#define CLK_DOUT_CPUCL_CMUREF 10
#define CLK_DOUT_CPUCL_DBG 11
#define CLK_DOUT_CPUCL_PCLKDBG 12
#define CLK_GOUT_CPUCL_CLUSTER_CPU 13
#define CLK_GOUT_CPUCL_SHORTSTOP 14
#define CLK_GOUT_CPUCL_CSSYS_IPCLKPORT_PCLKDBG 15
#define CLK_GOUT_CPUCL_CSSYS_IPCLKPORT_ATCLK 16
/* CMU_FSYS */
#define CLK_FOUT_FSYS_PLL 1
#define CLK_MOUT_FSYS_SCAN0_USER 2
#define CLK_MOUT_FSYS_SCAN1_USER 3
#define CLK_MOUT_FSYS_BUS_USER 4
#define CLK_MOUT_FSYS_MMC_USER 5
#define CLK_DOUT_FSYS_PCIE_PIPE 6
#define CLK_DOUT_FSYS_ADC 7
#define CLK_DOUT_FSYS_PCIE_PHY_REFCLK_SYSPLL 8
#define CLK_DOUT_FSYS_EQOS_INT125 9
#define CLK_DOUT_FSYS_OTP_MEM 10
#define CLK_DOUT_FSYS_SCLK_UART 11
#define CLK_DOUT_FSYS_EQOS_25 12
#define CLK_DOUT_FSYS_EQOS_2p5 13
#define CLK_DOUT_FSYS_BUS300 14
#define CLK_DOUT_FSYS_BUS_QSPI 15
#define CLK_DOUT_FSYS_MMC_CARD0 16
#define CLK_DOUT_FSYS_MMC_CARD1 17
#define CLK_DOUT_SCAN_CLK_FSYS_125 18
#define CLK_DOUT_FSYS_QSPI 19
#define CLK_DOUT_FSYS_SFMC_NAND 20
#define CLK_DOUT_FSYS_SCAN_CLK_MMC 21
#define CLK_GOUT_FSYS_USB20DRD_IPCLKPORT_ACLK_PHYCTRL_20 22
#define CLK_GOUT_FSYS_USB20DRD_IPCLKPORT_BUS_CLK_EARLY 23
#define CLK_GOUT_FSYS_XHB_USB_IPCLKPORT_CLK 24
#define CLK_GOUT_FSYS_XHB_AHBBR_IPCLKPORT_CLK 25
#define CLK_GOUT_FSYS_I2C0_IPCLKPORT_I_PCLK 26
#define CLK_GOUT_FSYS_I2C1_IPCLKPORT_I_PCLK 27
#define CLK_GOUT_FSYS_PWM_IPCLKPORT_I_PCLK_S0 28
#define CLK_GOUT_FSYS_DWC_PCIE_CTL_INST_0_MSTR_ACLK_UG 29
#define CLK_GOUT_FSYS_DWC_PCIE_CTL_INXT_0_SLV_ACLK_UG 30
#define CLK_GOUT_FSYS_DWC_PCIE_CTL_INST_0_DBI_ACLK_UG 31
#define CLK_GOUT_FSYS_PIPE_PAL_INST_0_I_APB_PCLK 32
#define CLK_GOUT_FSYS_EQOS_TOP_IPCLKPORT_ACLK_I 33
#define CLK_GOUT_FSYS_EQOS_TOP_IPCLKPORT_CLK_CSR_I 34
#define CLK_GOUT_FSYS_EQOS_TOP_IPCLKPORT_I_RGMII_TXCLK_2P5 35
#define CLK_GOUT_FSYS_SFMC_IPCLKPORT_I_ACLK_NAND 36
#define CLK_GOUT_FSYS_MMC0_IPCLKPORT_SDCLKIN 37
#define CLK_GOUT_FSYS_MMC0_IPCLKPORT_I_ACLK 38
#define CLK_GOUT_FSYS_MMC1_IPCLKPORT_SDCLKIN 39
#define CLK_GOUT_FSYS_MMC1_IPCLKPORT_I_ACLK 40
#define CLK_GOUT_FSYS_PCIE_PHY_REFCLK_IN 41
#define CLK_GOUT_FSYS_UART0_PCLK 42
#define CLK_GOUT_FSYS_UART0_SCLK_UART 43
#define CLK_GOUT_FSYS_BUS_QSPI 44
#define CLK_GOUT_FSYS_QSPI_IPCLKPORT_HCLK 45
#define CLK_GOUT_FSYS_QSPI_IPCLKPORT_SSI_CLK 46
/* CMU_IMEM */
#define CLK_MOUT_IMEM_ACLK_USER 1
#define CLK_MOUT_IMEM_GIC_CA53 2
#define CLK_MOUT_IMEM_GIC_CA5 3
#define CLK_MOUT_IMEM_JPEG_USER 4
#define CLK_GOUT_IMEM_MCT_PCLK 5
#define CLK_GOUT_IMEM_PCLK_TMU0_APBIF 6
/* CMU_PERI */
#define CLK_MOUT_PERI_IP_USER 1
#define CLK_MOUT_PERI_AUDIO_USER 2
#define CLK_MOUT_PERI_I2S0 3
#define CLK_MOUT_PERI_I2S1 4
#define CLK_MOUT_PERI_DISP_USER 5
#define CLK_DOUT_PERI_SPI 6
#define CLK_DOUT_PERI_UART1 7
#define CLK_DOUT_PERI_UART2 8
#define CLK_DOUT_PERI_PCLK 9
#define CLK_DOUT_PERI_I2S0 10
#define CLK_DOUT_PERI_I2S1 11
#define CLK_DOUT_PERI_DSIM 12
#define CLK_GOUT_PERI_UART1_PCLK 13
#define CLK_GOUT_PERI_UART1_SCLK_UART 14
#define CLK_GOUT_PERI_UART2_PCLK 15
#define CLK_GOUT_PERI_UART2_SCLK_UART 16
#define CLK_GOUT_PERI_I2C2_IPCLKPORT_I_PCLK 17
#define CLK_GOUT_PERI_I2C3_IPCLKPORT_I_PCLK 18
#define CLK_GOUT_PERI_SPI0_PCLK 19
#define CLK_GOUT_PERI_SPI0_SCLK_SPI 20
#define CLK_GOUT_PERI_APB_ASYNC_DSIM_IPCLKPORT_PCLKS 21
#define CLK_GOUT_PERI_I2SSC0_IPCLKPORT_CLK_HST 22
#define CLK_GOUT_PERI_I2SSC1_IPCLKPORT_CLK_HST 23
#define CLK_GOUT_PERI_AUDIO_OUT_IPCLKPORT_CLK 24
#define CLK_GOUT_PERI_I2SSC0_IPCLKPORT_CLK 25
#define CLK_GOUT_PERI_I2SSC1_IPCLKPORT_CLK 26
#define CLK_GOUT_PERI_DMA4DSIM_IPCLKPORT_CLK_APB_CLK 27
#define CLK_GOUT_PERI_DMA4DSIM_IPCLKPORT_CLK_AXI_CLK 28
#endif /* _DT_BINDINGS_CLOCK_ARTPEC8_H */