* [PATCH 0/8] clk: samsung: Introduce support for Exynos9610 clocks.
@ 2025-09-14 21:19 Alexandru Chimac
2025-09-14 21:19 ` [PATCH 1/8] dt-bindings: clock: samsung: Add Exynos9610 CMU bindings Alexandru Chimac
` (7 more replies)
0 siblings, 8 replies; 13+ messages in thread
From: Alexandru Chimac @ 2025-09-14 21:19 UTC (permalink / raw)
To: Krzysztof Kozlowski, Sylwester Nawrocki, Chanwoo Choi,
Alim Akhtar, Michael Turquette, Stephen Boyd, Rob Herring,
Conor Dooley, Alexandru Chimac, Krzysztof Kozlowski
Cc: linux-samsung-soc, linux-clk, devicetree, linux-arm-kernel,
linux-kernel, Alexandru Chimac
This patchset adds partial support for clocks (no SHUB, USB, MIF0/1, ISP,
VIPX1/2, MFC) on Exynos9610.
Signed-off-by: Alexandru Chimac <alex@chimac.ro>
---
Alexandru Chimac (8):
dt-bindings: clock: samsung: Add Exynos9610 CMU bindings
clk: samsung: clk-pll: Add support for pll_1061x
clk: samsung: Introduce Exynos9610 clock controller driver
arm64: dts: exynos9610: Enable clock support
dt-bindings: soc: exynos-sysreg: Add Exynos9610 SYSREG bindings
arm64: dts: exynos9610: Add SYSREG nodes
arm64: dts: exynos9610: Assign clocks to existing nodes
arm64: dts: exynos9610-gta4xl: Assign clocks to existing nodes
.../bindings/clock/samsung,exynos9610-clock.yaml | 344 ++
.../soc/samsung/samsung,exynos-sysreg.yaml | 20 +
arch/arm64/boot/dts/exynos/exynos9610-gta4xl.dts | 2 +
arch/arm64/boot/dts/exynos/exynos9610.dtsi | 277 ++
drivers/clk/samsung/Makefile | 1 +
drivers/clk/samsung/clk-exynos9610.c | 3652 ++++++++++++++++++++
drivers/clk/samsung/clk-pll.c | 29 +-
drivers/clk/samsung/clk-pll.h | 1 +
include/dt-bindings/clock/samsung,exynos9610.h | 720 ++++
9 files changed, 5039 insertions(+), 7 deletions(-)
---
base-commit: 48c4c0b684f394721b7db809e1cc282fccdb33da
change-id: 20250914-exynos9610-clocks-2fba704e6030
prerequisite-message-id: <20250914-exynos9610-devicetree-v1-0-2000fc3bbe0b@chimac.ro>
prerequisite-patch-id: fb1e2f83c03a3b3a330c72d5d9c9fd8cd95ef2ce
prerequisite-patch-id: b42a7c0c72b1bfe33bb65fb911bf28e3e101fa55
prerequisite-patch-id: 4c5c21cf62e50db603fe4e2df17ee664ff0b243e
prerequisite-message-id: <20250914-exynos9610-pinctrl-v1-0-90eda0c8fa03@chimac.ro>
prerequisite-patch-id: 27e949ada132a43ba3dbf880af3e6168ec94eaf9
prerequisite-patch-id: f446d396d0258709db47aef69e68821eb72582dc
prerequisite-patch-id: e3bf016be9509ee79beb3d51907ef6cd58fb98b1
Best regards,
--
Alexandru Chimac <alex@chimac.ro>
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 1/8] dt-bindings: clock: samsung: Add Exynos9610 CMU bindings
2025-09-14 21:19 [PATCH 0/8] clk: samsung: Introduce support for Exynos9610 clocks Alexandru Chimac
@ 2025-09-14 21:19 ` Alexandru Chimac
2025-09-15 13:22 ` Rob Herring (Arm)
2025-09-14 21:19 ` [PATCH 2/8] clk: samsung: clk-pll: Add support for pll_1061x Alexandru Chimac
` (6 subsequent siblings)
7 siblings, 1 reply; 13+ messages in thread
From: Alexandru Chimac @ 2025-09-14 21:19 UTC (permalink / raw)
To: Krzysztof Kozlowski, Sylwester Nawrocki, Chanwoo Choi,
Alim Akhtar, Michael Turquette, Stephen Boyd, Rob Herring,
Conor Dooley, Alexandru Chimac, Krzysztof Kozlowski
Cc: linux-samsung-soc, linux-clk, devicetree, linux-arm-kernel,
linux-kernel, Alexandru Chimac
This clock management unit has a topmost block (CMU_TOP)
that generates top clocks for other blocks, alongside 20
other blocks, out of which 11 are currently implemented.
Signed-off-by: Alexandru Chimac <alex@chimac.ro>
---
.../bindings/clock/samsung,exynos9610-clock.yaml | 344 ++++++++++
include/dt-bindings/clock/samsung,exynos9610.h | 720 +++++++++++++++++++++
2 files changed, 1064 insertions(+)
diff --git a/Documentation/devicetree/bindings/clock/samsung,exynos9610-clock.yaml b/Documentation/devicetree/bindings/clock/samsung,exynos9610-clock.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..f3b7bc49a6ab18c5dd3c54d1f5fcdb7a67d15668
--- /dev/null
+++ b/Documentation/devicetree/bindings/clock/samsung,exynos9610-clock.yaml
@@ -0,0 +1,344 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/clock/samsung,exynos9610-clock.yaml
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Samsung Exynos9610 SoC clock controller
+
+maintainers:
+ - Alexandru Chimac <alexchimac@protonmail.com>
+ - Chanwoo Choi <cw00.choi@samsung.com>
+ - Krzysztof Kozlowski <krzk@kernel.org>
+
+description: |
+ Exynos9610 clock controller is comprised of several CMU units, generating
+ clocks for different domains. Those CMU units are modeled as separate device
+ tree nodes, and might depend on each other. Root clocks in that clock tree are
+ three external clocks:: OSCCLK (26MHz), DLL_DCO (360MHz), OSCCLK_RCO (CMGP, 30MHz).
+ The external OSCCLK must be defined as fixed-rate clock in the device tree.
+
+ CMU_TOP is a top-level CMU, where all base clocks are prepared using PLLs
+ and dividers; all other clocks of function blocks (other CMUs) are usually derived
+ from CMU_TOP.
+
+ Each clock is assigned an identifier and client nodes can use this identifier
+ to specify the clock which they consume. All clocks available for usage
+ in clock consumer nodes are defined as preprocessor macros
+ in 'include/dt-bindings/clock/samsung,exynos9610.h'.
+
+properties:
+ compatible:
+ enum:
+ - samsung,exynos9610-cmu-top
+ - samsung,exynos9610-cmu-apm
+ - samsung,exynos9610-cmu-cam
+ - samsung,exynos9610-cmu-cmgp
+ - samsung,exynos9610-cmu-core
+ - samsung,exynos9610-cmu-cpucl0
+ - samsung,exynos9610-cmu-cpucl1
+ - samsung,exynos9610-cmu-dispaud
+ - samsung,exynos9610-cmu-fsys
+ - samsung,exynos9610-cmu-g2d
+ - samsung,exynos9610-cmu-g3d
+ - samsung,exynos9610-cmu-peri
+
+ clocks:
+ minItems: 1
+ maxItems: 7
+
+ clock-names:
+ minItems: 1
+ maxItems: 7
+
+ "#clock-cells":
+ const: 1
+
+ reg:
+ maxItems: 1
+
+allOf:
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: samsung,exynos9610-cmu-top
+
+ then:
+ properties:
+ clocks:
+ items:
+ - description: External reference clock (26MHz)
+
+ clock-names:
+ items:
+ - const: oscclk
+
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: samsung,exynos9610-cmu-apm
+
+ then:
+ properties:
+ clocks:
+ items:
+ - description: External reference clock (26MHz)
+ - description: External reference clock (360Mhz)
+ - description: CMU_APM bus clock (from CMU_TOP)
+
+ clock-names:
+ items:
+ - const: oscclk
+ - const: dll_dco
+ - const: dout_cmu_apm_bus
+
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: samsung,exynos9610-cmu-cam
+
+ then:
+ properties:
+ clocks:
+ items:
+ - description: External reference clock (26MHz)
+ - description: CMU_CAM bus clock (from CMU_TOP)
+
+ clock-names:
+ items:
+ - const: oscclk
+ - const: dout_cmu_cam_bus
+
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: samsung,exynos9610-cmu-cmgp
+
+ then:
+ properties:
+ clocks:
+ items:
+ - description: External reference clock (26MHz)
+ - description: External reference clock (30MHz)
+ - description: CMU_CMGP bus clock (from CMU_APM)
+
+ clock-names:
+ items:
+ - const: oscclk
+ - const: oscclk_rco
+ - const: gout_cmu_cmgp_bus
+
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: samsung,exynos9610-cmu-core
+
+ then:
+ properties:
+ clocks:
+ items:
+ - description: External reference clock (26MHz)
+ - description: CMU_CORE bus clock (from CMU_TOP)
+ - description: CMU_CORE CCI clock (from CMU_TOP)
+ - description: CMU_CORE G3D clock (from CMU_TOP)
+
+ clock-names:
+ items:
+ - const: oscclk
+ - const: gout_cmu_core_bus
+ - const: gout_cmu_core_cci
+ - const: gout_cmu_core_g3d
+
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: samsung,exynos9610-cmu-cpucl0
+
+ then:
+ properties:
+ clocks:
+ items:
+ - description: External reference clock (26MHz)
+ - description: CMU_CPUCL0 debug clock (from CMU_TOP)
+ - description: CMU_CPUCL0 switch clock (from CMU_TOP)
+ - description: HPM clock (from CMU_TOP)
+
+ clock-names:
+ items:
+ - const: oscclk
+ - const: dout_cmu_cpucl0_dbg
+ - const: dout_cmu_cpucl0_switch
+ - const: dout_cmu_hpm
+
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: samsung,exynos9610-cmu-cpucl1
+
+ then:
+ properties:
+ clocks:
+ items:
+ - description: External reference clock (26MHz)
+ - description: CMU_CPUCL1 switch clock (from CMU_TOP)
+ - description: HPM clock (from CMU_TOP)
+
+ clock-names:
+ items:
+ - const: oscclk
+ - const: dout_cmu_cpucl1_switch
+ - const: dout_cmu_hpm
+
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: samsung,exynos9610-cmu-dispaud
+
+ then:
+ properties:
+ clocks:
+ items:
+ - description: External reference clock (26MHz)
+ - description: External reference clock (10Mhz)
+ - description: External reference clock (100Mhz)
+ - description: External reference clock (60Mhz)
+ - description: CMU_DISPAUD audio clock (from CMU_TOP)
+ - description: CMU_DISPAUD CPU clock (from CMU_TOP)
+ - description: CMU_DISPAUD display clock (from CMU_TOP)
+
+ clock-names:
+ items:
+ - const: oscclk
+ - const: ioclk_audiocdclk0
+ - const: ioclk_audiocdclk1
+ - const: tick_usb
+ - const: dout_cmu_dispaud_aud
+ - const: dout_cmu_dispaud_cpu
+ - const: dout_cmu_dispaud_disp
+
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: samsung,exynos9610-cmu-fsys
+
+ then:
+ properties:
+ clocks:
+ items:
+ - description: External reference clock (26MHz)
+ - description: CMU_FSYS bus clock (from CMU_TOP)
+ - description: CMU_FSYS external MMC clock (from CMU_TOP)
+ - description: CMU_FSYS embedded MMC clock (from CMU_TOP)
+ - description: CMU_FSYS embedded UFS clock (from CMU_TOP)
+
+ clock-names:
+ items:
+ - const: oscclk
+ - const: dout_cmu_fsys_bus
+ - const: dout_cmu_fsys_mmc_card
+ - const: dout_cmu_fsys_mmc_embd
+ - const: dout_cmu_fsys_ufs_embd
+
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: samsung,exynos9610-cmu-g2d
+
+ then:
+ properties:
+ clocks:
+ items:
+ - description: External reference clock (26MHz)
+ - description: CMU_G2D G2D clock (from CMU_TOP)
+ - description: CMU_G2D MSCL clock (from CMU_TOP)
+
+ clock-names:
+ items:
+ - const: oscclk
+ - const: dout_cmu_g2d_g2d
+ - const: dout_cmu_g2d_mscl
+
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: samsung,exynos9610-cmu-g3d
+
+ then:
+ properties:
+ clocks:
+ items:
+ - description: External reference clock (26MHz)
+ - description: CMU_G3D switch clock (from CMU_TOP)
+ - description: HPM clock (from CMU_TOP)
+
+ clock-names:
+ items:
+ - const: oscclk
+ - const: dout_cmu_g3d_switch
+ - const: dout_cmu_hpm
+
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: samsung,exynos9610-cmu-peri
+
+ then:
+ properties:
+ clocks:
+ items:
+ - description: External reference clock (26MHz)
+ - description: CMU_PERI bus clock (from CMU_TOP)
+ - description: CMU_PERI IP clock (from CMU_TOP)
+ - description: CMU_PERI UART clock (from CMU_TOP)
+
+ clock-names:
+ items:
+ - const: oscclk
+ - const: dout_cmu_peri_bus
+ - const: dout_cmu_peri_ip
+ - const: dout_cmu_peri_uart
+
+required:
+ - compatible
+ - "#clock-cells"
+ - clocks
+ - clock-names
+ - reg
+
+additionalProperties: false
+
+examples:
+ # Clock controller node for CMU_FSYS
+ - |
+ #include <dt-bindings/clock/samsung,exynos9610.h>
+
+ cmu_fsys: clock-controller@13400000 {
+ compatible = "samsung,exynos9610-cmu-fsys";
+ reg = <0x13400000 0x8000>;
+ #clock-cells = <1>
+
+ clocks = <&oscclk>,
+ <&cmu_top CLK_DOUT_CMU_FSYS_BUS>,
+ <&cmu_top CLK_DOUT_CMU_FSYS_MMC_CARD>,
+ <&cmu_top CLK_DOUT_CMU_FSYS_MMC_EMBD>,
+ <&cmu_top CLK_DOUT_CMU_FSYS_UFS_EMBD>,
+
+ clock-names = "oscclk",
+ "dout_cmu_fsys_bus",
+ "dout_cmu_fsys_mmc_card",
+ "dout_cmu_fsys_mmc_embd",
+ "dout_cmu_fsys_ufs_embd";
+ };
+...
diff --git a/include/dt-bindings/clock/samsung,exynos9610.h b/include/dt-bindings/clock/samsung,exynos9610.h
new file mode 100644
index 0000000000000000000000000000000000000000..047c35fd8bf133996aaa185f9c8e5457499e707e
--- /dev/null
+++ b/include/dt-bindings/clock/samsung,exynos9610.h
@@ -0,0 +1,720 @@
+/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
+/*
+ * Device tree binding constants for Exynos9610 clocks
+ *
+ * Copyright (c) 2025, Alexandru Chimac <alex@chimac.ro>
+ */
+
+/* CMU_TOP PLLs */
+#define CLK_FOUT_SHARED0_PLL 1
+#define CLK_FOUT_SHARED1_PLL 2
+#define CLK_FOUT_MMC_PLL 3
+
+/* CMU_TOP muxes */
+#define CLK_MOUT_PLL_SHARED0 4
+#define CLK_MOUT_PLL_SHARED1 5
+#define CLK_MOUT_PLL_MMC 6
+#define CLK_MOUT_CMU_APM_BUS 7
+#define CLK_MOUT_CMU_CAM_BUS 8
+#define CLK_MOUT_CMU_CIS_CLK0 9
+#define CLK_MOUT_CMU_CIS_CLK1 10
+#define CLK_MOUT_CMU_CIS_CLK2 11
+#define CLK_MOUT_CMU_CIS_CLK3 12
+#define CLK_MOUT_CMU_CORE_BUS 13
+#define CLK_MOUT_CMU_CORE_CCI 14
+#define CLK_MOUT_CMU_CORE_G3D 15
+#define CLK_MOUT_CMU_CPUCL0_DBG 16
+#define CLK_MOUT_CMU_CPUCL0_SWITCH 17
+#define CLK_MOUT_CMU_CPUCL1_SWITCH 18
+#define CLK_MOUT_CMU_DISPAUD_AUD 19
+#define CLK_MOUT_CMU_DISPAUD_CPU 20
+#define CLK_MOUT_CMU_DISPAUD_DISP 21
+#define CLK_MOUT_CMU_FSYS_BUS 22
+#define CLK_MOUT_CMU_FSYS_MMC_CARD 23
+#define CLK_MOUT_CMU_FSYS_MMC_EMBD 24
+#define CLK_MOUT_CMU_FSYS_UFS_EMBD 25
+#define CLK_MOUT_CMU_G2D_G2D 26
+#define CLK_MOUT_CMU_G2D_MSCL 27
+#define CLK_MOUT_CMU_G3D_SWITCH 28
+#define CLK_MOUT_CMU_HPM 29
+#define CLK_MOUT_CMU_ISP_BUS 30
+#define CLK_MOUT_CMU_ISP_GDC 31
+#define CLK_MOUT_CMU_ISP_VRA 32
+#define CLK_MOUT_CMU_MFC_MFC 33
+#define CLK_MOUT_CMU_MFC_WFD 34
+#define CLK_MOUT_CMU_MIF_BUSP 35
+#define CLK_MOUT_CMU_MIF_SWITCH 36
+#define CLK_MOUT_CMU_PERI_BUS 37
+#define CLK_MOUT_CMU_PERI_IP 38
+#define CLK_MOUT_CMU_PERI_UART 39
+#define CLK_MOUT_CMU_USB_BUS 40
+#define CLK_MOUT_CMU_USB_DPGTC 41
+#define CLK_MOUT_CMU_USB_USB30DRD 42
+#define CLK_MOUT_CMU_VIPX1_BUS 43
+#define CLK_MOUT_CMU_VIPX2_BUS 44
+#define CLK_MOUT_CLK_CMU_CMUREF 45
+#define CLK_MOUT_CMU_CMUREF 46
+
+/* CMU_TOP dividers */
+#define CLK_DOUT_CMU_SHARED0_DIV2 47
+#define CLK_DOUT_CMU_SHARED0_DIV3 48
+#define CLK_DOUT_CMU_SHARED0_DIV4 49
+#define CLK_DOUT_CMU_SHARED1_DIV2 50
+#define CLK_DOUT_CMU_SHARED1_DIV3 51
+#define CLK_DOUT_CMU_SHARED1_DIV4 52
+#define CLK_DOUT_CMU_MMC_DIV2 53
+#define CLK_DOUT_AP2CP_SHARED0_PLL_CLK 54
+#define CLK_DOUT_AP2CP_SHARED1_PLL_CLK 55
+#define CLK_DOUT_CMU_APM_BUS 56
+#define CLK_DOUT_CMU_CAM_BUS 57
+#define CLK_DOUT_CMU_CIS_CLK0 58
+#define CLK_DOUT_CMU_CIS_CLK1 59
+#define CLK_DOUT_CMU_CIS_CLK2 60
+#define CLK_DOUT_CMU_CIS_CLK3 61
+#define CLK_DOUT_CMU_CORE_BUS 62
+#define CLK_DOUT_CMU_CORE_CCI 63
+#define CLK_DOUT_CMU_CORE_G3D 64
+#define CLK_DOUT_CMU_CPUCL0_DBG 65
+#define CLK_DOUT_CMU_CPUCL0_SWITCH 66
+#define CLK_DOUT_CMU_CPUCL1_SWITCH 67
+#define CLK_DOUT_CMU_DISPAUD_AUD 68
+#define CLK_DOUT_CMU_DISPAUD_CPU 69
+#define CLK_DOUT_CMU_DISPAUD_DISP 70
+#define CLK_DOUT_CMU_FSYS_BUS 71
+#define CLK_DOUT_CMU_FSYS_MMC_CARD 72
+#define CLK_DOUT_CMU_FSYS_MMC_EMBD 73
+#define CLK_DOUT_CMU_FSYS_UFS_EMBD 74
+#define CLK_DOUT_CMU_G2D_G2D 75
+#define CLK_DOUT_CMU_G2D_MSCL 76
+#define CLK_DOUT_CMU_G3D_SWITCH 77
+#define CLK_DOUT_CMU_HPM 78
+#define CLK_DOUT_CMU_ISP_BUS 79
+#define CLK_DOUT_CMU_ISP_GDC 80
+#define CLK_DOUT_CMU_ISP_VRA 81
+#define CLK_DOUT_CMU_MFD_MFC 82
+#define CLK_DOUT_CMU_MFD_WFD 83
+#define CLK_DOUT_CMU_MIF_BUSP 84
+#define CLK_DOUT_CMU_PERI_BUS 85
+#define CLK_DOUT_CMU_PERI_IP 86
+#define CLK_DOUT_CMU_PERI_UART 87
+#define CLK_DOUT_CMU_USB_BUS 88
+#define CLK_DOUT_CMU_USB_DPGTC 89
+#define CLK_DOUT_CMU_USB_USB30DRD 90
+#define CLK_DOUT_CMU_VIPX1_BUS 91
+#define CLK_DOUT_CMU_VIPX2_BUS 92
+#define CLK_DOUT_CLK_CMU_CMUREF 93
+#define CLK_DOUT_CMU_OTP 94
+
+/* CMU_TOP gates */
+#define CLK_GOUT_CMU_MIF_SWITCH 95
+#define CLK_GOUT_CLK_CMU_OTP_CLK 96
+#define CLK_GOUT_CMU_APM_BUS 97
+#define CLK_GOUT_CMU_CAM_BUS 98
+#define CLK_GOUT_CMU_CIS_CLK0 99
+#define CLK_GOUT_CMU_CIS_CLK1 100
+#define CLK_GOUT_CMU_CIS_CLK2 101
+#define CLK_GOUT_CMU_CIS_CLK3 102
+#define CLK_GOUT_CMU_CORE_BUS 103
+#define CLK_GOUT_CMU_CORE_CCI 104
+#define CLK_GOUT_CMU_CORE_G3D 105
+#define CLK_GOUT_CMU_CPUCL0_DBG 106
+#define CLK_GOUT_CMU_CPUCL0_SWITCH 107
+#define CLK_GOUT_CMU_CPUCL1_SWITCH 108
+#define CLK_GOUT_CMU_DISPAUD_AUD 109
+#define CLK_GOUT_CMU_DISPAUD_CPU 110
+#define CLK_GOUT_CMU_DISPAUD_DISP 111
+#define CLK_GOUT_CMU_FSYS_BUS 112
+#define CLK_GOUT_CMU_FSYS_MMC_CARD 113
+#define CLK_GOUT_CMU_FSYS_MMC_EMBD 114
+#define CLK_GOUT_CMU_FSYS_UFS_EMBD 115
+#define CLK_GOUT_CMU_G2D_G2D 116
+#define CLK_GOUT_CMU_G2D_MSCL 117
+#define CLK_GOUT_CMU_G3D_SWITCH 118
+#define CLK_GOUT_CMU_HPM 119
+#define CLK_GOUT_CMU_ISP_BUS 120
+#define CLK_GOUT_CMU_ISP_GDC 121
+#define CLK_GOUT_CMU_ISP_VRA 122
+#define CLK_GOUT_CMU_MFC_MFC 123
+#define CLK_GOUT_CMU_MFC_WFD 124
+#define CLK_GOUT_CMU_MIF_BUSP 125
+#define CLK_GOUT_CMU_MODEM_SHARED0 126
+#define CLK_GOUT_CMU_MODEM_SHARED1 127
+#define CLK_GOUT_CMU_PERI_BUS 128
+#define CLK_GOUT_CMU_PERI_IP 129
+#define CLK_GOUT_CMU_PERI_UART 130
+#define CLK_GOUT_CMU_USB_BUS 131
+#define CLK_GOUT_CMU_USB_DPGTC 132
+#define CLK_GOUT_CMU_USB_USB30DRD 133
+#define CLK_GOUT_CMU_VIPX1_BUS 134
+#define CLK_GOUT_CMU_VIPX2_BUS 135
+
+/* CMU_APM muxes */
+#define CLK_MOUT_PLL_APM_BUS_USER 1
+#define CLK_MOUT_PLL_DLL_USER 2
+#define CLK_MOUT_CMU_SHUB_BUS 3
+#define CLK_MOUT_CLK_APM_BUS 4
+
+/* CMU_APM dividers */
+#define CLK_DOUT_CMU_SHUB_BUS 5
+#define CLK_DOUT_CLK_APM_BUS 6
+
+/* CPU_APM gates */
+#define CLK_GOUT_CMU_CMGP_BUS 7
+#define CLK_GOUT_CLK_APM_CMU_PCLK 8
+#define CLK_GOUT_CLK_APM_OSCCLK_CLK 9
+#define CLK_GOUT_CLK_APM_OSCCLK_RCO_CLK 10
+#define CLK_GOUT_APM_APBIF_GPIO_ALIVE_PCLK 11
+#define CLK_GOUT_APM_APBIF_PMU_ALIVE_PCLK 12
+#define CLK_GOUT_APM_APBIF_RTC_ALIVE_PCLK 12
+#define CLK_GOUT_APM_APBIF_TOP_RTC_ALIVE_PCLK 13
+#define CLK_GOUT_APM_GREBEINTEGRATION_HCLK 14
+#define CLK_GOUT_APM_INTMEM_ACLK 15
+#define CLK_GOUT_APM_INTMEM_PCLK 16
+#define CLK_GOUT_APM_LHM_AXI_P_GNSS_CLK 17
+#define CLK_GOUT_APM_LHM_AXI_P_CLK 18
+#define CLK_GOUT_APM_LHM_AXI_P_MODEM_CLK 19
+#define CLK_GOUT_APM_LHM_AXI_P_SHUB_CLK 20
+#define CLK_GOUT_APM_LHM_AXI_P_WLBT_CLK 21
+#define CLK_GOUT_APM_LHS_AXI_D_CLK 22
+#define CLK_GOUT_APM_LHS_AXI_LP_SHUB_CLK 23
+#define CLK_GOUT_APM_MAILBOX_AP2CP_PCLK 24
+#define CLK_GOUT_APM_MAILBOX_AP2CP_S_PCLK 25
+#define CLK_GOUT_APM_MAILBOX_AP2GNSS_PCLK 26
+#define CLK_GOUT_APM_MAILBOX_AP2SHUB_PCLK 27
+#define CLK_GOUT_APM_MAILBOX_AP2WLBT_PCLK 28
+#define CLK_GOUT_APM_MAILBOX_APM2AP_PCLK 29
+#define CLK_GOUT_APM_MAILBOX_APM2CP_PCLK 30
+#define CLK_GOUT_APM_MAILBOX_APM2GNSS_PCLK 31
+#define CLK_GOUT_APM_MAILBOX_APM2SHUB_PCLK 32
+#define CLK_GOUT_APM_MAILBOX_APM2WLBT_PCLK 33
+#define CLK_GOUT_APM_MAILBOX_CP2GNSS_PCLK 34
+#define CLK_GOUT_APM_MAILBOX_CP2SHUB_PCLK 35
+#define CLK_GOUT_APM_MAILBOX_CP2WLBT_PCLK 36
+#define CLK_GOUT_APM_MAILBOX_SHUB2GNSS_PCLK 37
+#define CLK_GOUT_APM_MAILBOX_SHUB2WLBT_PCLK 38
+#define CLK_GOUT_APM_MAILBOX_WLBT2ABOX_PCLK 39
+#define CLK_GOUT_APM_MAILBOX_WLBT2GNSS_PCLK 40
+#define CLK_GOUT_APM_PEM_CLK 41
+#define CLK_GOUT_APM_PGEN_LITE_CLK 42
+#define CLK_GOUT_APM_PMU_INTR_GEN_PCLK 43
+#define CLK_GOUT_APM_BUS_CLK 44
+#define CLK_GOUT_APM_GREBE_CLK 45
+#define CLK_GOUT_APM_SPEEDY_PCLK 46
+#define CLK_GOUT_APM_SYSREG_PCLK 47
+#define CLK_GOUT_APM_WDT_PCLK 48
+#define CLK_GOUT_APM_XIU_DP_ACLK 49
+
+/* CMU_CAM muxes */
+#define CLK_MOUT_PLL_CAM_BUS_USER 1
+
+/* CMU_CAM dividers */
+#define CLK_DIV_CLK_CAM_BUSP 2
+
+/* CMU_CAM gates */
+#define CLK_GAT_CLK_CAM_CMU_PCLK 3
+#define CLK_GAT_CLK_CAM_OSCCLK_CLK 4
+#define CLK_GOUT_CAM_BUSD 5
+#define CLK_GOUT_CAM_BTM_ACLK 6
+#define CLK_GOUT_CAM_BTM_PCLK 7
+#define CLK_GOUT_CAM_LHS_ATB_CAMISP_CLK 8
+#define CLK_GOUT_CAM_IS6P10P0_ACLK_3AA 9
+#define CLK_GOUT_CAM_IS6P10P0_ACLK_CSIS0 10
+#define CLK_GOUT_CAM_IS6P10P0_ACLK_CSIS1 11
+#define CLK_GOUT_CAM_IS6P10P0_ACLK_CSIS2 12
+#define CLK_GOUT_CAM_IS6P10P0_ACLK_CSIS3 13
+#define CLK_GOUT_CAM_IS6P10P0_ACLK_RDMA 14
+#define CLK_GOUT_CAM_IS6P10P0_ACLK_GLUE_CSIS0 15
+#define CLK_GOUT_CAM_IS6P10P0_ACLK_GLUE_CSIS1 16
+#define CLK_GOUT_CAM_IS6P10P0_ACLK_GLUE_CSIS2 17
+#define CLK_GOUT_CAM_IS6P10P0_ACLK_GLUE_CSIS3 18
+#define CLK_GOUT_CAM_IS6P10P0_ACLK_PAFSTAT_CORE 19
+#define CLK_GOUT_CAM_IS6P10P0_ACLK_PPMU_CAM 20
+#define CLK_GOUT_CAM_IS6P10P0_ACLK_DMA 21
+#define CLK_GOUT_CAM_IS6P10P0_ACLK_SMMU_CAM 22
+#define CLK_GOUT_CAM_IS6P10P0_ACLK_XIU_D_CAM 23
+#define CLK_GOUT_CAM_IS6P10P0_PCLK_PGEN_LITE_CAM0 24
+#define CLK_GOUT_CAM_IS6P10P0_PCLK_PGEN_LITE_CAM1 25
+#define CLK_GOUT_CAM_IS6P10P0_PCLK_PPMU_CAM 26
+#define CLK_GOUT_CAM_LHM_AXI_P_CLK 27
+#define CLK_GOUT_CAM_LHS_ACEL_D_CLK 28
+#define CLK_GOUT_CAM_BUSD_CLK 29
+#define CLK_GOUT_CAM_BUSP_CLK 30
+#define CLK_GOUT_CAM_SYSREG_PCLK 31
+
+/* CMU_CMGP muxes */
+#define CLK_MOUT_CLK_CMGP_ADC 0
+#define CLK_MOUT_CLK_CMGP_I2C 1
+#define CLK_MOUT_CLK_CMGP_USI00 2
+#define CLK_MOUT_CLK_CMGP_USI01 3
+#define CLK_MOUT_CLK_CMGP_USI02 4
+#define CLK_MOUT_CLK_CMGP_USI03 5
+#define CLK_MOUT_CLK_CMGP_USI04 6
+
+/* CMU_CMGP dividers */
+#define CLK_DOUT_CLK_CMGP_ADC 0
+#define CLK_DOUT_CLK_CMGP_I2C 1
+#define CLK_DOUT_CLK_CMGP_USI00 2
+#define CLK_DOUT_CLK_CMGP_USI01 3
+#define CLK_DOUT_CLK_CMGP_USI02 4
+#define CLK_DOUT_CLK_CMGP_USI03 5
+#define CLK_DOUT_CLK_CMGP_USI04 6
+
+/* CMU_CMGP gates */
+#define CLK_GOUT_CMGP_CMU_PCLK 7
+#define CLK_GOUT_CLK_CMGP_OSCCLK_RCO_CLK 8
+#define CLK_GOUT_CMGP_ADC_PCLK_S0 9
+#define CLK_GOUT_CMGP_ADC_PCLK_S1 10
+#define CLK_GOUT_CMGP_GPIO_PCLK 11
+#define CLK_GOUT_CMGP_I2C_CMGP00_IPCLK 12
+#define CLK_GOUT_CMGP_I2C_CMGP00_PCLK 13
+#define CLK_GOUT_CMGP_I2C_CMGP01_IPCLK 14
+#define CLK_GOUT_CMGP_I2C_CMGP01_PCLK 15
+#define CLK_GOUT_CMGP_I2C_CMGP02_IPCLK 16
+#define CLK_GOUT_CMGP_I2C_CMGP02_PCLK 17
+#define CLK_GOUT_CMGP_I2C_CMGP03_IPCLK 18
+#define CLK_GOUT_CMGP_I2C_CMGP03_PCLK 19
+#define CLK_GOUT_CMGP_I2C_CMGP04_IPCLK 20
+#define CLK_GOUT_CMGP_I2C_CMGP04_PCLK 21
+#define CLK_GOUT_CMGP_BUS_CLK 22
+#define CLK_GOUT_CMGP_I2C_CLK 23
+#define CLK_GOUT_CMGP_USI00_CLK 24
+#define CLK_GOUT_CMGP_USI01_CLK 25
+#define CLK_GOUT_CMGP_USI02_CLK 26
+#define CLK_GOUT_CMGP_USI03_CLK 27
+#define CLK_GOUT_CMGP_USI04_CLK 28
+#define CLK_GOUT_CMGP_SYSREG_CMGP2CP_PCLK 29
+#define CLK_GOUT_CMGP_SYSREG_CMGP2GNSS_PCLK 30
+#define CLK_GOUT_CMGP_SYSREG_CMGP2PMU_AP_PCLK 31
+#define CLK_GOUT_CMGP_SYSREG_CMGP2PMU_SHUB_PCLK 32
+#define CLK_GOUT_CMGP_SYSREG_CMGP2SHUB_PCLK 33
+#define CLK_GOUT_CMGP_SYSREG_CMGP2WLBT_PCLK 34
+#define CLK_GOUT_CMGP_SYSREG_PCLK 35
+#define CLK_GOUT_CMGP_USI_CMGP00_IPCLK 36
+#define CLK_GOUT_CMGP_USI_CMGP00_PCLK 37
+#define CLK_GOUT_CMGP_USI_CMGP01_IPCLK 38
+#define CLK_GOUT_CMGP_USI_CMGP01_PCLK 39
+#define CLK_GOUT_CMGP_USI_CMGP02_IPCLK 40
+#define CLK_GOUT_CMGP_USI_CMGP02_PCLK 41
+#define CLK_GOUT_CMGP_USI_CMGP03_IPCLK 42
+#define CLK_GOUT_CMGP_USI_CMGP03_PCLK 43
+#define CLK_GOUT_CMGP_USI_CMGP04_IPCLK 44
+#define CLK_GOUT_CMGP_USI_CMGP04_PCLK 45
+
+/* CMU_CORE muxes */
+#define CLK_MOUT_PLL_CORE_BUS_USER 1
+#define CLK_MOUT_PLL_CORE_CCI_USER 2
+#define CLK_MOUT_PLL_CORE_G3D_USER 3
+#define CLK_MOUT_CLK_CORE_GIC 4
+
+/* CMU_CORE dividers */
+#define CLK_DOUT_CLK_CORE_BUSP 5
+
+/* CMU_CORE gates */
+#define CLK_GOUT_CLK_CORE_CMU_PCLK 6
+#define CLK_GOUT_CORE_AD_APB_CCI_550_PCLKM 7
+#define CLK_GOUT_CORE_AD_APB_DIT_PCLKM 8
+#define CLK_GOUT_CORE_AD_APB_PDMA0_PCLKM 9
+#define CLK_GOUT_CORE_AD_APB_PGEN_PDMA_PCLKM 10
+#define CLK_GOUT_CORE_AD_APB_PPFW_MEM0_PCLKM 11
+#define CLK_GOUT_CORE_AD_APB_PPFW_MEM1_PCLKM 12
+#define CLK_GOUT_CORE_AD_APB_PPFW_PERI_PCLKM 13
+#define CLK_GOUT_CORE_AD_APB_SPDMA_PCLKM 14
+#define CLK_GOUT_CORE_AD_AXI_GIC_ACLKM 15
+#define CLK_GOUT_CORE_ASYNCSFR_WR_DMC0_PCLK 16
+#define CLK_GOUT_CORE_ASYNCSFR_WR_DMC1_PCLK 17
+#define CLK_GOUT_CORE_AXI_US_A40_64TO128_DIT_ACLK 18
+#define CLK_GOUT_CORE_BAAW_P_GNSS_PCLK 19
+#define CLK_GOUT_CORE_BAAW_P_MODEM_PCLK 20
+#define CLK_GOUT_CORE_BAAW_P_SHUB_PCLK 21
+#define CLK_GOUT_CORE_BAAW_P_WLBT_PCLK 22
+#define CLK_GOUT_CORE_CCI_550_ACLK 23
+#define CLK_GOUT_CORE_DIT_ICLKL2A 24
+#define CLK_GOUT_CORE_GIC400_AIHWACG_CLK 25
+#define CLK_GOUT_CORE_LHM_ACEL_D0_ISP_CLK 26
+#define CLK_GOUT_CORE_LHM_ACEL_D0_MFC_CLK 27
+#define CLK_GOUT_CORE_LHM_ACEL_D1_ISP_CLK 28
+#define CLK_GOUT_CORE_LHM_ACEL_D1_MFC_CLK 29
+#define CLK_GOUT_CORE_LHM_ACEL_D_CAM_CLK 30
+#define CLK_GOUT_CORE_LHM_ACEL_D_DPU_CLK 31
+#define CLK_GOUT_CORE_LHM_ACEL_D_FSYS_CLK 32
+#define CLK_GOUT_CORE_LHM_ACEL_D_G2D_CLK 33
+#define CLK_GOUT_CORE_LHM_ACEL_D_USB_CLK 34
+#define CLK_GOUT_CORE_LHM_ACEL_D_VIPX1_CLK 35
+#define CLK_GOUT_CORE_LHM_ACEL_D_VIPX2_CLK 36
+#define CLK_GOUT_CORE_LHM_ACE_D_CPUCL0_CLK 37
+#define CLK_GOUT_CORE_LHM_ACE_D_CPUCL1_CLK 38
+#define CLK_GOUT_CORE_LHM_AXI_D0_MODEM_CLK 39
+#define CLK_GOUT_CORE_LHM_AXI_D1_MODEM_CLK 40
+#define CLK_GOUT_CORE_LHM_AXI_D_ABOX_CLK 41
+#define CLK_GOUT_CORE_LHM_AXI_D_APM_CLK 42
+#define CLK_GOUT_CORE_LHM_AXI_D_CSSYS_CLK 43
+#define CLK_GOUT_CORE_LHM_AXI_D_G3D_CLK 44
+#define CLK_GOUT_CORE_LHM_AXI_D_GNSS_CLK 45
+#define CLK_GOUT_CORE_LHM_AXI_D_SHUB_CLK 46
+#define CLK_GOUT_CORE_LHM_AXI_D_WLBT_CLK 47
+#define CLK_GOUT_CORE_LHS_AXI_D0_MIF_CPU_CLK 48
+#define CLK_GOUT_CORE_LHS_AXI_D0_MIF_CP_CLK 49
+#define CLK_GOUT_CORE_LHS_AXI_D0_MIF_NRT_CLK 50
+#define CLK_GOUT_CORE_LHS_AXI_D0_MIF_RT_CLK 51
+#define CLK_GOUT_CORE_LHS_AXI_D1_MIF_CPU_CLK 52
+#define CLK_GOUT_CORE_LHS_AXI_D1_MIF_CP_CLK 53
+#define CLK_GOUT_CORE_LHS_AXI_D1_MIF_NRT_CLK 54
+#define CLK_GOUT_CORE_LHS_AXI_D1_MIF_RT_CLK 55
+#define CLK_GOUT_CORE_LHS_AXI_P_APM_CLK 56
+#define CLK_GOUT_CORE_LHS_AXI_P_CAM_CLK 57
+#define CLK_GOUT_CORE_LHS_AXI_P_CPUCL0_CLK 58
+#define CLK_GOUT_CORE_LHS_AXI_P_CPUCL1_CLK 59
+#define CLK_GOUT_CORE_LHS_AXI_P_DISPAUD_CLK 60
+#define CLK_GOUT_CORE_LHS_AXI_P_FSYS_CLK 61
+#define CLK_GOUT_CORE_LHS_AXI_P_G2D_CLK 62
+#define CLK_GOUT_CORE_LHS_AXI_P_G3D_CLK 63
+#define CLK_GOUT_CORE_LHS_AXI_P_GNSS_CLK 64
+#define CLK_GOUT_CORE_LHS_AXI_P_ISP_CLK 65
+#define CLK_GOUT_CORE_LHS_AXI_P_MFC_CLK 66
+#define CLK_GOUT_CORE_LHS_AXI_P_MIF0_CLK 67
+#define CLK_GOUT_CORE_LHS_AXI_P_MIF1_CLK 68
+#define CLK_GOUT_CORE_LHS_AXI_P_MODEM_CLK 69
+#define CLK_GOUT_CORE_LHS_AXI_P_PERI_CLK 70
+#define CLK_GOUT_CORE_LHS_AXI_P_SHUB_CLK 71
+#define CLK_GOUT_CORE_LHS_AXI_P_USB_CLK 72
+#define CLK_GOUT_CORE_LHS_AXI_P_VIPX1_CLK 73
+#define CLK_GOUT_CORE_LHS_AXI_P_VIPX2_CLK 74
+#define CLK_GOUT_CORE_LHS_AXI_P_WLBT_CLK 75
+#define CLK_GOUT_CORE_PDMA_CORE_ACLK_PDMA0 76
+#define CLK_GOUT_CORE_PGEN_LITE_SIREX_CLK 77
+#define CLK_GOUT_CORE_PGEN_PDMA_CLK 78
+#define CLK_GOUT_CORE_PPCFW_G3D_ACLK 79
+#define CLK_GOUT_CORE_PPCFW_G3D_PCLK 80
+#define CLK_GOUT_CORE_PPFW_CORE_MEM0_CLK 81
+#define CLK_GOUT_CORE_PPFW_CORE_MEM1_CLK 82
+#define CLK_GOUT_CORE_PPFW_CORE_PERI_CLK 83
+#define CLK_GOUT_CORE_PPMU_ACE_CPUCL0_ACLK 84
+#define CLK_GOUT_CORE_PPMU_ACE_CPUCL0_PCLK 85
+#define CLK_GOUT_CORE_PPMU_ACE_CPUCL1_ACLK 86
+#define CLK_GOUT_CORE_PPMU_ACE_CPUCL1_PCLK 87
+#define CLK_GOUT_CORE_BUSD_CLK 88
+#define CLK_GOUT_CORE_BUSP_G3D_OCC_CLK 89
+#define CLK_GOUT_CORE_BUSP_CLK 90
+#define CLK_GOUT_CORE_BUSP_OCC_CLK 91
+#define CLK_GOUT_CORE_CCI_CLK 92
+#define CLK_GOUT_CORE_CCI_OCC_CLK 93
+#define CLK_GOUT_CORE_G3D_CLK 94
+#define CLK_GOUT_CORE_G3D_OCC_CLK 95
+#define CLK_GOUT_CORE_GIC_CLK 96
+#define CLK_GOUT_CORE_OSCCLK_CLK 97
+#define CLK_GOUT_CORE_SFR_APBIF_CMU_TOPC_PCLK 98
+#define CLK_GOUT_CORE_SIREX_ACLK 99
+#define CLK_GOUT_CORE_SIREX_PCLK 100
+#define CLK_GOUT_CORE_SPDMA_CORE_ACLK_PDMA1 101
+#define CLK_GOUT_CORE_SYSREG_PCLK 102
+#define CLK_GOUT_CORE_TREX_D_ACLK 103
+#define CLK_GOUT_CORE_TREX_D_CCLK 104
+#define CLK_GOUT_CORE_TREX_D_GCLK 105
+#define CLK_GOUT_CORE_TREX_D_PCLK 106
+#define CLK_GOUT_CORE_TREX_D_NRT_ACLK 107
+#define CLK_GOUT_CORE_TREX_D_NRT_PCLK 108
+#define CLK_GOUT_CORE_TREX_P_ACLK_P_CORE 109
+#define CLK_GOUT_CORE_TREX_P_CCLK_P_CORE 110
+#define CLK_GOUT_CORE_TREX_P_PCLK 111
+#define CLK_GOUT_CORE_TREX_P_PCLK_P_CORE 112
+#define CLK_GOUT_CORE_XIU_D_ACLK 113
+
+/* CMU_CPUCL0 PLLs */
+#define CLK_FOUT_CPUCL0_PLL 1
+
+/* CMU_CPUCL0 muxes */
+#define CLK_MOUT_PLL_CPUCL0_DBG_USER 2
+#define CLK_MOUT_PLL_CPUCL0_SWITCH_USER 3
+#define CLK_MOUT_CLK_CPUCL0_PLL 4
+
+/* CMU_CPUCL0 dividers */
+#define CLK_DOUT_CLK_CLUSTER0_ACLK 5
+#define CLK_DOUT_CLK_CLUSTER0_CNTCLK 6
+#define CLK_DOUT_CLK_CLUSTER0_PCLKDBG 7
+#define CLK_DOUT_CLK_CPUCL0_CMUREF 8
+#define CLK_DOUT_CLK_CPUCL0_CPU 9
+#define CLK_DOUT_CLK_CPUCL0_PCLK 10
+
+/* CMU_CPUCL0 gates */
+#define CLK_GOUT_CLK_CPUCL0_CMU_PCLK 11
+#define CLK_GOUT_CLK_CPUCL0_HPM_TARGETCLK_C 12
+#define CLK_GOUT_CLK_CPUCL0_OSCCLK_CLK 13
+#define CLK_GOUT_CLK_CLUSTER0_CPU 14
+#define CLK_GOUT_CPUCL0_ADM_APB_G_CSSYS_CORE_PCLKM 15
+#define CLK_GOUT_CPUCL0_ADS_AHB_G_CSSYS_FSYS_HCLKS 16
+#define CLK_GOUT_CPUCL0_ADS_APB_G_CSSYS_CPUCL1_PCLKS 17
+#define CLK_GOUT_CPUCL0_ADS_APB_G_P8Q_PCLKS 18
+#define CLK_GOUT_CPUCL0_AD_APB_P_DUMP_PC_CPUCL0_PCLKM 19
+#define CLK_GOUT_CPUCL0_AD_APB_P_DUMP_PC_CPUCL1_PCLKM 20
+#define CLK_GOUT_CPUCL0_BUSIF_HPMCPUCL0_PCLK 21
+#define CLK_GOUT_CPUCL0_CSSYS_DBG_PCLKDBG 22
+#define CLK_GOUT_CPUCL0_DUMP_PC_CPUCL0_PCLK 23
+#define CLK_GOUT_CPUCL0_DUMP_PC_CPUCL1_PCLK 24
+#define CLK_GOUT_CPUCL0_LHM_AXI_P_CPUCL0_CLK 25
+#define CLK_GOUT_CPUCL0_LHS_AXI_D_CSSYS_CLK 26
+#define CLK_GOUT_CPUCL0_DBG_CLK 27
+#define CLK_GOUT_CPUCL0_PCLK_CLK 28
+#define CLK_GOUT_CPUCL0_SECJTAG_CLK 29
+#define CLK_GOUT_CPUCL0_SYSREG_PCLK 30
+
+/* CMU_CPUCL1 PLLs */
+#define CLK_FOUT_CPUCL1_PLL 1
+
+/* CMU_CPUCL1 muxes */
+#define CLK_MOUT_PLL_CPUCL1_SWITCH_USER 2
+#define CLK_MOUT_CLK_CPUCL1_PLL 3
+
+/* CMU_CPUCL1 dividers */
+#define CLK_DOUT_CLK_CLUSTER1_ACLK 4
+#define CLK_DOUT_CLK_CLUSTER1_CNTCLK 5
+#define CLK_DOUT_CLK_CPUCL1_CMUREF 6
+#define CLK_DOUT_CLK_CPUCL1_CPU 7
+#define CLK_DOUT_CLK_CPUCL1_PCLK 8
+#define CLK_DOUT_CLK_CPUCL1_PCLKDBG 9
+
+/* CMU_CPUCL1 gates */
+#define CLK_GOUT_CLK_CPUCL1_CMU_PCLK 10
+#define CLK_GOUT_CLK_CPUCL1_HPM_TARGETCLK_C 11
+#define CLK_GOUT_CLK_CPUCL1_OSCCLK_CLK 12
+#define CLK_GOUT_CLK_CLUSTER1_CPU 13
+#define CLK_GOUT_CPUCL1_ADM_APB_G_CSSYS_CPUCL1_PCLKM 14
+#define CLK_GOUT_CPUCL1_BUSIF_HPMCPUCL1_PCLK 15
+#define CLK_GOUT_CPUCL1_LHM_AXI_P_CPUCL1_CLK 16
+#define CLK_GOUT_CPUCL1_LHS_ACE_D_CLK 17
+#define CLK_GOUT_CPUCL1_ACLK_CLK 18
+#define CLK_GOUT_CPUCL1_PCLKDBG_CLK 19
+#define CLK_GOUT_CPUCL1_PCLK_CLK 20
+#define CLK_GOUT_CPUCL1_SYSREG_PCLK 21
+
+/* CMU_DISPAUD PLLs */
+#define CLK_FOUT_AUD_PLL 1
+
+/* CMU_DISPAUD muxes */
+#define CLK_MOUT_PLL_DISPAUD_AUD_USER 2
+#define CLK_MOUT_PLL_DISPAUD_CPU_USER 3
+#define CLK_MOUT_PLL_DISPAUD_DISP_USER 4
+#define CLK_MOUT_CLK_AUD_BUS 5
+#define CLK_MOUT_CLK_AUD_CPU 6
+#define CLK_MOUT_CLK_AUD_CPU_HCH 7
+#define CLK_MOUT_CLK_AUD_FM 8
+#define CLK_MOUT_CLK_AUD_UAIF0 9
+#define CLK_MOUT_CLK_AUD_UAIF1 10
+#define CLK_MOUT_CLK_AUD_UAIF2 11
+
+/* CMU_DISPAUD dividers */
+#define CLK_DOUT_CLK_AUD_AUDIF 12
+#define CLK_DOUT_CLK_AUD_BUS 13
+#define CLK_DOUT_CLK_AUD_CPU 14
+#define CLK_DOUT_CLK_AUD_CPU_ACLK 15
+#define CLK_DOUT_CLK_AUD_CPU_PCLKDBG 16
+#define CLK_DOUT_CLK_AUD_DSIF 17
+#define CLK_DOUT_CLK_AUD_FM 18
+#define CLK_DOUT_CLK_AUD_FM_SPDY 19
+#define CLK_DOUT_CLK_AUD_UAIF0 20
+#define CLK_DOUT_CLK_AUD_UAIF1 21
+#define CLK_DOUT_CLK_AUD_UAIF2 22
+#define CLK_DOUT_CLK_DISPAUD_BUSP 23
+
+/* CMU_DISPAUD gates */
+#define CLK_GOUT_CLK_DISPAUD_ABOX_BCLK_UAIF0 24
+#define CLK_GOUT_CLK_DISPAUD_ABOX_BCLK_UAIF1 25
+#define CLK_GOUT_CLK_DISPAUD_ABOX_BCLK_UAIF2 26
+#define CLK_GOUT_CLK_DISPAUD_CMU_PCLK 27
+#define CLK_GOUT_CLK_DISPAUD_CLK_AUD_UAIF0_CLK 28
+#define CLK_GOUT_CLK_DISPAUD_CLK_AUD_UAIF1_CLK 29
+#define CLK_GOUT_CLK_DISPAUD_CLK_AUD_UAIF2_CLK 30
+#define CLK_GOUT_CLK_DISPAUD_OSCCLK_CLK 31
+#define CLK_GOUT_DISPAUD_ABOX_ACLK 32
+#define CLK_GOUT_DISPAUD_ABOX_BCLK_DSIF 33
+#define CLK_GOUT_DISPAUD_ABOX_BCLK_SPDY 34
+#define CLK_GOUT_DISPAUD_ABOX_CCLK_ASB 35
+#define CLK_GOUT_DISPAUD_ABOX_CCLK_CA7 36
+#define CLK_GOUT_DISPAUD_ABOX_CCLK_DBG 37
+#define CLK_GOUT_DISPAUD_ABOX_OSC_SPDY 38
+#define CLK_GOUT_DISPAUD_AXI_US_32TO128_ACLK 39
+#define CLK_GOUT_DISPAUD_CLK_DISPAUD_AUD 40
+#define CLK_GOUT_DISPAUD_CLK_DISPAUD_DISP 41
+#define CLK_GOUT_DISPAUD_BTM_ABOX_ACLK 42
+#define CLK_GOUT_DISPAUD_BTM_ABOX_PCLK 43
+#define CLK_GOUT_DISPAUD_BTM_DPU_ACLK 44
+#define CLK_GOUT_DISPAUD_BTM_DPU_PCLK 45
+#define CLK_GOUT_DISPAUD_DFTMUX_AUD_CODEC_MCLK 46
+#define CLK_GOUT_DISPAUD_DPU_ACLK_DECON 47
+#define CLK_GOUT_DISPAUD_DPU_ACLK_DMA 48
+#define CLK_GOUT_DISPAUD_DPU_ACLK_DPP 49
+#define CLK_GOUT_DISPAUD_GPIO_DISPAUD_PCLK 50
+#define CLK_GOUT_DISPAUD_LHM_AXI_P_DISPAUD_CLK 51
+#define CLK_GOUT_DISPAUD_LHS_ACEL_D_DPU_CLK 52
+#define CLK_GOUT_DISPAUD_LHS_AXI_D_ABOX_CLK 53
+#define CLK_GOUT_DISPAUD_PERI_AXI_ASB_ACLKM 54
+#define CLK_GOUT_DISPAUD_PERI_AXI_ASB_PCLK 55
+#define CLK_GOUT_DISPAUD_PPMU_ABOX_ACLK 56
+#define CLK_GOUT_DISPAUD_PPMU_ABOX_PCLK 57
+#define CLK_GOUT_DISPAUD_PPMU_DPU_ACLK 58
+#define CLK_GOUT_DISPAUD_PPMU_DPU_PCLK 59
+#define CLK_GOUT_DISPAUD_CLK_AUD_CPU_ACLK_CLK 60
+#define CLK_GOUT_DISPAUD_CLK_AUD_CPU_CLKIN_CLK 61
+#define CLK_GOUT_DISPAUD_CLK_AUD_CPU_PCLKDBG_CLK 62
+#define CLK_GOUT_DISPAUD_CLK_AUD_DSIF_CLK 63
+#define CLK_GOUT_DISPAUD_CLK_AUD_CLK 64
+#define CLK_GOUT_DISPAUD_CLK_BUSP_CLK 65
+#define CLK_GOUT_DISPAUD_CLK_DISP_CLK 66
+#define CLK_GOUT_DISPAUD_SMMU_ABOX_CLK 67
+#define CLK_GOUT_DISPAUD_SMMU_DPU_CLK 68
+#define CLK_GOUT_DISPAUD_SYSREG_PCLK 69
+#define CLK_GOUT_DISPAUD_WDT_AUD_PCLK 70
+
+/* CMU_FSYS muxes */
+#define CLK_MOUT_PLL_FSYS_BUS_USER 1
+#define CLK_MOUT_PLL_FSYS_MMC_CARD_USER 2
+#define CLK_MOUT_PLL_FSYS_MMC_EMBD_USER 3
+#define CLK_MOUT_PLL_FSYS_UFS_EMBD_USER 4
+
+/* CMU_FSYS gates */
+#define CLK_GOUT_FSYS_CMU_PCLK 5
+#define CLK_GOUT_FSYS_OSCCLK_CLK 6
+#define CLK_GOUT_FSYS_ADM_AHB_SSS_HCLKM 7
+#define CLK_GOUT_FSYS_BTM_ACLK 8
+#define CLK_GOUT_FSYS_BTM_PCLK 9
+#define CLK_GOUT_FSYS_GPIO_PCLK 10
+#define CLK_GOUT_FSYS_LHM_AXI_P_CLK 11
+#define CLK_GOUT_FSYS_LHS_ACEL_D_CLK 12
+#define CLK_GOUT_FSYS_MMC_CARD_ACLK 13
+#define CLK_GOUT_FSYS_MMC_CARD_SDCLKIN 14
+#define CLK_GOUT_FSYS_MMC_EMBD_ACLK 15
+#define CLK_GOUT_FSYS_MMC_EMBD_SDCLKIN 16
+#define CLK_GOUT_FSYS_PGEN_LITE_CLK 17
+#define CLK_GOUT_FSYS_PPMU_ACLK 18
+#define CLK_GOUT_FSYS_PPMU_PCLK 19
+#define CLK_GOUT_FSYS_BUS_CLK 20
+#define CLK_GOUT_FSYS_SYSREG_PCLK 21
+#define CLK_GOUT_FSYS_UFS_EMBD_ACLK 22
+#define CLK_GOUT_FSYS_UFS_EMBD_CLK_UNIPRO 23
+#define CLK_GOUT_FSYS_UFS_EMBD_FMP_CLK 24
+#define CLK_GOUT_FSYS_XIU_D_ACLK 25
+
+/* CMU_G2D muxes */
+#define CLK_MOUT_PLL_G2D_G2D_USER 1
+#define CLK_MOUT_PLL_G2D_MSCL_USER 2
+
+/* CMU_G2D dividers */
+#define CLK_DOUT_CLK_G2D_BUSP 3
+
+/* CMU_G2D gates */
+#define CLK_GOUT_CLK_G2D_CMU_PCLK 4
+#define CLK_GOUT_CLK_G2D_OSCCLK_CLK 5
+#define CLK_GOUT_G2D_AS_AXI_JPEG_ACLKM 6
+#define CLK_GOUT_G2D_AS_AXI_JPEG_ACLKS 7
+#define CLK_GOUT_G2D_AS_AXI_MSCL_ACLKM 8
+#define CLK_GOUT_G2D_AS_AXI_MSCL_ACLKS 9
+#define CLK_GOUT_G2D_CLK_G2D_G2D 10
+#define CLK_GOUT_G2D_CLK_G2D_MSCL 11
+#define CLK_GOUT_G2D_BTM_G2D_ACLK 12
+#define CLK_GOUT_G2D_BTM_G2D_PCLK 13
+#define CLK_GOUT_G2D_G2D_ACLK 14
+#define CLK_GOUT_G2D_JPEG_FIMP_CLK 15
+#define CLK_GOUT_G2D_LHM_AXI_P_CLK 16
+#define CLK_GOUT_G2D_LHS_ACEL_D_CLK 17
+#define CLK_GOUT_G2D_MSCL_ACLK 18
+#define CLK_GOUT_G2D_PGEN100_LITE_CLK 19
+#define CLK_GOUT_G2D_PPMU_ACLK 20
+#define CLK_GOUT_G2D_PPMU_PCLK 21
+#define CLK_GOUT_G2D_BUSP_CLK 22
+#define CLK_GOUT_G2D_SYSMMU_CLK 23
+#define CLK_GOUT_G2D_SYSREG_PCLK 24
+#define CLK_GOUT_G2D_XIU_D_MSCL_ACLK 25
+
+/* CMU_G3D PLLs */
+#define CLK_FOUT_G3D_PLL 1
+
+/* CMU_G3D muxes */
+#define CLK_MOUT_G3D_SWITCH_USER 2
+#define CLK_MOUT_CLK_G3D_BUSD 3
+
+/* CMU_G3D dividers */
+#define CLK_DOUT_CLK_G3D_BUSD 4
+#define CLK_DOUT_CLK_G3D_BUSP 5
+
+/* CMU_G3D gates */
+#define CLK_GOUT_CLK_G3D_CMU_PCLK 6
+#define CLK_GOUT_CLK_G3D_G3D_CLK 7
+#define CLK_GOUT_CLK_G3D_HPM_TARGETCLK_C 8
+#define CLK_GOUT_CLK_G3D_OSCCLK_CLK 9
+#define CLK_GOUT_G3D_BTM_G3D_ACLK 10
+#define CLK_GOUT_G3D_BTM_G3D_PCLK 11
+#define CLK_GOUT_G3D_BUSIF_HPMG3D_PCLK 12
+#define CLK_GOUT_G3D_GRAY2BIN_G3D_CLK 13
+#define CLK_GOUT_G3D_LHM_AXI_G3DSFR_CLK 14
+#define CLK_GOUT_G3D_LHM_AXI_P_G3D_CLK 15
+#define CLK_GOUT_G3D_LHS_AXI_D_G3D_CLK 16
+#define CLK_GOUT_G3D_LHS_AXI_G3DSFR_CLK 17
+#define CLK_GOUT_G3D_PGEN_LITE_G3D_CLK 18
+#define CLK_GOUT_G3D_BUSD_CLK 19
+#define CLK_GOUT_G3D_BUSP_CLK 20
+#define CLK_GOUT_G3D_SYSREG_PCLK 21
+
+/* CMU_PERI muxes */
+#define CLK_MOUT_PLL_PERI_BUS_USER 1
+#define CLK_MOUT_PLL_PERI_IP_USER 2
+#define CLK_MOUT_PLL_PERI_UART_USER 3
+
+/* CMU_PERI dividers */
+#define CLK_DOUT_CLK_PERI_I2C 4
+#define CLK_DOUT_CLK_PERI_SPI0 5
+#define CLK_DOUT_CLK_PERI_SPI1 6
+#define CLK_DOUT_CLK_PERI_SPI2 7
+#define CLK_DOUT_CLK_PERI_USI_I2C 8
+#define CLK_DOUT_CLK_PERI_USI_USI 9
+
+/* CMU_PERI gates */
+#define CLK_GOUT_CLK_PERI_I2C 10
+#define CLK_GOUT_CLK_PERI_SPI0 11
+#define CLK_GOUT_CLK_PERI_SPI1 12
+#define CLK_GOUT_CLK_PERI_SPI2 13
+#define CLK_GOUT_CLK_PERI_USI_I2C 14
+#define CLK_GOUT_CLK_PERI_USI_USI 15
+#define CLK_GOUT_PERI_AXI2AHB_MSD32_ACLK 16
+#define CLK_GOUT_PERI_BUSIF_TMU_PCLK 17
+#define CLK_GOUT_PERI_CAMI2C_0_IPCLK 18
+#define CLK_GOUT_PERI_CAMI2C_0_PCLK 19
+#define CLK_GOUT_PERI_CAMI2C_1_IPCLK 20
+#define CLK_GOUT_PERI_CAMI2C_1_PCLK 21
+#define CLK_GOUT_PERI_CAMI2C_2_IPCLK 22
+#define CLK_GOUT_PERI_CAMI2C_2_PCLK 23
+#define CLK_GOUT_PERI_CAMI2C_3_IPCLK 24
+#define CLK_GOUT_PERI_CAMI2C_3_PCLK 25
+#define CLK_GOUT_PERI_I2C_0_PCLK 26
+#define CLK_GOUT_PERI_I2C_1_PCLK 27
+#define CLK_GOUT_PERI_I2C_2_PCLK 28
+#define CLK_GOUT_PERI_I2C_3_PCLK 29
+#define CLK_GOUT_PERI_I2C_4_PCLK 30
+#define CLK_GOUT_PERI_I2C_5_PCLK 31
+#define CLK_GOUT_PERI_I2C_6_PCLK 32
+#define CLK_GOUT_PERI_GPIO_PCLK 33
+#define CLK_GOUT_PERI_LHM_AXI_P_PERI_CLK 34
+#define CLK_GOUT_PERI_MCT_PCLK 35
+#define CLK_GOUT_PERI_OTP_CON_TOP_PCLK 36
+#define CLK_GOUT_PERI_PWM_MOTOR_PCLK_S0 37
+#define CLK_GOUT_PERI_BUS_CLK 38
+#define CLK_GOUT_PERI_I2C_CLK 39
+#define CLK_GOUT_PERI_SPI_0_CLK 40
+#define CLK_GOUT_PERI_SPI_1_CLK 41
+#define CLK_GOUT_PERI_SPI_2_CLK 42
+#define CLK_GOUT_PERI_UART_CLK 43
+#define CLK_GOUT_PERI_USI00_I2C_CLK 44
+#define CLK_GOUT_PERI_USI00_USI_CLK 45
+#define CLK_GOUT_PERI_SPI_0_PCLK 46
+#define CLK_GOUT_PERI_SPI_0_IPCLK 47
+#define CLK_GOUT_PERI_SPI_1_PCLK 48
+#define CLK_GOUT_PERI_SPI_1_IPCLK 49
+#define CLK_GOUT_PERI_SPI_2_PCLK 50
+#define CLK_GOUT_PERI_SPI_2_IPCLK 51
+#define CLK_GOUT_PERI_SYSREG_PCLK 52
+#define CLK_GOUT_PERI_UART_IPCLK 53
+#define CLK_GOUT_PERI_UART_PCLK 54
+#define CLK_GOUT_PERI_USI00_I2C_IPCLK 55
+#define CLK_GOUT_PERI_USI00_I2C_PCLK 56
+#define CLK_GOUT_PERI_USI00_USI_IPCLK 57
+#define CLK_GOUT_PERI_USI00_USI_PCLK 58
+#define CLK_GOUT_PERI_WDT_CLUSTER0_PCLK 59
+#define CLK_GOUT_PERI_WDT_CLUSTER1_PCLK 60
--
2.47.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 2/8] clk: samsung: clk-pll: Add support for pll_1061x
2025-09-14 21:19 [PATCH 0/8] clk: samsung: Introduce support for Exynos9610 clocks Alexandru Chimac
2025-09-14 21:19 ` [PATCH 1/8] dt-bindings: clock: samsung: Add Exynos9610 CMU bindings Alexandru Chimac
@ 2025-09-14 21:19 ` Alexandru Chimac
2025-09-15 4:21 ` Peng Fan
2025-09-14 21:19 ` [PATCH 3/8] clk: samsung: Introduce Exynos9610 clock controller driver Alexandru Chimac
` (5 subsequent siblings)
7 siblings, 1 reply; 13+ messages in thread
From: Alexandru Chimac @ 2025-09-14 21:19 UTC (permalink / raw)
To: Krzysztof Kozlowski, Sylwester Nawrocki, Chanwoo Choi,
Alim Akhtar, Michael Turquette, Stephen Boyd, Rob Herring,
Conor Dooley, Alexandru Chimac, Krzysztof Kozlowski
Cc: linux-samsung-soc, linux-clk, devicetree, linux-arm-kernel,
linux-kernel, Alexandru Chimac
These PLLs are found in the Exynos9610 and Exynos9810 SoCs, and
are similar to pll_1460x, so the code for that can handle this
PLL with a few small adaptations.
Signed-off-by: Alexandru Chimac <alex@chimac.ro>
---
drivers/clk/samsung/clk-pll.c | 29 ++++++++++++++++++++++-------
drivers/clk/samsung/clk-pll.h | 1 +
2 files changed, 23 insertions(+), 7 deletions(-)
diff --git a/drivers/clk/samsung/clk-pll.c b/drivers/clk/samsung/clk-pll.c
index 7bea7be1d7e45c32f0b303ffa55ce9cde4a4f71d..5fa553eab8e4b53a8854848737f619ef6a9c645a 100644
--- a/drivers/clk/samsung/clk-pll.c
+++ b/drivers/clk/samsung/clk-pll.c
@@ -785,15 +785,20 @@ static unsigned long samsung_pll46xx_recalc_rate(struct clk_hw *hw,
u64 fvco = parent_rate;
pll_con0 = readl_relaxed(pll->con_reg);
- pll_con1 = readl_relaxed(pll->con_reg + 4);
- mdiv = (pll_con0 >> PLL46XX_MDIV_SHIFT) & ((pll->type == pll_1460x) ?
+ if (pll->type == pll_1061x)
+ pll_con1 = readl_relaxed(pll->con_reg + 12);
+ else
+ pll_con1 = readl_relaxed(pll->con_reg + 4);
+ mdiv = (pll_con0 >> PLL46XX_MDIV_SHIFT) & (((pll->type == pll_1460x)
+ || (pll->type == pll_1061x)) ?
PLL1460X_MDIV_MASK : PLL46XX_MDIV_MASK);
pdiv = (pll_con0 >> PLL46XX_PDIV_SHIFT) & PLL46XX_PDIV_MASK;
sdiv = (pll_con0 >> PLL46XX_SDIV_SHIFT) & PLL46XX_SDIV_MASK;
kdiv = pll->type == pll_4650c ? pll_con1 & PLL4650C_KDIV_MASK :
pll_con1 & PLL46XX_KDIV_MASK;
- shift = ((pll->type == pll_4600) || (pll->type == pll_1460x)) ? 16 : 10;
+ shift = ((pll->type == pll_4600) || (pll->type == pll_1460x)
+ || (pll->type == pll_1061x)) ? 16 : 10;
fvco *= (mdiv << shift) + kdiv;
do_div(fvco, (pdiv << sdiv));
@@ -831,7 +836,10 @@ static int samsung_pll46xx_set_rate(struct clk_hw *hw, unsigned long drate,
}
con0 = readl_relaxed(pll->con_reg);
- con1 = readl_relaxed(pll->con_reg + 0x4);
+ if (pll->type == pll_1061x)
+ con1 = readl_relaxed(pll->con_reg + 0xc);
+ else
+ con1 = readl_relaxed(pll->con_reg + 0x4);
if (!(samsung_pll46xx_mpk_change(con0, con1, rate))) {
/* If only s change, change just s value only*/
@@ -849,7 +857,7 @@ static int samsung_pll46xx_set_rate(struct clk_hw *hw, unsigned long drate,
lock = 0xffff;
/* Set PLL PMS and VSEL values. */
- if (pll->type == pll_1460x) {
+ if ((pll->type == pll_1460x) || (pll->type == pll_1061x)) {
con0 &= ~((PLL1460X_MDIV_MASK << PLL46XX_MDIV_SHIFT) |
(PLL46XX_PDIV_MASK << PLL46XX_PDIV_SHIFT) |
(PLL46XX_SDIV_MASK << PLL46XX_SDIV_SHIFT));
@@ -866,7 +874,10 @@ static int samsung_pll46xx_set_rate(struct clk_hw *hw, unsigned long drate,
(rate->sdiv << PLL46XX_SDIV_SHIFT);
/* Set PLL K, MFR and MRR values. */
- con1 = readl_relaxed(pll->con_reg + 0x4);
+ if (pll->type == pll_1061x)
+ con1 = readl_relaxed(pll->con_reg + 0xc);
+ else
+ con1 = readl_relaxed(pll->con_reg + 0x4);
con1 &= ~((PLL46XX_KDIV_MASK << PLL46XX_KDIV_SHIFT) |
(PLL46XX_MFR_MASK << PLL46XX_MFR_SHIFT) |
(PLL46XX_MRR_MASK << PLL46XX_MRR_SHIFT));
@@ -877,7 +888,10 @@ static int samsung_pll46xx_set_rate(struct clk_hw *hw, unsigned long drate,
/* Write configuration to PLL */
writel_relaxed(lock, pll->lock_reg);
writel_relaxed(con0, pll->con_reg);
- writel_relaxed(con1, pll->con_reg + 0x4);
+ if (pll->type == pll_1061x)
+ writel_relaxed(con1, pll->con_reg + 0xc);
+ else
+ writel_relaxed(con1, pll->con_reg + 0x4);
/* Wait for PLL lock */
return samsung_pll_lock_wait(pll, PLL46XX_LOCKED);
@@ -1563,6 +1577,7 @@ static void __init _samsung_clk_register_pll(struct samsung_clk_provider *ctx,
case pll_4650:
case pll_4650c:
case pll_1460x:
+ case pll_1061x:
if (!pll->rate_table)
init.ops = &samsung_pll46xx_clk_min_ops;
else
diff --git a/drivers/clk/samsung/clk-pll.h b/drivers/clk/samsung/clk-pll.h
index 6c8bb7f26da5436dfccae89a95d1b0025f7f3e0b..7f36d1d03dcf5888027ce9b6f75ccc9a7a135be2 100644
--- a/drivers/clk/samsung/clk-pll.h
+++ b/drivers/clk/samsung/clk-pll.h
@@ -45,6 +45,7 @@ enum samsung_pll_type {
pll_531x,
pll_1051x,
pll_1052x,
+ pll_1061x,
pll_0717x,
pll_0718x,
pll_0732x,
--
2.47.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 3/8] clk: samsung: Introduce Exynos9610 clock controller driver
2025-09-14 21:19 [PATCH 0/8] clk: samsung: Introduce support for Exynos9610 clocks Alexandru Chimac
2025-09-14 21:19 ` [PATCH 1/8] dt-bindings: clock: samsung: Add Exynos9610 CMU bindings Alexandru Chimac
2025-09-14 21:19 ` [PATCH 2/8] clk: samsung: clk-pll: Add support for pll_1061x Alexandru Chimac
@ 2025-09-14 21:19 ` Alexandru Chimac
2025-09-14 21:19 ` [PATCH 4/8] arm64: dts: exynos9610: Enable clock support Alexandru Chimac
` (4 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Alexandru Chimac @ 2025-09-14 21:19 UTC (permalink / raw)
To: Krzysztof Kozlowski, Sylwester Nawrocki, Chanwoo Choi,
Alim Akhtar, Michael Turquette, Stephen Boyd, Rob Herring,
Conor Dooley, Alexandru Chimac, Krzysztof Kozlowski
Cc: linux-samsung-soc, linux-clk, devicetree, linux-arm-kernel,
linux-kernel, Alexandru Chimac
The current implementation contains support for:
- CMU_TOP - which generates clocks for other blocks
- CMU_APM - which generates clocks for APM and CMU_CMGP
- CMU_CAM
- CMU_CMGP
- CMU_CORE
- CMU_CPUCL0/1
- CMU_DISPAUD - which generates clocks for display and ABOX
- CMU_FSYS - which generates clocks for MMC/UFS
- CMU_G2D, G3D
- CMU_PERI - which generates clocks for peripherals
Signed-off-by: Alexandru Chimac <alex@chimac.ro>
---
drivers/clk/samsung/Makefile | 1 +
drivers/clk/samsung/clk-exynos9610.c | 3652 ++++++++++++++++++++++++++++++++++
2 files changed, 3653 insertions(+)
diff --git a/drivers/clk/samsung/Makefile b/drivers/clk/samsung/Makefile
index ef464f434740f96623f9df62f94e2903e14e2226..2605bdecb5fff6b5a8f73cad50e8c1a618cfba63 100644
--- a/drivers/clk/samsung/Makefile
+++ b/drivers/clk/samsung/Makefile
@@ -24,6 +24,7 @@ obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynos7870.o
obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynos7885.o
obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynos850.o
obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynos8895.o
+obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynos9610.o
obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynos990.o
obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynosautov9.o
obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynosautov920.o
diff --git a/drivers/clk/samsung/clk-exynos9610.c b/drivers/clk/samsung/clk-exynos9610.c
new file mode 100644
index 0000000000000000000000000000000000000000..637daae1e4969dba15518f73da74648981351dcb
--- /dev/null
+++ b/drivers/clk/samsung/clk-exynos9610.c
@@ -0,0 +1,3652 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Common clock framework for Exynos9610
+ *
+ * Copyright (c) 2025, Alexandru Chimac <alex@chimac.ro>
+ */
+
+#include <linux/clk.h>
+#include <linux/clk-provider.h>
+#include <linux/of.h>
+#include <linux/platform_device.h>
+
+#include <dt-bindings/clock/samsung,exynos9610.h>
+
+#include "clk.h"
+#include "clk-exynos-arm64.h"
+#include "clk-pll.h"
+
+#define CLKS_NR_TOP (CLK_GOUT_CMU_VIPX2_BUS + 1)
+#define CLKS_NR_APM (CLK_GOUT_APM_XIU_DP_ACLK + 1)
+#define CLKS_NR_CAM (CLK_GOUT_CAM_SYSREG_PCLK + 1)
+#define CLKS_NR_CMGP (CLK_GOUT_CMGP_USI_CMGP04_PCLK + 1)
+#define CLKS_NR_CORE (CLK_GOUT_CORE_XIU_D_ACLK + 1)
+#define CLKS_NR_CPUCL0 (CLK_GOUT_CPUCL0_SYSREG_PCLK + 1)
+#define CLKS_NR_CPUCL1 (CLK_GOUT_CPUCL1_SYSREG_PCLK + 1)
+#define CLKS_NR_DISPAUD (CLK_GOUT_DISPAUD_WDT_AUD_PCLK + 1)
+#define CLKS_NR_FSYS (CLK_GOUT_FSYS_XIU_D_ACLK + 1)
+#define CLKS_NR_G2D (CLK_GOUT_G2D_XIU_D_MSCL_ACLK + 1)
+#define CLKS_NR_G3D (CLK_GOUT_G3D_SYSREG_PCLK + 1)
+#define CLKS_NR_PERI (CLK_GOUT_PERI_WDT_CLUSTER1_PCLK + 1)
+
+/* TOP (0x12100000) */
+#define PLL_LOCKTIME_PLL_MMC 0x0000
+#define PLL_LOCKTIME_PLL_SHARED0 0x0004
+#define PLL_LOCKTIME_PLL_SHARED1 0x0008
+#define PLL_CON0_PLL_MMC 0x0100
+#define PLL_CON3_PLL_MMC 0x010c
+#define PLL_CON0_PLL_SHARED0 0x0120
+#define PLL_CON0_PLL_SHARED1 0x0140
+#define CLK_CON_MUX_MUX_CLKCMU_APM_BUS 0x1000
+#define CLK_CON_MUX_MUX_CLKCMU_CAM_BUS 0x1004
+#define CLK_CON_MUX_MUX_CLKCMU_CIS_CLK0 0x1008
+#define CLK_CON_MUX_MUX_CLKCMU_CIS_CLK1 0x100c
+#define CLK_CON_MUX_MUX_CLKCMU_CIS_CLK2 0x1010
+#define CLK_CON_MUX_MUX_CLKCMU_CIS_CLK3 0x1014
+#define CLK_CON_MUX_MUX_CLKCMU_CORE_BUS 0x1018
+#define CLK_CON_MUX_MUX_CLKCMU_CORE_CCI 0x101c
+#define CLK_CON_MUX_MUX_CLKCMU_CORE_G3D 0x1020
+#define CLK_CON_MUX_MUX_CLKCMU_CPUCL0_DBG 0x1024
+#define CLK_CON_MUX_MUX_CLKCMU_CPUCL0_SWITCH 0x1028
+#define CLK_CON_MUX_MUX_CLKCMU_CPUCL1_SWITCH 0x102c
+#define CLK_CON_MUX_MUX_CLKCMU_DISPAUD_AUD 0x1030
+#define CLK_CON_MUX_MUX_CLKCMU_DISPAUD_CPU 0x1034
+#define CLK_CON_MUX_MUX_CLKCMU_DISPAUD_DISP 0x1038
+#define CLK_CON_MUX_MUX_CLKCMU_FSYS_BUS 0x103c
+#define CLK_CON_MUX_MUX_CLKCMU_FSYS_MMC_CARD 0x1040
+#define CLK_CON_MUX_MUX_CLKCMU_FSYS_MMC_EMBD 0x1044
+#define CLK_CON_MUX_MUX_CLKCMU_FSYS_UFS_EMBD 0x1048
+#define CLK_CON_MUX_MUX_CLKCMU_G2D_G2D 0x104c
+#define CLK_CON_MUX_MUX_CLKCMU_G2D_MSCL 0x1050
+#define CLK_CON_MUX_MUX_CLKCMU_G3D_SWITCH 0x1054
+#define CLK_CON_MUX_MUX_CLKCMU_HPM 0x1058
+#define CLK_CON_MUX_MUX_CLKCMU_ISP_BUS 0x105c
+#define CLK_CON_MUX_MUX_CLKCMU_ISP_GDC 0x1060
+#define CLK_CON_MUX_MUX_CLKCMU_ISP_VRA 0x1064
+#define CLK_CON_MUX_MUX_CLKCMU_MFC_MFC 0x1068
+#define CLK_CON_MUX_MUX_CLKCMU_MFC_WFD 0x106c
+#define CLK_CON_MUX_MUX_CLKCMU_MIF_BUSP 0x1070
+#define CLK_CON_MUX_MUX_CLKCMU_MIF_SWITCH 0x1074
+#define CLK_CON_MUX_MUX_CLKCMU_PERI_BUS 0x1078
+#define CLK_CON_MUX_MUX_CLKCMU_PERI_IP 0x107c
+#define CLK_CON_MUX_MUX_CLKCMU_PERI_UART 0x1080
+#define CLK_CON_MUX_MUX_CLKCMU_USB_BUS 0x1084
+#define CLK_CON_MUX_MUX_CLKCMU_USB_DPGTC 0x1088
+#define CLK_CON_MUX_MUX_CLKCMU_USB_USB30DRD 0x108c
+#define CLK_CON_MUX_MUX_CLKCMU_VIPX1_BUS 0x1090
+#define CLK_CON_MUX_MUX_CLKCMU_VIPX2_BUS 0x1094
+#define CLK_CON_MUX_MUX_CLK_CMU_CMUREF 0x1098
+#define CLK_CON_MUX_MUX_CMU_CMUREF 0x109c
+#define CLK_CON_DIV_AP2CP_SHARED0_PLL_CLK 0x1800
+#define CLK_CON_DIV_AP2CP_SHARED1_PLL_CLK 0x1804
+#define CLK_CON_DIV_CLKCMU_APM_BUS 0x1808
+#define CLK_CON_DIV_CLKCMU_CAM_BUS 0x180c
+#define CLK_CON_DIV_CLKCMU_CIS_CLK0 0x1810
+#define CLK_CON_DIV_CLKCMU_CIS_CLK1 0x1814
+#define CLK_CON_DIV_CLKCMU_CIS_CLK2 0x1818
+#define CLK_CON_DIV_CLKCMU_CIS_CLK3 0x181c
+#define CLK_CON_DIV_CLKCMU_CORE_BUS 0x1820
+#define CLK_CON_DIV_CLKCMU_CORE_CCI 0x1824
+#define CLK_CON_DIV_CLKCMU_CORE_G3D 0x1828
+#define CLK_CON_DIV_CLKCMU_CPUCL0_DBG 0x182c
+#define CLK_CON_DIV_CLKCMU_CPUCL0_SWITCH 0x1830
+#define CLK_CON_DIV_CLKCMU_CPUCL1_SWITCH 0x1834
+#define CLK_CON_DIV_CLKCMU_DISPAUD_AUD 0x1838
+#define CLK_CON_DIV_CLKCMU_DISPAUD_CPU 0x183c
+#define CLK_CON_DIV_CLKCMU_DISPAUD_DISP 0x1840
+#define CLK_CON_DIV_CLKCMU_FSYS_BUS 0x1844
+#define CLK_CON_DIV_CLKCMU_FSYS_MMC_CARD 0x1848
+#define CLK_CON_DIV_CLKCMU_FSYS_MMC_EMBD 0x184c
+#define CLK_CON_DIV_CLKCMU_FSYS_UFS_EMBD 0x1850
+#define CLK_CON_DIV_CLKCMU_G2D_G2D 0x1854
+#define CLK_CON_DIV_CLKCMU_G2D_MSCL 0x1858
+#define CLK_CON_DIV_CLKCMU_G3D_SWITCH 0x185c
+#define CLK_CON_DIV_CLKCMU_HPM 0x1860
+#define CLK_CON_DIV_CLKCMU_ISP_BUS 0x1864
+#define CLK_CON_DIV_CLKCMU_ISP_GDC 0x1868
+#define CLK_CON_DIV_CLKCMU_ISP_VRA 0x186c
+#define CLK_CON_DIV_CLKCMU_MFC_MFC 0x1870
+#define CLK_CON_DIV_CLKCMU_MFC_WFD 0x1874
+#define CLK_CON_DIV_CLKCMU_MIF_BUSP 0x1878
+#define CLK_CON_DIV_CLKCMU_OTP 0x187c
+#define CLK_CON_DIV_CLKCMU_PERI_BUS 0x1880
+#define CLK_CON_DIV_CLKCMU_PERI_IP 0x1884
+#define CLK_CON_DIV_CLKCMU_PERI_UART 0x1888
+#define CLK_CON_DIV_CLKCMU_USB_BUS 0x188c
+#define CLK_CON_DIV_CLKCMU_USB_DPGTC 0x1890
+#define CLK_CON_DIV_CLKCMU_USB_USB30DRD 0x1894
+#define CLK_CON_DIV_CLKCMU_VIPX1_BUS 0x1898
+#define CLK_CON_DIV_CLKCMU_VIPX2_BUS 0x189c
+#define CLK_CON_DIV_DIV_CLK_CMU_CMUREF 0x18a0
+#define CLK_CON_DIV_PLL_MMC_DIV2 0x18a4
+#define CLK_CON_DIV_PLL_SHARED0_DIV2 0x18a8
+#define CLK_CON_DIV_PLL_SHARED0_DIV3 0x18ac
+#define CLK_CON_DIV_PLL_SHARED0_DIV4 0x18b0
+#define CLK_CON_DIV_PLL_SHARED1_DIV2 0x18b4
+#define CLK_CON_DIV_PLL_SHARED1_DIV3 0x18b8
+#define CLK_CON_DIV_PLL_SHARED1_DIV4 0x18bc
+#define CLK_CON_GAT_CLKCMU_MIF_SWITCH 0x2000
+#define CLK_CON_GAT_CLK_CMU_OTP_CLK 0x2004
+#define CLK_CON_GAT_GATE_CLKCMU_APM_BUS 0x2008
+#define CLK_CON_GAT_GATE_CLKCMU_CAM_BUS 0x200c
+#define CLK_CON_GAT_GATE_CLKCMU_CIS_CLK0 0x2010
+#define CLK_CON_GAT_GATE_CLKCMU_CIS_CLK1 0x2014
+#define CLK_CON_GAT_GATE_CLKCMU_CIS_CLK2 0x2018
+#define CLK_CON_GAT_GATE_CLKCMU_CIS_CLK3 0x201c
+#define CLK_CON_GAT_GATE_CLKCMU_CORE_BUS 0x2020
+#define CLK_CON_GAT_GATE_CLKCMU_CORE_CCI 0x2024
+#define CLK_CON_GAT_GATE_CLKCMU_CORE_G3D 0x2028
+#define CLK_CON_GAT_GATE_CLKCMU_CPUCL0_DBG 0x202c
+#define CLK_CON_GAT_GATE_CLKCMU_CPUCL0_SWITCH 0x2030
+#define CLK_CON_GAT_GATE_CLKCMU_CPUCL1_SWITCH 0x2034
+#define CLK_CON_GAT_GATE_CLKCMU_DISPAUD_AUD 0x2038
+#define CLK_CON_GAT_GATE_CLKCMU_DISPAUD_CPU 0x203c
+#define CLK_CON_GAT_GATE_CLKCMU_DISPAUD_DISP 0x2040
+#define CLK_CON_GAT_GATE_CLKCMU_FSYS_BUS 0x2044
+#define CLK_CON_GAT_GATE_CLKCMU_FSYS_MMC_CARD 0x2048
+#define CLK_CON_GAT_GATE_CLKCMU_FSYS_MMC_EMBD 0x204c
+#define CLK_CON_GAT_GATE_CLKCMU_FSYS_UFS_EMBD 0x2050
+#define CLK_CON_GAT_GATE_CLKCMU_G2D_G2D 0x2054
+#define CLK_CON_GAT_GATE_CLKCMU_G2D_MSCL 0x2058
+#define CLK_CON_GAT_GATE_CLKCMU_G3D_SWITCH 0x205c
+#define CLK_CON_GAT_GATE_CLKCMU_HPM 0x2060
+#define CLK_CON_GAT_GATE_CLKCMU_ISP_BUS 0x2064
+#define CLK_CON_GAT_GATE_CLKCMU_ISP_GDC 0x2068
+#define CLK_CON_GAT_GATE_CLKCMU_ISP_VRA 0x206c
+#define CLK_CON_GAT_GATE_CLKCMU_MFC_MFC 0x2070
+#define CLK_CON_GAT_GATE_CLKCMU_MFC_WFD 0x2074
+#define CLK_CON_GAT_GATE_CLKCMU_MIF_BUSP 0x2078
+#define CLK_CON_GAT_GATE_CLKCMU_MODEM_SHARED0 0x207c
+#define CLK_CON_GAT_GATE_CLKCMU_MODEM_SHARED1 0x2080
+#define CLK_CON_GAT_GATE_CLKCMU_PERI_BUS 0x2084
+#define CLK_CON_GAT_GATE_CLKCMU_PERI_IP 0x2088
+#define CLK_CON_GAT_GATE_CLKCMU_PERI_UART 0x208c
+#define CLK_CON_GAT_GATE_CLKCMU_USB_BUS 0x2090
+#define CLK_CON_GAT_GATE_CLKCMU_USB_DPGTC 0x2094
+#define CLK_CON_GAT_GATE_CLKCMU_USB_USB30DRD 0x2098
+#define CLK_CON_GAT_GATE_CLKCMU_VIPX1_BUS 0x209c
+#define CLK_CON_GAT_GATE_CLKCMU_VIPX2_BUS 0x20a0
+
+static const unsigned long top_clk_regs[] __initconst = {
+ PLL_LOCKTIME_PLL_MMC,
+ PLL_LOCKTIME_PLL_SHARED0,
+ PLL_LOCKTIME_PLL_SHARED1,
+ PLL_CON0_PLL_MMC,
+ PLL_CON3_PLL_MMC,
+ PLL_CON0_PLL_SHARED0,
+ PLL_CON0_PLL_SHARED1,
+ CLK_CON_MUX_MUX_CLKCMU_APM_BUS,
+ CLK_CON_MUX_MUX_CLKCMU_CAM_BUS,
+ CLK_CON_MUX_MUX_CLKCMU_CIS_CLK0,
+ CLK_CON_MUX_MUX_CLKCMU_CIS_CLK1,
+ CLK_CON_MUX_MUX_CLKCMU_CIS_CLK2,
+ CLK_CON_MUX_MUX_CLKCMU_CIS_CLK3,
+ CLK_CON_MUX_MUX_CLKCMU_CORE_BUS,
+ CLK_CON_MUX_MUX_CLKCMU_CORE_CCI,
+ CLK_CON_MUX_MUX_CLKCMU_CORE_G3D,
+ CLK_CON_MUX_MUX_CLKCMU_CPUCL0_DBG,
+ CLK_CON_MUX_MUX_CLKCMU_CPUCL0_SWITCH,
+ CLK_CON_MUX_MUX_CLKCMU_CPUCL1_SWITCH,
+ CLK_CON_MUX_MUX_CLKCMU_DISPAUD_AUD,
+ CLK_CON_MUX_MUX_CLKCMU_DISPAUD_CPU,
+ CLK_CON_MUX_MUX_CLKCMU_DISPAUD_DISP,
+ CLK_CON_MUX_MUX_CLKCMU_FSYS_BUS,
+ CLK_CON_MUX_MUX_CLKCMU_FSYS_MMC_CARD,
+ CLK_CON_MUX_MUX_CLKCMU_FSYS_MMC_EMBD,
+ CLK_CON_MUX_MUX_CLKCMU_FSYS_UFS_EMBD,
+ CLK_CON_MUX_MUX_CLKCMU_G2D_G2D,
+ CLK_CON_MUX_MUX_CLKCMU_G2D_MSCL,
+ CLK_CON_MUX_MUX_CLKCMU_G3D_SWITCH,
+ CLK_CON_MUX_MUX_CLKCMU_HPM,
+ CLK_CON_MUX_MUX_CLKCMU_ISP_BUS,
+ CLK_CON_MUX_MUX_CLKCMU_ISP_GDC,
+ CLK_CON_MUX_MUX_CLKCMU_ISP_VRA,
+ CLK_CON_MUX_MUX_CLKCMU_MFC_MFC,
+ CLK_CON_MUX_MUX_CLKCMU_MFC_WFD,
+ CLK_CON_MUX_MUX_CLKCMU_MIF_BUSP,
+ CLK_CON_MUX_MUX_CLKCMU_MIF_SWITCH,
+ CLK_CON_MUX_MUX_CLKCMU_PERI_BUS,
+ CLK_CON_MUX_MUX_CLKCMU_PERI_IP,
+ CLK_CON_MUX_MUX_CLKCMU_PERI_UART,
+ CLK_CON_MUX_MUX_CLKCMU_USB_BUS,
+ CLK_CON_MUX_MUX_CLKCMU_USB_DPGTC,
+ CLK_CON_MUX_MUX_CLKCMU_USB_USB30DRD,
+ CLK_CON_MUX_MUX_CLKCMU_VIPX1_BUS,
+ CLK_CON_MUX_MUX_CLKCMU_VIPX2_BUS,
+ CLK_CON_MUX_MUX_CLK_CMU_CMUREF,
+ CLK_CON_MUX_MUX_CMU_CMUREF,
+ CLK_CON_DIV_AP2CP_SHARED0_PLL_CLK,
+ CLK_CON_DIV_AP2CP_SHARED1_PLL_CLK,
+ CLK_CON_DIV_CLKCMU_APM_BUS,
+ CLK_CON_DIV_CLKCMU_CAM_BUS,
+ CLK_CON_DIV_CLKCMU_CORE_BUS,
+ CLK_CON_DIV_CLKCMU_CORE_CCI,
+ CLK_CON_DIV_CLKCMU_CORE_G3D,
+ CLK_CON_DIV_CLKCMU_CPUCL0_DBG,
+ CLK_CON_DIV_CLKCMU_CPUCL0_SWITCH,
+ CLK_CON_DIV_CLKCMU_CPUCL1_SWITCH,
+ CLK_CON_DIV_CLKCMU_DISPAUD_AUD,
+ CLK_CON_DIV_CLKCMU_DISPAUD_CPU,
+ CLK_CON_DIV_CLKCMU_DISPAUD_DISP,
+ CLK_CON_DIV_CLKCMU_FSYS_BUS,
+ CLK_CON_DIV_CLKCMU_FSYS_MMC_CARD,
+ CLK_CON_DIV_CLKCMU_FSYS_MMC_EMBD,
+ CLK_CON_DIV_CLKCMU_FSYS_UFS_EMBD,
+ CLK_CON_DIV_CLKCMU_G2D_G2D,
+ CLK_CON_DIV_CLKCMU_G2D_MSCL,
+ CLK_CON_DIV_CLKCMU_G3D_SWITCH,
+ CLK_CON_DIV_CLKCMU_HPM,
+ CLK_CON_DIV_CLKCMU_ISP_BUS,
+ CLK_CON_DIV_CLKCMU_ISP_GDC,
+ CLK_CON_DIV_CLKCMU_ISP_VRA,
+ CLK_CON_DIV_CLKCMU_MFC_MFC,
+ CLK_CON_DIV_CLKCMU_MFC_WFD,
+ CLK_CON_DIV_CLKCMU_MIF_BUSP,
+ CLK_CON_DIV_CLKCMU_OTP,
+ CLK_CON_DIV_CLKCMU_PERI_BUS,
+ CLK_CON_DIV_CLKCMU_PERI_IP,
+ CLK_CON_DIV_CLKCMU_PERI_UART,
+ CLK_CON_DIV_CLKCMU_USB_BUS,
+ CLK_CON_DIV_CLKCMU_USB_DPGTC,
+ CLK_CON_DIV_CLKCMU_USB_USB30DRD,
+ CLK_CON_DIV_CLKCMU_VIPX1_BUS,
+ CLK_CON_DIV_CLKCMU_VIPX2_BUS,
+ CLK_CON_DIV_DIV_CLK_CMU_CMUREF,
+ CLK_CON_DIV_PLL_SHARED0_DIV2,
+ CLK_CON_DIV_PLL_SHARED0_DIV3,
+ CLK_CON_DIV_PLL_SHARED0_DIV4,
+ CLK_CON_DIV_PLL_SHARED1_DIV2,
+ CLK_CON_DIV_PLL_SHARED1_DIV3,
+ CLK_CON_DIV_PLL_SHARED1_DIV4,
+ CLK_CON_GAT_CLKCMU_MIF_SWITCH,
+ CLK_CON_GAT_CLK_CMU_OTP_CLK,
+ CLK_CON_GAT_GATE_CLKCMU_APM_BUS,
+ CLK_CON_GAT_GATE_CLKCMU_CAM_BUS,
+ CLK_CON_GAT_GATE_CLKCMU_CIS_CLK0,
+ CLK_CON_GAT_GATE_CLKCMU_CIS_CLK1,
+ CLK_CON_GAT_GATE_CLKCMU_CIS_CLK2,
+ CLK_CON_GAT_GATE_CLKCMU_CIS_CLK3,
+ CLK_CON_GAT_GATE_CLKCMU_CORE_BUS,
+ CLK_CON_GAT_GATE_CLKCMU_CORE_CCI,
+ CLK_CON_GAT_GATE_CLKCMU_CORE_G3D,
+ CLK_CON_GAT_GATE_CLKCMU_CPUCL0_DBG,
+ CLK_CON_GAT_GATE_CLKCMU_CPUCL0_SWITCH,
+ CLK_CON_GAT_GATE_CLKCMU_CPUCL1_SWITCH,
+ CLK_CON_GAT_GATE_CLKCMU_DISPAUD_AUD,
+ CLK_CON_GAT_GATE_CLKCMU_DISPAUD_CPU,
+ CLK_CON_GAT_GATE_CLKCMU_DISPAUD_DISP,
+ CLK_CON_GAT_GATE_CLKCMU_FSYS_BUS,
+ CLK_CON_GAT_GATE_CLKCMU_FSYS_MMC_CARD,
+ CLK_CON_GAT_GATE_CLKCMU_FSYS_MMC_EMBD,
+ CLK_CON_GAT_GATE_CLKCMU_FSYS_UFS_EMBD,
+ CLK_CON_GAT_GATE_CLKCMU_G2D_G2D,
+ CLK_CON_GAT_GATE_CLKCMU_G2D_MSCL,
+ CLK_CON_GAT_GATE_CLKCMU_G3D_SWITCH,
+ CLK_CON_GAT_GATE_CLKCMU_HPM,
+ CLK_CON_GAT_GATE_CLKCMU_ISP_BUS,
+ CLK_CON_GAT_GATE_CLKCMU_ISP_GDC,
+ CLK_CON_GAT_GATE_CLKCMU_ISP_VRA,
+ CLK_CON_GAT_GATE_CLKCMU_MFC_MFC,
+ CLK_CON_GAT_GATE_CLKCMU_MFC_WFD,
+ CLK_CON_GAT_GATE_CLKCMU_MIF_BUSP,
+ CLK_CON_GAT_GATE_CLKCMU_MODEM_SHARED0,
+ CLK_CON_GAT_GATE_CLKCMU_MODEM_SHARED1,
+ CLK_CON_GAT_GATE_CLKCMU_PERI_BUS,
+ CLK_CON_GAT_GATE_CLKCMU_PERI_IP,
+ CLK_CON_GAT_GATE_CLKCMU_PERI_UART,
+ CLK_CON_GAT_GATE_CLKCMU_USB_BUS,
+ CLK_CON_GAT_GATE_CLKCMU_USB_DPGTC,
+ CLK_CON_GAT_GATE_CLKCMU_USB_USB30DRD,
+ CLK_CON_GAT_GATE_CLKCMU_VIPX1_BUS,
+ CLK_CON_GAT_GATE_CLKCMU_VIPX2_BUS,
+};
+
+static const struct samsung_pll_rate_table pll_shared0_rate_table[] __initconst = {
+ PLL_35XX_RATE(26 * MHZ, 1599000000U, 246, 4, 0),
+};
+
+static const struct samsung_pll_rate_table pll_shared1_rate_table[] __initconst = {
+ PLL_35XX_RATE(26 * MHZ, 1332500000U, 205, 4, 0),
+};
+
+static const struct samsung_pll_rate_table pll_mmc_rate_table[] __initconst = {
+ PLL_36XX_RATE(26 * MHZ, 799999877, 31, 1, 0, -15124),
+};
+
+static const struct samsung_pll_clock top_pll_clks[] __initconst = {
+ PLL(pll_1051x, CLK_FOUT_SHARED0_PLL, "fout_shared0_pll", "oscclk",
+ PLL_LOCKTIME_PLL_SHARED0, PLL_CON0_PLL_SHARED0, pll_shared0_rate_table),
+ PLL(pll_1051x, CLK_FOUT_SHARED1_PLL, "fout_shared1_pll", "oscclk",
+ PLL_LOCKTIME_PLL_SHARED1, PLL_CON0_PLL_SHARED1, pll_shared1_rate_table),
+ PLL(pll_1061x, CLK_FOUT_MMC_PLL, "fout_mmc_pll", "oscclk",
+ PLL_LOCKTIME_PLL_MMC, PLL_CON0_PLL_MMC, pll_mmc_rate_table),
+};
+
+/* Parent clock list for TOP muxes */
+PNAME(mout_pll_shared0_p) = { "oscclk", "fout_shared0_pll" };
+PNAME(mout_pll_shared1_p) = { "oscclk", "fout_shared1_pll" };
+PNAME(mout_pll_mmc_p) = { "oscclk", "fout_mmc_pll" };
+PNAME(mout_cmu_apm_bus_p) = { "dout_cmu_shared0_div4",
+ "dout_cmu_shared1_div4" };
+PNAME(mout_cmu_cam_bus_p) = { "dout_cmu_shared1_div2",
+ "dout_cmu_shared0_div3",
+ "dout_cmu_shared1_div3",
+ "dout_cmu_shared0_div4" };
+PNAME(mout_cmu_cis_clk0_p) = { "oscclk",
+ "dout_cmu_shared0_div4" };
+PNAME(mout_cmu_cis_clk1_p) = { "oscclk",
+ "dout_cmu_shared0_div4" };
+PNAME(mout_cmu_cis_clk2_p) = { "oscclk",
+ "dout_cmu_shared0_div4" };
+PNAME(mout_cmu_cis_clk3_p) = { "oscclk",
+ "dout_cmu_shared0_div4" };
+PNAME(mout_cmu_core_bus_p) = { "dout_cmu_shared1_div2",
+ "dout_cmu_shared0_div3",
+ "dout_cmu_shared0_div4",
+ "dout_cmu_mmc_div2" };
+PNAME(mout_cmu_core_cci_p) = { "dout_cmu_shared0_div2",
+ "dout_cmu_shared1_div2",
+ "dout_cmu_shared0_div3",
+ "dout_cmu_mmc_div2" };
+PNAME(mout_cmu_core_g3d_p) = { "dout_cmu_shared0_div2",
+ "dout_cmu_shared1_div2",
+ "dout_cmu_shared0_div3",
+ "dout_cmu_mmc_div2" };
+PNAME(mout_cmu_cpucl0_dbg_p) = { "dout_cmu_shared0_div4",
+ "dout_cmu_shared1_div4" };
+PNAME(mout_cmu_cpucl0_switch_p) = { "dout_cmu_shared0_div2",
+ "dout_cmu_shared1_div2",
+ "dout_cmu_shared0_div3",
+ "dout_cmu_shared1_div3" };
+PNAME(mout_cmu_cpucl1_switch_p) = { "dout_cmu_shared0_div2",
+ "dout_cmu_shared1_div2",
+ "dout_cmu_shared0_div3",
+ "dout_cmu_shared1_div3" };
+PNAME(mout_cmu_dispaud_aud_p) = { "dout_cmu_shared1_div2",
+ "dout_cmu_shared0_div3",
+ "dout_cmu_shared1_div3",
+ "dout_cmu_shared0_div4" };
+PNAME(mout_cmu_dispaud_cpu_p) = { "fout_shared1_pll",
+ "dout_cmu_shared0_div2",
+ "dout_cmu_shared1_div2",
+ "dout_cmu_shared0_div3",
+ "dout_cmu_shared1_div3",
+ "fout_mmc_pll",
+ "oscclk", "oscclk" };
+PNAME(mout_cmu_dispaud_disp_p) = { "dout_cmu_shared0_div3",
+ "dout_cmu_shared1_div3",
+ "dout_cmu_shared0_div4",
+ "dout_cmu_shared0_div4" };
+PNAME(mout_cmu_fsys_bus_p) = { "dout_cmu_shared0_div2",
+ "dout_cmu_shared1_div2" };
+PNAME(mout_cmu_fsys_mmc_card_p) = { "oscclk",
+ "dout_cmu_shared0_div2",
+ "dout_cmu_shared1_div2",
+ "dout_cmu_shared0_div3",
+ "dout_cmu_shared1_div3",
+ "fout_mmc_pll",
+ "oscclk", "oscclk" };
+PNAME(mout_cmu_fsys_mmc_embd_p) = { "oscclk",
+ "dout_cmu_shared0_div2",
+ "dout_cmu_shared1_div2",
+ "dout_cmu_shared0_div3",
+ "dout_cmu_shared1_div3",
+ "fout_mmc_pll",
+ "oscclk", "oscclk" };
+PNAME(mout_cmu_fsys_ufs_embd_p) = { "oscclk",
+ "dout_cmu_shared0_div4",
+ "dout_cmu_shared1_div4",
+ "oscclk" };
+PNAME(mout_cmu_g2d_g2d_p) = { "dout_cmu_shared1_div2",
+ "dout_cmu_shared0_div3",
+ "dout_cmu_shared1_div3",
+ "dout_cmu_shared0_div4" };
+PNAME(mout_cmu_g2d_mscl_p) = { "dout_cmu_shared0_div3",
+ "dout_cmu_shared1_div3",
+ "dout_cmu_shared0_div4",
+ "dout_cmu_shared1_div4" };
+PNAME(mout_cmu_g3d_switch_p) = { "dout_cmu_shared0_div2",
+ "dout_cmu_shared1_div2",
+ "dout_cmu_shared0_div3",
+ "dout_cmu_shared1_div3" };
+PNAME(mout_cmu_hpm_p) = { "oscclk",
+ "dout_cmu_shared0_div2",
+ "dout_cmu_shared1_div2",
+ "dout_cmu_shared0_div3",
+ "dout_cmu_mmc_div2",
+ "oscclk", "oscclk", "oscclk" };
+PNAME(mout_cmu_isp_bus_p) = { "dout_cmu_shared1_div2",
+ "dout_cmu_shared0_div3",
+ "dout_cmu_shared1_div3",
+ "dout_cmu_shared0_div4" };
+PNAME(mout_cmu_isp_gdc_p) = { "dout_cmu_shared0_div3",
+ "dout_cmu_shared1_div3",
+ "dout_cmu_shared0_div4",
+ "dout_cmu_shared1_div4" };
+PNAME(mout_cmu_isp_vra_p) = { "dout_cmu_shared0_div3",
+ "dout_cmu_shared1_div3",
+ "dout_cmu_shared0_div4",
+ "dout_cmu_shared1_div4" };
+PNAME(mout_cmu_mfc_mfc_p) = { "dout_cmu_shared1_div2",
+ "dout_cmu_shared0_div3",
+ "dout_cmu_shared1_div3",
+ "dout_cmu_shared0_div4" };
+PNAME(mout_cmu_mfc_wfd_p) = { "dout_cmu_shared0_div3",
+ "dout_cmu_shared1_div3",
+ "dout_cmu_shared0_div4",
+ "dout_cmu_shared1_div4" };
+PNAME(mout_cmu_mif_busp_p) = { "dout_cmu_shared0_div4",
+ "dout_cmu_shared1_div4",
+ "dout_cmu_mmc_div2",
+ "oscclk" };
+PNAME(mout_cmu_mif_switch_p) = { "fout_shared0_pll",
+ "fout_shared1_pll",
+ "dout_cmu_shared0_div2",
+ "fout_mmc_pll",
+ "dout_cmu_shared0_div3",
+ "dout_cmu_shared1_div3",
+ "dout_cmu_shared0_div4",
+ "dout_cmu_shared1_div4" };
+PNAME(mout_cmu_peri_bus_p) = { "dout_cmu_shared0_div4",
+ "dout_cmu_shared1_div4" };
+PNAME(mout_cmu_peri_ip_p) = { "oscclk",
+ "dout_cmu_shared0_div4",
+ "dout_cmu_shared1_div4",
+ "oscclk" };
+PNAME(mout_cmu_peri_uart_p) = { "oscclk",
+ "dout_cmu_shared0_div4",
+ "dout_cmu_shared1_div4",
+ "oscclk" };
+PNAME(mout_cmu_usb_bus_p) = { "dout_cmu_shared0_div3",
+ "dout_cmu_shared1_div3",
+ "dout_cmu_shared0_div4",
+ "dout_cmu_shared1_div4" };
+PNAME(mout_cmu_usb_dpgtc_p) = { "oscclk",
+ "dout_cmu_shared0_div4",
+ "dout_cmu_shared1_div4",
+ "oscclk" };
+PNAME(mout_cmu_usb_usb30drd_p) = { "oscclk",
+ "dout_cmu_shared0_div4",
+ "dout_cmu_shared1_div4",
+ "oscclk" };
+PNAME(mout_cmu_vipx1_bus_p) = { "dout_cmu_shared1_div2",
+ "dout_cmu_shared0_div3",
+ "dout_cmu_shared1_div3",
+ "dout_cmu_shared0_div4" };
+PNAME(mout_cmu_vipx2_bus_p) = { "dout_cmu_shared1_div2",
+ "dout_cmu_shared0_div3",
+ "dout_cmu_shared1_div3",
+ "dout_cmu_shared0_div4" };
+PNAME(mout_clk_cmu_cmuref_p) = { "dout_cmu_shared0_div4",
+ "dout_cmu_shared1_div4" };
+PNAME(mout_cmu_cmuref_p) = { "oscclk",
+ "dout_clk_cmu_cmuref" };
+
+/*
+ * Register name to clock name mangling strategy used in this file
+ *
+ * Replace PLL_CON{0,3}_PLL with CLK_MOUT_PLL and mout_pll
+ * Replace CLK_CON_MUX_MUX_CLKCMU with CLK_MOUT_CMU and mout_cmu
+ * Replace CLK_CON_DIV_CLKCMU with CLK_DOUT_CMU_CMU and dout_cmu_cmu
+ * Replace CLK_CON_DIV_DIV_CLKCMU with CLK_DOUT_CMU_CMU and dout_cmu_cmu
+ * Replace CLK_CON_DIV_PLL_CLKCMU with CLK_DOUT_CMU_CMU and dout_cmu_cmu
+ * Replace CLK_CON_GAT_CLKCMU with CLK_GOUT_CMU and gout_cmu
+ * Replace CLK_CON_GAT_GATE_CLKCMU with CLK_GOUT_CMU and gout_cmu
+ *
+ * For gates remove _UID _BLK _IPCLKPORT, _I and _RSTNSYNC
+ */
+
+static const struct samsung_mux_clock top_mux_clks[] __initconst = {
+ MUX(CLK_MOUT_PLL_SHARED0, "mout_pll_shared0", mout_pll_shared0_p,
+ PLL_CON0_PLL_SHARED0, 4, 1),
+ MUX(CLK_MOUT_PLL_SHARED1, "mout_pll_shared1", mout_pll_shared1_p,
+ PLL_CON0_PLL_SHARED1, 4, 1),
+ MUX(CLK_MOUT_PLL_MMC, "mout_pll_mmc", mout_pll_mmc_p,
+ PLL_CON0_PLL_MMC, 4, 1),
+
+ MUX(CLK_MOUT_CMU_APM_BUS, "mout_cmu_apm_bus", mout_cmu_apm_bus_p,
+ CLK_CON_MUX_MUX_CLKCMU_APM_BUS, 0, 1),
+ MUX(CLK_MOUT_CMU_CAM_BUS, "mout_cmu_cam_bus", mout_cmu_cam_bus_p,
+ CLK_CON_MUX_MUX_CLKCMU_CAM_BUS, 0, 2),
+ MUX(CLK_MOUT_CMU_CIS_CLK0, "mout_cmu_cis_clk0", mout_cmu_cis_clk0_p,
+ CLK_CON_MUX_MUX_CLKCMU_CIS_CLK0, 0, 1),
+ MUX(CLK_MOUT_CMU_CIS_CLK1, "mout_cmu_cis_clk1", mout_cmu_cis_clk1_p,
+ CLK_CON_MUX_MUX_CLKCMU_CIS_CLK1, 0, 1),
+ MUX(CLK_MOUT_CMU_CIS_CLK2, "mout_cmu_cis_clk2", mout_cmu_cis_clk2_p,
+ CLK_CON_MUX_MUX_CLKCMU_CIS_CLK2, 0, 1),
+ MUX(CLK_MOUT_CMU_CIS_CLK3, "mout_cmu_cis_clk3", mout_cmu_cis_clk2_p,
+ CLK_CON_MUX_MUX_CLKCMU_CIS_CLK3, 0, 1),
+ MUX(CLK_MOUT_CMU_CORE_BUS, "mout_cmu_core_bus", mout_cmu_core_bus_p,
+ CLK_CON_MUX_MUX_CLKCMU_CORE_BUS, 0, 2),
+ MUX(CLK_MOUT_CMU_CORE_CCI, "mout_cmu_core_cci", mout_cmu_core_cci_p,
+ CLK_CON_MUX_MUX_CLKCMU_CORE_CCI, 0, 2),
+ MUX(CLK_MOUT_CMU_CORE_G3D, "mout_cmu_core_g3d", mout_cmu_core_g3d_p,
+ CLK_CON_MUX_MUX_CLKCMU_CORE_G3D, 0, 2),
+ MUX(CLK_MOUT_CMU_CPUCL0_DBG, "mout_cmu_cpucl0_dbg", mout_cmu_cpucl0_dbg_p,
+ CLK_CON_MUX_MUX_CLKCMU_CPUCL0_DBG, 0, 1),
+ MUX(CLK_MOUT_CMU_CPUCL0_SWITCH, "mout_cmu_cpucl0_switch", mout_cmu_cpucl0_switch_p,
+ CLK_CON_MUX_MUX_CLKCMU_CPUCL0_SWITCH, 0, 1),
+ MUX(CLK_MOUT_CMU_CPUCL1_SWITCH, "mout_cmu_cpucl1_switch", mout_cmu_cpucl1_switch_p,
+ CLK_CON_MUX_MUX_CLKCMU_CPUCL1_SWITCH, 0, 2),
+ MUX(CLK_MOUT_CMU_DISPAUD_AUD, "mout_cmu_dispaud_aud", mout_cmu_dispaud_aud_p,
+ CLK_CON_MUX_MUX_CLKCMU_DISPAUD_AUD, 0, 2),
+ MUX(CLK_MOUT_CMU_DISPAUD_CPU, "mout_cmu_dispaud_cpu", mout_cmu_dispaud_cpu_p,
+ CLK_CON_MUX_MUX_CLKCMU_DISPAUD_CPU, 0, 3),
+ MUX(CLK_MOUT_CMU_DISPAUD_DISP, "mout_cmu_dispaud_disp", mout_cmu_dispaud_disp_p,
+ CLK_CON_MUX_MUX_CLKCMU_DISPAUD_DISP, 0, 2),
+ MUX(CLK_MOUT_CMU_FSYS_BUS, "mout_cmu_fsys_bus", mout_cmu_fsys_bus_p,
+ CLK_CON_MUX_MUX_CLKCMU_FSYS_BUS, 0, 1),
+ MUX(CLK_MOUT_CMU_FSYS_MMC_CARD, "mout_cmu_fsys_mmc_card", mout_cmu_fsys_mmc_card_p,
+ CLK_CON_MUX_MUX_CLKCMU_FSYS_MMC_CARD, 0, 3),
+ MUX(CLK_MOUT_CMU_FSYS_MMC_EMBD, "mout_cmu_fsys_mmc_embd", mout_cmu_fsys_mmc_embd_p,
+ CLK_CON_MUX_MUX_CLKCMU_FSYS_MMC_EMBD, 0, 3),
+ MUX(CLK_MOUT_CMU_FSYS_UFS_EMBD, "mout_cmu_fsys_ufs_embd", mout_cmu_fsys_ufs_embd_p,
+ CLK_CON_MUX_MUX_CLKCMU_FSYS_UFS_EMBD, 0, 2),
+ MUX(CLK_MOUT_CMU_G2D_G2D, "mout_cmu_g2d_g2d", mout_cmu_g2d_g2d_p,
+ CLK_CON_MUX_MUX_CLKCMU_G2D_G2D, 0, 2),
+ MUX(CLK_MOUT_CMU_G2D_MSCL, "mout_cmu_g2d_mscl", mout_cmu_g2d_mscl_p,
+ CLK_CON_MUX_MUX_CLKCMU_G2D_MSCL, 0, 2),
+ MUX(CLK_MOUT_CMU_G3D_SWITCH, "mout_cmu_g3d_SWITCH", mout_cmu_g3d_switch_p,
+ CLK_CON_MUX_MUX_CLKCMU_G3D_SWITCH, 0, 2),
+ MUX(CLK_MOUT_CMU_HPM, "mout_cmu_hpm", mout_cmu_hpm_p,
+ CLK_CON_MUX_MUX_CLKCMU_HPM, 0, 3),
+ MUX(CLK_MOUT_CMU_ISP_BUS, "mout_cmu_isp_bus", mout_cmu_isp_bus_p,
+ CLK_CON_MUX_MUX_CLKCMU_ISP_BUS, 0, 2),
+ MUX(CLK_MOUT_CMU_ISP_GDC, "mout_cmu_isp_gdc", mout_cmu_isp_gdc_p,
+ CLK_CON_MUX_MUX_CLKCMU_ISP_GDC, 0, 2),
+ MUX(CLK_MOUT_CMU_ISP_VRA, "mout_cmu_isp_vra", mout_cmu_isp_vra_p,
+ CLK_CON_MUX_MUX_CLKCMU_ISP_VRA, 0, 2),
+ MUX(CLK_MOUT_CMU_MFC_MFC, "mout_cmu_mfc_mfc", mout_cmu_mfc_mfc_p,
+ CLK_CON_MUX_MUX_CLKCMU_MFC_MFC, 0, 2),
+ MUX(CLK_MOUT_CMU_MFC_WFD, "mout_cmu_mfc_wfd", mout_cmu_mfc_wfd_p,
+ CLK_CON_MUX_MUX_CLKCMU_MFC_WFD, 0, 2),
+ MUX(CLK_MOUT_CMU_MIF_BUSP, "mout_cmu_mif_busp", mout_cmu_mif_busp_p,
+ CLK_CON_MUX_MUX_CLKCMU_MIF_BUSP, 0, 2),
+ MUX(CLK_MOUT_CMU_MIF_SWITCH, "mout_cmu_mif_switch", mout_cmu_mif_switch_p,
+ CLK_CON_MUX_MUX_CLKCMU_MIF_SWITCH, 0, 3),
+ MUX(CLK_MOUT_CMU_PERI_BUS, "mout_cmu_peri_bus", mout_cmu_peri_bus_p,
+ CLK_CON_MUX_MUX_CLKCMU_PERI_BUS, 0, 1),
+ MUX(CLK_MOUT_CMU_PERI_IP, "mout_cmu_peri_ip", mout_cmu_peri_ip_p,
+ CLK_CON_MUX_MUX_CLKCMU_PERI_IP, 0, 2),
+ MUX(CLK_MOUT_CMU_PERI_UART, "mout_cmu_peri_uart", mout_cmu_peri_uart_p,
+ CLK_CON_MUX_MUX_CLKCMU_PERI_UART, 0, 2),
+ MUX(CLK_MOUT_CMU_USB_BUS, "mout_cmu_usb_bus", mout_cmu_usb_bus_p,
+ CLK_CON_MUX_MUX_CLKCMU_USB_BUS, 0, 2),
+ MUX(CLK_MOUT_CMU_USB_DPGTC, "mout_cmu_usb_dpgtc", mout_cmu_usb_dpgtc_p,
+ CLK_CON_MUX_MUX_CLKCMU_USB_DPGTC, 0, 2),
+ MUX(CLK_MOUT_CMU_USB_USB30DRD, "mout_cmu_usb_usb30drd", mout_cmu_usb_usb30drd_p,
+ CLK_CON_MUX_MUX_CLKCMU_USB_USB30DRD, 0, 2),
+ MUX(CLK_MOUT_CMU_VIPX1_BUS, "mout_cmu_vipx1_bus", mout_cmu_vipx1_bus_p,
+ CLK_CON_MUX_MUX_CLKCMU_VIPX1_BUS, 0, 2),
+ MUX(CLK_MOUT_CMU_VIPX2_BUS, "mout_cmu_vipx2_bus", mout_cmu_vipx2_bus_p,
+ CLK_CON_MUX_MUX_CLKCMU_VIPX2_BUS, 0, 2),
+ MUX(CLK_MOUT_CLK_CMU_CMUREF, "mout_clk_cmu_cmuref", mout_clk_cmu_cmuref_p,
+ CLK_CON_MUX_MUX_CLK_CMU_CMUREF, 0, 1),
+ MUX(CLK_MOUT_CMU_CMUREF, "mout_cmu_cmuref", mout_cmu_cmuref_p,
+ CLK_CON_MUX_MUX_CMU_CMUREF, 0, 1),
+};
+
+static const struct samsung_div_clock top_div_clks[] __initconst = {
+ /* shared0 */
+ DIV(CLK_DOUT_CMU_SHARED0_DIV2, "dout_cmu_shared0_div2", "mout_pll_shared0",
+ CLK_CON_DIV_PLL_SHARED0_DIV2, 0, 1),
+ DIV(CLK_DOUT_CMU_SHARED0_DIV3, "dout_cmu_shared0_div3", "mout_pll_shared0",
+ CLK_CON_DIV_PLL_SHARED0_DIV3, 0, 2),
+ DIV(CLK_DOUT_CMU_SHARED0_DIV4, "dout_cmu_shared0_div4", "dout_cmu_shared0_div2",
+ CLK_CON_DIV_PLL_SHARED0_DIV4, 0, 1),
+
+ /* shared1 */
+ DIV(CLK_DOUT_CMU_SHARED1_DIV2, "dout_cmu_shared1_div2", "mout_pll_shared1",
+ CLK_CON_DIV_PLL_SHARED1_DIV2, 0, 1),
+ DIV(CLK_DOUT_CMU_SHARED1_DIV3, "dout_cmu_shared1_div3", "mout_pll_shared1",
+ CLK_CON_DIV_PLL_SHARED1_DIV3, 0, 2),
+ DIV(CLK_DOUT_CMU_SHARED1_DIV4, "dout_cmu_shared1_div4", "dout_cmu_shared1_div2",
+ CLK_CON_DIV_PLL_SHARED1_DIV4, 0, 1),
+
+ /* mmc */
+ DIV(CLK_DOUT_CMU_MMC_DIV2, "dout_cmu_mmc_div2", "mout_pll_mmc",
+ CLK_CON_DIV_PLL_MMC_DIV2, 0, 1),
+
+ DIV(CLK_DOUT_AP2CP_SHARED0_PLL_CLK, "dout_ap2cp_shared0_pll_clk",
+ "gout_cmu_modem_shared0", CLK_CON_DIV_AP2CP_SHARED0_PLL_CLK,
+ 0, 4),
+ DIV(CLK_DOUT_AP2CP_SHARED1_PLL_CLK, "dout_ap2cp_shared1_pll_clk",
+ "gout_cmu_modem_shared1", CLK_CON_DIV_AP2CP_SHARED1_PLL_CLK,
+ 0, 4),
+ DIV(CLK_DOUT_CMU_APM_BUS, "dout_cmu_apm_bus", "gout_cmu_apm_bus",
+ CLK_CON_DIV_CLKCMU_APM_BUS, 0, 3),
+ DIV(CLK_DOUT_CMU_CAM_BUS, "dout_cmu_cam_bus", "gout_cmu_cam_bus",
+ CLK_CON_DIV_CLKCMU_CAM_BUS, 0, 4),
+ DIV(CLK_DOUT_CMU_CIS_CLK0, "dout_cmu_cis_clk0", "gout_cmu_cis_clk0",
+ CLK_CON_DIV_CLKCMU_CIS_CLK0, 0, 5),
+ DIV(CLK_DOUT_CMU_CIS_CLK1, "dout_cmu_cis_clk1", "gout_cmu_cis_clk1",
+ CLK_CON_DIV_CLKCMU_CIS_CLK1, 0, 5),
+ DIV(CLK_DOUT_CMU_CIS_CLK2, "dout_cmu_cis_clk2", "gout_cmu_cis_clk2",
+ CLK_CON_DIV_CLKCMU_CIS_CLK2, 0, 5),
+ DIV(CLK_DOUT_CMU_CIS_CLK3, "dout_cmu_cis_clk3", "gout_cmu_cis_clk3",
+ CLK_CON_DIV_CLKCMU_CIS_CLK3, 0, 5),
+ DIV(CLK_DOUT_CMU_CORE_BUS, "dout_cmu_core_bus", "gout_cmu_core_bus",
+ CLK_CON_DIV_CLKCMU_CORE_BUS, 0, 4),
+ DIV(CLK_DOUT_CMU_CORE_CCI, "dout_cmu_core_cci", "gout_cmu_core_cci",
+ CLK_CON_DIV_CLKCMU_CORE_BUS, 0, 4),
+ DIV(CLK_DOUT_CMU_CORE_G3D, "dout_cmu_core_g3d", "gout_cmu_core_g3d",
+ CLK_CON_DIV_CLKCMU_CORE_G3D, 0, 4),
+ DIV(CLK_DOUT_CMU_CPUCL0_DBG, "dout_cmu_cpucl0_dbg", "gout_cmu_cpucl0_dbg",
+ CLK_CON_DIV_CLKCMU_CPUCL0_DBG, 0, 3),
+ DIV(CLK_DOUT_CMU_CPUCL0_SWITCH, "dout_cmu_cpucl0_switch", "gout_cmu_cpucl1_switch",
+ CLK_CON_DIV_CLKCMU_CPUCL0_SWITCH, 0, 3),
+ DIV(CLK_DOUT_CMU_CPUCL1_SWITCH, "dout_cmu_cpucl1_switch", "gout_cmu_cpucl1_switch",
+ CLK_CON_DIV_CLKCMU_CPUCL1_SWITCH, 0, 3),
+ DIV(CLK_DOUT_CMU_DISPAUD_AUD, "dout_cmu_dispaud_aud", "gout_cmu_dispaud_aud",
+ CLK_CON_DIV_CLKCMU_DISPAUD_AUD, 0, 4),
+ DIV(CLK_DOUT_CMU_DISPAUD_CPU, "dout_cmu_dispaud_cpu", "gout_cmu_dispaud_cpu",
+ CLK_CON_DIV_CLKCMU_DISPAUD_CPU, 0, 4),
+ DIV(CLK_DOUT_CMU_DISPAUD_DISP, "dout_cmu_dispaud_disp", "gout_cmu_dispaud_disp",
+ CLK_CON_DIV_CLKCMU_DISPAUD_DISP, 0, 4),
+ DIV(CLK_DOUT_CMU_FSYS_BUS, "dout_cmu_fsys_bus", "gout_cmu_fsys_bus",
+ CLK_CON_DIV_CLKCMU_FSYS_BUS, 0, 4),
+ DIV(CLK_DOUT_CMU_FSYS_MMC_CARD, "dout_cmu_fsys_mmc_card", "gout_cmu_fsys_mmc_card",
+ CLK_CON_DIV_CLKCMU_FSYS_MMC_CARD, 0, 9),
+ DIV(CLK_DOUT_CMU_FSYS_MMC_EMBD, "dout_cmu_fsys_mmc_embd", "gout_cmu_fsys_mmc_embd",
+ CLK_CON_DIV_CLKCMU_FSYS_MMC_EMBD, 0, 9),
+ DIV(CLK_DOUT_CMU_G2D_G2D, "dout_cmu_g2d_g2d", "gout_cmu_g2d_g2d",
+ CLK_CON_DIV_CLKCMU_G2D_G2D, 0, 4),
+ DIV(CLK_DOUT_CMU_G2D_MSCL, "dout_cmu_g2d_mscl", "gout_cmu_g2d_mscl",
+ CLK_CON_DIV_CLKCMU_G2D_MSCL, 0, 4),
+ DIV(CLK_DOUT_CMU_G3D_SWITCH, "dout_cmu_g3d_switch", "gout_cmu_g3d_switch",
+ CLK_CON_DIV_CLKCMU_G3D_SWITCH, 0, 3),
+ DIV(CLK_DOUT_CMU_HPM, "dout_cmu_hpm", "gout_cmu_hpm",
+ CLK_CON_DIV_CLKCMU_HPM, 0, 2),
+ DIV(CLK_DOUT_CMU_ISP_BUS, "dout_cmu_isp_bus", "gout_cmu_isp_bus",
+ CLK_CON_DIV_CLKCMU_ISP_BUS, 0, 4),
+ DIV(CLK_DOUT_CMU_ISP_GDC, "dout_cmu_isp_gdc", "gout_cmu_isp_gdc",
+ CLK_CON_DIV_CLKCMU_ISP_GDC, 0, 4),
+ DIV(CLK_DOUT_CMU_ISP_VRA, "dout_cmu_isp_vra", "gout_cmu_isp_vra",
+ CLK_CON_DIV_CLKCMU_ISP_VRA, 0, 4),
+ DIV(CLK_DOUT_CMU_MFD_MFC, "dout_cmu_mfc_mfc", "gout_cmu_mfc_mfc",
+ CLK_CON_DIV_CLKCMU_MFC_MFC, 0, 4),
+ DIV(CLK_DOUT_CMU_MFD_WFD, "dout_cmu_mfc_wfd", "gout_cmu_mfc_wfd",
+ CLK_CON_DIV_CLKCMU_MFC_WFD, 0, 4),
+ DIV(CLK_DOUT_CMU_MIF_BUSP, "dout_cmu_mif_busp", "gout_cmu_mif_busp",
+ CLK_CON_DIV_CLKCMU_MIF_BUSP, 0, 3),
+ DIV(CLK_DOUT_CMU_PERI_BUS, "dout_cmu_peri_bus", "gout_cmu_peri_bus",
+ CLK_CON_DIV_CLKCMU_PERI_BUS, 0, 4),
+ DIV(CLK_DOUT_CMU_PERI_IP, "dout_cmu_peri_ip", "gout_cmu_peri_ip",
+ CLK_CON_DIV_CLKCMU_PERI_IP, 0, 4),
+ DIV(CLK_DOUT_CMU_PERI_UART, "dout_cmu_peri_uart", "gout_cmu_peri_uart",
+ CLK_CON_DIV_CLKCMU_PERI_UART, 0, 4),
+ DIV(CLK_DOUT_CMU_USB_BUS, "dout_cmu_usb_bus", "gout_cmu_usb_bus",
+ CLK_CON_DIV_CLKCMU_USB_BUS, 0, 4),
+ DIV(CLK_DOUT_CMU_USB_DPGTC, "dout_cmu_usb_dpgtc", "gout_cmu_usb_dpgtc",
+ CLK_CON_DIV_CLKCMU_USB_DPGTC, 0, 4),
+ DIV(CLK_DOUT_CMU_USB_BUS, "dout_cmu_usb_usb30drd", "gout_cmu_usb_usb30drd",
+ CLK_CON_DIV_CLKCMU_USB_USB30DRD, 0, 4),
+ DIV(CLK_DOUT_CMU_VIPX1_BUS, "dout_cmu_vipx1_bus", "gout_cmu_vipx1_bus",
+ CLK_CON_DIV_CLKCMU_VIPX1_BUS, 0, 4),
+ DIV(CLK_DOUT_CMU_VIPX2_BUS, "dout_cmu_vipx2_bus", "gout_cmu_vipx2_bus",
+ CLK_CON_DIV_CLKCMU_VIPX2_BUS, 0, 4),
+ DIV(CLK_DOUT_CLK_CMU_CMUREF, "dout_clk_cmu_cmuref", "mout_clk_cmu_cmuref",
+ CLK_CON_DIV_DIV_CLK_CMU_CMUREF, 0, 2),
+};
+
+static const struct samsung_fixed_factor_clock top_ffactor_clks[] __initconst = {
+ FFACTOR(CLK_DOUT_CMU_OTP, "dout_cmu_otp", "oscclk", 1, 7, 0),
+};
+
+static const struct samsung_gate_clock top_gate_clks[] __initconst = {
+ GATE(CLK_GOUT_CMU_MIF_SWITCH, "gout_cmu_mif_switch",
+ "mux_cmu_mif_switch", CLK_CON_GAT_CLKCMU_MIF_SWITCH,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CLK_CMU_OTP_CLK, "gout_clk_cmu_otp_clk", "dout_cmu_otp",
+ CLK_CON_GAT_CLK_CMU_OTP_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMU_APM_BUS, "gout_cmu_apm_bus", "mout_cmu_apm_bus",
+ CLK_CON_GAT_GATE_CLKCMU_APM_BUS, 21, 0, 0),
+ GATE(CLK_GOUT_CMU_CAM_BUS, "gout_cmu_cam_bus", "mout_cmu_cam_bus",
+ CLK_CON_GAT_GATE_CLKCMU_CAM_BUS, 21, 0, 0),
+ GATE(CLK_GOUT_CMU_CIS_CLK0, "gout_cmu_cis_clk0", "mout_cmu_cis_clk0",
+ CLK_CON_GAT_GATE_CLKCMU_CIS_CLK0, 21, 0, 0),
+ GATE(CLK_GOUT_CMU_CIS_CLK1, "gout_cmu_cis_clk1", "mout_cmu_cis_clk1",
+ CLK_CON_GAT_GATE_CLKCMU_CIS_CLK1, 21, 0, 0),
+ GATE(CLK_GOUT_CMU_CIS_CLK2, "gout_cmu_cis_clk2", "mout_cmu_cis_clk2",
+ CLK_CON_GAT_GATE_CLKCMU_CIS_CLK2, 21, 0, 0),
+ GATE(CLK_GOUT_CMU_CIS_CLK3, "gout_cmu_cis_clk3", "mout_cmu_cis_clk3",
+ CLK_CON_GAT_GATE_CLKCMU_CIS_CLK3, 21, 0, 0),
+ GATE(CLK_GOUT_CMU_CORE_BUS, "gout_cmu_core_bus", "mout_cmu_core_bus",
+ CLK_CON_GAT_GATE_CLKCMU_CORE_BUS, 21, CLK_IS_CRITICAL, 0),
+ GATE(CLK_GOUT_CMU_CORE_CCI, "gout_cmu_core_cci", "mout_cmu_core_cci",
+ CLK_CON_GAT_GATE_CLKCMU_CORE_CCI, 21, CLK_IS_CRITICAL, 0),
+ GATE(CLK_GOUT_CMU_CORE_G3D, "gout_cmu_core_g3d", "mout_cmu_core_g3d",
+ CLK_CON_GAT_GATE_CLKCMU_CORE_G3D, 21, CLK_IS_CRITICAL, 0),
+ GATE(CLK_GOUT_CMU_CPUCL0_DBG, "gout_cmu_cpucl0_dbg", "mout_cmu_cpucl0_dbg",
+ CLK_CON_GAT_GATE_CLKCMU_CPUCL0_DBG, 21, 0, 0),
+ GATE(CLK_GOUT_CMU_CPUCL0_SWITCH, "gout_cmu_cpucl0_switch", "mout_cmu_cpucl0_switch",
+ CLK_CON_GAT_GATE_CLKCMU_CPUCL0_SWITCH, 21, 0, 0),
+ GATE(CLK_GOUT_CMU_CPUCL1_SWITCH, "gout_cmu_cpucl1_switch", "mout_cmu_cpucl1_switch",
+ CLK_CON_GAT_GATE_CLKCMU_CPUCL1_SWITCH, 21, 0, 0),
+ GATE(CLK_GOUT_CMU_DISPAUD_AUD, "gout_cmu_dispaud_aud", "mout_cmu_dispaud_aud",
+ CLK_CON_GAT_GATE_CLKCMU_DISPAUD_AUD, 21, 0, 0),
+ GATE(CLK_GOUT_CMU_DISPAUD_CPU, "gout_cmu_dispaud_cpu", "mout_cmu_dispaud_cpu",
+ CLK_CON_GAT_GATE_CLKCMU_DISPAUD_CPU, 21, 0, 0),
+ GATE(CLK_GOUT_CMU_DISPAUD_DISP, "gout_cmu_dispaud_disp", "mout_cmu_dispaud_disp",
+ CLK_CON_GAT_GATE_CLKCMU_DISPAUD_DISP, 21, 0, 0),
+ GATE(CLK_GOUT_CMU_FSYS_BUS, "gout_cmu_fsys_bus", "mout_cmu_fsys_bus",
+ CLK_CON_GAT_GATE_CLKCMU_FSYS_BUS, 21, 0, 0),
+ GATE(CLK_GOUT_CMU_FSYS_MMC_CARD, "gout_cmu_fsys_mmc_card", "mout_cmu_fsys_mmc_card",
+ CLK_CON_GAT_GATE_CLKCMU_FSYS_MMC_CARD, 21, 0, 0),
+ GATE(CLK_GOUT_CMU_FSYS_MMC_EMBD, "gout_cmu_fsys_mmc_embd", "mout_cmu_fsys_mmc_embd",
+ CLK_CON_GAT_GATE_CLKCMU_FSYS_MMC_EMBD, 21, 0, 0),
+ GATE(CLK_GOUT_CMU_FSYS_UFS_EMBD, "gout_cmu_fsys_ufs_embd", "mout_cmu_fsys_ufs_embd",
+ CLK_CON_GAT_GATE_CLKCMU_FSYS_UFS_EMBD, 21, 0, 0),
+ GATE(CLK_GOUT_CMU_G2D_G2D, "gout_cmu_g2d_g2d", "mout_cmu_g2d_g2d",
+ CLK_CON_GAT_GATE_CLKCMU_G2D_G2D, 21, 0, 0),
+ GATE(CLK_GOUT_CMU_G2D_MSCL, "gout_cmu_g2d_mscl", "mout_cmu_g2d_mscl",
+ CLK_CON_GAT_GATE_CLKCMU_G2D_MSCL, 21, 0, 0),
+ GATE(CLK_GOUT_CMU_G3D_SWITCH, "gout_cmu_g3d_switch", "mout_cmu_g3d_switch",
+ CLK_CON_GAT_GATE_CLKCMU_G3D_SWITCH, 21, 0, 0),
+ GATE(CLK_GOUT_CMU_HPM, "gout_cmu_hpm", "mout_cmu_hpm",
+ CLK_CON_GAT_GATE_CLKCMU_HPM, 21, 0, 0),
+ GATE(CLK_GOUT_CMU_ISP_BUS, "gout_cmu_isp_bus", "mout_cmu_isp_bus",
+ CLK_CON_GAT_GATE_CLKCMU_ISP_BUS, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMU_ISP_GDC, "gout_cmu_isp_gdc", "mout_cmu_isp_gdc",
+ CLK_CON_GAT_GATE_CLKCMU_ISP_GDC, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMU_ISP_VRA, "gout_cmu_isp_vra", "mout_cmu_isp_vra",
+ CLK_CON_GAT_GATE_CLKCMU_ISP_VRA, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMU_MFC_MFC, "gout_cmu_mfc_mfc", "mout_cmu_mfc_mfc",
+ CLK_CON_GAT_GATE_CLKCMU_MFC_MFC, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMU_MFC_WFD, "gout_cmu_mfc_wfd", "mout_cmu_mfc_wfd",
+ CLK_CON_GAT_GATE_CLKCMU_MFC_WFD, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMU_MIF_BUSP, "gout_cmu_mif_busp", "mout_cmu_mif_busp",
+ CLK_CON_GAT_GATE_CLKCMU_MIF_BUSP, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMU_MODEM_SHARED0, "gout_cmu_modem_shared0", "dout_cmu_shared0_div2",
+ CLK_CON_GAT_GATE_CLKCMU_MODEM_SHARED0, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMU_MODEM_SHARED1, "gout_cmu_modem_shared1", "dout_cmu_shared1_div2",
+ CLK_CON_GAT_GATE_CLKCMU_MODEM_SHARED1, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMU_PERI_BUS, "gout_cmu_peri_bus", "mout_cmu_peri_bus",
+ CLK_CON_GAT_GATE_CLKCMU_PERI_BUS, 21, 0, 0),
+ GATE(CLK_GOUT_CMU_PERI_IP, "gout_cmu_peri_ip", "mout_cmu_peri_ip",
+ CLK_CON_GAT_GATE_CLKCMU_PERI_IP, 21, 0, 0),
+ GATE(CLK_GOUT_CMU_PERI_UART, "gout_cmu_peri_uart", "mout_cmu_peri_uart",
+ CLK_CON_GAT_GATE_CLKCMU_PERI_UART, 21, 0, 0),
+ GATE(CLK_GOUT_CMU_USB_BUS, "gout_cmu_usb_bus", "mout_cmu_usb_bus",
+ CLK_CON_GAT_GATE_CLKCMU_USB_BUS, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMU_USB_DPGTC, "gout_cmu_usb_dpgtc", "mout_cmu_usb_dpgtc",
+ CLK_CON_GAT_GATE_CLKCMU_USB_DPGTC, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMU_USB_USB30DRD, "gout_cmu_usb_usb30drd", "mout_cmu_usb_usb30drd",
+ CLK_CON_GAT_GATE_CLKCMU_USB_USB30DRD, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMU_VIPX1_BUS, "gout_cmu_vipx1_bus", "mout_cmu_vipx1_bus",
+ CLK_CON_GAT_GATE_CLKCMU_VIPX1_BUS, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMU_VIPX2_BUS, "gout_cmu_vipx2_bus", "mout_cmu_vipx2_bus",
+ CLK_CON_GAT_GATE_CLKCMU_VIPX2_BUS, 21, CLK_IGNORE_UNUSED, 0),
+};
+
+static const struct samsung_cmu_info top_cmu_info __initconst = {
+ .pll_clks = top_pll_clks,
+ .nr_pll_clks = ARRAY_SIZE(top_pll_clks),
+ .mux_clks = top_mux_clks,
+ .nr_mux_clks = ARRAY_SIZE(top_mux_clks),
+ .div_clks = top_div_clks,
+ .nr_div_clks = ARRAY_SIZE(top_div_clks),
+ .fixed_factor_clks = top_ffactor_clks,
+ .nr_fixed_factor_clks = ARRAY_SIZE(top_ffactor_clks),
+ .gate_clks = top_gate_clks,
+ .nr_gate_clks = ARRAY_SIZE(top_gate_clks),
+ .nr_clk_ids = CLKS_NR_TOP,
+ .clk_regs = top_clk_regs,
+ .nr_clk_regs = ARRAY_SIZE(top_clk_regs),
+};
+
+static void __init exynos9610_cmu_top_init(struct device_node *np)
+{
+ exynos_arm64_register_cmu(NULL, np, &top_cmu_info);
+}
+
+/* Register CMU_TOP early, as it's a dependency for other early domains */
+CLK_OF_DECLARE(exynos9610_cmu_top, "samsung,exynos9610-cmu-top",
+ exynos9610_cmu_top_init);
+
+/* CMU_CPUCL0 */
+#define PLL_LOCKTIME_PLL_CPUCL0 0x0000
+#define PLL_CON0_MUX_CLKCMU_CPUCL0_DBG_USER 0x0100
+#define PLL_CON2_MUX_CLKCMU_CPUCL0_DBG_USER 0x0108
+#define PLL_CON0_MUX_CLKCMU_CPUCL0_SWITCH_USER 0x0120
+#define PLL_CON2_MUX_CLKCMU_CPUCL0_SWITCH_USER 0x0128
+#define PLL_CON0_PLL_CPUCL0 0x0140
+#define CLK_CON_MUX_MUX_CLK_CPUCL0_PLL 0x1000
+#define CLK_CON_DIV_DIV_CLK_CLUSTER0_ACLK 0x1800
+#define CLK_CON_DIV_DIV_CLK_CLUSTER0_CNTCLK 0x1804
+#define CLK_CON_DIV_DIV_CLK_CLUSTER0_PCLKDBG 0x1808
+#define CLK_CON_DIV_DIV_CLK_CPUCL0_CMUREF 0x180c
+#define CLK_CON_DIV_DIV_CLK_CPUCL0_CPU 0x1810
+#define CLK_CON_DIV_DIV_CLK_CPUCL0_PCLK 0x1814
+#define CLK_CON_GAT_CLK_CPUCL0_CMU_PCLK 0x2000
+#define CLK_CON_GAT_CLK_CPUCL0_HPM_TARGETCLK_C 0x2004
+#define CLK_CON_GAT_CLK_CPUCL0_OSCCLK_CLK 0x2008
+#define CLK_CON_GAT_GATE_CLK_CLUSTER0_CPU 0x2010
+#define CLK_CON_GAT_GOUT_CPUCL0_ADM_APB_G_CSSYS_CORE_PCLKM 0x2014
+#define CLK_CON_GAT_GOUT_CPUCL0_ADS_AHB_G_CSSYS_FSYS_HCLKS 0x2018
+#define CLK_CON_GAT_GOUT_CPUCL0_ADS_APB_G_CSSYS_CPUCL1_PCLKS 0x201c
+#define CLK_CON_GAT_GOUT_CPUCL0_ADS_APB_G_P8Q_PCLKS 0x2020
+#define CLK_CON_GAT_GOUT_CPUCL0_AD_APB_P_DUMP_PC_CPUCL0_PCLKM 0x2024
+#define CLK_CON_GAT_GOUT_CPUCL0_AD_APB_P_DUMP_PC_CPUCL1_PCLKM 0x2028
+#define CLK_CON_GAT_GOUT_CPUCL0_BUSIF_HPMCPUCL0_PCLK 0x202c
+#define CLK_CON_GAT_GOUT_CPUCL0_CSSYS_DBG_PCLKDBG 0x2030
+#define CLK_CON_GAT_GOUT_CPUCL0_DUMP_PC_CPUCL0_PCLK 0x2034
+#define CLK_CON_GAT_GOUT_CPUCL0_DUMP_PC_CPUCL1_PCLK 0x2038
+#define CLK_CON_GAT_GOUT_CPUCL0_LHM_AXI_P_CPUCL0_CLK 0x203c
+#define CLK_CON_GAT_GOUT_CPUCL0_LHS_AXI_D_CSSYS_CLK 0x2040
+#define CLK_CON_GAT_GOUT_CPUCL0_DBG_CLK 0x2044
+#define CLK_CON_GAT_GOUT_CPUCL0_PCLK_CLK 0x2048
+#define CLK_CON_GAT_GOUT_CPUCL0_SECJTAG_CLK 0x204c
+#define CLK_CON_GAT_GOUT_CPUCL0_SYSREG_PCLK 0x2050
+
+static const unsigned long cpucl0_clk_regs[] __initconst = {
+ PLL_LOCKTIME_PLL_CPUCL0,
+ PLL_CON0_MUX_CLKCMU_CPUCL0_DBG_USER,
+ PLL_CON2_MUX_CLKCMU_CPUCL0_DBG_USER,
+ PLL_CON0_MUX_CLKCMU_CPUCL0_SWITCH_USER,
+ PLL_CON2_MUX_CLKCMU_CPUCL0_SWITCH_USER,
+ PLL_CON0_PLL_CPUCL0,
+ CLK_CON_MUX_MUX_CLK_CPUCL0_PLL,
+ CLK_CON_DIV_DIV_CLK_CLUSTER0_ACLK,
+ CLK_CON_DIV_DIV_CLK_CLUSTER0_CNTCLK,
+ CLK_CON_DIV_DIV_CLK_CLUSTER0_PCLKDBG,
+ CLK_CON_DIV_DIV_CLK_CPUCL0_CMUREF,
+ CLK_CON_DIV_DIV_CLK_CPUCL0_CPU,
+ CLK_CON_DIV_DIV_CLK_CPUCL0_PCLK,
+ CLK_CON_GAT_CLK_CPUCL0_CMU_PCLK,
+ CLK_CON_GAT_CLK_CPUCL0_HPM_TARGETCLK_C,
+ CLK_CON_GAT_CLK_CPUCL0_OSCCLK_CLK,
+ CLK_CON_GAT_GATE_CLK_CLUSTER0_CPU,
+ CLK_CON_GAT_GOUT_CPUCL0_ADM_APB_G_CSSYS_CORE_PCLKM,
+ CLK_CON_GAT_GOUT_CPUCL0_ADS_AHB_G_CSSYS_FSYS_HCLKS,
+ CLK_CON_GAT_GOUT_CPUCL0_ADS_APB_G_CSSYS_CPUCL1_PCLKS,
+ CLK_CON_GAT_GOUT_CPUCL0_ADS_APB_G_P8Q_PCLKS,
+ CLK_CON_GAT_GOUT_CPUCL0_AD_APB_P_DUMP_PC_CPUCL0_PCLKM,
+ CLK_CON_GAT_GOUT_CPUCL0_AD_APB_P_DUMP_PC_CPUCL1_PCLKM,
+ CLK_CON_GAT_GOUT_CPUCL0_BUSIF_HPMCPUCL0_PCLK,
+ CLK_CON_GAT_GOUT_CPUCL0_CSSYS_DBG_PCLKDBG,
+ CLK_CON_GAT_GOUT_CPUCL0_DUMP_PC_CPUCL0_PCLK,
+ CLK_CON_GAT_GOUT_CPUCL0_DUMP_PC_CPUCL1_PCLK,
+ CLK_CON_GAT_GOUT_CPUCL0_LHM_AXI_P_CPUCL0_CLK,
+ CLK_CON_GAT_GOUT_CPUCL0_LHS_AXI_D_CSSYS_CLK,
+ CLK_CON_GAT_GOUT_CPUCL0_DBG_CLK,
+ CLK_CON_GAT_GOUT_CPUCL0_PCLK_CLK,
+ CLK_CON_GAT_GOUT_CPUCL0_SECJTAG_CLK,
+ CLK_CON_GAT_GOUT_CPUCL0_SYSREG_PCLK,
+};
+
+static const struct samsung_pll_rate_table pll_cpucl0_rate_table[] __initconst = {
+ PLL_35XX_RATE(26 * MHZ, 1049750000U, 323, 4, 1),
+ PLL_35XX_RATE(26 * MHZ, 1449500000U, 223, 4, 0),
+ PLL_35XX_RATE(26 * MHZ, 1850333333U, 427, 6, 0),
+ PLL_35XX_RATE(26 * MHZ, 300083333U, 277, 6, 2),
+ PLL_35XX_RATE(26 * MHZ, 600166666U, 277, 6, 1),
+};
+
+static const struct samsung_pll_clock cpucl0_pll_clks[] __initconst = {
+ PLL(pll_1051x, CLK_FOUT_CPUCL0_PLL, "fout_cpucl0_pll", "oscclk",
+ PLL_LOCKTIME_PLL_CPUCL0, PLL_CON0_PLL_CPUCL0, pll_cpucl0_rate_table),
+};
+
+PNAME(mout_pll_cpucl0_dbg_user_p) = { "oscclk",
+ "dout_cmu_cpucl0_dbg" };
+PNAME(mout_pll_cpucl0_switch_user_p) = { "oscclk",
+ "dout_cmu_cpucl0_switch" };
+PNAME(mout_clk_cpucl0_pll_p) = { "fout_cpucl0_pll",
+ "mout_pll_cpucl0_switch_user" };
+
+static const struct samsung_mux_clock cpucl0_mux_clks[] __initconst = {
+ MUX(CLK_MOUT_PLL_CPUCL0_DBG_USER, "mout_pll_cpucl0_dbg_user", mout_pll_cpucl0_dbg_user_p,
+ PLL_CON0_MUX_CLKCMU_CPUCL0_DBG_USER, 4, 1),
+ MUX(CLK_MOUT_PLL_CPUCL0_SWITCH_USER, "mout_pll_cpucl0_switch_user",
+ mout_pll_cpucl0_switch_user_p, PLL_CON0_MUX_CLKCMU_CPUCL0_SWITCH_USER, 4, 1),
+ MUX(CLK_MOUT_CLK_CPUCL0_PLL, "mout_clk_cpucl0_pll", mout_clk_cpucl0_pll_p,
+ CLK_CON_MUX_MUX_CLK_CPUCL0_PLL, 0, 1),
+};
+
+static const struct samsung_div_clock cpucl0_div_clks[] __initconst = {
+ DIV(CLK_DOUT_CLK_CLUSTER0_ACLK, "dout_clk_cluster0_aclk", "gout_clk_cluster0_cpu",
+ CLK_CON_DIV_DIV_CLK_CLUSTER0_ACLK, 0, 4),
+ DIV(CLK_DOUT_CLK_CLUSTER0_CNTCLK, "dout_clk_cluster0_cntclk", "gout_clk_cluster0_cpu",
+ CLK_CON_DIV_DIV_CLK_CLUSTER0_CNTCLK, 0, 4),
+ DIV(CLK_DOUT_CLK_CLUSTER0_PCLKDBG, "dout_clk_cluster0_pclkdbg", "gout_clk_cluster0_cpu",
+ CLK_CON_DIV_DIV_CLK_CLUSTER0_PCLKDBG, 0, 4),
+ DIV(CLK_DOUT_CLK_CPUCL0_CMUREF, "dout_clk_cpucl0_cmuref", "dout_clk_cpucl0_cpu",
+ CLK_CON_DIV_DIV_CLK_CPUCL0_CMUREF, 0, 3),
+ DIV(CLK_DOUT_CLK_CPUCL0_CPU, "dout_clk_cpucl0_cpu", "mout_clk_cpucl0_pll",
+ CLK_CON_DIV_DIV_CLK_CPUCL0_CPU, 0, 0),
+ DIV(CLK_DOUT_CLK_CPUCL0_PCLK, "dout_clk_cpucl0_pclk", "dout_clk_cpucl0_cpu",
+ CLK_CON_DIV_DIV_CLK_CPUCL0_PCLK, 0, 4),
+};
+
+static const struct samsung_gate_clock cpucl0_gate_clks[] __initconst = {
+ GATE(CLK_GOUT_CLK_CPUCL0_CMU_PCLK, "gout_clk_cpucl0_cmu_pclk",
+ "dout_clk_cpucl0_pclk", CLK_CON_GAT_CLK_CPUCL0_CMU_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CLK_CPUCL0_HPM_TARGETCLK_C, "gout_clk_cpucl0_hpm_targetclk_c",
+ "dout_cmu_hpm", CLK_CON_GAT_CLK_CPUCL0_HPM_TARGETCLK_C, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CLK_CPUCL0_OSCCLK_CLK, "gout_clk_cpucl0_oscclk_clk",
+ "oscclk", CLK_CON_GAT_CLK_CPUCL0_OSCCLK_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CLK_CLUSTER0_CPU, "gout_clk_cluster0_cpu",
+ "dout_clk_cpucl0_cpu", CLK_CON_GAT_GATE_CLK_CLUSTER0_CPU, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CPUCL0_ADM_APB_G_CSSYS_CORE_PCLKM, "gout_cpucl0_adm_apb_g_cssys_core_pclkm",
+ "mout_pll_cpucl0_dbg_user", CLK_CON_GAT_GOUT_CPUCL0_ADM_APB_G_CSSYS_CORE_PCLKM,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CPUCL0_ADS_AHB_G_CSSYS_FSYS_HCLKS, "gout_cpucl0_ads_ahb_g_cssys_fsys_hclks",
+ "mout_pll_cpucl0_dbg_user", CLK_CON_GAT_GOUT_CPUCL0_ADS_AHB_G_CSSYS_FSYS_HCLKS,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CPUCL0_ADS_APB_G_CSSYS_CPUCL1_PCLKS,
+ "gout_cpucl0_ads_apb_g_cssys_cpucl1_pclks", "mout_pll_cpucl0_dbg_user",
+ CLK_CON_GAT_GOUT_CPUCL0_ADS_APB_G_CSSYS_CPUCL1_PCLKS, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CPUCL0_ADS_APB_G_P8Q_PCLKS, "gout_cpucl0_ads_apb_g_p8q_pclks",
+ "mout_pll_cpucl0_dbg_user", CLK_CON_GAT_GOUT_CPUCL0_ADS_APB_G_P8Q_PCLKS,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CPUCL0_AD_APB_P_DUMP_PC_CPUCL0_PCLKM,
+ "gout_cpucl0_ad_apb_p_dump_pc_cpucl0_pclkm", "mout_pll_cpucl0_dbg_user",
+ CLK_CON_GAT_GOUT_CPUCL0_AD_APB_P_DUMP_PC_CPUCL0_PCLKM, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CPUCL0_AD_APB_P_DUMP_PC_CPUCL1_PCLKM,
+ "gout_cpucl0_ad_apb_p_dump_pc_cpucl1_pclkm", "mout_pll_cpucl0_dbg_user",
+ CLK_CON_GAT_GOUT_CPUCL0_AD_APB_P_DUMP_PC_CPUCL1_PCLKM, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CPUCL0_BUSIF_HPMCPUCL0_PCLK, "gout_cpucl0_busif_hpmcpucl0_pclk",
+ "dout_clk_cpucl0_pclk", CLK_CON_GAT_GOUT_CPUCL0_BUSIF_HPMCPUCL0_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CPUCL0_CSSYS_DBG_PCLKDBG, "gout_cpucl0_cssys_dbg_pclkdbg",
+ "mout_pll_cpucl0_dbg_user", CLK_CON_GAT_GOUT_CPUCL0_CSSYS_DBG_PCLKDBG,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CPUCL0_DUMP_PC_CPUCL0_PCLK, "gout_cpucl0_dump_pc_cpucl0_pclk",
+ "mout_pll_cpucl0_dbg_user", CLK_CON_GAT_GOUT_CPUCL0_DUMP_PC_CPUCL0_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CPUCL0_DUMP_PC_CPUCL1_PCLK, "gout_cpucl0_dump_pc_cpucl1_pclk",
+ "mout_pll_cpucl0_dbg_user", CLK_CON_GAT_GOUT_CPUCL0_DUMP_PC_CPUCL1_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CPUCL0_LHM_AXI_P_CPUCL0_CLK, "gout_cpucl0_lhm_axi_p_cpucl0_clk",
+ "dout_clk_cpucl0_pclk", CLK_CON_GAT_GOUT_CPUCL0_LHM_AXI_P_CPUCL0_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CPUCL0_LHS_AXI_D_CSSYS_CLK, "gout_cpucl0_lhs_axi_d_cssys_clk",
+ "mout_pll_cpucl0_dbg_user", CLK_CON_GAT_GOUT_CPUCL0_LHS_AXI_D_CSSYS_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CPUCL0_DBG_CLK, "gout_cpucl0_dbg_clk",
+ "mout_pll_cpucl0_dbg_user", CLK_CON_GAT_GOUT_CPUCL0_DBG_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CPUCL0_PCLK_CLK, "gout_cpucl0_pclk_clk",
+ "dout_clk_cpucl0_pclk", CLK_CON_GAT_GOUT_CPUCL0_PCLK_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CPUCL0_SECJTAG_CLK, "gout_cpucl0_secjtag_clk", "mout_pll_cpucl0_dbg_user",
+ CLK_CON_GAT_GOUT_CPUCL0_SECJTAG_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CPUCL0_SYSREG_PCLK, "gout_cpucl0_sysreg_pclk",
+ "dout_clk_cpucl0_pclk", CLK_CON_GAT_GOUT_CPUCL0_SYSREG_PCLK, 21, 0, 0),
+};
+
+static const struct samsung_cmu_info cpucl0_cmu_info __initconst = {
+ .pll_clks = cpucl0_pll_clks,
+ .nr_pll_clks = ARRAY_SIZE(cpucl0_pll_clks),
+ .mux_clks = cpucl0_mux_clks,
+ .nr_mux_clks = ARRAY_SIZE(cpucl0_mux_clks),
+ .div_clks = cpucl0_div_clks,
+ .nr_div_clks = ARRAY_SIZE(cpucl0_div_clks),
+ .gate_clks = cpucl0_gate_clks,
+ .nr_gate_clks = ARRAY_SIZE(cpucl0_gate_clks),
+ .nr_clk_ids = CLKS_NR_CPUCL0,
+ .clk_regs = cpucl0_clk_regs,
+ .nr_clk_regs = ARRAY_SIZE(cpucl0_clk_regs),
+};
+
+static void __init exynos9610_cmu_cpucl0_init(struct device_node *np)
+{
+ exynos_arm64_register_cmu(NULL, np, &cpucl0_cmu_info);
+}
+
+CLK_OF_DECLARE(exynos9610_cmu_cpucl0, "samsung,exynos9610-cmu-cpucl0",
+ exynos9610_cmu_cpucl0_init);
+
+/* CMU_CPUCL1 */
+#define PLL_LOCKTIME_PLL_CPUCL1 0x0000
+#define PLL_CON0_MUX_CLKCMU_CPUCL1_SWITCH_USER 0x0100
+#define PLL_CON2_MUX_CLKCMU_CPUCL1_SWITCH_USER 0x0108
+#define PLL_CON0_PLL_CPUCL1 0x0120
+#define CLK_CON_MUX_MUX_CLK_CPUCL1_PLL 0x1000
+#define CLK_CON_DIV_DIV_CLK_CLUSTER1_ACLK 0x1800
+#define CLK_CON_DIV_DIV_CLK_CLUSTER1_CNTCLK 0x1804
+#define CLK_CON_DIV_DIV_CLK_CPUCL1_CMUREF 0x180c
+#define CLK_CON_DIV_DIV_CLK_CPUCL1_CPU 0x1810
+#define CLK_CON_DIV_DIV_CLK_CPUCL1_PCLK 0x1814
+#define CLK_CON_DIV_DIV_CLK_CPUCL1_PCLKDBG 0x1818
+#define CLK_CON_GAT_CLK_CPUCL1_CMU_PCLK 0x2000
+#define CLK_CON_GAT_CLK_CPUCL1_HPM_TARGETCLK_C 0x2004
+#define CLK_CON_GAT_CLK_CPUCL1_OSCCLK_CLK 0x2008
+#define CLK_CON_GAT_GATE_CLK_CLUSTER1_CPU 0x2010
+#define CLK_CON_GAT_GOUT_CPUCL1_ADM_APB_G_CSSYS_CPUCL1_PCLKM 0x2014
+#define CLK_CON_GAT_GOUT_CPUCL1_BUSIF_HPMCPUCL1_PCLK 0x2018
+#define CLK_CON_GAT_GOUT_CPUCL1_LHM_AXI_P_CPUCL1_CLK 0x201c
+#define CLK_CON_GAT_GOUT_CPUCL1_LHS_ACE_D_CLK 0x2020
+#define CLK_CON_GAT_GOUT_CPUCL1_ACLK_CLK 0x2024
+#define CLK_CON_GAT_GOUT_CPUCL1_PCLKDBG_CLK 0x2028
+#define CLK_CON_GAT_GOUT_CPUCL1_PCLK_CLK 0x202c
+#define CLK_CON_GAT_GOUT_CPUCL1_SYSREG_PCLK 0x2030
+
+static const unsigned long cpucl1_clk_regs[] __initconst = {
+ PLL_LOCKTIME_PLL_CPUCL1,
+ PLL_CON0_MUX_CLKCMU_CPUCL1_SWITCH_USER,
+ PLL_CON2_MUX_CLKCMU_CPUCL1_SWITCH_USER,
+ PLL_CON0_PLL_CPUCL1,
+ CLK_CON_MUX_MUX_CLK_CPUCL1_PLL,
+ CLK_CON_DIV_DIV_CLK_CLUSTER1_ACLK,
+ CLK_CON_DIV_DIV_CLK_CLUSTER1_CNTCLK,
+ CLK_CON_DIV_DIV_CLK_CPUCL1_CMUREF,
+ CLK_CON_DIV_DIV_CLK_CPUCL1_CPU,
+ CLK_CON_DIV_DIV_CLK_CPUCL1_PCLK,
+ CLK_CON_DIV_DIV_CLK_CPUCL1_PCLKDBG,
+ CLK_CON_GAT_CLK_CPUCL1_CMU_PCLK,
+ CLK_CON_GAT_CLK_CPUCL1_HPM_TARGETCLK_C,
+ CLK_CON_GAT_CLK_CPUCL1_OSCCLK_CLK,
+ CLK_CON_GAT_GATE_CLK_CLUSTER1_CPU,
+ CLK_CON_GAT_GOUT_CPUCL1_ADM_APB_G_CSSYS_CPUCL1_PCLKM,
+ CLK_CON_GAT_GOUT_CPUCL1_BUSIF_HPMCPUCL1_PCLK,
+ CLK_CON_GAT_GOUT_CPUCL1_LHM_AXI_P_CPUCL1_CLK,
+ CLK_CON_GAT_GOUT_CPUCL1_LHS_ACE_D_CLK,
+ CLK_CON_GAT_GOUT_CPUCL1_ACLK_CLK,
+ CLK_CON_GAT_GOUT_CPUCL1_PCLKDBG_CLK,
+ CLK_CON_GAT_GOUT_CPUCL1_PCLK_CLK,
+ CLK_CON_GAT_GOUT_CPUCL1_SYSREG_PCLK,
+};
+
+static const struct samsung_pll_rate_table pll_cpucl1_rate_table[] __initconst = {
+ PLL_35XX_RATE(26 * MHZ, 1499333333U, 346, 3, 1),
+ PLL_35XX_RATE(26 * MHZ, 1898000000U, 292, 4, 0),
+ PLL_35XX_RATE(26 * MHZ, 2400666666U, 277, 3, 0),
+ PLL_35XX_RATE(26 * MHZ, 549900000U, 423, 5, 2),
+ PLL_35XX_RATE(26 * MHZ, 850200000U, 327, 5, 1),
+};
+
+static const struct samsung_pll_clock cpucl1_pll_clks[] __initconst = {
+ PLL(pll_1051x, CLK_FOUT_CPUCL1_PLL, "fout_cpucl1_pll", "oscclk",
+ PLL_LOCKTIME_PLL_CPUCL1, PLL_CON0_PLL_CPUCL1, pll_cpucl1_rate_table),
+};
+
+PNAME(mout_pll_cpucl1_switch_user_p) = { "oscclk",
+ "dout_cmu_cpucl1_switch" };
+PNAME(mout_clk_cpucl1_pll_p) = { "fout_cpucl1_pll",
+ "mout_pll_cpucl1_switch_user" };
+
+static const struct samsung_mux_clock cpucl1_mux_clks[] __initconst = {
+ MUX(CLK_MOUT_PLL_CPUCL1_SWITCH_USER, "mout_pll_cpucl1_switch_user",
+ mout_pll_cpucl1_switch_user_p, PLL_CON0_MUX_CLKCMU_CPUCL1_SWITCH_USER,
+ 4, 1),
+ MUX(CLK_MOUT_CLK_CPUCL1_PLL, "mout_clk_cpucl1_pll", mout_clk_cpucl1_pll_p,
+ CLK_CON_MUX_MUX_CLK_CPUCL1_PLL, 0, 1),
+};
+
+static const struct samsung_div_clock cpucl1_div_clks[] __initconst = {
+ DIV(CLK_DOUT_CLK_CLUSTER1_ACLK, "dout_clk_cluster1_aclk", "gout_clk_cluster1_cpu",
+ CLK_CON_DIV_DIV_CLK_CLUSTER1_ACLK, 0, 4),
+ DIV(CLK_DOUT_CLK_CLUSTER1_CNTCLK, "dout_clk_cluster1_cntclk", "gout_clk_cluster1_cpu",
+ CLK_CON_DIV_DIV_CLK_CLUSTER0_CNTCLK, 0, 4),
+ DIV(CLK_DOUT_CLK_CPUCL1_CMUREF, "dout_clk_cpucl1_cmuref", "dout_clk_cpucl1_cpu",
+ CLK_CON_DIV_DIV_CLK_CPUCL1_CMUREF, 0, 4),
+ DIV(CLK_DOUT_CLK_CPUCL1_CPU, "dout_clk_cpucl1_cpu", "mout_clk_cpucl1_pll",
+ CLK_CON_DIV_DIV_CLK_CPUCL0_CPU, 0, 0),
+ DIV(CLK_DOUT_CLK_CPUCL1_PCLK, "dout_clk_cpucl1_pclk", "dout_clk_cpucl1_cpu",
+ CLK_CON_DIV_DIV_CLK_CPUCL1_PCLK, 0, 4),
+ DIV(CLK_DOUT_CLK_CPUCL1_PCLKDBG, "dout_clk_cpucl1_pclkdbg", "dout_clk_cpucl1_cpu",
+ CLK_CON_DIV_DIV_CLK_CPUCL1_PCLKDBG, 0, 4),
+};
+
+static const struct samsung_gate_clock cpucl1_gate_clks[] __initconst = {
+ GATE(CLK_GOUT_CLK_CPUCL1_CMU_PCLK, "gout_clk_cpucl1_cmu_pclk",
+ "dout_clk_cpucl1_pclk", CLK_CON_GAT_CLK_CPUCL0_CMU_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CLK_CPUCL1_HPM_TARGETCLK_C, "gout_clk_cpucl1_hpm_targetclk_c",
+ "dout_cmu_hpm", CLK_CON_GAT_CLK_CPUCL1_HPM_TARGETCLK_C, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CLK_CPUCL1_OSCCLK_CLK, "gout_clk_cpucl1_oscclk_clk",
+ "oscclk", CLK_CON_GAT_CLK_CPUCL1_OSCCLK_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CLK_CLUSTER1_CPU, "gout_clk_cluster1_cpu",
+ "dout_clk_cpucl1_cpu", CLK_CON_GAT_GATE_CLK_CLUSTER1_CPU, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CPUCL1_ADM_APB_G_CSSYS_CPUCL1_PCLKM,
+ "gout_cpucl1_adm_apb_g_cssys_cpucl1_pclkm", "dout_clk_cpucl1_pclkdbg",
+ CLK_CON_GAT_GOUT_CPUCL1_ADM_APB_G_CSSYS_CPUCL1_PCLKM, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CPUCL1_BUSIF_HPMCPUCL1_PCLK, "gout_cpucl0_busif_hpmcpucl1_pclk",
+ "dout_clk_cpucl1_pclk", CLK_CON_GAT_GOUT_CPUCL1_BUSIF_HPMCPUCL1_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CPUCL1_LHM_AXI_P_CPUCL1_CLK, "gout_cpucl1_lhm_axi_p_cpucl1_clk",
+ "dout_clk_cpucl1_pclk", CLK_CON_GAT_GOUT_CPUCL1_LHM_AXI_P_CPUCL1_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CPUCL1_LHS_ACE_D_CLK, "gout_cpucl1_lhs_ace_d_clk",
+ "dout_clk_cluster1_aclk", CLK_CON_GAT_GOUT_CPUCL1_LHS_ACE_D_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CPUCL1_ACLK_CLK, "gout_cpucl1_aclk_clk",
+ "dout_clk_cluster1_aclk", CLK_CON_GAT_GOUT_CPUCL1_ACLK_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CPUCL1_PCLKDBG_CLK, "gout_cpucl1_pclkdbg_clk",
+ "dout_clk_cpucl1_pclkdbg", CLK_CON_GAT_GOUT_CPUCL1_PCLKDBG_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CPUCL1_PCLK_CLK, "gout_cpucl1_pclk_clk",
+ "dout_clk_cpucl1_pclk", CLK_CON_GAT_GOUT_CPUCL1_PCLK_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CPUCL1_SYSREG_PCLK, "gout_cpucl1_sysreg_pclk",
+ "dout_clk_cpucl1_pclk", CLK_CON_GAT_GOUT_CPUCL1_SYSREG_PCLK,
+ 21, 0, 0),
+};
+
+static const struct samsung_cmu_info cpucl1_cmu_info __initconst = {
+ .pll_clks = cpucl1_pll_clks,
+ .nr_pll_clks = ARRAY_SIZE(cpucl1_pll_clks),
+ .mux_clks = cpucl1_mux_clks,
+ .nr_mux_clks = ARRAY_SIZE(cpucl1_mux_clks),
+ .div_clks = cpucl1_div_clks,
+ .nr_div_clks = ARRAY_SIZE(cpucl1_div_clks),
+ .gate_clks = cpucl1_gate_clks,
+ .nr_gate_clks = ARRAY_SIZE(cpucl1_gate_clks),
+ .nr_clk_ids = CLKS_NR_CPUCL1,
+ .clk_regs = cpucl1_clk_regs,
+ .nr_clk_regs = ARRAY_SIZE(cpucl1_clk_regs),
+};
+
+static void __init exynos9610_cmu_cpucl1_init(struct device_node *np)
+{
+ exynos_arm64_register_cmu(NULL, np, &cpucl1_cmu_info);
+}
+
+CLK_OF_DECLARE(exynos9610_cmu_cpucl1, "samsung,exynos9610-cmu-cpucl1",
+ exynos9610_cmu_cpucl1_init);
+
+/* CMU_PERI */
+#define PLL_CON0_MUX_CLKCMU_PERI_BUS_USER 0x0100 // old
+#define PLL_CON2_MUX_CLKCMU_PERI_BUS_USER 0x0108
+#define PLL_CON0_MUX_CLKCMU_PERI_IP_USER 0x0120 // old
+#define PLL_CON2_MUX_CLKCMU_PERI_IP_USER 0x0128
+#define PLL_CON0_MUX_CLKCMU_PERI_UART_USER 0x0140
+#define PLL_CON2_MUX_CLKCMU_PERI_UART_USER 0x0148
+#define CLK_CON_DIV_DIV_CLK_PERI_I2C 0x1800
+#define CLK_CON_DIV_DIV_CLK_PERI_SPI0 0x1804 // old
+#define CLK_CON_DIV_DIV_CLK_PERI_SPI1 0x1808 // old
+#define CLK_CON_DIV_DIV_CLK_PERI_SPI2 0x180c // old
+#define CLK_CON_DIV_DIV_CLK_PERI_USI_I2C 0x1814
+#define CLK_CON_DIV_DIV_CLK_PERI_USI_USI 0x1818
+#define CLK_CON_GAT_CLK_PERI_CMU_PCLK 0x2000
+#define CLK_CON_GAT_CLK_PERI_OSCCLK_CLK 0x2004
+#define CLK_CON_GAT_GATE_CLK_PERI_I2C 0x2008
+#define CLK_CON_GAT_GATE_CLK_PERI_SPI0 0x200c // old
+#define CLK_CON_GAT_GATE_CLK_PERI_SPI1 0x2010 // old
+#define CLK_CON_GAT_GATE_CLK_PERI_SPI2 0x2014 // old
+#define CLK_CON_GAT_GATE_CLK_PERI_USI_I2C 0x2018
+#define CLK_CON_GAT_GATE_CLK_PERI_USI_USI 0x201c
+#define CLK_CON_GAT_GOUT_PERI_AXI2AHB_MSD32_ACLK 0x2020
+#define CLK_CON_GAT_GOUT_PERI_BUSIF_TMU_PCLK 0x2024
+#define CLK_CON_GAT_GOUT_PERI_CAMI2C_0_IPCLK 0x2028
+#define CLK_CON_GAT_GOUT_PERI_CAMI2C_0_PCLK 0x202c
+#define CLK_CON_GAT_GOUT_PERI_CAMI2C_1_IPCLK 0x2030
+#define CLK_CON_GAT_GOUT_PERI_CAMI2C_1_PCLK 0x2034
+#define CLK_CON_GAT_GOUT_PERI_CAMI2C_2_IPCLK 0x2038
+#define CLK_CON_GAT_GOUT_PERI_CAMI2C_2_PCLK 0x203c
+#define CLK_CON_GAT_GOUT_PERI_CAMI2C_3_IPCLK 0x2040
+#define CLK_CON_GAT_GOUT_PERI_CAMI2C_3_PCLK 0x2044
+#define CLK_CON_GAT_GOUT_PERI_I2C_0_PCLK 0x204c
+#define CLK_CON_GAT_GOUT_PERI_I2C_1_PCLK 0x2050
+#define CLK_CON_GAT_GOUT_PERI_I2C_2_PCLK 0x2054
+#define CLK_CON_GAT_GOUT_PERI_I2C_3_PCLK 0x2058
+#define CLK_CON_GAT_GOUT_PERI_I2C_4_PCLK 0x205c
+#define CLK_CON_GAT_GOUT_PERI_I2C_5_PCLK 0x2060
+#define CLK_CON_GAT_GOUT_PERI_I2C_6_PCLK 0x2064
+#define CLK_CON_GAT_GOUT_PERI_GPIO_PCLK 0x2048
+#define CLK_CON_GAT_GOUT_PERI_LHM_AXI_P_PERI_CLK 0x2068
+#define CLK_CON_GAT_GOUT_PERI_MCT_PCLK 0x206c // old
+#define CLK_CON_GAT_GOUT_PERI_OTP_CON_TOP_PCLK 0x2070
+#define CLK_CON_GAT_GOUT_PERI_PWM_MOTOR_PCLK_S0 0x2074
+#define CLK_CON_GAT_GOUT_PERI_BUS_CLK 0x2078
+#define CLK_CON_GAT_GOUT_PERI_I2C_CLK 0x207c
+#define CLK_CON_GAT_GOUT_PERI_SPI_0_CLK 0x2080
+#define CLK_CON_GAT_GOUT_PERI_SPI_1_CLK 0x2084
+#define CLK_CON_GAT_GOUT_PERI_SPI_2_CLK 0x2088
+#define CLK_CON_GAT_GOUT_PERI_UART_CLK 0x208c
+#define CLK_CON_GAT_GOUT_PERI_USI00_I2C_CLK 0x2090
+#define CLK_CON_GAT_GOUT_PERI_USI00_USI_CLK 0x2094
+#define CLK_CON_GAT_GOUT_PERI_SPI_0_IPCLK 0x2098 // old
+#define CLK_CON_GAT_GOUT_PERI_SPI_0_PCLK 0x209c // old
+#define CLK_CON_GAT_GOUT_PERI_SPI_1_IPCLK 0x20a0 // old
+#define CLK_CON_GAT_GOUT_PERI_SPI_1_PCLK 0x20a4 // old
+#define CLK_CON_GAT_GOUT_PERI_SPI_2_IPCLK 0x20a8 // old
+#define CLK_CON_GAT_GOUT_PERI_SPI_2_PCLK 0x20ac // old
+#define CLK_CON_GAT_GOUT_PERI_SYSREG_PCLK 0x20b0
+#define CLK_CON_GAT_GOUT_PERI_UART_IPCLK 0x20b4
+#define CLK_CON_GAT_GOUT_PERI_UART_PCLK 0x20b8
+#define CLK_CON_GAT_GOUT_PERI_USI00_I2C_IPCLK 0x20bc
+#define CLK_CON_GAT_GOUT_PERI_USI00_I2C_PCLK 0x20c0
+#define CLK_CON_GAT_GOUT_PERI_USI00_USI_IPCLK 0x20c4
+#define CLK_CON_GAT_GOUT_PERI_USI00_USI_PCLK 0x20c8
+#define CLK_CON_GAT_GOUT_PERI_WDT_CLUSTER0_PCLK 0x20cc
+#define CLK_CON_GAT_GOUT_PERI_WDT_CLUSTER1_PCLK 0x20d0
+
+static const unsigned long peri_clk_regs[] __initconst = {
+ PLL_CON0_MUX_CLKCMU_PERI_BUS_USER,
+ PLL_CON2_MUX_CLKCMU_PERI_BUS_USER,
+ PLL_CON0_MUX_CLKCMU_PERI_IP_USER,
+ PLL_CON2_MUX_CLKCMU_PERI_IP_USER,
+ PLL_CON0_MUX_CLKCMU_PERI_UART_USER,
+ PLL_CON2_MUX_CLKCMU_PERI_UART_USER,
+ CLK_CON_DIV_DIV_CLK_PERI_I2C,
+ CLK_CON_DIV_DIV_CLK_PERI_SPI0,
+ CLK_CON_DIV_DIV_CLK_PERI_SPI1,
+ CLK_CON_DIV_DIV_CLK_PERI_SPI2,
+ CLK_CON_DIV_DIV_CLK_PERI_USI_I2C,
+ CLK_CON_DIV_DIV_CLK_PERI_USI_USI,
+ CLK_CON_GAT_CLK_PERI_CMU_PCLK,
+ CLK_CON_GAT_CLK_PERI_OSCCLK_CLK,
+ CLK_CON_GAT_GATE_CLK_PERI_I2C,
+ CLK_CON_GAT_GATE_CLK_PERI_SPI0,
+ CLK_CON_GAT_GATE_CLK_PERI_SPI1,
+ CLK_CON_GAT_GATE_CLK_PERI_SPI2,
+ CLK_CON_GAT_GATE_CLK_PERI_USI_I2C,
+ CLK_CON_GAT_GATE_CLK_PERI_USI_USI,
+ CLK_CON_GAT_GOUT_PERI_AXI2AHB_MSD32_ACLK,
+ CLK_CON_GAT_GOUT_PERI_BUSIF_TMU_PCLK,
+ CLK_CON_GAT_GOUT_PERI_CAMI2C_0_IPCLK,
+ CLK_CON_GAT_GOUT_PERI_CAMI2C_0_PCLK,
+ CLK_CON_GAT_GOUT_PERI_CAMI2C_1_IPCLK,
+ CLK_CON_GAT_GOUT_PERI_CAMI2C_1_PCLK,
+ CLK_CON_GAT_GOUT_PERI_CAMI2C_2_IPCLK,
+ CLK_CON_GAT_GOUT_PERI_CAMI2C_2_PCLK,
+ CLK_CON_GAT_GOUT_PERI_CAMI2C_3_IPCLK,
+ CLK_CON_GAT_GOUT_PERI_CAMI2C_3_PCLK,
+ CLK_CON_GAT_GOUT_PERI_I2C_0_PCLK,
+ CLK_CON_GAT_GOUT_PERI_I2C_1_PCLK,
+ CLK_CON_GAT_GOUT_PERI_I2C_2_PCLK,
+ CLK_CON_GAT_GOUT_PERI_I2C_3_PCLK,
+ CLK_CON_GAT_GOUT_PERI_I2C_4_PCLK,
+ CLK_CON_GAT_GOUT_PERI_I2C_5_PCLK,
+ CLK_CON_GAT_GOUT_PERI_I2C_6_PCLK,
+ CLK_CON_GAT_GOUT_PERI_GPIO_PCLK,
+ CLK_CON_GAT_GOUT_PERI_LHM_AXI_P_PERI_CLK,
+ CLK_CON_GAT_GOUT_PERI_MCT_PCLK,
+ CLK_CON_GAT_GOUT_PERI_OTP_CON_TOP_PCLK,
+ CLK_CON_GAT_GOUT_PERI_PWM_MOTOR_PCLK_S0,
+ CLK_CON_GAT_GOUT_PERI_BUS_CLK,
+ CLK_CON_GAT_GOUT_PERI_I2C_CLK,
+ CLK_CON_GAT_GOUT_PERI_SPI_0_CLK,
+ CLK_CON_GAT_GOUT_PERI_SPI_1_CLK,
+ CLK_CON_GAT_GOUT_PERI_SPI_2_CLK,
+ CLK_CON_GAT_GOUT_PERI_UART_CLK,
+ CLK_CON_GAT_GOUT_PERI_USI00_I2C_CLK,
+ CLK_CON_GAT_GOUT_PERI_USI00_USI_CLK,
+ CLK_CON_GAT_GOUT_PERI_SPI_0_IPCLK,
+ CLK_CON_GAT_GOUT_PERI_SPI_0_PCLK,
+ CLK_CON_GAT_GOUT_PERI_SPI_1_IPCLK,
+ CLK_CON_GAT_GOUT_PERI_SPI_1_PCLK,
+ CLK_CON_GAT_GOUT_PERI_SPI_2_IPCLK,
+ CLK_CON_GAT_GOUT_PERI_SPI_2_PCLK,
+ CLK_CON_GAT_GOUT_PERI_SYSREG_PCLK,
+ CLK_CON_GAT_GOUT_PERI_UART_IPCLK,
+ CLK_CON_GAT_GOUT_PERI_UART_PCLK,
+ CLK_CON_GAT_GOUT_PERI_USI00_I2C_IPCLK,
+ CLK_CON_GAT_GOUT_PERI_USI00_I2C_PCLK,
+ CLK_CON_GAT_GOUT_PERI_USI00_USI_IPCLK,
+ CLK_CON_GAT_GOUT_PERI_USI00_USI_PCLK,
+ CLK_CON_GAT_GOUT_PERI_WDT_CLUSTER0_PCLK,
+ CLK_CON_GAT_GOUT_PERI_WDT_CLUSTER1_PCLK,
+};
+
+PNAME(mout_pll_peri_bus_user_p) = { "oscclk", "dout_cmu_peri_bus" };
+PNAME(mout_pll_peri_ip_user_p) = { "oscclk", "dout_cmu_peri_ip" };
+PNAME(mout_pll_peri_uart_user_p) = { "oscclk", "dout_cmu_peri_uart" };
+
+static const struct samsung_mux_clock peri_mux_clks[] __initconst = {
+ MUX(CLK_MOUT_PLL_PERI_BUS_USER, "mout_pll_peri_bus_user", mout_pll_peri_bus_user_p,
+ PLL_CON0_MUX_CLKCMU_PERI_BUS_USER, 4, 1),
+ MUX(CLK_MOUT_PLL_PERI_IP_USER, "mout_pll_peri_ip_user", mout_pll_peri_ip_user_p,
+ PLL_CON0_MUX_CLKCMU_PERI_IP_USER, 4, 1),
+ MUX(CLK_MOUT_PLL_PERI_UART_USER, "mout_pll_peri_uart_user", mout_pll_peri_uart_user_p,
+ PLL_CON0_MUX_CLKCMU_PERI_UART_USER, 4, 1),
+};
+
+static const struct samsung_div_clock peri_div_clks[] __initconst = {
+ DIV(CLK_DOUT_CLK_PERI_I2C, "dout_clk_peri_i2c", "gout_clk_peri_i2c",
+ CLK_CON_DIV_DIV_CLK_PERI_I2C, 0, 8),
+ DIV(CLK_DOUT_CLK_PERI_SPI0, "dout_clk_peri_spi0", "gout_clk_peri_spi0",
+ CLK_CON_DIV_DIV_CLK_PERI_SPI0, 0, 8),
+ DIV(CLK_DOUT_CLK_PERI_SPI1, "dout_clk_peri_spi1", "gout_clk_peri_spi1",
+ CLK_CON_DIV_DIV_CLK_PERI_SPI1, 0, 8),
+ DIV(CLK_DOUT_CLK_PERI_SPI2, "dout_clk_peri_spi2", "gout_clk_peri_spi2",
+ CLK_CON_DIV_DIV_CLK_PERI_SPI2, 0, 8),
+ DIV(CLK_DOUT_CLK_PERI_USI_I2C, "dout_clk_peri_usi_i2c", "gout_clk_peri_usi_i2c",
+ CLK_CON_DIV_DIV_CLK_PERI_USI_I2C, 0, 4),
+ DIV(CLK_DOUT_CLK_PERI_USI_USI, "dout_clk_peri_usi_usi", "gout_clk_peri_usi_usi",
+ CLK_CON_DIV_DIV_CLK_PERI_USI_USI, 0, 8),
+};
+
+static const struct samsung_gate_clock peri_gate_clks[] __initconst = {
+ GATE(CLK_GOUT_CLK_PERI_I2C, "gout_clk_peri_i2c", "mout_pll_peri_ip_user",
+ CLK_CON_GAT_GATE_CLK_PERI_I2C, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CLK_PERI_SPI0, "gout_clk_peri_spi0", "mout_pll_peri_ip_user",
+ CLK_CON_GAT_GATE_CLK_PERI_SPI0, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CLK_PERI_SPI1, "gout_clk_peri_spi1", "mout_pll_peri_ip_user",
+ CLK_CON_GAT_GATE_CLK_PERI_SPI1, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CLK_PERI_SPI2, "gout_clk_peri_spi2", "mout_pll_peri_ip_user",
+ CLK_CON_GAT_GATE_CLK_PERI_SPI2, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CLK_PERI_USI_I2C, "gout_clk_peri_usi_i2c", "mout_pll_peri_ip_user",
+ CLK_CON_GAT_GATE_CLK_PERI_USI_I2C, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CLK_PERI_USI_USI, "gout_clk_peri_usi_usi", "mout_pll_peri_ip_user",
+ CLK_CON_GAT_GATE_CLK_PERI_USI_USI, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_AXI2AHB_MSD32_ACLK, "gout_peri_axi2ahb_msd32_aclk",
+ "mout_pll_peri_bus_user", CLK_CON_GAT_GOUT_PERI_AXI2AHB_MSD32_ACLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_BUSIF_TMU_PCLK, "gout_peri_busif_tmu_pclk",
+ "mout_pll_peri_bus_user", CLK_CON_GAT_GOUT_PERI_BUSIF_TMU_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_CAMI2C_0_IPCLK, "gout_peri_cami2c_0_ipclk",
+ "dout_clk_peri_i2c", CLK_CON_GAT_GOUT_PERI_CAMI2C_0_IPCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_CAMI2C_0_PCLK, "gout_peri_cami2c_0_pclk",
+ "mout_pll_peri_bus_user", CLK_CON_GAT_GOUT_PERI_CAMI2C_0_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_CAMI2C_1_IPCLK, "gout_peri_cami2c_1_ipclk",
+ "dout_clk_peri_i2c", CLK_CON_GAT_GOUT_PERI_CAMI2C_1_IPCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_CAMI2C_1_PCLK, "gout_peri_cami2c_1_pclk",
+ "mout_pll_peri_bus_user", CLK_CON_GAT_GOUT_PERI_CAMI2C_1_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_CAMI2C_2_IPCLK, "gout_peri_cami2c_2_ipclk",
+ "dout_clk_peri_i2c", CLK_CON_GAT_GOUT_PERI_CAMI2C_2_IPCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_CAMI2C_2_PCLK, "gout_peri_cami2c_2_pclk",
+ "mout_pll_peri_bus_user", CLK_CON_GAT_GOUT_PERI_CAMI2C_2_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_CAMI2C_3_IPCLK, "gout_peri_cami2c_3_ipclk",
+ "dout_clk_peri_i2c", CLK_CON_GAT_GOUT_PERI_CAMI2C_3_IPCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_CAMI2C_3_PCLK, "gout_peri_cami2c_3_pclk",
+ "mout_pll_peri_bus_user", CLK_CON_GAT_GOUT_PERI_CAMI2C_3_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_I2C_0_PCLK, "gout_peri_i2c_0_pclk", "mout_pll_peri_bus_user",
+ CLK_CON_GAT_GOUT_PERI_I2C_0_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_I2C_1_PCLK, "gout_peri_i2c_1_pclk", "mout_pll_peri_bus_user",
+ CLK_CON_GAT_GOUT_PERI_I2C_1_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_I2C_2_PCLK, "gout_peri_i2c_2_pclk", "mout_pll_peri_bus_user",
+ CLK_CON_GAT_GOUT_PERI_I2C_2_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_I2C_3_PCLK, "gout_peri_i2c_3_pclk", "mout_pll_peri_bus_user",
+ CLK_CON_GAT_GOUT_PERI_I2C_3_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_I2C_4_PCLK, "gout_peri_i2c_4_pclk", "mout_pll_peri_bus_user",
+ CLK_CON_GAT_GOUT_PERI_I2C_4_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_I2C_5_PCLK, "gout_peri_i2c_5_pclk", "mout_pll_peri_bus_user",
+ CLK_CON_GAT_GOUT_PERI_I2C_5_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_I2C_6_PCLK, "gout_peri_i2c_6_pclk", "mout_pll_peri_bus_user",
+ CLK_CON_GAT_GOUT_PERI_I2C_6_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_GPIO_PCLK, "gout_peri_gpio_pclk", "mout_pll_peri_bus_user",
+ CLK_CON_GAT_GOUT_PERI_GPIO_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_LHM_AXI_P_PERI_CLK, "gout_peri_lhm_axi_p_peri_clk",
+ "mout_pll_peri_bus_user", CLK_CON_GAT_GOUT_PERI_LHM_AXI_P_PERI_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_MCT_PCLK, "gout_peri_mct_pclk", "mout_pll_peri_bus_user",
+ CLK_CON_GAT_GOUT_PERI_MCT_PCLK, 21, 0, 0),
+ GATE(CLK_GOUT_PERI_OTP_CON_TOP_PCLK, "gout_peri_otp_con_top_pclk",
+ "mout_pll_peri_bus_user", CLK_CON_GAT_GOUT_PERI_OTP_CON_TOP_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_PWM_MOTOR_PCLK_S0, "gout_peri_pwm_motor_pclk_s0",
+ "mout_pll_peri_bus_user", CLK_CON_GAT_GOUT_PERI_PWM_MOTOR_PCLK_S0,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_BUS_CLK, "gout_peri_bus_clk", "mout_pll_peri_bus_user",
+ CLK_CON_GAT_GOUT_PERI_BUS_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_I2C_CLK, "gout_peri_i2c_clk", "dout_clk_peri_i2c",
+ CLK_CON_GAT_GOUT_PERI_I2C_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_SPI_0_CLK, "gout_peri_spi_0_clk", "dout_clk_peri_spi0",
+ CLK_CON_GAT_GOUT_PERI_SPI_0_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_SPI_1_CLK, "gout_peri_spi_1_clk", "dout_clk_peri_spi1",
+ CLK_CON_GAT_GOUT_PERI_SPI_1_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_SPI_2_CLK, "gout_peri_spi_2_clk", "dout_clk_peri_spi2",
+ CLK_CON_GAT_GOUT_PERI_SPI_2_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_UART_CLK, "gout_peri_uart_clk", "mout_pll_peri_uart_user",
+ CLK_CON_GAT_GOUT_PERI_UART_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_USI00_I2C_CLK, "gout_peri_usi00_i2c_clk",
+ "dout_clk_peri_usi_i2c", CLK_CON_GAT_GOUT_PERI_USI00_I2C_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_USI00_USI_CLK, "gout_peri_usi00_usi_clk",
+ "dout_clk_peri_usi_usi", CLK_CON_GAT_GOUT_PERI_USI00_USI_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_SPI_0_PCLK, "gout_peri_spi_0_pclk", "mout_pll_peri_bus_user",
+ CLK_CON_GAT_GOUT_PERI_SPI_0_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_SPI_0_IPCLK, "gout_peri_spi_0_ipclk", "dout_cmu_peri_spi0",
+ CLK_CON_GAT_GOUT_PERI_SPI_0_IPCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_SPI_1_PCLK, "gout_peri_spi_1_pclk", "mout_pll_peri_bus_user",
+ CLK_CON_GAT_GOUT_PERI_SPI_1_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_SPI_1_IPCLK, "gout_peri_spi_1_ipclk", "dout_cmu_peri_spi1",
+ CLK_CON_GAT_GOUT_PERI_SPI_1_IPCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_SPI_2_PCLK, "gout_peri_spi_2_pclk", "mout_pll_peri_bus_user",
+ CLK_CON_GAT_GOUT_PERI_SPI_2_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_SPI_2_IPCLK, "gout_peri_spi_2_ipclk", "dout_cmu_peri_spi1",
+ CLK_CON_GAT_GOUT_PERI_SPI_2_IPCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_SYSREG_PCLK, "gout_peri_sysreg_pclk", "mout_pll_peri_bus_user",
+ CLK_CON_GAT_GOUT_PERI_SYSREG_PCLK, 21, 0, 0),
+ GATE(CLK_GOUT_PERI_UART_IPCLK, "gout_peri_uart_ipclk", "mout_pll_peri_uart_user",
+ CLK_CON_GAT_GOUT_PERI_UART_IPCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_UART_PCLK, "gout_peri_uart_pclk", "mout_pll_peri_bus_user",
+ CLK_CON_GAT_GOUT_PERI_UART_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_USI00_I2C_IPCLK, "gout_peri_usi00_i2c_ipclk",
+ "dout_clk_peri_usi_i2c_user", CLK_CON_GAT_GOUT_PERI_USI00_I2C_IPCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_USI00_I2C_PCLK, "gout_peri_usi00_i2c_pclk",
+ "mout_pll_peri_bus_user", CLK_CON_GAT_GOUT_PERI_USI00_I2C_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_USI00_USI_IPCLK, "gout_peri_usi00_usi_ipclk",
+ "dout_clk_peri_usi_usi_user", CLK_CON_GAT_GOUT_PERI_USI00_USI_IPCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_USI00_USI_PCLK, "gout_peri_usi00_usi_pclk",
+ "mout_pll_peri_bus_user", CLK_CON_GAT_GOUT_PERI_USI00_USI_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_WDT_CLUSTER0_PCLK, "gout_peri_wdt_cluster0_pclk",
+ "mout_pll_peri_bus_user", CLK_CON_GAT_GOUT_PERI_WDT_CLUSTER0_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_PERI_WDT_CLUSTER1_PCLK, "gout_peri_wdt_cluster1_pclk",
+ "mout_pll_peri_bus_user", CLK_CON_GAT_GOUT_PERI_WDT_CLUSTER1_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+};
+
+static const struct samsung_cmu_info peri_cmu_info __initconst = {
+ .mux_clks = peri_mux_clks,
+ .nr_mux_clks = ARRAY_SIZE(peri_mux_clks),
+ .div_clks = peri_div_clks,
+ .nr_div_clks = ARRAY_SIZE(peri_div_clks),
+ .gate_clks = peri_gate_clks,
+ .nr_gate_clks = ARRAY_SIZE(peri_gate_clks),
+ .clk_regs = peri_clk_regs,
+ .nr_clk_regs = ARRAY_SIZE(peri_clk_regs),
+ .nr_clk_ids = CLKS_NR_PERI,
+};
+
+static void __init exynos9610_cmu_peri_init(struct device_node *np)
+{
+ exynos_arm64_register_cmu(NULL, np, &peri_cmu_info);
+}
+
+CLK_OF_DECLARE(exynos9610_cmu_peri, "samsung,exynos9610-cmu-peri",
+ exynos9610_cmu_peri_init);
+
+/* CMU_APM */
+#define PLL_CON0_MUX_CLKCMU_APM_BUS_USER 0x0100
+#define PLL_CON2_MUX_CLKCMU_APM_BUS_USER 0x0108
+#define PLL_CON0_MUX_DLL_USER 0x0120
+#define PLL_CON2_MUX_DLL_USER 0x0128
+#define CLK_CON_MUX_CLKCMU_SHUB_BUS 0x1000
+#define CLK_CON_MUX_CLK_APM_BUS 0x1004
+#define CLK_CON_DIV_CLKCMU_SHUB_BUS 0x1800
+#define CLK_CON_DIV_CLK_APM_BUS 0x1804
+#define CLK_CON_GAT_CLKCMU_CMGP_BUS 0x2000
+#define CLK_CON_GAT_CLK_APM_CMU_PCLK 0x2004
+#define CLK_CON_GAT_CLK_APM_OSCCLK_CLK 0x2008
+#define CLK_CON_GAT_CLK_APM_OSCCLK_RCO_CLK 0x200c
+#define CLK_CON_GAT_GATE_CLKCMU_SHUB_BUS 0x2010
+#define CLK_CON_GAT_GOUT_APM_APBIF_GPIO_ALIVE_PCLK 0x2014
+#define CLK_CON_GAT_GOUT_APM_APBIF_PMU_ALIVE_PCLK 0x2018
+#define CLK_CON_GAT_GOUT_APM_APBIF_RTC_ALIVE_PCLK 0x201c
+#define CLK_CON_GAT_GOUT_APM_APBIF_TOP_RTC_ALIVE_PCLK 0x2020
+#define CLK_CON_GAT_GOUT_APM_GREBEINTEGRATION_HCLK 0x2024
+#define CLK_CON_GAT_GOUT_APM_INTMEM_ACLK 0x2028
+#define CLK_CON_GAT_GOUT_APM_INTMEM_PCLK 0x202c
+#define CLK_CON_GAT_GOUT_APM_LHM_AXI_P_GNSS_CLK 0x2030
+#define CLK_CON_GAT_GOUT_APM_LHM_AXI_P_CLK 0x2034
+#define CLK_CON_GAT_GOUT_APM_LHM_AXI_P_MODEM_CLK 0x2038
+#define CLK_CON_GAT_GOUT_APM_LHM_AXI_P_SHUB_CLK 0x203c
+#define CLK_CON_GAT_GOUT_APM_LHM_AXI_P_WLBT_CLK 0x2040
+#define CLK_CON_GAT_GOUT_APM_LHS_AXI_D_CLK 0x2044
+#define CLK_CON_GAT_GOUT_APM_LHS_AXI_LP_SHUB_CLK 0x2048
+#define CLK_CON_GAT_GOUT_APM_MAILBOX_AP2CP_PCLK 0x204c
+#define CLK_CON_GAT_GOUT_APM_MAILBOX_AP2CP_S_PCLK 0x2050
+#define CLK_CON_GAT_GOUT_APM_MAILBOX_AP2GNSS_PCLK 0x2054
+#define CLK_CON_GAT_GOUT_APM_MAILBOX_AP2SHUB_PCLK 0x2058
+#define CLK_CON_GAT_GOUT_APM_MAILBOX_AP2WLBT_PCLK 0x205c
+#define CLK_CON_GAT_GOUT_APM_MAILBOX_APM2AP_PCLK 0x2060
+#define CLK_CON_GAT_GOUT_APM_MAILBOX_APM2CP_PCLK 0x2064
+#define CLK_CON_GAT_GOUT_APM_MAILBOX_APM2GNSS_PCLK 0x2068
+#define CLK_CON_GAT_GOUT_APM_MAILBOX_APM2SHUB_PCLK 0x206c
+#define CLK_CON_GAT_GOUT_APM_MAILBOX_APM2WLBT_PCLK 0x2070
+#define CLK_CON_GAT_GOUT_APM_MAILBOX_CP2GNSS_PCLK 0x2074
+#define CLK_CON_GAT_GOUT_APM_MAILBOX_CP2SHUB_PCLK 0x2078
+#define CLK_CON_GAT_GOUT_APM_MAILBOX_CP2WLBT_PCLK 0x207c
+#define CLK_CON_GAT_GOUT_APM_MAILBOX_SHUB2GNSS_PCLK 0x2080
+#define CLK_CON_GAT_GOUT_APM_MAILBOX_SHUB2WLBT_PCLK 0x2084
+#define CLK_CON_GAT_GOUT_APM_MAILBOX_WLBT2ABOX_PCLK 0x2088
+#define CLK_CON_GAT_GOUT_APM_MAILBOX_WLBT2GNSS_PCLK 0x208c
+#define CLK_CON_GAT_GOUT_APM_PEM_CLK 0x2090
+#define CLK_CON_GAT_GOUT_APM_PGEN_LITE_CLK 0x2094
+#define CLK_CON_GAT_GOUT_APM_PMU_INTR_GEN_PCLK 0x2098
+#define CLK_CON_GAT_GOUT_APM_BUS_CLK 0x209c
+#define CLK_CON_GAT_GOUT_APM_GREBE_CLK 0x20a0
+#define CLK_CON_GAT_GOUT_APM_SPEEDY_PCLK 0x20a4
+#define CLK_CON_GAT_GOUT_APM_SYSREG_PCLK 0x20a8
+#define CLK_CON_GAT_GOUT_APM_WDT_PCLK 0x20ac
+#define CLK_CON_GAT_GOUT_APM_XIU_DP_ACLK 0x20b0
+
+static const unsigned long apm_clk_regs[] __initconst = {
+ PLL_CON0_MUX_CLKCMU_APM_BUS_USER,
+ PLL_CON2_MUX_CLKCMU_APM_BUS_USER,
+ PLL_CON0_MUX_DLL_USER,
+ PLL_CON2_MUX_DLL_USER,
+ CLK_CON_MUX_CLKCMU_SHUB_BUS,
+ CLK_CON_MUX_CLK_APM_BUS,
+ CLK_CON_DIV_CLKCMU_SHUB_BUS,
+ CLK_CON_DIV_CLK_APM_BUS,
+ CLK_CON_GAT_CLKCMU_CMGP_BUS,
+ CLK_CON_GAT_CLK_APM_CMU_PCLK,
+ CLK_CON_GAT_CLK_APM_OSCCLK_CLK,
+ CLK_CON_GAT_CLK_APM_OSCCLK_RCO_CLK,
+ CLK_CON_GAT_GATE_CLKCMU_SHUB_BUS,
+ CLK_CON_GAT_GOUT_APM_APBIF_GPIO_ALIVE_PCLK,
+ CLK_CON_GAT_GOUT_APM_APBIF_PMU_ALIVE_PCLK,
+ CLK_CON_GAT_GOUT_APM_APBIF_RTC_ALIVE_PCLK,
+ CLK_CON_GAT_GOUT_APM_APBIF_TOP_RTC_ALIVE_PCLK,
+ CLK_CON_GAT_GOUT_APM_GREBEINTEGRATION_HCLK,
+ CLK_CON_GAT_GOUT_APM_INTMEM_ACLK,
+ CLK_CON_GAT_GOUT_APM_INTMEM_PCLK,
+ CLK_CON_GAT_GOUT_APM_LHM_AXI_P_GNSS_CLK,
+ CLK_CON_GAT_GOUT_APM_LHM_AXI_P_CLK,
+ CLK_CON_GAT_GOUT_APM_LHM_AXI_P_MODEM_CLK,
+ CLK_CON_GAT_GOUT_APM_LHM_AXI_P_SHUB_CLK,
+ CLK_CON_GAT_GOUT_APM_LHM_AXI_P_WLBT_CLK,
+ CLK_CON_GAT_GOUT_APM_LHS_AXI_D_CLK,
+ CLK_CON_GAT_GOUT_APM_LHS_AXI_LP_SHUB_CLK,
+ CLK_CON_GAT_GOUT_APM_MAILBOX_AP2CP_PCLK,
+ CLK_CON_GAT_GOUT_APM_MAILBOX_AP2CP_S_PCLK,
+ CLK_CON_GAT_GOUT_APM_MAILBOX_AP2GNSS_PCLK,
+ CLK_CON_GAT_GOUT_APM_MAILBOX_AP2SHUB_PCLK,
+ CLK_CON_GAT_GOUT_APM_MAILBOX_AP2WLBT_PCLK,
+ CLK_CON_GAT_GOUT_APM_MAILBOX_APM2AP_PCLK,
+ CLK_CON_GAT_GOUT_APM_MAILBOX_APM2CP_PCLK,
+ CLK_CON_GAT_GOUT_APM_MAILBOX_APM2GNSS_PCLK,
+ CLK_CON_GAT_GOUT_APM_MAILBOX_APM2SHUB_PCLK,
+ CLK_CON_GAT_GOUT_APM_MAILBOX_APM2WLBT_PCLK,
+ CLK_CON_GAT_GOUT_APM_MAILBOX_CP2GNSS_PCLK,
+ CLK_CON_GAT_GOUT_APM_MAILBOX_CP2SHUB_PCLK,
+ CLK_CON_GAT_GOUT_APM_MAILBOX_CP2WLBT_PCLK,
+ CLK_CON_GAT_GOUT_APM_MAILBOX_SHUB2GNSS_PCLK,
+ CLK_CON_GAT_GOUT_APM_MAILBOX_SHUB2WLBT_PCLK,
+ CLK_CON_GAT_GOUT_APM_MAILBOX_WLBT2ABOX_PCLK,
+ CLK_CON_GAT_GOUT_APM_MAILBOX_WLBT2GNSS_PCLK,
+ CLK_CON_GAT_GOUT_APM_PEM_CLK,
+ CLK_CON_GAT_GOUT_APM_PGEN_LITE_CLK,
+ CLK_CON_GAT_GOUT_APM_PMU_INTR_GEN_PCLK,
+ CLK_CON_GAT_GOUT_APM_BUS_CLK,
+ CLK_CON_GAT_GOUT_APM_GREBE_CLK,
+ CLK_CON_GAT_GOUT_APM_SPEEDY_PCLK,
+ CLK_CON_GAT_GOUT_APM_SYSREG_PCLK,
+ CLK_CON_GAT_GOUT_APM_WDT_PCLK,
+ CLK_CON_GAT_GOUT_APM_XIU_DP_ACLK,
+};
+
+PNAME(mout_pll_apm_bus_user_p) = { "oscclk", "dout_cmu_apm_bus" };
+PNAME(mout_pll_dll_user_p) = { "oscclk", "dll_dco" };
+PNAME(mout_cmu_shub_bus_p) = { "oscclk", "mout_pll_dll_user" };
+PNAME(mout_clk_apm_bus_p) = { "mout_pll_apm_bus_user",
+ "dll_dco" };
+
+static const struct samsung_mux_clock apm_mux_clks[] __initconst = {
+ MUX(CLK_MOUT_PLL_APM_BUS_USER, "mout_pll_apm_bus_user", mout_pll_apm_bus_user_p,
+ PLL_CON0_MUX_CLKCMU_APM_BUS_USER, 4, 1),
+ MUX(CLK_MOUT_PLL_DLL_USER, "mout_pll_dll_user", mout_pll_dll_user_p,
+ PLL_CON0_MUX_DLL_USER, 4, 1),
+ MUX(CLK_MOUT_CMU_SHUB_BUS, "mout_cmu_shub_bus", mout_cmu_shub_bus_p,
+ CLK_CON_MUX_CLKCMU_SHUB_BUS, 0, 1),
+ MUX(CLK_MOUT_CLK_APM_BUS, "mout_clk_apm_bus", mout_clk_apm_bus_p,
+ CLK_CON_MUX_CLK_APM_BUS, 0, 1),
+};
+
+static const struct samsung_div_clock apm_div_clks[] __initconst = {
+ DIV(CLK_DOUT_CMU_SHUB_BUS, "dout_cmu_shub_bus", "gout_cmu_shub_bus",
+ CLK_CON_DIV_CLKCMU_SHUB_BUS, 0, 3),
+ DIV(CLK_DOUT_CLK_APM_BUS, "dout_clk_apm_bus", "mout_clk_apm_bus",
+ CLK_CON_DIV_CLK_APM_BUS, 0, 3),
+};
+
+static const struct samsung_gate_clock apm_gate_clks[] __initconst = {
+ GATE(CLK_GOUT_CMU_CMGP_BUS, "gout_cmu_cmgp_bus", "dout_clk_apm_bus",
+ CLK_CON_GAT_CLKCMU_CMGP_BUS, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CLK_APM_CMU_PCLK, "gout_clk_apm_cmu_pclk", "dout_clk_apm_bus",
+ CLK_CON_GAT_CLK_APM_CMU_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CLK_APM_OSCCLK_CLK, "gat_clk_apm_oscclk_clk", "oscclk",
+ CLK_CON_GAT_CLK_APM_OSCCLK_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CLK_APM_OSCCLK_RCO_CLK, "gat_clk_apm_oscclk_rco_clk", "oscclk",
+ CLK_CON_GAT_CLK_APM_OSCCLK_RCO_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_APBIF_GPIO_ALIVE_PCLK, "gout_apm_apbif_gpio_alive_pclk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_APBIF_GPIO_ALIVE_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_APBIF_PMU_ALIVE_PCLK, "gout_apm_apbif_pmu_alive_pclk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_APBIF_PMU_ALIVE_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_APBIF_RTC_ALIVE_PCLK, "gout_apm_apbif_rtc_alive_pclk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_APBIF_RTC_ALIVE_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_APBIF_TOP_RTC_ALIVE_PCLK, "gout_apm_apbif_top_rtc_alive_pclk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_APBIF_TOP_RTC_ALIVE_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_GREBEINTEGRATION_HCLK, "gout_apm_grebeintegration_hclk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_GREBEINTEGRATION_HCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_INTMEM_ACLK, "gout_apm_intmem_aclk", "dout_clk_apm_bus",
+ CLK_CON_GAT_GOUT_APM_INTMEM_ACLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_INTMEM_PCLK, "gout_apm_intmem_pclk", "dout_clk_apm_bus",
+ CLK_CON_GAT_GOUT_APM_INTMEM_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_LHM_AXI_P_GNSS_CLK, "gout_apm_lhm_axi_p_gnss_clk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_LHM_AXI_P_GNSS_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_LHM_AXI_P_CLK, "gout_apm_lhm_axi_p_clk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_LHM_AXI_P_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_LHM_AXI_P_MODEM_CLK, "gout_apm_lhm_axi_p_modem_clk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_LHM_AXI_P_MODEM_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_LHM_AXI_P_SHUB_CLK, "gout_apm_lhm_axi_p_shub_clk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_LHM_AXI_P_SHUB_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_LHM_AXI_P_WLBT_CLK, "gout_apm_lhm_axi_p_wlbt_clk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_LHM_AXI_P_WLBT_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_LHS_AXI_D_CLK, "gout_apm_lhs_axi_d_clk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_LHS_AXI_D_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_LHS_AXI_LP_SHUB_CLK, "gout_apm_lhs_axi_lp_shub_clk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_LHS_AXI_LP_SHUB_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_MAILBOX_AP2CP_PCLK, "gout_apm_mailbox_ap2cp_pclk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_MAILBOX_AP2CP_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_MAILBOX_AP2CP_S_PCLK, "gout_apm_mailbox_ap2cp_s_pclk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_MAILBOX_AP2CP_S_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_MAILBOX_AP2GNSS_PCLK, "gout_apm_mailbox_ap2gnss_pclk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_MAILBOX_AP2GNSS_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_MAILBOX_AP2SHUB_PCLK, "gout_apm_mailbox_ap2shub_pclk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_MAILBOX_AP2SHUB_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_MAILBOX_AP2WLBT_PCLK, "gout_apm_mailbox_ap2wlbt_pclk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_MAILBOX_AP2WLBT_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_MAILBOX_APM2AP_PCLK, "gout_apm_mailbox_apm2ap_pclk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_MAILBOX_APM2AP_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_MAILBOX_APM2CP_PCLK, "gout_apm_mailbox_apm2cp_pclk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_MAILBOX_APM2CP_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_MAILBOX_APM2GNSS_PCLK, "gout_apm_mailbox_apm2gnss_pclk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_MAILBOX_APM2GNSS_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_MAILBOX_APM2SHUB_PCLK, "gout_apm_mailbox_apm2shub_pclk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_MAILBOX_APM2SHUB_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_MAILBOX_APM2WLBT_PCLK, "gout_apm_mailbox_apm2wlbt_pclk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_MAILBOX_APM2WLBT_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_MAILBOX_CP2GNSS_PCLK, "gout_apm_mailbox_cp2gnss_pclk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_MAILBOX_CP2GNSS_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_MAILBOX_CP2SHUB_PCLK, "gout_apm_mailbox_cp2shub_pclk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_MAILBOX_CP2SHUB_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_MAILBOX_CP2WLBT_PCLK, "gout_apm_mailbox_cp2wlbt_pclk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_MAILBOX_CP2WLBT_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_MAILBOX_SHUB2GNSS_PCLK, "gout_apm_mailbox_shub2gnss_pclk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_MAILBOX_SHUB2GNSS_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_MAILBOX_SHUB2WLBT_PCLK, "gout_apm_mailbox_shub2wlbt_pclk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_MAILBOX_SHUB2WLBT_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_MAILBOX_WLBT2ABOX_PCLK, "gout_apm_mailbox_wlbt2abox_pclk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_MAILBOX_WLBT2ABOX_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_MAILBOX_WLBT2GNSS_PCLK, "gout_apm_mailbox_wlbt2gnss_pclk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_MAILBOX_WLBT2GNSS_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_PEM_CLK, "gout_apm_pem_clk", "dout_clk_apm_bus",
+ CLK_CON_GAT_GOUT_APM_PEM_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_PGEN_LITE_CLK, "gout_apm_pgen_lite_clk", "dout_clk_apm_bus",
+ CLK_CON_GAT_GOUT_APM_PGEN_LITE_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_PMU_INTR_GEN_PCLK, "gout_apm_pmu_intr_gen_pclk",
+ "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_PMU_INTR_GEN_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_BUS_CLK, "gout_apm_bus_clk", "dout_clk_apm_bus",
+ CLK_CON_GAT_GOUT_APM_BUS_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_GREBE_CLK, "gout_apm_grebe_clk", "dout_clk_apm_bus",
+ CLK_CON_GAT_GOUT_APM_GREBE_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_SPEEDY_PCLK, "gout_apm_speedy_pclk", "dout_clk_apm_bus",
+ CLK_CON_GAT_GOUT_APM_SPEEDY_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_SYSREG_PCLK, "gout_apm_sysreg_pclk", "dout_clk_apm_bus",
+ CLK_CON_GAT_GOUT_APM_SYSREG_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_WDT_PCLK, "gout_apm_wdt_pclk", "dout_clk_apm_bus",
+ CLK_CON_GAT_GOUT_APM_WDT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_APM_XIU_DP_ACLK, "gout_apm_xiu_dp_aclk", "dout_clk_apm_bus",
+ CLK_CON_GAT_GOUT_APM_XIU_DP_ACLK, 21, CLK_IGNORE_UNUSED, 0),
+};
+
+static const struct samsung_cmu_info apm_cmu_info __initconst = {
+ .mux_clks = apm_mux_clks,
+ .nr_mux_clks = ARRAY_SIZE(apm_mux_clks),
+ .div_clks = apm_div_clks,
+ .nr_div_clks = ARRAY_SIZE(apm_div_clks),
+ .gate_clks = apm_gate_clks,
+ .nr_gate_clks = ARRAY_SIZE(apm_gate_clks),
+ .clk_regs = apm_clk_regs,
+ .nr_clk_regs = ARRAY_SIZE(apm_clk_regs),
+ .nr_clk_ids = CLKS_NR_APM,
+};
+
+static void __init exynos9610_cmu_apm_init(struct device_node *np)
+{
+ exynos_arm64_register_cmu(NULL, np, &apm_cmu_info);
+}
+
+// Register APM early, as it's a dependency of CMU_CMGP
+CLK_OF_DECLARE(exynos9610_cmu_apm, "samsung,exynos9610-cmu-apm",
+ exynos9610_cmu_apm_init);
+
+/* CMU_CAM */
+#define PLL_CON0_MUX_CLKCMU_CAM_BUS_USER 0x0100
+#define PLL_CON2_MUX_CLKCMU_CAM_BUS_USER 0x0108
+#define CLK_CON_DIV_DIV_CLK_CAM_BUSP 0x1800
+#define CLK_CON_GAT_CLK_CAM_CMU_PCLK 0x2000
+#define CLK_CON_GAT_CLK_CAM_OSCCLK_CLK 0x2004
+#define CLK_CON_GAT_GOUT_CAM_BUSD 0x2008
+#define CLK_CON_GAT_GOUT_CAM_BTM_ACLK 0x200c
+#define CLK_CON_GAT_GOUT_CAM_BTM_PCLK 0x2010
+#define CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_3AA 0x2014
+#define CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_CSIS0 0x2018
+#define CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_CSIS1 0x201c
+#define CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_CSIS2 0x2020
+#define CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_CSIS3 0x2024
+#define CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_DMA 0x2028
+#define CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_GLUE_CSIS0 0x202c
+#define CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_GLUE_CSIS1 0x2030
+#define CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_GLUE_CSIS2 0x2034
+#define CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_GLUE_CSIS3 0x2038
+#define CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_PAFSTAT_CORE 0x203c
+#define CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_PPMU_CAM 0x2040
+#define CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_RDMA 0x2044
+// #define CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_SMMU_CAM 0x2048
+#define CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_XIU_D_CAM 0x204c
+#define CLK_CON_GAT_GOUT_CAM_IS6P10P0_PCLK_PGEN_LITE_CAM0 0x2050
+#define CLK_CON_GAT_GOUT_CAM_IS6P10P0_PCLK_PGEN_LITE_CAM1 0x2054
+#define CLK_CON_GAT_GOUT_CAM_IS6P10P0_PCLK_PPMU_CAM 0x2058
+#define CLK_CON_GAT_GOUT_CAM_LHM_AXI_P_CLK 0x205c
+#define CLK_CON_GAT_GOUT_CAM_LHS_ACEL_D_CLK 0x2060
+#define CLK_CON_GAT_GOUT_CAM_LHS_ATB_CAMISP_CLK 0x2064
+#define CLK_CON_GAT_GOUT_CAM_BUSD_CLK 0x2068
+#define CLK_CON_GAT_GOUT_CAM_BUSP_CLK 0x206c
+#define CLK_CON_GAT_GOUT_CAM_SYSREG_PCLK 0x2070
+
+static const unsigned long cam_clk_regs[] __initconst = {
+ PLL_CON0_MUX_CLKCMU_CAM_BUS_USER,
+ PLL_CON2_MUX_CLKCMU_CAM_BUS_USER,
+ CLK_CON_DIV_DIV_CLK_CAM_BUSP,
+ CLK_CON_GAT_CLK_CAM_CMU_PCLK,
+ CLK_CON_GAT_CLK_CAM_OSCCLK_CLK,
+ CLK_CON_GAT_GOUT_CAM_BUSD,
+ CLK_CON_GAT_GOUT_CAM_BTM_ACLK,
+ CLK_CON_GAT_GOUT_CAM_BTM_PCLK,
+ CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_3AA,
+ CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_CSIS0,
+ CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_CSIS1,
+ CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_CSIS2,
+ CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_CSIS3,
+ CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_DMA,
+ CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_GLUE_CSIS0,
+ CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_GLUE_CSIS1,
+ CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_GLUE_CSIS2,
+ CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_GLUE_CSIS3,
+ CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_PAFSTAT_CORE,
+ CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_PPMU_CAM,
+ CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_RDMA,
+ // CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_SMMU_CAM,
+ CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_XIU_D_CAM,
+ CLK_CON_GAT_GOUT_CAM_IS6P10P0_PCLK_PGEN_LITE_CAM0,
+ CLK_CON_GAT_GOUT_CAM_IS6P10P0_PCLK_PPMU_CAM,
+ CLK_CON_GAT_GOUT_CAM_LHM_AXI_P_CLK,
+ CLK_CON_GAT_GOUT_CAM_LHS_ATB_CAMISP_CLK,
+ CLK_CON_GAT_GOUT_CAM_BUSD_CLK,
+ CLK_CON_GAT_GOUT_CAM_BUSP_CLK,
+ CLK_CON_GAT_GOUT_CAM_SYSREG_PCLK,
+};
+
+PNAME(mout_pll_cam_bus_user_p) = { "oscclk", "dout_cmu_cam_bus" };
+
+static const struct samsung_mux_clock cam_mux_clks[] __initconst = {
+ MUX(CLK_MOUT_PLL_CAM_BUS_USER, "mout_pll_cam_bus_user", mout_pll_cam_bus_user_p,
+ PLL_CON0_MUX_CLKCMU_CAM_BUS_USER, 4, 1),
+};
+
+static const struct samsung_div_clock cam_div_clks[] __initconst = {
+ DIV(CLK_DIV_CLK_CAM_BUSP, "dout_clk_cam_busp", "mout_pll_cam_bus_user",
+ CLK_CON_DIV_DIV_CLK_CAM_BUSP, 0, 2),
+};
+
+static const struct samsung_gate_clock cam_gate_clks[] __initconst = {
+ GATE(CLK_GAT_CLK_CAM_CMU_PCLK, "gat_clk_cam_cmu_pclk", "dout_clk_cam_busp",
+ CLK_CON_GAT_CLK_CAM_CMU_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GAT_CLK_CAM_OSCCLK_CLK, "gat_clk_cam_oscclk_clk", "oscclk",
+ CLK_CON_GAT_CLK_CAM_OSCCLK_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CAM_BUSD, "gout_cam_busd", "mout_pll_cam_bus_user",
+ CLK_CON_GAT_GOUT_CAM_BUSD, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CAM_BTM_ACLK, "gout_cam_btm_aclk", "mout_pll_cam_bus_user",
+ CLK_CON_GAT_GOUT_CAM_BTM_ACLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CAM_BTM_PCLK, "gout_cam_btm_pclk", "dout_clk_cam_busp",
+ CLK_CON_GAT_GOUT_CAM_BTM_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+
+ GATE(CLK_GOUT_CAM_LHS_ATB_CAMISP_CLK, "gout_cam_lhs_atb_camisp_clk",
+ "mout_pll_cam_bus_user", CLK_CON_GAT_GOUT_CAM_LHS_ATB_CAMISP_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CAM_IS6P10P0_ACLK_3AA, "gout_cam_is6p10p0_aclk_3aa",
+ "mout_pll_cam_bus_user", CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_3AA,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CAM_IS6P10P0_ACLK_CSIS0, "gout_cam_is6p10p0_aclk_csis0",
+ "mout_pll_cam_bus_user", CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_CSIS0,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CAM_IS6P10P0_ACLK_CSIS1, "gout_cam_is6p10p0_aclk_csis1",
+ "mout_pll_cam_bus_user", CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_CSIS1,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CAM_IS6P10P0_ACLK_CSIS2, "gout_cam_is6p10p0_aclk_csis2",
+ "mout_pll_cam_bus_user", CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_CSIS2,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CAM_IS6P10P0_ACLK_CSIS3, "gout_cam_is6p10p0_aclk_csis3",
+ "mout_pll_cam_bus_user", CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_CSIS3,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CAM_IS6P10P0_ACLK_RDMA, "gout_cam_is6p10p0_aclk_rdma",
+ "mout_pll_cam_bus_user", CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_RDMA,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CAM_IS6P10P0_ACLK_GLUE_CSIS0, "gout_cam_is6p10p0_aclk_glue_csis0",
+ "mout_pll_cam_bus_user", CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_GLUE_CSIS0,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CAM_IS6P10P0_ACLK_GLUE_CSIS1, "gout_cam_is6p10p0_aclk_glue_csis1",
+ "mout_pll_cam_bus_user", CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_GLUE_CSIS1,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CAM_IS6P10P0_ACLK_GLUE_CSIS2, "gout_cam_is6p10p0_aclk_glue_csis2",
+ "mout_pll_cam_bus_user", CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_GLUE_CSIS2,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CAM_IS6P10P0_ACLK_GLUE_CSIS3, "gout_cam_is6p10p0_aclk_glue_csis3",
+ "mout_pll_cam_bus_user", CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_GLUE_CSIS3,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CAM_IS6P10P0_ACLK_PAFSTAT_CORE, "gout_cam_is6p10p0_aclk_pafstat_core",
+ "mout_pll_cam_bus_user", CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_PAFSTAT_CORE,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CAM_IS6P10P0_ACLK_PPMU_CAM, "gout_cam_is6p10p0_aclk_ppmu_cam",
+ "mout_pll_cam_bus_user", CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_PPMU_CAM,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CAM_IS6P10P0_ACLK_DMA, "gout_cam_is6p10p0_aclk_dma",
+ "mout_pll_cam_bus_user", CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_DMA,
+ 21, CLK_IGNORE_UNUSED, 0),
+ // GATE(CLK_GOUT_CAM_IS6P10P0_ACLK_SMMU_CAM, "gout_cam_is6p10p0_aclk_smmu_cam",
+ // "mout_pll_cam_bus_user", CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_SMMU_CAM,
+ // 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CAM_IS6P10P0_ACLK_XIU_D_CAM, "gout_cam_is6p10p0_aclk_xiu_d_cam",
+ "mout_pll_cam_bus_user", CLK_CON_GAT_GOUT_CAM_IS6P10P0_ACLK_XIU_D_CAM,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CAM_IS6P10P0_PCLK_PGEN_LITE_CAM0, "gout_cam_is6p10p0_pclk_pgen_lite_cam0",
+ "dout_clk_cam_busp", CLK_CON_GAT_GOUT_CAM_IS6P10P0_PCLK_PGEN_LITE_CAM0,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CAM_IS6P10P0_PCLK_PGEN_LITE_CAM1, "gout_cam_is6p10p0_pclk_pgen_lite_cam1",
+ "dout_clk_cam_busp", CLK_CON_GAT_GOUT_CAM_IS6P10P0_PCLK_PGEN_LITE_CAM1,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CAM_IS6P10P0_PCLK_PPMU_CAM, "gout_cam_is6p10p0_pclk_ppmu_cam",
+ "dout_clk_cam_busp", CLK_CON_GAT_GOUT_CAM_IS6P10P0_PCLK_PPMU_CAM,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CAM_LHM_AXI_P_CLK, "gout_cam_lhm_axi_p_clk", "dout_clk_cam_busp",
+ CLK_CON_GAT_GOUT_CAM_LHM_AXI_P_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CAM_LHS_ACEL_D_CLK, "gout_cam_lhs_acel_d_clk", "mout_pll_cam_bus_user",
+ CLK_CON_GAT_GOUT_CAM_LHS_ACEL_D_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CAM_BUSD_CLK, "gout_cam_busd_clk", "mout_pll_cam_bus_user",
+ CLK_CON_GAT_GOUT_CAM_BUSD_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CAM_BUSP_CLK, "gout_cam_busp_clk", "dout_clk_cam_busp",
+ CLK_CON_GAT_GOUT_CAM_BUSP_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CAM_SYSREG_PCLK, "gout_cam_sysreg_pclk", "dout_clk_cam_busp",
+ CLK_CON_GAT_GOUT_CAM_SYSREG_PCLK, 21, 0, 0),
+};
+
+static const struct samsung_cmu_info cam_cmu_info __initconst = {
+ .mux_clks = cam_mux_clks,
+ .nr_mux_clks = ARRAY_SIZE(cam_mux_clks),
+ .div_clks = cam_div_clks,
+ .nr_div_clks = ARRAY_SIZE(cam_div_clks),
+ .gate_clks = cam_gate_clks,
+ .nr_gate_clks = ARRAY_SIZE(cam_gate_clks),
+ .clk_regs = cam_clk_regs,
+ .nr_clk_regs = ARRAY_SIZE(cam_clk_regs),
+ .nr_clk_ids = CLKS_NR_CAM,
+};
+
+/* CMU_CMGP */
+#define CLK_CON_MUX_MUX_CLK_CMGP_ADC 0x1000
+#define CLK_CON_MUX_MUX_CLK_CMGP_I2C 0x1004
+#define CLK_CON_MUX_MUX_CLK_CMGP_USI00 0x1008
+#define CLK_CON_MUX_MUX_CLK_CMGP_USI01 0x100c
+#define CLK_CON_MUX_MUX_CLK_CMGP_USI02 0x1010
+#define CLK_CON_MUX_MUX_CLK_CMGP_USI03 0x1014
+#define CLK_CON_MUX_MUX_CLK_CMGP_USI04 0x1018
+#define CLK_CON_DIV_DIV_CLK_CMGP_ADC 0x1800
+#define CLK_CON_DIV_DIV_CLK_CMGP_I2C 0x1804
+#define CLK_CON_DIV_DIV_CLK_CMGP_USI00 0x1808
+#define CLK_CON_DIV_DIV_CLK_CMGP_USI01 0x180c
+#define CLK_CON_DIV_DIV_CLK_CMGP_USI02 0x1810
+#define CLK_CON_DIV_DIV_CLK_CMGP_USI03 0x1814
+#define CLK_CON_DIV_DIV_CLK_CMGP_USI04 0x1818
+#define CLK_CON_GAT_CMGP_CMU_PCLK 0x2004
+#define CLK_CON_GAT_CLK_CMGP_OSCCLK_RCO_CLK 0x2008
+#define CLK_CON_GAT_GOUT_CMGP_ADC_PCLK_S0 0x200c
+#define CLK_CON_GAT_GOUT_CMGP_ADC_PCLK_S1 0x2010
+#define CLK_CON_GAT_GOUT_CMGP_GPIO_PCLK 0x2014
+#define CLK_CON_GAT_GOUT_CMGP_I2C_CMGP00_IPCLK 0x2018
+#define CLK_CON_GAT_GOUT_CMGP_I2C_CMGP00_PCLK 0x201c
+#define CLK_CON_GAT_GOUT_CMGP_I2C_CMGP01_IPCLK 0x2020
+#define CLK_CON_GAT_GOUT_CMGP_I2C_CMGP01_PCLK 0x2024
+#define CLK_CON_GAT_GOUT_CMGP_I2C_CMGP02_IPCLK 0x2028
+#define CLK_CON_GAT_GOUT_CMGP_I2C_CMGP02_PCLK 0x202c
+#define CLK_CON_GAT_GOUT_CMGP_I2C_CMGP03_IPCLK 0x2030
+#define CLK_CON_GAT_GOUT_CMGP_I2C_CMGP03_PCLK 0x2034
+#define CLK_CON_GAT_GOUT_CMGP_I2C_CMGP04_IPCLK 0x2038
+#define CLK_CON_GAT_GOUT_CMGP_I2C_CMGP04_PCLK 0x203c
+#define CLK_CON_GAT_GOUT_CMGP_BUS_CLK 0x2040
+#define CLK_CON_GAT_GOUT_CMGP_I2C_CLK 0x2044
+#define CLK_CON_GAT_GOUT_CMGP_USI00_CLK 0x2048
+#define CLK_CON_GAT_GOUT_CMGP_USI01_CLK 0x204c
+#define CLK_CON_GAT_GOUT_CMGP_USI02_CLK 0x2050
+#define CLK_CON_GAT_GOUT_CMGP_USI03_CLK 0x2054
+#define CLK_CON_GAT_GOUT_CMGP_USI04_CLK 0x2058
+#define CLK_CON_GAT_GOUT_CMGP_SYSREG_CMGP2CP_PCLK 0x205c
+#define CLK_CON_GAT_GOUT_CMGP_SYSREG_CMGP2GNSS_PCLK 0x2060
+#define CLK_CON_GAT_GOUT_CMGP_SYSREG_CMGP2PMU_AP_PCLK 0x2064
+#define CLK_CON_GAT_GOUT_CMGP_SYSREG_CMGP2PMU_SHUB_PCLK 0x2068
+#define CLK_CON_GAT_GOUT_CMGP_SYSREG_CMGP2SHUB_PCLK 0x206c
+#define CLK_CON_GAT_GOUT_CMGP_SYSREG_CMGP2WLBT_PCLK 0x2070
+#define CLK_CON_GAT_GOUT_CMGP_SYSREG_PCLK 0x2074
+#define CLK_CON_GAT_GOUT_CMGP_USI_CMGP00_IPCLK 0x2078
+#define CLK_CON_GAT_GOUT_CMGP_USI_CMGP00_PCLK 0x207c
+#define CLK_CON_GAT_GOUT_CMGP_USI_CMGP01_IPCLK 0x2080
+#define CLK_CON_GAT_GOUT_CMGP_USI_CMGP01_PCLK 0x2084
+#define CLK_CON_GAT_GOUT_CMGP_USI_CMGP02_IPCLK 0x2088
+#define CLK_CON_GAT_GOUT_CMGP_USI_CMGP02_PCLK 0x208c
+#define CLK_CON_GAT_GOUT_CMGP_USI_CMGP03_IPCLK 0x2090
+#define CLK_CON_GAT_GOUT_CMGP_USI_CMGP03_PCLK 0x2094
+#define CLK_CON_GAT_GOUT_CMGP_USI_CMGP04_IPCLK 0x2098
+#define CLK_CON_GAT_GOUT_CMGP_USI_CMGP04_PCLK 0x209c
+
+static const unsigned long cmgp_clk_regs[] __initconst = {
+ CLK_CON_MUX_MUX_CLK_CMGP_ADC,
+ CLK_CON_MUX_MUX_CLK_CMGP_I2C,
+ CLK_CON_MUX_MUX_CLK_CMGP_USI00,
+ CLK_CON_MUX_MUX_CLK_CMGP_USI01,
+ CLK_CON_MUX_MUX_CLK_CMGP_USI02,
+ CLK_CON_MUX_MUX_CLK_CMGP_USI03,
+ CLK_CON_MUX_MUX_CLK_CMGP_USI04,
+ CLK_CON_DIV_DIV_CLK_CMGP_ADC,
+ CLK_CON_DIV_DIV_CLK_CMGP_I2C,
+ CLK_CON_DIV_DIV_CLK_CMGP_USI00,
+ CLK_CON_DIV_DIV_CLK_CMGP_USI01,
+ CLK_CON_DIV_DIV_CLK_CMGP_USI02,
+ CLK_CON_DIV_DIV_CLK_CMGP_USI03,
+ CLK_CON_DIV_DIV_CLK_CMGP_USI04,
+ CLK_CON_GAT_CMGP_CMU_PCLK,
+ CLK_CON_GAT_CLK_CMGP_OSCCLK_RCO_CLK,
+ CLK_CON_GAT_GOUT_CMGP_ADC_PCLK_S0,
+ CLK_CON_GAT_GOUT_CMGP_ADC_PCLK_S1,
+ CLK_CON_GAT_GOUT_CMGP_GPIO_PCLK,
+ CLK_CON_GAT_GOUT_CMGP_I2C_CMGP00_IPCLK,
+ CLK_CON_GAT_GOUT_CMGP_I2C_CMGP00_PCLK,
+ CLK_CON_GAT_GOUT_CMGP_I2C_CMGP01_IPCLK,
+ CLK_CON_GAT_GOUT_CMGP_I2C_CMGP01_PCLK,
+ CLK_CON_GAT_GOUT_CMGP_I2C_CMGP02_IPCLK,
+ CLK_CON_GAT_GOUT_CMGP_I2C_CMGP02_PCLK,
+ CLK_CON_GAT_GOUT_CMGP_I2C_CMGP03_IPCLK,
+ CLK_CON_GAT_GOUT_CMGP_I2C_CMGP03_PCLK,
+ CLK_CON_GAT_GOUT_CMGP_I2C_CMGP04_IPCLK,
+ CLK_CON_GAT_GOUT_CMGP_I2C_CMGP04_PCLK,
+ CLK_CON_GAT_GOUT_CMGP_BUS_CLK,
+ CLK_CON_GAT_GOUT_CMGP_I2C_CLK,
+ CLK_CON_GAT_GOUT_CMGP_USI00_CLK,
+ CLK_CON_GAT_GOUT_CMGP_USI01_CLK,
+ CLK_CON_GAT_GOUT_CMGP_USI02_CLK,
+ CLK_CON_GAT_GOUT_CMGP_USI03_CLK,
+ CLK_CON_GAT_GOUT_CMGP_USI04_CLK,
+ CLK_CON_GAT_GOUT_CMGP_SYSREG_CMGP2CP_PCLK,
+ CLK_CON_GAT_GOUT_CMGP_SYSREG_CMGP2GNSS_PCLK,
+ CLK_CON_GAT_GOUT_CMGP_SYSREG_CMGP2PMU_AP_PCLK,
+ CLK_CON_GAT_GOUT_CMGP_SYSREG_CMGP2PMU_SHUB_PCLK,
+ CLK_CON_GAT_GOUT_CMGP_SYSREG_CMGP2SHUB_PCLK,
+ CLK_CON_GAT_GOUT_CMGP_SYSREG_CMGP2WLBT_PCLK,
+ CLK_CON_GAT_GOUT_CMGP_SYSREG_PCLK,
+ CLK_CON_GAT_GOUT_CMGP_USI_CMGP00_IPCLK,
+ CLK_CON_GAT_GOUT_CMGP_USI_CMGP00_PCLK,
+ CLK_CON_GAT_GOUT_CMGP_USI_CMGP01_IPCLK,
+ CLK_CON_GAT_GOUT_CMGP_USI_CMGP01_PCLK,
+ CLK_CON_GAT_GOUT_CMGP_USI_CMGP02_IPCLK,
+ CLK_CON_GAT_GOUT_CMGP_USI_CMGP02_PCLK,
+ CLK_CON_GAT_GOUT_CMGP_USI_CMGP03_IPCLK,
+ CLK_CON_GAT_GOUT_CMGP_USI_CMGP03_PCLK,
+ CLK_CON_GAT_GOUT_CMGP_USI_CMGP04_IPCLK,
+ CLK_CON_GAT_GOUT_CMGP_USI_CMGP04_PCLK,
+};
+
+PNAME(mout_clk_cmgp_adc_p) = { "oscclk", "dout_clk_cmgp_adc" };
+PNAME(mout_clk_cmgp_i2c_p) = { "oscclk_rco",
+ "gout_cmu_cmgp_bus" };
+PNAME(mout_clk_cmgp_usi00_p) = { "oscclk_rco",
+ "gout_cmu_cmgp_bus" };
+PNAME(mout_clk_cmgp_usi01_p) = { "oscclk_rco",
+ "gout_cmu_cmgp_bus" };
+PNAME(mout_clk_cmgp_usi02_p) = { "oscclk_rco",
+ "gout_cmu_cmgp_bus" };
+PNAME(mout_clk_cmgp_usi03_p) = { "oscclk_rco",
+ "gout_cmu_cmgp_bus" };
+PNAME(mout_clk_cmgp_usi04_p) = { "oscclk_rco",
+ "gout_cmu_cmgp_bus" };
+
+static const struct samsung_mux_clock cmgp_mux_clks[] __initconst = {
+ MUX(CLK_MOUT_CLK_CMGP_ADC, "mout_clk_cmgp_adc", mout_clk_cmgp_adc_p,
+ CLK_CON_MUX_MUX_CLK_CMGP_ADC, 0, 1),
+ MUX(CLK_MOUT_CLK_CMGP_I2C, "mout_clk_cmgp_i2c", mout_clk_cmgp_i2c_p,
+ CLK_CON_MUX_MUX_CLK_CMGP_I2C, 0, 1),
+ MUX(CLK_MOUT_CLK_CMGP_USI00, "mout_clk_cmgp_usi00", mout_clk_cmgp_usi00_p,
+ CLK_CON_MUX_MUX_CLK_CMGP_USI00, 0, 1),
+ MUX(CLK_MOUT_CLK_CMGP_USI01, "mout_clk_cmgp_usi01", mout_clk_cmgp_usi01_p,
+ CLK_CON_MUX_MUX_CLK_CMGP_USI01, 0, 1),
+ MUX(CLK_MOUT_CLK_CMGP_USI02, "mout_clk_cmgp_usi02", mout_clk_cmgp_usi02_p,
+ CLK_CON_MUX_MUX_CLK_CMGP_USI02, 0, 1),
+ MUX(CLK_MOUT_CLK_CMGP_USI03, "mout_clk_cmgp_usi03", mout_clk_cmgp_usi03_p,
+ CLK_CON_MUX_MUX_CLK_CMGP_USI03, 0, 1),
+ MUX(CLK_MOUT_CLK_CMGP_USI04, "mout_clk_cmgp_usi04", mout_clk_cmgp_usi04_p,
+ CLK_CON_MUX_MUX_CLK_CMGP_USI04, 0, 1),
+};
+
+static const struct samsung_div_clock cmgp_div_clks[] __initconst = {
+ DIV(CLK_DOUT_CLK_CMGP_ADC, "dout_clk_cmgp_adc", "gout_cmu_cmgp_bus",
+ CLK_CON_DIV_DIV_CLK_CMGP_ADC, 0, 4),
+ DIV(CLK_DOUT_CLK_CMGP_I2C, "dout_clk_cmgp_i2c", "mout_clk_cmgp_i2c",
+ CLK_CON_DIV_DIV_CLK_CMGP_I2C, 0, 4),
+ DIV(CLK_DOUT_CLK_CMGP_USI00, "dout_clk_cmgp_usi00", "mout_clk_cmgp_usi00",
+ CLK_CON_DIV_DIV_CLK_CMGP_USI00, 0, 4),
+ DIV(CLK_DOUT_CLK_CMGP_USI01, "dout_clk_cmgp_usi01", "mout_clk_cmgp_usi01",
+ CLK_CON_DIV_DIV_CLK_CMGP_USI01, 0, 4),
+ DIV(CLK_DOUT_CLK_CMGP_USI02, "dout_clk_cmgp_usi02", "mout_clk_cmgp_usi02",
+ CLK_CON_DIV_DIV_CLK_CMGP_USI02, 0, 4),
+ DIV(CLK_DOUT_CLK_CMGP_USI03, "dout_clk_cmgp_usi03", "mout_clk_cmgp_usi03",
+ CLK_CON_DIV_DIV_CLK_CMGP_USI03, 0, 4),
+ DIV(CLK_DOUT_CLK_CMGP_USI04, "dout_clk_cmgp_usi04", "mout_clk_cmgp_usi04",
+ CLK_CON_DIV_DIV_CLK_CMGP_USI04, 0, 4),
+};
+
+static const struct samsung_gate_clock cmgp_gate_clks[] __initconst = {
+ GATE(CLK_GOUT_CMGP_CMU_PCLK, "gout_cmgp_cmu_pclk", "gout_cmu_cmgp_bus",
+ CLK_CON_GAT_CMGP_CMU_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CLK_CMGP_OSCCLK_RCO_CLK, "gout_clk_cmgp_oscclk_rco_clk",
+ "oscclk_rco", CLK_CON_GAT_CLK_CMGP_OSCCLK_RCO_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_ADC_PCLK_S0, "gout_clk_cmgp_adc_pclk_s0",
+ "gout_cmu_cmgp_bus", CLK_CON_GAT_GOUT_CMGP_ADC_PCLK_S0,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_ADC_PCLK_S1, "gout_clk_cmgp_adc_pclk_s1",
+ "gout_cmu_cmgp_bus", CLK_CON_GAT_GOUT_CMGP_ADC_PCLK_S1,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_GPIO_PCLK, "gout_clk_cmgp_gpio_pclk",
+ "gout_cmu_cmgp_bus", CLK_CON_GAT_GOUT_CMGP_GPIO_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_I2C_CMGP00_IPCLK, "gout_clk_cmgp_i2c_cmgp00_ipclk",
+ "mout_clk_cmgp_i2c", CLK_CON_GAT_GOUT_CMGP_I2C_CMGP00_IPCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_I2C_CMGP00_PCLK, "gout_clk_cmgp_i2c_cmgp00_pclk",
+ "gout_cmu_cmgp_bus", CLK_CON_GAT_GOUT_CMGP_I2C_CMGP00_IPCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_I2C_CMGP01_IPCLK, "gout_clk_cmgp_i2c_cmgp01_ipclk",
+ "mout_clk_cmgp_i2c", CLK_CON_GAT_GOUT_CMGP_I2C_CMGP01_IPCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_I2C_CMGP01_PCLK, "gout_clk_cmgp_i2c_cmgp01_pclk",
+ "gout_cmu_cmgp_bus", CLK_CON_GAT_GOUT_CMGP_I2C_CMGP01_IPCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_I2C_CMGP02_IPCLK, "gout_clk_cmgp_i2c_cmgp02_ipclk",
+ "mout_clk_cmgp_i2c", CLK_CON_GAT_GOUT_CMGP_I2C_CMGP02_IPCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_I2C_CMGP02_PCLK, "gout_clk_cmgp_i2c_cmgp02_pclk",
+ "gout_cmu_cmgp_bus", CLK_CON_GAT_GOUT_CMGP_I2C_CMGP02_IPCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_I2C_CMGP03_IPCLK, "gout_clk_cmgp_i2c_cmgp03_ipclk",
+ "mout_clk_cmgp_i2c", CLK_CON_GAT_GOUT_CMGP_I2C_CMGP03_IPCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_I2C_CMGP03_PCLK, "gout_clk_cmgp_i2c_cmgp03_pclk",
+ "gout_cmu_cmgp_bus", CLK_CON_GAT_GOUT_CMGP_I2C_CMGP03_IPCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_I2C_CMGP04_IPCLK, "gout_clk_cmgp_i2c_cmgp04_ipclk",
+ "mout_clk_cmgp_i2c", CLK_CON_GAT_GOUT_CMGP_I2C_CMGP04_IPCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_I2C_CMGP04_PCLK, "gout_clk_cmgp_i2c_cmgp04_pclk",
+ "gout_cmu_cmgp_bus", CLK_CON_GAT_GOUT_CMGP_I2C_CMGP04_IPCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_BUS_CLK, "gout_cmgp_bus_clk",
+ "gout_cmu_cmgp_bus", CLK_CON_GAT_GOUT_CMGP_BUS_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_I2C_CLK, "gout_cmgp_i2c_clk",
+ "dout_clk_cmgp_i2c", CLK_CON_GAT_GOUT_CMGP_I2C_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_USI00_CLK, "gout_cmgp_usi00_clk",
+ "mout_clk_cmgp_usi00", CLK_CON_GAT_GOUT_CMGP_USI00_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_USI01_CLK, "gout_cmgp_usi01_clk",
+ "mout_clk_cmgp_usi01", CLK_CON_GAT_GOUT_CMGP_USI01_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_USI02_CLK, "gout_cmgp_usi02_clk",
+ "mout_clk_cmgp_usi02", CLK_CON_GAT_GOUT_CMGP_USI02_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_USI03_CLK, "gout_cmgp_usi03_clk",
+ "mout_clk_cmgp_usi03", CLK_CON_GAT_GOUT_CMGP_USI03_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_USI04_CLK, "gout_cmgp_usi04_clk",
+ "mout_clk_cmgp_usi04", CLK_CON_GAT_GOUT_CMGP_USI04_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_SYSREG_CMGP2CP_PCLK,
+ "gout_cmgp_sysreg_cmgp2cp_pclk", "gout_cmu_cmgp_bus",
+ CLK_CON_GAT_GOUT_CMGP_SYSREG_CMGP2CP_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_SYSREG_CMGP2GNSS_PCLK,
+ "gout_cmgp_sysreg_cmgp2gnss_pclk", "gout_cmu_cmgp_bus",
+ CLK_CON_GAT_GOUT_CMGP_SYSREG_CMGP2GNSS_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_SYSREG_CMGP2PMU_AP_PCLK,
+ "gout_cmgp_sysreg_cmgp2pmu_ap_pclk", "gout_cmu_cmgp_bus",
+ CLK_CON_GAT_GOUT_CMGP_SYSREG_CMGP2PMU_AP_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_SYSREG_CMGP2PMU_SHUB_PCLK,
+ "gout_cmgp_sysreg_cmgp2pmu_shub_pclk", "gout_cmu_cmgp_bus",
+ CLK_CON_GAT_GOUT_CMGP_SYSREG_CMGP2PMU_SHUB_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_SYSREG_CMGP2SHUB_PCLK,
+ "gout_cmgp_sysreg_cmgp2shub_pclk", "gout_cmu_cmgp_bus",
+ CLK_CON_GAT_GOUT_CMGP_SYSREG_CMGP2SHUB_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_SYSREG_CMGP2WLBT_PCLK,
+ "gout_cmgp_sysreg_cmgp2wlbt_pclk", "gout_cmu_cmgp_bus",
+ CLK_CON_GAT_GOUT_CMGP_SYSREG_CMGP2WLBT_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_SYSREG_PCLK, "gout_cmgp_sysreg_pclk",
+ "gout_cmu_cmgp_bus", CLK_CON_GAT_GOUT_CMGP_SYSREG_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_USI_CMGP00_IPCLK, "gout_clk_cmgp_usi_cmgp00_ipclk",
+ "mout_clk_cmgp_usi00", CLK_CON_GAT_GOUT_CMGP_USI_CMGP00_IPCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_USI_CMGP00_PCLK, "gout_clk_cmgp_usi_cmgp00_pclk",
+ "gout_cmu_cmgp_bus", CLK_CON_GAT_GOUT_CMGP_USI_CMGP00_IPCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_USI_CMGP01_IPCLK, "gout_clk_cmgp_usi_cmgp01_ipclk",
+ "mout_clk_cmgp_usi01", CLK_CON_GAT_GOUT_CMGP_USI_CMGP01_IPCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_USI_CMGP01_PCLK, "gout_clk_cmgp_usi_cmgp01_pclk",
+ "gout_cmu_cmgp_bus", CLK_CON_GAT_GOUT_CMGP_USI_CMGP01_IPCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_USI_CMGP02_IPCLK, "gout_clk_cmgp_usi_cmgp02_ipclk",
+ "mout_clk_cmgp_usi02", CLK_CON_GAT_GOUT_CMGP_USI_CMGP02_IPCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_USI_CMGP02_PCLK, "gout_clk_cmgp_usi_cmgp02_pclk",
+ "gout_cmu_cmgp_bus", CLK_CON_GAT_GOUT_CMGP_USI_CMGP02_IPCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_USI_CMGP03_IPCLK, "gout_clk_cmgp_usi_cmgp03_ipclk",
+ "mout_clk_cmgp_usi03", CLK_CON_GAT_GOUT_CMGP_USI_CMGP03_IPCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_USI_CMGP03_PCLK, "gout_clk_cmgp_usi_cmgp03_pclk",
+ "gout_cmu_cmgp_bus", CLK_CON_GAT_GOUT_CMGP_USI_CMGP03_IPCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_USI_CMGP04_IPCLK, "gout_clk_cmgp_usi_cmgp04_ipclk",
+ "mout_clk_cmgp_usi04", CLK_CON_GAT_GOUT_CMGP_USI_CMGP04_IPCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CMGP_USI_CMGP04_PCLK, "gout_clk_cmgp_usi_cmgp04_pclk",
+ "gout_cmu_cmgp_bus", CLK_CON_GAT_GOUT_CMGP_USI_CMGP04_IPCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+};
+
+static const struct samsung_cmu_info cmgp_cmu_info __initconst = {
+ .mux_clks = cmgp_mux_clks,
+ .nr_mux_clks = ARRAY_SIZE(cmgp_mux_clks),
+ .div_clks = cmgp_div_clks,
+ .nr_div_clks = ARRAY_SIZE(cmgp_div_clks),
+ .gate_clks = cmgp_gate_clks,
+ .nr_gate_clks = ARRAY_SIZE(cmgp_gate_clks),
+ .clk_regs = cmgp_clk_regs,
+ .nr_clk_regs = ARRAY_SIZE(cmgp_clk_regs),
+ .nr_clk_ids = CLKS_NR_CMGP,
+};
+
+/* CMU_CORE */
+#define PLL_CON0_MUX_CLKCMU_CORE_BUS_USER 0x0100
+#define PLL_CON2_MUX_CLKCMU_CORE_BUS_USER 0x0108
+#define PLL_CON0_MUX_CLKCMU_CORE_CCI_USER 0x0120
+#define PLL_CON2_MUX_CLKCMU_CORE_CCI_USER 0x0128
+#define PLL_CON0_MUX_CLKCMU_CORE_G3D_USER 0x0140
+#define PLL_CON2_MUX_CLKCMU_CORE_G3D_USER 0x0148
+#define CLK_CON_MUX_MUX_CLK_CORE_GIC 0x1000
+#define CLK_CON_DIV_DIV_CLK_CORE_BUSP 0x1800
+#define CLK_CON_GAT_CLK_CORE_CMU_PCLK 0x2000
+#define CLK_CON_GAT_GOUT_CORE_AD_APB_CCI_550_PCLKM 0x2004
+#define CLK_CON_GAT_GOUT_CORE_AD_APB_DIT_PCLKM 0x2008
+#define CLK_CON_GAT_GOUT_CORE_AD_APB_PDMA0_PCLKM 0x200c
+#define CLK_CON_GAT_GOUT_CORE_AD_APB_PGEN_PDMA_PCLKM 0x2010
+#define CLK_CON_GAT_GOUT_CORE_AD_APB_PPFW_MEM0_PCLKM 0x2014
+#define CLK_CON_GAT_GOUT_CORE_AD_APB_PPFW_MEM1_PCLKM 0x2018
+#define CLK_CON_GAT_GOUT_CORE_AD_APB_PPFW_PERI_PCLKM 0x201c
+#define CLK_CON_GAT_GOUT_CORE_AD_APB_SPDMA_PCLKM 0x2020
+#define CLK_CON_GAT_GOUT_CORE_AD_AXI_GIC_ACLKM 0x2024
+#define CLK_CON_GAT_GOUT_CORE_ASYNCSFR_WR_DMC0_PCLK 0x2028
+#define CLK_CON_GAT_GOUT_CORE_ASYNCSFR_WR_DMC1_PCLK 0x202c
+#define CLK_CON_GAT_GOUT_CORE_AXI_US_A40_64TO128_DIT_ACLK 0x2030
+#define CLK_CON_GAT_GOUT_CORE_BAAW_P_GNSS_PCLK 0x2034
+#define CLK_CON_GAT_GOUT_CORE_BAAW_P_MODEM_PCLK 0x2038
+#define CLK_CON_GAT_GOUT_CORE_BAAW_P_SHUB_PCLK 0x203c
+#define CLK_CON_GAT_GOUT_CORE_BAAW_P_WLBT_PCLK 0x2040
+#define CLK_CON_GAT_GOUT_CORE_CCI_550_ACLK 0x2044
+#define CLK_CON_GAT_GOUT_CORE_DIT_ICLKL2A 0x2048
+#define CLK_CON_GAT_GOUT_CORE_GIC400_AIHWACG_CLK 0x204c
+#define CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D0_ISP_CLK 0x2050
+#define CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D0_MFC_CLK 0x2054
+#define CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D1_ISP_CLK 0x2058
+#define CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D1_MFC_CLK 0x205c
+#define CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D_CAM_CLK 0x2060
+#define CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D_DPU_CLK 0x2064
+#define CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D_FSYS_CLK 0x2068
+#define CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D_G2D_CLK 0x206c
+#define CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D_USB_CLK 0x2070
+#define CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D_VIPX1_CLK 0x2074
+#define CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D_VIPX2_CLK 0x2078
+#define CLK_CON_GAT_GOUT_CORE_LHM_ACE_D_CPUCL0_CLK 0x207c
+#define CLK_CON_GAT_GOUT_CORE_LHM_ACE_D_CPUCL1_CLK 0x2080
+#define CLK_CON_GAT_GOUT_CORE_LHM_AXI_D0_MODEM_CLK 0x2084
+#define CLK_CON_GAT_GOUT_CORE_LHM_AXI_D1_MODEM_CLK 0x2088
+#define CLK_CON_GAT_GOUT_CORE_LHM_AXI_D_ABOX_CLK 0x208c
+#define CLK_CON_GAT_GOUT_CORE_LHM_AXI_D_APM_CLK 0x2090
+#define CLK_CON_GAT_GOUT_CORE_LHM_AXI_D_CSSYS_CLK 0x2094
+#define CLK_CON_GAT_GOUT_CORE_LHM_AXI_D_G3D_CLK 0x2098
+#define CLK_CON_GAT_GOUT_CORE_LHM_AXI_D_GNSS_CLK 0x209c
+#define CLK_CON_GAT_GOUT_CORE_LHM_AXI_D_SHUB_CLK 0x20a0
+#define CLK_CON_GAT_GOUT_CORE_LHM_AXI_D_WLBT_CLK 0x20a4
+#define CLK_CON_GAT_GOUT_CORE_LHS_AXI_D0_MIF_CPU_CLK 0x20a8
+#define CLK_CON_GAT_GOUT_CORE_LHS_AXI_D0_MIF_CP_CLK 0x20ac
+#define CLK_CON_GAT_GOUT_CORE_LHS_AXI_D0_MIF_NRT_CLK 0x20b0
+#define CLK_CON_GAT_GOUT_CORE_LHS_AXI_D0_MIF_RT_CLK 0x20b4
+#define CLK_CON_GAT_GOUT_CORE_LHS_AXI_D1_MIF_CPU_CLK 0x20b8
+#define CLK_CON_GAT_GOUT_CORE_LHS_AXI_D1_MIF_CP_CLK 0x20bc
+#define CLK_CON_GAT_GOUT_CORE_LHS_AXI_D1_MIF_NRT_CLK 0x20c0
+#define CLK_CON_GAT_GOUT_CORE_LHS_AXI_D1_MIF_RT_CLK 0x20c4
+#define CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_APM_CLK 0x20c8
+#define CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_CAM_CLK 0x20cc
+#define CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_CPUCL0_CLK 0x20d0
+#define CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_CPUCL1_CLK 0x20d4
+#define CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_DISPAUD_CLK 0x20d8
+#define CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_FSYS_CLK 0x20dc
+#define CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_G2D_CLK 0x20e0
+#define CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_G3D_CLK 0x20e4
+#define CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_GNSS_CLK 0x20e8
+#define CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_ISP_CLK 0x20ec
+#define CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_MFC_CLK 0x20f0
+#define CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_MIF0_CLK 0x20f4
+#define CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_MIF1_CLK 0x20f8
+#define CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_MODEM_CLK 0x20fc
+#define CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_PERI_CLK 0x2100
+#define CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_SHUB_CLK 0x2104
+#define CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_USB_CLK 0x2108
+#define CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_VIPX1_CLK 0x210c
+#define CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_VIPX2_CLK 0x2110
+#define CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_WLBT_CLK 0x2114
+#define CLK_CON_GAT_GOUT_CORE_PDMA_CORE_ACLK_PDMA0 0x2118
+#define CLK_CON_GAT_GOUT_CORE_PGEN_LITE_SIREX_CLK 0x211c
+#define CLK_CON_GAT_GOUT_CORE_PGEN_PDMA_CLK 0x2120
+#define CLK_CON_GAT_GOUT_CORE_PPCFW_G3D_ACLK 0x2124
+#define CLK_CON_GAT_GOUT_CORE_PPCFW_G3D_PCLK 0x2128
+#define CLK_CON_GAT_GOUT_CORE_PPFW_CORE_MEM0_CLK 0x212c
+#define CLK_CON_GAT_GOUT_CORE_PPFW_CORE_MEM1_CLK 0x2130
+#define CLK_CON_GAT_GOUT_CORE_PPFW_CORE_PERI_CLK 0x2134
+#define CLK_CON_GAT_GOUT_CORE_PPMU_ACE_CPUCL0_ACLK 0x2138
+#define CLK_CON_GAT_GOUT_CORE_PPMU_ACE_CPUCL0_PCLK 0x213c
+#define CLK_CON_GAT_GOUT_CORE_PPMU_ACE_CPUCL1_ACLK 0x2140
+#define CLK_CON_GAT_GOUT_CORE_PPMU_ACE_CPUCL1_PCLK 0x2144
+#define CLK_CON_GAT_GOUT_CORE_BUSD_CLK 0x2148
+#define CLK_CON_GAT_GOUT_CORE_BUSP_G3D_OCC_CLK 0x214c
+#define CLK_CON_GAT_GOUT_CORE_BUSP_CLK 0x2150
+#define CLK_CON_GAT_GOUT_CORE_BUSP_OCC_CLK 0x2154
+#define CLK_CON_GAT_GOUT_CORE_CCI_CLK 0x2158
+#define CLK_CON_GAT_GOUT_CORE_CCI_OCC_CLK 0x215c
+#define CLK_CON_GAT_GOUT_CORE_G3D_CLK 0x2160
+#define CLK_CON_GAT_GOUT_CORE_G3D_OCC_CLK 0x2164
+#define CLK_CON_GAT_GOUT_CORE_GIC_CLK 0x2168
+#define CLK_CON_GAT_GOUT_CORE_OSCCLK_CLK 0x216c
+#define CLK_CON_GAT_GOUT_CORE_SFR_APBIF_CMU_TOPC_PCLK 0x2170
+#define CLK_CON_GAT_GOUT_CORE_SIREX_ACLK 0x2174
+#define CLK_CON_GAT_GOUT_CORE_SIREX_PCLK 0x2178
+#define CLK_CON_GAT_GOUT_CORE_SPDMA_CORE_ACLK_PDMA1 0x217c
+#define CLK_CON_GAT_GOUT_CORE_SYSREG_PCLK 0x2180
+#define CLK_CON_GAT_GOUT_CORE_TREX_D_ACLK 0x2184
+#define CLK_CON_GAT_GOUT_CORE_TREX_D_CCLK 0x2188
+#define CLK_CON_GAT_GOUT_CORE_TREX_D_GCLK 0x218c
+#define CLK_CON_GAT_GOUT_CORE_TREX_D_PCLK 0x2190
+#define CLK_CON_GAT_GOUT_CORE_TREX_D_NRT_ACLK 0x2194
+#define CLK_CON_GAT_GOUT_CORE_TREX_D_NRT_PCLK 0x2198
+#define CLK_CON_GAT_GOUT_CORE_TREX_P_ACLK_P_CORE 0x219c
+#define CLK_CON_GAT_GOUT_CORE_TREX_P_CCLK_P_CORE 0x21a0
+#define CLK_CON_GAT_GOUT_CORE_TREX_P_PCLK 0x21a4
+#define CLK_CON_GAT_GOUT_CORE_TREX_P_PCLK_P_CORE 0x21a8
+#define CLK_CON_GAT_GOUT_CORE_XIU_D_ACLK 0x21ac
+
+static const unsigned long core_clk_regs[] __initconst = {
+ PLL_CON0_MUX_CLKCMU_CORE_BUS_USER,
+ PLL_CON2_MUX_CLKCMU_CORE_BUS_USER,
+ PLL_CON0_MUX_CLKCMU_CORE_CCI_USER,
+ PLL_CON2_MUX_CLKCMU_CORE_CCI_USER,
+ PLL_CON0_MUX_CLKCMU_CORE_G3D_USER,
+ PLL_CON2_MUX_CLKCMU_CORE_G3D_USER,
+ CLK_CON_MUX_MUX_CLK_CORE_GIC,
+ CLK_CON_DIV_DIV_CLK_CORE_BUSP,
+ CLK_CON_GAT_CLK_CORE_CMU_PCLK,
+ CLK_CON_GAT_GOUT_CORE_AD_APB_CCI_550_PCLKM,
+ CLK_CON_GAT_GOUT_CORE_AD_APB_DIT_PCLKM,
+ CLK_CON_GAT_GOUT_CORE_AD_APB_PDMA0_PCLKM,
+ CLK_CON_GAT_GOUT_CORE_AD_APB_PGEN_PDMA_PCLKM,
+ CLK_CON_GAT_GOUT_CORE_AD_APB_PPFW_MEM0_PCLKM,
+ CLK_CON_GAT_GOUT_CORE_AD_APB_PPFW_MEM1_PCLKM,
+ CLK_CON_GAT_GOUT_CORE_AD_APB_PPFW_PERI_PCLKM,
+ CLK_CON_GAT_GOUT_CORE_AD_APB_SPDMA_PCLKM,
+ CLK_CON_GAT_GOUT_CORE_AD_AXI_GIC_ACLKM,
+ CLK_CON_GAT_GOUT_CORE_ASYNCSFR_WR_DMC0_PCLK,
+ CLK_CON_GAT_GOUT_CORE_ASYNCSFR_WR_DMC1_PCLK,
+ CLK_CON_GAT_GOUT_CORE_AXI_US_A40_64TO128_DIT_ACLK,
+ CLK_CON_GAT_GOUT_CORE_BAAW_P_GNSS_PCLK,
+ CLK_CON_GAT_GOUT_CORE_BAAW_P_MODEM_PCLK,
+ CLK_CON_GAT_GOUT_CORE_BAAW_P_SHUB_PCLK,
+ CLK_CON_GAT_GOUT_CORE_BAAW_P_WLBT_PCLK,
+ CLK_CON_GAT_GOUT_CORE_CCI_550_ACLK,
+ CLK_CON_GAT_GOUT_CORE_DIT_ICLKL2A,
+ CLK_CON_GAT_GOUT_CORE_GIC400_AIHWACG_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D0_ISP_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D0_MFC_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D1_ISP_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D1_MFC_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D_CAM_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D_DPU_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D_FSYS_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D_G2D_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D_USB_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D_VIPX1_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D_VIPX2_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHM_ACE_D_CPUCL0_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHM_ACE_D_CPUCL1_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHM_AXI_D0_MODEM_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHM_AXI_D1_MODEM_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHM_AXI_D_ABOX_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHM_AXI_D_APM_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHM_AXI_D_CSSYS_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHM_AXI_D_G3D_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHM_AXI_D_GNSS_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHM_AXI_D_SHUB_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHM_AXI_D_WLBT_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHS_AXI_D0_MIF_CPU_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHS_AXI_D0_MIF_CP_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHS_AXI_D0_MIF_NRT_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHS_AXI_D0_MIF_RT_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHS_AXI_D1_MIF_CPU_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHS_AXI_D1_MIF_CP_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHS_AXI_D1_MIF_NRT_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHS_AXI_D1_MIF_RT_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_APM_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_CAM_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_CPUCL0_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_CPUCL1_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_DISPAUD_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_FSYS_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_G2D_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_G3D_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_GNSS_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_ISP_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_MFC_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_MIF0_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_MIF1_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_MODEM_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_PERI_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_SHUB_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_USB_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_VIPX1_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_VIPX2_CLK,
+ CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_WLBT_CLK,
+ CLK_CON_GAT_GOUT_CORE_PDMA_CORE_ACLK_PDMA0,
+ CLK_CON_GAT_GOUT_CORE_PGEN_LITE_SIREX_CLK,
+ CLK_CON_GAT_GOUT_CORE_PGEN_PDMA_CLK,
+ CLK_CON_GAT_GOUT_CORE_PPCFW_G3D_ACLK,
+ CLK_CON_GAT_GOUT_CORE_PPCFW_G3D_PCLK,
+ CLK_CON_GAT_GOUT_CORE_PPFW_CORE_MEM0_CLK,
+ CLK_CON_GAT_GOUT_CORE_PPFW_CORE_MEM1_CLK,
+ CLK_CON_GAT_GOUT_CORE_PPFW_CORE_PERI_CLK,
+ CLK_CON_GAT_GOUT_CORE_PPMU_ACE_CPUCL0_ACLK,
+ CLK_CON_GAT_GOUT_CORE_PPMU_ACE_CPUCL0_PCLK,
+ CLK_CON_GAT_GOUT_CORE_PPMU_ACE_CPUCL1_ACLK,
+ CLK_CON_GAT_GOUT_CORE_PPMU_ACE_CPUCL1_PCLK,
+ CLK_CON_GAT_GOUT_CORE_BUSD_CLK,
+ CLK_CON_GAT_GOUT_CORE_BUSP_G3D_OCC_CLK,
+ CLK_CON_GAT_GOUT_CORE_BUSP_CLK,
+ CLK_CON_GAT_GOUT_CORE_BUSP_OCC_CLK,
+ CLK_CON_GAT_GOUT_CORE_CCI_CLK,
+ CLK_CON_GAT_GOUT_CORE_CCI_OCC_CLK,
+ CLK_CON_GAT_GOUT_CORE_G3D_CLK,
+ CLK_CON_GAT_GOUT_CORE_G3D_OCC_CLK,
+ CLK_CON_GAT_GOUT_CORE_GIC_CLK,
+ CLK_CON_GAT_GOUT_CORE_OSCCLK_CLK,
+ CLK_CON_GAT_GOUT_CORE_SFR_APBIF_CMU_TOPC_PCLK,
+ CLK_CON_GAT_GOUT_CORE_SIREX_ACLK,
+ CLK_CON_GAT_GOUT_CORE_SIREX_PCLK,
+ CLK_CON_GAT_GOUT_CORE_SPDMA_CORE_ACLK_PDMA1,
+ CLK_CON_GAT_GOUT_CORE_SYSREG_PCLK,
+ CLK_CON_GAT_GOUT_CORE_TREX_D_ACLK,
+ CLK_CON_GAT_GOUT_CORE_TREX_D_CCLK,
+ CLK_CON_GAT_GOUT_CORE_TREX_D_GCLK,
+ CLK_CON_GAT_GOUT_CORE_TREX_D_PCLK,
+ CLK_CON_GAT_GOUT_CORE_TREX_D_NRT_ACLK,
+ CLK_CON_GAT_GOUT_CORE_TREX_D_NRT_PCLK,
+ CLK_CON_GAT_GOUT_CORE_TREX_P_ACLK_P_CORE,
+ CLK_CON_GAT_GOUT_CORE_TREX_P_CCLK_P_CORE,
+ CLK_CON_GAT_GOUT_CORE_TREX_P_PCLK,
+ CLK_CON_GAT_GOUT_CORE_TREX_P_PCLK_P_CORE,
+ CLK_CON_GAT_GOUT_CORE_XIU_D_ACLK,
+};
+
+PNAME(mout_pll_core_bus_user_p) = { "oscclk",
+ "dout_cmu_core_bus" };
+PNAME(mout_pll_core_cci_user_p) = { "oscclk",
+ "dout_cmu_core_cci" };
+PNAME(mout_pll_core_g3d_user_p) = { "oscclk",
+ "dout_cmu_core_g3d" };
+PNAME(mout_clk_core_gic_p) = { "oscclk",
+ "dout_clk_core_busp" };
+
+static const struct samsung_mux_clock core_mux_clks[] __initconst = {
+ MUX(CLK_MOUT_PLL_CORE_BUS_USER, "mout_pll_core_bus_user", mout_pll_core_bus_user_p,
+ PLL_CON0_MUX_CLKCMU_CORE_BUS_USER, 4, 1),
+ MUX(CLK_MOUT_PLL_CORE_CCI_USER, "mout_pll_core_cci_user", mout_pll_core_cci_user_p,
+ PLL_CON0_MUX_CLKCMU_CORE_CCI_USER, 4, 1),
+ MUX(CLK_MOUT_PLL_CORE_G3D_USER, "mout_pll_core_g3d_user", mout_pll_core_g3d_user_p,
+ PLL_CON0_MUX_CLKCMU_CORE_G3D_USER, 4, 1),
+ MUX(CLK_MOUT_CLK_CORE_GIC, "mout_clk_core_gic", mout_clk_core_gic_p,
+ CLK_CON_MUX_MUX_CLK_CORE_GIC, 0, 1),
+};
+
+static const struct samsung_div_clock core_div_clks[] __initconst = {
+ DIV(CLK_DOUT_CLK_CORE_BUSP, "dout_clk_core_busp", "mout_pll_core_bus_user",
+ CLK_CON_DIV_DIV_CLK_CORE_BUSP, 0, 2),
+};
+
+static const struct samsung_gate_clock core_gate_clks[] __initconst = {
+ GATE(CLK_GOUT_CLK_CORE_CMU_PCLK, "gout_clk_core_cmu_pclk", "dout_clk_core_busp",
+ CLK_CON_GAT_CLK_CORE_CMU_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_AD_APB_CCI_550_PCLKM, "gout_core_ad_apb_cci_550_pclkm",
+ "mout_pll_core_cci_user", CLK_CON_GAT_GOUT_CORE_AD_APB_CCI_550_PCLKM,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_AD_APB_DIT_PCLKM, "gout_core_ad_apb_dit_pclkm",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_AD_APB_DIT_PCLKM,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_AD_APB_PDMA0_PCLKM, "gout_core_ad_apb_pdma0_pclkm",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_AD_APB_PDMA0_PCLKM,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_AD_APB_PGEN_PDMA_PCLKM, "gout_core_ad_apb_pgen_pdma_pclkm",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_AD_APB_PGEN_PDMA_PCLKM,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_AD_APB_PPFW_MEM0_PCLKM, "gout_core_ad_apb_ppfw_mem0_pclkm",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_AD_APB_PPFW_MEM0_PCLKM,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_AD_APB_PPFW_MEM1_PCLKM, "gout_core_ad_apb_ppfw_mem1_pclkm",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_AD_APB_PPFW_MEM1_PCLKM,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_AD_APB_PPFW_PERI_PCLKM, "gout_core_ad_apb_ppfw_peri_pclkm",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_AD_APB_PPFW_PERI_PCLKM,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_AD_APB_SPDMA_PCLKM, "gout_core_ad_apb_spdma_pclkm",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_AD_APB_SPDMA_PCLKM,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_AD_AXI_GIC_ACLKM, "gout_core_ad_axi_gic_aclkm",
+ "mout_clk_core_gic", CLK_CON_GAT_GOUT_CORE_AD_AXI_GIC_ACLKM,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_ASYNCSFR_WR_DMC0_PCLK, "gout_core_asyncsfr_wr_dmc0_pclk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_ASYNCSFR_WR_DMC0_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_ASYNCSFR_WR_DMC1_PCLK, "gout_core_asyncsfr_wr_dmc1_pclk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_ASYNCSFR_WR_DMC1_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_AXI_US_A40_64TO128_DIT_ACLK,
+ "gout_core_axi_us_a40_64to128_dit_aclk", "mout_pll_core_bus_user",
+ CLK_CON_GAT_GOUT_CORE_AXI_US_A40_64TO128_DIT_ACLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_BAAW_P_GNSS_PCLK, "gout_core_baaw_p_gnss_pclk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_BAAW_P_GNSS_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_BAAW_P_MODEM_PCLK, "gout_core_baaw_p_modem_pclk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_BAAW_P_MODEM_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_BAAW_P_SHUB_PCLK, "gout_core_baaw_p_shub_pclk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_BAAW_P_SHUB_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_BAAW_P_WLBT_PCLK, "gout_core_baaw_p_wlbt_pclk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_BAAW_P_WLBT_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_CCI_550_ACLK, "gout_core_cci_550_aclk",
+ "mout_pll_core_cci_user", CLK_CON_GAT_GOUT_CORE_CCI_550_ACLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_DIT_ICLKL2A, "gout_core_dit_iclkl2a",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_DIT_ICLKL2A,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_GIC400_AIHWACG_CLK, "gout_core_gic400_aihwacg_clk",
+ "mout_clk_core_gic", CLK_CON_GAT_GOUT_CORE_GIC400_AIHWACG_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHM_ACEL_D0_ISP_CLK, "gout_core_lhm_acel_d0_isp_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D0_ISP_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHM_ACEL_D0_MFC_CLK, "gout_core_lhm_acel_d0_mfc_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D0_MFC_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHM_ACEL_D1_ISP_CLK, "gout_core_lhm_acel_d1_isp_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D1_ISP_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHM_ACEL_D1_MFC_CLK, "gout_core_lhm_acel_d1_mfc_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D1_MFC_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHM_ACEL_D_CAM_CLK, "gout_core_lhm_acel_d_cam_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D_CAM_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHM_ACEL_D_DPU_CLK, "gout_core_lhm_acel_d_dpu_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D_DPU_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHM_ACEL_D_FSYS_CLK, "gout_core_lhm_acel_d_fsys_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D_FSYS_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHM_ACEL_D_G2D_CLK, "gout_core_lhm_acel_d_g2d_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D_G2D_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHM_ACEL_D_USB_CLK, "gout_core_lhm_acel_d_usb_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D_USB_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHM_ACEL_D_VIPX1_CLK, "gout_core_lhm_acel_d_vipx1_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D_VIPX1_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHM_ACEL_D_VIPX2_CLK, "gout_core_lhm_acel_d_vipx2_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_LHM_ACEL_D_VIPX2_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHM_ACE_D_CPUCL0_CLK, "gout_core_lhm_ace_d_cpucl0_clk",
+ "mout_pll_core_cci_user", CLK_CON_GAT_GOUT_CORE_LHM_ACE_D_CPUCL0_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHM_ACE_D_CPUCL1_CLK, "gout_core_lhm_ace_d_cpucl1_clk",
+ "mout_pll_core_cci_user", CLK_CON_GAT_GOUT_CORE_LHM_ACE_D_CPUCL1_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHM_AXI_D0_MODEM_CLK, "gout_core_lhm_axi_d0_modem_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_LHM_AXI_D0_MODEM_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHM_AXI_D1_MODEM_CLK, "gout_core_lhm_axi_d1_modem_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_LHM_AXI_D1_MODEM_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHM_AXI_D_ABOX_CLK, "gout_core_lhm_axi_d_abox_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_LHM_AXI_D_ABOX_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHM_AXI_D_APM_CLK, "gout_core_lhm_axi_d_apm_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_LHM_AXI_D_APM_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHM_AXI_D_CSSYS_CLK, "gout_core_lhm_axi_d_cssys_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_LHM_AXI_D_CSSYS_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHM_AXI_D_G3D_CLK, "gout_core_lhm_axi_d_g3d_clk",
+ "mout_pll_core_g3d_user", CLK_CON_GAT_GOUT_CORE_LHM_AXI_D_G3D_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHM_AXI_D_GNSS_CLK, "gout_core_lhm_axi_d_gnss_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_LHM_AXI_D_GNSS_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHM_AXI_D_SHUB_CLK, "gout_core_lhm_axi_d_shub_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_LHM_AXI_D_SHUB_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHM_AXI_D_WLBT_CLK, "gout_core_lhm_axi_d_wlbt_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_LHM_AXI_D_WLBT_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHS_AXI_D0_MIF_CPU_CLK, "gout_core_lhs_axi_d0_mif_cpu_clk",
+ "mout_pll_core_cci_user", CLK_CON_GAT_GOUT_CORE_LHS_AXI_D0_MIF_CPU_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHS_AXI_D0_MIF_CP_CLK, "gout_core_lhs_axi_d0_mif_cp_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_LHS_AXI_D0_MIF_CP_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHS_AXI_D0_MIF_NRT_CLK, "gout_core_lhs_axi_d0_mif_nrt_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_LHS_AXI_D0_MIF_NRT_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHS_AXI_D0_MIF_RT_CLK, "gout_core_lhs_axi_d0_mif_rt_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_LHS_AXI_D0_MIF_RT_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHS_AXI_D1_MIF_CPU_CLK, "gout_core_lhs_axi_d1_mif_cpu_clk",
+ "mout_pll_core_cci_user", CLK_CON_GAT_GOUT_CORE_LHS_AXI_D1_MIF_CPU_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHS_AXI_D1_MIF_CP_CLK, "gout_core_lhs_axi_d1_mif_cp_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_LHS_AXI_D1_MIF_CP_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHS_AXI_D1_MIF_NRT_CLK, "gout_core_lhs_axi_d1_mif_nrt_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_LHS_AXI_D1_MIF_NRT_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHS_AXI_D1_MIF_RT_CLK, "gout_core_lhs_axi_d1_mif_rt_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_LHS_AXI_D1_MIF_RT_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHS_AXI_P_APM_CLK, "gout_core_lhs_axi_p_apm_clk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_APM_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHS_AXI_P_CAM_CLK, "gout_core_lhs_axi_p_cam_clk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_CAM_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHS_AXI_P_CPUCL0_CLK, "gout_core_lhs_axi_p_cpucl0_clk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_CPUCL0_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHS_AXI_P_CPUCL1_CLK, "gout_core_lhs_axi_p_cpucl1_clk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_CPUCL1_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHS_AXI_P_DISPAUD_CLK, "gout_core_lhs_axi_p_dispaud_clk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_DISPAUD_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHS_AXI_P_FSYS_CLK, "gout_core_lhs_axi_p_fsys_clk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_FSYS_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHS_AXI_P_G2D_CLK, "gout_core_lhs_axi_p_g2d_clk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_G2D_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHS_AXI_P_G3D_CLK, "gout_core_lhs_axi_p_g3d_clk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_G3D_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHS_AXI_P_GNSS_CLK, "gout_core_lhs_axi_p_gnss_clk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_GNSS_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHS_AXI_P_ISP_CLK, "gout_core_lhs_axi_p_isp_clk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_ISP_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHS_AXI_P_MFC_CLK, "gout_core_lhs_axi_p_mfc_clk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_MFC_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHS_AXI_P_MIF0_CLK, "gout_core_lhs_axi_p_mif0_clk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_MIF0_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHS_AXI_P_MIF1_CLK, "gout_core_lhs_axi_p_mif1_clk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_MIF1_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHS_AXI_P_MODEM_CLK, "gout_core_lhs_axi_p_modem_clk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_MODEM_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHS_AXI_P_PERI_CLK, "gout_core_lhs_axi_p_peri_clk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_PERI_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHS_AXI_P_SHUB_CLK, "gout_core_lhs_axi_p_shub_clk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_SHUB_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHS_AXI_P_USB_CLK, "gout_core_lhs_axi_p_usb_clk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_USB_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHS_AXI_P_VIPX1_CLK, "gout_core_lhs_axi_p_vipx1_clk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_VIPX1_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHS_AXI_P_VIPX2_CLK, "gout_core_lhs_axi_p_vipx2_clk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_VIPX2_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_LHS_AXI_P_WLBT_CLK, "gout_core_lhs_wlbt_p_apm_clk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_LHS_AXI_P_WLBT_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_PDMA_CORE_ACLK_PDMA0, "gout_core_pdma_core_aclk_pdma0",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_PDMA_CORE_ACLK_PDMA0,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_PGEN_LITE_SIREX_CLK, "gout_core_pgen_lite_sirex_clk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_PGEN_LITE_SIREX_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_PGEN_PDMA_CLK, "gout_core_pgen_pdma_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_PGEN_PDMA_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_PPCFW_G3D_ACLK, "gout_core_ppcfw_g3d_aclk",
+ "mout_pll_core_g3d_user", CLK_CON_GAT_GOUT_CORE_PPCFW_G3D_ACLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_PPCFW_G3D_PCLK, "gout_core_ppcfw_g3d_pclk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_PPCFW_G3D_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_PPFW_CORE_MEM0_CLK, "gout_core_ppfw_core_mem0_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_PPFW_CORE_MEM0_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_PPFW_CORE_MEM1_CLK, "gout_core_ppfw_core_mem1_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_PPFW_CORE_MEM1_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_PPFW_CORE_PERI_CLK, "gout_core_ppfw_core_peri_clk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_PPFW_CORE_PERI_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_PPMU_ACE_CPUCL0_ACLK, "gout_core_ppmu_ace_cpucl0_aclk",
+ "mout_pll_core_cci_user", CLK_CON_GAT_GOUT_CORE_PPMU_ACE_CPUCL0_ACLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_PPMU_ACE_CPUCL0_PCLK, "gout_core_ppmu_ace_cpucl0_pclk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_PPMU_ACE_CPUCL0_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_PPMU_ACE_CPUCL1_ACLK, "gout_core_ppmu_ace_cpucl1_aclk",
+ "mout_pll_core_cci_user", CLK_CON_GAT_GOUT_CORE_PPMU_ACE_CPUCL1_ACLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_PPMU_ACE_CPUCL1_PCLK, "gout_core_ppmu_ace_cpucl1_pclk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_PPMU_ACE_CPUCL1_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_BUSD_CLK, "gout_core_busd_clk", "mout_pll_core_bus_user",
+ CLK_CON_GAT_GOUT_CORE_BUSD_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_BUSP_G3D_OCC_CLK, "gout_core_busp_g3d_occ_clk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_BUSP_G3D_OCC_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_BUSP_CLK, "gout_core_busp_clk", "dout_clk_core_busp",
+ CLK_CON_GAT_GOUT_CORE_BUSP_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_BUSP_OCC_CLK, "gout_core_busp_occ_clk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_BUSP_OCC_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_CCI_CLK, "gout_core_cci_clk", "mout_pll_core_cci_user",
+ CLK_CON_GAT_GOUT_CORE_CCI_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_CCI_OCC_CLK, "gout_core_cci_occ_clk",
+ "mout_pll_core_cci_user", CLK_CON_GAT_GOUT_CORE_CCI_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_G3D_CLK, "gout_core_g3d_clk", "mout_pll_core_g3d_user",
+ CLK_CON_GAT_GOUT_CORE_G3D_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_G3D_OCC_CLK, "gout_core_cci_g3d_occ_clk",
+ "mout_pll_core_cci_user", CLK_CON_GAT_GOUT_CORE_G3D_OCC_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_GIC_CLK, "gout_core_gic_clk", "mout_clk_core_gic",
+ CLK_CON_GAT_GOUT_CORE_GIC_CLK, 21, 0, 0),
+ GATE(CLK_GOUT_CORE_OSCCLK_CLK, "gout_core_oscclk_clk", "oscclk",
+ CLK_CON_GAT_GOUT_CORE_OSCCLK_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_SFR_APBIF_CMU_TOPC_PCLK, "gout_core_sfr_apbif_cmu_topc_pclk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_SFR_APBIF_CMU_TOPC_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_SIREX_ACLK, "gout_core_sirex_aclk", "mout_pll_core_bus_user",
+ CLK_CON_GAT_GOUT_CORE_SIREX_ACLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_SIREX_PCLK, "gout_core_sirex_pclk", "dout_clk_core_busp",
+ CLK_CON_GAT_GOUT_CORE_SIREX_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_SPDMA_CORE_ACLK_PDMA1, "gout_core_spdma_core_aclk_pdma1",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_SPDMA_CORE_ACLK_PDMA1,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_SYSREG_PCLK, "gout_core_sysreg_pclk", "dout_clk_core_busp",
+ CLK_CON_GAT_GOUT_CORE_SYSREG_PCLK, 21, 0, 0),
+ GATE(CLK_GOUT_CORE_TREX_D_ACLK, "gout_core_trex_d_aclk", "mout_pll_core_bus_user",
+ CLK_CON_GAT_GOUT_CORE_TREX_D_ACLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_TREX_D_CCLK, "gout_core_trex_d_cclk", "mout_pll_core_cci_user",
+ CLK_CON_GAT_GOUT_CORE_TREX_D_CCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_TREX_D_GCLK, "gout_core_trex_d_gclk", "mout_pll_core_g3d_user",
+ CLK_CON_GAT_GOUT_CORE_TREX_D_GCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_TREX_D_PCLK, "gout_core_trex_d_pclk", "dout_clk_core_busp",
+ CLK_CON_GAT_GOUT_CORE_TREX_D_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_TREX_D_NRT_ACLK, "gout_core_trex_d_nrt_aclk",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_TREX_D_NRT_ACLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_TREX_D_NRT_PCLK, "gout_core_trex_d_nrt_pclk",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_TREX_D_NRT_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+
+ GATE(CLK_GOUT_CORE_TREX_P_ACLK_P_CORE, "gout_core_trex_p_aclk_p_core",
+ "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_TREX_P_ACLK_P_CORE,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_TREX_P_CCLK_P_CORE, "gout_core_trex_p_cclk_p_core",
+ "mout_pll_core_cci_user", CLK_CON_GAT_GOUT_CORE_TREX_P_CCLK_P_CORE,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_TREX_P_PCLK, "gout_core_trex_p_pclk", "dout_clk_core_busp",
+ CLK_CON_GAT_GOUT_CORE_TREX_P_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_TREX_P_PCLK_P_CORE, "gout_core_trex_p_pclk_p_core",
+ "dout_clk_core_busp", CLK_CON_GAT_GOUT_CORE_TREX_P_PCLK_P_CORE,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CORE_XIU_D_ACLK, "gout_core_xiu_d_aclk", "mout_pll_core_bus_user",
+ CLK_CON_GAT_GOUT_CORE_XIU_D_ACLK, 21, CLK_IGNORE_UNUSED, 0),
+};
+
+static const struct samsung_cmu_info core_cmu_info __initconst = {
+ .mux_clks = core_mux_clks,
+ .nr_mux_clks = ARRAY_SIZE(core_mux_clks),
+ .gate_clks = core_gate_clks,
+ .nr_gate_clks = ARRAY_SIZE(core_gate_clks),
+ .clk_regs = core_clk_regs,
+ .nr_clk_regs = ARRAY_SIZE(core_clk_regs),
+ .nr_clk_ids = CLKS_NR_CORE,
+};
+
+/* CMU_DISPAUD */
+#define PLL_LOCKTIME_PLL_AUD 0x0000
+#define PLL_CON0_MUX_CLKCMU_DISPAUD_AUD_USER 0x0100
+#define PLL_CON2_MUX_CLKCMU_DISPAUD_AUD_USER 0x0108
+#define PLL_CON0_MUX_CLKCMU_DISPAUD_CPU_USER 0x0120
+#define PLL_CON2_MUX_CLKCMU_DISPAUD_CPU_USER 0x0128
+#define PLL_CON0_MUX_CLKCMU_DISPAUD_DISP_USER 0x0140
+#define PLL_CON2_MUX_CLKCMU_DISPAUD_DISP_USER 0x0148
+#define PLL_CON0_PLL_AUD 0x0160
+#define PLL_CON3_PLL_AUD 0x016c
+#define CLK_CON_MUX_MUX_CLK_AUD_BUS 0x1000
+#define CLK_CON_MUX_MUX_CLK_AUD_CPU 0x1004
+#define CLK_CON_MUX_MUX_CLK_AUD_CPU_HCH 0x1008
+#define CLK_CON_MUX_MUX_CLK_AUD_FM 0x100c
+#define CLK_CON_MUX_MUX_CLK_AUD_UAIF0 0x1010
+#define CLK_CON_MUX_MUX_CLK_AUD_UAIF1 0x1014
+#define CLK_CON_MUX_MUX_CLK_AUD_UAIF2 0x1018
+#define CLK_CON_DIV_DIV_CLK_AUD_AUDIF 0x1800
+#define CLK_CON_DIV_DIV_CLK_AUD_BUS 0x1808
+#define CLK_CON_DIV_DIV_CLK_AUD_CPU 0x180c
+#define CLK_CON_DIV_DIV_CLK_AUD_CPU_ACLK 0x1810
+#define CLK_CON_DIV_DIV_CLK_AUD_CPU_PCLKDBG 0x1814
+#define CLK_CON_DIV_DIV_CLK_AUD_DSIF 0x1818
+#define CLK_CON_DIV_DIV_CLK_AUD_FM 0x181c
+#define CLK_CON_DIV_DIV_CLK_AUD_FM_SPDY 0x1820
+#define CLK_CON_DIV_DIV_CLK_AUD_UAIF0 0x1824
+#define CLK_CON_DIV_DIV_CLK_AUD_UAIF1 0x1828
+#define CLK_CON_DIV_DIV_CLK_AUD_UAIF2 0x182c
+#define CLK_CON_DIV_DIV_CLK_DISPAUD_BUSP 0x1830
+#define CLK_CON_GAT_CLK_DISPAUD_ABOX_BCLK_UAIF0 0x2000
+#define CLK_CON_GAT_CLK_DISPAUD_ABOX_BCLK_UAIF1 0x2004
+#define CLK_CON_GAT_CLK_DISPAUD_ABOX_BCLK_UAIF2 0x2008
+#define CLK_CON_GAT_CLK_DISPAUD_CMU_PCLK 0x200c
+#define CLK_CON_GAT_CLK_DISPAUD_CLK_AUD_UAIF0_CLK 0x2010
+#define CLK_CON_GAT_CLK_DISPAUD_CLK_AUD_UAIF1_CLK 0x2014
+#define CLK_CON_GAT_CLK_DISPAUD_CLK_AUD_UAIF2_CLK 0x2018
+#define CLK_CON_GAT_CLK_DISPAUD_OSCCLK_CLK 0x201c
+#define CLK_CON_GAT_GOUT_DISPAUD_ABOX_ACLK 0x2020
+#define CLK_CON_GAT_GOUT_DISPAUD_ABOX_BCLK_DSIF 0x2024
+#define CLK_CON_GAT_GOUT_DISPAUD_ABOX_BCLK_SPDY 0x2028
+#define CLK_CON_GAT_GOUT_DISPAUD_ABOX_CCLK_ASB 0x202c
+#define CLK_CON_GAT_GOUT_DISPAUD_ABOX_CCLK_CA7 0x2030
+#define CLK_CON_GAT_GOUT_DISPAUD_ABOX_CCLK_DBG 0x2034
+#define CLK_CON_GAT_GOUT_DISPAUD_ABOX_OSC_SPDY 0x2038
+#define CLK_CON_GAT_GOUT_DISPAUD_AXI_US_32TO128_ACLK 0x203c
+#define CLK_CON_GAT_GOUT_DISPAUD_CLK_DISPAUD_AUD 0x2040
+#define CLK_CON_GAT_GOUT_DISPAUD_CLK_DISPAUD_DISP 0x2044
+#define CLK_CON_GAT_GOUT_DISPAUD_BTM_ABOX_ACLK 0x2048
+#define CLK_CON_GAT_GOUT_DISPAUD_BTM_ABOX_PCLK 0x204c
+#define CLK_CON_GAT_GOUT_DISPAUD_BTM_DPU_ACLK 0x2050
+#define CLK_CON_GAT_GOUT_DISPAUD_BTM_DPU_PCLK 0x2054
+#define CLK_CON_GAT_GOUT_DISPAUD_DFTMUX_AUD_CODEC_MCLK 0x2058
+#define CLK_CON_GAT_GOUT_DISPAUD_DPU_ACLK_DECON 0x2060
+#define CLK_CON_GAT_GOUT_DISPAUD_DPU_ACLK_DMA 0x2064
+#define CLK_CON_GAT_GOUT_DISPAUD_DPU_ACLK_DPP 0x2068
+#define CLK_CON_GAT_GOUT_DISPAUD_GPIO_DISPAUD_PCLK 0x206c
+#define CLK_CON_GAT_GOUT_DISPAUD_LHM_AXI_P_DISPAUD_CLK 0x2070
+#define CLK_CON_GAT_GOUT_DISPAUD_LHS_ACEL_D_DPU_CLK 0x2074
+#define CLK_CON_GAT_GOUT_DISPAUD_LHS_AXI_D_ABOX_CLK 0x2078
+#define CLK_CON_GAT_GOUT_DISPAUD_PERI_AXI_ASB_ACLKM 0x207c
+#define CLK_CON_GAT_GOUT_DISPAUD_PERI_AXI_ASB_PCLK 0x2080
+#define CLK_CON_GAT_GOUT_DISPAUD_PPMU_ABOX_ACLK 0x2084
+#define CLK_CON_GAT_GOUT_DISPAUD_PPMU_ABOX_PCLK 0x2088
+#define CLK_CON_GAT_GOUT_DISPAUD_PPMU_DPU_ACLK 0x208c
+#define CLK_CON_GAT_GOUT_DISPAUD_PPMU_DPU_PCLK 0x2090
+#define CLK_CON_GAT_GOUT_DISPAUD_CLK_AUD_CPU_ACLK_CLK 0x2094
+#define CLK_CON_GAT_GOUT_DISPAUD_CLK_AUD_CPU_CLKIN_CLK 0x2098
+#define CLK_CON_GAT_GOUT_DISPAUD_CLK_AUD_CPU_PCLKDBG_CLK 0x209c
+#define CLK_CON_GAT_GOUT_DISPAUD_CLK_AUD_DSIF_CLK 0x20a0
+#define CLK_CON_GAT_GOUT_DISPAUD_CLK_AUD_CLK 0x20a4
+#define CLK_CON_GAT_GOUT_DISPAUD_CLK_BUSP_CLK 0x20a8
+#define CLK_CON_GAT_GOUT_DISPAUD_CLK_DISP_CLK 0x20ac
+#define CLK_CON_GAT_GOUT_DISPAUD_SMMU_ABOX_CLK 0x20b0
+#define CLK_CON_GAT_GOUT_DISPAUD_SMMU_DPU_CLK 0x20b4
+#define CLK_CON_GAT_GOUT_DISPAUD_SYSREG_PCLK 0x20b8
+#define CLK_CON_GAT_GOUT_DISPAUD_WDT_AUD_PCLK 0x20bc
+
+static const unsigned long dispaud_clk_regs[] __initconst = {
+ PLL_LOCKTIME_PLL_AUD,
+ PLL_CON0_MUX_CLKCMU_DISPAUD_AUD_USER,
+ PLL_CON2_MUX_CLKCMU_DISPAUD_AUD_USER,
+ PLL_CON0_MUX_CLKCMU_DISPAUD_CPU_USER,
+ PLL_CON2_MUX_CLKCMU_DISPAUD_CPU_USER,
+ PLL_CON0_MUX_CLKCMU_DISPAUD_DISP_USER,
+ PLL_CON2_MUX_CLKCMU_DISPAUD_DISP_USER,
+ PLL_CON0_PLL_AUD,
+ PLL_CON3_PLL_AUD,
+ CLK_CON_MUX_MUX_CLK_AUD_BUS,
+ CLK_CON_MUX_MUX_CLK_AUD_CPU,
+ CLK_CON_MUX_MUX_CLK_AUD_CPU_HCH,
+ CLK_CON_MUX_MUX_CLK_AUD_FM,
+ CLK_CON_MUX_MUX_CLK_AUD_UAIF0,
+ CLK_CON_MUX_MUX_CLK_AUD_UAIF1,
+ CLK_CON_MUX_MUX_CLK_AUD_UAIF2,
+ CLK_CON_DIV_DIV_CLK_AUD_AUDIF,
+ CLK_CON_DIV_DIV_CLK_AUD_BUS,
+ CLK_CON_DIV_DIV_CLK_AUD_CPU,
+ CLK_CON_DIV_DIV_CLK_AUD_CPU_ACLK,
+ CLK_CON_DIV_DIV_CLK_AUD_CPU_PCLKDBG,
+ CLK_CON_DIV_DIV_CLK_AUD_DSIF,
+ CLK_CON_DIV_DIV_CLK_AUD_FM,
+ CLK_CON_DIV_DIV_CLK_AUD_FM_SPDY,
+ CLK_CON_DIV_DIV_CLK_AUD_UAIF0,
+ CLK_CON_DIV_DIV_CLK_AUD_UAIF1,
+ CLK_CON_DIV_DIV_CLK_AUD_UAIF2,
+ CLK_CON_DIV_DIV_CLK_DISPAUD_BUSP,
+ CLK_CON_GAT_CLK_DISPAUD_ABOX_BCLK_UAIF0,
+ CLK_CON_GAT_CLK_DISPAUD_ABOX_BCLK_UAIF1,
+ CLK_CON_GAT_CLK_DISPAUD_ABOX_BCLK_UAIF2,
+ CLK_CON_GAT_CLK_DISPAUD_CMU_PCLK,
+ CLK_CON_GAT_CLK_DISPAUD_CLK_AUD_UAIF0_CLK,
+ CLK_CON_GAT_CLK_DISPAUD_CLK_AUD_UAIF1_CLK,
+ CLK_CON_GAT_CLK_DISPAUD_CLK_AUD_UAIF2_CLK,
+ CLK_CON_GAT_CLK_DISPAUD_OSCCLK_CLK,
+ CLK_CON_GAT_GOUT_DISPAUD_ABOX_ACLK,
+ CLK_CON_GAT_GOUT_DISPAUD_ABOX_BCLK_DSIF,
+ CLK_CON_GAT_GOUT_DISPAUD_ABOX_BCLK_SPDY,
+ CLK_CON_GAT_GOUT_DISPAUD_ABOX_CCLK_ASB,
+ CLK_CON_GAT_GOUT_DISPAUD_ABOX_CCLK_CA7,
+ CLK_CON_GAT_GOUT_DISPAUD_ABOX_CCLK_DBG,
+ CLK_CON_GAT_GOUT_DISPAUD_ABOX_OSC_SPDY,
+ CLK_CON_GAT_GOUT_DISPAUD_AXI_US_32TO128_ACLK,
+ CLK_CON_GAT_GOUT_DISPAUD_CLK_DISPAUD_AUD,
+ CLK_CON_GAT_GOUT_DISPAUD_CLK_DISPAUD_DISP,
+ CLK_CON_GAT_GOUT_DISPAUD_BTM_ABOX_ACLK,
+ CLK_CON_GAT_GOUT_DISPAUD_BTM_ABOX_PCLK,
+ CLK_CON_GAT_GOUT_DISPAUD_BTM_DPU_ACLK,
+ CLK_CON_GAT_GOUT_DISPAUD_BTM_DPU_PCLK,
+ CLK_CON_GAT_GOUT_DISPAUD_DFTMUX_AUD_CODEC_MCLK,
+ CLK_CON_GAT_GOUT_DISPAUD_DPU_ACLK_DECON,
+ CLK_CON_GAT_GOUT_DISPAUD_DPU_ACLK_DMA,
+ CLK_CON_GAT_GOUT_DISPAUD_DPU_ACLK_DPP,
+ CLK_CON_GAT_GOUT_DISPAUD_GPIO_DISPAUD_PCLK,
+ CLK_CON_GAT_GOUT_DISPAUD_LHM_AXI_P_DISPAUD_CLK,
+ CLK_CON_GAT_GOUT_DISPAUD_LHS_ACEL_D_DPU_CLK,
+ CLK_CON_GAT_GOUT_DISPAUD_LHS_AXI_D_ABOX_CLK,
+ CLK_CON_GAT_GOUT_DISPAUD_PERI_AXI_ASB_ACLKM,
+ CLK_CON_GAT_GOUT_DISPAUD_PERI_AXI_ASB_PCLK,
+ CLK_CON_GAT_GOUT_DISPAUD_PPMU_ABOX_ACLK,
+ CLK_CON_GAT_GOUT_DISPAUD_PPMU_ABOX_PCLK,
+ CLK_CON_GAT_GOUT_DISPAUD_PPMU_DPU_ACLK,
+ CLK_CON_GAT_GOUT_DISPAUD_PPMU_DPU_PCLK,
+ CLK_CON_GAT_GOUT_DISPAUD_CLK_AUD_CPU_ACLK_CLK,
+ CLK_CON_GAT_GOUT_DISPAUD_CLK_AUD_CPU_CLKIN_CLK,
+ CLK_CON_GAT_GOUT_DISPAUD_CLK_AUD_CPU_PCLKDBG_CLK,
+ CLK_CON_GAT_GOUT_DISPAUD_CLK_AUD_DSIF_CLK,
+ CLK_CON_GAT_GOUT_DISPAUD_CLK_AUD_CLK,
+ CLK_CON_GAT_GOUT_DISPAUD_CLK_BUSP_CLK,
+ CLK_CON_GAT_GOUT_DISPAUD_CLK_DISP_CLK,
+ CLK_CON_GAT_GOUT_DISPAUD_SMMU_ABOX_CLK,
+ CLK_CON_GAT_GOUT_DISPAUD_SMMU_DPU_CLK,
+ CLK_CON_GAT_GOUT_DISPAUD_SYSREG_PCLK,
+ CLK_CON_GAT_GOUT_DISPAUD_WDT_AUD_PCLK,
+};
+
+static const struct samsung_pll_rate_table pll_aud_rate_table[] __initconst = {
+ PLL_36XX_RATE(26 * MHZ, 1179648040, 45, 1, 0, 24319),
+ PLL_36XX_RATE(26 * MHZ, 1083801605, 42, 1, 0, -20665),
+};
+
+static const struct samsung_pll_clock dispaud_pll_clks[] __initconst = {
+ PLL(pll_1061x, CLK_FOUT_AUD_PLL, "fout_aud_pll", "oscclk",
+ PLL_LOCKTIME_PLL_AUD, PLL_CON0_PLL_AUD, pll_aud_rate_table),
+};
+
+PNAME(mout_pll_dispaud_aud_user_p) = { "oscclk",
+ "dout_cmu_dispaud_aud" };
+PNAME(mout_pll_dispaud_cpu_user_p) = { "oscclk",
+ "dout_cmu_dispaud_cpu" };
+PNAME(mout_pll_dispaud_disp_user_p) = { "oscclk",
+ "dout_cmu_dispaud_disp" };
+PNAME(mout_clk_aud_bus_p) = { "dout_clk_aud_bus",
+ "mout_pll_dispaud_aud_user" };
+PNAME(mout_clk_aud_cpu_p) = { "dout_clk_aud_cpu",
+ "mout_pll_dispaud_cpu_user" };
+PNAME(mout_clk_aud_cpu_hch_p) = { "mout_clk_aud_cpu", "oscclk" };
+PNAME(mout_clk_aud_fm_p) = { "oscclk",
+ "dout_clk_aud_fm_spdy" };
+PNAME(mout_clk_aud_uaif0_p) = { "dout_clk_aud_uaif0",
+ "ioclk_audiocdclk0" };
+PNAME(mout_clk_aud_uaif1_p) = { "dout_clk_aud_uaif1",
+ "ioclk_audiocdclk1" };
+PNAME(mout_clk_aud_uaif2_p) = { "dout_clk_aud_uaif2",
+ "ioclk_audiocdclk0" };
+
+static const struct samsung_mux_clock dispaud_mux_clks[] __initconst = {
+ MUX(CLK_MOUT_PLL_DISPAUD_AUD_USER, "mout_pll_dispaud_aud_user", mout_pll_dispaud_aud_user_p,
+ PLL_CON0_MUX_CLKCMU_DISPAUD_AUD_USER, 4, 1),
+ MUX(CLK_MOUT_PLL_DISPAUD_CPU_USER, "mout_pll_dispaud_cpu_user", mout_pll_dispaud_cpu_user_p,
+ PLL_CON0_MUX_CLKCMU_DISPAUD_CPU_USER, 4, 1),
+ MUX(CLK_MOUT_PLL_DISPAUD_DISP_USER, "mout_pll_dispaud_disp_user",
+ mout_pll_dispaud_disp_user_p, PLL_CON0_MUX_CLKCMU_DISPAUD_DISP_USER, 4, 1),
+ MUX(CLK_MOUT_CLK_AUD_BUS, "mout_clk_aud_bus", mout_clk_aud_bus_p,
+ CLK_CON_MUX_MUX_CLK_AUD_BUS, 0, 1),
+ MUX(CLK_MOUT_CLK_AUD_CPU, "mout_clk_aud_cpu", mout_clk_aud_cpu_p,
+ CLK_CON_MUX_MUX_CLK_AUD_CPU, 0, 1),
+ MUX(CLK_MOUT_CLK_AUD_CPU_HCH, "mout_clk_aud_cpu_hch", mout_clk_aud_cpu_hch_p,
+ CLK_CON_MUX_MUX_CLK_AUD_CPU_HCH, 0, 1),
+ MUX(CLK_MOUT_CLK_AUD_FM, "mout_clk_aud_fm", mout_clk_aud_fm_p,
+ CLK_CON_MUX_MUX_CLK_AUD_FM, 0, 1),
+ MUX(CLK_MOUT_CLK_AUD_UAIF0, "mout_clk_aud_uaif0", mout_clk_aud_uaif0_p,
+ CLK_CON_MUX_MUX_CLK_AUD_UAIF0, 0, 1),
+ MUX(CLK_MOUT_CLK_AUD_UAIF1, "mout_clk_aud_uaif1", mout_clk_aud_uaif1_p,
+ CLK_CON_MUX_MUX_CLK_AUD_UAIF1, 0, 1),
+ MUX(CLK_MOUT_CLK_AUD_UAIF2, "mout_clk_aud_uaif2", mout_clk_aud_uaif2_p,
+ CLK_CON_MUX_MUX_CLK_AUD_UAIF2, 0, 1),
+};
+
+static const struct samsung_div_clock dispaud_div_clks[] __initconst = {
+ DIV(CLK_DOUT_CLK_AUD_AUDIF, "dout_clk_aud_audif", "fout_aud_pll",
+ CLK_CON_DIV_DIV_CLK_AUD_AUDIF, 0, 9),
+ DIV(CLK_DOUT_CLK_AUD_BUS, "dout_clk_aud_bus", "fout_aud_pll",
+ CLK_CON_DIV_DIV_CLK_AUD_BUS, 0, 3),
+ DIV(CLK_DOUT_CLK_AUD_CPU, "dout_clk_aud_cpu", "fout_aud_pll",
+ CLK_CON_DIV_DIV_CLK_AUD_CPU, 0, 4),
+ DIV(CLK_DOUT_CLK_AUD_CPU_ACLK, "dout_clk_aud_cpu_aclk", "mout_clk_aud_cpu_hch",
+ CLK_CON_DIV_DIV_CLK_AUD_CPU_ACLK, 0, 3),
+ DIV(CLK_DOUT_CLK_AUD_CPU_PCLKDBG, "dout_clk_aud_cpu_pclkdbg", "mout_clk_aud_cpu_hch",
+ CLK_CON_DIV_DIV_CLK_AUD_CPU_PCLKDBG, 0, 3),
+ DIV(CLK_DOUT_CLK_AUD_DSIF, "dout_clk_aud_dsif", "dout_clk_aud_audif",
+ CLK_CON_DIV_DIV_CLK_AUD_DSIF, 0, 9),
+ DIV(CLK_DOUT_CLK_AUD_FM, "dout_clk_aud_fm", "mout_clk_aud_fm",
+ CLK_CON_DIV_DIV_CLK_AUD_FM, 0, 9),
+ DIV(CLK_DOUT_CLK_AUD_FM_SPDY, "dout_clk_aud_fm_spdy", "tick_usb",
+ CLK_CON_DIV_DIV_CLK_AUD_FM_SPDY, 0, 9),
+ DIV(CLK_DOUT_CLK_AUD_UAIF0, "dout_clk_aud_uaif0", "dout_clk_aud_audif",
+ CLK_CON_DIV_DIV_CLK_AUD_UAIF0, 0, 9),
+ DIV(CLK_DOUT_CLK_AUD_UAIF1, "dout_clk_aud_uaif1", "dout_clk_aud_audif",
+ CLK_CON_DIV_DIV_CLK_AUD_UAIF1, 0, 9),
+ DIV(CLK_DOUT_CLK_AUD_UAIF2, "dout_clk_aud_uaif2", "dout_clk_aud_audif",
+ CLK_CON_DIV_DIV_CLK_AUD_UAIF2, 0, 9),
+ DIV(CLK_DOUT_CLK_DISPAUD_BUSP, "dout_clk_dispaud_busp", "mout_pll_dispaud_disp_user",
+ CLK_CON_DIV_DIV_CLK_DISPAUD_BUSP, 0, 3),
+};
+
+static const struct samsung_gate_clock dispaud_gate_clks[] __initconst = {
+ GATE(CLK_GOUT_CLK_DISPAUD_ABOX_BCLK_UAIF0, "gout_clk_dispaud_abox_bclk_uaif0",
+ "mout_clk_aud_uaif0", CLK_CON_GAT_CLK_DISPAUD_ABOX_BCLK_UAIF0,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CLK_DISPAUD_ABOX_BCLK_UAIF1, "gout_clk_dispaud_abox_bclk_uaif1",
+ "mout_clk_aud_uaif1", CLK_CON_GAT_CLK_DISPAUD_ABOX_BCLK_UAIF1,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CLK_DISPAUD_ABOX_BCLK_UAIF2, "gout_clk_dispaud_abox_bclk_uaif2",
+ "mout_clk_aud_uaif2", CLK_CON_GAT_CLK_DISPAUD_ABOX_BCLK_UAIF2,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CLK_DISPAUD_CMU_PCLK, "gout_clk_dispaud_cmu_pclk",
+ "dout_clk_dispaud_busp", CLK_CON_GAT_CLK_DISPAUD_CMU_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CLK_DISPAUD_CLK_AUD_UAIF0_CLK, "gout_clk_dispaud_clk_aud_uaif0_clk",
+ "mout_clk_aud_uaif0", CLK_CON_GAT_CLK_DISPAUD_CLK_AUD_UAIF0_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CLK_DISPAUD_CLK_AUD_UAIF1_CLK, "gout_clk_dispaud_clk_aud_uaif1_clk",
+ "mout_clk_aud_uaif1", CLK_CON_GAT_CLK_DISPAUD_CLK_AUD_UAIF1_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CLK_DISPAUD_CLK_AUD_UAIF2_CLK, "gout_clk_dispaud_clk_aud_uaif2_clk",
+ "mout_clk_aud_uaif2", CLK_CON_GAT_CLK_DISPAUD_CLK_AUD_UAIF2_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CLK_DISPAUD_OSCCLK_CLK, "gout_clk_dispaud_oscclk_clk", "oscclk",
+ CLK_CON_GAT_CLK_DISPAUD_OSCCLK_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_ABOX_ACLK, "gout_clk_dispaud_abox_aclk", "mout_clk_aud_bus",
+ CLK_CON_GAT_GOUT_DISPAUD_ABOX_ACLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_ABOX_BCLK_DSIF, "gout_clk_dispaud_abox_bclk_dsif",
+ "dout_clk_aud_dsif", CLK_CON_GAT_GOUT_DISPAUD_ABOX_BCLK_DSIF,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_ABOX_BCLK_SPDY, "gout_clk_dispaud_abox_bclk_spdy",
+ "dout_clk_aud_fm", CLK_CON_GAT_GOUT_DISPAUD_ABOX_BCLK_SPDY,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_ABOX_CCLK_ASB, "gout_clk_dispaud_abox_cclk_asb",
+ "dout_clk_aud_cpu_aclk", CLK_CON_GAT_GOUT_DISPAUD_ABOX_CCLK_ASB,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_ABOX_CCLK_CA7, "gout_clk_dispaud_abox_cclk_ca7",
+ "mout_clk_aud_cpu_hch", CLK_CON_GAT_GOUT_DISPAUD_ABOX_CCLK_CA7,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_ABOX_CCLK_DBG, "gout_clk_dispaud_abox_cclk_dbg",
+ "dout_clk_aud_cpu_pclkdbg", CLK_CON_GAT_GOUT_DISPAUD_ABOX_CCLK_DBG,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_ABOX_OSC_SPDY, "gout_clk_dispaud_abox_osc_spdy",
+ "mout_clk_aud_fm", CLK_CON_GAT_GOUT_DISPAUD_ABOX_OSC_SPDY, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_AXI_US_32TO128_ACLK, "gout_dispaud_axi_us_32to128_aclk",
+ "mout_clk_aud_bus", CLK_CON_GAT_GOUT_DISPAUD_AXI_US_32TO128_ACLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_CLK_DISPAUD_AUD, "gout_dispaud_clk_dispaud_aud",
+ "mout_clk_aud_bus", CLK_CON_GAT_GOUT_DISPAUD_CLK_DISPAUD_AUD,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_CLK_DISPAUD_DISP, "gout_dispaud_clk_dispaud_disp",
+ "mout_pll_dispaud_disp_user", CLK_CON_GAT_GOUT_DISPAUD_CLK_DISPAUD_DISP,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_BTM_ABOX_ACLK, "gout_dispaud_btm_abox_aclk", "mout_clk_aud_bus",
+ CLK_CON_GAT_GOUT_DISPAUD_BTM_ABOX_ACLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_BTM_ABOX_PCLK, "gout_dispaud_btm_abox_pclk",
+ "dout_clk_dispaud_busp", CLK_CON_GAT_GOUT_DISPAUD_BTM_ABOX_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_BTM_DPU_ACLK, "gout_dispaud_btm_dpu_aclk",
+ "mout_cmu_dispaud_disp_user", CLK_CON_GAT_GOUT_DISPAUD_BTM_DPU_ACLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_BTM_DPU_PCLK, "gout_dispaud_btm_dpu_pclk",
+ "dout_clk_dispaud_busp", CLK_CON_GAT_GOUT_DISPAUD_BTM_DPU_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_DFTMUX_AUD_CODEC_MCLK, "gout_dispaud_dftmux_aud_codec_mclk",
+ "dout_clk_aud_audif", CLK_CON_GAT_GOUT_DISPAUD_DFTMUX_AUD_CODEC_MCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_DPU_ACLK_DECON, "gout_dispaud_dpu_aclk_decon",
+ "mout_pll_dispaud_disp_user", CLK_CON_GAT_GOUT_DISPAUD_DPU_ACLK_DECON,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_DPU_ACLK_DMA, "gout_dispaud_dpu_aclk_dma",
+ "mout_pll_dispaud_disp_user", CLK_CON_GAT_GOUT_DISPAUD_DPU_ACLK_DMA,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_DPU_ACLK_DPP, "gout_dispaud_dpu_aclk_dpp",
+ "mout_pll_dispaud_disp_user", CLK_CON_GAT_GOUT_DISPAUD_DPU_ACLK_DPP,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_GPIO_DISPAUD_PCLK, "gout_dispaud_gpio_dispaud_pclk",
+ "mout_clk_aud_bus", CLK_CON_GAT_GOUT_DISPAUD_GPIO_DISPAUD_PCLK,
+ 21, 0, 0),
+ GATE(CLK_GOUT_DISPAUD_LHM_AXI_P_DISPAUD_CLK, "gout_dispaud_lhm_axi_p_dispaud_clk",
+ "mout_clk_aud_bus", CLK_CON_GAT_GOUT_DISPAUD_LHM_AXI_P_DISPAUD_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_LHS_ACEL_D_DPU_CLK, "gout_dispaud_lhs_acel_d_dpu_clk",
+ "mout_cmu_dispaud_disp_user", CLK_CON_GAT_GOUT_DISPAUD_LHS_ACEL_D_DPU_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_LHS_AXI_D_ABOX_CLK, "gout_dispaud_lhs_axi_d_abox_clk",
+ "mout_clk_aud_bus", CLK_CON_GAT_GOUT_DISPAUD_LHS_AXI_D_ABOX_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_PERI_AXI_ASB_ACLKM, "gout_dispaud_peri_axi_asb_aclkm",
+ "mout_clk_aud_bus", CLK_CON_GAT_GOUT_DISPAUD_PERI_AXI_ASB_ACLKM,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_PERI_AXI_ASB_PCLK, "gout_dispaud_peri_axi_asb_pclk",
+ "mout_clk_aud_bus", CLK_CON_GAT_GOUT_DISPAUD_PERI_AXI_ASB_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_PPMU_ABOX_ACLK, "gout_dispaud_ppmu_abox_aclk",
+ "mout_clk_aud_bus", CLK_CON_GAT_GOUT_DISPAUD_PPMU_ABOX_ACLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_PPMU_ABOX_PCLK, "gout_dispaud_ppmu_abox_pclk",
+ "mout_clk_aud_bus", CLK_CON_GAT_GOUT_DISPAUD_PPMU_ABOX_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_PPMU_DPU_ACLK, "gout_dispaud_ppmu_dpu_aclk",
+ "mout_cmu_dispaud_disp_user", CLK_CON_GAT_GOUT_DISPAUD_PPMU_DPU_ACLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_PPMU_DPU_PCLK, "gout_dispaud_ppmu_dpu_pclk",
+ "dout_clk_dispaud_busp", CLK_CON_GAT_GOUT_DISPAUD_PPMU_DPU_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_CLK_AUD_CPU_ACLK_CLK,
+ "gout_dispaud_clk_aud_cpu_aclk_clk", "dout_clk_aud_cpu_aclk",
+ CLK_CON_GAT_GOUT_DISPAUD_CLK_AUD_CPU_ACLK_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_CLK_AUD_CPU_CLKIN_CLK,
+ "gout_dispaud_clk_aud_cpu_clkin_clk", "mout_clk_aud_cpu_hch",
+ CLK_CON_GAT_GOUT_DISPAUD_CLK_AUD_CPU_CLKIN_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_CLK_AUD_CPU_PCLKDBG_CLK,
+ "gout_dispaud_clk_aud_cpu_pclkdbg_clk", "dout_clk_aud_cpu_pclkdbg",
+ CLK_CON_GAT_GOUT_DISPAUD_CLK_AUD_CPU_PCLKDBG_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_CLK_AUD_DSIF_CLK, "gout_dispaud_clk_aud_dsif_clk",
+ "dout_clk_aud_dsif", CLK_CON_GAT_GOUT_DISPAUD_CLK_AUD_DSIF_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_CLK_AUD_CLK, "gout_dispaud_clk_aud_clk",
+ "mout_clk_aud_bus", CLK_CON_GAT_GOUT_DISPAUD_CLK_AUD_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_CLK_BUSP_CLK, "gout_dispaud_clk_busp_clk",
+ "dout_clk_dispaud_busp", CLK_CON_GAT_GOUT_DISPAUD_CLK_BUSP_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_CLK_DISP_CLK, "gout_dispaud_clk_disp_clk",
+ "mout_cmu_dispaud_disp_user", CLK_CON_GAT_GOUT_DISPAUD_CLK_DISP_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_SMMU_ABOX_CLK, "gout_dispaud_smmu_abox_clk",
+ "mout_clk_aud_bus", CLK_CON_GAT_GOUT_DISPAUD_SMMU_ABOX_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_SMMU_DPU_CLK, "gout_dispaud_smmu_dpu_clk",
+ "mout_cmu_dispaud_disp_user", CLK_CON_GAT_GOUT_DISPAUD_SMMU_DPU_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_DISPAUD_SYSREG_PCLK, "gout_dispaud_sysreg_pclk",
+ "dout_clk_dispaud_busp", CLK_CON_GAT_GOUT_DISPAUD_SYSREG_PCLK,
+ 21, 0, 0),
+ GATE(CLK_GOUT_DISPAUD_WDT_AUD_PCLK, "gout_dispaud_wdt_aud_pclk",
+ "mout_clk_aud_bus", CLK_CON_GAT_GOUT_DISPAUD_WDT_AUD_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+};
+
+static const struct samsung_cmu_info dispaud_cmu_info __initconst = {
+ .pll_clks = dispaud_pll_clks,
+ .nr_pll_clks = ARRAY_SIZE(dispaud_pll_clks),
+ .mux_clks = dispaud_mux_clks,
+ .nr_mux_clks = ARRAY_SIZE(dispaud_mux_clks),
+ .div_clks = dispaud_div_clks,
+ .nr_div_clks = ARRAY_SIZE(dispaud_div_clks),
+ .gate_clks = dispaud_gate_clks,
+ .nr_gate_clks = ARRAY_SIZE(dispaud_gate_clks),
+ .nr_clk_ids = CLKS_NR_DISPAUD,
+ .clk_regs = dispaud_clk_regs,
+ .nr_clk_regs = ARRAY_SIZE(dispaud_clk_regs),
+};
+
+/* CMU_FSYS */
+#define PLL_CON0_MUX_CLKCMU_FSYS_BUS_USER 0x0100
+#define PLL_CON2_MUX_CLKCMU_FSYS_BUS_USER 0x0108
+#define PLL_CON0_MUX_CLKCMU_FSYS_MMC_CARD_USER 0x0120
+#define PLL_CON2_MUX_CLKCMU_FSYS_MMC_CARD_USER 0x0128
+#define PLL_CON0_MUX_CLKCMU_FSYS_MMC_EMBD_USER 0x0140
+#define PLL_CON2_MUX_CLKCMU_FSYS_MMC_EMBD_USER 0x0148
+#define PLL_CON0_MUX_CLKCMU_FSYS_UFS_EMBD_USER 0x0160
+#define PLL_CON2_MUX_CLKCMU_FSYS_UFS_EMBD_USER 0x0168
+#define CLK_CON_GAT_CLK_FSYS_CMU_PCLK 0x2000
+#define CLK_CON_GAT_CLK_FSYS_OSCCLK_CLK 0x2004
+#define CLK_CON_GAT_GOUT_FSYS_ADM_AHB_SSS_HCLKM 0x2008
+#define CLK_CON_GAT_GOUT_FSYS_BTM_ACLK 0x200c
+#define CLK_CON_GAT_GOUT_FSYS_BTM_PCLK 0x2010
+#define CLK_CON_GAT_GOUT_FSYS_GPIO_PCLK 0x2014
+#define CLK_CON_GAT_GOUT_FSYS_LHM_AXI_P_CLK 0x2018
+#define CLK_CON_GAT_GOUT_FSYS_LHS_ACEL_D_CLK 0x201c
+#define CLK_CON_GAT_GOUT_FSYS_MMC_CARD_ACLK 0x2020
+#define CLK_CON_GAT_GOUT_FSYS_MMC_CARD_SDCLKIN 0x2024
+#define CLK_CON_GAT_GOUT_FSYS_MMC_EMBD_ACLK 0x2028
+#define CLK_CON_GAT_GOUT_FSYS_MMC_EMBD_SDCLKIN 0x202c
+#define CLK_CON_GAT_GOUT_FSYS_PGEN_LITE_CLK 0x2030
+#define CLK_CON_GAT_GOUT_FSYS_PPMU_ACLK 0x2034
+#define CLK_CON_GAT_GOUT_FSYS_PPMU_PCLK 0x2038
+#define CLK_CON_GAT_GOUT_FSYS_BUS_CLK 0x203c
+#define CLK_CON_GAT_GOUT_FSYS_RTIC_ACLK 0x2040
+#define CLK_CON_GAT_GOUT_FSYS_RTIC_PCLK 0x2044
+#define CLK_CON_GAT_GOUT_FSYS_SSS_ACLK 0x2048
+#define CLK_CON_GAT_GOUT_FSYS_SSS_PCLK 0x204c
+#define CLK_CON_GAT_GOUT_FSYS_SYSREG_PCLK 0x2050
+#define CLK_CON_GAT_GOUT_FSYS_UFS_EMBD_ACLK 0x2054
+#define CLK_CON_GAT_GOUT_FSYS_UFS_EMBD_CLK_UNIPRO 0x2058
+#define CLK_CON_GAT_GOUT_FSYS_UFS_EMBD_FMP_CLK 0x205c
+#define CLK_CON_GAT_GOUT_FSYS_XIU_D_ACLK 0x2060
+
+static const unsigned long fsys_clk_regs[] __initconst = {
+ PLL_CON0_MUX_CLKCMU_FSYS_BUS_USER,
+ PLL_CON2_MUX_CLKCMU_FSYS_BUS_USER,
+ PLL_CON0_MUX_CLKCMU_FSYS_MMC_CARD_USER,
+ PLL_CON2_MUX_CLKCMU_FSYS_MMC_CARD_USER,
+ PLL_CON0_MUX_CLKCMU_FSYS_MMC_EMBD_USER,
+ PLL_CON2_MUX_CLKCMU_FSYS_MMC_EMBD_USER,
+ PLL_CON0_MUX_CLKCMU_FSYS_UFS_EMBD_USER,
+ PLL_CON2_MUX_CLKCMU_FSYS_UFS_EMBD_USER,
+ CLK_CON_GAT_CLK_FSYS_CMU_PCLK,
+ CLK_CON_GAT_CLK_FSYS_OSCCLK_CLK,
+ CLK_CON_GAT_GOUT_FSYS_ADM_AHB_SSS_HCLKM,
+ CLK_CON_GAT_GOUT_FSYS_BTM_ACLK,
+ CLK_CON_GAT_GOUT_FSYS_BTM_PCLK,
+ CLK_CON_GAT_GOUT_FSYS_GPIO_PCLK,
+ CLK_CON_GAT_GOUT_FSYS_LHM_AXI_P_CLK,
+ CLK_CON_GAT_GOUT_FSYS_LHS_ACEL_D_CLK,
+ CLK_CON_GAT_GOUT_FSYS_MMC_CARD_ACLK,
+ CLK_CON_GAT_GOUT_FSYS_MMC_EMBD_ACLK,
+ CLK_CON_GAT_GOUT_FSYS_PGEN_LITE_CLK,
+ CLK_CON_GAT_GOUT_FSYS_PPMU_ACLK,
+ CLK_CON_GAT_GOUT_FSYS_PPMU_PCLK,
+ CLK_CON_GAT_GOUT_FSYS_BUS_CLK,
+ CLK_CON_GAT_GOUT_FSYS_SYSREG_PCLK,
+ CLK_CON_GAT_GOUT_FSYS_UFS_EMBD_ACLK,
+ CLK_CON_GAT_GOUT_FSYS_UFS_EMBD_FMP_CLK,
+ CLK_CON_GAT_GOUT_FSYS_XIU_D_ACLK,
+};
+
+PNAME(mout_pll_fsys_bus_user_p) = { "oscclk",
+ "dout_cmu_fsys_bus" };
+PNAME(mout_pll_fsys_mmc_card_user_p) = { "oscclk",
+ "dout_cmu_fsys_mmc_card" };
+PNAME(mout_pll_fsys_mmc_embd_user_p) = { "oscclk",
+ "dout_cmu_fsys_mmc_embd" };
+PNAME(mout_pll_fsys_ufs_embd_user_p) = { "oscclk",
+ "dout_cmu_fsys_ufs_embd" };
+
+static const struct samsung_mux_clock fsys_mux_clks[] __initconst = {
+ MUX(CLK_MOUT_PLL_FSYS_BUS_USER, "mout_pll_fsys_bus_user", mout_pll_fsys_bus_user_p,
+ PLL_CON0_MUX_CLKCMU_FSYS_BUS_USER, 4, 1),
+ MUX(CLK_MOUT_PLL_FSYS_MMC_CARD_USER, "mout_pll_fsys_mmc_card_user",
+ mout_pll_fsys_mmc_card_user_p, PLL_CON0_MUX_CLKCMU_FSYS_MMC_CARD_USER, 4, 1),
+ MUX(CLK_MOUT_PLL_FSYS_MMC_EMBD_USER, "mout_pll_fsys_mmc_embd_user",
+ mout_pll_fsys_mmc_embd_user_p, PLL_CON0_MUX_CLKCMU_FSYS_MMC_EMBD_USER, 4, 1),
+ MUX(CLK_MOUT_PLL_FSYS_UFS_EMBD_USER, "mout_pll_fsys_ufs_embd_user",
+ mout_pll_fsys_ufs_embd_user_p, PLL_CON0_MUX_CLKCMU_FSYS_UFS_EMBD_USER, 4, 1),
+};
+
+static const struct samsung_gate_clock fsys_gate_clks[] __initconst = {
+ GATE(CLK_GOUT_FSYS_CMU_PCLK, "gout_fsys_cmu_pclk", "mout_pll_fsys_bus_user",
+ CLK_CON_GAT_CLK_FSYS_CMU_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_FSYS_OSCCLK_CLK, "gout_fsys_oscclk_clk", "oscclk",
+ CLK_CON_GAT_CLK_FSYS_OSCCLK_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_FSYS_ADM_AHB_SSS_HCLKM, "gout_fsys_adm_ahb_sss_hclkm",
+ "mout_pll_fsys_bus_user", CLK_CON_GAT_GOUT_FSYS_ADM_AHB_SSS_HCLKM,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_FSYS_BTM_ACLK, "gout_fsys_btm_aclk", "mout_pll_fsys_bus_user",
+ CLK_CON_GAT_GOUT_FSYS_BTM_ACLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_FSYS_BTM_PCLK, "gout_fsys_btm_pclk", "mout_pll_fsys_bus_user",
+ CLK_CON_GAT_GOUT_FSYS_BTM_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_FSYS_GPIO_PCLK, "gout_fsys_gpio_pclk", "mout_pll_fsys_bus_user",
+ CLK_CON_GAT_GOUT_FSYS_GPIO_PCLK, 21, 0, 0),
+ GATE(CLK_GOUT_FSYS_LHM_AXI_P_CLK, "gout_fsys_lhm_axi_p_clk",
+ "mout_pll_fsys_bus_user", CLK_CON_GAT_GOUT_FSYS_LHM_AXI_P_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_FSYS_LHS_ACEL_D_CLK, "gout_fsys_lhs_acel_d_clk",
+ "mout_pll_fsys_bus_user", CLK_CON_GAT_GOUT_FSYS_LHS_ACEL_D_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_FSYS_MMC_CARD_ACLK, "gout_fsys_mmc_card_aclk",
+ "mout_pll_fsys_bus_user", CLK_CON_GAT_GOUT_FSYS_MMC_CARD_ACLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_FSYS_MMC_CARD_SDCLKIN, "gout_fsys_mmc_card_sdclkin",
+ "mout_pll_fsys_mmc_card_user", CLK_CON_GAT_GOUT_FSYS_MMC_CARD_SDCLKIN,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_FSYS_MMC_EMBD_ACLK, "gout_fsys_mmc_embd_aclk",
+ "mout_pll_fsys_bus_user", CLK_CON_GAT_GOUT_FSYS_MMC_EMBD_ACLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_FSYS_MMC_EMBD_SDCLKIN, "gout_fsys_mmc_embd_sdclkin",
+ "mout_pll_fsys_mmc_embd_user", CLK_CON_GAT_GOUT_FSYS_MMC_EMBD_SDCLKIN,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_FSYS_PGEN_LITE_CLK, "gout_fsys_pgen_lite_clk",
+ "mout_pll_fsys_bus_user", CLK_CON_GAT_GOUT_FSYS_PGEN_LITE_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_FSYS_PPMU_ACLK, "gout_fsys_ppmu_aclk", "mout_pll_fsys_bus_user",
+ CLK_CON_GAT_GOUT_FSYS_PPMU_ACLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_FSYS_PPMU_PCLK, "gout_fsys_ppmu_pclk", "mout_pll_fsys_bus_user",
+ CLK_CON_GAT_GOUT_FSYS_PPMU_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_FSYS_BUS_CLK, "gout_fsys_bus_clk", "mout_pll_fsys_bus_user",
+ CLK_CON_GAT_GOUT_FSYS_BUS_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_FSYS_SYSREG_PCLK, "gout_fsys_sysreg_pclk", "mout_pll_fsys_bus_user",
+ CLK_CON_GAT_GOUT_FSYS_SYSREG_PCLK, 21, 0, 0),
+ GATE(CLK_GOUT_FSYS_UFS_EMBD_ACLK, "gout_fsys_ufs_embd_aclk",
+ "mout_pll_fsys_bus_user", CLK_CON_GAT_GOUT_FSYS_UFS_EMBD_ACLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_FSYS_UFS_EMBD_CLK_UNIPRO, "gout_fsys_ufs_embd_clk_unipro",
+ "mout_pll_fsys_ufs_embd_user", CLK_CON_GAT_GOUT_FSYS_UFS_EMBD_CLK_UNIPRO,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_FSYS_UFS_EMBD_FMP_CLK, "gout_fsys_ufs_embd_fmp_clk",
+ "mout_pll_fsys_bus_user", CLK_CON_GAT_GOUT_FSYS_UFS_EMBD_FMP_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_FSYS_XIU_D_ACLK, "gout_fsys_xiu_d_aclk", "mout_pll_fsys_bus_user",
+ CLK_CON_GAT_GOUT_FSYS_XIU_D_ACLK, 21, CLK_IGNORE_UNUSED, 0),
+};
+
+static const struct samsung_cmu_info fsys_cmu_info __initconst = {
+ .mux_clks = fsys_mux_clks,
+ .nr_mux_clks = ARRAY_SIZE(fsys_mux_clks),
+ .gate_clks = fsys_gate_clks,
+ .nr_gate_clks = ARRAY_SIZE(fsys_gate_clks),
+ .clk_regs = fsys_clk_regs,
+ .nr_clk_regs = ARRAY_SIZE(fsys_clk_regs),
+ .nr_clk_ids = CLKS_NR_FSYS,
+};
+
+/* CMU_G2D */
+#define PLL_CON0_MUX_CLKCMU_G2D_G2D_USER 0x0100
+#define PLL_CON2_MUX_CLKCMU_G2D_G2D_USER 0x0108
+#define PLL_CON0_MUX_CLKCMU_G2D_MSCL_USER 0x0120
+#define PLL_CON2_MUX_CLKCMU_G2D_MSCL_USER 0x0128
+#define CLK_CON_DIV_DIV_CLK_G2D_BUSP 0x1800
+#define CLK_CON_GAT_CLK_G2D_CMU_PCLK 0x2000
+#define CLK_CON_GAT_CLK_G2D_OSCCLK_CLK 0x2004
+#define CLK_CON_GAT_GOUT_G2D_AS_AXI_JPEG_ACLKM 0x2008
+#define CLK_CON_GAT_GOUT_G2D_AS_AXI_JPEG_ACLKS 0x200c
+#define CLK_CON_GAT_GOUT_G2D_AS_AXI_MSCL_ACLKM 0x2010
+#define CLK_CON_GAT_GOUT_G2D_AS_AXI_MSCL_ACLKS 0x2014
+#define CLK_CON_GAT_GOUT_G2D_CLK_G2D_G2D 0x2018
+#define CLK_CON_GAT_GOUT_G2D_CLK_G2D_MSCL 0x201c
+#define CLK_CON_GAT_GOUT_G2D_BTM_G2D_ACLK 0x2020
+#define CLK_CON_GAT_GOUT_G2D_BTM_G2D_PCLK 0x2024
+#define CLK_CON_GAT_GOUT_G2D_G2D_ACLK 0x2028
+#define CLK_CON_GAT_GOUT_G2D_JPEG_FIMP_CLK 0x202c
+#define CLK_CON_GAT_GOUT_G2D_LHM_AXI_P_CLK 0x2030
+#define CLK_CON_GAT_GOUT_G2D_LHS_ACEL_D_CLK 0x2034
+#define CLK_CON_GAT_GOUT_G2D_MSCL_ACLK 0x2038
+#define CLK_CON_GAT_GOUT_G2D_PGEN100_LITE_CLK 0x203c
+#define CLK_CON_GAT_GOUT_G2D_PPMU_ACLK 0x2040
+#define CLK_CON_GAT_GOUT_G2D_PPMU_PCLK 0x2044
+#define CLK_CON_GAT_GOUT_G2D_BUSP_CLK 0x2048
+#define CLK_CON_GAT_GOUT_G2D_G2D_CLK 0x204c
+#define CLK_CON_GAT_GOUT_G2D_MSCL_CLK 0x2050
+#define CLK_CON_GAT_GOUT_G2D_SYSMMU_CLK 0x2054
+#define CLK_CON_GAT_GOUT_G2D_SYSREG_PCLK 0x2058
+#define CLK_CON_GAT_GOUT_G2D_XIU_D_MSCL_ACLK 0x205c
+
+static const unsigned long g2d_clk_regs[] __initconst = {
+ PLL_CON0_MUX_CLKCMU_G2D_G2D_USER,
+ PLL_CON2_MUX_CLKCMU_G2D_G2D_USER,
+ PLL_CON0_MUX_CLKCMU_G2D_MSCL_USER,
+ PLL_CON2_MUX_CLKCMU_G2D_MSCL_USER,
+ CLK_CON_DIV_DIV_CLK_G2D_BUSP,
+ CLK_CON_GAT_CLK_G2D_CMU_PCLK,
+ CLK_CON_GAT_CLK_G2D_OSCCLK_CLK,
+ CLK_CON_GAT_GOUT_G2D_AS_AXI_JPEG_ACLKM,
+ CLK_CON_GAT_GOUT_G2D_AS_AXI_JPEG_ACLKS,
+ CLK_CON_GAT_GOUT_G2D_AS_AXI_MSCL_ACLKM,
+ CLK_CON_GAT_GOUT_G2D_AS_AXI_MSCL_ACLKS,
+ CLK_CON_GAT_GOUT_G2D_CLK_G2D_G2D,
+ CLK_CON_GAT_GOUT_G2D_CLK_G2D_MSCL,
+ CLK_CON_GAT_GOUT_G2D_BTM_G2D_ACLK,
+ CLK_CON_GAT_GOUT_G2D_BTM_G2D_PCLK,
+ CLK_CON_GAT_GOUT_G2D_G2D_ACLK,
+ CLK_CON_GAT_GOUT_G2D_JPEG_FIMP_CLK,
+ CLK_CON_GAT_GOUT_G2D_LHM_AXI_P_CLK,
+ CLK_CON_GAT_GOUT_G2D_LHS_ACEL_D_CLK,
+ CLK_CON_GAT_GOUT_G2D_MSCL_ACLK,
+ CLK_CON_GAT_GOUT_G2D_PGEN100_LITE_CLK,
+ CLK_CON_GAT_GOUT_G2D_PPMU_ACLK,
+ CLK_CON_GAT_GOUT_G2D_PPMU_PCLK,
+ CLK_CON_GAT_GOUT_G2D_BUSP_CLK,
+ CLK_CON_GAT_GOUT_G2D_G2D_CLK,
+ CLK_CON_GAT_GOUT_G2D_MSCL_CLK,
+ // CLK_CON_GAT_GOUT_G2D_SYSMMU_CLK, // wronly
+ CLK_CON_GAT_GOUT_G2D_SYSREG_PCLK,
+ CLK_CON_GAT_GOUT_G2D_XIU_D_MSCL_ACLK,
+};
+
+PNAME(mout_pll_g2d_g2d_user_p) = { "oscclk", "dout_cmu_g2d_g2d" };
+PNAME(mout_pll_g2d_mscl_user_p) = { "oscclk", "dout_cmu_g2d_mscl" };
+
+static const struct samsung_mux_clock g2d_mux_clks[] __initconst = {
+ MUX(CLK_MOUT_PLL_G2D_G2D_USER, "mout_pll_g2d_g2d_user", mout_pll_g2d_g2d_user_p,
+ PLL_CON0_MUX_CLKCMU_G2D_G2D_USER, 4, 1),
+ MUX(CLK_MOUT_PLL_G2D_MSCL_USER, "mout_pll_g2d_mscl_user", mout_pll_g2d_mscl_user_p,
+ PLL_CON0_MUX_CLKCMU_G2D_MSCL_USER, 4, 1),
+};
+
+static const struct samsung_div_clock g2d_div_clks[] __initconst = {
+ DIV(CLK_DOUT_CLK_G2D_BUSP, "dout_clk_g2d_busp", "mout_pll_g2d_mscl_user",
+ CLK_CON_DIV_DIV_CLK_G2D_BUSP, 0, 3),
+};
+
+static const struct samsung_gate_clock g2d_gate_clks[] __initconst = {
+ GATE(CLK_GOUT_CLK_G2D_CMU_PCLK, "gout_clk_g2d_cmu_pclk", "dout_clk_g2d_busp",
+ CLK_CON_GAT_CLK_G2D_CMU_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CLK_G2D_OSCCLK_CLK, "gout_clk_g2d_oscclk_clk", "oscclk",
+ CLK_CON_GAT_CLK_G2D_OSCCLK_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G2D_AS_AXI_JPEG_ACLKM, "gout_g2d_as_axi_jpeg_aclkm",
+ "mout_pll_g2d_g2d_user", CLK_CON_GAT_GOUT_G2D_AS_AXI_JPEG_ACLKM,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G2D_AS_AXI_JPEG_ACLKS, "gout_g2d_as_axi_jpeg_aclks",
+ "mout_pll_g2d_mscl_user", CLK_CON_GAT_GOUT_G2D_AS_AXI_JPEG_ACLKS,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G2D_AS_AXI_MSCL_ACLKM, "gout_g2d_as_axi_mscl_aclkm",
+ "mout_pll_g2d_g2d_user", CLK_CON_GAT_GOUT_G2D_AS_AXI_MSCL_ACLKM,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G2D_AS_AXI_MSCL_ACLKS, "gout_g2d_as_axi_mscl_aclks",
+ "mout_pll_g2d_mscl_user", CLK_CON_GAT_GOUT_G2D_AS_AXI_MSCL_ACLKS,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G2D_CLK_G2D_G2D, "gout_g2d_clk_g2d_g2d", "mout_pll_g2d_g2d_user",
+ CLK_CON_GAT_GOUT_G2D_CLK_G2D_G2D, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G2D_CLK_G2D_MSCL, "gout_g2d_clk_g2d_mscl", "mout_pll_g2d_mscl_user",
+ CLK_CON_GAT_GOUT_G2D_CLK_G2D_MSCL, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G2D_BTM_G2D_ACLK, "gout_g2d_btm_g2d_aclk", "mout_pll_g2d_g2d_user",
+ CLK_CON_GAT_GOUT_G2D_BTM_G2D_ACLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G2D_BTM_G2D_PCLK, "gout_g2d_btm_g2d_pclk", "dout_clk_g2d_busp",
+ CLK_CON_GAT_GOUT_G2D_BTM_G2D_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G2D_G2D_ACLK, "gout_g2d_g2d_aclk", "mout_pll_g2d_g2d_user",
+ CLK_CON_GAT_GOUT_G2D_G2D_ACLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G2D_JPEG_FIMP_CLK, "gout_g2d_jpeg_fimp_clk", "mout_pll_g2d_mscl_user",
+ CLK_CON_GAT_GOUT_G2D_JPEG_FIMP_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G2D_LHM_AXI_P_CLK, "gout_g2d_lhm_axi_p_clk", "dout_clk_g2d_busp",
+ CLK_CON_GAT_GOUT_G2D_LHM_AXI_P_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G2D_LHS_ACEL_D_CLK, "gout_g2d_lhs_acel_d_clk", "mout_pll_g2d_mscl_user",
+ CLK_CON_GAT_GOUT_G2D_LHS_ACEL_D_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G2D_MSCL_ACLK, "gout_g2d_mscl_aclk", "mout_pll_g2d_mscl_user",
+ CLK_CON_GAT_GOUT_G2D_MSCL_ACLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G2D_PGEN100_LITE_CLK, "gout_g2d_pgen100_lite_clk", "dout_clk_g2d_busp",
+ CLK_CON_GAT_GOUT_G2D_PGEN100_LITE_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G2D_PPMU_ACLK, "gout_g2d_ppmu_aclk", "mout_pll_g2d_g2d_user",
+ CLK_CON_GAT_GOUT_G2D_PPMU_ACLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G2D_PPMU_PCLK, "gout_g2d_ppmu_pclk", "dout_clk_g2d_busp",
+ CLK_CON_GAT_GOUT_G2D_PPMU_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G2D_BUSP_CLK, "gout_g2d_busp_clk", "dout_clk_g2d_busp",
+ CLK_CON_GAT_GOUT_G2D_BUSP_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G2D_SYSMMU_CLK, "gout_g2d_sysmmu_clk", "mout_pll_g2d_g2d_user",
+ CLK_CON_GAT_GOUT_G2D_SYSMMU_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G2D_SYSREG_PCLK, "gout_g2d_sysreg_pclk", "dout_clk_g2d_busp",
+ CLK_CON_GAT_GOUT_G2D_SYSREG_PCLK, 21, 0, 0),
+ GATE(CLK_GOUT_G2D_XIU_D_MSCL_ACLK, "gout_g2d_xiu_d_mscl_aclk", "mout_pll_g2d_g2d_user",
+ CLK_CON_GAT_GOUT_G2D_XIU_D_MSCL_ACLK, 21, CLK_IGNORE_UNUSED, 0),
+};
+
+static const struct samsung_cmu_info g2d_cmu_info __initconst = {
+ .mux_clks = g2d_mux_clks,
+ .nr_mux_clks = ARRAY_SIZE(g2d_mux_clks),
+ .div_clks = g2d_div_clks,
+ .nr_div_clks = ARRAY_SIZE(g2d_div_clks),
+ .gate_clks = g2d_gate_clks,
+ .nr_gate_clks = ARRAY_SIZE(g2d_gate_clks),
+ .clk_regs = g2d_clk_regs,
+ .nr_clk_regs = ARRAY_SIZE(g2d_clk_regs),
+ .nr_clk_ids = CLKS_NR_G2D,
+};
+
+/* CMU_G3D */
+#define PLL_LOCKTIME_PLL_G3D 0x0000
+#define PLL_CON0_MUX_CLKCMU_G3D_SWITCH_USER 0x0100
+#define PLL_CON2_MUX_CLKCMU_G3D_SWITCH_USER 0x0108
+#define PLL_CON0_PLL_G3D 0x0120
+#define CLK_CON_MUX_MUX_CLK_G3D_BUSD 0x1004
+#define CLK_CON_DIV_DIV_CLK_G3D_BUSD 0x1800
+#define CLK_CON_DIV_DIV_CLK_G3D_BUSP 0x1804
+#define CLK_CON_GAT_CLK_G3D_CMU_PCLK 0x2000
+#define CLK_CON_GAT_CLK_G3D_G3D_CLK 0x2004
+#define CLK_CON_GAT_CLK_G3D_HPM_TARGETCLK_C 0x2008
+#define CLK_CON_GAT_CLK_G3D_OSCCLK_CLK 0x200c
+#define CLK_CON_GAT_GOUT_G3D_BTM_G3D_ACLK 0x2014
+#define CLK_CON_GAT_GOUT_G3D_BTM_G3D_PCLK 0x2018
+#define CLK_CON_GAT_GOUT_G3D_BUSIF_HPMG3D_PCLK 0x201c
+#define CLK_CON_GAT_GOUT_G3D_GRAY2BIN_G3D_CLK 0x2020
+#define CLK_CON_GAT_GOUT_G3D_LHM_AXI_G3DSFR_CLK 0x2024
+#define CLK_CON_GAT_GOUT_G3D_LHM_AXI_P_G3D_CLK 0x2028
+#define CLK_CON_GAT_GOUT_G3D_LHS_AXI_D_G3D_CLK 0x202c
+#define CLK_CON_GAT_GOUT_G3D_LHS_AXI_G3DSFR_CLK 0x2030
+#define CLK_CON_GAT_GOUT_G3D_PGEN_LITE_G3D_CLK 0x2034
+#define CLK_CON_GAT_GOUT_G3D_BUSD_CLK 0x2038
+#define CLK_CON_GAT_GOUT_G3D_BUSP_CLK 0x203c
+#define CLK_CON_GAT_GOUT_G3D_SYSREG_PCLK 0x2040
+
+static const unsigned long g3d_clk_regs[] __initconst = {
+ PLL_LOCKTIME_PLL_G3D,
+ PLL_CON0_MUX_CLKCMU_G3D_SWITCH_USER,
+ PLL_CON2_MUX_CLKCMU_G3D_SWITCH_USER,
+ PLL_CON0_PLL_G3D,
+ CLK_CON_MUX_MUX_CLK_G3D_BUSD,
+ CLK_CON_DIV_DIV_CLK_G3D_BUSD,
+ CLK_CON_DIV_DIV_CLK_G3D_BUSP,
+ CLK_CON_GAT_CLK_G3D_CMU_PCLK,
+ CLK_CON_GAT_CLK_G3D_G3D_CLK,
+ CLK_CON_GAT_CLK_G3D_HPM_TARGETCLK_C,
+ CLK_CON_GAT_CLK_G3D_OSCCLK_CLK,
+ CLK_CON_GAT_GOUT_G3D_BTM_G3D_ACLK,
+ CLK_CON_GAT_GOUT_G3D_BTM_G3D_PCLK,
+ CLK_CON_GAT_GOUT_G3D_BUSIF_HPMG3D_PCLK,
+ CLK_CON_GAT_GOUT_G3D_GRAY2BIN_G3D_CLK,
+ CLK_CON_GAT_GOUT_G3D_LHM_AXI_G3DSFR_CLK,
+ CLK_CON_GAT_GOUT_G3D_LHM_AXI_P_G3D_CLK,
+ CLK_CON_GAT_GOUT_G3D_LHS_AXI_D_G3D_CLK,
+ CLK_CON_GAT_GOUT_G3D_LHS_AXI_G3DSFR_CLK,
+ CLK_CON_GAT_GOUT_G3D_PGEN_LITE_G3D_CLK,
+ CLK_CON_GAT_GOUT_G3D_BUSD_CLK,
+ CLK_CON_GAT_GOUT_G3D_BUSP_CLK,
+ CLK_CON_GAT_GOUT_G3D_SYSREG_PCLK,
+};
+
+static const struct samsung_pll_rate_table pll_g3d_rate_table[] __initconst = {
+ PLL_35XX_RATE(26 * MHZ, 750000000, 375, 13, 0),
+ PLL_35XX_RATE(26 * MHZ, 1000000000, 500, 13, 0),
+ PLL_35XX_RATE(26 * MHZ, 1200000000, 600, 13, 0),
+ PLL_35XX_RATE(26 * MHZ, 330000000, 660, 13, 2),
+ PLL_35XX_RATE(26 * MHZ, 550000000, 550, 13, 1),
+};
+
+static const struct samsung_pll_clock g3d_pll_clks[] __initconst = {
+ PLL(pll_1052x, CLK_FOUT_G3D_PLL, "fout_g3d_pll", "oscclk",
+ PLL_LOCKTIME_PLL_G3D, PLL_CON0_PLL_G3D,
+ pll_g3d_rate_table),
+};
+
+PNAME(mout_g3d_switch_user_p) = { "oscclk", "dout_cmu_g3d_switch" };
+PNAME(mout_clk_g3d_busd_p) = { "fout_g3d_pll",
+ "mout_g3d_switch_user" };
+
+static const struct samsung_mux_clock g3d_mux_clks[] __initconst = {
+ MUX(CLK_MOUT_G3D_SWITCH_USER, "mout_g3d_switch_user", mout_g3d_switch_user_p,
+ PLL_CON0_MUX_CLKCMU_G3D_SWITCH_USER, 4, 1),
+ MUX(CLK_MOUT_CLK_G3D_BUSD, "mout_clk_g3d_busd", mout_clk_g3d_busd_p,
+ CLK_CON_MUX_MUX_CLK_G3D_BUSD, 0, 1),
+};
+
+static const struct samsung_div_clock g3d_div_clks[] __initconst = {
+ DIV(CLK_DOUT_CLK_G3D_BUSD, "dout_clk_g3d_busd", "mout_clk_g3d_busd",
+ CLK_CON_DIV_DIV_CLK_G3D_BUSD, 0, 1),
+ DIV(CLK_DOUT_CLK_G3D_BUSP, "dout_clk_g3d_busp", "mout_clk_g3d_busd",
+ CLK_CON_DIV_DIV_CLK_G3D_BUSP, 0, 3),
+};
+
+static const struct samsung_gate_clock g3d_gate_clks[] __initconst = {
+ GATE(CLK_GOUT_CLK_G3D_CMU_PCLK, "gout_clk_g3d_cmu_pclk", "dout_clk_g3d_busp",
+ CLK_CON_GAT_CLK_G3D_CMU_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CLK_G3D_G3D_CLK, "gout_clk_g3d_g3d_clk", "dout_clk_g3d_busd",
+ CLK_CON_GAT_CLK_G3D_G3D_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CLK_G3D_HPM_TARGETCLK_C, "gout_clk_g3d_hpm_targetclk_c",
+ "dout_cmu_hpm", CLK_CON_GAT_CLK_G3D_HPM_TARGETCLK_C, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_CLK_G3D_OSCCLK_CLK, "gout_clk_g3d_oscclk_clk", "oscclk",
+ CLK_CON_GAT_CLK_G3D_OSCCLK_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G3D_BTM_G3D_ACLK, "gout_g3d_btm_g3d_aclk", "dout_clk_g3d_busd",
+ CLK_CON_GAT_GOUT_G3D_BTM_G3D_ACLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G3D_BTM_G3D_PCLK, "gout_g3d_btm_g3d_pclk", "dout_clk_g3d_busp",
+ CLK_CON_GAT_GOUT_G3D_BTM_G3D_PCLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G3D_BUSIF_HPMG3D_PCLK, "gout_g3d_busif_hpmg3d_pclk",
+ "dout_clk_g3d_busp", CLK_CON_GAT_GOUT_G3D_BUSIF_HPMG3D_PCLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G3D_GRAY2BIN_G3D_CLK, "gout_g3d_gray2bin_g3d_clk",
+ "dout_clk_g3d_busd", CLK_CON_GAT_GOUT_G3D_GRAY2BIN_G3D_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G3D_LHM_AXI_G3DSFR_CLK, "gout_g3d_lhm_axi_g3dsfr_clk",
+ "dout_clk_g3d_busd", CLK_CON_GAT_GOUT_G3D_LHM_AXI_G3DSFR_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G3D_LHM_AXI_P_G3D_CLK, "gout_g3d_lhm_axi_p_g3d_clk",
+ "dout_clk_g3d_busp", CLK_CON_GAT_GOUT_G3D_LHM_AXI_P_G3D_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G3D_LHS_AXI_D_G3D_CLK, "gout_g3d_lhs_axi_d_g3d_clk",
+ "dout_clk_g3d_busd", CLK_CON_GAT_GOUT_G3D_LHS_AXI_D_G3D_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G3D_LHS_AXI_G3DSFR_CLK, "gout_g3d_lhs_axi_g3dsfr_clk",
+ "dout_clk_g3d_busp", CLK_CON_GAT_GOUT_G3D_LHS_AXI_G3DSFR_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G3D_PGEN_LITE_G3D_CLK, "gout_g3d_pgen_lite_g3d_clk",
+ "dout_clk_g3d_busp", CLK_CON_GAT_GOUT_G3D_PGEN_LITE_G3D_CLK,
+ 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G3D_BUSD_CLK, "gout_g3d_busd_clk", "dout_clk_g3d_busd",
+ CLK_CON_GAT_GOUT_G3D_BUSD_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G3D_BUSP_CLK, "gout_g3d_busp_clk", "dout_clk_g3d_busp",
+ CLK_CON_GAT_GOUT_G3D_BUSP_CLK, 21, CLK_IGNORE_UNUSED, 0),
+ GATE(CLK_GOUT_G3D_SYSREG_PCLK, "gout_g3d_sysreg_pclk", "dout_clk_g3d_busp",
+ CLK_CON_GAT_GOUT_G3D_SYSREG_PCLK, 21, 0, 0),
+};
+
+static const struct samsung_cmu_info g3d_cmu_info __initconst = {
+ .pll_clks = g3d_pll_clks,
+ .nr_pll_clks = ARRAY_SIZE(g3d_pll_clks),
+ .mux_clks = g3d_mux_clks,
+ .nr_mux_clks = ARRAY_SIZE(g3d_mux_clks),
+ .div_clks = g3d_div_clks,
+ .nr_div_clks = ARRAY_SIZE(g3d_div_clks),
+ .gate_clks = g3d_gate_clks,
+ .nr_gate_clks = ARRAY_SIZE(g3d_gate_clks),
+ .clk_regs = g3d_clk_regs,
+ .nr_clk_regs = ARRAY_SIZE(g3d_clk_regs),
+ .nr_clk_ids = CLKS_NR_G3D,
+};
+
+static int __init exynos9610_cmu_probe(struct platform_device *pdev)
+{
+ const struct samsung_cmu_info *info;
+ struct device *dev = &pdev->dev;
+
+ info = of_device_get_match_data(dev);
+ exynos_arm64_register_cmu(dev, dev->of_node, info);
+
+ return 0;
+}
+
+static const struct of_device_id exynos9610_cmu_of_match[] = {
+ {
+ .compatible = "samsung,exynos9610-cmu-cam",
+ .data = &cam_cmu_info,
+ },
+ {
+ .compatible = "samsung,exynos9610-cmu-cmgp",
+ .data = &cmgp_cmu_info,
+ },
+ {
+ .compatible = "samsung,exynos9610-cmu-core",
+ .data = &core_cmu_info,
+ },
+ {
+ .compatible = "samsung,exynos9610-cmu-dispaud",
+ .data = &dispaud_cmu_info,
+ },
+ {
+ .compatible = "samsung,exynos9610-cmu-fsys",
+ .data = &fsys_cmu_info,
+ },
+ {
+ .compatible = "samsung,exynos9610-cmu-g2d",
+ .data = &g2d_cmu_info,
+ },
+ {
+ .compatible = "samsung,exynos9610-cmu-g3d",
+ .data = &g3d_cmu_info,
+ },
+ { }
+};
+
+static struct platform_driver exynos9610_cmu_driver __refdata = {
+ .driver = {
+ .name = "exynos9610-cmu",
+ .of_match_table = exynos9610_cmu_of_match,
+ .suppress_bind_attrs = true,
+ },
+ .probe = exynos9610_cmu_probe,
+};
+
+static int __init exynos9610_cmu_init(void)
+{
+ return platform_driver_register(&exynos9610_cmu_driver);
+}
+core_initcall(exynos9610_cmu_init);
--
2.47.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 4/8] arm64: dts: exynos9610: Enable clock support
2025-09-14 21:19 [PATCH 0/8] clk: samsung: Introduce support for Exynos9610 clocks Alexandru Chimac
` (2 preceding siblings ...)
2025-09-14 21:19 ` [PATCH 3/8] clk: samsung: Introduce Exynos9610 clock controller driver Alexandru Chimac
@ 2025-09-14 21:19 ` Alexandru Chimac
2025-09-15 4:32 ` Krzysztof Kozlowski
2025-09-14 21:20 ` [PATCH 5/8] dt-bindings: soc: exynos-sysreg: Add Exynos9610 SYSREG bindings Alexandru Chimac
` (3 subsequent siblings)
7 siblings, 1 reply; 13+ messages in thread
From: Alexandru Chimac @ 2025-09-14 21:19 UTC (permalink / raw)
To: Krzysztof Kozlowski, Sylwester Nawrocki, Chanwoo Choi,
Alim Akhtar, Michael Turquette, Stephen Boyd, Rob Herring,
Conor Dooley, Alexandru Chimac, Krzysztof Kozlowski
Cc: linux-samsung-soc, linux-clk, devicetree, linux-arm-kernel,
linux-kernel, Alexandru Chimac
Add CMU (Clock Management Unit) nodes and required
fixed clocks.
Signed-off-by: Alexandru Chimac <alex@chimac.ro>
---
arch/arm64/boot/dts/exynos/exynos9610-gta4xl.dts | 1 +
arch/arm64/boot/dts/exynos/exynos9610.dtsi | 205 +++++++++++++++++++++++
2 files changed, 206 insertions(+)
diff --git a/arch/arm64/boot/dts/exynos/exynos9610-gta4xl.dts b/arch/arm64/boot/dts/exynos/exynos9610-gta4xl.dts
index f455af22ff872c6f07b9bcfc68b1ae1f45d0def3..1a09d5e8ebaa130e9cd0b7f3266ee2c9dac4cf9a 100644
--- a/arch/arm64/boot/dts/exynos/exynos9610-gta4xl.dts
+++ b/arch/arm64/boot/dts/exynos/exynos9610-gta4xl.dts
@@ -10,6 +10,7 @@
#include "exynos9610.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
+#include <dt-bindings/clock/samsung,exynos9610.h>
/ {
compatible = "samsung,gta4xl", "samsung,exynos9610";
diff --git a/arch/arm64/boot/dts/exynos/exynos9610.dtsi b/arch/arm64/boot/dts/exynos/exynos9610.dtsi
index 852f7111e5cdfd82b5afc350792e8b539fe87d39..2a15986c459d6af9f83362c27cdcc3a2646c256b 100644
--- a/arch/arm64/boot/dts/exynos/exynos9610.dtsi
+++ b/arch/arm64/boot/dts/exynos/exynos9610.dtsi
@@ -6,6 +6,7 @@
*/
#include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/clock/samsung,exynos9610.h>
/ {
compatible = "samsung,exynos9610";
@@ -161,6 +162,41 @@ oscclk: clock-osc {
clock-frequency = <26000000>;
};
+ dll_dco: clock-dll-dco {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-output-names = "dll_dco";
+ clock-frequency = <360000000>;
+ };
+
+ oscclk_rco_cmgp: clock-osc-rco {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-output-names = "oscclk_rco";
+ clock-frequency = <30000000>;
+ };
+
+ ioclk_audiocdclk0: clock-audiocdclk0 {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-output-names = "ioclk_audiocdclk0";
+ clock-frequency = <10000000>;
+ };
+
+ ioclk_audiocdclk1: clock-audiocdclk1 {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-output-names = "ioclk_audiocdclk1";
+ clock-frequency = <100000000>;
+ };
+
+ tick_usb: clock-tick-usb {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-output-names = "tick_usb";
+ clock-frequency = <60000000>;
+ };
+
soc: soc@0 {
compatible = "simple-bus";
ranges = <0x0 0x0 0x0 0x20000000>;
@@ -174,12 +210,81 @@ chipid@10000000 {
reg = <0x10000000 0x100>;
};
+ cmu_peri: clock-controller@10030000 {
+ compatible = "samsung,exynos9610-cmu-peri";
+ reg = <0x10030000 0x8000>;
+ #clock-cells = <1>;
+
+ clocks = <&oscclk>,
+ <&cmu_top CLK_DOUT_CMU_PERI_BUS>,
+ <&cmu_top CLK_DOUT_CMU_PERI_IP>,
+ <&cmu_top CLK_DOUT_CMU_PERI_UART>;
+ clock-names = "oscclk",
+ "dout_cmu_peri_bus",
+ "dout_cmu_peri_ip",
+ "dout_cmu_peri_uart";
+ };
+
+ cmu_cpucl1: clock-controller@0x10800000 {
+ compatible = "samsung,exynos9610-cmu-cpucl1";
+ reg = <0x10800000 0x8000>;
+ #clock-cells = <1>;
+
+ clocks = <&oscclk>,
+ <&cmu_top CLK_DOUT_CMU_CPUCL1_SWITCH>,
+ <&cmu_top CLK_DOUT_CMU_HPM>;
+ clock-names = "oscclk",
+ "dout_cmu_cpucl1_switch",
+ "dout_cmu_hpm";
+ };
+
+ cmu_cpucl0: clock-controller@0x10900000 {
+ compatible = "samsung,exynos9610-cmu-cpucl0";
+ reg = <0x10900000 0x8000>;
+ #clock-cells = <1>;
+
+ clocks = <&oscclk>,
+ <&cmu_top CLK_DOUT_CMU_CPUCL0_DBG>,
+ <&cmu_top CLK_DOUT_CMU_CPUCL0_SWITCH>,
+ <&cmu_top CLK_DOUT_CMU_HPM>;
+ clock-names = "oscclk",
+ "dout_cmu_cpucl0_dbg",
+ "dout_cmu_cpucl0_switch",
+ "dout_cmu_hpm";
+ };
+
pinctrl_shub: pinctrl@11080000 {
compatible = "samsung,exynos9610-pinctrl";
reg = <0x11080000 0x1000>;
interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>;
};
+ cmu_g3d: clock-controller@11430000 {
+ compatible = "samsung,exynos9610-cmu-g3d";
+ reg = <0x11430000 0x8000>;
+ #clock-cells = <1>;
+
+ clocks = <&oscclk>,
+ <&cmu_top CLK_DOUT_CMU_G3D_SWITCH>,
+ <&cmu_top CLK_DOUT_CMU_HPM>;
+ clock-names = "oscclk",
+ "dout_cmu_g3d_switch",
+ "dout_cmu_hpm";
+ };
+
+ cmu_apm: clock-controller@11800000 {
+ compatible = "samsung,exynos9610-cmu-apm";
+ reg = <0x11800000 0x8000>;
+ #clock-cells = <1>;
+
+ clocks = <&oscclk>,
+ <&dll_dco>,
+ <&cmu_top CLK_DOUT_CMU_APM_BUS>;
+ clock-names = "oscclk",
+ "dll_dco",
+ "dout_cmu_apm_bus";
+ };
+
pinctrl_alive: pinctrl@11850000 {
compatible = "samsung,exynos9610-pinctrl";
reg = <0x11850000 0x1000>;
@@ -191,11 +296,48 @@ wakeup-interrupt-controller {
};
};
+ cmu_cmgp: clock-controller@11c00000 {
+ compatible = "samsung,exynos9610-cmu-cmgp";
+ reg = <0x11c00000 0x8000>;
+ #clock-cells = <1>;
+
+ clocks = <&oscclk>,
+ <&oscclk_rco_cmgp>,
+ <&cmu_apm CLK_GOUT_CMU_CMGP_BUS>;
+ clock-names = "oscclk",
+ "oscclk_rco",
+ "gout_cmu_cmgp_bus";
+ };
+
pinctrl_cmgp: pinctrl@11c20000 {
compatible = "samsung,exynos9610-pinctrl";
reg = <0x11c20000 0x1000>;
};
+ cmu_core: clock-controller@120f0000 {
+ compatible = "samsung,exynos9610-cmu-core";
+ reg = <0x120f0000 0x8000>;
+ #clock-cells = <1>;
+
+ clocks = <&oscclk>,
+ <&cmu_top CLK_DOUT_CMU_CORE_BUS>,
+ <&cmu_top CLK_DOUT_CMU_CORE_CCI>,
+ <&cmu_top CLK_DOUT_CMU_CORE_G3D>;
+ clock-names = "oscclk",
+ "dout_cmu_core_bus",
+ "dout_cmu_core_cci",
+ "dout_cmu_core_g3d";
+ };
+
+ cmu_top: clock-controller@12100000 {
+ compatible = "samsung,exynos9610-cmu-top";
+ reg = <0x12100000 0x8000>;
+ #clock-cells = <1>;
+
+ clocks = <&oscclk>;
+ clock-names = "oscclk";
+ };
+
gic: interrupt-controller@12300000 {
compatible = "arm,gic-400";
#interrupt-cells = <3>;
@@ -209,6 +351,37 @@ gic: interrupt-controller@12300000 {
IRQ_TYPE_LEVEL_HIGH)>;
};
+ cmu_g2d: clock-controller@12e00000 {
+ compatible = "samsung,exynos9610-cmu-g2d";
+ reg = <0x12e00000 0x8000>;
+ #clock-cells = <1>;
+
+ clocks = <&oscclk>,
+ <&cmu_top CLK_DOUT_CMU_G2D_G2D>,
+ <&cmu_top CLK_DOUT_CMU_G2D_MSCL>;
+
+ clock-names = "oscclk",
+ "dout_cmu_g2d_g2d",
+ "dout_cmu_g2d_mscl";
+ };
+
+ cmu_fsys: clock-controller@13400000 {
+ compatible = "samsung,exynos9610-cmu-fsys";
+ reg = <0x13400000 0x8000>;
+ #clock-cells = <1>;
+
+ clocks = <&oscclk>,
+ <&cmu_top CLK_DOUT_CMU_FSYS_BUS>,
+ <&cmu_top CLK_DOUT_CMU_FSYS_MMC_CARD>,
+ <&cmu_top CLK_DOUT_CMU_FSYS_MMC_EMBD>,
+ <&cmu_top CLK_DOUT_CMU_FSYS_UFS_EMBD>;
+ clock-names = "oscclk",
+ "dout_cmu_fsys_bus",
+ "dout_cmu_fsys_mmc_card",
+ "dout_cmu_fsys_mmc_embd",
+ "dout_cmu_fsys_ufs_embd";
+ };
+
pinctrl_fsys: pinctrl@13490000 {
compatible = "samsung,exynos9610-pinctrl";
reg = <0x13490000 0x1000>;
@@ -221,6 +394,38 @@ pinctrl_top: pinctrl@139b0000 {
interrupts = <GIC_SPI 266 IRQ_TYPE_LEVEL_HIGH>;
};
+ cmu_cam: clock-controller@14500000 {
+ compatible = "samsung,exynos9610-cmu-cam";
+ reg = <0x14500000 0x8000>;
+ #clock-cells = <1>;
+
+ clocks = <&oscclk>,
+ <&cmu_top CLK_DOUT_CMU_CAM_BUS>;
+ clock-names = "oscclk",
+ "dout_cmu_cam_bus";
+ };
+
+ cmu_dispaud: clock-controller@14980000 {
+ compatible = "samsung,exynos9610-cmu-dispaud";
+ reg = <0x14980000 0x8000>;
+ #clock-cells = <1>;
+
+ clocks = <&oscclk>,
+ <&ioclk_audiocdclk0>,
+ <&ioclk_audiocdclk1>,
+ <&tick_usb>,
+ <&cmu_top CLK_DOUT_CMU_DISPAUD_AUD>,
+ <&cmu_top CLK_DOUT_CMU_DISPAUD_CPU>,
+ <&cmu_top CLK_DOUT_CMU_DISPAUD_DISP>;
+ clock-names = "oscclk",
+ "ioclk_audiocdclk0",
+ "ioclk_audiocdclk1",
+ "tick_usb",
+ "dout_cmu_dispaud_aud",
+ "dout_cmu_dispaud_cpu",
+ "dout_cmu_dispaud_disp";
+ };
+
pinctrl_dispaud: pinctrl@14a60000 {
compatible = "samsung,exynos9610-pinctrl";
reg = <0x14a60000 0x1000>;
--
2.47.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 5/8] dt-bindings: soc: exynos-sysreg: Add Exynos9610 SYSREG bindings
2025-09-14 21:19 [PATCH 0/8] clk: samsung: Introduce support for Exynos9610 clocks Alexandru Chimac
` (3 preceding siblings ...)
2025-09-14 21:19 ` [PATCH 4/8] arm64: dts: exynos9610: Enable clock support Alexandru Chimac
@ 2025-09-14 21:20 ` Alexandru Chimac
2025-09-15 13:47 ` Rob Herring (Arm)
2025-09-14 21:20 ` [PATCH 6/8] arm64: dts: exynos9610: Add SYSREG nodes Alexandru Chimac
` (2 subsequent siblings)
7 siblings, 1 reply; 13+ messages in thread
From: Alexandru Chimac @ 2025-09-14 21:20 UTC (permalink / raw)
To: Krzysztof Kozlowski, Sylwester Nawrocki, Chanwoo Choi,
Alim Akhtar, Michael Turquette, Stephen Boyd, Rob Herring,
Conor Dooley, Alexandru Chimac, Krzysztof Kozlowski
Cc: linux-samsung-soc, linux-clk, devicetree, linux-arm-kernel,
linux-kernel, Alexandru Chimac
Add bindings for SYSREG nodes, compatible with the standard syscon
driver.
Signed-off-by: Alexandru Chimac <alex@chimac.ro>
---
.../bindings/soc/samsung/samsung,exynos-sysreg.yaml | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/Documentation/devicetree/bindings/soc/samsung/samsung,exynos-sysreg.yaml b/Documentation/devicetree/bindings/soc/samsung/samsung,exynos-sysreg.yaml
index d8b302f975474a87e4886006cf0b21cf758e4479..9f759e457a0acc2870adfd077d33870593cf7b83 100644
--- a/Documentation/devicetree/bindings/soc/samsung/samsung,exynos-sysreg.yaml
+++ b/Documentation/devicetree/bindings/soc/samsung/samsung,exynos-sysreg.yaml
@@ -30,6 +30,16 @@ properties:
- samsung,exynos8895-fsys1-sysreg
- samsung,exynos8895-peric0-sysreg
- samsung,exynos8895-peric1-sysreg
+ - samsung,exynos9610-apm-sysreg
+ - samsung,exynos9610-cam-sysreg
+ - samsung,exynos9610-core-sysreg
+ - samsung,exynos9610-cpucl0-sysreg
+ - samsung,exynos9610-cpucl1-sysreg
+ - samsung,exynos9610-dispaud-sysreg
+ - samsung,exynos9610-fsys-sysreg
+ - samsung,exynos9610-g2d-sysreg
+ - samsung,exynos9610-g3d-sysreg
+ - samsung,exynos9610-peri-sysreg
- samsung,exynosautov920-hsi2-sysreg
- samsung,exynosautov920-peric0-sysreg
- samsung,exynosautov920-peric1-sysreg
@@ -93,6 +103,16 @@ allOf:
- samsung,exynos8895-fsys1-sysreg
- samsung,exynos8895-peric0-sysreg
- samsung,exynos8895-peric1-sysreg
+ - samsung,exynos9610-apm-sysreg
+ - samsung,exynos9610-cam-sysreg
+ - samsung,exynos9610-core-sysreg
+ - samsung,exynos9610-cpucl0-sysreg
+ - samsung,exynos9610-cpucl1-sysreg
+ - samsung,exynos9610-dispaud-sysreg
+ - samsung,exynos9610-fsys-sysreg
+ - samsung,exynos9610-g2d-sysreg
+ - samsung,exynos9610-g3d-sysreg
+ - samsung,exynos9610-peri-sysreg
then:
required:
- clocks
--
2.47.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 6/8] arm64: dts: exynos9610: Add SYSREG nodes
2025-09-14 21:19 [PATCH 0/8] clk: samsung: Introduce support for Exynos9610 clocks Alexandru Chimac
` (4 preceding siblings ...)
2025-09-14 21:20 ` [PATCH 5/8] dt-bindings: soc: exynos-sysreg: Add Exynos9610 SYSREG bindings Alexandru Chimac
@ 2025-09-14 21:20 ` Alexandru Chimac
2025-09-14 21:20 ` [PATCH 7/8] arm64: dts: exynos9610: Assign clocks to existing nodes Alexandru Chimac
2025-09-14 21:20 ` [PATCH 8/8] arm64: dts: exynos9610-gta4xl: " Alexandru Chimac
7 siblings, 0 replies; 13+ messages in thread
From: Alexandru Chimac @ 2025-09-14 21:20 UTC (permalink / raw)
To: Krzysztof Kozlowski, Sylwester Nawrocki, Chanwoo Choi,
Alim Akhtar, Michael Turquette, Stephen Boyd, Rob Herring,
Conor Dooley, Alexandru Chimac, Krzysztof Kozlowski
Cc: linux-samsung-soc, linux-clk, devicetree, linux-arm-kernel,
linux-kernel, Alexandru Chimac
Add nodes for:
- apm-sysreg
- cam-sysreg
- core-sysreg
- cpucl0/1-sysreg
- dispaud-sysreg
- fsys-sysreg
- g2d/g3d-sysreg
- peri-sysreg
Signed-off-by: Alexandru Chimac <alex@chimac.ro>
---
arch/arm64/boot/dts/exynos/exynos9610.dtsi | 60 ++++++++++++++++++++++++++++++
1 file changed, 60 insertions(+)
diff --git a/arch/arm64/boot/dts/exynos/exynos9610.dtsi b/arch/arm64/boot/dts/exynos/exynos9610.dtsi
index 2a15986c459d6af9f83362c27cdcc3a2646c256b..8ac113ceddacc30b52fa35954c85e1b8c320057d 100644
--- a/arch/arm64/boot/dts/exynos/exynos9610.dtsi
+++ b/arch/arm64/boot/dts/exynos/exynos9610.dtsi
@@ -210,6 +210,12 @@ chipid@10000000 {
reg = <0x10000000 0x100>;
};
+ sysreg_peri: system-controller@10010000 {
+ compatible = "samsung,exynos9610-peri-sysreg", "syscon";
+ reg = <0x10010000 0x10000>;
+ clocks = <&cmu_peri CLK_GOUT_PERI_SYSREG_PCLK>;
+ };
+
cmu_peri: clock-controller@10030000 {
compatible = "samsung,exynos9610-cmu-peri";
reg = <0x10030000 0x8000>;
@@ -238,6 +244,12 @@ cmu_cpucl1: clock-controller@0x10800000 {
"dout_cmu_hpm";
};
+ sysreg_cpucl1: system-controller@10810000 {
+ compatible = "samsung,exynos9610-cpucl1-sysreg", "syscon";
+ reg = <0x10810000 0x10000>;
+ clocks = <&cmu_cpucl1 CLK_GOUT_CPUCL1_SYSREG_PCLK>;
+ };
+
cmu_cpucl0: clock-controller@0x10900000 {
compatible = "samsung,exynos9610-cmu-cpucl0";
reg = <0x10900000 0x8000>;
@@ -253,12 +265,24 @@ cmu_cpucl0: clock-controller@0x10900000 {
"dout_cmu_hpm";
};
+ sysreg_cpucl0: system-controller@10910000 {
+ compatible = "samsung,exynos9610-cpucl0-sysreg", "syscon";
+ reg = <0x10910000 0x10000>;
+ clocks = <&cmu_cpucl0 CLK_GOUT_CPUCL0_SYSREG_PCLK>;
+ };
+
pinctrl_shub: pinctrl@11080000 {
compatible = "samsung,exynos9610-pinctrl";
reg = <0x11080000 0x1000>;
interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>;
};
+ sysreg_g3d: system-controller@11410000 {
+ compatible = "samsung,exynos9610-g3d-sysreg", "syscon";
+ reg = <0x11410000 0x10000>;
+ clocks = <&cmu_g3d CLK_GOUT_G3D_SYSREG_PCLK>;
+ };
+
cmu_g3d: clock-controller@11430000 {
compatible = "samsung,exynos9610-cmu-g3d";
reg = <0x11430000 0x8000>;
@@ -285,6 +309,12 @@ cmu_apm: clock-controller@11800000 {
"dout_cmu_apm_bus";
};
+ sysreg_apm: system-controller@11810000 {
+ compatible = "samsung,exynos9610-apm-sysreg", "syscon";
+ reg = <0x11810000 0x10000>;
+ clocks = <&cmu_apm CLK_GOUT_APM_SYSREG_PCLK>;
+ };
+
pinctrl_alive: pinctrl@11850000 {
compatible = "samsung,exynos9610-pinctrl";
reg = <0x11850000 0x1000>;
@@ -314,6 +344,12 @@ pinctrl_cmgp: pinctrl@11c20000 {
reg = <0x11c20000 0x1000>;
};
+ sysreg_core: system-controller@12010000 {
+ compatible = "samsung,exynos9610-core-sysreg", "syscon";
+ reg = <0x12010000 0x10000>;
+ clocks = <&cmu_core CLK_GOUT_CORE_SYSREG_PCLK>;
+ };
+
cmu_core: clock-controller@120f0000 {
compatible = "samsung,exynos9610-cmu-core";
reg = <0x120f0000 0x8000>;
@@ -365,6 +401,12 @@ cmu_g2d: clock-controller@12e00000 {
"dout_cmu_g2d_mscl";
};
+ sysreg_g2d: system-controller@12e10000 {
+ compatible = "samsung,exynos9610-g2d-sysreg", "syscon";
+ reg = <0x12e10000 0x10000>;
+ clocks = <&cmu_g2d CLK_GOUT_G2D_SYSREG_PCLK>;
+ };
+
cmu_fsys: clock-controller@13400000 {
compatible = "samsung,exynos9610-cmu-fsys";
reg = <0x13400000 0x8000>;
@@ -382,6 +424,12 @@ cmu_fsys: clock-controller@13400000 {
"dout_cmu_fsys_ufs_embd";
};
+ sysreg_fsys: system-controller@13410000 {
+ compatible = "samsung,exynos9610-fsys-sysreg", "syscon";
+ reg = <0x13410000 0x10000>;
+ clocks = <&cmu_fsys CLK_GOUT_FSYS_SYSREG_PCLK>;
+ };
+
pinctrl_fsys: pinctrl@13490000 {
compatible = "samsung,exynos9610-pinctrl";
reg = <0x13490000 0x1000>;
@@ -405,6 +453,18 @@ cmu_cam: clock-controller@14500000 {
"dout_cmu_cam_bus";
};
+ sysreg_cam: system-controller@14510000 {
+ compatible = "samsung,exynos9610-cam-sysreg", "syscon";
+ reg = <0x14510000 0x10000>;
+ clocks = <&cmu_cam CLK_GOUT_CAM_SYSREG_PCLK>;
+ };
+
+ sysreg_dispaud: system-controller@14810000 {
+ compatible = "samsung,exynos9610-dispaud-sysreg", "syscon";
+ reg = <0x14810000 0x10000>;
+ clocks = <&cmu_dispaud CLK_GOUT_DISPAUD_SYSREG_PCLK>;
+ };
+
cmu_dispaud: clock-controller@14980000 {
compatible = "samsung,exynos9610-cmu-dispaud";
reg = <0x14980000 0x8000>;
--
2.47.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 7/8] arm64: dts: exynos9610: Assign clocks to existing nodes
2025-09-14 21:19 [PATCH 0/8] clk: samsung: Introduce support for Exynos9610 clocks Alexandru Chimac
` (5 preceding siblings ...)
2025-09-14 21:20 ` [PATCH 6/8] arm64: dts: exynos9610: Add SYSREG nodes Alexandru Chimac
@ 2025-09-14 21:20 ` Alexandru Chimac
2025-09-14 21:20 ` [PATCH 8/8] arm64: dts: exynos9610-gta4xl: " Alexandru Chimac
7 siblings, 0 replies; 13+ messages in thread
From: Alexandru Chimac @ 2025-09-14 21:20 UTC (permalink / raw)
To: Krzysztof Kozlowski, Sylwester Nawrocki, Chanwoo Choi,
Alim Akhtar, Michael Turquette, Stephen Boyd, Rob Herring,
Conor Dooley, Alexandru Chimac, Krzysztof Kozlowski
Cc: linux-samsung-soc, linux-clk, devicetree, linux-arm-kernel,
linux-kernel, Alexandru Chimac
Required in order to have these parts work while the
clock driver is enabled (without clk_ignore_unused).
Signed-off-by: Alexandru Chimac <alex@chimac.ro>
---
arch/arm64/boot/dts/exynos/exynos9610.dtsi | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/arch/arm64/boot/dts/exynos/exynos9610.dtsi b/arch/arm64/boot/dts/exynos/exynos9610.dtsi
index 8ac113ceddacc30b52fa35954c85e1b8c320057d..2dc7cdda83d9357cb2a44d58d666a75674c83ec4 100644
--- a/arch/arm64/boot/dts/exynos/exynos9610.dtsi
+++ b/arch/arm64/boot/dts/exynos/exynos9610.dtsi
@@ -319,6 +319,9 @@ pinctrl_alive: pinctrl@11850000 {
compatible = "samsung,exynos9610-pinctrl";
reg = <0x11850000 0x1000>;
+ clocks = <&cmu_apm CLK_GOUT_APM_APBIF_GPIO_ALIVE_PCLK>;
+ clock-names = "pclk";
+
wakeup-interrupt-controller {
compatible = "samsung,exynos9610-wakeup-eint",
"samsung,exynos850-wakeup-eint",
@@ -342,6 +345,9 @@ cmu_cmgp: clock-controller@11c00000 {
pinctrl_cmgp: pinctrl@11c20000 {
compatible = "samsung,exynos9610-pinctrl";
reg = <0x11c20000 0x1000>;
+
+ clocks = <&cmu_cmgp CLK_GOUT_CMGP_GPIO_PCLK>;
+ clock-names = "pclk";
};
sysreg_core: system-controller@12010000 {
@@ -385,6 +391,8 @@ gic: interrupt-controller@12300000 {
<0x12306000 0x2000>;
interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(8) |
IRQ_TYPE_LEVEL_HIGH)>;
+ clocks = <&cmu_core CLK_GOUT_CORE_GIC_CLK>;
+ clock-names = "clk";
};
cmu_g2d: clock-controller@12e00000 {
@@ -434,6 +442,8 @@ pinctrl_fsys: pinctrl@13490000 {
compatible = "samsung,exynos9610-pinctrl";
reg = <0x13490000 0x1000>;
interrupts = <GIC_SPI 150 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&cmu_fsys CLK_GOUT_FSYS_GPIO_PCLK>;
+ clock-names = "pclk";
};
pinctrl_top: pinctrl@139b0000 {
@@ -489,6 +499,8 @@ cmu_dispaud: clock-controller@14980000 {
pinctrl_dispaud: pinctrl@14a60000 {
compatible = "samsung,exynos9610-pinctrl";
reg = <0x14a60000 0x1000>;
+ clocks = <&cmu_dispaud CLK_GOUT_DISPAUD_GPIO_DISPAUD_PCLK>;
+ clock-names = "pclk";
};
};
--
2.47.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 8/8] arm64: dts: exynos9610-gta4xl: Assign clocks to existing nodes
2025-09-14 21:19 [PATCH 0/8] clk: samsung: Introduce support for Exynos9610 clocks Alexandru Chimac
` (6 preceding siblings ...)
2025-09-14 21:20 ` [PATCH 7/8] arm64: dts: exynos9610: Assign clocks to existing nodes Alexandru Chimac
@ 2025-09-14 21:20 ` Alexandru Chimac
7 siblings, 0 replies; 13+ messages in thread
From: Alexandru Chimac @ 2025-09-14 21:20 UTC (permalink / raw)
To: Krzysztof Kozlowski, Sylwester Nawrocki, Chanwoo Choi,
Alim Akhtar, Michael Turquette, Stephen Boyd, Rob Herring,
Conor Dooley, Alexandru Chimac, Krzysztof Kozlowski
Cc: linux-samsung-soc, linux-clk, devicetree, linux-arm-kernel,
linux-kernel, Alexandru Chimac
Temporarily assign DISPAUD_DISP gate to simplefb node,
until the Exynos DRM driver will support this SoC.
Signed-off-by: Alexandru Chimac <alex@chimac.ro>
---
arch/arm64/boot/dts/exynos/exynos9610-gta4xl.dts | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/arm64/boot/dts/exynos/exynos9610-gta4xl.dts b/arch/arm64/boot/dts/exynos/exynos9610-gta4xl.dts
index 1a09d5e8ebaa130e9cd0b7f3266ee2c9dac4cf9a..e08a3603c27396c96dc2e9d5186be504ff7ce3aa 100644
--- a/arch/arm64/boot/dts/exynos/exynos9610-gta4xl.dts
+++ b/arch/arm64/boot/dts/exynos/exynos9610-gta4xl.dts
@@ -29,6 +29,7 @@ framebuffer0: framebuffer@ca000000 {
height = <2000>;
stride = <(1200 * 4)>;
format = "a8r8g8b8";
+ clocks = <&cmu_dispaud CLK_GOUT_DISPAUD_CLK_DISPAUD_DISP>;
};
};
--
2.47.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 2/8] clk: samsung: clk-pll: Add support for pll_1061x
2025-09-14 21:19 ` [PATCH 2/8] clk: samsung: clk-pll: Add support for pll_1061x Alexandru Chimac
@ 2025-09-15 4:21 ` Peng Fan
0 siblings, 0 replies; 13+ messages in thread
From: Peng Fan @ 2025-09-15 4:21 UTC (permalink / raw)
To: Alexandru Chimac
Cc: Krzysztof Kozlowski, Sylwester Nawrocki, Chanwoo Choi,
Alim Akhtar, Michael Turquette, Stephen Boyd, Rob Herring,
Conor Dooley, Alexandru Chimac, Krzysztof Kozlowski,
linux-samsung-soc, linux-clk, devicetree, linux-arm-kernel,
linux-kernel
On Sun, Sep 14, 2025 at 09:19:32PM +0000, Alexandru Chimac wrote:
>These PLLs are found in the Exynos9610 and Exynos9810 SoCs, and
>are similar to pll_1460x, so the code for that can handle this
>PLL with a few small adaptations.
>
>Signed-off-by: Alexandru Chimac <alex@chimac.ro>
>---
> drivers/clk/samsung/clk-pll.c | 29 ++++++++++++++++++++++-------
> drivers/clk/samsung/clk-pll.h | 1 +
> 2 files changed, 23 insertions(+), 7 deletions(-)
>
>diff --git a/drivers/clk/samsung/clk-pll.c b/drivers/clk/samsung/clk-pll.c
>index 7bea7be1d7e45c32f0b303ffa55ce9cde4a4f71d..5fa553eab8e4b53a8854848737f619ef6a9c645a 100644
>--- a/drivers/clk/samsung/clk-pll.c
>+++ b/drivers/clk/samsung/clk-pll.c
>@@ -785,15 +785,20 @@ static unsigned long samsung_pll46xx_recalc_rate(struct clk_hw *hw,
> u64 fvco = parent_rate;
>
> pll_con0 = readl_relaxed(pll->con_reg);
>- pll_con1 = readl_relaxed(pll->con_reg + 4);
>- mdiv = (pll_con0 >> PLL46XX_MDIV_SHIFT) & ((pll->type == pll_1460x) ?
>+ if (pll->type == pll_1061x)
>+ pll_con1 = readl_relaxed(pll->con_reg + 12);
>+ else
>+ pll_con1 = readl_relaxed(pll->con_reg + 4);
Nit: it would be better to use hex value for the two magic numbers.
>+ mdiv = (pll_con0 >> PLL46XX_MDIV_SHIFT) & (((pll->type == pll_1460x)
>+ || (pll->type == pll_1061x)) ?
> PLL1460X_MDIV_MASK : PLL46XX_MDIV_MASK);
FIELD_GET is preferred. But to align the coding style, it should be fine.
Regards
Peng
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 4/8] arm64: dts: exynos9610: Enable clock support
2025-09-14 21:19 ` [PATCH 4/8] arm64: dts: exynos9610: Enable clock support Alexandru Chimac
@ 2025-09-15 4:32 ` Krzysztof Kozlowski
0 siblings, 0 replies; 13+ messages in thread
From: Krzysztof Kozlowski @ 2025-09-15 4:32 UTC (permalink / raw)
To: Alexandru Chimac, Sylwester Nawrocki, Chanwoo Choi, Alim Akhtar,
Michael Turquette, Stephen Boyd, Rob Herring, Conor Dooley,
Alexandru Chimac, Krzysztof Kozlowski
Cc: linux-samsung-soc, linux-clk, devicetree, linux-arm-kernel,
linux-kernel
On 14/09/2025 23:19, Alexandru Chimac wrote:
> Add CMU (Clock Management Unit) nodes and required
> fixed clocks.
>
> Signed-off-by: Alexandru Chimac <alex@chimac.ro>
> ---
> arch/arm64/boot/dts/exynos/exynos9610-gta4xl.dts | 1 +
> arch/arm64/boot/dts/exynos/exynos9610.dtsi | 205 +++++++++++++++++++++++
There is no such file, which means you did not explain the dependencies
and this should not be separate patch at all. You must squash it.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/8] dt-bindings: clock: samsung: Add Exynos9610 CMU bindings
2025-09-14 21:19 ` [PATCH 1/8] dt-bindings: clock: samsung: Add Exynos9610 CMU bindings Alexandru Chimac
@ 2025-09-15 13:22 ` Rob Herring (Arm)
0 siblings, 0 replies; 13+ messages in thread
From: Rob Herring (Arm) @ 2025-09-15 13:22 UTC (permalink / raw)
To: Alexandru Chimac
Cc: Conor Dooley, Sylwester Nawrocki, linux-clk, linux-arm-kernel,
linux-kernel, Alim Akhtar, Krzysztof Kozlowski, Alexandru Chimac,
Stephen Boyd, Chanwoo Choi, devicetree, Krzysztof Kozlowski,
linux-samsung-soc, Michael Turquette
On Sun, 14 Sep 2025 21:19:19 +0000, Alexandru Chimac wrote:
> This clock management unit has a topmost block (CMU_TOP)
> that generates top clocks for other blocks, alongside 20
> other blocks, out of which 11 are currently implemented.
>
> Signed-off-by: Alexandru Chimac <alex@chimac.ro>
> ---
> .../bindings/clock/samsung,exynos9610-clock.yaml | 344 ++++++++++
> include/dt-bindings/clock/samsung,exynos9610.h | 720 +++++++++++++++++++++
> 2 files changed, 1064 insertions(+)
>
My bot found errors running 'make dt_binding_check' on your patch:
yamllint warnings/errors:
./Documentation/devicetree/bindings/arm/samsung/samsung-boards.yaml:250:13: [warning] wrong indentation: expected 14 but found 12 (indentation)
dtschema/dtc warnings/errors:
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/clock/samsung,exynos9610-clock.yaml: $id: 'http://devicetree.org/schemas/clock/samsung,exynos9610-clock.yaml' does not match 'http://devicetree.org/schemas(/[^/ ]+)+\\.yaml#'
from schema $id: http://devicetree.org/meta-schemas/base.yaml#
Error: Documentation/devicetree/bindings/clock/samsung,exynos9610-clock.example.dts:25.13-14 syntax error
FATAL ERROR: Unable to parse input tree
make[2]: *** [scripts/Makefile.dtbs:131: Documentation/devicetree/bindings/clock/samsung,exynos9610-clock.example.dtb] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [/builds/robherring/dt-review-ci/linux/Makefile:1527: dt_binding_check] Error 2
make: *** [Makefile:248: __sub-make] Error 2
doc reference errors (make refcheckdocs):
See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/20250915-exynos9610-clocks-v1-1-3f615022b178@chimac.ro
The base for the series is generally the latest rc1. A different dependency
should be noted in *this* patch.
If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:
pip3 install dtschema --upgrade
Please check and re-submit after running the above command yourself. Note
that DT_SCHEMA_FILES can be set to your schema file to speed up checking
your schema. However, it must be unset to test all examples with your schema.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 5/8] dt-bindings: soc: exynos-sysreg: Add Exynos9610 SYSREG bindings
2025-09-14 21:20 ` [PATCH 5/8] dt-bindings: soc: exynos-sysreg: Add Exynos9610 SYSREG bindings Alexandru Chimac
@ 2025-09-15 13:47 ` Rob Herring (Arm)
0 siblings, 0 replies; 13+ messages in thread
From: Rob Herring (Arm) @ 2025-09-15 13:47 UTC (permalink / raw)
To: Alexandru Chimac
Cc: Conor Dooley, linux-arm-kernel, Krzysztof Kozlowski,
Michael Turquette, Stephen Boyd, devicetree, Krzysztof Kozlowski,
Sylwester Nawrocki, linux-clk, linux-kernel, Alim Akhtar,
linux-samsung-soc, Chanwoo Choi, Alexandru Chimac
On Sun, 14 Sep 2025 21:20:09 +0000, Alexandru Chimac wrote:
> Add bindings for SYSREG nodes, compatible with the standard syscon
> driver.
>
> Signed-off-by: Alexandru Chimac <alex@chimac.ro>
> ---
> .../bindings/soc/samsung/samsung,exynos-sysreg.yaml | 20 ++++++++++++++++++++
> 1 file changed, 20 insertions(+)
>
Acked-by: Rob Herring (Arm) <robh@kernel.org>
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2025-09-15 13:47 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-09-14 21:19 [PATCH 0/8] clk: samsung: Introduce support for Exynos9610 clocks Alexandru Chimac
2025-09-14 21:19 ` [PATCH 1/8] dt-bindings: clock: samsung: Add Exynos9610 CMU bindings Alexandru Chimac
2025-09-15 13:22 ` Rob Herring (Arm)
2025-09-14 21:19 ` [PATCH 2/8] clk: samsung: clk-pll: Add support for pll_1061x Alexandru Chimac
2025-09-15 4:21 ` Peng Fan
2025-09-14 21:19 ` [PATCH 3/8] clk: samsung: Introduce Exynos9610 clock controller driver Alexandru Chimac
2025-09-14 21:19 ` [PATCH 4/8] arm64: dts: exynos9610: Enable clock support Alexandru Chimac
2025-09-15 4:32 ` Krzysztof Kozlowski
2025-09-14 21:20 ` [PATCH 5/8] dt-bindings: soc: exynos-sysreg: Add Exynos9610 SYSREG bindings Alexandru Chimac
2025-09-15 13:47 ` Rob Herring (Arm)
2025-09-14 21:20 ` [PATCH 6/8] arm64: dts: exynos9610: Add SYSREG nodes Alexandru Chimac
2025-09-14 21:20 ` [PATCH 7/8] arm64: dts: exynos9610: Assign clocks to existing nodes Alexandru Chimac
2025-09-14 21:20 ` [PATCH 8/8] arm64: dts: exynos9610-gta4xl: " Alexandru Chimac
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox