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