1 1.8 skrll /* $NetBSD: jh7110_clkc.c,v 1.8 2025/01/17 08:04:16 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.8 skrll __KERNEL_RCSID(0, "$NetBSD: jh7110_clkc.c,v 1.8 2025/01/17 08:04:16 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.8 skrll #if 0 744 1.1 skrll static const char *vin_p_axi_wr_parents[] = { 745 1.1 skrll "mipi_rx0_pxl", "dvp_inv", 746 1.1 skrll }; 747 1.1 skrll 748 1.1 skrll static const char *ispv2_top_wrapper_c_parents[] = { 749 1.1 skrll "mipi_rx0_pxl", "dvp_inv", 750 1.1 skrll }; 751 1.1 skrll 752 1.1 skrll static struct jh71x0_clkc_clk jh7110_ispclk_clocks[] = { 753 1.1 skrll /* syscon */ 754 1.1 skrll JH71X0CLKC_DIV(JH7110_ISPCLK_DOM4_APB_FUNC, "dom4_apb_func", 15, "isp_top_axi"), 755 1.1 skrll JH71X0CLKC_DIV(JH7110_ISPCLK_MIPI_RX0_PXL, "mipi_rx0_pxl", 8, "isp_top_core"), 756 1.1 skrll JH71X0CLKC_INV(JH7110_ISPCLK_DVP_INV, "dvp_inv", "dvp_clk"), 757 1.1 skrll /* vin */ 758 1.1 skrll JH71X0CLKC_DIV(JH7110_ISPCLK_M31DPHY_CFG_IN, "m31dphy_cfg_in", 16, "isp_top_core"), 759 1.1 skrll JH71X0CLKC_DIV(JH7110_ISPCLK_M31DPHY_REF_IN, "m31dphy_ref_in", 16, "isp_top_core"), 760 1.1 skrll JH71X0CLKC_DIV(JH7110_ISPCLK_M31DPHY_TX_ESC_LAN0, "m31dphy_tx_esc_lan0", 60, "isp_top_core"), 761 1.1 skrll JH71X0CLKC_GATE(JH7110_ISPCLK_VIN_APB, "vin_apb", "dom4_apb_func"), 762 1.1 skrll JH71X0CLKC_DIV(JH7110_ISPCLK_VIN_SYS, "vin_sys", 8, "isp_top_core"), 763 1.1 skrll JH71X0CLKC_GATE(JH7110_ISPCLK_VIN_PIXEL_IF0, "vin_pixel_if0", "mipi_rx0_pxl"), 764 1.1 skrll JH71X0CLKC_GATE(JH7110_ISPCLK_VIN_PIXEL_IF1, "vin_pixel_if1", "mipi_rx0_pxl"), 765 1.1 skrll JH71X0CLKC_GATE(JH7110_ISPCLK_VIN_PIXEL_IF2, "vin_pixel_if2", "mipi_rx0_pxl"), 766 1.1 skrll JH71X0CLKC_GATE(JH7110_ISPCLK_VIN_PIXEL_IF3, "vin_pixel_if3", "mipi_rx0_pxl"), 767 1.1 skrll JH71X0CLKC_MUX(JH7110_ISPCLK_VIN_P_AXI_WR, "vin_p_axi_wr", vin_p_axi_wr_parents), 768 1.1 skrll /* ispv2_top_wrapper */ 769 1.1 skrll JH71X0CLKC_MUXGATE(JH7110_ISPCLK_ISPV2_TOP_WRAPPER_C, "ispv2_top_wrapper_c", ispv2_top_wrapper_c_parents), 770 1.1 skrll }; 771 1.8 skrll #endif 772 1.1 skrll 773 1.1 skrll static const char *dc8200_pix0_parents[] = { 774 1.1 skrll "dc8200_pix", "hdmitx0_pixelclk", 775 1.1 skrll }; 776 1.1 skrll 777 1.1 skrll static const char *dc8200_pix1_parents[] = { 778 1.1 skrll "dc8200_pix", "hdmitx0_pixelclk", 779 1.1 skrll }; 780 1.1 skrll 781 1.1 skrll static const char *dsiTx_dpi_parents[] = { 782 1.1 skrll "dc8200_pix", "hdmitx0_pixelclk", 783 1.1 skrll }; 784 1.1 skrll 785 1.1 skrll static const char *dom_vout_top_lcd_parents[] = { 786 1.1 skrll "dc8200_pix0", "dc8200_pix1", 787 1.1 skrll }; 788 1.1 skrll 789 1.1 skrll static struct jh71x0_clkc_clk jh7110_voutclk_clocks[] = { 790 1.1 skrll /* divider */ 791 1.1 skrll JH71X0CLKC_DIV(JH7110_VOUTCLK_APB, "apb", 8, "vout_top_ahb"), 792 1.1 skrll JH71X0CLKC_DIV(JH7110_VOUTCLK_DC8200_PIX, "dc8200_pix", 63, "vout_src"), 793 1.1 skrll JH71X0CLKC_DIV(JH7110_VOUTCLK_DSI_SYS, "dsi_sys", 31, "vout_src"), 794 1.1 skrll JH71X0CLKC_DIV(JH7110_VOUTCLK_TX_ESC, "tx_esc", 31, "vout_top_ahb"), 795 1.1 skrll /* dc8200 */ 796 1.1 skrll JH71X0CLKC_GATE(JH7110_VOUTCLK_DC8200_AXI, "dc8200_axi", "vout_top_axi"), 797 1.1 skrll JH71X0CLKC_GATE(JH7110_VOUTCLK_DC8200_CORE, "dc8200_core", "vout_top_axi"), 798 1.1 skrll JH71X0CLKC_GATE(JH7110_VOUTCLK_DC8200_AHB, "dc8200_ahb", "vout_top_ahb"), 799 1.1 skrll JH71X0CLKC_MUXGATE(JH7110_VOUTCLK_DC8200_PIX0, "dc8200_pix0", dc8200_pix0_parents), 800 1.1 skrll JH71X0CLKC_MUXGATE(JH7110_VOUTCLK_DC8200_PIX1, "dc8200_pix1", dc8200_pix1_parents), 801 1.1 skrll /* LCD */ 802 1.1 skrll JH71X0CLKC_MUXGATE(JH7110_VOUTCLK_DOM_VOUT_TOP_LCD, "dom_vout_top_lcd", dom_vout_top_lcd_parents), 803 1.1 skrll /* dsiTx */ 804 1.1 skrll JH71X0CLKC_GATE(JH7110_VOUTCLK_DSITX_APB, "dsiTx_apb", "dsi_sys"), 805 1.1 skrll JH71X0CLKC_GATE(JH7110_VOUTCLK_DSITX_SYS, "dsiTx_sys", "dsi_sys"), 806 1.1 skrll JH71X0CLKC_MUXGATE(JH7110_VOUTCLK_DSITX_DPI, "dsiTx_dpi", dsiTx_dpi_parents), 807 1.1 skrll JH71X0CLKC_GATE(JH7110_VOUTCLK_DSITX_TXESC, "dsiTx_txesc", "tx_esc"), 808 1.1 skrll /* mipitx DPHY */ 809 1.1 skrll JH71X0CLKC_GATE(JH7110_VOUTCLK_MIPITX_DPHY_TXESC, "mipitx_dphy_txesc", "tx_esc"), 810 1.1 skrll /* hdmi */ 811 1.1 skrll JH71X0CLKC_GATE(JH7110_VOUTCLK_HDMI_TX_MCLK, "hdmi_tx_mclk", "vout_top_hdmitx0_mclk"), 812 1.1 skrll JH71X0CLKC_GATE(JH7110_VOUTCLK_HDMI_TX_BCLK, "hdmi_tx_bclk", "i2stx0_bclk"), 813 1.1 skrll JH71X0CLKC_GATE(JH7110_VOUTCLK_HDMI_TX_SYS, "hdmi_tx_sys", "apb"), 814 1.1 skrll }; 815 1.1 skrll 816 1.1 skrll struct jh7110_clock_config { 817 1.1 skrll struct jh71x0_clkc_clk *jhcc_clocks; 818 1.1 skrll size_t jhcc_nclks; 819 1.1 skrll }; 820 1.1 skrll 821 1.7 skrll static struct jh7110_clock_config jh7110_sysclk_config = { 822 1.7 skrll .jhcc_clocks = jh7110_sysclk_clocks, 823 1.7 skrll .jhcc_nclks = __arraycount(jh7110_sysclk_clocks), 824 1.7 skrll }; 825 1.7 skrll 826 1.1 skrll static struct jh7110_clock_config jh7110_aonclk_config = { 827 1.1 skrll .jhcc_clocks = jh7110_aonclk_clocks, 828 1.1 skrll .jhcc_nclks = __arraycount(jh7110_aonclk_clocks), 829 1.1 skrll }; 830 1.1 skrll 831 1.1 skrll static struct jh7110_clock_config jh7110_stgclk_config = { 832 1.1 skrll .jhcc_clocks = jh7110_stgclk_clocks, 833 1.1 skrll .jhcc_nclks = __arraycount(jh7110_stgclk_clocks), 834 1.1 skrll }; 835 1.1 skrll 836 1.8 skrll #if 0 837 1.7 skrll static struct jh7110_clock_config jh7110_ispclk_config = { 838 1.7 skrll .jhcc_clocks = jh7110_ispclk_clocks, 839 1.7 skrll .jhcc_nclks = __arraycount(jh7110_ispclk_clocks), 840 1.1 skrll }; 841 1.8 skrll #endif 842 1.1 skrll 843 1.1 skrll static struct jh7110_clock_config jh7110_voutclk_config = { 844 1.1 skrll .jhcc_clocks = jh7110_voutclk_clocks, 845 1.1 skrll .jhcc_nclks = __arraycount(jh7110_voutclk_clocks), 846 1.1 skrll }; 847 1.1 skrll 848 1.1 skrll 849 1.5 skrll #define JH7110_SYSRST_ASSERT 0x2f8 850 1.5 skrll #define JH7110_SYSRST_STATUS 0x308 851 1.5 skrll #define JH7110_SYSRST_NRESETS 126 852 1.5 skrll 853 1.5 skrll #define JH7110_AONRST_ASSERT 0x38 854 1.5 skrll #define JH7110_AONRST_STATUS 0x3c 855 1.5 skrll #define JH7110_AONRST_NRESETS 8 856 1.5 skrll 857 1.5 skrll #define JH7110_STGRST_ASSERT 0x74 858 1.5 skrll #define JH7110_STGRST_STATUS 0x78 859 1.5 skrll #define JH7110_STGRST_NRESETS 23 860 1.5 skrll 861 1.5 skrll #define JH7110_ISPRST_ASSERT 0x38 862 1.5 skrll #define JH7110_ISPRST_STATUS 0x3c 863 1.5 skrll #define JH7110_ISPRST_NRESETS 12 864 1.5 skrll 865 1.5 skrll #define JH7110_VOUTRST_ASSERT 0x48 866 1.5 skrll #define JH7110_VOUTRST_STATUS 0x4c 867 1.5 skrll #define JH7110_VOUTRST_NRESETS 12 868 1.5 skrll 869 1.5 skrll struct jh7110_reset_config { 870 1.5 skrll size_t jhcr_nresets; 871 1.5 skrll bus_size_t jhcr_assert; 872 1.5 skrll bus_size_t jhcr_status; 873 1.5 skrll }; 874 1.5 skrll 875 1.5 skrll static struct jh7110_reset_config jh7110_sysrst_config = { 876 1.5 skrll .jhcr_nresets = JH7110_SYSRST_NRESETS, 877 1.5 skrll .jhcr_assert = JH7110_SYSRST_ASSERT, 878 1.5 skrll .jhcr_status = JH7110_SYSRST_STATUS, 879 1.5 skrll }; 880 1.5 skrll 881 1.5 skrll static struct jh7110_reset_config jh7110_aonrst_config = { 882 1.5 skrll .jhcr_nresets = JH7110_AONRST_NRESETS, 883 1.5 skrll .jhcr_assert = JH7110_AONRST_ASSERT, 884 1.5 skrll .jhcr_status = JH7110_AONRST_STATUS, 885 1.5 skrll }; 886 1.5 skrll 887 1.5 skrll static struct jh7110_reset_config jh7110_stgrst_config = { 888 1.5 skrll .jhcr_nresets = JH7110_STGRST_NRESETS, 889 1.5 skrll .jhcr_assert = JH7110_STGRST_ASSERT, 890 1.5 skrll .jhcr_status = JH7110_STGRST_STATUS, 891 1.5 skrll }; 892 1.5 skrll 893 1.8 skrll #if 0 894 1.5 skrll static struct jh7110_reset_config jh7110_isprst_config = { 895 1.5 skrll .jhcr_nresets = JH7110_ISPRST_NRESETS, 896 1.5 skrll .jhcr_assert = JH7110_ISPRST_ASSERT, 897 1.5 skrll .jhcr_status = JH7110_ISPRST_STATUS, 898 1.5 skrll }; 899 1.8 skrll #endif 900 1.5 skrll 901 1.5 skrll static struct jh7110_reset_config jh7110_voutrst_config = { 902 1.5 skrll .jhcr_nresets = JH7110_VOUTRST_NRESETS, 903 1.5 skrll .jhcr_assert = JH7110_VOUTRST_ASSERT, 904 1.5 skrll .jhcr_status = JH7110_VOUTRST_STATUS, 905 1.5 skrll }; 906 1.5 skrll 907 1.1 skrll struct jh7110_crg { 908 1.1 skrll const char *jhc_name; 909 1.1 skrll struct jh7110_clock_config *jhc_clk; 910 1.5 skrll struct jh7110_reset_config *jhc_rst; 911 1.4 skrll bool jhc_debug; 912 1.1 skrll }; 913 1.1 skrll 914 1.1 skrll 915 1.1 skrll static struct jh7110_crg jh7110_sys_config = { 916 1.1 skrll .jhc_name = "System", 917 1.1 skrll .jhc_clk = &jh7110_sysclk_config, 918 1.5 skrll .jhc_rst = &jh7110_sysrst_config, 919 1.4 skrll .jhc_debug = true, 920 1.1 skrll }; 921 1.1 skrll 922 1.1 skrll 923 1.1 skrll static struct jh7110_crg jh7110_aon_config = { 924 1.1 skrll .jhc_name = "Always-On", 925 1.1 skrll .jhc_clk = &jh7110_aonclk_config, 926 1.5 skrll .jhc_rst = &jh7110_aonrst_config, 927 1.4 skrll .jhc_debug = true, 928 1.1 skrll }; 929 1.1 skrll 930 1.7 skrll static struct jh7110_crg jh7110_stg_config = { 931 1.7 skrll .jhc_name = "System-Top-Group", 932 1.7 skrll .jhc_clk = &jh7110_stgclk_config, 933 1.7 skrll .jhc_rst = &jh7110_stgrst_config, 934 1.8 skrll .jhc_debug = true, 935 1.7 skrll }; 936 1.7 skrll 937 1.8 skrll #if 0 938 1.1 skrll static struct jh7110_crg jh7110_isp_config = { 939 1.1 skrll .jhc_name = "Image-Signal-Process", 940 1.1 skrll .jhc_clk = &jh7110_ispclk_config, 941 1.5 skrll .jhc_rst = &jh7110_isprst_config, 942 1.1 skrll }; 943 1.8 skrll #endif 944 1.1 skrll 945 1.1 skrll static struct jh7110_crg jh7110_vout_config = { 946 1.1 skrll .jhc_name = "Video Output", 947 1.1 skrll .jhc_clk = &jh7110_voutclk_config, 948 1.5 skrll .jhc_rst = &jh7110_voutrst_config, 949 1.8 skrll .jhc_debug = true, 950 1.1 skrll }; 951 1.1 skrll 952 1.1 skrll 953 1.1 skrll static const struct device_compatible_entry compat_data[] = { 954 1.1 skrll { .compat = "starfive,jh7110-syscrg", .data = &jh7110_sys_config }, 955 1.1 skrll { .compat = "starfive,jh7110-aoncrg", .data = &jh7110_aon_config }, 956 1.7 skrll { .compat = "starfive,jh7110-stgcrg", .data = &jh7110_stg_config }, 957 1.8 skrll // { .compat = "starfive,jh7110-ispcrg", .data = &jh7110_isp_config }, 958 1.1 skrll { .compat = "starfive,jh7110-voutcrg", .data = &jh7110_vout_config }, 959 1.1 skrll DEVICE_COMPAT_EOL 960 1.1 skrll }; 961 1.1 skrll 962 1.5 skrll #define CLK_LOCK(sc) \ 963 1.5 skrll mutex_enter(&sc->sc_lock); 964 1.5 skrll #define CLK_UNLOCK(sc) \ 965 1.5 skrll mutex_exit(&sc->sc_lock); 966 1.5 skrll 967 1.3 skrll #define RD4(sc, reg) \ 968 1.1 skrll bus_space_read_4((sc)->sc_bst, (sc)->sc_bsh, (reg)) 969 1.3 skrll #define WR4(sc, reg, val) \ 970 1.1 skrll bus_space_write_4((sc)->sc_bst, (sc)->sc_bsh, (reg), (val)) 971 1.1 skrll 972 1.5 skrll #define JH7110_RESET_RETRIES 1000 973 1.5 skrll 974 1.5 skrll static void * 975 1.5 skrll jh7110_clkc_reset_acquire(device_t dev, const void *data, size_t len) 976 1.5 skrll { 977 1.5 skrll struct jh71x0_clkc_softc * const sc = device_private(dev); 978 1.5 skrll 979 1.5 skrll if (len != sizeof(uint32_t)) 980 1.5 skrll return NULL; 981 1.5 skrll 982 1.5 skrll const uint32_t reset_id = be32dec(data); 983 1.5 skrll if (reset_id >= sc->sc_nrsts) 984 1.5 skrll return NULL; 985 1.5 skrll 986 1.5 skrll uint32_t *reset = kmem_alloc(sizeof(uint32_t), KM_SLEEP); 987 1.5 skrll *reset = reset_id; 988 1.5 skrll 989 1.5 skrll return reset; 990 1.5 skrll } 991 1.5 skrll 992 1.5 skrll static void 993 1.5 skrll jh7110_clkc_reset_release(device_t dev, void *priv) 994 1.5 skrll { 995 1.5 skrll 996 1.5 skrll kmem_free(priv, sizeof(uint32_t)); 997 1.5 skrll } 998 1.5 skrll 999 1.5 skrll static int 1000 1.5 skrll jh7110_clkc_reset_set(struct jh71x0_clkc_softc *sc, unsigned reset_id, 1001 1.5 skrll bool assert) 1002 1.5 skrll { 1003 1.5 skrll const uint32_t off = (reset_id / 32) * sizeof(uint32_t); 1004 1.5 skrll const uint32_t bit = reset_id % 32; 1005 1.5 skrll const bus_size_t assert_reg = sc->sc_reset_assert + off; 1006 1.5 skrll const bus_size_t status_reg = sc->sc_reset_status + off; 1007 1.5 skrll 1008 1.5 skrll CLK_LOCK(sc); 1009 1.5 skrll 1010 1.5 skrll const uint32_t val = RD4(sc, assert_reg); 1011 1.5 skrll if (assert) 1012 1.5 skrll WR4(sc, assert_reg, val | __BIT(bit)); 1013 1.5 skrll else 1014 1.5 skrll WR4(sc, assert_reg, val & ~__BIT(bit)); 1015 1.5 skrll 1016 1.5 skrll unsigned i; 1017 1.5 skrll uint32_t status; 1018 1.5 skrll for (i = 0; i < JH7110_RESET_RETRIES; i++) { 1019 1.5 skrll status = RD4(sc, status_reg); 1020 1.5 skrll bool asserted = (status & __BIT(bit)) == 0; 1021 1.5 skrll if (asserted == assert) 1022 1.5 skrll break; 1023 1.5 skrll } 1024 1.5 skrll CLK_UNLOCK(sc); 1025 1.5 skrll 1026 1.5 skrll if (i >= JH7110_RESET_RETRIES) { 1027 1.5 skrll printf("%s: reset %3d status %#010x / %2d didn't %sassert\n", 1028 1.5 skrll __func__, reset_id, status, bit, assert ? "" : "de"); 1029 1.5 skrll return ETIMEDOUT; 1030 1.5 skrll } 1031 1.5 skrll 1032 1.5 skrll return 0; 1033 1.5 skrll } 1034 1.5 skrll 1035 1.5 skrll static int 1036 1.5 skrll jh7110_clkc_reset_assert(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, true); 1043 1.5 skrll } 1044 1.5 skrll 1045 1.5 skrll static int 1046 1.5 skrll jh7110_clkc_reset_deassert(device_t dev, void *priv) 1047 1.5 skrll { 1048 1.5 skrll struct jh71x0_clkc_softc * const sc = device_private(dev); 1049 1.5 skrll const uint32_t *reset = priv; 1050 1.5 skrll const uint32_t reset_id = *reset; 1051 1.5 skrll 1052 1.5 skrll return jh7110_clkc_reset_set(sc, reset_id, false); 1053 1.5 skrll } 1054 1.5 skrll 1055 1.5 skrll 1056 1.5 skrll static const struct fdtbus_reset_controller_func jh7110_clkc_fdtreset_funcs = { 1057 1.5 skrll .acquire = jh7110_clkc_reset_acquire, 1058 1.5 skrll .release = jh7110_clkc_reset_release, 1059 1.5 skrll .reset_assert = jh7110_clkc_reset_assert, 1060 1.5 skrll .reset_deassert = jh7110_clkc_reset_deassert, 1061 1.5 skrll }; 1062 1.5 skrll 1063 1.5 skrll 1064 1.1 skrll static struct clk * 1065 1.1 skrll jh7110_clkc_clock_decode(device_t dev, int phandle, const void *data, 1066 1.1 skrll size_t len) 1067 1.1 skrll { 1068 1.1 skrll struct jh71x0_clkc_softc * const sc = device_private(dev); 1069 1.1 skrll 1070 1.4 skrll if (len != sizeof(uint32_t)) 1071 1.1 skrll return NULL; 1072 1.1 skrll 1073 1.1 skrll u_int id = be32dec(data); 1074 1.1 skrll if (id >= sc->sc_nclks) { 1075 1.1 skrll return NULL; 1076 1.1 skrll } 1077 1.1 skrll if (sc->sc_clk[id].jcc_type == JH71X0CLK_UNKNOWN) { 1078 1.1 skrll printf("Unknown clock %d\n", id); 1079 1.1 skrll return NULL; 1080 1.1 skrll } 1081 1.1 skrll return &sc->sc_clk[id].jcc_clk; 1082 1.1 skrll } 1083 1.1 skrll 1084 1.1 skrll static const struct fdtbus_clock_controller_func jh7110_clkc_fdtclock_funcs = { 1085 1.1 skrll .decode = jh7110_clkc_clock_decode 1086 1.1 skrll }; 1087 1.1 skrll 1088 1.1 skrll static int 1089 1.1 skrll jh7110_clkc_match(device_t parent, cfdata_t cf, void *aux) 1090 1.1 skrll { 1091 1.1 skrll struct fdt_attach_args * const faa = aux; 1092 1.1 skrll 1093 1.1 skrll return of_compatible_match(faa->faa_phandle, compat_data); 1094 1.1 skrll } 1095 1.1 skrll 1096 1.1 skrll static void 1097 1.1 skrll jh7110_clkc_attach(device_t parent, device_t self, void *aux) 1098 1.1 skrll { 1099 1.1 skrll struct jh71x0_clkc_softc * const sc = device_private(self); 1100 1.1 skrll struct fdt_attach_args * const faa = aux; 1101 1.1 skrll const int phandle = faa->faa_phandle; 1102 1.1 skrll bus_addr_t addr; 1103 1.1 skrll bus_size_t size; 1104 1.1 skrll 1105 1.1 skrll if (fdtbus_get_reg(phandle, 0, &addr, &size) != 0) { 1106 1.1 skrll aprint_error(": couldn't get registers\n"); 1107 1.1 skrll return; 1108 1.1 skrll } 1109 1.1 skrll 1110 1.1 skrll sc->sc_dev = self; 1111 1.1 skrll sc->sc_phandle = phandle; 1112 1.1 skrll sc->sc_bst = faa->faa_bst; 1113 1.1 skrll if (bus_space_map(sc->sc_bst, addr, size, 0, &sc->sc_bsh) != 0) { 1114 1.1 skrll aprint_error(": couldn't map registers\n"); 1115 1.1 skrll return; 1116 1.1 skrll } 1117 1.1 skrll 1118 1.1 skrll sc->sc_clkdom.name = device_xname(self); 1119 1.1 skrll sc->sc_clkdom.funcs = &jh71x0_clkc_funcs; 1120 1.1 skrll sc->sc_clkdom.priv = sc; 1121 1.1 skrll 1122 1.1 skrll const struct jh7110_crg *jhc = 1123 1.1 skrll of_compatible_lookup(phandle, compat_data)->data; 1124 1.1 skrll KASSERT(jhc != NULL); 1125 1.1 skrll 1126 1.1 skrll struct jh7110_clock_config * const jhcc = jhc->jhc_clk; 1127 1.5 skrll struct jh7110_reset_config * const jhcr = jhc->jhc_rst; 1128 1.1 skrll sc->sc_clk = jhcc->jhcc_clocks; 1129 1.1 skrll sc->sc_nclks = jhcc->jhcc_nclks; 1130 1.1 skrll 1131 1.5 skrll mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_NONE); 1132 1.5 skrll sc->sc_nrsts = jhcr->jhcr_nresets; 1133 1.5 skrll sc->sc_reset_assert = jhcr->jhcr_assert; 1134 1.5 skrll sc->sc_reset_status = jhcr->jhcr_status; 1135 1.5 skrll 1136 1.1 skrll for (size_t id = 0; id < sc->sc_nclks; id++) { 1137 1.1 skrll if (sc->sc_clk[id].jcc_type == JH71X0CLK_UNKNOWN) 1138 1.1 skrll continue; 1139 1.1 skrll 1140 1.1 skrll sc->sc_clk[id].jcc_clk.domain = &sc->sc_clkdom; 1141 1.1 skrll // Names already populated. 1142 1.1 skrll clk_attach(&sc->sc_clk[id].jcc_clk); 1143 1.1 skrll } 1144 1.1 skrll 1145 1.1 skrll aprint_naive("\n"); 1146 1.1 skrll aprint_normal(": JH7110 %s Clock and Reset Generator\n", 1147 1.1 skrll jhc->jhc_name); 1148 1.1 skrll 1149 1.4 skrll if (jhc->jhc_debug) { 1150 1.4 skrll for (size_t id = 0; id < sc->sc_nclks; id++) { 1151 1.4 skrll if (sc->sc_clk[id].jcc_type == JH71X0CLK_UNKNOWN) 1152 1.4 skrll continue; 1153 1.4 skrll 1154 1.4 skrll struct clk * const clk = &sc->sc_clk[id].jcc_clk; 1155 1.4 skrll 1156 1.4 skrll aprint_debug_dev(self, "id %zu [%s]: %u Hz\n", id, 1157 1.4 skrll clk->name ? clk->name : "<none>", clk_get_rate(clk)); 1158 1.4 skrll } 1159 1.1 skrll } 1160 1.1 skrll 1161 1.1 skrll fdtbus_register_clock_controller(self, phandle, &jh7110_clkc_fdtclock_funcs); 1162 1.5 skrll fdtbus_register_reset_controller(self, phandle, &jh7110_clkc_fdtreset_funcs); 1163 1.1 skrll } 1164 1.1 skrll 1165 1.1 skrll CFATTACH_DECL_NEW(jh7110_clkc, sizeof(struct jh71x0_clkc_softc), 1166 1.1 skrll jh7110_clkc_match, jh7110_clkc_attach, NULL, NULL); 1167