devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/3] Add CRU support for rk3576 SoC
@ 2024-08-02 21:35 Detlev Casanova
  2024-08-02 21:35 ` [PATCH v2 1/3] dt-bindings: clock: add rk3576 cru bindings Detlev Casanova
                   ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: Detlev Casanova @ 2024-08-02 21:35 UTC (permalink / raw)
  To: linux-kernel
  Cc: Michael Turquette, Stephen Boyd, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Heiko Stuebner, Philipp Zabel, Elaine Zhang,
	linux-clk, devicetree, linux-arm-kernel, linux-rockchip, kernel,
	Detlev Casanova

Add support for clocks and resets on the rk3576.
Patches from downstream have been squashed and rebased.

The resets have been renumbered without gaps and their actual register/bit
information is set in rst-rk3576.c as it has been done for rk3588.

Changes since v1:
- Remove reset defines that are probably out of the main core
- Separate resets and clocks bindings
- Renumber the resets without gaps

Detlev.

Detlev Casanova (1):
  dt-bindings: clock: add rk3576 cru bindings

Elaine Zhang (2):
  clk: rockchip: Add dt-binding header for rk3576
  clk: rockchip: Add clock controller for the RK3576

 .../bindings/clock/rockchip,rk3576-cru.yaml   |   73 +
 drivers/clk/rockchip/Kconfig                  |    7 +
 drivers/clk/rockchip/Makefile                 |    1 +
 drivers/clk/rockchip/clk-rk3576.c             | 1819 +++++++++++++++++
 drivers/clk/rockchip/clk.h                    |   53 +
 drivers/clk/rockchip/rst-rk3576.c             |  555 +++++
 .../dt-bindings/clock/rockchip,rk3576-cru.h   |  589 ++++++
 .../dt-bindings/reset/rockchip,rk3576-cru.h   |  484 +++++
 8 files changed, 3581 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/clock/rockchip,rk3576-cru.yaml
 create mode 100644 drivers/clk/rockchip/clk-rk3576.c
 create mode 100644 drivers/clk/rockchip/rst-rk3576.c
 create mode 100644 include/dt-bindings/clock/rockchip,rk3576-cru.h
 create mode 100644 include/dt-bindings/reset/rockchip,rk3576-cru.h

-- 
2.46.0


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v2 1/3] dt-bindings: clock: add rk3576 cru bindings
  2024-08-02 21:35 [PATCH v2 0/3] Add CRU support for rk3576 SoC Detlev Casanova
@ 2024-08-02 21:35 ` Detlev Casanova
  2024-08-04  9:52   ` Krzysztof Kozlowski
  2024-08-02 21:35 ` [PATCH v2 2/3] clk: rockchip: Add dt-binding header for rk3576 Detlev Casanova
  2024-08-02 21:35 ` [PATCH v2 3/3] clk: rockchip: Add clock controller for the RK3576 Detlev Casanova
  2 siblings, 1 reply; 13+ messages in thread
From: Detlev Casanova @ 2024-08-02 21:35 UTC (permalink / raw)
  To: linux-kernel
  Cc: Michael Turquette, Stephen Boyd, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Heiko Stuebner, Philipp Zabel, Elaine Zhang,
	linux-clk, devicetree, linux-arm-kernel, linux-rockchip, kernel,
	Detlev Casanova

Document the device tree bindings of the rockchip rk3576 SoC
clock and reset unit.

Signed-off-by: Detlev Casanova <detlev.casanova@collabora.com>
---
 .../bindings/clock/rockchip,rk3576-cru.yaml   | 73 +++++++++++++++++++
 1 file changed, 73 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/clock/rockchip,rk3576-cru.yaml

diff --git a/Documentation/devicetree/bindings/clock/rockchip,rk3576-cru.yaml b/Documentation/devicetree/bindings/clock/rockchip,rk3576-cru.yaml
new file mode 100644
index 0000000000000..929eb6183bf18
--- /dev/null
+++ b/Documentation/devicetree/bindings/clock/rockchip,rk3576-cru.yaml
@@ -0,0 +1,73 @@
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/clock/rockchip,rk3576-cru.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Rockchip rk3576 Family Clock and Reset Control Module
+
+maintainers:
+  - Elaine Zhang <zhangqing@rock-chips.com>
+  - Heiko Stuebner <heiko@sntech.de>
+
+description: |
+  The RK3576 clock controller generates the clock and also implements a reset
+  controller for SoC peripherals. For example it provides SCLK_UART2 and
+  PCLK_UART2, as well as SRST_P_UART2 and SRST_S_UART2 for the second UART
+  module.
+  Each clock is assigned an identifier and client nodes can use this identifier
+  to specify the clock which they consume. All available clock and reset IDs
+  are defined as preprocessor macros in dt-binding headers.
+
+properties:
+  compatible:
+    enum:
+      - rockchip,rk3576-cru
+
+  reg:
+    maxItems: 1
+
+  "#clock-cells":
+    const: 1
+
+  "#reset-cells":
+    const: 1
+
+  clocks:
+    minItems: 2
+    maxItems: 2
+
+  clock-names:
+    items:
+      - const: xin24m
+      - const: xin32k
+
+  assigned-clocks: true
+
+  assigned-clock-rates: true
+
+  assigned-clock-parents: true
+
+  rockchip,grf:
+    $ref: /schemas/types.yaml#/definitions/phandle
+    description: >
+      phandle to the syscon managing the "general register files". It is used
+      for GRF muxes, if missing any muxes present in the GRF will not be
+      available.
+
+required:
+  - compatible
+  - reg
+  - "#clock-cells"
+  - "#reset-cells"
+
+additionalProperties: false
+
+examples:
+  - |
+    cru: clock-controller@27200000 {
+      compatible = "rockchip,rk3576-cru";
+      reg = <0xfd7c0000 0x5c000>;
+      #clock-cells = <1>;
+      #reset-cells = <1>;
+    };
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH v2 2/3] clk: rockchip: Add dt-binding header for rk3576
  2024-08-02 21:35 [PATCH v2 0/3] Add CRU support for rk3576 SoC Detlev Casanova
  2024-08-02 21:35 ` [PATCH v2 1/3] dt-bindings: clock: add rk3576 cru bindings Detlev Casanova
@ 2024-08-02 21:35 ` Detlev Casanova
  2024-08-04  9:53   ` Krzysztof Kozlowski
  2024-08-02 21:35 ` [PATCH v2 3/3] clk: rockchip: Add clock controller for the RK3576 Detlev Casanova
  2 siblings, 1 reply; 13+ messages in thread
From: Detlev Casanova @ 2024-08-02 21:35 UTC (permalink / raw)
  To: linux-kernel
  Cc: Michael Turquette, Stephen Boyd, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Heiko Stuebner, Philipp Zabel, Elaine Zhang,
	linux-clk, devicetree, linux-arm-kernel, linux-rockchip, kernel,
	Sugar Zhang, Detlev Casanova

From: Elaine Zhang <zhangqing@rock-chips.com>

Add the dt-bindings header for the rk3576, that gets shared between
the clock controller and the clock references in the dts.

Signed-off-by: Elaine Zhang <zhangqing@rock-chips.com>
Signed-off-by: Sugar Zhang <sugar.zhang@rock-chips.com>
[rebased, separate clocks and resets]
Signed-off-by: Detlev Casanova <detlev.casanova@collabora.com>
---
 .../dt-bindings/clock/rockchip,rk3576-cru.h   | 589 ++++++++++++++++++
 .../dt-bindings/reset/rockchip,rk3576-cru.h   | 484 ++++++++++++++
 2 files changed, 1073 insertions(+)
 create mode 100644 include/dt-bindings/clock/rockchip,rk3576-cru.h
 create mode 100644 include/dt-bindings/reset/rockchip,rk3576-cru.h

diff --git a/include/dt-bindings/clock/rockchip,rk3576-cru.h b/include/dt-bindings/clock/rockchip,rk3576-cru.h
new file mode 100644
index 0000000000000..14b54543d1a11
--- /dev/null
+++ b/include/dt-bindings/clock/rockchip,rk3576-cru.h
@@ -0,0 +1,589 @@
+/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
+/*
+ * Copyright (c) 2023 Rockchip Electronics Co. Ltd.
+ * Author: Elaine Zhang <zhangqing@rock-chips.com>
+ */
+
+#ifndef _DT_BINDINGS_CLK_ROCKCHIP_RK3576_H
+#define _DT_BINDINGS_CLK_ROCKCHIP_RK3576_H
+
+/* cru-clocks indices */
+
+/* cru plls */
+#define PLL_BPLL			1
+#define PLL_LPLL			3
+#define PLL_VPLL			4
+#define PLL_AUPLL			5
+#define PLL_CPLL			6
+#define PLL_GPLL			7
+#define PLL_PPLL			9
+#define ARMCLK_L			10
+#define ARMCLK_B			11
+
+/* cru clocks */
+#define CLK_CPLL_DIV20			15
+#define CLK_CPLL_DIV10			16
+#define CLK_GPLL_DIV8			17
+#define CLK_GPLL_DIV6			18
+#define CLK_CPLL_DIV4			19
+#define CLK_GPLL_DIV4			20
+#define CLK_SPLL_DIV2			21
+#define CLK_GPLL_DIV3			22
+#define CLK_CPLL_DIV2			23
+#define CLK_GPLL_DIV2			24
+#define CLK_SPLL_DIV1			25
+#define PCLK_TOP_ROOT			26
+#define ACLK_TOP			27
+#define HCLK_TOP			28
+#define CLK_AUDIO_FRAC_0		29
+#define CLK_AUDIO_FRAC_1		30
+#define CLK_AUDIO_FRAC_2		31
+#define CLK_AUDIO_FRAC_3		32
+#define CLK_UART_FRAC_0			33
+#define CLK_UART_FRAC_1			34
+#define CLK_UART_FRAC_2			35
+#define CLK_UART1_SRC_TOP		36
+#define CLK_AUDIO_INT_0			37
+#define CLK_AUDIO_INT_1			38
+#define CLK_AUDIO_INT_2			39
+#define CLK_PDM0_SRC_TOP		40
+#define CLK_PDM1_OUT			41
+#define CLK_GMAC0_125M_SRC		42
+#define CLK_GMAC1_125M_SRC		43
+#define LCLK_ASRC_SRC_0			44
+#define LCLK_ASRC_SRC_1			45
+#define REF_CLK0_OUT_PLL		46
+#define REF_CLK1_OUT_PLL		47
+#define REF_CLK2_OUT_PLL		48
+#define REFCLKO25M_GMAC0_OUT		49
+#define REFCLKO25M_GMAC1_OUT		50
+#define CLK_CIFOUT_OUT			51
+#define CLK_GMAC0_RMII_CRU		52
+#define CLK_GMAC1_RMII_CRU		53
+#define CLK_OTPC_AUTO_RD_G		54
+#define CLK_OTP_PHY_G			55
+#define CLK_MIPI_CAMERAOUT_M0		56
+#define CLK_MIPI_CAMERAOUT_M1		57
+#define CLK_MIPI_CAMERAOUT_M2		58
+#define MCLK_PDM0_SRC_TOP		59
+#define HCLK_AUDIO_ROOT			60
+#define HCLK_ASRC_2CH_0			61
+#define HCLK_ASRC_2CH_1			62
+#define HCLK_ASRC_4CH_0			63
+#define HCLK_ASRC_4CH_1			64
+#define CLK_ASRC_2CH_0			65
+#define CLK_ASRC_2CH_1			66
+#define CLK_ASRC_4CH_0			67
+#define CLK_ASRC_4CH_1			68
+#define MCLK_SAI0_8CH_SRC		69
+#define MCLK_SAI0_8CH			70
+#define HCLK_SAI0_8CH			71
+#define HCLK_SPDIF_RX0			72
+#define MCLK_SPDIF_RX0			73
+#define HCLK_SPDIF_RX1			74
+#define MCLK_SPDIF_RX1			75
+#define MCLK_SAI1_8CH_SRC		76
+#define MCLK_SAI1_8CH			77
+#define HCLK_SAI1_8CH			78
+#define MCLK_SAI2_2CH_SRC		79
+#define MCLK_SAI2_2CH			80
+#define HCLK_SAI2_2CH			81
+#define MCLK_SAI3_2CH_SRC		82
+#define MCLK_SAI3_2CH			83
+#define HCLK_SAI3_2CH			84
+#define MCLK_SAI4_2CH_SRC		85
+#define MCLK_SAI4_2CH			86
+#define HCLK_SAI4_2CH			87
+#define HCLK_ACDCDIG_DSM		88
+#define MCLK_ACDCDIG_DSM		89
+#define CLK_PDM1			90
+#define HCLK_PDM1			91
+#define MCLK_PDM1			92
+#define HCLK_SPDIF_TX0			93
+#define MCLK_SPDIF_TX0			94
+#define HCLK_SPDIF_TX1			95
+#define MCLK_SPDIF_TX1			96
+#define CLK_SAI1_MCLKOUT		97
+#define CLK_SAI2_MCLKOUT		98
+#define CLK_SAI3_MCLKOUT		99
+#define CLK_SAI4_MCLKOUT		100
+#define CLK_SAI0_MCLKOUT		101
+#define HCLK_BUS_ROOT			102
+#define PCLK_BUS_ROOT			103
+#define ACLK_BUS_ROOT			104
+#define HCLK_CAN0			105
+#define CLK_CAN0			106
+#define HCLK_CAN1			107
+#define CLK_CAN1			108
+#define CLK_KEY_SHIFT			109
+#define PCLK_I2C1			110
+#define PCLK_I2C2			111
+#define PCLK_I2C3			112
+#define PCLK_I2C4			113
+#define PCLK_I2C5			114
+#define PCLK_I2C6			115
+#define PCLK_I2C7			116
+#define PCLK_I2C8			117
+#define PCLK_I2C9			118
+#define PCLK_WDT_BUSMCU			119
+#define TCLK_WDT_BUSMCU			120
+#define ACLK_GIC			121
+#define CLK_I2C1			122
+#define CLK_I2C2			123
+#define CLK_I2C3			124
+#define CLK_I2C4			125
+#define CLK_I2C5			126
+#define CLK_I2C6			127
+#define CLK_I2C7			128
+#define CLK_I2C8			129
+#define CLK_I2C9			130
+#define PCLK_SARADC			131
+#define CLK_SARADC			132
+#define PCLK_TSADC			133
+#define CLK_TSADC			134
+#define PCLK_UART0			135
+#define PCLK_UART2			136
+#define PCLK_UART3			137
+#define PCLK_UART4			138
+#define PCLK_UART5			139
+#define PCLK_UART6			140
+#define PCLK_UART7			141
+#define PCLK_UART8			142
+#define PCLK_UART9			143
+#define PCLK_UART10			144
+#define PCLK_UART11			145
+#define SCLK_UART0			146
+#define SCLK_UART2			147
+#define SCLK_UART3			148
+#define SCLK_UART4			149
+#define SCLK_UART5			150
+#define SCLK_UART6			151
+#define SCLK_UART7			152
+#define SCLK_UART8			153
+#define SCLK_UART9			154
+#define SCLK_UART10			155
+#define SCLK_UART11			156
+#define PCLK_SPI0			157
+#define PCLK_SPI1			158
+#define PCLK_SPI2			159
+#define PCLK_SPI3			160
+#define PCLK_SPI4			161
+#define CLK_SPI0			162
+#define CLK_SPI1			163
+#define CLK_SPI2			164
+#define CLK_SPI3			165
+#define CLK_SPI4			166
+#define PCLK_WDT0			167
+#define TCLK_WDT0			168
+#define PCLK_PWM1			169
+#define CLK_PWM1			170
+#define CLK_OSC_PWM1			171
+#define CLK_RC_PWM1			172
+#define PCLK_BUSTIMER0			173
+#define PCLK_BUSTIMER1			174
+#define CLK_TIMER0_ROOT			175
+#define CLK_TIMER0			176
+#define CLK_TIMER1			177
+#define CLK_TIMER2			178
+#define CLK_TIMER3			179
+#define CLK_TIMER4			180
+#define CLK_TIMER5			181
+#define PCLK_MAILBOX0			182
+#define PCLK_GPIO1			183
+#define DBCLK_GPIO1			184
+#define PCLK_GPIO2			185
+#define DBCLK_GPIO2			186
+#define PCLK_GPIO3			187
+#define DBCLK_GPIO3			188
+#define PCLK_GPIO4			189
+#define DBCLK_GPIO4			190
+#define ACLK_DECOM			191
+#define PCLK_DECOM			192
+#define DCLK_DECOM			193
+#define CLK_TIMER1_ROOT			194
+#define CLK_TIMER6			195
+#define CLK_TIMER7			196
+#define CLK_TIMER8			197
+#define CLK_TIMER9			198
+#define CLK_TIMER10			199
+#define CLK_TIMER11			200
+#define ACLK_DMAC0			201
+#define ACLK_DMAC1			202
+#define ACLK_DMAC2			203
+#define ACLK_SPINLOCK			204
+#define HCLK_I3C0			205
+#define HCLK_I3C1			206
+#define HCLK_BUS_CM0_ROOT		207
+#define FCLK_BUS_CM0_CORE		208
+#define CLK_BUS_CM0_RTC			209
+#define PCLK_PMU2			210
+#define PCLK_PWM2			211
+#define CLK_PWM2			212
+#define CLK_RC_PWM2			213
+#define CLK_OSC_PWM2			214
+#define CLK_FREQ_PWM1			215
+#define CLK_COUNTER_PWM1		216
+#define SAI_SCLKIN_FREQ			217
+#define SAI_SCLKIN_COUNTER		218
+#define CLK_I3C0			219
+#define CLK_I3C1			220
+#define PCLK_CSIDPHY1			221
+#define PCLK_DDR_ROOT			222
+#define PCLK_DDR_MON_CH0		223
+#define TMCLK_DDR_MON_CH0		224
+#define ACLK_DDR_ROOT			225
+#define HCLK_DDR_ROOT			226
+#define FCLK_DDR_CM0_CORE		227
+#define CLK_DDR_TIMER_ROOT		228
+#define CLK_DDR_TIMER0			229
+#define CLK_DDR_TIMER1			230
+#define TCLK_WDT_DDR			231
+#define PCLK_WDT			232
+#define PCLK_TIMER			233
+#define CLK_DDR_CM0_RTC			234
+#define ACLK_RKNN0			235
+#define ACLK_RKNN1			236
+#define HCLK_RKNN_ROOT			237
+#define CLK_RKNN_DSU0			238
+#define PCLK_NPUTOP_ROOT		239
+#define PCLK_NPU_TIMER			240
+#define CLK_NPUTIMER_ROOT		241
+#define CLK_NPUTIMER0			242
+#define CLK_NPUTIMER1			243
+#define PCLK_NPU_WDT			244
+#define TCLK_NPU_WDT			245
+#define ACLK_RKNN_CBUF			246
+#define HCLK_NPU_CM0_ROOT		247
+#define FCLK_NPU_CM0_CORE		248
+#define CLK_NPU_CM0_RTC			249
+#define HCLK_RKNN_CBUF			250
+#define HCLK_NVM_ROOT			251
+#define ACLK_NVM_ROOT			252
+#define SCLK_FSPI_X2			253
+#define HCLK_FSPI			254
+#define CCLK_SRC_EMMC			255
+#define HCLK_EMMC			256
+#define ACLK_EMMC			257
+#define BCLK_EMMC			258
+#define TCLK_EMMC			259
+#define PCLK_PHP_ROOT			260
+#define ACLK_PHP_ROOT			261
+#define PCLK_PCIE0			262
+#define CLK_PCIE0_AUX			263
+#define ACLK_PCIE0_MST			264
+#define ACLK_PCIE0_SLV			265
+#define ACLK_PCIE0_DBI			266
+#define ACLK_USB3OTG1			267
+#define CLK_REF_USB3OTG1		268
+#define CLK_SUSPEND_USB3OTG1		269
+#define ACLK_MMU0			270
+#define ACLK_SLV_MMU0			271
+#define ACLK_MMU1			272
+#define ACLK_SLV_MMU1			273
+#define PCLK_PCIE1			275
+#define CLK_PCIE1_AUX			276
+#define ACLK_PCIE1_MST			277
+#define ACLK_PCIE1_SLV			278
+#define ACLK_PCIE1_DBI			279
+#define CLK_RXOOB0			280
+#define CLK_RXOOB1			281
+#define CLK_PMALIVE0			282
+#define CLK_PMALIVE1			283
+#define ACLK_SATA0			284
+#define ACLK_SATA1			285
+#define CLK_USB3OTG1_PIPE_PCLK		286
+#define CLK_USB3OTG1_UTMI		287
+#define CLK_USB3OTG0_PIPE_PCLK		288
+#define CLK_USB3OTG0_UTMI		289
+#define HCLK_SDGMAC_ROOT		290
+#define ACLK_SDGMAC_ROOT		291
+#define PCLK_SDGMAC_ROOT		292
+#define ACLK_GMAC0			293
+#define ACLK_GMAC1			294
+#define PCLK_GMAC0			295
+#define PCLK_GMAC1			296
+#define CCLK_SRC_SDIO			297
+#define HCLK_SDIO			298
+#define CLK_GMAC1_PTP_REF		299
+#define CLK_GMAC0_PTP_REF		300
+#define CLK_GMAC1_PTP_REF_SRC		301
+#define CLK_GMAC0_PTP_REF_SRC		302
+#define CCLK_SRC_SDMMC0			303
+#define HCLK_SDMMC0			304
+#define SCLK_FSPI1_X2			305
+#define HCLK_FSPI1			306
+#define ACLK_DSMC_ROOT			307
+#define ACLK_DSMC			308
+#define PCLK_DSMC			309
+#define CLK_DSMC_SYS			310
+#define HCLK_HSGPIO			311
+#define CLK_HSGPIO_TX			312
+#define CLK_HSGPIO_RX			313
+#define ACLK_HSGPIO			314
+#define PCLK_PHPPHY_ROOT		315
+#define PCLK_PCIE2_COMBOPHY0		316
+#define PCLK_PCIE2_COMBOPHY1		317
+#define CLK_PCIE_100M_SRC		318
+#define CLK_PCIE_100M_NDUTY_SRC		319
+#define CLK_REF_PCIE0_PHY		320
+#define CLK_REF_PCIE1_PHY		321
+#define CLK_REF_MPHY_26M		322
+#define HCLK_RKVDEC_ROOT		323
+#define ACLK_RKVDEC_ROOT		324
+#define HCLK_RKVDEC			325
+#define CLK_RKVDEC_HEVC_CA		326
+#define CLK_RKVDEC_CORE			327
+#define ACLK_UFS_ROOT			328
+#define ACLK_USB_ROOT			329
+#define PCLK_USB_ROOT			330
+#define ACLK_USB3OTG0			331
+#define CLK_REF_USB3OTG0		332
+#define CLK_SUSPEND_USB3OTG0		333
+#define ACLK_MMU2			334
+#define ACLK_SLV_MMU2			335
+#define ACLK_UFS_SYS			336
+#define ACLK_VPU_ROOT			337
+#define ACLK_VPU_MID_ROOT		338
+#define HCLK_VPU_ROOT			339
+#define ACLK_JPEG_ROOT			340
+#define ACLK_VPU_LOW_ROOT		341
+#define HCLK_RGA2E_0			342
+#define ACLK_RGA2E_0			343
+#define CLK_CORE_RGA2E_0		344
+#define ACLK_JPEG			345
+#define HCLK_JPEG			346
+#define HCLK_VDPP			347
+#define ACLK_VDPP			348
+#define CLK_CORE_VDPP			349
+#define HCLK_RGA2E_1			350
+#define ACLK_RGA2E_1			351
+#define CLK_CORE_RGA2E_1		352
+#define DCLK_EBC_FRAC_SRC		353
+#define HCLK_EBC			354
+#define ACLK_EBC			355
+#define DCLK_EBC			356
+#define HCLK_VEPU0_ROOT			357
+#define ACLK_VEPU0_ROOT			358
+#define HCLK_VEPU0			359
+#define ACLK_VEPU0			360
+#define CLK_VEPU0_CORE			361
+#define ACLK_VI_ROOT			362
+#define HCLK_VI_ROOT			363
+#define PCLK_VI_ROOT			364
+#define DCLK_VICAP			365
+#define ACLK_VICAP			366
+#define HCLK_VICAP			367
+#define CLK_ISP_CORE			368
+#define CLK_ISP_CORE_MARVIN		369
+#define CLK_ISP_CORE_VICAP		370
+#define ACLK_ISP			371
+#define HCLK_ISP			372
+#define ACLK_VPSS			373
+#define HCLK_VPSS			374
+#define CLK_CORE_VPSS			375
+#define PCLK_CSI_HOST_0			376
+#define PCLK_CSI_HOST_1			377
+#define PCLK_CSI_HOST_2			378
+#define PCLK_CSI_HOST_3			379
+#define PCLK_CSI_HOST_4			380
+#define ICLK_CSIHOST01			381
+#define ICLK_CSIHOST0			382
+#define CLK_ISP_PVTPLL_SRC		383
+#define ACLK_VI_ROOT_INTER		384
+#define CLK_VICAP_I0CLK			385
+#define CLK_VICAP_I1CLK			386
+#define CLK_VICAP_I2CLK			387
+#define CLK_VICAP_I3CLK			388
+#define CLK_VICAP_I4CLK			389
+#define ACLK_VOP_ROOT			390
+#define HCLK_VOP_ROOT			391
+#define PCLK_VOP_ROOT			392
+#define HCLK_VOP			393
+#define ACLK_VOP			394
+#define DCLK_VP0_SRC			395
+#define DCLK_VP1_SRC			396
+#define DCLK_VP2_SRC			397
+#define DCLK_VP0			398
+#define DCLK_VP1			400
+#define DCLK_VP2			401
+#define PCLK_VOPGRF			402
+#define ACLK_VO0_ROOT			403
+#define HCLK_VO0_ROOT			404
+#define PCLK_VO0_ROOT			405
+#define PCLK_VO0_GRF			406
+#define ACLK_HDCP0			407
+#define HCLK_HDCP0			408
+#define PCLK_HDCP0			409
+#define CLK_TRNG0_SKP			410
+#define PCLK_DSIHOST0			411
+#define CLK_DSIHOST0			412
+#define PCLK_HDMITX0			413
+#define CLK_HDMITX0_EARC		414
+#define CLK_HDMITX0_REF			415
+#define PCLK_EDP0			416
+#define CLK_EDP0_24M			417
+#define CLK_EDP0_200M			418
+#define MCLK_SAI5_8CH_SRC		419
+#define MCLK_SAI5_8CH			420
+#define HCLK_SAI5_8CH			421
+#define MCLK_SAI6_8CH_SRC		422
+#define MCLK_SAI6_8CH			423
+#define HCLK_SAI6_8CH			424
+#define HCLK_SPDIF_TX2			425
+#define MCLK_SPDIF_TX2			426
+#define HCLK_SPDIF_RX2			427
+#define MCLK_SPDIF_RX2			428
+#define HCLK_SAI8_8CH			429
+#define MCLK_SAI8_8CH_SRC		430
+#define MCLK_SAI8_8CH			431
+#define ACLK_VO1_ROOT			432
+#define HCLK_VO1_ROOT			433
+#define PCLK_VO1_ROOT			434
+#define MCLK_SAI7_8CH_SRC		435
+#define MCLK_SAI7_8CH			436
+#define HCLK_SAI7_8CH			437
+#define HCLK_SPDIF_TX3			438
+#define HCLK_SPDIF_TX4			439
+#define HCLK_SPDIF_TX5			440
+#define MCLK_SPDIF_TX3			441
+#define CLK_AUX16MHZ_0			442
+#define ACLK_DP0			443
+#define PCLK_DP0			444
+#define PCLK_VO1_GRF			445
+#define ACLK_HDCP1			446
+#define HCLK_HDCP1			447
+#define PCLK_HDCP1			448
+#define CLK_TRNG1_SKP			449
+#define HCLK_SAI9_8CH			450
+#define MCLK_SAI9_8CH_SRC		451
+#define MCLK_SAI9_8CH			452
+#define MCLK_SPDIF_TX4			453
+#define MCLK_SPDIF_TX5			454
+#define CLK_GPU_SRC_PRE			455
+#define CLK_GPU				456
+#define PCLK_GPU_ROOT			457
+#define ACLK_CENTER_ROOT		458
+#define ACLK_CENTER_LOW_ROOT		459
+#define HCLK_CENTER_ROOT		460
+#define PCLK_CENTER_ROOT		461
+#define ACLK_DMA2DDR			462
+#define ACLK_DDR_SHAREMEM		463
+#define PCLK_DMA2DDR			464
+#define PCLK_SHAREMEM			465
+#define HCLK_VEPU1_ROOT			466
+#define ACLK_VEPU1_ROOT			467
+#define HCLK_VEPU1			468
+#define ACLK_VEPU1			469
+#define CLK_VEPU1_CORE			470
+#define CLK_JDBCK_DAP			471
+#define PCLK_MIPI_DCPHY			472
+#define CLK_32K_USB2DEBUG		473
+#define PCLK_CSIDPHY			474
+#define PCLK_USBDPPHY			475
+#define CLK_PMUPHY_REF_SRC		476
+#define CLK_USBDP_COMBO_PHY_IMMORTAL	477
+#define CLK_HDMITXHPD			478
+#define PCLK_MPHY			479
+#define CLK_REF_OSC_MPHY		480
+#define CLK_REF_UFS_CLKOUT		481
+#define HCLK_PMU1_ROOT			482
+#define HCLK_PMU_CM0_ROOT		483
+#define CLK_200M_PMU_SRC		484
+#define CLK_100M_PMU_SRC		485
+#define CLK_50M_PMU_SRC			486
+#define FCLK_PMU_CM0_CORE		487
+#define CLK_PMU_CM0_RTC			488
+#define PCLK_PMU1			489
+#define CLK_PMU1			490
+#define PCLK_PMU1WDT			491
+#define TCLK_PMU1WDT			492
+#define PCLK_PMUTIMER			493
+#define CLK_PMUTIMER_ROOT		494
+#define CLK_PMUTIMER0			495
+#define CLK_PMUTIMER1			496
+#define PCLK_PMU1PWM			497
+#define CLK_PMU1PWM			498
+#define CLK_PMU1PWM_OSC			499
+#define PCLK_PMUPHY_ROOT		500
+#define PCLK_I2C0			501
+#define CLK_I2C0			502
+#define SCLK_UART1			503
+#define PCLK_UART1			504
+#define CLK_PMU1PWM_RC			505
+#define CLK_PDM0			506
+#define HCLK_PDM0			507
+#define MCLK_PDM0			508
+#define HCLK_VAD			509
+#define CLK_OSCCHK_PVTM			510
+#define CLK_PDM0_OUT			511
+#define CLK_HPTIMER_SRC			512
+#define PCLK_PMU0_ROOT			516
+#define PCLK_PMU0			517
+#define PCLK_GPIO0			518
+#define DBCLK_GPIO0			519
+#define CLK_OSC0_PMU1			520
+#define PCLK_PMU1_ROOT			521
+#define XIN_OSC0_DIV			522
+#define ACLK_USB			523
+#define ACLK_UFS			524
+#define ACLK_SDGMAC			525
+#define HCLK_SDGMAC			526
+#define PCLK_SDGMAC			527
+#define HCLK_VO1			528
+#define HCLK_VO0			529
+#define PCLK_CCI_ROOT			532
+#define ACLK_CCI_ROOT			533
+#define HCLK_VO0VOP_CHANNEL		534
+#define ACLK_VO0VOP_CHANNEL		535
+#define ACLK_TOP_MID			536
+#define ACLK_SECURE_HIGH		537
+#define CLK_USBPHY_REF_SRC		538
+#define CLK_PHY_REF_SRC			539
+#define CLK_CPLL_REF_SRC		540
+#define CLK_AUPLL_REF_SRC		541
+#define PCLK_SECURE_NS			542
+#define HCLK_SECURE_NS			543
+#define ACLK_SECURE_NS			544
+#define PCLK_OTPC_NS			545
+#define HCLK_CRYPTO_NS			546
+#define HCLK_TRNG_NS			547
+#define CLK_OTPC_NS			548
+#define SCLK_DSU			549
+#define SCLK_DDR			550
+#define ACLK_CRYPTO_NS			551
+#define CLK_PKA_CRYPTO_NS		552
+#define ACLK_RKVDEC_ROOT_BAK		553
+#define CLK_AUDIO_FRAC_0_SRC		554
+#define CLK_AUDIO_FRAC_1_SRC		555
+#define CLK_AUDIO_FRAC_2_SRC		556
+#define CLK_AUDIO_FRAC_3_SRC		557
+#define PCLK_HDPTX_APB			558
+
+/* secure clk */
+#define CLK_STIMER0_ROOT		600
+#define CLK_STIMER1_ROOT		601
+#define PCLK_SECURE_S			602
+#define HCLK_SECURE_S			603
+#define ACLK_SECURE_S			604
+#define CLK_PKA_CRYPTO_S		605
+#define HCLK_VO1_S			606
+#define PCLK_VO1_S			607
+#define HCLK_VO0_S			608
+#define PCLK_VO0_S			609
+#define PCLK_KLAD			610
+#define HCLK_CRYPTO_S			611
+#define HCLK_KLAD			612
+#define ACLK_CRYPTO_S			613
+#define HCLK_TRNG_S			614
+#define PCLK_OTPC_S			615
+#define CLK_OTPC_S			616
+#define PCLK_WDT_S			617
+#define TCLK_WDT_S			618
+#define PCLK_HDCP0_TRNG			619
+#define PCLK_HDCP1_TRNG			620
+#define HCLK_HDCP_KEY0			621
+#define HCLK_HDCP_KEY1			622
+#define PCLK_EDP_S			623
+#define ACLK_KLAD			624
+
+#endif
diff --git a/include/dt-bindings/reset/rockchip,rk3576-cru.h b/include/dt-bindings/reset/rockchip,rk3576-cru.h
new file mode 100644
index 0000000000000..5bf1e7d17be56
--- /dev/null
+++ b/include/dt-bindings/reset/rockchip,rk3576-cru.h
@@ -0,0 +1,484 @@
+/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
+/*
+ * Copyright (c) 2023 Rockchip Electronics Co. Ltd.
+ * Copyright (c) 2024 Collabora Ltd.
+ *
+ * Author: Elaine Zhang <zhangqing@rock-chips.com>
+ * Author: Detlev Casanova <detlev.casanova@collabora.com>
+ */
+
+#ifndef _DT_BINDINGS_RESET_ROCKCHIP_RK3576_H
+#define _DT_BINDINGS_RESET_ROCKCHIP_RK3576_H
+
+#define SRST_A_TOP_BIU			1
+#define SRST_P_TOP_BIU			2
+#define SRST_A_TOP_MID_BIU		3
+#define SRST_A_SECURE_HIGH_BIU		4
+#define SRST_H_TOP_BIU			5
+
+#define SRST_H_VO0VOP_CHANNEL_BIU	6
+#define SRST_A_VO0VOP_CHANNEL_BIU	7
+
+#define SRST_BISRINTF			8
+
+#define SRST_H_AUDIO_BIU		9
+#define SRST_H_ASRC_2CH_0		10
+#define SRST_H_ASRC_2CH_1		11
+#define SRST_H_ASRC_4CH_0		12
+#define SRST_H_ASRC_4CH_1		13
+#define SRST_ASRC_2CH_0			14
+#define SRST_ASRC_2CH_1			15
+#define SRST_ASRC_4CH_0			16
+#define SRST_ASRC_4CH_1			17
+#define SRST_M_SAI0_8CH			18
+#define SRST_H_SAI0_8CH			19
+#define SRST_H_SPDIF_RX0		20
+#define SRST_M_SPDIF_RX0		21
+
+#define SRST_H_SPDIF_RX1		22
+#define SRST_M_SPDIF_RX1		23
+#define SRST_M_SAI1_8CH			24
+#define SRST_H_SAI1_8CH			25
+#define SRST_M_SAI2_2CH			26
+#define SRST_H_SAI2_2CH			27
+#define SRST_M_SAI3_2CH			28
+#define SRST_H_SAI3_2CH			29
+
+#define SRST_M_SAI4_2CH			30
+#define SRST_H_SAI4_2CH			31
+#define SRST_H_ACDCDIG_DSM		32
+#define SRST_M_ACDCDIG_DSM		33
+#define SRST_PDM1			34
+#define SRST_H_PDM1			35
+#define SRST_M_PDM1			36
+#define SRST_H_SPDIF_TX0		37
+#define SRST_M_SPDIF_TX0		38
+#define SRST_H_SPDIF_TX1		39
+#define SRST_M_SPDIF_TX1		40
+
+#define SRST_A_BUS_BIU			41
+#define SRST_P_BUS_BIU			42
+#define SRST_P_CRU			43
+#define SRST_H_CAN0			44
+#define SRST_CAN0			45
+#define SRST_H_CAN1			46
+#define SRST_CAN1			47
+#define SRST_P_INTMUX2BUS		48
+#define SRST_P_VCCIO_IOC		49
+#define SRST_H_BUS_BIU			50
+#define SRST_KEY_SHIFT			51
+
+#define SRST_P_I2C1			52
+#define SRST_P_I2C2			53
+#define SRST_P_I2C3			54
+#define SRST_P_I2C4			55
+#define SRST_P_I2C5			56
+#define SRST_P_I2C6			57
+#define SRST_P_I2C7			58
+#define SRST_P_I2C8			59
+#define SRST_P_I2C9			60
+#define SRST_P_WDT_BUSMCU		61
+#define SRST_T_WDT_BUSMCU		62
+#define SRST_A_GIC			63
+#define SRST_I2C1			64
+#define SRST_I2C2			65
+#define SRST_I2C3			66
+#define SRST_I2C4			67
+
+#define SRST_I2C5			68
+#define SRST_I2C6			69
+#define SRST_I2C7			70
+#define SRST_I2C8			71
+#define SRST_I2C9			72
+#define SRST_P_SARADC			73
+#define SRST_SARADC			74
+#define SRST_P_TSADC			75
+#define SRST_TSADC			76
+#define SRST_P_UART0			77
+#define SRST_P_UART2			78
+#define SRST_P_UART3			79
+#define SRST_P_UART4			80
+#define SRST_P_UART5			81
+#define SRST_P_UART6			82
+
+#define SRST_P_UART7			83
+#define SRST_P_UART8			84
+#define SRST_P_UART9			85
+#define SRST_P_UART10			86
+#define SRST_P_UART11			87
+#define SRST_S_UART0			88
+#define SRST_S_UART2			89
+#define SRST_S_UART3			90
+#define SRST_S_UART4			91
+#define SRST_S_UART5			92
+
+#define SRST_S_UART6			93
+#define SRST_S_UART7			94
+#define SRST_S_UART8			95
+#define SRST_S_UART9			96
+#define SRST_S_UART10			97
+#define SRST_S_UART11			98
+#define SRST_P_SPI0			99
+#define SRST_P_SPI1			100
+#define SRST_P_SPI2			101
+
+#define SRST_P_SPI3			102
+#define SRST_P_SPI4			103
+#define SRST_SPI0			104
+#define SRST_SPI1			105
+#define SRST_SPI2			106
+#define SRST_SPI3			107
+#define SRST_SPI4			108
+#define SRST_P_WDT0			109
+#define SRST_T_WDT0			110
+#define SRST_P_SYS_GRF			111
+#define SRST_P_PWM1			112
+#define SRST_PWM1			113
+
+#define SRST_P_BUSTIMER0		114
+#define SRST_P_BUSTIMER1		115
+#define SRST_TIMER0			116
+#define SRST_TIMER1			117
+#define SRST_TIMER2			118
+#define SRST_TIMER3			119
+#define SRST_TIMER4			120
+#define SRST_TIMER5			121
+#define SRST_P_BUSIOC			122
+#define SRST_P_MAILBOX0			123
+#define SRST_P_GPIO1			124
+
+#define SRST_GPIO1			125
+#define SRST_P_GPIO2			126
+#define SRST_GPIO2			127
+#define SRST_P_GPIO3			128
+#define SRST_GPIO3			129
+#define SRST_P_GPIO4			130
+#define SRST_GPIO4			131
+#define SRST_A_DECOM			132
+#define SRST_P_DECOM			133
+#define SRST_D_DECOM			134
+#define SRST_TIMER6			135
+#define SRST_TIMER7			136
+#define SRST_TIMER8			137
+#define SRST_TIMER9			138
+#define SRST_TIMER10			139
+
+#define SRST_TIMER11			140
+#define SRST_A_DMAC0			141
+#define SRST_A_DMAC1			142
+#define SRST_A_DMAC2			143
+#define SRST_A_SPINLOCK			144
+#define SRST_REF_PVTPLL_BUS		145
+#define SRST_H_I3C0			146
+#define SRST_H_I3C1			147
+#define SRST_H_BUS_CM0_BIU		148
+#define SRST_F_BUS_CM0_CORE		149
+#define SRST_T_BUS_CM0_JTAG		150
+
+#define SRST_P_INTMUX2PMU		151
+#define SRST_P_INTMUX2DDR		152
+#define SRST_P_PVTPLL_BUS		153
+#define SRST_P_PWM2			154
+#define SRST_PWM2			155
+#define SRST_FREQ_PWM1			156
+#define SRST_COUNTER_PWM1		157
+#define SRST_I3C0			158
+#define SRST_I3C1			159
+
+#define SRST_P_DDR_MON_CH0		160
+#define SRST_P_DDR_BIU			161
+#define SRST_P_DDR_UPCTL_CH0		162
+#define SRST_TM_DDR_MON_CH0		163
+#define SRST_A_DDR_BIU			164
+#define SRST_DFI_CH0			165
+#define SRST_DDR_MON_CH0		166
+#define SRST_P_DDR_HWLP_CH0		167
+#define SRST_P_DDR_MON_CH1		168
+#define SRST_P_DDR_HWLP_CH1		169
+
+#define SRST_P_DDR_UPCTL_CH1		170
+#define SRST_TM_DDR_MON_CH1		171
+#define SRST_DFI_CH1			172
+#define SRST_A_DDR01_MSCH0		173
+#define SRST_A_DDR01_MSCH1		174
+#define SRST_DDR_MON_CH1		175
+#define SRST_DDR_SCRAMBLE_CH0		176
+#define SRST_DDR_SCRAMBLE_CH1		177
+#define SRST_P_AHB2APB			178
+#define SRST_H_AHB2APB			179
+#define SRST_H_DDR_BIU			180
+#define SRST_F_DDR_CM0_CORE		181
+
+#define SRST_P_DDR01_MSCH0		182
+#define SRST_P_DDR01_MSCH1		183
+#define SRST_DDR_TIMER0			184
+#define SRST_DDR_TIMER1			185
+#define SRST_T_WDT_DDR			186
+#define SRST_P_WDT			187
+#define SRST_P_TIMER			188
+#define SRST_T_DDR_CM0_JTAG		189
+#define SRST_P_DDR_GRF			190
+
+#define SRST_DDR_UPCTL_CH0		191
+#define SRST_A_DDR_UPCTL_0_CH0		192
+#define SRST_A_DDR_UPCTL_1_CH0		193
+#define SRST_A_DDR_UPCTL_2_CH0		194
+#define SRST_A_DDR_UPCTL_3_CH0		195
+#define SRST_A_DDR_UPCTL_4_CH0		196
+
+#define SRST_DDR_UPCTL_CH1		197
+#define SRST_A_DDR_UPCTL_0_CH1		198
+#define SRST_A_DDR_UPCTL_1_CH1		199
+#define SRST_A_DDR_UPCTL_2_CH1		200
+#define SRST_A_DDR_UPCTL_3_CH1		201
+#define SRST_A_DDR_UPCTL_4_CH1		202
+
+#define SRST_REF_PVTPLL_DDR		203
+#define SRST_P_PVTPLL_DDR		204
+
+#define SRST_A_RKNN0			205
+#define SRST_A_RKNN0_BIU		206
+#define SRST_L_RKNN0_BIU		207
+
+#define SRST_A_RKNN1			208
+#define SRST_A_RKNN1_BIU		209
+#define SRST_L_RKNN1_BIU		210
+
+#define SRST_NPU_DAP			211
+#define SRST_L_NPUSUBSYS_BIU		212
+#define SRST_P_NPUTOP_BIU		213
+#define SRST_P_NPU_TIMER		214
+#define SRST_NPUTIMER0			215
+#define SRST_NPUTIMER1			216
+#define SRST_P_NPU_WDT			217
+#define SRST_T_NPU_WDT			218
+
+#define SRST_A_RKNN_CBUF		219
+#define SRST_A_RVCORE0			220
+#define SRST_P_NPU_GRF			221
+#define SRST_P_PVTPLL_NPU		222
+#define SRST_NPU_PVTPLL			223
+#define SRST_H_NPU_CM0_BIU		224
+#define SRST_F_NPU_CM0_CORE		225
+#define SRST_T_NPU_CM0_JTAG		226
+#define SRST_A_RKNNTOP_BIU		227
+#define SRST_H_RKNN_CBUF		228
+#define SRST_H_RKNNTOP_BIU		229
+
+#define SRST_H_NVM_BIU			230
+#define SRST_A_NVM_BIU			231
+#define SRST_S_FSPI			232
+#define SRST_H_FSPI			233
+#define SRST_C_EMMC			234
+#define SRST_H_EMMC			235
+#define SRST_A_EMMC			236
+#define SRST_B_EMMC			237
+#define SRST_T_EMMC			238
+
+#define SRST_P_GRF			239
+#define SRST_P_PHP_BIU			240
+#define SRST_A_PHP_BIU			241
+#define SRST_P_PCIE0			242
+#define SRST_PCIE0_POWER_UP		243
+
+#define SRST_A_USB3OTG1			244
+#define SRST_A_MMU0			245
+#define SRST_A_SLV_MMU0			246
+#define SRST_A_MMU1			247
+
+#define SRST_A_SLV_MMU1			248
+#define SRST_P_PCIE1			249
+#define SRST_PCIE1_POWER_UP		250
+
+#define SRST_RXOOB0			251
+#define SRST_RXOOB1			252
+#define SRST_PMALIVE0			253
+#define SRST_PMALIVE1			254
+#define SRST_A_SATA0			255
+#define SRST_A_SATA1			256
+#define SRST_ASIC1			257
+#define SRST_ASIC0			258
+
+#define SRST_P_CSIDPHY1			259
+#define SRST_SCAN_CSIDPHY1		260
+
+#define SRST_P_SDGMAC_GRF		261
+#define SRST_P_SDGMAC_BIU		262
+#define SRST_A_SDGMAC_BIU		263
+#define SRST_H_SDGMAC_BIU		264
+#define SRST_A_GMAC0			265
+#define SRST_A_GMAC1			266
+#define SRST_P_GMAC0			267
+#define SRST_P_GMAC1			268
+#define SRST_H_SDIO			269
+
+#define SRST_H_SDMMC0			270
+#define SRST_S_FSPI1			271
+#define SRST_H_FSPI1			272
+#define SRST_A_DSMC_BIU			273
+#define SRST_A_DSMC			274
+#define SRST_P_DSMC			275
+#define SRST_H_HSGPIO			276
+#define SRST_HSGPIO			277
+#define SRST_A_HSGPIO			278
+
+#define SRST_H_RKVDEC			279
+#define SRST_H_RKVDEC_BIU		280
+#define SRST_A_RKVDEC_BIU		281
+#define SRST_RKVDEC_HEVC_CA		282
+#define SRST_RKVDEC_CORE		283
+
+#define SRST_A_USB_BIU			284
+#define SRST_P_USBUFS_BIU		285
+#define SRST_A_USB3OTG0			286
+#define SRST_A_UFS_BIU			287
+#define SRST_A_MMU2			288
+#define SRST_A_SLV_MMU2			289
+#define SRST_A_UFS_SYS			290
+
+#define SRST_A_UFS			291
+#define SRST_P_USBUFS_GRF		292
+#define SRST_P_UFS_GRF			293
+
+#define SRST_H_VPU_BIU			294
+#define SRST_A_JPEG_BIU			295
+#define SRST_A_RGA_BIU			296
+#define SRST_A_VDPP_BIU			297
+#define SRST_A_EBC_BIU			298
+#define SRST_H_RGA2E_0			299
+#define SRST_A_RGA2E_0			300
+#define SRST_CORE_RGA2E_0		301
+
+#define SRST_A_JPEG			302
+#define SRST_H_JPEG			303
+#define SRST_H_VDPP			304
+#define SRST_A_VDPP			305
+#define SRST_CORE_VDPP			306
+#define SRST_H_RGA2E_1			307
+#define SRST_A_RGA2E_1			308
+#define SRST_CORE_RGA2E_1		309
+#define SRST_H_EBC			310
+#define SRST_A_EBC			311
+#define SRST_D_EBC			312
+
+#define SRST_H_VEPU0_BIU		313
+#define SRST_A_VEPU0_BIU		314
+#define SRST_H_VEPU0			315
+#define SRST_A_VEPU0			316
+#define SRST_VEPU0_CORE			317
+
+#define SRST_A_VI_BIU			318
+#define SRST_H_VI_BIU			319
+#define SRST_P_VI_BIU			320
+#define SRST_D_VICAP			321
+#define SRST_A_VICAP			322
+#define SRST_H_VICAP			323
+#define SRST_ISP0			324
+#define SRST_ISP0_VICAP			325
+
+#define SRST_CORE_VPSS			326
+#define SRST_P_CSI_HOST_0		327
+#define SRST_P_CSI_HOST_1		328
+#define SRST_P_CSI_HOST_2		329
+#define SRST_P_CSI_HOST_3		330
+#define SRST_P_CSI_HOST_4		331
+
+#define SRST_CIFIN			332
+#define SRST_VICAP_I0CLK		333
+#define SRST_VICAP_I1CLK		334
+#define SRST_VICAP_I2CLK		335
+#define SRST_VICAP_I3CLK		336
+#define SRST_VICAP_I4CLK		337
+
+#define SRST_A_VOP_BIU			338
+#define SRST_A_VOP2_BIU			339
+#define SRST_H_VOP_BIU			340
+#define SRST_P_VOP_BIU			341
+#define SRST_H_VOP			342
+#define SRST_A_VOP			343
+#define SRST_D_VP0			344
+
+#define SRST_D_VP1			345
+#define SRST_D_VP2			346
+#define SRST_P_VOP2_BIU			347
+#define SRST_P_VOPGRF			348
+
+#define SRST_H_VO0_BIU			349
+#define SRST_P_VO0_BIU			350
+#define SRST_A_HDCP0_BIU		351
+#define SRST_P_VO0_GRF			352
+#define SRST_A_HDCP0			353
+#define SRST_H_HDCP0			354
+#define SRST_HDCP0			355
+
+#define SRST_P_DSIHOST0			356
+#define SRST_DSIHOST0			357
+#define SRST_P_HDMITX0			358
+#define SRST_HDMITX0_REF		359
+#define SRST_P_EDP0			360
+#define SRST_EDP0_24M			361
+
+#define SRST_M_SAI5_8CH			362
+#define SRST_H_SAI5_8CH			363
+#define SRST_M_SAI6_8CH			364
+#define SRST_H_SAI6_8CH			365
+#define SRST_H_SPDIF_TX2		366
+#define SRST_M_SPDIF_TX2		367
+#define SRST_H_SPDIF_RX2		368
+#define SRST_M_SPDIF_RX2		369
+
+#define SRST_H_SAI8_8CH			370
+#define SRST_M_SAI8_8CH			371
+
+#define SRST_H_VO1_BIU			372
+#define SRST_P_VO1_BIU			373
+#define SRST_M_SAI7_8CH			374
+#define SRST_H_SAI7_8CH			375
+#define SRST_H_SPDIF_TX3		376
+#define SRST_H_SPDIF_TX4		377
+#define SRST_H_SPDIF_TX5		378
+#define SRST_M_SPDIF_TX3		379
+
+#define SRST_DP0			380
+#define SRST_P_VO1_GRF			381
+#define SRST_A_HDCP1_BIU		382
+#define SRST_A_HDCP1			383
+#define SRST_H_HDCP1			384
+#define SRST_HDCP1			385
+#define SRST_H_SAI9_8CH			386
+#define SRST_M_SAI9_8CH			387
+#define SRST_M_SPDIF_TX4		388
+#define SRST_M_SPDIF_TX5		389
+
+#define SRST_GPU			390
+#define SRST_A_S_GPU_BIU		391
+#define SRST_A_M0_GPU_BIU		392
+#define SRST_P_GPU_BIU			393
+#define SRST_P_GPU_GRF			394
+#define SRST_GPU_PVTPLL			395
+#define SRST_P_PVTPLL_GPU		396
+
+#define SRST_A_CENTER_BIU		397
+#define SRST_A_DMA2DDR			398
+#define SRST_A_DDR_SHAREMEM		399
+#define SRST_A_DDR_SHAREMEM_BIU		400
+#define SRST_H_CENTER_BIU		401
+#define SRST_P_CENTER_GRF		402
+#define SRST_P_DMA2DDR			403
+#define SRST_P_SHAREMEM			404
+#define SRST_P_CENTER_BIU		405
+
+#define SRST_LINKSYM_HDMITXPHY0		406
+
+#define SRST_DP0_PIXELCLK		407
+#define SRST_PHY_DP0_TX			408
+#define SRST_DP1_PIXELCLK		409
+#define SRST_DP2_PIXELCLK		410
+
+#define SRST_H_VEPU1_BIU		411
+#define SRST_A_VEPU1_BIU		412
+#define SRST_H_VEPU1			413
+#define SRST_A_VEPU1			414
+#define SRST_VEPU1_CORE			415
+
+#endif
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH v2 3/3] clk: rockchip: Add clock controller for the RK3576
  2024-08-02 21:35 [PATCH v2 0/3] Add CRU support for rk3576 SoC Detlev Casanova
  2024-08-02 21:35 ` [PATCH v2 1/3] dt-bindings: clock: add rk3576 cru bindings Detlev Casanova
  2024-08-02 21:35 ` [PATCH v2 2/3] clk: rockchip: Add dt-binding header for rk3576 Detlev Casanova
@ 2024-08-02 21:35 ` Detlev Casanova
  2024-08-03  6:53   ` zhangqing
       [not found]   ` <a9a9219d-325c-4afa-b40c-b261ff95263c@rock-chips.com>
  2 siblings, 2 replies; 13+ messages in thread
From: Detlev Casanova @ 2024-08-02 21:35 UTC (permalink / raw)
  To: linux-kernel
  Cc: Michael Turquette, Stephen Boyd, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Heiko Stuebner, Philipp Zabel, Elaine Zhang,
	linux-clk, devicetree, linux-arm-kernel, linux-rockchip, kernel,
	Finley Xiao, YouMin Chen, Liang Chen, Sugar Zhang,
	Detlev Casanova

From: Elaine Zhang <zhangqing@rock-chips.com>

Add the clock and reset tree definitions for the new RK3576
SoC.

Signed-off-by: Elaine Zhang <zhangqing@rock-chips.com>
Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com>
Signed-off-by: YouMin Chen <cym@rock-chips.com>
Signed-off-by: Liang Chen <cl@rock-chips.com>
Signed-off-by: Sugar Zhang <sugar.zhang@rock-chips.com>
[rebase, squash and renumber resets]
Signed-off-by: Detlev Casanova <detlev.casanova@collabora.com>
---
 drivers/clk/rockchip/Kconfig      |    7 +
 drivers/clk/rockchip/Makefile     |    1 +
 drivers/clk/rockchip/clk-rk3576.c | 1819 +++++++++++++++++++++++++++++
 drivers/clk/rockchip/clk.h        |   53 +
 drivers/clk/rockchip/rst-rk3576.c |  555 +++++++++
 5 files changed, 2435 insertions(+)
 create mode 100644 drivers/clk/rockchip/clk-rk3576.c
 create mode 100644 drivers/clk/rockchip/rst-rk3576.c

diff --git a/drivers/clk/rockchip/Kconfig b/drivers/clk/rockchip/Kconfig
index 9aad86925cd28..f8eb16f170d48 100644
--- a/drivers/clk/rockchip/Kconfig
+++ b/drivers/clk/rockchip/Kconfig
@@ -100,6 +100,13 @@ config CLK_RK3568
 	help
 	  Build the driver for RK3568 Clock Driver.
 
+config CLK_RK3576
+	tristate "Rockchip RK3576 clock controller support"
+	depends on ARM64 || COMPILE_TEST
+	default y
+	help
+	  Build the driver for RK3576 Clock Driver.
+
 config CLK_RK3588
 	bool "Rockchip RK3588 clock controller support"
 	depends on ARM64 || COMPILE_TEST
diff --git a/drivers/clk/rockchip/Makefile b/drivers/clk/rockchip/Makefile
index 36894f6a7022d..af2ade54a7efa 100644
--- a/drivers/clk/rockchip/Makefile
+++ b/drivers/clk/rockchip/Makefile
@@ -28,4 +28,5 @@ obj-$(CONFIG_CLK_RK3328)        += clk-rk3328.o
 obj-$(CONFIG_CLK_RK3368)        += clk-rk3368.o
 obj-$(CONFIG_CLK_RK3399)        += clk-rk3399.o
 obj-$(CONFIG_CLK_RK3568)	+= clk-rk3568.o
+obj-$(CONFIG_CLK_RK3576)	+= clk-rk3576.o rst-rk3576.o
 obj-$(CONFIG_CLK_RK3588)	+= clk-rk3588.o rst-rk3588.o
diff --git a/drivers/clk/rockchip/clk-rk3576.c b/drivers/clk/rockchip/clk-rk3576.c
new file mode 100644
index 0000000000000..5725706e9b6bb
--- /dev/null
+++ b/drivers/clk/rockchip/clk-rk3576.c
@@ -0,0 +1,1819 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2023 Rockchip Electronics Co. Ltd.
+ * Author: Elaine Zhang <zhangqing@rock-chips.com>
+ */
+
+#include <linux/clk-provider.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
+#include <linux/of_address.h>
+#include <linux/syscore_ops.h>
+#include <dt-bindings/clock/rockchip,rk3576-cru.h>
+#include "clk.h"
+
+#define RK3576_GRF_SOC_STATUS0		0x600
+#define RK3576_PMU0_GRF_OSC_CON6	0x18
+
+enum rk3576_plls {
+	bpll, lpll, vpll, aupll, cpll, gpll, ppll,
+};
+
+static struct rockchip_pll_rate_table rk3576_pll_rates[] = {
+	/* _mhz, _p, _m, _s, _k */
+	RK3588_PLL_RATE(2520000000, 2, 210, 0, 0),
+	RK3588_PLL_RATE(2496000000, 2, 208, 0, 0),
+	RK3588_PLL_RATE(2472000000, 2, 206, 0, 0),
+	RK3588_PLL_RATE(2448000000, 2, 204, 0, 0),
+	RK3588_PLL_RATE(2424000000, 2, 202, 0, 0),
+	RK3588_PLL_RATE(2400000000, 2, 200, 0, 0),
+	RK3588_PLL_RATE(2376000000, 2, 198, 0, 0),
+	RK3588_PLL_RATE(2352000000, 2, 196, 0, 0),
+	RK3588_PLL_RATE(2328000000, 2, 194, 0, 0),
+	RK3588_PLL_RATE(2304000000, 2, 192, 0, 0),
+	RK3588_PLL_RATE(2280000000, 2, 190, 0, 0),
+	RK3588_PLL_RATE(2256000000, 2, 376, 1, 0),
+	RK3588_PLL_RATE(2232000000, 2, 372, 1, 0),
+	RK3588_PLL_RATE(2208000000, 2, 368, 1, 0),
+	RK3588_PLL_RATE(2184000000, 2, 364, 1, 0),
+	RK3588_PLL_RATE(2160000000, 2, 360, 1, 0),
+	RK3588_PLL_RATE(2136000000, 2, 356, 1, 0),
+	RK3588_PLL_RATE(2112000000, 2, 352, 1, 0),
+	RK3588_PLL_RATE(2088000000, 2, 348, 1, 0),
+	RK3588_PLL_RATE(2064000000, 2, 344, 1, 0),
+	RK3588_PLL_RATE(2040000000, 2, 340, 1, 0),
+	RK3588_PLL_RATE(2016000000, 2, 336, 1, 0),
+	RK3588_PLL_RATE(1992000000, 2, 332, 1, 0),
+	RK3588_PLL_RATE(1968000000, 2, 328, 1, 0),
+	RK3588_PLL_RATE(1944000000, 2, 324, 1, 0),
+	RK3588_PLL_RATE(1920000000, 2, 320, 1, 0),
+	RK3588_PLL_RATE(1896000000, 2, 316, 1, 0),
+	RK3588_PLL_RATE(1872000000, 2, 312, 1, 0),
+	RK3588_PLL_RATE(1848000000, 2, 308, 1, 0),
+	RK3588_PLL_RATE(1824000000, 2, 304, 1, 0),
+	RK3588_PLL_RATE(1800000000, 2, 300, 1, 0),
+	RK3588_PLL_RATE(1776000000, 2, 296, 1, 0),
+	RK3588_PLL_RATE(1752000000, 2, 292, 1, 0),
+	RK3588_PLL_RATE(1728000000, 2, 288, 1, 0),
+	RK3588_PLL_RATE(1704000000, 2, 284, 1, 0),
+	RK3588_PLL_RATE(1680000000, 2, 280, 1, 0),
+	RK3588_PLL_RATE(1656000000, 2, 276, 1, 0),
+	RK3588_PLL_RATE(1632000000, 2, 272, 1, 0),
+	RK3588_PLL_RATE(1608000000, 2, 268, 1, 0),
+	RK3588_PLL_RATE(1584000000, 2, 264, 1, 0),
+	RK3588_PLL_RATE(1560000000, 2, 260, 1, 0),
+	RK3588_PLL_RATE(1536000000, 2, 256, 1, 0),
+	RK3588_PLL_RATE(1512000000, 2, 252, 1, 0),
+	RK3588_PLL_RATE(1488000000, 2, 248, 1, 0),
+	RK3588_PLL_RATE(1464000000, 2, 244, 1, 0),
+	RK3588_PLL_RATE(1440000000, 2, 240, 1, 0),
+	RK3588_PLL_RATE(1416000000, 2, 236, 1, 0),
+	RK3588_PLL_RATE(1392000000, 2, 232, 1, 0),
+	RK3588_PLL_RATE(1320000000, 2, 220, 1, 0),
+	RK3588_PLL_RATE(1200000000, 2, 200, 1, 0),
+	RK3588_PLL_RATE(1188000000, 2, 198, 1, 0),
+	RK3588_PLL_RATE(1100000000, 3, 550, 2, 0),
+	RK3588_PLL_RATE(1008000000, 2, 336, 2, 0),
+	RK3588_PLL_RATE(1000000000, 3, 500, 2, 0),
+	RK3588_PLL_RATE(983040000, 4, 655, 2, 23592),
+	RK3588_PLL_RATE(955520000, 3, 477, 2, 49806),
+	RK3588_PLL_RATE(903168000, 6, 903, 2, 11009),
+	RK3588_PLL_RATE(900000000, 2, 300, 2, 0),
+	RK3588_PLL_RATE(816000000, 2, 272, 2, 0),
+	RK3588_PLL_RATE(786432000, 2, 262, 2, 9437),
+	RK3588_PLL_RATE(786000000, 1, 131, 2, 0),
+	RK3588_PLL_RATE(785560000, 3, 392, 2, 51117),
+	RK3588_PLL_RATE(722534400, 8, 963, 2, 24850),
+	RK3588_PLL_RATE(600000000, 2, 200, 2, 0),
+	RK3588_PLL_RATE(594000000, 2, 198, 2, 0),
+	RK3588_PLL_RATE(408000000, 2, 272, 3, 0),
+	RK3588_PLL_RATE(312000000, 2, 208, 3, 0),
+	RK3588_PLL_RATE(216000000, 2, 288, 4, 0),
+	RK3588_PLL_RATE(96000000, 2, 256, 5, 0),
+	{ /* sentinel */ },
+};
+
+static struct rockchip_pll_rate_table rk3576_ppll_rates[] = {
+	/* _mhz, _p, _m, _s, _k */
+	RK3588_PLL_RATE(1300000000, 3, 325, 2, 0),
+	{ /* sentinel */ },
+};
+
+#define RK3576_ACLK_M_BIGCORE_DIV_MASK		0x1f
+#define RK3576_ACLK_M_BIGCORE_DIV_SHIFT		0
+#define RK3576_ACLK_M_LITCORE_DIV_MASK		0x1f
+#define RK3576_ACLK_M_LITCORE_DIV_SHIFT		8
+#define RK3576_PCLK_DBG_LITCORE_DIV_MASK	0x1f
+#define RK3576_PCLK_DBG_LITCORE_DIV_SHIFT	0
+#define RK3576_ACLK_CCI_DIV_MASK		0x1f
+#define RK3576_ACLK_CCI_DIV_SHIFT		7
+#define RK3576_ACLK_CCI_MUX_MASK		0x3
+#define RK3576_ACLK_CCI_MUX_SHIFT		12
+
+#define RK3576_BIGCORE_CLKSEL2(_amcore)						\
+{										\
+	.reg = RK3576_BIGCORE_CLKSEL_CON(2),					\
+	.val = HIWORD_UPDATE(_amcore - 1, RK3576_ACLK_M_BIGCORE_DIV_MASK,	\
+			RK3576_ACLK_M_BIGCORE_DIV_SHIFT),			\
+}
+
+#define RK3576_LITCORE_CLKSEL1(_amcore)						\
+{										\
+	.reg = RK3576_LITCORE_CLKSEL_CON(1),					\
+	.val = HIWORD_UPDATE(_amcore - 1, RK3576_ACLK_M_LITCORE_DIV_MASK,	\
+			RK3576_ACLK_M_LITCORE_DIV_SHIFT),			\
+}
+
+#define RK3576_LITCORE_CLKSEL2(_pclkdbg)					\
+{										\
+	.reg = RK3576_LITCORE_CLKSEL_CON(2),					\
+	.val = HIWORD_UPDATE(_pclkdbg - 1, RK3576_PCLK_DBG_LITCORE_DIV_MASK,	\
+			RK3576_PCLK_DBG_LITCORE_DIV_SHIFT),			\
+}
+
+#define RK3576_CCI_CLKSEL4(_ccisel, _div)					\
+{										\
+	.reg = RK3576_CCI_CLKSEL_CON(4),					\
+	.val = HIWORD_UPDATE(_ccisel, RK3576_ACLK_CCI_MUX_MASK,			\
+			RK3576_ACLK_CCI_MUX_SHIFT) |				\
+	       HIWORD_UPDATE(_div - 1, RK3576_ACLK_CCI_DIV_MASK,		\
+			RK3576_ACLK_CCI_DIV_SHIFT),				\
+}
+
+#define RK3576_CPUBCLK_RATE(_prate, _amcore)					\
+{										\
+	.prate = _prate##U,							\
+	.divs = {								\
+		RK3576_BIGCORE_CLKSEL2(_amcore),				\
+	},									\
+}
+
+#define RK3576_CPULCLK_RATE(_prate, _amcore, _pclkdbg, _ccisel)			\
+{										\
+	.prate = _prate##U,							\
+	.divs = {								\
+		RK3576_LITCORE_CLKSEL1(_amcore),				\
+		RK3576_LITCORE_CLKSEL2(_pclkdbg),				\
+	},									\
+	.pre_muxs = {								\
+		RK3576_CCI_CLKSEL4(2, 2),					\
+	},									\
+	.post_muxs = {								\
+		RK3576_CCI_CLKSEL4(_ccisel, 2),					\
+	},									\
+}
+
+static struct rockchip_cpuclk_rate_table rk3576_cpubclk_rates[] __initdata = {
+	RK3576_CPUBCLK_RATE(2496000000, 2),
+	RK3576_CPUBCLK_RATE(2400000000, 2),
+	RK3576_CPUBCLK_RATE(2304000000, 2),
+	RK3576_CPUBCLK_RATE(2208000000, 2),
+	RK3576_CPUBCLK_RATE(2184000000, 2),
+	RK3576_CPUBCLK_RATE(2088000000, 2),
+	RK3576_CPUBCLK_RATE(2040000000, 2),
+	RK3576_CPUBCLK_RATE(2016000000, 2),
+	RK3576_CPUBCLK_RATE(1992000000, 2),
+	RK3576_CPUBCLK_RATE(1896000000, 2),
+	RK3576_CPUBCLK_RATE(1800000000, 2),
+	RK3576_CPUBCLK_RATE(1704000000, 2),
+	RK3576_CPUBCLK_RATE(1608000000, 2),
+	RK3576_CPUBCLK_RATE(1584000000, 2),
+	RK3576_CPUBCLK_RATE(1560000000, 2),
+	RK3576_CPUBCLK_RATE(1536000000, 2),
+	RK3576_CPUBCLK_RATE(1512000000, 2),
+	RK3576_CPUBCLK_RATE(1488000000, 2),
+	RK3576_CPUBCLK_RATE(1464000000, 2),
+	RK3576_CPUBCLK_RATE(1440000000, 2),
+	RK3576_CPUBCLK_RATE(1416000000, 2),
+	RK3576_CPUBCLK_RATE(1392000000, 2),
+	RK3576_CPUBCLK_RATE(1368000000, 2),
+	RK3576_CPUBCLK_RATE(1344000000, 2),
+	RK3576_CPUBCLK_RATE(1320000000, 2),
+	RK3576_CPUBCLK_RATE(1296000000, 2),
+	RK3576_CPUBCLK_RATE(1272000000, 2),
+	RK3576_CPUBCLK_RATE(1248000000, 2),
+	RK3576_CPUBCLK_RATE(1224000000, 2),
+	RK3576_CPUBCLK_RATE(1200000000, 2),
+	RK3576_CPUBCLK_RATE(1104000000, 2),
+	RK3576_CPUBCLK_RATE(1008000000, 2),
+	RK3576_CPUBCLK_RATE(912000000, 2),
+	RK3576_CPUBCLK_RATE(816000000, 2),
+	RK3576_CPUBCLK_RATE(696000000, 2),
+	RK3576_CPUBCLK_RATE(600000000, 2),
+	RK3576_CPUBCLK_RATE(408000000, 2),
+	RK3576_CPUBCLK_RATE(312000000, 2),
+	RK3576_CPUBCLK_RATE(216000000, 2),
+	RK3576_CPUBCLK_RATE(96000000, 2),
+};
+
+static const struct rockchip_cpuclk_reg_data rk3576_cpubclk_data = {
+	.core_reg[0] = RK3576_BIGCORE_CLKSEL_CON(1),
+	.div_core_shift[0] = 7,
+	.div_core_mask[0] = 0x1f,
+	.num_cores = 1,
+	.mux_core_alt = 1,
+	.mux_core_main = 0,
+	.mux_core_shift = 12,
+	.mux_core_mask = 0x3,
+};
+
+static struct rockchip_cpuclk_rate_table rk3576_cpulclk_rates[] __initdata = {
+	RK3576_CPULCLK_RATE(2400000000, 2, 6, 3),
+	RK3576_CPULCLK_RATE(2304000000, 2, 6, 3),
+	RK3576_CPULCLK_RATE(2208000000, 2, 6, 3),
+	RK3576_CPULCLK_RATE(2184000000, 2, 6, 3),
+	RK3576_CPULCLK_RATE(2088000000, 2, 6, 3),
+	RK3576_CPULCLK_RATE(2040000000, 2, 6, 3),
+	RK3576_CPULCLK_RATE(2016000000, 2, 6, 3),
+	RK3576_CPULCLK_RATE(1992000000, 2, 6, 3),
+	RK3576_CPULCLK_RATE(1896000000, 2, 6, 3),
+	RK3576_CPULCLK_RATE(1800000000, 2, 6, 3),
+	RK3576_CPULCLK_RATE(1704000000, 2, 6, 3),
+	RK3576_CPULCLK_RATE(1608000000, 2, 6, 3),
+	RK3576_CPULCLK_RATE(1584000000, 2, 6, 3),
+	RK3576_CPULCLK_RATE(1560000000, 2, 6, 3),
+	RK3576_CPULCLK_RATE(1536000000, 2, 6, 3),
+	RK3576_CPULCLK_RATE(1512000000, 2, 6, 3),
+	RK3576_CPULCLK_RATE(1488000000, 2, 6, 3),
+	RK3576_CPULCLK_RATE(1464000000, 2, 6, 3),
+	RK3576_CPULCLK_RATE(1440000000, 2, 6, 3),
+	RK3576_CPULCLK_RATE(1416000000, 2, 6, 3),
+	RK3576_CPULCLK_RATE(1392000000, 2, 6, 3),
+	RK3576_CPULCLK_RATE(1368000000, 2, 6, 3),
+	RK3576_CPULCLK_RATE(1344000000, 2, 6, 3),
+	RK3576_CPULCLK_RATE(1320000000, 2, 6, 3),
+	RK3576_CPULCLK_RATE(1296000000, 2, 6, 3),
+	RK3576_CPULCLK_RATE(1272000000, 2, 6, 3),
+	RK3576_CPULCLK_RATE(1248000000, 2, 6, 3),
+	RK3576_CPULCLK_RATE(1224000000, 2, 6, 3),
+	RK3576_CPULCLK_RATE(1200000000, 2, 6, 2),
+	RK3576_CPULCLK_RATE(1104000000, 2, 6, 2),
+	RK3576_CPULCLK_RATE(1008000000, 2, 6, 2),
+	RK3576_CPULCLK_RATE(912000000, 2, 6, 2),
+	RK3576_CPULCLK_RATE(816000000, 2, 6, 2),
+	RK3576_CPULCLK_RATE(696000000, 2, 6, 2),
+	RK3576_CPULCLK_RATE(600000000, 2, 6, 2),
+	RK3576_CPULCLK_RATE(408000000, 2, 6, 2),
+	RK3576_CPULCLK_RATE(312000000, 2, 6, 2),
+	RK3576_CPULCLK_RATE(216000000, 2, 6, 2),
+	RK3576_CPULCLK_RATE(96000000, 2, 6, 2),
+};
+
+static const struct rockchip_cpuclk_reg_data rk3576_cpulclk_data = {
+	.core_reg[0] = RK3576_LITCORE_CLKSEL_CON(0),
+	.div_core_shift[0] = 7,
+	.div_core_mask[0] = 0x1f,
+	.num_cores = 1,
+	.mux_core_alt = 1,
+	.mux_core_main = 0,
+	.mux_core_shift = 12,
+	.mux_core_mask = 0x3,
+};
+
+#define MFLAGS CLK_MUX_HIWORD_MASK
+#define DFLAGS CLK_DIVIDER_HIWORD_MASK
+#define GFLAGS (CLK_GATE_HIWORD_MASK | CLK_GATE_SET_TO_DISABLE)
+
+PNAME(mux_pll_p)			= { "xin24m", "xin32k" };
+PNAME(mux_24m_32k_p)			= { "xin24m", "xin_osc0_div" };
+PNAME(mux_armclkl_p)			= { "xin24m", "pll_lpll", "lpll" };
+PNAME(mux_armclkb_p)			= { "xin24m", "pll_bpll", "bpll" };
+PNAME(gpll_24m_p)			= { "gpll", "xin24m" };
+PNAME(cpll_24m_p)			= { "cpll", "xin24m" };
+PNAME(gpll_cpll_p)			= { "gpll", "cpll" };
+PNAME(gpll_spll_p)			= { "gpll", "spll" };
+PNAME(gpll_cpll_aupll_p)		= { "gpll", "cpll", "aupll" };
+PNAME(gpll_cpll_24m_p)			= { "gpll", "cpll", "xin24m" };
+PNAME(gpll_cpll_24m_spll_p)		= { "gpll", "cpll", "xin24m", "spll" };
+PNAME(gpll_cpll_aupll_24m_p)		= { "gpll", "cpll", "aupll", "xin24m" };
+PNAME(gpll_cpll_aupll_spll_p)		= { "gpll", "cpll", "aupll", "spll" };
+PNAME(gpll_cpll_aupll_spll_lpll_p)	= { "gpll", "cpll", "aupll", "spll", "lpll_dummy" };
+PNAME(gpll_cpll_spll_bpll_p)		= { "gpll", "cpll", "spll", "bpll_dummy" };
+PNAME(gpll_cpll_lpll_bpll_p)		= { "gpll", "cpll", "lpll_dummy", "bpll_dummy" };
+PNAME(gpll_spll_cpll_bpll_lpll_p)	= { "gpll", "spll",  "cpll", "bpll_dummy", "lpll_dummy" };
+PNAME(gpll_cpll_vpll_aupll_24m_p)	= { "gpll", "cpll", "vpll", "aupll", "xin24m" };
+PNAME(gpll_cpll_spll_aupll_bpll_p)	= { "gpll", "cpll", "spll", "aupll", "bpll_dummy" };
+PNAME(gpll_cpll_spll_bpll_lpll_p)	= { "gpll", "cpll", "spll", "bpll_dummy", "lpll_dummy" };
+PNAME(gpll_cpll_spll_lpll_bpll_p)	= { "gpll", "cpll", "spll", "lpll_dummy", "bpll_dummy" };
+PNAME(gpll_cpll_vpll_bpll_lpll_p)	= { "gpll", "cpll", "vpll", "bpll_dummy", "lpll_dummy" };
+PNAME(gpll_spll_aupll_bpll_lpll_p)	= { "gpll", "spll", "aupll", "bpll_dummy", "lpll_dummy" };
+PNAME(gpll_spll_isppvtpll_bpll_lpll_p)	= { "gpll", "spll", "isp_pvtpll", "bpll_dummy", "lpll_dummy" };
+PNAME(gpll_cpll_spll_aupll_lpll_24m_p)	= { "gpll", "cpll", "spll", "aupll", "lpll_dummy", "xin24m" };
+PNAME(gpll_cpll_spll_vpll_bpll_lpll_p)	= { "gpll", "cpll", "spll", "vpll", "bpll_dummy", "lpll_dummy" };
+PNAME(cpll_vpll_lpll_bpll_p)		= { "cpll", "vpll", "lpll_dummy", "bpll_dummy" };
+PNAME(mux_24m_ccipvtpll_gpll_lpll_p)	= { "xin24m", "cci_pvtpll", "gpll", "lpll" };
+PNAME(mux_24m_spll_gpll_cpll_p)		= {"xin24m", "spll", "gpll", "cpll" };
+PNAME(audio_frac_int_p)			= { "xin24m", "clk_audio_frac_0", "clk_audio_frac_1", "clk_audio_frac_2",
+					    "clk_audio_frac_3", "clk_audio_int_0", "clk_audio_int_1", "clk_audio_int_2" };
+PNAME(audio_frac_p)			= { "clk_audio_frac_0", "clk_audio_frac_1", "clk_audio_frac_2", "clk_audio_frac_3" };
+PNAME(mux_100m_24m_p)			= { "clk_cpll_div10", "xin24m" };
+PNAME(mux_100m_50m_24m_p)		= { "clk_cpll_div10", "clk_cpll_div20", "xin24m" };
+PNAME(mux_100m_24m_lclk0_p)		= { "clk_cpll_div10", "xin24m", "lclk_asrc_src_0" };
+PNAME(mux_100m_24m_lclk1_p)		= { "clk_cpll_div10", "xin24m", "lclk_asrc_src_1" };
+PNAME(mux_150m_100m_50m_24m_p)		= { "clk_gpll_div8", "clk_cpll_div10", "clk_cpll_div20", "xin24m" };
+PNAME(mux_200m_100m_50m_24m_p)		= { "clk_gpll_div6", "clk_cpll_div10", "clk_cpll_div20", "xin24m" };
+PNAME(mux_400m_200m_100m_24m_p)		= { "clk_gpll_div3", "clk_gpll_div6", "clk_cpll_div10", "xin24m" };
+PNAME(mux_500m_250m_100m_24m_p)		= { "clk_cpll_div2", "clk_cpll_div4", "clk_cpll_div10", "xin24m" };
+PNAME(mux_600m_400m_300m_24m_p)		= { "clk_gpll_div2", "clk_gpll_div3", "clk_gpll_div4", "xin24m" };
+PNAME(mux_350m_175m_116m_24m_p)		= { "clk_spll_div2", "clk_spll_div4", "clk_spll_div6", "xin24m" };
+PNAME(mux_175m_116m_58m_24m_p)		= { "clk_spll_div4", "clk_spll_div6", "clk_spll_div12", "xin24m" };
+PNAME(mux_116m_58m_24m_p)		= { "clk_spll_div6", "clk_spll_div12", "xin24m" };
+PNAME(mclk_sai0_8ch_p)			= { "mclk_sai0_8ch_src", "sai0_mclkin", "sai1_mclkin" };
+PNAME(mclk_sai1_8ch_p)			= { "mclk_sai1_8ch_src", "sai1_mclkin" };
+PNAME(mclk_sai2_2ch_p)			= { "mclk_sai2_2ch_src", "sai2_mclkin", "sai1_mclkin" };
+PNAME(mclk_sai3_2ch_p)			= { "mclk_sai3_2ch_src", "sai3_mclkin", "sai1_mclkin" };
+PNAME(mclk_sai4_2ch_p)			= { "mclk_sai4_2ch_src", "sai4_mclkin", "sai1_mclkin" };
+PNAME(mclk_sai5_8ch_p)			= { "mclk_sai5_8ch_src", "sai1_mclkin" };
+PNAME(mclk_sai6_8ch_p)			= { "mclk_sai6_8ch_src", "sai1_mclkin" };
+PNAME(mclk_sai7_8ch_p)			= { "mclk_sai7_8ch_src", "sai1_mclkin" };
+PNAME(mclk_sai8_8ch_p)			= { "mclk_sai8_8ch_src", "sai1_mclkin" };
+PNAME(mclk_sai9_8ch_p)			= { "mclk_sai9_8ch_src", "sai1_mclkin" };
+PNAME(uart1_p)				= { "clk_uart1_src_top", "xin24m" };
+PNAME(pdm0_p)				= { "clk_pdm0_src_top", "xin24m" };
+PNAME(mclk_pdm0_p)			= { "mclk_pdm0_src_top", "xin24m" };
+PNAME(clk_gmac1_ptp_ref_src_p)		= { "gpll", "cpll", "gmac1_ptp_refclk_in" };
+PNAME(clk_gmac0_ptp_ref_src_p)		= { "gpll", "cpll", "gmac0_ptp_refclk_in" };
+PNAME(dclk_ebc_p)			= { "gpll", "cpll", "vpll", "aupll", "lpll_dummy",
+					    "dclk_ebc_frac", "xin24m" };
+PNAME(dclk_vp0_p)			= { "dclk_vp0_src", "clk_hdmiphy_pixel0" };
+PNAME(dclk_vp1_p)			= { "dclk_vp1_src", "clk_hdmiphy_pixel0" };
+PNAME(dclk_vp2_p)			= { "dclk_vp2_src", "clk_hdmiphy_pixel0" };
+PNAME(clk_uart_p)			= { "gpll", "cpll", "aupll", "xin24m", "clk_uart_frac_0",
+					    "clk_uart_frac_1", "clk_uart_frac_2"};
+PNAME(clk_freq_pwm1_p)			= { "sai0_mclkin", "sai1_mclkin", "sai2_mclkin",
+					    "sai3_mclkin", "sai4_mclkin", "sai_sclkin_freq"};
+PNAME(clk_counter_pwm1_p)		= { "sai0_mclkin", "sai1_mclkin", "sai2_mclkin",
+					    "sai3_mclkin", "sai4_mclkin", "sai_sclkin_counter"};
+PNAME(sai_sclkin_freq_p)		= { "sai0_sclk_in", "sai1_sclk_in", "sai2_sclk_in",
+					    "sai3_sclk_in", "sai4_sclk_in"};
+PNAME(clk_ref_pcie0_phy_p)		= { "clk_pcie_100m_src", "clk_pcie_100m_nduty_src",
+					    "xin24m"};
+PNAME(hclk_vi_root_p)			= { "clk_gpll_div6", "clk_cpll_div10",
+					    "aclk_vi_root_inter", "xin24m"};
+PNAME(clk_ref_osc_mphy_p)		= { "xin24m", "clk_gpio_mphy_i", "clk_ref_mphy_26m"};
+PNAME(mux_pmu200m_pmu100m_pmu50m_24m_p)	= { "clk_200m_pmu_src", "clk_100m_pmu_src",
+					    "clk_50m_pmu_src", "xin24m" };
+PNAME(mux_pmu100m_pmu50m_24m_p)		= { "clk_100m_pmu_src", "clk_50m_pmu_src", "xin24m" };
+PNAME(mux_pmu100m_24m_32k_p)		= { "clk_100m_pmu_src", "xin24m", "xin_osc0_div" };
+PNAME(clk_phy_ref_src_p)		= { "xin24m", "clk_pmuphy_ref_src" };
+PNAME(clk_usbphy_ref_src_p)		= { "usbphy0_24m", "usbphy1_24m" };
+PNAME(clk_cpll_ref_src_p)		= { "xin24m", "clk_usbphy_ref_src" };
+PNAME(clk_aupll_ref_src_p)		= { "xin24m", "clk_aupll_ref_io" };
+
+static struct rockchip_pll_clock rk3576_pll_clks[] __initdata = {
+	[bpll] = PLL(pll_rk3588_core, PLL_BPLL, "bpll", mux_pll_p,
+		     0, RK3576_PLL_CON(0),
+		     RK3576_BPLL_MODE_CON0, 0, 15, 0, rk3576_pll_rates),
+	[lpll] = PLL(pll_rk3588_core, PLL_LPLL, "lpll", mux_pll_p,
+		     0, RK3576_LPLL_CON(16),
+		     RK3576_LPLL_MODE_CON0, 0, 15, 0, rk3576_pll_rates),
+	[vpll] = PLL(pll_rk3588, PLL_VPLL, "vpll", mux_pll_p,
+		     0, RK3576_PLL_CON(88),
+		     RK3576_MODE_CON0, 4, 15, 0, rk3576_pll_rates),
+	[aupll] = PLL(pll_rk3588, PLL_AUPLL, "aupll", mux_pll_p,
+		     0, RK3576_PLL_CON(96),
+		     RK3576_MODE_CON0, 6, 15, 0, rk3576_pll_rates),
+	[cpll] = PLL(pll_rk3588, PLL_CPLL, "cpll", mux_pll_p,
+		     CLK_IGNORE_UNUSED, RK3576_PLL_CON(104),
+		     RK3576_MODE_CON0, 8, 15, 0, rk3576_pll_rates),
+	[gpll] = PLL(pll_rk3588, PLL_GPLL, "gpll", mux_pll_p,
+		     CLK_IGNORE_UNUSED, RK3576_PLL_CON(112),
+		     RK3576_MODE_CON0, 2, 15, 0, rk3576_pll_rates),
+	[ppll] = PLL(pll_rk3588_core, PLL_PPLL, "ppll", mux_pll_p,
+		     CLK_IGNORE_UNUSED, RK3576_PMU_PLL_CON(128),
+		     RK3576_MODE_CON0, 10, 15, 0, rk3576_ppll_rates),
+};
+
+static struct rockchip_clk_branch rk3576_clk_branches[] __initdata = {
+	/*
+	 * CRU Clock-Architecture
+	 */
+	/* fixed */
+	FACTOR(0, "xin12m", "xin24m", 0, 1, 2),
+
+	COMPOSITE_FRAC(XIN_OSC0_DIV, "xin_osc0_div", "xin24m", CLK_IS_CRITICAL,
+			RK3576_PMU_CLKSEL_CON(21), 0,
+			RK3576_PMU_CLKGATE_CON(7), 11, GFLAGS),
+
+	FACTOR(0, "clk_spll_div12", "spll", 0, 1, 12),
+	FACTOR(0, "clk_spll_div6", "spll", 0, 1, 6),
+	FACTOR(0, "clk_spll_div4", "spll", 0, 1, 4),
+	FACTOR(0, "lpll_div2", "lpll", 0, 1, 2),
+	FACTOR(0, "bpll_div4", "bpll", 0, 1, 4),
+
+	/* top */
+	COMPOSITE(CLK_CPLL_DIV20, "clk_cpll_div20", gpll_cpll_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(0), 5, 1, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(0), 0, GFLAGS),
+	COMPOSITE(CLK_CPLL_DIV10, "clk_cpll_div10", gpll_cpll_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(0), 11, 1, MFLAGS, 6, 5, DFLAGS,
+			RK3576_CLKGATE_CON(0), 1, GFLAGS),
+	COMPOSITE(CLK_GPLL_DIV8, "clk_gpll_div8", gpll_cpll_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(1), 5, 1, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(0), 2, GFLAGS),
+	COMPOSITE(CLK_GPLL_DIV6, "clk_gpll_div6", gpll_cpll_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(1), 11, 1, MFLAGS, 6, 5, DFLAGS,
+			RK3576_CLKGATE_CON(0), 3, GFLAGS),
+	COMPOSITE(CLK_CPLL_DIV4, "clk_cpll_div4", gpll_cpll_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(2), 5, 1, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(0), 4, GFLAGS),
+	COMPOSITE(CLK_GPLL_DIV4, "clk_gpll_div4", gpll_cpll_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(2), 11, 1, MFLAGS, 6, 5, DFLAGS,
+			RK3576_CLKGATE_CON(0), 5, GFLAGS),
+	COMPOSITE(CLK_SPLL_DIV2, "clk_spll_div2", gpll_cpll_spll_bpll_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(3), 5, 2, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(0), 6, GFLAGS),
+	COMPOSITE(CLK_GPLL_DIV3, "clk_gpll_div3", gpll_cpll_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(3), 12, 1, MFLAGS, 7, 5, DFLAGS,
+			RK3576_CLKGATE_CON(0), 7, GFLAGS),
+	COMPOSITE(CLK_CPLL_DIV2, "clk_cpll_div2", gpll_cpll_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(4), 11, 1, MFLAGS, 6, 5, DFLAGS,
+			RK3576_CLKGATE_CON(0), 9, GFLAGS),
+	COMPOSITE(CLK_GPLL_DIV2, "clk_gpll_div2", gpll_cpll_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(5), 5, 1, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(0), 10, GFLAGS),
+	COMPOSITE(CLK_SPLL_DIV1, "clk_spll_div1", gpll_cpll_spll_bpll_lpll_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(6), 5, 3, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(0), 12, GFLAGS),
+	COMPOSITE_NODIV(PCLK_TOP_ROOT, "pclk_top_root", mux_100m_50m_24m_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(8), 7, 2, MFLAGS,
+			RK3576_CLKGATE_CON(1), 1, GFLAGS),
+	COMPOSITE(ACLK_TOP, "aclk_top", gpll_cpll_aupll_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(9), 5, 2, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(1), 3, GFLAGS),
+	COMPOSITE(ACLK_TOP_MID, "aclk_top_mid", gpll_cpll_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(10), 5, 1, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(1), 6, GFLAGS),
+	COMPOSITE(ACLK_SECURE_HIGH, "aclk_secure_high", gpll_spll_aupll_bpll_lpll_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(10), 11, 3, MFLAGS, 6, 5, DFLAGS,
+			RK3576_CLKGATE_CON(1), 7, GFLAGS),
+	COMPOSITE_NODIV(HCLK_TOP, "hclk_top", mux_200m_100m_50m_24m_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(19), 2, 2, MFLAGS,
+			RK3576_CLKGATE_CON(1), 14, GFLAGS),
+	COMPOSITE_NODIV(HCLK_VO0VOP_CHANNEL, "hclk_vo0vop_channel", mux_200m_100m_50m_24m_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(19), 6, 2, MFLAGS,
+			RK3576_CLKGATE_CON(2), 0, GFLAGS),
+	COMPOSITE(ACLK_VO0VOP_CHANNEL, "aclk_vo0vop_channel", gpll_cpll_lpll_bpll_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(19), 12, 2, MFLAGS, 8, 4, DFLAGS,
+			RK3576_CLKGATE_CON(2), 1, GFLAGS),
+	MUX(CLK_AUDIO_FRAC_0_SRC, "clk_audio_frac_0_src", gpll_cpll_aupll_24m_p, 0,
+			RK3576_CLKSEL_CON(13), 0, 2, MFLAGS),
+	COMPOSITE_FRAC(CLK_AUDIO_FRAC_0, "clk_audio_frac_0", "clk_audio_frac_0_src", 0,
+			RK3576_CLKSEL_CON(12), 0,
+			RK3576_CLKGATE_CON(1), 10, GFLAGS),
+	MUX(CLK_AUDIO_FRAC_1_SRC, "clk_audio_frac_1_src", gpll_cpll_aupll_24m_p, 0,
+			RK3576_CLKSEL_CON(15), 0, 2, MFLAGS),
+	COMPOSITE_FRAC(CLK_AUDIO_FRAC_1, "clk_audio_frac_1", "clk_audio_frac_1_src", 0,
+			RK3576_CLKSEL_CON(14), 0,
+			RK3576_CLKGATE_CON(1), 11, GFLAGS),
+	MUX(CLK_AUDIO_FRAC_2_SRC, "clk_audio_frac_2_src", gpll_cpll_aupll_24m_p, 0,
+			RK3576_CLKSEL_CON(17), 0, 2, MFLAGS),
+	COMPOSITE_FRAC(CLK_AUDIO_FRAC_2, "clk_audio_frac_2", "clk_audio_frac_2_src", 0,
+			RK3576_CLKSEL_CON(16), 0,
+			RK3576_CLKGATE_CON(1), 12, GFLAGS),
+	MUX(CLK_AUDIO_FRAC_3_SRC, "clk_audio_frac_3_src", gpll_cpll_aupll_24m_p, 0,
+			RK3576_CLKSEL_CON(19), 0, 2, MFLAGS),
+	COMPOSITE_FRAC(CLK_AUDIO_FRAC_3, "clk_audio_frac_3", "clk_audio_frac_3_src", 0,
+			RK3576_CLKSEL_CON(18), 0,
+			RK3576_CLKGATE_CON(1), 13, GFLAGS),
+	MUX(0, "clk_uart_frac_0_src", gpll_cpll_aupll_24m_p, 0,
+			RK3576_CLKSEL_CON(22), 0, 2, MFLAGS),
+	COMPOSITE_FRAC(CLK_UART_FRAC_0, "clk_uart_frac_0", "clk_uart_frac_0_src", 0,
+			RK3576_CLKSEL_CON(21), 0,
+			RK3576_CLKGATE_CON(2), 5, GFLAGS),
+	MUX(0, "clk_uart_frac_1_src", gpll_cpll_aupll_24m_p, 0,
+			RK3576_CLKSEL_CON(24), 0, 2, MFLAGS),
+	COMPOSITE_FRAC(CLK_UART_FRAC_1, "clk_uart_frac_1", "clk_uart_frac_1_src", 0,
+			RK3576_CLKSEL_CON(23), 0,
+			RK3576_CLKGATE_CON(2), 6, GFLAGS),
+	MUX(0, "clk_uart_frac_2_src", gpll_cpll_aupll_24m_p, 0,
+			RK3576_CLKSEL_CON(26), 0, 2, MFLAGS),
+	COMPOSITE_FRAC(CLK_UART_FRAC_2, "clk_uart_frac_2", "clk_uart_frac_2_src", 0,
+			RK3576_CLKSEL_CON(25), 0,
+			RK3576_CLKGATE_CON(2), 7, GFLAGS),
+	COMPOSITE(CLK_UART1_SRC_TOP, "clk_uart1_src_top", clk_uart_p, 0,
+			RK3576_CLKSEL_CON(27), 13, 3, MFLAGS, 5, 8, DFLAGS,
+			RK3576_CLKGATE_CON(2), 13, GFLAGS),
+	COMPOSITE_NOMUX(CLK_AUDIO_INT_0, "clk_audio_int_0", "gpll", 0,
+			RK3576_CLKSEL_CON(28), 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(2), 14, GFLAGS),
+	COMPOSITE_NOMUX(CLK_AUDIO_INT_1, "clk_audio_int_1", "cpll", 0,
+			RK3576_CLKSEL_CON(28), 5, 5, DFLAGS,
+			RK3576_CLKGATE_CON(2), 15, GFLAGS),
+	COMPOSITE_NOMUX(CLK_AUDIO_INT_2, "clk_audio_int_2", "aupll", 0,
+			RK3576_CLKSEL_CON(28), 10, 5, DFLAGS,
+			RK3576_CLKGATE_CON(3), 0, GFLAGS),
+	COMPOSITE(CLK_PDM0_SRC_TOP, "clk_pdm0_src_top", audio_frac_int_p, 0,
+			RK3576_CLKSEL_CON(29), 9, 3, MFLAGS, 0, 9, DFLAGS,
+			RK3576_CLKGATE_CON(3), 2, GFLAGS),
+	COMPOSITE_NOMUX(CLK_GMAC0_125M_SRC, "clk_gmac0_125m_src", "cpll", 0,
+			RK3576_CLKSEL_CON(30), 10, 5, DFLAGS,
+			RK3576_CLKGATE_CON(3), 6, GFLAGS),
+	COMPOSITE_NOMUX(CLK_GMAC1_125M_SRC, "clk_gmac1_125m_src", "cpll", 0,
+			RK3576_CLKSEL_CON(31), 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(3), 7, GFLAGS),
+	COMPOSITE(LCLK_ASRC_SRC_0, "lclk_asrc_src_0", audio_frac_p, 0,
+			RK3576_CLKSEL_CON(31), 10, 2, MFLAGS, 5, 5, DFLAGS,
+			RK3576_CLKGATE_CON(3), 10, GFLAGS),
+	COMPOSITE(LCLK_ASRC_SRC_1, "lclk_asrc_src_1", audio_frac_p, 0,
+			RK3576_CLKSEL_CON(32), 5, 2, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(3), 11, GFLAGS),
+	COMPOSITE(REF_CLK0_OUT_PLL, "ref_clk0_out_pll", gpll_cpll_spll_aupll_lpll_24m_p, 0,
+			RK3576_CLKSEL_CON(33), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(4), 1, GFLAGS),
+	COMPOSITE(REF_CLK1_OUT_PLL, "ref_clk1_out_pll", gpll_cpll_spll_aupll_lpll_24m_p, 0,
+			RK3576_CLKSEL_CON(34), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(4), 2, GFLAGS),
+	COMPOSITE(REF_CLK2_OUT_PLL, "ref_clk2_out_pll", gpll_cpll_spll_aupll_lpll_24m_p, 0,
+			RK3576_CLKSEL_CON(35), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(4), 3, GFLAGS),
+	COMPOSITE(REFCLKO25M_GMAC0_OUT, "refclko25m_gmac0_out", gpll_cpll_p, 0,
+			RK3576_CLKSEL_CON(36), 7, 1, MFLAGS, 0, 7, DFLAGS,
+			RK3576_CLKGATE_CON(5), 10, GFLAGS),
+	COMPOSITE(REFCLKO25M_GMAC1_OUT, "refclko25m_gmac1_out", gpll_cpll_p, 0,
+			RK3576_CLKSEL_CON(36), 15, 1, MFLAGS, 8, 7, DFLAGS,
+			RK3576_CLKGATE_CON(5), 11, GFLAGS),
+	COMPOSITE(CLK_CIFOUT_OUT, "clk_cifout_out", gpll_cpll_24m_spll_p, 0,
+			RK3576_CLKSEL_CON(37), 8, 2, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(5), 12, GFLAGS),
+	GATE(CLK_GMAC0_RMII_CRU, "clk_gmac0_rmii_cru", "clk_cpll_div20", 0,
+			RK3576_CLKGATE_CON(5), 13, GFLAGS),
+	GATE(CLK_GMAC1_RMII_CRU, "clk_gmac1_rmii_cru", "clk_cpll_div20", 0,
+			RK3576_CLKGATE_CON(5), 14, GFLAGS),
+	GATE(CLK_OTPC_AUTO_RD_G, "clk_otpc_auto_rd_g", "xin24m", 0,
+			RK3576_CLKGATE_CON(5), 15, GFLAGS),
+	COMPOSITE(CLK_MIPI_CAMERAOUT_M0, "clk_mipi_cameraout_m0", mux_24m_spll_gpll_cpll_p, 0,
+			RK3576_CLKSEL_CON(38), 8, 2, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(6), 3, GFLAGS),
+	COMPOSITE(CLK_MIPI_CAMERAOUT_M1, "clk_mipi_cameraout_m1", mux_24m_spll_gpll_cpll_p, 0,
+			RK3576_CLKSEL_CON(39), 8, 2, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(6), 4, GFLAGS),
+	COMPOSITE(CLK_MIPI_CAMERAOUT_M2, "clk_mipi_cameraout_m2", mux_24m_spll_gpll_cpll_p, 0,
+			RK3576_CLKSEL_CON(40), 8, 2, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(6), 5, GFLAGS),
+	COMPOSITE(MCLK_PDM0_SRC_TOP, "mclk_pdm0_src_top", audio_frac_int_p, 0,
+			RK3576_CLKSEL_CON(41), 7, 3, MFLAGS, 2, 5, DFLAGS,
+			RK3576_CLKGATE_CON(6), 8, GFLAGS),
+
+	/* bus */
+	COMPOSITE_NODIV(HCLK_BUS_ROOT, "hclk_bus_root", mux_200m_100m_50m_24m_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(55), 0, 2, MFLAGS,
+			RK3576_CLKGATE_CON(11), 0, GFLAGS),
+	COMPOSITE_NODIV(PCLK_BUS_ROOT, "pclk_bus_root", mux_100m_50m_24m_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(55), 2, 2, MFLAGS,
+			RK3576_CLKGATE_CON(11), 1, GFLAGS),
+	COMPOSITE(ACLK_BUS_ROOT, "aclk_bus_root", gpll_cpll_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(55), 9, 1, MFLAGS, 4, 5, DFLAGS,
+			RK3576_CLKGATE_CON(11), 2, GFLAGS),
+	GATE(HCLK_CAN0, "hclk_can0", "hclk_bus_root", 0,
+			RK3576_CLKGATE_CON(11), 6, GFLAGS),
+	COMPOSITE(CLK_CAN0, "clk_can0", gpll_cpll_24m_p, 0,
+			RK3576_CLKSEL_CON(56), 5, 2, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(11), 7, GFLAGS),
+	GATE(HCLK_CAN1, "hclk_can1", "hclk_bus_root", 0,
+			RK3576_CLKGATE_CON(11), 8, GFLAGS),
+	COMPOSITE(CLK_CAN1, "clk_can1", gpll_cpll_24m_p, 0,
+			RK3576_CLKSEL_CON(56), 12, 2, MFLAGS, 7, 5, DFLAGS,
+			RK3576_CLKGATE_CON(11), 9, GFLAGS),
+	GATE(CLK_KEY_SHIFT, "clk_key_shift", "xin24m", CLK_IS_CRITICAL,
+			RK3576_CLKGATE_CON(11), 15, GFLAGS),
+	GATE(PCLK_I2C1, "pclk_i2c1", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(12), 0, GFLAGS),
+	GATE(PCLK_I2C2, "pclk_i2c2", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(12), 1, GFLAGS),
+	GATE(PCLK_I2C3, "pclk_i2c3", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(12), 2, GFLAGS),
+	GATE(PCLK_I2C4, "pclk_i2c4", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(12), 3, GFLAGS),
+	GATE(PCLK_I2C5, "pclk_i2c5", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(12), 4, GFLAGS),
+	GATE(PCLK_I2C6, "pclk_i2c6", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(12), 5, GFLAGS),
+	GATE(PCLK_I2C7, "pclk_i2c7", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(12), 6, GFLAGS),
+	GATE(PCLK_I2C8, "pclk_i2c8", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(12), 7, GFLAGS),
+	GATE(PCLK_I2C9, "pclk_i2c9", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(12), 8, GFLAGS),
+	GATE(PCLK_WDT_BUSMCU, "pclk_wdt_busmcu", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(12), 9, GFLAGS),
+	GATE(TCLK_WDT_BUSMCU, "tclk_wdt_busmcu", "xin24m", 0,
+			RK3576_CLKGATE_CON(12), 10, GFLAGS),
+	GATE(ACLK_GIC, "aclk_gic", "aclk_bus_root", CLK_IS_CRITICAL,
+			RK3576_CLKGATE_CON(12), 11, GFLAGS),
+	COMPOSITE_NODIV(CLK_I2C1, "clk_i2c1", mux_200m_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(57), 0, 2, MFLAGS,
+			RK3576_CLKGATE_CON(12), 12, GFLAGS),
+	COMPOSITE_NODIV(CLK_I2C2, "clk_i2c2", mux_200m_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(57), 2, 2, MFLAGS,
+			RK3576_CLKGATE_CON(12), 13, GFLAGS),
+	COMPOSITE_NODIV(CLK_I2C3, "clk_i2c3", mux_200m_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(57), 4, 2, MFLAGS,
+			RK3576_CLKGATE_CON(12), 14, GFLAGS),
+	COMPOSITE_NODIV(CLK_I2C4, "clk_i2c4", mux_200m_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(57), 6, 2, MFLAGS,
+			RK3576_CLKGATE_CON(12), 15, GFLAGS),
+	COMPOSITE_NODIV(CLK_I2C5, "clk_i2c5", mux_200m_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(57), 8, 2, MFLAGS,
+			RK3576_CLKGATE_CON(13), 0, GFLAGS),
+	COMPOSITE_NODIV(CLK_I2C6, "clk_i2c6", mux_200m_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(57), 10, 2, MFLAGS,
+			RK3576_CLKGATE_CON(13), 1, GFLAGS),
+	COMPOSITE_NODIV(CLK_I2C7, "clk_i2c7", mux_200m_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(57), 12, 2, MFLAGS,
+			RK3576_CLKGATE_CON(13), 2, GFLAGS),
+	COMPOSITE_NODIV(CLK_I2C8, "clk_i2c8", mux_200m_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(57), 14, 2, MFLAGS,
+			RK3576_CLKGATE_CON(13), 3, GFLAGS),
+	COMPOSITE_NODIV(CLK_I2C9, "clk_i2c9", mux_200m_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(58), 0, 2, MFLAGS,
+			RK3576_CLKGATE_CON(13), 4, GFLAGS),
+	GATE(PCLK_SARADC, "pclk_saradc", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(13), 6, GFLAGS),
+	COMPOSITE(CLK_SARADC, "clk_saradc", gpll_24m_p, 0,
+			RK3576_CLKSEL_CON(58), 12, 1, MFLAGS, 4, 8, DFLAGS,
+			RK3576_CLKGATE_CON(13), 7, GFLAGS),
+	GATE(PCLK_TSADC, "pclk_tsadc", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(13), 8, GFLAGS),
+	COMPOSITE_NOMUX(CLK_TSADC, "clk_tsadc", "xin24m", 0,
+			RK3576_CLKSEL_CON(59), 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(13), 9, GFLAGS),
+	GATE(PCLK_UART0, "pclk_uart0", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(13), 10, GFLAGS),
+	GATE(PCLK_UART2, "pclk_uart2", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(13), 11, GFLAGS),
+	GATE(PCLK_UART3, "pclk_uart3", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(13), 12, GFLAGS),
+	GATE(PCLK_UART4, "pclk_uart4", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(13), 13, GFLAGS),
+	GATE(PCLK_UART5, "pclk_uart5", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(13), 14, GFLAGS),
+	GATE(PCLK_UART6, "pclk_uart6", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(13), 15, GFLAGS),
+	GATE(PCLK_UART7, "pclk_uart7", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(14), 0, GFLAGS),
+	GATE(PCLK_UART8, "pclk_uart8", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(14), 1, GFLAGS),
+	GATE(PCLK_UART9, "pclk_uart9", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(14), 2, GFLAGS),
+	GATE(PCLK_UART10, "pclk_uart10", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(14), 3, GFLAGS),
+	GATE(PCLK_UART11, "pclk_uart11", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(14), 4, GFLAGS),
+	COMPOSITE(SCLK_UART0, "sclk_uart0", clk_uart_p, 0,
+			RK3576_CLKSEL_CON(60), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(14), 5, GFLAGS),
+	COMPOSITE(SCLK_UART2, "sclk_uart2", clk_uart_p, 0,
+			RK3576_CLKSEL_CON(61), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(14), 6, GFLAGS),
+	COMPOSITE(SCLK_UART3, "sclk_uart3", clk_uart_p, 0,
+			RK3576_CLKSEL_CON(62), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(14), 9, GFLAGS),
+	COMPOSITE(SCLK_UART4, "sclk_uart4", clk_uart_p, 0,
+			RK3576_CLKSEL_CON(63), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(14), 12, GFLAGS),
+	COMPOSITE(SCLK_UART5, "sclk_uart5", clk_uart_p, 0,
+			RK3576_CLKSEL_CON(64), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(14), 15, GFLAGS),
+	COMPOSITE(SCLK_UART6, "sclk_uart6", clk_uart_p, 0,
+			RK3576_CLKSEL_CON(65), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(15), 2, GFLAGS),
+	COMPOSITE(SCLK_UART7, "sclk_uart7", clk_uart_p, 0,
+			RK3576_CLKSEL_CON(66), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(15), 5, GFLAGS),
+	COMPOSITE(SCLK_UART8, "sclk_uart8", clk_uart_p, 0,
+			RK3576_CLKSEL_CON(67), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(15), 8, GFLAGS),
+	COMPOSITE(SCLK_UART9, "sclk_uart9", clk_uart_p, 0,
+			RK3576_CLKSEL_CON(68), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(15), 9, GFLAGS),
+	COMPOSITE(SCLK_UART10, "sclk_uart10", clk_uart_p, 0,
+			RK3576_CLKSEL_CON(69), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(15), 10, GFLAGS),
+	COMPOSITE(SCLK_UART11, "sclk_uart11", clk_uart_p, 0,
+			RK3576_CLKSEL_CON(70), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(15), 11, GFLAGS),
+	GATE(PCLK_SPI0, "pclk_spi0", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(15), 13, GFLAGS),
+	GATE(PCLK_SPI1, "pclk_spi1", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(15), 14, GFLAGS),
+	GATE(PCLK_SPI2, "pclk_spi2", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(15), 15, GFLAGS),
+	GATE(PCLK_SPI3, "pclk_spi3", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(16), 0, GFLAGS),
+	GATE(PCLK_SPI4, "pclk_spi4", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(16), 1, GFLAGS),
+	COMPOSITE_NODIV(CLK_SPI0, "clk_spi0", mux_200m_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(70), 13, 2, MFLAGS,
+			RK3576_CLKGATE_CON(16), 2, GFLAGS),
+	COMPOSITE_NODIV(CLK_SPI1, "clk_spi1", mux_200m_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(71), 0, 2, MFLAGS,
+			RK3576_CLKGATE_CON(16), 3, GFLAGS),
+	COMPOSITE_NODIV(CLK_SPI2, "clk_spi2", mux_200m_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(71), 2, 2, MFLAGS,
+			RK3576_CLKGATE_CON(16), 4, GFLAGS),
+	COMPOSITE_NODIV(CLK_SPI3, "clk_spi3", mux_200m_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(71), 4, 2, MFLAGS,
+			RK3576_CLKGATE_CON(16), 5, GFLAGS),
+	COMPOSITE_NODIV(CLK_SPI4, "clk_spi4", mux_200m_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(71), 6, 2, MFLAGS,
+			RK3576_CLKGATE_CON(16), 6, GFLAGS),
+	GATE(PCLK_WDT0, "pclk_wdt0", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(16), 7, GFLAGS),
+	GATE(TCLK_WDT0, "tclk_wdt0", "xin24m", 0,
+			RK3576_CLKGATE_CON(16), 8, GFLAGS),
+	GATE(PCLK_PWM1, "pclk_pwm1", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(16), 10, GFLAGS),
+	COMPOSITE_NODIV(CLK_PWM1, "clk_pwm1", mux_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(71), 8, 2, MFLAGS,
+			RK3576_CLKGATE_CON(16), 11, GFLAGS),
+	GATE(CLK_OSC_PWM1, "clk_osc_pwm1", "xin24m", 0,
+			RK3576_CLKGATE_CON(16), 13, GFLAGS),
+	GATE(CLK_RC_PWM1, "clk_rc_pwm1", "clk_pvtm_clkout", 0,
+			RK3576_CLKGATE_CON(16), 15, GFLAGS),
+	GATE(PCLK_BUSTIMER0, "pclk_bustimer0", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(17), 3, GFLAGS),
+	GATE(PCLK_BUSTIMER1, "pclk_bustimer1", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(17), 4, GFLAGS),
+	COMPOSITE_NODIV(CLK_TIMER0_ROOT, "clk_timer0_root", mux_100m_24m_p, 0,
+			RK3576_CLKSEL_CON(71), 14, 1, MFLAGS,
+			RK3576_CLKGATE_CON(17), 5, GFLAGS),
+	GATE(CLK_TIMER0, "clk_timer0", "clk_timer0_root", 0,
+			RK3576_CLKGATE_CON(17), 6, GFLAGS),
+	GATE(CLK_TIMER1, "clk_timer1", "clk_timer0_root", 0,
+			RK3576_CLKGATE_CON(17), 7, GFLAGS),
+	GATE(CLK_TIMER2, "clk_timer2", "clk_timer0_root", 0,
+			RK3576_CLKGATE_CON(17), 8, GFLAGS),
+	GATE(CLK_TIMER3, "clk_timer3", "clk_timer0_root", 0,
+			RK3576_CLKGATE_CON(17), 9, GFLAGS),
+	GATE(CLK_TIMER4, "clk_timer4", "clk_timer0_root", 0,
+			RK3576_CLKGATE_CON(17), 10, GFLAGS),
+	GATE(CLK_TIMER5, "clk_timer5", "clk_timer0_root", 0,
+			RK3576_CLKGATE_CON(17), 11, GFLAGS),
+	GATE(PCLK_MAILBOX0, "pclk_mailbox0", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(17), 13, GFLAGS),
+	GATE(PCLK_GPIO1, "pclk_gpio1", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(17), 15, GFLAGS),
+	GATE(DBCLK_GPIO1, "dbclk_gpio1", "xin24m", 0,
+			RK3576_CLKGATE_CON(18), 0, GFLAGS),
+	GATE(PCLK_GPIO2, "pclk_gpio2", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(18), 1, GFLAGS),
+	GATE(DBCLK_GPIO2, "dbclk_gpio2", "xin24m", 0,
+			RK3576_CLKGATE_CON(18), 2, GFLAGS),
+	GATE(PCLK_GPIO3, "pclk_gpio3", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(18), 3, GFLAGS),
+	GATE(DBCLK_GPIO3, "dbclk_gpio3", "xin24m", 0,
+			RK3576_CLKGATE_CON(18), 4, GFLAGS),
+	GATE(PCLK_GPIO4, "pclk_gpio4", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(18), 5, GFLAGS),
+	GATE(DBCLK_GPIO4, "dbclk_gpio4", "xin24m", 0,
+			RK3576_CLKGATE_CON(18), 6, GFLAGS),
+	GATE(ACLK_DECOM, "aclk_decom", "aclk_bus_root", 0,
+			RK3576_CLKGATE_CON(18), 7, GFLAGS),
+	GATE(PCLK_DECOM, "pclk_decom", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(18), 8, GFLAGS),
+	COMPOSITE(DCLK_DECOM, "dclk_decom", gpll_spll_p, 0,
+			RK3576_CLKSEL_CON(72), 5, 1, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(18), 9, GFLAGS),
+	COMPOSITE_NODIV(CLK_TIMER1_ROOT, "clk_timer1_root", mux_100m_24m_p, 0,
+			RK3576_CLKSEL_CON(72), 6, 1, MFLAGS,
+			RK3576_CLKGATE_CON(18), 10, GFLAGS),
+	GATE(CLK_TIMER6, "clk_timer6", "clk_timer1_root", 0,
+			RK3576_CLKGATE_CON(18), 11, GFLAGS),
+	COMPOSITE(CLK_TIMER7, "clk_timer7", mux_100m_24m_lclk0_p, 0,
+			RK3576_CLKSEL_CON(72), 12, 2, MFLAGS, 7, 5, DFLAGS,
+			RK3576_CLKGATE_CON(18), 12, GFLAGS),
+	COMPOSITE(CLK_TIMER8, "clk_timer8", mux_100m_24m_lclk1_p, 0,
+			RK3576_CLKSEL_CON(73), 5, 2, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(18), 13, GFLAGS),
+	GATE(CLK_TIMER9, "clk_timer9", "clk_timer1_root", 0,
+			RK3576_CLKGATE_CON(18), 14, GFLAGS),
+	GATE(CLK_TIMER10, "clk_timer10", "clk_timer1_root", 0,
+			RK3576_CLKGATE_CON(18), 15, GFLAGS),
+	GATE(CLK_TIMER11, "clk_timer11", "clk_timer1_root", 0,
+			RK3576_CLKGATE_CON(19), 0, GFLAGS),
+	GATE(ACLK_DMAC0, "aclk_dmac0", "aclk_bus_root", 0,
+			RK3576_CLKGATE_CON(19), 1, GFLAGS),
+	GATE(ACLK_DMAC1, "aclk_dmac1", "aclk_bus_root", 0,
+			RK3576_CLKGATE_CON(19), 2, GFLAGS),
+	GATE(ACLK_DMAC2, "aclk_dmac2", "aclk_bus_root", 0,
+			RK3576_CLKGATE_CON(19), 3, GFLAGS),
+	GATE(ACLK_SPINLOCK, "aclk_spinlock", "aclk_bus_root", 0,
+			RK3576_CLKGATE_CON(19), 4, GFLAGS),
+	GATE(HCLK_I3C0, "hclk_i3c0", "hclk_bus_root", 0,
+			RK3576_CLKGATE_CON(19), 7, GFLAGS),
+	GATE(HCLK_I3C1, "hclk_i3c1", "hclk_bus_root", 0,
+			RK3576_CLKGATE_CON(19), 9, GFLAGS),
+	COMPOSITE_NODIV(HCLK_BUS_CM0_ROOT, "hclk_bus_cm0_root", mux_400m_200m_100m_24m_p, 0,
+			RK3576_CLKSEL_CON(73), 13, 2, MFLAGS,
+			RK3576_CLKGATE_CON(19), 10, GFLAGS),
+	GATE(FCLK_BUS_CM0_CORE, "fclk_bus_cm0_core", "hclk_bus_cm0_root", 0,
+			RK3576_CLKGATE_CON(19), 12, GFLAGS),
+	COMPOSITE(CLK_BUS_CM0_RTC, "clk_bus_cm0_rtc", mux_24m_32k_p, 0,
+			RK3576_CLKSEL_CON(74), 5, 1, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(19), 14, GFLAGS),
+	GATE(PCLK_PMU2, "pclk_pmu2", "pclk_bus_root", CLK_IS_CRITICAL,
+			RK3576_CLKGATE_CON(19), 15, GFLAGS),
+	GATE(PCLK_PWM2, "pclk_pwm2", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(20), 4, GFLAGS),
+	COMPOSITE_NODIV(CLK_PWM2, "clk_pwm2", mux_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(74), 6, 2, MFLAGS,
+			RK3576_CLKGATE_CON(20), 5, GFLAGS),
+	GATE(CLK_OSC_PWM2, "clk_osc_pwm2", "xin24m", 0,
+			RK3576_CLKGATE_CON(20), 7, GFLAGS),
+	GATE(CLK_RC_PWM2, "clk_rc_pwm2", "clk_pvtm_clkout", 0,
+			RK3576_CLKGATE_CON(20), 6, GFLAGS),
+	COMPOSITE_NODIV(CLK_FREQ_PWM1, "clk_freq_pwm1", clk_freq_pwm1_p, 0,
+			RK3576_CLKSEL_CON(74), 8, 3, MFLAGS,
+			RK3576_CLKGATE_CON(20), 8, GFLAGS),
+	COMPOSITE_NODIV(CLK_COUNTER_PWM1, "clk_counter_pwm1", clk_counter_pwm1_p, 0,
+			RK3576_CLKSEL_CON(74), 11, 3, MFLAGS,
+			RK3576_CLKGATE_CON(20), 9, GFLAGS),
+	COMPOSITE_NODIV(SAI_SCLKIN_FREQ, "sai_sclkin_freq", sai_sclkin_freq_p, 0,
+			RK3576_CLKSEL_CON(75), 0, 3, MFLAGS,
+			RK3576_CLKGATE_CON(20), 10, GFLAGS),
+	COMPOSITE_NODIV(SAI_SCLKIN_COUNTER, "sai_sclkin_counter", sai_sclkin_freq_p, 0,
+			RK3576_CLKSEL_CON(75), 3, 3, MFLAGS,
+			RK3576_CLKGATE_CON(20), 11, GFLAGS),
+	COMPOSITE(CLK_I3C0, "clk_i3c0", gpll_cpll_aupll_spll_p, 0,
+			RK3576_CLKSEL_CON(78), 5, 2, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(20), 12, GFLAGS),
+	COMPOSITE(CLK_I3C1, "clk_i3c1", gpll_cpll_aupll_spll_p, 0,
+			RK3576_CLKSEL_CON(78), 12, 2, MFLAGS, 7, 5, DFLAGS,
+			RK3576_CLKGATE_CON(20), 13, GFLAGS),
+	GATE(PCLK_CSIDPHY1, "pclk_csidphy1", "pclk_bus_root", 0,
+			RK3576_CLKGATE_CON(40), 2, GFLAGS),
+
+	/* cci */
+	COMPOSITE(PCLK_CCI_ROOT, "pclk_cci_root", mux_24m_ccipvtpll_gpll_lpll_p, CLK_IS_CRITICAL,
+			RK3576_CCI_CLKSEL_CON(4), 5, 2, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CCI_CLKGATE_CON(1), 10, GFLAGS),
+	COMPOSITE(ACLK_CCI_ROOT, "aclk_cci_root", mux_24m_ccipvtpll_gpll_lpll_p, CLK_IS_CRITICAL,
+			RK3576_CCI_CLKSEL_CON(4), 12, 2, MFLAGS, 7, 5, DFLAGS,
+			RK3576_CCI_CLKGATE_CON(1), 11, GFLAGS),
+
+	/* center */
+	COMPOSITE_DIV_OFFSET(ACLK_CENTER_ROOT, "aclk_center_root", gpll_cpll_spll_aupll_bpll_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(168), 5, 3, MFLAGS,
+			RK3576_CLKSEL_CON(167), 9, 5, DFLAGS,
+			RK3576_CLKGATE_CON(72), 0, GFLAGS),
+	COMPOSITE_NODIV(ACLK_CENTER_LOW_ROOT, "aclk_center_low_root", mux_500m_250m_100m_24m_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(168), 8, 2, MFLAGS,
+			RK3576_CLKGATE_CON(72), 1, GFLAGS),
+	COMPOSITE_NODIV(HCLK_CENTER_ROOT, "hclk_center_root", mux_200m_100m_50m_24m_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(168), 10, 2, MFLAGS,
+			RK3576_CLKGATE_CON(72), 2, GFLAGS),
+	COMPOSITE_NODIV(PCLK_CENTER_ROOT, "pclk_center_root", mux_200m_100m_50m_24m_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(168), 12, 2, MFLAGS,
+			RK3576_CLKGATE_CON(72), 3, GFLAGS),
+	GATE(ACLK_DMA2DDR, "aclk_dma2ddr", "aclk_center_root", CLK_IGNORE_UNUSED,
+			RK3576_CLKGATE_CON(72), 5, GFLAGS),
+	GATE(ACLK_DDR_SHAREMEM, "aclk_ddr_sharemem", "aclk_center_low_root", CLK_IGNORE_UNUSED,
+			RK3576_CLKGATE_CON(72), 6, GFLAGS),
+	GATE(PCLK_DMA2DDR, "pclk_dma2ddr", "pclk_center_root", CLK_IGNORE_UNUSED,
+			RK3576_CLKGATE_CON(72), 10, GFLAGS),
+	GATE(PCLK_SHAREMEM, "pclk_sharemem", "pclk_center_root", CLK_IGNORE_UNUSED,
+			RK3576_CLKGATE_CON(72), 11, GFLAGS),
+
+	/* ddr */
+	COMPOSITE(PCLK_DDR_ROOT, "pclk_ddr_root", gpll_cpll_24m_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(76), 5, 2, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(21), 0, GFLAGS),
+	GATE(PCLK_DDR_MON_CH0, "pclk_ddr_mon_ch0", "pclk_ddr_root", CLK_IGNORE_UNUSED,
+			RK3576_CLKGATE_CON(21), 1, GFLAGS),
+	COMPOSITE(HCLK_DDR_ROOT, "hclk_ddr_root", gpll_cpll_p, CLK_IGNORE_UNUSED,
+			RK3576_CLKSEL_CON(77), 5, 1, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(22), 11, GFLAGS),
+	GATE(FCLK_DDR_CM0_CORE, "fclk_ddr_cm0_core", "hclk_ddr_root", CLK_IS_CRITICAL,
+			RK3576_CLKGATE_CON(22), 15, GFLAGS),
+	COMPOSITE_NODIV(CLK_DDR_TIMER_ROOT, "clk_ddr_timer_root", mux_100m_24m_p, 0,
+			RK3576_CLKSEL_CON(77), 6, 1, MFLAGS,
+			RK3576_CLKGATE_CON(23), 3, GFLAGS),
+	GATE(CLK_DDR_TIMER0, "clk_ddr_timer0", "clk_ddr_timer_root", 0,
+			RK3576_CLKGATE_CON(23), 4, GFLAGS),
+	GATE(CLK_DDR_TIMER1, "clk_ddr_timer1", "clk_ddr_timer_root", 0,
+			RK3576_CLKGATE_CON(23), 5, GFLAGS),
+	GATE(TCLK_WDT_DDR, "tclk_wdt_ddr", "xin24m", 0,
+			RK3576_CLKGATE_CON(23), 6, GFLAGS),
+	GATE(PCLK_WDT, "pclk_wdt", "pclk_ddr_root", 0,
+			RK3576_CLKGATE_CON(23), 7, GFLAGS),
+	GATE(PCLK_TIMER, "pclk_timer", "pclk_ddr_root", 0,
+			RK3576_CLKGATE_CON(23), 8, GFLAGS),
+	COMPOSITE(CLK_DDR_CM0_RTC, "clk_ddr_cm0_rtc", mux_24m_32k_p, 0,
+			RK3576_CLKSEL_CON(77), 12, 1, MFLAGS, 7, 5, DFLAGS,
+			RK3576_CLKGATE_CON(23), 10, GFLAGS),
+
+	/* gpu */
+	COMPOSITE(CLK_GPU_SRC_PRE, "clk_gpu_src_pre", gpll_cpll_aupll_spll_lpll_p, 0,
+			RK3576_CLKSEL_CON(165), 5, 3, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(69), 1, GFLAGS),
+	GATE(CLK_GPU, "clk_gpu", "clk_gpu_src_pre", 0,
+			RK3576_CLKGATE_CON(69), 3, GFLAGS),
+	COMPOSITE_NODIV(PCLK_GPU_ROOT, "pclk_gpu_root", mux_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(166), 10, 2, MFLAGS,
+			RK3576_CLKGATE_CON(69), 8, GFLAGS),
+
+	/* npu */
+	COMPOSITE_NODIV(HCLK_RKNN_ROOT, "hclk_rknn_root", mux_200m_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(86), 0, 2, MFLAGS,
+			RK3576_CLKGATE_CON(31), 4, GFLAGS),
+	COMPOSITE(CLK_RKNN_DSU0, "clk_rknn_dsu0", gpll_cpll_aupll_spll_p, 0,
+			RK3576_CLKSEL_CON(86), 7, 2, MFLAGS, 2, 5, DFLAGS,
+			RK3576_CLKGATE_CON(31), 5, GFLAGS),
+	GATE(ACLK_RKNN0, "aclk_rknn0", "clk_rknn_dsu0", 0,
+			RK3576_CLKGATE_CON(28), 9, GFLAGS),
+	GATE(ACLK_RKNN1, "aclk_rknn1", "clk_rknn_dsu0", 0,
+			RK3576_CLKGATE_CON(29), 0, GFLAGS),
+	COMPOSITE_NODIV(PCLK_NPUTOP_ROOT, "pclk_nputop_root", mux_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(87), 0, 2, MFLAGS,
+			RK3576_CLKGATE_CON(31), 8, GFLAGS),
+	GATE(PCLK_NPU_TIMER, "pclk_npu_timer", "pclk_nputop_root", 0,
+			RK3576_CLKGATE_CON(31), 10, GFLAGS),
+	COMPOSITE_NODIV(CLK_NPUTIMER_ROOT, "clk_nputimer_root", mux_100m_24m_p, 0,
+			RK3576_CLKSEL_CON(87), 2, 1, MFLAGS,
+			RK3576_CLKGATE_CON(31), 11, GFLAGS),
+	GATE(CLK_NPUTIMER0, "clk_nputimer0", "clk_nputimer_root", 0,
+			RK3576_CLKGATE_CON(31), 12, GFLAGS),
+	GATE(CLK_NPUTIMER1, "clk_nputimer1", "clk_nputimer_root", 0,
+			RK3576_CLKGATE_CON(31), 13, GFLAGS),
+	GATE(PCLK_NPU_WDT, "pclk_npu_wdt", "pclk_nputop_root", 0,
+			RK3576_CLKGATE_CON(31), 14, GFLAGS),
+	GATE(TCLK_NPU_WDT, "tclk_npu_wdt", "xin24m", 0,
+			RK3576_CLKGATE_CON(31), 15, GFLAGS),
+	GATE(ACLK_RKNN_CBUF, "aclk_rknn_cbuf", "clk_rknn_dsu0", 0,
+			RK3576_CLKGATE_CON(32), 0, GFLAGS),
+	COMPOSITE_NODIV(HCLK_NPU_CM0_ROOT, "hclk_npu_cm0_root", mux_400m_200m_100m_24m_p, 0,
+			RK3576_CLKSEL_CON(87), 3, 2, MFLAGS,
+			RK3576_CLKGATE_CON(32), 5, GFLAGS),
+	GATE(FCLK_NPU_CM0_CORE, "fclk_npu_cm0_core", "hclk_npu_cm0_root", 0,
+			RK3576_CLKGATE_CON(32), 7, GFLAGS),
+	COMPOSITE(CLK_NPU_CM0_RTC, "clk_npu_cm0_rtc", mux_24m_32k_p, 0,
+			RK3576_CLKSEL_CON(87), 10, 1, MFLAGS, 5, 5, DFLAGS,
+			RK3576_CLKGATE_CON(32), 9, GFLAGS),
+	GATE(HCLK_RKNN_CBUF, "hclk_rknn_cbuf", "hclk_rknn_root", 0,
+			RK3576_CLKGATE_CON(32), 12, GFLAGS),
+
+	/* nvm */
+	COMPOSITE_NODIV(HCLK_NVM_ROOT, "hclk_nvm_root", mux_200m_100m_50m_24m_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(88), 0, 2, MFLAGS,
+			RK3576_CLKGATE_CON(33), 0, GFLAGS),
+	COMPOSITE(ACLK_NVM_ROOT, "aclk_nvm_root", gpll_cpll_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(88), 7, 1, MFLAGS, 2, 5, DFLAGS,
+			RK3576_CLKGATE_CON(33), 1, GFLAGS),
+	COMPOSITE(SCLK_FSPI_X2, "sclk_fspi_x2", gpll_cpll_24m_p, 0,
+			RK3576_CLKSEL_CON(89), 6, 2, MFLAGS, 0, 6, DFLAGS,
+			RK3576_CLKGATE_CON(33), 6, GFLAGS),
+	GATE(HCLK_FSPI, "hclk_fspi", "hclk_nvm_root", 0,
+			RK3576_CLKGATE_CON(33), 7, GFLAGS),
+	COMPOSITE(CCLK_SRC_EMMC, "cclk_src_emmc", gpll_cpll_24m_p, 0,
+			RK3576_CLKSEL_CON(89), 14, 2, MFLAGS, 8, 6, DFLAGS,
+			RK3576_CLKGATE_CON(33), 8, GFLAGS),
+	GATE(HCLK_EMMC, "hclk_emmc", "hclk_nvm_root", 0,
+			RK3576_CLKGATE_CON(33), 9, GFLAGS),
+	GATE(ACLK_EMMC, "aclk_emmc", "aclk_nvm_root", 0,
+			RK3576_CLKGATE_CON(33), 10, GFLAGS),
+	COMPOSITE_NODIV(BCLK_EMMC, "bclk_emmc", mux_200m_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(90), 0, 2, MFLAGS,
+			RK3576_CLKGATE_CON(33), 11, GFLAGS),
+	GATE(TCLK_EMMC, "tclk_emmc", "xin24m", 0,
+			RK3576_CLKGATE_CON(33), 12, GFLAGS),
+
+	/* usb */
+	COMPOSITE(ACLK_UFS_ROOT, "aclk_ufs_root", gpll_cpll_p, 0,
+			RK3576_CLKSEL_CON(115), 5, 1, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(47), 0, GFLAGS),
+	COMPOSITE(ACLK_USB_ROOT, "aclk_usb_root", gpll_cpll_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(115), 11, 1, MFLAGS, 6, 5, DFLAGS,
+			RK3576_CLKGATE_CON(47), 1, GFLAGS),
+	COMPOSITE_NODIV(PCLK_USB_ROOT, "pclk_usb_root", mux_100m_50m_24m_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(115), 12, 2, MFLAGS,
+			RK3576_CLKGATE_CON(47), 2, GFLAGS),
+	GATE(ACLK_USB3OTG0, "aclk_usb3otg0", "aclk_usb_root", 0,
+			RK3576_CLKGATE_CON(47), 5, GFLAGS),
+	GATE(CLK_REF_USB3OTG0, "clk_ref_usb3otg0", "xin24m", 0,
+			RK3576_CLKGATE_CON(47), 6, GFLAGS),
+	GATE(CLK_SUSPEND_USB3OTG0, "clk_suspend_usb3otg0", "xin24m", 0,
+			RK3576_CLKGATE_CON(47), 7, GFLAGS),
+	GATE(ACLK_MMU2, "aclk_mmu2", "aclk_usb_root", 0,
+			RK3576_CLKGATE_CON(47), 12, GFLAGS),
+	GATE(ACLK_SLV_MMU2, "aclk_slv_mmu2", "aclk_usb_root", 0,
+			RK3576_CLKGATE_CON(47), 13, GFLAGS),
+	GATE(ACLK_UFS_SYS, "aclk_ufs_sys", "aclk_ufs_root", 0,
+			RK3576_CLKGATE_CON(47), 15, GFLAGS),
+
+	/* vdec */
+	COMPOSITE_NODIV(HCLK_RKVDEC_ROOT, "hclk_rkvdec_root", mux_200m_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(110), 0, 2, MFLAGS,
+			RK3576_CLKGATE_CON(45), 0, GFLAGS),
+	COMPOSITE(ACLK_RKVDEC_ROOT, "aclk_rkvdec_root", gpll_cpll_aupll_spll_p, 0,
+			RK3576_CLKSEL_CON(110), 7, 2, MFLAGS, 2, 5, DFLAGS,
+			RK3576_CLKGATE_CON(45), 1, GFLAGS),
+	COMPOSITE(ACLK_RKVDEC_ROOT_BAK, "aclk_rkvdec_root_bak", cpll_vpll_lpll_bpll_p, 0,
+			RK3576_CLKSEL_CON(110), 14, 2, MFLAGS, 9, 5, DFLAGS,
+			RK3576_CLKGATE_CON(45), 2, GFLAGS),
+	GATE(HCLK_RKVDEC, "hclk_rkvdec", "hclk_rkvdec_root", 0,
+			RK3576_CLKGATE_CON(45), 3, GFLAGS),
+	COMPOSITE(CLK_RKVDEC_HEVC_CA, "clk_rkvdec_hevc_ca", gpll_cpll_lpll_bpll_p, 0,
+			RK3576_CLKSEL_CON(111), 5, 2, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(45), 8, GFLAGS),
+	GATE(CLK_RKVDEC_CORE, "clk_rkvdec_core", "aclk_rkvdec_root", 0,
+			RK3576_CLKGATE_CON(45), 9, GFLAGS),
+
+	/* venc */
+	COMPOSITE_NODIV(HCLK_VEPU0_ROOT, "hclk_vepu0_root", mux_200m_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(124), 0, 2, MFLAGS,
+			RK3576_CLKGATE_CON(51), 0, GFLAGS),
+	COMPOSITE(ACLK_VEPU0_ROOT, "aclk_vepu0_root", gpll_cpll_p, 0,
+			RK3576_CLKSEL_CON(124), 7, 1, MFLAGS, 2, 5, DFLAGS,
+			RK3576_CLKGATE_CON(51), 1, GFLAGS),
+	COMPOSITE(CLK_VEPU0_CORE, "clk_vepu0_core", gpll_cpll_spll_lpll_bpll_p, 0,
+			RK3576_CLKSEL_CON(124), 13, 3, MFLAGS, 8, 5, DFLAGS,
+			RK3576_CLKGATE_CON(51), 6, GFLAGS),
+	GATE(HCLK_VEPU0, "hclk_vepu0", "hclk_vepu0_root", 0,
+			RK3576_CLKGATE_CON(51), 4, GFLAGS),
+	GATE(ACLK_VEPU0, "aclk_vepu0", "aclk_vepu0_root", 0,
+			RK3576_CLKGATE_CON(51), 5, GFLAGS),
+
+	/* vi */
+	COMPOSITE(ACLK_VI_ROOT, "aclk_vi_root", gpll_spll_isppvtpll_bpll_lpll_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(128), 5, 3, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(53), 0, GFLAGS),
+	COMPOSITE_NOMUX(ACLK_VI_ROOT_INTER, "aclk_vi_root_inter", "aclk_vi_root", 0,
+			RK3576_CLKSEL_CON(130), 10, 3, DFLAGS,
+			RK3576_CLKGATE_CON(54), 13, GFLAGS),
+	COMPOSITE_NODIV(HCLK_VI_ROOT, "hclk_vi_root", hclk_vi_root_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(128), 8, 2, MFLAGS,
+			RK3576_CLKGATE_CON(53), 1, GFLAGS),
+	COMPOSITE_NODIV(PCLK_VI_ROOT, "pclk_vi_root", mux_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(128), 10, 2, MFLAGS,
+			RK3576_CLKGATE_CON(53), 2, GFLAGS),
+	COMPOSITE(DCLK_VICAP, "dclk_vicap", gpll_cpll_p, 0,
+			RK3576_CLKSEL_CON(129), 5, 1, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(53), 6, GFLAGS),
+	GATE(ACLK_VICAP, "aclk_vicap", "aclk_vi_root", 0,
+			RK3576_CLKGATE_CON(53), 7, GFLAGS),
+	GATE(HCLK_VICAP, "hclk_vicap", "hclk_vi_root", 0,
+			RK3576_CLKGATE_CON(53), 8, GFLAGS),
+	COMPOSITE(CLK_ISP_CORE, "clk_isp_core", gpll_spll_isppvtpll_bpll_lpll_p, 0,
+			RK3576_CLKSEL_CON(129), 11, 3, MFLAGS, 6, 5, DFLAGS,
+			RK3576_CLKGATE_CON(53), 9, GFLAGS),
+	GATE(CLK_ISP_CORE_MARVIN, "clk_isp_core_marvin", "clk_isp_core", 0,
+			RK3576_CLKGATE_CON(53), 10, GFLAGS),
+	GATE(CLK_ISP_CORE_VICAP, "clk_isp_core_vicap", "clk_isp_core", 0,
+			RK3576_CLKGATE_CON(53), 11, GFLAGS),
+	GATE(ACLK_ISP, "aclk_isp", "aclk_vi_root", 0,
+			RK3576_CLKGATE_CON(53), 12, GFLAGS),
+	GATE(HCLK_ISP, "hclk_isp", "hclk_vi_root", 0,
+			RK3576_CLKGATE_CON(53), 13, GFLAGS),
+	GATE(ACLK_VPSS, "aclk_vpss", "aclk_vi_root", 0,
+			RK3576_CLKGATE_CON(53), 15, GFLAGS),
+	GATE(HCLK_VPSS, "hclk_vpss", "hclk_vi_root", 0,
+			RK3576_CLKGATE_CON(54), 0, GFLAGS),
+	GATE(CLK_CORE_VPSS, "clk_core_vpss", "clk_isp_core", 0,
+			RK3576_CLKGATE_CON(54), 1, GFLAGS),
+	GATE(PCLK_CSI_HOST_0, "pclk_csi_host_0", "pclk_vi_root", 0,
+			RK3576_CLKGATE_CON(54), 4, GFLAGS),
+	GATE(PCLK_CSI_HOST_1, "pclk_csi_host_1", "pclk_vi_root", 0,
+			RK3576_CLKGATE_CON(54), 5, GFLAGS),
+	GATE(PCLK_CSI_HOST_2, "pclk_csi_host_2", "pclk_vi_root", 0,
+			RK3576_CLKGATE_CON(54), 6, GFLAGS),
+	GATE(PCLK_CSI_HOST_3, "pclk_csi_host_3", "pclk_vi_root", 0,
+			RK3576_CLKGATE_CON(54), 7, GFLAGS),
+	GATE(PCLK_CSI_HOST_4, "pclk_csi_host_4", "pclk_vi_root", 0,
+			RK3576_CLKGATE_CON(54), 8, GFLAGS),
+	COMPOSITE_NODIV(ICLK_CSIHOST01, "iclk_csihost01", mux_400m_200m_100m_24m_p, 0,
+			RK3576_CLKSEL_CON(130), 7, 2, MFLAGS,
+			RK3576_CLKGATE_CON(54), 10, GFLAGS),
+	GATE(ICLK_CSIHOST0, "iclk_csihost0", "iclk_csihost01", 0,
+			RK3576_CLKGATE_CON(54), 11, GFLAGS),
+	COMPOSITE(ACLK_VOP_ROOT, "aclk_vop_root", gpll_cpll_aupll_spll_lpll_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(144), 5, 3, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(61), 0, GFLAGS),
+	COMPOSITE_NODIV(HCLK_VOP_ROOT, "hclk_vop_root", mux_200m_100m_50m_24m_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(144), 10, 2, MFLAGS,
+			RK3576_CLKGATE_CON(61), 2, GFLAGS),
+	COMPOSITE_NODIV(PCLK_VOP_ROOT, "pclk_vop_root", mux_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(144), 12, 2, MFLAGS,
+			RK3576_CLKGATE_CON(61), 3, GFLAGS),
+	GATE(HCLK_VOP, "hclk_vop", "hclk_vop_root", 0,
+			RK3576_CLKGATE_CON(61), 8, GFLAGS),
+	GATE(ACLK_VOP, "aclk_vop", "aclk_vop_root", 0,
+			RK3576_CLKGATE_CON(61), 9, GFLAGS),
+	COMPOSITE(DCLK_VP0_SRC, "dclk_vp0_src", gpll_cpll_vpll_bpll_lpll_p, CLK_SET_RATE_NO_REPARENT,
+			RK3576_CLKSEL_CON(145), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(61), 10, GFLAGS),
+	COMPOSITE(DCLK_VP1_SRC, "dclk_vp1_src", gpll_cpll_vpll_bpll_lpll_p, CLK_SET_RATE_NO_REPARENT,
+			RK3576_CLKSEL_CON(146), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(61), 11, GFLAGS),
+	COMPOSITE(DCLK_VP2_SRC, "dclk_vp2_src", gpll_cpll_vpll_bpll_lpll_p, CLK_SET_RATE_NO_REPARENT,
+			RK3576_CLKSEL_CON(147), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(61), 12, GFLAGS),
+	COMPOSITE_NODIV(DCLK_VP0, "dclk_vp0", dclk_vp0_p, CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
+			RK3576_CLKSEL_CON(147), 11, 1, MFLAGS,
+			RK3576_CLKGATE_CON(61), 13, GFLAGS),
+	COMPOSITE_NODIV(DCLK_VP1, "dclk_vp1", dclk_vp1_p, CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
+			RK3576_CLKSEL_CON(147), 12, 1, MFLAGS,
+			RK3576_CLKGATE_CON(62), 0, GFLAGS),
+	COMPOSITE_NODIV(DCLK_VP2, "dclk_vp2", dclk_vp2_p, CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
+			RK3576_CLKSEL_CON(147), 13, 1, MFLAGS,
+			RK3576_CLKGATE_CON(62), 1, GFLAGS),
+
+	/* vo0 */
+	COMPOSITE(ACLK_VO0_ROOT, "aclk_vo0_root", gpll_cpll_lpll_bpll_p, 0,
+			RK3576_CLKSEL_CON(149), 5, 2, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(63), 0, GFLAGS),
+	COMPOSITE_NODIV(HCLK_VO0_ROOT, "hclk_vo0_root", mux_200m_100m_50m_24m_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(149), 7, 2, MFLAGS,
+			RK3576_CLKGATE_CON(63), 1, GFLAGS),
+	COMPOSITE_NODIV(PCLK_VO0_ROOT, "pclk_vo0_root", mux_150m_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(149), 11, 2, MFLAGS,
+			RK3576_CLKGATE_CON(63), 3, GFLAGS),
+	GATE(ACLK_HDCP0, "aclk_hdcp0", "aclk_vo0_root", 0,
+			RK3576_CLKGATE_CON(63), 12, GFLAGS),
+	GATE(HCLK_HDCP0, "hclk_hdcp0", "hclk_vo0_root", 0,
+			RK3576_CLKGATE_CON(63), 13, GFLAGS),
+	GATE(PCLK_HDCP0, "pclk_hdcp0", "pclk_vo0_root", 0,
+			RK3576_CLKGATE_CON(63), 14, GFLAGS),
+	GATE(CLK_TRNG0_SKP, "clk_trng0_skp", "aclk_hdcp0", 0,
+			RK3576_CLKGATE_CON(64), 4, GFLAGS),
+	GATE(PCLK_DSIHOST0, "pclk_dsihost0", "pclk_vo0_root", 0,
+			RK3576_CLKGATE_CON(64), 5, GFLAGS),
+	COMPOSITE(CLK_DSIHOST0, "clk_dsihost0", gpll_cpll_spll_vpll_bpll_lpll_p, 0,
+			RK3576_CLKSEL_CON(151), 7, 3, MFLAGS, 0, 7, DFLAGS,
+			RK3576_CLKGATE_CON(64), 6, GFLAGS),
+	GATE(PCLK_HDMITX0, "pclk_hdmitx0", "pclk_vo0_root", 0,
+			RK3576_CLKGATE_CON(64), 7, GFLAGS),
+	COMPOSITE(CLK_HDMITX0_EARC, "clk_hdmitx0_earc", gpll_cpll_p, 0,
+			RK3576_CLKSEL_CON(151), 15, 1, MFLAGS, 10, 5, DFLAGS,
+			RK3576_CLKGATE_CON(64), 8, GFLAGS),
+	GATE(CLK_HDMITX0_REF, "clk_hdmitx0_ref", "aclk_vo0_root", 0,
+			RK3576_CLKGATE_CON(64), 9, GFLAGS),
+	GATE(PCLK_EDP0, "pclk_edp0", "pclk_vo0_root", 0,
+			RK3576_CLKGATE_CON(64), 13, GFLAGS),
+	GATE(CLK_EDP0_24M, "clk_edp0_24m", "xin24m", 0,
+			RK3576_CLKGATE_CON(64), 14, GFLAGS),
+	COMPOSITE_NODIV(CLK_EDP0_200M, "clk_edp0_200m", mux_200m_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(152), 1, 2, MFLAGS,
+			RK3576_CLKGATE_CON(64), 15, GFLAGS),
+	COMPOSITE(MCLK_SAI5_8CH_SRC, "mclk_sai5_8ch_src", audio_frac_int_p, 0,
+			RK3576_CLKSEL_CON(154), 10, 3, MFLAGS, 2, 8, DFLAGS,
+			RK3576_CLKGATE_CON(65), 3, GFLAGS),
+	COMPOSITE_NODIV(MCLK_SAI5_8CH, "mclk_sai5_8ch", mclk_sai5_8ch_p, CLK_SET_RATE_PARENT,
+			RK3576_CLKSEL_CON(154), 13, 1, MFLAGS,
+			RK3576_CLKGATE_CON(65), 4, GFLAGS),
+	GATE(HCLK_SAI5_8CH, "hclk_sai5_8ch", "hclk_vo0_root", 0,
+			RK3576_CLKGATE_CON(65), 5, GFLAGS),
+	COMPOSITE(MCLK_SAI6_8CH_SRC, "mclk_sai6_8ch_src", audio_frac_int_p, 0,
+			RK3576_CLKSEL_CON(155), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(65), 7, GFLAGS),
+	COMPOSITE_NODIV(MCLK_SAI6_8CH, "mclk_sai6_8ch", mclk_sai6_8ch_p, CLK_SET_RATE_PARENT,
+			RK3576_CLKSEL_CON(155), 11, 1, MFLAGS,
+			RK3576_CLKGATE_CON(65), 8, GFLAGS),
+	GATE(HCLK_SAI6_8CH, "hclk_sai6_8ch", "hclk_vo0_root", 0,
+			RK3576_CLKGATE_CON(65), 9, GFLAGS),
+	GATE(HCLK_SPDIF_TX2, "hclk_spdif_tx2", "hclk_vo0_root", 0,
+			RK3576_CLKGATE_CON(65), 10, GFLAGS),
+	COMPOSITE(MCLK_SPDIF_TX2, "mclk_spdif_tx2", audio_frac_int_p, 0,
+			RK3576_CLKSEL_CON(156), 5, 3, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(65), 13, GFLAGS),
+	GATE(HCLK_SPDIF_RX2, "hclk_spdif_rx2", "hclk_vo0_root", 0,
+			RK3576_CLKGATE_CON(65), 14, GFLAGS),
+	COMPOSITE(MCLK_SPDIF_RX2, "mclk_spdif_rx2", gpll_cpll_aupll_p, 0,
+			RK3576_CLKSEL_CON(156), 13, 2, MFLAGS, 8, 5, DFLAGS,
+			RK3576_CLKGATE_CON(65), 15, GFLAGS),
+
+	/* vo1 */
+	COMPOSITE(ACLK_VO1_ROOT, "aclk_vo1_root", gpll_cpll_lpll_bpll_p, 0,
+			RK3576_CLKSEL_CON(158), 5, 2, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(67), 1, GFLAGS),
+	COMPOSITE_NODIV(HCLK_VO1_ROOT, "hclk_vo1_root", mux_200m_100m_50m_24m_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(158), 7, 2, MFLAGS,
+			RK3576_CLKGATE_CON(67), 2, GFLAGS),
+	COMPOSITE_NODIV(PCLK_VO1_ROOT, "pclk_vo1_root", mux_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(158), 9, 2, MFLAGS,
+			RK3576_CLKGATE_CON(67), 3, GFLAGS),
+	COMPOSITE(MCLK_SAI8_8CH_SRC, "mclk_sai8_8ch_src", audio_frac_int_p, 0,
+			RK3576_CLKSEL_CON(157), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(66), 1, GFLAGS),
+	COMPOSITE_NODIV(MCLK_SAI8_8CH, "mclk_sai8_8ch", mclk_sai8_8ch_p, CLK_SET_RATE_PARENT,
+			RK3576_CLKSEL_CON(157), 11, 1, MFLAGS,
+			RK3576_CLKGATE_CON(66), 2, GFLAGS),
+	GATE(HCLK_SAI8_8CH, "hclk_sai8_8ch", "hclk_vo1_root", 0,
+			RK3576_CLKGATE_CON(66), 0, GFLAGS),
+	COMPOSITE(MCLK_SAI7_8CH_SRC, "mclk_sai7_8ch_src", audio_frac_int_p, 0,
+			RK3576_CLKSEL_CON(159), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(67), 8, GFLAGS),
+	COMPOSITE_NODIV(MCLK_SAI7_8CH, "mclk_sai7_8ch", mclk_sai7_8ch_p, CLK_SET_RATE_PARENT,
+			RK3576_CLKSEL_CON(159), 11, 1, MFLAGS,
+			RK3576_CLKGATE_CON(67), 9, GFLAGS),
+	GATE(HCLK_SAI7_8CH, "hclk_sai7_8ch", "hclk_vo1_root", 0,
+			RK3576_CLKGATE_CON(67), 10, GFLAGS),
+	GATE(HCLK_SPDIF_TX3, "hclk_spdif_tx3", "hclk_vo1_root", 0,
+			RK3576_CLKGATE_CON(67), 11, GFLAGS),
+	GATE(HCLK_SPDIF_TX4, "hclk_spdif_tx4", "hclk_vo1_root", 0,
+			RK3576_CLKGATE_CON(67), 12, GFLAGS),
+	GATE(HCLK_SPDIF_TX5, "hclk_spdif_tx5", "hclk_vo1_root", 0,
+			RK3576_CLKGATE_CON(67), 13, GFLAGS),
+	COMPOSITE(MCLK_SPDIF_TX3, "mclk_spdif_tx3", audio_frac_int_p, 0,
+			RK3576_CLKSEL_CON(160), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(67), 14, GFLAGS),
+	COMPOSITE_NOMUX(CLK_AUX16MHZ_0, "clk_aux16mhz_0", "gpll", 0,
+			RK3576_CLKSEL_CON(161), 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(67), 15, GFLAGS),
+	GATE(ACLK_DP0, "aclk_dp0", "aclk_vo1_root", 0,
+			RK3576_CLKGATE_CON(68), 0, GFLAGS),
+	GATE(PCLK_DP0, "pclk_dp0", "pclk_vo1_root", 0,
+			RK3576_CLKGATE_CON(68), 1, GFLAGS),
+	GATE(ACLK_HDCP1, "aclk_hdcp1", "aclk_vo1_root", 0,
+			RK3576_CLKGATE_CON(68), 4, GFLAGS),
+	GATE(HCLK_HDCP1, "hclk_hdcp1", "hclk_vo1_root", 0,
+			RK3576_CLKGATE_CON(68), 5, GFLAGS),
+	GATE(PCLK_HDCP1, "pclk_hdcp1", "pclk_vo1_root", 0,
+			RK3576_CLKGATE_CON(68), 6, GFLAGS),
+	GATE(CLK_TRNG1_SKP, "clk_trng1_skp", "aclk_hdcp1", 0,
+			RK3576_CLKGATE_CON(68), 7, GFLAGS),
+	GATE(HCLK_SAI9_8CH, "hclk_sai9_8ch", "hclk_vo1_root", 0,
+			RK3576_CLKGATE_CON(68), 9, GFLAGS),
+	COMPOSITE(MCLK_SAI9_8CH_SRC, "mclk_sai9_8ch_src", audio_frac_int_p, 0,
+			RK3576_CLKSEL_CON(162), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(68), 10, GFLAGS),
+	COMPOSITE_NODIV(MCLK_SAI9_8CH, "mclk_sai9_8ch", mclk_sai9_8ch_p, CLK_SET_RATE_PARENT,
+			RK3576_CLKSEL_CON(162), 11, 1, MFLAGS,
+			RK3576_CLKGATE_CON(68), 11, GFLAGS),
+	COMPOSITE(MCLK_SPDIF_TX4, "mclk_spdif_tx4", audio_frac_int_p, 0,
+			RK3576_CLKSEL_CON(163), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(68), 12, GFLAGS),
+	COMPOSITE(MCLK_SPDIF_TX5, "mclk_spdif_tx5", audio_frac_int_p, 0,
+			RK3576_CLKSEL_CON(164), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(68), 13, GFLAGS),
+
+	/* vpu */
+	COMPOSITE(ACLK_VPU_ROOT, "aclk_vpu_root", gpll_spll_cpll_bpll_lpll_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(118), 5, 3, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(49), 0, GFLAGS),
+	COMPOSITE_NODIV(ACLK_VPU_MID_ROOT, "aclk_vpu_mid_root", mux_600m_400m_300m_24m_p, 0,
+			RK3576_CLKSEL_CON(118), 8, 2, MFLAGS,
+			RK3576_CLKGATE_CON(49), 1, GFLAGS),
+	COMPOSITE_NODIV(HCLK_VPU_ROOT, "hclk_vpu_root", mux_200m_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(118), 10, 2, MFLAGS,
+			RK3576_CLKGATE_CON(49), 2, GFLAGS),
+	COMPOSITE(ACLK_JPEG_ROOT, "aclk_jpeg_root", gpll_cpll_aupll_spll_p, 0,
+			RK3576_CLKSEL_CON(119), 5, 2, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(49), 3, GFLAGS),
+	COMPOSITE_NODIV(ACLK_VPU_LOW_ROOT, "aclk_vpu_low_root", mux_400m_200m_100m_24m_p, 0,
+			RK3576_CLKSEL_CON(119), 7, 2, MFLAGS,
+			RK3576_CLKGATE_CON(49), 4, GFLAGS),
+	GATE(HCLK_RGA2E_0, "hclk_rga2e_0", "hclk_vpu_root", 0,
+			RK3576_CLKGATE_CON(49), 13, GFLAGS),
+	GATE(ACLK_RGA2E_0, "aclk_rga2e_0", "aclk_vpu_root", 0,
+			RK3576_CLKGATE_CON(49), 14, GFLAGS),
+	COMPOSITE(CLK_CORE_RGA2E_0, "clk_core_rga2e_0", gpll_spll_cpll_bpll_lpll_p, 0,
+			RK3576_CLKSEL_CON(120), 5, 3, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(49), 15, GFLAGS),
+	GATE(ACLK_JPEG, "aclk_jpeg", "aclk_jpeg_root", 0,
+			RK3576_CLKGATE_CON(50), 0, GFLAGS),
+	GATE(HCLK_JPEG, "hclk_jpeg", "hclk_vpu_root", 0,
+			RK3576_CLKGATE_CON(50), 1, GFLAGS),
+	GATE(HCLK_VDPP, "hclk_vdpp", "hclk_vpu_root", 0,
+			RK3576_CLKGATE_CON(50), 2, GFLAGS),
+	GATE(ACLK_VDPP, "aclk_vdpp", "aclk_vpu_mid_root", 0,
+			RK3576_CLKGATE_CON(50), 3, GFLAGS),
+	COMPOSITE(CLK_CORE_VDPP, "clk_core_vdpp", gpll_cpll_p, 0,
+			RK3576_CLKSEL_CON(120), 13, 1, MFLAGS, 8, 5, DFLAGS,
+			RK3576_CLKGATE_CON(50), 4, GFLAGS),
+	GATE(HCLK_RGA2E_1, "hclk_rga2e_1", "hclk_vpu_root", 0,
+			RK3576_CLKGATE_CON(50), 5, GFLAGS),
+	GATE(ACLK_RGA2E_1, "aclk_rga2e_1", "aclk_vpu_root", 0,
+			RK3576_CLKGATE_CON(50), 6, GFLAGS),
+	COMPOSITE(CLK_CORE_RGA2E_1, "clk_core_rga2e_1", gpll_spll_cpll_bpll_lpll_p, 0,
+			RK3576_CLKSEL_CON(121), 5, 3, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(50), 7, GFLAGS),
+	MUX(0, "dclk_ebc_frac_src_p", gpll_cpll_vpll_aupll_24m_p, 0,
+			RK3576_CLKSEL_CON(123), 0, 3, MFLAGS),
+	COMPOSITE_FRAC(DCLK_EBC_FRAC_SRC, "dclk_ebc_frac_src", "dclk_ebc_frac_src_p", 0,
+			RK3576_CLKSEL_CON(122), 0,
+			RK3576_CLKGATE_CON(50), 9, GFLAGS),
+	GATE(ACLK_EBC, "aclk_ebc", "aclk_vpu_low_root", 0,
+			RK3576_CLKGATE_CON(50), 11, GFLAGS),
+	GATE(HCLK_EBC, "hclk_ebc", "hclk_vpu_root", 0,
+			RK3576_CLKGATE_CON(50), 10, GFLAGS),
+	COMPOSITE(DCLK_EBC, "dclk_ebc", dclk_ebc_p, CLK_SET_RATE_NO_REPARENT,
+			RK3576_CLKSEL_CON(123), 12, 3, MFLAGS, 3, 9, DFLAGS,
+			RK3576_CLKGATE_CON(50), 12, GFLAGS),
+
+	/* vepu */
+	COMPOSITE_NODIV(HCLK_VEPU1_ROOT, "hclk_vepu1_root", mux_200m_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(178), 0, 2, MFLAGS,
+			RK3576_CLKGATE_CON(78), 0, GFLAGS),
+	COMPOSITE(ACLK_VEPU1_ROOT, "aclk_vepu1_root", gpll_cpll_p, 0,
+			RK3576_CLKSEL_CON(180), 5, 1, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(79), 0, GFLAGS),
+	GATE(HCLK_VEPU1, "hclk_vepu1", "hclk_vepu1_root", 0,
+			RK3576_CLKGATE_CON(79), 3, GFLAGS),
+	GATE(ACLK_VEPU1, "aclk_vepu1", "aclk_vepu1_root", 0,
+			RK3576_CLKGATE_CON(79), 4, GFLAGS),
+	COMPOSITE(CLK_VEPU1_CORE, "clk_vepu1_core", gpll_cpll_spll_lpll_bpll_p, 0,
+			RK3576_CLKSEL_CON(180), 11, 3, MFLAGS, 6, 5, DFLAGS,
+			RK3576_CLKGATE_CON(79), 5, GFLAGS),
+
+	/* php */
+	COMPOSITE_NODIV(PCLK_PHP_ROOT, "pclk_php_root", mux_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(92), 0, 2, MFLAGS,
+			RK3576_CLKGATE_CON(34), 0, GFLAGS),
+	COMPOSITE(ACLK_PHP_ROOT, "aclk_php_root", gpll_cpll_p, 0,
+			RK3576_CLKSEL_CON(92), 9, 1, MFLAGS, 4, 5, DFLAGS,
+			RK3576_CLKGATE_CON(34), 7, GFLAGS),
+	GATE(PCLK_PCIE0, "pclk_pcie0", "pclk_php_root", 0,
+			RK3576_CLKGATE_CON(34), 13, GFLAGS),
+	GATE(CLK_PCIE0_AUX, "clk_pcie0_aux", "xin24m", 0,
+			RK3576_CLKGATE_CON(34), 14, GFLAGS),
+	GATE(ACLK_PCIE0_MST, "aclk_pcie0_mst", "aclk_php_root", 0,
+			RK3576_CLKGATE_CON(34), 15, GFLAGS),
+	GATE(ACLK_PCIE0_SLV, "aclk_pcie0_slv", "aclk_php_root", 0,
+			RK3576_CLKGATE_CON(35), 0, GFLAGS),
+	GATE(ACLK_PCIE0_DBI, "aclk_pcie0_dbi", "aclk_php_root", 0,
+			RK3576_CLKGATE_CON(35), 1, GFLAGS),
+	GATE(ACLK_USB3OTG1, "aclk_usb3otg1", "aclk_php_root", 0,
+			RK3576_CLKGATE_CON(35), 3, GFLAGS),
+	GATE(CLK_REF_USB3OTG1, "clk_ref_usb3otg1", "xin24m", 0,
+			RK3576_CLKGATE_CON(35), 4, GFLAGS),
+	GATE(CLK_SUSPEND_USB3OTG1, "clk_suspend_usb3otg1", "xin24m", 0,
+			RK3576_CLKGATE_CON(35), 5, GFLAGS),
+	GATE(ACLK_MMU0, "aclk_mmu0", "aclk_php_root", 0,
+			RK3576_CLKGATE_CON(35), 11, GFLAGS),
+	GATE(ACLK_SLV_MMU0, "aclk_slv_mmu0", "aclk_php_root", 0,
+			RK3576_CLKGATE_CON(35), 13, GFLAGS),
+	GATE(ACLK_MMU1, "aclk_mmu1", "aclk_php_root", 0,
+			RK3576_CLKGATE_CON(35), 14, GFLAGS),
+	GATE(ACLK_SLV_MMU1, "aclk_slv_mmu1", "aclk_php_root", 0,
+			RK3576_CLKGATE_CON(36), 0, GFLAGS),
+	GATE(PCLK_PCIE1, "pclk_pcie1", "pclk_php_root", 0,
+			RK3576_CLKGATE_CON(36), 7, GFLAGS),
+	GATE(CLK_PCIE1_AUX, "clk_pcie1_aux", "xin24m", 0,
+			RK3576_CLKGATE_CON(36), 8, GFLAGS),
+	GATE(ACLK_PCIE1_MST, "aclk_pcie1_mst", "aclk_php_root", 0,
+			RK3576_CLKGATE_CON(36), 9, GFLAGS),
+	GATE(ACLK_PCIE1_SLV, "aclk_pcie1_slv", "aclk_php_root", 0,
+			RK3576_CLKGATE_CON(36), 10, GFLAGS),
+	GATE(ACLK_PCIE1_DBI, "aclk_pcie1_dbi", "aclk_php_root", 0,
+			RK3576_CLKGATE_CON(36), 11, GFLAGS),
+	COMPOSITE(CLK_RXOOB0, "clk_rxoob0", gpll_cpll_p, 0,
+			RK3576_CLKSEL_CON(93), 7, 1, MFLAGS, 0, 7, DFLAGS,
+			RK3576_CLKGATE_CON(37), 0, GFLAGS),
+	COMPOSITE(CLK_RXOOB1, "clk_rxoob1", gpll_cpll_p, 0,
+			RK3576_CLKSEL_CON(93), 15, 1, MFLAGS, 8, 7, DFLAGS,
+			RK3576_CLKGATE_CON(37), 1, GFLAGS),
+	GATE(CLK_PMALIVE0, "clk_pmalive0", "xin24m", CLK_IS_CRITICAL,
+			RK3576_CLKGATE_CON(37), 2, GFLAGS),
+	GATE(CLK_PMALIVE1, "clk_pmalive1", "xin24m", CLK_IS_CRITICAL,
+			RK3576_CLKGATE_CON(37), 3, GFLAGS),
+	GATE(ACLK_SATA0, "aclk_sata0", "aclk_php_root", 0,
+			RK3576_CLKGATE_CON(37), 4, GFLAGS),
+	GATE(ACLK_SATA1, "aclk_sata1", "aclk_php_root", 0,
+			RK3576_CLKGATE_CON(37), 5, GFLAGS),
+
+	/* audio */
+	COMPOSITE_NODIV(HCLK_AUDIO_ROOT, "hclk_audio_root", mux_200m_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(42), 0, 2, MFLAGS,
+			RK3576_CLKGATE_CON(7), 1, GFLAGS),
+	GATE(HCLK_ASRC_2CH_0, "hclk_asrc_2ch_0", "hclk_audio_root", 0,
+			RK3576_CLKGATE_CON(7), 3, GFLAGS),
+	GATE(HCLK_ASRC_2CH_1, "hclk_asrc_2ch_1", "hclk_audio_root", 0,
+			RK3576_CLKGATE_CON(7), 4, GFLAGS),
+	GATE(HCLK_ASRC_4CH_0, "hclk_asrc_4ch_0", "hclk_audio_root", 0,
+			RK3576_CLKGATE_CON(7), 5, GFLAGS),
+	GATE(HCLK_ASRC_4CH_1, "hclk_asrc_4ch_1", "hclk_audio_root", 0,
+			RK3576_CLKGATE_CON(7), 6, GFLAGS),
+	COMPOSITE(CLK_ASRC_2CH_0, "clk_asrc_2ch_0", gpll_cpll_aupll_p, 0,
+			RK3576_CLKSEL_CON(42), 7, 2, MFLAGS, 2, 5, DFLAGS,
+			RK3576_CLKGATE_CON(7), 7, GFLAGS),
+	COMPOSITE(CLK_ASRC_2CH_1, "clk_asrc_2ch_1", gpll_cpll_aupll_p, 0,
+			RK3576_CLKSEL_CON(42), 14, 2, MFLAGS, 9, 5, DFLAGS,
+			RK3576_CLKGATE_CON(7), 8, GFLAGS),
+	COMPOSITE(CLK_ASRC_4CH_0, "clk_asrc_4ch_0", gpll_cpll_aupll_p, 0,
+			RK3576_CLKSEL_CON(43), 5, 2, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(7), 9, GFLAGS),
+	COMPOSITE(CLK_ASRC_4CH_1, "clk_asrc_4ch_1", gpll_cpll_aupll_p, 0,
+			RK3576_CLKSEL_CON(43), 12, 2, MFLAGS, 7, 5, DFLAGS,
+			RK3576_CLKGATE_CON(7), 10, GFLAGS),
+	COMPOSITE(MCLK_SAI0_8CH_SRC, "mclk_sai0_8ch_src", audio_frac_int_p, 0,
+			RK3576_CLKSEL_CON(44), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(7), 11, GFLAGS),
+	COMPOSITE_NODIV(MCLK_SAI0_8CH, "mclk_sai0_8ch", mclk_sai0_8ch_p, CLK_SET_RATE_PARENT,
+			RK3576_CLKSEL_CON(44), 11, 2, MFLAGS,
+			RK3576_CLKGATE_CON(7), 12, GFLAGS),
+	GATE(HCLK_SAI0_8CH, "hclk_sai0_8ch", "hclk_audio_root", 0,
+			RK3576_CLKGATE_CON(7), 13, GFLAGS),
+	GATE(HCLK_SPDIF_RX0, "hclk_spdif_rx0", "hclk_audio_root", 0,
+			RK3576_CLKGATE_CON(7), 14, GFLAGS),
+	COMPOSITE(MCLK_SPDIF_RX0, "mclk_spdif_rx0", gpll_cpll_aupll_p, 0,
+			RK3576_CLKSEL_CON(45), 5, 2, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(7), 15, GFLAGS),
+	GATE(HCLK_SPDIF_RX1, "hclk_spdif_rx1", "hclk_audio_root", 0,
+			RK3576_CLKGATE_CON(8), 0, GFLAGS),
+	COMPOSITE(MCLK_SPDIF_RX1, "mclk_spdif_rx1", gpll_cpll_aupll_p, 0,
+			RK3576_CLKSEL_CON(45), 12, 2, MFLAGS, 7, 5, DFLAGS,
+			RK3576_CLKGATE_CON(8), 1, GFLAGS),
+	COMPOSITE(MCLK_SAI1_8CH_SRC, "mclk_sai1_8ch_src", audio_frac_int_p, 0,
+			RK3576_CLKSEL_CON(46), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(8), 4, GFLAGS),
+	COMPOSITE_NODIV(MCLK_SAI1_8CH, "mclk_sai1_8ch", mclk_sai1_8ch_p, CLK_SET_RATE_PARENT,
+			RK3576_CLKSEL_CON(46), 11, 1, MFLAGS,
+			RK3576_CLKGATE_CON(8), 5, GFLAGS),
+	GATE(HCLK_SAI1_8CH, "hclk_sai1_8ch", "hclk_audio_root", 0,
+			RK3576_CLKGATE_CON(8), 6, GFLAGS),
+	COMPOSITE(MCLK_SAI2_2CH_SRC, "mclk_sai2_2ch_src", audio_frac_int_p, 0,
+			RK3576_CLKSEL_CON(47), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(8), 7, GFLAGS),
+	COMPOSITE_NODIV(MCLK_SAI2_2CH, "mclk_sai2_2ch", mclk_sai2_2ch_p, CLK_SET_RATE_PARENT,
+			RK3576_CLKSEL_CON(47), 11, 2, MFLAGS,
+			RK3576_CLKGATE_CON(8), 8, GFLAGS),
+	GATE(HCLK_SAI2_2CH, "hclk_sai2_2ch", "hclk_audio_root", 0,
+			RK3576_CLKGATE_CON(8), 10, GFLAGS),
+	COMPOSITE(MCLK_SAI3_2CH_SRC, "mclk_sai3_2ch_src", audio_frac_int_p, 0,
+			RK3576_CLKSEL_CON(48), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(8), 11, GFLAGS),
+	COMPOSITE_NODIV(MCLK_SAI3_2CH, "mclk_sai3_2ch", mclk_sai3_2ch_p, CLK_SET_RATE_PARENT,
+			RK3576_CLKSEL_CON(48), 11, 2, MFLAGS,
+			RK3576_CLKGATE_CON(8), 12, GFLAGS),
+	GATE(HCLK_SAI3_2CH, "hclk_sai3_2ch", "hclk_audio_root", 0,
+			RK3576_CLKGATE_CON(8), 14, GFLAGS),
+	COMPOSITE(MCLK_SAI4_2CH_SRC, "mclk_sai4_2ch_src", audio_frac_int_p, 0,
+			RK3576_CLKSEL_CON(49), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(8), 15, GFLAGS),
+	COMPOSITE_NODIV(MCLK_SAI4_2CH, "mclk_sai4_2ch", mclk_sai4_2ch_p, CLK_SET_RATE_PARENT,
+			RK3576_CLKSEL_CON(49), 11, 2, MFLAGS,
+			RK3576_CLKGATE_CON(9), 0, GFLAGS),
+	GATE(HCLK_SAI4_2CH, "hclk_sai4_2ch", "hclk_audio_root", 0,
+			RK3576_CLKGATE_CON(9), 2, GFLAGS),
+	GATE(HCLK_ACDCDIG_DSM, "hclk_acdcdig_dsm", "hclk_audio_root", 0,
+			RK3576_CLKGATE_CON(9), 3, GFLAGS),
+	GATE(MCLK_ACDCDIG_DSM, "mclk_acdcdig_dsm", "mclk_sai4_2ch", 0,
+			RK3576_CLKGATE_CON(9), 4, GFLAGS),
+	COMPOSITE(CLK_PDM1, "clk_pdm1", audio_frac_int_p, 0,
+			RK3576_CLKSEL_CON(50), 9, 3, MFLAGS, 0, 9, DFLAGS,
+			RK3576_CLKGATE_CON(9), 5, GFLAGS),
+	GATE(HCLK_PDM1, "hclk_pdm1", "hclk_audio_root", 0,
+			RK3576_CLKGATE_CON(9), 7, GFLAGS),
+	GATE(CLK_PDM1_OUT, "clk_pdm1_out", "clk_pdm1", 0,
+			RK3576_CLKGATE_CON(3), 5, GFLAGS),
+	COMPOSITE(MCLK_PDM1, "mclk_pdm1", audio_frac_int_p, 0,
+			RK3576_CLKSEL_CON(51), 5, 3, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(9), 8, GFLAGS),
+	GATE(HCLK_SPDIF_TX0, "hclk_spdif_tx0", "hclk_audio_root", 0,
+			RK3576_CLKGATE_CON(9), 9, GFLAGS),
+	COMPOSITE(MCLK_SPDIF_TX0, "mclk_spdif_tx0", audio_frac_int_p, 0,
+			RK3576_CLKSEL_CON(52), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(9), 10, GFLAGS),
+	GATE(HCLK_SPDIF_TX1, "hclk_spdif_tx1", "hclk_audio_root", 0,
+			RK3576_CLKGATE_CON(9), 11, GFLAGS),
+	COMPOSITE(MCLK_SPDIF_TX1, "mclk_spdif_tx1", audio_frac_int_p, 0,
+			RK3576_CLKSEL_CON(53), 8, 3, MFLAGS, 0, 8, DFLAGS,
+			RK3576_CLKGATE_CON(9), 12, GFLAGS),
+	GATE(CLK_SAI1_MCLKOUT, "clk_sai1_mclkout", "mclk_sai1_8ch", 0,
+			RK3576_CLKGATE_CON(9), 13, GFLAGS),
+	GATE(CLK_SAI2_MCLKOUT, "clk_sai2_mclkout", "mclk_sai2_2ch", 0,
+			RK3576_CLKGATE_CON(9), 14, GFLAGS),
+	GATE(CLK_SAI3_MCLKOUT, "clk_sai3_mclkout", "mclk_sai3_2ch", 0,
+			RK3576_CLKGATE_CON(9), 15, GFLAGS),
+	GATE(CLK_SAI4_MCLKOUT, "clk_sai4_mclkout", "mclk_sai4_2ch", 0,
+			RK3576_CLKGATE_CON(10), 0, GFLAGS),
+	GATE(CLK_SAI0_MCLKOUT, "clk_sai0_mclkout", "mclk_sai0_8ch", 0,
+			RK3576_CLKGATE_CON(10), 1, GFLAGS),
+
+	/* sdgmac */
+	COMPOSITE_NODIV(HCLK_SDGMAC_ROOT, "hclk_sdgmac_root", mux_200m_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(103), 0, 2, MFLAGS,
+			RK3576_CLKGATE_CON(42), 0, GFLAGS),
+	COMPOSITE(ACLK_SDGMAC_ROOT, "aclk_sdgmac_root", gpll_cpll_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(103), 7, 1, MFLAGS, 2, 5, DFLAGS,
+			RK3576_CLKGATE_CON(42), 1, GFLAGS),
+	COMPOSITE_NODIV(PCLK_SDGMAC_ROOT, "pclk_sdgmac_root", mux_100m_50m_24m_p, 0,
+			RK3576_CLKSEL_CON(103), 8, 2, MFLAGS,
+			RK3576_CLKGATE_CON(42), 2, GFLAGS),
+	GATE(ACLK_GMAC0, "aclk_gmac0", "aclk_sdgmac_root", 0,
+			RK3576_CLKGATE_CON(42), 7, GFLAGS),
+	GATE(ACLK_GMAC1, "aclk_gmac1", "aclk_sdgmac_root", 0,
+			RK3576_CLKGATE_CON(42), 8, GFLAGS),
+	GATE(PCLK_GMAC0, "pclk_gmac0", "pclk_sdgmac_root", 0,
+			RK3576_CLKGATE_CON(42), 9, GFLAGS),
+	GATE(PCLK_GMAC1, "pclk_gmac1", "pclk_sdgmac_root", 0,
+			RK3576_CLKGATE_CON(42), 10, GFLAGS),
+	COMPOSITE(CCLK_SRC_SDIO, "cclk_src_sdio", gpll_cpll_24m_p, 0,
+			RK3576_CLKSEL_CON(104), 6, 2, MFLAGS, 0, 6, DFLAGS,
+			RK3576_CLKGATE_CON(42), 11, GFLAGS),
+	GATE(HCLK_SDIO, "hclk_sdio", "hclk_sdgmac_root", 0,
+			RK3576_CLKGATE_CON(42), 12, GFLAGS),
+	COMPOSITE(CLK_GMAC1_PTP_REF_SRC, "clk_gmac1_ptp_ref_src", clk_gmac1_ptp_ref_src_p, 0,
+			RK3576_CLKSEL_CON(104), 13, 2, MFLAGS, 8, 5, DFLAGS,
+			RK3576_CLKGATE_CON(42), 15, GFLAGS),
+	COMPOSITE(CLK_GMAC0_PTP_REF_SRC, "clk_gmac0_ptp_ref_src", clk_gmac0_ptp_ref_src_p, 0,
+			RK3576_CLKSEL_CON(105), 5, 2, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(43), 0, GFLAGS),
+	GATE(CLK_GMAC1_PTP_REF, "clk_gmac1_ptp_ref", "clk_gmac1_ptp_ref_src", 0,
+			RK3576_CLKGATE_CON(42), 13, GFLAGS),
+	GATE(CLK_GMAC0_PTP_REF, "clk_gmac0_ptp_ref", "clk_gmac0_ptp_ref_src", 0,
+			RK3576_CLKGATE_CON(42), 14, GFLAGS),
+	COMPOSITE(CCLK_SRC_SDMMC0, "cclk_src_sdmmc0", gpll_cpll_24m_p, 0,
+			RK3576_CLKSEL_CON(105), 13, 2, MFLAGS, 7, 6, DFLAGS,
+			RK3576_CLKGATE_CON(43), 1, GFLAGS),
+	GATE(HCLK_SDMMC0, "hclk_sdmmc0", "hclk_sdgmac_root", 0,
+			RK3576_CLKGATE_CON(43), 2, GFLAGS),
+	COMPOSITE(SCLK_FSPI1_X2, "sclk_fspi1_x2", gpll_cpll_24m_p, 0,
+			RK3576_CLKSEL_CON(106), 6, 2, MFLAGS, 0, 6, DFLAGS,
+			RK3576_CLKGATE_CON(43), 3, GFLAGS),
+	GATE(HCLK_FSPI1, "hclk_fspi1", "hclk_sdgmac_root", 0,
+			RK3576_CLKGATE_CON(43), 4, GFLAGS),
+	COMPOSITE(ACLK_DSMC_ROOT, "aclk_dsmc_root", gpll_cpll_p, CLK_IS_CRITICAL,
+			RK3576_CLKSEL_CON(106), 13, 1, MFLAGS, 8, 5, DFLAGS,
+			RK3576_CLKGATE_CON(43), 5, GFLAGS),
+	GATE(ACLK_DSMC, "aclk_dsmc", "aclk_dsmc_root", 0,
+			RK3576_CLKGATE_CON(43), 7, GFLAGS),
+	GATE(PCLK_DSMC, "pclk_dsmc", "pclk_sdgmac_root", 0,
+			RK3576_CLKGATE_CON(43), 8, GFLAGS),
+	COMPOSITE(CLK_DSMC_SYS, "clk_dsmc_sys", gpll_cpll_p, 0,
+			RK3576_CLKSEL_CON(107), 5, 1, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(43), 9, GFLAGS),
+	GATE(HCLK_HSGPIO, "hclk_hsgpio", "hclk_sdgmac_root", 0,
+			RK3576_CLKGATE_CON(43), 10, GFLAGS),
+	COMPOSITE(CLK_HSGPIO_TX, "clk_hsgpio_tx", gpll_cpll_24m_p, 0,
+			RK3576_CLKSEL_CON(107), 11, 2, MFLAGS, 6, 5, DFLAGS,
+			RK3576_CLKGATE_CON(43), 11, GFLAGS),
+	COMPOSITE(CLK_HSGPIO_RX, "clk_hsgpio_rx", gpll_cpll_24m_p, 0,
+			RK3576_CLKSEL_CON(108), 5, 2, MFLAGS, 0, 5, DFLAGS,
+			RK3576_CLKGATE_CON(43), 12, GFLAGS),
+	GATE(ACLK_HSGPIO, "aclk_hsgpio", "aclk_sdgmac_root", 0,
+			RK3576_CLKGATE_CON(43), 13, GFLAGS),
+
+	/* phpphy */
+	GATE(PCLK_PHPPHY_ROOT, "pclk_phpphy_root", "pclk_bus_root", CLK_IS_CRITICAL,
+			RK3576_PHP_CLKGATE_CON(0), 2, GFLAGS),
+	GATE(PCLK_PCIE2_COMBOPHY0, "pclk_pcie2_combophy0", "pclk_phpphy_root", 0,
+			RK3576_PHP_CLKGATE_CON(0), 5, GFLAGS),
+	GATE(PCLK_PCIE2_COMBOPHY1, "pclk_pcie2_combophy1", "pclk_phpphy_root", 0,
+			RK3576_PHP_CLKGATE_CON(0), 7, GFLAGS),
+	COMPOSITE_NOMUX(CLK_PCIE_100M_SRC, "clk_pcie_100m_src", "ppll", 0,
+			RK3576_PHP_CLKSEL_CON(0), 2, 5, DFLAGS,
+			RK3576_PHP_CLKGATE_CON(1), 1, GFLAGS),
+	COMPOSITE_NOMUX(CLK_PCIE_100M_NDUTY_SRC, "clk_pcie_100m_nduty_src", "ppll", 0,
+			RK3576_PHP_CLKSEL_CON(0), 7, 5, DFLAGS,
+			RK3576_PHP_CLKGATE_CON(1), 2, GFLAGS),
+	COMPOSITE_NODIV(CLK_REF_PCIE0_PHY, "clk_ref_pcie0_phy", clk_ref_pcie0_phy_p, 0,
+			RK3576_PHP_CLKSEL_CON(0), 12, 2, MFLAGS,
+			RK3576_PHP_CLKGATE_CON(1), 5, GFLAGS),
+	COMPOSITE_NODIV(CLK_REF_PCIE1_PHY, "clk_ref_pcie1_phy", clk_ref_pcie0_phy_p, 0,
+			RK3576_PHP_CLKSEL_CON(0), 14, 2, MFLAGS,
+			RK3576_PHP_CLKGATE_CON(1), 8, GFLAGS),
+	COMPOSITE_NOMUX(CLK_REF_MPHY_26M, "clk_ref_mphy_26m", "ppll", CLK_IS_CRITICAL,
+			RK3576_PHP_CLKSEL_CON(1), 0, 8, DFLAGS,
+			RK3576_PHP_CLKGATE_CON(1), 9, GFLAGS),
+
+	/* pmu */
+	GATE(CLK_200M_PMU_SRC, "clk_200m_pmu_src", "clk_gpll_div6", 0,
+			RK3576_PMU_CLKGATE_CON(3), 2, GFLAGS),
+	COMPOSITE_NOMUX(CLK_100M_PMU_SRC, "clk_100m_pmu_src", "cpll", 0,
+			RK3576_PMU_CLKSEL_CON(4), 4, 5, DFLAGS,
+			RK3576_PMU_CLKGATE_CON(3), 3, GFLAGS),
+	FACTOR_GATE(CLK_50M_PMU_SRC, "clk_50m_pmu_src", "clk_100m_pmu_src", 0, 1, 2,
+			RK3576_PMU_CLKGATE_CON(3), 4, GFLAGS),
+	COMPOSITE_NODIV(HCLK_PMU1_ROOT, "hclk_pmu1_root", mux_pmu200m_pmu100m_pmu50m_24m_p, CLK_IS_CRITICAL,
+			RK3576_PMU_CLKSEL_CON(4), 0, 2, MFLAGS,
+			RK3576_PMU_CLKGATE_CON(3), 0, GFLAGS),
+	COMPOSITE_NODIV(HCLK_PMU_CM0_ROOT, "hclk_pmu_cm0_root", mux_pmu200m_pmu100m_pmu50m_24m_p, 0,
+			RK3576_PMU_CLKSEL_CON(4), 2, 2, MFLAGS,
+			RK3576_PMU_CLKGATE_CON(3), 1, GFLAGS),
+	COMPOSITE_NODIV(PCLK_PMU0_ROOT, "pclk_pmu0_root", mux_pmu100m_pmu50m_24m_p, 0,
+			RK3576_PMU_CLKSEL_CON(20), 0, 2, MFLAGS,
+			RK3576_PMU_CLKGATE_CON(7), 0, GFLAGS),
+	GATE(PCLK_PMU0, "pclk_pmu0", "pclk_pmu0_root", CLK_IS_CRITICAL,
+			RK3576_PMU_CLKGATE_CON(7), 3, GFLAGS),
+	GATE(PCLK_PMU1_ROOT, "pclk_pmu1_root", "pclk_pmu0_root", CLK_IS_CRITICAL,
+			RK3576_PMU_CLKGATE_CON(7), 9, GFLAGS),
+	GATE(PCLK_PMU1, "pclk_pmu1", "pclk_pmu1_root", CLK_IS_CRITICAL,
+			RK3576_PMU_CLKGATE_CON(3), 15, GFLAGS),
+	GATE(CLK_PMU1, "clk_pmu1", "xin24m", CLK_IS_CRITICAL,
+			RK3576_PMU_CLKGATE_CON(4), 2, GFLAGS),
+	GATE(PCLK_PMUPHY_ROOT, "pclk_pmuphy_root", "pclk_pmu1_root", CLK_IS_CRITICAL,
+			RK3576_PMU_CLKGATE_CON(5), 0, GFLAGS),
+	GATE(PCLK_HDPTX_APB, "pclk_hdptx_apb", "pclk_pmuphy_root", 0,
+			RK3576_PMU_CLKGATE_CON(0), 1, GFLAGS),
+	GATE(PCLK_MIPI_DCPHY, "pclk_mipi_dcphy", "pclk_pmuphy_root", 0,
+			RK3576_PMU_CLKGATE_CON(0), 2, GFLAGS),
+	GATE(PCLK_CSIDPHY, "pclk_csidphy", "pclk_pmuphy_root", 0,
+			RK3576_PMU_CLKGATE_CON(0), 8, GFLAGS),
+	GATE(PCLK_USBDPPHY, "pclk_usbdpphy", "pclk_pmuphy_root", 0,
+			RK3576_PMU_CLKGATE_CON(0), 12, GFLAGS),
+	COMPOSITE_NOMUX(CLK_PMUPHY_REF_SRC, "clk_pmuphy_ref_src", "cpll", 0,
+			RK3576_PMU_CLKSEL_CON(0), 0, 5, DFLAGS,
+			RK3576_PMU_CLKGATE_CON(0), 13, GFLAGS),
+	GATE(CLK_USBDP_COMBO_PHY_IMMORTAL, "clk_usbdp_combo_phy_immortal", "xin24m", 0,
+			RK3576_PMU_CLKGATE_CON(0), 15, GFLAGS),
+	GATE(CLK_HDMITXHPD, "clk_hdmitxhpd", "xin24m", 0,
+			RK3576_PMU_CLKGATE_CON(1), 13, GFLAGS),
+	GATE(PCLK_MPHY, "pclk_mphy", "pclk_pmuphy_root", 0,
+			RK3576_PMU_CLKGATE_CON(2), 0, GFLAGS),
+	MUX(CLK_REF_OSC_MPHY, "clk_ref_osc_mphy", clk_ref_osc_mphy_p, 0,
+			RK3576_PMU_CLKSEL_CON(3), 0, 2, MFLAGS),
+	GATE(CLK_REF_UFS_CLKOUT, "clk_ref_ufs_clkout", "clk_ref_osc_mphy", 0,
+			RK3576_PMU_CLKGATE_CON(2), 5, GFLAGS),
+	GATE(FCLK_PMU_CM0_CORE, "fclk_pmu_cm0_core", "hclk_pmu_cm0_root", 0,
+			RK3576_PMU_CLKGATE_CON(3), 12, GFLAGS),
+	COMPOSITE(CLK_PMU_CM0_RTC, "clk_pmu_cm0_rtc", mux_24m_32k_p, 0,
+			RK3576_PMU_CLKSEL_CON(4), 14, 1, MFLAGS, 9, 5, DFLAGS,
+			RK3576_PMU_CLKGATE_CON(3), 14, GFLAGS),
+	GATE(PCLK_PMU1WDT, "pclk_pmu1wdt", "pclk_pmu1_root", 0,
+			RK3576_PMU_CLKGATE_CON(4), 5, GFLAGS),
+	COMPOSITE_NODIV(TCLK_PMU1WDT, "tclk_pmu1wdt", mux_24m_32k_p, 0,
+			RK3576_PMU_CLKSEL_CON(4), 15, 1, MFLAGS,
+			RK3576_PMU_CLKGATE_CON(4), 6, GFLAGS),
+	GATE(PCLK_PMUTIMER, "pclk_pmutimer", "pclk_pmu1_root", 0,
+			RK3576_PMU_CLKGATE_CON(4), 7, GFLAGS),
+	COMPOSITE_NODIV(CLK_PMUTIMER_ROOT, "clk_pmutimer_root", mux_pmu100m_24m_32k_p, 0,
+			RK3576_PMU_CLKSEL_CON(5), 0, 2, MFLAGS,
+			RK3576_PMU_CLKGATE_CON(4), 8, GFLAGS),
+	GATE(CLK_PMUTIMER0, "clk_pmutimer0", "clk_pmutimer_root", 0,
+			RK3576_PMU_CLKGATE_CON(4), 9, GFLAGS),
+	GATE(CLK_PMUTIMER1, "clk_pmutimer1", "clk_pmutimer_root", 0,
+			RK3576_PMU_CLKGATE_CON(4), 10, GFLAGS),
+	GATE(PCLK_PMU1PWM, "pclk_pmu1pwm", "pclk_pmu1_root", 0,
+			RK3576_PMU_CLKGATE_CON(4), 11, GFLAGS),
+	COMPOSITE_NODIV(CLK_PMU1PWM, "clk_pmu1pwm", mux_pmu100m_pmu50m_24m_p, 0,
+			RK3576_PMU_CLKSEL_CON(5), 2, 2, MFLAGS,
+			RK3576_PMU_CLKGATE_CON(4), 12, GFLAGS),
+	GATE(CLK_PMU1PWM_OSC, "clk_pmu1pwm_osc", "xin24m", 0,
+			RK3576_PMU_CLKGATE_CON(4), 13, GFLAGS),
+	GATE(PCLK_I2C0, "pclk_i2c0", "pclk_pmu1_root", 0,
+			RK3576_PMU_CLKGATE_CON(5), 1, GFLAGS),
+	COMPOSITE_NODIV(CLK_I2C0, "clk_i2c0", mux_pmu200m_pmu100m_pmu50m_24m_p, 0,
+			RK3576_PMU_CLKSEL_CON(6), 7, 2, MFLAGS,
+			RK3576_PMU_CLKGATE_CON(5), 2, GFLAGS),
+	COMPOSITE_NODIV(SCLK_UART1, "sclk_uart1", uart1_p, 0,
+			RK3576_PMU_CLKSEL_CON(8), 0, 1, MFLAGS,
+			RK3576_PMU_CLKGATE_CON(5), 5, GFLAGS),
+	GATE(PCLK_UART1, "pclk_uart1", "pclk_pmu1_root", 0,
+			RK3576_PMU_CLKGATE_CON(5), 6, GFLAGS),
+	GATE(CLK_PDM0, "clk_pdm0", "clk_pdm0_src_top", 0,
+			RK3576_PMU_CLKGATE_CON(5), 13, GFLAGS),
+	GATE(HCLK_PDM0, "hclk_pdm0", "hclk_pmu1_root", 0,
+			RK3576_PMU_CLKGATE_CON(5), 15, GFLAGS),
+	GATE(MCLK_PDM0, "mclk_pdm0", "mclk_pdm0_src_top", 0,
+			RK3576_PMU_CLKGATE_CON(6), 0, GFLAGS),
+	GATE(HCLK_VAD, "hclk_vad", "hclk_pmu1_root", 0,
+			RK3576_PMU_CLKGATE_CON(6), 1, GFLAGS),
+	GATE(CLK_PDM0_OUT, "clk_pdm0_out", "clk_pdm0", 0,
+			RK3576_PMU_CLKGATE_CON(6), 8, GFLAGS),
+	COMPOSITE(CLK_HPTIMER_SRC, "clk_hptimer_src", cpll_24m_p, CLK_IS_CRITICAL,
+			RK3576_PMU_CLKSEL_CON(11), 6, 1, MFLAGS, 1, 5, DFLAGS,
+			RK3576_PMU_CLKGATE_CON(6), 10, GFLAGS),
+	GATE(PCLK_GPIO0, "pclk_gpio0", "pclk_pmu0_root", 0,
+			RK3576_PMU_CLKGATE_CON(7), 6, GFLAGS),
+	COMPOSITE_NODIV(DBCLK_GPIO0, "dbclk_gpio0", mux_24m_32k_p, 0,
+			RK3576_PMU_CLKSEL_CON(20), 2, 1, MFLAGS,
+			RK3576_PMU_CLKGATE_CON(7), 7, GFLAGS),
+	GATE(CLK_OSC0_PMU1, "clk_osc0_pmu1", "xin24m", CLK_IS_CRITICAL,
+			RK3576_PMU_CLKGATE_CON(7), 8, GFLAGS),
+	GATE(CLK_PMU1PWM_RC, "clk_pmu1pwm_rc", "clk_pvtm_clkout", 0,
+			RK3576_PMU_CLKGATE_CON(5), 7, GFLAGS),
+
+	/* phy ref */
+	MUXGRF(CLK_PHY_REF_SRC, "clk_phy_ref_src", clk_phy_ref_src_p,  0,
+			RK3576_PMU0_GRF_OSC_CON6, 4, 1, MFLAGS),
+	MUXGRF(CLK_USBPHY_REF_SRC, "clk_usbphy_ref_src", clk_usbphy_ref_src_p,  0,
+			RK3576_PMU0_GRF_OSC_CON6, 2, 1, MFLAGS),
+	MUXGRF(CLK_CPLL_REF_SRC, "clk_cpll_ref_src", clk_cpll_ref_src_p,  0,
+			RK3576_PMU0_GRF_OSC_CON6, 1, 1, MFLAGS),
+	MUXGRF(CLK_AUPLL_REF_SRC, "clk_aupll_ref_src", clk_aupll_ref_src_p,  0,
+			RK3576_PMU0_GRF_OSC_CON6, 0, 1, MFLAGS),
+
+	/* secure ns */
+	COMPOSITE_NODIV(ACLK_SECURE_NS, "aclk_secure_ns", mux_350m_175m_116m_24m_p, CLK_IS_CRITICAL,
+			RK3576_SECURE_NS_CLKSEL_CON(0), 0, 2, MFLAGS,
+			RK3576_SECURE_NS_CLKGATE_CON(0), 0, GFLAGS),
+	COMPOSITE_NODIV(HCLK_SECURE_NS, "hclk_secure_ns", mux_175m_116m_58m_24m_p, CLK_IS_CRITICAL,
+			RK3576_SECURE_NS_CLKSEL_CON(0), 2, 2, MFLAGS,
+			RK3576_SECURE_NS_CLKGATE_CON(0), 1, GFLAGS),
+	COMPOSITE_NODIV(PCLK_SECURE_NS, "pclk_secure_ns", mux_116m_58m_24m_p, CLK_IS_CRITICAL,
+			RK3576_SECURE_NS_CLKSEL_CON(0), 4, 2, MFLAGS,
+			RK3576_SECURE_NS_CLKGATE_CON(0), 2, GFLAGS),
+	GATE(HCLK_CRYPTO_NS, "hclk_crypto_ns", "hclk_secure_ns", 0,
+			RK3576_SECURE_NS_CLKGATE_CON(0), 3, GFLAGS),
+	GATE(PCLK_OTPC_NS, "pclk_otpc_ns", "pclk_secure_ns", 0,
+			RK3576_SECURE_NS_CLKGATE_CON(0), 8, GFLAGS),
+	GATE(CLK_OTPC_NS, "clk_otpc_ns", "xin24m", 0,
+			RK3576_SECURE_NS_CLKGATE_CON(0), 9, GFLAGS),
+	GATE(ACLK_CRYPTO_NS, "aclk_crypto_ns", "aclk_secure_s", 0,
+			RK3576_NON_SECURE_GATING_CON00, 14, GFLAGS),
+	GATE(HCLK_TRNG_NS, "hclk_trng_ns", "hclk_secure_s", 0,
+			RK3576_NON_SECURE_GATING_CON00, 13, GFLAGS),
+	GATE(CLK_PKA_CRYPTO_NS, "clk_pka_crypto_ns", "clk_pka_crypto_s", 0,
+			RK3576_NON_SECURE_GATING_CON00, 1, GFLAGS),
+
+	/* io */
+	GATE(CLK_VICAP_I0CLK, "clk_vicap_i0clk", "clk_csihost0_clkdata_i", 0,
+			RK3576_CLKGATE_CON(59), 1, GFLAGS),
+	GATE(CLK_VICAP_I1CLK, "clk_vicap_i1clk", "clk_csihost1_clkdata_i", 0,
+			RK3576_CLKGATE_CON(59), 2, GFLAGS),
+	GATE(CLK_VICAP_I2CLK, "clk_vicap_i2clk", "clk_csihost2_clkdata_i", 0,
+			RK3576_CLKGATE_CON(59), 3, GFLAGS),
+	GATE(CLK_VICAP_I3CLK, "clk_vicap_i3clk", "clk_csihost3_clkdata_i", 0,
+			RK3576_CLKGATE_CON(59), 4, GFLAGS),
+	GATE(CLK_VICAP_I4CLK, "clk_vicap_i4clk", "clk_csihost4_clkdata_i", 0,
+			RK3576_CLKGATE_CON(59), 5, GFLAGS),
+};
+
+static void __init rk3576_clk_init(struct device_node *np)
+{
+	struct rockchip_clk_provider *ctx;
+	unsigned long clk_nr_clks;
+	void __iomem *reg_base;
+
+	clk_nr_clks = rockchip_clk_find_max_clk_id(rk3576_clk_branches,
+					ARRAY_SIZE(rk3576_clk_branches)) + 1;
+
+	reg_base = of_iomap(np, 0);
+	if (!reg_base) {
+		pr_err("%s: could not map cru region\n", __func__);
+		return;
+	}
+
+	ctx = rockchip_clk_init(np, reg_base, clk_nr_clks);
+	if (IS_ERR(ctx)) {
+		pr_err("%s: rockchip clk init failed\n", __func__);
+		iounmap(reg_base);
+		return;
+	}
+
+	rockchip_clk_register_plls(ctx, rk3576_pll_clks,
+				   ARRAY_SIZE(rk3576_pll_clks),
+				   RK3576_GRF_SOC_STATUS0);
+
+	rockchip_clk_register_armclk(ctx, ARMCLK_L, "armclk_l",
+			mux_armclkl_p, ARRAY_SIZE(mux_armclkl_p),
+			&rk3576_cpulclk_data, rk3576_cpulclk_rates,
+			ARRAY_SIZE(rk3576_cpulclk_rates));
+	rockchip_clk_register_armclk(ctx, ARMCLK_B, "armclk_b",
+			mux_armclkb_p, ARRAY_SIZE(mux_armclkb_p),
+			&rk3576_cpubclk_data, rk3576_cpubclk_rates,
+			ARRAY_SIZE(rk3576_cpubclk_rates));
+
+	rockchip_clk_register_branches(ctx, rk3576_clk_branches,
+				       ARRAY_SIZE(rk3576_clk_branches));
+
+	rk3588_rst_init(np, reg_base);
+
+	rockchip_register_restart_notifier(ctx, RK3576_GLB_SRST_FST, NULL);
+
+	rockchip_clk_of_add_provider(np, ctx);
+}
+
+CLK_OF_DECLARE(rk3576_cru, "rockchip,rk3576-cru", rk3576_clk_init);
+
+#ifdef MODULE
+struct clk_rk3576_inits {
+	void (*inits)(struct device_node *np);
+};
+
+static const struct clk_rk3576_inits clk_rk3576_cru_init = {
+	.inits = rk3576_clk_init,
+};
+
+static const struct of_device_id clk_rk3576_match_table[] = {
+	{
+		.compatible = "rockchip,rk3576-cru",
+		.data = &clk_rk3576_cru_init,
+	},
+	{ }
+};
+MODULE_DEVICE_TABLE(of, clk_rk3576_match_table);
+
+static int clk_rk3576_probe(struct platform_device *pdev)
+{
+	struct device_node *np = pdev->dev.of_node;
+	const struct of_device_id *match;
+	const struct clk_rk3576_inits *init_data;
+
+	match = of_match_device(clk_rk3576_match_table, &pdev->dev);
+	if (!match || !match->data)
+		return -EINVAL;
+
+	init_data = match->data;
+	if (init_data->inits)
+		init_data->inits(np);
+
+	return 0;
+}
+
+static struct platform_driver clk_rk3576_driver = {
+	.probe		= clk_rk3576_probe,
+	.driver		= {
+		.name	= "clk-rk3576",
+		.of_match_table = clk_rk3576_match_table,
+		.suppress_bind_attrs = true,
+	},
+};
+module_platform_driver(clk_rk3576_driver);
+
+MODULE_DESCRIPTION("Rockchip RK3576 Clock Driver");
+MODULE_LICENSE("GPL");
+#endif /* MODULE */
diff --git a/drivers/clk/rockchip/clk.h b/drivers/clk/rockchip/clk.h
index fd3b476dedda9..43eaeac8a8f62 100644
--- a/drivers/clk/rockchip/clk.h
+++ b/drivers/clk/rockchip/clk.h
@@ -235,6 +235,58 @@ struct clk;
 #define RK3568_PMU_CLKGATE_CON(x)	((x) * 0x4 + 0x180)
 #define RK3568_PMU_SOFTRST_CON(x)	((x) * 0x4 + 0x200)
 
+#define RK3576_PHP_CRU_BASE		0x8000
+#define RK3576_SECURE_NS_CRU_BASE	0x10000
+#define RK3576_PMU_CRU_BASE		0x20000
+#define RK3576_BIGCORE_CRU_BASE		0x38000
+#define RK3576_LITCORE_CRU_BASE		0x40000
+#define RK3576_CCI_CRU_BASE		0x48000
+
+#define RK3576_PLL_CON(x)		RK2928_PLL_CON(x)
+#define RK3576_MODE_CON0		0x280
+#define RK3576_BPLL_MODE_CON0		(RK3576_BIGCORE_CRU_BASE + 0x280)
+#define RK3576_LPLL_MODE_CON0		(RK3576_LITCORE_CRU_BASE + 0x280)
+#define RK3576_PPLL_MODE_CON0		(RK3576_PHP_CRU_BASE + 0x280)
+#define RK3576_CLKSEL_CON(x)		((x) * 0x4 + 0x300)
+#define RK3576_CLKGATE_CON(x)		((x) * 0x4 + 0x800)
+#define RK3576_SOFTRST_CON(x)		((x) * 0x4 + 0xa00)
+#define RK3576_GLB_CNT_TH		0xc00
+#define RK3576_GLB_SRST_FST		0xc08
+#define RK3576_GLB_SRST_SND		0xc0c
+#define RK3576_GLB_RST_CON		0xc10
+#define RK3576_GLB_RST_ST		0xc04
+#define RK3576_SDIO_CON0		0xC24
+#define RK3576_SDIO_CON1		0xC28
+#define RK3576_SDMMC_CON0		0xC30
+#define RK3576_SDMMC_CON1		0xC34
+
+#define RK3576_PHP_CLKSEL_CON(x)	((x) * 0x4 + RK3576_PHP_CRU_BASE + 0x300)
+#define RK3576_PHP_CLKGATE_CON(x)	((x) * 0x4 + RK3576_PHP_CRU_BASE + 0x800)
+#define RK3576_PHP_SOFTRST_CON(x)	((x) * 0x4 + RK3576_PHP_CRU_BASE + 0xa00)
+
+#define RK3576_PMU_PLL_CON(x)		((x) * 0x4 + RK3576_PHP_CRU_BASE)
+#define RK3576_PMU_CLKSEL_CON(x)	((x) * 0x4 + RK3576_PMU_CRU_BASE + 0x300)
+#define RK3576_PMU_CLKGATE_CON(x)	((x) * 0x4 + RK3576_PMU_CRU_BASE + 0x800)
+#define RK3576_PMU_SOFTRST_CON(x)	((x) * 0x4 + RK3576_PMU_CRU_BASE + 0xa00)
+
+#define RK3576_SECURE_NS_CLKSEL_CON(x)	((x) * 0x4 + RK3576_SECURE_NS_CRU_BASE + 0x300)
+#define RK3576_SECURE_NS_CLKGATE_CON(x)	((x) * 0x4 + RK3576_SECURE_NS_CRU_BASE + 0x800)
+#define RK3576_SECURE_NS_SOFTRST_CON(x)	((x) * 0x4 + RK3576_SECURE_NS_CRU_BASE + 0xa00)
+
+#define RK3576_CCI_CLKSEL_CON(x)	((x) * 0x4 + RK3576_CCI_CRU_BASE + 0x300)
+#define RK3576_CCI_CLKGATE_CON(x)	((x) * 0x4 + RK3576_CCI_CRU_BASE + 0x800)
+#define RK3576_CCI_SOFTRST_CON(x)	((x) * 0x4 + RK3576_CCI_CRU_BASE + 0xa00)
+
+#define RK3576_BPLL_CON(x)		((x) * 0x4 + RK3576_BIGCORE_CRU_BASE)
+#define RK3576_BIGCORE_CLKSEL_CON(x)	((x) * 0x4 + RK3576_BIGCORE_CRU_BASE + 0x300)
+#define RK3576_BIGCORE_CLKGATE_CON(x)	((x) * 0x4 + RK3576_BIGCORE_CRU_BASE + 0x800)
+#define RK3576_BIGCORE_SOFTRST_CON(x)	((x) * 0x4 + RK3576_BIGCORE_CRU_BASE + 0xa00)
+#define RK3576_LPLL_CON(x)		((x) * 0x4 + RK3576_CCI_CRU_BASE)
+#define RK3576_LITCORE_CLKSEL_CON(x)	((x) * 0x4 + RK3576_LITCORE_CRU_BASE + 0x300)
+#define RK3576_LITCORE_CLKGATE_CON(x)	((x) * 0x4 + RK3576_LITCORE_CRU_BASE + 0x800)
+#define RK3576_LITCORE_SOFTRST_CON(x)	((x) * 0x4 + RK3576_LITCORE_CRU_BASE + 0xa00)
+#define RK3576_NON_SECURE_GATING_CON00	0xc48
+
 #define RK3588_PHP_CRU_BASE		0x8000
 #define RK3588_PMU_CRU_BASE		0x30000
 #define RK3588_BIGCORE0_CRU_BASE	0x50000
@@ -1025,6 +1077,7 @@ static inline void rockchip_register_softrst(struct device_node *np,
 	return rockchip_register_softrst_lut(np, NULL, num_regs, base, flags);
 }
 
+void rk3576_rst_init(struct device_node *np, void __iomem *reg_base);
 void rk3588_rst_init(struct device_node *np, void __iomem *reg_base);
 
 #endif
diff --git a/drivers/clk/rockchip/rst-rk3576.c b/drivers/clk/rockchip/rst-rk3576.c
new file mode 100644
index 0000000000000..0bc876228be05
--- /dev/null
+++ b/drivers/clk/rockchip/rst-rk3576.c
@@ -0,0 +1,555 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2021 Rockchip Electronics Co., Ltd.
+ * Copyright (c) 2024 Collabora Ltd.
+ * Author: Detlev Casanova <detlev.casanova@collabora.com>
+ * Based on Sebastien Reichel's implementation for RK3588
+ */
+
+#include <linux/module.h>
+#include <linux/of.h>
+#include <dt-bindings/reset/rockchip,rk3576-cru.h>
+#include "clk.h"
+
+/* 0x27200000 + 0x0A00 */
+#define RK3576_CRU_RESET_OFFSET(id, reg, bit) [id] = (0 + reg * 16 + bit)
+
+/* mapping table for reset ID to register offset */
+static const int rk3576_register_offset[] = {
+	/* SOFTRST_CON01 */
+	RK3576_CRU_RESET_OFFSET(SRST_A_TOP_BIU, 1, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_P_TOP_BIU, 1, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_A_TOP_MID_BIU, 1, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_A_SECURE_HIGH_BIU, 1, 7),
+	RK3576_CRU_RESET_OFFSET(SRST_H_TOP_BIU, 1, 14),
+
+	/* SOFTRST_CON02 */
+	RK3576_CRU_RESET_OFFSET(SRST_H_VO0VOP_CHANNEL_BIU, 2, 0),
+	RK3576_CRU_RESET_OFFSET(SRST_A_VO0VOP_CHANNEL_BIU, 2, 1),
+
+	/* SOFTRST_CON06 */
+	RK3576_CRU_RESET_OFFSET(SRST_BISRINTF, 6, 2),
+
+	/* SOFTRST_CON07 */
+	RK3576_CRU_RESET_OFFSET(SRST_H_AUDIO_BIU, 7, 2),
+	RK3576_CRU_RESET_OFFSET(SRST_H_ASRC_2CH_0, 7, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_H_ASRC_2CH_1, 7, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_H_ASRC_4CH_0, 7, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_H_ASRC_4CH_1, 7, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_ASRC_2CH_0, 7, 7),
+	RK3576_CRU_RESET_OFFSET(SRST_ASRC_2CH_1, 7, 8),
+	RK3576_CRU_RESET_OFFSET(SRST_ASRC_4CH_0, 7, 9),
+	RK3576_CRU_RESET_OFFSET(SRST_ASRC_4CH_1, 7, 10),
+	RK3576_CRU_RESET_OFFSET(SRST_M_SAI0_8CH, 7, 12),
+	RK3576_CRU_RESET_OFFSET(SRST_H_SAI0_8CH, 7, 13),
+	RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_RX0, 7, 14),
+	RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_RX0, 7, 15),
+
+	/* SOFTRST_CON08 */
+	RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_RX1, 8, 0),
+	RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_RX1, 8, 1),
+	RK3576_CRU_RESET_OFFSET(SRST_M_SAI1_8CH, 8, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_H_SAI1_8CH, 8, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_M_SAI2_2CH, 8, 8),
+	RK3576_CRU_RESET_OFFSET(SRST_H_SAI2_2CH, 8, 10),
+	RK3576_CRU_RESET_OFFSET(SRST_M_SAI3_2CH, 8, 12),
+	RK3576_CRU_RESET_OFFSET(SRST_H_SAI3_2CH, 8, 14),
+
+	/* SOFTRST_CON09 */
+	RK3576_CRU_RESET_OFFSET(SRST_M_SAI4_2CH, 9, 0),
+	RK3576_CRU_RESET_OFFSET(SRST_H_SAI4_2CH, 9, 2),
+	RK3576_CRU_RESET_OFFSET(SRST_H_ACDCDIG_DSM, 9, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_M_ACDCDIG_DSM, 9, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_PDM1, 9, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_H_PDM1, 9, 7),
+	RK3576_CRU_RESET_OFFSET(SRST_M_PDM1, 9, 8),
+	RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_TX0, 9, 9),
+	RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_TX0, 9, 10),
+	RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_TX1, 9, 11),
+	RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_TX1, 9, 12),
+
+	/* SOFTRST_CON11 */
+	RK3576_CRU_RESET_OFFSET(SRST_A_BUS_BIU, 11, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_P_BUS_BIU, 11, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_P_CRU, 11, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_H_CAN0, 11, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_CAN0, 11, 7),
+	RK3576_CRU_RESET_OFFSET(SRST_H_CAN1, 11, 8),
+	RK3576_CRU_RESET_OFFSET(SRST_CAN1, 11, 9),
+	RK3576_CRU_RESET_OFFSET(SRST_P_INTMUX2BUS, 11, 12),
+	RK3576_CRU_RESET_OFFSET(SRST_P_VCCIO_IOC, 11, 13),
+	RK3576_CRU_RESET_OFFSET(SRST_H_BUS_BIU, 11, 14),
+	RK3576_CRU_RESET_OFFSET(SRST_KEY_SHIFT, 11, 15),
+
+	/* SOFTRST_CON12 */
+	RK3576_CRU_RESET_OFFSET(SRST_P_I2C1, 12, 0),
+	RK3576_CRU_RESET_OFFSET(SRST_P_I2C2, 12, 1),
+	RK3576_CRU_RESET_OFFSET(SRST_P_I2C3, 12, 2),
+	RK3576_CRU_RESET_OFFSET(SRST_P_I2C4, 12, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_P_I2C5, 12, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_P_I2C6, 12, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_P_I2C7, 12, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_P_I2C8, 12, 7),
+	RK3576_CRU_RESET_OFFSET(SRST_P_I2C9, 12, 8),
+	RK3576_CRU_RESET_OFFSET(SRST_P_WDT_BUSMCU, 12, 9),
+	RK3576_CRU_RESET_OFFSET(SRST_T_WDT_BUSMCU, 12, 10),
+	RK3576_CRU_RESET_OFFSET(SRST_A_GIC, 12, 11),
+	RK3576_CRU_RESET_OFFSET(SRST_I2C1, 12, 12),
+	RK3576_CRU_RESET_OFFSET(SRST_I2C2, 12, 13),
+	RK3576_CRU_RESET_OFFSET(SRST_I2C3, 12, 14),
+	RK3576_CRU_RESET_OFFSET(SRST_I2C4, 12, 15),
+
+	/* SOFTRST_CON13 */
+	RK3576_CRU_RESET_OFFSET(SRST_I2C5, 13, 0),
+	RK3576_CRU_RESET_OFFSET(SRST_I2C6, 13, 1),
+	RK3576_CRU_RESET_OFFSET(SRST_I2C7, 13, 2),
+	RK3576_CRU_RESET_OFFSET(SRST_I2C8, 13, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_I2C9, 13, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_P_SARADC, 13, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_SARADC, 13, 7),
+	RK3576_CRU_RESET_OFFSET(SRST_P_TSADC, 13, 8),
+	RK3576_CRU_RESET_OFFSET(SRST_TSADC, 13, 9),
+	RK3576_CRU_RESET_OFFSET(SRST_P_UART0, 13, 10),
+	RK3576_CRU_RESET_OFFSET(SRST_P_UART2, 13, 11),
+	RK3576_CRU_RESET_OFFSET(SRST_P_UART3, 13, 12),
+	RK3576_CRU_RESET_OFFSET(SRST_P_UART4, 13, 13),
+	RK3576_CRU_RESET_OFFSET(SRST_P_UART5, 13, 14),
+	RK3576_CRU_RESET_OFFSET(SRST_P_UART6, 13, 15),
+
+	/* SOFTRST_CON14 */
+	RK3576_CRU_RESET_OFFSET(SRST_P_UART7, 14, 0),
+	RK3576_CRU_RESET_OFFSET(SRST_P_UART8, 14, 1),
+	RK3576_CRU_RESET_OFFSET(SRST_P_UART9, 14, 2),
+	RK3576_CRU_RESET_OFFSET(SRST_P_UART10, 14, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_P_UART11, 14, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_S_UART0, 14, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_S_UART2, 14, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_S_UART3, 14, 9),
+	RK3576_CRU_RESET_OFFSET(SRST_S_UART4, 14, 12),
+	RK3576_CRU_RESET_OFFSET(SRST_S_UART5, 14, 15),
+
+	/* SOFTRST_CON15 */
+	RK3576_CRU_RESET_OFFSET(SRST_S_UART6, 15, 2),
+	RK3576_CRU_RESET_OFFSET(SRST_S_UART7, 15, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_S_UART8, 15, 8),
+	RK3576_CRU_RESET_OFFSET(SRST_S_UART9, 15, 9),
+	RK3576_CRU_RESET_OFFSET(SRST_S_UART10, 15, 10),
+	RK3576_CRU_RESET_OFFSET(SRST_S_UART11, 15, 11),
+	RK3576_CRU_RESET_OFFSET(SRST_P_SPI0, 15, 13),
+	RK3576_CRU_RESET_OFFSET(SRST_P_SPI1, 15, 14),
+	RK3576_CRU_RESET_OFFSET(SRST_P_SPI2, 15, 15),
+
+	/* SOFTRST_CON16 */
+	RK3576_CRU_RESET_OFFSET(SRST_P_SPI3, 16, 0),
+	RK3576_CRU_RESET_OFFSET(SRST_P_SPI4, 16, 1),
+	RK3576_CRU_RESET_OFFSET(SRST_SPI0, 16, 2),
+	RK3576_CRU_RESET_OFFSET(SRST_SPI1, 16, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_SPI2, 16, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_SPI3, 16, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_SPI4, 16, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_P_WDT0, 16, 7),
+	RK3576_CRU_RESET_OFFSET(SRST_T_WDT0, 16, 8),
+	RK3576_CRU_RESET_OFFSET(SRST_P_SYS_GRF, 16, 9),
+	RK3576_CRU_RESET_OFFSET(SRST_P_PWM1, 16, 10),
+	RK3576_CRU_RESET_OFFSET(SRST_PWM1, 16, 11),
+
+	/* SOFTRST_CON17 */
+	RK3576_CRU_RESET_OFFSET(SRST_P_BUSTIMER0, 17, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_P_BUSTIMER1, 17, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_TIMER0, 17, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_TIMER1, 17, 7),
+	RK3576_CRU_RESET_OFFSET(SRST_TIMER2, 17, 8),
+	RK3576_CRU_RESET_OFFSET(SRST_TIMER3, 17, 9),
+	RK3576_CRU_RESET_OFFSET(SRST_TIMER4, 17, 10),
+	RK3576_CRU_RESET_OFFSET(SRST_TIMER5, 17, 11),
+	RK3576_CRU_RESET_OFFSET(SRST_P_BUSIOC, 17, 12),
+	RK3576_CRU_RESET_OFFSET(SRST_P_MAILBOX0, 17, 13),
+	RK3576_CRU_RESET_OFFSET(SRST_P_GPIO1, 17, 15),
+
+	/* SOFTRST_CON18 */
+	RK3576_CRU_RESET_OFFSET(SRST_GPIO1, 18, 0),
+	RK3576_CRU_RESET_OFFSET(SRST_P_GPIO2, 18, 1),
+	RK3576_CRU_RESET_OFFSET(SRST_GPIO2, 18, 2),
+	RK3576_CRU_RESET_OFFSET(SRST_P_GPIO3, 18, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_GPIO3, 18, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_P_GPIO4, 18, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_GPIO4, 18, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_A_DECOM, 18, 7),
+	RK3576_CRU_RESET_OFFSET(SRST_P_DECOM, 18, 8),
+	RK3576_CRU_RESET_OFFSET(SRST_D_DECOM, 18, 9),
+	RK3576_CRU_RESET_OFFSET(SRST_TIMER6, 18, 11),
+	RK3576_CRU_RESET_OFFSET(SRST_TIMER7, 18, 12),
+	RK3576_CRU_RESET_OFFSET(SRST_TIMER8, 18, 13),
+	RK3576_CRU_RESET_OFFSET(SRST_TIMER9, 18, 14),
+	RK3576_CRU_RESET_OFFSET(SRST_TIMER10, 18, 15),
+
+	/* SOFTRST_CON19 */
+	RK3576_CRU_RESET_OFFSET(SRST_TIMER11, 19, 0),
+	RK3576_CRU_RESET_OFFSET(SRST_A_DMAC0, 19, 1),
+	RK3576_CRU_RESET_OFFSET(SRST_A_DMAC1, 19, 2),
+	RK3576_CRU_RESET_OFFSET(SRST_A_DMAC2, 19, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_A_SPINLOCK, 19, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_REF_PVTPLL_BUS, 19, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_H_I3C0, 19, 7),
+	RK3576_CRU_RESET_OFFSET(SRST_H_I3C1, 19, 9),
+	RK3576_CRU_RESET_OFFSET(SRST_H_BUS_CM0_BIU, 19, 11),
+	RK3576_CRU_RESET_OFFSET(SRST_F_BUS_CM0_CORE, 19, 12),
+	RK3576_CRU_RESET_OFFSET(SRST_T_BUS_CM0_JTAG, 19, 13),
+
+	/* SOFTRST_CON20 */
+	RK3576_CRU_RESET_OFFSET(SRST_P_INTMUX2PMU, 20, 0),
+	RK3576_CRU_RESET_OFFSET(SRST_P_INTMUX2DDR, 20, 1),
+	RK3576_CRU_RESET_OFFSET(SRST_P_PVTPLL_BUS, 20, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_P_PWM2, 20, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_PWM2, 20, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_FREQ_PWM1, 20, 8),
+	RK3576_CRU_RESET_OFFSET(SRST_COUNTER_PWM1, 20, 9),
+	RK3576_CRU_RESET_OFFSET(SRST_I3C0, 20, 12),
+	RK3576_CRU_RESET_OFFSET(SRST_I3C1, 20, 13),
+
+	/* SOFTRST_CON21 */
+	RK3576_CRU_RESET_OFFSET(SRST_P_DDR_MON_CH0, 21, 1),
+	RK3576_CRU_RESET_OFFSET(SRST_P_DDR_BIU, 21, 2),
+	RK3576_CRU_RESET_OFFSET(SRST_P_DDR_UPCTL_CH0, 21, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_TM_DDR_MON_CH0, 21, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_BIU, 21, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_DFI_CH0, 21, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_DDR_MON_CH0, 21, 10),
+	RK3576_CRU_RESET_OFFSET(SRST_P_DDR_HWLP_CH0, 21, 13),
+	RK3576_CRU_RESET_OFFSET(SRST_P_DDR_MON_CH1, 21, 14),
+	RK3576_CRU_RESET_OFFSET(SRST_P_DDR_HWLP_CH1, 21, 15),
+
+	/* SOFTRST_CON22 */
+	RK3576_CRU_RESET_OFFSET(SRST_P_DDR_UPCTL_CH1, 22, 0),
+	RK3576_CRU_RESET_OFFSET(SRST_TM_DDR_MON_CH1, 22, 1),
+	RK3576_CRU_RESET_OFFSET(SRST_DFI_CH1, 22, 2),
+	RK3576_CRU_RESET_OFFSET(SRST_A_DDR01_MSCH0, 22, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_A_DDR01_MSCH1, 22, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_DDR_MON_CH1, 22, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_DDR_SCRAMBLE_CH0, 22, 9),
+	RK3576_CRU_RESET_OFFSET(SRST_DDR_SCRAMBLE_CH1, 22, 10),
+	RK3576_CRU_RESET_OFFSET(SRST_P_AHB2APB, 22, 12),
+	RK3576_CRU_RESET_OFFSET(SRST_H_AHB2APB, 22, 13),
+	RK3576_CRU_RESET_OFFSET(SRST_H_DDR_BIU, 22, 14),
+	RK3576_CRU_RESET_OFFSET(SRST_F_DDR_CM0_CORE, 22, 15),
+
+	/* SOFTRST_CON23 */
+	RK3576_CRU_RESET_OFFSET(SRST_P_DDR01_MSCH0, 23, 1),
+	RK3576_CRU_RESET_OFFSET(SRST_P_DDR01_MSCH1, 23, 2),
+	RK3576_CRU_RESET_OFFSET(SRST_DDR_TIMER0, 23, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_DDR_TIMER1, 23, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_T_WDT_DDR, 23, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_P_WDT, 23, 7),
+	RK3576_CRU_RESET_OFFSET(SRST_P_TIMER, 23, 8),
+	RK3576_CRU_RESET_OFFSET(SRST_T_DDR_CM0_JTAG, 23, 9),
+	RK3576_CRU_RESET_OFFSET(SRST_P_DDR_GRF, 23, 11),
+
+	/* SOFTRST_CON25 */
+	RK3576_CRU_RESET_OFFSET(SRST_DDR_UPCTL_CH0, 25, 1),
+	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_0_CH0, 25, 2),
+	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_1_CH0, 25, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_2_CH0, 25, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_3_CH0, 25, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_4_CH0, 25, 6),
+
+	/* SOFTRST_CON26 */
+	RK3576_CRU_RESET_OFFSET(SRST_DDR_UPCTL_CH1, 26, 1),
+	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_0_CH1, 26, 2),
+	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_1_CH1, 26, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_2_CH1, 26, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_3_CH1, 26, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_4_CH1, 26, 6),
+
+	/* SOFTRST_CON27 */
+	RK3576_CRU_RESET_OFFSET(SRST_REF_PVTPLL_DDR, 27, 0),
+	RK3576_CRU_RESET_OFFSET(SRST_P_PVTPLL_DDR, 27, 1),
+
+	/* SOFTRST_CON28 */
+	RK3576_CRU_RESET_OFFSET(SRST_A_RKNN0, 28, 9),
+	RK3576_CRU_RESET_OFFSET(SRST_A_RKNN0_BIU, 28, 11),
+	RK3576_CRU_RESET_OFFSET(SRST_L_RKNN0_BIU, 28, 12),
+
+	/* SOFTRST_CON29 */
+	RK3576_CRU_RESET_OFFSET(SRST_A_RKNN1, 29, 0),
+	RK3576_CRU_RESET_OFFSET(SRST_A_RKNN1_BIU, 29, 2),
+	RK3576_CRU_RESET_OFFSET(SRST_L_RKNN1_BIU, 29, 3),
+
+	/* SOFTRST_CON31 */
+	RK3576_CRU_RESET_OFFSET(SRST_NPU_DAP, 31, 0),
+	RK3576_CRU_RESET_OFFSET(SRST_L_NPUSUBSYS_BIU, 31, 1),
+	RK3576_CRU_RESET_OFFSET(SRST_P_NPUTOP_BIU, 31, 9),
+	RK3576_CRU_RESET_OFFSET(SRST_P_NPU_TIMER, 31, 10),
+	RK3576_CRU_RESET_OFFSET(SRST_NPUTIMER0, 31, 12),
+	RK3576_CRU_RESET_OFFSET(SRST_NPUTIMER1, 31, 13),
+	RK3576_CRU_RESET_OFFSET(SRST_P_NPU_WDT, 31, 14),
+	RK3576_CRU_RESET_OFFSET(SRST_T_NPU_WDT, 31, 15),
+
+	/* SOFTRST_CON32 */
+	RK3576_CRU_RESET_OFFSET(SRST_A_RKNN_CBUF, 32, 0),
+	RK3576_CRU_RESET_OFFSET(SRST_A_RVCORE0, 32, 1),
+	RK3576_CRU_RESET_OFFSET(SRST_P_NPU_GRF, 32, 2),
+	RK3576_CRU_RESET_OFFSET(SRST_P_PVTPLL_NPU, 32, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_NPU_PVTPLL, 32, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_H_NPU_CM0_BIU, 32, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_F_NPU_CM0_CORE, 32, 7),
+	RK3576_CRU_RESET_OFFSET(SRST_T_NPU_CM0_JTAG, 32, 8),
+	RK3576_CRU_RESET_OFFSET(SRST_A_RKNNTOP_BIU, 32, 11),
+	RK3576_CRU_RESET_OFFSET(SRST_H_RKNN_CBUF, 32, 12),
+	RK3576_CRU_RESET_OFFSET(SRST_H_RKNNTOP_BIU, 32, 13),
+
+	/* SOFTRST_CON33 */
+	RK3576_CRU_RESET_OFFSET(SRST_H_NVM_BIU, 33, 2),
+	RK3576_CRU_RESET_OFFSET(SRST_A_NVM_BIU, 33, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_S_FSPI, 33, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_H_FSPI, 33, 7),
+	RK3576_CRU_RESET_OFFSET(SRST_C_EMMC, 33, 8),
+	RK3576_CRU_RESET_OFFSET(SRST_H_EMMC, 33, 9),
+	RK3576_CRU_RESET_OFFSET(SRST_A_EMMC, 33, 10),
+	RK3576_CRU_RESET_OFFSET(SRST_B_EMMC, 33, 11),
+	RK3576_CRU_RESET_OFFSET(SRST_T_EMMC, 33, 12),
+
+	/* SOFTRST_CON34 */
+	RK3576_CRU_RESET_OFFSET(SRST_P_GRF, 34, 1),
+	RK3576_CRU_RESET_OFFSET(SRST_P_PHP_BIU, 34, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_A_PHP_BIU, 34, 9),
+	RK3576_CRU_RESET_OFFSET(SRST_P_PCIE0, 34, 13),
+	RK3576_CRU_RESET_OFFSET(SRST_PCIE0_POWER_UP, 34, 15),
+
+	/* SOFTRST_CON35 */
+	RK3576_CRU_RESET_OFFSET(SRST_A_USB3OTG1, 35, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_A_MMU0, 35, 11),
+	RK3576_CRU_RESET_OFFSET(SRST_A_SLV_MMU0, 35, 13),
+	RK3576_CRU_RESET_OFFSET(SRST_A_MMU1, 35, 14),
+
+	/* SOFTRST_CON36 */
+	RK3576_CRU_RESET_OFFSET(SRST_A_SLV_MMU1, 36, 0),
+	RK3576_CRU_RESET_OFFSET(SRST_P_PCIE1, 36, 7),
+	RK3576_CRU_RESET_OFFSET(SRST_PCIE1_POWER_UP, 36, 9),
+
+	/* SOFTRST_CON37 */
+	RK3576_CRU_RESET_OFFSET(SRST_RXOOB0, 37, 0),
+	RK3576_CRU_RESET_OFFSET(SRST_RXOOB1, 37, 1),
+	RK3576_CRU_RESET_OFFSET(SRST_PMALIVE0, 37, 2),
+	RK3576_CRU_RESET_OFFSET(SRST_PMALIVE1, 37, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_A_SATA0, 37, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_A_SATA1, 37, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_ASIC1, 37, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_ASIC0, 37, 7),
+
+	/* SOFTRST_CON40 */
+	RK3576_CRU_RESET_OFFSET(SRST_P_CSIDPHY1, 40, 2),
+	RK3576_CRU_RESET_OFFSET(SRST_SCAN_CSIDPHY1, 40, 3),
+
+	/* SOFTRST_CON42 */
+	RK3576_CRU_RESET_OFFSET(SRST_P_SDGMAC_GRF, 42, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_P_SDGMAC_BIU, 42, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_A_SDGMAC_BIU, 42, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_H_SDGMAC_BIU, 42, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_A_GMAC0, 42, 7),
+	RK3576_CRU_RESET_OFFSET(SRST_A_GMAC1, 42, 8),
+	RK3576_CRU_RESET_OFFSET(SRST_P_GMAC0, 42, 9),
+	RK3576_CRU_RESET_OFFSET(SRST_P_GMAC1, 42, 10),
+	RK3576_CRU_RESET_OFFSET(SRST_H_SDIO, 42, 12),
+
+	/* SOFTRST_CON43 */
+	RK3576_CRU_RESET_OFFSET(SRST_H_SDMMC0, 43, 2),
+	RK3576_CRU_RESET_OFFSET(SRST_S_FSPI1, 43, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_H_FSPI1, 43, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_A_DSMC_BIU, 43, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_A_DSMC, 43, 7),
+	RK3576_CRU_RESET_OFFSET(SRST_P_DSMC, 43, 8),
+	RK3576_CRU_RESET_OFFSET(SRST_H_HSGPIO, 43, 10),
+	RK3576_CRU_RESET_OFFSET(SRST_HSGPIO, 43, 11),
+	RK3576_CRU_RESET_OFFSET(SRST_A_HSGPIO, 43, 13),
+
+	/* SOFTRST_CON45 */
+	RK3576_CRU_RESET_OFFSET(SRST_H_RKVDEC, 45, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_H_RKVDEC_BIU, 45, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_A_RKVDEC_BIU, 45, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_RKVDEC_HEVC_CA, 45, 8),
+	RK3576_CRU_RESET_OFFSET(SRST_RKVDEC_CORE, 45, 9),
+
+	/* SOFTRST_CON47 */
+	RK3576_CRU_RESET_OFFSET(SRST_A_USB_BIU, 47, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_P_USBUFS_BIU, 47, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_A_USB3OTG0, 47, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_A_UFS_BIU, 47, 10),
+	RK3576_CRU_RESET_OFFSET(SRST_A_MMU2, 47, 12),
+	RK3576_CRU_RESET_OFFSET(SRST_A_SLV_MMU2, 47, 13),
+	RK3576_CRU_RESET_OFFSET(SRST_A_UFS_SYS, 47, 15),
+
+	/* SOFTRST_CON48 */
+	RK3576_CRU_RESET_OFFSET(SRST_A_UFS, 48, 0),
+	RK3576_CRU_RESET_OFFSET(SRST_P_USBUFS_GRF, 48, 1),
+	RK3576_CRU_RESET_OFFSET(SRST_P_UFS_GRF, 48, 2),
+
+	/* SOFTRST_CON49 */
+	RK3576_CRU_RESET_OFFSET(SRST_H_VPU_BIU, 49, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_A_JPEG_BIU, 49, 7),
+	RK3576_CRU_RESET_OFFSET(SRST_A_RGA_BIU, 49, 10),
+	RK3576_CRU_RESET_OFFSET(SRST_A_VDPP_BIU, 49, 11),
+	RK3576_CRU_RESET_OFFSET(SRST_A_EBC_BIU, 49, 12),
+	RK3576_CRU_RESET_OFFSET(SRST_H_RGA2E_0, 49, 13),
+	RK3576_CRU_RESET_OFFSET(SRST_A_RGA2E_0, 49, 14),
+	RK3576_CRU_RESET_OFFSET(SRST_CORE_RGA2E_0, 49, 15),
+
+	/* SOFTRST_CON50 */
+	RK3576_CRU_RESET_OFFSET(SRST_A_JPEG, 50, 0),
+	RK3576_CRU_RESET_OFFSET(SRST_H_JPEG, 50, 1),
+	RK3576_CRU_RESET_OFFSET(SRST_H_VDPP, 50, 2),
+	RK3576_CRU_RESET_OFFSET(SRST_A_VDPP, 50, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_CORE_VDPP, 50, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_H_RGA2E_1, 50, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_A_RGA2E_1, 50, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_CORE_RGA2E_1, 50, 7),
+	RK3576_CRU_RESET_OFFSET(SRST_H_EBC, 50, 10),
+	RK3576_CRU_RESET_OFFSET(SRST_A_EBC, 50, 11),
+	RK3576_CRU_RESET_OFFSET(SRST_D_EBC, 50, 12),
+
+	/* SOFTRST_CON51 */
+	RK3576_CRU_RESET_OFFSET(SRST_H_VEPU0_BIU, 51, 2),
+	RK3576_CRU_RESET_OFFSET(SRST_A_VEPU0_BIU, 51, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_H_VEPU0, 51, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_A_VEPU0, 51, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_VEPU0_CORE, 51, 6),
+
+	/* SOFTRST_CON53 */
+	RK3576_CRU_RESET_OFFSET(SRST_A_VI_BIU, 53, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_H_VI_BIU, 53, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_P_VI_BIU, 53, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_D_VICAP, 53, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_A_VICAP, 53, 7),
+	RK3576_CRU_RESET_OFFSET(SRST_H_VICAP, 53, 8),
+	RK3576_CRU_RESET_OFFSET(SRST_ISP0, 53, 10),
+	RK3576_CRU_RESET_OFFSET(SRST_ISP0_VICAP, 53, 11),
+
+	/* SOFTRST_CON54 */
+	RK3576_CRU_RESET_OFFSET(SRST_CORE_VPSS, 54, 1),
+	RK3576_CRU_RESET_OFFSET(SRST_P_CSI_HOST_0, 54, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_P_CSI_HOST_1, 54, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_P_CSI_HOST_2, 54, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_P_CSI_HOST_3, 54, 7),
+	RK3576_CRU_RESET_OFFSET(SRST_P_CSI_HOST_4, 54, 8),
+
+	/* SOFTRST_CON59 */
+	RK3576_CRU_RESET_OFFSET(SRST_CIFIN, 59, 0),
+	RK3576_CRU_RESET_OFFSET(SRST_VICAP_I0CLK, 59, 1),
+	RK3576_CRU_RESET_OFFSET(SRST_VICAP_I1CLK, 59, 2),
+	RK3576_CRU_RESET_OFFSET(SRST_VICAP_I2CLK, 59, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_VICAP_I3CLK, 59, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_VICAP_I4CLK, 59, 5),
+
+	/* SOFTRST_CON61 */
+	RK3576_CRU_RESET_OFFSET(SRST_A_VOP_BIU, 61, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_A_VOP2_BIU, 61, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_H_VOP_BIU, 61, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_P_VOP_BIU, 61, 7),
+	RK3576_CRU_RESET_OFFSET(SRST_H_VOP, 61, 8),
+	RK3576_CRU_RESET_OFFSET(SRST_A_VOP, 61, 9),
+	RK3576_CRU_RESET_OFFSET(SRST_D_VP0, 61, 13),
+
+	/* SOFTRST_CON62 */
+	RK3576_CRU_RESET_OFFSET(SRST_D_VP1, 62, 0),
+	RK3576_CRU_RESET_OFFSET(SRST_D_VP2, 62, 1),
+	RK3576_CRU_RESET_OFFSET(SRST_P_VOP2_BIU, 62, 2),
+	RK3576_CRU_RESET_OFFSET(SRST_P_VOPGRF, 62, 3),
+
+	/* SOFTRST_CON63 */
+	RK3576_CRU_RESET_OFFSET(SRST_H_VO0_BIU, 63, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_P_VO0_BIU, 63, 7),
+	RK3576_CRU_RESET_OFFSET(SRST_A_HDCP0_BIU, 63, 9),
+	RK3576_CRU_RESET_OFFSET(SRST_P_VO0_GRF, 63, 10),
+	RK3576_CRU_RESET_OFFSET(SRST_A_HDCP0, 63, 12),
+	RK3576_CRU_RESET_OFFSET(SRST_H_HDCP0, 63, 13),
+	RK3576_CRU_RESET_OFFSET(SRST_HDCP0, 63, 14),
+
+	/* SOFTRST_CON64 */
+	RK3576_CRU_RESET_OFFSET(SRST_P_DSIHOST0, 64, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_DSIHOST0, 64, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_P_HDMITX0, 64, 7),
+	RK3576_CRU_RESET_OFFSET(SRST_HDMITX0_REF, 64, 9),
+	RK3576_CRU_RESET_OFFSET(SRST_P_EDP0, 64, 13),
+	RK3576_CRU_RESET_OFFSET(SRST_EDP0_24M, 64, 14),
+
+	/* SOFTRST_CON65 */
+	RK3576_CRU_RESET_OFFSET(SRST_M_SAI5_8CH, 65, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_H_SAI5_8CH, 65, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_M_SAI6_8CH, 65, 8),
+	RK3576_CRU_RESET_OFFSET(SRST_H_SAI6_8CH, 65, 9),
+	RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_TX2, 65, 10),
+	RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_TX2, 65, 13),
+	RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_RX2, 65, 14),
+	RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_RX2, 65, 15),
+
+	/* SOFTRST_CON66 */
+	RK3576_CRU_RESET_OFFSET(SRST_H_SAI8_8CH, 66, 0),
+	RK3576_CRU_RESET_OFFSET(SRST_M_SAI8_8CH, 66, 2),
+
+	/* SOFTRST_CON67 */
+	RK3576_CRU_RESET_OFFSET(SRST_H_VO1_BIU, 67, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_P_VO1_BIU, 67, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_M_SAI7_8CH, 67, 9),
+	RK3576_CRU_RESET_OFFSET(SRST_H_SAI7_8CH, 67, 10),
+	RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_TX3, 67, 11),
+	RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_TX4, 67, 12),
+	RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_TX5, 67, 13),
+	RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_TX3, 67, 14),
+
+	/* SOFTRST_CON68 */
+	RK3576_CRU_RESET_OFFSET(SRST_DP0, 68, 0),
+	RK3576_CRU_RESET_OFFSET(SRST_P_VO1_GRF, 68, 2),
+	RK3576_CRU_RESET_OFFSET(SRST_A_HDCP1_BIU, 68, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_A_HDCP1, 68, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_H_HDCP1, 68, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_HDCP1, 68, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_H_SAI9_8CH, 68, 9),
+	RK3576_CRU_RESET_OFFSET(SRST_M_SAI9_8CH, 68, 11),
+	RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_TX4, 68, 12),
+	RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_TX5, 68, 13),
+
+	/* SOFTRST_CON69 */
+	RK3576_CRU_RESET_OFFSET(SRST_GPU, 69, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_A_S_GPU_BIU, 69, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_A_M0_GPU_BIU, 69, 7),
+	RK3576_CRU_RESET_OFFSET(SRST_P_GPU_BIU, 69, 9),
+	RK3576_CRU_RESET_OFFSET(SRST_P_GPU_GRF, 69, 13),
+	RK3576_CRU_RESET_OFFSET(SRST_GPU_PVTPLL, 69, 14),
+	RK3576_CRU_RESET_OFFSET(SRST_P_PVTPLL_GPU, 69, 15),
+
+	/* SOFTRST_CON72 */
+	RK3576_CRU_RESET_OFFSET(SRST_A_CENTER_BIU, 72, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_A_DMA2DDR, 72, 5),
+	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_SHAREMEM, 72, 6),
+	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_SHAREMEM_BIU, 72, 7),
+	RK3576_CRU_RESET_OFFSET(SRST_H_CENTER_BIU, 72, 8),
+	RK3576_CRU_RESET_OFFSET(SRST_P_CENTER_GRF, 72, 9),
+	RK3576_CRU_RESET_OFFSET(SRST_P_DMA2DDR, 72, 10),
+	RK3576_CRU_RESET_OFFSET(SRST_P_SHAREMEM, 72, 11),
+	RK3576_CRU_RESET_OFFSET(SRST_P_CENTER_BIU, 72, 12),
+
+	/* SOFTRST_CON75 */
+	RK3576_CRU_RESET_OFFSET(SRST_LINKSYM_HDMITXPHY0, 75, 1),
+
+	/* SOFTRST_CON78 */
+	RK3576_CRU_RESET_OFFSET(SRST_DP0_PIXELCLK, 78, 1),
+	RK3576_CRU_RESET_OFFSET(SRST_PHY_DP0_TX, 78, 2),
+	RK3576_CRU_RESET_OFFSET(SRST_DP1_PIXELCLK, 78, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_DP2_PIXELCLK, 78, 4),
+
+	/* SOFTRST_CON79 */
+	RK3576_CRU_RESET_OFFSET(SRST_H_VEPU1_BIU, 79, 1),
+	RK3576_CRU_RESET_OFFSET(SRST_A_VEPU1_BIU, 79, 2),
+	RK3576_CRU_RESET_OFFSET(SRST_H_VEPU1, 79, 3),
+	RK3576_CRU_RESET_OFFSET(SRST_A_VEPU1, 79, 4),
+	RK3576_CRU_RESET_OFFSET(SRST_VEPU1_CORE, 79, 5),
+};
+
+void rk3576_rst_init(struct device_node *np, void __iomem *reg_base)
+{
+	rockchip_register_softrst_lut(np,
+				      rk3576_register_offset,
+				      ARRAY_SIZE(rk3576_register_offset),
+				      reg_base + RK3576_SOFTRST_CON(0),
+				      ROCKCHIP_SOFTRST_HIWORD_MASK);
+}
+
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 3/3] clk: rockchip: Add clock controller for the RK3576
  2024-08-02 21:35 ` [PATCH v2 3/3] clk: rockchip: Add clock controller for the RK3576 Detlev Casanova
@ 2024-08-03  6:53   ` zhangqing
       [not found]   ` <a9a9219d-325c-4afa-b40c-b261ff95263c@rock-chips.com>
  1 sibling, 0 replies; 13+ messages in thread
From: zhangqing @ 2024-08-03  6:53 UTC (permalink / raw)
  To: Detlev Casanova, linux-kernel
  Cc: Michael Turquette, Stephen Boyd, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Heiko Stuebner, Philipp Zabel, linux-clk,
	devicetree, linux-arm-kernel, linux-rockchip, kernel, Finley Xiao,
	YouMin Chen, Liang Chen, Sugar Zhang


在 2024/8/3 5:35, Detlev Casanova 写道:
> From: Elaine Zhang <zhangqing@rock-chips.com>
>
> Add the clock and reset tree definitions for the new RK3576
> SoC.
>
> Signed-off-by: Elaine Zhang <zhangqing@rock-chips.com>
> Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com>
> Signed-off-by: YouMin Chen <cym@rock-chips.com>
> Signed-off-by: Liang Chen <cl@rock-chips.com>
> Signed-off-by: Sugar Zhang <sugar.zhang@rock-chips.com>
> [rebase, squash and renumber resets]
> Signed-off-by: Detlev Casanova <detlev.casanova@collabora.com>
> ---
>   drivers/clk/rockchip/Kconfig      |    7 +
>   drivers/clk/rockchip/Makefile     |    1 +
>   drivers/clk/rockchip/clk-rk3576.c | 1819 +++++++++++++++++++++++++++++
>   drivers/clk/rockchip/clk.h        |   53 +
>   drivers/clk/rockchip/rst-rk3576.c |  555 +++++++++
>   5 files changed, 2435 insertions(+)
>   create mode 100644 drivers/clk/rockchip/clk-rk3576.c
>   create mode 100644 drivers/clk/rockchip/rst-rk3576.c
>
> diff --git a/drivers/clk/rockchip/Kconfig b/drivers/clk/rockchip/Kconfig
> index 9aad86925cd28..f8eb16f170d48 100644
> --- a/drivers/clk/rockchip/Kconfig
> +++ b/drivers/clk/rockchip/Kconfig
> @@ -100,6 +100,13 @@ config CLK_RK3568
>   	help
>   	  Build the driver for RK3568 Clock Driver.
>   
> +config CLK_RK3576
> +	tristate "Rockchip RK3576 clock controller support"
> +	depends on ARM64 || COMPILE_TEST
> +	default y
> +	help
> +	  Build the driver for RK3576 Clock Driver.
> +
>   config CLK_RK3588
>   	bool "Rockchip RK3588 clock controller support"
>   	depends on ARM64 || COMPILE_TEST
> diff --git a/drivers/clk/rockchip/Makefile b/drivers/clk/rockchip/Makefile
> index 36894f6a7022d..af2ade54a7efa 100644
> --- a/drivers/clk/rockchip/Makefile
> +++ b/drivers/clk/rockchip/Makefile
> @@ -28,4 +28,5 @@ obj-$(CONFIG_CLK_RK3328)        += clk-rk3328.o
>   obj-$(CONFIG_CLK_RK3368)        += clk-rk3368.o
>   obj-$(CONFIG_CLK_RK3399)        += clk-rk3399.o
>   obj-$(CONFIG_CLK_RK3568)	+= clk-rk3568.o
> +obj-$(CONFIG_CLK_RK3576)	+= clk-rk3576.o rst-rk3576.o
>   obj-$(CONFIG_CLK_RK3588)	+= clk-rk3588.o rst-rk3588.o
> diff --git a/drivers/clk/rockchip/clk-rk3576.c b/drivers/clk/rockchip/clk-rk3576.c
> new file mode 100644
> index 0000000000000..5725706e9b6bb
> --- /dev/null
> +++ b/drivers/clk/rockchip/clk-rk3576.c
> @@ -0,0 +1,1819 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Copyright (c) 2023 Rockchip Electronics Co. Ltd.
> + * Author: Elaine Zhang <zhangqing@rock-chips.com>
> + */
> +
> +#include <linux/clk-provider.h>
> +#include <linux/module.h>
> +#include <linux/of.h>
> +#include <linux/of_device.h>
> +#include <linux/of_address.h>
> +#include <linux/syscore_ops.h>
> +#include <dt-bindings/clock/rockchip,rk3576-cru.h>
> +#include "clk.h"
> +
> +#define RK3576_GRF_SOC_STATUS0		0x600
> +#define RK3576_PMU0_GRF_OSC_CON6	0x18
> +
> +enum rk3576_plls {
> +	bpll, lpll, vpll, aupll, cpll, gpll, ppll,
> +};
> +
> +static struct rockchip_pll_rate_table rk3576_pll_rates[] = {
> +	/* _mhz, _p, _m, _s, _k */
> +	RK3588_PLL_RATE(2520000000, 2, 210, 0, 0),
> +	RK3588_PLL_RATE(2496000000, 2, 208, 0, 0),
> +	RK3588_PLL_RATE(2472000000, 2, 206, 0, 0),
> +	RK3588_PLL_RATE(2448000000, 2, 204, 0, 0),
> +	RK3588_PLL_RATE(2424000000, 2, 202, 0, 0),
> +	RK3588_PLL_RATE(2400000000, 2, 200, 0, 0),
> +	RK3588_PLL_RATE(2376000000, 2, 198, 0, 0),
> +	RK3588_PLL_RATE(2352000000, 2, 196, 0, 0),
> +	RK3588_PLL_RATE(2328000000, 2, 194, 0, 0),
> +	RK3588_PLL_RATE(2304000000, 2, 192, 0, 0),
> +	RK3588_PLL_RATE(2280000000, 2, 190, 0, 0),
> +	RK3588_PLL_RATE(2256000000, 2, 376, 1, 0),
> +	RK3588_PLL_RATE(2232000000, 2, 372, 1, 0),
> +	RK3588_PLL_RATE(2208000000, 2, 368, 1, 0),
> +	RK3588_PLL_RATE(2184000000, 2, 364, 1, 0),
> +	RK3588_PLL_RATE(2160000000, 2, 360, 1, 0),
> +	RK3588_PLL_RATE(2136000000, 2, 356, 1, 0),
> +	RK3588_PLL_RATE(2112000000, 2, 352, 1, 0),
> +	RK3588_PLL_RATE(2088000000, 2, 348, 1, 0),
> +	RK3588_PLL_RATE(2064000000, 2, 344, 1, 0),
> +	RK3588_PLL_RATE(2040000000, 2, 340, 1, 0),
> +	RK3588_PLL_RATE(2016000000, 2, 336, 1, 0),
> +	RK3588_PLL_RATE(1992000000, 2, 332, 1, 0),
> +	RK3588_PLL_RATE(1968000000, 2, 328, 1, 0),
> +	RK3588_PLL_RATE(1944000000, 2, 324, 1, 0),
> +	RK3588_PLL_RATE(1920000000, 2, 320, 1, 0),
> +	RK3588_PLL_RATE(1896000000, 2, 316, 1, 0),
> +	RK3588_PLL_RATE(1872000000, 2, 312, 1, 0),
> +	RK3588_PLL_RATE(1848000000, 2, 308, 1, 0),
> +	RK3588_PLL_RATE(1824000000, 2, 304, 1, 0),
> +	RK3588_PLL_RATE(1800000000, 2, 300, 1, 0),
> +	RK3588_PLL_RATE(1776000000, 2, 296, 1, 0),
> +	RK3588_PLL_RATE(1752000000, 2, 292, 1, 0),
> +	RK3588_PLL_RATE(1728000000, 2, 288, 1, 0),
> +	RK3588_PLL_RATE(1704000000, 2, 284, 1, 0),
> +	RK3588_PLL_RATE(1680000000, 2, 280, 1, 0),
> +	RK3588_PLL_RATE(1656000000, 2, 276, 1, 0),
> +	RK3588_PLL_RATE(1632000000, 2, 272, 1, 0),
> +	RK3588_PLL_RATE(1608000000, 2, 268, 1, 0),
> +	RK3588_PLL_RATE(1584000000, 2, 264, 1, 0),
> +	RK3588_PLL_RATE(1560000000, 2, 260, 1, 0),
> +	RK3588_PLL_RATE(1536000000, 2, 256, 1, 0),
> +	RK3588_PLL_RATE(1512000000, 2, 252, 1, 0),
> +	RK3588_PLL_RATE(1488000000, 2, 248, 1, 0),
> +	RK3588_PLL_RATE(1464000000, 2, 244, 1, 0),
> +	RK3588_PLL_RATE(1440000000, 2, 240, 1, 0),
> +	RK3588_PLL_RATE(1416000000, 2, 236, 1, 0),
> +	RK3588_PLL_RATE(1392000000, 2, 232, 1, 0),
> +	RK3588_PLL_RATE(1320000000, 2, 220, 1, 0),
> +	RK3588_PLL_RATE(1200000000, 2, 200, 1, 0),
> +	RK3588_PLL_RATE(1188000000, 2, 198, 1, 0),
> +	RK3588_PLL_RATE(1100000000, 3, 550, 2, 0),
> +	RK3588_PLL_RATE(1008000000, 2, 336, 2, 0),
> +	RK3588_PLL_RATE(1000000000, 3, 500, 2, 0),
> +	RK3588_PLL_RATE(983040000, 4, 655, 2, 23592),
> +	RK3588_PLL_RATE(955520000, 3, 477, 2, 49806),
> +	RK3588_PLL_RATE(903168000, 6, 903, 2, 11009),
> +	RK3588_PLL_RATE(900000000, 2, 300, 2, 0),
> +	RK3588_PLL_RATE(816000000, 2, 272, 2, 0),
> +	RK3588_PLL_RATE(786432000, 2, 262, 2, 9437),
> +	RK3588_PLL_RATE(786000000, 1, 131, 2, 0),
> +	RK3588_PLL_RATE(785560000, 3, 392, 2, 51117),
> +	RK3588_PLL_RATE(722534400, 8, 963, 2, 24850),
> +	RK3588_PLL_RATE(600000000, 2, 200, 2, 0),
> +	RK3588_PLL_RATE(594000000, 2, 198, 2, 0),
> +	RK3588_PLL_RATE(408000000, 2, 272, 3, 0),
> +	RK3588_PLL_RATE(312000000, 2, 208, 3, 0),
> +	RK3588_PLL_RATE(216000000, 2, 288, 4, 0),
> +	RK3588_PLL_RATE(96000000, 2, 256, 5, 0),
> +	{ /* sentinel */ },
> +};
> +
> +static struct rockchip_pll_rate_table rk3576_ppll_rates[] = {
> +	/* _mhz, _p, _m, _s, _k */
> +	RK3588_PLL_RATE(1300000000, 3, 325, 2, 0),
> +	{ /* sentinel */ },
> +};
> +
> +#define RK3576_ACLK_M_BIGCORE_DIV_MASK		0x1f
> +#define RK3576_ACLK_M_BIGCORE_DIV_SHIFT		0
> +#define RK3576_ACLK_M_LITCORE_DIV_MASK		0x1f
> +#define RK3576_ACLK_M_LITCORE_DIV_SHIFT		8
> +#define RK3576_PCLK_DBG_LITCORE_DIV_MASK	0x1f
> +#define RK3576_PCLK_DBG_LITCORE_DIV_SHIFT	0
> +#define RK3576_ACLK_CCI_DIV_MASK		0x1f
> +#define RK3576_ACLK_CCI_DIV_SHIFT		7
> +#define RK3576_ACLK_CCI_MUX_MASK		0x3
> +#define RK3576_ACLK_CCI_MUX_SHIFT		12
> +
> +#define RK3576_BIGCORE_CLKSEL2(_amcore)						\
> +{										\
> +	.reg = RK3576_BIGCORE_CLKSEL_CON(2),					\
> +	.val = HIWORD_UPDATE(_amcore - 1, RK3576_ACLK_M_BIGCORE_DIV_MASK,	\
> +			RK3576_ACLK_M_BIGCORE_DIV_SHIFT),			\
> +}
> +
> +#define RK3576_LITCORE_CLKSEL1(_amcore)						\
> +{										\
> +	.reg = RK3576_LITCORE_CLKSEL_CON(1),					\
> +	.val = HIWORD_UPDATE(_amcore - 1, RK3576_ACLK_M_LITCORE_DIV_MASK,	\
> +			RK3576_ACLK_M_LITCORE_DIV_SHIFT),			\
> +}
> +
> +#define RK3576_LITCORE_CLKSEL2(_pclkdbg)					\
> +{										\
> +	.reg = RK3576_LITCORE_CLKSEL_CON(2),					\
> +	.val = HIWORD_UPDATE(_pclkdbg - 1, RK3576_PCLK_DBG_LITCORE_DIV_MASK,	\
> +			RK3576_PCLK_DBG_LITCORE_DIV_SHIFT),			\
> +}
> +
> +#define RK3576_CCI_CLKSEL4(_ccisel, _div)					\
> +{										\
> +	.reg = RK3576_CCI_CLKSEL_CON(4),					\
> +	.val = HIWORD_UPDATE(_ccisel, RK3576_ACLK_CCI_MUX_MASK,			\
> +			RK3576_ACLK_CCI_MUX_SHIFT) |				\
> +	       HIWORD_UPDATE(_div - 1, RK3576_ACLK_CCI_DIV_MASK,		\
> +			RK3576_ACLK_CCI_DIV_SHIFT),				\
> +}
> +
> +#define RK3576_CPUBCLK_RATE(_prate, _amcore)					\
> +{										\
> +	.prate = _prate##U,							\
> +	.divs = {								\
> +		RK3576_BIGCORE_CLKSEL2(_amcore),				\
> +	},									\
> +}
> +
> +#define RK3576_CPULCLK_RATE(_prate, _amcore, _pclkdbg, _ccisel)			\
> +{										\
> +	.prate = _prate##U,							\
> +	.divs = {								\
> +		RK3576_LITCORE_CLKSEL1(_amcore),				\
> +		RK3576_LITCORE_CLKSEL2(_pclkdbg),				\
> +	},									\
> +	.pre_muxs = {								\
> +		RK3576_CCI_CLKSEL4(2, 2),					\
> +	},									\
> +	.post_muxs = {								\
> +		RK3576_CCI_CLKSEL4(_ccisel, 2),					\
> +	},									\
> +}
> +
> +static struct rockchip_cpuclk_rate_table rk3576_cpubclk_rates[] __initdata = {
> +	RK3576_CPUBCLK_RATE(2496000000, 2),
> +	RK3576_CPUBCLK_RATE(2400000000, 2),
> +	RK3576_CPUBCLK_RATE(2304000000, 2),
> +	RK3576_CPUBCLK_RATE(2208000000, 2),
> +	RK3576_CPUBCLK_RATE(2184000000, 2),
> +	RK3576_CPUBCLK_RATE(2088000000, 2),
> +	RK3576_CPUBCLK_RATE(2040000000, 2),
> +	RK3576_CPUBCLK_RATE(2016000000, 2),
> +	RK3576_CPUBCLK_RATE(1992000000, 2),
> +	RK3576_CPUBCLK_RATE(1896000000, 2),
> +	RK3576_CPUBCLK_RATE(1800000000, 2),
> +	RK3576_CPUBCLK_RATE(1704000000, 2),
> +	RK3576_CPUBCLK_RATE(1608000000, 2),
> +	RK3576_CPUBCLK_RATE(1584000000, 2),
> +	RK3576_CPUBCLK_RATE(1560000000, 2),
> +	RK3576_CPUBCLK_RATE(1536000000, 2),
> +	RK3576_CPUBCLK_RATE(1512000000, 2),
> +	RK3576_CPUBCLK_RATE(1488000000, 2),
> +	RK3576_CPUBCLK_RATE(1464000000, 2),
> +	RK3576_CPUBCLK_RATE(1440000000, 2),
> +	RK3576_CPUBCLK_RATE(1416000000, 2),
> +	RK3576_CPUBCLK_RATE(1392000000, 2),
> +	RK3576_CPUBCLK_RATE(1368000000, 2),
> +	RK3576_CPUBCLK_RATE(1344000000, 2),
> +	RK3576_CPUBCLK_RATE(1320000000, 2),
> +	RK3576_CPUBCLK_RATE(1296000000, 2),
> +	RK3576_CPUBCLK_RATE(1272000000, 2),
> +	RK3576_CPUBCLK_RATE(1248000000, 2),
> +	RK3576_CPUBCLK_RATE(1224000000, 2),
> +	RK3576_CPUBCLK_RATE(1200000000, 2),
> +	RK3576_CPUBCLK_RATE(1104000000, 2),
> +	RK3576_CPUBCLK_RATE(1008000000, 2),
> +	RK3576_CPUBCLK_RATE(912000000, 2),
> +	RK3576_CPUBCLK_RATE(816000000, 2),
> +	RK3576_CPUBCLK_RATE(696000000, 2),
> +	RK3576_CPUBCLK_RATE(600000000, 2),
> +	RK3576_CPUBCLK_RATE(408000000, 2),
> +	RK3576_CPUBCLK_RATE(312000000, 2),
> +	RK3576_CPUBCLK_RATE(216000000, 2),
> +	RK3576_CPUBCLK_RATE(96000000, 2),
> +};
> +
> +static const struct rockchip_cpuclk_reg_data rk3576_cpubclk_data = {
> +	.core_reg[0] = RK3576_BIGCORE_CLKSEL_CON(1),
> +	.div_core_shift[0] = 7,
> +	.div_core_mask[0] = 0x1f,
> +	.num_cores = 1,
> +	.mux_core_alt = 1,
> +	.mux_core_main = 0,
> +	.mux_core_shift = 12,
> +	.mux_core_mask = 0x3,
> +};
> +
> +static struct rockchip_cpuclk_rate_table rk3576_cpulclk_rates[] __initdata = {
> +	RK3576_CPULCLK_RATE(2400000000, 2, 6, 3),
> +	RK3576_CPULCLK_RATE(2304000000, 2, 6, 3),
> +	RK3576_CPULCLK_RATE(2208000000, 2, 6, 3),
> +	RK3576_CPULCLK_RATE(2184000000, 2, 6, 3),
> +	RK3576_CPULCLK_RATE(2088000000, 2, 6, 3),
> +	RK3576_CPULCLK_RATE(2040000000, 2, 6, 3),
> +	RK3576_CPULCLK_RATE(2016000000, 2, 6, 3),
> +	RK3576_CPULCLK_RATE(1992000000, 2, 6, 3),
> +	RK3576_CPULCLK_RATE(1896000000, 2, 6, 3),
> +	RK3576_CPULCLK_RATE(1800000000, 2, 6, 3),
> +	RK3576_CPULCLK_RATE(1704000000, 2, 6, 3),
> +	RK3576_CPULCLK_RATE(1608000000, 2, 6, 3),
> +	RK3576_CPULCLK_RATE(1584000000, 2, 6, 3),
> +	RK3576_CPULCLK_RATE(1560000000, 2, 6, 3),
> +	RK3576_CPULCLK_RATE(1536000000, 2, 6, 3),
> +	RK3576_CPULCLK_RATE(1512000000, 2, 6, 3),
> +	RK3576_CPULCLK_RATE(1488000000, 2, 6, 3),
> +	RK3576_CPULCLK_RATE(1464000000, 2, 6, 3),
> +	RK3576_CPULCLK_RATE(1440000000, 2, 6, 3),
> +	RK3576_CPULCLK_RATE(1416000000, 2, 6, 3),
> +	RK3576_CPULCLK_RATE(1392000000, 2, 6, 3),
> +	RK3576_CPULCLK_RATE(1368000000, 2, 6, 3),
> +	RK3576_CPULCLK_RATE(1344000000, 2, 6, 3),
> +	RK3576_CPULCLK_RATE(1320000000, 2, 6, 3),
> +	RK3576_CPULCLK_RATE(1296000000, 2, 6, 3),
> +	RK3576_CPULCLK_RATE(1272000000, 2, 6, 3),
> +	RK3576_CPULCLK_RATE(1248000000, 2, 6, 3),
> +	RK3576_CPULCLK_RATE(1224000000, 2, 6, 3),
> +	RK3576_CPULCLK_RATE(1200000000, 2, 6, 2),
> +	RK3576_CPULCLK_RATE(1104000000, 2, 6, 2),
> +	RK3576_CPULCLK_RATE(1008000000, 2, 6, 2),
> +	RK3576_CPULCLK_RATE(912000000, 2, 6, 2),
> +	RK3576_CPULCLK_RATE(816000000, 2, 6, 2),
> +	RK3576_CPULCLK_RATE(696000000, 2, 6, 2),
> +	RK3576_CPULCLK_RATE(600000000, 2, 6, 2),
> +	RK3576_CPULCLK_RATE(408000000, 2, 6, 2),
> +	RK3576_CPULCLK_RATE(312000000, 2, 6, 2),
> +	RK3576_CPULCLK_RATE(216000000, 2, 6, 2),
> +	RK3576_CPULCLK_RATE(96000000, 2, 6, 2),
> +};
> +
> +static const struct rockchip_cpuclk_reg_data rk3576_cpulclk_data = {
> +	.core_reg[0] = RK3576_LITCORE_CLKSEL_CON(0),
> +	.div_core_shift[0] = 7,
> +	.div_core_mask[0] = 0x1f,
> +	.num_cores = 1,
> +	.mux_core_alt = 1,
> +	.mux_core_main = 0,
> +	.mux_core_shift = 12,
> +	.mux_core_mask = 0x3,
> +};
> +
> +#define MFLAGS CLK_MUX_HIWORD_MASK
> +#define DFLAGS CLK_DIVIDER_HIWORD_MASK
> +#define GFLAGS (CLK_GATE_HIWORD_MASK | CLK_GATE_SET_TO_DISABLE)
> +
> +PNAME(mux_pll_p)			= { "xin24m", "xin32k" };
> +PNAME(mux_24m_32k_p)			= { "xin24m", "xin_osc0_div" };
> +PNAME(mux_armclkl_p)			= { "xin24m", "pll_lpll", "lpll" };
> +PNAME(mux_armclkb_p)			= { "xin24m", "pll_bpll", "bpll" };
> +PNAME(gpll_24m_p)			= { "gpll", "xin24m" };
> +PNAME(cpll_24m_p)			= { "cpll", "xin24m" };
> +PNAME(gpll_cpll_p)			= { "gpll", "cpll" };
> +PNAME(gpll_spll_p)			= { "gpll", "spll" };
> +PNAME(gpll_cpll_aupll_p)		= { "gpll", "cpll", "aupll" };
> +PNAME(gpll_cpll_24m_p)			= { "gpll", "cpll", "xin24m" };
> +PNAME(gpll_cpll_24m_spll_p)		= { "gpll", "cpll", "xin24m", "spll" };
> +PNAME(gpll_cpll_aupll_24m_p)		= { "gpll", "cpll", "aupll", "xin24m" };
> +PNAME(gpll_cpll_aupll_spll_p)		= { "gpll", "cpll", "aupll", "spll" };
> +PNAME(gpll_cpll_aupll_spll_lpll_p)	= { "gpll", "cpll", "aupll", "spll", "lpll_dummy" };
> +PNAME(gpll_cpll_spll_bpll_p)		= { "gpll", "cpll", "spll", "bpll_dummy" };
> +PNAME(gpll_cpll_lpll_bpll_p)		= { "gpll", "cpll", "lpll_dummy", "bpll_dummy" };
> +PNAME(gpll_spll_cpll_bpll_lpll_p)	= { "gpll", "spll",  "cpll", "bpll_dummy", "lpll_dummy" };
> +PNAME(gpll_cpll_vpll_aupll_24m_p)	= { "gpll", "cpll", "vpll", "aupll", "xin24m" };
> +PNAME(gpll_cpll_spll_aupll_bpll_p)	= { "gpll", "cpll", "spll", "aupll", "bpll_dummy" };
> +PNAME(gpll_cpll_spll_bpll_lpll_p)	= { "gpll", "cpll", "spll", "bpll_dummy", "lpll_dummy" };
> +PNAME(gpll_cpll_spll_lpll_bpll_p)	= { "gpll", "cpll", "spll", "lpll_dummy", "bpll_dummy" };
> +PNAME(gpll_cpll_vpll_bpll_lpll_p)	= { "gpll", "cpll", "vpll", "bpll_dummy", "lpll_dummy" };
> +PNAME(gpll_spll_aupll_bpll_lpll_p)	= { "gpll", "spll", "aupll", "bpll_dummy", "lpll_dummy" };
> +PNAME(gpll_spll_isppvtpll_bpll_lpll_p)	= { "gpll", "spll", "isp_pvtpll", "bpll_dummy", "lpll_dummy" };
> +PNAME(gpll_cpll_spll_aupll_lpll_24m_p)	= { "gpll", "cpll", "spll", "aupll", "lpll_dummy", "xin24m" };
> +PNAME(gpll_cpll_spll_vpll_bpll_lpll_p)	= { "gpll", "cpll", "spll", "vpll", "bpll_dummy", "lpll_dummy" };
> +PNAME(cpll_vpll_lpll_bpll_p)		= { "cpll", "vpll", "lpll_dummy", "bpll_dummy" };
> +PNAME(mux_24m_ccipvtpll_gpll_lpll_p)	= { "xin24m", "cci_pvtpll", "gpll", "lpll" };
> +PNAME(mux_24m_spll_gpll_cpll_p)		= {"xin24m", "spll", "gpll", "cpll" };
> +PNAME(audio_frac_int_p)			= { "xin24m", "clk_audio_frac_0", "clk_audio_frac_1", "clk_audio_frac_2",
> +					    "clk_audio_frac_3", "clk_audio_int_0", "clk_audio_int_1", "clk_audio_int_2" };
> +PNAME(audio_frac_p)			= { "clk_audio_frac_0", "clk_audio_frac_1", "clk_audio_frac_2", "clk_audio_frac_3" };
> +PNAME(mux_100m_24m_p)			= { "clk_cpll_div10", "xin24m" };
> +PNAME(mux_100m_50m_24m_p)		= { "clk_cpll_div10", "clk_cpll_div20", "xin24m" };
> +PNAME(mux_100m_24m_lclk0_p)		= { "clk_cpll_div10", "xin24m", "lclk_asrc_src_0" };
> +PNAME(mux_100m_24m_lclk1_p)		= { "clk_cpll_div10", "xin24m", "lclk_asrc_src_1" };
> +PNAME(mux_150m_100m_50m_24m_p)		= { "clk_gpll_div8", "clk_cpll_div10", "clk_cpll_div20", "xin24m" };
> +PNAME(mux_200m_100m_50m_24m_p)		= { "clk_gpll_div6", "clk_cpll_div10", "clk_cpll_div20", "xin24m" };
> +PNAME(mux_400m_200m_100m_24m_p)		= { "clk_gpll_div3", "clk_gpll_div6", "clk_cpll_div10", "xin24m" };
> +PNAME(mux_500m_250m_100m_24m_p)		= { "clk_cpll_div2", "clk_cpll_div4", "clk_cpll_div10", "xin24m" };
> +PNAME(mux_600m_400m_300m_24m_p)		= { "clk_gpll_div2", "clk_gpll_div3", "clk_gpll_div4", "xin24m" };
> +PNAME(mux_350m_175m_116m_24m_p)		= { "clk_spll_div2", "clk_spll_div4", "clk_spll_div6", "xin24m" };
> +PNAME(mux_175m_116m_58m_24m_p)		= { "clk_spll_div4", "clk_spll_div6", "clk_spll_div12", "xin24m" };
> +PNAME(mux_116m_58m_24m_p)		= { "clk_spll_div6", "clk_spll_div12", "xin24m" };
> +PNAME(mclk_sai0_8ch_p)			= { "mclk_sai0_8ch_src", "sai0_mclkin", "sai1_mclkin" };
> +PNAME(mclk_sai1_8ch_p)			= { "mclk_sai1_8ch_src", "sai1_mclkin" };
> +PNAME(mclk_sai2_2ch_p)			= { "mclk_sai2_2ch_src", "sai2_mclkin", "sai1_mclkin" };
> +PNAME(mclk_sai3_2ch_p)			= { "mclk_sai3_2ch_src", "sai3_mclkin", "sai1_mclkin" };
> +PNAME(mclk_sai4_2ch_p)			= { "mclk_sai4_2ch_src", "sai4_mclkin", "sai1_mclkin" };
> +PNAME(mclk_sai5_8ch_p)			= { "mclk_sai5_8ch_src", "sai1_mclkin" };
> +PNAME(mclk_sai6_8ch_p)			= { "mclk_sai6_8ch_src", "sai1_mclkin" };
> +PNAME(mclk_sai7_8ch_p)			= { "mclk_sai7_8ch_src", "sai1_mclkin" };
> +PNAME(mclk_sai8_8ch_p)			= { "mclk_sai8_8ch_src", "sai1_mclkin" };
> +PNAME(mclk_sai9_8ch_p)			= { "mclk_sai9_8ch_src", "sai1_mclkin" };
> +PNAME(uart1_p)				= { "clk_uart1_src_top", "xin24m" };
> +PNAME(pdm0_p)				= { "clk_pdm0_src_top", "xin24m" };
> +PNAME(mclk_pdm0_p)			= { "mclk_pdm0_src_top", "xin24m" };
> +PNAME(clk_gmac1_ptp_ref_src_p)		= { "gpll", "cpll", "gmac1_ptp_refclk_in" };
> +PNAME(clk_gmac0_ptp_ref_src_p)		= { "gpll", "cpll", "gmac0_ptp_refclk_in" };
> +PNAME(dclk_ebc_p)			= { "gpll", "cpll", "vpll", "aupll", "lpll_dummy",
> +					    "dclk_ebc_frac", "xin24m" };
> +PNAME(dclk_vp0_p)			= { "dclk_vp0_src", "clk_hdmiphy_pixel0" };
> +PNAME(dclk_vp1_p)			= { "dclk_vp1_src", "clk_hdmiphy_pixel0" };
> +PNAME(dclk_vp2_p)			= { "dclk_vp2_src", "clk_hdmiphy_pixel0" };
> +PNAME(clk_uart_p)			= { "gpll", "cpll", "aupll", "xin24m", "clk_uart_frac_0",
> +					    "clk_uart_frac_1", "clk_uart_frac_2"};
> +PNAME(clk_freq_pwm1_p)			= { "sai0_mclkin", "sai1_mclkin", "sai2_mclkin",
> +					    "sai3_mclkin", "sai4_mclkin", "sai_sclkin_freq"};
> +PNAME(clk_counter_pwm1_p)		= { "sai0_mclkin", "sai1_mclkin", "sai2_mclkin",
> +					    "sai3_mclkin", "sai4_mclkin", "sai_sclkin_counter"};
> +PNAME(sai_sclkin_freq_p)		= { "sai0_sclk_in", "sai1_sclk_in", "sai2_sclk_in",
> +					    "sai3_sclk_in", "sai4_sclk_in"};
> +PNAME(clk_ref_pcie0_phy_p)		= { "clk_pcie_100m_src", "clk_pcie_100m_nduty_src",
> +					    "xin24m"};
> +PNAME(hclk_vi_root_p)			= { "clk_gpll_div6", "clk_cpll_div10",
> +					    "aclk_vi_root_inter", "xin24m"};
> +PNAME(clk_ref_osc_mphy_p)		= { "xin24m", "clk_gpio_mphy_i", "clk_ref_mphy_26m"};
> +PNAME(mux_pmu200m_pmu100m_pmu50m_24m_p)	= { "clk_200m_pmu_src", "clk_100m_pmu_src",
> +					    "clk_50m_pmu_src", "xin24m" };
> +PNAME(mux_pmu100m_pmu50m_24m_p)		= { "clk_100m_pmu_src", "clk_50m_pmu_src", "xin24m" };
> +PNAME(mux_pmu100m_24m_32k_p)		= { "clk_100m_pmu_src", "xin24m", "xin_osc0_div" };
> +PNAME(clk_phy_ref_src_p)		= { "xin24m", "clk_pmuphy_ref_src" };
> +PNAME(clk_usbphy_ref_src_p)		= { "usbphy0_24m", "usbphy1_24m" };
> +PNAME(clk_cpll_ref_src_p)		= { "xin24m", "clk_usbphy_ref_src" };
> +PNAME(clk_aupll_ref_src_p)		= { "xin24m", "clk_aupll_ref_io" };
> +
> +static struct rockchip_pll_clock rk3576_pll_clks[] __initdata = {
> +	[bpll] = PLL(pll_rk3588_core, PLL_BPLL, "bpll", mux_pll_p,
> +		     0, RK3576_PLL_CON(0),
> +		     RK3576_BPLL_MODE_CON0, 0, 15, 0, rk3576_pll_rates),
> +	[lpll] = PLL(pll_rk3588_core, PLL_LPLL, "lpll", mux_pll_p,
> +		     0, RK3576_LPLL_CON(16),
> +		     RK3576_LPLL_MODE_CON0, 0, 15, 0, rk3576_pll_rates),
> +	[vpll] = PLL(pll_rk3588, PLL_VPLL, "vpll", mux_pll_p,
> +		     0, RK3576_PLL_CON(88),
> +		     RK3576_MODE_CON0, 4, 15, 0, rk3576_pll_rates),
> +	[aupll] = PLL(pll_rk3588, PLL_AUPLL, "aupll", mux_pll_p,
> +		     0, RK3576_PLL_CON(96),
> +		     RK3576_MODE_CON0, 6, 15, 0, rk3576_pll_rates),
> +	[cpll] = PLL(pll_rk3588, PLL_CPLL, "cpll", mux_pll_p,
> +		     CLK_IGNORE_UNUSED, RK3576_PLL_CON(104),
> +		     RK3576_MODE_CON0, 8, 15, 0, rk3576_pll_rates),
> +	[gpll] = PLL(pll_rk3588, PLL_GPLL, "gpll", mux_pll_p,
> +		     CLK_IGNORE_UNUSED, RK3576_PLL_CON(112),
> +		     RK3576_MODE_CON0, 2, 15, 0, rk3576_pll_rates),
> +	[ppll] = PLL(pll_rk3588_core, PLL_PPLL, "ppll", mux_pll_p,
> +		     CLK_IGNORE_UNUSED, RK3576_PMU_PLL_CON(128),
> +		     RK3576_MODE_CON0, 10, 15, 0, rk3576_ppll_rates),
> +};
> +
> +static struct rockchip_clk_branch rk3576_clk_branches[] __initdata = {
> +	/*
> +	 * CRU Clock-Architecture
> +	 */
> +	/* fixed */
> +	FACTOR(0, "xin12m", "xin24m", 0, 1, 2),
> +
> +	COMPOSITE_FRAC(XIN_OSC0_DIV, "xin_osc0_div", "xin24m", CLK_IS_CRITICAL,
> +			RK3576_PMU_CLKSEL_CON(21), 0,
> +			RK3576_PMU_CLKGATE_CON(7), 11, GFLAGS),
> +
> +	FACTOR(0, "clk_spll_div12", "spll", 0, 1, 12),
> +	FACTOR(0, "clk_spll_div6", "spll", 0, 1, 6),
> +	FACTOR(0, "clk_spll_div4", "spll", 0, 1, 4),
> +	FACTOR(0, "lpll_div2", "lpll", 0, 1, 2),
> +	FACTOR(0, "bpll_div4", "bpll", 0, 1, 4),
> +
> +	/* top */
> +	COMPOSITE(CLK_CPLL_DIV20, "clk_cpll_div20", gpll_cpll_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(0), 5, 1, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(0), 0, GFLAGS),
> +	COMPOSITE(CLK_CPLL_DIV10, "clk_cpll_div10", gpll_cpll_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(0), 11, 1, MFLAGS, 6, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(0), 1, GFLAGS),
> +	COMPOSITE(CLK_GPLL_DIV8, "clk_gpll_div8", gpll_cpll_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(1), 5, 1, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(0), 2, GFLAGS),
> +	COMPOSITE(CLK_GPLL_DIV6, "clk_gpll_div6", gpll_cpll_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(1), 11, 1, MFLAGS, 6, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(0), 3, GFLAGS),
> +	COMPOSITE(CLK_CPLL_DIV4, "clk_cpll_div4", gpll_cpll_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(2), 5, 1, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(0), 4, GFLAGS),
> +	COMPOSITE(CLK_GPLL_DIV4, "clk_gpll_div4", gpll_cpll_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(2), 11, 1, MFLAGS, 6, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(0), 5, GFLAGS),
> +	COMPOSITE(CLK_SPLL_DIV2, "clk_spll_div2", gpll_cpll_spll_bpll_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(3), 5, 2, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(0), 6, GFLAGS),
> +	COMPOSITE(CLK_GPLL_DIV3, "clk_gpll_div3", gpll_cpll_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(3), 12, 1, MFLAGS, 7, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(0), 7, GFLAGS),
> +	COMPOSITE(CLK_CPLL_DIV2, "clk_cpll_div2", gpll_cpll_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(4), 11, 1, MFLAGS, 6, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(0), 9, GFLAGS),
> +	COMPOSITE(CLK_GPLL_DIV2, "clk_gpll_div2", gpll_cpll_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(5), 5, 1, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(0), 10, GFLAGS),
> +	COMPOSITE(CLK_SPLL_DIV1, "clk_spll_div1", gpll_cpll_spll_bpll_lpll_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(6), 5, 3, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(0), 12, GFLAGS),
> +	COMPOSITE_NODIV(PCLK_TOP_ROOT, "pclk_top_root", mux_100m_50m_24m_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(8), 7, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(1), 1, GFLAGS),
> +	COMPOSITE(ACLK_TOP, "aclk_top", gpll_cpll_aupll_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(9), 5, 2, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(1), 3, GFLAGS),
> +	COMPOSITE(ACLK_TOP_MID, "aclk_top_mid", gpll_cpll_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(10), 5, 1, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(1), 6, GFLAGS),
> +	COMPOSITE(ACLK_SECURE_HIGH, "aclk_secure_high", gpll_spll_aupll_bpll_lpll_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(10), 11, 3, MFLAGS, 6, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(1), 7, GFLAGS),
> +	COMPOSITE_NODIV(HCLK_TOP, "hclk_top", mux_200m_100m_50m_24m_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(19), 2, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(1), 14, GFLAGS),
> +	COMPOSITE_NODIV(HCLK_VO0VOP_CHANNEL, "hclk_vo0vop_channel", mux_200m_100m_50m_24m_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(19), 6, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(2), 0, GFLAGS),
> +	COMPOSITE(ACLK_VO0VOP_CHANNEL, "aclk_vo0vop_channel", gpll_cpll_lpll_bpll_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(19), 12, 2, MFLAGS, 8, 4, DFLAGS,
> +			RK3576_CLKGATE_CON(2), 1, GFLAGS),
> +	MUX(CLK_AUDIO_FRAC_0_SRC, "clk_audio_frac_0_src", gpll_cpll_aupll_24m_p, 0,
> +			RK3576_CLKSEL_CON(13), 0, 2, MFLAGS),
> +	COMPOSITE_FRAC(CLK_AUDIO_FRAC_0, "clk_audio_frac_0", "clk_audio_frac_0_src", 0,
> +			RK3576_CLKSEL_CON(12), 0,
> +			RK3576_CLKGATE_CON(1), 10, GFLAGS),
> +	MUX(CLK_AUDIO_FRAC_1_SRC, "clk_audio_frac_1_src", gpll_cpll_aupll_24m_p, 0,
> +			RK3576_CLKSEL_CON(15), 0, 2, MFLAGS),
> +	COMPOSITE_FRAC(CLK_AUDIO_FRAC_1, "clk_audio_frac_1", "clk_audio_frac_1_src", 0,
> +			RK3576_CLKSEL_CON(14), 0,
> +			RK3576_CLKGATE_CON(1), 11, GFLAGS),
> +	MUX(CLK_AUDIO_FRAC_2_SRC, "clk_audio_frac_2_src", gpll_cpll_aupll_24m_p, 0,
> +			RK3576_CLKSEL_CON(17), 0, 2, MFLAGS),
> +	COMPOSITE_FRAC(CLK_AUDIO_FRAC_2, "clk_audio_frac_2", "clk_audio_frac_2_src", 0,
> +			RK3576_CLKSEL_CON(16), 0,
> +			RK3576_CLKGATE_CON(1), 12, GFLAGS),
> +	MUX(CLK_AUDIO_FRAC_3_SRC, "clk_audio_frac_3_src", gpll_cpll_aupll_24m_p, 0,
> +			RK3576_CLKSEL_CON(19), 0, 2, MFLAGS),
> +	COMPOSITE_FRAC(CLK_AUDIO_FRAC_3, "clk_audio_frac_3", "clk_audio_frac_3_src", 0,
> +			RK3576_CLKSEL_CON(18), 0,
> +			RK3576_CLKGATE_CON(1), 13, GFLAGS),
> +	MUX(0, "clk_uart_frac_0_src", gpll_cpll_aupll_24m_p, 0,
> +			RK3576_CLKSEL_CON(22), 0, 2, MFLAGS),
> +	COMPOSITE_FRAC(CLK_UART_FRAC_0, "clk_uart_frac_0", "clk_uart_frac_0_src", 0,
> +			RK3576_CLKSEL_CON(21), 0,
> +			RK3576_CLKGATE_CON(2), 5, GFLAGS),
> +	MUX(0, "clk_uart_frac_1_src", gpll_cpll_aupll_24m_p, 0,
> +			RK3576_CLKSEL_CON(24), 0, 2, MFLAGS),
> +	COMPOSITE_FRAC(CLK_UART_FRAC_1, "clk_uart_frac_1", "clk_uart_frac_1_src", 0,
> +			RK3576_CLKSEL_CON(23), 0,
> +			RK3576_CLKGATE_CON(2), 6, GFLAGS),
> +	MUX(0, "clk_uart_frac_2_src", gpll_cpll_aupll_24m_p, 0,
> +			RK3576_CLKSEL_CON(26), 0, 2, MFLAGS),
> +	COMPOSITE_FRAC(CLK_UART_FRAC_2, "clk_uart_frac_2", "clk_uart_frac_2_src", 0,
> +			RK3576_CLKSEL_CON(25), 0,
> +			RK3576_CLKGATE_CON(2), 7, GFLAGS),
> +	COMPOSITE(CLK_UART1_SRC_TOP, "clk_uart1_src_top", clk_uart_p, 0,
> +			RK3576_CLKSEL_CON(27), 13, 3, MFLAGS, 5, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(2), 13, GFLAGS),
> +	COMPOSITE_NOMUX(CLK_AUDIO_INT_0, "clk_audio_int_0", "gpll", 0,
> +			RK3576_CLKSEL_CON(28), 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(2), 14, GFLAGS),
> +	COMPOSITE_NOMUX(CLK_AUDIO_INT_1, "clk_audio_int_1", "cpll", 0,
> +			RK3576_CLKSEL_CON(28), 5, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(2), 15, GFLAGS),
> +	COMPOSITE_NOMUX(CLK_AUDIO_INT_2, "clk_audio_int_2", "aupll", 0,
> +			RK3576_CLKSEL_CON(28), 10, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(3), 0, GFLAGS),
> +	COMPOSITE(CLK_PDM0_SRC_TOP, "clk_pdm0_src_top", audio_frac_int_p, 0,
> +			RK3576_CLKSEL_CON(29), 9, 3, MFLAGS, 0, 9, DFLAGS,
> +			RK3576_CLKGATE_CON(3), 2, GFLAGS),
> +	COMPOSITE_NOMUX(CLK_GMAC0_125M_SRC, "clk_gmac0_125m_src", "cpll", 0,
> +			RK3576_CLKSEL_CON(30), 10, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(3), 6, GFLAGS),
> +	COMPOSITE_NOMUX(CLK_GMAC1_125M_SRC, "clk_gmac1_125m_src", "cpll", 0,
> +			RK3576_CLKSEL_CON(31), 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(3), 7, GFLAGS),
> +	COMPOSITE(LCLK_ASRC_SRC_0, "lclk_asrc_src_0", audio_frac_p, 0,
> +			RK3576_CLKSEL_CON(31), 10, 2, MFLAGS, 5, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(3), 10, GFLAGS),
> +	COMPOSITE(LCLK_ASRC_SRC_1, "lclk_asrc_src_1", audio_frac_p, 0,
> +			RK3576_CLKSEL_CON(32), 5, 2, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(3), 11, GFLAGS),
> +	COMPOSITE(REF_CLK0_OUT_PLL, "ref_clk0_out_pll", gpll_cpll_spll_aupll_lpll_24m_p, 0,
> +			RK3576_CLKSEL_CON(33), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(4), 1, GFLAGS),
> +	COMPOSITE(REF_CLK1_OUT_PLL, "ref_clk1_out_pll", gpll_cpll_spll_aupll_lpll_24m_p, 0,
> +			RK3576_CLKSEL_CON(34), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(4), 2, GFLAGS),
> +	COMPOSITE(REF_CLK2_OUT_PLL, "ref_clk2_out_pll", gpll_cpll_spll_aupll_lpll_24m_p, 0,
> +			RK3576_CLKSEL_CON(35), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(4), 3, GFLAGS),
> +	COMPOSITE(REFCLKO25M_GMAC0_OUT, "refclko25m_gmac0_out", gpll_cpll_p, 0,
> +			RK3576_CLKSEL_CON(36), 7, 1, MFLAGS, 0, 7, DFLAGS,
> +			RK3576_CLKGATE_CON(5), 10, GFLAGS),
> +	COMPOSITE(REFCLKO25M_GMAC1_OUT, "refclko25m_gmac1_out", gpll_cpll_p, 0,
> +			RK3576_CLKSEL_CON(36), 15, 1, MFLAGS, 8, 7, DFLAGS,
> +			RK3576_CLKGATE_CON(5), 11, GFLAGS),
> +	COMPOSITE(CLK_CIFOUT_OUT, "clk_cifout_out", gpll_cpll_24m_spll_p, 0,
> +			RK3576_CLKSEL_CON(37), 8, 2, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(5), 12, GFLAGS),
> +	GATE(CLK_GMAC0_RMII_CRU, "clk_gmac0_rmii_cru", "clk_cpll_div20", 0,
> +			RK3576_CLKGATE_CON(5), 13, GFLAGS),
> +	GATE(CLK_GMAC1_RMII_CRU, "clk_gmac1_rmii_cru", "clk_cpll_div20", 0,
> +			RK3576_CLKGATE_CON(5), 14, GFLAGS),
> +	GATE(CLK_OTPC_AUTO_RD_G, "clk_otpc_auto_rd_g", "xin24m", 0,
> +			RK3576_CLKGATE_CON(5), 15, GFLAGS),
> +	COMPOSITE(CLK_MIPI_CAMERAOUT_M0, "clk_mipi_cameraout_m0", mux_24m_spll_gpll_cpll_p, 0,
> +			RK3576_CLKSEL_CON(38), 8, 2, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(6), 3, GFLAGS),
> +	COMPOSITE(CLK_MIPI_CAMERAOUT_M1, "clk_mipi_cameraout_m1", mux_24m_spll_gpll_cpll_p, 0,
> +			RK3576_CLKSEL_CON(39), 8, 2, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(6), 4, GFLAGS),
> +	COMPOSITE(CLK_MIPI_CAMERAOUT_M2, "clk_mipi_cameraout_m2", mux_24m_spll_gpll_cpll_p, 0,
> +			RK3576_CLKSEL_CON(40), 8, 2, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(6), 5, GFLAGS),
> +	COMPOSITE(MCLK_PDM0_SRC_TOP, "mclk_pdm0_src_top", audio_frac_int_p, 0,
> +			RK3576_CLKSEL_CON(41), 7, 3, MFLAGS, 2, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(6), 8, GFLAGS),
> +
> +	/* bus */
> +	COMPOSITE_NODIV(HCLK_BUS_ROOT, "hclk_bus_root", mux_200m_100m_50m_24m_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(55), 0, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(11), 0, GFLAGS),
> +	COMPOSITE_NODIV(PCLK_BUS_ROOT, "pclk_bus_root", mux_100m_50m_24m_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(55), 2, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(11), 1, GFLAGS),
> +	COMPOSITE(ACLK_BUS_ROOT, "aclk_bus_root", gpll_cpll_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(55), 9, 1, MFLAGS, 4, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(11), 2, GFLAGS),
> +	GATE(HCLK_CAN0, "hclk_can0", "hclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(11), 6, GFLAGS),
> +	COMPOSITE(CLK_CAN0, "clk_can0", gpll_cpll_24m_p, 0,
> +			RK3576_CLKSEL_CON(56), 5, 2, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(11), 7, GFLAGS),
> +	GATE(HCLK_CAN1, "hclk_can1", "hclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(11), 8, GFLAGS),
> +	COMPOSITE(CLK_CAN1, "clk_can1", gpll_cpll_24m_p, 0,
> +			RK3576_CLKSEL_CON(56), 12, 2, MFLAGS, 7, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(11), 9, GFLAGS),
> +	GATE(CLK_KEY_SHIFT, "clk_key_shift", "xin24m", CLK_IS_CRITICAL,
> +			RK3576_CLKGATE_CON(11), 15, GFLAGS),
> +	GATE(PCLK_I2C1, "pclk_i2c1", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(12), 0, GFLAGS),
> +	GATE(PCLK_I2C2, "pclk_i2c2", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(12), 1, GFLAGS),
> +	GATE(PCLK_I2C3, "pclk_i2c3", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(12), 2, GFLAGS),
> +	GATE(PCLK_I2C4, "pclk_i2c4", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(12), 3, GFLAGS),
> +	GATE(PCLK_I2C5, "pclk_i2c5", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(12), 4, GFLAGS),
> +	GATE(PCLK_I2C6, "pclk_i2c6", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(12), 5, GFLAGS),
> +	GATE(PCLK_I2C7, "pclk_i2c7", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(12), 6, GFLAGS),
> +	GATE(PCLK_I2C8, "pclk_i2c8", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(12), 7, GFLAGS),
> +	GATE(PCLK_I2C9, "pclk_i2c9", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(12), 8, GFLAGS),
> +	GATE(PCLK_WDT_BUSMCU, "pclk_wdt_busmcu", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(12), 9, GFLAGS),
> +	GATE(TCLK_WDT_BUSMCU, "tclk_wdt_busmcu", "xin24m", 0,
> +			RK3576_CLKGATE_CON(12), 10, GFLAGS),
> +	GATE(ACLK_GIC, "aclk_gic", "aclk_bus_root", CLK_IS_CRITICAL,
> +			RK3576_CLKGATE_CON(12), 11, GFLAGS),
> +	COMPOSITE_NODIV(CLK_I2C1, "clk_i2c1", mux_200m_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(57), 0, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(12), 12, GFLAGS),
> +	COMPOSITE_NODIV(CLK_I2C2, "clk_i2c2", mux_200m_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(57), 2, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(12), 13, GFLAGS),
> +	COMPOSITE_NODIV(CLK_I2C3, "clk_i2c3", mux_200m_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(57), 4, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(12), 14, GFLAGS),
> +	COMPOSITE_NODIV(CLK_I2C4, "clk_i2c4", mux_200m_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(57), 6, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(12), 15, GFLAGS),
> +	COMPOSITE_NODIV(CLK_I2C5, "clk_i2c5", mux_200m_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(57), 8, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(13), 0, GFLAGS),
> +	COMPOSITE_NODIV(CLK_I2C6, "clk_i2c6", mux_200m_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(57), 10, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(13), 1, GFLAGS),
> +	COMPOSITE_NODIV(CLK_I2C7, "clk_i2c7", mux_200m_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(57), 12, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(13), 2, GFLAGS),
> +	COMPOSITE_NODIV(CLK_I2C8, "clk_i2c8", mux_200m_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(57), 14, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(13), 3, GFLAGS),
> +	COMPOSITE_NODIV(CLK_I2C9, "clk_i2c9", mux_200m_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(58), 0, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(13), 4, GFLAGS),
> +	GATE(PCLK_SARADC, "pclk_saradc", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(13), 6, GFLAGS),
> +	COMPOSITE(CLK_SARADC, "clk_saradc", gpll_24m_p, 0,
> +			RK3576_CLKSEL_CON(58), 12, 1, MFLAGS, 4, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(13), 7, GFLAGS),
> +	GATE(PCLK_TSADC, "pclk_tsadc", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(13), 8, GFLAGS),
> +	COMPOSITE_NOMUX(CLK_TSADC, "clk_tsadc", "xin24m", 0,
> +			RK3576_CLKSEL_CON(59), 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(13), 9, GFLAGS),
> +	GATE(PCLK_UART0, "pclk_uart0", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(13), 10, GFLAGS),
> +	GATE(PCLK_UART2, "pclk_uart2", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(13), 11, GFLAGS),
> +	GATE(PCLK_UART3, "pclk_uart3", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(13), 12, GFLAGS),
> +	GATE(PCLK_UART4, "pclk_uart4", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(13), 13, GFLAGS),
> +	GATE(PCLK_UART5, "pclk_uart5", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(13), 14, GFLAGS),
> +	GATE(PCLK_UART6, "pclk_uart6", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(13), 15, GFLAGS),
> +	GATE(PCLK_UART7, "pclk_uart7", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(14), 0, GFLAGS),
> +	GATE(PCLK_UART8, "pclk_uart8", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(14), 1, GFLAGS),
> +	GATE(PCLK_UART9, "pclk_uart9", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(14), 2, GFLAGS),
> +	GATE(PCLK_UART10, "pclk_uart10", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(14), 3, GFLAGS),
> +	GATE(PCLK_UART11, "pclk_uart11", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(14), 4, GFLAGS),
> +	COMPOSITE(SCLK_UART0, "sclk_uart0", clk_uart_p, 0,
> +			RK3576_CLKSEL_CON(60), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(14), 5, GFLAGS),
> +	COMPOSITE(SCLK_UART2, "sclk_uart2", clk_uart_p, 0,
> +			RK3576_CLKSEL_CON(61), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(14), 6, GFLAGS),
> +	COMPOSITE(SCLK_UART3, "sclk_uart3", clk_uart_p, 0,
> +			RK3576_CLKSEL_CON(62), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(14), 9, GFLAGS),
> +	COMPOSITE(SCLK_UART4, "sclk_uart4", clk_uart_p, 0,
> +			RK3576_CLKSEL_CON(63), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(14), 12, GFLAGS),
> +	COMPOSITE(SCLK_UART5, "sclk_uart5", clk_uart_p, 0,
> +			RK3576_CLKSEL_CON(64), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(14), 15, GFLAGS),
> +	COMPOSITE(SCLK_UART6, "sclk_uart6", clk_uart_p, 0,
> +			RK3576_CLKSEL_CON(65), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(15), 2, GFLAGS),
> +	COMPOSITE(SCLK_UART7, "sclk_uart7", clk_uart_p, 0,
> +			RK3576_CLKSEL_CON(66), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(15), 5, GFLAGS),
> +	COMPOSITE(SCLK_UART8, "sclk_uart8", clk_uart_p, 0,
> +			RK3576_CLKSEL_CON(67), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(15), 8, GFLAGS),
> +	COMPOSITE(SCLK_UART9, "sclk_uart9", clk_uart_p, 0,
> +			RK3576_CLKSEL_CON(68), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(15), 9, GFLAGS),
> +	COMPOSITE(SCLK_UART10, "sclk_uart10", clk_uart_p, 0,
> +			RK3576_CLKSEL_CON(69), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(15), 10, GFLAGS),
> +	COMPOSITE(SCLK_UART11, "sclk_uart11", clk_uart_p, 0,
> +			RK3576_CLKSEL_CON(70), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(15), 11, GFLAGS),
> +	GATE(PCLK_SPI0, "pclk_spi0", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(15), 13, GFLAGS),
> +	GATE(PCLK_SPI1, "pclk_spi1", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(15), 14, GFLAGS),
> +	GATE(PCLK_SPI2, "pclk_spi2", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(15), 15, GFLAGS),
> +	GATE(PCLK_SPI3, "pclk_spi3", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(16), 0, GFLAGS),
> +	GATE(PCLK_SPI4, "pclk_spi4", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(16), 1, GFLAGS),
> +	COMPOSITE_NODIV(CLK_SPI0, "clk_spi0", mux_200m_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(70), 13, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(16), 2, GFLAGS),
> +	COMPOSITE_NODIV(CLK_SPI1, "clk_spi1", mux_200m_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(71), 0, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(16), 3, GFLAGS),
> +	COMPOSITE_NODIV(CLK_SPI2, "clk_spi2", mux_200m_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(71), 2, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(16), 4, GFLAGS),
> +	COMPOSITE_NODIV(CLK_SPI3, "clk_spi3", mux_200m_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(71), 4, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(16), 5, GFLAGS),
> +	COMPOSITE_NODIV(CLK_SPI4, "clk_spi4", mux_200m_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(71), 6, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(16), 6, GFLAGS),
> +	GATE(PCLK_WDT0, "pclk_wdt0", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(16), 7, GFLAGS),
> +	GATE(TCLK_WDT0, "tclk_wdt0", "xin24m", 0,
> +			RK3576_CLKGATE_CON(16), 8, GFLAGS),
> +	GATE(PCLK_PWM1, "pclk_pwm1", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(16), 10, GFLAGS),
> +	COMPOSITE_NODIV(CLK_PWM1, "clk_pwm1", mux_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(71), 8, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(16), 11, GFLAGS),
> +	GATE(CLK_OSC_PWM1, "clk_osc_pwm1", "xin24m", 0,
> +			RK3576_CLKGATE_CON(16), 13, GFLAGS),
> +	GATE(CLK_RC_PWM1, "clk_rc_pwm1", "clk_pvtm_clkout", 0,
> +			RK3576_CLKGATE_CON(16), 15, GFLAGS),
> +	GATE(PCLK_BUSTIMER0, "pclk_bustimer0", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(17), 3, GFLAGS),
> +	GATE(PCLK_BUSTIMER1, "pclk_bustimer1", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(17), 4, GFLAGS),
> +	COMPOSITE_NODIV(CLK_TIMER0_ROOT, "clk_timer0_root", mux_100m_24m_p, 0,
> +			RK3576_CLKSEL_CON(71), 14, 1, MFLAGS,
> +			RK3576_CLKGATE_CON(17), 5, GFLAGS),
> +	GATE(CLK_TIMER0, "clk_timer0", "clk_timer0_root", 0,
> +			RK3576_CLKGATE_CON(17), 6, GFLAGS),
> +	GATE(CLK_TIMER1, "clk_timer1", "clk_timer0_root", 0,
> +			RK3576_CLKGATE_CON(17), 7, GFLAGS),
> +	GATE(CLK_TIMER2, "clk_timer2", "clk_timer0_root", 0,
> +			RK3576_CLKGATE_CON(17), 8, GFLAGS),
> +	GATE(CLK_TIMER3, "clk_timer3", "clk_timer0_root", 0,
> +			RK3576_CLKGATE_CON(17), 9, GFLAGS),
> +	GATE(CLK_TIMER4, "clk_timer4", "clk_timer0_root", 0,
> +			RK3576_CLKGATE_CON(17), 10, GFLAGS),
> +	GATE(CLK_TIMER5, "clk_timer5", "clk_timer0_root", 0,
> +			RK3576_CLKGATE_CON(17), 11, GFLAGS),
> +	GATE(PCLK_MAILBOX0, "pclk_mailbox0", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(17), 13, GFLAGS),
> +	GATE(PCLK_GPIO1, "pclk_gpio1", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(17), 15, GFLAGS),
> +	GATE(DBCLK_GPIO1, "dbclk_gpio1", "xin24m", 0,
> +			RK3576_CLKGATE_CON(18), 0, GFLAGS),
> +	GATE(PCLK_GPIO2, "pclk_gpio2", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(18), 1, GFLAGS),
> +	GATE(DBCLK_GPIO2, "dbclk_gpio2", "xin24m", 0,
> +			RK3576_CLKGATE_CON(18), 2, GFLAGS),
> +	GATE(PCLK_GPIO3, "pclk_gpio3", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(18), 3, GFLAGS),
> +	GATE(DBCLK_GPIO3, "dbclk_gpio3", "xin24m", 0,
> +			RK3576_CLKGATE_CON(18), 4, GFLAGS),
> +	GATE(PCLK_GPIO4, "pclk_gpio4", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(18), 5, GFLAGS),
> +	GATE(DBCLK_GPIO4, "dbclk_gpio4", "xin24m", 0,
> +			RK3576_CLKGATE_CON(18), 6, GFLAGS),
> +	GATE(ACLK_DECOM, "aclk_decom", "aclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(18), 7, GFLAGS),
> +	GATE(PCLK_DECOM, "pclk_decom", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(18), 8, GFLAGS),
> +	COMPOSITE(DCLK_DECOM, "dclk_decom", gpll_spll_p, 0,
> +			RK3576_CLKSEL_CON(72), 5, 1, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(18), 9, GFLAGS),
> +	COMPOSITE_NODIV(CLK_TIMER1_ROOT, "clk_timer1_root", mux_100m_24m_p, 0,
> +			RK3576_CLKSEL_CON(72), 6, 1, MFLAGS,
> +			RK3576_CLKGATE_CON(18), 10, GFLAGS),
> +	GATE(CLK_TIMER6, "clk_timer6", "clk_timer1_root", 0,
> +			RK3576_CLKGATE_CON(18), 11, GFLAGS),
> +	COMPOSITE(CLK_TIMER7, "clk_timer7", mux_100m_24m_lclk0_p, 0,
> +			RK3576_CLKSEL_CON(72), 12, 2, MFLAGS, 7, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(18), 12, GFLAGS),
> +	COMPOSITE(CLK_TIMER8, "clk_timer8", mux_100m_24m_lclk1_p, 0,
> +			RK3576_CLKSEL_CON(73), 5, 2, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(18), 13, GFLAGS),
> +	GATE(CLK_TIMER9, "clk_timer9", "clk_timer1_root", 0,
> +			RK3576_CLKGATE_CON(18), 14, GFLAGS),
> +	GATE(CLK_TIMER10, "clk_timer10", "clk_timer1_root", 0,
> +			RK3576_CLKGATE_CON(18), 15, GFLAGS),
> +	GATE(CLK_TIMER11, "clk_timer11", "clk_timer1_root", 0,
> +			RK3576_CLKGATE_CON(19), 0, GFLAGS),
> +	GATE(ACLK_DMAC0, "aclk_dmac0", "aclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(19), 1, GFLAGS),
> +	GATE(ACLK_DMAC1, "aclk_dmac1", "aclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(19), 2, GFLAGS),
> +	GATE(ACLK_DMAC2, "aclk_dmac2", "aclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(19), 3, GFLAGS),
> +	GATE(ACLK_SPINLOCK, "aclk_spinlock", "aclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(19), 4, GFLAGS),
> +	GATE(HCLK_I3C0, "hclk_i3c0", "hclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(19), 7, GFLAGS),
> +	GATE(HCLK_I3C1, "hclk_i3c1", "hclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(19), 9, GFLAGS),
> +	COMPOSITE_NODIV(HCLK_BUS_CM0_ROOT, "hclk_bus_cm0_root", mux_400m_200m_100m_24m_p, 0,
> +			RK3576_CLKSEL_CON(73), 13, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(19), 10, GFLAGS),
> +	GATE(FCLK_BUS_CM0_CORE, "fclk_bus_cm0_core", "hclk_bus_cm0_root", 0,
> +			RK3576_CLKGATE_CON(19), 12, GFLAGS),
> +	COMPOSITE(CLK_BUS_CM0_RTC, "clk_bus_cm0_rtc", mux_24m_32k_p, 0,
> +			RK3576_CLKSEL_CON(74), 5, 1, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(19), 14, GFLAGS),
> +	GATE(PCLK_PMU2, "pclk_pmu2", "pclk_bus_root", CLK_IS_CRITICAL,
> +			RK3576_CLKGATE_CON(19), 15, GFLAGS),
> +	GATE(PCLK_PWM2, "pclk_pwm2", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(20), 4, GFLAGS),
> +	COMPOSITE_NODIV(CLK_PWM2, "clk_pwm2", mux_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(74), 6, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(20), 5, GFLAGS),
> +	GATE(CLK_OSC_PWM2, "clk_osc_pwm2", "xin24m", 0,
> +			RK3576_CLKGATE_CON(20), 7, GFLAGS),
> +	GATE(CLK_RC_PWM2, "clk_rc_pwm2", "clk_pvtm_clkout", 0,
> +			RK3576_CLKGATE_CON(20), 6, GFLAGS),
> +	COMPOSITE_NODIV(CLK_FREQ_PWM1, "clk_freq_pwm1", clk_freq_pwm1_p, 0,
> +			RK3576_CLKSEL_CON(74), 8, 3, MFLAGS,
> +			RK3576_CLKGATE_CON(20), 8, GFLAGS),
> +	COMPOSITE_NODIV(CLK_COUNTER_PWM1, "clk_counter_pwm1", clk_counter_pwm1_p, 0,
> +			RK3576_CLKSEL_CON(74), 11, 3, MFLAGS,
> +			RK3576_CLKGATE_CON(20), 9, GFLAGS),
> +	COMPOSITE_NODIV(SAI_SCLKIN_FREQ, "sai_sclkin_freq", sai_sclkin_freq_p, 0,
> +			RK3576_CLKSEL_CON(75), 0, 3, MFLAGS,
> +			RK3576_CLKGATE_CON(20), 10, GFLAGS),
> +	COMPOSITE_NODIV(SAI_SCLKIN_COUNTER, "sai_sclkin_counter", sai_sclkin_freq_p, 0,
> +			RK3576_CLKSEL_CON(75), 3, 3, MFLAGS,
> +			RK3576_CLKGATE_CON(20), 11, GFLAGS),
> +	COMPOSITE(CLK_I3C0, "clk_i3c0", gpll_cpll_aupll_spll_p, 0,
> +			RK3576_CLKSEL_CON(78), 5, 2, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(20), 12, GFLAGS),
> +	COMPOSITE(CLK_I3C1, "clk_i3c1", gpll_cpll_aupll_spll_p, 0,
> +			RK3576_CLKSEL_CON(78), 12, 2, MFLAGS, 7, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(20), 13, GFLAGS),
> +	GATE(PCLK_CSIDPHY1, "pclk_csidphy1", "pclk_bus_root", 0,
> +			RK3576_CLKGATE_CON(40), 2, GFLAGS),
> +
> +	/* cci */
> +	COMPOSITE(PCLK_CCI_ROOT, "pclk_cci_root", mux_24m_ccipvtpll_gpll_lpll_p, CLK_IS_CRITICAL,
> +			RK3576_CCI_CLKSEL_CON(4), 5, 2, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CCI_CLKGATE_CON(1), 10, GFLAGS),
> +	COMPOSITE(ACLK_CCI_ROOT, "aclk_cci_root", mux_24m_ccipvtpll_gpll_lpll_p, CLK_IS_CRITICAL,
> +			RK3576_CCI_CLKSEL_CON(4), 12, 2, MFLAGS, 7, 5, DFLAGS,
> +			RK3576_CCI_CLKGATE_CON(1), 11, GFLAGS),
> +
> +	/* center */
> +	COMPOSITE_DIV_OFFSET(ACLK_CENTER_ROOT, "aclk_center_root", gpll_cpll_spll_aupll_bpll_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(168), 5, 3, MFLAGS,
> +			RK3576_CLKSEL_CON(167), 9, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(72), 0, GFLAGS),
> +	COMPOSITE_NODIV(ACLK_CENTER_LOW_ROOT, "aclk_center_low_root", mux_500m_250m_100m_24m_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(168), 8, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(72), 1, GFLAGS),
> +	COMPOSITE_NODIV(HCLK_CENTER_ROOT, "hclk_center_root", mux_200m_100m_50m_24m_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(168), 10, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(72), 2, GFLAGS),
> +	COMPOSITE_NODIV(PCLK_CENTER_ROOT, "pclk_center_root", mux_200m_100m_50m_24m_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(168), 12, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(72), 3, GFLAGS),
> +	GATE(ACLK_DMA2DDR, "aclk_dma2ddr", "aclk_center_root", CLK_IGNORE_UNUSED,
> +			RK3576_CLKGATE_CON(72), 5, GFLAGS),
> +	GATE(ACLK_DDR_SHAREMEM, "aclk_ddr_sharemem", "aclk_center_low_root", CLK_IGNORE_UNUSED,
> +			RK3576_CLKGATE_CON(72), 6, GFLAGS),
> +	GATE(PCLK_DMA2DDR, "pclk_dma2ddr", "pclk_center_root", CLK_IGNORE_UNUSED,
> +			RK3576_CLKGATE_CON(72), 10, GFLAGS),
> +	GATE(PCLK_SHAREMEM, "pclk_sharemem", "pclk_center_root", CLK_IGNORE_UNUSED,
> +			RK3576_CLKGATE_CON(72), 11, GFLAGS),
> +
> +	/* ddr */
> +	COMPOSITE(PCLK_DDR_ROOT, "pclk_ddr_root", gpll_cpll_24m_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(76), 5, 2, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(21), 0, GFLAGS),
> +	GATE(PCLK_DDR_MON_CH0, "pclk_ddr_mon_ch0", "pclk_ddr_root", CLK_IGNORE_UNUSED,
> +			RK3576_CLKGATE_CON(21), 1, GFLAGS),
> +	COMPOSITE(HCLK_DDR_ROOT, "hclk_ddr_root", gpll_cpll_p, CLK_IGNORE_UNUSED,
> +			RK3576_CLKSEL_CON(77), 5, 1, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(22), 11, GFLAGS),
> +	GATE(FCLK_DDR_CM0_CORE, "fclk_ddr_cm0_core", "hclk_ddr_root", CLK_IS_CRITICAL,
> +			RK3576_CLKGATE_CON(22), 15, GFLAGS),
> +	COMPOSITE_NODIV(CLK_DDR_TIMER_ROOT, "clk_ddr_timer_root", mux_100m_24m_p, 0,
> +			RK3576_CLKSEL_CON(77), 6, 1, MFLAGS,
> +			RK3576_CLKGATE_CON(23), 3, GFLAGS),
> +	GATE(CLK_DDR_TIMER0, "clk_ddr_timer0", "clk_ddr_timer_root", 0,
> +			RK3576_CLKGATE_CON(23), 4, GFLAGS),
> +	GATE(CLK_DDR_TIMER1, "clk_ddr_timer1", "clk_ddr_timer_root", 0,
> +			RK3576_CLKGATE_CON(23), 5, GFLAGS),
> +	GATE(TCLK_WDT_DDR, "tclk_wdt_ddr", "xin24m", 0,
> +			RK3576_CLKGATE_CON(23), 6, GFLAGS),
> +	GATE(PCLK_WDT, "pclk_wdt", "pclk_ddr_root", 0,
> +			RK3576_CLKGATE_CON(23), 7, GFLAGS),
> +	GATE(PCLK_TIMER, "pclk_timer", "pclk_ddr_root", 0,
> +			RK3576_CLKGATE_CON(23), 8, GFLAGS),
> +	COMPOSITE(CLK_DDR_CM0_RTC, "clk_ddr_cm0_rtc", mux_24m_32k_p, 0,
> +			RK3576_CLKSEL_CON(77), 12, 1, MFLAGS, 7, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(23), 10, GFLAGS),
> +
> +	/* gpu */
> +	COMPOSITE(CLK_GPU_SRC_PRE, "clk_gpu_src_pre", gpll_cpll_aupll_spll_lpll_p, 0,
> +			RK3576_CLKSEL_CON(165), 5, 3, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(69), 1, GFLAGS),
> +	GATE(CLK_GPU, "clk_gpu", "clk_gpu_src_pre", 0,
> +			RK3576_CLKGATE_CON(69), 3, GFLAGS),
> +	COMPOSITE_NODIV(PCLK_GPU_ROOT, "pclk_gpu_root", mux_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(166), 10, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(69), 8, GFLAGS),
> +
> +	/* npu */
> +	COMPOSITE_NODIV(HCLK_RKNN_ROOT, "hclk_rknn_root", mux_200m_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(86), 0, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(31), 4, GFLAGS),
> +	COMPOSITE(CLK_RKNN_DSU0, "clk_rknn_dsu0", gpll_cpll_aupll_spll_p, 0,
> +			RK3576_CLKSEL_CON(86), 7, 2, MFLAGS, 2, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(31), 5, GFLAGS),
> +	GATE(ACLK_RKNN0, "aclk_rknn0", "clk_rknn_dsu0", 0,
> +			RK3576_CLKGATE_CON(28), 9, GFLAGS),
> +	GATE(ACLK_RKNN1, "aclk_rknn1", "clk_rknn_dsu0", 0,
> +			RK3576_CLKGATE_CON(29), 0, GFLAGS),
> +	COMPOSITE_NODIV(PCLK_NPUTOP_ROOT, "pclk_nputop_root", mux_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(87), 0, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(31), 8, GFLAGS),
> +	GATE(PCLK_NPU_TIMER, "pclk_npu_timer", "pclk_nputop_root", 0,
> +			RK3576_CLKGATE_CON(31), 10, GFLAGS),
> +	COMPOSITE_NODIV(CLK_NPUTIMER_ROOT, "clk_nputimer_root", mux_100m_24m_p, 0,
> +			RK3576_CLKSEL_CON(87), 2, 1, MFLAGS,
> +			RK3576_CLKGATE_CON(31), 11, GFLAGS),
> +	GATE(CLK_NPUTIMER0, "clk_nputimer0", "clk_nputimer_root", 0,
> +			RK3576_CLKGATE_CON(31), 12, GFLAGS),
> +	GATE(CLK_NPUTIMER1, "clk_nputimer1", "clk_nputimer_root", 0,
> +			RK3576_CLKGATE_CON(31), 13, GFLAGS),
> +	GATE(PCLK_NPU_WDT, "pclk_npu_wdt", "pclk_nputop_root", 0,
> +			RK3576_CLKGATE_CON(31), 14, GFLAGS),
> +	GATE(TCLK_NPU_WDT, "tclk_npu_wdt", "xin24m", 0,
> +			RK3576_CLKGATE_CON(31), 15, GFLAGS),
> +	GATE(ACLK_RKNN_CBUF, "aclk_rknn_cbuf", "clk_rknn_dsu0", 0,
> +			RK3576_CLKGATE_CON(32), 0, GFLAGS),
> +	COMPOSITE_NODIV(HCLK_NPU_CM0_ROOT, "hclk_npu_cm0_root", mux_400m_200m_100m_24m_p, 0,
> +			RK3576_CLKSEL_CON(87), 3, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(32), 5, GFLAGS),
> +	GATE(FCLK_NPU_CM0_CORE, "fclk_npu_cm0_core", "hclk_npu_cm0_root", 0,
> +			RK3576_CLKGATE_CON(32), 7, GFLAGS),
> +	COMPOSITE(CLK_NPU_CM0_RTC, "clk_npu_cm0_rtc", mux_24m_32k_p, 0,
> +			RK3576_CLKSEL_CON(87), 10, 1, MFLAGS, 5, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(32), 9, GFLAGS),
> +	GATE(HCLK_RKNN_CBUF, "hclk_rknn_cbuf", "hclk_rknn_root", 0,
> +			RK3576_CLKGATE_CON(32), 12, GFLAGS),
> +
> +	/* nvm */
> +	COMPOSITE_NODIV(HCLK_NVM_ROOT, "hclk_nvm_root", mux_200m_100m_50m_24m_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(88), 0, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(33), 0, GFLAGS),
> +	COMPOSITE(ACLK_NVM_ROOT, "aclk_nvm_root", gpll_cpll_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(88), 7, 1, MFLAGS, 2, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(33), 1, GFLAGS),
> +	COMPOSITE(SCLK_FSPI_X2, "sclk_fspi_x2", gpll_cpll_24m_p, 0,
> +			RK3576_CLKSEL_CON(89), 6, 2, MFLAGS, 0, 6, DFLAGS,
> +			RK3576_CLKGATE_CON(33), 6, GFLAGS),
> +	GATE(HCLK_FSPI, "hclk_fspi", "hclk_nvm_root", 0,
> +			RK3576_CLKGATE_CON(33), 7, GFLAGS),
> +	COMPOSITE(CCLK_SRC_EMMC, "cclk_src_emmc", gpll_cpll_24m_p, 0,
> +			RK3576_CLKSEL_CON(89), 14, 2, MFLAGS, 8, 6, DFLAGS,
> +			RK3576_CLKGATE_CON(33), 8, GFLAGS),
> +	GATE(HCLK_EMMC, "hclk_emmc", "hclk_nvm_root", 0,
> +			RK3576_CLKGATE_CON(33), 9, GFLAGS),
> +	GATE(ACLK_EMMC, "aclk_emmc", "aclk_nvm_root", 0,
> +			RK3576_CLKGATE_CON(33), 10, GFLAGS),
> +	COMPOSITE_NODIV(BCLK_EMMC, "bclk_emmc", mux_200m_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(90), 0, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(33), 11, GFLAGS),
> +	GATE(TCLK_EMMC, "tclk_emmc", "xin24m", 0,
> +			RK3576_CLKGATE_CON(33), 12, GFLAGS),
> +
> +	/* usb */
> +	COMPOSITE(ACLK_UFS_ROOT, "aclk_ufs_root", gpll_cpll_p, 0,
> +			RK3576_CLKSEL_CON(115), 5, 1, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(47), 0, GFLAGS),
> +	COMPOSITE(ACLK_USB_ROOT, "aclk_usb_root", gpll_cpll_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(115), 11, 1, MFLAGS, 6, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(47), 1, GFLAGS),
> +	COMPOSITE_NODIV(PCLK_USB_ROOT, "pclk_usb_root", mux_100m_50m_24m_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(115), 12, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(47), 2, GFLAGS),
> +	GATE(ACLK_USB3OTG0, "aclk_usb3otg0", "aclk_usb_root", 0,
> +			RK3576_CLKGATE_CON(47), 5, GFLAGS),
> +	GATE(CLK_REF_USB3OTG0, "clk_ref_usb3otg0", "xin24m", 0,
> +			RK3576_CLKGATE_CON(47), 6, GFLAGS),
> +	GATE(CLK_SUSPEND_USB3OTG0, "clk_suspend_usb3otg0", "xin24m", 0,
> +			RK3576_CLKGATE_CON(47), 7, GFLAGS),
> +	GATE(ACLK_MMU2, "aclk_mmu2", "aclk_usb_root", 0,
> +			RK3576_CLKGATE_CON(47), 12, GFLAGS),
> +	GATE(ACLK_SLV_MMU2, "aclk_slv_mmu2", "aclk_usb_root", 0,
> +			RK3576_CLKGATE_CON(47), 13, GFLAGS),
> +	GATE(ACLK_UFS_SYS, "aclk_ufs_sys", "aclk_ufs_root", 0,
> +			RK3576_CLKGATE_CON(47), 15, GFLAGS),
> +
> +	/* vdec */
> +	COMPOSITE_NODIV(HCLK_RKVDEC_ROOT, "hclk_rkvdec_root", mux_200m_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(110), 0, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(45), 0, GFLAGS),
> +	COMPOSITE(ACLK_RKVDEC_ROOT, "aclk_rkvdec_root", gpll_cpll_aupll_spll_p, 0,
> +			RK3576_CLKSEL_CON(110), 7, 2, MFLAGS, 2, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(45), 1, GFLAGS),
> +	COMPOSITE(ACLK_RKVDEC_ROOT_BAK, "aclk_rkvdec_root_bak", cpll_vpll_lpll_bpll_p, 0,
> +			RK3576_CLKSEL_CON(110), 14, 2, MFLAGS, 9, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(45), 2, GFLAGS),
> +	GATE(HCLK_RKVDEC, "hclk_rkvdec", "hclk_rkvdec_root", 0,
> +			RK3576_CLKGATE_CON(45), 3, GFLAGS),
> +	COMPOSITE(CLK_RKVDEC_HEVC_CA, "clk_rkvdec_hevc_ca", gpll_cpll_lpll_bpll_p, 0,
> +			RK3576_CLKSEL_CON(111), 5, 2, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(45), 8, GFLAGS),
> +	GATE(CLK_RKVDEC_CORE, "clk_rkvdec_core", "aclk_rkvdec_root", 0,
> +			RK3576_CLKGATE_CON(45), 9, GFLAGS),
> +
> +	/* venc */
> +	COMPOSITE_NODIV(HCLK_VEPU0_ROOT, "hclk_vepu0_root", mux_200m_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(124), 0, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(51), 0, GFLAGS),
> +	COMPOSITE(ACLK_VEPU0_ROOT, "aclk_vepu0_root", gpll_cpll_p, 0,
> +			RK3576_CLKSEL_CON(124), 7, 1, MFLAGS, 2, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(51), 1, GFLAGS),
> +	COMPOSITE(CLK_VEPU0_CORE, "clk_vepu0_core", gpll_cpll_spll_lpll_bpll_p, 0,
> +			RK3576_CLKSEL_CON(124), 13, 3, MFLAGS, 8, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(51), 6, GFLAGS),
> +	GATE(HCLK_VEPU0, "hclk_vepu0", "hclk_vepu0_root", 0,
> +			RK3576_CLKGATE_CON(51), 4, GFLAGS),
> +	GATE(ACLK_VEPU0, "aclk_vepu0", "aclk_vepu0_root", 0,
> +			RK3576_CLKGATE_CON(51), 5, GFLAGS),
> +
> +	/* vi */
> +	COMPOSITE(ACLK_VI_ROOT, "aclk_vi_root", gpll_spll_isppvtpll_bpll_lpll_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(128), 5, 3, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(53), 0, GFLAGS),
> +	COMPOSITE_NOMUX(ACLK_VI_ROOT_INTER, "aclk_vi_root_inter", "aclk_vi_root", 0,
> +			RK3576_CLKSEL_CON(130), 10, 3, DFLAGS,
> +			RK3576_CLKGATE_CON(54), 13, GFLAGS),
> +	COMPOSITE_NODIV(HCLK_VI_ROOT, "hclk_vi_root", hclk_vi_root_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(128), 8, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(53), 1, GFLAGS),
> +	COMPOSITE_NODIV(PCLK_VI_ROOT, "pclk_vi_root", mux_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(128), 10, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(53), 2, GFLAGS),
> +	COMPOSITE(DCLK_VICAP, "dclk_vicap", gpll_cpll_p, 0,
> +			RK3576_CLKSEL_CON(129), 5, 1, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(53), 6, GFLAGS),
> +	GATE(ACLK_VICAP, "aclk_vicap", "aclk_vi_root", 0,
> +			RK3576_CLKGATE_CON(53), 7, GFLAGS),
> +	GATE(HCLK_VICAP, "hclk_vicap", "hclk_vi_root", 0,
> +			RK3576_CLKGATE_CON(53), 8, GFLAGS),
> +	COMPOSITE(CLK_ISP_CORE, "clk_isp_core", gpll_spll_isppvtpll_bpll_lpll_p, 0,
> +			RK3576_CLKSEL_CON(129), 11, 3, MFLAGS, 6, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(53), 9, GFLAGS),
> +	GATE(CLK_ISP_CORE_MARVIN, "clk_isp_core_marvin", "clk_isp_core", 0,
> +			RK3576_CLKGATE_CON(53), 10, GFLAGS),
> +	GATE(CLK_ISP_CORE_VICAP, "clk_isp_core_vicap", "clk_isp_core", 0,
> +			RK3576_CLKGATE_CON(53), 11, GFLAGS),
> +	GATE(ACLK_ISP, "aclk_isp", "aclk_vi_root", 0,
> +			RK3576_CLKGATE_CON(53), 12, GFLAGS),
> +	GATE(HCLK_ISP, "hclk_isp", "hclk_vi_root", 0,
> +			RK3576_CLKGATE_CON(53), 13, GFLAGS),
> +	GATE(ACLK_VPSS, "aclk_vpss", "aclk_vi_root", 0,
> +			RK3576_CLKGATE_CON(53), 15, GFLAGS),
> +	GATE(HCLK_VPSS, "hclk_vpss", "hclk_vi_root", 0,
> +			RK3576_CLKGATE_CON(54), 0, GFLAGS),
> +	GATE(CLK_CORE_VPSS, "clk_core_vpss", "clk_isp_core", 0,
> +			RK3576_CLKGATE_CON(54), 1, GFLAGS),
> +	GATE(PCLK_CSI_HOST_0, "pclk_csi_host_0", "pclk_vi_root", 0,
> +			RK3576_CLKGATE_CON(54), 4, GFLAGS),
> +	GATE(PCLK_CSI_HOST_1, "pclk_csi_host_1", "pclk_vi_root", 0,
> +			RK3576_CLKGATE_CON(54), 5, GFLAGS),
> +	GATE(PCLK_CSI_HOST_2, "pclk_csi_host_2", "pclk_vi_root", 0,
> +			RK3576_CLKGATE_CON(54), 6, GFLAGS),
> +	GATE(PCLK_CSI_HOST_3, "pclk_csi_host_3", "pclk_vi_root", 0,
> +			RK3576_CLKGATE_CON(54), 7, GFLAGS),
> +	GATE(PCLK_CSI_HOST_4, "pclk_csi_host_4", "pclk_vi_root", 0,
> +			RK3576_CLKGATE_CON(54), 8, GFLAGS),
> +	COMPOSITE_NODIV(ICLK_CSIHOST01, "iclk_csihost01", mux_400m_200m_100m_24m_p, 0,
> +			RK3576_CLKSEL_CON(130), 7, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(54), 10, GFLAGS),
> +	GATE(ICLK_CSIHOST0, "iclk_csihost0", "iclk_csihost01", 0,
> +			RK3576_CLKGATE_CON(54), 11, GFLAGS),
> +	COMPOSITE(ACLK_VOP_ROOT, "aclk_vop_root", gpll_cpll_aupll_spll_lpll_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(144), 5, 3, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(61), 0, GFLAGS),
> +	COMPOSITE_NODIV(HCLK_VOP_ROOT, "hclk_vop_root", mux_200m_100m_50m_24m_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(144), 10, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(61), 2, GFLAGS),
> +	COMPOSITE_NODIV(PCLK_VOP_ROOT, "pclk_vop_root", mux_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(144), 12, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(61), 3, GFLAGS),
> +	GATE(HCLK_VOP, "hclk_vop", "hclk_vop_root", 0,
> +			RK3576_CLKGATE_CON(61), 8, GFLAGS),
> +	GATE(ACLK_VOP, "aclk_vop", "aclk_vop_root", 0,
> +			RK3576_CLKGATE_CON(61), 9, GFLAGS),
> +	COMPOSITE(DCLK_VP0_SRC, "dclk_vp0_src", gpll_cpll_vpll_bpll_lpll_p, CLK_SET_RATE_NO_REPARENT,
> +			RK3576_CLKSEL_CON(145), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(61), 10, GFLAGS),
> +	COMPOSITE(DCLK_VP1_SRC, "dclk_vp1_src", gpll_cpll_vpll_bpll_lpll_p, CLK_SET_RATE_NO_REPARENT,
> +			RK3576_CLKSEL_CON(146), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(61), 11, GFLAGS),
> +	COMPOSITE(DCLK_VP2_SRC, "dclk_vp2_src", gpll_cpll_vpll_bpll_lpll_p, CLK_SET_RATE_NO_REPARENT,
> +			RK3576_CLKSEL_CON(147), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(61), 12, GFLAGS),
> +	COMPOSITE_NODIV(DCLK_VP0, "dclk_vp0", dclk_vp0_p, CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
> +			RK3576_CLKSEL_CON(147), 11, 1, MFLAGS,
> +			RK3576_CLKGATE_CON(61), 13, GFLAGS),
> +	COMPOSITE_NODIV(DCLK_VP1, "dclk_vp1", dclk_vp1_p, CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
> +			RK3576_CLKSEL_CON(147), 12, 1, MFLAGS,
> +			RK3576_CLKGATE_CON(62), 0, GFLAGS),
> +	COMPOSITE_NODIV(DCLK_VP2, "dclk_vp2", dclk_vp2_p, CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
> +			RK3576_CLKSEL_CON(147), 13, 1, MFLAGS,
> +			RK3576_CLKGATE_CON(62), 1, GFLAGS),
> +
> +	/* vo0 */
> +	COMPOSITE(ACLK_VO0_ROOT, "aclk_vo0_root", gpll_cpll_lpll_bpll_p, 0,
> +			RK3576_CLKSEL_CON(149), 5, 2, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(63), 0, GFLAGS),
> +	COMPOSITE_NODIV(HCLK_VO0_ROOT, "hclk_vo0_root", mux_200m_100m_50m_24m_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(149), 7, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(63), 1, GFLAGS),
> +	COMPOSITE_NODIV(PCLK_VO0_ROOT, "pclk_vo0_root", mux_150m_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(149), 11, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(63), 3, GFLAGS),
> +	GATE(ACLK_HDCP0, "aclk_hdcp0", "aclk_vo0_root", 0,
> +			RK3576_CLKGATE_CON(63), 12, GFLAGS),
> +	GATE(HCLK_HDCP0, "hclk_hdcp0", "hclk_vo0_root", 0,
> +			RK3576_CLKGATE_CON(63), 13, GFLAGS),
> +	GATE(PCLK_HDCP0, "pclk_hdcp0", "pclk_vo0_root", 0,
> +			RK3576_CLKGATE_CON(63), 14, GFLAGS),
> +	GATE(CLK_TRNG0_SKP, "clk_trng0_skp", "aclk_hdcp0", 0,
> +			RK3576_CLKGATE_CON(64), 4, GFLAGS),
> +	GATE(PCLK_DSIHOST0, "pclk_dsihost0", "pclk_vo0_root", 0,
> +			RK3576_CLKGATE_CON(64), 5, GFLAGS),
> +	COMPOSITE(CLK_DSIHOST0, "clk_dsihost0", gpll_cpll_spll_vpll_bpll_lpll_p, 0,
> +			RK3576_CLKSEL_CON(151), 7, 3, MFLAGS, 0, 7, DFLAGS,
> +			RK3576_CLKGATE_CON(64), 6, GFLAGS),
> +	GATE(PCLK_HDMITX0, "pclk_hdmitx0", "pclk_vo0_root", 0,
> +			RK3576_CLKGATE_CON(64), 7, GFLAGS),
> +	COMPOSITE(CLK_HDMITX0_EARC, "clk_hdmitx0_earc", gpll_cpll_p, 0,
> +			RK3576_CLKSEL_CON(151), 15, 1, MFLAGS, 10, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(64), 8, GFLAGS),
> +	GATE(CLK_HDMITX0_REF, "clk_hdmitx0_ref", "aclk_vo0_root", 0,
> +			RK3576_CLKGATE_CON(64), 9, GFLAGS),
> +	GATE(PCLK_EDP0, "pclk_edp0", "pclk_vo0_root", 0,
> +			RK3576_CLKGATE_CON(64), 13, GFLAGS),
> +	GATE(CLK_EDP0_24M, "clk_edp0_24m", "xin24m", 0,
> +			RK3576_CLKGATE_CON(64), 14, GFLAGS),
> +	COMPOSITE_NODIV(CLK_EDP0_200M, "clk_edp0_200m", mux_200m_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(152), 1, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(64), 15, GFLAGS),
> +	COMPOSITE(MCLK_SAI5_8CH_SRC, "mclk_sai5_8ch_src", audio_frac_int_p, 0,
> +			RK3576_CLKSEL_CON(154), 10, 3, MFLAGS, 2, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(65), 3, GFLAGS),
> +	COMPOSITE_NODIV(MCLK_SAI5_8CH, "mclk_sai5_8ch", mclk_sai5_8ch_p, CLK_SET_RATE_PARENT,
> +			RK3576_CLKSEL_CON(154), 13, 1, MFLAGS,
> +			RK3576_CLKGATE_CON(65), 4, GFLAGS),
> +	GATE(HCLK_SAI5_8CH, "hclk_sai5_8ch", "hclk_vo0_root", 0,
> +			RK3576_CLKGATE_CON(65), 5, GFLAGS),
> +	COMPOSITE(MCLK_SAI6_8CH_SRC, "mclk_sai6_8ch_src", audio_frac_int_p, 0,
> +			RK3576_CLKSEL_CON(155), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(65), 7, GFLAGS),
> +	COMPOSITE_NODIV(MCLK_SAI6_8CH, "mclk_sai6_8ch", mclk_sai6_8ch_p, CLK_SET_RATE_PARENT,
> +			RK3576_CLKSEL_CON(155), 11, 1, MFLAGS,
> +			RK3576_CLKGATE_CON(65), 8, GFLAGS),
> +	GATE(HCLK_SAI6_8CH, "hclk_sai6_8ch", "hclk_vo0_root", 0,
> +			RK3576_CLKGATE_CON(65), 9, GFLAGS),
> +	GATE(HCLK_SPDIF_TX2, "hclk_spdif_tx2", "hclk_vo0_root", 0,
> +			RK3576_CLKGATE_CON(65), 10, GFLAGS),
> +	COMPOSITE(MCLK_SPDIF_TX2, "mclk_spdif_tx2", audio_frac_int_p, 0,
> +			RK3576_CLKSEL_CON(156), 5, 3, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(65), 13, GFLAGS),
> +	GATE(HCLK_SPDIF_RX2, "hclk_spdif_rx2", "hclk_vo0_root", 0,
> +			RK3576_CLKGATE_CON(65), 14, GFLAGS),
> +	COMPOSITE(MCLK_SPDIF_RX2, "mclk_spdif_rx2", gpll_cpll_aupll_p, 0,
> +			RK3576_CLKSEL_CON(156), 13, 2, MFLAGS, 8, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(65), 15, GFLAGS),
> +
> +	/* vo1 */
> +	COMPOSITE(ACLK_VO1_ROOT, "aclk_vo1_root", gpll_cpll_lpll_bpll_p, 0,
> +			RK3576_CLKSEL_CON(158), 5, 2, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(67), 1, GFLAGS),
> +	COMPOSITE_NODIV(HCLK_VO1_ROOT, "hclk_vo1_root", mux_200m_100m_50m_24m_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(158), 7, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(67), 2, GFLAGS),
> +	COMPOSITE_NODIV(PCLK_VO1_ROOT, "pclk_vo1_root", mux_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(158), 9, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(67), 3, GFLAGS),
> +	COMPOSITE(MCLK_SAI8_8CH_SRC, "mclk_sai8_8ch_src", audio_frac_int_p, 0,
> +			RK3576_CLKSEL_CON(157), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(66), 1, GFLAGS),
> +	COMPOSITE_NODIV(MCLK_SAI8_8CH, "mclk_sai8_8ch", mclk_sai8_8ch_p, CLK_SET_RATE_PARENT,
> +			RK3576_CLKSEL_CON(157), 11, 1, MFLAGS,
> +			RK3576_CLKGATE_CON(66), 2, GFLAGS),
> +	GATE(HCLK_SAI8_8CH, "hclk_sai8_8ch", "hclk_vo1_root", 0,
> +			RK3576_CLKGATE_CON(66), 0, GFLAGS),
> +	COMPOSITE(MCLK_SAI7_8CH_SRC, "mclk_sai7_8ch_src", audio_frac_int_p, 0,
> +			RK3576_CLKSEL_CON(159), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(67), 8, GFLAGS),
> +	COMPOSITE_NODIV(MCLK_SAI7_8CH, "mclk_sai7_8ch", mclk_sai7_8ch_p, CLK_SET_RATE_PARENT,
> +			RK3576_CLKSEL_CON(159), 11, 1, MFLAGS,
> +			RK3576_CLKGATE_CON(67), 9, GFLAGS),
> +	GATE(HCLK_SAI7_8CH, "hclk_sai7_8ch", "hclk_vo1_root", 0,
> +			RK3576_CLKGATE_CON(67), 10, GFLAGS),
> +	GATE(HCLK_SPDIF_TX3, "hclk_spdif_tx3", "hclk_vo1_root", 0,
> +			RK3576_CLKGATE_CON(67), 11, GFLAGS),
> +	GATE(HCLK_SPDIF_TX4, "hclk_spdif_tx4", "hclk_vo1_root", 0,
> +			RK3576_CLKGATE_CON(67), 12, GFLAGS),
> +	GATE(HCLK_SPDIF_TX5, "hclk_spdif_tx5", "hclk_vo1_root", 0,
> +			RK3576_CLKGATE_CON(67), 13, GFLAGS),
> +	COMPOSITE(MCLK_SPDIF_TX3, "mclk_spdif_tx3", audio_frac_int_p, 0,
> +			RK3576_CLKSEL_CON(160), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(67), 14, GFLAGS),
> +	COMPOSITE_NOMUX(CLK_AUX16MHZ_0, "clk_aux16mhz_0", "gpll", 0,
> +			RK3576_CLKSEL_CON(161), 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(67), 15, GFLAGS),
> +	GATE(ACLK_DP0, "aclk_dp0", "aclk_vo1_root", 0,
> +			RK3576_CLKGATE_CON(68), 0, GFLAGS),
> +	GATE(PCLK_DP0, "pclk_dp0", "pclk_vo1_root", 0,
> +			RK3576_CLKGATE_CON(68), 1, GFLAGS),
> +	GATE(ACLK_HDCP1, "aclk_hdcp1", "aclk_vo1_root", 0,
> +			RK3576_CLKGATE_CON(68), 4, GFLAGS),
> +	GATE(HCLK_HDCP1, "hclk_hdcp1", "hclk_vo1_root", 0,
> +			RK3576_CLKGATE_CON(68), 5, GFLAGS),
> +	GATE(PCLK_HDCP1, "pclk_hdcp1", "pclk_vo1_root", 0,
> +			RK3576_CLKGATE_CON(68), 6, GFLAGS),
> +	GATE(CLK_TRNG1_SKP, "clk_trng1_skp", "aclk_hdcp1", 0,
> +			RK3576_CLKGATE_CON(68), 7, GFLAGS),
> +	GATE(HCLK_SAI9_8CH, "hclk_sai9_8ch", "hclk_vo1_root", 0,
> +			RK3576_CLKGATE_CON(68), 9, GFLAGS),
> +	COMPOSITE(MCLK_SAI9_8CH_SRC, "mclk_sai9_8ch_src", audio_frac_int_p, 0,
> +			RK3576_CLKSEL_CON(162), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(68), 10, GFLAGS),
> +	COMPOSITE_NODIV(MCLK_SAI9_8CH, "mclk_sai9_8ch", mclk_sai9_8ch_p, CLK_SET_RATE_PARENT,
> +			RK3576_CLKSEL_CON(162), 11, 1, MFLAGS,
> +			RK3576_CLKGATE_CON(68), 11, GFLAGS),
> +	COMPOSITE(MCLK_SPDIF_TX4, "mclk_spdif_tx4", audio_frac_int_p, 0,
> +			RK3576_CLKSEL_CON(163), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(68), 12, GFLAGS),
> +	COMPOSITE(MCLK_SPDIF_TX5, "mclk_spdif_tx5", audio_frac_int_p, 0,
> +			RK3576_CLKSEL_CON(164), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(68), 13, GFLAGS),
> +
> +	/* vpu */
> +	COMPOSITE(ACLK_VPU_ROOT, "aclk_vpu_root", gpll_spll_cpll_bpll_lpll_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(118), 5, 3, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(49), 0, GFLAGS),
> +	COMPOSITE_NODIV(ACLK_VPU_MID_ROOT, "aclk_vpu_mid_root", mux_600m_400m_300m_24m_p, 0,
> +			RK3576_CLKSEL_CON(118), 8, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(49), 1, GFLAGS),
> +	COMPOSITE_NODIV(HCLK_VPU_ROOT, "hclk_vpu_root", mux_200m_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(118), 10, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(49), 2, GFLAGS),
> +	COMPOSITE(ACLK_JPEG_ROOT, "aclk_jpeg_root", gpll_cpll_aupll_spll_p, 0,
> +			RK3576_CLKSEL_CON(119), 5, 2, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(49), 3, GFLAGS),
> +	COMPOSITE_NODIV(ACLK_VPU_LOW_ROOT, "aclk_vpu_low_root", mux_400m_200m_100m_24m_p, 0,
> +			RK3576_CLKSEL_CON(119), 7, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(49), 4, GFLAGS),
> +	GATE(HCLK_RGA2E_0, "hclk_rga2e_0", "hclk_vpu_root", 0,
> +			RK3576_CLKGATE_CON(49), 13, GFLAGS),
> +	GATE(ACLK_RGA2E_0, "aclk_rga2e_0", "aclk_vpu_root", 0,
> +			RK3576_CLKGATE_CON(49), 14, GFLAGS),
> +	COMPOSITE(CLK_CORE_RGA2E_0, "clk_core_rga2e_0", gpll_spll_cpll_bpll_lpll_p, 0,
> +			RK3576_CLKSEL_CON(120), 5, 3, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(49), 15, GFLAGS),
> +	GATE(ACLK_JPEG, "aclk_jpeg", "aclk_jpeg_root", 0,
> +			RK3576_CLKGATE_CON(50), 0, GFLAGS),
> +	GATE(HCLK_JPEG, "hclk_jpeg", "hclk_vpu_root", 0,
> +			RK3576_CLKGATE_CON(50), 1, GFLAGS),
> +	GATE(HCLK_VDPP, "hclk_vdpp", "hclk_vpu_root", 0,
> +			RK3576_CLKGATE_CON(50), 2, GFLAGS),
> +	GATE(ACLK_VDPP, "aclk_vdpp", "aclk_vpu_mid_root", 0,
> +			RK3576_CLKGATE_CON(50), 3, GFLAGS),
> +	COMPOSITE(CLK_CORE_VDPP, "clk_core_vdpp", gpll_cpll_p, 0,
> +			RK3576_CLKSEL_CON(120), 13, 1, MFLAGS, 8, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(50), 4, GFLAGS),
> +	GATE(HCLK_RGA2E_1, "hclk_rga2e_1", "hclk_vpu_root", 0,
> +			RK3576_CLKGATE_CON(50), 5, GFLAGS),
> +	GATE(ACLK_RGA2E_1, "aclk_rga2e_1", "aclk_vpu_root", 0,
> +			RK3576_CLKGATE_CON(50), 6, GFLAGS),
> +	COMPOSITE(CLK_CORE_RGA2E_1, "clk_core_rga2e_1", gpll_spll_cpll_bpll_lpll_p, 0,
> +			RK3576_CLKSEL_CON(121), 5, 3, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(50), 7, GFLAGS),
> +	MUX(0, "dclk_ebc_frac_src_p", gpll_cpll_vpll_aupll_24m_p, 0,
> +			RK3576_CLKSEL_CON(123), 0, 3, MFLAGS),
> +	COMPOSITE_FRAC(DCLK_EBC_FRAC_SRC, "dclk_ebc_frac_src", "dclk_ebc_frac_src_p", 0,
> +			RK3576_CLKSEL_CON(122), 0,
> +			RK3576_CLKGATE_CON(50), 9, GFLAGS),
> +	GATE(ACLK_EBC, "aclk_ebc", "aclk_vpu_low_root", 0,
> +			RK3576_CLKGATE_CON(50), 11, GFLAGS),
> +	GATE(HCLK_EBC, "hclk_ebc", "hclk_vpu_root", 0,
> +			RK3576_CLKGATE_CON(50), 10, GFLAGS),
> +	COMPOSITE(DCLK_EBC, "dclk_ebc", dclk_ebc_p, CLK_SET_RATE_NO_REPARENT,
> +			RK3576_CLKSEL_CON(123), 12, 3, MFLAGS, 3, 9, DFLAGS,
> +			RK3576_CLKGATE_CON(50), 12, GFLAGS),
> +
> +	/* vepu */
> +	COMPOSITE_NODIV(HCLK_VEPU1_ROOT, "hclk_vepu1_root", mux_200m_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(178), 0, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(78), 0, GFLAGS),
> +	COMPOSITE(ACLK_VEPU1_ROOT, "aclk_vepu1_root", gpll_cpll_p, 0,
> +			RK3576_CLKSEL_CON(180), 5, 1, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(79), 0, GFLAGS),
> +	GATE(HCLK_VEPU1, "hclk_vepu1", "hclk_vepu1_root", 0,
> +			RK3576_CLKGATE_CON(79), 3, GFLAGS),
> +	GATE(ACLK_VEPU1, "aclk_vepu1", "aclk_vepu1_root", 0,
> +			RK3576_CLKGATE_CON(79), 4, GFLAGS),
> +	COMPOSITE(CLK_VEPU1_CORE, "clk_vepu1_core", gpll_cpll_spll_lpll_bpll_p, 0,
> +			RK3576_CLKSEL_CON(180), 11, 3, MFLAGS, 6, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(79), 5, GFLAGS),
> +
> +	/* php */
> +	COMPOSITE_NODIV(PCLK_PHP_ROOT, "pclk_php_root", mux_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(92), 0, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(34), 0, GFLAGS),
> +	COMPOSITE(ACLK_PHP_ROOT, "aclk_php_root", gpll_cpll_p, 0,
> +			RK3576_CLKSEL_CON(92), 9, 1, MFLAGS, 4, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(34), 7, GFLAGS),
> +	GATE(PCLK_PCIE0, "pclk_pcie0", "pclk_php_root", 0,
> +			RK3576_CLKGATE_CON(34), 13, GFLAGS),
> +	GATE(CLK_PCIE0_AUX, "clk_pcie0_aux", "xin24m", 0,
> +			RK3576_CLKGATE_CON(34), 14, GFLAGS),
> +	GATE(ACLK_PCIE0_MST, "aclk_pcie0_mst", "aclk_php_root", 0,
> +			RK3576_CLKGATE_CON(34), 15, GFLAGS),
> +	GATE(ACLK_PCIE0_SLV, "aclk_pcie0_slv", "aclk_php_root", 0,
> +			RK3576_CLKGATE_CON(35), 0, GFLAGS),
> +	GATE(ACLK_PCIE0_DBI, "aclk_pcie0_dbi", "aclk_php_root", 0,
> +			RK3576_CLKGATE_CON(35), 1, GFLAGS),
> +	GATE(ACLK_USB3OTG1, "aclk_usb3otg1", "aclk_php_root", 0,
> +			RK3576_CLKGATE_CON(35), 3, GFLAGS),
> +	GATE(CLK_REF_USB3OTG1, "clk_ref_usb3otg1", "xin24m", 0,
> +			RK3576_CLKGATE_CON(35), 4, GFLAGS),
> +	GATE(CLK_SUSPEND_USB3OTG1, "clk_suspend_usb3otg1", "xin24m", 0,
> +			RK3576_CLKGATE_CON(35), 5, GFLAGS),
> +	GATE(ACLK_MMU0, "aclk_mmu0", "aclk_php_root", 0,
> +			RK3576_CLKGATE_CON(35), 11, GFLAGS),
> +	GATE(ACLK_SLV_MMU0, "aclk_slv_mmu0", "aclk_php_root", 0,
> +			RK3576_CLKGATE_CON(35), 13, GFLAGS),
> +	GATE(ACLK_MMU1, "aclk_mmu1", "aclk_php_root", 0,
> +			RK3576_CLKGATE_CON(35), 14, GFLAGS),
> +	GATE(ACLK_SLV_MMU1, "aclk_slv_mmu1", "aclk_php_root", 0,
> +			RK3576_CLKGATE_CON(36), 0, GFLAGS),
> +	GATE(PCLK_PCIE1, "pclk_pcie1", "pclk_php_root", 0,
> +			RK3576_CLKGATE_CON(36), 7, GFLAGS),
> +	GATE(CLK_PCIE1_AUX, "clk_pcie1_aux", "xin24m", 0,
> +			RK3576_CLKGATE_CON(36), 8, GFLAGS),
> +	GATE(ACLK_PCIE1_MST, "aclk_pcie1_mst", "aclk_php_root", 0,
> +			RK3576_CLKGATE_CON(36), 9, GFLAGS),
> +	GATE(ACLK_PCIE1_SLV, "aclk_pcie1_slv", "aclk_php_root", 0,
> +			RK3576_CLKGATE_CON(36), 10, GFLAGS),
> +	GATE(ACLK_PCIE1_DBI, "aclk_pcie1_dbi", "aclk_php_root", 0,
> +			RK3576_CLKGATE_CON(36), 11, GFLAGS),
> +	COMPOSITE(CLK_RXOOB0, "clk_rxoob0", gpll_cpll_p, 0,
> +			RK3576_CLKSEL_CON(93), 7, 1, MFLAGS, 0, 7, DFLAGS,
> +			RK3576_CLKGATE_CON(37), 0, GFLAGS),
> +	COMPOSITE(CLK_RXOOB1, "clk_rxoob1", gpll_cpll_p, 0,
> +			RK3576_CLKSEL_CON(93), 15, 1, MFLAGS, 8, 7, DFLAGS,
> +			RK3576_CLKGATE_CON(37), 1, GFLAGS),
> +	GATE(CLK_PMALIVE0, "clk_pmalive0", "xin24m", CLK_IS_CRITICAL,
> +			RK3576_CLKGATE_CON(37), 2, GFLAGS),
> +	GATE(CLK_PMALIVE1, "clk_pmalive1", "xin24m", CLK_IS_CRITICAL,
> +			RK3576_CLKGATE_CON(37), 3, GFLAGS),
> +	GATE(ACLK_SATA0, "aclk_sata0", "aclk_php_root", 0,
> +			RK3576_CLKGATE_CON(37), 4, GFLAGS),
> +	GATE(ACLK_SATA1, "aclk_sata1", "aclk_php_root", 0,
> +			RK3576_CLKGATE_CON(37), 5, GFLAGS),
> +
> +	/* audio */
> +	COMPOSITE_NODIV(HCLK_AUDIO_ROOT, "hclk_audio_root", mux_200m_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(42), 0, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(7), 1, GFLAGS),
> +	GATE(HCLK_ASRC_2CH_0, "hclk_asrc_2ch_0", "hclk_audio_root", 0,
> +			RK3576_CLKGATE_CON(7), 3, GFLAGS),
> +	GATE(HCLK_ASRC_2CH_1, "hclk_asrc_2ch_1", "hclk_audio_root", 0,
> +			RK3576_CLKGATE_CON(7), 4, GFLAGS),
> +	GATE(HCLK_ASRC_4CH_0, "hclk_asrc_4ch_0", "hclk_audio_root", 0,
> +			RK3576_CLKGATE_CON(7), 5, GFLAGS),
> +	GATE(HCLK_ASRC_4CH_1, "hclk_asrc_4ch_1", "hclk_audio_root", 0,
> +			RK3576_CLKGATE_CON(7), 6, GFLAGS),
> +	COMPOSITE(CLK_ASRC_2CH_0, "clk_asrc_2ch_0", gpll_cpll_aupll_p, 0,
> +			RK3576_CLKSEL_CON(42), 7, 2, MFLAGS, 2, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(7), 7, GFLAGS),
> +	COMPOSITE(CLK_ASRC_2CH_1, "clk_asrc_2ch_1", gpll_cpll_aupll_p, 0,
> +			RK3576_CLKSEL_CON(42), 14, 2, MFLAGS, 9, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(7), 8, GFLAGS),
> +	COMPOSITE(CLK_ASRC_4CH_0, "clk_asrc_4ch_0", gpll_cpll_aupll_p, 0,
> +			RK3576_CLKSEL_CON(43), 5, 2, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(7), 9, GFLAGS),
> +	COMPOSITE(CLK_ASRC_4CH_1, "clk_asrc_4ch_1", gpll_cpll_aupll_p, 0,
> +			RK3576_CLKSEL_CON(43), 12, 2, MFLAGS, 7, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(7), 10, GFLAGS),
> +	COMPOSITE(MCLK_SAI0_8CH_SRC, "mclk_sai0_8ch_src", audio_frac_int_p, 0,
> +			RK3576_CLKSEL_CON(44), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(7), 11, GFLAGS),
> +	COMPOSITE_NODIV(MCLK_SAI0_8CH, "mclk_sai0_8ch", mclk_sai0_8ch_p, CLK_SET_RATE_PARENT,
> +			RK3576_CLKSEL_CON(44), 11, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(7), 12, GFLAGS),
> +	GATE(HCLK_SAI0_8CH, "hclk_sai0_8ch", "hclk_audio_root", 0,
> +			RK3576_CLKGATE_CON(7), 13, GFLAGS),
> +	GATE(HCLK_SPDIF_RX0, "hclk_spdif_rx0", "hclk_audio_root", 0,
> +			RK3576_CLKGATE_CON(7), 14, GFLAGS),
> +	COMPOSITE(MCLK_SPDIF_RX0, "mclk_spdif_rx0", gpll_cpll_aupll_p, 0,
> +			RK3576_CLKSEL_CON(45), 5, 2, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(7), 15, GFLAGS),
> +	GATE(HCLK_SPDIF_RX1, "hclk_spdif_rx1", "hclk_audio_root", 0,
> +			RK3576_CLKGATE_CON(8), 0, GFLAGS),
> +	COMPOSITE(MCLK_SPDIF_RX1, "mclk_spdif_rx1", gpll_cpll_aupll_p, 0,
> +			RK3576_CLKSEL_CON(45), 12, 2, MFLAGS, 7, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(8), 1, GFLAGS),
> +	COMPOSITE(MCLK_SAI1_8CH_SRC, "mclk_sai1_8ch_src", audio_frac_int_p, 0,
> +			RK3576_CLKSEL_CON(46), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(8), 4, GFLAGS),
> +	COMPOSITE_NODIV(MCLK_SAI1_8CH, "mclk_sai1_8ch", mclk_sai1_8ch_p, CLK_SET_RATE_PARENT,
> +			RK3576_CLKSEL_CON(46), 11, 1, MFLAGS,
> +			RK3576_CLKGATE_CON(8), 5, GFLAGS),
> +	GATE(HCLK_SAI1_8CH, "hclk_sai1_8ch", "hclk_audio_root", 0,
> +			RK3576_CLKGATE_CON(8), 6, GFLAGS),
> +	COMPOSITE(MCLK_SAI2_2CH_SRC, "mclk_sai2_2ch_src", audio_frac_int_p, 0,
> +			RK3576_CLKSEL_CON(47), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(8), 7, GFLAGS),
> +	COMPOSITE_NODIV(MCLK_SAI2_2CH, "mclk_sai2_2ch", mclk_sai2_2ch_p, CLK_SET_RATE_PARENT,
> +			RK3576_CLKSEL_CON(47), 11, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(8), 8, GFLAGS),
> +	GATE(HCLK_SAI2_2CH, "hclk_sai2_2ch", "hclk_audio_root", 0,
> +			RK3576_CLKGATE_CON(8), 10, GFLAGS),
> +	COMPOSITE(MCLK_SAI3_2CH_SRC, "mclk_sai3_2ch_src", audio_frac_int_p, 0,
> +			RK3576_CLKSEL_CON(48), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(8), 11, GFLAGS),
> +	COMPOSITE_NODIV(MCLK_SAI3_2CH, "mclk_sai3_2ch", mclk_sai3_2ch_p, CLK_SET_RATE_PARENT,
> +			RK3576_CLKSEL_CON(48), 11, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(8), 12, GFLAGS),
> +	GATE(HCLK_SAI3_2CH, "hclk_sai3_2ch", "hclk_audio_root", 0,
> +			RK3576_CLKGATE_CON(8), 14, GFLAGS),
> +	COMPOSITE(MCLK_SAI4_2CH_SRC, "mclk_sai4_2ch_src", audio_frac_int_p, 0,
> +			RK3576_CLKSEL_CON(49), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(8), 15, GFLAGS),
> +	COMPOSITE_NODIV(MCLK_SAI4_2CH, "mclk_sai4_2ch", mclk_sai4_2ch_p, CLK_SET_RATE_PARENT,
> +			RK3576_CLKSEL_CON(49), 11, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(9), 0, GFLAGS),
> +	GATE(HCLK_SAI4_2CH, "hclk_sai4_2ch", "hclk_audio_root", 0,
> +			RK3576_CLKGATE_CON(9), 2, GFLAGS),
> +	GATE(HCLK_ACDCDIG_DSM, "hclk_acdcdig_dsm", "hclk_audio_root", 0,
> +			RK3576_CLKGATE_CON(9), 3, GFLAGS),
> +	GATE(MCLK_ACDCDIG_DSM, "mclk_acdcdig_dsm", "mclk_sai4_2ch", 0,
> +			RK3576_CLKGATE_CON(9), 4, GFLAGS),
> +	COMPOSITE(CLK_PDM1, "clk_pdm1", audio_frac_int_p, 0,
> +			RK3576_CLKSEL_CON(50), 9, 3, MFLAGS, 0, 9, DFLAGS,
> +			RK3576_CLKGATE_CON(9), 5, GFLAGS),
> +	GATE(HCLK_PDM1, "hclk_pdm1", "hclk_audio_root", 0,
> +			RK3576_CLKGATE_CON(9), 7, GFLAGS),
> +	GATE(CLK_PDM1_OUT, "clk_pdm1_out", "clk_pdm1", 0,
> +			RK3576_CLKGATE_CON(3), 5, GFLAGS),
> +	COMPOSITE(MCLK_PDM1, "mclk_pdm1", audio_frac_int_p, 0,
> +			RK3576_CLKSEL_CON(51), 5, 3, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(9), 8, GFLAGS),
> +	GATE(HCLK_SPDIF_TX0, "hclk_spdif_tx0", "hclk_audio_root", 0,
> +			RK3576_CLKGATE_CON(9), 9, GFLAGS),
> +	COMPOSITE(MCLK_SPDIF_TX0, "mclk_spdif_tx0", audio_frac_int_p, 0,
> +			RK3576_CLKSEL_CON(52), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(9), 10, GFLAGS),
> +	GATE(HCLK_SPDIF_TX1, "hclk_spdif_tx1", "hclk_audio_root", 0,
> +			RK3576_CLKGATE_CON(9), 11, GFLAGS),
> +	COMPOSITE(MCLK_SPDIF_TX1, "mclk_spdif_tx1", audio_frac_int_p, 0,
> +			RK3576_CLKSEL_CON(53), 8, 3, MFLAGS, 0, 8, DFLAGS,
> +			RK3576_CLKGATE_CON(9), 12, GFLAGS),
> +	GATE(CLK_SAI1_MCLKOUT, "clk_sai1_mclkout", "mclk_sai1_8ch", 0,
> +			RK3576_CLKGATE_CON(9), 13, GFLAGS),
> +	GATE(CLK_SAI2_MCLKOUT, "clk_sai2_mclkout", "mclk_sai2_2ch", 0,
> +			RK3576_CLKGATE_CON(9), 14, GFLAGS),
> +	GATE(CLK_SAI3_MCLKOUT, "clk_sai3_mclkout", "mclk_sai3_2ch", 0,
> +			RK3576_CLKGATE_CON(9), 15, GFLAGS),
> +	GATE(CLK_SAI4_MCLKOUT, "clk_sai4_mclkout", "mclk_sai4_2ch", 0,
> +			RK3576_CLKGATE_CON(10), 0, GFLAGS),
> +	GATE(CLK_SAI0_MCLKOUT, "clk_sai0_mclkout", "mclk_sai0_8ch", 0,
> +			RK3576_CLKGATE_CON(10), 1, GFLAGS),
> +
> +	/* sdgmac */
> +	COMPOSITE_NODIV(HCLK_SDGMAC_ROOT, "hclk_sdgmac_root", mux_200m_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(103), 0, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(42), 0, GFLAGS),
> +	COMPOSITE(ACLK_SDGMAC_ROOT, "aclk_sdgmac_root", gpll_cpll_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(103), 7, 1, MFLAGS, 2, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(42), 1, GFLAGS),
> +	COMPOSITE_NODIV(PCLK_SDGMAC_ROOT, "pclk_sdgmac_root", mux_100m_50m_24m_p, 0,
> +			RK3576_CLKSEL_CON(103), 8, 2, MFLAGS,
> +			RK3576_CLKGATE_CON(42), 2, GFLAGS),
> +	GATE(ACLK_GMAC0, "aclk_gmac0", "aclk_sdgmac_root", 0,
> +			RK3576_CLKGATE_CON(42), 7, GFLAGS),
> +	GATE(ACLK_GMAC1, "aclk_gmac1", "aclk_sdgmac_root", 0,
> +			RK3576_CLKGATE_CON(42), 8, GFLAGS),
> +	GATE(PCLK_GMAC0, "pclk_gmac0", "pclk_sdgmac_root", 0,
> +			RK3576_CLKGATE_CON(42), 9, GFLAGS),
> +	GATE(PCLK_GMAC1, "pclk_gmac1", "pclk_sdgmac_root", 0,
> +			RK3576_CLKGATE_CON(42), 10, GFLAGS),
> +	COMPOSITE(CCLK_SRC_SDIO, "cclk_src_sdio", gpll_cpll_24m_p, 0,
> +			RK3576_CLKSEL_CON(104), 6, 2, MFLAGS, 0, 6, DFLAGS,
> +			RK3576_CLKGATE_CON(42), 11, GFLAGS),
> +	GATE(HCLK_SDIO, "hclk_sdio", "hclk_sdgmac_root", 0,
> +			RK3576_CLKGATE_CON(42), 12, GFLAGS),
> +	COMPOSITE(CLK_GMAC1_PTP_REF_SRC, "clk_gmac1_ptp_ref_src", clk_gmac1_ptp_ref_src_p, 0,
> +			RK3576_CLKSEL_CON(104), 13, 2, MFLAGS, 8, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(42), 15, GFLAGS),
> +	COMPOSITE(CLK_GMAC0_PTP_REF_SRC, "clk_gmac0_ptp_ref_src", clk_gmac0_ptp_ref_src_p, 0,
> +			RK3576_CLKSEL_CON(105), 5, 2, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(43), 0, GFLAGS),
> +	GATE(CLK_GMAC1_PTP_REF, "clk_gmac1_ptp_ref", "clk_gmac1_ptp_ref_src", 0,
> +			RK3576_CLKGATE_CON(42), 13, GFLAGS),
> +	GATE(CLK_GMAC0_PTP_REF, "clk_gmac0_ptp_ref", "clk_gmac0_ptp_ref_src", 0,
> +			RK3576_CLKGATE_CON(42), 14, GFLAGS),
> +	COMPOSITE(CCLK_SRC_SDMMC0, "cclk_src_sdmmc0", gpll_cpll_24m_p, 0,
> +			RK3576_CLKSEL_CON(105), 13, 2, MFLAGS, 7, 6, DFLAGS,
> +			RK3576_CLKGATE_CON(43), 1, GFLAGS),
> +	GATE(HCLK_SDMMC0, "hclk_sdmmc0", "hclk_sdgmac_root", 0,
> +			RK3576_CLKGATE_CON(43), 2, GFLAGS),
> +	COMPOSITE(SCLK_FSPI1_X2, "sclk_fspi1_x2", gpll_cpll_24m_p, 0,
> +			RK3576_CLKSEL_CON(106), 6, 2, MFLAGS, 0, 6, DFLAGS,
> +			RK3576_CLKGATE_CON(43), 3, GFLAGS),
> +	GATE(HCLK_FSPI1, "hclk_fspi1", "hclk_sdgmac_root", 0,
> +			RK3576_CLKGATE_CON(43), 4, GFLAGS),
> +	COMPOSITE(ACLK_DSMC_ROOT, "aclk_dsmc_root", gpll_cpll_p, CLK_IS_CRITICAL,
> +			RK3576_CLKSEL_CON(106), 13, 1, MFLAGS, 8, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(43), 5, GFLAGS),
> +	GATE(ACLK_DSMC, "aclk_dsmc", "aclk_dsmc_root", 0,
> +			RK3576_CLKGATE_CON(43), 7, GFLAGS),
> +	GATE(PCLK_DSMC, "pclk_dsmc", "pclk_sdgmac_root", 0,
> +			RK3576_CLKGATE_CON(43), 8, GFLAGS),
> +	COMPOSITE(CLK_DSMC_SYS, "clk_dsmc_sys", gpll_cpll_p, 0,
> +			RK3576_CLKSEL_CON(107), 5, 1, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(43), 9, GFLAGS),
> +	GATE(HCLK_HSGPIO, "hclk_hsgpio", "hclk_sdgmac_root", 0,
> +			RK3576_CLKGATE_CON(43), 10, GFLAGS),
> +	COMPOSITE(CLK_HSGPIO_TX, "clk_hsgpio_tx", gpll_cpll_24m_p, 0,
> +			RK3576_CLKSEL_CON(107), 11, 2, MFLAGS, 6, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(43), 11, GFLAGS),
> +	COMPOSITE(CLK_HSGPIO_RX, "clk_hsgpio_rx", gpll_cpll_24m_p, 0,
> +			RK3576_CLKSEL_CON(108), 5, 2, MFLAGS, 0, 5, DFLAGS,
> +			RK3576_CLKGATE_CON(43), 12, GFLAGS),
> +	GATE(ACLK_HSGPIO, "aclk_hsgpio", "aclk_sdgmac_root", 0,
> +			RK3576_CLKGATE_CON(43), 13, GFLAGS),
> +
> +	/* phpphy */
> +	GATE(PCLK_PHPPHY_ROOT, "pclk_phpphy_root", "pclk_bus_root", CLK_IS_CRITICAL,
> +			RK3576_PHP_CLKGATE_CON(0), 2, GFLAGS),
> +	GATE(PCLK_PCIE2_COMBOPHY0, "pclk_pcie2_combophy0", "pclk_phpphy_root", 0,
> +			RK3576_PHP_CLKGATE_CON(0), 5, GFLAGS),
> +	GATE(PCLK_PCIE2_COMBOPHY1, "pclk_pcie2_combophy1", "pclk_phpphy_root", 0,
> +			RK3576_PHP_CLKGATE_CON(0), 7, GFLAGS),
> +	COMPOSITE_NOMUX(CLK_PCIE_100M_SRC, "clk_pcie_100m_src", "ppll", 0,
> +			RK3576_PHP_CLKSEL_CON(0), 2, 5, DFLAGS,
> +			RK3576_PHP_CLKGATE_CON(1), 1, GFLAGS),
> +	COMPOSITE_NOMUX(CLK_PCIE_100M_NDUTY_SRC, "clk_pcie_100m_nduty_src", "ppll", 0,
> +			RK3576_PHP_CLKSEL_CON(0), 7, 5, DFLAGS,
> +			RK3576_PHP_CLKGATE_CON(1), 2, GFLAGS),
> +	COMPOSITE_NODIV(CLK_REF_PCIE0_PHY, "clk_ref_pcie0_phy", clk_ref_pcie0_phy_p, 0,
> +			RK3576_PHP_CLKSEL_CON(0), 12, 2, MFLAGS,
> +			RK3576_PHP_CLKGATE_CON(1), 5, GFLAGS),
> +	COMPOSITE_NODIV(CLK_REF_PCIE1_PHY, "clk_ref_pcie1_phy", clk_ref_pcie0_phy_p, 0,
> +			RK3576_PHP_CLKSEL_CON(0), 14, 2, MFLAGS,
> +			RK3576_PHP_CLKGATE_CON(1), 8, GFLAGS),
> +	COMPOSITE_NOMUX(CLK_REF_MPHY_26M, "clk_ref_mphy_26m", "ppll", CLK_IS_CRITICAL,
> +			RK3576_PHP_CLKSEL_CON(1), 0, 8, DFLAGS,
> +			RK3576_PHP_CLKGATE_CON(1), 9, GFLAGS),
> +
> +	/* pmu */
> +	GATE(CLK_200M_PMU_SRC, "clk_200m_pmu_src", "clk_gpll_div6", 0,
> +			RK3576_PMU_CLKGATE_CON(3), 2, GFLAGS),
> +	COMPOSITE_NOMUX(CLK_100M_PMU_SRC, "clk_100m_pmu_src", "cpll", 0,
> +			RK3576_PMU_CLKSEL_CON(4), 4, 5, DFLAGS,
> +			RK3576_PMU_CLKGATE_CON(3), 3, GFLAGS),
> +	FACTOR_GATE(CLK_50M_PMU_SRC, "clk_50m_pmu_src", "clk_100m_pmu_src", 0, 1, 2,
> +			RK3576_PMU_CLKGATE_CON(3), 4, GFLAGS),
> +	COMPOSITE_NODIV(HCLK_PMU1_ROOT, "hclk_pmu1_root", mux_pmu200m_pmu100m_pmu50m_24m_p, CLK_IS_CRITICAL,
> +			RK3576_PMU_CLKSEL_CON(4), 0, 2, MFLAGS,
> +			RK3576_PMU_CLKGATE_CON(3), 0, GFLAGS),
> +	COMPOSITE_NODIV(HCLK_PMU_CM0_ROOT, "hclk_pmu_cm0_root", mux_pmu200m_pmu100m_pmu50m_24m_p, 0,
> +			RK3576_PMU_CLKSEL_CON(4), 2, 2, MFLAGS,
> +			RK3576_PMU_CLKGATE_CON(3), 1, GFLAGS),
> +	COMPOSITE_NODIV(PCLK_PMU0_ROOT, "pclk_pmu0_root", mux_pmu100m_pmu50m_24m_p, 0,
> +			RK3576_PMU_CLKSEL_CON(20), 0, 2, MFLAGS,
> +			RK3576_PMU_CLKGATE_CON(7), 0, GFLAGS),
> +	GATE(PCLK_PMU0, "pclk_pmu0", "pclk_pmu0_root", CLK_IS_CRITICAL,
> +			RK3576_PMU_CLKGATE_CON(7), 3, GFLAGS),
> +	GATE(PCLK_PMU1_ROOT, "pclk_pmu1_root", "pclk_pmu0_root", CLK_IS_CRITICAL,
> +			RK3576_PMU_CLKGATE_CON(7), 9, GFLAGS),
> +	GATE(PCLK_PMU1, "pclk_pmu1", "pclk_pmu1_root", CLK_IS_CRITICAL,
> +			RK3576_PMU_CLKGATE_CON(3), 15, GFLAGS),
> +	GATE(CLK_PMU1, "clk_pmu1", "xin24m", CLK_IS_CRITICAL,
> +			RK3576_PMU_CLKGATE_CON(4), 2, GFLAGS),
> +	GATE(PCLK_PMUPHY_ROOT, "pclk_pmuphy_root", "pclk_pmu1_root", CLK_IS_CRITICAL,
> +			RK3576_PMU_CLKGATE_CON(5), 0, GFLAGS),
> +	GATE(PCLK_HDPTX_APB, "pclk_hdptx_apb", "pclk_pmuphy_root", 0,
> +			RK3576_PMU_CLKGATE_CON(0), 1, GFLAGS),
> +	GATE(PCLK_MIPI_DCPHY, "pclk_mipi_dcphy", "pclk_pmuphy_root", 0,
> +			RK3576_PMU_CLKGATE_CON(0), 2, GFLAGS),
> +	GATE(PCLK_CSIDPHY, "pclk_csidphy", "pclk_pmuphy_root", 0,
> +			RK3576_PMU_CLKGATE_CON(0), 8, GFLAGS),
> +	GATE(PCLK_USBDPPHY, "pclk_usbdpphy", "pclk_pmuphy_root", 0,
> +			RK3576_PMU_CLKGATE_CON(0), 12, GFLAGS),
> +	COMPOSITE_NOMUX(CLK_PMUPHY_REF_SRC, "clk_pmuphy_ref_src", "cpll", 0,
> +			RK3576_PMU_CLKSEL_CON(0), 0, 5, DFLAGS,
> +			RK3576_PMU_CLKGATE_CON(0), 13, GFLAGS),
> +	GATE(CLK_USBDP_COMBO_PHY_IMMORTAL, "clk_usbdp_combo_phy_immortal", "xin24m", 0,
> +			RK3576_PMU_CLKGATE_CON(0), 15, GFLAGS),
> +	GATE(CLK_HDMITXHPD, "clk_hdmitxhpd", "xin24m", 0,
> +			RK3576_PMU_CLKGATE_CON(1), 13, GFLAGS),
> +	GATE(PCLK_MPHY, "pclk_mphy", "pclk_pmuphy_root", 0,
> +			RK3576_PMU_CLKGATE_CON(2), 0, GFLAGS),
> +	MUX(CLK_REF_OSC_MPHY, "clk_ref_osc_mphy", clk_ref_osc_mphy_p, 0,
> +			RK3576_PMU_CLKSEL_CON(3), 0, 2, MFLAGS),
> +	GATE(CLK_REF_UFS_CLKOUT, "clk_ref_ufs_clkout", "clk_ref_osc_mphy", 0,
> +			RK3576_PMU_CLKGATE_CON(2), 5, GFLAGS),
> +	GATE(FCLK_PMU_CM0_CORE, "fclk_pmu_cm0_core", "hclk_pmu_cm0_root", 0,
> +			RK3576_PMU_CLKGATE_CON(3), 12, GFLAGS),
> +	COMPOSITE(CLK_PMU_CM0_RTC, "clk_pmu_cm0_rtc", mux_24m_32k_p, 0,
> +			RK3576_PMU_CLKSEL_CON(4), 14, 1, MFLAGS, 9, 5, DFLAGS,
> +			RK3576_PMU_CLKGATE_CON(3), 14, GFLAGS),
> +	GATE(PCLK_PMU1WDT, "pclk_pmu1wdt", "pclk_pmu1_root", 0,
> +			RK3576_PMU_CLKGATE_CON(4), 5, GFLAGS),
> +	COMPOSITE_NODIV(TCLK_PMU1WDT, "tclk_pmu1wdt", mux_24m_32k_p, 0,
> +			RK3576_PMU_CLKSEL_CON(4), 15, 1, MFLAGS,
> +			RK3576_PMU_CLKGATE_CON(4), 6, GFLAGS),
> +	GATE(PCLK_PMUTIMER, "pclk_pmutimer", "pclk_pmu1_root", 0,
> +			RK3576_PMU_CLKGATE_CON(4), 7, GFLAGS),
> +	COMPOSITE_NODIV(CLK_PMUTIMER_ROOT, "clk_pmutimer_root", mux_pmu100m_24m_32k_p, 0,
> +			RK3576_PMU_CLKSEL_CON(5), 0, 2, MFLAGS,
> +			RK3576_PMU_CLKGATE_CON(4), 8, GFLAGS),
> +	GATE(CLK_PMUTIMER0, "clk_pmutimer0", "clk_pmutimer_root", 0,
> +			RK3576_PMU_CLKGATE_CON(4), 9, GFLAGS),
> +	GATE(CLK_PMUTIMER1, "clk_pmutimer1", "clk_pmutimer_root", 0,
> +			RK3576_PMU_CLKGATE_CON(4), 10, GFLAGS),
> +	GATE(PCLK_PMU1PWM, "pclk_pmu1pwm", "pclk_pmu1_root", 0,
> +			RK3576_PMU_CLKGATE_CON(4), 11, GFLAGS),
> +	COMPOSITE_NODIV(CLK_PMU1PWM, "clk_pmu1pwm", mux_pmu100m_pmu50m_24m_p, 0,
> +			RK3576_PMU_CLKSEL_CON(5), 2, 2, MFLAGS,
> +			RK3576_PMU_CLKGATE_CON(4), 12, GFLAGS),
> +	GATE(CLK_PMU1PWM_OSC, "clk_pmu1pwm_osc", "xin24m", 0,
> +			RK3576_PMU_CLKGATE_CON(4), 13, GFLAGS),
> +	GATE(PCLK_I2C0, "pclk_i2c0", "pclk_pmu1_root", 0,
> +			RK3576_PMU_CLKGATE_CON(5), 1, GFLAGS),
> +	COMPOSITE_NODIV(CLK_I2C0, "clk_i2c0", mux_pmu200m_pmu100m_pmu50m_24m_p, 0,
> +			RK3576_PMU_CLKSEL_CON(6), 7, 2, MFLAGS,
> +			RK3576_PMU_CLKGATE_CON(5), 2, GFLAGS),
> +	COMPOSITE_NODIV(SCLK_UART1, "sclk_uart1", uart1_p, 0,
> +			RK3576_PMU_CLKSEL_CON(8), 0, 1, MFLAGS,
> +			RK3576_PMU_CLKGATE_CON(5), 5, GFLAGS),
> +	GATE(PCLK_UART1, "pclk_uart1", "pclk_pmu1_root", 0,
> +			RK3576_PMU_CLKGATE_CON(5), 6, GFLAGS),
> +	GATE(CLK_PDM0, "clk_pdm0", "clk_pdm0_src_top", 0,
> +			RK3576_PMU_CLKGATE_CON(5), 13, GFLAGS),
> +	GATE(HCLK_PDM0, "hclk_pdm0", "hclk_pmu1_root", 0,
> +			RK3576_PMU_CLKGATE_CON(5), 15, GFLAGS),
> +	GATE(MCLK_PDM0, "mclk_pdm0", "mclk_pdm0_src_top", 0,
> +			RK3576_PMU_CLKGATE_CON(6), 0, GFLAGS),
> +	GATE(HCLK_VAD, "hclk_vad", "hclk_pmu1_root", 0,
> +			RK3576_PMU_CLKGATE_CON(6), 1, GFLAGS),
> +	GATE(CLK_PDM0_OUT, "clk_pdm0_out", "clk_pdm0", 0,
> +			RK3576_PMU_CLKGATE_CON(6), 8, GFLAGS),
> +	COMPOSITE(CLK_HPTIMER_SRC, "clk_hptimer_src", cpll_24m_p, CLK_IS_CRITICAL,
> +			RK3576_PMU_CLKSEL_CON(11), 6, 1, MFLAGS, 1, 5, DFLAGS,
> +			RK3576_PMU_CLKGATE_CON(6), 10, GFLAGS),
> +	GATE(PCLK_GPIO0, "pclk_gpio0", "pclk_pmu0_root", 0,
> +			RK3576_PMU_CLKGATE_CON(7), 6, GFLAGS),
> +	COMPOSITE_NODIV(DBCLK_GPIO0, "dbclk_gpio0", mux_24m_32k_p, 0,
> +			RK3576_PMU_CLKSEL_CON(20), 2, 1, MFLAGS,
> +			RK3576_PMU_CLKGATE_CON(7), 7, GFLAGS),
> +	GATE(CLK_OSC0_PMU1, "clk_osc0_pmu1", "xin24m", CLK_IS_CRITICAL,
> +			RK3576_PMU_CLKGATE_CON(7), 8, GFLAGS),
> +	GATE(CLK_PMU1PWM_RC, "clk_pmu1pwm_rc", "clk_pvtm_clkout", 0,
> +			RK3576_PMU_CLKGATE_CON(5), 7, GFLAGS),
> +
> +	/* phy ref */
> +	MUXGRF(CLK_PHY_REF_SRC, "clk_phy_ref_src", clk_phy_ref_src_p,  0,
> +			RK3576_PMU0_GRF_OSC_CON6, 4, 1, MFLAGS),
> +	MUXGRF(CLK_USBPHY_REF_SRC, "clk_usbphy_ref_src", clk_usbphy_ref_src_p,  0,
> +			RK3576_PMU0_GRF_OSC_CON6, 2, 1, MFLAGS),
> +	MUXGRF(CLK_CPLL_REF_SRC, "clk_cpll_ref_src", clk_cpll_ref_src_p,  0,
> +			RK3576_PMU0_GRF_OSC_CON6, 1, 1, MFLAGS),
> +	MUXGRF(CLK_AUPLL_REF_SRC, "clk_aupll_ref_src", clk_aupll_ref_src_p,  0,
> +			RK3576_PMU0_GRF_OSC_CON6, 0, 1, MFLAGS),
> +
> +	/* secure ns */
> +	COMPOSITE_NODIV(ACLK_SECURE_NS, "aclk_secure_ns", mux_350m_175m_116m_24m_p, CLK_IS_CRITICAL,
> +			RK3576_SECURE_NS_CLKSEL_CON(0), 0, 2, MFLAGS,
> +			RK3576_SECURE_NS_CLKGATE_CON(0), 0, GFLAGS),
> +	COMPOSITE_NODIV(HCLK_SECURE_NS, "hclk_secure_ns", mux_175m_116m_58m_24m_p, CLK_IS_CRITICAL,
> +			RK3576_SECURE_NS_CLKSEL_CON(0), 2, 2, MFLAGS,
> +			RK3576_SECURE_NS_CLKGATE_CON(0), 1, GFLAGS),
> +	COMPOSITE_NODIV(PCLK_SECURE_NS, "pclk_secure_ns", mux_116m_58m_24m_p, CLK_IS_CRITICAL,
> +			RK3576_SECURE_NS_CLKSEL_CON(0), 4, 2, MFLAGS,
> +			RK3576_SECURE_NS_CLKGATE_CON(0), 2, GFLAGS),
> +	GATE(HCLK_CRYPTO_NS, "hclk_crypto_ns", "hclk_secure_ns", 0,
> +			RK3576_SECURE_NS_CLKGATE_CON(0), 3, GFLAGS),
> +	GATE(PCLK_OTPC_NS, "pclk_otpc_ns", "pclk_secure_ns", 0,
> +			RK3576_SECURE_NS_CLKGATE_CON(0), 8, GFLAGS),
> +	GATE(CLK_OTPC_NS, "clk_otpc_ns", "xin24m", 0,
> +			RK3576_SECURE_NS_CLKGATE_CON(0), 9, GFLAGS),
> +	GATE(ACLK_CRYPTO_NS, "aclk_crypto_ns", "aclk_secure_s", 0,
> +			RK3576_NON_SECURE_GATING_CON00, 14, GFLAGS),
> +	GATE(HCLK_TRNG_NS, "hclk_trng_ns", "hclk_secure_s", 0,
> +			RK3576_NON_SECURE_GATING_CON00, 13, GFLAGS),
> +	GATE(CLK_PKA_CRYPTO_NS, "clk_pka_crypto_ns", "clk_pka_crypto_s", 0,
> +			RK3576_NON_SECURE_GATING_CON00, 1, GFLAGS),
> +
> +	/* io */
> +	GATE(CLK_VICAP_I0CLK, "clk_vicap_i0clk", "clk_csihost0_clkdata_i", 0,
> +			RK3576_CLKGATE_CON(59), 1, GFLAGS),
> +	GATE(CLK_VICAP_I1CLK, "clk_vicap_i1clk", "clk_csihost1_clkdata_i", 0,
> +			RK3576_CLKGATE_CON(59), 2, GFLAGS),
> +	GATE(CLK_VICAP_I2CLK, "clk_vicap_i2clk", "clk_csihost2_clkdata_i", 0,
> +			RK3576_CLKGATE_CON(59), 3, GFLAGS),
> +	GATE(CLK_VICAP_I3CLK, "clk_vicap_i3clk", "clk_csihost3_clkdata_i", 0,
> +			RK3576_CLKGATE_CON(59), 4, GFLAGS),
> +	GATE(CLK_VICAP_I4CLK, "clk_vicap_i4clk", "clk_csihost4_clkdata_i", 0,
> +			RK3576_CLKGATE_CON(59), 5, GFLAGS),
> +};
> +
> +static void __init rk3576_clk_init(struct device_node *np)
> +{
> +	struct rockchip_clk_provider *ctx;
> +	unsigned long clk_nr_clks;
> +	void __iomem *reg_base;
> +
> +	clk_nr_clks = rockchip_clk_find_max_clk_id(rk3576_clk_branches,
> +					ARRAY_SIZE(rk3576_clk_branches)) + 1;
> +
> +	reg_base = of_iomap(np, 0);
> +	if (!reg_base) {
> +		pr_err("%s: could not map cru region\n", __func__);
> +		return;
> +	}
> +
> +	ctx = rockchip_clk_init(np, reg_base, clk_nr_clks);
> +	if (IS_ERR(ctx)) {
> +		pr_err("%s: rockchip clk init failed\n", __func__);
> +		iounmap(reg_base);
> +		return;
> +	}
> +
> +	rockchip_clk_register_plls(ctx, rk3576_pll_clks,
> +				   ARRAY_SIZE(rk3576_pll_clks),
> +				   RK3576_GRF_SOC_STATUS0);
> +
> +	rockchip_clk_register_armclk(ctx, ARMCLK_L, "armclk_l",
> +			mux_armclkl_p, ARRAY_SIZE(mux_armclkl_p),
> +			&rk3576_cpulclk_data, rk3576_cpulclk_rates,
> +			ARRAY_SIZE(rk3576_cpulclk_rates));
> +	rockchip_clk_register_armclk(ctx, ARMCLK_B, "armclk_b",
> +			mux_armclkb_p, ARRAY_SIZE(mux_armclkb_p),
> +			&rk3576_cpubclk_data, rk3576_cpubclk_rates,
> +			ARRAY_SIZE(rk3576_cpubclk_rates));
> +
> +	rockchip_clk_register_branches(ctx, rk3576_clk_branches,
> +				       ARRAY_SIZE(rk3576_clk_branches));
> +
> +	rk3588_rst_init(np, reg_base);
> +
> +	rockchip_register_restart_notifier(ctx, RK3576_GLB_SRST_FST, NULL);
> +
> +	rockchip_clk_of_add_provider(np, ctx);
> +}
> +
> +CLK_OF_DECLARE(rk3576_cru, "rockchip,rk3576-cru", rk3576_clk_init);
> +
> +#ifdef MODULE
> +struct clk_rk3576_inits {
> +	void (*inits)(struct device_node *np);
> +};
> +
> +static const struct clk_rk3576_inits clk_rk3576_cru_init = {
> +	.inits = rk3576_clk_init,
> +};
> +
> +static const struct of_device_id clk_rk3576_match_table[] = {
> +	{
> +		.compatible = "rockchip,rk3576-cru",
> +		.data = &clk_rk3576_cru_init,
> +	},
> +	{ }
> +};
> +MODULE_DEVICE_TABLE(of, clk_rk3576_match_table);
> +
> +static int clk_rk3576_probe(struct platform_device *pdev)
> +{
> +	struct device_node *np = pdev->dev.of_node;
> +	const struct of_device_id *match;
> +	const struct clk_rk3576_inits *init_data;
> +
> +	match = of_match_device(clk_rk3576_match_table, &pdev->dev);
> +	if (!match || !match->data)
> +		return -EINVAL;
> +
> +	init_data = match->data;
> +	if (init_data->inits)
> +		init_data->inits(np);
> +
> +	return 0;
> +}
> +
> +static struct platform_driver clk_rk3576_driver = {
> +	.probe		= clk_rk3576_probe,
> +	.driver		= {
> +		.name	= "clk-rk3576",
> +		.of_match_table = clk_rk3576_match_table,
> +		.suppress_bind_attrs = true,
> +	},
> +};
> +module_platform_driver(clk_rk3576_driver);
> +
> +MODULE_DESCRIPTION("Rockchip RK3576 Clock Driver");
> +MODULE_LICENSE("GPL");
> +#endif /* MODULE */
> diff --git a/drivers/clk/rockchip/clk.h b/drivers/clk/rockchip/clk.h
> index fd3b476dedda9..43eaeac8a8f62 100644
> --- a/drivers/clk/rockchip/clk.h
> +++ b/drivers/clk/rockchip/clk.h
> @@ -235,6 +235,58 @@ struct clk;
>   #define RK3568_PMU_CLKGATE_CON(x)	((x) * 0x4 + 0x180)
>   #define RK3568_PMU_SOFTRST_CON(x)	((x) * 0x4 + 0x200)
>   
> +#define RK3576_PHP_CRU_BASE		0x8000
> +#define RK3576_SECURE_NS_CRU_BASE	0x10000
> +#define RK3576_PMU_CRU_BASE		0x20000
> +#define RK3576_BIGCORE_CRU_BASE		0x38000
> +#define RK3576_LITCORE_CRU_BASE		0x40000
> +#define RK3576_CCI_CRU_BASE		0x48000
> +
> +#define RK3576_PLL_CON(x)		RK2928_PLL_CON(x)
> +#define RK3576_MODE_CON0		0x280
> +#define RK3576_BPLL_MODE_CON0		(RK3576_BIGCORE_CRU_BASE + 0x280)
> +#define RK3576_LPLL_MODE_CON0		(RK3576_LITCORE_CRU_BASE + 0x280)
> +#define RK3576_PPLL_MODE_CON0		(RK3576_PHP_CRU_BASE + 0x280)
> +#define RK3576_CLKSEL_CON(x)		((x) * 0x4 + 0x300)
> +#define RK3576_CLKGATE_CON(x)		((x) * 0x4 + 0x800)
> +#define RK3576_SOFTRST_CON(x)		((x) * 0x4 + 0xa00)
> +#define RK3576_GLB_CNT_TH		0xc00
> +#define RK3576_GLB_SRST_FST		0xc08
> +#define RK3576_GLB_SRST_SND		0xc0c
> +#define RK3576_GLB_RST_CON		0xc10
> +#define RK3576_GLB_RST_ST		0xc04
> +#define RK3576_SDIO_CON0		0xC24
> +#define RK3576_SDIO_CON1		0xC28
> +#define RK3576_SDMMC_CON0		0xC30
> +#define RK3576_SDMMC_CON1		0xC34
> +
> +#define RK3576_PHP_CLKSEL_CON(x)	((x) * 0x4 + RK3576_PHP_CRU_BASE + 0x300)
> +#define RK3576_PHP_CLKGATE_CON(x)	((x) * 0x4 + RK3576_PHP_CRU_BASE + 0x800)
> +#define RK3576_PHP_SOFTRST_CON(x)	((x) * 0x4 + RK3576_PHP_CRU_BASE + 0xa00)
> +
> +#define RK3576_PMU_PLL_CON(x)		((x) * 0x4 + RK3576_PHP_CRU_BASE)
> +#define RK3576_PMU_CLKSEL_CON(x)	((x) * 0x4 + RK3576_PMU_CRU_BASE + 0x300)
> +#define RK3576_PMU_CLKGATE_CON(x)	((x) * 0x4 + RK3576_PMU_CRU_BASE + 0x800)
> +#define RK3576_PMU_SOFTRST_CON(x)	((x) * 0x4 + RK3576_PMU_CRU_BASE + 0xa00)
> +
> +#define RK3576_SECURE_NS_CLKSEL_CON(x)	((x) * 0x4 + RK3576_SECURE_NS_CRU_BASE + 0x300)
> +#define RK3576_SECURE_NS_CLKGATE_CON(x)	((x) * 0x4 + RK3576_SECURE_NS_CRU_BASE + 0x800)
> +#define RK3576_SECURE_NS_SOFTRST_CON(x)	((x) * 0x4 + RK3576_SECURE_NS_CRU_BASE + 0xa00)
> +
> +#define RK3576_CCI_CLKSEL_CON(x)	((x) * 0x4 + RK3576_CCI_CRU_BASE + 0x300)
> +#define RK3576_CCI_CLKGATE_CON(x)	((x) * 0x4 + RK3576_CCI_CRU_BASE + 0x800)
> +#define RK3576_CCI_SOFTRST_CON(x)	((x) * 0x4 + RK3576_CCI_CRU_BASE + 0xa00)
> +
> +#define RK3576_BPLL_CON(x)		((x) * 0x4 + RK3576_BIGCORE_CRU_BASE)
> +#define RK3576_BIGCORE_CLKSEL_CON(x)	((x) * 0x4 + RK3576_BIGCORE_CRU_BASE + 0x300)
> +#define RK3576_BIGCORE_CLKGATE_CON(x)	((x) * 0x4 + RK3576_BIGCORE_CRU_BASE + 0x800)
> +#define RK3576_BIGCORE_SOFTRST_CON(x)	((x) * 0x4 + RK3576_BIGCORE_CRU_BASE + 0xa00)
> +#define RK3576_LPLL_CON(x)		((x) * 0x4 + RK3576_CCI_CRU_BASE)
> +#define RK3576_LITCORE_CLKSEL_CON(x)	((x) * 0x4 + RK3576_LITCORE_CRU_BASE + 0x300)
> +#define RK3576_LITCORE_CLKGATE_CON(x)	((x) * 0x4 + RK3576_LITCORE_CRU_BASE + 0x800)
> +#define RK3576_LITCORE_SOFTRST_CON(x)	((x) * 0x4 + RK3576_LITCORE_CRU_BASE + 0xa00)
> +#define RK3576_NON_SECURE_GATING_CON00	0xc48
> +
>   #define RK3588_PHP_CRU_BASE		0x8000
>   #define RK3588_PMU_CRU_BASE		0x30000
>   #define RK3588_BIGCORE0_CRU_BASE	0x50000
> @@ -1025,6 +1077,7 @@ static inline void rockchip_register_softrst(struct device_node *np,
>   	return rockchip_register_softrst_lut(np, NULL, num_regs, base, flags);
>   }
>   
> +void rk3576_rst_init(struct device_node *np, void __iomem *reg_base);
>   void rk3588_rst_init(struct device_node *np, void __iomem *reg_base);
>   
>   #endif
> diff --git a/drivers/clk/rockchip/rst-rk3576.c b/drivers/clk/rockchip/rst-rk3576.c
> new file mode 100644
> index 0000000000000..0bc876228be05
> --- /dev/null
> +++ b/drivers/clk/rockchip/rst-rk3576.c
> @@ -0,0 +1,555 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (c) 2021 Rockchip Electronics Co., Ltd.
> + * Copyright (c) 2024 Collabora Ltd.
> + * Author: Detlev Casanova <detlev.casanova@collabora.com>
> + * Based on Sebastien Reichel's implementation for RK3588
> + */
> +
> +#include <linux/module.h>
> +#include <linux/of.h>
> +#include <dt-bindings/reset/rockchip,rk3576-cru.h>
> +#include "clk.h"
> +
> +/* 0x27200000 + 0x0A00 */
> +#define RK3576_CRU_RESET_OFFSET(id, reg, bit) [id] = (0 + reg * 16 + bit)
> +
> +/* mapping table for reset ID to register offset */
> +static const int rk3576_register_offset[] = {
> +	/* SOFTRST_CON01 */
> +	RK3576_CRU_RESET_OFFSET(SRST_A_TOP_BIU, 1, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_TOP_BIU, 1, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_TOP_MID_BIU, 1, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_SECURE_HIGH_BIU, 1, 7),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_TOP_BIU, 1, 14),
> +
> +	/* SOFTRST_CON02 */
> +	RK3576_CRU_RESET_OFFSET(SRST_H_VO0VOP_CHANNEL_BIU, 2, 0),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_VO0VOP_CHANNEL_BIU, 2, 1),
> +
> +	/* SOFTRST_CON06 */
> +	RK3576_CRU_RESET_OFFSET(SRST_BISRINTF, 6, 2),
> +
> +	/* SOFTRST_CON07 */
> +	RK3576_CRU_RESET_OFFSET(SRST_H_AUDIO_BIU, 7, 2),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_ASRC_2CH_0, 7, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_ASRC_2CH_1, 7, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_ASRC_4CH_0, 7, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_ASRC_4CH_1, 7, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_ASRC_2CH_0, 7, 7),
> +	RK3576_CRU_RESET_OFFSET(SRST_ASRC_2CH_1, 7, 8),
> +	RK3576_CRU_RESET_OFFSET(SRST_ASRC_4CH_0, 7, 9),
> +	RK3576_CRU_RESET_OFFSET(SRST_ASRC_4CH_1, 7, 10),
> +	RK3576_CRU_RESET_OFFSET(SRST_M_SAI0_8CH, 7, 12),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_SAI0_8CH, 7, 13),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_RX0, 7, 14),
> +	RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_RX0, 7, 15),
> +
> +	/* SOFTRST_CON08 */
> +	RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_RX1, 8, 0),
> +	RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_RX1, 8, 1),
> +	RK3576_CRU_RESET_OFFSET(SRST_M_SAI1_8CH, 8, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_SAI1_8CH, 8, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_M_SAI2_2CH, 8, 8),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_SAI2_2CH, 8, 10),
> +	RK3576_CRU_RESET_OFFSET(SRST_M_SAI3_2CH, 8, 12),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_SAI3_2CH, 8, 14),
> +
> +	/* SOFTRST_CON09 */
> +	RK3576_CRU_RESET_OFFSET(SRST_M_SAI4_2CH, 9, 0),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_SAI4_2CH, 9, 2),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_ACDCDIG_DSM, 9, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_M_ACDCDIG_DSM, 9, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_PDM1, 9, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_PDM1, 9, 7),
> +	RK3576_CRU_RESET_OFFSET(SRST_M_PDM1, 9, 8),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_TX0, 9, 9),
> +	RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_TX0, 9, 10),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_TX1, 9, 11),
> +	RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_TX1, 9, 12),
> +
> +	/* SOFTRST_CON11 */
> +	RK3576_CRU_RESET_OFFSET(SRST_A_BUS_BIU, 11, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_BUS_BIU, 11, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_CRU, 11, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_CAN0, 11, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_CAN0, 11, 7),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_CAN1, 11, 8),
> +	RK3576_CRU_RESET_OFFSET(SRST_CAN1, 11, 9),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_INTMUX2BUS, 11, 12),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_VCCIO_IOC, 11, 13),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_BUS_BIU, 11, 14),
> +	RK3576_CRU_RESET_OFFSET(SRST_KEY_SHIFT, 11, 15),
> +
> +	/* SOFTRST_CON12 */
> +	RK3576_CRU_RESET_OFFSET(SRST_P_I2C1, 12, 0),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_I2C2, 12, 1),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_I2C3, 12, 2),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_I2C4, 12, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_I2C5, 12, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_I2C6, 12, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_I2C7, 12, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_I2C8, 12, 7),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_I2C9, 12, 8),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_WDT_BUSMCU, 12, 9),
> +	RK3576_CRU_RESET_OFFSET(SRST_T_WDT_BUSMCU, 12, 10),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_GIC, 12, 11),
> +	RK3576_CRU_RESET_OFFSET(SRST_I2C1, 12, 12),
> +	RK3576_CRU_RESET_OFFSET(SRST_I2C2, 12, 13),
> +	RK3576_CRU_RESET_OFFSET(SRST_I2C3, 12, 14),
> +	RK3576_CRU_RESET_OFFSET(SRST_I2C4, 12, 15),
> +
> +	/* SOFTRST_CON13 */
> +	RK3576_CRU_RESET_OFFSET(SRST_I2C5, 13, 0),
> +	RK3576_CRU_RESET_OFFSET(SRST_I2C6, 13, 1),
> +	RK3576_CRU_RESET_OFFSET(SRST_I2C7, 13, 2),
> +	RK3576_CRU_RESET_OFFSET(SRST_I2C8, 13, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_I2C9, 13, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_SARADC, 13, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_SARADC, 13, 7),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_TSADC, 13, 8),
> +	RK3576_CRU_RESET_OFFSET(SRST_TSADC, 13, 9),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_UART0, 13, 10),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_UART2, 13, 11),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_UART3, 13, 12),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_UART4, 13, 13),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_UART5, 13, 14),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_UART6, 13, 15),
> +
> +	/* SOFTRST_CON14 */
> +	RK3576_CRU_RESET_OFFSET(SRST_P_UART7, 14, 0),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_UART8, 14, 1),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_UART9, 14, 2),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_UART10, 14, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_UART11, 14, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_S_UART0, 14, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_S_UART2, 14, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_S_UART3, 14, 9),
> +	RK3576_CRU_RESET_OFFSET(SRST_S_UART4, 14, 12),
> +	RK3576_CRU_RESET_OFFSET(SRST_S_UART5, 14, 15),
> +
> +	/* SOFTRST_CON15 */
> +	RK3576_CRU_RESET_OFFSET(SRST_S_UART6, 15, 2),
> +	RK3576_CRU_RESET_OFFSET(SRST_S_UART7, 15, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_S_UART8, 15, 8),
> +	RK3576_CRU_RESET_OFFSET(SRST_S_UART9, 15, 9),
> +	RK3576_CRU_RESET_OFFSET(SRST_S_UART10, 15, 10),
> +	RK3576_CRU_RESET_OFFSET(SRST_S_UART11, 15, 11),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_SPI0, 15, 13),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_SPI1, 15, 14),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_SPI2, 15, 15),
> +
> +	/* SOFTRST_CON16 */
> +	RK3576_CRU_RESET_OFFSET(SRST_P_SPI3, 16, 0),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_SPI4, 16, 1),
> +	RK3576_CRU_RESET_OFFSET(SRST_SPI0, 16, 2),
> +	RK3576_CRU_RESET_OFFSET(SRST_SPI1, 16, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_SPI2, 16, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_SPI3, 16, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_SPI4, 16, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_WDT0, 16, 7),
> +	RK3576_CRU_RESET_OFFSET(SRST_T_WDT0, 16, 8),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_SYS_GRF, 16, 9),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_PWM1, 16, 10),
> +	RK3576_CRU_RESET_OFFSET(SRST_PWM1, 16, 11),
> +
> +	/* SOFTRST_CON17 */
> +	RK3576_CRU_RESET_OFFSET(SRST_P_BUSTIMER0, 17, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_BUSTIMER1, 17, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_TIMER0, 17, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_TIMER1, 17, 7),
> +	RK3576_CRU_RESET_OFFSET(SRST_TIMER2, 17, 8),
> +	RK3576_CRU_RESET_OFFSET(SRST_TIMER3, 17, 9),
> +	RK3576_CRU_RESET_OFFSET(SRST_TIMER4, 17, 10),
> +	RK3576_CRU_RESET_OFFSET(SRST_TIMER5, 17, 11),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_BUSIOC, 17, 12),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_MAILBOX0, 17, 13),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_GPIO1, 17, 15),
> +
> +	/* SOFTRST_CON18 */
> +	RK3576_CRU_RESET_OFFSET(SRST_GPIO1, 18, 0),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_GPIO2, 18, 1),
> +	RK3576_CRU_RESET_OFFSET(SRST_GPIO2, 18, 2),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_GPIO3, 18, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_GPIO3, 18, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_GPIO4, 18, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_GPIO4, 18, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_DECOM, 18, 7),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_DECOM, 18, 8),
> +	RK3576_CRU_RESET_OFFSET(SRST_D_DECOM, 18, 9),
> +	RK3576_CRU_RESET_OFFSET(SRST_TIMER6, 18, 11),
> +	RK3576_CRU_RESET_OFFSET(SRST_TIMER7, 18, 12),
> +	RK3576_CRU_RESET_OFFSET(SRST_TIMER8, 18, 13),
> +	RK3576_CRU_RESET_OFFSET(SRST_TIMER9, 18, 14),
> +	RK3576_CRU_RESET_OFFSET(SRST_TIMER10, 18, 15),
> +
> +	/* SOFTRST_CON19 */
> +	RK3576_CRU_RESET_OFFSET(SRST_TIMER11, 19, 0),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_DMAC0, 19, 1),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_DMAC1, 19, 2),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_DMAC2, 19, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_SPINLOCK, 19, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_REF_PVTPLL_BUS, 19, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_I3C0, 19, 7),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_I3C1, 19, 9),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_BUS_CM0_BIU, 19, 11),
> +	RK3576_CRU_RESET_OFFSET(SRST_F_BUS_CM0_CORE, 19, 12),
> +	RK3576_CRU_RESET_OFFSET(SRST_T_BUS_CM0_JTAG, 19, 13),
> +
> +	/* SOFTRST_CON20 */
> +	RK3576_CRU_RESET_OFFSET(SRST_P_INTMUX2PMU, 20, 0),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_INTMUX2DDR, 20, 1),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_PVTPLL_BUS, 20, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_PWM2, 20, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_PWM2, 20, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_FREQ_PWM1, 20, 8),
> +	RK3576_CRU_RESET_OFFSET(SRST_COUNTER_PWM1, 20, 9),
> +	RK3576_CRU_RESET_OFFSET(SRST_I3C0, 20, 12),
> +	RK3576_CRU_RESET_OFFSET(SRST_I3C1, 20, 13),
> +
> +	/* SOFTRST_CON21 */
> +	RK3576_CRU_RESET_OFFSET(SRST_P_DDR_MON_CH0, 21, 1),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_DDR_BIU, 21, 2),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_DDR_UPCTL_CH0, 21, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_TM_DDR_MON_CH0, 21, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_BIU, 21, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_DFI_CH0, 21, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_DDR_MON_CH0, 21, 10),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_DDR_HWLP_CH0, 21, 13),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_DDR_MON_CH1, 21, 14),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_DDR_HWLP_CH1, 21, 15),
> +
> +	/* SOFTRST_CON22 */
> +	RK3576_CRU_RESET_OFFSET(SRST_P_DDR_UPCTL_CH1, 22, 0),
> +	RK3576_CRU_RESET_OFFSET(SRST_TM_DDR_MON_CH1, 22, 1),
> +	RK3576_CRU_RESET_OFFSET(SRST_DFI_CH1, 22, 2),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR01_MSCH0, 22, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR01_MSCH1, 22, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_DDR_MON_CH1, 22, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_DDR_SCRAMBLE_CH0, 22, 9),
> +	RK3576_CRU_RESET_OFFSET(SRST_DDR_SCRAMBLE_CH1, 22, 10),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_AHB2APB, 22, 12),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_AHB2APB, 22, 13),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_DDR_BIU, 22, 14),
> +	RK3576_CRU_RESET_OFFSET(SRST_F_DDR_CM0_CORE, 22, 15),
> +
> +	/* SOFTRST_CON23 */
> +	RK3576_CRU_RESET_OFFSET(SRST_P_DDR01_MSCH0, 23, 1),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_DDR01_MSCH1, 23, 2),
> +	RK3576_CRU_RESET_OFFSET(SRST_DDR_TIMER0, 23, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_DDR_TIMER1, 23, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_T_WDT_DDR, 23, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_WDT, 23, 7),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_TIMER, 23, 8),
> +	RK3576_CRU_RESET_OFFSET(SRST_T_DDR_CM0_JTAG, 23, 9),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_DDR_GRF, 23, 11),
> +
> +	/* SOFTRST_CON25 */
> +	RK3576_CRU_RESET_OFFSET(SRST_DDR_UPCTL_CH0, 25, 1),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_0_CH0, 25, 2),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_1_CH0, 25, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_2_CH0, 25, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_3_CH0, 25, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_4_CH0, 25, 6),
> +
> +	/* SOFTRST_CON26 */
> +	RK3576_CRU_RESET_OFFSET(SRST_DDR_UPCTL_CH1, 26, 1),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_0_CH1, 26, 2),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_1_CH1, 26, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_2_CH1, 26, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_3_CH1, 26, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_4_CH1, 26, 6),
> +
> +	/* SOFTRST_CON27 */
> +	RK3576_CRU_RESET_OFFSET(SRST_REF_PVTPLL_DDR, 27, 0),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_PVTPLL_DDR, 27, 1),
> +
> +	/* SOFTRST_CON28 */
> +	RK3576_CRU_RESET_OFFSET(SRST_A_RKNN0, 28, 9),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_RKNN0_BIU, 28, 11),
> +	RK3576_CRU_RESET_OFFSET(SRST_L_RKNN0_BIU, 28, 12),
> +
> +	/* SOFTRST_CON29 */
> +	RK3576_CRU_RESET_OFFSET(SRST_A_RKNN1, 29, 0),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_RKNN1_BIU, 29, 2),
> +	RK3576_CRU_RESET_OFFSET(SRST_L_RKNN1_BIU, 29, 3),
> +
> +	/* SOFTRST_CON31 */
> +	RK3576_CRU_RESET_OFFSET(SRST_NPU_DAP, 31, 0),
> +	RK3576_CRU_RESET_OFFSET(SRST_L_NPUSUBSYS_BIU, 31, 1),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_NPUTOP_BIU, 31, 9),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_NPU_TIMER, 31, 10),
> +	RK3576_CRU_RESET_OFFSET(SRST_NPUTIMER0, 31, 12),
> +	RK3576_CRU_RESET_OFFSET(SRST_NPUTIMER1, 31, 13),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_NPU_WDT, 31, 14),
> +	RK3576_CRU_RESET_OFFSET(SRST_T_NPU_WDT, 31, 15),
> +
> +	/* SOFTRST_CON32 */
> +	RK3576_CRU_RESET_OFFSET(SRST_A_RKNN_CBUF, 32, 0),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_RVCORE0, 32, 1),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_NPU_GRF, 32, 2),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_PVTPLL_NPU, 32, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_NPU_PVTPLL, 32, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_NPU_CM0_BIU, 32, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_F_NPU_CM0_CORE, 32, 7),
> +	RK3576_CRU_RESET_OFFSET(SRST_T_NPU_CM0_JTAG, 32, 8),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_RKNNTOP_BIU, 32, 11),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_RKNN_CBUF, 32, 12),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_RKNNTOP_BIU, 32, 13),
> +
> +	/* SOFTRST_CON33 */
> +	RK3576_CRU_RESET_OFFSET(SRST_H_NVM_BIU, 33, 2),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_NVM_BIU, 33, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_S_FSPI, 33, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_FSPI, 33, 7),
> +	RK3576_CRU_RESET_OFFSET(SRST_C_EMMC, 33, 8),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_EMMC, 33, 9),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_EMMC, 33, 10),
> +	RK3576_CRU_RESET_OFFSET(SRST_B_EMMC, 33, 11),
> +	RK3576_CRU_RESET_OFFSET(SRST_T_EMMC, 33, 12),
> +
> +	/* SOFTRST_CON34 */
> +	RK3576_CRU_RESET_OFFSET(SRST_P_GRF, 34, 1),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_PHP_BIU, 34, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_PHP_BIU, 34, 9),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_PCIE0, 34, 13),
> +	RK3576_CRU_RESET_OFFSET(SRST_PCIE0_POWER_UP, 34, 15),
> +
> +	/* SOFTRST_CON35 */
> +	RK3576_CRU_RESET_OFFSET(SRST_A_USB3OTG1, 35, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_MMU0, 35, 11),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_SLV_MMU0, 35, 13),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_MMU1, 35, 14),
> +
> +	/* SOFTRST_CON36 */
> +	RK3576_CRU_RESET_OFFSET(SRST_A_SLV_MMU1, 36, 0),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_PCIE1, 36, 7),
> +	RK3576_CRU_RESET_OFFSET(SRST_PCIE1_POWER_UP, 36, 9),
> +
> +	/* SOFTRST_CON37 */
> +	RK3576_CRU_RESET_OFFSET(SRST_RXOOB0, 37, 0),
> +	RK3576_CRU_RESET_OFFSET(SRST_RXOOB1, 37, 1),
> +	RK3576_CRU_RESET_OFFSET(SRST_PMALIVE0, 37, 2),
> +	RK3576_CRU_RESET_OFFSET(SRST_PMALIVE1, 37, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_SATA0, 37, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_SATA1, 37, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_ASIC1, 37, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_ASIC0, 37, 7),
> +
> +	/* SOFTRST_CON40 */
> +	RK3576_CRU_RESET_OFFSET(SRST_P_CSIDPHY1, 40, 2),
> +	RK3576_CRU_RESET_OFFSET(SRST_SCAN_CSIDPHY1, 40, 3),
> +
> +	/* SOFTRST_CON42 */
> +	RK3576_CRU_RESET_OFFSET(SRST_P_SDGMAC_GRF, 42, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_SDGMAC_BIU, 42, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_SDGMAC_BIU, 42, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_SDGMAC_BIU, 42, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_GMAC0, 42, 7),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_GMAC1, 42, 8),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_GMAC0, 42, 9),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_GMAC1, 42, 10),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_SDIO, 42, 12),
> +
> +	/* SOFTRST_CON43 */
> +	RK3576_CRU_RESET_OFFSET(SRST_H_SDMMC0, 43, 2),
> +	RK3576_CRU_RESET_OFFSET(SRST_S_FSPI1, 43, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_FSPI1, 43, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_DSMC_BIU, 43, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_DSMC, 43, 7),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_DSMC, 43, 8),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_HSGPIO, 43, 10),
> +	RK3576_CRU_RESET_OFFSET(SRST_HSGPIO, 43, 11),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_HSGPIO, 43, 13),
> +
> +	/* SOFTRST_CON45 */
> +	RK3576_CRU_RESET_OFFSET(SRST_H_RKVDEC, 45, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_RKVDEC_BIU, 45, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_RKVDEC_BIU, 45, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_RKVDEC_HEVC_CA, 45, 8),
> +	RK3576_CRU_RESET_OFFSET(SRST_RKVDEC_CORE, 45, 9),
> +
> +	/* SOFTRST_CON47 */
> +	RK3576_CRU_RESET_OFFSET(SRST_A_USB_BIU, 47, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_USBUFS_BIU, 47, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_USB3OTG0, 47, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_UFS_BIU, 47, 10),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_MMU2, 47, 12),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_SLV_MMU2, 47, 13),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_UFS_SYS, 47, 15),
> +
> +	/* SOFTRST_CON48 */
> +	RK3576_CRU_RESET_OFFSET(SRST_A_UFS, 48, 0),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_USBUFS_GRF, 48, 1),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_UFS_GRF, 48, 2),
> +
> +	/* SOFTRST_CON49 */
> +	RK3576_CRU_RESET_OFFSET(SRST_H_VPU_BIU, 49, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_JPEG_BIU, 49, 7),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_RGA_BIU, 49, 10),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_VDPP_BIU, 49, 11),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_EBC_BIU, 49, 12),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_RGA2E_0, 49, 13),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_RGA2E_0, 49, 14),
> +	RK3576_CRU_RESET_OFFSET(SRST_CORE_RGA2E_0, 49, 15),
> +
> +	/* SOFTRST_CON50 */
> +	RK3576_CRU_RESET_OFFSET(SRST_A_JPEG, 50, 0),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_JPEG, 50, 1),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_VDPP, 50, 2),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_VDPP, 50, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_CORE_VDPP, 50, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_RGA2E_1, 50, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_RGA2E_1, 50, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_CORE_RGA2E_1, 50, 7),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_EBC, 50, 10),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_EBC, 50, 11),
> +	RK3576_CRU_RESET_OFFSET(SRST_D_EBC, 50, 12),
> +
> +	/* SOFTRST_CON51 */
> +	RK3576_CRU_RESET_OFFSET(SRST_H_VEPU0_BIU, 51, 2),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_VEPU0_BIU, 51, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_VEPU0, 51, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_VEPU0, 51, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_VEPU0_CORE, 51, 6),
> +
> +	/* SOFTRST_CON53 */
> +	RK3576_CRU_RESET_OFFSET(SRST_A_VI_BIU, 53, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_VI_BIU, 53, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_VI_BIU, 53, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_D_VICAP, 53, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_VICAP, 53, 7),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_VICAP, 53, 8),
> +	RK3576_CRU_RESET_OFFSET(SRST_ISP0, 53, 10),
> +	RK3576_CRU_RESET_OFFSET(SRST_ISP0_VICAP, 53, 11),
> +
> +	/* SOFTRST_CON54 */
> +	RK3576_CRU_RESET_OFFSET(SRST_CORE_VPSS, 54, 1),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_CSI_HOST_0, 54, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_CSI_HOST_1, 54, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_CSI_HOST_2, 54, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_CSI_HOST_3, 54, 7),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_CSI_HOST_4, 54, 8),
> +
> +	/* SOFTRST_CON59 */
> +	RK3576_CRU_RESET_OFFSET(SRST_CIFIN, 59, 0),
> +	RK3576_CRU_RESET_OFFSET(SRST_VICAP_I0CLK, 59, 1),
> +	RK3576_CRU_RESET_OFFSET(SRST_VICAP_I1CLK, 59, 2),
> +	RK3576_CRU_RESET_OFFSET(SRST_VICAP_I2CLK, 59, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_VICAP_I3CLK, 59, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_VICAP_I4CLK, 59, 5),
> +
> +	/* SOFTRST_CON61 */
> +	RK3576_CRU_RESET_OFFSET(SRST_A_VOP_BIU, 61, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_VOP2_BIU, 61, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_VOP_BIU, 61, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_VOP_BIU, 61, 7),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_VOP, 61, 8),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_VOP, 61, 9),
> +	RK3576_CRU_RESET_OFFSET(SRST_D_VP0, 61, 13),
> +
> +	/* SOFTRST_CON62 */
> +	RK3576_CRU_RESET_OFFSET(SRST_D_VP1, 62, 0),
> +	RK3576_CRU_RESET_OFFSET(SRST_D_VP2, 62, 1),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_VOP2_BIU, 62, 2),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_VOPGRF, 62, 3),
> +
> +	/* SOFTRST_CON63 */
> +	RK3576_CRU_RESET_OFFSET(SRST_H_VO0_BIU, 63, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_VO0_BIU, 63, 7),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_HDCP0_BIU, 63, 9),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_VO0_GRF, 63, 10),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_HDCP0, 63, 12),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_HDCP0, 63, 13),
> +	RK3576_CRU_RESET_OFFSET(SRST_HDCP0, 63, 14),
> +
> +	/* SOFTRST_CON64 */
> +	RK3576_CRU_RESET_OFFSET(SRST_P_DSIHOST0, 64, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_DSIHOST0, 64, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_HDMITX0, 64, 7),
> +	RK3576_CRU_RESET_OFFSET(SRST_HDMITX0_REF, 64, 9),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_EDP0, 64, 13),
> +	RK3576_CRU_RESET_OFFSET(SRST_EDP0_24M, 64, 14),
> +
> +	/* SOFTRST_CON65 */
> +	RK3576_CRU_RESET_OFFSET(SRST_M_SAI5_8CH, 65, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_SAI5_8CH, 65, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_M_SAI6_8CH, 65, 8),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_SAI6_8CH, 65, 9),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_TX2, 65, 10),
> +	RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_TX2, 65, 13),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_RX2, 65, 14),
> +	RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_RX2, 65, 15),
> +
> +	/* SOFTRST_CON66 */
> +	RK3576_CRU_RESET_OFFSET(SRST_H_SAI8_8CH, 66, 0),
> +	RK3576_CRU_RESET_OFFSET(SRST_M_SAI8_8CH, 66, 2),
> +
> +	/* SOFTRST_CON67 */
> +	RK3576_CRU_RESET_OFFSET(SRST_H_VO1_BIU, 67, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_VO1_BIU, 67, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_M_SAI7_8CH, 67, 9),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_SAI7_8CH, 67, 10),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_TX3, 67, 11),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_TX4, 67, 12),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_TX5, 67, 13),
> +	RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_TX3, 67, 14),
> +
> +	/* SOFTRST_CON68 */
> +	RK3576_CRU_RESET_OFFSET(SRST_DP0, 68, 0),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_VO1_GRF, 68, 2),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_HDCP1_BIU, 68, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_HDCP1, 68, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_HDCP1, 68, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_HDCP1, 68, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_SAI9_8CH, 68, 9),
> +	RK3576_CRU_RESET_OFFSET(SRST_M_SAI9_8CH, 68, 11),
> +	RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_TX4, 68, 12),
> +	RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_TX5, 68, 13),
> +
> +	/* SOFTRST_CON69 */
> +	RK3576_CRU_RESET_OFFSET(SRST_GPU, 69, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_S_GPU_BIU, 69, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_M0_GPU_BIU, 69, 7),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_GPU_BIU, 69, 9),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_GPU_GRF, 69, 13),
> +	RK3576_CRU_RESET_OFFSET(SRST_GPU_PVTPLL, 69, 14),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_PVTPLL_GPU, 69, 15),
> +
> +	/* SOFTRST_CON72 */
> +	RK3576_CRU_RESET_OFFSET(SRST_A_CENTER_BIU, 72, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_DMA2DDR, 72, 5),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_SHAREMEM, 72, 6),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_SHAREMEM_BIU, 72, 7),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_CENTER_BIU, 72, 8),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_CENTER_GRF, 72, 9),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_DMA2DDR, 72, 10),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_SHAREMEM, 72, 11),
> +	RK3576_CRU_RESET_OFFSET(SRST_P_CENTER_BIU, 72, 12),
> +
> +	/* SOFTRST_CON75 */
> +	RK3576_CRU_RESET_OFFSET(SRST_LINKSYM_HDMITXPHY0, 75, 1),
> +
> +	/* SOFTRST_CON78 */
> +	RK3576_CRU_RESET_OFFSET(SRST_DP0_PIXELCLK, 78, 1),
> +	RK3576_CRU_RESET_OFFSET(SRST_PHY_DP0_TX, 78, 2),
> +	RK3576_CRU_RESET_OFFSET(SRST_DP1_PIXELCLK, 78, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_DP2_PIXELCLK, 78, 4),
> +
> +	/* SOFTRST_CON79 */
> +	RK3576_CRU_RESET_OFFSET(SRST_H_VEPU1_BIU, 79, 1),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_VEPU1_BIU, 79, 2),
> +	RK3576_CRU_RESET_OFFSET(SRST_H_VEPU1, 79, 3),
> +	RK3576_CRU_RESET_OFFSET(SRST_A_VEPU1, 79, 4),
> +	RK3576_CRU_RESET_OFFSET(SRST_VEPU1_CORE, 79, 5),
> +};
> +
> +void rk3576_rst_init(struct device_node *np, void __iomem *reg_base)
> +{
> +	rockchip_register_softrst_lut(np,
> +				      rk3576_register_offset,
> +				      ARRAY_SIZE(rk3576_register_offset),
> +				      reg_base + RK3576_SOFTRST_CON(0),
> +				      ROCKCHIP_SOFTRST_HIWORD_MASK);
> +}
> +

CLK has no questions except for the reset part.

Regarding reset, I need to explain as follows:

1, the original definition, this is automatically generated through the 
trm of rk3576, this ID contains the register offset and Bit shift.
For example, SRST_VEPU1_CORE 1269
CON = 1269/16 = 79, bit_shift = 1269% 16 = 5, SOFTRST_CON [79] bit5

2, SRST_P_PHPPHY_CRU 131073 This module is still in the CRU, but the 
base address is more offset.
PHPPHYSOFTRST_CON00,Offset=0x8A00
SRST_P_PHPPHY_CRU 131073 Calculation mode
CON = 131073/16 = 8192, bit_shift = 131073% 16 = 1, SOFTRST_CON [8192] 
bit1 (Offse= 0xa00 + 8192 * 4 = 0x8a00)

3, the use of rst-rk3576.c is also completely possible, but all 
registers need to be filled in manually, can not be automatically generated.
And the current field, missing PPLL_CRU_SOFTRST[2], PMU1_CRU_SOFTRST[8], 
BIGCORE_CRU_SOFTRST[4], LITCORE_CRU_SOFTRST[4], CCI_CRU_CRU_SOFTRST[2]

-- 
张晴
瑞芯微电子股份有限公司
Rockchip Electronics Co.,Ltd
地址:福建省福州市铜盘路软件大道89号软件园A区21号楼
Add:No.21 Building, A District, No.89 Software Boulevard Fuzhou, Fujian 350003, P.R.China
Tel:+86-0591-83991906-8601
邮编:350003
E-mail:elaine.zhang@rock-chips.com
****************************************************************************
保密提示:本邮件及其附件含有机密信息,仅发送给本邮件所指特定收件人。若非该特定收件人,请勿复制、使用或披露本邮件的任何内容。若误收本邮件,请从系统中永久性删除本邮件及所有附件,并以回复邮件或其他方式即刻告知发件人。福州瑞芯微电子有限公司拥有本邮件信息的著作权及解释权,禁止任何未经授权许可的侵权行为。

IMPORTANT NOTICE: This email is from Fuzhou Rockchip Electronics Co., Ltd .The contents of this email and any attachments may contain information that is privileged, confidential and/or exempt from disclosure under applicable law and relevant NDA. If you are not the intended recipient, you are hereby notified that any disclosure, copying, distribution, or use of the information is STRICTLY PROHIBITED. Please immediately contact the sender as soon as possible and destroy the material in its entirety in any format. Thank you.

****************************************************************************


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 1/3] dt-bindings: clock: add rk3576 cru bindings
  2024-08-02 21:35 ` [PATCH v2 1/3] dt-bindings: clock: add rk3576 cru bindings Detlev Casanova
@ 2024-08-04  9:52   ` Krzysztof Kozlowski
  2024-08-06 21:22     ` Detlev Casanova
  0 siblings, 1 reply; 13+ messages in thread
From: Krzysztof Kozlowski @ 2024-08-04  9:52 UTC (permalink / raw)
  To: Detlev Casanova, linux-kernel
  Cc: Michael Turquette, Stephen Boyd, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Heiko Stuebner, Philipp Zabel, Elaine Zhang,
	linux-clk, devicetree, linux-arm-kernel, linux-rockchip, kernel

On 02/08/2024 23:35, Detlev Casanova wrote:
> Document the device tree bindings of the rockchip rk3576 SoC
> clock and reset unit.
> 
> Signed-off-by: Detlev Casanova <detlev.casanova@collabora.com>

A nit, subject: drop second/last, redundant "bindings". The
"dt-bindings" prefix is already stating that these are bindings.
See also:
https://elixir.bootlin.com/linux/v6.7-rc8/source/Documentation/devicetree/bindings/submitting-patches.rst#L18

> ---
>  .../bindings/clock/rockchip,rk3576-cru.yaml   | 73 +++++++++++++++++++
>  1 file changed, 73 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/clock/rockchip,rk3576-cru.yaml
> 
> diff --git a/Documentation/devicetree/bindings/clock/rockchip,rk3576-cru.yaml b/Documentation/devicetree/bindings/clock/rockchip,rk3576-cru.yaml
> new file mode 100644
> index 0000000000000..929eb6183bf18
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/clock/rockchip,rk3576-cru.yaml
> @@ -0,0 +1,73 @@
> +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/clock/rockchip,rk3576-cru.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Rockchip rk3576 Family Clock and Reset Control Module
> +
> +maintainers:
> +  - Elaine Zhang <zhangqing@rock-chips.com>
> +  - Heiko Stuebner <heiko@sntech.de>
> +
> +description: |
> +  The RK3576 clock controller generates the clock and also implements a reset
> +  controller for SoC peripherals. For example it provides SCLK_UART2 and
> +  PCLK_UART2, as well as SRST_P_UART2 and SRST_S_UART2 for the second UART
> +  module.
> +  Each clock is assigned an identifier and client nodes can use this identifier
> +  to specify the clock which they consume. All available clock and reset IDs
> +  are defined as preprocessor macros in dt-binding headers.

Drop paragraph, it is obvious. You could provide here the name of the
header...

> +
> +properties:
> +  compatible:
> +    enum:
> +      - rockchip,rk3576-cru
> +
> +  reg:
> +    maxItems: 1
> +
> +  "#clock-cells":
> +    const: 1
> +
> +  "#reset-cells":
> +    const: 1
> +
> +  clocks:
> +    minItems: 2

You can drop minitems

> +    maxItems: 2
> +
> +  clock-names:
> +    items:
> +      - const: xin24m
> +      - const: xin32k
> +
> +  assigned-clocks: true
> +
> +  assigned-clock-rates: true
> +
> +  assigned-clock-parents: true

Drop  all these three

> +
> +  rockchip,grf:
> +    $ref: /schemas/types.yaml#/definitions/phandle
> +    description: >
> +      phandle to the syscon managing the "general register files". It is used
> +      for GRF muxes, if missing any muxes present in the GRF will not be
> +      available.
> +
> +required:
> +  - compatible
> +  - reg
> +  - "#clock-cells"
> +  - "#reset-cells"
> +
> +additionalProperties: false
> +
> +examples:
> +  - |
> +    cru: clock-controller@27200000 {

Drop unused label

> +      compatible = "rockchip,rk3576-cru";
> +      reg = <0xfd7c0000 0x5c000>;
> +      #clock-cells = <1>;
> +      #reset-cells = <1>;

Make the example complete.

> +    };

Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 2/3] clk: rockchip: Add dt-binding header for rk3576
  2024-08-02 21:35 ` [PATCH v2 2/3] clk: rockchip: Add dt-binding header for rk3576 Detlev Casanova
@ 2024-08-04  9:53   ` Krzysztof Kozlowski
  2024-08-06 15:23     ` Detlev Casanova
  0 siblings, 1 reply; 13+ messages in thread
From: Krzysztof Kozlowski @ 2024-08-04  9:53 UTC (permalink / raw)
  To: Detlev Casanova, linux-kernel
  Cc: Michael Turquette, Stephen Boyd, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Heiko Stuebner, Philipp Zabel, Elaine Zhang,
	linux-clk, devicetree, linux-arm-kernel, linux-rockchip, kernel,
	Sugar Zhang

On 02/08/2024 23:35, Detlev Casanova wrote:
> From: Elaine Zhang <zhangqing@rock-chips.com>
> 
> Add the dt-bindings header for the rk3576, that gets shared between
> the clock controller and the clock references in the dts.
> 
> Signed-off-by: Elaine Zhang <zhangqing@rock-chips.com>
> Signed-off-by: Sugar Zhang <sugar.zhang@rock-chips.com>
> [rebased, separate clocks and resets]
> Signed-off-by: Detlev Casanova <detlev.casanova@collabora.com>

Please use subject prefixes matching the subsystem. You can get them for
example with `git log --oneline -- DIRECTORY_OR_FILE` on the directory
your patch is touching. For bindings, the preferred subjects are
explained here:
https://www.kernel.org/doc/html/latest/devicetree/bindings/submitting-patches.html#i-for-patch-submitters


> ---
>  .../dt-bindings/clock/rockchip,rk3576-cru.h   | 589 ++++++++++++++++++
>  .../dt-bindings/reset/rockchip,rk3576-cru.h   | 484 ++++++++++++++
>  2 files changed, 1073 insertions(+)
>  create mode 100644 include/dt-bindings/clock/rockchip,rk3576-cru.h
>  create mode 100644 include/dt-bindings/reset/rockchip,rk3576-cru.h

These are bindings. Must be squashed with previous patch.

> 
> diff --git a/include/dt-bindings/clock/rockchip,rk3576-cru.h b/include/dt-bindings/clock/rockchip,rk3576-cru.h
> new file mode 100644
> index 0000000000000..14b54543d1a11
> --- /dev/null
> +++ b/include/dt-bindings/clock/rockchip,rk3576-cru.h
> @@ -0,0 +1,589 @@
> +/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */

Weird license. Why not using recommended one?

> +/*
> + * Copyright (c) 2023 Rockchip Electronics Co. Ltd.
> + * Author: Elaine Zhang <zhangqing@rock-chips.com>
> + */
> +
> +#ifndef _DT_BINDINGS_CLK_ROCKCHIP_RK3576_H
> +#define _DT_BINDINGS_CLK_ROCKCHIP_RK3576_H
> +
> +/* cru-clocks indices */
> +
> +/* cru plls */
> +#define PLL_BPLL			1
> +#define PLL_LPLL			3
> +#define PLL_VPLL			4
> +#define PLL_AUPLL			5
> +#define PLL_CPLL			6
> +#define PLL_GPLL			7
> +#define PLL_PPLL			9

Nope, indices start from 1 and are incremented continuously.



Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 3/3] clk: rockchip: Add clock controller for the RK3576
       [not found]   ` <a9a9219d-325c-4afa-b40c-b261ff95263c@rock-chips.com>
@ 2024-08-06 14:15     ` Detlev Casanova
  2024-08-06 15:13       ` Heiko Stübner
  0 siblings, 1 reply; 13+ messages in thread
From: Detlev Casanova @ 2024-08-06 14:15 UTC (permalink / raw)
  To: linux-kernel, zhangqing
  Cc: Michael Turquette, Stephen Boyd, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Heiko Stuebner, Philipp Zabel, linux-clk,
	devicetree, linux-arm-kernel, linux-rockchip, kernel, Finley Xiao,
	YouMin Chen, Liang Chen, Sugar Zhang

Hi,

The suggestion from Heiko was that those reset should be managed by the 
subsystems that use them, because they are on a different offset and therefore 
seem to be on a different core.

But I think I will include them here like you suggested because:
 - That's actually how it is done for rk3588 (which is quite close th rk3576),
 - According to you and the TRM, those resets are on the same core, just with 
big offsets.

Having the same structure for both SoC makes sense for maintening them.

Regards,
Detlev

On Tuesday, 6 August 2024 03:09:32 EDT zhangqing wrote:
> hi,Detlev
> 
> The attached patch is required, otherwise the reset function is
> partially missing.
> 
> 在 2024/8/3 5:35, Detlev Casanova 写道:
> > From: Elaine Zhang <zhangqing@rock-chips.com>
> > 
> > Add the clock and reset tree definitions for the new RK3576
> > SoC.
> > 
> > Signed-off-by: Elaine Zhang <zhangqing@rock-chips.com>
> > Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com>
> > Signed-off-by: YouMin Chen <cym@rock-chips.com>
> > Signed-off-by: Liang Chen <cl@rock-chips.com>
> > Signed-off-by: Sugar Zhang <sugar.zhang@rock-chips.com>
> > [rebase, squash and renumber resets]
> > Signed-off-by: Detlev Casanova <detlev.casanova@collabora.com>
> > ---
> > 
> >   drivers/clk/rockchip/Kconfig      |    7 +
> >   drivers/clk/rockchip/Makefile     |    1 +
> >   drivers/clk/rockchip/clk-rk3576.c | 1819 +++++++++++++++++++++++++++++
> >   drivers/clk/rockchip/clk.h        |   53 +
> >   drivers/clk/rockchip/rst-rk3576.c |  555 +++++++++
> >   5 files changed, 2435 insertions(+)
> >   create mode 100644 drivers/clk/rockchip/clk-rk3576.c
> >   create mode 100644 drivers/clk/rockchip/rst-rk3576.c
> > 
> > diff --git a/drivers/clk/rockchip/Kconfig b/drivers/clk/rockchip/Kconfig
> > index 9aad86925cd28..f8eb16f170d48 100644
> > --- a/drivers/clk/rockchip/Kconfig
> > +++ b/drivers/clk/rockchip/Kconfig
> > @@ -100,6 +100,13 @@ config CLK_RK3568
> > 
> >   	help
> >   	
> >   	  Build the driver for RK3568 Clock Driver.
> > 
> > +config CLK_RK3576
> > +	tristate "Rockchip RK3576 clock controller support"
> > +	depends on ARM64 || COMPILE_TEST
> > +	default y
> > +	help
> > +	  Build the driver for RK3576 Clock Driver.
> > +
> > 
> >   config CLK_RK3588
> >   
> >   	bool "Rockchip RK3588 clock controller support"
> >   	depends on ARM64 || COMPILE_TEST
> > 
> > diff --git a/drivers/clk/rockchip/Makefile b/drivers/clk/rockchip/Makefile
> > index 36894f6a7022d..af2ade54a7efa 100644
> > --- a/drivers/clk/rockchip/Makefile
> > +++ b/drivers/clk/rockchip/Makefile
> > @@ -28,4 +28,5 @@ obj-$(CONFIG_CLK_RK3328)        += clk-rk3328.o
> > 
> >   obj-$(CONFIG_CLK_RK3368)        += clk-rk3368.o
> >   obj-$(CONFIG_CLK_RK3399)        += clk-rk3399.o
> >   obj-$(CONFIG_CLK_RK3568)	+= clk-rk3568.o
> > 
> > +obj-$(CONFIG_CLK_RK3576)	+= clk-rk3576.o rst-rk3576.o
> > 
> >   obj-$(CONFIG_CLK_RK3588)	+= clk-rk3588.o rst-rk3588.o
> > 
> > diff --git a/drivers/clk/rockchip/clk-rk3576.c
> > b/drivers/clk/rockchip/clk-rk3576.c new file mode 100644
> > index 0000000000000..5725706e9b6bb
> > --- /dev/null
> > +++ b/drivers/clk/rockchip/clk-rk3576.c
> > @@ -0,0 +1,1819 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +/*
> > + * Copyright (c) 2023 Rockchip Electronics Co. Ltd.
> > + * Author: Elaine Zhang <zhangqing@rock-chips.com>
> > + */
> > +
> > +#include <linux/clk-provider.h>
> > +#include <linux/module.h>
> > +#include <linux/of.h>
> > +#include <linux/of_device.h>
> > +#include <linux/of_address.h>
> > +#include <linux/syscore_ops.h>
> > +#include <dt-bindings/clock/rockchip,rk3576-cru.h>
> > +#include "clk.h"
> > +
> > +#define RK3576_GRF_SOC_STATUS0		0x600
> > +#define RK3576_PMU0_GRF_OSC_CON6	0x18
> > +
> > +enum rk3576_plls {
> > +	bpll, lpll, vpll, aupll, cpll, gpll, ppll,
> > +};
> > +
> > +static struct rockchip_pll_rate_table rk3576_pll_rates[] = {
> > +	/* _mhz, _p, _m, _s, _k */
> > +	RK3588_PLL_RATE(2520000000, 2, 210, 0, 0),
> > +	RK3588_PLL_RATE(2496000000, 2, 208, 0, 0),
> > +	RK3588_PLL_RATE(2472000000, 2, 206, 0, 0),
> > +	RK3588_PLL_RATE(2448000000, 2, 204, 0, 0),
> > +	RK3588_PLL_RATE(2424000000, 2, 202, 0, 0),
> > +	RK3588_PLL_RATE(2400000000, 2, 200, 0, 0),
> > +	RK3588_PLL_RATE(2376000000, 2, 198, 0, 0),
> > +	RK3588_PLL_RATE(2352000000, 2, 196, 0, 0),
> > +	RK3588_PLL_RATE(2328000000, 2, 194, 0, 0),
> > +	RK3588_PLL_RATE(2304000000, 2, 192, 0, 0),
> > +	RK3588_PLL_RATE(2280000000, 2, 190, 0, 0),
> > +	RK3588_PLL_RATE(2256000000, 2, 376, 1, 0),
> > +	RK3588_PLL_RATE(2232000000, 2, 372, 1, 0),
> > +	RK3588_PLL_RATE(2208000000, 2, 368, 1, 0),
> > +	RK3588_PLL_RATE(2184000000, 2, 364, 1, 0),
> > +	RK3588_PLL_RATE(2160000000, 2, 360, 1, 0),
> > +	RK3588_PLL_RATE(2136000000, 2, 356, 1, 0),
> > +	RK3588_PLL_RATE(2112000000, 2, 352, 1, 0),
> > +	RK3588_PLL_RATE(2088000000, 2, 348, 1, 0),
> > +	RK3588_PLL_RATE(2064000000, 2, 344, 1, 0),
> > +	RK3588_PLL_RATE(2040000000, 2, 340, 1, 0),
> > +	RK3588_PLL_RATE(2016000000, 2, 336, 1, 0),
> > +	RK3588_PLL_RATE(1992000000, 2, 332, 1, 0),
> > +	RK3588_PLL_RATE(1968000000, 2, 328, 1, 0),
> > +	RK3588_PLL_RATE(1944000000, 2, 324, 1, 0),
> > +	RK3588_PLL_RATE(1920000000, 2, 320, 1, 0),
> > +	RK3588_PLL_RATE(1896000000, 2, 316, 1, 0),
> > +	RK3588_PLL_RATE(1872000000, 2, 312, 1, 0),
> > +	RK3588_PLL_RATE(1848000000, 2, 308, 1, 0),
> > +	RK3588_PLL_RATE(1824000000, 2, 304, 1, 0),
> > +	RK3588_PLL_RATE(1800000000, 2, 300, 1, 0),
> > +	RK3588_PLL_RATE(1776000000, 2, 296, 1, 0),
> > +	RK3588_PLL_RATE(1752000000, 2, 292, 1, 0),
> > +	RK3588_PLL_RATE(1728000000, 2, 288, 1, 0),
> > +	RK3588_PLL_RATE(1704000000, 2, 284, 1, 0),
> > +	RK3588_PLL_RATE(1680000000, 2, 280, 1, 0),
> > +	RK3588_PLL_RATE(1656000000, 2, 276, 1, 0),
> > +	RK3588_PLL_RATE(1632000000, 2, 272, 1, 0),
> > +	RK3588_PLL_RATE(1608000000, 2, 268, 1, 0),
> > +	RK3588_PLL_RATE(1584000000, 2, 264, 1, 0),
> > +	RK3588_PLL_RATE(1560000000, 2, 260, 1, 0),
> > +	RK3588_PLL_RATE(1536000000, 2, 256, 1, 0),
> > +	RK3588_PLL_RATE(1512000000, 2, 252, 1, 0),
> > +	RK3588_PLL_RATE(1488000000, 2, 248, 1, 0),
> > +	RK3588_PLL_RATE(1464000000, 2, 244, 1, 0),
> > +	RK3588_PLL_RATE(1440000000, 2, 240, 1, 0),
> > +	RK3588_PLL_RATE(1416000000, 2, 236, 1, 0),
> > +	RK3588_PLL_RATE(1392000000, 2, 232, 1, 0),
> > +	RK3588_PLL_RATE(1320000000, 2, 220, 1, 0),
> > +	RK3588_PLL_RATE(1200000000, 2, 200, 1, 0),
> > +	RK3588_PLL_RATE(1188000000, 2, 198, 1, 0),
> > +	RK3588_PLL_RATE(1100000000, 3, 550, 2, 0),
> > +	RK3588_PLL_RATE(1008000000, 2, 336, 2, 0),
> > +	RK3588_PLL_RATE(1000000000, 3, 500, 2, 0),
> > +	RK3588_PLL_RATE(983040000, 4, 655, 2, 23592),
> > +	RK3588_PLL_RATE(955520000, 3, 477, 2, 49806),
> > +	RK3588_PLL_RATE(903168000, 6, 903, 2, 11009),
> > +	RK3588_PLL_RATE(900000000, 2, 300, 2, 0),
> > +	RK3588_PLL_RATE(816000000, 2, 272, 2, 0),
> > +	RK3588_PLL_RATE(786432000, 2, 262, 2, 9437),
> > +	RK3588_PLL_RATE(786000000, 1, 131, 2, 0),
> > +	RK3588_PLL_RATE(785560000, 3, 392, 2, 51117),
> > +	RK3588_PLL_RATE(722534400, 8, 963, 2, 24850),
> > +	RK3588_PLL_RATE(600000000, 2, 200, 2, 0),
> > +	RK3588_PLL_RATE(594000000, 2, 198, 2, 0),
> > +	RK3588_PLL_RATE(408000000, 2, 272, 3, 0),
> > +	RK3588_PLL_RATE(312000000, 2, 208, 3, 0),
> > +	RK3588_PLL_RATE(216000000, 2, 288, 4, 0),
> > +	RK3588_PLL_RATE(96000000, 2, 256, 5, 0),
> > +	{ /* sentinel */ },
> > +};
> > +
> > +static struct rockchip_pll_rate_table rk3576_ppll_rates[] = {
> > +	/* _mhz, _p, _m, _s, _k */
> > +	RK3588_PLL_RATE(1300000000, 3, 325, 2, 0),
> > +	{ /* sentinel */ },
> > +};
> > +
> > +#define RK3576_ACLK_M_BIGCORE_DIV_MASK		0x1f
> > +#define RK3576_ACLK_M_BIGCORE_DIV_SHIFT		0
> > +#define RK3576_ACLK_M_LITCORE_DIV_MASK		0x1f
> > +#define RK3576_ACLK_M_LITCORE_DIV_SHIFT		8
> > +#define RK3576_PCLK_DBG_LITCORE_DIV_MASK	0x1f
> > +#define RK3576_PCLK_DBG_LITCORE_DIV_SHIFT	0
> > +#define RK3576_ACLK_CCI_DIV_MASK		0x1f
> > +#define RK3576_ACLK_CCI_DIV_SHIFT		7
> > +#define RK3576_ACLK_CCI_MUX_MASK		0x3
> > +#define RK3576_ACLK_CCI_MUX_SHIFT		12
> > +
> > +#define RK3576_BIGCORE_CLKSEL2(_amcore)					
	\
> > +{								
		\
> > +	.reg = RK3576_BIGCORE_CLKSEL_CON(2),			
		\
> > +	.val = HIWORD_UPDATE(_amcore - 1, RK3576_ACLK_M_BIGCORE_DIV_MASK,	
\
> > +			RK3576_ACLK_M_BIGCORE_DIV_SHIFT),			
\
> > +}
> > +
> > +#define RK3576_LITCORE_CLKSEL1(_amcore)				
		\
> > +{								
		\
> > +	.reg = RK3576_LITCORE_CLKSEL_CON(1),			
		\
> > +	.val = HIWORD_UPDATE(_amcore - 1, RK3576_ACLK_M_LITCORE_DIV_MASK,	
\
> > +			RK3576_ACLK_M_LITCORE_DIV_SHIFT),		
	\
> > +}
> > +
> > +#define RK3576_LITCORE_CLKSEL2(_pclkdbg)				
	\
> > +{								
		\
> > +	.reg = RK3576_LITCORE_CLKSEL_CON(2),			
		\
> > +	.val = HIWORD_UPDATE(_pclkdbg - 1, 
RK3576_PCLK_DBG_LITCORE_DIV_MASK,	\
> > +			RK3576_PCLK_DBG_LITCORE_DIV_SHIFT),	
		\
> > +}
> > +
> > +#define RK3576_CCI_CLKSEL4(_ccisel, _div)				
	\
> > +{								
		\
> > +	.reg = RK3576_CCI_CLKSEL_CON(4),				
	\
> > +	.val = HIWORD_UPDATE(_ccisel, RK3576_ACLK_CCI_MUX_MASK,		
	\
> > +			RK3576_ACLK_CCI_MUX_SHIFT) |			
	\
> > +	       HIWORD_UPDATE(_div - 1, RK3576_ACLK_CCI_DIV_MASK,		
\
> > +			RK3576_ACLK_CCI_DIV_SHIFT),		
		\
> > +}
> > +
> > +#define RK3576_CPUBCLK_RATE(_prate, _amcore)			
		\
> > +{								
		\
> > +	.prate = _prate##U,					
		\
> > +	.divs = {						
		\
> > +		RK3576_BIGCORE_CLKSEL2(_amcore),			
	\
> > +	},						
			\
> > +}
> > +
> > +#define RK3576_CPULCLK_RATE(_prate, _amcore, _pclkdbg, _ccisel)		
	\
> > +{								
		\
> > +	.prate = _prate##U,					
		\
> > +	.divs = {						
		\
> > +		RK3576_LITCORE_CLKSEL1(_amcore),			
	\
> > +		RK3576_LITCORE_CLKSEL2(_pclkdbg),			
	\
> > +	},						
			\
> > +	.pre_muxs = {					
			\
> > +		RK3576_CCI_CLKSEL4(2, 2),			
		\
> > +	},						
			\
> > +	.post_muxs = {					
			\
> > +		RK3576_CCI_CLKSEL4(_ccisel, 2),			
		\
> > +	},						
			\
> > +}
> > +
> > +static struct rockchip_cpuclk_rate_table rk3576_cpubclk_rates[]
> > __initdata = { +	RK3576_CPUBCLK_RATE(2496000000, 2),
> > +	RK3576_CPUBCLK_RATE(2400000000, 2),
> > +	RK3576_CPUBCLK_RATE(2304000000, 2),
> > +	RK3576_CPUBCLK_RATE(2208000000, 2),
> > +	RK3576_CPUBCLK_RATE(2184000000, 2),
> > +	RK3576_CPUBCLK_RATE(2088000000, 2),
> > +	RK3576_CPUBCLK_RATE(2040000000, 2),
> > +	RK3576_CPUBCLK_RATE(2016000000, 2),
> > +	RK3576_CPUBCLK_RATE(1992000000, 2),
> > +	RK3576_CPUBCLK_RATE(1896000000, 2),
> > +	RK3576_CPUBCLK_RATE(1800000000, 2),
> > +	RK3576_CPUBCLK_RATE(1704000000, 2),
> > +	RK3576_CPUBCLK_RATE(1608000000, 2),
> > +	RK3576_CPUBCLK_RATE(1584000000, 2),
> > +	RK3576_CPUBCLK_RATE(1560000000, 2),
> > +	RK3576_CPUBCLK_RATE(1536000000, 2),
> > +	RK3576_CPUBCLK_RATE(1512000000, 2),
> > +	RK3576_CPUBCLK_RATE(1488000000, 2),
> > +	RK3576_CPUBCLK_RATE(1464000000, 2),
> > +	RK3576_CPUBCLK_RATE(1440000000, 2),
> > +	RK3576_CPUBCLK_RATE(1416000000, 2),
> > +	RK3576_CPUBCLK_RATE(1392000000, 2),
> > +	RK3576_CPUBCLK_RATE(1368000000, 2),
> > +	RK3576_CPUBCLK_RATE(1344000000, 2),
> > +	RK3576_CPUBCLK_RATE(1320000000, 2),
> > +	RK3576_CPUBCLK_RATE(1296000000, 2),
> > +	RK3576_CPUBCLK_RATE(1272000000, 2),
> > +	RK3576_CPUBCLK_RATE(1248000000, 2),
> > +	RK3576_CPUBCLK_RATE(1224000000, 2),
> > +	RK3576_CPUBCLK_RATE(1200000000, 2),
> > +	RK3576_CPUBCLK_RATE(1104000000, 2),
> > +	RK3576_CPUBCLK_RATE(1008000000, 2),
> > +	RK3576_CPUBCLK_RATE(912000000, 2),
> > +	RK3576_CPUBCLK_RATE(816000000, 2),
> > +	RK3576_CPUBCLK_RATE(696000000, 2),
> > +	RK3576_CPUBCLK_RATE(600000000, 2),
> > +	RK3576_CPUBCLK_RATE(408000000, 2),
> > +	RK3576_CPUBCLK_RATE(312000000, 2),
> > +	RK3576_CPUBCLK_RATE(216000000, 2),
> > +	RK3576_CPUBCLK_RATE(96000000, 2),
> > +};
> > +
> > +static const struct rockchip_cpuclk_reg_data rk3576_cpubclk_data = {
> > +	.core_reg[0] = RK3576_BIGCORE_CLKSEL_CON(1),
> > +	.div_core_shift[0] = 7,
> > +	.div_core_mask[0] = 0x1f,
> > +	.num_cores = 1,
> > +	.mux_core_alt = 1,
> > +	.mux_core_main = 0,
> > +	.mux_core_shift = 12,
> > +	.mux_core_mask = 0x3,
> > +};
> > +
> > +static struct rockchip_cpuclk_rate_table rk3576_cpulclk_rates[]
> > __initdata = { +	RK3576_CPULCLK_RATE(2400000000, 2, 6, 3),
> > +	RK3576_CPULCLK_RATE(2304000000, 2, 6, 3),
> > +	RK3576_CPULCLK_RATE(2208000000, 2, 6, 3),
> > +	RK3576_CPULCLK_RATE(2184000000, 2, 6, 3),
> > +	RK3576_CPULCLK_RATE(2088000000, 2, 6, 3),
> > +	RK3576_CPULCLK_RATE(2040000000, 2, 6, 3),
> > +	RK3576_CPULCLK_RATE(2016000000, 2, 6, 3),
> > +	RK3576_CPULCLK_RATE(1992000000, 2, 6, 3),
> > +	RK3576_CPULCLK_RATE(1896000000, 2, 6, 3),
> > +	RK3576_CPULCLK_RATE(1800000000, 2, 6, 3),
> > +	RK3576_CPULCLK_RATE(1704000000, 2, 6, 3),
> > +	RK3576_CPULCLK_RATE(1608000000, 2, 6, 3),
> > +	RK3576_CPULCLK_RATE(1584000000, 2, 6, 3),
> > +	RK3576_CPULCLK_RATE(1560000000, 2, 6, 3),
> > +	RK3576_CPULCLK_RATE(1536000000, 2, 6, 3),
> > +	RK3576_CPULCLK_RATE(1512000000, 2, 6, 3),
> > +	RK3576_CPULCLK_RATE(1488000000, 2, 6, 3),
> > +	RK3576_CPULCLK_RATE(1464000000, 2, 6, 3),
> > +	RK3576_CPULCLK_RATE(1440000000, 2, 6, 3),
> > +	RK3576_CPULCLK_RATE(1416000000, 2, 6, 3),
> > +	RK3576_CPULCLK_RATE(1392000000, 2, 6, 3),
> > +	RK3576_CPULCLK_RATE(1368000000, 2, 6, 3),
> > +	RK3576_CPULCLK_RATE(1344000000, 2, 6, 3),
> > +	RK3576_CPULCLK_RATE(1320000000, 2, 6, 3),
> > +	RK3576_CPULCLK_RATE(1296000000, 2, 6, 3),
> > +	RK3576_CPULCLK_RATE(1272000000, 2, 6, 3),
> > +	RK3576_CPULCLK_RATE(1248000000, 2, 6, 3),
> > +	RK3576_CPULCLK_RATE(1224000000, 2, 6, 3),
> > +	RK3576_CPULCLK_RATE(1200000000, 2, 6, 2),
> > +	RK3576_CPULCLK_RATE(1104000000, 2, 6, 2),
> > +	RK3576_CPULCLK_RATE(1008000000, 2, 6, 2),
> > +	RK3576_CPULCLK_RATE(912000000, 2, 6, 2),
> > +	RK3576_CPULCLK_RATE(816000000, 2, 6, 2),
> > +	RK3576_CPULCLK_RATE(696000000, 2, 6, 2),
> > +	RK3576_CPULCLK_RATE(600000000, 2, 6, 2),
> > +	RK3576_CPULCLK_RATE(408000000, 2, 6, 2),
> > +	RK3576_CPULCLK_RATE(312000000, 2, 6, 2),
> > +	RK3576_CPULCLK_RATE(216000000, 2, 6, 2),
> > +	RK3576_CPULCLK_RATE(96000000, 2, 6, 2),
> > +};
> > +
> > +static const struct rockchip_cpuclk_reg_data rk3576_cpulclk_data = {
> > +	.core_reg[0] = RK3576_LITCORE_CLKSEL_CON(0),
> > +	.div_core_shift[0] = 7,
> > +	.div_core_mask[0] = 0x1f,
> > +	.num_cores = 1,
> > +	.mux_core_alt = 1,
> > +	.mux_core_main = 0,
> > +	.mux_core_shift = 12,
> > +	.mux_core_mask = 0x3,
> > +};
> > +
> > +#define MFLAGS CLK_MUX_HIWORD_MASK
> > +#define DFLAGS CLK_DIVIDER_HIWORD_MASK
> > +#define GFLAGS (CLK_GATE_HIWORD_MASK | CLK_GATE_SET_TO_DISABLE)
> > +
> > +PNAME(mux_pll_p)			= { "xin24m", "xin32k" };
> > +PNAME(mux_24m_32k_p)			= { "xin24m", 
"xin_osc0_div" };
> > +PNAME(mux_armclkl_p)			= { "xin24m", 
"pll_lpll", "lpll" };
> > +PNAME(mux_armclkb_p)			= { "xin24m", 
"pll_bpll", "bpll" };
> > +PNAME(gpll_24m_p)			= { "gpll", "xin24m" };
> > +PNAME(cpll_24m_p)			= { "cpll", "xin24m" };
> > +PNAME(gpll_cpll_p)			= { "gpll", "cpll" };
> > +PNAME(gpll_spll_p)			= { "gpll", "spll" };
> > +PNAME(gpll_cpll_aupll_p)		= { "gpll", "cpll", "aupll" };
> > +PNAME(gpll_cpll_24m_p)			= { "gpll", "cpll", 
"xin24m" };
> > +PNAME(gpll_cpll_24m_spll_p)		= { "gpll", "cpll", "xin24m", 
"spll" };
> > +PNAME(gpll_cpll_aupll_24m_p)		= { "gpll", "cpll", "aupll", 
"xin24m" };
> > +PNAME(gpll_cpll_aupll_spll_p)		= { "gpll", "cpll", "aupll", 
"spll" };
> > +PNAME(gpll_cpll_aupll_spll_lpll_p)	= { "gpll", "cpll", "aupll", "spll",
> > "lpll_dummy" }; +PNAME(gpll_cpll_spll_bpll_p)		= { "gpll", 
"cpll",
> > "spll", "bpll_dummy" }; +PNAME(gpll_cpll_lpll_bpll_p)		= 
{ "gpll",
> > "cpll", "lpll_dummy", "bpll_dummy" };
> > +PNAME(gpll_spll_cpll_bpll_lpll_p)	= { "gpll", "spll",  "cpll",
> > "bpll_dummy", "lpll_dummy" }; +PNAME(gpll_cpll_vpll_aupll_24m_p)	= {
> > "gpll", "cpll", "vpll", "aupll", "xin24m" };
> > +PNAME(gpll_cpll_spll_aupll_bpll_p)	= { "gpll", "cpll", "spll", "aupll",
> > "bpll_dummy" }; +PNAME(gpll_cpll_spll_bpll_lpll_p)	= { "gpll", 
"cpll",
> > "spll", "bpll_dummy", "lpll_dummy" };
> > +PNAME(gpll_cpll_spll_lpll_bpll_p)	= { "gpll", "cpll", "spll",
> > "lpll_dummy", "bpll_dummy" }; +PNAME(gpll_cpll_vpll_bpll_lpll_p)	= 
{
> > "gpll", "cpll", "vpll", "bpll_dummy", "lpll_dummy" };
> > +PNAME(gpll_spll_aupll_bpll_lpll_p)	= { "gpll", "spll", "aupll",
> > "bpll_dummy", "lpll_dummy" }; +PNAME(gpll_spll_isppvtpll_bpll_lpll_p)	
= {
> > "gpll", "spll", "isp_pvtpll", "bpll_dummy", "lpll_dummy" };
> > +PNAME(gpll_cpll_spll_aupll_lpll_24m_p)	= { "gpll", "cpll", "spll",
> > "aupll", "lpll_dummy", "xin24m" };
> > +PNAME(gpll_cpll_spll_vpll_bpll_lpll_p)	= { "gpll", "cpll", 
"spll",
> > "vpll", "bpll_dummy", "lpll_dummy" }; +PNAME(cpll_vpll_lpll_bpll_p)		
= {
> > "cpll", "vpll", "lpll_dummy", "bpll_dummy" };
> > +PNAME(mux_24m_ccipvtpll_gpll_lpll_p)	= { "xin24m", "cci_pvtpll", 
"gpll",
> > "lpll" }; +PNAME(mux_24m_spll_gpll_cpll_p)		= {"xin24m", 
"spll", "gpll",
> > "cpll" }; +PNAME(audio_frac_int_p)			= { "xin24m", 
"clk_audio_frac_0",
> > "clk_audio_frac_1", "clk_audio_frac_2", +				
	    "clk_audio_frac_3",
> > "clk_audio_int_0", "clk_audio_int_1", "clk_audio_int_2" };
> > +PNAME(audio_frac_p)			= { "clk_audio_frac_0", 
"clk_audio_frac_1",
> > "clk_audio_frac_2", "clk_audio_frac_3" }; +PNAME(mux_100m_24m_p)		
	= {
> > "clk_cpll_div10", "xin24m" };
> > +PNAME(mux_100m_50m_24m_p)		= { "clk_cpll_div10", 
"clk_cpll_div20",
> > "xin24m" }; +PNAME(mux_100m_24m_lclk0_p)		= { 
"clk_cpll_div10", "xin24m",
> > "lclk_asrc_src_0" }; +PNAME(mux_100m_24m_lclk1_p)		= { 
"clk_cpll_div10",
> > "xin24m", "lclk_asrc_src_1" }; +PNAME(mux_150m_100m_50m_24m_p)		
= {
> > "clk_gpll_div8", "clk_cpll_div10", "clk_cpll_div20", "xin24m" };
> > +PNAME(mux_200m_100m_50m_24m_p)		= { "clk_gpll_div6", 
"clk_cpll_div10",
> > "clk_cpll_div20", "xin24m" }; +PNAME(mux_400m_200m_100m_24m_p)		
= {
> > "clk_gpll_div3", "clk_gpll_div6", "clk_cpll_div10", "xin24m" };
> > +PNAME(mux_500m_250m_100m_24m_p)		= { "clk_cpll_div2", 
"clk_cpll_div4",
> > "clk_cpll_div10", "xin24m" }; +PNAME(mux_600m_400m_300m_24m_p)		
= {
> > "clk_gpll_div2", "clk_gpll_div3", "clk_gpll_div4", "xin24m" };
> > +PNAME(mux_350m_175m_116m_24m_p)		= { "clk_spll_div2", 
"clk_spll_div4",
> > "clk_spll_div6", "xin24m" }; +PNAME(mux_175m_116m_58m_24m_p)		
= {
> > "clk_spll_div4", "clk_spll_div6", "clk_spll_div12", "xin24m" };
> > +PNAME(mux_116m_58m_24m_p)		= { "clk_spll_div6", 
"clk_spll_div12",
> > "xin24m" }; +PNAME(mclk_sai0_8ch_p)			= { 
"mclk_sai0_8ch_src",
> > "sai0_mclkin", "sai1_mclkin" }; +PNAME(mclk_sai1_8ch_p)			
= {
> > "mclk_sai1_8ch_src", "sai1_mclkin" }; +PNAME(mclk_sai2_2ch_p)		
	= {
> > "mclk_sai2_2ch_src", "sai2_mclkin", "sai1_mclkin" };
> > +PNAME(mclk_sai3_2ch_p)			= { 
"mclk_sai3_2ch_src", "sai3_mclkin",
> > "sai1_mclkin" }; +PNAME(mclk_sai4_2ch_p)			= { 
"mclk_sai4_2ch_src",
> > "sai4_mclkin", "sai1_mclkin" }; +PNAME(mclk_sai5_8ch_p)			
= {
> > "mclk_sai5_8ch_src", "sai1_mclkin" }; +PNAME(mclk_sai6_8ch_p)		
	= {
> > "mclk_sai6_8ch_src", "sai1_mclkin" }; +PNAME(mclk_sai7_8ch_p)		
	= {
> > "mclk_sai7_8ch_src", "sai1_mclkin" }; +PNAME(mclk_sai8_8ch_p)		
	= {
> > "mclk_sai8_8ch_src", "sai1_mclkin" }; +PNAME(mclk_sai9_8ch_p)		
	= {
> > "mclk_sai9_8ch_src", "sai1_mclkin" }; +PNAME(uart1_p)			
	= {
> > "clk_uart1_src_top", "xin24m" };
> > +PNAME(pdm0_p)				= { "clk_pdm0_src_top", 
"xin24m" };
> > +PNAME(mclk_pdm0_p)			= { 
"mclk_pdm0_src_top", "xin24m" };
> > +PNAME(clk_gmac1_ptp_ref_src_p)		= { "gpll", "cpll", 
"gmac1_ptp_refclk_in"
> > }; +PNAME(clk_gmac0_ptp_ref_src_p)		= { "gpll", "cpll",
> > "gmac0_ptp_refclk_in" }; +PNAME(dclk_ebc_p)			= { 
"gpll", "cpll", "vpll",
> > "aupll", "lpll_dummy", +					
    "dclk_ebc_frac", "xin24m" };
> > +PNAME(dclk_vp0_p)			= { "dclk_vp0_src", 
"clk_hdmiphy_pixel0" };
> > +PNAME(dclk_vp1_p)			= { "dclk_vp1_src", 
"clk_hdmiphy_pixel0" };
> > +PNAME(dclk_vp2_p)			= { "dclk_vp2_src", 
"clk_hdmiphy_pixel0" };
> > +PNAME(clk_uart_p)			= { "gpll", "cpll", "aupll", 
"xin24m",
> > "clk_uart_frac_0", +					    
"clk_uart_frac_1", "clk_uart_frac_2"};
> > +PNAME(clk_freq_pwm1_p)			= { "sai0_mclkin", 
"sai1_mclkin", "sai2_mclkin",
> > +					    "sai3_mclkin", 
"sai4_mclkin", "sai_sclkin_freq"};
> > +PNAME(clk_counter_pwm1_p)		= { "sai0_mclkin", "sai1_mclkin",
> > "sai2_mclkin", +					    
"sai3_mclkin", "sai4_mclkin",
> > "sai_sclkin_counter"};
> > +PNAME(sai_sclkin_freq_p)		= { "sai0_sclk_in", 
"sai1_sclk_in",
> > "sai2_sclk_in", +					    
"sai3_sclk_in", "sai4_sclk_in"};
> > +PNAME(clk_ref_pcie0_phy_p)		= { "clk_pcie_100m_src",
> > "clk_pcie_100m_nduty_src", +					
    "xin24m"};
> > +PNAME(hclk_vi_root_p)			= { "clk_gpll_div6", 
"clk_cpll_div10",
> > +					    
"aclk_vi_root_inter", "xin24m"};
> > +PNAME(clk_ref_osc_mphy_p)		= { "xin24m", "clk_gpio_mphy_i",
> > "clk_ref_mphy_26m"}; +PNAME(mux_pmu200m_pmu100m_pmu50m_24m_p)	= {
> > "clk_200m_pmu_src", "clk_100m_pmu_src", +				
	    "clk_50m_pmu_src",
> > "xin24m" };
> > +PNAME(mux_pmu100m_pmu50m_24m_p)		= { "clk_100m_pmu_src",
> > "clk_50m_pmu_src", "xin24m" }; +PNAME(mux_pmu100m_24m_32k_p)		
= {
> > "clk_100m_pmu_src", "xin24m", "xin_osc0_div" };
> > +PNAME(clk_phy_ref_src_p)		= { "xin24m", 
"clk_pmuphy_ref_src" };
> > +PNAME(clk_usbphy_ref_src_p)		= { "usbphy0_24m", 
"usbphy1_24m" };
> > +PNAME(clk_cpll_ref_src_p)		= { "xin24m", 
"clk_usbphy_ref_src" };
> > +PNAME(clk_aupll_ref_src_p)		= { "xin24m", 
"clk_aupll_ref_io" };
> > +
> > +static struct rockchip_pll_clock rk3576_pll_clks[] __initdata = {
> > +	[bpll] = PLL(pll_rk3588_core, PLL_BPLL, "bpll", mux_pll_p,
> > +		     0, RK3576_PLL_CON(0),
> > +		     RK3576_BPLL_MODE_CON0, 0, 15, 0, 
rk3576_pll_rates),
> > +	[lpll] = PLL(pll_rk3588_core, PLL_LPLL, "lpll", mux_pll_p,
> > +		     0, RK3576_LPLL_CON(16),
> > +		     RK3576_LPLL_MODE_CON0, 0, 15, 0, 
rk3576_pll_rates),
> > +	[vpll] = PLL(pll_rk3588, PLL_VPLL, "vpll", mux_pll_p,
> > +		     0, RK3576_PLL_CON(88),
> > +		     RK3576_MODE_CON0, 4, 15, 0, rk3576_pll_rates),
> > +	[aupll] = PLL(pll_rk3588, PLL_AUPLL, "aupll", mux_pll_p,
> > +		     0, RK3576_PLL_CON(96),
> > +		     RK3576_MODE_CON0, 6, 15, 0, rk3576_pll_rates),
> > +	[cpll] = PLL(pll_rk3588, PLL_CPLL, "cpll", mux_pll_p,
> > +		     CLK_IGNORE_UNUSED, RK3576_PLL_CON(104),
> > +		     RK3576_MODE_CON0, 8, 15, 0, rk3576_pll_rates),
> > +	[gpll] = PLL(pll_rk3588, PLL_GPLL, "gpll", mux_pll_p,
> > +		     CLK_IGNORE_UNUSED, RK3576_PLL_CON(112),
> > +		     RK3576_MODE_CON0, 2, 15, 0, rk3576_pll_rates),
> > +	[ppll] = PLL(pll_rk3588_core, PLL_PPLL, "ppll", mux_pll_p,
> > +		     CLK_IGNORE_UNUSED, RK3576_PMU_PLL_CON(128),
> > +		     RK3576_MODE_CON0, 10, 15, 0, rk3576_ppll_rates),
> > +};
> > +
> > +static struct rockchip_clk_branch rk3576_clk_branches[] __initdata = {
> > +	/*
> > +	 * CRU Clock-Architecture
> > +	 */
> > +	/* fixed */
> > +	FACTOR(0, "xin12m", "xin24m", 0, 1, 2),
> > +
> > +	COMPOSITE_FRAC(XIN_OSC0_DIV, "xin_osc0_div", "xin24m", 
CLK_IS_CRITICAL,
> > +			RK3576_PMU_CLKSEL_CON(21), 0,
> > +			RK3576_PMU_CLKGATE_CON(7), 11, GFLAGS),
> > +
> > +	FACTOR(0, "clk_spll_div12", "spll", 0, 1, 12),
> > +	FACTOR(0, "clk_spll_div6", "spll", 0, 1, 6),
> > +	FACTOR(0, "clk_spll_div4", "spll", 0, 1, 4),
> > +	FACTOR(0, "lpll_div2", "lpll", 0, 1, 2),
> > +	FACTOR(0, "bpll_div4", "bpll", 0, 1, 4),
> > +
> > +	/* top */
> > +	COMPOSITE(CLK_CPLL_DIV20, "clk_cpll_div20", gpll_cpll_p,
> > CLK_IS_CRITICAL,
> > +			RK3576_CLKSEL_CON(0), 5, 1, MFLAGS, 0, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(0), 0, GFLAGS),
> > +	COMPOSITE(CLK_CPLL_DIV10, "clk_cpll_div10", gpll_cpll_p,
> > CLK_IS_CRITICAL,
> > +			RK3576_CLKSEL_CON(0), 11, 1, MFLAGS, 6, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(0), 1, GFLAGS),
> > +	COMPOSITE(CLK_GPLL_DIV8, "clk_gpll_div8", gpll_cpll_p, 
CLK_IS_CRITICAL,
> > +			RK3576_CLKSEL_CON(1), 5, 1, MFLAGS, 0, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(0), 2, GFLAGS),
> > +	COMPOSITE(CLK_GPLL_DIV6, "clk_gpll_div6", gpll_cpll_p, 
CLK_IS_CRITICAL,
> > +			RK3576_CLKSEL_CON(1), 11, 1, MFLAGS, 6, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(0), 3, GFLAGS),
> > +	COMPOSITE(CLK_CPLL_DIV4, "clk_cpll_div4", gpll_cpll_p, 
CLK_IS_CRITICAL,
> > +			RK3576_CLKSEL_CON(2), 5, 1, MFLAGS, 0, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(0), 4, GFLAGS),
> > +	COMPOSITE(CLK_GPLL_DIV4, "clk_gpll_div4", gpll_cpll_p, 
CLK_IS_CRITICAL,
> > +			RK3576_CLKSEL_CON(2), 11, 1, MFLAGS, 6, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(0), 5, GFLAGS),
> > +	COMPOSITE(CLK_SPLL_DIV2, "clk_spll_div2", gpll_cpll_spll_bpll_p,
> > CLK_IS_CRITICAL, +			RK3576_CLKSEL_CON(3), 5, 2, 
MFLAGS, 0, 5, DFLAGS,
> > +			RK3576_CLKGATE_CON(0), 6, GFLAGS),
> > +	COMPOSITE(CLK_GPLL_DIV3, "clk_gpll_div3", gpll_cpll_p, 
CLK_IS_CRITICAL,
> > +			RK3576_CLKSEL_CON(3), 12, 1, MFLAGS, 7, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(0), 7, GFLAGS),
> > +	COMPOSITE(CLK_CPLL_DIV2, "clk_cpll_div2", gpll_cpll_p, 
CLK_IS_CRITICAL,
> > +			RK3576_CLKSEL_CON(4), 11, 1, MFLAGS, 6, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(0), 9, GFLAGS),
> > +	COMPOSITE(CLK_GPLL_DIV2, "clk_gpll_div2", gpll_cpll_p, 
CLK_IS_CRITICAL,
> > +			RK3576_CLKSEL_CON(5), 5, 1, MFLAGS, 0, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(0), 10, GFLAGS),
> > +	COMPOSITE(CLK_SPLL_DIV1, "clk_spll_div1", 
gpll_cpll_spll_bpll_lpll_p,
> > CLK_IS_CRITICAL, +			RK3576_CLKSEL_CON(6), 5, 3, 
MFLAGS, 0, 5, DFLAGS,
> > +			RK3576_CLKGATE_CON(0), 12, GFLAGS),
> > +	COMPOSITE_NODIV(PCLK_TOP_ROOT, "pclk_top_root", 
mux_100m_50m_24m_p,
> > CLK_IS_CRITICAL, +			RK3576_CLKSEL_CON(8), 7, 2, 
MFLAGS,
> > +			RK3576_CLKGATE_CON(1), 1, GFLAGS),
> > +	COMPOSITE(ACLK_TOP, "aclk_top", gpll_cpll_aupll_p, 
CLK_IS_CRITICAL,
> > +			RK3576_CLKSEL_CON(9), 5, 2, MFLAGS, 0, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(1), 3, GFLAGS),
> > +	COMPOSITE(ACLK_TOP_MID, "aclk_top_mid", gpll_cpll_p, 
CLK_IS_CRITICAL,
> > +			RK3576_CLKSEL_CON(10), 5, 1, MFLAGS, 0, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(1), 6, GFLAGS),
> > +	COMPOSITE(ACLK_SECURE_HIGH, "aclk_secure_high",
> > gpll_spll_aupll_bpll_lpll_p, CLK_IS_CRITICAL, +			
RK3576_CLKSEL_CON(10),
> > 11, 3, MFLAGS, 6, 5, DFLAGS,
> > +			RK3576_CLKGATE_CON(1), 7, GFLAGS),
> > +	COMPOSITE_NODIV(HCLK_TOP, "hclk_top", mux_200m_100m_50m_24m_p,
> > CLK_IS_CRITICAL, +			RK3576_CLKSEL_CON(19), 2, 2, 
MFLAGS,
> > +			RK3576_CLKGATE_CON(1), 14, GFLAGS),
> > +	COMPOSITE_NODIV(HCLK_VO0VOP_CHANNEL, "hclk_vo0vop_channel",
> > mux_200m_100m_50m_24m_p, CLK_IS_CRITICAL, +			
RK3576_CLKSEL_CON(19), 6,
> > 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(2), 0, GFLAGS),
> > +	COMPOSITE(ACLK_VO0VOP_CHANNEL, "aclk_vo0vop_channel",
> > gpll_cpll_lpll_bpll_p, CLK_IS_CRITICAL, +			
RK3576_CLKSEL_CON(19), 12, 2,
> > MFLAGS, 8, 4, DFLAGS,
> > +			RK3576_CLKGATE_CON(2), 1, GFLAGS),
> > +	MUX(CLK_AUDIO_FRAC_0_SRC, "clk_audio_frac_0_src", 
gpll_cpll_aupll_24m_p,
> > 0, +			RK3576_CLKSEL_CON(13), 0, 2, MFLAGS),
> > +	COMPOSITE_FRAC(CLK_AUDIO_FRAC_0, "clk_audio_frac_0",
> > "clk_audio_frac_0_src", 0, +			
RK3576_CLKSEL_CON(12), 0,
> > +			RK3576_CLKGATE_CON(1), 10, GFLAGS),
> > +	MUX(CLK_AUDIO_FRAC_1_SRC, "clk_audio_frac_1_src", 
gpll_cpll_aupll_24m_p,
> > 0, +			RK3576_CLKSEL_CON(15), 0, 2, MFLAGS),
> > +	COMPOSITE_FRAC(CLK_AUDIO_FRAC_1, "clk_audio_frac_1",
> > "clk_audio_frac_1_src", 0, +			
RK3576_CLKSEL_CON(14), 0,
> > +			RK3576_CLKGATE_CON(1), 11, GFLAGS),
> > +	MUX(CLK_AUDIO_FRAC_2_SRC, "clk_audio_frac_2_src", 
gpll_cpll_aupll_24m_p,
> > 0, +			RK3576_CLKSEL_CON(17), 0, 2, MFLAGS),
> > +	COMPOSITE_FRAC(CLK_AUDIO_FRAC_2, "clk_audio_frac_2",
> > "clk_audio_frac_2_src", 0, +			
RK3576_CLKSEL_CON(16), 0,
> > +			RK3576_CLKGATE_CON(1), 12, GFLAGS),
> > +	MUX(CLK_AUDIO_FRAC_3_SRC, "clk_audio_frac_3_src", 
gpll_cpll_aupll_24m_p,
> > 0, +			RK3576_CLKSEL_CON(19), 0, 2, MFLAGS),
> > +	COMPOSITE_FRAC(CLK_AUDIO_FRAC_3, "clk_audio_frac_3",
> > "clk_audio_frac_3_src", 0, +			
RK3576_CLKSEL_CON(18), 0,
> > +			RK3576_CLKGATE_CON(1), 13, GFLAGS),
> > +	MUX(0, "clk_uart_frac_0_src", gpll_cpll_aupll_24m_p, 0,
> > +			RK3576_CLKSEL_CON(22), 0, 2, MFLAGS),
> > +	COMPOSITE_FRAC(CLK_UART_FRAC_0, "clk_uart_frac_0",
> > "clk_uart_frac_0_src", 0, +			
RK3576_CLKSEL_CON(21), 0,
> > +			RK3576_CLKGATE_CON(2), 5, GFLAGS),
> > +	MUX(0, "clk_uart_frac_1_src", gpll_cpll_aupll_24m_p, 0,
> > +			RK3576_CLKSEL_CON(24), 0, 2, MFLAGS),
> > +	COMPOSITE_FRAC(CLK_UART_FRAC_1, "clk_uart_frac_1",
> > "clk_uart_frac_1_src", 0, +			
RK3576_CLKSEL_CON(23), 0,
> > +			RK3576_CLKGATE_CON(2), 6, GFLAGS),
> > +	MUX(0, "clk_uart_frac_2_src", gpll_cpll_aupll_24m_p, 0,
> > +			RK3576_CLKSEL_CON(26), 0, 2, MFLAGS),
> > +	COMPOSITE_FRAC(CLK_UART_FRAC_2, "clk_uart_frac_2",
> > "clk_uart_frac_2_src", 0, +			
RK3576_CLKSEL_CON(25), 0,
> > +			RK3576_CLKGATE_CON(2), 7, GFLAGS),
> > +	COMPOSITE(CLK_UART1_SRC_TOP, "clk_uart1_src_top", clk_uart_p, 0,
> > +			RK3576_CLKSEL_CON(27), 13, 3, MFLAGS, 5, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(2), 13, GFLAGS),
> > +	COMPOSITE_NOMUX(CLK_AUDIO_INT_0, "clk_audio_int_0", "gpll", 0,
> > +			RK3576_CLKSEL_CON(28), 0, 5, DFLAGS,
> > +			RK3576_CLKGATE_CON(2), 14, GFLAGS),
> > +	COMPOSITE_NOMUX(CLK_AUDIO_INT_1, "clk_audio_int_1", "cpll", 0,
> > +			RK3576_CLKSEL_CON(28), 5, 5, DFLAGS,
> > +			RK3576_CLKGATE_CON(2), 15, GFLAGS),
> > +	COMPOSITE_NOMUX(CLK_AUDIO_INT_2, "clk_audio_int_2", "aupll", 0,
> > +			RK3576_CLKSEL_CON(28), 10, 5, DFLAGS,
> > +			RK3576_CLKGATE_CON(3), 0, GFLAGS),
> > +	COMPOSITE(CLK_PDM0_SRC_TOP, "clk_pdm0_src_top", audio_frac_int_p, 
0,
> > +			RK3576_CLKSEL_CON(29), 9, 3, MFLAGS, 0, 9, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(3), 2, GFLAGS),
> > +	COMPOSITE_NOMUX(CLK_GMAC0_125M_SRC, "clk_gmac0_125m_src", "cpll", 
0,
> > +			RK3576_CLKSEL_CON(30), 10, 5, DFLAGS,
> > +			RK3576_CLKGATE_CON(3), 6, GFLAGS),
> > +	COMPOSITE_NOMUX(CLK_GMAC1_125M_SRC, "clk_gmac1_125m_src", "cpll", 
0,
> > +			RK3576_CLKSEL_CON(31), 0, 5, DFLAGS,
> > +			RK3576_CLKGATE_CON(3), 7, GFLAGS),
> > +	COMPOSITE(LCLK_ASRC_SRC_0, "lclk_asrc_src_0", audio_frac_p, 0,
> > +			RK3576_CLKSEL_CON(31), 10, 2, MFLAGS, 5, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(3), 10, GFLAGS),
> > +	COMPOSITE(LCLK_ASRC_SRC_1, "lclk_asrc_src_1", audio_frac_p, 0,
> > +			RK3576_CLKSEL_CON(32), 5, 2, MFLAGS, 0, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(3), 11, GFLAGS),
> > +	COMPOSITE(REF_CLK0_OUT_PLL, "ref_clk0_out_pll",
> > gpll_cpll_spll_aupll_lpll_24m_p, 0, +			
RK3576_CLKSEL_CON(33), 8, 3,
> > MFLAGS, 0, 8, DFLAGS,
> > +			RK3576_CLKGATE_CON(4), 1, GFLAGS),
> > +	COMPOSITE(REF_CLK1_OUT_PLL, "ref_clk1_out_pll",
> > gpll_cpll_spll_aupll_lpll_24m_p, 0, +			
RK3576_CLKSEL_CON(34), 8, 3,
> > MFLAGS, 0, 8, DFLAGS,
> > +			RK3576_CLKGATE_CON(4), 2, GFLAGS),
> > +	COMPOSITE(REF_CLK2_OUT_PLL, "ref_clk2_out_pll",
> > gpll_cpll_spll_aupll_lpll_24m_p, 0, +			
RK3576_CLKSEL_CON(35), 8, 3,
> > MFLAGS, 0, 8, DFLAGS,
> > +			RK3576_CLKGATE_CON(4), 3, GFLAGS),
> > +	COMPOSITE(REFCLKO25M_GMAC0_OUT, "refclko25m_gmac0_out", 
gpll_cpll_p, 0,
> > +			RK3576_CLKSEL_CON(36), 7, 1, MFLAGS, 0, 7, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(5), 10, GFLAGS),
> > +	COMPOSITE(REFCLKO25M_GMAC1_OUT, "refclko25m_gmac1_out", 
gpll_cpll_p, 0,
> > +			RK3576_CLKSEL_CON(36), 15, 1, MFLAGS, 8, 7, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(5), 11, GFLAGS),
> > +	COMPOSITE(CLK_CIFOUT_OUT, "clk_cifout_out", gpll_cpll_24m_spll_p, 
0,
> > +			RK3576_CLKSEL_CON(37), 8, 2, MFLAGS, 0, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(5), 12, GFLAGS),
> > +	GATE(CLK_GMAC0_RMII_CRU, "clk_gmac0_rmii_cru", "clk_cpll_div20", 
0,
> > +			RK3576_CLKGATE_CON(5), 13, GFLAGS),
> > +	GATE(CLK_GMAC1_RMII_CRU, "clk_gmac1_rmii_cru", "clk_cpll_div20", 
0,
> > +			RK3576_CLKGATE_CON(5), 14, GFLAGS),
> > +	GATE(CLK_OTPC_AUTO_RD_G, "clk_otpc_auto_rd_g", "xin24m", 0,
> > +			RK3576_CLKGATE_CON(5), 15, GFLAGS),
> > +	COMPOSITE(CLK_MIPI_CAMERAOUT_M0, "clk_mipi_cameraout_m0",
> > mux_24m_spll_gpll_cpll_p, 0, +			
RK3576_CLKSEL_CON(38), 8, 2, MFLAGS, 0,
> > 8, DFLAGS,
> > +			RK3576_CLKGATE_CON(6), 3, GFLAGS),
> > +	COMPOSITE(CLK_MIPI_CAMERAOUT_M1, "clk_mipi_cameraout_m1",
> > mux_24m_spll_gpll_cpll_p, 0, +			
RK3576_CLKSEL_CON(39), 8, 2, MFLAGS, 0,
> > 8, DFLAGS,
> > +			RK3576_CLKGATE_CON(6), 4, GFLAGS),
> > +	COMPOSITE(CLK_MIPI_CAMERAOUT_M2, "clk_mipi_cameraout_m2",
> > mux_24m_spll_gpll_cpll_p, 0, +			
RK3576_CLKSEL_CON(40), 8, 2, MFLAGS, 0,
> > 8, DFLAGS,
> > +			RK3576_CLKGATE_CON(6), 5, GFLAGS),
> > +	COMPOSITE(MCLK_PDM0_SRC_TOP, "mclk_pdm0_src_top", 
audio_frac_int_p, 0,
> > +			RK3576_CLKSEL_CON(41), 7, 3, MFLAGS, 2, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(6), 8, GFLAGS),
> > +
> > +	/* bus */
> > +	COMPOSITE_NODIV(HCLK_BUS_ROOT, "hclk_bus_root", 
mux_200m_100m_50m_24m_p,
> > CLK_IS_CRITICAL, +			RK3576_CLKSEL_CON(55), 0, 2, 
MFLAGS,
> > +			RK3576_CLKGATE_CON(11), 0, GFLAGS),
> > +	COMPOSITE_NODIV(PCLK_BUS_ROOT, "pclk_bus_root", 
mux_100m_50m_24m_p,
> > CLK_IS_CRITICAL, +			RK3576_CLKSEL_CON(55), 2, 2, 
MFLAGS,
> > +			RK3576_CLKGATE_CON(11), 1, GFLAGS),
> > +	COMPOSITE(ACLK_BUS_ROOT, "aclk_bus_root", gpll_cpll_p, 
CLK_IS_CRITICAL,
> > +			RK3576_CLKSEL_CON(55), 9, 1, MFLAGS, 4, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(11), 2, GFLAGS),
> > +	GATE(HCLK_CAN0, "hclk_can0", "hclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(11), 6, GFLAGS),
> > +	COMPOSITE(CLK_CAN0, "clk_can0", gpll_cpll_24m_p, 0,
> > +			RK3576_CLKSEL_CON(56), 5, 2, MFLAGS, 0, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(11), 7, GFLAGS),
> > +	GATE(HCLK_CAN1, "hclk_can1", "hclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(11), 8, GFLAGS),
> > +	COMPOSITE(CLK_CAN1, "clk_can1", gpll_cpll_24m_p, 0,
> > +			RK3576_CLKSEL_CON(56), 12, 2, MFLAGS, 7, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(11), 9, GFLAGS),
> > +	GATE(CLK_KEY_SHIFT, "clk_key_shift", "xin24m", CLK_IS_CRITICAL,
> > +			RK3576_CLKGATE_CON(11), 15, GFLAGS),
> > +	GATE(PCLK_I2C1, "pclk_i2c1", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(12), 0, GFLAGS),
> > +	GATE(PCLK_I2C2, "pclk_i2c2", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(12), 1, GFLAGS),
> > +	GATE(PCLK_I2C3, "pclk_i2c3", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(12), 2, GFLAGS),
> > +	GATE(PCLK_I2C4, "pclk_i2c4", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(12), 3, GFLAGS),
> > +	GATE(PCLK_I2C5, "pclk_i2c5", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(12), 4, GFLAGS),
> > +	GATE(PCLK_I2C6, "pclk_i2c6", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(12), 5, GFLAGS),
> > +	GATE(PCLK_I2C7, "pclk_i2c7", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(12), 6, GFLAGS),
> > +	GATE(PCLK_I2C8, "pclk_i2c8", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(12), 7, GFLAGS),
> > +	GATE(PCLK_I2C9, "pclk_i2c9", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(12), 8, GFLAGS),
> > +	GATE(PCLK_WDT_BUSMCU, "pclk_wdt_busmcu", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(12), 9, GFLAGS),
> > +	GATE(TCLK_WDT_BUSMCU, "tclk_wdt_busmcu", "xin24m", 0,
> > +			RK3576_CLKGATE_CON(12), 10, GFLAGS),
> > +	GATE(ACLK_GIC, "aclk_gic", "aclk_bus_root", CLK_IS_CRITICAL,
> > +			RK3576_CLKGATE_CON(12), 11, GFLAGS),
> > +	COMPOSITE_NODIV(CLK_I2C1, "clk_i2c1", mux_200m_100m_50m_24m_p, 0,
> > +			RK3576_CLKSEL_CON(57), 0, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(12), 12, GFLAGS),
> > +	COMPOSITE_NODIV(CLK_I2C2, "clk_i2c2", mux_200m_100m_50m_24m_p, 0,
> > +			RK3576_CLKSEL_CON(57), 2, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(12), 13, GFLAGS),
> > +	COMPOSITE_NODIV(CLK_I2C3, "clk_i2c3", mux_200m_100m_50m_24m_p, 0,
> > +			RK3576_CLKSEL_CON(57), 4, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(12), 14, GFLAGS),
> > +	COMPOSITE_NODIV(CLK_I2C4, "clk_i2c4", mux_200m_100m_50m_24m_p, 0,
> > +			RK3576_CLKSEL_CON(57), 6, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(12), 15, GFLAGS),
> > +	COMPOSITE_NODIV(CLK_I2C5, "clk_i2c5", mux_200m_100m_50m_24m_p, 0,
> > +			RK3576_CLKSEL_CON(57), 8, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(13), 0, GFLAGS),
> > +	COMPOSITE_NODIV(CLK_I2C6, "clk_i2c6", mux_200m_100m_50m_24m_p, 0,
> > +			RK3576_CLKSEL_CON(57), 10, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(13), 1, GFLAGS),
> > +	COMPOSITE_NODIV(CLK_I2C7, "clk_i2c7", mux_200m_100m_50m_24m_p, 0,
> > +			RK3576_CLKSEL_CON(57), 12, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(13), 2, GFLAGS),
> > +	COMPOSITE_NODIV(CLK_I2C8, "clk_i2c8", mux_200m_100m_50m_24m_p, 0,
> > +			RK3576_CLKSEL_CON(57), 14, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(13), 3, GFLAGS),
> > +	COMPOSITE_NODIV(CLK_I2C9, "clk_i2c9", mux_200m_100m_50m_24m_p, 0,
> > +			RK3576_CLKSEL_CON(58), 0, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(13), 4, GFLAGS),
> > +	GATE(PCLK_SARADC, "pclk_saradc", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(13), 6, GFLAGS),
> > +	COMPOSITE(CLK_SARADC, "clk_saradc", gpll_24m_p, 0,
> > +			RK3576_CLKSEL_CON(58), 12, 1, MFLAGS, 4, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(13), 7, GFLAGS),
> > +	GATE(PCLK_TSADC, "pclk_tsadc", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(13), 8, GFLAGS),
> > +	COMPOSITE_NOMUX(CLK_TSADC, "clk_tsadc", "xin24m", 0,
> > +			RK3576_CLKSEL_CON(59), 0, 8, DFLAGS,
> > +			RK3576_CLKGATE_CON(13), 9, GFLAGS),
> > +	GATE(PCLK_UART0, "pclk_uart0", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(13), 10, GFLAGS),
> > +	GATE(PCLK_UART2, "pclk_uart2", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(13), 11, GFLAGS),
> > +	GATE(PCLK_UART3, "pclk_uart3", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(13), 12, GFLAGS),
> > +	GATE(PCLK_UART4, "pclk_uart4", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(13), 13, GFLAGS),
> > +	GATE(PCLK_UART5, "pclk_uart5", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(13), 14, GFLAGS),
> > +	GATE(PCLK_UART6, "pclk_uart6", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(13), 15, GFLAGS),
> > +	GATE(PCLK_UART7, "pclk_uart7", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(14), 0, GFLAGS),
> > +	GATE(PCLK_UART8, "pclk_uart8", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(14), 1, GFLAGS),
> > +	GATE(PCLK_UART9, "pclk_uart9", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(14), 2, GFLAGS),
> > +	GATE(PCLK_UART10, "pclk_uart10", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(14), 3, GFLAGS),
> > +	GATE(PCLK_UART11, "pclk_uart11", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(14), 4, GFLAGS),
> > +	COMPOSITE(SCLK_UART0, "sclk_uart0", clk_uart_p, 0,
> > +			RK3576_CLKSEL_CON(60), 8, 3, MFLAGS, 0, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(14), 5, GFLAGS),
> > +	COMPOSITE(SCLK_UART2, "sclk_uart2", clk_uart_p, 0,
> > +			RK3576_CLKSEL_CON(61), 8, 3, MFLAGS, 0, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(14), 6, GFLAGS),
> > +	COMPOSITE(SCLK_UART3, "sclk_uart3", clk_uart_p, 0,
> > +			RK3576_CLKSEL_CON(62), 8, 3, MFLAGS, 0, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(14), 9, GFLAGS),
> > +	COMPOSITE(SCLK_UART4, "sclk_uart4", clk_uart_p, 0,
> > +			RK3576_CLKSEL_CON(63), 8, 3, MFLAGS, 0, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(14), 12, GFLAGS),
> > +	COMPOSITE(SCLK_UART5, "sclk_uart5", clk_uart_p, 0,
> > +			RK3576_CLKSEL_CON(64), 8, 3, MFLAGS, 0, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(14), 15, GFLAGS),
> > +	COMPOSITE(SCLK_UART6, "sclk_uart6", clk_uart_p, 0,
> > +			RK3576_CLKSEL_CON(65), 8, 3, MFLAGS, 0, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(15), 2, GFLAGS),
> > +	COMPOSITE(SCLK_UART7, "sclk_uart7", clk_uart_p, 0,
> > +			RK3576_CLKSEL_CON(66), 8, 3, MFLAGS, 0, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(15), 5, GFLAGS),
> > +	COMPOSITE(SCLK_UART8, "sclk_uart8", clk_uart_p, 0,
> > +			RK3576_CLKSEL_CON(67), 8, 3, MFLAGS, 0, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(15), 8, GFLAGS),
> > +	COMPOSITE(SCLK_UART9, "sclk_uart9", clk_uart_p, 0,
> > +			RK3576_CLKSEL_CON(68), 8, 3, MFLAGS, 0, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(15), 9, GFLAGS),
> > +	COMPOSITE(SCLK_UART10, "sclk_uart10", clk_uart_p, 0,
> > +			RK3576_CLKSEL_CON(69), 8, 3, MFLAGS, 0, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(15), 10, GFLAGS),
> > +	COMPOSITE(SCLK_UART11, "sclk_uart11", clk_uart_p, 0,
> > +			RK3576_CLKSEL_CON(70), 8, 3, MFLAGS, 0, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(15), 11, GFLAGS),
> > +	GATE(PCLK_SPI0, "pclk_spi0", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(15), 13, GFLAGS),
> > +	GATE(PCLK_SPI1, "pclk_spi1", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(15), 14, GFLAGS),
> > +	GATE(PCLK_SPI2, "pclk_spi2", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(15), 15, GFLAGS),
> > +	GATE(PCLK_SPI3, "pclk_spi3", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(16), 0, GFLAGS),
> > +	GATE(PCLK_SPI4, "pclk_spi4", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(16), 1, GFLAGS),
> > +	COMPOSITE_NODIV(CLK_SPI0, "clk_spi0", mux_200m_100m_50m_24m_p, 0,
> > +			RK3576_CLKSEL_CON(70), 13, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(16), 2, GFLAGS),
> > +	COMPOSITE_NODIV(CLK_SPI1, "clk_spi1", mux_200m_100m_50m_24m_p, 0,
> > +			RK3576_CLKSEL_CON(71), 0, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(16), 3, GFLAGS),
> > +	COMPOSITE_NODIV(CLK_SPI2, "clk_spi2", mux_200m_100m_50m_24m_p, 0,
> > +			RK3576_CLKSEL_CON(71), 2, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(16), 4, GFLAGS),
> > +	COMPOSITE_NODIV(CLK_SPI3, "clk_spi3", mux_200m_100m_50m_24m_p, 0,
> > +			RK3576_CLKSEL_CON(71), 4, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(16), 5, GFLAGS),
> > +	COMPOSITE_NODIV(CLK_SPI4, "clk_spi4", mux_200m_100m_50m_24m_p, 0,
> > +			RK3576_CLKSEL_CON(71), 6, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(16), 6, GFLAGS),
> > +	GATE(PCLK_WDT0, "pclk_wdt0", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(16), 7, GFLAGS),
> > +	GATE(TCLK_WDT0, "tclk_wdt0", "xin24m", 0,
> > +			RK3576_CLKGATE_CON(16), 8, GFLAGS),
> > +	GATE(PCLK_PWM1, "pclk_pwm1", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(16), 10, GFLAGS),
> > +	COMPOSITE_NODIV(CLK_PWM1, "clk_pwm1", mux_100m_50m_24m_p, 0,
> > +			RK3576_CLKSEL_CON(71), 8, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(16), 11, GFLAGS),
> > +	GATE(CLK_OSC_PWM1, "clk_osc_pwm1", "xin24m", 0,
> > +			RK3576_CLKGATE_CON(16), 13, GFLAGS),
> > +	GATE(CLK_RC_PWM1, "clk_rc_pwm1", "clk_pvtm_clkout", 0,
> > +			RK3576_CLKGATE_CON(16), 15, GFLAGS),
> > +	GATE(PCLK_BUSTIMER0, "pclk_bustimer0", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(17), 3, GFLAGS),
> > +	GATE(PCLK_BUSTIMER1, "pclk_bustimer1", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(17), 4, GFLAGS),
> > +	COMPOSITE_NODIV(CLK_TIMER0_ROOT, "clk_timer0_root", 
mux_100m_24m_p, 0,
> > +			RK3576_CLKSEL_CON(71), 14, 1, MFLAGS,
> > +			RK3576_CLKGATE_CON(17), 5, GFLAGS),
> > +	GATE(CLK_TIMER0, "clk_timer0", "clk_timer0_root", 0,
> > +			RK3576_CLKGATE_CON(17), 6, GFLAGS),
> > +	GATE(CLK_TIMER1, "clk_timer1", "clk_timer0_root", 0,
> > +			RK3576_CLKGATE_CON(17), 7, GFLAGS),
> > +	GATE(CLK_TIMER2, "clk_timer2", "clk_timer0_root", 0,
> > +			RK3576_CLKGATE_CON(17), 8, GFLAGS),
> > +	GATE(CLK_TIMER3, "clk_timer3", "clk_timer0_root", 0,
> > +			RK3576_CLKGATE_CON(17), 9, GFLAGS),
> > +	GATE(CLK_TIMER4, "clk_timer4", "clk_timer0_root", 0,
> > +			RK3576_CLKGATE_CON(17), 10, GFLAGS),
> > +	GATE(CLK_TIMER5, "clk_timer5", "clk_timer0_root", 0,
> > +			RK3576_CLKGATE_CON(17), 11, GFLAGS),
> > +	GATE(PCLK_MAILBOX0, "pclk_mailbox0", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(17), 13, GFLAGS),
> > +	GATE(PCLK_GPIO1, "pclk_gpio1", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(17), 15, GFLAGS),
> > +	GATE(DBCLK_GPIO1, "dbclk_gpio1", "xin24m", 0,
> > +			RK3576_CLKGATE_CON(18), 0, GFLAGS),
> > +	GATE(PCLK_GPIO2, "pclk_gpio2", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(18), 1, GFLAGS),
> > +	GATE(DBCLK_GPIO2, "dbclk_gpio2", "xin24m", 0,
> > +			RK3576_CLKGATE_CON(18), 2, GFLAGS),
> > +	GATE(PCLK_GPIO3, "pclk_gpio3", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(18), 3, GFLAGS),
> > +	GATE(DBCLK_GPIO3, "dbclk_gpio3", "xin24m", 0,
> > +			RK3576_CLKGATE_CON(18), 4, GFLAGS),
> > +	GATE(PCLK_GPIO4, "pclk_gpio4", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(18), 5, GFLAGS),
> > +	GATE(DBCLK_GPIO4, "dbclk_gpio4", "xin24m", 0,
> > +			RK3576_CLKGATE_CON(18), 6, GFLAGS),
> > +	GATE(ACLK_DECOM, "aclk_decom", "aclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(18), 7, GFLAGS),
> > +	GATE(PCLK_DECOM, "pclk_decom", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(18), 8, GFLAGS),
> > +	COMPOSITE(DCLK_DECOM, "dclk_decom", gpll_spll_p, 0,
> > +			RK3576_CLKSEL_CON(72), 5, 1, MFLAGS, 0, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(18), 9, GFLAGS),
> > +	COMPOSITE_NODIV(CLK_TIMER1_ROOT, "clk_timer1_root", 
mux_100m_24m_p, 0,
> > +			RK3576_CLKSEL_CON(72), 6, 1, MFLAGS,
> > +			RK3576_CLKGATE_CON(18), 10, GFLAGS),
> > +	GATE(CLK_TIMER6, "clk_timer6", "clk_timer1_root", 0,
> > +			RK3576_CLKGATE_CON(18), 11, GFLAGS),
> > +	COMPOSITE(CLK_TIMER7, "clk_timer7", mux_100m_24m_lclk0_p, 0,
> > +			RK3576_CLKSEL_CON(72), 12, 2, MFLAGS, 7, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(18), 12, GFLAGS),
> > +	COMPOSITE(CLK_TIMER8, "clk_timer8", mux_100m_24m_lclk1_p, 0,
> > +			RK3576_CLKSEL_CON(73), 5, 2, MFLAGS, 0, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(18), 13, GFLAGS),
> > +	GATE(CLK_TIMER9, "clk_timer9", "clk_timer1_root", 0,
> > +			RK3576_CLKGATE_CON(18), 14, GFLAGS),
> > +	GATE(CLK_TIMER10, "clk_timer10", "clk_timer1_root", 0,
> > +			RK3576_CLKGATE_CON(18), 15, GFLAGS),
> > +	GATE(CLK_TIMER11, "clk_timer11", "clk_timer1_root", 0,
> > +			RK3576_CLKGATE_CON(19), 0, GFLAGS),
> > +	GATE(ACLK_DMAC0, "aclk_dmac0", "aclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(19), 1, GFLAGS),
> > +	GATE(ACLK_DMAC1, "aclk_dmac1", "aclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(19), 2, GFLAGS),
> > +	GATE(ACLK_DMAC2, "aclk_dmac2", "aclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(19), 3, GFLAGS),
> > +	GATE(ACLK_SPINLOCK, "aclk_spinlock", "aclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(19), 4, GFLAGS),
> > +	GATE(HCLK_I3C0, "hclk_i3c0", "hclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(19), 7, GFLAGS),
> > +	GATE(HCLK_I3C1, "hclk_i3c1", "hclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(19), 9, GFLAGS),
> > +	COMPOSITE_NODIV(HCLK_BUS_CM0_ROOT, "hclk_bus_cm0_root",
> > mux_400m_200m_100m_24m_p, 0, +			
RK3576_CLKSEL_CON(73), 13, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(19), 10, GFLAGS),
> > +	GATE(FCLK_BUS_CM0_CORE, "fclk_bus_cm0_core", "hclk_bus_cm0_root", 
0,
> > +			RK3576_CLKGATE_CON(19), 12, GFLAGS),
> > +	COMPOSITE(CLK_BUS_CM0_RTC, "clk_bus_cm0_rtc", mux_24m_32k_p, 0,
> > +			RK3576_CLKSEL_CON(74), 5, 1, MFLAGS, 0, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(19), 14, GFLAGS),
> > +	GATE(PCLK_PMU2, "pclk_pmu2", "pclk_bus_root", CLK_IS_CRITICAL,
> > +			RK3576_CLKGATE_CON(19), 15, GFLAGS),
> > +	GATE(PCLK_PWM2, "pclk_pwm2", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(20), 4, GFLAGS),
> > +	COMPOSITE_NODIV(CLK_PWM2, "clk_pwm2", mux_100m_50m_24m_p, 0,
> > +			RK3576_CLKSEL_CON(74), 6, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(20), 5, GFLAGS),
> > +	GATE(CLK_OSC_PWM2, "clk_osc_pwm2", "xin24m", 0,
> > +			RK3576_CLKGATE_CON(20), 7, GFLAGS),
> > +	GATE(CLK_RC_PWM2, "clk_rc_pwm2", "clk_pvtm_clkout", 0,
> > +			RK3576_CLKGATE_CON(20), 6, GFLAGS),
> > +	COMPOSITE_NODIV(CLK_FREQ_PWM1, "clk_freq_pwm1", clk_freq_pwm1_p, 
0,
> > +			RK3576_CLKSEL_CON(74), 8, 3, MFLAGS,
> > +			RK3576_CLKGATE_CON(20), 8, GFLAGS),
> > +	COMPOSITE_NODIV(CLK_COUNTER_PWM1, "clk_counter_pwm1",
> > clk_counter_pwm1_p, 0, +			
RK3576_CLKSEL_CON(74), 11, 3, MFLAGS,
> > +			RK3576_CLKGATE_CON(20), 9, GFLAGS),
> > +	COMPOSITE_NODIV(SAI_SCLKIN_FREQ, "sai_sclkin_freq", 
sai_sclkin_freq_p,
> > 0,
> > +			RK3576_CLKSEL_CON(75), 0, 3, MFLAGS,
> > +			RK3576_CLKGATE_CON(20), 10, GFLAGS),
> > +	COMPOSITE_NODIV(SAI_SCLKIN_COUNTER, "sai_sclkin_counter",
> > sai_sclkin_freq_p, 0, +			RK3576_CLKSEL_CON(75), 3, 3, 
MFLAGS,
> > +			RK3576_CLKGATE_CON(20), 11, GFLAGS),
> > +	COMPOSITE(CLK_I3C0, "clk_i3c0", gpll_cpll_aupll_spll_p, 0,
> > +			RK3576_CLKSEL_CON(78), 5, 2, MFLAGS, 0, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(20), 12, GFLAGS),
> > +	COMPOSITE(CLK_I3C1, "clk_i3c1", gpll_cpll_aupll_spll_p, 0,
> > +			RK3576_CLKSEL_CON(78), 12, 2, MFLAGS, 7, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(20), 13, GFLAGS),
> > +	GATE(PCLK_CSIDPHY1, "pclk_csidphy1", "pclk_bus_root", 0,
> > +			RK3576_CLKGATE_CON(40), 2, GFLAGS),
> > +
> > +	/* cci */
> > +	COMPOSITE(PCLK_CCI_ROOT, "pclk_cci_root", 
mux_24m_ccipvtpll_gpll_lpll_p,
> > CLK_IS_CRITICAL, +			RK3576_CCI_CLKSEL_CON(4), 5, 2, 
MFLAGS, 0, 5,
> > DFLAGS,
> > +			RK3576_CCI_CLKGATE_CON(1), 10, GFLAGS),
> > +	COMPOSITE(ACLK_CCI_ROOT, "aclk_cci_root", 
mux_24m_ccipvtpll_gpll_lpll_p,
> > CLK_IS_CRITICAL, +			RK3576_CCI_CLKSEL_CON(4), 12, 
2, MFLAGS, 7, 5,
> > DFLAGS,
> > +			RK3576_CCI_CLKGATE_CON(1), 11, GFLAGS),
> > +
> > +	/* center */
> > +	COMPOSITE_DIV_OFFSET(ACLK_CENTER_ROOT, "aclk_center_root",
> > gpll_cpll_spll_aupll_bpll_p, CLK_IS_CRITICAL, +			
RK3576_CLKSEL_CON(168),
> > 5, 3, MFLAGS,
> > +			RK3576_CLKSEL_CON(167), 9, 5, DFLAGS,
> > +			RK3576_CLKGATE_CON(72), 0, GFLAGS),
> > +	COMPOSITE_NODIV(ACLK_CENTER_LOW_ROOT, "aclk_center_low_root",
> > mux_500m_250m_100m_24m_p, CLK_IS_CRITICAL, +			
RK3576_CLKSEL_CON(168), 8,
> > 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(72), 1, GFLAGS),
> > +	COMPOSITE_NODIV(HCLK_CENTER_ROOT, "hclk_center_root",
> > mux_200m_100m_50m_24m_p, CLK_IS_CRITICAL, +			
RK3576_CLKSEL_CON(168), 10,
> > 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(72), 2, GFLAGS),
> > +	COMPOSITE_NODIV(PCLK_CENTER_ROOT, "pclk_center_root",
> > mux_200m_100m_50m_24m_p, CLK_IS_CRITICAL, +			
RK3576_CLKSEL_CON(168), 12,
> > 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(72), 3, GFLAGS),
> > +	GATE(ACLK_DMA2DDR, "aclk_dma2ddr", "aclk_center_root",
> > CLK_IGNORE_UNUSED,
> > +			RK3576_CLKGATE_CON(72), 5, GFLAGS),
> > +	GATE(ACLK_DDR_SHAREMEM, "aclk_ddr_sharemem", 
"aclk_center_low_root",
> > CLK_IGNORE_UNUSED, +			RK3576_CLKGATE_CON(72), 
6, GFLAGS),
> > +	GATE(PCLK_DMA2DDR, "pclk_dma2ddr", "pclk_center_root",
> > CLK_IGNORE_UNUSED,
> > +			RK3576_CLKGATE_CON(72), 10, GFLAGS),
> > +	GATE(PCLK_SHAREMEM, "pclk_sharemem", "pclk_center_root",
> > CLK_IGNORE_UNUSED, +			RK3576_CLKGATE_CON(72), 
11, GFLAGS),
> > +
> > +	/* ddr */
> > +	COMPOSITE(PCLK_DDR_ROOT, "pclk_ddr_root", gpll_cpll_24m_p,
> > CLK_IS_CRITICAL, +			RK3576_CLKSEL_CON(76), 5, 2, 
MFLAGS, 0, 5, DFLAGS,
> > +			RK3576_CLKGATE_CON(21), 0, GFLAGS),
> > +	GATE(PCLK_DDR_MON_CH0, "pclk_ddr_mon_ch0", "pclk_ddr_root",
> > CLK_IGNORE_UNUSED, +			RK3576_CLKGATE_CON(21), 
1, GFLAGS),
> > +	COMPOSITE(HCLK_DDR_ROOT, "hclk_ddr_root", gpll_cpll_p,
> > CLK_IGNORE_UNUSED,
> > +			RK3576_CLKSEL_CON(77), 5, 1, MFLAGS, 0, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(22), 11, GFLAGS),
> > +	GATE(FCLK_DDR_CM0_CORE, "fclk_ddr_cm0_core", "hclk_ddr_root",
> > CLK_IS_CRITICAL, +			RK3576_CLKGATE_CON(22), 15, 
GFLAGS),
> > +	COMPOSITE_NODIV(CLK_DDR_TIMER_ROOT, "clk_ddr_timer_root",
> > mux_100m_24m_p, 0, +			RK3576_CLKSEL_CON(77), 
6, 1, MFLAGS,
> > +			RK3576_CLKGATE_CON(23), 3, GFLAGS),
> > +	GATE(CLK_DDR_TIMER0, "clk_ddr_timer0", "clk_ddr_timer_root", 0,
> > +			RK3576_CLKGATE_CON(23), 4, GFLAGS),
> > +	GATE(CLK_DDR_TIMER1, "clk_ddr_timer1", "clk_ddr_timer_root", 0,
> > +			RK3576_CLKGATE_CON(23), 5, GFLAGS),
> > +	GATE(TCLK_WDT_DDR, "tclk_wdt_ddr", "xin24m", 0,
> > +			RK3576_CLKGATE_CON(23), 6, GFLAGS),
> > +	GATE(PCLK_WDT, "pclk_wdt", "pclk_ddr_root", 0,
> > +			RK3576_CLKGATE_CON(23), 7, GFLAGS),
> > +	GATE(PCLK_TIMER, "pclk_timer", "pclk_ddr_root", 0,
> > +			RK3576_CLKGATE_CON(23), 8, GFLAGS),
> > +	COMPOSITE(CLK_DDR_CM0_RTC, "clk_ddr_cm0_rtc", mux_24m_32k_p, 0,
> > +			RK3576_CLKSEL_CON(77), 12, 1, MFLAGS, 7, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(23), 10, GFLAGS),
> > +
> > +	/* gpu */
> > +	COMPOSITE(CLK_GPU_SRC_PRE, "clk_gpu_src_pre",
> > gpll_cpll_aupll_spll_lpll_p, 0, +			
RK3576_CLKSEL_CON(165), 5, 3, MFLAGS,
> > 0, 5, DFLAGS,
> > +			RK3576_CLKGATE_CON(69), 1, GFLAGS),
> > +	GATE(CLK_GPU, "clk_gpu", "clk_gpu_src_pre", 0,
> > +			RK3576_CLKGATE_CON(69), 3, GFLAGS),
> > +	COMPOSITE_NODIV(PCLK_GPU_ROOT, "pclk_gpu_root", 
mux_100m_50m_24m_p, 0,
> > +			RK3576_CLKSEL_CON(166), 10, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(69), 8, GFLAGS),
> > +
> > +	/* npu */
> > +	COMPOSITE_NODIV(HCLK_RKNN_ROOT, "hclk_rknn_root",
> > mux_200m_100m_50m_24m_p, 0, +			RK3576_CLKSEL_CON(86), 
0, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(31), 4, GFLAGS),
> > +	COMPOSITE(CLK_RKNN_DSU0, "clk_rknn_dsu0", gpll_cpll_aupll_spll_p, 
0,
> > +			RK3576_CLKSEL_CON(86), 7, 2, MFLAGS, 2, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(31), 5, GFLAGS),
> > +	GATE(ACLK_RKNN0, "aclk_rknn0", "clk_rknn_dsu0", 0,
> > +			RK3576_CLKGATE_CON(28), 9, GFLAGS),
> > +	GATE(ACLK_RKNN1, "aclk_rknn1", "clk_rknn_dsu0", 0,
> > +			RK3576_CLKGATE_CON(29), 0, GFLAGS),
> > +	COMPOSITE_NODIV(PCLK_NPUTOP_ROOT, "pclk_nputop_root",
> > mux_100m_50m_24m_p, 0, +			RK3576_CLKSEL_CON(87), 
0, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(31), 8, GFLAGS),
> > +	GATE(PCLK_NPU_TIMER, "pclk_npu_timer", "pclk_nputop_root", 0,
> > +			RK3576_CLKGATE_CON(31), 10, GFLAGS),
> > +	COMPOSITE_NODIV(CLK_NPUTIMER_ROOT, "clk_nputimer_root", 
mux_100m_24m_p,
> > 0, +			RK3576_CLKSEL_CON(87), 2, 1, MFLAGS,
> > +			RK3576_CLKGATE_CON(31), 11, GFLAGS),
> > +	GATE(CLK_NPUTIMER0, "clk_nputimer0", "clk_nputimer_root", 0,
> > +			RK3576_CLKGATE_CON(31), 12, GFLAGS),
> > +	GATE(CLK_NPUTIMER1, "clk_nputimer1", "clk_nputimer_root", 0,
> > +			RK3576_CLKGATE_CON(31), 13, GFLAGS),
> > +	GATE(PCLK_NPU_WDT, "pclk_npu_wdt", "pclk_nputop_root", 0,
> > +			RK3576_CLKGATE_CON(31), 14, GFLAGS),
> > +	GATE(TCLK_NPU_WDT, "tclk_npu_wdt", "xin24m", 0,
> > +			RK3576_CLKGATE_CON(31), 15, GFLAGS),
> > +	GATE(ACLK_RKNN_CBUF, "aclk_rknn_cbuf", "clk_rknn_dsu0", 0,
> > +			RK3576_CLKGATE_CON(32), 0, GFLAGS),
> > +	COMPOSITE_NODIV(HCLK_NPU_CM0_ROOT, "hclk_npu_cm0_root",
> > mux_400m_200m_100m_24m_p, 0, +			
RK3576_CLKSEL_CON(87), 3, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(32), 5, GFLAGS),
> > +	GATE(FCLK_NPU_CM0_CORE, "fclk_npu_cm0_core", "hclk_npu_cm0_root", 
0,
> > +			RK3576_CLKGATE_CON(32), 7, GFLAGS),
> > +	COMPOSITE(CLK_NPU_CM0_RTC, "clk_npu_cm0_rtc", mux_24m_32k_p, 0,
> > +			RK3576_CLKSEL_CON(87), 10, 1, MFLAGS, 5, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(32), 9, GFLAGS),
> > +	GATE(HCLK_RKNN_CBUF, "hclk_rknn_cbuf", "hclk_rknn_root", 0,
> > +			RK3576_CLKGATE_CON(32), 12, GFLAGS),
> > +
> > +	/* nvm */
> > +	COMPOSITE_NODIV(HCLK_NVM_ROOT, "hclk_nvm_root", 
mux_200m_100m_50m_24m_p,
> > CLK_IS_CRITICAL, +			RK3576_CLKSEL_CON(88), 0, 2, 
MFLAGS,
> > +			RK3576_CLKGATE_CON(33), 0, GFLAGS),
> > +	COMPOSITE(ACLK_NVM_ROOT, "aclk_nvm_root", gpll_cpll_p, 
CLK_IS_CRITICAL,
> > +			RK3576_CLKSEL_CON(88), 7, 1, MFLAGS, 2, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(33), 1, GFLAGS),
> > +	COMPOSITE(SCLK_FSPI_X2, "sclk_fspi_x2", gpll_cpll_24m_p, 0,
> > +			RK3576_CLKSEL_CON(89), 6, 2, MFLAGS, 0, 6, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(33), 6, GFLAGS),
> > +	GATE(HCLK_FSPI, "hclk_fspi", "hclk_nvm_root", 0,
> > +			RK3576_CLKGATE_CON(33), 7, GFLAGS),
> > +	COMPOSITE(CCLK_SRC_EMMC, "cclk_src_emmc", gpll_cpll_24m_p, 0,
> > +			RK3576_CLKSEL_CON(89), 14, 2, MFLAGS, 8, 6, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(33), 8, GFLAGS),
> > +	GATE(HCLK_EMMC, "hclk_emmc", "hclk_nvm_root", 0,
> > +			RK3576_CLKGATE_CON(33), 9, GFLAGS),
> > +	GATE(ACLK_EMMC, "aclk_emmc", "aclk_nvm_root", 0,
> > +			RK3576_CLKGATE_CON(33), 10, GFLAGS),
> > +	COMPOSITE_NODIV(BCLK_EMMC, "bclk_emmc", mux_200m_100m_50m_24m_p, 
0,
> > +			RK3576_CLKSEL_CON(90), 0, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(33), 11, GFLAGS),
> > +	GATE(TCLK_EMMC, "tclk_emmc", "xin24m", 0,
> > +			RK3576_CLKGATE_CON(33), 12, GFLAGS),
> > +
> > +	/* usb */
> > +	COMPOSITE(ACLK_UFS_ROOT, "aclk_ufs_root", gpll_cpll_p, 0,
> > +			RK3576_CLKSEL_CON(115), 5, 1, MFLAGS, 0, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(47), 0, GFLAGS),
> > +	COMPOSITE(ACLK_USB_ROOT, "aclk_usb_root", gpll_cpll_p, 
CLK_IS_CRITICAL,
> > +			RK3576_CLKSEL_CON(115), 11, 1, MFLAGS, 6, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(47), 1, GFLAGS),
> > +	COMPOSITE_NODIV(PCLK_USB_ROOT, "pclk_usb_root", 
mux_100m_50m_24m_p,
> > CLK_IS_CRITICAL, +			RK3576_CLKSEL_CON(115), 12, 2, 
MFLAGS,
> > +			RK3576_CLKGATE_CON(47), 2, GFLAGS),
> > +	GATE(ACLK_USB3OTG0, "aclk_usb3otg0", "aclk_usb_root", 0,
> > +			RK3576_CLKGATE_CON(47), 5, GFLAGS),
> > +	GATE(CLK_REF_USB3OTG0, "clk_ref_usb3otg0", "xin24m", 0,
> > +			RK3576_CLKGATE_CON(47), 6, GFLAGS),
> > +	GATE(CLK_SUSPEND_USB3OTG0, "clk_suspend_usb3otg0", "xin24m", 0,
> > +			RK3576_CLKGATE_CON(47), 7, GFLAGS),
> > +	GATE(ACLK_MMU2, "aclk_mmu2", "aclk_usb_root", 0,
> > +			RK3576_CLKGATE_CON(47), 12, GFLAGS),
> > +	GATE(ACLK_SLV_MMU2, "aclk_slv_mmu2", "aclk_usb_root", 0,
> > +			RK3576_CLKGATE_CON(47), 13, GFLAGS),
> > +	GATE(ACLK_UFS_SYS, "aclk_ufs_sys", "aclk_ufs_root", 0,
> > +			RK3576_CLKGATE_CON(47), 15, GFLAGS),
> > +
> > +	/* vdec */
> > +	COMPOSITE_NODIV(HCLK_RKVDEC_ROOT, "hclk_rkvdec_root",
> > mux_200m_100m_50m_24m_p, 0, +			RK3576_CLKSEL_CON(110), 
0, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(45), 0, GFLAGS),
> > +	COMPOSITE(ACLK_RKVDEC_ROOT, "aclk_rkvdec_root", 
gpll_cpll_aupll_spll_p,
> > 0, +			RK3576_CLKSEL_CON(110), 7, 2, MFLAGS, 2, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(45), 1, GFLAGS),
> > +	COMPOSITE(ACLK_RKVDEC_ROOT_BAK, "aclk_rkvdec_root_bak",
> > cpll_vpll_lpll_bpll_p, 0, +			
RK3576_CLKSEL_CON(110), 14, 2, MFLAGS, 9,
> > 5, DFLAGS,
> > +			RK3576_CLKGATE_CON(45), 2, GFLAGS),
> > +	GATE(HCLK_RKVDEC, "hclk_rkvdec", "hclk_rkvdec_root", 0,
> > +			RK3576_CLKGATE_CON(45), 3, GFLAGS),
> > +	COMPOSITE(CLK_RKVDEC_HEVC_CA, "clk_rkvdec_hevc_ca",
> > gpll_cpll_lpll_bpll_p, 0, +			
RK3576_CLKSEL_CON(111), 5, 2, MFLAGS, 0, 5,
> > DFLAGS,
> > +			RK3576_CLKGATE_CON(45), 8, GFLAGS),
> > +	GATE(CLK_RKVDEC_CORE, "clk_rkvdec_core", "aclk_rkvdec_root", 0,
> > +			RK3576_CLKGATE_CON(45), 9, GFLAGS),
> > +
> > +	/* venc */
> > +	COMPOSITE_NODIV(HCLK_VEPU0_ROOT, "hclk_vepu0_root",
> > mux_200m_100m_50m_24m_p, 0, +			RK3576_CLKSEL_CON(124), 
0, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(51), 0, GFLAGS),
> > +	COMPOSITE(ACLK_VEPU0_ROOT, "aclk_vepu0_root", gpll_cpll_p, 0,
> > +			RK3576_CLKSEL_CON(124), 7, 1, MFLAGS, 2, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(51), 1, GFLAGS),
> > +	COMPOSITE(CLK_VEPU0_CORE, "clk_vepu0_core", 
gpll_cpll_spll_lpll_bpll_p,
> > 0, +			RK3576_CLKSEL_CON(124), 13, 3, MFLAGS, 8, 
5, DFLAGS,
> > +			RK3576_CLKGATE_CON(51), 6, GFLAGS),
> > +	GATE(HCLK_VEPU0, "hclk_vepu0", "hclk_vepu0_root", 0,
> > +			RK3576_CLKGATE_CON(51), 4, GFLAGS),
> > +	GATE(ACLK_VEPU0, "aclk_vepu0", "aclk_vepu0_root", 0,
> > +			RK3576_CLKGATE_CON(51), 5, GFLAGS),
> > +
> > +	/* vi */
> > +	COMPOSITE(ACLK_VI_ROOT, "aclk_vi_root", 
gpll_spll_isppvtpll_bpll_lpll_p,
> > CLK_IS_CRITICAL, +			RK3576_CLKSEL_CON(128), 5, 3, 
MFLAGS, 0, 5, DFLAGS,
> > +			RK3576_CLKGATE_CON(53), 0, GFLAGS),
> > +	COMPOSITE_NOMUX(ACLK_VI_ROOT_INTER, "aclk_vi_root_inter",
> > "aclk_vi_root", 0, +			RK3576_CLKSEL_CON(130), 10, 
3, DFLAGS,
> > +			RK3576_CLKGATE_CON(54), 13, GFLAGS),
> > +	COMPOSITE_NODIV(HCLK_VI_ROOT, "hclk_vi_root", hclk_vi_root_p,
> > CLK_IS_CRITICAL, +			RK3576_CLKSEL_CON(128), 8, 2, 
MFLAGS,
> > +			RK3576_CLKGATE_CON(53), 1, GFLAGS),
> > +	COMPOSITE_NODIV(PCLK_VI_ROOT, "pclk_vi_root", mux_100m_50m_24m_p, 
0,
> > +			RK3576_CLKSEL_CON(128), 10, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(53), 2, GFLAGS),
> > +	COMPOSITE(DCLK_VICAP, "dclk_vicap", gpll_cpll_p, 0,
> > +			RK3576_CLKSEL_CON(129), 5, 1, MFLAGS, 0, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(53), 6, GFLAGS),
> > +	GATE(ACLK_VICAP, "aclk_vicap", "aclk_vi_root", 0,
> > +			RK3576_CLKGATE_CON(53), 7, GFLAGS),
> > +	GATE(HCLK_VICAP, "hclk_vicap", "hclk_vi_root", 0,
> > +			RK3576_CLKGATE_CON(53), 8, GFLAGS),
> > +	COMPOSITE(CLK_ISP_CORE, "clk_isp_core", 
gpll_spll_isppvtpll_bpll_lpll_p,
> > 0, +			RK3576_CLKSEL_CON(129), 11, 3, MFLAGS, 6, 
5, DFLAGS,
> > +			RK3576_CLKGATE_CON(53), 9, GFLAGS),
> > +	GATE(CLK_ISP_CORE_MARVIN, "clk_isp_core_marvin", "clk_isp_core", 
0,
> > +			RK3576_CLKGATE_CON(53), 10, GFLAGS),
> > +	GATE(CLK_ISP_CORE_VICAP, "clk_isp_core_vicap", "clk_isp_core", 0,
> > +			RK3576_CLKGATE_CON(53), 11, GFLAGS),
> > +	GATE(ACLK_ISP, "aclk_isp", "aclk_vi_root", 0,
> > +			RK3576_CLKGATE_CON(53), 12, GFLAGS),
> > +	GATE(HCLK_ISP, "hclk_isp", "hclk_vi_root", 0,
> > +			RK3576_CLKGATE_CON(53), 13, GFLAGS),
> > +	GATE(ACLK_VPSS, "aclk_vpss", "aclk_vi_root", 0,
> > +			RK3576_CLKGATE_CON(53), 15, GFLAGS),
> > +	GATE(HCLK_VPSS, "hclk_vpss", "hclk_vi_root", 0,
> > +			RK3576_CLKGATE_CON(54), 0, GFLAGS),
> > +	GATE(CLK_CORE_VPSS, "clk_core_vpss", "clk_isp_core", 0,
> > +			RK3576_CLKGATE_CON(54), 1, GFLAGS),
> > +	GATE(PCLK_CSI_HOST_0, "pclk_csi_host_0", "pclk_vi_root", 0,
> > +			RK3576_CLKGATE_CON(54), 4, GFLAGS),
> > +	GATE(PCLK_CSI_HOST_1, "pclk_csi_host_1", "pclk_vi_root", 0,
> > +			RK3576_CLKGATE_CON(54), 5, GFLAGS),
> > +	GATE(PCLK_CSI_HOST_2, "pclk_csi_host_2", "pclk_vi_root", 0,
> > +			RK3576_CLKGATE_CON(54), 6, GFLAGS),
> > +	GATE(PCLK_CSI_HOST_3, "pclk_csi_host_3", "pclk_vi_root", 0,
> > +			RK3576_CLKGATE_CON(54), 7, GFLAGS),
> > +	GATE(PCLK_CSI_HOST_4, "pclk_csi_host_4", "pclk_vi_root", 0,
> > +			RK3576_CLKGATE_CON(54), 8, GFLAGS),
> > +	COMPOSITE_NODIV(ICLK_CSIHOST01, "iclk_csihost01",
> > mux_400m_200m_100m_24m_p, 0, +			
RK3576_CLKSEL_CON(130), 7, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(54), 10, GFLAGS),
> > +	GATE(ICLK_CSIHOST0, "iclk_csihost0", "iclk_csihost01", 0,
> > +			RK3576_CLKGATE_CON(54), 11, GFLAGS),
> > +	COMPOSITE(ACLK_VOP_ROOT, "aclk_vop_root", 
gpll_cpll_aupll_spll_lpll_p,
> > CLK_IS_CRITICAL, +			RK3576_CLKSEL_CON(144), 5, 3, 
MFLAGS, 0, 5, DFLAGS,
> > +			RK3576_CLKGATE_CON(61), 0, GFLAGS),
> > +	COMPOSITE_NODIV(HCLK_VOP_ROOT, "hclk_vop_root", 
mux_200m_100m_50m_24m_p,
> > CLK_IS_CRITICAL, +			RK3576_CLKSEL_CON(144), 10, 2, 
MFLAGS,
> > +			RK3576_CLKGATE_CON(61), 2, GFLAGS),
> > +	COMPOSITE_NODIV(PCLK_VOP_ROOT, "pclk_vop_root", 
mux_100m_50m_24m_p, 0,
> > +			RK3576_CLKSEL_CON(144), 12, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(61), 3, GFLAGS),
> > +	GATE(HCLK_VOP, "hclk_vop", "hclk_vop_root", 0,
> > +			RK3576_CLKGATE_CON(61), 8, GFLAGS),
> > +	GATE(ACLK_VOP, "aclk_vop", "aclk_vop_root", 0,
> > +			RK3576_CLKGATE_CON(61), 9, GFLAGS),
> > +	COMPOSITE(DCLK_VP0_SRC, "dclk_vp0_src", 
gpll_cpll_vpll_bpll_lpll_p,
> > CLK_SET_RATE_NO_REPARENT, +			
RK3576_CLKSEL_CON(145), 8, 3, MFLAGS, 0, 8,
> > DFLAGS,
> > +			RK3576_CLKGATE_CON(61), 10, GFLAGS),
> > +	COMPOSITE(DCLK_VP1_SRC, "dclk_vp1_src", 
gpll_cpll_vpll_bpll_lpll_p,
> > CLK_SET_RATE_NO_REPARENT, +			
RK3576_CLKSEL_CON(146), 8, 3, MFLAGS, 0, 8,
> > DFLAGS,
> > +			RK3576_CLKGATE_CON(61), 11, GFLAGS),
> > +	COMPOSITE(DCLK_VP2_SRC, "dclk_vp2_src", 
gpll_cpll_vpll_bpll_lpll_p,
> > CLK_SET_RATE_NO_REPARENT, +			
RK3576_CLKSEL_CON(147), 8, 3, MFLAGS, 0, 8,
> > DFLAGS,
> > +			RK3576_CLKGATE_CON(61), 12, GFLAGS),
> > +	COMPOSITE_NODIV(DCLK_VP0, "dclk_vp0", dclk_vp0_p, 
CLK_SET_RATE_PARENT |
> > CLK_SET_RATE_NO_REPARENT, +			
RK3576_CLKSEL_CON(147), 11, 1, MFLAGS,
> > +			RK3576_CLKGATE_CON(61), 13, GFLAGS),
> > +	COMPOSITE_NODIV(DCLK_VP1, "dclk_vp1", dclk_vp1_p, 
CLK_SET_RATE_PARENT |
> > CLK_SET_RATE_NO_REPARENT, +			
RK3576_CLKSEL_CON(147), 12, 1, MFLAGS,
> > +			RK3576_CLKGATE_CON(62), 0, GFLAGS),
> > +	COMPOSITE_NODIV(DCLK_VP2, "dclk_vp2", dclk_vp2_p, 
CLK_SET_RATE_PARENT |
> > CLK_SET_RATE_NO_REPARENT, +			
RK3576_CLKSEL_CON(147), 13, 1, MFLAGS,
> > +			RK3576_CLKGATE_CON(62), 1, GFLAGS),
> > +
> > +	/* vo0 */
> > +	COMPOSITE(ACLK_VO0_ROOT, "aclk_vo0_root", gpll_cpll_lpll_bpll_p, 
0,
> > +			RK3576_CLKSEL_CON(149), 5, 2, MFLAGS, 0, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(63), 0, GFLAGS),
> > +	COMPOSITE_NODIV(HCLK_VO0_ROOT, "hclk_vo0_root", 
mux_200m_100m_50m_24m_p,
> > CLK_IS_CRITICAL, +			RK3576_CLKSEL_CON(149), 7, 2, 
MFLAGS,
> > +			RK3576_CLKGATE_CON(63), 1, GFLAGS),
> > +	COMPOSITE_NODIV(PCLK_VO0_ROOT, "pclk_vo0_root", 
mux_150m_100m_50m_24m_p,
> > 0, +			RK3576_CLKSEL_CON(149), 11, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(63), 3, GFLAGS),
> > +	GATE(ACLK_HDCP0, "aclk_hdcp0", "aclk_vo0_root", 0,
> > +			RK3576_CLKGATE_CON(63), 12, GFLAGS),
> > +	GATE(HCLK_HDCP0, "hclk_hdcp0", "hclk_vo0_root", 0,
> > +			RK3576_CLKGATE_CON(63), 13, GFLAGS),
> > +	GATE(PCLK_HDCP0, "pclk_hdcp0", "pclk_vo0_root", 0,
> > +			RK3576_CLKGATE_CON(63), 14, GFLAGS),
> > +	GATE(CLK_TRNG0_SKP, "clk_trng0_skp", "aclk_hdcp0", 0,
> > +			RK3576_CLKGATE_CON(64), 4, GFLAGS),
> > +	GATE(PCLK_DSIHOST0, "pclk_dsihost0", "pclk_vo0_root", 0,
> > +			RK3576_CLKGATE_CON(64), 5, GFLAGS),
> > +	COMPOSITE(CLK_DSIHOST0, "clk_dsihost0", 
gpll_cpll_spll_vpll_bpll_lpll_p,
> > 0, +			RK3576_CLKSEL_CON(151), 7, 3, MFLAGS, 0, 7, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(64), 6, GFLAGS),
> > +	GATE(PCLK_HDMITX0, "pclk_hdmitx0", "pclk_vo0_root", 0,
> > +			RK3576_CLKGATE_CON(64), 7, GFLAGS),
> > +	COMPOSITE(CLK_HDMITX0_EARC, "clk_hdmitx0_earc", gpll_cpll_p, 0,
> > +			RK3576_CLKSEL_CON(151), 15, 1, MFLAGS, 10, 
5, DFLAGS,
> > +			RK3576_CLKGATE_CON(64), 8, GFLAGS),
> > +	GATE(CLK_HDMITX0_REF, "clk_hdmitx0_ref", "aclk_vo0_root", 0,
> > +			RK3576_CLKGATE_CON(64), 9, GFLAGS),
> > +	GATE(PCLK_EDP0, "pclk_edp0", "pclk_vo0_root", 0,
> > +			RK3576_CLKGATE_CON(64), 13, GFLAGS),
> > +	GATE(CLK_EDP0_24M, "clk_edp0_24m", "xin24m", 0,
> > +			RK3576_CLKGATE_CON(64), 14, GFLAGS),
> > +	COMPOSITE_NODIV(CLK_EDP0_200M, "clk_edp0_200m", 
mux_200m_100m_50m_24m_p,
> > 0, +			RK3576_CLKSEL_CON(152), 1, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(64), 15, GFLAGS),
> > +	COMPOSITE(MCLK_SAI5_8CH_SRC, "mclk_sai5_8ch_src", 
audio_frac_int_p, 0,
> > +			RK3576_CLKSEL_CON(154), 10, 3, MFLAGS, 2, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(65), 3, GFLAGS),
> > +	COMPOSITE_NODIV(MCLK_SAI5_8CH, "mclk_sai5_8ch", mclk_sai5_8ch_p,
> > CLK_SET_RATE_PARENT, +			
RK3576_CLKSEL_CON(154), 13, 1, MFLAGS,
> > +			RK3576_CLKGATE_CON(65), 4, GFLAGS),
> > +	GATE(HCLK_SAI5_8CH, "hclk_sai5_8ch", "hclk_vo0_root", 0,
> > +			RK3576_CLKGATE_CON(65), 5, GFLAGS),
> > +	COMPOSITE(MCLK_SAI6_8CH_SRC, "mclk_sai6_8ch_src", 
audio_frac_int_p, 0,
> > +			RK3576_CLKSEL_CON(155), 8, 3, MFLAGS, 0, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(65), 7, GFLAGS),
> > +	COMPOSITE_NODIV(MCLK_SAI6_8CH, "mclk_sai6_8ch", mclk_sai6_8ch_p,
> > CLK_SET_RATE_PARENT, +			
RK3576_CLKSEL_CON(155), 11, 1, MFLAGS,
> > +			RK3576_CLKGATE_CON(65), 8, GFLAGS),
> > +	GATE(HCLK_SAI6_8CH, "hclk_sai6_8ch", "hclk_vo0_root", 0,
> > +			RK3576_CLKGATE_CON(65), 9, GFLAGS),
> > +	GATE(HCLK_SPDIF_TX2, "hclk_spdif_tx2", "hclk_vo0_root", 0,
> > +			RK3576_CLKGATE_CON(65), 10, GFLAGS),
> > +	COMPOSITE(MCLK_SPDIF_TX2, "mclk_spdif_tx2", audio_frac_int_p, 0,
> > +			RK3576_CLKSEL_CON(156), 5, 3, MFLAGS, 0, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(65), 13, GFLAGS),
> > +	GATE(HCLK_SPDIF_RX2, "hclk_spdif_rx2", "hclk_vo0_root", 0,
> > +			RK3576_CLKGATE_CON(65), 14, GFLAGS),
> > +	COMPOSITE(MCLK_SPDIF_RX2, "mclk_spdif_rx2", gpll_cpll_aupll_p, 0,
> > +			RK3576_CLKSEL_CON(156), 13, 2, MFLAGS, 8, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(65), 15, GFLAGS),
> > +
> > +	/* vo1 */
> > +	COMPOSITE(ACLK_VO1_ROOT, "aclk_vo1_root", gpll_cpll_lpll_bpll_p, 
0,
> > +			RK3576_CLKSEL_CON(158), 5, 2, MFLAGS, 0, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(67), 1, GFLAGS),
> > +	COMPOSITE_NODIV(HCLK_VO1_ROOT, "hclk_vo1_root", 
mux_200m_100m_50m_24m_p,
> > CLK_IS_CRITICAL, +			RK3576_CLKSEL_CON(158), 7, 2, 
MFLAGS,
> > +			RK3576_CLKGATE_CON(67), 2, GFLAGS),
> > +	COMPOSITE_NODIV(PCLK_VO1_ROOT, "pclk_vo1_root", 
mux_100m_50m_24m_p, 0,
> > +			RK3576_CLKSEL_CON(158), 9, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(67), 3, GFLAGS),
> > +	COMPOSITE(MCLK_SAI8_8CH_SRC, "mclk_sai8_8ch_src", 
audio_frac_int_p, 0,
> > +			RK3576_CLKSEL_CON(157), 8, 3, MFLAGS, 0, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(66), 1, GFLAGS),
> > +	COMPOSITE_NODIV(MCLK_SAI8_8CH, "mclk_sai8_8ch", mclk_sai8_8ch_p,
> > CLK_SET_RATE_PARENT, +			
RK3576_CLKSEL_CON(157), 11, 1, MFLAGS,
> > +			RK3576_CLKGATE_CON(66), 2, GFLAGS),
> > +	GATE(HCLK_SAI8_8CH, "hclk_sai8_8ch", "hclk_vo1_root", 0,
> > +			RK3576_CLKGATE_CON(66), 0, GFLAGS),
> > +	COMPOSITE(MCLK_SAI7_8CH_SRC, "mclk_sai7_8ch_src", 
audio_frac_int_p, 0,
> > +			RK3576_CLKSEL_CON(159), 8, 3, MFLAGS, 0, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(67), 8, GFLAGS),
> > +	COMPOSITE_NODIV(MCLK_SAI7_8CH, "mclk_sai7_8ch", mclk_sai7_8ch_p,
> > CLK_SET_RATE_PARENT, +			
RK3576_CLKSEL_CON(159), 11, 1, MFLAGS,
> > +			RK3576_CLKGATE_CON(67), 9, GFLAGS),
> > +	GATE(HCLK_SAI7_8CH, "hclk_sai7_8ch", "hclk_vo1_root", 0,
> > +			RK3576_CLKGATE_CON(67), 10, GFLAGS),
> > +	GATE(HCLK_SPDIF_TX3, "hclk_spdif_tx3", "hclk_vo1_root", 0,
> > +			RK3576_CLKGATE_CON(67), 11, GFLAGS),
> > +	GATE(HCLK_SPDIF_TX4, "hclk_spdif_tx4", "hclk_vo1_root", 0,
> > +			RK3576_CLKGATE_CON(67), 12, GFLAGS),
> > +	GATE(HCLK_SPDIF_TX5, "hclk_spdif_tx5", "hclk_vo1_root", 0,
> > +			RK3576_CLKGATE_CON(67), 13, GFLAGS),
> > +	COMPOSITE(MCLK_SPDIF_TX3, "mclk_spdif_tx3", audio_frac_int_p, 0,
> > +			RK3576_CLKSEL_CON(160), 8, 3, MFLAGS, 0, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(67), 14, GFLAGS),
> > +	COMPOSITE_NOMUX(CLK_AUX16MHZ_0, "clk_aux16mhz_0", "gpll", 0,
> > +			RK3576_CLKSEL_CON(161), 0, 8, DFLAGS,
> > +			RK3576_CLKGATE_CON(67), 15, GFLAGS),
> > +	GATE(ACLK_DP0, "aclk_dp0", "aclk_vo1_root", 0,
> > +			RK3576_CLKGATE_CON(68), 0, GFLAGS),
> > +	GATE(PCLK_DP0, "pclk_dp0", "pclk_vo1_root", 0,
> > +			RK3576_CLKGATE_CON(68), 1, GFLAGS),
> > +	GATE(ACLK_HDCP1, "aclk_hdcp1", "aclk_vo1_root", 0,
> > +			RK3576_CLKGATE_CON(68), 4, GFLAGS),
> > +	GATE(HCLK_HDCP1, "hclk_hdcp1", "hclk_vo1_root", 0,
> > +			RK3576_CLKGATE_CON(68), 5, GFLAGS),
> > +	GATE(PCLK_HDCP1, "pclk_hdcp1", "pclk_vo1_root", 0,
> > +			RK3576_CLKGATE_CON(68), 6, GFLAGS),
> > +	GATE(CLK_TRNG1_SKP, "clk_trng1_skp", "aclk_hdcp1", 0,
> > +			RK3576_CLKGATE_CON(68), 7, GFLAGS),
> > +	GATE(HCLK_SAI9_8CH, "hclk_sai9_8ch", "hclk_vo1_root", 0,
> > +			RK3576_CLKGATE_CON(68), 9, GFLAGS),
> > +	COMPOSITE(MCLK_SAI9_8CH_SRC, "mclk_sai9_8ch_src", 
audio_frac_int_p, 0,
> > +			RK3576_CLKSEL_CON(162), 8, 3, MFLAGS, 0, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(68), 10, GFLAGS),
> > +	COMPOSITE_NODIV(MCLK_SAI9_8CH, "mclk_sai9_8ch", mclk_sai9_8ch_p,
> > CLK_SET_RATE_PARENT, +			
RK3576_CLKSEL_CON(162), 11, 1, MFLAGS,
> > +			RK3576_CLKGATE_CON(68), 11, GFLAGS),
> > +	COMPOSITE(MCLK_SPDIF_TX4, "mclk_spdif_tx4", audio_frac_int_p, 0,
> > +			RK3576_CLKSEL_CON(163), 8, 3, MFLAGS, 0, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(68), 12, GFLAGS),
> > +	COMPOSITE(MCLK_SPDIF_TX5, "mclk_spdif_tx5", audio_frac_int_p, 0,
> > +			RK3576_CLKSEL_CON(164), 8, 3, MFLAGS, 0, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(68), 13, GFLAGS),
> > +
> > +	/* vpu */
> > +	COMPOSITE(ACLK_VPU_ROOT, "aclk_vpu_root", 
gpll_spll_cpll_bpll_lpll_p,
> > CLK_IS_CRITICAL, +			RK3576_CLKSEL_CON(118), 5, 3, 
MFLAGS, 0, 5, DFLAGS,
> > +			RK3576_CLKGATE_CON(49), 0, GFLAGS),
> > +	COMPOSITE_NODIV(ACLK_VPU_MID_ROOT, "aclk_vpu_mid_root",
> > mux_600m_400m_300m_24m_p, 0, +			
RK3576_CLKSEL_CON(118), 8, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(49), 1, GFLAGS),
> > +	COMPOSITE_NODIV(HCLK_VPU_ROOT, "hclk_vpu_root", 
mux_200m_100m_50m_24m_p,
> > 0, +			RK3576_CLKSEL_CON(118), 10, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(49), 2, GFLAGS),
> > +	COMPOSITE(ACLK_JPEG_ROOT, "aclk_jpeg_root", 
gpll_cpll_aupll_spll_p, 0,
> > +			RK3576_CLKSEL_CON(119), 5, 2, MFLAGS, 0, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(49), 3, GFLAGS),
> > +	COMPOSITE_NODIV(ACLK_VPU_LOW_ROOT, "aclk_vpu_low_root",
> > mux_400m_200m_100m_24m_p, 0, +			
RK3576_CLKSEL_CON(119), 7, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(49), 4, GFLAGS),
> > +	GATE(HCLK_RGA2E_0, "hclk_rga2e_0", "hclk_vpu_root", 0,
> > +			RK3576_CLKGATE_CON(49), 13, GFLAGS),
> > +	GATE(ACLK_RGA2E_0, "aclk_rga2e_0", "aclk_vpu_root", 0,
> > +			RK3576_CLKGATE_CON(49), 14, GFLAGS),
> > +	COMPOSITE(CLK_CORE_RGA2E_0, "clk_core_rga2e_0",
> > gpll_spll_cpll_bpll_lpll_p, 0, +			
RK3576_CLKSEL_CON(120), 5, 3, MFLAGS,
> > 0, 5, DFLAGS,
> > +			RK3576_CLKGATE_CON(49), 15, GFLAGS),
> > +	GATE(ACLK_JPEG, "aclk_jpeg", "aclk_jpeg_root", 0,
> > +			RK3576_CLKGATE_CON(50), 0, GFLAGS),
> > +	GATE(HCLK_JPEG, "hclk_jpeg", "hclk_vpu_root", 0,
> > +			RK3576_CLKGATE_CON(50), 1, GFLAGS),
> > +	GATE(HCLK_VDPP, "hclk_vdpp", "hclk_vpu_root", 0,
> > +			RK3576_CLKGATE_CON(50), 2, GFLAGS),
> > +	GATE(ACLK_VDPP, "aclk_vdpp", "aclk_vpu_mid_root", 0,
> > +			RK3576_CLKGATE_CON(50), 3, GFLAGS),
> > +	COMPOSITE(CLK_CORE_VDPP, "clk_core_vdpp", gpll_cpll_p, 0,
> > +			RK3576_CLKSEL_CON(120), 13, 1, MFLAGS, 8, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(50), 4, GFLAGS),
> > +	GATE(HCLK_RGA2E_1, "hclk_rga2e_1", "hclk_vpu_root", 0,
> > +			RK3576_CLKGATE_CON(50), 5, GFLAGS),
> > +	GATE(ACLK_RGA2E_1, "aclk_rga2e_1", "aclk_vpu_root", 0,
> > +			RK3576_CLKGATE_CON(50), 6, GFLAGS),
> > +	COMPOSITE(CLK_CORE_RGA2E_1, "clk_core_rga2e_1",
> > gpll_spll_cpll_bpll_lpll_p, 0, +			
RK3576_CLKSEL_CON(121), 5, 3, MFLAGS,
> > 0, 5, DFLAGS,
> > +			RK3576_CLKGATE_CON(50), 7, GFLAGS),
> > +	MUX(0, "dclk_ebc_frac_src_p", gpll_cpll_vpll_aupll_24m_p, 0,
> > +			RK3576_CLKSEL_CON(123), 0, 3, MFLAGS),
> > +	COMPOSITE_FRAC(DCLK_EBC_FRAC_SRC, "dclk_ebc_frac_src",
> > "dclk_ebc_frac_src_p", 0, +			
RK3576_CLKSEL_CON(122), 0,
> > +			RK3576_CLKGATE_CON(50), 9, GFLAGS),
> > +	GATE(ACLK_EBC, "aclk_ebc", "aclk_vpu_low_root", 0,
> > +			RK3576_CLKGATE_CON(50), 11, GFLAGS),
> > +	GATE(HCLK_EBC, "hclk_ebc", "hclk_vpu_root", 0,
> > +			RK3576_CLKGATE_CON(50), 10, GFLAGS),
> > +	COMPOSITE(DCLK_EBC, "dclk_ebc", dclk_ebc_p, 
CLK_SET_RATE_NO_REPARENT,
> > +			RK3576_CLKSEL_CON(123), 12, 3, MFLAGS, 3, 9, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(50), 12, GFLAGS),
> > +
> > +	/* vepu */
> > +	COMPOSITE_NODIV(HCLK_VEPU1_ROOT, "hclk_vepu1_root",
> > mux_200m_100m_50m_24m_p, 0, +			RK3576_CLKSEL_CON(178), 
0, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(78), 0, GFLAGS),
> > +	COMPOSITE(ACLK_VEPU1_ROOT, "aclk_vepu1_root", gpll_cpll_p, 0,
> > +			RK3576_CLKSEL_CON(180), 5, 1, MFLAGS, 0, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(79), 0, GFLAGS),
> > +	GATE(HCLK_VEPU1, "hclk_vepu1", "hclk_vepu1_root", 0,
> > +			RK3576_CLKGATE_CON(79), 3, GFLAGS),
> > +	GATE(ACLK_VEPU1, "aclk_vepu1", "aclk_vepu1_root", 0,
> > +			RK3576_CLKGATE_CON(79), 4, GFLAGS),
> > +	COMPOSITE(CLK_VEPU1_CORE, "clk_vepu1_core", 
gpll_cpll_spll_lpll_bpll_p,
> > 0, +			RK3576_CLKSEL_CON(180), 11, 3, MFLAGS, 6, 
5, DFLAGS,
> > +			RK3576_CLKGATE_CON(79), 5, GFLAGS),
> > +
> > +	/* php */
> > +	COMPOSITE_NODIV(PCLK_PHP_ROOT, "pclk_php_root", 
mux_100m_50m_24m_p, 0,
> > +			RK3576_CLKSEL_CON(92), 0, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(34), 0, GFLAGS),
> > +	COMPOSITE(ACLK_PHP_ROOT, "aclk_php_root", gpll_cpll_p, 0,
> > +			RK3576_CLKSEL_CON(92), 9, 1, MFLAGS, 4, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(34), 7, GFLAGS),
> > +	GATE(PCLK_PCIE0, "pclk_pcie0", "pclk_php_root", 0,
> > +			RK3576_CLKGATE_CON(34), 13, GFLAGS),
> > +	GATE(CLK_PCIE0_AUX, "clk_pcie0_aux", "xin24m", 0,
> > +			RK3576_CLKGATE_CON(34), 14, GFLAGS),
> > +	GATE(ACLK_PCIE0_MST, "aclk_pcie0_mst", "aclk_php_root", 0,
> > +			RK3576_CLKGATE_CON(34), 15, GFLAGS),
> > +	GATE(ACLK_PCIE0_SLV, "aclk_pcie0_slv", "aclk_php_root", 0,
> > +			RK3576_CLKGATE_CON(35), 0, GFLAGS),
> > +	GATE(ACLK_PCIE0_DBI, "aclk_pcie0_dbi", "aclk_php_root", 0,
> > +			RK3576_CLKGATE_CON(35), 1, GFLAGS),
> > +	GATE(ACLK_USB3OTG1, "aclk_usb3otg1", "aclk_php_root", 0,
> > +			RK3576_CLKGATE_CON(35), 3, GFLAGS),
> > +	GATE(CLK_REF_USB3OTG1, "clk_ref_usb3otg1", "xin24m", 0,
> > +			RK3576_CLKGATE_CON(35), 4, GFLAGS),
> > +	GATE(CLK_SUSPEND_USB3OTG1, "clk_suspend_usb3otg1", "xin24m", 0,
> > +			RK3576_CLKGATE_CON(35), 5, GFLAGS),
> > +	GATE(ACLK_MMU0, "aclk_mmu0", "aclk_php_root", 0,
> > +			RK3576_CLKGATE_CON(35), 11, GFLAGS),
> > +	GATE(ACLK_SLV_MMU0, "aclk_slv_mmu0", "aclk_php_root", 0,
> > +			RK3576_CLKGATE_CON(35), 13, GFLAGS),
> > +	GATE(ACLK_MMU1, "aclk_mmu1", "aclk_php_root", 0,
> > +			RK3576_CLKGATE_CON(35), 14, GFLAGS),
> > +	GATE(ACLK_SLV_MMU1, "aclk_slv_mmu1", "aclk_php_root", 0,
> > +			RK3576_CLKGATE_CON(36), 0, GFLAGS),
> > +	GATE(PCLK_PCIE1, "pclk_pcie1", "pclk_php_root", 0,
> > +			RK3576_CLKGATE_CON(36), 7, GFLAGS),
> > +	GATE(CLK_PCIE1_AUX, "clk_pcie1_aux", "xin24m", 0,
> > +			RK3576_CLKGATE_CON(36), 8, GFLAGS),
> > +	GATE(ACLK_PCIE1_MST, "aclk_pcie1_mst", "aclk_php_root", 0,
> > +			RK3576_CLKGATE_CON(36), 9, GFLAGS),
> > +	GATE(ACLK_PCIE1_SLV, "aclk_pcie1_slv", "aclk_php_root", 0,
> > +			RK3576_CLKGATE_CON(36), 10, GFLAGS),
> > +	GATE(ACLK_PCIE1_DBI, "aclk_pcie1_dbi", "aclk_php_root", 0,
> > +			RK3576_CLKGATE_CON(36), 11, GFLAGS),
> > +	COMPOSITE(CLK_RXOOB0, "clk_rxoob0", gpll_cpll_p, 0,
> > +			RK3576_CLKSEL_CON(93), 7, 1, MFLAGS, 0, 7, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(37), 0, GFLAGS),
> > +	COMPOSITE(CLK_RXOOB1, "clk_rxoob1", gpll_cpll_p, 0,
> > +			RK3576_CLKSEL_CON(93), 15, 1, MFLAGS, 8, 7, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(37), 1, GFLAGS),
> > +	GATE(CLK_PMALIVE0, "clk_pmalive0", "xin24m", CLK_IS_CRITICAL,
> > +			RK3576_CLKGATE_CON(37), 2, GFLAGS),
> > +	GATE(CLK_PMALIVE1, "clk_pmalive1", "xin24m", CLK_IS_CRITICAL,
> > +			RK3576_CLKGATE_CON(37), 3, GFLAGS),
> > +	GATE(ACLK_SATA0, "aclk_sata0", "aclk_php_root", 0,
> > +			RK3576_CLKGATE_CON(37), 4, GFLAGS),
> > +	GATE(ACLK_SATA1, "aclk_sata1", "aclk_php_root", 0,
> > +			RK3576_CLKGATE_CON(37), 5, GFLAGS),
> > +
> > +	/* audio */
> > +	COMPOSITE_NODIV(HCLK_AUDIO_ROOT, "hclk_audio_root",
> > mux_200m_100m_50m_24m_p, 0, +			RK3576_CLKSEL_CON(42), 
0, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(7), 1, GFLAGS),
> > +	GATE(HCLK_ASRC_2CH_0, "hclk_asrc_2ch_0", "hclk_audio_root", 0,
> > +			RK3576_CLKGATE_CON(7), 3, GFLAGS),
> > +	GATE(HCLK_ASRC_2CH_1, "hclk_asrc_2ch_1", "hclk_audio_root", 0,
> > +			RK3576_CLKGATE_CON(7), 4, GFLAGS),
> > +	GATE(HCLK_ASRC_4CH_0, "hclk_asrc_4ch_0", "hclk_audio_root", 0,
> > +			RK3576_CLKGATE_CON(7), 5, GFLAGS),
> > +	GATE(HCLK_ASRC_4CH_1, "hclk_asrc_4ch_1", "hclk_audio_root", 0,
> > +			RK3576_CLKGATE_CON(7), 6, GFLAGS),
> > +	COMPOSITE(CLK_ASRC_2CH_0, "clk_asrc_2ch_0", gpll_cpll_aupll_p, 0,
> > +			RK3576_CLKSEL_CON(42), 7, 2, MFLAGS, 2, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(7), 7, GFLAGS),
> > +	COMPOSITE(CLK_ASRC_2CH_1, "clk_asrc_2ch_1", gpll_cpll_aupll_p, 0,
> > +			RK3576_CLKSEL_CON(42), 14, 2, MFLAGS, 9, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(7), 8, GFLAGS),
> > +	COMPOSITE(CLK_ASRC_4CH_0, "clk_asrc_4ch_0", gpll_cpll_aupll_p, 0,
> > +			RK3576_CLKSEL_CON(43), 5, 2, MFLAGS, 0, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(7), 9, GFLAGS),
> > +	COMPOSITE(CLK_ASRC_4CH_1, "clk_asrc_4ch_1", gpll_cpll_aupll_p, 0,
> > +			RK3576_CLKSEL_CON(43), 12, 2, MFLAGS, 7, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(7), 10, GFLAGS),
> > +	COMPOSITE(MCLK_SAI0_8CH_SRC, "mclk_sai0_8ch_src", 
audio_frac_int_p, 0,
> > +			RK3576_CLKSEL_CON(44), 8, 3, MFLAGS, 0, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(7), 11, GFLAGS),
> > +	COMPOSITE_NODIV(MCLK_SAI0_8CH, "mclk_sai0_8ch", mclk_sai0_8ch_p,
> > CLK_SET_RATE_PARENT, +			
RK3576_CLKSEL_CON(44), 11, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(7), 12, GFLAGS),
> > +	GATE(HCLK_SAI0_8CH, "hclk_sai0_8ch", "hclk_audio_root", 0,
> > +			RK3576_CLKGATE_CON(7), 13, GFLAGS),
> > +	GATE(HCLK_SPDIF_RX0, "hclk_spdif_rx0", "hclk_audio_root", 0,
> > +			RK3576_CLKGATE_CON(7), 14, GFLAGS),
> > +	COMPOSITE(MCLK_SPDIF_RX0, "mclk_spdif_rx0", gpll_cpll_aupll_p, 0,
> > +			RK3576_CLKSEL_CON(45), 5, 2, MFLAGS, 0, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(7), 15, GFLAGS),
> > +	GATE(HCLK_SPDIF_RX1, "hclk_spdif_rx1", "hclk_audio_root", 0,
> > +			RK3576_CLKGATE_CON(8), 0, GFLAGS),
> > +	COMPOSITE(MCLK_SPDIF_RX1, "mclk_spdif_rx1", gpll_cpll_aupll_p, 0,
> > +			RK3576_CLKSEL_CON(45), 12, 2, MFLAGS, 7, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(8), 1, GFLAGS),
> > +	COMPOSITE(MCLK_SAI1_8CH_SRC, "mclk_sai1_8ch_src", 
audio_frac_int_p, 0,
> > +			RK3576_CLKSEL_CON(46), 8, 3, MFLAGS, 0, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(8), 4, GFLAGS),
> > +	COMPOSITE_NODIV(MCLK_SAI1_8CH, "mclk_sai1_8ch", mclk_sai1_8ch_p,
> > CLK_SET_RATE_PARENT, +			
RK3576_CLKSEL_CON(46), 11, 1, MFLAGS,
> > +			RK3576_CLKGATE_CON(8), 5, GFLAGS),
> > +	GATE(HCLK_SAI1_8CH, "hclk_sai1_8ch", "hclk_audio_root", 0,
> > +			RK3576_CLKGATE_CON(8), 6, GFLAGS),
> > +	COMPOSITE(MCLK_SAI2_2CH_SRC, "mclk_sai2_2ch_src", 
audio_frac_int_p, 0,
> > +			RK3576_CLKSEL_CON(47), 8, 3, MFLAGS, 0, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(8), 7, GFLAGS),
> > +	COMPOSITE_NODIV(MCLK_SAI2_2CH, "mclk_sai2_2ch", mclk_sai2_2ch_p,
> > CLK_SET_RATE_PARENT, +			
RK3576_CLKSEL_CON(47), 11, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(8), 8, GFLAGS),
> > +	GATE(HCLK_SAI2_2CH, "hclk_sai2_2ch", "hclk_audio_root", 0,
> > +			RK3576_CLKGATE_CON(8), 10, GFLAGS),
> > +	COMPOSITE(MCLK_SAI3_2CH_SRC, "mclk_sai3_2ch_src", 
audio_frac_int_p, 0,
> > +			RK3576_CLKSEL_CON(48), 8, 3, MFLAGS, 0, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(8), 11, GFLAGS),
> > +	COMPOSITE_NODIV(MCLK_SAI3_2CH, "mclk_sai3_2ch", mclk_sai3_2ch_p,
> > CLK_SET_RATE_PARENT, +			
RK3576_CLKSEL_CON(48), 11, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(8), 12, GFLAGS),
> > +	GATE(HCLK_SAI3_2CH, "hclk_sai3_2ch", "hclk_audio_root", 0,
> > +			RK3576_CLKGATE_CON(8), 14, GFLAGS),
> > +	COMPOSITE(MCLK_SAI4_2CH_SRC, "mclk_sai4_2ch_src", 
audio_frac_int_p, 0,
> > +			RK3576_CLKSEL_CON(49), 8, 3, MFLAGS, 0, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(8), 15, GFLAGS),
> > +	COMPOSITE_NODIV(MCLK_SAI4_2CH, "mclk_sai4_2ch", mclk_sai4_2ch_p,
> > CLK_SET_RATE_PARENT, +			
RK3576_CLKSEL_CON(49), 11, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(9), 0, GFLAGS),
> > +	GATE(HCLK_SAI4_2CH, "hclk_sai4_2ch", "hclk_audio_root", 0,
> > +			RK3576_CLKGATE_CON(9), 2, GFLAGS),
> > +	GATE(HCLK_ACDCDIG_DSM, "hclk_acdcdig_dsm", "hclk_audio_root", 0,
> > +			RK3576_CLKGATE_CON(9), 3, GFLAGS),
> > +	GATE(MCLK_ACDCDIG_DSM, "mclk_acdcdig_dsm", "mclk_sai4_2ch", 0,
> > +			RK3576_CLKGATE_CON(9), 4, GFLAGS),
> > +	COMPOSITE(CLK_PDM1, "clk_pdm1", audio_frac_int_p, 0,
> > +			RK3576_CLKSEL_CON(50), 9, 3, MFLAGS, 0, 9, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(9), 5, GFLAGS),
> > +	GATE(HCLK_PDM1, "hclk_pdm1", "hclk_audio_root", 0,
> > +			RK3576_CLKGATE_CON(9), 7, GFLAGS),
> > +	GATE(CLK_PDM1_OUT, "clk_pdm1_out", "clk_pdm1", 0,
> > +			RK3576_CLKGATE_CON(3), 5, GFLAGS),
> > +	COMPOSITE(MCLK_PDM1, "mclk_pdm1", audio_frac_int_p, 0,
> > +			RK3576_CLKSEL_CON(51), 5, 3, MFLAGS, 0, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(9), 8, GFLAGS),
> > +	GATE(HCLK_SPDIF_TX0, "hclk_spdif_tx0", "hclk_audio_root", 0,
> > +			RK3576_CLKGATE_CON(9), 9, GFLAGS),
> > +	COMPOSITE(MCLK_SPDIF_TX0, "mclk_spdif_tx0", audio_frac_int_p, 0,
> > +			RK3576_CLKSEL_CON(52), 8, 3, MFLAGS, 0, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(9), 10, GFLAGS),
> > +	GATE(HCLK_SPDIF_TX1, "hclk_spdif_tx1", "hclk_audio_root", 0,
> > +			RK3576_CLKGATE_CON(9), 11, GFLAGS),
> > +	COMPOSITE(MCLK_SPDIF_TX1, "mclk_spdif_tx1", audio_frac_int_p, 0,
> > +			RK3576_CLKSEL_CON(53), 8, 3, MFLAGS, 0, 8, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(9), 12, GFLAGS),
> > +	GATE(CLK_SAI1_MCLKOUT, "clk_sai1_mclkout", "mclk_sai1_8ch", 0,
> > +			RK3576_CLKGATE_CON(9), 13, GFLAGS),
> > +	GATE(CLK_SAI2_MCLKOUT, "clk_sai2_mclkout", "mclk_sai2_2ch", 0,
> > +			RK3576_CLKGATE_CON(9), 14, GFLAGS),
> > +	GATE(CLK_SAI3_MCLKOUT, "clk_sai3_mclkout", "mclk_sai3_2ch", 0,
> > +			RK3576_CLKGATE_CON(9), 15, GFLAGS),
> > +	GATE(CLK_SAI4_MCLKOUT, "clk_sai4_mclkout", "mclk_sai4_2ch", 0,
> > +			RK3576_CLKGATE_CON(10), 0, GFLAGS),
> > +	GATE(CLK_SAI0_MCLKOUT, "clk_sai0_mclkout", "mclk_sai0_8ch", 0,
> > +			RK3576_CLKGATE_CON(10), 1, GFLAGS),
> > +
> > +	/* sdgmac */
> > +	COMPOSITE_NODIV(HCLK_SDGMAC_ROOT, "hclk_sdgmac_root",
> > mux_200m_100m_50m_24m_p, 0, +			RK3576_CLKSEL_CON(103), 
0, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(42), 0, GFLAGS),
> > +	COMPOSITE(ACLK_SDGMAC_ROOT, "aclk_sdgmac_root", gpll_cpll_p,
> > CLK_IS_CRITICAL, +			RK3576_CLKSEL_CON(103), 7, 1, 
MFLAGS, 2, 5, DFLAGS,
> > +			RK3576_CLKGATE_CON(42), 1, GFLAGS),
> > +	COMPOSITE_NODIV(PCLK_SDGMAC_ROOT, "pclk_sdgmac_root",
> > mux_100m_50m_24m_p, 0, +			
RK3576_CLKSEL_CON(103), 8, 2, MFLAGS,
> > +			RK3576_CLKGATE_CON(42), 2, GFLAGS),
> > +	GATE(ACLK_GMAC0, "aclk_gmac0", "aclk_sdgmac_root", 0,
> > +			RK3576_CLKGATE_CON(42), 7, GFLAGS),
> > +	GATE(ACLK_GMAC1, "aclk_gmac1", "aclk_sdgmac_root", 0,
> > +			RK3576_CLKGATE_CON(42), 8, GFLAGS),
> > +	GATE(PCLK_GMAC0, "pclk_gmac0", "pclk_sdgmac_root", 0,
> > +			RK3576_CLKGATE_CON(42), 9, GFLAGS),
> > +	GATE(PCLK_GMAC1, "pclk_gmac1", "pclk_sdgmac_root", 0,
> > +			RK3576_CLKGATE_CON(42), 10, GFLAGS),
> > +	COMPOSITE(CCLK_SRC_SDIO, "cclk_src_sdio", gpll_cpll_24m_p, 0,
> > +			RK3576_CLKSEL_CON(104), 6, 2, MFLAGS, 0, 6, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(42), 11, GFLAGS),
> > +	GATE(HCLK_SDIO, "hclk_sdio", "hclk_sdgmac_root", 0,
> > +			RK3576_CLKGATE_CON(42), 12, GFLAGS),
> > +	COMPOSITE(CLK_GMAC1_PTP_REF_SRC, "clk_gmac1_ptp_ref_src",
> > clk_gmac1_ptp_ref_src_p, 0, +			
RK3576_CLKSEL_CON(104), 13, 2, MFLAGS, 8,
> > 5, DFLAGS,
> > +			RK3576_CLKGATE_CON(42), 15, GFLAGS),
> > +	COMPOSITE(CLK_GMAC0_PTP_REF_SRC, "clk_gmac0_ptp_ref_src",
> > clk_gmac0_ptp_ref_src_p, 0, +			
RK3576_CLKSEL_CON(105), 5, 2, MFLAGS, 0,
> > 5, DFLAGS,
> > +			RK3576_CLKGATE_CON(43), 0, GFLAGS),
> > +	GATE(CLK_GMAC1_PTP_REF, "clk_gmac1_ptp_ref", 
"clk_gmac1_ptp_ref_src", 0,
> > +			RK3576_CLKGATE_CON(42), 13, GFLAGS),
> > +	GATE(CLK_GMAC0_PTP_REF, "clk_gmac0_ptp_ref", 
"clk_gmac0_ptp_ref_src", 0,
> > +			RK3576_CLKGATE_CON(42), 14, GFLAGS),
> > +	COMPOSITE(CCLK_SRC_SDMMC0, "cclk_src_sdmmc0", gpll_cpll_24m_p, 0,
> > +			RK3576_CLKSEL_CON(105), 13, 2, MFLAGS, 7, 6, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(43), 1, GFLAGS),
> > +	GATE(HCLK_SDMMC0, "hclk_sdmmc0", "hclk_sdgmac_root", 0,
> > +			RK3576_CLKGATE_CON(43), 2, GFLAGS),
> > +	COMPOSITE(SCLK_FSPI1_X2, "sclk_fspi1_x2", gpll_cpll_24m_p, 0,
> > +			RK3576_CLKSEL_CON(106), 6, 2, MFLAGS, 0, 6, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(43), 3, GFLAGS),
> > +	GATE(HCLK_FSPI1, "hclk_fspi1", "hclk_sdgmac_root", 0,
> > +			RK3576_CLKGATE_CON(43), 4, GFLAGS),
> > +	COMPOSITE(ACLK_DSMC_ROOT, "aclk_dsmc_root", gpll_cpll_p,
> > CLK_IS_CRITICAL,
> > +			RK3576_CLKSEL_CON(106), 13, 1, MFLAGS, 8, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(43), 5, GFLAGS),
> > +	GATE(ACLK_DSMC, "aclk_dsmc", "aclk_dsmc_root", 0,
> > +			RK3576_CLKGATE_CON(43), 7, GFLAGS),
> > +	GATE(PCLK_DSMC, "pclk_dsmc", "pclk_sdgmac_root", 0,
> > +			RK3576_CLKGATE_CON(43), 8, GFLAGS),
> > +	COMPOSITE(CLK_DSMC_SYS, "clk_dsmc_sys", gpll_cpll_p, 0,
> > +			RK3576_CLKSEL_CON(107), 5, 1, MFLAGS, 0, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(43), 9, GFLAGS),
> > +	GATE(HCLK_HSGPIO, "hclk_hsgpio", "hclk_sdgmac_root", 0,
> > +			RK3576_CLKGATE_CON(43), 10, GFLAGS),
> > +	COMPOSITE(CLK_HSGPIO_TX, "clk_hsgpio_tx", gpll_cpll_24m_p, 0,
> > +			RK3576_CLKSEL_CON(107), 11, 2, MFLAGS, 6, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(43), 11, GFLAGS),
> > +	COMPOSITE(CLK_HSGPIO_RX, "clk_hsgpio_rx", gpll_cpll_24m_p, 0,
> > +			RK3576_CLKSEL_CON(108), 5, 2, MFLAGS, 0, 5, 
DFLAGS,
> > +			RK3576_CLKGATE_CON(43), 12, GFLAGS),
> > +	GATE(ACLK_HSGPIO, "aclk_hsgpio", "aclk_sdgmac_root", 0,
> > +			RK3576_CLKGATE_CON(43), 13, GFLAGS),
> > +
> > +	/* phpphy */
> > +	GATE(PCLK_PHPPHY_ROOT, "pclk_phpphy_root", "pclk_bus_root",
> > CLK_IS_CRITICAL, +			RK3576_PHP_CLKGATE_CON(0), 2, 
GFLAGS),
> > +	GATE(PCLK_PCIE2_COMBOPHY0, "pclk_pcie2_combophy0", 
"pclk_phpphy_root",
> > 0,
> > +			RK3576_PHP_CLKGATE_CON(0), 5, GFLAGS),
> > +	GATE(PCLK_PCIE2_COMBOPHY1, "pclk_pcie2_combophy1", 
"pclk_phpphy_root",
> > 0,
> > +			RK3576_PHP_CLKGATE_CON(0), 7, GFLAGS),
> > +	COMPOSITE_NOMUX(CLK_PCIE_100M_SRC, "clk_pcie_100m_src", "ppll", 0,
> > +			RK3576_PHP_CLKSEL_CON(0), 2, 5, DFLAGS,
> > +			RK3576_PHP_CLKGATE_CON(1), 1, GFLAGS),
> > +	COMPOSITE_NOMUX(CLK_PCIE_100M_NDUTY_SRC, 
"clk_pcie_100m_nduty_src",
> > "ppll", 0, +			RK3576_PHP_CLKSEL_CON(0), 7, 
5, DFLAGS,
> > +			RK3576_PHP_CLKGATE_CON(1), 2, GFLAGS),
> > +	COMPOSITE_NODIV(CLK_REF_PCIE0_PHY, "clk_ref_pcie0_phy",
> > clk_ref_pcie0_phy_p, 0, +			
RK3576_PHP_CLKSEL_CON(0), 12, 2, MFLAGS,
> > +			RK3576_PHP_CLKGATE_CON(1), 5, GFLAGS),
> > +	COMPOSITE_NODIV(CLK_REF_PCIE1_PHY, "clk_ref_pcie1_phy",
> > clk_ref_pcie0_phy_p, 0, +			
RK3576_PHP_CLKSEL_CON(0), 14, 2, MFLAGS,
> > +			RK3576_PHP_CLKGATE_CON(1), 8, GFLAGS),
> > +	COMPOSITE_NOMUX(CLK_REF_MPHY_26M, "clk_ref_mphy_26m", "ppll",
> > CLK_IS_CRITICAL, +			RK3576_PHP_CLKSEL_CON(1), 0, 8, 
DFLAGS,
> > +			RK3576_PHP_CLKGATE_CON(1), 9, GFLAGS),
> > +
> > +	/* pmu */
> > +	GATE(CLK_200M_PMU_SRC, "clk_200m_pmu_src", "clk_gpll_div6", 0,
> > +			RK3576_PMU_CLKGATE_CON(3), 2, GFLAGS),
> > +	COMPOSITE_NOMUX(CLK_100M_PMU_SRC, "clk_100m_pmu_src", "cpll", 0,
> > +			RK3576_PMU_CLKSEL_CON(4), 4, 5, DFLAGS,
> > +			RK3576_PMU_CLKGATE_CON(3), 3, GFLAGS),
> > +	FACTOR_GATE(CLK_50M_PMU_SRC, "clk_50m_pmu_src", 
"clk_100m_pmu_src", 0,
> > 1, 2, +			RK3576_PMU_CLKGATE_CON(3), 4, GFLAGS),
> > +	COMPOSITE_NODIV(HCLK_PMU1_ROOT, "hclk_pmu1_root",
> > mux_pmu200m_pmu100m_pmu50m_24m_p, CLK_IS_CRITICAL,
> > +			RK3576_PMU_CLKSEL_CON(4), 0, 2, MFLAGS,
> > +			RK3576_PMU_CLKGATE_CON(3), 0, GFLAGS),
> > +	COMPOSITE_NODIV(HCLK_PMU_CM0_ROOT, "hclk_pmu_cm0_root",
> > mux_pmu200m_pmu100m_pmu50m_24m_p, 0, +			
RK3576_PMU_CLKSEL_CON(4), 2, 2,
> > MFLAGS,
> > +			RK3576_PMU_CLKGATE_CON(3), 1, GFLAGS),
> > +	COMPOSITE_NODIV(PCLK_PMU0_ROOT, "pclk_pmu0_root",
> > mux_pmu100m_pmu50m_24m_p, 0, +			
RK3576_PMU_CLKSEL_CON(20), 0, 2, MFLAGS,
> > +			RK3576_PMU_CLKGATE_CON(7), 0, GFLAGS),
> > +	GATE(PCLK_PMU0, "pclk_pmu0", "pclk_pmu0_root", CLK_IS_CRITICAL,
> > +			RK3576_PMU_CLKGATE_CON(7), 3, GFLAGS),
> > +	GATE(PCLK_PMU1_ROOT, "pclk_pmu1_root", "pclk_pmu0_root",
> > CLK_IS_CRITICAL,
> > +			RK3576_PMU_CLKGATE_CON(7), 9, GFLAGS),
> > +	GATE(PCLK_PMU1, "pclk_pmu1", "pclk_pmu1_root", CLK_IS_CRITICAL,
> > +			RK3576_PMU_CLKGATE_CON(3), 15, GFLAGS),
> > +	GATE(CLK_PMU1, "clk_pmu1", "xin24m", CLK_IS_CRITICAL,
> > +			RK3576_PMU_CLKGATE_CON(4), 2, GFLAGS),
> > +	GATE(PCLK_PMUPHY_ROOT, "pclk_pmuphy_root", "pclk_pmu1_root",
> > CLK_IS_CRITICAL, +			RK3576_PMU_CLKGATE_CON(5), 0, 
GFLAGS),
> > +	GATE(PCLK_HDPTX_APB, "pclk_hdptx_apb", "pclk_pmuphy_root", 0,
> > +			RK3576_PMU_CLKGATE_CON(0), 1, GFLAGS),
> > +	GATE(PCLK_MIPI_DCPHY, "pclk_mipi_dcphy", "pclk_pmuphy_root", 0,
> > +			RK3576_PMU_CLKGATE_CON(0), 2, GFLAGS),
> > +	GATE(PCLK_CSIDPHY, "pclk_csidphy", "pclk_pmuphy_root", 0,
> > +			RK3576_PMU_CLKGATE_CON(0), 8, GFLAGS),
> > +	GATE(PCLK_USBDPPHY, "pclk_usbdpphy", "pclk_pmuphy_root", 0,
> > +			RK3576_PMU_CLKGATE_CON(0), 12, GFLAGS),
> > +	COMPOSITE_NOMUX(CLK_PMUPHY_REF_SRC, "clk_pmuphy_ref_src", "cpll", 
0,
> > +			RK3576_PMU_CLKSEL_CON(0), 0, 5, DFLAGS,
> > +			RK3576_PMU_CLKGATE_CON(0), 13, GFLAGS),
> > +	GATE(CLK_USBDP_COMBO_PHY_IMMORTAL, "clk_usbdp_combo_phy_immortal",
> > "xin24m", 0, +			RK3576_PMU_CLKGATE_CON(0), 15, 
GFLAGS),
> > +	GATE(CLK_HDMITXHPD, "clk_hdmitxhpd", "xin24m", 0,
> > +			RK3576_PMU_CLKGATE_CON(1), 13, GFLAGS),
> > +	GATE(PCLK_MPHY, "pclk_mphy", "pclk_pmuphy_root", 0,
> > +			RK3576_PMU_CLKGATE_CON(2), 0, GFLAGS),
> > +	MUX(CLK_REF_OSC_MPHY, "clk_ref_osc_mphy", clk_ref_osc_mphy_p, 0,
> > +			RK3576_PMU_CLKSEL_CON(3), 0, 2, MFLAGS),
> > +	GATE(CLK_REF_UFS_CLKOUT, "clk_ref_ufs_clkout", "clk_ref_osc_mphy", 
0,
> > +			RK3576_PMU_CLKGATE_CON(2), 5, GFLAGS),
> > +	GATE(FCLK_PMU_CM0_CORE, "fclk_pmu_cm0_core", "hclk_pmu_cm0_root", 
0,
> > +			RK3576_PMU_CLKGATE_CON(3), 12, GFLAGS),
> > +	COMPOSITE(CLK_PMU_CM0_RTC, "clk_pmu_cm0_rtc", mux_24m_32k_p, 0,
> > +			RK3576_PMU_CLKSEL_CON(4), 14, 1, MFLAGS, 9, 
5, DFLAGS,
> > +			RK3576_PMU_CLKGATE_CON(3), 14, GFLAGS),
> > +	GATE(PCLK_PMU1WDT, "pclk_pmu1wdt", "pclk_pmu1_root", 0,
> > +			RK3576_PMU_CLKGATE_CON(4), 5, GFLAGS),
> > +	COMPOSITE_NODIV(TCLK_PMU1WDT, "tclk_pmu1wdt", mux_24m_32k_p, 0,
> > +			RK3576_PMU_CLKSEL_CON(4), 15, 1, MFLAGS,
> > +			RK3576_PMU_CLKGATE_CON(4), 6, GFLAGS),
> > +	GATE(PCLK_PMUTIMER, "pclk_pmutimer", "pclk_pmu1_root", 0,
> > +			RK3576_PMU_CLKGATE_CON(4), 7, GFLAGS),
> > +	COMPOSITE_NODIV(CLK_PMUTIMER_ROOT, "clk_pmutimer_root",
> > mux_pmu100m_24m_32k_p, 0, +			
RK3576_PMU_CLKSEL_CON(5), 0, 2, MFLAGS,
> > +			RK3576_PMU_CLKGATE_CON(4), 8, GFLAGS),
> > +	GATE(CLK_PMUTIMER0, "clk_pmutimer0", "clk_pmutimer_root", 0,
> > +			RK3576_PMU_CLKGATE_CON(4), 9, GFLAGS),
> > +	GATE(CLK_PMUTIMER1, "clk_pmutimer1", "clk_pmutimer_root", 0,
> > +			RK3576_PMU_CLKGATE_CON(4), 10, GFLAGS),
> > +	GATE(PCLK_PMU1PWM, "pclk_pmu1pwm", "pclk_pmu1_root", 0,
> > +			RK3576_PMU_CLKGATE_CON(4), 11, GFLAGS),
> > +	COMPOSITE_NODIV(CLK_PMU1PWM, "clk_pmu1pwm", 
mux_pmu100m_pmu50m_24m_p, 0,
> > +			RK3576_PMU_CLKSEL_CON(5), 2, 2, MFLAGS,
> > +			RK3576_PMU_CLKGATE_CON(4), 12, GFLAGS),
> > +	GATE(CLK_PMU1PWM_OSC, "clk_pmu1pwm_osc", "xin24m", 0,
> > +			RK3576_PMU_CLKGATE_CON(4), 13, GFLAGS),
> > +	GATE(PCLK_I2C0, "pclk_i2c0", "pclk_pmu1_root", 0,
> > +			RK3576_PMU_CLKGATE_CON(5), 1, GFLAGS),
> > +	COMPOSITE_NODIV(CLK_I2C0, "clk_i2c0", 
mux_pmu200m_pmu100m_pmu50m_24m_p,
> > 0, +			RK3576_PMU_CLKSEL_CON(6), 7, 2, MFLAGS,
> > +			RK3576_PMU_CLKGATE_CON(5), 2, GFLAGS),
> > +	COMPOSITE_NODIV(SCLK_UART1, "sclk_uart1", uart1_p, 0,
> > +			RK3576_PMU_CLKSEL_CON(8), 0, 1, MFLAGS,
> > +			RK3576_PMU_CLKGATE_CON(5), 5, GFLAGS),
> > +	GATE(PCLK_UART1, "pclk_uart1", "pclk_pmu1_root", 0,
> > +			RK3576_PMU_CLKGATE_CON(5), 6, GFLAGS),
> > +	GATE(CLK_PDM0, "clk_pdm0", "clk_pdm0_src_top", 0,
> > +			RK3576_PMU_CLKGATE_CON(5), 13, GFLAGS),
> > +	GATE(HCLK_PDM0, "hclk_pdm0", "hclk_pmu1_root", 0,
> > +			RK3576_PMU_CLKGATE_CON(5), 15, GFLAGS),
> > +	GATE(MCLK_PDM0, "mclk_pdm0", "mclk_pdm0_src_top", 0,
> > +			RK3576_PMU_CLKGATE_CON(6), 0, GFLAGS),
> > +	GATE(HCLK_VAD, "hclk_vad", "hclk_pmu1_root", 0,
> > +			RK3576_PMU_CLKGATE_CON(6), 1, GFLAGS),
> > +	GATE(CLK_PDM0_OUT, "clk_pdm0_out", "clk_pdm0", 0,
> > +			RK3576_PMU_CLKGATE_CON(6), 8, GFLAGS),
> > +	COMPOSITE(CLK_HPTIMER_SRC, "clk_hptimer_src", cpll_24m_p,
> > CLK_IS_CRITICAL, +			RK3576_PMU_CLKSEL_CON(11), 6, 
1, MFLAGS, 1, 5,
> > DFLAGS,
> > +			RK3576_PMU_CLKGATE_CON(6), 10, GFLAGS),
> > +	GATE(PCLK_GPIO0, "pclk_gpio0", "pclk_pmu0_root", 0,
> > +			RK3576_PMU_CLKGATE_CON(7), 6, GFLAGS),
> > +	COMPOSITE_NODIV(DBCLK_GPIO0, "dbclk_gpio0", mux_24m_32k_p, 0,
> > +			RK3576_PMU_CLKSEL_CON(20), 2, 1, MFLAGS,
> > +			RK3576_PMU_CLKGATE_CON(7), 7, GFLAGS),
> > +	GATE(CLK_OSC0_PMU1, "clk_osc0_pmu1", "xin24m", CLK_IS_CRITICAL,
> > +			RK3576_PMU_CLKGATE_CON(7), 8, GFLAGS),
> > +	GATE(CLK_PMU1PWM_RC, "clk_pmu1pwm_rc", "clk_pvtm_clkout", 0,
> > +			RK3576_PMU_CLKGATE_CON(5), 7, GFLAGS),
> > +
> > +	/* phy ref */
> > +	MUXGRF(CLK_PHY_REF_SRC, "clk_phy_ref_src", clk_phy_ref_src_p,  0,
> > +			RK3576_PMU0_GRF_OSC_CON6, 4, 1, MFLAGS),
> > +	MUXGRF(CLK_USBPHY_REF_SRC, "clk_usbphy_ref_src", 
clk_usbphy_ref_src_p, 
> > 0, +			RK3576_PMU0_GRF_OSC_CON6, 2, 1, MFLAGS),
> > +	MUXGRF(CLK_CPLL_REF_SRC, "clk_cpll_ref_src", clk_cpll_ref_src_p,  
0,
> > +			RK3576_PMU0_GRF_OSC_CON6, 1, 1, MFLAGS),
> > +	MUXGRF(CLK_AUPLL_REF_SRC, "clk_aupll_ref_src", 
clk_aupll_ref_src_p,  0,
> > +			RK3576_PMU0_GRF_OSC_CON6, 0, 1, MFLAGS),
> > +
> > +	/* secure ns */
> > +	COMPOSITE_NODIV(ACLK_SECURE_NS, "aclk_secure_ns",
> > mux_350m_175m_116m_24m_p, CLK_IS_CRITICAL,
> > +			RK3576_SECURE_NS_CLKSEL_CON(0), 0, 2, 
MFLAGS,
> > +			RK3576_SECURE_NS_CLKGATE_CON(0), 0, GFLAGS),
> > +	COMPOSITE_NODIV(HCLK_SECURE_NS, "hclk_secure_ns",
> > mux_175m_116m_58m_24m_p, CLK_IS_CRITICAL,
> > +			RK3576_SECURE_NS_CLKSEL_CON(0), 2, 2, 
MFLAGS,
> > +			RK3576_SECURE_NS_CLKGATE_CON(0), 1, GFLAGS),
> > +	COMPOSITE_NODIV(PCLK_SECURE_NS, "pclk_secure_ns", 
mux_116m_58m_24m_p,
> > CLK_IS_CRITICAL, +			RK3576_SECURE_NS_CLKSEL_CON(0), 
4, 2, MFLAGS,
> > +			RK3576_SECURE_NS_CLKGATE_CON(0), 2, GFLAGS),
> > +	GATE(HCLK_CRYPTO_NS, "hclk_crypto_ns", "hclk_secure_ns", 0,
> > +			RK3576_SECURE_NS_CLKGATE_CON(0), 3, GFLAGS),
> > +	GATE(PCLK_OTPC_NS, "pclk_otpc_ns", "pclk_secure_ns", 0,
> > +			RK3576_SECURE_NS_CLKGATE_CON(0), 8, GFLAGS),
> > +	GATE(CLK_OTPC_NS, "clk_otpc_ns", "xin24m", 0,
> > +			RK3576_SECURE_NS_CLKGATE_CON(0), 9, GFLAGS),
> > +	GATE(ACLK_CRYPTO_NS, "aclk_crypto_ns", "aclk_secure_s", 0,
> > +			RK3576_NON_SECURE_GATING_CON00, 14, GFLAGS),
> > +	GATE(HCLK_TRNG_NS, "hclk_trng_ns", "hclk_secure_s", 0,
> > +			RK3576_NON_SECURE_GATING_CON00, 13, GFLAGS),
> > +	GATE(CLK_PKA_CRYPTO_NS, "clk_pka_crypto_ns", "clk_pka_crypto_s", 
0,
> > +			RK3576_NON_SECURE_GATING_CON00, 1, GFLAGS),
> > +
> > +	/* io */
> > +	GATE(CLK_VICAP_I0CLK, "clk_vicap_i0clk", "clk_csihost0_clkdata_i", 
0,
> > +			RK3576_CLKGATE_CON(59), 1, GFLAGS),
> > +	GATE(CLK_VICAP_I1CLK, "clk_vicap_i1clk", "clk_csihost1_clkdata_i", 
0,
> > +			RK3576_CLKGATE_CON(59), 2, GFLAGS),
> > +	GATE(CLK_VICAP_I2CLK, "clk_vicap_i2clk", "clk_csihost2_clkdata_i", 
0,
> > +			RK3576_CLKGATE_CON(59), 3, GFLAGS),
> > +	GATE(CLK_VICAP_I3CLK, "clk_vicap_i3clk", "clk_csihost3_clkdata_i", 
0,
> > +			RK3576_CLKGATE_CON(59), 4, GFLAGS),
> > +	GATE(CLK_VICAP_I4CLK, "clk_vicap_i4clk", "clk_csihost4_clkdata_i", 
0,
> > +			RK3576_CLKGATE_CON(59), 5, GFLAGS),
> > +};
> > +
> > +static void __init rk3576_clk_init(struct device_node *np)
> > +{
> > +	struct rockchip_clk_provider *ctx;
> > +	unsigned long clk_nr_clks;
> > +	void __iomem *reg_base;
> > +
> > +	clk_nr_clks = rockchip_clk_find_max_clk_id(rk3576_clk_branches,
> > +					
ARRAY_SIZE(rk3576_clk_branches)) + 1;
> > +
> > +	reg_base = of_iomap(np, 0);
> > +	if (!reg_base) {
> > +		pr_err("%s: could not map cru region\n", __func__);
> > +		return;
> > +	}
> > +
> > +	ctx = rockchip_clk_init(np, reg_base, clk_nr_clks);
> > +	if (IS_ERR(ctx)) {
> > +		pr_err("%s: rockchip clk init failed\n", __func__);
> > +		iounmap(reg_base);
> > +		return;
> > +	}
> > +
> > +	rockchip_clk_register_plls(ctx, rk3576_pll_clks,
> > +				   ARRAY_SIZE(rk3576_pll_clks),
> > +				   RK3576_GRF_SOC_STATUS0);
> > +
> > +	rockchip_clk_register_armclk(ctx, ARMCLK_L, "armclk_l",
> > +			mux_armclkl_p, ARRAY_SIZE(mux_armclkl_p),
> > +			&rk3576_cpulclk_data, rk3576_cpulclk_rates,
> > +			ARRAY_SIZE(rk3576_cpulclk_rates));
> > +	rockchip_clk_register_armclk(ctx, ARMCLK_B, "armclk_b",
> > +			mux_armclkb_p, ARRAY_SIZE(mux_armclkb_p),
> > +			&rk3576_cpubclk_data, rk3576_cpubclk_rates,
> > +			ARRAY_SIZE(rk3576_cpubclk_rates));
> > +
> > +	rockchip_clk_register_branches(ctx, rk3576_clk_branches,
> > +				       
ARRAY_SIZE(rk3576_clk_branches));
> > +
> > +	rk3588_rst_init(np, reg_base);
> > +
> > +	rockchip_register_restart_notifier(ctx, RK3576_GLB_SRST_FST, NULL);
> > +
> > +	rockchip_clk_of_add_provider(np, ctx);
> > +}
> > +
> > +CLK_OF_DECLARE(rk3576_cru, "rockchip,rk3576-cru", rk3576_clk_init);
> > +
> > +#ifdef MODULE
> > +struct clk_rk3576_inits {
> > +	void (*inits)(struct device_node *np);
> > +};
> > +
> > +static const struct clk_rk3576_inits clk_rk3576_cru_init = {
> > +	.inits = rk3576_clk_init,
> > +};
> > +
> > +static const struct of_device_id clk_rk3576_match_table[] = {
> > +	{
> > +		.compatible = "rockchip,rk3576-cru",
> > +		.data = &clk_rk3576_cru_init,
> > +	},
> > +	{ }
> > +};
> > +MODULE_DEVICE_TABLE(of, clk_rk3576_match_table);
> > +
> > +static int clk_rk3576_probe(struct platform_device *pdev)
> > +{
> > +	struct device_node *np = pdev->dev.of_node;
> > +	const struct of_device_id *match;
> > +	const struct clk_rk3576_inits *init_data;
> > +
> > +	match = of_match_device(clk_rk3576_match_table, &pdev->dev);
> > +	if (!match || !match->data)
> > +		return -EINVAL;
> > +
> > +	init_data = match->data;
> > +	if (init_data->inits)
> > +		init_data->inits(np);
> > +
> > +	return 0;
> > +}
> > +
> > +static struct platform_driver clk_rk3576_driver = {
> > +	.probe		= clk_rk3576_probe,
> > +	.driver		= {
> > +		.name	= "clk-rk3576",
> > +		.of_match_table = clk_rk3576_match_table,
> > +		.suppress_bind_attrs = true,
> > +	},
> > +};
> > +module_platform_driver(clk_rk3576_driver);
> > +
> > +MODULE_DESCRIPTION("Rockchip RK3576 Clock Driver");
> > +MODULE_LICENSE("GPL");
> > +#endif /* MODULE */
> > diff --git a/drivers/clk/rockchip/clk.h b/drivers/clk/rockchip/clk.h
> > index fd3b476dedda9..43eaeac8a8f62 100644
> > --- a/drivers/clk/rockchip/clk.h
> > +++ b/drivers/clk/rockchip/clk.h
> > @@ -235,6 +235,58 @@ struct clk;
> > 
> >   #define RK3568_PMU_CLKGATE_CON(x)	((x) * 0x4 + 0x180)
> >   #define RK3568_PMU_SOFTRST_CON(x)	((x) * 0x4 + 0x200)
> > 
> > +#define RK3576_PHP_CRU_BASE		0x8000
> > +#define RK3576_SECURE_NS_CRU_BASE	0x10000
> > +#define RK3576_PMU_CRU_BASE		0x20000
> > +#define RK3576_BIGCORE_CRU_BASE		0x38000
> > +#define RK3576_LITCORE_CRU_BASE		0x40000
> > +#define RK3576_CCI_CRU_BASE		0x48000
> > +
> > +#define RK3576_PLL_CON(x)		RK2928_PLL_CON(x)
> > +#define RK3576_MODE_CON0		0x280
> > +#define RK3576_BPLL_MODE_CON0		(RK3576_BIGCORE_CRU_BASE 
+ 0x280)
> > +#define RK3576_LPLL_MODE_CON0		(RK3576_LITCORE_CRU_BASE 
+ 0x280)
> > +#define RK3576_PPLL_MODE_CON0		(RK3576_PHP_CRU_BASE + 
0x280)
> > +#define RK3576_CLKSEL_CON(x)		((x) * 0x4 + 0x300)
> > +#define RK3576_CLKGATE_CON(x)		((x) * 0x4 + 0x800)
> > +#define RK3576_SOFTRST_CON(x)		((x) * 0x4 + 0xa00)
> > +#define RK3576_GLB_CNT_TH		0xc00
> > +#define RK3576_GLB_SRST_FST		0xc08
> > +#define RK3576_GLB_SRST_SND		0xc0c
> > +#define RK3576_GLB_RST_CON		0xc10
> > +#define RK3576_GLB_RST_ST		0xc04
> > +#define RK3576_SDIO_CON0		0xC24
> > +#define RK3576_SDIO_CON1		0xC28
> > +#define RK3576_SDMMC_CON0		0xC30
> > +#define RK3576_SDMMC_CON1		0xC34
> > +
> > +#define RK3576_PHP_CLKSEL_CON(x)	((x) * 0x4 + RK3576_PHP_CRU_BASE 
+
> > 0x300)
> > +#define RK3576_PHP_CLKGATE_CON(x)	((x) * 0x4 + RK3576_PHP_CRU_BASE +
> > 0x800) +#define RK3576_PHP_SOFTRST_CON(x)	((x) * 0x4 +
> > RK3576_PHP_CRU_BASE + 0xa00) +
> > +#define RK3576_PMU_PLL_CON(x)		((x) * 0x4 + RK3576_PHP_CRU_BASE)
> > +#define RK3576_PMU_CLKSEL_CON(x)	((x) * 0x4 + RK3576_PMU_CRU_BASE +
> > 0x300)
> > +#define RK3576_PMU_CLKGATE_CON(x)	((x) * 0x4 + RK3576_PMU_CRU_BASE +
> > 0x800) +#define RK3576_PMU_SOFTRST_CON(x)	((x) * 0x4 +
> > RK3576_PMU_CRU_BASE + 0xa00) +
> > +#define RK3576_SECURE_NS_CLKSEL_CON(x)	((x) * 0x4 +
> > RK3576_SECURE_NS_CRU_BASE + 0x300) +#define
> > RK3576_SECURE_NS_CLKGATE_CON(x)	((x) * 0x4 + 
RK3576_SECURE_NS_CRU_BASE +
> > 0x800) +#define RK3576_SECURE_NS_SOFTRST_CON(x)	((x) * 0x4 +
> > RK3576_SECURE_NS_CRU_BASE + 0xa00) +
> > +#define RK3576_CCI_CLKSEL_CON(x)	((x) * 0x4 + RK3576_CCI_CRU_BASE 
+
> > 0x300)
> > +#define RK3576_CCI_CLKGATE_CON(x)	((x) * 0x4 + RK3576_CCI_CRU_BASE 
+
> > 0x800) +#define RK3576_CCI_SOFTRST_CON(x)	((x) * 0x4 +
> > RK3576_CCI_CRU_BASE + 0xa00) +
> > +#define RK3576_BPLL_CON(x)		((x) * 0x4 + 
RK3576_BIGCORE_CRU_BASE)
> > +#define RK3576_BIGCORE_CLKSEL_CON(x)	((x) * 0x4 + 
RK3576_BIGCORE_CRU_BASE
> > + 0x300) +#define RK3576_BIGCORE_CLKGATE_CON(x)	((x) * 0x4 +
> > RK3576_BIGCORE_CRU_BASE + 0x800) +#define
> > RK3576_BIGCORE_SOFTRST_CON(x)	((x) * 0x4 + RK3576_BIGCORE_CRU_BASE +
> > 0xa00) +#define RK3576_LPLL_CON(x)		((x) * 0x4 + 
RK3576_CCI_CRU_BASE)
> > +#define RK3576_LITCORE_CLKSEL_CON(x)	((x) * 0x4 + 
RK3576_LITCORE_CRU_BASE
> > + 0x300) +#define RK3576_LITCORE_CLKGATE_CON(x)	((x) * 0x4 +
> > RK3576_LITCORE_CRU_BASE + 0x800) +#define
> > RK3576_LITCORE_SOFTRST_CON(x)	((x) * 0x4 + RK3576_LITCORE_CRU_BASE +
> > 0xa00) +#define RK3576_NON_SECURE_GATING_CON00	0xc48
> > +
> > 
> >   #define RK3588_PHP_CRU_BASE		0x8000
> >   #define RK3588_PMU_CRU_BASE		0x30000
> >   #define RK3588_BIGCORE0_CRU_BASE	0x50000
> > 
> > @@ -1025,6 +1077,7 @@ static inline void rockchip_register_softrst(struct
> > device_node *np,> 
> >   	return rockchip_register_softrst_lut(np, NULL, num_regs, base, 
flags);
> >   
> >   }
> > 
> > +void rk3576_rst_init(struct device_node *np, void __iomem *reg_base);
> > 
> >   void rk3588_rst_init(struct device_node *np, void __iomem *reg_base);
> >   
> >   #endif
> > 
> > diff --git a/drivers/clk/rockchip/rst-rk3576.c
> > b/drivers/clk/rockchip/rst-rk3576.c new file mode 100644
> > index 0000000000000..0bc876228be05
> > --- /dev/null
> > +++ b/drivers/clk/rockchip/rst-rk3576.c
> > @@ -0,0 +1,555 @@
> > +// SPDX-License-Identifier: GPL-2.0-or-later
> > +/*
> > + * Copyright (c) 2021 Rockchip Electronics Co., Ltd.
> > + * Copyright (c) 2024 Collabora Ltd.
> > + * Author: Detlev Casanova <detlev.casanova@collabora.com>
> > + * Based on Sebastien Reichel's implementation for RK3588
> > + */
> > +
> > +#include <linux/module.h>
> > +#include <linux/of.h>
> > +#include <dt-bindings/reset/rockchip,rk3576-cru.h>
> > +#include "clk.h"
> > +
> > +/* 0x27200000 + 0x0A00 */
> > +#define RK3576_CRU_RESET_OFFSET(id, reg, bit) [id] = (0 + reg * 16 + bit)
> > +
> > +/* mapping table for reset ID to register offset */
> > +static const int rk3576_register_offset[] = {
> > +	/* SOFTRST_CON01 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_TOP_BIU, 1, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_TOP_BIU, 1, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_TOP_MID_BIU, 1, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_SECURE_HIGH_BIU, 1, 7),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_TOP_BIU, 1, 14),
> > +
> > +	/* SOFTRST_CON02 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_VO0VOP_CHANNEL_BIU, 2, 0),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_VO0VOP_CHANNEL_BIU, 2, 1),
> > +
> > +	/* SOFTRST_CON06 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_BISRINTF, 6, 2),
> > +
> > +	/* SOFTRST_CON07 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_AUDIO_BIU, 7, 2),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_ASRC_2CH_0, 7, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_ASRC_2CH_1, 7, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_ASRC_4CH_0, 7, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_ASRC_4CH_1, 7, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_ASRC_2CH_0, 7, 7),
> > +	RK3576_CRU_RESET_OFFSET(SRST_ASRC_2CH_1, 7, 8),
> > +	RK3576_CRU_RESET_OFFSET(SRST_ASRC_4CH_0, 7, 9),
> > +	RK3576_CRU_RESET_OFFSET(SRST_ASRC_4CH_1, 7, 10),
> > +	RK3576_CRU_RESET_OFFSET(SRST_M_SAI0_8CH, 7, 12),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_SAI0_8CH, 7, 13),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_RX0, 7, 14),
> > +	RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_RX0, 7, 15),
> > +
> > +	/* SOFTRST_CON08 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_RX1, 8, 0),
> > +	RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_RX1, 8, 1),
> > +	RK3576_CRU_RESET_OFFSET(SRST_M_SAI1_8CH, 8, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_SAI1_8CH, 8, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_M_SAI2_2CH, 8, 8),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_SAI2_2CH, 8, 10),
> > +	RK3576_CRU_RESET_OFFSET(SRST_M_SAI3_2CH, 8, 12),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_SAI3_2CH, 8, 14),
> > +
> > +	/* SOFTRST_CON09 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_M_SAI4_2CH, 9, 0),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_SAI4_2CH, 9, 2),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_ACDCDIG_DSM, 9, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_M_ACDCDIG_DSM, 9, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_PDM1, 9, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_PDM1, 9, 7),
> > +	RK3576_CRU_RESET_OFFSET(SRST_M_PDM1, 9, 8),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_TX0, 9, 9),
> > +	RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_TX0, 9, 10),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_TX1, 9, 11),
> > +	RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_TX1, 9, 12),
> > +
> > +	/* SOFTRST_CON11 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_BUS_BIU, 11, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_BUS_BIU, 11, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_CRU, 11, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_CAN0, 11, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_CAN0, 11, 7),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_CAN1, 11, 8),
> > +	RK3576_CRU_RESET_OFFSET(SRST_CAN1, 11, 9),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_INTMUX2BUS, 11, 12),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_VCCIO_IOC, 11, 13),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_BUS_BIU, 11, 14),
> > +	RK3576_CRU_RESET_OFFSET(SRST_KEY_SHIFT, 11, 15),
> > +
> > +	/* SOFTRST_CON12 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_I2C1, 12, 0),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_I2C2, 12, 1),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_I2C3, 12, 2),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_I2C4, 12, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_I2C5, 12, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_I2C6, 12, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_I2C7, 12, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_I2C8, 12, 7),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_I2C9, 12, 8),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_WDT_BUSMCU, 12, 9),
> > +	RK3576_CRU_RESET_OFFSET(SRST_T_WDT_BUSMCU, 12, 10),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_GIC, 12, 11),
> > +	RK3576_CRU_RESET_OFFSET(SRST_I2C1, 12, 12),
> > +	RK3576_CRU_RESET_OFFSET(SRST_I2C2, 12, 13),
> > +	RK3576_CRU_RESET_OFFSET(SRST_I2C3, 12, 14),
> > +	RK3576_CRU_RESET_OFFSET(SRST_I2C4, 12, 15),
> > +
> > +	/* SOFTRST_CON13 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_I2C5, 13, 0),
> > +	RK3576_CRU_RESET_OFFSET(SRST_I2C6, 13, 1),
> > +	RK3576_CRU_RESET_OFFSET(SRST_I2C7, 13, 2),
> > +	RK3576_CRU_RESET_OFFSET(SRST_I2C8, 13, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_I2C9, 13, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_SARADC, 13, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_SARADC, 13, 7),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_TSADC, 13, 8),
> > +	RK3576_CRU_RESET_OFFSET(SRST_TSADC, 13, 9),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_UART0, 13, 10),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_UART2, 13, 11),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_UART3, 13, 12),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_UART4, 13, 13),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_UART5, 13, 14),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_UART6, 13, 15),
> > +
> > +	/* SOFTRST_CON14 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_UART7, 14, 0),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_UART8, 14, 1),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_UART9, 14, 2),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_UART10, 14, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_UART11, 14, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_S_UART0, 14, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_S_UART2, 14, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_S_UART3, 14, 9),
> > +	RK3576_CRU_RESET_OFFSET(SRST_S_UART4, 14, 12),
> > +	RK3576_CRU_RESET_OFFSET(SRST_S_UART5, 14, 15),
> > +
> > +	/* SOFTRST_CON15 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_S_UART6, 15, 2),
> > +	RK3576_CRU_RESET_OFFSET(SRST_S_UART7, 15, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_S_UART8, 15, 8),
> > +	RK3576_CRU_RESET_OFFSET(SRST_S_UART9, 15, 9),
> > +	RK3576_CRU_RESET_OFFSET(SRST_S_UART10, 15, 10),
> > +	RK3576_CRU_RESET_OFFSET(SRST_S_UART11, 15, 11),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_SPI0, 15, 13),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_SPI1, 15, 14),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_SPI2, 15, 15),
> > +
> > +	/* SOFTRST_CON16 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_SPI3, 16, 0),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_SPI4, 16, 1),
> > +	RK3576_CRU_RESET_OFFSET(SRST_SPI0, 16, 2),
> > +	RK3576_CRU_RESET_OFFSET(SRST_SPI1, 16, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_SPI2, 16, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_SPI3, 16, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_SPI4, 16, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_WDT0, 16, 7),
> > +	RK3576_CRU_RESET_OFFSET(SRST_T_WDT0, 16, 8),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_SYS_GRF, 16, 9),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_PWM1, 16, 10),
> > +	RK3576_CRU_RESET_OFFSET(SRST_PWM1, 16, 11),
> > +
> > +	/* SOFTRST_CON17 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_BUSTIMER0, 17, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_BUSTIMER1, 17, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_TIMER0, 17, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_TIMER1, 17, 7),
> > +	RK3576_CRU_RESET_OFFSET(SRST_TIMER2, 17, 8),
> > +	RK3576_CRU_RESET_OFFSET(SRST_TIMER3, 17, 9),
> > +	RK3576_CRU_RESET_OFFSET(SRST_TIMER4, 17, 10),
> > +	RK3576_CRU_RESET_OFFSET(SRST_TIMER5, 17, 11),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_BUSIOC, 17, 12),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_MAILBOX0, 17, 13),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_GPIO1, 17, 15),
> > +
> > +	/* SOFTRST_CON18 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_GPIO1, 18, 0),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_GPIO2, 18, 1),
> > +	RK3576_CRU_RESET_OFFSET(SRST_GPIO2, 18, 2),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_GPIO3, 18, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_GPIO3, 18, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_GPIO4, 18, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_GPIO4, 18, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_DECOM, 18, 7),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_DECOM, 18, 8),
> > +	RK3576_CRU_RESET_OFFSET(SRST_D_DECOM, 18, 9),
> > +	RK3576_CRU_RESET_OFFSET(SRST_TIMER6, 18, 11),
> > +	RK3576_CRU_RESET_OFFSET(SRST_TIMER7, 18, 12),
> > +	RK3576_CRU_RESET_OFFSET(SRST_TIMER8, 18, 13),
> > +	RK3576_CRU_RESET_OFFSET(SRST_TIMER9, 18, 14),
> > +	RK3576_CRU_RESET_OFFSET(SRST_TIMER10, 18, 15),
> > +
> > +	/* SOFTRST_CON19 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_TIMER11, 19, 0),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_DMAC0, 19, 1),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_DMAC1, 19, 2),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_DMAC2, 19, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_SPINLOCK, 19, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_REF_PVTPLL_BUS, 19, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_I3C0, 19, 7),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_I3C1, 19, 9),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_BUS_CM0_BIU, 19, 11),
> > +	RK3576_CRU_RESET_OFFSET(SRST_F_BUS_CM0_CORE, 19, 12),
> > +	RK3576_CRU_RESET_OFFSET(SRST_T_BUS_CM0_JTAG, 19, 13),
> > +
> > +	/* SOFTRST_CON20 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_INTMUX2PMU, 20, 0),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_INTMUX2DDR, 20, 1),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_PVTPLL_BUS, 20, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_PWM2, 20, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_PWM2, 20, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_FREQ_PWM1, 20, 8),
> > +	RK3576_CRU_RESET_OFFSET(SRST_COUNTER_PWM1, 20, 9),
> > +	RK3576_CRU_RESET_OFFSET(SRST_I3C0, 20, 12),
> > +	RK3576_CRU_RESET_OFFSET(SRST_I3C1, 20, 13),
> > +
> > +	/* SOFTRST_CON21 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_DDR_MON_CH0, 21, 1),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_DDR_BIU, 21, 2),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_DDR_UPCTL_CH0, 21, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_TM_DDR_MON_CH0, 21, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_BIU, 21, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_DFI_CH0, 21, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_DDR_MON_CH0, 21, 10),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_DDR_HWLP_CH0, 21, 13),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_DDR_MON_CH1, 21, 14),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_DDR_HWLP_CH1, 21, 15),
> > +
> > +	/* SOFTRST_CON22 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_DDR_UPCTL_CH1, 22, 0),
> > +	RK3576_CRU_RESET_OFFSET(SRST_TM_DDR_MON_CH1, 22, 1),
> > +	RK3576_CRU_RESET_OFFSET(SRST_DFI_CH1, 22, 2),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR01_MSCH0, 22, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR01_MSCH1, 22, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_DDR_MON_CH1, 22, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_DDR_SCRAMBLE_CH0, 22, 9),
> > +	RK3576_CRU_RESET_OFFSET(SRST_DDR_SCRAMBLE_CH1, 22, 10),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_AHB2APB, 22, 12),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_AHB2APB, 22, 13),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_DDR_BIU, 22, 14),
> > +	RK3576_CRU_RESET_OFFSET(SRST_F_DDR_CM0_CORE, 22, 15),
> > +
> > +	/* SOFTRST_CON23 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_DDR01_MSCH0, 23, 1),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_DDR01_MSCH1, 23, 2),
> > +	RK3576_CRU_RESET_OFFSET(SRST_DDR_TIMER0, 23, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_DDR_TIMER1, 23, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_T_WDT_DDR, 23, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_WDT, 23, 7),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_TIMER, 23, 8),
> > +	RK3576_CRU_RESET_OFFSET(SRST_T_DDR_CM0_JTAG, 23, 9),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_DDR_GRF, 23, 11),
> > +
> > +	/* SOFTRST_CON25 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_DDR_UPCTL_CH0, 25, 1),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_0_CH0, 25, 2),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_1_CH0, 25, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_2_CH0, 25, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_3_CH0, 25, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_4_CH0, 25, 6),
> > +
> > +	/* SOFTRST_CON26 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_DDR_UPCTL_CH1, 26, 1),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_0_CH1, 26, 2),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_1_CH1, 26, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_2_CH1, 26, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_3_CH1, 26, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_4_CH1, 26, 6),
> > +
> > +	/* SOFTRST_CON27 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_REF_PVTPLL_DDR, 27, 0),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_PVTPLL_DDR, 27, 1),
> > +
> > +	/* SOFTRST_CON28 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_RKNN0, 28, 9),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_RKNN0_BIU, 28, 11),
> > +	RK3576_CRU_RESET_OFFSET(SRST_L_RKNN0_BIU, 28, 12),
> > +
> > +	/* SOFTRST_CON29 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_RKNN1, 29, 0),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_RKNN1_BIU, 29, 2),
> > +	RK3576_CRU_RESET_OFFSET(SRST_L_RKNN1_BIU, 29, 3),
> > +
> > +	/* SOFTRST_CON31 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_NPU_DAP, 31, 0),
> > +	RK3576_CRU_RESET_OFFSET(SRST_L_NPUSUBSYS_BIU, 31, 1),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_NPUTOP_BIU, 31, 9),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_NPU_TIMER, 31, 10),
> > +	RK3576_CRU_RESET_OFFSET(SRST_NPUTIMER0, 31, 12),
> > +	RK3576_CRU_RESET_OFFSET(SRST_NPUTIMER1, 31, 13),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_NPU_WDT, 31, 14),
> > +	RK3576_CRU_RESET_OFFSET(SRST_T_NPU_WDT, 31, 15),
> > +
> > +	/* SOFTRST_CON32 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_RKNN_CBUF, 32, 0),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_RVCORE0, 32, 1),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_NPU_GRF, 32, 2),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_PVTPLL_NPU, 32, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_NPU_PVTPLL, 32, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_NPU_CM0_BIU, 32, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_F_NPU_CM0_CORE, 32, 7),
> > +	RK3576_CRU_RESET_OFFSET(SRST_T_NPU_CM0_JTAG, 32, 8),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_RKNNTOP_BIU, 32, 11),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_RKNN_CBUF, 32, 12),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_RKNNTOP_BIU, 32, 13),
> > +
> > +	/* SOFTRST_CON33 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_NVM_BIU, 33, 2),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_NVM_BIU, 33, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_S_FSPI, 33, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_FSPI, 33, 7),
> > +	RK3576_CRU_RESET_OFFSET(SRST_C_EMMC, 33, 8),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_EMMC, 33, 9),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_EMMC, 33, 10),
> > +	RK3576_CRU_RESET_OFFSET(SRST_B_EMMC, 33, 11),
> > +	RK3576_CRU_RESET_OFFSET(SRST_T_EMMC, 33, 12),
> > +
> > +	/* SOFTRST_CON34 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_GRF, 34, 1),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_PHP_BIU, 34, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_PHP_BIU, 34, 9),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_PCIE0, 34, 13),
> > +	RK3576_CRU_RESET_OFFSET(SRST_PCIE0_POWER_UP, 34, 15),
> > +
> > +	/* SOFTRST_CON35 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_USB3OTG1, 35, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_MMU0, 35, 11),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_SLV_MMU0, 35, 13),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_MMU1, 35, 14),
> > +
> > +	/* SOFTRST_CON36 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_SLV_MMU1, 36, 0),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_PCIE1, 36, 7),
> > +	RK3576_CRU_RESET_OFFSET(SRST_PCIE1_POWER_UP, 36, 9),
> > +
> > +	/* SOFTRST_CON37 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_RXOOB0, 37, 0),
> > +	RK3576_CRU_RESET_OFFSET(SRST_RXOOB1, 37, 1),
> > +	RK3576_CRU_RESET_OFFSET(SRST_PMALIVE0, 37, 2),
> > +	RK3576_CRU_RESET_OFFSET(SRST_PMALIVE1, 37, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_SATA0, 37, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_SATA1, 37, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_ASIC1, 37, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_ASIC0, 37, 7),
> > +
> > +	/* SOFTRST_CON40 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_CSIDPHY1, 40, 2),
> > +	RK3576_CRU_RESET_OFFSET(SRST_SCAN_CSIDPHY1, 40, 3),
> > +
> > +	/* SOFTRST_CON42 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_SDGMAC_GRF, 42, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_SDGMAC_BIU, 42, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_SDGMAC_BIU, 42, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_SDGMAC_BIU, 42, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_GMAC0, 42, 7),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_GMAC1, 42, 8),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_GMAC0, 42, 9),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_GMAC1, 42, 10),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_SDIO, 42, 12),
> > +
> > +	/* SOFTRST_CON43 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_SDMMC0, 43, 2),
> > +	RK3576_CRU_RESET_OFFSET(SRST_S_FSPI1, 43, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_FSPI1, 43, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_DSMC_BIU, 43, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_DSMC, 43, 7),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_DSMC, 43, 8),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_HSGPIO, 43, 10),
> > +	RK3576_CRU_RESET_OFFSET(SRST_HSGPIO, 43, 11),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_HSGPIO, 43, 13),
> > +
> > +	/* SOFTRST_CON45 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_RKVDEC, 45, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_RKVDEC_BIU, 45, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_RKVDEC_BIU, 45, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_RKVDEC_HEVC_CA, 45, 8),
> > +	RK3576_CRU_RESET_OFFSET(SRST_RKVDEC_CORE, 45, 9),
> > +
> > +	/* SOFTRST_CON47 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_USB_BIU, 47, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_USBUFS_BIU, 47, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_USB3OTG0, 47, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_UFS_BIU, 47, 10),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_MMU2, 47, 12),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_SLV_MMU2, 47, 13),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_UFS_SYS, 47, 15),
> > +
> > +	/* SOFTRST_CON48 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_UFS, 48, 0),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_USBUFS_GRF, 48, 1),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_UFS_GRF, 48, 2),
> > +
> > +	/* SOFTRST_CON49 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_VPU_BIU, 49, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_JPEG_BIU, 49, 7),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_RGA_BIU, 49, 10),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_VDPP_BIU, 49, 11),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_EBC_BIU, 49, 12),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_RGA2E_0, 49, 13),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_RGA2E_0, 49, 14),
> > +	RK3576_CRU_RESET_OFFSET(SRST_CORE_RGA2E_0, 49, 15),
> > +
> > +	/* SOFTRST_CON50 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_JPEG, 50, 0),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_JPEG, 50, 1),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_VDPP, 50, 2),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_VDPP, 50, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_CORE_VDPP, 50, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_RGA2E_1, 50, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_RGA2E_1, 50, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_CORE_RGA2E_1, 50, 7),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_EBC, 50, 10),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_EBC, 50, 11),
> > +	RK3576_CRU_RESET_OFFSET(SRST_D_EBC, 50, 12),
> > +
> > +	/* SOFTRST_CON51 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_VEPU0_BIU, 51, 2),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_VEPU0_BIU, 51, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_VEPU0, 51, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_VEPU0, 51, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_VEPU0_CORE, 51, 6),
> > +
> > +	/* SOFTRST_CON53 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_VI_BIU, 53, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_VI_BIU, 53, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_VI_BIU, 53, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_D_VICAP, 53, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_VICAP, 53, 7),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_VICAP, 53, 8),
> > +	RK3576_CRU_RESET_OFFSET(SRST_ISP0, 53, 10),
> > +	RK3576_CRU_RESET_OFFSET(SRST_ISP0_VICAP, 53, 11),
> > +
> > +	/* SOFTRST_CON54 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_CORE_VPSS, 54, 1),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_CSI_HOST_0, 54, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_CSI_HOST_1, 54, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_CSI_HOST_2, 54, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_CSI_HOST_3, 54, 7),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_CSI_HOST_4, 54, 8),
> > +
> > +	/* SOFTRST_CON59 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_CIFIN, 59, 0),
> > +	RK3576_CRU_RESET_OFFSET(SRST_VICAP_I0CLK, 59, 1),
> > +	RK3576_CRU_RESET_OFFSET(SRST_VICAP_I1CLK, 59, 2),
> > +	RK3576_CRU_RESET_OFFSET(SRST_VICAP_I2CLK, 59, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_VICAP_I3CLK, 59, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_VICAP_I4CLK, 59, 5),
> > +
> > +	/* SOFTRST_CON61 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_VOP_BIU, 61, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_VOP2_BIU, 61, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_VOP_BIU, 61, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_VOP_BIU, 61, 7),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_VOP, 61, 8),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_VOP, 61, 9),
> > +	RK3576_CRU_RESET_OFFSET(SRST_D_VP0, 61, 13),
> > +
> > +	/* SOFTRST_CON62 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_D_VP1, 62, 0),
> > +	RK3576_CRU_RESET_OFFSET(SRST_D_VP2, 62, 1),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_VOP2_BIU, 62, 2),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_VOPGRF, 62, 3),
> > +
> > +	/* SOFTRST_CON63 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_VO0_BIU, 63, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_VO0_BIU, 63, 7),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_HDCP0_BIU, 63, 9),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_VO0_GRF, 63, 10),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_HDCP0, 63, 12),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_HDCP0, 63, 13),
> > +	RK3576_CRU_RESET_OFFSET(SRST_HDCP0, 63, 14),
> > +
> > +	/* SOFTRST_CON64 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_DSIHOST0, 64, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_DSIHOST0, 64, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_HDMITX0, 64, 7),
> > +	RK3576_CRU_RESET_OFFSET(SRST_HDMITX0_REF, 64, 9),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_EDP0, 64, 13),
> > +	RK3576_CRU_RESET_OFFSET(SRST_EDP0_24M, 64, 14),
> > +
> > +	/* SOFTRST_CON65 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_M_SAI5_8CH, 65, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_SAI5_8CH, 65, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_M_SAI6_8CH, 65, 8),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_SAI6_8CH, 65, 9),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_TX2, 65, 10),
> > +	RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_TX2, 65, 13),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_RX2, 65, 14),
> > +	RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_RX2, 65, 15),
> > +
> > +	/* SOFTRST_CON66 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_SAI8_8CH, 66, 0),
> > +	RK3576_CRU_RESET_OFFSET(SRST_M_SAI8_8CH, 66, 2),
> > +
> > +	/* SOFTRST_CON67 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_VO1_BIU, 67, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_VO1_BIU, 67, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_M_SAI7_8CH, 67, 9),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_SAI7_8CH, 67, 10),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_TX3, 67, 11),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_TX4, 67, 12),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_TX5, 67, 13),
> > +	RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_TX3, 67, 14),
> > +
> > +	/* SOFTRST_CON68 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_DP0, 68, 0),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_VO1_GRF, 68, 2),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_HDCP1_BIU, 68, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_HDCP1, 68, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_HDCP1, 68, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_HDCP1, 68, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_SAI9_8CH, 68, 9),
> > +	RK3576_CRU_RESET_OFFSET(SRST_M_SAI9_8CH, 68, 11),
> > +	RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_TX4, 68, 12),
> > +	RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_TX5, 68, 13),
> > +
> > +	/* SOFTRST_CON69 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_GPU, 69, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_S_GPU_BIU, 69, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_M0_GPU_BIU, 69, 7),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_GPU_BIU, 69, 9),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_GPU_GRF, 69, 13),
> > +	RK3576_CRU_RESET_OFFSET(SRST_GPU_PVTPLL, 69, 14),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_PVTPLL_GPU, 69, 15),
> > +
> > +	/* SOFTRST_CON72 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_CENTER_BIU, 72, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_DMA2DDR, 72, 5),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_SHAREMEM, 72, 6),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_DDR_SHAREMEM_BIU, 72, 7),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_CENTER_BIU, 72, 8),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_CENTER_GRF, 72, 9),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_DMA2DDR, 72, 10),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_SHAREMEM, 72, 11),
> > +	RK3576_CRU_RESET_OFFSET(SRST_P_CENTER_BIU, 72, 12),
> > +
> > +	/* SOFTRST_CON75 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_LINKSYM_HDMITXPHY0, 75, 1),
> > +
> > +	/* SOFTRST_CON78 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_DP0_PIXELCLK, 78, 1),
> > +	RK3576_CRU_RESET_OFFSET(SRST_PHY_DP0_TX, 78, 2),
> > +	RK3576_CRU_RESET_OFFSET(SRST_DP1_PIXELCLK, 78, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_DP2_PIXELCLK, 78, 4),
> > +
> > +	/* SOFTRST_CON79 */
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_VEPU1_BIU, 79, 1),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_VEPU1_BIU, 79, 2),
> > +	RK3576_CRU_RESET_OFFSET(SRST_H_VEPU1, 79, 3),
> > +	RK3576_CRU_RESET_OFFSET(SRST_A_VEPU1, 79, 4),
> > +	RK3576_CRU_RESET_OFFSET(SRST_VEPU1_CORE, 79, 5),
> > +};
> > +
> > +void rk3576_rst_init(struct device_node *np, void __iomem *reg_base)
> > +{
> > +	rockchip_register_softrst_lut(np,
> > +				      rk3576_register_offset,
> > +				      
ARRAY_SIZE(rk3576_register_offset),
> > +				      reg_base + 
RK3576_SOFTRST_CON(0),
> > +				      
ROCKCHIP_SOFTRST_HIWORD_MASK);
> > +}
> > +





^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 3/3] clk: rockchip: Add clock controller for the RK3576
  2024-08-06 14:15     ` Detlev Casanova
@ 2024-08-06 15:13       ` Heiko Stübner
  0 siblings, 0 replies; 13+ messages in thread
From: Heiko Stübner @ 2024-08-06 15:13 UTC (permalink / raw)
  To: linux-kernel, zhangqing, Detlev Casanova
  Cc: Michael Turquette, Stephen Boyd, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Philipp Zabel, linux-clk, devicetree,
	linux-arm-kernel, linux-rockchip, kernel, Finley Xiao,
	YouMin Chen, Liang Chen, Sugar Zhang

Hi Detlev,

Am Dienstag, 6. August 2024, 16:15:41 CEST schrieb Detlev Casanova:
> The suggestion from Heiko was that those reset should be managed by the 
> subsystems that use them, because they are on a different offset and therefore 
> seem to be on a different core.
> 
> But I think I will include them here like you suggested because:
>  - That's actually how it is done for rk3588 (which is quite close th rk3576),
>  - According to you and the TRM, those resets are on the same core, just with 
> big offsets.
> 
> Having the same structure for both SoC makes sense for maintening them.

Just without the big offsets between areas please.
Similar to how rk3588 does it already.

And yep most likely they are in the same block. Just that huge block of
space for the cru somehow suggested some algamation of multiple ones,
but looking up the rk3588, you're right that it really seems to be one block.

I did request the rk3576 TRM from Rockchip - hopefully they'll follow up
with that at some point ;-) .


Heiko




^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 2/3] clk: rockchip: Add dt-binding header for rk3576
  2024-08-04  9:53   ` Krzysztof Kozlowski
@ 2024-08-06 15:23     ` Detlev Casanova
  2024-08-07  5:49       ` Krzysztof Kozlowski
  0 siblings, 1 reply; 13+ messages in thread
From: Detlev Casanova @ 2024-08-06 15:23 UTC (permalink / raw)
  To: linux-kernel, Krzysztof Kozlowski
  Cc: Michael Turquette, Stephen Boyd, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Heiko Stuebner, Philipp Zabel, Elaine Zhang,
	linux-clk, devicetree, linux-arm-kernel, linux-rockchip, kernel,
	Sugar Zhang

On Sunday, 4 August 2024 05:53:57 EDT Krzysztof Kozlowski wrote:
> On 02/08/2024 23:35, Detlev Casanova wrote:
> > From: Elaine Zhang <zhangqing@rock-chips.com>
> > 
> > Add the dt-bindings header for the rk3576, that gets shared between
> > the clock controller and the clock references in the dts.
> > 
> > Signed-off-by: Elaine Zhang <zhangqing@rock-chips.com>
> > Signed-off-by: Sugar Zhang <sugar.zhang@rock-chips.com>
> > [rebased, separate clocks and resets]
> > Signed-off-by: Detlev Casanova <detlev.casanova@collabora.com>
> 
> Please use subject prefixes matching the subsystem. You can get them for
> example with `git log --oneline -- DIRECTORY_OR_FILE` on the directory
> your patch is touching. For bindings, the preferred subjects are
> explained here:
> https://www.kernel.org/doc/html/latest/devicetree/bindings/submitting-patche
> s.html#i-for-patch-submitters
> > ---
> > 
> >  .../dt-bindings/clock/rockchip,rk3576-cru.h   | 589 ++++++++++++++++++
> >  .../dt-bindings/reset/rockchip,rk3576-cru.h   | 484 ++++++++++++++
> >  2 files changed, 1073 insertions(+)
> >  create mode 100644 include/dt-bindings/clock/rockchip,rk3576-cru.h
> >  create mode 100644 include/dt-bindings/reset/rockchip,rk3576-cru.h
> 
> These are bindings. Must be squashed with previous patch.

Ok, so you'd rather have a commit for reset definitions (dt-bindings: reset: 
Add rk3576 reset definitions) and another one for clock definitions + 
Documentation (dt-bindings: clock: Add rk3576 clock definitions and 
documentation) ?

> > diff --git a/include/dt-bindings/clock/rockchip,rk3576-cru.h
> > b/include/dt-bindings/clock/rockchip,rk3576-cru.h new file mode 100644
> > index 0000000000000..14b54543d1a11
> > --- /dev/null
> > +++ b/include/dt-bindings/clock/rockchip,rk3576-cru.h
> > @@ -0,0 +1,589 @@
> > +/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
> 
> Weird license. Why not using recommended one?

Oh right, I suppose "GPL-2.0 OR MIT" is better ? At least that is what I see 
for rk3588. include/dt-bindings/clock/rockchip,rv1126-cru.h uses "GPL-2.0+ OR 
MIT" though.

> > +/*
> > + * Copyright (c) 2023 Rockchip Electronics Co. Ltd.
> > + * Author: Elaine Zhang <zhangqing@rock-chips.com>
> > + */
> > +
> > +#ifndef _DT_BINDINGS_CLK_ROCKCHIP_RK3576_H
> > +#define _DT_BINDINGS_CLK_ROCKCHIP_RK3576_H
> > +
> > +/* cru-clocks indices */
> > +
> > +/* cru plls */
> > +#define PLL_BPLL			1
> > +#define PLL_LPLL			3
> > +#define PLL_VPLL			4
> > +#define PLL_AUPLL			5
> > +#define PLL_CPLL			6
> > +#define PLL_GPLL			7
> > +#define PLL_PPLL			9
> 
> Nope, indices start from 1 and are incremented continuously.

Why start at 1 ? RK3588 starts at 0 for clocks and resets

Regards,
Detlev.



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 1/3] dt-bindings: clock: add rk3576 cru bindings
  2024-08-04  9:52   ` Krzysztof Kozlowski
@ 2024-08-06 21:22     ` Detlev Casanova
  2024-08-07  5:50       ` Krzysztof Kozlowski
  0 siblings, 1 reply; 13+ messages in thread
From: Detlev Casanova @ 2024-08-06 21:22 UTC (permalink / raw)
  To: linux-kernel, Krzysztof Kozlowski
  Cc: Michael Turquette, Stephen Boyd, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Heiko Stuebner, Philipp Zabel, Elaine Zhang,
	linux-clk, devicetree, linux-arm-kernel, linux-rockchip, kernel

Hi Krzysztof,

On Sunday, 4 August 2024 05:52:53 EDT Krzysztof Kozlowski wrote:
> On 02/08/2024 23:35, Detlev Casanova wrote:
> > Document the device tree bindings of the rockchip rk3576 SoC
> > clock and reset unit.
> > 
> > Signed-off-by: Detlev Casanova <detlev.casanova@collabora.com>
> 
> A nit, subject: drop second/last, redundant "bindings". The
> "dt-bindings" prefix is already stating that these are bindings.
> See also:
> https://elixir.bootlin.com/linux/v6.7-rc8/source/Documentation/devicetree/bi
> ndings/submitting-patches.rst#L18
> > ---
> > 
> >  .../bindings/clock/rockchip,rk3576-cru.yaml   | 73 +++++++++++++++++++
> >  1 file changed, 73 insertions(+)
> >  create mode 100644
> >  Documentation/devicetree/bindings/clock/rockchip,rk3576-cru.yaml> 
> > diff --git
> > a/Documentation/devicetree/bindings/clock/rockchip,rk3576-cru.yaml
> > b/Documentation/devicetree/bindings/clock/rockchip,rk3576-cru.yaml new
> > file mode 100644
> > index 0000000000000..929eb6183bf18
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/clock/rockchip,rk3576-cru.yaml
> > @@ -0,0 +1,73 @@
> > +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
> > +%YAML 1.2
> > +---
> > +$id: http://devicetree.org/schemas/clock/rockchip,rk3576-cru.yaml#
> > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > +
> > +title: Rockchip rk3576 Family Clock and Reset Control Module
> > +
> > +maintainers:
> > +  - Elaine Zhang <zhangqing@rock-chips.com>
> > +  - Heiko Stuebner <heiko@sntech.de>
> > +
> > +description: |
> > +  The RK3576 clock controller generates the clock and also implements a
> > reset +  controller for SoC peripherals. For example it provides
> > SCLK_UART2 and +  PCLK_UART2, as well as SRST_P_UART2 and SRST_S_UART2
> > for the second UART +  module.
> > +  Each clock is assigned an identifier and client nodes can use this
> > identifier +  to specify the clock which they consume. All available
> > clock and reset IDs +  are defined as preprocessor macros in dt-binding
> > headers.
> 
> Drop paragraph, it is obvious. You could provide here the name of the
> header...
> 
> > +
> > +properties:
> > +  compatible:
> > +    enum:
> > +      - rockchip,rk3576-cru
> > +
> > +  reg:
> > +    maxItems: 1
> > +
> > +  "#clock-cells":
> > +    const: 1
> > +
> > +  "#reset-cells":
> > +    const: 1
> > +
> > +  clocks:
> > +    minItems: 2
> 
> You can drop minitems
> 
> > +    maxItems: 2
> > +
> > +  clock-names:
> > +    items:
> > +      - const: xin24m
> > +      - const: xin32k
> > +
> > +  assigned-clocks: true
> > +
> > +  assigned-clock-rates: true
> > +
> > +  assigned-clock-parents: true
> 
> Drop  all these three

Why dro pthese if I need them in the device tree ? Should I remove them from 
there as well ? It seems to be working without it.

> > +
> > +  rockchip,grf:
> > +    $ref: /schemas/types.yaml#/definitions/phandle
> > +    description: >
> > +      phandle to the syscon managing the "general register files". It is
> > used +      for GRF muxes, if missing any muxes present in the GRF will
> > not be +      available.
> > +
> > +required:
> > +  - compatible
> > +  - reg
> > +  - "#clock-cells"
> > +  - "#reset-cells"
> > +
> > +additionalProperties: false
> > +
> > +examples:
> > +  - |
> > +    cru: clock-controller@27200000 {
> 
> Drop unused label
> 
> > +      compatible = "rockchip,rk3576-cru";
> > +      reg = <0xfd7c0000 0x5c000>;
> > +      #clock-cells = <1>;
> > +      #reset-cells = <1>;
> 
> Make the example complete.
> 
> > +    };
> 

Detlev.





^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 2/3] clk: rockchip: Add dt-binding header for rk3576
  2024-08-06 15:23     ` Detlev Casanova
@ 2024-08-07  5:49       ` Krzysztof Kozlowski
  0 siblings, 0 replies; 13+ messages in thread
From: Krzysztof Kozlowski @ 2024-08-07  5:49 UTC (permalink / raw)
  To: Detlev Casanova, linux-kernel
  Cc: Michael Turquette, Stephen Boyd, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Heiko Stuebner, Philipp Zabel, Elaine Zhang,
	linux-clk, devicetree, linux-arm-kernel, linux-rockchip, kernel,
	Sugar Zhang

On 06/08/2024 17:23, Detlev Casanova wrote:
> On Sunday, 4 August 2024 05:53:57 EDT Krzysztof Kozlowski wrote:
>> On 02/08/2024 23:35, Detlev Casanova wrote:
>>> From: Elaine Zhang <zhangqing@rock-chips.com>
>>>
>>> Add the dt-bindings header for the rk3576, that gets shared between
>>> the clock controller and the clock references in the dts.
>>>
>>> Signed-off-by: Elaine Zhang <zhangqing@rock-chips.com>
>>> Signed-off-by: Sugar Zhang <sugar.zhang@rock-chips.com>
>>> [rebased, separate clocks and resets]
>>> Signed-off-by: Detlev Casanova <detlev.casanova@collabora.com>
>>
>> Please use subject prefixes matching the subsystem. You can get them for
>> example with `git log --oneline -- DIRECTORY_OR_FILE` on the directory
>> your patch is touching. For bindings, the preferred subjects are
>> explained here:
>> https://www.kernel.org/doc/html/latest/devicetree/bindings/submitting-patche
>> s.html#i-for-patch-submitters
>>> ---
>>>
>>>  .../dt-bindings/clock/rockchip,rk3576-cru.h   | 589 ++++++++++++++++++
>>>  .../dt-bindings/reset/rockchip,rk3576-cru.h   | 484 ++++++++++++++
>>>  2 files changed, 1073 insertions(+)
>>>  create mode 100644 include/dt-bindings/clock/rockchip,rk3576-cru.h
>>>  create mode 100644 include/dt-bindings/reset/rockchip,rk3576-cru.h
>>
>> These are bindings. Must be squashed with previous patch.
> 
> Ok, so you'd rather have a commit for reset definitions (dt-bindings: reset: 
> Add rk3576 reset definitions) and another one for clock definitions + 
> Documentation (dt-bindings: clock: Add rk3576 clock definitions and 
> documentation) ?
> 
>>> diff --git a/include/dt-bindings/clock/rockchip,rk3576-cru.h
>>> b/include/dt-bindings/clock/rockchip,rk3576-cru.h new file mode 100644
>>> index 0000000000000..14b54543d1a11
>>> --- /dev/null
>>> +++ b/include/dt-bindings/clock/rockchip,rk3576-cru.h
>>> @@ -0,0 +1,589 @@
>>> +/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
>>
>> Weird license. Why not using recommended one?
> 
> Oh right, I suppose "GPL-2.0 OR MIT" is better ? At least that is what I see 
> for rk3588. include/dt-bindings/clock/rockchip,rv1126-cru.h uses "GPL-2.0+ OR 
> MIT" though.
> 
>>> +/*
>>> + * Copyright (c) 2023 Rockchip Electronics Co. Ltd.
>>> + * Author: Elaine Zhang <zhangqing@rock-chips.com>
>>> + */
>>> +
>>> +#ifndef _DT_BINDINGS_CLK_ROCKCHIP_RK3576_H
>>> +#define _DT_BINDINGS_CLK_ROCKCHIP_RK3576_H
>>> +
>>> +/* cru-clocks indices */
>>> +
>>> +/* cru plls */
>>> +#define PLL_BPLL			1
>>> +#define PLL_LPLL			3
>>> +#define PLL_VPLL			4
>>> +#define PLL_AUPLL			5
>>> +#define PLL_CPLL			6
>>> +#define PLL_GPLL			7
>>> +#define PLL_PPLL			9
>>
>> Nope, indices start from 1 and are incremented continuously.
> 
> Why start at 1 ? RK3588 starts at 0 for clocks and resets

Or 0, even better, sure.

Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 1/3] dt-bindings: clock: add rk3576 cru bindings
  2024-08-06 21:22     ` Detlev Casanova
@ 2024-08-07  5:50       ` Krzysztof Kozlowski
  0 siblings, 0 replies; 13+ messages in thread
From: Krzysztof Kozlowski @ 2024-08-07  5:50 UTC (permalink / raw)
  To: Detlev Casanova, linux-kernel
  Cc: Michael Turquette, Stephen Boyd, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Heiko Stuebner, Philipp Zabel, Elaine Zhang,
	linux-clk, devicetree, linux-arm-kernel, linux-rockchip, kernel

On 06/08/2024 23:22, Detlev Casanova wrote:
>>> +    maxItems: 2
>>> +
>>> +  clock-names:
>>> +    items:
>>> +      - const: xin24m
>>> +      - const: xin32k
>>> +
>>> +  assigned-clocks: true
>>> +
>>> +  assigned-clock-rates: true
>>> +
>>> +  assigned-clock-parents: true
>>
>> Drop  all these three
> 
> Why dro pthese if I need them in the device tree ? Should I remove them from 
> there as well ? It seems to be working without it.

Because they are already accepted via dependency of clocks. This is just
redundant. Please trim your replies to relevant content.

Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2024-08-07  5:50 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-02 21:35 [PATCH v2 0/3] Add CRU support for rk3576 SoC Detlev Casanova
2024-08-02 21:35 ` [PATCH v2 1/3] dt-bindings: clock: add rk3576 cru bindings Detlev Casanova
2024-08-04  9:52   ` Krzysztof Kozlowski
2024-08-06 21:22     ` Detlev Casanova
2024-08-07  5:50       ` Krzysztof Kozlowski
2024-08-02 21:35 ` [PATCH v2 2/3] clk: rockchip: Add dt-binding header for rk3576 Detlev Casanova
2024-08-04  9:53   ` Krzysztof Kozlowski
2024-08-06 15:23     ` Detlev Casanova
2024-08-07  5:49       ` Krzysztof Kozlowski
2024-08-02 21:35 ` [PATCH v2 3/3] clk: rockchip: Add clock controller for the RK3576 Detlev Casanova
2024-08-03  6:53   ` zhangqing
     [not found]   ` <a9a9219d-325c-4afa-b40c-b261ff95263c@rock-chips.com>
2024-08-06 14:15     ` Detlev Casanova
2024-08-06 15:13       ` Heiko Stübner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).