Skip to content

Commit 5feae3e

Browse files
BotchedRPRkrzk
authored andcommitted
dt-bindings: clock: samsung: Add Exynos990 SoC CMU bindings
Add dt-schema documentation for the Exynos990 SoC CMU. This clock management unit has a topmost block (CMU_TOP) that generates top clocks for other blocks. Currently the only other block implemented is CMU_HSI0, which provides clocks for the USB part of the SoC. Also, device-tree binding definitions added for these blocks: - CMU_TOP - CMU_HSI0 Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Signed-off-by: Igor Belwon <igor.belwon@mentallysanemainliners.org> Link: https://lore.kernel.org/r/20241209-exynos990-cmu-v4-1-57f07080f9e4@mentallysanemainliners.org Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
1 parent 40384c8 commit 5feae3e

File tree

2 files changed

+357
-0
lines changed

2 files changed

+357
-0
lines changed
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2+
%YAML 1.2
3+
---
4+
$id: http://devicetree.org/schemas/clock/samsung,exynos990-clock.yaml#
5+
$schema: http://devicetree.org/meta-schemas/core.yaml#
6+
7+
title: Samsung Exynos990 SoC clock controller
8+
9+
maintainers:
10+
- Igor Belwon <igor.belwon@mentallysanemainliners.org>
11+
- Chanwoo Choi <cw00.choi@samsung.com>
12+
- Krzysztof Kozlowski <krzk@kernel.org>
13+
14+
description: |
15+
Exynos990 clock controller is comprised of several CMU units, generating
16+
clocks for different domains. Those CMU units are modeled as separate device
17+
tree nodes, and might depend on each other. The root clock in that root tree
18+
is an external clock: OSCCLK (26 MHz). This external clock must be defined
19+
as a fixed-rate clock in dts.
20+
21+
CMU_TOP is a top-level CMU, where all base clocks are prepared using PLLs and
22+
dividers; all other clocks of function blocks (other CMUs) are usually
23+
derived from CMU_TOP.
24+
25+
Each clock is assigned an identifier and client nodes can use this identifier
26+
to specify the clock which they consume. All clocks available for usage
27+
in clock consumer nodes are defined as preprocessor macros in
28+
'include/dt-bindings/clock/samsung,exynos990.h' header.
29+
30+
properties:
31+
compatible:
32+
enum:
33+
- samsung,exynos990-cmu-hsi0
34+
- samsung,exynos990-cmu-top
35+
36+
clocks:
37+
minItems: 1
38+
maxItems: 5
39+
40+
clock-names:
41+
minItems: 1
42+
maxItems: 5
43+
44+
"#clock-cells":
45+
const: 1
46+
47+
reg:
48+
maxItems: 1
49+
50+
required:
51+
- compatible
52+
- clocks
53+
- clock-names
54+
- "#clock-cells"
55+
- reg
56+
57+
allOf:
58+
- if:
59+
properties:
60+
compatible:
61+
contains:
62+
const: samsung,exynos990-cmu-hsi0
63+
64+
then:
65+
properties:
66+
clocks:
67+
items:
68+
- description: External reference clock (26 MHz)
69+
- description: CMU_HSI0 BUS clock (from CMU_TOP)
70+
- description: CMU_HSI0 USB31DRD clock (from CMU_TOP)
71+
- description: CMU_HSI0 USBDP_DEBUG clock (from CMU_TOP)
72+
- description: CMU_HSI0 DPGTC clock (from CMU_TOP)
73+
74+
clock-names:
75+
items:
76+
- const: oscclk
77+
- const: bus
78+
- const: usb31drd
79+
- const: usbdp_debug
80+
- const: dpgtc
81+
82+
- if:
83+
properties:
84+
compatible:
85+
contains:
86+
const: samsung,exynos990-cmu-top
87+
88+
then:
89+
properties:
90+
clocks:
91+
items:
92+
- description: External reference clock (26 MHz)
93+
94+
clock-names:
95+
items:
96+
- const: oscclk
97+
98+
additionalProperties: false
99+
100+
examples:
101+
- |
102+
#include <dt-bindings/clock/samsung,exynos990.h>
103+
104+
cmu_hsi0: clock-controller@10a00000 {
105+
compatible = "samsung,exynos990-cmu-hsi0";
106+
reg = <0x10a00000 0x8000>;
107+
#clock-cells = <1>;
108+
109+
clocks = <&oscclk>,
110+
<&cmu_top CLK_DOUT_CMU_HSI0_BUS>,
111+
<&cmu_top CLK_DOUT_CMU_HSI0_USB31DRD>,
112+
<&cmu_top CLK_DOUT_CMU_HSI0_USBDP_DEBUG>,
113+
<&cmu_top CLK_DOUT_CMU_HSI0_DPGTC>;
114+
clock-names = "oscclk",
115+
"bus",
116+
"usb31drd",
117+
"usbdp_debug",
118+
"dpgtc";
119+
};
120+
121+
...
Lines changed: 236 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,236 @@
1+
/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
2+
/*
3+
* Copyright (C) 2024 Igor Belwon <igor.belwon@mentallysanemainliners.org>
4+
*
5+
* Device Tree binding constants for Exynos990 clock controller.
6+
*/
7+
8+
#ifndef _DT_BINDINGS_CLOCK_EXYNOS_990_H
9+
#define _DT_BINDINGS_CLOCK_EXYNOS_990_H
10+
11+
/* CMU_TOP */
12+
#define CLK_FOUT_SHARED0_PLL 1
13+
#define CLK_FOUT_SHARED1_PLL 2
14+
#define CLK_FOUT_SHARED2_PLL 3
15+
#define CLK_FOUT_SHARED3_PLL 4
16+
#define CLK_FOUT_SHARED4_PLL 5
17+
#define CLK_FOUT_G3D_PLL 6
18+
#define CLK_FOUT_MMC_PLL 7
19+
#define CLK_MOUT_PLL_SHARED0 8
20+
#define CLK_MOUT_PLL_SHARED1 9
21+
#define CLK_MOUT_PLL_SHARED2 10
22+
#define CLK_MOUT_PLL_SHARED3 11
23+
#define CLK_MOUT_PLL_SHARED4 12
24+
#define CLK_MOUT_PLL_MMC 13
25+
#define CLK_MOUT_PLL_G3D 14
26+
#define CLK_MOUT_CMU_APM_BUS 15
27+
#define CLK_MOUT_CMU_AUD_CPU 16
28+
#define CLK_MOUT_CMU_BUS0_BUS 17
29+
#define CLK_MOUT_CMU_BUS1_BUS 18
30+
#define CLK_MOUT_CMU_BUS1_SSS 19
31+
#define CLK_MOUT_CMU_CIS_CLK0 20
32+
#define CLK_MOUT_CMU_CIS_CLK1 21
33+
#define CLK_MOUT_CMU_CIS_CLK2 22
34+
#define CLK_MOUT_CMU_CIS_CLK3 23
35+
#define CLK_MOUT_CMU_CIS_CLK4 24
36+
#define CLK_MOUT_CMU_CIS_CLK5 25
37+
#define CLK_MOUT_CMU_CMU_BOOST 26
38+
#define CLK_MOUT_CMU_CORE_BUS 27
39+
#define CLK_MOUT_CMU_CPUCL0_DBG_BUS 28
40+
#define CLK_MOUT_CMU_CPUCL0_SWITCH 29
41+
#define CLK_MOUT_CMU_CPUCL1_SWITCH 30
42+
#define CLK_MOUT_CMU_CPUCL2_BUSP 31
43+
#define CLK_MOUT_CMU_CPUCL2_SWITCH 32
44+
#define CLK_MOUT_CMU_CSIS_BUS 33
45+
#define CLK_MOUT_CMU_CSIS_OIS_MCU 34
46+
#define CLK_MOUT_CMU_DNC_BUS 35
47+
#define CLK_MOUT_CMU_DNC_BUSM 36
48+
#define CLK_MOUT_CMU_DNS_BUS 37
49+
#define CLK_MOUT_CMU_DPU 38
50+
#define CLK_MOUT_CMU_DPU_ALT 39
51+
#define CLK_MOUT_CMU_DSP_BUS 40
52+
#define CLK_MOUT_CMU_G2D_G2D 41
53+
#define CLK_MOUT_CMU_G2D_MSCL 42
54+
#define CLK_MOUT_CMU_HPM 43
55+
#define CLK_MOUT_CMU_HSI0_BUS 44
56+
#define CLK_MOUT_CMU_HSI0_DPGTC 45
57+
#define CLK_MOUT_CMU_HSI0_USB31DRD 46
58+
#define CLK_MOUT_CMU_HSI0_USBDP_DEBUG 47
59+
#define CLK_MOUT_CMU_HSI1_BUS 48
60+
#define CLK_MOUT_CMU_HSI1_MMC_CARD 49
61+
#define CLK_MOUT_CMU_HSI1_PCIE 50
62+
#define CLK_MOUT_CMU_HSI1_UFS_CARD 51
63+
#define CLK_MOUT_CMU_HSI1_UFS_EMBD 52
64+
#define CLK_MOUT_CMU_HSI2_BUS 53
65+
#define CLK_MOUT_CMU_HSI2_PCIE 54
66+
#define CLK_MOUT_CMU_IPP_BUS 55
67+
#define CLK_MOUT_CMU_ITP_BUS 56
68+
#define CLK_MOUT_CMU_MCSC_BUS 57
69+
#define CLK_MOUT_CMU_MCSC_GDC 58
70+
#define CLK_MOUT_CMU_CMU_BOOST_CPU 59
71+
#define CLK_MOUT_CMU_MFC0_MFC0 60
72+
#define CLK_MOUT_CMU_MFC0_WFD 61
73+
#define CLK_MOUT_CMU_MIF_BUSP 62
74+
#define CLK_MOUT_CMU_MIF_SWITCH 63
75+
#define CLK_MOUT_CMU_NPU_BUS 64
76+
#define CLK_MOUT_CMU_PERIC0_BUS 65
77+
#define CLK_MOUT_CMU_PERIC0_IP 66
78+
#define CLK_MOUT_CMU_PERIC1_BUS 67
79+
#define CLK_MOUT_CMU_PERIC1_IP 68
80+
#define CLK_MOUT_CMU_PERIS_BUS 69
81+
#define CLK_MOUT_CMU_SSP_BUS 70
82+
#define CLK_MOUT_CMU_TNR_BUS 71
83+
#define CLK_MOUT_CMU_VRA_BUS 72
84+
#define CLK_DOUT_CMU_APM_BUS 73
85+
#define CLK_DOUT_CMU_AUD_CPU 74
86+
#define CLK_DOUT_CMU_BUS0_BUS 75
87+
#define CLK_DOUT_CMU_BUS1_BUS 76
88+
#define CLK_DOUT_CMU_BUS1_SSS 77
89+
#define CLK_DOUT_CMU_CIS_CLK0 78
90+
#define CLK_DOUT_CMU_CIS_CLK1 79
91+
#define CLK_DOUT_CMU_CIS_CLK2 80
92+
#define CLK_DOUT_CMU_CIS_CLK3 81
93+
#define CLK_DOUT_CMU_CIS_CLK4 82
94+
#define CLK_DOUT_CMU_CIS_CLK5 83
95+
#define CLK_DOUT_CMU_CMU_BOOST 84
96+
#define CLK_DOUT_CMU_CORE_BUS 85
97+
#define CLK_DOUT_CMU_CPUCL0_DBG_BUS 86
98+
#define CLK_DOUT_CMU_CPUCL0_SWITCH 87
99+
#define CLK_DOUT_CMU_CPUCL1_SWITCH 88
100+
#define CLK_DOUT_CMU_CPUCL2_BUSP 89
101+
#define CLK_DOUT_CMU_CPUCL2_SWITCH 90
102+
#define CLK_DOUT_CMU_CSIS_BUS 91
103+
#define CLK_DOUT_CMU_CSIS_OIS_MCU 92
104+
#define CLK_DOUT_CMU_DNC_BUS 93
105+
#define CLK_DOUT_CMU_DNC_BUSM 94
106+
#define CLK_DOUT_CMU_DNS_BUS 95
107+
#define CLK_DOUT_CMU_DSP_BUS 96
108+
#define CLK_DOUT_CMU_G2D_G2D 97
109+
#define CLK_DOUT_CMU_G2D_MSCL 98
110+
#define CLK_DOUT_CMU_G3D_SWITCH 99
111+
#define CLK_DOUT_CMU_HPM 100
112+
#define CLK_DOUT_CMU_HSI0_BUS 101
113+
#define CLK_DOUT_CMU_HSI0_DPGTC 102
114+
#define CLK_DOUT_CMU_HSI0_USB31DRD 103
115+
#define CLK_DOUT_CMU_HSI0_USBDP_DEBUG 104
116+
#define CLK_DOUT_CMU_HSI1_BUS 105
117+
#define CLK_DOUT_CMU_HSI1_MMC_CARD 106
118+
#define CLK_DOUT_CMU_HSI1_PCIE 107
119+
#define CLK_DOUT_CMU_HSI1_UFS_CARD 108
120+
#define CLK_DOUT_CMU_HSI1_UFS_EMBD 109
121+
#define CLK_DOUT_CMU_HSI2_BUS 110
122+
#define CLK_DOUT_CMU_HSI2_PCIE 111
123+
#define CLK_DOUT_CMU_IPP_BUS 112
124+
#define CLK_DOUT_CMU_ITP_BUS 113
125+
#define CLK_DOUT_CMU_MCSC_BUS 114
126+
#define CLK_DOUT_CMU_MCSC_GDC 115
127+
#define CLK_DOUT_CMU_CMU_BOOST_CPU 116
128+
#define CLK_DOUT_CMU_MFC0_MFC0 117
129+
#define CLK_DOUT_CMU_MFC0_WFD 118
130+
#define CLK_DOUT_CMU_MIF_BUSP 119
131+
#define CLK_DOUT_CMU_NPU_BUS 120
132+
#define CLK_DOUT_CMU_OTP 121
133+
#define CLK_DOUT_CMU_PERIC0_BUS 122
134+
#define CLK_DOUT_CMU_PERIC0_IP 123
135+
#define CLK_DOUT_CMU_PERIC1_BUS 124
136+
#define CLK_DOUT_CMU_PERIC1_IP 125
137+
#define CLK_DOUT_CMU_PERIS_BUS 126
138+
#define CLK_DOUT_CMU_SSP_BUS 127
139+
#define CLK_DOUT_CMU_TNR_BUS 128
140+
#define CLK_DOUT_CMU_VRA_BUS 129
141+
#define CLK_DOUT_CMU_DPU 130
142+
#define CLK_DOUT_CMU_DPU_ALT 131
143+
#define CLK_DOUT_CMU_SHARED0_DIV2 132
144+
#define CLK_DOUT_CMU_SHARED0_DIV3 133
145+
#define CLK_DOUT_CMU_SHARED0_DIV4 134
146+
#define CLK_DOUT_CMU_SHARED1_DIV2 135
147+
#define CLK_DOUT_CMU_SHARED1_DIV3 136
148+
#define CLK_DOUT_CMU_SHARED1_DIV4 137
149+
#define CLK_DOUT_CMU_SHARED2_DIV2 138
150+
#define CLK_DOUT_CMU_SHARED4_DIV2 139
151+
#define CLK_DOUT_CMU_SHARED4_DIV3 140
152+
#define CLK_DOUT_CMU_SHARED4_DIV4 141
153+
#define CLK_GOUT_CMU_G3D_BUS 142
154+
#define CLK_GOUT_CMU_MIF_SWITCH 143
155+
#define CLK_GOUT_CMU_APM_BUS 144
156+
#define CLK_GOUT_CMU_AUD_CPU 145
157+
#define CLK_GOUT_CMU_BUS0_BUS 146
158+
#define CLK_GOUT_CMU_BUS1_BUS 147
159+
#define CLK_GOUT_CMU_BUS1_SSS 148
160+
#define CLK_GOUT_CMU_CIS_CLK0 149
161+
#define CLK_GOUT_CMU_CIS_CLK1 150
162+
#define CLK_GOUT_CMU_CIS_CLK2 151
163+
#define CLK_GOUT_CMU_CIS_CLK3 152
164+
#define CLK_GOUT_CMU_CIS_CLK4 153
165+
#define CLK_GOUT_CMU_CIS_CLK5 154
166+
#define CLK_GOUT_CMU_CORE_BUS 155
167+
#define CLK_GOUT_CMU_CPUCL0_DBG_BUS 156
168+
#define CLK_GOUT_CMU_CPUCL0_SWITCH 157
169+
#define CLK_GOUT_CMU_CPUCL1_SWITCH 158
170+
#define CLK_GOUT_CMU_CPUCL2_BUSP 159
171+
#define CLK_GOUT_CMU_CPUCL2_SWITCH 160
172+
#define CLK_GOUT_CMU_CSIS_BUS 161
173+
#define CLK_GOUT_CMU_CSIS_OIS_MCU 162
174+
#define CLK_GOUT_CMU_DNC_BUS 163
175+
#define CLK_GOUT_CMU_DNC_BUSM 164
176+
#define CLK_GOUT_CMU_DNS_BUS 165
177+
#define CLK_GOUT_CMU_DPU 166
178+
#define CLK_GOUT_CMU_DPU_BUS 167
179+
#define CLK_GOUT_CMU_DSP_BUS 168
180+
#define CLK_GOUT_CMU_G2D_G2D 169
181+
#define CLK_GOUT_CMU_G2D_MSCL 170
182+
#define CLK_GOUT_CMU_G3D_SWITCH 171
183+
#define CLK_GOUT_CMU_HPM 172
184+
#define CLK_GOUT_CMU_HSI0_BUS 173
185+
#define CLK_GOUT_CMU_HSI0_DPGTC 174
186+
#define CLK_GOUT_CMU_HSI0_USB31DRD 175
187+
#define CLK_GOUT_CMU_HSI0_USBDP_DEBUG 176
188+
#define CLK_GOUT_CMU_HSI1_BUS 177
189+
#define CLK_GOUT_CMU_HSI1_MMC_CARD 178
190+
#define CLK_GOUT_CMU_HSI1_PCIE 179
191+
#define CLK_GOUT_CMU_HSI1_UFS_CARD 180
192+
#define CLK_GOUT_CMU_HSI1_UFS_EMBD 181
193+
#define CLK_GOUT_CMU_HSI2_BUS 182
194+
#define CLK_GOUT_CMU_HSI2_PCIE 183
195+
#define CLK_GOUT_CMU_IPP_BUS 184
196+
#define CLK_GOUT_CMU_ITP_BUS 185
197+
#define CLK_GOUT_CMU_MCSC_BUS 186
198+
#define CLK_GOUT_CMU_MCSC_GDC 187
199+
#define CLK_GOUT_CMU_MFC0_MFC0 188
200+
#define CLK_GOUT_CMU_MFC0_WFD 189
201+
#define CLK_GOUT_CMU_MIF_BUSP 190
202+
#define CLK_GOUT_CMU_NPU_BUS 191
203+
#define CLK_GOUT_CMU_PERIC0_BUS 192
204+
#define CLK_GOUT_CMU_PERIC0_IP 193
205+
#define CLK_GOUT_CMU_PERIC1_BUS 194
206+
#define CLK_GOUT_CMU_PERIC1_IP 195
207+
#define CLK_GOUT_CMU_PERIS_BUS 196
208+
#define CLK_GOUT_CMU_SSP_BUS 197
209+
#define CLK_GOUT_CMU_TNR_BUS 198
210+
#define CLK_GOUT_CMU_VRA_BUS 199
211+
212+
/* CMU_HSI0 */
213+
#define CLK_MOUT_HSI0_BUS_USER 1
214+
#define CLK_MOUT_HSI0_USB31DRD_USER 2
215+
#define CLK_MOUT_HSI0_USBDP_DEBUG_USER 3
216+
#define CLK_MOUT_HSI0_DPGTC_USER 4
217+
#define CLK_GOUT_HSI0_DP_LINK_DP_GTC_CLK 5
218+
#define CLK_GOUT_HSI0_DP_LINK_PCLK 6
219+
#define CLK_GOUT_HSI0_D_TZPC_HSI0_PCLK 7
220+
#define CLK_GOUT_HSI0_LHM_AXI_P_HSI0_CLK 8
221+
#define CLK_GOUT_HSI0_PPMU_HSI0_BUS1_ACLK 9
222+
#define CLK_GOUT_HSI0_PPMU_HSI0_BUS1_PCLK 10
223+
#define CLK_GOUT_HSI0_CLK_HSI0_BUS_CLK 11
224+
#define CLK_GOUT_HSI0_SYSMMU_USB_CLK_S2 12
225+
#define CLK_GOUT_HSI0_SYSREG_HSI0_PCLK 13
226+
#define CLK_GOUT_HSI0_USB31DRD_ACLK_PHYCTRL 14
227+
#define CLK_GOUT_HSI0_USB31DRD_BUS_CLK_EARLY 15
228+
#define CLK_GOUT_HSI0_USB31DRD_USB31DRD_REF_CLK_40 16
229+
#define CLK_GOUT_HSI0_USB31DRD_USBDPPHY_REF_SOC_PLL 17
230+
#define CLK_GOUT_HSI0_USB31DRD_USBDPPHY_SCL_APB 18
231+
#define CLK_GOUT_HSI0_USB31DRD_USBPCS_APB_CLK 19
232+
#define CLK_GOUT_HSI0_VGEN_LITE_HSI0_CLK 20
233+
#define CLK_GOUT_HSI0_CMU_HSI0_PCLK 21
234+
#define CLK_GOUT_HSI0_XIU_D_HSI0_ACLK 22
235+
236+
#endif

0 commit comments

Comments
 (0)