Re: [PATCH v3 4/5] clk: samsung: Introduce Exynos9610 clock controller driver

From: Peter Griffin

Date: Thu Jul 23 2026 - 07:59:22 EST


Hi Alexandru,

On Wed, 22 Jul 2026 at 21:44, Alexandru Chimac <alex@xxxxxxxxx> wrote:
>
> 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, which generates clocks for the little cluster
> - CMU_DISPAUD, which generates clocks for display and ABOX
> - CMU_FSYS, which generates clocks for MMC/UFS
> - CMU_G2D
> - CMU_G3D, which generates clocks for GPU
> - CMU_PERI, which generates clocks for peripherals
> - CMU_USB, which generates clocks for USB

That's an impressive amount of CMU's implemented! It's nice to see
you've enabled auto_clock_gate as well. I think it's worth mentioning
in the commit message that the CMUs have automatic clock gating
enabled.

Sashiko has some review comments on this patch (see
https://sashiko.dev/#/patchset/20260722-exynos9610-clocks-v3-0-c672a2a30889%40chimac.ro).
Regarding potential orphaned clocks and checking the clock tree
generally, could you provide the output somewhere of

/sys/kernel/debug/clk/clk_summary
and
/sys/kernel/debug/clk/clk_orphan_summary

> Based on drivers/soc/samsung/cal-if/exynos9610 from
> https://gitlab.com/Linaro/96boards/e850-96/kernel, revision 3c200119457e.

Thanks for the link, regards,

Peter

>
> Signed-off-by: Alexandru Chimac <alex@xxxxxxxxx>
> ---
> drivers/clk/samsung/Makefile | 1 +
> drivers/clk/samsung/clk-exynos9610.c | 3715 ++++++++++++++++++++++++++++++++++
> 2 files changed, 3716 insertions(+)
>
> diff --git a/drivers/clk/samsung/Makefile b/drivers/clk/samsung/Makefile
> index b3c4ef4e0dbf..8c490816f4da 100644
> --- a/drivers/clk/samsung/Makefile
> +++ b/drivers/clk/samsung/Makefile
> @@ -25,6 +25,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 000000000000..7e7284541bb4
> --- /dev/null
> +++ b/drivers/clk/samsung/clk-exynos9610.c
> @@ -0,0 +1,3715 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Common Clock Framework driver for Exynos9610
> + *
> + * Copyright (c) 2026, Alexandru Chimac <alex@xxxxxxxxx>
> + */
> +
> +#include <linux/clk.h>
> +#include <linux/clk-provider.h>
> +#include <linux/of.h>
> +#include <linux/platform_device.h>
> +
> +#include <dt-bindings/clock/samsung,exynos9610-cmu.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_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)
> +#define CLKS_NR_USB (CLK_GOUT_USB_US_D_ACLK + 1)
> +
> +#define EXYNOS9610_GATE_DBG_OFFSET 0x4000
> +#define EXYNOS9610_ALT_DRCG_EN_OFFSET 0x1000
> +#define EXYNOS9610_DRCG_EN_OFFSET 0x104
> +#define EXYNOS9610_MEMCLK_OFFSET 0x108
> +
> +/* 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 CMU_CMU_TOP_CONTROLLER_OPTION 0x0800
> +#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,
> + CMU_CMU_TOP_CONTROLLER_OPTION,
> + 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_CIS_CLK0,
> + CLK_CON_DIV_CLKCMU_CIS_CLK1,
> + CLK_CON_DIV_CLKCMU_CIS_CLK2,
> + CLK_CON_DIV_CLKCMU_CIS_CLK3,
> + 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_MMC_DIV2,
> + 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),
> +};
> +
> +static const struct samsung_fixed_rate_clock top_fixed_clks[] __initconst = {
> + /* OSCCLK for CMGP */
> + FRATE(0, "oscclk_rco_cmgp", NULL, 0, 30000000),
> + /* input clock for I2S/PCM */
> + FRATE(0, "ioclk_audiocdclk0", NULL, 0, 10000000),
> + FRATE(0, "ioclk_audiocdclk1", NULL, 0, 100000000),
> + /* for USB audio? */
> + FRATE(0, "tick_usb", NULL, 0, 60000000),
> +};
> +
> +/* 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_clk_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_clk_p,
> + CLK_CON_MUX_MUX_CLKCMU_CIS_CLK0, 0, 1),
> + MUX(CLK_MOUT_CMU_CIS_CLK1, "mout_cmu_cis_clk1", mout_cmu_cis_clk_p,
> + CLK_CON_MUX_MUX_CLKCMU_CIS_CLK1, 0, 1),
> + MUX(CLK_MOUT_CMU_CIS_CLK2, "mout_cmu_cis_clk2", mout_cmu_cis_clk_p,
> + CLK_CON_MUX_MUX_CLKCMU_CIS_CLK2, 0, 1),
> + MUX(CLK_MOUT_CMU_CIS_CLK3, "mout_cmu_cis_clk3", mout_cmu_cis_clk_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, 2),
> + 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_CCI, 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_cpucl0_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_USB30DRD, "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",
> + "mout_cmu_mif_switch", CLK_CON_GAT_CLKCMU_MIF_SWITCH,
> + 21, 0, 0),
> + GATE(CLK_GOUT_CLK_CMU_OTP_CLK, "gout_clk_cmu_otp_clk", "dout_cmu_otp",
> + CLK_CON_GAT_CLK_CMU_OTP_CLK, 21, 0, 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, 0, 0),
> + GATE(CLK_GOUT_CMU_CORE_CCI, "gout_cmu_core_cci", "mout_cmu_core_cci",
> + CLK_CON_GAT_GATE_CLKCMU_CORE_CCI, 21, 0, 0),
> + GATE(CLK_GOUT_CMU_CORE_G3D, "gout_cmu_core_g3d", "mout_cmu_core_g3d",
> + CLK_CON_GAT_GATE_CLKCMU_CORE_G3D, 21, 0, 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, 0, 0),
> + GATE(CLK_GOUT_CMU_ISP_GDC, "gout_cmu_isp_gdc", "mout_cmu_isp_gdc",
> + CLK_CON_GAT_GATE_CLKCMU_ISP_GDC, 21, 0, 0),
> + GATE(CLK_GOUT_CMU_ISP_VRA, "gout_cmu_isp_vra", "mout_cmu_isp_vra",
> + CLK_CON_GAT_GATE_CLKCMU_ISP_VRA, 21, 0, 0),
> + GATE(CLK_GOUT_CMU_MFC_MFC, "gout_cmu_mfc_mfc", "mout_cmu_mfc_mfc",
> + CLK_CON_GAT_GATE_CLKCMU_MFC_MFC, 21, 0, 0),
> + GATE(CLK_GOUT_CMU_MFC_WFD, "gout_cmu_mfc_wfd", "mout_cmu_mfc_wfd",
> + CLK_CON_GAT_GATE_CLKCMU_MFC_WFD, 21, 0, 0),
> + GATE(CLK_GOUT_CMU_MIF_BUSP, "gout_cmu_mif_busp", "mout_cmu_mif_busp",
> + CLK_CON_GAT_GATE_CLKCMU_MIF_BUSP, 21, 0, 0),
> + GATE(CLK_GOUT_CMU_MODEM_SHARED0, "gout_cmu_modem_shared0", "dout_cmu_shared0_div2",
> + CLK_CON_GAT_GATE_CLKCMU_MODEM_SHARED0, 21, 0, 0),
> + GATE(CLK_GOUT_CMU_MODEM_SHARED1, "gout_cmu_modem_shared1", "dout_cmu_shared1_div2",
> + CLK_CON_GAT_GATE_CLKCMU_MODEM_SHARED1, 21, 0, 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, 0, 0),
> + GATE(CLK_GOUT_CMU_USB_DPGTC, "gout_cmu_usb_dpgtc", "mout_cmu_usb_dpgtc",
> + CLK_CON_GAT_GATE_CLKCMU_USB_DPGTC, 21, 0, 0),
> + GATE(CLK_GOUT_CMU_USB_USB30DRD, "gout_cmu_usb_usb30drd", "mout_cmu_usb_usb30drd",
> + CLK_CON_GAT_GATE_CLKCMU_USB_USB30DRD, 21, 0, 0),
> + GATE(CLK_GOUT_CMU_VIPX1_BUS, "gout_cmu_vipx1_bus", "mout_cmu_vipx1_bus",
> + CLK_CON_GAT_GATE_CLKCMU_VIPX1_BUS, 21, 0, 0),
> + GATE(CLK_GOUT_CMU_VIPX2_BUS, "gout_cmu_vipx2_bus", "mout_cmu_vipx2_bus",
> + CLK_CON_GAT_GATE_CLKCMU_VIPX2_BUS, 21, 0, 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),
> + .fixed_clks = top_fixed_clks,
> + .nr_fixed_clks = ARRAY_SIZE(top_fixed_clks),
> + .nr_clk_ids = CLKS_NR_TOP,
> + .clk_regs = top_clk_regs,
> + .nr_clk_regs = ARRAY_SIZE(top_clk_regs),
> + .auto_clock_gate = true,
> + .gate_dbg_offset = EXYNOS9610_GATE_DBG_OFFSET,
> + .option_offset = CMU_CMU_TOP_CONTROLLER_OPTION,
> +};
> +
> +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);
> +
> +static const unsigned long drcg_memclk_sysreg[] __initconst = {
> + EXYNOS9610_DRCG_EN_OFFSET,
> + EXYNOS9610_MEMCLK_OFFSET,
> +};
> +
> +static const unsigned long drcg_alt_memclk_sysreg[] __initconst = {
> + EXYNOS9610_MEMCLK_OFFSET,
> + EXYNOS9610_ALT_DRCG_EN_OFFSET,
> +};
> +
> +/* 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 CMU_CMU_CPUCL0_CONTROLLER_OPTION 0x0800
> +#define CMU_EMBEDDED_CMU_CPUCL0_CONTROLLER_OPTION 0x0804
> +#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,
> + CMU_CMU_CPUCL0_CONTROLLER_OPTION,
> + CMU_EMBEDDED_CMU_CPUCL0_CONTROLLER_OPTION,
> + 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, 0, 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, 0, 0),
> + GATE(CLK_GOUT_CLK_CPUCL0_OSCCLK_CLK, "gout_clk_cpucl0_oscclk_clk",
> + "oscclk", CLK_CON_GAT_CLK_CPUCL0_OSCCLK_CLK, 21, 0, 0),
> + GATE(CLK_GOUT_CLK_CLUSTER0_CPU, "gout_clk_cluster0_cpu",
> + "dout_clk_cpucl0_cpu", CLK_CON_GAT_GATE_CLK_CLUSTER0_CPU, 21, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 0),
> + GATE(CLK_GOUT_CPUCL0_DBG_CLK, "gout_cpucl0_dbg_clk",
> + "mout_pll_cpucl0_dbg_user", CLK_CON_GAT_GOUT_CPUCL0_DBG_CLK, 21, 0, 0),
> + GATE(CLK_GOUT_CPUCL0_PCLK_CLK, "gout_cpucl0_pclk_clk",
> + "dout_clk_cpucl0_pclk", CLK_CON_GAT_GOUT_CPUCL0_PCLK_CLK, 21, 0, 0),
> + GATE(CLK_GOUT_CPUCL0_SECJTAG_CLK, "gout_cpucl0_secjtag_clk", "mout_pll_cpucl0_dbg_user",
> + CLK_CON_GAT_GOUT_CPUCL0_SECJTAG_CLK, 21, 0, 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),
> + .auto_clock_gate = true,
> + .gate_dbg_offset = EXYNOS9610_GATE_DBG_OFFSET,
> + .option_offset = CMU_CMU_CPUCL0_CONTROLLER_OPTION,
> +};
> +
> +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_PERI */
> +#define PLL_CON0_MUX_CLKCMU_PERI_BUS_USER 0x0100
> +#define PLL_CON2_MUX_CLKCMU_PERI_BUS_USER 0x0108
> +#define PLL_CON0_MUX_CLKCMU_PERI_IP_USER 0x0120
> +#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 CMU_CMU_PERI_CONTROLLER_OPTION 0x0800
> +#define CLK_CON_DIV_DIV_CLK_PERI_I2C 0x1800
> +#define CLK_CON_DIV_DIV_CLK_PERI_SPI0 0x1804
> +#define CLK_CON_DIV_DIV_CLK_PERI_SPI1 0x1808
> +#define CLK_CON_DIV_DIV_CLK_PERI_SPI2 0x180c
> +#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
> +#define CLK_CON_GAT_GATE_CLK_PERI_SPI1 0x2010
> +#define CLK_CON_GAT_GATE_CLK_PERI_SPI2 0x2014
> +#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_CLK 0x2068
> +#define CLK_CON_GAT_GOUT_PERI_MCT_PCLK 0x206c
> +#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
> +#define CLK_CON_GAT_GOUT_PERI_SPI_0_PCLK 0x209c
> +#define CLK_CON_GAT_GOUT_PERI_SPI_1_IPCLK 0x20a0
> +#define CLK_CON_GAT_GOUT_PERI_SPI_1_PCLK 0x20a4
> +#define CLK_CON_GAT_GOUT_PERI_SPI_2_IPCLK 0x20a8
> +#define CLK_CON_GAT_GOUT_PERI_SPI_2_PCLK 0x20ac
> +#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,
> + CMU_CMU_PERI_CONTROLLER_OPTION,
> + 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_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, 0, 0),
> + GATE(CLK_GOUT_CLK_PERI_SPI0, "gout_clk_peri_spi0", "mout_pll_peri_ip_user",
> + CLK_CON_GAT_GATE_CLK_PERI_SPI0, 21, 0, 0),
> + GATE(CLK_GOUT_CLK_PERI_SPI1, "gout_clk_peri_spi1", "mout_pll_peri_ip_user",
> + CLK_CON_GAT_GATE_CLK_PERI_SPI1, 21, 0, 0),
> + GATE(CLK_GOUT_CLK_PERI_SPI2, "gout_clk_peri_spi2", "mout_pll_peri_ip_user",
> + CLK_CON_GAT_GATE_CLK_PERI_SPI2, 21, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 0),
> + GATE(CLK_GOUT_PERI_GPIO_PCLK, "gout_peri_gpio_pclk", "mout_pll_peri_bus_user",
> + CLK_CON_GAT_GOUT_PERI_GPIO_PCLK, 21, 0, 0),
> + GATE(CLK_GOUT_PERI_LHM_AXI_P_CLK, "gout_peri_lhm_axi_p_clk",
> + "mout_pll_peri_bus_user", CLK_CON_GAT_GOUT_PERI_LHM_AXI_P_CLK,
> + 21, 0, 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, 0, 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, 0, 0),
> + GATE(CLK_GOUT_PERI_BUS_CLK, "gout_peri_bus_clk", "mout_pll_peri_bus_user",
> + CLK_CON_GAT_GOUT_PERI_BUS_CLK, 21, 0, 0),
> + GATE(CLK_GOUT_PERI_I2C_CLK, "gout_peri_i2c_clk", "dout_clk_peri_i2c",
> + CLK_CON_GAT_GOUT_PERI_I2C_CLK, 21, 0, 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, 0, 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, 0, 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, 0, 0),
> + GATE(CLK_GOUT_PERI_UART_CLK, "gout_peri_uart_clk", "mout_pll_peri_uart_user",
> + CLK_CON_GAT_GOUT_PERI_UART_CLK, 21, 0, 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, 0, 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, 0, 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, 0, 0),
> + GATE(CLK_GOUT_PERI_SPI_0_IPCLK, "gout_peri_spi_0_ipclk", "dout_clk_peri_spi0",
> + CLK_CON_GAT_GOUT_PERI_SPI_0_IPCLK, 21, 0, 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, 0, 0),
> + GATE(CLK_GOUT_PERI_SPI_1_IPCLK, "gout_peri_spi_1_ipclk", "dout_clk_peri_spi1",
> + CLK_CON_GAT_GOUT_PERI_SPI_1_IPCLK, 21, 0, 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, 0, 0),
> + GATE(CLK_GOUT_PERI_SPI_2_IPCLK, "gout_peri_spi_2_ipclk", "dout_clk_peri_spi2",
> + CLK_CON_GAT_GOUT_PERI_SPI_2_IPCLK, 21, 0, 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, 0, 0),
> + GATE(CLK_GOUT_PERI_UART_PCLK, "gout_peri_uart_pclk", "mout_pll_peri_bus_user",
> + CLK_CON_GAT_GOUT_PERI_UART_PCLK, 21, 0, 0),
> + GATE(CLK_GOUT_PERI_USI00_I2C_IPCLK, "gout_peri_usi00_i2c_ipclk",
> + "dout_clk_peri_usi_i2c", CLK_CON_GAT_GOUT_PERI_USI00_I2C_IPCLK,
> + 21, 0, 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, 0, 0),
> + GATE(CLK_GOUT_PERI_USI00_USI_IPCLK, "gout_peri_usi00_usi_ipclk",
> + "dout_clk_peri_usi_usi", CLK_CON_GAT_GOUT_PERI_USI00_USI_IPCLK,
> + 21, 0, 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, 0, 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, 0, 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, 0, 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,
> + .auto_clock_gate = true,
> + .gate_dbg_offset = EXYNOS9610_GATE_DBG_OFFSET,
> + .option_offset = CMU_CMU_PERI_CONTROLLER_OPTION,
> +};
> +
> +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 CMU_CMU_APM_CONTROLLER_OPTION 0x0800
> +#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,
> + CMU_CMU_APM_CONTROLLER_OPTION,
> + 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, 0, 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, 0, 0),
> + GATE(CLK_GOUT_CLK_APM_OSCCLK_CLK, "gat_clk_apm_oscclk_clk", "oscclk",
> + CLK_CON_GAT_CLK_APM_OSCCLK_CLK, 21, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 0),
> + GATE(CLK_GOUT_APM_GREBEINTEGRATION_HCLK, "gout_apm_grebeintegration_hclk",
> + "dout_clk_apm_bus", CLK_CON_GAT_GOUT_APM_GREBEINTEGRATION_HCLK,
> + 21, 0, 0),
> + GATE(CLK_GOUT_APM_INTMEM_ACLK, "gout_apm_intmem_aclk", "dout_clk_apm_bus",
> + CLK_CON_GAT_GOUT_APM_INTMEM_ACLK, 21, 0, 0),
> + GATE(CLK_GOUT_APM_INTMEM_PCLK, "gout_apm_intmem_pclk", "dout_clk_apm_bus",
> + CLK_CON_GAT_GOUT_APM_INTMEM_PCLK, 21, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 0),
> + GATE(CLK_GOUT_APM_PEM_CLK, "gout_apm_pem_clk", "dout_clk_apm_bus",
> + CLK_CON_GAT_GOUT_APM_PEM_CLK, 21, 0, 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, 0, 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, 0, 0),
> + GATE(CLK_GOUT_APM_BUS_CLK, "gout_apm_bus_clk", "dout_clk_apm_bus",
> + CLK_CON_GAT_GOUT_APM_BUS_CLK, 21, 0, 0),
> + GATE(CLK_GOUT_APM_GREBE_CLK, "gout_apm_grebe_clk", "dout_clk_apm_bus",
> + CLK_CON_GAT_GOUT_APM_GREBE_CLK, 21, 0, 0),
> + GATE(CLK_GOUT_APM_SPEEDY_PCLK, "gout_apm_speedy_pclk", "dout_clk_apm_bus",
> + CLK_CON_GAT_GOUT_APM_SPEEDY_PCLK, 21, 0, 0),
> + GATE(CLK_GOUT_APM_SYSREG_PCLK, "gout_apm_sysreg_pclk", "dout_clk_apm_bus",
> + CLK_CON_GAT_GOUT_APM_SYSREG_PCLK, 21, 0, 0),
> + GATE(CLK_GOUT_APM_WDT_PCLK, "gout_apm_wdt_pclk", "dout_clk_apm_bus",
> + CLK_CON_GAT_GOUT_APM_WDT_PCLK, 21, 0, 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, 0, 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,
> + .auto_clock_gate = true,
> + .gate_dbg_offset = EXYNOS9610_GATE_DBG_OFFSET,
> + .option_offset = CMU_CMU_APM_CONTROLLER_OPTION,
> +};
> +
> +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 CMU_CMU_CAM_CONTROLLER_OPTION 0x0800
> +#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,
> + CMU_CMU_CAM_CONTROLLER_OPTION,
> + 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, 0, 0),
> + GATE(CLK_GAT_CLK_CAM_OSCCLK_CLK, "gat_clk_cam_oscclk_clk", "oscclk",
> + CLK_CON_GAT_CLK_CAM_OSCCLK_CLK, 21, 0, 0),
> + GATE(CLK_GOUT_CAM_BUSD, "gout_cam_busd", "mout_pll_cam_bus_user",
> + CLK_CON_GAT_GOUT_CAM_BUSD, 21, 0, 0),
> + GATE(CLK_GOUT_CAM_BTM_ACLK, "gout_cam_btm_aclk", "mout_pll_cam_bus_user",
> + CLK_CON_GAT_GOUT_CAM_BTM_ACLK, 21, 0, 0),
> + GATE(CLK_GOUT_CAM_BTM_PCLK, "gout_cam_btm_pclk", "dout_clk_cam_busp",
> + CLK_CON_GAT_GOUT_CAM_BTM_PCLK, 21, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 0),
> + GATE(CLK_GOUT_CAM_BUSD_CLK, "gout_cam_busd_clk", "mout_pll_cam_bus_user",
> + CLK_CON_GAT_GOUT_CAM_BUSD_CLK, 21, 0, 0),
> + GATE(CLK_GOUT_CAM_BUSP_CLK, "gout_cam_busp_clk", "dout_clk_cam_busp",
> + CLK_CON_GAT_GOUT_CAM_BUSP_CLK, 21, 0, 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,
> + .sysreg_clk_regs = drcg_alt_memclk_sysreg,
> + .nr_sysreg_clk_regs = ARRAY_SIZE(drcg_alt_memclk_sysreg),
> + .auto_clock_gate = true,
> + .gate_dbg_offset = EXYNOS9610_GATE_DBG_OFFSET,
> + .drcg_offset = EXYNOS9610_ALT_DRCG_EN_OFFSET,
> + .memclk_offset = EXYNOS9610_MEMCLK_OFFSET,
> + .option_offset = CMU_CMU_CAM_CONTROLLER_OPTION,
> +};
> +
> +/* CMU_CMGP */
> +#define CMU_CMU_CMGP_CONTROLLER_OPTION 0x0800
> +#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 = {
> + CMU_CMU_CMGP_CONTROLLER_OPTION,
> + 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_bus_user_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_bus_user_p,
> + CLK_CON_MUX_MUX_CLK_CMGP_I2C, 0, 1),
> + MUX(CLK_MOUT_CLK_CMGP_USI00, "mout_clk_cmgp_usi00", mout_clk_cmgp_bus_user_p,
> + CLK_CON_MUX_MUX_CLK_CMGP_USI00, 0, 1),
> + MUX(CLK_MOUT_CLK_CMGP_USI01, "mout_clk_cmgp_usi01", mout_clk_cmgp_bus_user_p,
> + CLK_CON_MUX_MUX_CLK_CMGP_USI01, 0, 1),
> + MUX(CLK_MOUT_CLK_CMGP_USI02, "mout_clk_cmgp_usi02", mout_clk_cmgp_bus_user_p,
> + CLK_CON_MUX_MUX_CLK_CMGP_USI02, 0, 1),
> + MUX(CLK_MOUT_CLK_CMGP_USI03, "mout_clk_cmgp_usi03", mout_clk_cmgp_bus_user_p,
> + CLK_CON_MUX_MUX_CLK_CMGP_USI03, 0, 1),
> + MUX(CLK_MOUT_CLK_CMGP_USI04, "mout_clk_cmgp_usi04", mout_clk_cmgp_bus_user_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, 0, 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, 0, 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, 0, 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, 0, 0),
> + GATE(CLK_GOUT_CMGP_GPIO_PCLK, "gout_clk_cmgp_gpio_pclk",
> + "gout_cmu_cmgp_bus", CLK_CON_GAT_GOUT_CMGP_GPIO_PCLK,
> + 21, 0, 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, 0, 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_PCLK,
> + 21, 0, 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, 0, 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_PCLK,
> + 21, 0, 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, 0, 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_PCLK,
> + 21, 0, 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, 0, 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_PCLK,
> + 21, 0, 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, 0, 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_PCLK,
> + 21, 0, 0),
> + GATE(CLK_GOUT_CMGP_BUS_CLK, "gout_cmgp_bus_clk",
> + "gout_cmu_cmgp_bus", CLK_CON_GAT_GOUT_CMGP_BUS_CLK,
> + 21, 0, 0),
> + GATE(CLK_GOUT_CMGP_I2C_CLK, "gout_cmgp_i2c_clk",
> + "dout_clk_cmgp_i2c", CLK_CON_GAT_GOUT_CMGP_I2C_CLK,
> + 21, 0, 0),
> + GATE(CLK_GOUT_CMGP_USI00_CLK, "gout_cmgp_usi00_clk",
> + "mout_clk_cmgp_usi00", CLK_CON_GAT_GOUT_CMGP_USI00_CLK,
> + 21, 0, 0),
> + GATE(CLK_GOUT_CMGP_USI01_CLK, "gout_cmgp_usi01_clk",
> + "mout_clk_cmgp_usi01", CLK_CON_GAT_GOUT_CMGP_USI01_CLK,
> + 21, 0, 0),
> + GATE(CLK_GOUT_CMGP_USI02_CLK, "gout_cmgp_usi02_clk",
> + "mout_clk_cmgp_usi02", CLK_CON_GAT_GOUT_CMGP_USI02_CLK,
> + 21, 0, 0),
> + GATE(CLK_GOUT_CMGP_USI03_CLK, "gout_cmgp_usi03_clk",
> + "mout_clk_cmgp_usi03", CLK_CON_GAT_GOUT_CMGP_USI03_CLK,
> + 21, 0, 0),
> + GATE(CLK_GOUT_CMGP_USI04_CLK, "gout_cmgp_usi04_clk",
> + "mout_clk_cmgp_usi04", CLK_CON_GAT_GOUT_CMGP_USI04_CLK,
> + 21, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 0),
> + GATE(CLK_GOUT_CMGP_SYSREG_PCLK, "gout_cmgp_sysreg_pclk",
> + "gout_cmu_cmgp_bus", CLK_CON_GAT_GOUT_CMGP_SYSREG_PCLK,
> + 21, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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,
> + .auto_clock_gate = true,
> + .gate_dbg_offset = EXYNOS9610_GATE_DBG_OFFSET,
> + .option_offset = CMU_CMU_CMGP_CONTROLLER_OPTION,
> +};
> +
> +/* 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 CMU_CMU_CORE_CONTROLLER_OPTION 0x0800
> +#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,
> + CMU_CMU_CORE_CONTROLLER_OPTION,
> + 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 0),
> + GATE(CLK_GOUT_CORE_DIT_ICLKL2A, "gout_core_dit_iclkl2a",
> + "mout_pll_core_bus_user", CLK_CON_GAT_GOUT_CORE_DIT_ICLKL2A,
> + 21, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 0),
> + GATE(CLK_GOUT_CORE_BUSD_CLK, "gout_core_busd_clk", "mout_pll_core_bus_user",
> + CLK_CON_GAT_GOUT_CORE_BUSD_CLK, 21, 0, 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, 0, 0),
> + GATE(CLK_GOUT_CORE_BUSP_CLK, "gout_core_busp_clk", "dout_clk_core_busp",
> + CLK_CON_GAT_GOUT_CORE_BUSP_CLK, 21, 0, 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, 0, 0),
> + GATE(CLK_GOUT_CORE_CCI_CLK, "gout_core_cci_clk", "mout_pll_core_cci_user",
> + CLK_CON_GAT_GOUT_CORE_CCI_CLK, 21, 0, 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, 0, 0),
> + GATE(CLK_GOUT_CORE_G3D_CLK, "gout_core_g3d_clk", "mout_pll_core_g3d_user",
> + CLK_CON_GAT_GOUT_CORE_G3D_CLK, 21, 0, 0),
> + GATE(CLK_GOUT_CORE_G3D_OCC_CLK, "gout_core_g3d_occ_clk",
> + "mout_pll_core_g3d_user", CLK_CON_GAT_GOUT_CORE_G3D_OCC_CLK,
> + 21, 0, 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, 0, 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, 0, 0),
> + GATE(CLK_GOUT_CORE_SIREX_ACLK, "gout_core_sirex_aclk", "mout_pll_core_bus_user",
> + CLK_CON_GAT_GOUT_CORE_SIREX_ACLK, 21, 0, 0),
> + GATE(CLK_GOUT_CORE_SIREX_PCLK, "gout_core_sirex_pclk", "dout_clk_core_busp",
> + CLK_CON_GAT_GOUT_CORE_SIREX_PCLK, 21, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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,
> + .auto_clock_gate = true,
> + .gate_dbg_offset = EXYNOS9610_GATE_DBG_OFFSET,
> + .option_offset = CMU_CMU_CORE_CONTROLLER_OPTION,
> +};
> +
> +/* 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 CMU_CMU_DISPAUD_CONTROLLER_OPTION 0x0800
> +#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,
> + CMU_CMU_DISPAUD_CONTROLLER_OPTION,
> + 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 0),
> + GATE(CLK_GOUT_CLK_DISPAUD_OSCCLK_CLK, "gout_clk_dispaud_oscclk_clk", "oscclk",
> + CLK_CON_GAT_CLK_DISPAUD_OSCCLK_CLK, 21, 0, 0),
> + GATE(CLK_GOUT_DISPAUD_ABOX_ACLK, "gout_clk_dispaud_abox_aclk", "mout_clk_aud_bus",
> + CLK_CON_GAT_GOUT_DISPAUD_ABOX_ACLK, 21, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 0),
> + GATE(CLK_GOUT_DISPAUD_BTM_DPU_ACLK, "gout_dispaud_btm_dpu_aclk",
> + "mout_pll_dispaud_disp_user", CLK_CON_GAT_GOUT_DISPAUD_BTM_DPU_ACLK,
> + 21, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 0),
> + GATE(CLK_GOUT_DISPAUD_LHS_ACEL_D_DPU_CLK, "gout_dispaud_lhs_acel_d_dpu_clk",
> + "mout_pll_dispaud_disp_user", CLK_CON_GAT_GOUT_DISPAUD_LHS_ACEL_D_DPU_CLK,
> + 21, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 0),
> + GATE(CLK_GOUT_DISPAUD_PPMU_DPU_ACLK, "gout_dispaud_ppmu_dpu_aclk",
> + "mout_pll_dispaud_disp_user", CLK_CON_GAT_GOUT_DISPAUD_PPMU_DPU_ACLK,
> + 21, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 0),
> + GATE(CLK_GOUT_DISPAUD_CLK_DISP_CLK, "gout_dispaud_clk_disp_clk",
> + "mout_pll_dispaud_disp_user", CLK_CON_GAT_GOUT_DISPAUD_CLK_DISP_CLK,
> + 21, 0, 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, 0, 0),
> + GATE(CLK_GOUT_DISPAUD_SMMU_DPU_CLK, "gout_dispaud_smmu_dpu_clk",
> + "mout_pll_dispaud_disp_user", CLK_CON_GAT_GOUT_DISPAUD_SMMU_DPU_CLK,
> + 21, 0, 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, 0, 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),
> + .sysreg_clk_regs = drcg_memclk_sysreg,
> + .nr_sysreg_clk_regs = ARRAY_SIZE(drcg_memclk_sysreg),
> + .auto_clock_gate = true,
> + .gate_dbg_offset = EXYNOS9610_GATE_DBG_OFFSET,
> + .drcg_offset = EXYNOS9610_DRCG_EN_OFFSET,
> + .memclk_offset = EXYNOS9610_MEMCLK_OFFSET,
> + .option_offset = CMU_CMU_DISPAUD_CONTROLLER_OPTION,
> +};
> +
> +/* 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 CMU_CMU_FSYS_CONTROLLER_OPTION 0x0800
> +#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,
> + CMU_CMU_FSYS_CONTROLLER_OPTION,
> + 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_CLK_UNIPRO,
> + 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, 0, 0),
> + GATE(CLK_GOUT_FSYS_OSCCLK_CLK, "gout_fsys_oscclk_clk", "oscclk",
> + CLK_CON_GAT_CLK_FSYS_OSCCLK_CLK, 21, 0, 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, 0, 0),
> + GATE(CLK_GOUT_FSYS_BTM_ACLK, "gout_fsys_btm_aclk", "mout_pll_fsys_bus_user",
> + CLK_CON_GAT_GOUT_FSYS_BTM_ACLK, 21, 0, 0),
> + GATE(CLK_GOUT_FSYS_BTM_PCLK, "gout_fsys_btm_pclk", "mout_pll_fsys_bus_user",
> + CLK_CON_GAT_GOUT_FSYS_BTM_PCLK, 21, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 0),
> + GATE(CLK_GOUT_FSYS_PPMU_ACLK, "gout_fsys_ppmu_aclk", "mout_pll_fsys_bus_user",
> + CLK_CON_GAT_GOUT_FSYS_PPMU_ACLK, 21, 0, 0),
> + GATE(CLK_GOUT_FSYS_PPMU_PCLK, "gout_fsys_ppmu_pclk", "mout_pll_fsys_bus_user",
> + CLK_CON_GAT_GOUT_FSYS_PPMU_PCLK, 21, 0, 0),
> + GATE(CLK_GOUT_FSYS_BUS_CLK, "gout_fsys_bus_clk", "mout_pll_fsys_bus_user",
> + CLK_CON_GAT_GOUT_FSYS_BUS_CLK, 21, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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,
> + .auto_clock_gate = true,
> + .gate_dbg_offset = EXYNOS9610_GATE_DBG_OFFSET,
> + .option_offset = CMU_CMU_FSYS_CONTROLLER_OPTION,
> +};
> +
> +/* 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 CMU_CMU_G2D_CONTROLLER_OPTION 0x0800
> +#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_ACLK 0x2020
> +#define CLK_CON_GAT_GOUT_G2D_BTM_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,
> + CMU_CMU_G2D_CONTROLLER_OPTION,
> + 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_ACLK,
> + CLK_CON_GAT_GOUT_G2D_BTM_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,
> + 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, 0, 0),
> + GATE(CLK_GOUT_CLK_G2D_OSCCLK_CLK, "gout_clk_g2d_oscclk_clk", "oscclk",
> + CLK_CON_GAT_CLK_G2D_OSCCLK_CLK, 21, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 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, 0, 0),
> + GATE(CLK_GOUT_G2D_BTM_ACLK, "gout_g2d_btm_aclk", "mout_pll_g2d_g2d_user",
> + CLK_CON_GAT_GOUT_G2D_BTM_ACLK, 21, 0, 0),
> + GATE(CLK_GOUT_G2D_BTM_PCLK, "gout_g2d_btm_pclk", "dout_clk_g2d_busp",
> + CLK_CON_GAT_GOUT_G2D_BTM_PCLK, 21, 0, 0),
> + GATE(CLK_GOUT_G2D_G2D_ACLK, "gout_g2d_g2d_aclk", "mout_pll_g2d_g2d_user",
> + CLK_CON_GAT_GOUT_G2D_G2D_ACLK, 21, 0, 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, 0, 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, 0, 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, 0, 0),
> + GATE(CLK_GOUT_G2D_MSCL_ACLK, "gout_g2d_mscl_aclk", "mout_pll_g2d_mscl_user",
> + CLK_CON_GAT_GOUT_G2D_MSCL_ACLK, 21, 0, 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, 0, 0),
> + GATE(CLK_GOUT_G2D_PPMU_ACLK, "gout_g2d_ppmu_aclk", "mout_pll_g2d_g2d_user",
> + CLK_CON_GAT_GOUT_G2D_PPMU_ACLK, 21, 0, 0),
> + GATE(CLK_GOUT_G2D_PPMU_PCLK, "gout_g2d_ppmu_pclk", "dout_clk_g2d_busp",
> + CLK_CON_GAT_GOUT_G2D_PPMU_PCLK, 21, 0, 0),
> + GATE(CLK_GOUT_G2D_BUSP_CLK, "gout_g2d_busp_clk", "dout_clk_g2d_busp",
> + CLK_CON_GAT_GOUT_G2D_BUSP_CLK, 21, 0, 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, 0, 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,
> + .sysreg_clk_regs = drcg_memclk_sysreg,
> + .nr_sysreg_clk_regs = ARRAY_SIZE(drcg_memclk_sysreg),
> + .auto_clock_gate = true,
> + .gate_dbg_offset = EXYNOS9610_GATE_DBG_OFFSET,
> + .drcg_offset = EXYNOS9610_DRCG_EN_OFFSET,
> + .memclk_offset = EXYNOS9610_MEMCLK_OFFSET,
> + .option_offset = CMU_CMU_G2D_CONTROLLER_OPTION,
> +};
> +
> +/* 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 CMU_CMU_G3D_CONTROLLER_OPTION 0x0800
> +#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_ACLK 0x2014
> +#define CLK_CON_GAT_GOUT_G3D_BTM_PCLK 0x2018
> +#define CLK_CON_GAT_GOUT_G3D_BUSIF_HPMG3D_PCLK 0x201c
> +#define CLK_CON_GAT_GOUT_G3D_GRAY2BIN_CLK 0x2020
> +#define CLK_CON_GAT_GOUT_G3D_LHM_AXI_G3DSFR_CLK 0x2024
> +#define CLK_CON_GAT_GOUT_G3D_LHM_AXI_P_CLK 0x2028
> +#define CLK_CON_GAT_GOUT_G3D_LHS_AXI_D_CLK 0x202c
> +#define CLK_CON_GAT_GOUT_G3D_LHS_AXI_G3DSFR_CLK 0x2030
> +#define CLK_CON_GAT_GOUT_G3D_PGEN_LITE_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,
> + CMU_CMU_G3D_CONTROLLER_OPTION,
> + 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_ACLK,
> + CLK_CON_GAT_GOUT_G3D_BTM_PCLK,
> + CLK_CON_GAT_GOUT_G3D_BUSIF_HPMG3D_PCLK,
> + CLK_CON_GAT_GOUT_G3D_GRAY2BIN_CLK,
> + CLK_CON_GAT_GOUT_G3D_LHM_AXI_G3DSFR_CLK,
> + CLK_CON_GAT_GOUT_G3D_LHM_AXI_P_CLK,
> + CLK_CON_GAT_GOUT_G3D_LHS_AXI_D_CLK,
> + CLK_CON_GAT_GOUT_G3D_LHS_AXI_G3DSFR_CLK,
> + CLK_CON_GAT_GOUT_G3D_PGEN_LITE_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, 0, 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, 0, 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, 0, 0),
> + GATE(CLK_GOUT_CLK_G3D_OSCCLK_CLK, "gout_clk_g3d_oscclk_clk", "oscclk",
> + CLK_CON_GAT_CLK_G3D_OSCCLK_CLK, 21, 0, 0),
> + GATE(CLK_GOUT_G3D_BTM_ACLK, "gout_g3d_btm_aclk", "dout_clk_g3d_busd",
> + CLK_CON_GAT_GOUT_G3D_BTM_ACLK, 21, 0, 0),
> + GATE(CLK_GOUT_G3D_BTM_PCLK, "gout_g3d_btm_pclk", "dout_clk_g3d_busp",
> + CLK_CON_GAT_GOUT_G3D_BTM_PCLK, 21, 0, 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, 0, 0),
> + GATE(CLK_GOUT_G3D_GRAY2BIN_CLK, "gout_g3d_gray2bin_clk",
> + "dout_clk_g3d_busd", CLK_CON_GAT_GOUT_G3D_GRAY2BIN_CLK,
> + 21, 0, 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, 0, 0),
> + GATE(CLK_GOUT_G3D_LHM_AXI_P_CLK, "gout_g3d_lhm_axi_p_clk",
> + "dout_clk_g3d_busp", CLK_CON_GAT_GOUT_G3D_LHM_AXI_P_CLK,
> + 21, 0, 0),
> + GATE(CLK_GOUT_G3D_LHS_AXI_D_CLK, "gout_g3d_lhs_axi_d_clk",
> + "dout_clk_g3d_busd", CLK_CON_GAT_GOUT_G3D_LHS_AXI_D_CLK,
> + 21, 0, 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, 0, 0),
> + GATE(CLK_GOUT_G3D_PGEN_LITE_CLK, "gout_g3d_pgen_lite_clk",
> + "dout_clk_g3d_busp", CLK_CON_GAT_GOUT_G3D_PGEN_LITE_CLK,
> + 21, 0, 0),
> + GATE(CLK_GOUT_G3D_BUSD_CLK, "gout_g3d_busd_clk", "dout_clk_g3d_busd",
> + CLK_CON_GAT_GOUT_G3D_BUSD_CLK, 21, 0, 0),
> + GATE(CLK_GOUT_G3D_BUSP_CLK, "gout_g3d_busp_clk", "dout_clk_g3d_busp",
> + CLK_CON_GAT_GOUT_G3D_BUSP_CLK, 21, 0, 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,
> + .auto_clock_gate = true,
> + .gate_dbg_offset = EXYNOS9610_GATE_DBG_OFFSET,
> + .option_offset = CMU_CMU_G3D_CONTROLLER_OPTION,
> +};
> +
> +/* CMU_USB */
> +#define PLL_CON0_MUX_CLKCMU_USB_BUS_USER 0x0100
> +#define PLL_CON2_MUX_CLKCMU_USB_BUS_USER 0x0108
> +#define PLL_CON0_MUX_CLKCMU_USB_DPGTC_USER 0x0120
> +#define PLL_CON2_MUX_CLKCMU_USB_DPGTC_USER 0x0128
> +#define PLL_CON0_MUX_CLKCMU_USB_USB30DRD_USER 0x0140
> +#define PLL_CON2_MUX_CLKCMU_USB_USB30DRD_USER 0x0148
> +#define CMU_CMU_USB_CONTROLLER_OPTION 0x0800
> +#define CLK_CON_GAT_CLK_USB_OSCCLK_CLK 0x2000
> +#define CLK_CON_GAT_CLK_USB_CMU_PCLK 0x2004
> +#define CLK_CON_GOUT_USB_BTM_ACLK 0x2008
> +#define CLK_CON_GOUT_USB_BTM_PCLK 0x200c
> +#define CLK_CON_GOUT_USB_DP_LINK_DPTX_LINK_DP_GTC_CLK 0x2010
> +#define CLK_CON_GOUT_USB_DP_LINK_DPTX_LINK_PCLK 0x2014
> +#define CLK_CON_GOUT_USB_LHM_AXI_P_CLK 0x2018
> +#define CLK_CON_GOUT_USB_LHS_ACEL_D_CLK 0x201c
> +#define CLK_CON_GOUT_USB_PGEN_LITE_CLK 0x2020
> +#define CLK_CON_GOUT_USB_PPMU_ACLK 0x2024
> +#define CLK_CON_GOUT_USB_PPMU_PCLK 0x2028
> +#define CLK_CON_GOUT_USB_BUS_CLK 0x202c
> +#define CLK_CON_GOUT_USB_SYSREG_PCLK 0x2030
> +#define CLK_CON_GOUT_USB_USB30DRD_ACLK_PHYCTRL_20 0x2034
> +#define CLK_CON_GOUT_USB_USB30DRD_ACLK_PHYCTRL_30_0 0x2038
> +#define CLK_CON_GOUT_USB_USB30DRD_ACLK_PHYCTRL_30_1 0x203c
> +#define CLK_CON_GOUT_USB_USB30DRD_BUS_CLK_EARLY 0x2040
> +#define CLK_CON_GOUT_USB_USB30DRD_REF_CLK 0x2044
> +#define CLK_CON_GOUT_USB_US_D_ACLK 0x2048
> +
> +static const unsigned long usb_clk_regs[] __initconst = {
> + PLL_CON0_MUX_CLKCMU_USB_BUS_USER,
> + PLL_CON2_MUX_CLKCMU_USB_BUS_USER,
> + PLL_CON0_MUX_CLKCMU_USB_DPGTC_USER,
> + PLL_CON2_MUX_CLKCMU_USB_DPGTC_USER,
> + PLL_CON0_MUX_CLKCMU_USB_USB30DRD_USER,
> + PLL_CON2_MUX_CLKCMU_USB_USB30DRD_USER,
> + CMU_CMU_USB_CONTROLLER_OPTION,
> + CLK_CON_GAT_CLK_USB_OSCCLK_CLK,
> + CLK_CON_GAT_CLK_USB_CMU_PCLK,
> + CLK_CON_GOUT_USB_BTM_ACLK,
> + CLK_CON_GOUT_USB_BTM_PCLK,
> + CLK_CON_GOUT_USB_DP_LINK_DPTX_LINK_DP_GTC_CLK,
> + CLK_CON_GOUT_USB_DP_LINK_DPTX_LINK_PCLK,
> + CLK_CON_GOUT_USB_LHM_AXI_P_CLK,
> + CLK_CON_GOUT_USB_LHS_ACEL_D_CLK,
> + CLK_CON_GOUT_USB_PGEN_LITE_CLK,
> + CLK_CON_GOUT_USB_PPMU_ACLK,
> + CLK_CON_GOUT_USB_PPMU_PCLK,
> + CLK_CON_GOUT_USB_BUS_CLK,
> + CLK_CON_GOUT_USB_SYSREG_PCLK,
> + CLK_CON_GOUT_USB_USB30DRD_ACLK_PHYCTRL_20,
> + CLK_CON_GOUT_USB_USB30DRD_ACLK_PHYCTRL_30_0,
> + CLK_CON_GOUT_USB_USB30DRD_ACLK_PHYCTRL_30_1,
> + CLK_CON_GOUT_USB_USB30DRD_BUS_CLK_EARLY,
> + CLK_CON_GOUT_USB_USB30DRD_REF_CLK,
> + CLK_CON_GOUT_USB_US_D_ACLK,
> +};
> +
> +PNAME(mout_usb_bus_user_p) = { "oscclk", "dout_cmu_usb_bus" };
> +PNAME(mout_usb_dpgtc_user_p) = { "oscclk", "dout_cmu_usb_dpgtc" };
> +PNAME(mout_usb_usb30drd_user_p) = { "oscclk", "dout_cmu_usb_usb30drd" };
> +
> +static const struct samsung_mux_clock usb_mux_clks[] __initconst = {
> + MUX(CLK_MOUT_USB_BUS_USER, "mout_usb_bus_user", mout_usb_bus_user_p,
> + PLL_CON0_MUX_CLKCMU_USB_BUS_USER, 4, 1),
> + MUX(CLK_MOUT_USB_DPGTC_USER, "mout_usb_dpgtc_user", mout_usb_dpgtc_user_p,
> + PLL_CON0_MUX_CLKCMU_USB_DPGTC_USER, 4, 1),
> + MUX(CLK_MOUT_USB_USB30DRD_USER, "mout_usb_usb30drd_user", mout_usb_usb30drd_user_p,
> + PLL_CON0_MUX_CLKCMU_USB_USB30DRD_USER, 4, 1),
> +};
> +
> +static const struct samsung_gate_clock usb_gate_clks[] __initconst = {
> + GATE(CLK_GOUT_CLK_USB_OSCCLK_CLK, "gout_clk_usb_oscclk_clk", "oscclk",
> + CLK_CON_GAT_CLK_USB_OSCCLK_CLK, 21, 0, 0),
> + GATE(CLK_GOUT_CLK_USB_CMU_PCLK, "gout_clk_usb_cmu_pclk", "mout_usb_bus_user",
> + CLK_CON_GAT_CLK_USB_CMU_PCLK, 21, 0, 0),
> + GATE(CLK_GOUT_USB_BTM_ACLK, "gout_usb_btm_aclk", "mout_usb_bus_user",
> + CLK_CON_GOUT_USB_BTM_ACLK, 21, 0, 0),
> + GATE(CLK_GOUT_USB_BTM_PCLK, "gout_usb_btm_pclk", "mout_usb_bus_user",
> + CLK_CON_GOUT_USB_BTM_PCLK, 21, 0, 0),
> + GATE(CLK_GOUT_USB_DP_LINK_DPTX_LINK_DT_GTC_CLK, "gout_usb_dp_link_dptx_link_dt_gtc_clk",
> + "mout_usb_dpgtc_user", CLK_CON_GOUT_USB_DP_LINK_DPTX_LINK_DP_GTC_CLK, 21, 0, 0),
> + GATE(CLK_GOUT_USB_DP_LINK_DPTX_LINK_PCLK, "gout_usb_dp_link_dptx_link_pclk",
> + "mout_usb_bus_user", CLK_CON_GOUT_USB_DP_LINK_DPTX_LINK_PCLK, 21, 0, 0),
> + GATE(CLK_GOUT_USB_LHM_AXI_P_CLK, "gout_usb_lhm_axi_p_clk", "mout_usb_bus_user",
> + CLK_CON_GOUT_USB_LHM_AXI_P_CLK, 21, 0, 0),
> + GATE(CLK_GOUT_USB_LHS_ACEL_D_CLK, "gout_usb_lhs_acel_d_clk", "mout_usb_bus_user",
> + CLK_CON_GOUT_USB_LHS_ACEL_D_CLK, 21, 0, 0),
> + GATE(CLK_GOUT_USB_PGEN_LITE_CLK, "gout_usb_pgen_lite_clk", "mout_usb_bus_user",
> + CLK_CON_GOUT_USB_PGEN_LITE_CLK, 21, 0, 0),
> + GATE(CLK_GOUT_USB_PPMU_ACLK, "gout_usb_ppmu_aclk", "mout_usb_bus_user",
> + CLK_CON_GOUT_USB_PPMU_ACLK, 21, 0, 0),
> + GATE(CLK_GOUT_USB_PPMU_PCLK, "gout_usb_ppmu_pclk", "mout_usb_bus_user",
> + CLK_CON_GOUT_USB_PPMU_PCLK, 21, 0, 0),
> + GATE(CLK_GOUT_USB_BUS_CLK, "gout_usb_bus_clk", "mout_usb_bus_user",
> + CLK_CON_GOUT_USB_BUS_CLK, 21, 0, 0),
> + GATE(CLK_GOUT_USB_SYSREG_PCLK, "gout_usb_sysreg_pclk", "mout_usb_bus_user",
> + CLK_CON_GOUT_USB_SYSREG_PCLK, 21, 0, 0),
> + GATE(CLK_GOUT_USB_USB30DRD_ACLK_PHYCTRL_20, "gout_usb_usb30drd_aclk_phyctrl_20",
> + "mout_usb_bus_user", CLK_CON_GOUT_USB_USB30DRD_ACLK_PHYCTRL_20, 21, 0, 0),
> + GATE(CLK_GOUT_USB_USB30DRD_ACLK_PHYCTRL_30_0, "gout_usb_usb30drd_aclk_phyctrl_30_0",
> + "mout_usb_bus_user", CLK_CON_GOUT_USB_USB30DRD_ACLK_PHYCTRL_30_0, 21, 0, 0),
> + GATE(CLK_GOUT_USB_USB30DRD_ACLK_PHYCTRL_30_1, "gout_usb_usb30drd_aclk_phyctrl_30_1",
> + "mout_usb_bus_user", CLK_CON_GOUT_USB_USB30DRD_ACLK_PHYCTRL_30_1, 21, 0, 0),
> + GATE(CLK_GOUT_USB_USB30DRD_BUS_CLK_EARLY, "gout_usb_usb30drd_bus_clk_early",
> + "mout_usb_bus_user", CLK_CON_GOUT_USB_USB30DRD_BUS_CLK_EARLY, 21, 0, 0),
> + GATE(CLK_GOUT_USB_USB30DRD_REF_CLK, "gout_usb_usb30drd_ref_clk",
> + "mout_usb_usb30drd_user", CLK_CON_GOUT_USB_USB30DRD_REF_CLK, 21, 0, 0),
> + GATE(CLK_GOUT_USB_US_D_ACLK, "gout_usb_us_d_aclk", "mout_usb_bus_user",
> + CLK_CON_GOUT_USB_US_D_ACLK, 21, 0, 0),
> +};
> +
> +static const struct samsung_cmu_info usb_cmu_info __initconst = {
> + .mux_clks = usb_mux_clks,
> + .nr_mux_clks = ARRAY_SIZE(usb_mux_clks),
> + .gate_clks = usb_gate_clks,
> + .nr_gate_clks = ARRAY_SIZE(usb_gate_clks),
> + .clk_regs = usb_clk_regs,
> + .nr_clk_regs = ARRAY_SIZE(usb_clk_regs),
> + .nr_clk_ids = CLKS_NR_USB,
> + .auto_clock_gate = true,
> + .gate_dbg_offset = EXYNOS9610_GATE_DBG_OFFSET,
> + .option_offset = CMU_CMU_USB_CONTROLLER_OPTION,
> +};
> +
> +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,
> + },
> + {
> + .compatible = "samsung,exynos9610-cmu-usb",
> + .data = &usb_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.54.0
>