jh7110_clkc.c revision 1.7 1 1.7 skrll /* $NetBSD: jh7110_clkc.c,v 1.7 2025/01/17 07:57:42 skrll Exp $ */
2 1.1 skrll
3 1.1 skrll /*-
4 1.1 skrll * Copyright (c) 2023 The NetBSD Foundation, Inc.
5 1.1 skrll * All rights reserved.
6 1.1 skrll *
7 1.1 skrll * This code is derived from software contributed to The NetBSD Foundation
8 1.1 skrll * by Nick Hudson
9 1.1 skrll *
10 1.1 skrll * Redistribution and use in source and binary forms, with or without
11 1.1 skrll * modification, are permitted provided that the following conditions
12 1.1 skrll * are met:
13 1.1 skrll * 1. Redistributions of source code must retain the above copyright
14 1.1 skrll * notice, this list of conditions and the following disclaimer.
15 1.1 skrll * 2. Redistributions in binary form must reproduce the above copyright
16 1.1 skrll * notice, this list of conditions and the following disclaimer in the
17 1.1 skrll * documentation and/or other materials provided with the distribution.
18 1.1 skrll *
19 1.1 skrll * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 1.1 skrll * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 1.1 skrll * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 1.1 skrll * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 1.1 skrll * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 1.1 skrll * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 1.1 skrll * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 1.1 skrll * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 1.1 skrll * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 1.1 skrll * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 1.1 skrll * POSSIBILITY OF SUCH DAMAGE.
30 1.1 skrll */
31 1.1 skrll
32 1.1 skrll #include <sys/cdefs.h>
33 1.7 skrll __KERNEL_RCSID(0, "$NetBSD: jh7110_clkc.c,v 1.7 2025/01/17 07:57:42 skrll Exp $");
34 1.1 skrll
35 1.1 skrll #include <sys/param.h>
36 1.1 skrll
37 1.1 skrll #include <sys/bus.h>
38 1.1 skrll #include <sys/device.h>
39 1.6 rin #include <sys/kmem.h>
40 1.1 skrll
41 1.1 skrll #include <dev/clk/clk_backend.h>
42 1.1 skrll
43 1.1 skrll #include <dev/fdt/fdtvar.h>
44 1.1 skrll
45 1.1 skrll #include <riscv/starfive/jh71x0_clkc.h>
46 1.1 skrll
47 1.1 skrll /* SYSCRG clocks */
48 1.1 skrll #define JH7110_SYSCLK_CPU_ROOT 0
49 1.1 skrll #define JH7110_SYSCLK_CPU_CORE 1
50 1.1 skrll #define JH7110_SYSCLK_CPU_BUS 2
51 1.1 skrll #define JH7110_SYSCLK_GPU_ROOT 3
52 1.1 skrll #define JH7110_SYSCLK_PERH_ROOT 4
53 1.1 skrll #define JH7110_SYSCLK_BUS_ROOT 5
54 1.1 skrll #define JH7110_SYSCLK_NOCSTG_BUS 6
55 1.1 skrll #define JH7110_SYSCLK_AXI_CFG0 7
56 1.1 skrll #define JH7110_SYSCLK_STG_AXIAHB 8
57 1.1 skrll #define JH7110_SYSCLK_AHB0 9
58 1.1 skrll #define JH7110_SYSCLK_AHB1 10
59 1.1 skrll #define JH7110_SYSCLK_APB_BUS 11
60 1.1 skrll #define JH7110_SYSCLK_APB0 12
61 1.1 skrll #define JH7110_SYSCLK_PLL0_DIV2 13
62 1.1 skrll #define JH7110_SYSCLK_PLL1_DIV2 14
63 1.1 skrll #define JH7110_SYSCLK_PLL2_DIV2 15
64 1.1 skrll #define JH7110_SYSCLK_AUDIO_ROOT 16
65 1.1 skrll #define JH7110_SYSCLK_MCLK_INNER 17
66 1.1 skrll #define JH7110_SYSCLK_MCLK 18
67 1.1 skrll #define JH7110_SYSCLK_MCLK_OUT 19
68 1.1 skrll #define JH7110_SYSCLK_ISP_2X 20
69 1.1 skrll #define JH7110_SYSCLK_ISP_AXI 21
70 1.1 skrll #define JH7110_SYSCLK_GCLK0 22
71 1.1 skrll #define JH7110_SYSCLK_GCLK1 23
72 1.1 skrll #define JH7110_SYSCLK_GCLK2 24
73 1.1 skrll #define JH7110_SYSCLK_CORE 25
74 1.1 skrll #define JH7110_SYSCLK_CORE1 26
75 1.1 skrll #define JH7110_SYSCLK_CORE2 27
76 1.1 skrll #define JH7110_SYSCLK_CORE3 28
77 1.1 skrll #define JH7110_SYSCLK_CORE4 29
78 1.1 skrll #define JH7110_SYSCLK_DEBUG 30
79 1.1 skrll #define JH7110_SYSCLK_RTC_TOGGLE 31
80 1.1 skrll #define JH7110_SYSCLK_TRACE0 32
81 1.1 skrll #define JH7110_SYSCLK_TRACE1 33
82 1.1 skrll #define JH7110_SYSCLK_TRACE2 34
83 1.1 skrll #define JH7110_SYSCLK_TRACE3 35
84 1.1 skrll #define JH7110_SYSCLK_TRACE4 36
85 1.1 skrll #define JH7110_SYSCLK_TRACE_COM 37
86 1.1 skrll #define JH7110_SYSCLK_NOC_BUS_CPU_AXI 38
87 1.1 skrll #define JH7110_SYSCLK_NOC_BUS_AXICFG0_AXI 39
88 1.1 skrll #define JH7110_SYSCLK_OSC_DIV2 40
89 1.1 skrll #define JH7110_SYSCLK_PLL1_DIV4 41
90 1.1 skrll #define JH7110_SYSCLK_PLL1_DIV8 42
91 1.1 skrll #define JH7110_SYSCLK_DDR_BUS 43
92 1.1 skrll #define JH7110_SYSCLK_DDR_AXI 44
93 1.1 skrll #define JH7110_SYSCLK_GPU_CORE 45
94 1.1 skrll #define JH7110_SYSCLK_GPU_CORE_CLK 46
95 1.1 skrll #define JH7110_SYSCLK_GPU_SYS_CLK 47
96 1.1 skrll #define JH7110_SYSCLK_GPU_APB 48
97 1.1 skrll #define JH7110_SYSCLK_GPU_RTC_TOGGLE 49
98 1.1 skrll #define JH7110_SYSCLK_NOC_BUS_GPU_AXI 50
99 1.1 skrll #define JH7110_SYSCLK_ISP_TOP_CORE 51
100 1.1 skrll #define JH7110_SYSCLK_ISP_TOP_AXI 52
101 1.1 skrll #define JH7110_SYSCLK_NOC_BUS_ISP_AXI 53
102 1.1 skrll #define JH7110_SYSCLK_HIFI4_CORE 54
103 1.1 skrll #define JH7110_SYSCLK_HIFI4_AXI 55
104 1.1 skrll #define JH7110_SYSCLK_AXI_CFG1_MAIN 56
105 1.1 skrll #define JH7110_SYSCLK_AXI_CFG1_AHB 57
106 1.1 skrll #define JH7110_SYSCLK_VOUT_SRC 58
107 1.1 skrll #define JH7110_SYSCLK_VOUT_AXI 59
108 1.1 skrll #define JH7110_SYSCLK_NOC_BUS_DISP_AXI 60
109 1.1 skrll #define JH7110_SYSCLK_VOUT_TOP_AHB 61
110 1.1 skrll #define JH7110_SYSCLK_VOUT_TOP_AXI 62
111 1.1 skrll #define JH7110_SYSCLK_VOUT_TOP_HDMITX0_MCLK 63
112 1.1 skrll #define JH7110_SYSCLK_VOUT_TOP_MIPIPHY_REF 64
113 1.1 skrll #define JH7110_SYSCLK_JPEGC_AXI 65
114 1.1 skrll #define JH7110_SYSCLK_CODAJ12_AXI 66
115 1.1 skrll #define JH7110_SYSCLK_CODAJ12_CORE 67
116 1.1 skrll #define JH7110_SYSCLK_CODAJ12_APB 68
117 1.1 skrll #define JH7110_SYSCLK_VDEC_AXI 69
118 1.1 skrll #define JH7110_SYSCLK_WAVE511_AXI 70
119 1.1 skrll #define JH7110_SYSCLK_WAVE511_BPU 71
120 1.1 skrll #define JH7110_SYSCLK_WAVE511_VCE 72
121 1.1 skrll #define JH7110_SYSCLK_WAVE511_APB 73
122 1.1 skrll #define JH7110_SYSCLK_VDEC_JPG 74
123 1.1 skrll #define JH7110_SYSCLK_VDEC_MAIN 75
124 1.1 skrll #define JH7110_SYSCLK_NOC_BUS_VDEC_AXI 76
125 1.1 skrll #define JH7110_SYSCLK_VENC_AXI 77
126 1.1 skrll #define JH7110_SYSCLK_WAVE420L_AXI 78
127 1.1 skrll #define JH7110_SYSCLK_WAVE420L_BPU 79
128 1.1 skrll #define JH7110_SYSCLK_WAVE420L_VCE 80
129 1.1 skrll #define JH7110_SYSCLK_WAVE420L_APB 81
130 1.1 skrll #define JH7110_SYSCLK_NOC_BUS_VENC_AXI 82
131 1.1 skrll #define JH7110_SYSCLK_AXI_CFG0_MAIN_DIV 83
132 1.1 skrll #define JH7110_SYSCLK_AXI_CFG0_MAIN 84
133 1.1 skrll #define JH7110_SYSCLK_AXI_CFG0_HIFI4 85
134 1.1 skrll #define JH7110_SYSCLK_AXIMEM2_AXI 86
135 1.1 skrll #define JH7110_SYSCLK_QSPI_AHB 87
136 1.1 skrll #define JH7110_SYSCLK_QSPI_APB 88
137 1.1 skrll #define JH7110_SYSCLK_QSPI_REF_SRC 89
138 1.1 skrll #define JH7110_SYSCLK_QSPI_REF 90
139 1.1 skrll #define JH7110_SYSCLK_SDIO0_AHB 91
140 1.1 skrll #define JH7110_SYSCLK_SDIO1_AHB 92
141 1.1 skrll #define JH7110_SYSCLK_SDIO0_SDCARD 93
142 1.1 skrll #define JH7110_SYSCLK_SDIO1_SDCARD 94
143 1.1 skrll #define JH7110_SYSCLK_USB_125M 95
144 1.1 skrll #define JH7110_SYSCLK_NOC_BUS_STG_AXI 96
145 1.1 skrll #define JH7110_SYSCLK_GMAC1_AHB 97
146 1.1 skrll #define JH7110_SYSCLK_GMAC1_AXI 98
147 1.1 skrll #define JH7110_SYSCLK_GMAC_SRC 99
148 1.1 skrll #define JH7110_SYSCLK_GMAC1_GTXCLK 100
149 1.1 skrll #define JH7110_SYSCLK_GMAC1_RMII_RTX 101
150 1.1 skrll #define JH7110_SYSCLK_GMAC1_PTP 102
151 1.1 skrll #define JH7110_SYSCLK_GMAC1_RX 103
152 1.1 skrll #define JH7110_SYSCLK_GMAC1_RX_INV 104
153 1.1 skrll #define JH7110_SYSCLK_GMAC1_TX 105
154 1.1 skrll #define JH7110_SYSCLK_GMAC1_TX_INV 106
155 1.1 skrll #define JH7110_SYSCLK_GMAC1_GTXC 107
156 1.1 skrll #define JH7110_SYSCLK_GMAC0_GTXCLK 108
157 1.1 skrll #define JH7110_SYSCLK_GMAC0_PTP 109
158 1.1 skrll #define JH7110_SYSCLK_GMAC_PHY 110
159 1.1 skrll #define JH7110_SYSCLK_GMAC0_GTXC 111
160 1.1 skrll #define JH7110_SYSCLK_IOMUX_APB 112
161 1.1 skrll #define JH7110_SYSCLK_MAILBOX_APB 113
162 1.1 skrll #define JH7110_SYSCLK_INT_CTRL_APB 114
163 1.1 skrll #define JH7110_SYSCLK_CAN0_APB 115
164 1.1 skrll #define JH7110_SYSCLK_CAN0_TIMER 116
165 1.1 skrll #define JH7110_SYSCLK_CAN0_CAN 117
166 1.1 skrll #define JH7110_SYSCLK_CAN1_APB 118
167 1.1 skrll #define JH7110_SYSCLK_CAN1_TIMER 119
168 1.1 skrll #define JH7110_SYSCLK_CAN1_CAN 120
169 1.1 skrll #define JH7110_SYSCLK_PWM_APB 121
170 1.1 skrll #define JH7110_SYSCLK_WDT_APB 122
171 1.1 skrll #define JH7110_SYSCLK_WDT_CORE 123
172 1.1 skrll #define JH7110_SYSCLK_TIMER_APB 124
173 1.1 skrll #define JH7110_SYSCLK_TIMER0 125
174 1.1 skrll #define JH7110_SYSCLK_TIMER1 126
175 1.1 skrll #define JH7110_SYSCLK_TIMER2 127
176 1.1 skrll #define JH7110_SYSCLK_TIMER3 128
177 1.1 skrll #define JH7110_SYSCLK_TEMP_APB 129
178 1.1 skrll #define JH7110_SYSCLK_TEMP_CORE 130
179 1.1 skrll #define JH7110_SYSCLK_SPI0_APB 131
180 1.1 skrll #define JH7110_SYSCLK_SPI1_APB 132
181 1.1 skrll #define JH7110_SYSCLK_SPI2_APB 133
182 1.1 skrll #define JH7110_SYSCLK_SPI3_APB 134
183 1.1 skrll #define JH7110_SYSCLK_SPI4_APB 135
184 1.1 skrll #define JH7110_SYSCLK_SPI5_APB 136
185 1.1 skrll #define JH7110_SYSCLK_SPI6_APB 137
186 1.1 skrll #define JH7110_SYSCLK_I2C0_APB 138
187 1.1 skrll #define JH7110_SYSCLK_I2C1_APB 139
188 1.1 skrll #define JH7110_SYSCLK_I2C2_APB 140
189 1.1 skrll #define JH7110_SYSCLK_I2C3_APB 141
190 1.1 skrll #define JH7110_SYSCLK_I2C4_APB 142
191 1.1 skrll #define JH7110_SYSCLK_I2C5_APB 143
192 1.1 skrll #define JH7110_SYSCLK_I2C6_APB 144
193 1.1 skrll #define JH7110_SYSCLK_UART0_APB 145
194 1.1 skrll #define JH7110_SYSCLK_UART0_CORE 146
195 1.1 skrll #define JH7110_SYSCLK_UART1_APB 147
196 1.1 skrll #define JH7110_SYSCLK_UART1_CORE 148
197 1.1 skrll #define JH7110_SYSCLK_UART2_APB 149
198 1.1 skrll #define JH7110_SYSCLK_UART2_CORE 150
199 1.1 skrll #define JH7110_SYSCLK_UART3_APB 151
200 1.1 skrll #define JH7110_SYSCLK_UART3_CORE 152
201 1.1 skrll #define JH7110_SYSCLK_UART4_APB 153
202 1.1 skrll #define JH7110_SYSCLK_UART4_CORE 154
203 1.1 skrll #define JH7110_SYSCLK_UART5_APB 155
204 1.1 skrll #define JH7110_SYSCLK_UART5_CORE 156
205 1.1 skrll #define JH7110_SYSCLK_PWMDAC_APB 157
206 1.1 skrll #define JH7110_SYSCLK_PWMDAC_CORE 158
207 1.1 skrll #define JH7110_SYSCLK_SPDIF_APB 159
208 1.1 skrll #define JH7110_SYSCLK_SPDIF_CORE 160
209 1.1 skrll #define JH7110_SYSCLK_I2STX0_APB 161
210 1.1 skrll #define JH7110_SYSCLK_I2STX0_BCLK_MST 162
211 1.1 skrll #define JH7110_SYSCLK_I2STX0_BCLK_MST_INV 163
212 1.1 skrll #define JH7110_SYSCLK_I2STX0_LRCK_MST 164
213 1.1 skrll #define JH7110_SYSCLK_I2STX0_BCLK 165
214 1.1 skrll #define JH7110_SYSCLK_I2STX0_BCLK_INV 166
215 1.1 skrll #define JH7110_SYSCLK_I2STX0_LRCK 167
216 1.1 skrll #define JH7110_SYSCLK_I2STX1_APB 168
217 1.1 skrll #define JH7110_SYSCLK_I2STX1_BCLK_MST 169
218 1.1 skrll #define JH7110_SYSCLK_I2STX1_BCLK_MST_INV 170
219 1.1 skrll #define JH7110_SYSCLK_I2STX1_LRCK_MST 171
220 1.1 skrll #define JH7110_SYSCLK_I2STX1_BCLK 172
221 1.1 skrll #define JH7110_SYSCLK_I2STX1_BCLK_INV 173
222 1.1 skrll #define JH7110_SYSCLK_I2STX1_LRCK 174
223 1.1 skrll #define JH7110_SYSCLK_I2SRX_APB 175
224 1.1 skrll #define JH7110_SYSCLK_I2SRX_BCLK_MST 176
225 1.1 skrll #define JH7110_SYSCLK_I2SRX_BCLK_MST_INV 177
226 1.1 skrll #define JH7110_SYSCLK_I2SRX_LRCK_MST 178
227 1.1 skrll #define JH7110_SYSCLK_I2SRX_BCLK 179
228 1.1 skrll #define JH7110_SYSCLK_I2SRX_BCLK_INV 180
229 1.1 skrll #define JH7110_SYSCLK_I2SRX_LRCK 181
230 1.1 skrll #define JH7110_SYSCLK_PDM_DMIC 182
231 1.1 skrll #define JH7110_SYSCLK_PDM_APB 183
232 1.1 skrll #define JH7110_SYSCLK_TDM_AHB 184
233 1.1 skrll #define JH7110_SYSCLK_TDM_APB 185
234 1.1 skrll #define JH7110_SYSCLK_TDM_INTERNAL 186
235 1.1 skrll #define JH7110_SYSCLK_TDM_TDM 187
236 1.1 skrll #define JH7110_SYSCLK_TDM_TDM_INV 188
237 1.1 skrll #define JH7110_SYSCLK_JTAG_CERTIFICATION_TRNG 189
238 1.1 skrll
239 1.1 skrll #define JH7110_SYSCLK_NCLKS 190
240 1.1 skrll
241 1.1 skrll /* external clocks */
242 1.1 skrll #define JH7110_SYSCLK_PLL0_OUT (JH7110_SYSCLK_NCLKS + 0)
243 1.1 skrll #define JH7110_SYSCLK_PLL1_OUT (JH7110_SYSCLK_NCLKS + 1)
244 1.1 skrll #define JH7110_SYSCLK_PLL2_OUT (JH7110_SYSCLK_NCLKS + 2)
245 1.1 skrll
246 1.1 skrll /* AONCRG clocks */
247 1.1 skrll #define JH7110_AONCLK_OSC_DIV4 0
248 1.1 skrll #define JH7110_AONCLK_APB_FUNC 1
249 1.1 skrll #define JH7110_AONCLK_GMAC0_AHB 2
250 1.1 skrll #define JH7110_AONCLK_GMAC0_AXI 3
251 1.1 skrll #define JH7110_AONCLK_GMAC0_RMII_RTX 4
252 1.1 skrll #define JH7110_AONCLK_GMAC0_TX 5
253 1.1 skrll #define JH7110_AONCLK_GMAC0_TX_INV 6
254 1.1 skrll #define JH7110_AONCLK_GMAC0_RX 7
255 1.1 skrll #define JH7110_AONCLK_GMAC0_RX_INV 8
256 1.1 skrll #define JH7110_AONCLK_OTPC_APB 9
257 1.1 skrll #define JH7110_AONCLK_RTC_APB 10
258 1.1 skrll #define JH7110_AONCLK_RTC_INTERNAL 11
259 1.1 skrll #define JH7110_AONCLK_RTC_32K 12
260 1.1 skrll #define JH7110_AONCLK_RTC_CAL 13
261 1.1 skrll
262 1.1 skrll #define JH7110_AONCLK_NCLKS 14
263 1.1 skrll
264 1.1 skrll /* STGCRG clocks */
265 1.1 skrll #define JH7110_STGCLK_HIFI4_CLK_CORE 0
266 1.1 skrll #define JH7110_STGCLK_USB0_APB 1
267 1.1 skrll #define JH7110_STGCLK_USB0_UTMI_APB 2
268 1.1 skrll #define JH7110_STGCLK_USB0_AXI 3
269 1.1 skrll #define JH7110_STGCLK_USB0_LPM 4
270 1.1 skrll #define JH7110_STGCLK_USB0_STB 5
271 1.1 skrll #define JH7110_STGCLK_USB0_APP_125 6
272 1.1 skrll #define JH7110_STGCLK_USB0_REFCLK 7
273 1.1 skrll #define JH7110_STGCLK_PCIE0_AXI_MST0 8
274 1.1 skrll #define JH7110_STGCLK_PCIE0_APB 9
275 1.1 skrll #define JH7110_STGCLK_PCIE0_TL 10
276 1.1 skrll #define JH7110_STGCLK_PCIE1_AXI_MST0 11
277 1.1 skrll #define JH7110_STGCLK_PCIE1_APB 12
278 1.1 skrll #define JH7110_STGCLK_PCIE1_TL 13
279 1.1 skrll #define JH7110_STGCLK_PCIE_SLV_MAIN 14
280 1.1 skrll #define JH7110_STGCLK_SEC_AHB 15
281 1.1 skrll #define JH7110_STGCLK_SEC_MISC_AHB 16
282 1.1 skrll #define JH7110_STGCLK_GRP0_MAIN 17
283 1.1 skrll #define JH7110_STGCLK_GRP0_BUS 18
284 1.1 skrll #define JH7110_STGCLK_GRP0_STG 19
285 1.1 skrll #define JH7110_STGCLK_GRP1_MAIN 20
286 1.1 skrll #define JH7110_STGCLK_GRP1_BUS 21
287 1.1 skrll #define JH7110_STGCLK_GRP1_STG 22
288 1.1 skrll #define JH7110_STGCLK_GRP1_HIFI 23
289 1.1 skrll #define JH7110_STGCLK_E2_RTC 24
290 1.1 skrll #define JH7110_STGCLK_E2_CORE 25
291 1.1 skrll #define JH7110_STGCLK_E2_DBG 26
292 1.1 skrll #define JH7110_STGCLK_DMA1P_AXI 27
293 1.1 skrll #define JH7110_STGCLK_DMA1P_AHB 28
294 1.1 skrll
295 1.1 skrll #define JH7110_STGCLK_NCLKS 29
296 1.1 skrll
297 1.1 skrll /* ISPCRG clocks */
298 1.1 skrll #define JH7110_ISPCLK_DOM4_APB_FUNC 0
299 1.1 skrll #define JH7110_ISPCLK_MIPI_RX0_PXL 1
300 1.1 skrll #define JH7110_ISPCLK_DVP_INV 2
301 1.1 skrll #define JH7110_ISPCLK_M31DPHY_CFG_IN 3
302 1.1 skrll #define JH7110_ISPCLK_M31DPHY_REF_IN 4
303 1.1 skrll #define JH7110_ISPCLK_M31DPHY_TX_ESC_LAN0 5
304 1.1 skrll #define JH7110_ISPCLK_VIN_APB 6
305 1.1 skrll #define JH7110_ISPCLK_VIN_SYS 7
306 1.1 skrll #define JH7110_ISPCLK_VIN_PIXEL_IF0 8
307 1.1 skrll #define JH7110_ISPCLK_VIN_PIXEL_IF1 9
308 1.1 skrll #define JH7110_ISPCLK_VIN_PIXEL_IF2 10
309 1.1 skrll #define JH7110_ISPCLK_VIN_PIXEL_IF3 11
310 1.1 skrll #define JH7110_ISPCLK_VIN_P_AXI_WR 12
311 1.1 skrll #define JH7110_ISPCLK_ISPV2_TOP_WRAPPER_C 13
312 1.1 skrll
313 1.1 skrll #define JH7110_ISPCLK_NCLKS 14
314 1.1 skrll
315 1.1 skrll /* VOUTCRG clocks */
316 1.1 skrll #define JH7110_VOUTCLK_APB 0
317 1.1 skrll #define JH7110_VOUTCLK_DC8200_PIX 1
318 1.1 skrll #define JH7110_VOUTCLK_DSI_SYS 2
319 1.1 skrll #define JH7110_VOUTCLK_TX_ESC 3
320 1.1 skrll #define JH7110_VOUTCLK_DC8200_AXI 4
321 1.1 skrll #define JH7110_VOUTCLK_DC8200_CORE 5
322 1.1 skrll #define JH7110_VOUTCLK_DC8200_AHB 6
323 1.1 skrll #define JH7110_VOUTCLK_DC8200_PIX0 7
324 1.1 skrll #define JH7110_VOUTCLK_DC8200_PIX1 8
325 1.1 skrll #define JH7110_VOUTCLK_DOM_VOUT_TOP_LCD 9
326 1.1 skrll #define JH7110_VOUTCLK_DSITX_APB 10
327 1.1 skrll #define JH7110_VOUTCLK_DSITX_SYS 11
328 1.1 skrll #define JH7110_VOUTCLK_DSITX_DPI 12
329 1.1 skrll #define JH7110_VOUTCLK_DSITX_TXESC 13
330 1.1 skrll #define JH7110_VOUTCLK_MIPITX_DPHY_TXESC 14
331 1.1 skrll #define JH7110_VOUTCLK_HDMI_TX_MCLK 15
332 1.1 skrll #define JH7110_VOUTCLK_HDMI_TX_BCLK 16
333 1.1 skrll #define JH7110_VOUTCLK_HDMI_TX_SYS 17
334 1.1 skrll
335 1.1 skrll #define JH7110_VOUTCLK_NCLKS 18
336 1.1 skrll
337 1.1 skrll static const char *cpu_root_parents[] = {
338 1.1 skrll "osc", "pll0_out"
339 1.1 skrll };
340 1.1 skrll
341 1.1 skrll static const char *gpu_root_parents[] = {
342 1.1 skrll "pll2_out", "pll1_out",
343 1.1 skrll };
344 1.1 skrll
345 1.1 skrll static const char *bus_root_parents[] = {
346 1.1 skrll "osc", "pll2_out",
347 1.1 skrll };
348 1.1 skrll
349 1.1 skrll static const char *mclk_parents[] = {
350 1.1 skrll "mclk_inner", "mclk_ext"
351 1.1 skrll };
352 1.1 skrll
353 1.1 skrll static const char *ddr_bus_parents[] = {
354 1.1 skrll "osc_div2", "pll1_div2", "pll1_div4", "pll1_div8"
355 1.1 skrll };
356 1.1 skrll
357 1.1 skrll static const char *qspi_ref_parents[] = {
358 1.1 skrll "osc", "qspi_ref_src",
359 1.1 skrll };
360 1.1 skrll
361 1.1 skrll static const char *isp_2x_parents[] = {
362 1.1 skrll "pll2_out", "pll1_out"
363 1.1 skrll };
364 1.1 skrll
365 1.1 skrll static const char *i2stx0_lrck_parents[] = {
366 1.1 skrll "i2stx0_lrck_mst", "i2stx_lrck_ext",
367 1.1 skrll };
368 1.1 skrll
369 1.1 skrll static const char *i2stx0_bclk_parents[] = {
370 1.1 skrll "i2stx0_bclk_mst", "i2stx_bclk_ext",
371 1.1 skrll };
372 1.1 skrll
373 1.1 skrll static const char *i2stx1_bclk_parents[] = {
374 1.1 skrll "i2stx1_bclk_mst", "i2stx_bclk_ext",
375 1.1 skrll };
376 1.1 skrll
377 1.1 skrll static const char *gmac1_rx_parents[] = {
378 1.1 skrll "gmac1_rgmii_rxin", "gmac1_rmii_rtx",
379 1.1 skrll };
380 1.1 skrll
381 1.1 skrll static const char *i2srx_bclk_root_parents[] = {
382 1.1 skrll "i2srx_bclk_mst", "i2srx_bclk_ext",
383 1.1 skrll };
384 1.1 skrll
385 1.1 skrll static const char *i2srx_lrck_parents[] = {
386 1.1 skrll "i2srx_lrck_mst", "i2srx_lrck_ext",
387 1.1 skrll };
388 1.1 skrll
389 1.1 skrll static const char *tdm_tdm_parents[] = {
390 1.1 skrll "tdm_internal", "tdm_ext",
391 1.1 skrll };
392 1.1 skrll
393 1.1 skrll static const char *i2stx1_lrck_parents[] = {
394 1.1 skrll "i2stx1_lrck_mst", "i2stx_lrck_ext",
395 1.1 skrll };
396 1.1 skrll
397 1.1 skrll static const char *i2stx1_lrck_mst_parents[] = {
398 1.1 skrll "i2stx1_bclk_mst_inv", "i2stx1_bclk_mst",
399 1.1 skrll };
400 1.1 skrll
401 1.1 skrll static const char *gmac1_tx_parents[] = {
402 1.1 skrll "gmac1_gtxclk", "gmac1_rmii_rtx",
403 1.1 skrll };
404 1.1 skrll
405 1.1 skrll static const char *perh_root_parents[] = {
406 1.1 skrll "pll0_out", "pll2_out",
407 1.1 skrll };
408 1.1 skrll
409 1.1 skrll static const char *i2stx0_lrck_mst_parents[] = {
410 1.1 skrll "i2stx0_bclk_mst_inv", "i2stx0_bclk_mst"
411 1.1 skrll };
412 1.1 skrll
413 1.1 skrll static const char *i2srx_lrck_mst_parents[] = {
414 1.1 skrll "i2srx_bclk_mst_inv", "i2srx_bclk_mst",
415 1.1 skrll };
416 1.1 skrll
417 1.1 skrll static struct jh71x0_clkc_clk jh7110_sysclk_clocks[] = {
418 1.1 skrll JH71X0CLKC_FIXED_FACTOR(JH7110_SYSCLK_PLL0_OUT, "pll0_out", "osc", 3, 125),
419 1.1 skrll JH71X0CLKC_FIXED_FACTOR(JH7110_SYSCLK_PLL1_OUT, "pll1_out", "osc", 12, 533),
420 1.1 skrll JH71X0CLKC_FIXED_FACTOR(JH7110_SYSCLK_PLL2_OUT, "pll2_out", "osc", 2, 99),
421 1.1 skrll
422 1.1 skrll JH71X0CLKC_MUX(JH7110_SYSCLK_CPU_ROOT, "cpu_root", cpu_root_parents),
423 1.1 skrll JH71X0CLKC_MUX(JH7110_SYSCLK_GPU_ROOT, "gpu_root", gpu_root_parents),
424 1.1 skrll JH71X0CLKC_MUX(JH7110_SYSCLK_BUS_ROOT, "bus_root", bus_root_parents),
425 1.1 skrll
426 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_CPU_CORE, "cpu_core", 7, "cpu_root"),
427 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_CPU_BUS, "cpu_bus", 2, "cpu_core"),
428 1.1 skrll
429 1.1 skrll JH71X0CLKC_MUXDIV(JH7110_SYSCLK_PERH_ROOT, "perh_root", 2, perh_root_parents),
430 1.1 skrll
431 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_NOCSTG_BUS, "nocstg_bus", 3, "bus_root"),
432 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_AXI_CFG0, "axi_cfg0", 3, "bus_root"),
433 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_STG_AXIAHB, "stg_axiahb", 2, "axi_cfg0"),
434 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_AHB0, "ahb0", "stg_axiahb"), // CLK_IS_CRITICAL,
435 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_AHB1, "ahb1", "stg_axiahb"),// CLK_IS_CRITICAL,
436 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_APB_BUS, "apb_bus", 8, "stg_axiahb"),
437 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_APB0, "apb0", "apb_bus"),// CLK_IS_CRITICAL,
438 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_PLL0_DIV2, "pll0_div2", 2, "pll0_out"),
439 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_PLL1_DIV2, "pll1_div2", 2, "pll1_out"),
440 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_PLL2_DIV2, "pll2_div2", 2, "pll2_out"),
441 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_AUDIO_ROOT, "audio_root", 8, "pll2_out"),
442 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_MCLK_INNER, "mclk_inner", 64, "audio_root"),
443 1.1 skrll
444 1.1 skrll JH71X0CLKC_MUX(JH7110_SYSCLK_MCLK, "mclk", mclk_parents),
445 1.1 skrll
446 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_MCLK_OUT, "mclk_out", "mclk_inner"),
447 1.1 skrll
448 1.1 skrll JH71X0CLKC_MUXDIV(JH7110_SYSCLK_ISP_2X, "isp_2x", 8, isp_2x_parents),
449 1.1 skrll
450 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_ISP_AXI, "isp_axi", 4, "isp_2x"),
451 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_GCLK0, "gclk0", 62, "pll0_div2"),
452 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_GCLK1, "gclk1",62, "pll1_div2"),
453 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_GCLK2, "gclk2",62, "pll2_div2"),
454 1.1 skrll /* cores */
455 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_CORE, "core", "cpu_core"),// CLK_IS_CRITICAL,
456 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_CORE1, "core1", "cpu_core"),// CLK_IS_CRITICAL,
457 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_CORE2, "core2", "cpu_core"),// CLK_IS_CRITICAL,
458 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_CORE3, "core3", "cpu_core"),// CLK_IS_CRITICAL,
459 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_CORE4, "core4", "cpu_core"),// CLK_IS_CRITICAL,
460 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_DEBUG, "debug", "cpu_bus"),
461 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_RTC_TOGGLE, "rtc_toggle", 6, "osc"),
462 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_TRACE0, "trace0", "cpu_core"),
463 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_TRACE1, "trace1", "cpu_core"),
464 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_TRACE2, "trace2", "cpu_core"),
465 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_TRACE3, "trace3", "cpu_core"),
466 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_TRACE4, "trace4", "cpu_core"),
467 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_TRACE_COM, "trace_com", "cpu_bus"),
468 1.1 skrll /* noc */
469 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_NOC_BUS_CPU_AXI, "noc_bus_cpu_axi", "cpu_bus"), // CLK_IS_CRITICAL,
470 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_NOC_BUS_AXICFG0_AXI, "noc_bus_axicfg0_axi", "axi_cfg0"),// CLK_IS_CRITICAL,
471 1.1 skrll /* ddr */
472 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_OSC_DIV2, "osc_div2", 2, "osc"),
473 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_PLL1_DIV4, "pll1_div4", 2, "pll1_div2"),
474 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_PLL1_DIV8, "pll1_div8", 2, "pll1_div4"),
475 1.1 skrll JH71X0CLKC_MUX(JH7110_SYSCLK_DDR_BUS, "ddr_bus", ddr_bus_parents),
476 1.1 skrll
477 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_DDR_AXI, "ddr_axi", "ddr_bus"),// CLK_IS_CRITICAL,
478 1.1 skrll /* gpu */
479 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_GPU_CORE, "gpu_core", 7, "gpu_root"),
480 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_GPU_CORE_CLK, "gpu_core_clk", "gpu_core"),
481 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_GPU_SYS_CLK, "gpu_sys_clk", "isp_axi"),
482 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_GPU_APB, "gpu_apb", "apb_bus"),
483 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_GPU_RTC_TOGGLE, "gpu_rtc_toggle", 12, "osc"),
484 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_NOC_BUS_GPU_AXI, "noc_bus_gpu_axi", "gpu_core"),
485 1.1 skrll /* isp */
486 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_ISP_TOP_CORE, "isp_top_core", "isp_2x"),
487 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_ISP_TOP_AXI, "isp_top_axi", "isp_axi"),
488 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_NOC_BUS_ISP_AXI, "noc_bus_isp_axi", "isp_axi"), // CLK_IS_CRITICAL,
489 1.1 skrll /* hifi4 */
490 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_HIFI4_CORE, "hifi4_core", 15, "bus_root"),
491 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_HIFI4_AXI, "hifi4_axi", 2, "hifi4_core"),
492 1.1 skrll /* axi_cfg1 */
493 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_AXI_CFG1_MAIN, "axi_cfg1_main", "isp_axi"), // CLK_IS_CRITICAL
494 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_AXI_CFG1_AHB, "axi_cfg1_ahb", "ahb0"), // CLK_IS_CRITICAL
495 1.1 skrll /* vout */
496 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_VOUT_SRC, "vout_src", "pll2_out"),
497 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_VOUT_AXI, "vout_axi", 7, "pll2_out"),
498 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_NOC_BUS_DISP_AXI, "noc_bus_disp_axi", "vout_axi"),
499 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_VOUT_TOP_AHB, "vout_top_ahb", "ahb1"),
500 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_VOUT_TOP_AXI, "vout_top_axi", "vout_axi"),
501 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_VOUT_TOP_HDMITX0_MCLK, "vout_top_hdmitx0_mclk", "mclk_out"),
502 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_VOUT_TOP_MIPIPHY_REF, "vout_top_mipiphy_ref", 2, "osc"),
503 1.1 skrll /* jpegc */
504 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_JPEGC_AXI, "jpegc_axi", 16, "pll2_out"),
505 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_CODAJ12_AXI, "codaj12_axi", "jpegc_axi"),
506 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_CODAJ12_CORE, "codaj12_core",16, "pll2_out"),
507 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_CODAJ12_APB, "codaj12_apb", "apb_bus"),
508 1.1 skrll /* vdec */
509 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_VDEC_AXI, "vdec_axi", 7, "bus_root"),
510 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_WAVE511_AXI, "wave511_axi", "vdec_axi"),
511 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_WAVE511_BPU, "wave511_bpu",7, "bus_root"),
512 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_WAVE511_VCE, "wave511_vce", 7, "pll0_out"),
513 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_WAVE511_APB, "wave511_apb", "apb_bus"),
514 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_VDEC_JPG, "vdec_jpg", "jpegc_axi"),
515 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_VDEC_MAIN, "vdec_main", "vdec_axi"),
516 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_NOC_BUS_VDEC_AXI, "noc_bus_vdec_axi", "vdec_axi"),
517 1.1 skrll /* venc */
518 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_VENC_AXI, "venc_axi", 15, "pll2_out"),
519 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_WAVE420L_AXI, "wave420l_axi", "venc_axi"),
520 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_WAVE420L_BPU, "wave420l_bpu",15, "pll2_out"),
521 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_WAVE420L_VCE, "wave420l_vce",15, "pll2_out"),
522 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_WAVE420L_APB, "wave420l_apb", "apb_bus"),
523 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_NOC_BUS_VENC_AXI, "noc_bus_venc_axi", "venc_axi"),
524 1.1 skrll /* axi_cfg0 */
525 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_AXI_CFG0_MAIN_DIV, "axi_cfg0_main_div", "ahb1"), // CLK_IS_CRITICAL
526 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_AXI_CFG0_MAIN, "axi_cfg0_main", "axi_cfg0"), // CLK_IS_CRITICAL
527 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_AXI_CFG0_HIFI4, "axi_cfg0_hifi4", "hifi4_axi"), // CLK_IS_CRITICAL,
528 1.1 skrll /* intmem */
529 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_AXIMEM2_AXI, "aximem2_axi", "axi_cfg0"),
530 1.1 skrll /* qspi */
531 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_QSPI_AHB, "qspi_ahb", "ahb1"),
532 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_QSPI_APB, "qspi_apb", "apb_bus"),
533 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_QSPI_REF_SRC, "qspi_ref_src", 16, "pll0_out"),
534 1.1 skrll JH71X0CLKC_MUXGATE(JH7110_SYSCLK_QSPI_REF, "qspi_ref", qspi_ref_parents),
535 1.1 skrll
536 1.1 skrll /* sdio */
537 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_SDIO0_AHB, "sdio0_ahb", "ahb0"),
538 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_SDIO1_AHB, "sdio1_ahb", "ahb0"),
539 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_SDIO0_SDCARD, "sdio0_sdcard", 15, "axi_cfg0"),
540 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_SDIO1_SDCARD, "sdio1_sdcard", 15, "axi_cfg0"),
541 1.1 skrll /* stg */
542 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_USB_125M, "usb_125m", 15, "pll0_out"),
543 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_NOC_BUS_STG_AXI, "noc_bus_stg_axi", "nocstg_bus"), // CLK_IS_CRITICAL,
544 1.1 skrll /* gmac1 */
545 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_GMAC1_AHB, "gmac1_ahb", "ahb0"),
546 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_GMAC1_AXI, "gmac1_axi", "stg_axiahb"),
547 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_GMAC_SRC, "gmac_src", 7, "pll0_out"),
548 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_GMAC1_GTXCLK, "gmac1_gtxclk", 15, "pll0_out"),
549 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_GMAC1_RMII_RTX, "gmac1_rmii_rtx", 30, "gmac1_rmii_refin"),
550 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_GMAC1_PTP, "gmac1_ptp",31, "gmac_src"),
551 1.1 skrll JH71X0CLKC_MUX(JH7110_SYSCLK_GMAC1_RX, "gmac1_rx", gmac1_rx_parents),
552 1.1 skrll
553 1.1 skrll JH71X0CLKC_INV(JH7110_SYSCLK_GMAC1_RX_INV, "gmac1_rx_inv", "gmac1_rx"),
554 1.1 skrll JH71X0CLKC_MUXGATE_FLAGS(JH7110_SYSCLK_GMAC1_TX, "gmac1_tx", gmac1_tx_parents, CLK_SET_RATE_PARENT), // CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
555 1.1 skrll JH71X0CLKC_INV(JH7110_SYSCLK_GMAC1_TX_INV, "gmac1_tx_inv", "gmac1_tx"),
556 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_GMAC1_GTXC, "gmac1_gtxc", "gmac1_gtxclk"),
557 1.1 skrll /* gmac0 */
558 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_GMAC0_GTXCLK, "gmac0_gtxclk",15, "pll0_out"),
559 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_GMAC0_PTP, "gmac0_ptp",31, "gmac_src"),
560 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_GMAC_PHY, "gmac_phy",31, "gmac_src"),
561 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_GMAC0_GTXC, "gmac0_gtxc", "gmac0_gtxclk"),
562 1.1 skrll /* apb misc */
563 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_IOMUX_APB, "iomux_apb", "apb_bus"),
564 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_MAILBOX_APB, "mailbox_apb", "apb_bus"),
565 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_INT_CTRL_APB, "int_ctrl_apb", "apb_bus"),
566 1.1 skrll /* can0 */
567 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_CAN0_APB, "can0_apb", "apb_bus"),
568 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_CAN0_TIMER, "can0_timer",24, "osc"),
569 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_CAN0_CAN, "can0_can",63, "perh_root"),
570 1.1 skrll /* can1 */
571 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_CAN1_APB, "can1_apb", "apb_bus"),
572 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_CAN1_TIMER, "can1_timer",24, "osc"),
573 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_CAN1_CAN, "can1_can",63, "perh_root"),
574 1.1 skrll /* pwm */
575 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_PWM_APB, "pwm_apb", "apb_bus"),
576 1.1 skrll /* wdt */
577 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_WDT_APB, "wdt_apb", "apb_bus"),
578 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_WDT_CORE, "wdt_core", "osc"),
579 1.1 skrll /* timer */
580 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_TIMER_APB, "timer_apb", "apb_bus"),
581 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_TIMER0, "timer0", "osc"),
582 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_TIMER1, "timer1", "osc"),
583 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_TIMER2, "timer2", "osc"),
584 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_TIMER3, "timer3", "osc"),
585 1.1 skrll /* temp sensor */
586 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_TEMP_APB, "temp_apb", "apb_bus"),
587 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_TEMP_CORE, "temp_core",24, "osc"),
588 1.1 skrll /* spi */
589 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_SPI0_APB, "spi0_apb", "apb0"),
590 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_SPI1_APB, "spi1_apb", "apb0"),
591 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_SPI2_APB, "spi2_apb", "apb0"),
592 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_SPI3_APB, "spi3_apb", "apb_bus"),
593 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_SPI4_APB, "spi4_apb", "apb_bus"),
594 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_SPI5_APB, "spi5_apb", "apb_bus"),
595 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_SPI6_APB, "spi6_apb", "apb_bus"),
596 1.1 skrll /* i2c */
597 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_I2C0_APB, "i2c0_apb", "apb0"),
598 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_I2C1_APB, "i2c1_apb", "apb0"),
599 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_I2C2_APB, "i2c2_apb", "apb0"),
600 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_I2C3_APB, "i2c3_apb", "apb_bus"),
601 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_I2C4_APB, "i2c4_apb", "apb_bus"),
602 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_I2C5_APB, "i2c5_apb", "apb_bus"),
603 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_I2C6_APB, "i2c6_apb", "apb_bus"),
604 1.1 skrll /* uart */
605 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_UART0_APB, "uart0_apb", "apb0"),
606 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_UART0_CORE, "uart0_core", "osc"),
607 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_UART1_APB, "uart1_apb", "apb0"),
608 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_UART1_CORE, "uart1_core", "osc"),
609 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_UART2_APB, "uart2_apb", "apb0"),
610 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_UART2_CORE, "uart2_core", "osc"),
611 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_UART3_APB, "uart3_apb", "apb0"),
612 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_UART3_CORE, "uart3_core",10, "perh_root"),
613 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_UART4_APB, "uart4_apb", "apb0"),
614 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_UART4_CORE, "uart4_core",10, "perh_root"),
615 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_UART5_APB, "uart5_apb", "apb0"),
616 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_UART5_CORE, "uart5_core",10, "perh_root"),
617 1.1 skrll /* pwmdac */
618 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_PWMDAC_APB, "pwmdac_apb", "apb0"),
619 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_PWMDAC_CORE, "pwmdac_core",256, "audio_root"),
620 1.1 skrll /* spdif */
621 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_SPDIF_APB, "spdif_apb", "apb0"),
622 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_SPDIF_CORE, "spdif_core", "mclk_out"),
623 1.1 skrll /* i2stx0 */
624 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_I2STX0_APB, "i2stx0_apb", "apb0"),
625 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_I2STX0_BCLK_MST, "i2stx0_bclk_mst",32, "mclk_out"),
626 1.1 skrll JH71X0CLKC_INV(JH7110_SYSCLK_I2STX0_BCLK_MST_INV, "i2stx0_bclk_mst_inv", "i2stx0_bclk_mst"),
627 1.1 skrll
628 1.1 skrll JH71X0CLKC_MUXDIV(JH7110_SYSCLK_I2STX0_LRCK_MST, "i2stx0_lrck_mst", 64, i2stx0_lrck_mst_parents),
629 1.1 skrll
630 1.1 skrll JH71X0CLKC_MUX(JH7110_SYSCLK_I2STX0_BCLK, "i2stx0_bclk", i2stx0_bclk_parents),
631 1.1 skrll JH71X0CLKC_INV(JH7110_SYSCLK_I2STX0_BCLK_INV, "i2stx0_bclk_inv", "i2stx0_bclk"),
632 1.1 skrll JH71X0CLKC_MUX(JH7110_SYSCLK_I2STX0_LRCK, "i2stx0_lrck", i2stx0_lrck_parents),
633 1.1 skrll /* i2stx1 */
634 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_I2STX1_APB, "i2stx1_apb", "apb0"),
635 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_I2STX1_BCLK_MST, "i2stx1_bclk_mst",32, "mclk_out"),
636 1.1 skrll JH71X0CLKC_INV(JH7110_SYSCLK_I2STX1_BCLK_MST_INV, "i2stx1_bclk_mst_inv", "i2stx1_bclk_mst"),
637 1.1 skrll
638 1.1 skrll JH71X0CLKC_MUXDIV(JH7110_SYSCLK_I2STX1_LRCK_MST, "i2stx1_lrck_mst", 64, i2stx1_lrck_mst_parents),
639 1.1 skrll
640 1.1 skrll JH71X0CLKC_MUX(JH7110_SYSCLK_I2STX1_BCLK, "i2stx1_bclk", i2stx1_bclk_parents),
641 1.1 skrll JH71X0CLKC_INV(JH7110_SYSCLK_I2STX1_BCLK_INV, "i2stx1_bclk_inv", "i2stx1_bclk"),
642 1.1 skrll JH71X0CLKC_MUX(JH7110_SYSCLK_I2STX1_LRCK, "i2stx1_lrck", i2stx1_lrck_parents),
643 1.1 skrll /* i2srx */
644 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_I2SRX_APB, "i2srx_apb", "apb0"),
645 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_I2SRX_BCLK_MST, "i2srx_bclk_mst", 32, "mclk_out"),
646 1.1 skrll JH71X0CLKC_INV(JH7110_SYSCLK_I2SRX_BCLK_MST_INV, "i2srx_bclk_mst_inv", "i2srx_bclk_mst"),
647 1.1 skrll
648 1.1 skrll JH71X0CLKC_MUXDIV(JH7110_SYSCLK_I2SRX_LRCK_MST, "i2srx_lrck_mst", 64, i2srx_lrck_mst_parents),
649 1.1 skrll
650 1.1 skrll JH71X0CLKC_MUX(JH7110_SYSCLK_I2SRX_BCLK, "i2srx_bclk", i2srx_bclk_root_parents),
651 1.1 skrll JH71X0CLKC_INV(JH7110_SYSCLK_I2SRX_BCLK_INV, "i2srx_bclk_inv", "i2srx_bclk"),
652 1.1 skrll JH71X0CLKC_MUX(JH7110_SYSCLK_I2SRX_LRCK, "i2srx_lrck", i2srx_lrck_parents),
653 1.1 skrll /* pdm */
654 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_PDM_DMIC, "pdm_dmic",64, "mclk_out"),
655 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_PDM_APB, "pdm_apb", "apb0"),
656 1.1 skrll /* tdm */
657 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_TDM_AHB, "tdm_ahb", "ahb0"),
658 1.1 skrll JH71X0CLKC_GATE(JH7110_SYSCLK_TDM_APB, "tdm_apb", "apb0"),
659 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_SYSCLK_TDM_INTERNAL, "tdm_internal",64, "mclk_out"),
660 1.1 skrll JH71X0CLKC_MUX(JH7110_SYSCLK_TDM_TDM, "tdm_tdm", tdm_tdm_parents),
661 1.1 skrll JH71X0CLKC_INV(JH7110_SYSCLK_TDM_TDM_INV, "tdm_tdm_inv", "tdm_tdm"),
662 1.1 skrll /* jtag */
663 1.1 skrll JH71X0CLKC_DIV(JH7110_SYSCLK_JTAG_CERTIFICATION_TRNG, "jtag_certification_trng", 4, "osc"),
664 1.1 skrll };
665 1.1 skrll
666 1.1 skrll static const char *apb_func_parents[] = {
667 1.1 skrll "osc_div4", "osc",
668 1.1 skrll };
669 1.1 skrll
670 1.1 skrll static const char *gmac0_tx_parents[] = {
671 1.1 skrll "gmac0_gtxclk", "gmac0_rmii_rtx"
672 1.1 skrll };
673 1.1 skrll
674 1.1 skrll static const char *gmac0_rx_parents[] = {
675 1.1 skrll "gmac0_rgmii_rxin", "gmac0_rmii_rtx",
676 1.1 skrll };
677 1.1 skrll
678 1.1 skrll static const char *rtc_32k_parents[] = {
679 1.1 skrll "rtc_osc", "rtc_internal",
680 1.1 skrll };
681 1.1 skrll
682 1.1 skrll static struct jh71x0_clkc_clk jh7110_aonclk_clocks[] = {
683 1.1 skrll /* source */
684 1.1 skrll JH71X0CLKC_DIV(JH7110_AONCLK_OSC_DIV4, "osc_div4", 4, "osc"),
685 1.1 skrll JH71X0CLKC_MUX(JH7110_AONCLK_APB_FUNC, "apb_func", apb_func_parents),
686 1.1 skrll /* gmac0 */
687 1.1 skrll JH71X0CLKC_GATE(JH7110_AONCLK_GMAC0_AHB, "gmac0_ahb", "stg_axiahb"),
688 1.1 skrll JH71X0CLKC_GATE(JH7110_AONCLK_GMAC0_AXI, "gmac0_axi", "stg_axiahb"),
689 1.1 skrll JH71X0CLKC_DIV(JH7110_AONCLK_GMAC0_RMII_RTX, "gmac0_rmii_rtx", 30, "gmac0_rmii_refin"),
690 1.1 skrll JH71X0CLKC_MUXGATE(JH7110_AONCLK_GMAC0_TX, "gmac0_tx",gmac0_tx_parents),
691 1.1 skrll JH71X0CLKC_INV(JH7110_AONCLK_GMAC0_TX_INV, "gmac0_tx_inv", "gmac0_tx"),
692 1.1 skrll JH71X0CLKC_MUX_FLAGS(JH7110_AONCLK_GMAC0_RX, "gmac0_rx", gmac0_rx_parents, CLK_SET_RATE_PARENT), // CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT
693 1.1 skrll JH71X0CLKC_INV(JH7110_AONCLK_GMAC0_RX_INV, "gmac0_rx_inv", "gmac0_rx"),
694 1.1 skrll /* otpc */
695 1.1 skrll JH71X0CLKC_GATE(JH7110_AONCLK_OTPC_APB, "otpc_apb", "apb_bus"),
696 1.1 skrll /* rtc */
697 1.1 skrll JH71X0CLKC_GATE(JH7110_AONCLK_RTC_APB, "rtc_apb", "apb_bus"),
698 1.1 skrll JH71X0CLKC_DIV(JH7110_AONCLK_RTC_INTERNAL, "rtc_internal", 1022, "osc"),
699 1.1 skrll JH71X0CLKC_MUX(JH7110_AONCLK_RTC_32K, "rtc_32k", rtc_32k_parents),
700 1.1 skrll JH71X0CLKC_GATE(JH7110_AONCLK_RTC_CAL, "rtc_cal", "osc"),
701 1.1 skrll };
702 1.1 skrll
703 1.1 skrll
704 1.1 skrll static struct jh71x0_clkc_clk jh7110_stgclk_clocks[] = {
705 1.1 skrll /* hifi4 */
706 1.1 skrll JH71X0CLKC_GATE(JH7110_STGCLK_HIFI4_CLK_CORE, "hifi4_clk_core", "hifi4_core"),
707 1.1 skrll /* usb */
708 1.1 skrll JH71X0CLKC_GATE(JH7110_STGCLK_USB0_APB, "usb0_apb", "apb_bus"),
709 1.1 skrll JH71X0CLKC_GATE(JH7110_STGCLK_USB0_UTMI_APB, "usb0_utmi_apb", "apb_bus"),
710 1.1 skrll JH71X0CLKC_GATE(JH7110_STGCLK_USB0_AXI, "usb0_axi", "stg_axiahb"),
711 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_STGCLK_USB0_LPM, "usb0_lpm", 2, "osc"),
712 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_STGCLK_USB0_STB, "usb0_stb", 4, "osc"),
713 1.1 skrll JH71X0CLKC_GATE(JH7110_STGCLK_USB0_APP_125, "usb0_app_125", "usb_125m"),
714 1.1 skrll JH71X0CLKC_DIV(JH7110_STGCLK_USB0_REFCLK, "usb0_refclk", 2, "osc"),
715 1.1 skrll /* pci-e */
716 1.1 skrll JH71X0CLKC_GATE(JH7110_STGCLK_PCIE0_AXI_MST0, "pcie0_axi_mst0", "stg_axiahb"),
717 1.1 skrll JH71X0CLKC_GATE(JH7110_STGCLK_PCIE0_APB, "pcie0_apb", "apb_bus"),
718 1.1 skrll JH71X0CLKC_GATE(JH7110_STGCLK_PCIE0_TL, "pcie0_tl", "stg_axiahb"),
719 1.1 skrll JH71X0CLKC_GATE(JH7110_STGCLK_PCIE1_AXI_MST0, "pcie1_axi_mst0", "stg_axiahb"),
720 1.1 skrll JH71X0CLKC_GATE(JH7110_STGCLK_PCIE1_APB, "pcie1_apb", "apb_bus"),
721 1.1 skrll JH71X0CLKC_GATE(JH7110_STGCLK_PCIE1_TL, "pcie1_tl", "stg_axiahb"),
722 1.1 skrll JH71X0CLKC_GATE(JH7110_STGCLK_PCIE_SLV_MAIN, "pcie_slv_main", "stg_axiahb"), // CLK_IS_CRITICAL
723 1.1 skrll /* security */
724 1.1 skrll JH71X0CLKC_GATE(JH7110_STGCLK_SEC_AHB, "sec_ahb", "stg_axiahb"),
725 1.1 skrll JH71X0CLKC_GATE(JH7110_STGCLK_SEC_MISC_AHB, "sec_misc_ahb", "stg_axiahb"),
726 1.1 skrll /* stg mtrx */
727 1.1 skrll JH71X0CLKC_GATE(JH7110_STGCLK_GRP0_MAIN, "mtrx_grp0_main", "cpu_bus"), // CLK_IS_CRITICAL
728 1.1 skrll JH71X0CLKC_GATE(JH7110_STGCLK_GRP0_BUS, "mtrx_grp0_bus", "nocstg_bus"), // CLK_IS_CRITICAL
729 1.1 skrll JH71X0CLKC_GATE(JH7110_STGCLK_GRP0_STG, "mtrx_grp0_stg", "stg_axiahb"), // CLK_IS_CRITICAL
730 1.1 skrll JH71X0CLKC_GATE(JH7110_STGCLK_GRP1_MAIN, "mtrx_grp1_main", "cpu_bus"), // CLK_IS_CRITICAL
731 1.1 skrll JH71X0CLKC_GATE(JH7110_STGCLK_GRP1_BUS, "mtrx_grp1_bus", "nocstg_bus"), // CLK_IS_CRITICAL
732 1.1 skrll JH71X0CLKC_GATE(JH7110_STGCLK_GRP1_STG, "mtrx_grp1_stg", "stg_axiahb"), // CLK_IS_CRITICAL
733 1.1 skrll JH71X0CLKC_GATE(JH7110_STGCLK_GRP1_HIFI, "mtrx_grp1_hifi", "hifi4_axi"), // CLK_IS_CRITICAL
734 1.1 skrll /* e24_rvpi */
735 1.1 skrll JH71X0CLKC_GATEDIV(JH7110_STGCLK_E2_RTC, "e2_rtc", 24, "osc"),
736 1.1 skrll JH71X0CLKC_GATE(JH7110_STGCLK_E2_CORE, "e2_core", "stg_axiahb"),
737 1.1 skrll JH71X0CLKC_GATE(JH7110_STGCLK_E2_DBG, "e2_dbg", "stg_axiahb"),
738 1.1 skrll /* dw_sgdma1p */
739 1.1 skrll JH71X0CLKC_GATE(JH7110_STGCLK_DMA1P_AXI, "dma1p_axi", "stg_axiahb"),
740 1.1 skrll JH71X0CLKC_GATE(JH7110_STGCLK_DMA1P_AHB, "dma1p_ahb", "stg_axiahb"),
741 1.1 skrll };
742 1.1 skrll
743 1.1 skrll static const char *vin_p_axi_wr_parents[] = {
744 1.1 skrll "mipi_rx0_pxl", "dvp_inv",
745 1.1 skrll };
746 1.1 skrll
747 1.1 skrll static const char *ispv2_top_wrapper_c_parents[] = {
748 1.1 skrll "mipi_rx0_pxl", "dvp_inv",
749 1.1 skrll };
750 1.1 skrll
751 1.1 skrll static struct jh71x0_clkc_clk jh7110_ispclk_clocks[] = {
752 1.1 skrll /* syscon */
753 1.1 skrll JH71X0CLKC_DIV(JH7110_ISPCLK_DOM4_APB_FUNC, "dom4_apb_func", 15, "isp_top_axi"),
754 1.1 skrll JH71X0CLKC_DIV(JH7110_ISPCLK_MIPI_RX0_PXL, "mipi_rx0_pxl", 8, "isp_top_core"),
755 1.1 skrll JH71X0CLKC_INV(JH7110_ISPCLK_DVP_INV, "dvp_inv", "dvp_clk"),
756 1.1 skrll /* vin */
757 1.1 skrll JH71X0CLKC_DIV(JH7110_ISPCLK_M31DPHY_CFG_IN, "m31dphy_cfg_in", 16, "isp_top_core"),
758 1.1 skrll JH71X0CLKC_DIV(JH7110_ISPCLK_M31DPHY_REF_IN, "m31dphy_ref_in", 16, "isp_top_core"),
759 1.1 skrll JH71X0CLKC_DIV(JH7110_ISPCLK_M31DPHY_TX_ESC_LAN0, "m31dphy_tx_esc_lan0", 60, "isp_top_core"),
760 1.1 skrll JH71X0CLKC_GATE(JH7110_ISPCLK_VIN_APB, "vin_apb", "dom4_apb_func"),
761 1.1 skrll JH71X0CLKC_DIV(JH7110_ISPCLK_VIN_SYS, "vin_sys", 8, "isp_top_core"),
762 1.1 skrll JH71X0CLKC_GATE(JH7110_ISPCLK_VIN_PIXEL_IF0, "vin_pixel_if0", "mipi_rx0_pxl"),
763 1.1 skrll JH71X0CLKC_GATE(JH7110_ISPCLK_VIN_PIXEL_IF1, "vin_pixel_if1", "mipi_rx0_pxl"),
764 1.1 skrll JH71X0CLKC_GATE(JH7110_ISPCLK_VIN_PIXEL_IF2, "vin_pixel_if2", "mipi_rx0_pxl"),
765 1.1 skrll JH71X0CLKC_GATE(JH7110_ISPCLK_VIN_PIXEL_IF3, "vin_pixel_if3", "mipi_rx0_pxl"),
766 1.1 skrll JH71X0CLKC_MUX(JH7110_ISPCLK_VIN_P_AXI_WR, "vin_p_axi_wr", vin_p_axi_wr_parents),
767 1.1 skrll /* ispv2_top_wrapper */
768 1.1 skrll JH71X0CLKC_MUXGATE(JH7110_ISPCLK_ISPV2_TOP_WRAPPER_C, "ispv2_top_wrapper_c", ispv2_top_wrapper_c_parents),
769 1.1 skrll };
770 1.1 skrll
771 1.1 skrll static const char *dc8200_pix0_parents[] = {
772 1.1 skrll "dc8200_pix", "hdmitx0_pixelclk",
773 1.1 skrll };
774 1.1 skrll
775 1.1 skrll static const char *dc8200_pix1_parents[] = {
776 1.1 skrll "dc8200_pix", "hdmitx0_pixelclk",
777 1.1 skrll };
778 1.1 skrll
779 1.1 skrll static const char *dsiTx_dpi_parents[] = {
780 1.1 skrll "dc8200_pix", "hdmitx0_pixelclk",
781 1.1 skrll };
782 1.1 skrll
783 1.1 skrll static const char *dom_vout_top_lcd_parents[] = {
784 1.1 skrll "dc8200_pix0", "dc8200_pix1",
785 1.1 skrll };
786 1.1 skrll
787 1.1 skrll static struct jh71x0_clkc_clk jh7110_voutclk_clocks[] = {
788 1.1 skrll /* divider */
789 1.1 skrll JH71X0CLKC_DIV(JH7110_VOUTCLK_APB, "apb", 8, "vout_top_ahb"),
790 1.1 skrll JH71X0CLKC_DIV(JH7110_VOUTCLK_DC8200_PIX, "dc8200_pix", 63, "vout_src"),
791 1.1 skrll JH71X0CLKC_DIV(JH7110_VOUTCLK_DSI_SYS, "dsi_sys", 31, "vout_src"),
792 1.1 skrll JH71X0CLKC_DIV(JH7110_VOUTCLK_TX_ESC, "tx_esc", 31, "vout_top_ahb"),
793 1.1 skrll /* dc8200 */
794 1.1 skrll JH71X0CLKC_GATE(JH7110_VOUTCLK_DC8200_AXI, "dc8200_axi", "vout_top_axi"),
795 1.1 skrll JH71X0CLKC_GATE(JH7110_VOUTCLK_DC8200_CORE, "dc8200_core", "vout_top_axi"),
796 1.1 skrll JH71X0CLKC_GATE(JH7110_VOUTCLK_DC8200_AHB, "dc8200_ahb", "vout_top_ahb"),
797 1.1 skrll JH71X0CLKC_MUXGATE(JH7110_VOUTCLK_DC8200_PIX0, "dc8200_pix0", dc8200_pix0_parents),
798 1.1 skrll JH71X0CLKC_MUXGATE(JH7110_VOUTCLK_DC8200_PIX1, "dc8200_pix1", dc8200_pix1_parents),
799 1.1 skrll /* LCD */
800 1.1 skrll JH71X0CLKC_MUXGATE(JH7110_VOUTCLK_DOM_VOUT_TOP_LCD, "dom_vout_top_lcd", dom_vout_top_lcd_parents),
801 1.1 skrll /* dsiTx */
802 1.1 skrll JH71X0CLKC_GATE(JH7110_VOUTCLK_DSITX_APB, "dsiTx_apb", "dsi_sys"),
803 1.1 skrll JH71X0CLKC_GATE(JH7110_VOUTCLK_DSITX_SYS, "dsiTx_sys", "dsi_sys"),
804 1.1 skrll JH71X0CLKC_MUXGATE(JH7110_VOUTCLK_DSITX_DPI, "dsiTx_dpi", dsiTx_dpi_parents),
805 1.1 skrll JH71X0CLKC_GATE(JH7110_VOUTCLK_DSITX_TXESC, "dsiTx_txesc", "tx_esc"),
806 1.1 skrll /* mipitx DPHY */
807 1.1 skrll JH71X0CLKC_GATE(JH7110_VOUTCLK_MIPITX_DPHY_TXESC, "mipitx_dphy_txesc", "tx_esc"),
808 1.1 skrll /* hdmi */
809 1.1 skrll JH71X0CLKC_GATE(JH7110_VOUTCLK_HDMI_TX_MCLK, "hdmi_tx_mclk", "vout_top_hdmitx0_mclk"),
810 1.1 skrll JH71X0CLKC_GATE(JH7110_VOUTCLK_HDMI_TX_BCLK, "hdmi_tx_bclk", "i2stx0_bclk"),
811 1.1 skrll JH71X0CLKC_GATE(JH7110_VOUTCLK_HDMI_TX_SYS, "hdmi_tx_sys", "apb"),
812 1.1 skrll };
813 1.1 skrll
814 1.1 skrll struct jh7110_clock_config {
815 1.1 skrll struct jh71x0_clkc_clk *jhcc_clocks;
816 1.1 skrll size_t jhcc_nclks;
817 1.1 skrll };
818 1.1 skrll
819 1.7 skrll static struct jh7110_clock_config jh7110_sysclk_config = {
820 1.7 skrll .jhcc_clocks = jh7110_sysclk_clocks,
821 1.7 skrll .jhcc_nclks = __arraycount(jh7110_sysclk_clocks),
822 1.7 skrll };
823 1.7 skrll
824 1.1 skrll static struct jh7110_clock_config jh7110_aonclk_config = {
825 1.1 skrll .jhcc_clocks = jh7110_aonclk_clocks,
826 1.1 skrll .jhcc_nclks = __arraycount(jh7110_aonclk_clocks),
827 1.1 skrll };
828 1.1 skrll
829 1.1 skrll static struct jh7110_clock_config jh7110_stgclk_config = {
830 1.1 skrll .jhcc_clocks = jh7110_stgclk_clocks,
831 1.1 skrll .jhcc_nclks = __arraycount(jh7110_stgclk_clocks),
832 1.1 skrll };
833 1.1 skrll
834 1.7 skrll static struct jh7110_clock_config jh7110_ispclk_config = {
835 1.7 skrll .jhcc_clocks = jh7110_ispclk_clocks,
836 1.7 skrll .jhcc_nclks = __arraycount(jh7110_ispclk_clocks),
837 1.1 skrll };
838 1.1 skrll
839 1.1 skrll static struct jh7110_clock_config jh7110_voutclk_config = {
840 1.1 skrll .jhcc_clocks = jh7110_voutclk_clocks,
841 1.1 skrll .jhcc_nclks = __arraycount(jh7110_voutclk_clocks),
842 1.1 skrll };
843 1.1 skrll
844 1.1 skrll
845 1.5 skrll #define JH7110_SYSRST_ASSERT 0x2f8
846 1.5 skrll #define JH7110_SYSRST_STATUS 0x308
847 1.5 skrll #define JH7110_SYSRST_NRESETS 126
848 1.5 skrll
849 1.5 skrll #define JH7110_AONRST_ASSERT 0x38
850 1.5 skrll #define JH7110_AONRST_STATUS 0x3c
851 1.5 skrll #define JH7110_AONRST_NRESETS 8
852 1.5 skrll
853 1.5 skrll #define JH7110_STGRST_ASSERT 0x74
854 1.5 skrll #define JH7110_STGRST_STATUS 0x78
855 1.5 skrll #define JH7110_STGRST_NRESETS 23
856 1.5 skrll
857 1.5 skrll #define JH7110_ISPRST_ASSERT 0x38
858 1.5 skrll #define JH7110_ISPRST_STATUS 0x3c
859 1.5 skrll #define JH7110_ISPRST_NRESETS 12
860 1.5 skrll
861 1.5 skrll #define JH7110_VOUTRST_ASSERT 0x48
862 1.5 skrll #define JH7110_VOUTRST_STATUS 0x4c
863 1.5 skrll #define JH7110_VOUTRST_NRESETS 12
864 1.5 skrll
865 1.5 skrll struct jh7110_reset_config {
866 1.5 skrll size_t jhcr_nresets;
867 1.5 skrll bus_size_t jhcr_assert;
868 1.5 skrll bus_size_t jhcr_status;
869 1.5 skrll };
870 1.5 skrll
871 1.5 skrll static struct jh7110_reset_config jh7110_sysrst_config = {
872 1.5 skrll .jhcr_nresets = JH7110_SYSRST_NRESETS,
873 1.5 skrll .jhcr_assert = JH7110_SYSRST_ASSERT,
874 1.5 skrll .jhcr_status = JH7110_SYSRST_STATUS,
875 1.5 skrll };
876 1.5 skrll
877 1.5 skrll static struct jh7110_reset_config jh7110_aonrst_config = {
878 1.5 skrll .jhcr_nresets = JH7110_AONRST_NRESETS,
879 1.5 skrll .jhcr_assert = JH7110_AONRST_ASSERT,
880 1.5 skrll .jhcr_status = JH7110_AONRST_STATUS,
881 1.5 skrll };
882 1.5 skrll
883 1.5 skrll static struct jh7110_reset_config jh7110_stgrst_config = {
884 1.5 skrll .jhcr_nresets = JH7110_STGRST_NRESETS,
885 1.5 skrll .jhcr_assert = JH7110_STGRST_ASSERT,
886 1.5 skrll .jhcr_status = JH7110_STGRST_STATUS,
887 1.5 skrll };
888 1.5 skrll
889 1.5 skrll static struct jh7110_reset_config jh7110_isprst_config = {
890 1.5 skrll .jhcr_nresets = JH7110_ISPRST_NRESETS,
891 1.5 skrll .jhcr_assert = JH7110_ISPRST_ASSERT,
892 1.5 skrll .jhcr_status = JH7110_ISPRST_STATUS,
893 1.5 skrll };
894 1.5 skrll
895 1.5 skrll static struct jh7110_reset_config jh7110_voutrst_config = {
896 1.5 skrll .jhcr_nresets = JH7110_VOUTRST_NRESETS,
897 1.5 skrll .jhcr_assert = JH7110_VOUTRST_ASSERT,
898 1.5 skrll .jhcr_status = JH7110_VOUTRST_STATUS,
899 1.5 skrll };
900 1.5 skrll
901 1.1 skrll struct jh7110_crg {
902 1.1 skrll const char *jhc_name;
903 1.1 skrll struct jh7110_clock_config *jhc_clk;
904 1.5 skrll struct jh7110_reset_config *jhc_rst;
905 1.4 skrll bool jhc_debug;
906 1.1 skrll };
907 1.1 skrll
908 1.1 skrll
909 1.1 skrll static struct jh7110_crg jh7110_sys_config = {
910 1.1 skrll .jhc_name = "System",
911 1.1 skrll .jhc_clk = &jh7110_sysclk_config,
912 1.5 skrll .jhc_rst = &jh7110_sysrst_config,
913 1.4 skrll .jhc_debug = true,
914 1.1 skrll };
915 1.1 skrll
916 1.1 skrll
917 1.1 skrll static struct jh7110_crg jh7110_aon_config = {
918 1.1 skrll .jhc_name = "Always-On",
919 1.1 skrll .jhc_clk = &jh7110_aonclk_config,
920 1.5 skrll .jhc_rst = &jh7110_aonrst_config,
921 1.4 skrll .jhc_debug = true,
922 1.1 skrll };
923 1.1 skrll
924 1.7 skrll static struct jh7110_crg jh7110_stg_config = {
925 1.7 skrll .jhc_name = "System-Top-Group",
926 1.7 skrll .jhc_clk = &jh7110_stgclk_config,
927 1.7 skrll .jhc_rst = &jh7110_stgrst_config,
928 1.7 skrll };
929 1.7 skrll
930 1.1 skrll static struct jh7110_crg jh7110_isp_config = {
931 1.1 skrll .jhc_name = "Image-Signal-Process",
932 1.1 skrll .jhc_clk = &jh7110_ispclk_config,
933 1.5 skrll .jhc_rst = &jh7110_isprst_config,
934 1.1 skrll };
935 1.1 skrll
936 1.1 skrll static struct jh7110_crg jh7110_vout_config = {
937 1.1 skrll .jhc_name = "Video Output",
938 1.1 skrll .jhc_clk = &jh7110_voutclk_config,
939 1.5 skrll .jhc_rst = &jh7110_voutrst_config,
940 1.1 skrll };
941 1.1 skrll
942 1.1 skrll
943 1.1 skrll static const struct device_compatible_entry compat_data[] = {
944 1.1 skrll { .compat = "starfive,jh7110-syscrg", .data = &jh7110_sys_config },
945 1.1 skrll { .compat = "starfive,jh7110-aoncrg", .data = &jh7110_aon_config },
946 1.7 skrll { .compat = "starfive,jh7110-stgcrg", .data = &jh7110_stg_config },
947 1.1 skrll { .compat = "starfive,jh7110-ispcrg", .data = &jh7110_isp_config },
948 1.1 skrll { .compat = "starfive,jh7110-voutcrg", .data = &jh7110_vout_config },
949 1.1 skrll DEVICE_COMPAT_EOL
950 1.1 skrll };
951 1.1 skrll
952 1.5 skrll #define CLK_LOCK(sc) \
953 1.5 skrll mutex_enter(&sc->sc_lock);
954 1.5 skrll #define CLK_UNLOCK(sc) \
955 1.5 skrll mutex_exit(&sc->sc_lock);
956 1.5 skrll
957 1.3 skrll #define RD4(sc, reg) \
958 1.1 skrll bus_space_read_4((sc)->sc_bst, (sc)->sc_bsh, (reg))
959 1.3 skrll #define WR4(sc, reg, val) \
960 1.1 skrll bus_space_write_4((sc)->sc_bst, (sc)->sc_bsh, (reg), (val))
961 1.1 skrll
962 1.5 skrll #define JH7110_RESET_RETRIES 1000
963 1.5 skrll
964 1.5 skrll static void *
965 1.5 skrll jh7110_clkc_reset_acquire(device_t dev, const void *data, size_t len)
966 1.5 skrll {
967 1.5 skrll struct jh71x0_clkc_softc * const sc = device_private(dev);
968 1.5 skrll
969 1.5 skrll if (len != sizeof(uint32_t))
970 1.5 skrll return NULL;
971 1.5 skrll
972 1.5 skrll const uint32_t reset_id = be32dec(data);
973 1.5 skrll if (reset_id >= sc->sc_nrsts)
974 1.5 skrll return NULL;
975 1.5 skrll
976 1.5 skrll uint32_t *reset = kmem_alloc(sizeof(uint32_t), KM_SLEEP);
977 1.5 skrll *reset = reset_id;
978 1.5 skrll
979 1.5 skrll return reset;
980 1.5 skrll }
981 1.5 skrll
982 1.5 skrll static void
983 1.5 skrll jh7110_clkc_reset_release(device_t dev, void *priv)
984 1.5 skrll {
985 1.5 skrll
986 1.5 skrll kmem_free(priv, sizeof(uint32_t));
987 1.5 skrll }
988 1.5 skrll
989 1.5 skrll static int
990 1.5 skrll jh7110_clkc_reset_set(struct jh71x0_clkc_softc *sc, unsigned reset_id,
991 1.5 skrll bool assert)
992 1.5 skrll {
993 1.5 skrll const uint32_t off = (reset_id / 32) * sizeof(uint32_t);
994 1.5 skrll const uint32_t bit = reset_id % 32;
995 1.5 skrll const bus_size_t assert_reg = sc->sc_reset_assert + off;
996 1.5 skrll const bus_size_t status_reg = sc->sc_reset_status + off;
997 1.5 skrll
998 1.5 skrll CLK_LOCK(sc);
999 1.5 skrll
1000 1.5 skrll const uint32_t val = RD4(sc, assert_reg);
1001 1.5 skrll if (assert)
1002 1.5 skrll WR4(sc, assert_reg, val | __BIT(bit));
1003 1.5 skrll else
1004 1.5 skrll WR4(sc, assert_reg, val & ~__BIT(bit));
1005 1.5 skrll
1006 1.5 skrll unsigned i;
1007 1.5 skrll uint32_t status;
1008 1.5 skrll for (i = 0; i < JH7110_RESET_RETRIES; i++) {
1009 1.5 skrll status = RD4(sc, status_reg);
1010 1.5 skrll bool asserted = (status & __BIT(bit)) == 0;
1011 1.5 skrll if (asserted == assert)
1012 1.5 skrll break;
1013 1.5 skrll }
1014 1.5 skrll CLK_UNLOCK(sc);
1015 1.5 skrll
1016 1.5 skrll if (i >= JH7110_RESET_RETRIES) {
1017 1.5 skrll printf("%s: reset %3d status %#010x / %2d didn't %sassert\n",
1018 1.5 skrll __func__, reset_id, status, bit, assert ? "" : "de");
1019 1.5 skrll return ETIMEDOUT;
1020 1.5 skrll }
1021 1.5 skrll
1022 1.5 skrll return 0;
1023 1.5 skrll }
1024 1.5 skrll
1025 1.5 skrll static int
1026 1.5 skrll jh7110_clkc_reset_assert(device_t dev, void *priv)
1027 1.5 skrll {
1028 1.5 skrll struct jh71x0_clkc_softc * const sc = device_private(dev);
1029 1.5 skrll const uint32_t *reset = priv;
1030 1.5 skrll const uint32_t reset_id = *reset;
1031 1.5 skrll
1032 1.5 skrll return jh7110_clkc_reset_set(sc, reset_id, true);
1033 1.5 skrll }
1034 1.5 skrll
1035 1.5 skrll static int
1036 1.5 skrll jh7110_clkc_reset_deassert(device_t dev, void *priv)
1037 1.5 skrll {
1038 1.5 skrll struct jh71x0_clkc_softc * const sc = device_private(dev);
1039 1.5 skrll const uint32_t *reset = priv;
1040 1.5 skrll const uint32_t reset_id = *reset;
1041 1.5 skrll
1042 1.5 skrll return jh7110_clkc_reset_set(sc, reset_id, false);
1043 1.5 skrll }
1044 1.5 skrll
1045 1.5 skrll
1046 1.5 skrll static const struct fdtbus_reset_controller_func jh7110_clkc_fdtreset_funcs = {
1047 1.5 skrll .acquire = jh7110_clkc_reset_acquire,
1048 1.5 skrll .release = jh7110_clkc_reset_release,
1049 1.5 skrll .reset_assert = jh7110_clkc_reset_assert,
1050 1.5 skrll .reset_deassert = jh7110_clkc_reset_deassert,
1051 1.5 skrll };
1052 1.5 skrll
1053 1.5 skrll
1054 1.1 skrll static struct clk *
1055 1.1 skrll jh7110_clkc_clock_decode(device_t dev, int phandle, const void *data,
1056 1.1 skrll size_t len)
1057 1.1 skrll {
1058 1.1 skrll struct jh71x0_clkc_softc * const sc = device_private(dev);
1059 1.1 skrll
1060 1.4 skrll if (len != sizeof(uint32_t))
1061 1.1 skrll return NULL;
1062 1.1 skrll
1063 1.1 skrll u_int id = be32dec(data);
1064 1.1 skrll if (id >= sc->sc_nclks) {
1065 1.1 skrll return NULL;
1066 1.1 skrll }
1067 1.1 skrll if (sc->sc_clk[id].jcc_type == JH71X0CLK_UNKNOWN) {
1068 1.1 skrll printf("Unknown clock %d\n", id);
1069 1.1 skrll return NULL;
1070 1.1 skrll }
1071 1.1 skrll return &sc->sc_clk[id].jcc_clk;
1072 1.1 skrll }
1073 1.1 skrll
1074 1.1 skrll static const struct fdtbus_clock_controller_func jh7110_clkc_fdtclock_funcs = {
1075 1.1 skrll .decode = jh7110_clkc_clock_decode
1076 1.1 skrll };
1077 1.1 skrll
1078 1.1 skrll static int
1079 1.1 skrll jh7110_clkc_match(device_t parent, cfdata_t cf, void *aux)
1080 1.1 skrll {
1081 1.1 skrll struct fdt_attach_args * const faa = aux;
1082 1.1 skrll
1083 1.1 skrll return of_compatible_match(faa->faa_phandle, compat_data);
1084 1.1 skrll }
1085 1.1 skrll
1086 1.1 skrll static void
1087 1.1 skrll jh7110_clkc_attach(device_t parent, device_t self, void *aux)
1088 1.1 skrll {
1089 1.1 skrll struct jh71x0_clkc_softc * const sc = device_private(self);
1090 1.1 skrll struct fdt_attach_args * const faa = aux;
1091 1.1 skrll const int phandle = faa->faa_phandle;
1092 1.1 skrll bus_addr_t addr;
1093 1.1 skrll bus_size_t size;
1094 1.1 skrll
1095 1.1 skrll if (fdtbus_get_reg(phandle, 0, &addr, &size) != 0) {
1096 1.1 skrll aprint_error(": couldn't get registers\n");
1097 1.1 skrll return;
1098 1.1 skrll }
1099 1.1 skrll
1100 1.1 skrll sc->sc_dev = self;
1101 1.1 skrll sc->sc_phandle = phandle;
1102 1.1 skrll sc->sc_bst = faa->faa_bst;
1103 1.1 skrll if (bus_space_map(sc->sc_bst, addr, size, 0, &sc->sc_bsh) != 0) {
1104 1.1 skrll aprint_error(": couldn't map registers\n");
1105 1.1 skrll return;
1106 1.1 skrll }
1107 1.1 skrll
1108 1.1 skrll sc->sc_clkdom.name = device_xname(self);
1109 1.1 skrll sc->sc_clkdom.funcs = &jh71x0_clkc_funcs;
1110 1.1 skrll sc->sc_clkdom.priv = sc;
1111 1.1 skrll
1112 1.1 skrll const struct jh7110_crg *jhc =
1113 1.1 skrll of_compatible_lookup(phandle, compat_data)->data;
1114 1.1 skrll KASSERT(jhc != NULL);
1115 1.1 skrll
1116 1.1 skrll struct jh7110_clock_config * const jhcc = jhc->jhc_clk;
1117 1.5 skrll struct jh7110_reset_config * const jhcr = jhc->jhc_rst;
1118 1.1 skrll sc->sc_clk = jhcc->jhcc_clocks;
1119 1.1 skrll sc->sc_nclks = jhcc->jhcc_nclks;
1120 1.1 skrll
1121 1.5 skrll mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_NONE);
1122 1.5 skrll sc->sc_nrsts = jhcr->jhcr_nresets;
1123 1.5 skrll sc->sc_reset_assert = jhcr->jhcr_assert;
1124 1.5 skrll sc->sc_reset_status = jhcr->jhcr_status;
1125 1.5 skrll
1126 1.1 skrll for (size_t id = 0; id < sc->sc_nclks; id++) {
1127 1.1 skrll if (sc->sc_clk[id].jcc_type == JH71X0CLK_UNKNOWN)
1128 1.1 skrll continue;
1129 1.1 skrll
1130 1.1 skrll sc->sc_clk[id].jcc_clk.domain = &sc->sc_clkdom;
1131 1.1 skrll // Names already populated.
1132 1.1 skrll clk_attach(&sc->sc_clk[id].jcc_clk);
1133 1.1 skrll }
1134 1.1 skrll
1135 1.1 skrll aprint_naive("\n");
1136 1.1 skrll aprint_normal(": JH7110 %s Clock and Reset Generator\n",
1137 1.1 skrll jhc->jhc_name);
1138 1.1 skrll
1139 1.4 skrll if (jhc->jhc_debug) {
1140 1.4 skrll for (size_t id = 0; id < sc->sc_nclks; id++) {
1141 1.4 skrll if (sc->sc_clk[id].jcc_type == JH71X0CLK_UNKNOWN)
1142 1.4 skrll continue;
1143 1.4 skrll
1144 1.4 skrll struct clk * const clk = &sc->sc_clk[id].jcc_clk;
1145 1.4 skrll
1146 1.4 skrll aprint_debug_dev(self, "id %zu [%s]: %u Hz\n", id,
1147 1.4 skrll clk->name ? clk->name : "<none>", clk_get_rate(clk));
1148 1.4 skrll }
1149 1.1 skrll }
1150 1.1 skrll
1151 1.1 skrll fdtbus_register_clock_controller(self, phandle, &jh7110_clkc_fdtclock_funcs);
1152 1.5 skrll fdtbus_register_reset_controller(self, phandle, &jh7110_clkc_fdtreset_funcs);
1153 1.1 skrll }
1154 1.1 skrll
1155 1.1 skrll CFATTACH_DECL_NEW(jh7110_clkc, sizeof(struct jh71x0_clkc_softc),
1156 1.1 skrll jh7110_clkc_match, jh7110_clkc_attach, NULL, NULL);
1157