162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (C) 2021 Linaro Ltd.
462306a36Sopenharmony_ci * Author: Sam Protsenko <semen.protsenko@linaro.org>
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * Common Clock Framework support for Exynos850 SoC.
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <linux/clk.h>
1062306a36Sopenharmony_ci#include <linux/clk-provider.h>
1162306a36Sopenharmony_ci#include <linux/of.h>
1262306a36Sopenharmony_ci#include <linux/platform_device.h>
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#include <dt-bindings/clock/exynos850.h>
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci#include "clk.h"
1762306a36Sopenharmony_ci#include "clk-exynos-arm64.h"
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci/* NOTE: Must be equal to the last clock ID increased by one */
2062306a36Sopenharmony_ci#define CLKS_NR_TOP			(CLK_DOUT_G3D_SWITCH + 1)
2162306a36Sopenharmony_ci#define CLKS_NR_APM			(CLK_GOUT_SYSREG_APM_PCLK + 1)
2262306a36Sopenharmony_ci#define CLKS_NR_AUD			(CLK_GOUT_AUD_CMU_AUD_PCLK + 1)
2362306a36Sopenharmony_ci#define CLKS_NR_CMGP			(CLK_GOUT_SYSREG_CMGP_PCLK + 1)
2462306a36Sopenharmony_ci#define CLKS_NR_G3D			(CLK_GOUT_G3D_SYSREG_PCLK + 1)
2562306a36Sopenharmony_ci#define CLKS_NR_HSI			(CLK_GOUT_HSI_CMU_HSI_PCLK + 1)
2662306a36Sopenharmony_ci#define CLKS_NR_IS			(CLK_GOUT_IS_SYSREG_PCLK + 1)
2762306a36Sopenharmony_ci#define CLKS_NR_MFCMSCL			(CLK_GOUT_MFCMSCL_SYSREG_PCLK + 1)
2862306a36Sopenharmony_ci#define CLKS_NR_PERI			(CLK_GOUT_WDT1_PCLK + 1)
2962306a36Sopenharmony_ci#define CLKS_NR_CORE			(CLK_GOUT_SYSREG_CORE_PCLK + 1)
3062306a36Sopenharmony_ci#define CLKS_NR_DPU			(CLK_GOUT_DPU_SYSREG_PCLK + 1)
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci/* ---- CMU_TOP ------------------------------------------------------------- */
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci/* Register Offset definitions for CMU_TOP (0x120e0000) */
3562306a36Sopenharmony_ci#define PLL_LOCKTIME_PLL_MMC			0x0000
3662306a36Sopenharmony_ci#define PLL_LOCKTIME_PLL_SHARED0		0x0004
3762306a36Sopenharmony_ci#define PLL_LOCKTIME_PLL_SHARED1		0x0008
3862306a36Sopenharmony_ci#define PLL_CON0_PLL_MMC			0x0100
3962306a36Sopenharmony_ci#define PLL_CON3_PLL_MMC			0x010c
4062306a36Sopenharmony_ci#define PLL_CON0_PLL_SHARED0			0x0140
4162306a36Sopenharmony_ci#define PLL_CON3_PLL_SHARED0			0x014c
4262306a36Sopenharmony_ci#define PLL_CON0_PLL_SHARED1			0x0180
4362306a36Sopenharmony_ci#define PLL_CON3_PLL_SHARED1			0x018c
4462306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLKCMU_APM_BUS		0x1000
4562306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLKCMU_AUD		0x1004
4662306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLKCMU_CORE_BUS		0x1014
4762306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLKCMU_CORE_CCI		0x1018
4862306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLKCMU_CORE_MMC_EMBD	0x101c
4962306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLKCMU_CORE_SSS		0x1020
5062306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLKCMU_DPU		0x1034
5162306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLKCMU_G3D_SWITCH	0x1038
5262306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLKCMU_HSI_BUS		0x103c
5362306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLKCMU_HSI_MMC_CARD	0x1040
5462306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLKCMU_HSI_USB20DRD	0x1044
5562306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLKCMU_IS_BUS		0x1048
5662306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLKCMU_IS_GDC		0x104c
5762306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLKCMU_IS_ITP		0x1050
5862306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLKCMU_IS_VRA		0x1054
5962306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLKCMU_MFCMSCL_JPEG	0x1058
6062306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLKCMU_MFCMSCL_M2M	0x105c
6162306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLKCMU_MFCMSCL_MCSC	0x1060
6262306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLKCMU_MFCMSCL_MFC	0x1064
6362306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLKCMU_PERI_BUS		0x1070
6462306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLKCMU_PERI_IP		0x1074
6562306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLKCMU_PERI_UART	0x1078
6662306a36Sopenharmony_ci#define CLK_CON_DIV_CLKCMU_APM_BUS		0x180c
6762306a36Sopenharmony_ci#define CLK_CON_DIV_CLKCMU_AUD			0x1810
6862306a36Sopenharmony_ci#define CLK_CON_DIV_CLKCMU_CORE_BUS		0x1820
6962306a36Sopenharmony_ci#define CLK_CON_DIV_CLKCMU_CORE_CCI		0x1824
7062306a36Sopenharmony_ci#define CLK_CON_DIV_CLKCMU_CORE_MMC_EMBD	0x1828
7162306a36Sopenharmony_ci#define CLK_CON_DIV_CLKCMU_CORE_SSS		0x182c
7262306a36Sopenharmony_ci#define CLK_CON_DIV_CLKCMU_DPU			0x1840
7362306a36Sopenharmony_ci#define CLK_CON_DIV_CLKCMU_G3D_SWITCH		0x1844
7462306a36Sopenharmony_ci#define CLK_CON_DIV_CLKCMU_HSI_BUS		0x1848
7562306a36Sopenharmony_ci#define CLK_CON_DIV_CLKCMU_HSI_MMC_CARD		0x184c
7662306a36Sopenharmony_ci#define CLK_CON_DIV_CLKCMU_HSI_USB20DRD		0x1850
7762306a36Sopenharmony_ci#define CLK_CON_DIV_CLKCMU_IS_BUS		0x1854
7862306a36Sopenharmony_ci#define CLK_CON_DIV_CLKCMU_IS_GDC		0x1858
7962306a36Sopenharmony_ci#define CLK_CON_DIV_CLKCMU_IS_ITP		0x185c
8062306a36Sopenharmony_ci#define CLK_CON_DIV_CLKCMU_IS_VRA		0x1860
8162306a36Sopenharmony_ci#define CLK_CON_DIV_CLKCMU_MFCMSCL_JPEG		0x1864
8262306a36Sopenharmony_ci#define CLK_CON_DIV_CLKCMU_MFCMSCL_M2M		0x1868
8362306a36Sopenharmony_ci#define CLK_CON_DIV_CLKCMU_MFCMSCL_MCSC		0x186c
8462306a36Sopenharmony_ci#define CLK_CON_DIV_CLKCMU_MFCMSCL_MFC		0x1870
8562306a36Sopenharmony_ci#define CLK_CON_DIV_CLKCMU_PERI_BUS		0x187c
8662306a36Sopenharmony_ci#define CLK_CON_DIV_CLKCMU_PERI_IP		0x1880
8762306a36Sopenharmony_ci#define CLK_CON_DIV_CLKCMU_PERI_UART		0x1884
8862306a36Sopenharmony_ci#define CLK_CON_DIV_PLL_SHARED0_DIV2		0x188c
8962306a36Sopenharmony_ci#define CLK_CON_DIV_PLL_SHARED0_DIV3		0x1890
9062306a36Sopenharmony_ci#define CLK_CON_DIV_PLL_SHARED0_DIV4		0x1894
9162306a36Sopenharmony_ci#define CLK_CON_DIV_PLL_SHARED1_DIV2		0x1898
9262306a36Sopenharmony_ci#define CLK_CON_DIV_PLL_SHARED1_DIV3		0x189c
9362306a36Sopenharmony_ci#define CLK_CON_DIV_PLL_SHARED1_DIV4		0x18a0
9462306a36Sopenharmony_ci#define CLK_CON_GAT_GATE_CLKCMU_APM_BUS		0x2008
9562306a36Sopenharmony_ci#define CLK_CON_GAT_GATE_CLKCMU_AUD		0x200c
9662306a36Sopenharmony_ci#define CLK_CON_GAT_GATE_CLKCMU_CORE_BUS	0x201c
9762306a36Sopenharmony_ci#define CLK_CON_GAT_GATE_CLKCMU_CORE_CCI	0x2020
9862306a36Sopenharmony_ci#define CLK_CON_GAT_GATE_CLKCMU_CORE_MMC_EMBD	0x2024
9962306a36Sopenharmony_ci#define CLK_CON_GAT_GATE_CLKCMU_CORE_SSS	0x2028
10062306a36Sopenharmony_ci#define CLK_CON_GAT_GATE_CLKCMU_DPU		0x203c
10162306a36Sopenharmony_ci#define CLK_CON_GAT_GATE_CLKCMU_G3D_SWITCH	0x2040
10262306a36Sopenharmony_ci#define CLK_CON_GAT_GATE_CLKCMU_HSI_BUS		0x2044
10362306a36Sopenharmony_ci#define CLK_CON_GAT_GATE_CLKCMU_HSI_MMC_CARD	0x2048
10462306a36Sopenharmony_ci#define CLK_CON_GAT_GATE_CLKCMU_HSI_USB20DRD	0x204c
10562306a36Sopenharmony_ci#define CLK_CON_GAT_GATE_CLKCMU_IS_BUS		0x2050
10662306a36Sopenharmony_ci#define CLK_CON_GAT_GATE_CLKCMU_IS_GDC		0x2054
10762306a36Sopenharmony_ci#define CLK_CON_GAT_GATE_CLKCMU_IS_ITP		0x2058
10862306a36Sopenharmony_ci#define CLK_CON_GAT_GATE_CLKCMU_IS_VRA		0x205c
10962306a36Sopenharmony_ci#define CLK_CON_GAT_GATE_CLKCMU_MFCMSCL_JPEG	0x2060
11062306a36Sopenharmony_ci#define CLK_CON_GAT_GATE_CLKCMU_MFCMSCL_M2M	0x2064
11162306a36Sopenharmony_ci#define CLK_CON_GAT_GATE_CLKCMU_MFCMSCL_MCSC	0x2068
11262306a36Sopenharmony_ci#define CLK_CON_GAT_GATE_CLKCMU_MFCMSCL_MFC	0x206c
11362306a36Sopenharmony_ci#define CLK_CON_GAT_GATE_CLKCMU_PERI_BUS	0x2080
11462306a36Sopenharmony_ci#define CLK_CON_GAT_GATE_CLKCMU_PERI_IP		0x2084
11562306a36Sopenharmony_ci#define CLK_CON_GAT_GATE_CLKCMU_PERI_UART	0x2088
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_cistatic const unsigned long top_clk_regs[] __initconst = {
11862306a36Sopenharmony_ci	PLL_LOCKTIME_PLL_MMC,
11962306a36Sopenharmony_ci	PLL_LOCKTIME_PLL_SHARED0,
12062306a36Sopenharmony_ci	PLL_LOCKTIME_PLL_SHARED1,
12162306a36Sopenharmony_ci	PLL_CON0_PLL_MMC,
12262306a36Sopenharmony_ci	PLL_CON3_PLL_MMC,
12362306a36Sopenharmony_ci	PLL_CON0_PLL_SHARED0,
12462306a36Sopenharmony_ci	PLL_CON3_PLL_SHARED0,
12562306a36Sopenharmony_ci	PLL_CON0_PLL_SHARED1,
12662306a36Sopenharmony_ci	PLL_CON3_PLL_SHARED1,
12762306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLKCMU_APM_BUS,
12862306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLKCMU_AUD,
12962306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLKCMU_CORE_BUS,
13062306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLKCMU_CORE_CCI,
13162306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLKCMU_CORE_MMC_EMBD,
13262306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLKCMU_CORE_SSS,
13362306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLKCMU_DPU,
13462306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLKCMU_G3D_SWITCH,
13562306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLKCMU_HSI_BUS,
13662306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLKCMU_HSI_MMC_CARD,
13762306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLKCMU_HSI_USB20DRD,
13862306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLKCMU_IS_BUS,
13962306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLKCMU_IS_GDC,
14062306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLKCMU_IS_ITP,
14162306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLKCMU_IS_VRA,
14262306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLKCMU_MFCMSCL_JPEG,
14362306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLKCMU_MFCMSCL_M2M,
14462306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLKCMU_MFCMSCL_MCSC,
14562306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLKCMU_MFCMSCL_MFC,
14662306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLKCMU_PERI_BUS,
14762306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLKCMU_PERI_IP,
14862306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLKCMU_PERI_UART,
14962306a36Sopenharmony_ci	CLK_CON_DIV_CLKCMU_APM_BUS,
15062306a36Sopenharmony_ci	CLK_CON_DIV_CLKCMU_AUD,
15162306a36Sopenharmony_ci	CLK_CON_DIV_CLKCMU_CORE_BUS,
15262306a36Sopenharmony_ci	CLK_CON_DIV_CLKCMU_CORE_CCI,
15362306a36Sopenharmony_ci	CLK_CON_DIV_CLKCMU_CORE_MMC_EMBD,
15462306a36Sopenharmony_ci	CLK_CON_DIV_CLKCMU_CORE_SSS,
15562306a36Sopenharmony_ci	CLK_CON_DIV_CLKCMU_DPU,
15662306a36Sopenharmony_ci	CLK_CON_DIV_CLKCMU_G3D_SWITCH,
15762306a36Sopenharmony_ci	CLK_CON_DIV_CLKCMU_HSI_BUS,
15862306a36Sopenharmony_ci	CLK_CON_DIV_CLKCMU_HSI_MMC_CARD,
15962306a36Sopenharmony_ci	CLK_CON_DIV_CLKCMU_HSI_USB20DRD,
16062306a36Sopenharmony_ci	CLK_CON_DIV_CLKCMU_IS_BUS,
16162306a36Sopenharmony_ci	CLK_CON_DIV_CLKCMU_IS_GDC,
16262306a36Sopenharmony_ci	CLK_CON_DIV_CLKCMU_IS_ITP,
16362306a36Sopenharmony_ci	CLK_CON_DIV_CLKCMU_IS_VRA,
16462306a36Sopenharmony_ci	CLK_CON_DIV_CLKCMU_MFCMSCL_JPEG,
16562306a36Sopenharmony_ci	CLK_CON_DIV_CLKCMU_MFCMSCL_M2M,
16662306a36Sopenharmony_ci	CLK_CON_DIV_CLKCMU_MFCMSCL_MCSC,
16762306a36Sopenharmony_ci	CLK_CON_DIV_CLKCMU_MFCMSCL_MFC,
16862306a36Sopenharmony_ci	CLK_CON_DIV_CLKCMU_PERI_BUS,
16962306a36Sopenharmony_ci	CLK_CON_DIV_CLKCMU_PERI_IP,
17062306a36Sopenharmony_ci	CLK_CON_DIV_CLKCMU_PERI_UART,
17162306a36Sopenharmony_ci	CLK_CON_DIV_PLL_SHARED0_DIV2,
17262306a36Sopenharmony_ci	CLK_CON_DIV_PLL_SHARED0_DIV3,
17362306a36Sopenharmony_ci	CLK_CON_DIV_PLL_SHARED0_DIV4,
17462306a36Sopenharmony_ci	CLK_CON_DIV_PLL_SHARED1_DIV2,
17562306a36Sopenharmony_ci	CLK_CON_DIV_PLL_SHARED1_DIV3,
17662306a36Sopenharmony_ci	CLK_CON_DIV_PLL_SHARED1_DIV4,
17762306a36Sopenharmony_ci	CLK_CON_GAT_GATE_CLKCMU_APM_BUS,
17862306a36Sopenharmony_ci	CLK_CON_GAT_GATE_CLKCMU_AUD,
17962306a36Sopenharmony_ci	CLK_CON_GAT_GATE_CLKCMU_CORE_BUS,
18062306a36Sopenharmony_ci	CLK_CON_GAT_GATE_CLKCMU_CORE_CCI,
18162306a36Sopenharmony_ci	CLK_CON_GAT_GATE_CLKCMU_CORE_MMC_EMBD,
18262306a36Sopenharmony_ci	CLK_CON_GAT_GATE_CLKCMU_CORE_SSS,
18362306a36Sopenharmony_ci	CLK_CON_GAT_GATE_CLKCMU_DPU,
18462306a36Sopenharmony_ci	CLK_CON_GAT_GATE_CLKCMU_G3D_SWITCH,
18562306a36Sopenharmony_ci	CLK_CON_GAT_GATE_CLKCMU_HSI_BUS,
18662306a36Sopenharmony_ci	CLK_CON_GAT_GATE_CLKCMU_HSI_MMC_CARD,
18762306a36Sopenharmony_ci	CLK_CON_GAT_GATE_CLKCMU_HSI_USB20DRD,
18862306a36Sopenharmony_ci	CLK_CON_GAT_GATE_CLKCMU_IS_BUS,
18962306a36Sopenharmony_ci	CLK_CON_GAT_GATE_CLKCMU_IS_GDC,
19062306a36Sopenharmony_ci	CLK_CON_GAT_GATE_CLKCMU_IS_ITP,
19162306a36Sopenharmony_ci	CLK_CON_GAT_GATE_CLKCMU_IS_VRA,
19262306a36Sopenharmony_ci	CLK_CON_GAT_GATE_CLKCMU_MFCMSCL_JPEG,
19362306a36Sopenharmony_ci	CLK_CON_GAT_GATE_CLKCMU_MFCMSCL_M2M,
19462306a36Sopenharmony_ci	CLK_CON_GAT_GATE_CLKCMU_MFCMSCL_MCSC,
19562306a36Sopenharmony_ci	CLK_CON_GAT_GATE_CLKCMU_MFCMSCL_MFC,
19662306a36Sopenharmony_ci	CLK_CON_GAT_GATE_CLKCMU_PERI_BUS,
19762306a36Sopenharmony_ci	CLK_CON_GAT_GATE_CLKCMU_PERI_IP,
19862306a36Sopenharmony_ci	CLK_CON_GAT_GATE_CLKCMU_PERI_UART,
19962306a36Sopenharmony_ci};
20062306a36Sopenharmony_ci
20162306a36Sopenharmony_ci/*
20262306a36Sopenharmony_ci * Do not provide PLL tables to core PLLs, as MANUAL_PLL_CTRL bit is not set
20362306a36Sopenharmony_ci * for those PLLs by default, so set_rate operation would fail.
20462306a36Sopenharmony_ci */
20562306a36Sopenharmony_cistatic const struct samsung_pll_clock top_pll_clks[] __initconst = {
20662306a36Sopenharmony_ci	/* CMU_TOP_PURECLKCOMP */
20762306a36Sopenharmony_ci	PLL(pll_0822x, CLK_FOUT_SHARED0_PLL, "fout_shared0_pll", "oscclk",
20862306a36Sopenharmony_ci	    PLL_LOCKTIME_PLL_SHARED0, PLL_CON3_PLL_SHARED0,
20962306a36Sopenharmony_ci	    NULL),
21062306a36Sopenharmony_ci	PLL(pll_0822x, CLK_FOUT_SHARED1_PLL, "fout_shared1_pll", "oscclk",
21162306a36Sopenharmony_ci	    PLL_LOCKTIME_PLL_SHARED1, PLL_CON3_PLL_SHARED1,
21262306a36Sopenharmony_ci	    NULL),
21362306a36Sopenharmony_ci	PLL(pll_0831x, CLK_FOUT_MMC_PLL, "fout_mmc_pll", "oscclk",
21462306a36Sopenharmony_ci	    PLL_LOCKTIME_PLL_MMC, PLL_CON3_PLL_MMC, NULL),
21562306a36Sopenharmony_ci};
21662306a36Sopenharmony_ci
21762306a36Sopenharmony_ci/* List of parent clocks for Muxes in CMU_TOP */
21862306a36Sopenharmony_ciPNAME(mout_shared0_pll_p)	= { "oscclk", "fout_shared0_pll" };
21962306a36Sopenharmony_ciPNAME(mout_shared1_pll_p)	= { "oscclk", "fout_shared1_pll" };
22062306a36Sopenharmony_ciPNAME(mout_mmc_pll_p)		= { "oscclk", "fout_mmc_pll" };
22162306a36Sopenharmony_ci/* List of parent clocks for Muxes in CMU_TOP: for CMU_APM */
22262306a36Sopenharmony_ciPNAME(mout_clkcmu_apm_bus_p)	= { "dout_shared0_div4", "pll_shared1_div4" };
22362306a36Sopenharmony_ci/* List of parent clocks for Muxes in CMU_TOP: for CMU_AUD */
22462306a36Sopenharmony_ciPNAME(mout_aud_p)		= { "fout_shared1_pll", "dout_shared0_div2",
22562306a36Sopenharmony_ci				    "dout_shared1_div2", "dout_shared0_div3" };
22662306a36Sopenharmony_ci/* List of parent clocks for Muxes in CMU_TOP: for CMU_CORE */
22762306a36Sopenharmony_ciPNAME(mout_core_bus_p)		= { "dout_shared1_div2", "dout_shared0_div3",
22862306a36Sopenharmony_ci				    "dout_shared1_div3", "dout_shared0_div4" };
22962306a36Sopenharmony_ciPNAME(mout_core_cci_p)		= { "dout_shared0_div2", "dout_shared1_div2",
23062306a36Sopenharmony_ci				    "dout_shared0_div3", "dout_shared1_div3" };
23162306a36Sopenharmony_ciPNAME(mout_core_mmc_embd_p)	= { "oscclk", "dout_shared0_div2",
23262306a36Sopenharmony_ci				    "dout_shared1_div2", "dout_shared0_div3",
23362306a36Sopenharmony_ci				    "dout_shared1_div3", "mout_mmc_pll",
23462306a36Sopenharmony_ci				    "oscclk", "oscclk" };
23562306a36Sopenharmony_ciPNAME(mout_core_sss_p)		= { "dout_shared0_div3", "dout_shared1_div3",
23662306a36Sopenharmony_ci				    "dout_shared0_div4", "dout_shared1_div4" };
23762306a36Sopenharmony_ci/* List of parent clocks for Muxes in CMU_TOP: for CMU_G3D */
23862306a36Sopenharmony_ciPNAME(mout_g3d_switch_p)	= { "dout_shared0_div2", "dout_shared1_div2",
23962306a36Sopenharmony_ci				    "dout_shared0_div3", "dout_shared1_div3" };
24062306a36Sopenharmony_ci/* List of parent clocks for Muxes in CMU_TOP: for CMU_HSI */
24162306a36Sopenharmony_ciPNAME(mout_hsi_bus_p)		= { "dout_shared0_div2", "dout_shared1_div2" };
24262306a36Sopenharmony_ciPNAME(mout_hsi_mmc_card_p)	= { "oscclk", "dout_shared0_div2",
24362306a36Sopenharmony_ci				    "dout_shared1_div2", "dout_shared0_div3",
24462306a36Sopenharmony_ci				    "dout_shared1_div3", "mout_mmc_pll",
24562306a36Sopenharmony_ci				    "oscclk", "oscclk" };
24662306a36Sopenharmony_ciPNAME(mout_hsi_usb20drd_p)	= { "oscclk", "dout_shared0_div4",
24762306a36Sopenharmony_ci				    "dout_shared1_div4", "oscclk" };
24862306a36Sopenharmony_ci/* List of parent clocks for Muxes in CMU_TOP: for CMU_IS */
24962306a36Sopenharmony_ciPNAME(mout_is_bus_p)		= { "dout_shared0_div2", "dout_shared1_div2",
25062306a36Sopenharmony_ci				    "dout_shared0_div3", "dout_shared1_div3" };
25162306a36Sopenharmony_ciPNAME(mout_is_itp_p)		= { "dout_shared0_div2", "dout_shared1_div2",
25262306a36Sopenharmony_ci				    "dout_shared0_div3", "dout_shared1_div3" };
25362306a36Sopenharmony_ciPNAME(mout_is_vra_p)		= { "dout_shared0_div2", "dout_shared1_div2",
25462306a36Sopenharmony_ci				    "dout_shared0_div3", "dout_shared1_div3" };
25562306a36Sopenharmony_ciPNAME(mout_is_gdc_p)		= { "dout_shared0_div2", "dout_shared1_div2",
25662306a36Sopenharmony_ci				    "dout_shared0_div3", "dout_shared1_div3" };
25762306a36Sopenharmony_ci/* List of parent clocks for Muxes in CMU_TOP: for CMU_MFCMSCL */
25862306a36Sopenharmony_ciPNAME(mout_mfcmscl_mfc_p)	= { "dout_shared1_div2", "dout_shared0_div3",
25962306a36Sopenharmony_ci				    "dout_shared1_div3", "dout_shared0_div4" };
26062306a36Sopenharmony_ciPNAME(mout_mfcmscl_m2m_p)	= { "dout_shared1_div2", "dout_shared0_div3",
26162306a36Sopenharmony_ci				    "dout_shared1_div3", "dout_shared0_div4" };
26262306a36Sopenharmony_ciPNAME(mout_mfcmscl_mcsc_p)	= { "dout_shared1_div2", "dout_shared0_div3",
26362306a36Sopenharmony_ci				    "dout_shared1_div3", "dout_shared0_div4" };
26462306a36Sopenharmony_ciPNAME(mout_mfcmscl_jpeg_p)	= { "dout_shared0_div3", "dout_shared1_div3",
26562306a36Sopenharmony_ci				    "dout_shared0_div4", "dout_shared1_div4" };
26662306a36Sopenharmony_ci/* List of parent clocks for Muxes in CMU_TOP: for CMU_PERI */
26762306a36Sopenharmony_ciPNAME(mout_peri_bus_p)		= { "dout_shared0_div4", "dout_shared1_div4" };
26862306a36Sopenharmony_ciPNAME(mout_peri_uart_p)		= { "oscclk", "dout_shared0_div4",
26962306a36Sopenharmony_ci				    "dout_shared1_div4", "oscclk" };
27062306a36Sopenharmony_ciPNAME(mout_peri_ip_p)		= { "oscclk", "dout_shared0_div4",
27162306a36Sopenharmony_ci				    "dout_shared1_div4", "oscclk" };
27262306a36Sopenharmony_ci/* List of parent clocks for Muxes in CMU_TOP: for CMU_DPU */
27362306a36Sopenharmony_ciPNAME(mout_dpu_p)		= { "dout_shared0_div3", "dout_shared1_div3",
27462306a36Sopenharmony_ci				    "dout_shared0_div4", "dout_shared1_div4" };
27562306a36Sopenharmony_ci
27662306a36Sopenharmony_cistatic const struct samsung_mux_clock top_mux_clks[] __initconst = {
27762306a36Sopenharmony_ci	/* CMU_TOP_PURECLKCOMP */
27862306a36Sopenharmony_ci	MUX(CLK_MOUT_SHARED0_PLL, "mout_shared0_pll", mout_shared0_pll_p,
27962306a36Sopenharmony_ci	    PLL_CON0_PLL_SHARED0, 4, 1),
28062306a36Sopenharmony_ci	MUX(CLK_MOUT_SHARED1_PLL, "mout_shared1_pll", mout_shared1_pll_p,
28162306a36Sopenharmony_ci	    PLL_CON0_PLL_SHARED1, 4, 1),
28262306a36Sopenharmony_ci	MUX(CLK_MOUT_MMC_PLL, "mout_mmc_pll", mout_mmc_pll_p,
28362306a36Sopenharmony_ci	    PLL_CON0_PLL_MMC, 4, 1),
28462306a36Sopenharmony_ci
28562306a36Sopenharmony_ci	/* APM */
28662306a36Sopenharmony_ci	MUX(CLK_MOUT_CLKCMU_APM_BUS, "mout_clkcmu_apm_bus",
28762306a36Sopenharmony_ci	    mout_clkcmu_apm_bus_p, CLK_CON_MUX_MUX_CLKCMU_APM_BUS, 0, 1),
28862306a36Sopenharmony_ci
28962306a36Sopenharmony_ci	/* AUD */
29062306a36Sopenharmony_ci	MUX(CLK_MOUT_AUD, "mout_aud", mout_aud_p,
29162306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLKCMU_AUD, 0, 2),
29262306a36Sopenharmony_ci
29362306a36Sopenharmony_ci	/* CORE */
29462306a36Sopenharmony_ci	MUX(CLK_MOUT_CORE_BUS, "mout_core_bus", mout_core_bus_p,
29562306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLKCMU_CORE_BUS, 0, 2),
29662306a36Sopenharmony_ci	MUX(CLK_MOUT_CORE_CCI, "mout_core_cci", mout_core_cci_p,
29762306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLKCMU_CORE_CCI, 0, 2),
29862306a36Sopenharmony_ci	MUX(CLK_MOUT_CORE_MMC_EMBD, "mout_core_mmc_embd", mout_core_mmc_embd_p,
29962306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLKCMU_CORE_MMC_EMBD, 0, 3),
30062306a36Sopenharmony_ci	MUX(CLK_MOUT_CORE_SSS, "mout_core_sss", mout_core_sss_p,
30162306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLKCMU_CORE_SSS, 0, 2),
30262306a36Sopenharmony_ci
30362306a36Sopenharmony_ci	/* DPU */
30462306a36Sopenharmony_ci	MUX(CLK_MOUT_DPU, "mout_dpu", mout_dpu_p,
30562306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLKCMU_DPU, 0, 2),
30662306a36Sopenharmony_ci
30762306a36Sopenharmony_ci	/* G3D */
30862306a36Sopenharmony_ci	MUX(CLK_MOUT_G3D_SWITCH, "mout_g3d_switch", mout_g3d_switch_p,
30962306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLKCMU_G3D_SWITCH, 0, 2),
31062306a36Sopenharmony_ci
31162306a36Sopenharmony_ci	/* HSI */
31262306a36Sopenharmony_ci	MUX(CLK_MOUT_HSI_BUS, "mout_hsi_bus", mout_hsi_bus_p,
31362306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLKCMU_HSI_BUS, 0, 1),
31462306a36Sopenharmony_ci	MUX(CLK_MOUT_HSI_MMC_CARD, "mout_hsi_mmc_card", mout_hsi_mmc_card_p,
31562306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLKCMU_HSI_MMC_CARD, 0, 3),
31662306a36Sopenharmony_ci	MUX(CLK_MOUT_HSI_USB20DRD, "mout_hsi_usb20drd", mout_hsi_usb20drd_p,
31762306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLKCMU_HSI_USB20DRD, 0, 2),
31862306a36Sopenharmony_ci
31962306a36Sopenharmony_ci	/* IS */
32062306a36Sopenharmony_ci	MUX(CLK_MOUT_IS_BUS, "mout_is_bus", mout_is_bus_p,
32162306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLKCMU_IS_BUS, 0, 2),
32262306a36Sopenharmony_ci	MUX(CLK_MOUT_IS_ITP, "mout_is_itp", mout_is_itp_p,
32362306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLKCMU_IS_ITP, 0, 2),
32462306a36Sopenharmony_ci	MUX(CLK_MOUT_IS_VRA, "mout_is_vra", mout_is_vra_p,
32562306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLKCMU_IS_VRA, 0, 2),
32662306a36Sopenharmony_ci	MUX(CLK_MOUT_IS_GDC, "mout_is_gdc", mout_is_gdc_p,
32762306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLKCMU_IS_GDC, 0, 2),
32862306a36Sopenharmony_ci
32962306a36Sopenharmony_ci	/* MFCMSCL */
33062306a36Sopenharmony_ci	MUX(CLK_MOUT_MFCMSCL_MFC, "mout_mfcmscl_mfc", mout_mfcmscl_mfc_p,
33162306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLKCMU_MFCMSCL_MFC, 0, 2),
33262306a36Sopenharmony_ci	MUX(CLK_MOUT_MFCMSCL_M2M, "mout_mfcmscl_m2m", mout_mfcmscl_m2m_p,
33362306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLKCMU_MFCMSCL_M2M, 0, 2),
33462306a36Sopenharmony_ci	MUX(CLK_MOUT_MFCMSCL_MCSC, "mout_mfcmscl_mcsc", mout_mfcmscl_mcsc_p,
33562306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLKCMU_MFCMSCL_MCSC, 0, 2),
33662306a36Sopenharmony_ci	MUX(CLK_MOUT_MFCMSCL_JPEG, "mout_mfcmscl_jpeg", mout_mfcmscl_jpeg_p,
33762306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLKCMU_MFCMSCL_JPEG, 0, 2),
33862306a36Sopenharmony_ci
33962306a36Sopenharmony_ci	/* PERI */
34062306a36Sopenharmony_ci	MUX(CLK_MOUT_PERI_BUS, "mout_peri_bus", mout_peri_bus_p,
34162306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLKCMU_PERI_BUS, 0, 1),
34262306a36Sopenharmony_ci	MUX(CLK_MOUT_PERI_UART, "mout_peri_uart", mout_peri_uart_p,
34362306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLKCMU_PERI_UART, 0, 2),
34462306a36Sopenharmony_ci	MUX(CLK_MOUT_PERI_IP, "mout_peri_ip", mout_peri_ip_p,
34562306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLKCMU_PERI_IP, 0, 2),
34662306a36Sopenharmony_ci};
34762306a36Sopenharmony_ci
34862306a36Sopenharmony_cistatic const struct samsung_div_clock top_div_clks[] __initconst = {
34962306a36Sopenharmony_ci	/* CMU_TOP_PURECLKCOMP */
35062306a36Sopenharmony_ci	DIV(CLK_DOUT_SHARED0_DIV3, "dout_shared0_div3", "mout_shared0_pll",
35162306a36Sopenharmony_ci	    CLK_CON_DIV_PLL_SHARED0_DIV3, 0, 2),
35262306a36Sopenharmony_ci	DIV(CLK_DOUT_SHARED0_DIV2, "dout_shared0_div2", "mout_shared0_pll",
35362306a36Sopenharmony_ci	    CLK_CON_DIV_PLL_SHARED0_DIV2, 0, 1),
35462306a36Sopenharmony_ci	DIV(CLK_DOUT_SHARED1_DIV3, "dout_shared1_div3", "mout_shared1_pll",
35562306a36Sopenharmony_ci	    CLK_CON_DIV_PLL_SHARED1_DIV3, 0, 2),
35662306a36Sopenharmony_ci	DIV(CLK_DOUT_SHARED1_DIV2, "dout_shared1_div2", "mout_shared1_pll",
35762306a36Sopenharmony_ci	    CLK_CON_DIV_PLL_SHARED1_DIV2, 0, 1),
35862306a36Sopenharmony_ci	DIV(CLK_DOUT_SHARED0_DIV4, "dout_shared0_div4", "dout_shared0_div2",
35962306a36Sopenharmony_ci	    CLK_CON_DIV_PLL_SHARED0_DIV4, 0, 1),
36062306a36Sopenharmony_ci	DIV(CLK_DOUT_SHARED1_DIV4, "dout_shared1_div4", "dout_shared1_div2",
36162306a36Sopenharmony_ci	    CLK_CON_DIV_PLL_SHARED1_DIV4, 0, 1),
36262306a36Sopenharmony_ci
36362306a36Sopenharmony_ci	/* APM */
36462306a36Sopenharmony_ci	DIV(CLK_DOUT_CLKCMU_APM_BUS, "dout_clkcmu_apm_bus",
36562306a36Sopenharmony_ci	    "gout_clkcmu_apm_bus", CLK_CON_DIV_CLKCMU_APM_BUS, 0, 3),
36662306a36Sopenharmony_ci
36762306a36Sopenharmony_ci	/* AUD */
36862306a36Sopenharmony_ci	DIV(CLK_DOUT_AUD, "dout_aud", "gout_aud",
36962306a36Sopenharmony_ci	    CLK_CON_DIV_CLKCMU_AUD, 0, 4),
37062306a36Sopenharmony_ci
37162306a36Sopenharmony_ci	/* CORE */
37262306a36Sopenharmony_ci	DIV(CLK_DOUT_CORE_BUS, "dout_core_bus", "gout_core_bus",
37362306a36Sopenharmony_ci	    CLK_CON_DIV_CLKCMU_CORE_BUS, 0, 4),
37462306a36Sopenharmony_ci	DIV(CLK_DOUT_CORE_CCI, "dout_core_cci", "gout_core_cci",
37562306a36Sopenharmony_ci	    CLK_CON_DIV_CLKCMU_CORE_CCI, 0, 4),
37662306a36Sopenharmony_ci	DIV(CLK_DOUT_CORE_MMC_EMBD, "dout_core_mmc_embd", "gout_core_mmc_embd",
37762306a36Sopenharmony_ci	    CLK_CON_DIV_CLKCMU_CORE_MMC_EMBD, 0, 9),
37862306a36Sopenharmony_ci	DIV(CLK_DOUT_CORE_SSS, "dout_core_sss", "gout_core_sss",
37962306a36Sopenharmony_ci	    CLK_CON_DIV_CLKCMU_CORE_SSS, 0, 4),
38062306a36Sopenharmony_ci
38162306a36Sopenharmony_ci	/* DPU */
38262306a36Sopenharmony_ci	DIV(CLK_DOUT_DPU, "dout_dpu", "gout_dpu",
38362306a36Sopenharmony_ci	    CLK_CON_DIV_CLKCMU_DPU, 0, 4),
38462306a36Sopenharmony_ci
38562306a36Sopenharmony_ci	/* G3D */
38662306a36Sopenharmony_ci	DIV(CLK_DOUT_G3D_SWITCH, "dout_g3d_switch", "gout_g3d_switch",
38762306a36Sopenharmony_ci	    CLK_CON_DIV_CLKCMU_G3D_SWITCH, 0, 3),
38862306a36Sopenharmony_ci
38962306a36Sopenharmony_ci	/* HSI */
39062306a36Sopenharmony_ci	DIV(CLK_DOUT_HSI_BUS, "dout_hsi_bus", "gout_hsi_bus",
39162306a36Sopenharmony_ci	    CLK_CON_DIV_CLKCMU_HSI_BUS, 0, 4),
39262306a36Sopenharmony_ci	DIV(CLK_DOUT_HSI_MMC_CARD, "dout_hsi_mmc_card", "gout_hsi_mmc_card",
39362306a36Sopenharmony_ci	    CLK_CON_DIV_CLKCMU_HSI_MMC_CARD, 0, 9),
39462306a36Sopenharmony_ci	DIV(CLK_DOUT_HSI_USB20DRD, "dout_hsi_usb20drd", "gout_hsi_usb20drd",
39562306a36Sopenharmony_ci	    CLK_CON_DIV_CLKCMU_HSI_USB20DRD, 0, 4),
39662306a36Sopenharmony_ci
39762306a36Sopenharmony_ci	/* IS */
39862306a36Sopenharmony_ci	DIV(CLK_DOUT_IS_BUS, "dout_is_bus", "gout_is_bus",
39962306a36Sopenharmony_ci	    CLK_CON_DIV_CLKCMU_IS_BUS, 0, 4),
40062306a36Sopenharmony_ci	DIV(CLK_DOUT_IS_ITP, "dout_is_itp", "gout_is_itp",
40162306a36Sopenharmony_ci	    CLK_CON_DIV_CLKCMU_IS_ITP, 0, 4),
40262306a36Sopenharmony_ci	DIV(CLK_DOUT_IS_VRA, "dout_is_vra", "gout_is_vra",
40362306a36Sopenharmony_ci	    CLK_CON_DIV_CLKCMU_IS_VRA, 0, 4),
40462306a36Sopenharmony_ci	DIV(CLK_DOUT_IS_GDC, "dout_is_gdc", "gout_is_gdc",
40562306a36Sopenharmony_ci	    CLK_CON_DIV_CLKCMU_IS_GDC, 0, 4),
40662306a36Sopenharmony_ci
40762306a36Sopenharmony_ci	/* MFCMSCL */
40862306a36Sopenharmony_ci	DIV(CLK_DOUT_MFCMSCL_MFC, "dout_mfcmscl_mfc", "gout_mfcmscl_mfc",
40962306a36Sopenharmony_ci	    CLK_CON_DIV_CLKCMU_MFCMSCL_MFC, 0, 4),
41062306a36Sopenharmony_ci	DIV(CLK_DOUT_MFCMSCL_M2M, "dout_mfcmscl_m2m", "gout_mfcmscl_m2m",
41162306a36Sopenharmony_ci	    CLK_CON_DIV_CLKCMU_MFCMSCL_M2M, 0, 4),
41262306a36Sopenharmony_ci	DIV(CLK_DOUT_MFCMSCL_MCSC, "dout_mfcmscl_mcsc", "gout_mfcmscl_mcsc",
41362306a36Sopenharmony_ci	    CLK_CON_DIV_CLKCMU_MFCMSCL_MCSC, 0, 4),
41462306a36Sopenharmony_ci	DIV(CLK_DOUT_MFCMSCL_JPEG, "dout_mfcmscl_jpeg", "gout_mfcmscl_jpeg",
41562306a36Sopenharmony_ci	    CLK_CON_DIV_CLKCMU_MFCMSCL_JPEG, 0, 4),
41662306a36Sopenharmony_ci
41762306a36Sopenharmony_ci	/* PERI */
41862306a36Sopenharmony_ci	DIV(CLK_DOUT_PERI_BUS, "dout_peri_bus", "gout_peri_bus",
41962306a36Sopenharmony_ci	    CLK_CON_DIV_CLKCMU_PERI_BUS, 0, 4),
42062306a36Sopenharmony_ci	DIV(CLK_DOUT_PERI_UART, "dout_peri_uart", "gout_peri_uart",
42162306a36Sopenharmony_ci	    CLK_CON_DIV_CLKCMU_PERI_UART, 0, 4),
42262306a36Sopenharmony_ci	DIV(CLK_DOUT_PERI_IP, "dout_peri_ip", "gout_peri_ip",
42362306a36Sopenharmony_ci	    CLK_CON_DIV_CLKCMU_PERI_IP, 0, 4),
42462306a36Sopenharmony_ci};
42562306a36Sopenharmony_ci
42662306a36Sopenharmony_cistatic const struct samsung_gate_clock top_gate_clks[] __initconst = {
42762306a36Sopenharmony_ci	/* CORE */
42862306a36Sopenharmony_ci	GATE(CLK_GOUT_CORE_BUS, "gout_core_bus", "mout_core_bus",
42962306a36Sopenharmony_ci	     CLK_CON_GAT_GATE_CLKCMU_CORE_BUS, 21, 0, 0),
43062306a36Sopenharmony_ci	GATE(CLK_GOUT_CORE_CCI, "gout_core_cci", "mout_core_cci",
43162306a36Sopenharmony_ci	     CLK_CON_GAT_GATE_CLKCMU_CORE_CCI, 21, 0, 0),
43262306a36Sopenharmony_ci	GATE(CLK_GOUT_CORE_MMC_EMBD, "gout_core_mmc_embd", "mout_core_mmc_embd",
43362306a36Sopenharmony_ci	     CLK_CON_GAT_GATE_CLKCMU_CORE_MMC_EMBD, 21, 0, 0),
43462306a36Sopenharmony_ci	GATE(CLK_GOUT_CORE_SSS, "gout_core_sss", "mout_core_sss",
43562306a36Sopenharmony_ci	     CLK_CON_GAT_GATE_CLKCMU_CORE_SSS, 21, 0, 0),
43662306a36Sopenharmony_ci
43762306a36Sopenharmony_ci	/* APM */
43862306a36Sopenharmony_ci	GATE(CLK_GOUT_CLKCMU_APM_BUS, "gout_clkcmu_apm_bus",
43962306a36Sopenharmony_ci	     "mout_clkcmu_apm_bus", CLK_CON_GAT_GATE_CLKCMU_APM_BUS, 21, 0, 0),
44062306a36Sopenharmony_ci
44162306a36Sopenharmony_ci	/* AUD */
44262306a36Sopenharmony_ci	GATE(CLK_GOUT_AUD, "gout_aud", "mout_aud",
44362306a36Sopenharmony_ci	     CLK_CON_GAT_GATE_CLKCMU_AUD, 21, 0, 0),
44462306a36Sopenharmony_ci
44562306a36Sopenharmony_ci	/* DPU */
44662306a36Sopenharmony_ci	GATE(CLK_GOUT_DPU, "gout_dpu", "mout_dpu",
44762306a36Sopenharmony_ci	     CLK_CON_GAT_GATE_CLKCMU_DPU, 21, 0, 0),
44862306a36Sopenharmony_ci
44962306a36Sopenharmony_ci	/* G3D */
45062306a36Sopenharmony_ci	GATE(CLK_GOUT_G3D_SWITCH, "gout_g3d_switch", "mout_g3d_switch",
45162306a36Sopenharmony_ci	     CLK_CON_GAT_GATE_CLKCMU_G3D_SWITCH, 21, 0, 0),
45262306a36Sopenharmony_ci
45362306a36Sopenharmony_ci	/* HSI */
45462306a36Sopenharmony_ci	GATE(CLK_GOUT_HSI_BUS, "gout_hsi_bus", "mout_hsi_bus",
45562306a36Sopenharmony_ci	     CLK_CON_GAT_GATE_CLKCMU_HSI_BUS, 21, 0, 0),
45662306a36Sopenharmony_ci	GATE(CLK_GOUT_HSI_MMC_CARD, "gout_hsi_mmc_card", "mout_hsi_mmc_card",
45762306a36Sopenharmony_ci	     CLK_CON_GAT_GATE_CLKCMU_HSI_MMC_CARD, 21, 0, 0),
45862306a36Sopenharmony_ci	GATE(CLK_GOUT_HSI_USB20DRD, "gout_hsi_usb20drd", "mout_hsi_usb20drd",
45962306a36Sopenharmony_ci	     CLK_CON_GAT_GATE_CLKCMU_HSI_USB20DRD, 21, 0, 0),
46062306a36Sopenharmony_ci
46162306a36Sopenharmony_ci	/* IS */
46262306a36Sopenharmony_ci	/* TODO: These clocks have to be always enabled to access CMU_IS regs */
46362306a36Sopenharmony_ci	GATE(CLK_GOUT_IS_BUS, "gout_is_bus", "mout_is_bus",
46462306a36Sopenharmony_ci	     CLK_CON_GAT_GATE_CLKCMU_IS_BUS, 21, CLK_IS_CRITICAL, 0),
46562306a36Sopenharmony_ci	GATE(CLK_GOUT_IS_ITP, "gout_is_itp", "mout_is_itp",
46662306a36Sopenharmony_ci	     CLK_CON_GAT_GATE_CLKCMU_IS_ITP, 21, CLK_IS_CRITICAL, 0),
46762306a36Sopenharmony_ci	GATE(CLK_GOUT_IS_VRA, "gout_is_vra", "mout_is_vra",
46862306a36Sopenharmony_ci	     CLK_CON_GAT_GATE_CLKCMU_IS_VRA, 21, CLK_IS_CRITICAL, 0),
46962306a36Sopenharmony_ci	GATE(CLK_GOUT_IS_GDC, "gout_is_gdc", "mout_is_gdc",
47062306a36Sopenharmony_ci	     CLK_CON_GAT_GATE_CLKCMU_IS_GDC, 21, CLK_IS_CRITICAL, 0),
47162306a36Sopenharmony_ci
47262306a36Sopenharmony_ci	/* MFCMSCL */
47362306a36Sopenharmony_ci	/* TODO: These have to be always enabled to access CMU_MFCMSCL regs */
47462306a36Sopenharmony_ci	GATE(CLK_GOUT_MFCMSCL_MFC, "gout_mfcmscl_mfc", "mout_mfcmscl_mfc",
47562306a36Sopenharmony_ci	     CLK_CON_GAT_GATE_CLKCMU_MFCMSCL_MFC, 21, CLK_IS_CRITICAL, 0),
47662306a36Sopenharmony_ci	GATE(CLK_GOUT_MFCMSCL_M2M, "gout_mfcmscl_m2m", "mout_mfcmscl_m2m",
47762306a36Sopenharmony_ci	     CLK_CON_GAT_GATE_CLKCMU_MFCMSCL_M2M, 21, CLK_IS_CRITICAL, 0),
47862306a36Sopenharmony_ci	GATE(CLK_GOUT_MFCMSCL_MCSC, "gout_mfcmscl_mcsc", "mout_mfcmscl_mcsc",
47962306a36Sopenharmony_ci	     CLK_CON_GAT_GATE_CLKCMU_MFCMSCL_MCSC, 21, CLK_IS_CRITICAL, 0),
48062306a36Sopenharmony_ci	GATE(CLK_GOUT_MFCMSCL_JPEG, "gout_mfcmscl_jpeg", "mout_mfcmscl_jpeg",
48162306a36Sopenharmony_ci	     CLK_CON_GAT_GATE_CLKCMU_MFCMSCL_JPEG, 21, CLK_IS_CRITICAL, 0),
48262306a36Sopenharmony_ci
48362306a36Sopenharmony_ci	/* PERI */
48462306a36Sopenharmony_ci	GATE(CLK_GOUT_PERI_BUS, "gout_peri_bus", "mout_peri_bus",
48562306a36Sopenharmony_ci	     CLK_CON_GAT_GATE_CLKCMU_PERI_BUS, 21, 0, 0),
48662306a36Sopenharmony_ci	GATE(CLK_GOUT_PERI_UART, "gout_peri_uart", "mout_peri_uart",
48762306a36Sopenharmony_ci	     CLK_CON_GAT_GATE_CLKCMU_PERI_UART, 21, 0, 0),
48862306a36Sopenharmony_ci	GATE(CLK_GOUT_PERI_IP, "gout_peri_ip", "mout_peri_ip",
48962306a36Sopenharmony_ci	     CLK_CON_GAT_GATE_CLKCMU_PERI_IP, 21, 0, 0),
49062306a36Sopenharmony_ci};
49162306a36Sopenharmony_ci
49262306a36Sopenharmony_cistatic const struct samsung_cmu_info top_cmu_info __initconst = {
49362306a36Sopenharmony_ci	.pll_clks		= top_pll_clks,
49462306a36Sopenharmony_ci	.nr_pll_clks		= ARRAY_SIZE(top_pll_clks),
49562306a36Sopenharmony_ci	.mux_clks		= top_mux_clks,
49662306a36Sopenharmony_ci	.nr_mux_clks		= ARRAY_SIZE(top_mux_clks),
49762306a36Sopenharmony_ci	.div_clks		= top_div_clks,
49862306a36Sopenharmony_ci	.nr_div_clks		= ARRAY_SIZE(top_div_clks),
49962306a36Sopenharmony_ci	.gate_clks		= top_gate_clks,
50062306a36Sopenharmony_ci	.nr_gate_clks		= ARRAY_SIZE(top_gate_clks),
50162306a36Sopenharmony_ci	.nr_clk_ids		= CLKS_NR_TOP,
50262306a36Sopenharmony_ci	.clk_regs		= top_clk_regs,
50362306a36Sopenharmony_ci	.nr_clk_regs		= ARRAY_SIZE(top_clk_regs),
50462306a36Sopenharmony_ci};
50562306a36Sopenharmony_ci
50662306a36Sopenharmony_cistatic void __init exynos850_cmu_top_init(struct device_node *np)
50762306a36Sopenharmony_ci{
50862306a36Sopenharmony_ci	exynos_arm64_register_cmu(NULL, np, &top_cmu_info);
50962306a36Sopenharmony_ci}
51062306a36Sopenharmony_ci
51162306a36Sopenharmony_ci/* Register CMU_TOP early, as it's a dependency for other early domains */
51262306a36Sopenharmony_ciCLK_OF_DECLARE(exynos850_cmu_top, "samsung,exynos850-cmu-top",
51362306a36Sopenharmony_ci	       exynos850_cmu_top_init);
51462306a36Sopenharmony_ci
51562306a36Sopenharmony_ci/* ---- CMU_APM ------------------------------------------------------------- */
51662306a36Sopenharmony_ci
51762306a36Sopenharmony_ci/* Register Offset definitions for CMU_APM (0x11800000) */
51862306a36Sopenharmony_ci#define PLL_CON0_MUX_CLKCMU_APM_BUS_USER		0x0600
51962306a36Sopenharmony_ci#define PLL_CON0_MUX_CLK_RCO_APM_I3C_USER		0x0610
52062306a36Sopenharmony_ci#define PLL_CON0_MUX_CLK_RCO_APM_USER			0x0620
52162306a36Sopenharmony_ci#define PLL_CON0_MUX_DLL_USER				0x0630
52262306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLKCMU_CHUB_BUS			0x1000
52362306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLK_APM_BUS			0x1004
52462306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLK_APM_I3C			0x1008
52562306a36Sopenharmony_ci#define CLK_CON_DIV_CLKCMU_CHUB_BUS			0x1800
52662306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_APM_BUS			0x1804
52762306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_APM_I3C			0x1808
52862306a36Sopenharmony_ci#define CLK_CON_GAT_CLKCMU_CMGP_BUS			0x2000
52962306a36Sopenharmony_ci#define CLK_CON_GAT_GATE_CLKCMU_CHUB_BUS		0x2014
53062306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_APM_APBIF_GPIO_ALIVE_PCLK	0x2018
53162306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_APM_APBIF_PMU_ALIVE_PCLK	0x2020
53262306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_APM_APBIF_RTC_PCLK		0x2024
53362306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_APM_APBIF_TOP_RTC_PCLK		0x2028
53462306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_APM_I3C_APM_PMIC_I_PCLK	0x2034
53562306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_APM_I3C_APM_PMIC_I_SCLK	0x2038
53662306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_APM_SPEEDY_APM_PCLK		0x20bc
53762306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_APM_SYSREG_APM_PCLK		0x20c0
53862306a36Sopenharmony_ci
53962306a36Sopenharmony_cistatic const unsigned long apm_clk_regs[] __initconst = {
54062306a36Sopenharmony_ci	PLL_CON0_MUX_CLKCMU_APM_BUS_USER,
54162306a36Sopenharmony_ci	PLL_CON0_MUX_CLK_RCO_APM_I3C_USER,
54262306a36Sopenharmony_ci	PLL_CON0_MUX_CLK_RCO_APM_USER,
54362306a36Sopenharmony_ci	PLL_CON0_MUX_DLL_USER,
54462306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLKCMU_CHUB_BUS,
54562306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLK_APM_BUS,
54662306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLK_APM_I3C,
54762306a36Sopenharmony_ci	CLK_CON_DIV_CLKCMU_CHUB_BUS,
54862306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_APM_BUS,
54962306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_APM_I3C,
55062306a36Sopenharmony_ci	CLK_CON_GAT_CLKCMU_CMGP_BUS,
55162306a36Sopenharmony_ci	CLK_CON_GAT_GATE_CLKCMU_CHUB_BUS,
55262306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_APM_APBIF_GPIO_ALIVE_PCLK,
55362306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_APM_APBIF_PMU_ALIVE_PCLK,
55462306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_APM_APBIF_RTC_PCLK,
55562306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_APM_APBIF_TOP_RTC_PCLK,
55662306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_APM_I3C_APM_PMIC_I_PCLK,
55762306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_APM_I3C_APM_PMIC_I_SCLK,
55862306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_APM_SPEEDY_APM_PCLK,
55962306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_APM_SYSREG_APM_PCLK,
56062306a36Sopenharmony_ci};
56162306a36Sopenharmony_ci
56262306a36Sopenharmony_ci/* List of parent clocks for Muxes in CMU_APM */
56362306a36Sopenharmony_ciPNAME(mout_apm_bus_user_p)	= { "oscclk_rco_apm", "dout_clkcmu_apm_bus" };
56462306a36Sopenharmony_ciPNAME(mout_rco_apm_i3c_user_p)	= { "oscclk_rco_apm", "clk_rco_i3c_pmic" };
56562306a36Sopenharmony_ciPNAME(mout_rco_apm_user_p)	= { "oscclk_rco_apm", "clk_rco_apm__alv" };
56662306a36Sopenharmony_ciPNAME(mout_dll_user_p)		= { "oscclk_rco_apm", "clk_dll_dco" };
56762306a36Sopenharmony_ciPNAME(mout_clkcmu_chub_bus_p)	= { "mout_apm_bus_user", "mout_dll_user" };
56862306a36Sopenharmony_ciPNAME(mout_apm_bus_p)		= { "mout_rco_apm_user", "mout_apm_bus_user",
56962306a36Sopenharmony_ci				    "mout_dll_user", "oscclk_rco_apm" };
57062306a36Sopenharmony_ciPNAME(mout_apm_i3c_p)		= { "dout_apm_i3c", "mout_rco_apm_i3c_user" };
57162306a36Sopenharmony_ci
57262306a36Sopenharmony_cistatic const struct samsung_fixed_rate_clock apm_fixed_clks[] __initconst = {
57362306a36Sopenharmony_ci	FRATE(CLK_RCO_I3C_PMIC, "clk_rco_i3c_pmic", NULL, 0, 491520000),
57462306a36Sopenharmony_ci	FRATE(OSCCLK_RCO_APM, "oscclk_rco_apm", NULL, 0, 24576000),
57562306a36Sopenharmony_ci	FRATE(CLK_RCO_APM__ALV, "clk_rco_apm__alv", NULL, 0, 49152000),
57662306a36Sopenharmony_ci	FRATE(CLK_DLL_DCO, "clk_dll_dco", NULL, 0, 360000000),
57762306a36Sopenharmony_ci};
57862306a36Sopenharmony_ci
57962306a36Sopenharmony_cistatic const struct samsung_mux_clock apm_mux_clks[] __initconst = {
58062306a36Sopenharmony_ci	MUX(CLK_MOUT_APM_BUS_USER, "mout_apm_bus_user", mout_apm_bus_user_p,
58162306a36Sopenharmony_ci	    PLL_CON0_MUX_CLKCMU_APM_BUS_USER, 4, 1),
58262306a36Sopenharmony_ci	MUX(CLK_MOUT_RCO_APM_I3C_USER, "mout_rco_apm_i3c_user",
58362306a36Sopenharmony_ci	    mout_rco_apm_i3c_user_p, PLL_CON0_MUX_CLK_RCO_APM_I3C_USER, 4, 1),
58462306a36Sopenharmony_ci	MUX(CLK_MOUT_RCO_APM_USER, "mout_rco_apm_user", mout_rco_apm_user_p,
58562306a36Sopenharmony_ci	    PLL_CON0_MUX_CLK_RCO_APM_USER, 4, 1),
58662306a36Sopenharmony_ci	MUX(CLK_MOUT_DLL_USER, "mout_dll_user", mout_dll_user_p,
58762306a36Sopenharmony_ci	    PLL_CON0_MUX_DLL_USER, 4, 1),
58862306a36Sopenharmony_ci	MUX(CLK_MOUT_CLKCMU_CHUB_BUS, "mout_clkcmu_chub_bus",
58962306a36Sopenharmony_ci	    mout_clkcmu_chub_bus_p, CLK_CON_MUX_MUX_CLKCMU_CHUB_BUS, 0, 1),
59062306a36Sopenharmony_ci	MUX(CLK_MOUT_APM_BUS, "mout_apm_bus", mout_apm_bus_p,
59162306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLK_APM_BUS, 0, 2),
59262306a36Sopenharmony_ci	MUX(CLK_MOUT_APM_I3C, "mout_apm_i3c", mout_apm_i3c_p,
59362306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLK_APM_I3C, 0, 1),
59462306a36Sopenharmony_ci};
59562306a36Sopenharmony_ci
59662306a36Sopenharmony_cistatic const struct samsung_div_clock apm_div_clks[] __initconst = {
59762306a36Sopenharmony_ci	DIV(CLK_DOUT_CLKCMU_CHUB_BUS, "dout_clkcmu_chub_bus",
59862306a36Sopenharmony_ci	    "gout_clkcmu_chub_bus",
59962306a36Sopenharmony_ci	    CLK_CON_DIV_CLKCMU_CHUB_BUS, 0, 3),
60062306a36Sopenharmony_ci	DIV(CLK_DOUT_APM_BUS, "dout_apm_bus", "mout_apm_bus",
60162306a36Sopenharmony_ci	    CLK_CON_DIV_DIV_CLK_APM_BUS, 0, 3),
60262306a36Sopenharmony_ci	DIV(CLK_DOUT_APM_I3C, "dout_apm_i3c", "mout_apm_bus",
60362306a36Sopenharmony_ci	    CLK_CON_DIV_DIV_CLK_APM_I3C, 0, 3),
60462306a36Sopenharmony_ci};
60562306a36Sopenharmony_ci
60662306a36Sopenharmony_cistatic const struct samsung_gate_clock apm_gate_clks[] __initconst = {
60762306a36Sopenharmony_ci	GATE(CLK_GOUT_CLKCMU_CMGP_BUS, "gout_clkcmu_cmgp_bus", "dout_apm_bus",
60862306a36Sopenharmony_ci	     CLK_CON_GAT_CLKCMU_CMGP_BUS, 21, CLK_SET_RATE_PARENT, 0),
60962306a36Sopenharmony_ci	GATE(CLK_GOUT_CLKCMU_CHUB_BUS, "gout_clkcmu_chub_bus",
61062306a36Sopenharmony_ci	     "mout_clkcmu_chub_bus",
61162306a36Sopenharmony_ci	     CLK_CON_GAT_GATE_CLKCMU_CHUB_BUS, 21, 0, 0),
61262306a36Sopenharmony_ci	GATE(CLK_GOUT_RTC_PCLK, "gout_rtc_pclk", "dout_apm_bus",
61362306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_APM_APBIF_RTC_PCLK, 21, 0, 0),
61462306a36Sopenharmony_ci	GATE(CLK_GOUT_TOP_RTC_PCLK, "gout_top_rtc_pclk", "dout_apm_bus",
61562306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_APM_APBIF_TOP_RTC_PCLK, 21, 0, 0),
61662306a36Sopenharmony_ci	GATE(CLK_GOUT_I3C_PCLK, "gout_i3c_pclk", "dout_apm_bus",
61762306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_APM_I3C_APM_PMIC_I_PCLK, 21, 0, 0),
61862306a36Sopenharmony_ci	GATE(CLK_GOUT_I3C_SCLK, "gout_i3c_sclk", "mout_apm_i3c",
61962306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_APM_I3C_APM_PMIC_I_SCLK, 21, 0, 0),
62062306a36Sopenharmony_ci	GATE(CLK_GOUT_SPEEDY_PCLK, "gout_speedy_pclk", "dout_apm_bus",
62162306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_APM_SPEEDY_APM_PCLK, 21, 0, 0),
62262306a36Sopenharmony_ci	/* TODO: Should be enabled in GPIO driver (or made CLK_IS_CRITICAL) */
62362306a36Sopenharmony_ci	GATE(CLK_GOUT_GPIO_ALIVE_PCLK, "gout_gpio_alive_pclk", "dout_apm_bus",
62462306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_APM_APBIF_GPIO_ALIVE_PCLK, 21, CLK_IGNORE_UNUSED,
62562306a36Sopenharmony_ci	     0),
62662306a36Sopenharmony_ci	GATE(CLK_GOUT_PMU_ALIVE_PCLK, "gout_pmu_alive_pclk", "dout_apm_bus",
62762306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_APM_APBIF_PMU_ALIVE_PCLK, 21, CLK_IS_CRITICAL, 0),
62862306a36Sopenharmony_ci	GATE(CLK_GOUT_SYSREG_APM_PCLK, "gout_sysreg_apm_pclk", "dout_apm_bus",
62962306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_APM_SYSREG_APM_PCLK, 21, 0, 0),
63062306a36Sopenharmony_ci};
63162306a36Sopenharmony_ci
63262306a36Sopenharmony_cistatic const struct samsung_cmu_info apm_cmu_info __initconst = {
63362306a36Sopenharmony_ci	.mux_clks		= apm_mux_clks,
63462306a36Sopenharmony_ci	.nr_mux_clks		= ARRAY_SIZE(apm_mux_clks),
63562306a36Sopenharmony_ci	.div_clks		= apm_div_clks,
63662306a36Sopenharmony_ci	.nr_div_clks		= ARRAY_SIZE(apm_div_clks),
63762306a36Sopenharmony_ci	.gate_clks		= apm_gate_clks,
63862306a36Sopenharmony_ci	.nr_gate_clks		= ARRAY_SIZE(apm_gate_clks),
63962306a36Sopenharmony_ci	.fixed_clks		= apm_fixed_clks,
64062306a36Sopenharmony_ci	.nr_fixed_clks		= ARRAY_SIZE(apm_fixed_clks),
64162306a36Sopenharmony_ci	.nr_clk_ids		= CLKS_NR_APM,
64262306a36Sopenharmony_ci	.clk_regs		= apm_clk_regs,
64362306a36Sopenharmony_ci	.nr_clk_regs		= ARRAY_SIZE(apm_clk_regs),
64462306a36Sopenharmony_ci	.clk_name		= "dout_clkcmu_apm_bus",
64562306a36Sopenharmony_ci};
64662306a36Sopenharmony_ci
64762306a36Sopenharmony_ci/* ---- CMU_AUD ------------------------------------------------------------- */
64862306a36Sopenharmony_ci
64962306a36Sopenharmony_ci#define PLL_LOCKTIME_PLL_AUD			0x0000
65062306a36Sopenharmony_ci#define PLL_CON0_PLL_AUD			0x0100
65162306a36Sopenharmony_ci#define PLL_CON3_PLL_AUD			0x010c
65262306a36Sopenharmony_ci#define PLL_CON0_MUX_CLKCMU_AUD_CPU_USER	0x0600
65362306a36Sopenharmony_ci#define PLL_CON0_MUX_TICK_USB_USER		0x0610
65462306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLK_AUD_CPU		0x1000
65562306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLK_AUD_CPU_HCH		0x1004
65662306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLK_AUD_FM		0x1008
65762306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLK_AUD_UAIF0		0x100c
65862306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLK_AUD_UAIF1		0x1010
65962306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLK_AUD_UAIF2		0x1014
66062306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLK_AUD_UAIF3		0x1018
66162306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLK_AUD_UAIF4		0x101c
66262306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLK_AUD_UAIF5		0x1020
66362306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLK_AUD_UAIF6		0x1024
66462306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_AUD_MCLK		0x1800
66562306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_AUD_AUDIF		0x1804
66662306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_AUD_BUSD		0x1808
66762306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_AUD_BUSP		0x180c
66862306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_AUD_CNT		0x1810
66962306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_AUD_CPU		0x1814
67062306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_AUD_CPU_ACLK	0x1818
67162306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_AUD_CPU_PCLKDBG	0x181c
67262306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_AUD_FM		0x1820
67362306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_AUD_FM_SPDY		0x1824
67462306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_AUD_UAIF0		0x1828
67562306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_AUD_UAIF1		0x182c
67662306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_AUD_UAIF2		0x1830
67762306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_AUD_UAIF3		0x1834
67862306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_AUD_UAIF4		0x1838
67962306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_AUD_UAIF5		0x183c
68062306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_AUD_UAIF6		0x1840
68162306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_AUD_ABOX_BCLK_CNT	0x2000
68262306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_AUD_ABOX_BCLK_UAIF0	0x2004
68362306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_AUD_ABOX_BCLK_UAIF1	0x2008
68462306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_AUD_ABOX_BCLK_UAIF2	0x200c
68562306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_AUD_ABOX_BCLK_UAIF3	0x2010
68662306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_AUD_ABOX_BCLK_UAIF4	0x2014
68762306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_AUD_ABOX_BCLK_UAIF5	0x2018
68862306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_AUD_ABOX_BCLK_UAIF6	0x201c
68962306a36Sopenharmony_ci#define CLK_CON_GAT_CLK_AUD_CMU_AUD_PCLK	0x2020
69062306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_AUD_ABOX_ACLK		0x2048
69162306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_AUD_ABOX_BCLK_SPDY	0x204c
69262306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_AUD_ABOX_CCLK_ASB	0x2050
69362306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_AUD_ABOX_CCLK_CA32	0x2054
69462306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_AUD_ABOX_CCLK_DAP	0x2058
69562306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_AUD_CODEC_MCLK		0x206c
69662306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_AUD_TZPC_PCLK		0x2070
69762306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_AUD_GPIO_PCLK		0x2074
69862306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_AUD_PPMU_ACLK		0x2088
69962306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_AUD_PPMU_PCLK		0x208c
70062306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_AUD_SYSMMU_CLK_S1	0x20b4
70162306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_AUD_SYSREG_PCLK	0x20b8
70262306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_AUD_WDT_PCLK		0x20bc
70362306a36Sopenharmony_ci
70462306a36Sopenharmony_cistatic const unsigned long aud_clk_regs[] __initconst = {
70562306a36Sopenharmony_ci	PLL_LOCKTIME_PLL_AUD,
70662306a36Sopenharmony_ci	PLL_CON0_PLL_AUD,
70762306a36Sopenharmony_ci	PLL_CON3_PLL_AUD,
70862306a36Sopenharmony_ci	PLL_CON0_MUX_CLKCMU_AUD_CPU_USER,
70962306a36Sopenharmony_ci	PLL_CON0_MUX_TICK_USB_USER,
71062306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLK_AUD_CPU,
71162306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLK_AUD_CPU_HCH,
71262306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLK_AUD_FM,
71362306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLK_AUD_UAIF0,
71462306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLK_AUD_UAIF1,
71562306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLK_AUD_UAIF2,
71662306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLK_AUD_UAIF3,
71762306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLK_AUD_UAIF4,
71862306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLK_AUD_UAIF5,
71962306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLK_AUD_UAIF6,
72062306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_AUD_MCLK,
72162306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_AUD_AUDIF,
72262306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_AUD_BUSD,
72362306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_AUD_BUSP,
72462306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_AUD_CNT,
72562306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_AUD_CPU,
72662306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_AUD_CPU_ACLK,
72762306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_AUD_CPU_PCLKDBG,
72862306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_AUD_FM,
72962306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_AUD_FM_SPDY,
73062306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_AUD_UAIF0,
73162306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_AUD_UAIF1,
73262306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_AUD_UAIF2,
73362306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_AUD_UAIF3,
73462306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_AUD_UAIF4,
73562306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_AUD_UAIF5,
73662306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_AUD_UAIF6,
73762306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_AUD_ABOX_BCLK_CNT,
73862306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_AUD_ABOX_BCLK_UAIF0,
73962306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_AUD_ABOX_BCLK_UAIF1,
74062306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_AUD_ABOX_BCLK_UAIF2,
74162306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_AUD_ABOX_BCLK_UAIF3,
74262306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_AUD_ABOX_BCLK_UAIF4,
74362306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_AUD_ABOX_BCLK_UAIF5,
74462306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_AUD_ABOX_BCLK_UAIF6,
74562306a36Sopenharmony_ci	CLK_CON_GAT_CLK_AUD_CMU_AUD_PCLK,
74662306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_AUD_ABOX_ACLK,
74762306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_AUD_ABOX_BCLK_SPDY,
74862306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_AUD_ABOX_CCLK_ASB,
74962306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_AUD_ABOX_CCLK_CA32,
75062306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_AUD_ABOX_CCLK_DAP,
75162306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_AUD_CODEC_MCLK,
75262306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_AUD_TZPC_PCLK,
75362306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_AUD_GPIO_PCLK,
75462306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_AUD_PPMU_ACLK,
75562306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_AUD_PPMU_PCLK,
75662306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_AUD_SYSMMU_CLK_S1,
75762306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_AUD_SYSREG_PCLK,
75862306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_AUD_WDT_PCLK,
75962306a36Sopenharmony_ci};
76062306a36Sopenharmony_ci
76162306a36Sopenharmony_ci/* List of parent clocks for Muxes in CMU_AUD */
76262306a36Sopenharmony_ciPNAME(mout_aud_pll_p)		= { "oscclk", "fout_aud_pll" };
76362306a36Sopenharmony_ciPNAME(mout_aud_cpu_user_p)	= { "oscclk", "dout_aud" };
76462306a36Sopenharmony_ciPNAME(mout_aud_cpu_p)		= { "dout_aud_cpu", "mout_aud_cpu_user" };
76562306a36Sopenharmony_ciPNAME(mout_aud_cpu_hch_p)	= { "mout_aud_cpu", "oscclk" };
76662306a36Sopenharmony_ciPNAME(mout_aud_uaif0_p)		= { "dout_aud_uaif0", "ioclk_audiocdclk0" };
76762306a36Sopenharmony_ciPNAME(mout_aud_uaif1_p)		= { "dout_aud_uaif1", "ioclk_audiocdclk1" };
76862306a36Sopenharmony_ciPNAME(mout_aud_uaif2_p)		= { "dout_aud_uaif2", "ioclk_audiocdclk2" };
76962306a36Sopenharmony_ciPNAME(mout_aud_uaif3_p)		= { "dout_aud_uaif3", "ioclk_audiocdclk3" };
77062306a36Sopenharmony_ciPNAME(mout_aud_uaif4_p)		= { "dout_aud_uaif4", "ioclk_audiocdclk4" };
77162306a36Sopenharmony_ciPNAME(mout_aud_uaif5_p)		= { "dout_aud_uaif5", "ioclk_audiocdclk5" };
77262306a36Sopenharmony_ciPNAME(mout_aud_uaif6_p)		= { "dout_aud_uaif6", "ioclk_audiocdclk6" };
77362306a36Sopenharmony_ciPNAME(mout_aud_tick_usb_user_p)	= { "oscclk", "tick_usb" };
77462306a36Sopenharmony_ciPNAME(mout_aud_fm_p)		= { "oscclk", "dout_aud_fm_spdy" };
77562306a36Sopenharmony_ci
77662306a36Sopenharmony_ci/*
77762306a36Sopenharmony_ci * Do not provide PLL table to PLL_AUD, as MANUAL_PLL_CTRL bit is not set
77862306a36Sopenharmony_ci * for that PLL by default, so set_rate operation would fail.
77962306a36Sopenharmony_ci */
78062306a36Sopenharmony_cistatic const struct samsung_pll_clock aud_pll_clks[] __initconst = {
78162306a36Sopenharmony_ci	PLL(pll_0831x, CLK_FOUT_AUD_PLL, "fout_aud_pll", "oscclk",
78262306a36Sopenharmony_ci	    PLL_LOCKTIME_PLL_AUD, PLL_CON3_PLL_AUD, NULL),
78362306a36Sopenharmony_ci};
78462306a36Sopenharmony_ci
78562306a36Sopenharmony_cistatic const struct samsung_fixed_rate_clock aud_fixed_clks[] __initconst = {
78662306a36Sopenharmony_ci	FRATE(IOCLK_AUDIOCDCLK0, "ioclk_audiocdclk0", NULL, 0, 25000000),
78762306a36Sopenharmony_ci	FRATE(IOCLK_AUDIOCDCLK1, "ioclk_audiocdclk1", NULL, 0, 25000000),
78862306a36Sopenharmony_ci	FRATE(IOCLK_AUDIOCDCLK2, "ioclk_audiocdclk2", NULL, 0, 25000000),
78962306a36Sopenharmony_ci	FRATE(IOCLK_AUDIOCDCLK3, "ioclk_audiocdclk3", NULL, 0, 25000000),
79062306a36Sopenharmony_ci	FRATE(IOCLK_AUDIOCDCLK4, "ioclk_audiocdclk4", NULL, 0, 25000000),
79162306a36Sopenharmony_ci	FRATE(IOCLK_AUDIOCDCLK5, "ioclk_audiocdclk5", NULL, 0, 25000000),
79262306a36Sopenharmony_ci	FRATE(IOCLK_AUDIOCDCLK6, "ioclk_audiocdclk6", NULL, 0, 25000000),
79362306a36Sopenharmony_ci	FRATE(TICK_USB, "tick_usb", NULL, 0, 60000000),
79462306a36Sopenharmony_ci};
79562306a36Sopenharmony_ci
79662306a36Sopenharmony_cistatic const struct samsung_mux_clock aud_mux_clks[] __initconst = {
79762306a36Sopenharmony_ci	MUX(CLK_MOUT_AUD_PLL, "mout_aud_pll", mout_aud_pll_p,
79862306a36Sopenharmony_ci	    PLL_CON0_PLL_AUD, 4, 1),
79962306a36Sopenharmony_ci	MUX(CLK_MOUT_AUD_CPU_USER, "mout_aud_cpu_user", mout_aud_cpu_user_p,
80062306a36Sopenharmony_ci	    PLL_CON0_MUX_CLKCMU_AUD_CPU_USER, 4, 1),
80162306a36Sopenharmony_ci	MUX(CLK_MOUT_AUD_TICK_USB_USER, "mout_aud_tick_usb_user",
80262306a36Sopenharmony_ci	    mout_aud_tick_usb_user_p,
80362306a36Sopenharmony_ci	    PLL_CON0_MUX_TICK_USB_USER, 4, 1),
80462306a36Sopenharmony_ci	MUX(CLK_MOUT_AUD_CPU, "mout_aud_cpu", mout_aud_cpu_p,
80562306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLK_AUD_CPU, 0, 1),
80662306a36Sopenharmony_ci	MUX(CLK_MOUT_AUD_CPU_HCH, "mout_aud_cpu_hch", mout_aud_cpu_hch_p,
80762306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLK_AUD_CPU_HCH, 0, 1),
80862306a36Sopenharmony_ci	MUX(CLK_MOUT_AUD_UAIF0, "mout_aud_uaif0", mout_aud_uaif0_p,
80962306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLK_AUD_UAIF0, 0, 1),
81062306a36Sopenharmony_ci	MUX(CLK_MOUT_AUD_UAIF1, "mout_aud_uaif1", mout_aud_uaif1_p,
81162306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLK_AUD_UAIF1, 0, 1),
81262306a36Sopenharmony_ci	MUX(CLK_MOUT_AUD_UAIF2, "mout_aud_uaif2", mout_aud_uaif2_p,
81362306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLK_AUD_UAIF2, 0, 1),
81462306a36Sopenharmony_ci	MUX(CLK_MOUT_AUD_UAIF3, "mout_aud_uaif3", mout_aud_uaif3_p,
81562306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLK_AUD_UAIF3, 0, 1),
81662306a36Sopenharmony_ci	MUX(CLK_MOUT_AUD_UAIF4, "mout_aud_uaif4", mout_aud_uaif4_p,
81762306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLK_AUD_UAIF4, 0, 1),
81862306a36Sopenharmony_ci	MUX(CLK_MOUT_AUD_UAIF5, "mout_aud_uaif5", mout_aud_uaif5_p,
81962306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLK_AUD_UAIF5, 0, 1),
82062306a36Sopenharmony_ci	MUX(CLK_MOUT_AUD_UAIF6, "mout_aud_uaif6", mout_aud_uaif6_p,
82162306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLK_AUD_UAIF6, 0, 1),
82262306a36Sopenharmony_ci	MUX(CLK_MOUT_AUD_FM, "mout_aud_fm", mout_aud_fm_p,
82362306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLK_AUD_FM, 0, 1),
82462306a36Sopenharmony_ci};
82562306a36Sopenharmony_ci
82662306a36Sopenharmony_cistatic const struct samsung_div_clock aud_div_clks[] __initconst = {
82762306a36Sopenharmony_ci	DIV(CLK_DOUT_AUD_CPU, "dout_aud_cpu", "mout_aud_pll",
82862306a36Sopenharmony_ci	    CLK_CON_DIV_DIV_CLK_AUD_CPU, 0, 4),
82962306a36Sopenharmony_ci	DIV(CLK_DOUT_AUD_BUSD, "dout_aud_busd", "mout_aud_pll",
83062306a36Sopenharmony_ci	    CLK_CON_DIV_DIV_CLK_AUD_BUSD, 0, 4),
83162306a36Sopenharmony_ci	DIV(CLK_DOUT_AUD_BUSP, "dout_aud_busp", "mout_aud_pll",
83262306a36Sopenharmony_ci	    CLK_CON_DIV_DIV_CLK_AUD_BUSP, 0, 4),
83362306a36Sopenharmony_ci	DIV(CLK_DOUT_AUD_AUDIF, "dout_aud_audif", "mout_aud_pll",
83462306a36Sopenharmony_ci	    CLK_CON_DIV_DIV_CLK_AUD_AUDIF, 0, 9),
83562306a36Sopenharmony_ci	DIV(CLK_DOUT_AUD_CPU_ACLK, "dout_aud_cpu_aclk", "mout_aud_cpu_hch",
83662306a36Sopenharmony_ci	    CLK_CON_DIV_DIV_CLK_AUD_CPU_ACLK, 0, 3),
83762306a36Sopenharmony_ci	DIV(CLK_DOUT_AUD_CPU_PCLKDBG, "dout_aud_cpu_pclkdbg",
83862306a36Sopenharmony_ci	    "mout_aud_cpu_hch",
83962306a36Sopenharmony_ci	    CLK_CON_DIV_DIV_CLK_AUD_CPU_PCLKDBG, 0, 3),
84062306a36Sopenharmony_ci	DIV(CLK_DOUT_AUD_MCLK, "dout_aud_mclk", "dout_aud_audif",
84162306a36Sopenharmony_ci	    CLK_CON_DIV_DIV_CLK_AUD_MCLK, 0, 2),
84262306a36Sopenharmony_ci	DIV(CLK_DOUT_AUD_CNT, "dout_aud_cnt", "dout_aud_audif",
84362306a36Sopenharmony_ci	    CLK_CON_DIV_DIV_CLK_AUD_CNT, 0, 10),
84462306a36Sopenharmony_ci	DIV(CLK_DOUT_AUD_UAIF0, "dout_aud_uaif0", "dout_aud_audif",
84562306a36Sopenharmony_ci	    CLK_CON_DIV_DIV_CLK_AUD_UAIF0, 0, 10),
84662306a36Sopenharmony_ci	DIV(CLK_DOUT_AUD_UAIF1, "dout_aud_uaif1", "dout_aud_audif",
84762306a36Sopenharmony_ci	    CLK_CON_DIV_DIV_CLK_AUD_UAIF1, 0, 10),
84862306a36Sopenharmony_ci	DIV(CLK_DOUT_AUD_UAIF2, "dout_aud_uaif2", "dout_aud_audif",
84962306a36Sopenharmony_ci	    CLK_CON_DIV_DIV_CLK_AUD_UAIF2, 0, 10),
85062306a36Sopenharmony_ci	DIV(CLK_DOUT_AUD_UAIF3, "dout_aud_uaif3", "dout_aud_audif",
85162306a36Sopenharmony_ci	    CLK_CON_DIV_DIV_CLK_AUD_UAIF3, 0, 10),
85262306a36Sopenharmony_ci	DIV(CLK_DOUT_AUD_UAIF4, "dout_aud_uaif4", "dout_aud_audif",
85362306a36Sopenharmony_ci	    CLK_CON_DIV_DIV_CLK_AUD_UAIF4, 0, 10),
85462306a36Sopenharmony_ci	DIV(CLK_DOUT_AUD_UAIF5, "dout_aud_uaif5", "dout_aud_audif",
85562306a36Sopenharmony_ci	    CLK_CON_DIV_DIV_CLK_AUD_UAIF5, 0, 10),
85662306a36Sopenharmony_ci	DIV(CLK_DOUT_AUD_UAIF6, "dout_aud_uaif6", "dout_aud_audif",
85762306a36Sopenharmony_ci	    CLK_CON_DIV_DIV_CLK_AUD_UAIF6, 0, 10),
85862306a36Sopenharmony_ci	DIV(CLK_DOUT_AUD_FM_SPDY, "dout_aud_fm_spdy", "mout_aud_tick_usb_user",
85962306a36Sopenharmony_ci	    CLK_CON_DIV_DIV_CLK_AUD_FM_SPDY, 0, 1),
86062306a36Sopenharmony_ci	DIV(CLK_DOUT_AUD_FM, "dout_aud_fm", "mout_aud_fm",
86162306a36Sopenharmony_ci	    CLK_CON_DIV_DIV_CLK_AUD_FM, 0, 10),
86262306a36Sopenharmony_ci};
86362306a36Sopenharmony_ci
86462306a36Sopenharmony_cistatic const struct samsung_gate_clock aud_gate_clks[] __initconst = {
86562306a36Sopenharmony_ci	GATE(CLK_GOUT_AUD_CMU_AUD_PCLK, "gout_aud_cmu_aud_pclk",
86662306a36Sopenharmony_ci	     "dout_aud_busd",
86762306a36Sopenharmony_ci	     CLK_CON_GAT_CLK_AUD_CMU_AUD_PCLK, 21, CLK_IGNORE_UNUSED, 0),
86862306a36Sopenharmony_ci	GATE(CLK_GOUT_AUD_CA32_CCLK, "gout_aud_ca32_cclk", "mout_aud_cpu_hch",
86962306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_AUD_ABOX_CCLK_CA32, 21, 0, 0),
87062306a36Sopenharmony_ci	GATE(CLK_GOUT_AUD_ASB_CCLK, "gout_aud_asb_cclk", "dout_aud_cpu_aclk",
87162306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_AUD_ABOX_CCLK_ASB, 21, 0, 0),
87262306a36Sopenharmony_ci	GATE(CLK_GOUT_AUD_DAP_CCLK, "gout_aud_dap_cclk", "dout_aud_cpu_pclkdbg",
87362306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_AUD_ABOX_CCLK_DAP, 21, 0, 0),
87462306a36Sopenharmony_ci	/* TODO: Should be enabled in ABOX driver (or made CLK_IS_CRITICAL) */
87562306a36Sopenharmony_ci	GATE(CLK_GOUT_AUD_ABOX_ACLK, "gout_aud_abox_aclk", "dout_aud_busd",
87662306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_AUD_ABOX_ACLK, 21, CLK_IGNORE_UNUSED, 0),
87762306a36Sopenharmony_ci	GATE(CLK_GOUT_AUD_GPIO_PCLK, "gout_aud_gpio_pclk", "dout_aud_busd",
87862306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_AUD_GPIO_PCLK, 21, 0, 0),
87962306a36Sopenharmony_ci	GATE(CLK_GOUT_AUD_PPMU_ACLK, "gout_aud_ppmu_aclk", "dout_aud_busd",
88062306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_AUD_PPMU_ACLK, 21, 0, 0),
88162306a36Sopenharmony_ci	GATE(CLK_GOUT_AUD_PPMU_PCLK, "gout_aud_ppmu_pclk", "dout_aud_busd",
88262306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_AUD_PPMU_PCLK, 21, 0, 0),
88362306a36Sopenharmony_ci	GATE(CLK_GOUT_AUD_SYSMMU_CLK, "gout_aud_sysmmu_clk", "dout_aud_busd",
88462306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_AUD_SYSMMU_CLK_S1, 21, 0, 0),
88562306a36Sopenharmony_ci	GATE(CLK_GOUT_AUD_SYSREG_PCLK, "gout_aud_sysreg_pclk", "dout_aud_busd",
88662306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_AUD_SYSREG_PCLK, 21, 0, 0),
88762306a36Sopenharmony_ci	GATE(CLK_GOUT_AUD_WDT_PCLK, "gout_aud_wdt_pclk", "dout_aud_busd",
88862306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_AUD_WDT_PCLK, 21, 0, 0),
88962306a36Sopenharmony_ci	GATE(CLK_GOUT_AUD_TZPC_PCLK, "gout_aud_tzpc_pclk", "dout_aud_busp",
89062306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_AUD_TZPC_PCLK, 21, 0, 0),
89162306a36Sopenharmony_ci	GATE(CLK_GOUT_AUD_CODEC_MCLK, "gout_aud_codec_mclk", "dout_aud_mclk",
89262306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_AUD_CODEC_MCLK, 21, 0, 0),
89362306a36Sopenharmony_ci	GATE(CLK_GOUT_AUD_CNT_BCLK, "gout_aud_cnt_bclk", "dout_aud_cnt",
89462306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_AUD_ABOX_BCLK_CNT, 21, 0, 0),
89562306a36Sopenharmony_ci	GATE(CLK_GOUT_AUD_UAIF0_BCLK, "gout_aud_uaif0_bclk", "mout_aud_uaif0",
89662306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_AUD_ABOX_BCLK_UAIF0, 21, 0, 0),
89762306a36Sopenharmony_ci	GATE(CLK_GOUT_AUD_UAIF1_BCLK, "gout_aud_uaif1_bclk", "mout_aud_uaif1",
89862306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_AUD_ABOX_BCLK_UAIF1, 21, 0, 0),
89962306a36Sopenharmony_ci	GATE(CLK_GOUT_AUD_UAIF2_BCLK, "gout_aud_uaif2_bclk", "mout_aud_uaif2",
90062306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_AUD_ABOX_BCLK_UAIF2, 21, 0, 0),
90162306a36Sopenharmony_ci	GATE(CLK_GOUT_AUD_UAIF3_BCLK, "gout_aud_uaif3_bclk", "mout_aud_uaif3",
90262306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_AUD_ABOX_BCLK_UAIF3, 21, 0, 0),
90362306a36Sopenharmony_ci	GATE(CLK_GOUT_AUD_UAIF4_BCLK, "gout_aud_uaif4_bclk", "mout_aud_uaif4",
90462306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_AUD_ABOX_BCLK_UAIF4, 21, 0, 0),
90562306a36Sopenharmony_ci	GATE(CLK_GOUT_AUD_UAIF5_BCLK, "gout_aud_uaif5_bclk", "mout_aud_uaif5",
90662306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_AUD_ABOX_BCLK_UAIF5, 21, 0, 0),
90762306a36Sopenharmony_ci	GATE(CLK_GOUT_AUD_UAIF6_BCLK, "gout_aud_uaif6_bclk", "mout_aud_uaif6",
90862306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_AUD_ABOX_BCLK_UAIF6, 21, 0, 0),
90962306a36Sopenharmony_ci	GATE(CLK_GOUT_AUD_SPDY_BCLK, "gout_aud_spdy_bclk", "dout_aud_fm",
91062306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_AUD_ABOX_BCLK_SPDY, 21, 0, 0),
91162306a36Sopenharmony_ci};
91262306a36Sopenharmony_ci
91362306a36Sopenharmony_cistatic const struct samsung_cmu_info aud_cmu_info __initconst = {
91462306a36Sopenharmony_ci	.pll_clks		= aud_pll_clks,
91562306a36Sopenharmony_ci	.nr_pll_clks		= ARRAY_SIZE(aud_pll_clks),
91662306a36Sopenharmony_ci	.mux_clks		= aud_mux_clks,
91762306a36Sopenharmony_ci	.nr_mux_clks		= ARRAY_SIZE(aud_mux_clks),
91862306a36Sopenharmony_ci	.div_clks		= aud_div_clks,
91962306a36Sopenharmony_ci	.nr_div_clks		= ARRAY_SIZE(aud_div_clks),
92062306a36Sopenharmony_ci	.gate_clks		= aud_gate_clks,
92162306a36Sopenharmony_ci	.nr_gate_clks		= ARRAY_SIZE(aud_gate_clks),
92262306a36Sopenharmony_ci	.fixed_clks		= aud_fixed_clks,
92362306a36Sopenharmony_ci	.nr_fixed_clks		= ARRAY_SIZE(aud_fixed_clks),
92462306a36Sopenharmony_ci	.nr_clk_ids		= CLKS_NR_AUD,
92562306a36Sopenharmony_ci	.clk_regs		= aud_clk_regs,
92662306a36Sopenharmony_ci	.nr_clk_regs		= ARRAY_SIZE(aud_clk_regs),
92762306a36Sopenharmony_ci	.clk_name		= "dout_aud",
92862306a36Sopenharmony_ci};
92962306a36Sopenharmony_ci
93062306a36Sopenharmony_ci/* ---- CMU_CMGP ------------------------------------------------------------ */
93162306a36Sopenharmony_ci
93262306a36Sopenharmony_ci/* Register Offset definitions for CMU_CMGP (0x11c00000) */
93362306a36Sopenharmony_ci#define CLK_CON_MUX_CLK_CMGP_ADC		0x1000
93462306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLK_CMGP_USI_CMGP0	0x1004
93562306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLK_CMGP_USI_CMGP1	0x1008
93662306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_CMGP_ADC		0x1800
93762306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_CMGP_USI_CMGP0	0x1804
93862306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_CMGP_USI_CMGP1	0x1808
93962306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_CMGP_ADC_PCLK_S0	0x200c
94062306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_CMGP_ADC_PCLK_S1	0x2010
94162306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_CMGP_GPIO_PCLK		0x2018
94262306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_CMGP_SYSREG_CMGP_PCLK	0x2040
94362306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_CMGP_USI_CMGP0_IPCLK	0x2044
94462306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_CMGP_USI_CMGP0_PCLK	0x2048
94562306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_CMGP_USI_CMGP1_IPCLK	0x204c
94662306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_CMGP_USI_CMGP1_PCLK	0x2050
94762306a36Sopenharmony_ci
94862306a36Sopenharmony_cistatic const unsigned long cmgp_clk_regs[] __initconst = {
94962306a36Sopenharmony_ci	CLK_CON_MUX_CLK_CMGP_ADC,
95062306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLK_CMGP_USI_CMGP0,
95162306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLK_CMGP_USI_CMGP1,
95262306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_CMGP_ADC,
95362306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_CMGP_USI_CMGP0,
95462306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_CMGP_USI_CMGP1,
95562306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_CMGP_ADC_PCLK_S0,
95662306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_CMGP_ADC_PCLK_S1,
95762306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_CMGP_GPIO_PCLK,
95862306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_CMGP_SYSREG_CMGP_PCLK,
95962306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_CMGP_USI_CMGP0_IPCLK,
96062306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_CMGP_USI_CMGP0_PCLK,
96162306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_CMGP_USI_CMGP1_IPCLK,
96262306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_CMGP_USI_CMGP1_PCLK,
96362306a36Sopenharmony_ci};
96462306a36Sopenharmony_ci
96562306a36Sopenharmony_ci/* List of parent clocks for Muxes in CMU_CMGP */
96662306a36Sopenharmony_ciPNAME(mout_cmgp_usi0_p)	= { "clk_rco_cmgp", "gout_clkcmu_cmgp_bus" };
96762306a36Sopenharmony_ciPNAME(mout_cmgp_usi1_p)	= { "clk_rco_cmgp", "gout_clkcmu_cmgp_bus" };
96862306a36Sopenharmony_ciPNAME(mout_cmgp_adc_p)	= { "oscclk", "dout_cmgp_adc" };
96962306a36Sopenharmony_ci
97062306a36Sopenharmony_cistatic const struct samsung_fixed_rate_clock cmgp_fixed_clks[] __initconst = {
97162306a36Sopenharmony_ci	FRATE(CLK_RCO_CMGP, "clk_rco_cmgp", NULL, 0, 49152000),
97262306a36Sopenharmony_ci};
97362306a36Sopenharmony_ci
97462306a36Sopenharmony_cistatic const struct samsung_mux_clock cmgp_mux_clks[] __initconst = {
97562306a36Sopenharmony_ci	MUX(CLK_MOUT_CMGP_ADC, "mout_cmgp_adc", mout_cmgp_adc_p,
97662306a36Sopenharmony_ci	    CLK_CON_MUX_CLK_CMGP_ADC, 0, 1),
97762306a36Sopenharmony_ci	MUX_F(CLK_MOUT_CMGP_USI0, "mout_cmgp_usi0", mout_cmgp_usi0_p,
97862306a36Sopenharmony_ci	      CLK_CON_MUX_MUX_CLK_CMGP_USI_CMGP0, 0, 1, CLK_SET_RATE_PARENT, 0),
97962306a36Sopenharmony_ci	MUX_F(CLK_MOUT_CMGP_USI1, "mout_cmgp_usi1", mout_cmgp_usi1_p,
98062306a36Sopenharmony_ci	      CLK_CON_MUX_MUX_CLK_CMGP_USI_CMGP1, 0, 1, CLK_SET_RATE_PARENT, 0),
98162306a36Sopenharmony_ci};
98262306a36Sopenharmony_ci
98362306a36Sopenharmony_cistatic const struct samsung_div_clock cmgp_div_clks[] __initconst = {
98462306a36Sopenharmony_ci	DIV(CLK_DOUT_CMGP_ADC, "dout_cmgp_adc", "gout_clkcmu_cmgp_bus",
98562306a36Sopenharmony_ci	    CLK_CON_DIV_DIV_CLK_CMGP_ADC, 0, 4),
98662306a36Sopenharmony_ci	DIV_F(CLK_DOUT_CMGP_USI0, "dout_cmgp_usi0", "mout_cmgp_usi0",
98762306a36Sopenharmony_ci	      CLK_CON_DIV_DIV_CLK_CMGP_USI_CMGP0, 0, 5, CLK_SET_RATE_PARENT, 0),
98862306a36Sopenharmony_ci	DIV_F(CLK_DOUT_CMGP_USI1, "dout_cmgp_usi1", "mout_cmgp_usi1",
98962306a36Sopenharmony_ci	      CLK_CON_DIV_DIV_CLK_CMGP_USI_CMGP1, 0, 5, CLK_SET_RATE_PARENT, 0),
99062306a36Sopenharmony_ci};
99162306a36Sopenharmony_ci
99262306a36Sopenharmony_cistatic const struct samsung_gate_clock cmgp_gate_clks[] __initconst = {
99362306a36Sopenharmony_ci	GATE(CLK_GOUT_CMGP_ADC_S0_PCLK, "gout_adc_s0_pclk",
99462306a36Sopenharmony_ci	     "gout_clkcmu_cmgp_bus",
99562306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_CMGP_ADC_PCLK_S0, 21, 0, 0),
99662306a36Sopenharmony_ci	GATE(CLK_GOUT_CMGP_ADC_S1_PCLK, "gout_adc_s1_pclk",
99762306a36Sopenharmony_ci	     "gout_clkcmu_cmgp_bus",
99862306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_CMGP_ADC_PCLK_S1, 21, 0, 0),
99962306a36Sopenharmony_ci	/* TODO: Should be enabled in GPIO driver (or made CLK_IS_CRITICAL) */
100062306a36Sopenharmony_ci	GATE(CLK_GOUT_CMGP_GPIO_PCLK, "gout_gpio_cmgp_pclk",
100162306a36Sopenharmony_ci	     "gout_clkcmu_cmgp_bus",
100262306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_CMGP_GPIO_PCLK, 21, CLK_IGNORE_UNUSED, 0),
100362306a36Sopenharmony_ci	GATE(CLK_GOUT_CMGP_USI0_IPCLK, "gout_cmgp_usi0_ipclk", "dout_cmgp_usi0",
100462306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_CMGP_USI_CMGP0_IPCLK, 21, CLK_SET_RATE_PARENT, 0),
100562306a36Sopenharmony_ci	GATE(CLK_GOUT_CMGP_USI0_PCLK, "gout_cmgp_usi0_pclk",
100662306a36Sopenharmony_ci	     "gout_clkcmu_cmgp_bus",
100762306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_CMGP_USI_CMGP0_PCLK, 21, 0, 0),
100862306a36Sopenharmony_ci	GATE(CLK_GOUT_CMGP_USI1_IPCLK, "gout_cmgp_usi1_ipclk", "dout_cmgp_usi1",
100962306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_CMGP_USI_CMGP1_IPCLK, 21, CLK_SET_RATE_PARENT, 0),
101062306a36Sopenharmony_ci	GATE(CLK_GOUT_CMGP_USI1_PCLK, "gout_cmgp_usi1_pclk",
101162306a36Sopenharmony_ci	     "gout_clkcmu_cmgp_bus",
101262306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_CMGP_USI_CMGP1_PCLK, 21, 0, 0),
101362306a36Sopenharmony_ci	GATE(CLK_GOUT_SYSREG_CMGP_PCLK, "gout_sysreg_cmgp_pclk",
101462306a36Sopenharmony_ci	     "gout_clkcmu_cmgp_bus",
101562306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_CMGP_SYSREG_CMGP_PCLK, 21, 0, 0),
101662306a36Sopenharmony_ci};
101762306a36Sopenharmony_ci
101862306a36Sopenharmony_cistatic const struct samsung_cmu_info cmgp_cmu_info __initconst = {
101962306a36Sopenharmony_ci	.mux_clks		= cmgp_mux_clks,
102062306a36Sopenharmony_ci	.nr_mux_clks		= ARRAY_SIZE(cmgp_mux_clks),
102162306a36Sopenharmony_ci	.div_clks		= cmgp_div_clks,
102262306a36Sopenharmony_ci	.nr_div_clks		= ARRAY_SIZE(cmgp_div_clks),
102362306a36Sopenharmony_ci	.gate_clks		= cmgp_gate_clks,
102462306a36Sopenharmony_ci	.nr_gate_clks		= ARRAY_SIZE(cmgp_gate_clks),
102562306a36Sopenharmony_ci	.fixed_clks		= cmgp_fixed_clks,
102662306a36Sopenharmony_ci	.nr_fixed_clks		= ARRAY_SIZE(cmgp_fixed_clks),
102762306a36Sopenharmony_ci	.nr_clk_ids		= CLKS_NR_CMGP,
102862306a36Sopenharmony_ci	.clk_regs		= cmgp_clk_regs,
102962306a36Sopenharmony_ci	.nr_clk_regs		= ARRAY_SIZE(cmgp_clk_regs),
103062306a36Sopenharmony_ci	.clk_name		= "gout_clkcmu_cmgp_bus",
103162306a36Sopenharmony_ci};
103262306a36Sopenharmony_ci
103362306a36Sopenharmony_ci/* ---- CMU_G3D ------------------------------------------------------------- */
103462306a36Sopenharmony_ci
103562306a36Sopenharmony_ci/* Register Offset definitions for CMU_G3D (0x11400000) */
103662306a36Sopenharmony_ci#define PLL_LOCKTIME_PLL_G3D			0x0000
103762306a36Sopenharmony_ci#define PLL_CON0_PLL_G3D			0x0100
103862306a36Sopenharmony_ci#define PLL_CON3_PLL_G3D			0x010c
103962306a36Sopenharmony_ci#define PLL_CON0_MUX_CLKCMU_G3D_SWITCH_USER	0x0600
104062306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLK_G3D_BUSD		0x1000
104162306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_G3D_BUSP		0x1804
104262306a36Sopenharmony_ci#define CLK_CON_GAT_CLK_G3D_CMU_G3D_PCLK	0x2000
104362306a36Sopenharmony_ci#define CLK_CON_GAT_CLK_G3D_GPU_CLK		0x2004
104462306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_G3D_TZPC_PCLK		0x200c
104562306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_G3D_GRAY2BIN_CLK	0x2010
104662306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_G3D_BUSD_CLK		0x2024
104762306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_G3D_BUSP_CLK		0x2028
104862306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_G3D_SYSREG_PCLK	0x202c
104962306a36Sopenharmony_ci
105062306a36Sopenharmony_cistatic const unsigned long g3d_clk_regs[] __initconst = {
105162306a36Sopenharmony_ci	PLL_LOCKTIME_PLL_G3D,
105262306a36Sopenharmony_ci	PLL_CON0_PLL_G3D,
105362306a36Sopenharmony_ci	PLL_CON3_PLL_G3D,
105462306a36Sopenharmony_ci	PLL_CON0_MUX_CLKCMU_G3D_SWITCH_USER,
105562306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLK_G3D_BUSD,
105662306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_G3D_BUSP,
105762306a36Sopenharmony_ci	CLK_CON_GAT_CLK_G3D_CMU_G3D_PCLK,
105862306a36Sopenharmony_ci	CLK_CON_GAT_CLK_G3D_GPU_CLK,
105962306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_G3D_TZPC_PCLK,
106062306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_G3D_GRAY2BIN_CLK,
106162306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_G3D_BUSD_CLK,
106262306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_G3D_BUSP_CLK,
106362306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_G3D_SYSREG_PCLK,
106462306a36Sopenharmony_ci};
106562306a36Sopenharmony_ci
106662306a36Sopenharmony_ci/* List of parent clocks for Muxes in CMU_G3D */
106762306a36Sopenharmony_ciPNAME(mout_g3d_pll_p)		= { "oscclk", "fout_g3d_pll" };
106862306a36Sopenharmony_ciPNAME(mout_g3d_switch_user_p)	= { "oscclk", "dout_g3d_switch" };
106962306a36Sopenharmony_ciPNAME(mout_g3d_busd_p)		= { "mout_g3d_pll", "mout_g3d_switch_user" };
107062306a36Sopenharmony_ci
107162306a36Sopenharmony_ci/*
107262306a36Sopenharmony_ci * Do not provide PLL table to PLL_G3D, as MANUAL_PLL_CTRL bit is not set
107362306a36Sopenharmony_ci * for that PLL by default, so set_rate operation would fail.
107462306a36Sopenharmony_ci */
107562306a36Sopenharmony_cistatic const struct samsung_pll_clock g3d_pll_clks[] __initconst = {
107662306a36Sopenharmony_ci	PLL(pll_0818x, CLK_FOUT_G3D_PLL, "fout_g3d_pll", "oscclk",
107762306a36Sopenharmony_ci	    PLL_LOCKTIME_PLL_G3D, PLL_CON3_PLL_G3D, NULL),
107862306a36Sopenharmony_ci};
107962306a36Sopenharmony_ci
108062306a36Sopenharmony_cistatic const struct samsung_mux_clock g3d_mux_clks[] __initconst = {
108162306a36Sopenharmony_ci	MUX(CLK_MOUT_G3D_PLL, "mout_g3d_pll", mout_g3d_pll_p,
108262306a36Sopenharmony_ci	    PLL_CON0_PLL_G3D, 4, 1),
108362306a36Sopenharmony_ci	MUX(CLK_MOUT_G3D_SWITCH_USER, "mout_g3d_switch_user",
108462306a36Sopenharmony_ci	    mout_g3d_switch_user_p,
108562306a36Sopenharmony_ci	    PLL_CON0_MUX_CLKCMU_G3D_SWITCH_USER, 4, 1),
108662306a36Sopenharmony_ci	MUX(CLK_MOUT_G3D_BUSD, "mout_g3d_busd", mout_g3d_busd_p,
108762306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLK_G3D_BUSD, 0, 1),
108862306a36Sopenharmony_ci};
108962306a36Sopenharmony_ci
109062306a36Sopenharmony_cistatic const struct samsung_div_clock g3d_div_clks[] __initconst = {
109162306a36Sopenharmony_ci	DIV(CLK_DOUT_G3D_BUSP, "dout_g3d_busp", "mout_g3d_busd",
109262306a36Sopenharmony_ci	    CLK_CON_DIV_DIV_CLK_G3D_BUSP, 0, 3),
109362306a36Sopenharmony_ci};
109462306a36Sopenharmony_ci
109562306a36Sopenharmony_cistatic const struct samsung_gate_clock g3d_gate_clks[] __initconst = {
109662306a36Sopenharmony_ci	GATE(CLK_GOUT_G3D_CMU_G3D_PCLK, "gout_g3d_cmu_g3d_pclk",
109762306a36Sopenharmony_ci	     "dout_g3d_busp",
109862306a36Sopenharmony_ci	     CLK_CON_GAT_CLK_G3D_CMU_G3D_PCLK, 21, CLK_IGNORE_UNUSED, 0),
109962306a36Sopenharmony_ci	GATE(CLK_GOUT_G3D_GPU_CLK, "gout_g3d_gpu_clk", "mout_g3d_busd",
110062306a36Sopenharmony_ci	     CLK_CON_GAT_CLK_G3D_GPU_CLK, 21, 0, 0),
110162306a36Sopenharmony_ci	GATE(CLK_GOUT_G3D_TZPC_PCLK, "gout_g3d_tzpc_pclk", "dout_g3d_busp",
110262306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_G3D_TZPC_PCLK, 21, 0, 0),
110362306a36Sopenharmony_ci	GATE(CLK_GOUT_G3D_GRAY2BIN_CLK, "gout_g3d_gray2bin_clk",
110462306a36Sopenharmony_ci	     "mout_g3d_busd",
110562306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_G3D_GRAY2BIN_CLK, 21, 0, 0),
110662306a36Sopenharmony_ci	GATE(CLK_GOUT_G3D_BUSD_CLK, "gout_g3d_busd_clk", "mout_g3d_busd",
110762306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_G3D_BUSD_CLK, 21, 0, 0),
110862306a36Sopenharmony_ci	GATE(CLK_GOUT_G3D_BUSP_CLK, "gout_g3d_busp_clk", "dout_g3d_busp",
110962306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_G3D_BUSP_CLK, 21, 0, 0),
111062306a36Sopenharmony_ci	GATE(CLK_GOUT_G3D_SYSREG_PCLK, "gout_g3d_sysreg_pclk", "dout_g3d_busp",
111162306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_G3D_SYSREG_PCLK, 21, 0, 0),
111262306a36Sopenharmony_ci};
111362306a36Sopenharmony_ci
111462306a36Sopenharmony_cistatic const struct samsung_cmu_info g3d_cmu_info __initconst = {
111562306a36Sopenharmony_ci	.pll_clks		= g3d_pll_clks,
111662306a36Sopenharmony_ci	.nr_pll_clks		= ARRAY_SIZE(g3d_pll_clks),
111762306a36Sopenharmony_ci	.mux_clks		= g3d_mux_clks,
111862306a36Sopenharmony_ci	.nr_mux_clks		= ARRAY_SIZE(g3d_mux_clks),
111962306a36Sopenharmony_ci	.div_clks		= g3d_div_clks,
112062306a36Sopenharmony_ci	.nr_div_clks		= ARRAY_SIZE(g3d_div_clks),
112162306a36Sopenharmony_ci	.gate_clks		= g3d_gate_clks,
112262306a36Sopenharmony_ci	.nr_gate_clks		= ARRAY_SIZE(g3d_gate_clks),
112362306a36Sopenharmony_ci	.nr_clk_ids		= CLKS_NR_G3D,
112462306a36Sopenharmony_ci	.clk_regs		= g3d_clk_regs,
112562306a36Sopenharmony_ci	.nr_clk_regs		= ARRAY_SIZE(g3d_clk_regs),
112662306a36Sopenharmony_ci	.clk_name		= "dout_g3d_switch",
112762306a36Sopenharmony_ci};
112862306a36Sopenharmony_ci
112962306a36Sopenharmony_ci/* ---- CMU_HSI ------------------------------------------------------------- */
113062306a36Sopenharmony_ci
113162306a36Sopenharmony_ci/* Register Offset definitions for CMU_HSI (0x13400000) */
113262306a36Sopenharmony_ci#define PLL_CON0_MUX_CLKCMU_HSI_BUS_USER			0x0600
113362306a36Sopenharmony_ci#define PLL_CON0_MUX_CLKCMU_HSI_MMC_CARD_USER			0x0610
113462306a36Sopenharmony_ci#define PLL_CON0_MUX_CLKCMU_HSI_USB20DRD_USER			0x0620
113562306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLK_HSI_RTC				0x1000
113662306a36Sopenharmony_ci#define CLK_CON_GAT_CLK_HSI_CMU_HSI_PCLK			0x2000
113762306a36Sopenharmony_ci#define CLK_CON_GAT_HSI_USB20DRD_TOP_I_RTC_CLK__ALV		0x2008
113862306a36Sopenharmony_ci#define CLK_CON_GAT_HSI_USB20DRD_TOP_I_REF_CLK_50		0x200c
113962306a36Sopenharmony_ci#define CLK_CON_GAT_HSI_USB20DRD_TOP_I_PHY_REFCLK_26		0x2010
114062306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_HSI_GPIO_HSI_PCLK			0x2018
114162306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_HSI_MMC_CARD_I_ACLK			0x2024
114262306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_HSI_MMC_CARD_SDCLKIN			0x2028
114362306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_HSI_PPMU_ACLK				0x202c
114462306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_HSI_PPMU_PCLK				0x2030
114562306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_HSI_SYSREG_HSI_PCLK			0x2038
114662306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_HSI_USB20DRD_TOP_ACLK_PHYCTRL_20	0x203c
114762306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_HSI_USB20DRD_TOP_BUS_CLK_EARLY		0x2040
114862306a36Sopenharmony_ci
114962306a36Sopenharmony_cistatic const unsigned long hsi_clk_regs[] __initconst = {
115062306a36Sopenharmony_ci	PLL_CON0_MUX_CLKCMU_HSI_BUS_USER,
115162306a36Sopenharmony_ci	PLL_CON0_MUX_CLKCMU_HSI_MMC_CARD_USER,
115262306a36Sopenharmony_ci	PLL_CON0_MUX_CLKCMU_HSI_USB20DRD_USER,
115362306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLK_HSI_RTC,
115462306a36Sopenharmony_ci	CLK_CON_GAT_CLK_HSI_CMU_HSI_PCLK,
115562306a36Sopenharmony_ci	CLK_CON_GAT_HSI_USB20DRD_TOP_I_RTC_CLK__ALV,
115662306a36Sopenharmony_ci	CLK_CON_GAT_HSI_USB20DRD_TOP_I_REF_CLK_50,
115762306a36Sopenharmony_ci	CLK_CON_GAT_HSI_USB20DRD_TOP_I_PHY_REFCLK_26,
115862306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_HSI_GPIO_HSI_PCLK,
115962306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_HSI_MMC_CARD_I_ACLK,
116062306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_HSI_MMC_CARD_SDCLKIN,
116162306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_HSI_PPMU_ACLK,
116262306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_HSI_PPMU_PCLK,
116362306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_HSI_SYSREG_HSI_PCLK,
116462306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_HSI_USB20DRD_TOP_ACLK_PHYCTRL_20,
116562306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_HSI_USB20DRD_TOP_BUS_CLK_EARLY,
116662306a36Sopenharmony_ci};
116762306a36Sopenharmony_ci
116862306a36Sopenharmony_ci/* List of parent clocks for Muxes in CMU_HSI */
116962306a36Sopenharmony_ciPNAME(mout_hsi_bus_user_p)	= { "oscclk", "dout_hsi_bus" };
117062306a36Sopenharmony_ciPNAME(mout_hsi_mmc_card_user_p)	= { "oscclk", "dout_hsi_mmc_card" };
117162306a36Sopenharmony_ciPNAME(mout_hsi_usb20drd_user_p)	= { "oscclk", "dout_hsi_usb20drd" };
117262306a36Sopenharmony_ciPNAME(mout_hsi_rtc_p)		= { "rtcclk", "oscclk" };
117362306a36Sopenharmony_ci
117462306a36Sopenharmony_cistatic const struct samsung_mux_clock hsi_mux_clks[] __initconst = {
117562306a36Sopenharmony_ci	MUX(CLK_MOUT_HSI_BUS_USER, "mout_hsi_bus_user", mout_hsi_bus_user_p,
117662306a36Sopenharmony_ci	    PLL_CON0_MUX_CLKCMU_HSI_BUS_USER, 4, 1),
117762306a36Sopenharmony_ci	MUX_F(CLK_MOUT_HSI_MMC_CARD_USER, "mout_hsi_mmc_card_user",
117862306a36Sopenharmony_ci	      mout_hsi_mmc_card_user_p, PLL_CON0_MUX_CLKCMU_HSI_MMC_CARD_USER,
117962306a36Sopenharmony_ci	      4, 1, CLK_SET_RATE_PARENT, 0),
118062306a36Sopenharmony_ci	MUX(CLK_MOUT_HSI_USB20DRD_USER, "mout_hsi_usb20drd_user",
118162306a36Sopenharmony_ci	    mout_hsi_usb20drd_user_p, PLL_CON0_MUX_CLKCMU_HSI_USB20DRD_USER,
118262306a36Sopenharmony_ci	    4, 1),
118362306a36Sopenharmony_ci	MUX(CLK_MOUT_HSI_RTC, "mout_hsi_rtc", mout_hsi_rtc_p,
118462306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLK_HSI_RTC, 0, 1),
118562306a36Sopenharmony_ci};
118662306a36Sopenharmony_ci
118762306a36Sopenharmony_cistatic const struct samsung_gate_clock hsi_gate_clks[] __initconst = {
118862306a36Sopenharmony_ci	/* TODO: Should be enabled in corresponding driver */
118962306a36Sopenharmony_ci	GATE(CLK_GOUT_HSI_CMU_HSI_PCLK, "gout_hsi_cmu_hsi_pclk",
119062306a36Sopenharmony_ci	     "mout_hsi_bus_user",
119162306a36Sopenharmony_ci	     CLK_CON_GAT_CLK_HSI_CMU_HSI_PCLK, 21, CLK_IGNORE_UNUSED, 0),
119262306a36Sopenharmony_ci	GATE(CLK_GOUT_USB_RTC_CLK, "gout_usb_rtc", "mout_hsi_rtc",
119362306a36Sopenharmony_ci	     CLK_CON_GAT_HSI_USB20DRD_TOP_I_RTC_CLK__ALV, 21, 0, 0),
119462306a36Sopenharmony_ci	GATE(CLK_GOUT_USB_REF_CLK, "gout_usb_ref", "mout_hsi_usb20drd_user",
119562306a36Sopenharmony_ci	     CLK_CON_GAT_HSI_USB20DRD_TOP_I_REF_CLK_50, 21, 0, 0),
119662306a36Sopenharmony_ci	GATE(CLK_GOUT_USB_PHY_REF_CLK, "gout_usb_phy_ref", "oscclk",
119762306a36Sopenharmony_ci	     CLK_CON_GAT_HSI_USB20DRD_TOP_I_PHY_REFCLK_26, 21, 0, 0),
119862306a36Sopenharmony_ci	/* TODO: Should be enabled in GPIO driver (or made CLK_IS_CRITICAL) */
119962306a36Sopenharmony_ci	GATE(CLK_GOUT_GPIO_HSI_PCLK, "gout_gpio_hsi_pclk", "mout_hsi_bus_user",
120062306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_HSI_GPIO_HSI_PCLK, 21, CLK_IGNORE_UNUSED, 0),
120162306a36Sopenharmony_ci	GATE(CLK_GOUT_MMC_CARD_ACLK, "gout_mmc_card_aclk", "mout_hsi_bus_user",
120262306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_HSI_MMC_CARD_I_ACLK, 21, 0, 0),
120362306a36Sopenharmony_ci	GATE(CLK_GOUT_MMC_CARD_SDCLKIN, "gout_mmc_card_sdclkin",
120462306a36Sopenharmony_ci	     "mout_hsi_mmc_card_user",
120562306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_HSI_MMC_CARD_SDCLKIN, 21, CLK_SET_RATE_PARENT, 0),
120662306a36Sopenharmony_ci	GATE(CLK_GOUT_HSI_PPMU_ACLK, "gout_hsi_ppmu_aclk", "mout_hsi_bus_user",
120762306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_HSI_PPMU_ACLK, 21, 0, 0),
120862306a36Sopenharmony_ci	GATE(CLK_GOUT_HSI_PPMU_PCLK, "gout_hsi_ppmu_pclk", "mout_hsi_bus_user",
120962306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_HSI_PPMU_PCLK, 21, 0, 0),
121062306a36Sopenharmony_ci	GATE(CLK_GOUT_SYSREG_HSI_PCLK, "gout_sysreg_hsi_pclk",
121162306a36Sopenharmony_ci	     "mout_hsi_bus_user",
121262306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_HSI_SYSREG_HSI_PCLK, 21, 0, 0),
121362306a36Sopenharmony_ci	GATE(CLK_GOUT_USB_PHY_ACLK, "gout_usb_phy_aclk", "mout_hsi_bus_user",
121462306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_HSI_USB20DRD_TOP_ACLK_PHYCTRL_20, 21, 0, 0),
121562306a36Sopenharmony_ci	GATE(CLK_GOUT_USB_BUS_EARLY_CLK, "gout_usb_bus_early",
121662306a36Sopenharmony_ci	     "mout_hsi_bus_user",
121762306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_HSI_USB20DRD_TOP_BUS_CLK_EARLY, 21, 0, 0),
121862306a36Sopenharmony_ci};
121962306a36Sopenharmony_ci
122062306a36Sopenharmony_cistatic const struct samsung_cmu_info hsi_cmu_info __initconst = {
122162306a36Sopenharmony_ci	.mux_clks		= hsi_mux_clks,
122262306a36Sopenharmony_ci	.nr_mux_clks		= ARRAY_SIZE(hsi_mux_clks),
122362306a36Sopenharmony_ci	.gate_clks		= hsi_gate_clks,
122462306a36Sopenharmony_ci	.nr_gate_clks		= ARRAY_SIZE(hsi_gate_clks),
122562306a36Sopenharmony_ci	.nr_clk_ids		= CLKS_NR_HSI,
122662306a36Sopenharmony_ci	.clk_regs		= hsi_clk_regs,
122762306a36Sopenharmony_ci	.nr_clk_regs		= ARRAY_SIZE(hsi_clk_regs),
122862306a36Sopenharmony_ci	.clk_name		= "dout_hsi_bus",
122962306a36Sopenharmony_ci};
123062306a36Sopenharmony_ci
123162306a36Sopenharmony_ci/* ---- CMU_IS -------------------------------------------------------------- */
123262306a36Sopenharmony_ci
123362306a36Sopenharmony_ci#define PLL_CON0_MUX_CLKCMU_IS_BUS_USER		0x0600
123462306a36Sopenharmony_ci#define PLL_CON0_MUX_CLKCMU_IS_GDC_USER		0x0610
123562306a36Sopenharmony_ci#define PLL_CON0_MUX_CLKCMU_IS_ITP_USER		0x0620
123662306a36Sopenharmony_ci#define PLL_CON0_MUX_CLKCMU_IS_VRA_USER		0x0630
123762306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_IS_BUSP		0x1800
123862306a36Sopenharmony_ci#define CLK_CON_GAT_CLK_IS_CMU_IS_PCLK		0x2000
123962306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_IS_CSIS0_ACLK		0x2040
124062306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_IS_CSIS1_ACLK		0x2044
124162306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_IS_CSIS2_ACLK		0x2048
124262306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_IS_TZPC_PCLK		0x204c
124362306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_IS_CLK_CSIS_DMA	0x2050
124462306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_IS_CLK_GDC		0x2054
124562306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_IS_CLK_IPP		0x2058
124662306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_IS_CLK_ITP		0x205c
124762306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_IS_CLK_MCSC		0x2060
124862306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_IS_CLK_VRA		0x2064
124962306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_IS_PPMU_IS0_ACLK	0x2074
125062306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_IS_PPMU_IS0_PCLK	0x2078
125162306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_IS_PPMU_IS1_ACLK	0x207c
125262306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_IS_PPMU_IS1_PCLK	0x2080
125362306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_IS_SYSMMU_IS0_CLK_S1	0x2098
125462306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_IS_SYSMMU_IS1_CLK_S1	0x209c
125562306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_IS_SYSREG_PCLK		0x20a0
125662306a36Sopenharmony_ci
125762306a36Sopenharmony_cistatic const unsigned long is_clk_regs[] __initconst = {
125862306a36Sopenharmony_ci	PLL_CON0_MUX_CLKCMU_IS_BUS_USER,
125962306a36Sopenharmony_ci	PLL_CON0_MUX_CLKCMU_IS_GDC_USER,
126062306a36Sopenharmony_ci	PLL_CON0_MUX_CLKCMU_IS_ITP_USER,
126162306a36Sopenharmony_ci	PLL_CON0_MUX_CLKCMU_IS_VRA_USER,
126262306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_IS_BUSP,
126362306a36Sopenharmony_ci	CLK_CON_GAT_CLK_IS_CMU_IS_PCLK,
126462306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_IS_CSIS0_ACLK,
126562306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_IS_CSIS1_ACLK,
126662306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_IS_CSIS2_ACLK,
126762306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_IS_TZPC_PCLK,
126862306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_IS_CLK_CSIS_DMA,
126962306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_IS_CLK_GDC,
127062306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_IS_CLK_IPP,
127162306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_IS_CLK_ITP,
127262306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_IS_CLK_MCSC,
127362306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_IS_CLK_VRA,
127462306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_IS_PPMU_IS0_ACLK,
127562306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_IS_PPMU_IS0_PCLK,
127662306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_IS_PPMU_IS1_ACLK,
127762306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_IS_PPMU_IS1_PCLK,
127862306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_IS_SYSMMU_IS0_CLK_S1,
127962306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_IS_SYSMMU_IS1_CLK_S1,
128062306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_IS_SYSREG_PCLK,
128162306a36Sopenharmony_ci};
128262306a36Sopenharmony_ci
128362306a36Sopenharmony_ci/* List of parent clocks for Muxes in CMU_IS */
128462306a36Sopenharmony_ciPNAME(mout_is_bus_user_p)	= { "oscclk", "dout_is_bus" };
128562306a36Sopenharmony_ciPNAME(mout_is_itp_user_p)	= { "oscclk", "dout_is_itp" };
128662306a36Sopenharmony_ciPNAME(mout_is_vra_user_p)	= { "oscclk", "dout_is_vra" };
128762306a36Sopenharmony_ciPNAME(mout_is_gdc_user_p)	= { "oscclk", "dout_is_gdc" };
128862306a36Sopenharmony_ci
128962306a36Sopenharmony_cistatic const struct samsung_mux_clock is_mux_clks[] __initconst = {
129062306a36Sopenharmony_ci	MUX(CLK_MOUT_IS_BUS_USER, "mout_is_bus_user", mout_is_bus_user_p,
129162306a36Sopenharmony_ci	    PLL_CON0_MUX_CLKCMU_IS_BUS_USER, 4, 1),
129262306a36Sopenharmony_ci	MUX(CLK_MOUT_IS_ITP_USER, "mout_is_itp_user", mout_is_itp_user_p,
129362306a36Sopenharmony_ci	    PLL_CON0_MUX_CLKCMU_IS_ITP_USER, 4, 1),
129462306a36Sopenharmony_ci	MUX(CLK_MOUT_IS_VRA_USER, "mout_is_vra_user", mout_is_vra_user_p,
129562306a36Sopenharmony_ci	    PLL_CON0_MUX_CLKCMU_IS_VRA_USER, 4, 1),
129662306a36Sopenharmony_ci	MUX(CLK_MOUT_IS_GDC_USER, "mout_is_gdc_user", mout_is_gdc_user_p,
129762306a36Sopenharmony_ci	    PLL_CON0_MUX_CLKCMU_IS_GDC_USER, 4, 1),
129862306a36Sopenharmony_ci};
129962306a36Sopenharmony_ci
130062306a36Sopenharmony_cistatic const struct samsung_div_clock is_div_clks[] __initconst = {
130162306a36Sopenharmony_ci	DIV(CLK_DOUT_IS_BUSP, "dout_is_busp", "mout_is_bus_user",
130262306a36Sopenharmony_ci	    CLK_CON_DIV_DIV_CLK_IS_BUSP, 0, 2),
130362306a36Sopenharmony_ci};
130462306a36Sopenharmony_ci
130562306a36Sopenharmony_cistatic const struct samsung_gate_clock is_gate_clks[] __initconst = {
130662306a36Sopenharmony_ci	/* TODO: Should be enabled in IS driver */
130762306a36Sopenharmony_ci	GATE(CLK_GOUT_IS_CMU_IS_PCLK, "gout_is_cmu_is_pclk", "dout_is_busp",
130862306a36Sopenharmony_ci	     CLK_CON_GAT_CLK_IS_CMU_IS_PCLK, 21, CLK_IGNORE_UNUSED, 0),
130962306a36Sopenharmony_ci	GATE(CLK_GOUT_IS_CSIS0_ACLK, "gout_is_csis0_aclk", "mout_is_bus_user",
131062306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_IS_CSIS0_ACLK, 21, 0, 0),
131162306a36Sopenharmony_ci	GATE(CLK_GOUT_IS_CSIS1_ACLK, "gout_is_csis1_aclk", "mout_is_bus_user",
131262306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_IS_CSIS1_ACLK, 21, 0, 0),
131362306a36Sopenharmony_ci	GATE(CLK_GOUT_IS_CSIS2_ACLK, "gout_is_csis2_aclk", "mout_is_bus_user",
131462306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_IS_CSIS2_ACLK, 21, 0, 0),
131562306a36Sopenharmony_ci	GATE(CLK_GOUT_IS_TZPC_PCLK, "gout_is_tzpc_pclk", "dout_is_busp",
131662306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_IS_TZPC_PCLK, 21, 0, 0),
131762306a36Sopenharmony_ci	GATE(CLK_GOUT_IS_CSIS_DMA_CLK, "gout_is_csis_dma_clk",
131862306a36Sopenharmony_ci	     "mout_is_bus_user",
131962306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_IS_CLK_CSIS_DMA, 21, 0, 0),
132062306a36Sopenharmony_ci	GATE(CLK_GOUT_IS_GDC_CLK, "gout_is_gdc_clk", "mout_is_gdc_user",
132162306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_IS_CLK_GDC, 21, 0, 0),
132262306a36Sopenharmony_ci	GATE(CLK_GOUT_IS_IPP_CLK, "gout_is_ipp_clk", "mout_is_bus_user",
132362306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_IS_CLK_IPP, 21, 0, 0),
132462306a36Sopenharmony_ci	GATE(CLK_GOUT_IS_ITP_CLK, "gout_is_itp_clk", "mout_is_itp_user",
132562306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_IS_CLK_ITP, 21, 0, 0),
132662306a36Sopenharmony_ci	GATE(CLK_GOUT_IS_MCSC_CLK, "gout_is_mcsc_clk", "mout_is_itp_user",
132762306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_IS_CLK_MCSC, 21, 0, 0),
132862306a36Sopenharmony_ci	GATE(CLK_GOUT_IS_VRA_CLK, "gout_is_vra_clk", "mout_is_vra_user",
132962306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_IS_CLK_VRA, 21, 0, 0),
133062306a36Sopenharmony_ci	GATE(CLK_GOUT_IS_PPMU_IS0_ACLK, "gout_is_ppmu_is0_aclk",
133162306a36Sopenharmony_ci	     "mout_is_bus_user",
133262306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_IS_PPMU_IS0_ACLK, 21, 0, 0),
133362306a36Sopenharmony_ci	GATE(CLK_GOUT_IS_PPMU_IS0_PCLK, "gout_is_ppmu_is0_pclk", "dout_is_busp",
133462306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_IS_PPMU_IS0_PCLK, 21, 0, 0),
133562306a36Sopenharmony_ci	GATE(CLK_GOUT_IS_PPMU_IS1_ACLK, "gout_is_ppmu_is1_aclk",
133662306a36Sopenharmony_ci	     "mout_is_itp_user",
133762306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_IS_PPMU_IS1_ACLK, 21, 0, 0),
133862306a36Sopenharmony_ci	GATE(CLK_GOUT_IS_PPMU_IS1_PCLK, "gout_is_ppmu_is1_pclk", "dout_is_busp",
133962306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_IS_PPMU_IS1_PCLK, 21, 0, 0),
134062306a36Sopenharmony_ci	GATE(CLK_GOUT_IS_SYSMMU_IS0_CLK, "gout_is_sysmmu_is0_clk",
134162306a36Sopenharmony_ci	     "mout_is_bus_user",
134262306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_IS_SYSMMU_IS0_CLK_S1, 21, 0, 0),
134362306a36Sopenharmony_ci	GATE(CLK_GOUT_IS_SYSMMU_IS1_CLK, "gout_is_sysmmu_is1_clk",
134462306a36Sopenharmony_ci	     "mout_is_itp_user",
134562306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_IS_SYSMMU_IS1_CLK_S1, 21, 0, 0),
134662306a36Sopenharmony_ci	GATE(CLK_GOUT_IS_SYSREG_PCLK, "gout_is_sysreg_pclk", "dout_is_busp",
134762306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_IS_SYSREG_PCLK, 21, 0, 0),
134862306a36Sopenharmony_ci};
134962306a36Sopenharmony_ci
135062306a36Sopenharmony_cistatic const struct samsung_cmu_info is_cmu_info __initconst = {
135162306a36Sopenharmony_ci	.mux_clks		= is_mux_clks,
135262306a36Sopenharmony_ci	.nr_mux_clks		= ARRAY_SIZE(is_mux_clks),
135362306a36Sopenharmony_ci	.div_clks		= is_div_clks,
135462306a36Sopenharmony_ci	.nr_div_clks		= ARRAY_SIZE(is_div_clks),
135562306a36Sopenharmony_ci	.gate_clks		= is_gate_clks,
135662306a36Sopenharmony_ci	.nr_gate_clks		= ARRAY_SIZE(is_gate_clks),
135762306a36Sopenharmony_ci	.nr_clk_ids		= CLKS_NR_IS,
135862306a36Sopenharmony_ci	.clk_regs		= is_clk_regs,
135962306a36Sopenharmony_ci	.nr_clk_regs		= ARRAY_SIZE(is_clk_regs),
136062306a36Sopenharmony_ci	.clk_name		= "dout_is_bus",
136162306a36Sopenharmony_ci};
136262306a36Sopenharmony_ci
136362306a36Sopenharmony_ci/* ---- CMU_MFCMSCL --------------------------------------------------------- */
136462306a36Sopenharmony_ci
136562306a36Sopenharmony_ci#define PLL_CON0_MUX_CLKCMU_MFCMSCL_JPEG_USER		0x0600
136662306a36Sopenharmony_ci#define PLL_CON0_MUX_CLKCMU_MFCMSCL_M2M_USER		0x0610
136762306a36Sopenharmony_ci#define PLL_CON0_MUX_CLKCMU_MFCMSCL_MCSC_USER		0x0620
136862306a36Sopenharmony_ci#define PLL_CON0_MUX_CLKCMU_MFCMSCL_MFC_USER		0x0630
136962306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_MFCMSCL_BUSP		0x1800
137062306a36Sopenharmony_ci#define CLK_CON_GAT_CLK_MFCMSCL_CMU_MFCMSCL_PCLK	0x2000
137162306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_MFCMSCL_TZPC_PCLK		0x2038
137262306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_MFCMSCL_JPEG_ACLK		0x203c
137362306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_MFCMSCL_M2M_ACLK		0x2048
137462306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_MFCMSCL_MCSC_I_CLK		0x204c
137562306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_MFCMSCL_MFC_ACLK		0x2050
137662306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_MFCMSCL_PPMU_ACLK		0x2054
137762306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_MFCMSCL_PPMU_PCLK		0x2058
137862306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_MFCMSCL_SYSMMU_CLK_S1		0x2074
137962306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_MFCMSCL_SYSREG_PCLK		0x2078
138062306a36Sopenharmony_ci
138162306a36Sopenharmony_cistatic const unsigned long mfcmscl_clk_regs[] __initconst = {
138262306a36Sopenharmony_ci	PLL_CON0_MUX_CLKCMU_MFCMSCL_JPEG_USER,
138362306a36Sopenharmony_ci	PLL_CON0_MUX_CLKCMU_MFCMSCL_M2M_USER,
138462306a36Sopenharmony_ci	PLL_CON0_MUX_CLKCMU_MFCMSCL_MCSC_USER,
138562306a36Sopenharmony_ci	PLL_CON0_MUX_CLKCMU_MFCMSCL_MFC_USER,
138662306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_MFCMSCL_BUSP,
138762306a36Sopenharmony_ci	CLK_CON_GAT_CLK_MFCMSCL_CMU_MFCMSCL_PCLK,
138862306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_MFCMSCL_TZPC_PCLK,
138962306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_MFCMSCL_JPEG_ACLK,
139062306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_MFCMSCL_M2M_ACLK,
139162306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_MFCMSCL_MCSC_I_CLK,
139262306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_MFCMSCL_MFC_ACLK,
139362306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_MFCMSCL_PPMU_ACLK,
139462306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_MFCMSCL_PPMU_PCLK,
139562306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_MFCMSCL_SYSMMU_CLK_S1,
139662306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_MFCMSCL_SYSREG_PCLK,
139762306a36Sopenharmony_ci};
139862306a36Sopenharmony_ci
139962306a36Sopenharmony_ci/* List of parent clocks for Muxes in CMU_MFCMSCL */
140062306a36Sopenharmony_ciPNAME(mout_mfcmscl_mfc_user_p)	= { "oscclk", "dout_mfcmscl_mfc" };
140162306a36Sopenharmony_ciPNAME(mout_mfcmscl_m2m_user_p)	= { "oscclk", "dout_mfcmscl_m2m" };
140262306a36Sopenharmony_ciPNAME(mout_mfcmscl_mcsc_user_p)	= { "oscclk", "dout_mfcmscl_mcsc" };
140362306a36Sopenharmony_ciPNAME(mout_mfcmscl_jpeg_user_p)	= { "oscclk", "dout_mfcmscl_jpeg" };
140462306a36Sopenharmony_ci
140562306a36Sopenharmony_cistatic const struct samsung_mux_clock mfcmscl_mux_clks[] __initconst = {
140662306a36Sopenharmony_ci	MUX(CLK_MOUT_MFCMSCL_MFC_USER, "mout_mfcmscl_mfc_user",
140762306a36Sopenharmony_ci	    mout_mfcmscl_mfc_user_p,
140862306a36Sopenharmony_ci	    PLL_CON0_MUX_CLKCMU_MFCMSCL_MFC_USER, 4, 1),
140962306a36Sopenharmony_ci	MUX(CLK_MOUT_MFCMSCL_M2M_USER, "mout_mfcmscl_m2m_user",
141062306a36Sopenharmony_ci	    mout_mfcmscl_m2m_user_p,
141162306a36Sopenharmony_ci	    PLL_CON0_MUX_CLKCMU_MFCMSCL_M2M_USER, 4, 1),
141262306a36Sopenharmony_ci	MUX(CLK_MOUT_MFCMSCL_MCSC_USER, "mout_mfcmscl_mcsc_user",
141362306a36Sopenharmony_ci	    mout_mfcmscl_mcsc_user_p,
141462306a36Sopenharmony_ci	    PLL_CON0_MUX_CLKCMU_MFCMSCL_MCSC_USER, 4, 1),
141562306a36Sopenharmony_ci	MUX(CLK_MOUT_MFCMSCL_JPEG_USER, "mout_mfcmscl_jpeg_user",
141662306a36Sopenharmony_ci	    mout_mfcmscl_jpeg_user_p,
141762306a36Sopenharmony_ci	    PLL_CON0_MUX_CLKCMU_MFCMSCL_JPEG_USER, 4, 1),
141862306a36Sopenharmony_ci};
141962306a36Sopenharmony_ci
142062306a36Sopenharmony_cistatic const struct samsung_div_clock mfcmscl_div_clks[] __initconst = {
142162306a36Sopenharmony_ci	DIV(CLK_DOUT_MFCMSCL_BUSP, "dout_mfcmscl_busp", "mout_mfcmscl_mfc_user",
142262306a36Sopenharmony_ci	    CLK_CON_DIV_DIV_CLK_MFCMSCL_BUSP, 0, 3),
142362306a36Sopenharmony_ci};
142462306a36Sopenharmony_ci
142562306a36Sopenharmony_cistatic const struct samsung_gate_clock mfcmscl_gate_clks[] __initconst = {
142662306a36Sopenharmony_ci	/* TODO: Should be enabled in MFC driver */
142762306a36Sopenharmony_ci	GATE(CLK_GOUT_MFCMSCL_CMU_MFCMSCL_PCLK, "gout_mfcmscl_cmu_mfcmscl_pclk",
142862306a36Sopenharmony_ci	     "dout_mfcmscl_busp", CLK_CON_GAT_CLK_MFCMSCL_CMU_MFCMSCL_PCLK,
142962306a36Sopenharmony_ci	     21, CLK_IGNORE_UNUSED, 0),
143062306a36Sopenharmony_ci	GATE(CLK_GOUT_MFCMSCL_TZPC_PCLK, "gout_mfcmscl_tzpc_pclk",
143162306a36Sopenharmony_ci	     "dout_mfcmscl_busp", CLK_CON_GAT_GOUT_MFCMSCL_TZPC_PCLK,
143262306a36Sopenharmony_ci	     21, 0, 0),
143362306a36Sopenharmony_ci	GATE(CLK_GOUT_MFCMSCL_JPEG_ACLK, "gout_mfcmscl_jpeg_aclk",
143462306a36Sopenharmony_ci	     "mout_mfcmscl_jpeg_user", CLK_CON_GAT_GOUT_MFCMSCL_JPEG_ACLK,
143562306a36Sopenharmony_ci	     21, 0, 0),
143662306a36Sopenharmony_ci	GATE(CLK_GOUT_MFCMSCL_M2M_ACLK, "gout_mfcmscl_m2m_aclk",
143762306a36Sopenharmony_ci	     "mout_mfcmscl_m2m_user", CLK_CON_GAT_GOUT_MFCMSCL_M2M_ACLK,
143862306a36Sopenharmony_ci	     21, 0, 0),
143962306a36Sopenharmony_ci	GATE(CLK_GOUT_MFCMSCL_MCSC_CLK, "gout_mfcmscl_mcsc_clk",
144062306a36Sopenharmony_ci	     "mout_mfcmscl_mcsc_user", CLK_CON_GAT_GOUT_MFCMSCL_MCSC_I_CLK,
144162306a36Sopenharmony_ci	     21, 0, 0),
144262306a36Sopenharmony_ci	GATE(CLK_GOUT_MFCMSCL_MFC_ACLK, "gout_mfcmscl_mfc_aclk",
144362306a36Sopenharmony_ci	     "mout_mfcmscl_mfc_user", CLK_CON_GAT_GOUT_MFCMSCL_MFC_ACLK,
144462306a36Sopenharmony_ci	     21, 0, 0),
144562306a36Sopenharmony_ci	GATE(CLK_GOUT_MFCMSCL_PPMU_ACLK, "gout_mfcmscl_ppmu_aclk",
144662306a36Sopenharmony_ci	     "mout_mfcmscl_mfc_user", CLK_CON_GAT_GOUT_MFCMSCL_PPMU_ACLK,
144762306a36Sopenharmony_ci	     21, 0, 0),
144862306a36Sopenharmony_ci	GATE(CLK_GOUT_MFCMSCL_PPMU_PCLK, "gout_mfcmscl_ppmu_pclk",
144962306a36Sopenharmony_ci	     "dout_mfcmscl_busp", CLK_CON_GAT_GOUT_MFCMSCL_PPMU_PCLK,
145062306a36Sopenharmony_ci	     21, 0, 0),
145162306a36Sopenharmony_ci	GATE(CLK_GOUT_MFCMSCL_SYSMMU_CLK, "gout_mfcmscl_sysmmu_clk",
145262306a36Sopenharmony_ci	     "mout_mfcmscl_mfc_user", CLK_CON_GAT_GOUT_MFCMSCL_SYSMMU_CLK_S1,
145362306a36Sopenharmony_ci	     21, 0, 0),
145462306a36Sopenharmony_ci	GATE(CLK_GOUT_MFCMSCL_SYSREG_PCLK, "gout_mfcmscl_sysreg_pclk",
145562306a36Sopenharmony_ci	     "dout_mfcmscl_busp", CLK_CON_GAT_GOUT_MFCMSCL_SYSREG_PCLK,
145662306a36Sopenharmony_ci	     21, 0, 0),
145762306a36Sopenharmony_ci};
145862306a36Sopenharmony_ci
145962306a36Sopenharmony_cistatic const struct samsung_cmu_info mfcmscl_cmu_info __initconst = {
146062306a36Sopenharmony_ci	.mux_clks		= mfcmscl_mux_clks,
146162306a36Sopenharmony_ci	.nr_mux_clks		= ARRAY_SIZE(mfcmscl_mux_clks),
146262306a36Sopenharmony_ci	.div_clks		= mfcmscl_div_clks,
146362306a36Sopenharmony_ci	.nr_div_clks		= ARRAY_SIZE(mfcmscl_div_clks),
146462306a36Sopenharmony_ci	.gate_clks		= mfcmscl_gate_clks,
146562306a36Sopenharmony_ci	.nr_gate_clks		= ARRAY_SIZE(mfcmscl_gate_clks),
146662306a36Sopenharmony_ci	.nr_clk_ids		= CLKS_NR_MFCMSCL,
146762306a36Sopenharmony_ci	.clk_regs		= mfcmscl_clk_regs,
146862306a36Sopenharmony_ci	.nr_clk_regs		= ARRAY_SIZE(mfcmscl_clk_regs),
146962306a36Sopenharmony_ci	.clk_name		= "dout_mfcmscl_mfc",
147062306a36Sopenharmony_ci};
147162306a36Sopenharmony_ci
147262306a36Sopenharmony_ci/* ---- CMU_PERI ------------------------------------------------------------ */
147362306a36Sopenharmony_ci
147462306a36Sopenharmony_ci/* Register Offset definitions for CMU_PERI (0x10030000) */
147562306a36Sopenharmony_ci#define PLL_CON0_MUX_CLKCMU_PERI_BUS_USER	0x0600
147662306a36Sopenharmony_ci#define PLL_CON0_MUX_CLKCMU_PERI_HSI2C_USER	0x0610
147762306a36Sopenharmony_ci#define PLL_CON0_MUX_CLKCMU_PERI_SPI_USER	0x0620
147862306a36Sopenharmony_ci#define PLL_CON0_MUX_CLKCMU_PERI_UART_USER	0x0630
147962306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_PERI_HSI2C_0	0x1800
148062306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_PERI_HSI2C_1	0x1804
148162306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_PERI_HSI2C_2	0x1808
148262306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_PERI_SPI_0		0x180c
148362306a36Sopenharmony_ci#define CLK_CON_GAT_GATE_CLK_PERI_HSI2C_0	0x200c
148462306a36Sopenharmony_ci#define CLK_CON_GAT_GATE_CLK_PERI_HSI2C_1	0x2010
148562306a36Sopenharmony_ci#define CLK_CON_GAT_GATE_CLK_PERI_HSI2C_2	0x2014
148662306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_PERI_GPIO_PERI_PCLK	0x2020
148762306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_PERI_HSI2C_0_IPCLK	0x2024
148862306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_PERI_HSI2C_0_PCLK	0x2028
148962306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_PERI_HSI2C_1_IPCLK	0x202c
149062306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_PERI_HSI2C_1_PCLK	0x2030
149162306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_PERI_HSI2C_2_IPCLK	0x2034
149262306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_PERI_HSI2C_2_PCLK	0x2038
149362306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_PERI_I2C_0_PCLK	0x203c
149462306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_PERI_I2C_1_PCLK	0x2040
149562306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_PERI_I2C_2_PCLK	0x2044
149662306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_PERI_I2C_3_PCLK	0x2048
149762306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_PERI_I2C_4_PCLK	0x204c
149862306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_PERI_I2C_5_PCLK	0x2050
149962306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_PERI_I2C_6_PCLK	0x2054
150062306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_PERI_MCT_PCLK		0x205c
150162306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_PERI_PWM_MOTOR_PCLK	0x2064
150262306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_PERI_SPI_0_IPCLK	0x209c
150362306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_PERI_SPI_0_PCLK	0x20a0
150462306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_PERI_SYSREG_PERI_PCLK	0x20a4
150562306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_PERI_UART_IPCLK	0x20a8
150662306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_PERI_UART_PCLK		0x20ac
150762306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_PERI_WDT_0_PCLK	0x20b0
150862306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_PERI_WDT_1_PCLK	0x20b4
150962306a36Sopenharmony_ci
151062306a36Sopenharmony_cistatic const unsigned long peri_clk_regs[] __initconst = {
151162306a36Sopenharmony_ci	PLL_CON0_MUX_CLKCMU_PERI_BUS_USER,
151262306a36Sopenharmony_ci	PLL_CON0_MUX_CLKCMU_PERI_HSI2C_USER,
151362306a36Sopenharmony_ci	PLL_CON0_MUX_CLKCMU_PERI_SPI_USER,
151462306a36Sopenharmony_ci	PLL_CON0_MUX_CLKCMU_PERI_UART_USER,
151562306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_PERI_HSI2C_0,
151662306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_PERI_HSI2C_1,
151762306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_PERI_HSI2C_2,
151862306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_PERI_SPI_0,
151962306a36Sopenharmony_ci	CLK_CON_GAT_GATE_CLK_PERI_HSI2C_0,
152062306a36Sopenharmony_ci	CLK_CON_GAT_GATE_CLK_PERI_HSI2C_1,
152162306a36Sopenharmony_ci	CLK_CON_GAT_GATE_CLK_PERI_HSI2C_2,
152262306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_PERI_GPIO_PERI_PCLK,
152362306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_PERI_HSI2C_0_IPCLK,
152462306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_PERI_HSI2C_0_PCLK,
152562306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_PERI_HSI2C_1_IPCLK,
152662306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_PERI_HSI2C_1_PCLK,
152762306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_PERI_HSI2C_2_IPCLK,
152862306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_PERI_HSI2C_2_PCLK,
152962306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_PERI_I2C_0_PCLK,
153062306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_PERI_I2C_1_PCLK,
153162306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_PERI_I2C_2_PCLK,
153262306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_PERI_I2C_3_PCLK,
153362306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_PERI_I2C_4_PCLK,
153462306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_PERI_I2C_5_PCLK,
153562306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_PERI_I2C_6_PCLK,
153662306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_PERI_MCT_PCLK,
153762306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_PERI_PWM_MOTOR_PCLK,
153862306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_PERI_SPI_0_IPCLK,
153962306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_PERI_SPI_0_PCLK,
154062306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_PERI_SYSREG_PERI_PCLK,
154162306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_PERI_UART_IPCLK,
154262306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_PERI_UART_PCLK,
154362306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_PERI_WDT_0_PCLK,
154462306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_PERI_WDT_1_PCLK,
154562306a36Sopenharmony_ci};
154662306a36Sopenharmony_ci
154762306a36Sopenharmony_ci/* List of parent clocks for Muxes in CMU_PERI */
154862306a36Sopenharmony_ciPNAME(mout_peri_bus_user_p)	= { "oscclk", "dout_peri_bus" };
154962306a36Sopenharmony_ciPNAME(mout_peri_uart_user_p)	= { "oscclk", "dout_peri_uart" };
155062306a36Sopenharmony_ciPNAME(mout_peri_hsi2c_user_p)	= { "oscclk", "dout_peri_ip" };
155162306a36Sopenharmony_ciPNAME(mout_peri_spi_user_p)	= { "oscclk", "dout_peri_ip" };
155262306a36Sopenharmony_ci
155362306a36Sopenharmony_cistatic const struct samsung_mux_clock peri_mux_clks[] __initconst = {
155462306a36Sopenharmony_ci	MUX(CLK_MOUT_PERI_BUS_USER, "mout_peri_bus_user", mout_peri_bus_user_p,
155562306a36Sopenharmony_ci	    PLL_CON0_MUX_CLKCMU_PERI_BUS_USER, 4, 1),
155662306a36Sopenharmony_ci	MUX(CLK_MOUT_PERI_UART_USER, "mout_peri_uart_user",
155762306a36Sopenharmony_ci	    mout_peri_uart_user_p, PLL_CON0_MUX_CLKCMU_PERI_UART_USER, 4, 1),
155862306a36Sopenharmony_ci	MUX(CLK_MOUT_PERI_HSI2C_USER, "mout_peri_hsi2c_user",
155962306a36Sopenharmony_ci	    mout_peri_hsi2c_user_p, PLL_CON0_MUX_CLKCMU_PERI_HSI2C_USER, 4, 1),
156062306a36Sopenharmony_ci	MUX_F(CLK_MOUT_PERI_SPI_USER, "mout_peri_spi_user",
156162306a36Sopenharmony_ci	      mout_peri_spi_user_p, PLL_CON0_MUX_CLKCMU_PERI_SPI_USER, 4, 1,
156262306a36Sopenharmony_ci	      CLK_SET_RATE_PARENT, 0),
156362306a36Sopenharmony_ci};
156462306a36Sopenharmony_ci
156562306a36Sopenharmony_cistatic const struct samsung_div_clock peri_div_clks[] __initconst = {
156662306a36Sopenharmony_ci	DIV(CLK_DOUT_PERI_HSI2C0, "dout_peri_hsi2c0", "gout_peri_hsi2c0",
156762306a36Sopenharmony_ci	    CLK_CON_DIV_DIV_CLK_PERI_HSI2C_0, 0, 5),
156862306a36Sopenharmony_ci	DIV(CLK_DOUT_PERI_HSI2C1, "dout_peri_hsi2c1", "gout_peri_hsi2c1",
156962306a36Sopenharmony_ci	    CLK_CON_DIV_DIV_CLK_PERI_HSI2C_1, 0, 5),
157062306a36Sopenharmony_ci	DIV(CLK_DOUT_PERI_HSI2C2, "dout_peri_hsi2c2", "gout_peri_hsi2c2",
157162306a36Sopenharmony_ci	    CLK_CON_DIV_DIV_CLK_PERI_HSI2C_2, 0, 5),
157262306a36Sopenharmony_ci	DIV_F(CLK_DOUT_PERI_SPI0, "dout_peri_spi0", "mout_peri_spi_user",
157362306a36Sopenharmony_ci	      CLK_CON_DIV_DIV_CLK_PERI_SPI_0, 0, 5, CLK_SET_RATE_PARENT, 0),
157462306a36Sopenharmony_ci};
157562306a36Sopenharmony_ci
157662306a36Sopenharmony_cistatic const struct samsung_gate_clock peri_gate_clks[] __initconst = {
157762306a36Sopenharmony_ci	GATE(CLK_GOUT_PERI_HSI2C0, "gout_peri_hsi2c0", "mout_peri_hsi2c_user",
157862306a36Sopenharmony_ci	     CLK_CON_GAT_GATE_CLK_PERI_HSI2C_0, 21, 0, 0),
157962306a36Sopenharmony_ci	GATE(CLK_GOUT_PERI_HSI2C1, "gout_peri_hsi2c1", "mout_peri_hsi2c_user",
158062306a36Sopenharmony_ci	     CLK_CON_GAT_GATE_CLK_PERI_HSI2C_1, 21, 0, 0),
158162306a36Sopenharmony_ci	GATE(CLK_GOUT_PERI_HSI2C2, "gout_peri_hsi2c2", "mout_peri_hsi2c_user",
158262306a36Sopenharmony_ci	     CLK_CON_GAT_GATE_CLK_PERI_HSI2C_2, 21, 0, 0),
158362306a36Sopenharmony_ci	GATE(CLK_GOUT_HSI2C0_IPCLK, "gout_hsi2c0_ipclk", "dout_peri_hsi2c0",
158462306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_PERI_HSI2C_0_IPCLK, 21, 0, 0),
158562306a36Sopenharmony_ci	GATE(CLK_GOUT_HSI2C0_PCLK, "gout_hsi2c0_pclk", "mout_peri_bus_user",
158662306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_PERI_HSI2C_0_PCLK, 21, 0, 0),
158762306a36Sopenharmony_ci	GATE(CLK_GOUT_HSI2C1_IPCLK, "gout_hsi2c1_ipclk", "dout_peri_hsi2c1",
158862306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_PERI_HSI2C_1_IPCLK, 21, 0, 0),
158962306a36Sopenharmony_ci	GATE(CLK_GOUT_HSI2C1_PCLK, "gout_hsi2c1_pclk", "mout_peri_bus_user",
159062306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_PERI_HSI2C_1_PCLK, 21, 0, 0),
159162306a36Sopenharmony_ci	GATE(CLK_GOUT_HSI2C2_IPCLK, "gout_hsi2c2_ipclk", "dout_peri_hsi2c2",
159262306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_PERI_HSI2C_2_IPCLK, 21, 0, 0),
159362306a36Sopenharmony_ci	GATE(CLK_GOUT_HSI2C2_PCLK, "gout_hsi2c2_pclk", "mout_peri_bus_user",
159462306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_PERI_HSI2C_2_PCLK, 21, 0, 0),
159562306a36Sopenharmony_ci	GATE(CLK_GOUT_I2C0_PCLK, "gout_i2c0_pclk", "mout_peri_bus_user",
159662306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_PERI_I2C_0_PCLK, 21, 0, 0),
159762306a36Sopenharmony_ci	GATE(CLK_GOUT_I2C1_PCLK, "gout_i2c1_pclk", "mout_peri_bus_user",
159862306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_PERI_I2C_1_PCLK, 21, 0, 0),
159962306a36Sopenharmony_ci	GATE(CLK_GOUT_I2C2_PCLK, "gout_i2c2_pclk", "mout_peri_bus_user",
160062306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_PERI_I2C_2_PCLK, 21, 0, 0),
160162306a36Sopenharmony_ci	GATE(CLK_GOUT_I2C3_PCLK, "gout_i2c3_pclk", "mout_peri_bus_user",
160262306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_PERI_I2C_3_PCLK, 21, 0, 0),
160362306a36Sopenharmony_ci	GATE(CLK_GOUT_I2C4_PCLK, "gout_i2c4_pclk", "mout_peri_bus_user",
160462306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_PERI_I2C_4_PCLK, 21, 0, 0),
160562306a36Sopenharmony_ci	GATE(CLK_GOUT_I2C5_PCLK, "gout_i2c5_pclk", "mout_peri_bus_user",
160662306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_PERI_I2C_5_PCLK, 21, 0, 0),
160762306a36Sopenharmony_ci	GATE(CLK_GOUT_I2C6_PCLK, "gout_i2c6_pclk", "mout_peri_bus_user",
160862306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_PERI_I2C_6_PCLK, 21, 0, 0),
160962306a36Sopenharmony_ci	GATE(CLK_GOUT_MCT_PCLK, "gout_mct_pclk", "mout_peri_bus_user",
161062306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_PERI_MCT_PCLK, 21, 0, 0),
161162306a36Sopenharmony_ci	GATE(CLK_GOUT_PWM_MOTOR_PCLK, "gout_pwm_motor_pclk",
161262306a36Sopenharmony_ci	     "mout_peri_bus_user",
161362306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_PERI_PWM_MOTOR_PCLK, 21, 0, 0),
161462306a36Sopenharmony_ci	GATE(CLK_GOUT_SPI0_IPCLK, "gout_spi0_ipclk", "dout_peri_spi0",
161562306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_PERI_SPI_0_IPCLK, 21, CLK_SET_RATE_PARENT, 0),
161662306a36Sopenharmony_ci	GATE(CLK_GOUT_SPI0_PCLK, "gout_spi0_pclk", "mout_peri_bus_user",
161762306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_PERI_SPI_0_PCLK, 21, 0, 0),
161862306a36Sopenharmony_ci	GATE(CLK_GOUT_SYSREG_PERI_PCLK, "gout_sysreg_peri_pclk",
161962306a36Sopenharmony_ci	     "mout_peri_bus_user",
162062306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_PERI_SYSREG_PERI_PCLK, 21, 0, 0),
162162306a36Sopenharmony_ci	GATE(CLK_GOUT_UART_IPCLK, "gout_uart_ipclk", "mout_peri_uart_user",
162262306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_PERI_UART_IPCLK, 21, 0, 0),
162362306a36Sopenharmony_ci	GATE(CLK_GOUT_UART_PCLK, "gout_uart_pclk", "mout_peri_bus_user",
162462306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_PERI_UART_PCLK, 21, 0, 0),
162562306a36Sopenharmony_ci	GATE(CLK_GOUT_WDT0_PCLK, "gout_wdt0_pclk", "mout_peri_bus_user",
162662306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_PERI_WDT_0_PCLK, 21, 0, 0),
162762306a36Sopenharmony_ci	GATE(CLK_GOUT_WDT1_PCLK, "gout_wdt1_pclk", "mout_peri_bus_user",
162862306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_PERI_WDT_1_PCLK, 21, 0, 0),
162962306a36Sopenharmony_ci	/* TODO: Should be enabled in GPIO driver (or made CLK_IS_CRITICAL) */
163062306a36Sopenharmony_ci	GATE(CLK_GOUT_GPIO_PERI_PCLK, "gout_gpio_peri_pclk",
163162306a36Sopenharmony_ci	     "mout_peri_bus_user",
163262306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_PERI_GPIO_PERI_PCLK, 21, CLK_IGNORE_UNUSED, 0),
163362306a36Sopenharmony_ci};
163462306a36Sopenharmony_ci
163562306a36Sopenharmony_cistatic const struct samsung_cmu_info peri_cmu_info __initconst = {
163662306a36Sopenharmony_ci	.mux_clks		= peri_mux_clks,
163762306a36Sopenharmony_ci	.nr_mux_clks		= ARRAY_SIZE(peri_mux_clks),
163862306a36Sopenharmony_ci	.div_clks		= peri_div_clks,
163962306a36Sopenharmony_ci	.nr_div_clks		= ARRAY_SIZE(peri_div_clks),
164062306a36Sopenharmony_ci	.gate_clks		= peri_gate_clks,
164162306a36Sopenharmony_ci	.nr_gate_clks		= ARRAY_SIZE(peri_gate_clks),
164262306a36Sopenharmony_ci	.nr_clk_ids		= CLKS_NR_PERI,
164362306a36Sopenharmony_ci	.clk_regs		= peri_clk_regs,
164462306a36Sopenharmony_ci	.nr_clk_regs		= ARRAY_SIZE(peri_clk_regs),
164562306a36Sopenharmony_ci	.clk_name		= "dout_peri_bus",
164662306a36Sopenharmony_ci};
164762306a36Sopenharmony_ci
164862306a36Sopenharmony_cistatic void __init exynos850_cmu_peri_init(struct device_node *np)
164962306a36Sopenharmony_ci{
165062306a36Sopenharmony_ci	exynos_arm64_register_cmu(NULL, np, &peri_cmu_info);
165162306a36Sopenharmony_ci}
165262306a36Sopenharmony_ci
165362306a36Sopenharmony_ci/* Register CMU_PERI early, as it's needed for MCT timer */
165462306a36Sopenharmony_ciCLK_OF_DECLARE(exynos850_cmu_peri, "samsung,exynos850-cmu-peri",
165562306a36Sopenharmony_ci	       exynos850_cmu_peri_init);
165662306a36Sopenharmony_ci
165762306a36Sopenharmony_ci/* ---- CMU_CORE ------------------------------------------------------------ */
165862306a36Sopenharmony_ci
165962306a36Sopenharmony_ci/* Register Offset definitions for CMU_CORE (0x12000000) */
166062306a36Sopenharmony_ci#define PLL_CON0_MUX_CLKCMU_CORE_BUS_USER	0x0600
166162306a36Sopenharmony_ci#define PLL_CON0_MUX_CLKCMU_CORE_CCI_USER	0x0610
166262306a36Sopenharmony_ci#define PLL_CON0_MUX_CLKCMU_CORE_MMC_EMBD_USER	0x0620
166362306a36Sopenharmony_ci#define PLL_CON0_MUX_CLKCMU_CORE_SSS_USER	0x0630
166462306a36Sopenharmony_ci#define CLK_CON_MUX_MUX_CLK_CORE_GIC		0x1000
166562306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_CORE_BUSP		0x1800
166662306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_CORE_CCI_550_ACLK	0x2038
166762306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_CORE_GIC_CLK		0x2040
166862306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_CORE_GPIO_CORE_PCLK	0x2044
166962306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_CORE_MMC_EMBD_I_ACLK	0x20e8
167062306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_CORE_MMC_EMBD_SDCLKIN	0x20ec
167162306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_CORE_SSS_I_ACLK	0x2128
167262306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_CORE_SSS_I_PCLK	0x212c
167362306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_CORE_SYSREG_CORE_PCLK	0x2130
167462306a36Sopenharmony_ci
167562306a36Sopenharmony_cistatic const unsigned long core_clk_regs[] __initconst = {
167662306a36Sopenharmony_ci	PLL_CON0_MUX_CLKCMU_CORE_BUS_USER,
167762306a36Sopenharmony_ci	PLL_CON0_MUX_CLKCMU_CORE_CCI_USER,
167862306a36Sopenharmony_ci	PLL_CON0_MUX_CLKCMU_CORE_MMC_EMBD_USER,
167962306a36Sopenharmony_ci	PLL_CON0_MUX_CLKCMU_CORE_SSS_USER,
168062306a36Sopenharmony_ci	CLK_CON_MUX_MUX_CLK_CORE_GIC,
168162306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_CORE_BUSP,
168262306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_CORE_CCI_550_ACLK,
168362306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_CORE_GIC_CLK,
168462306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_CORE_GPIO_CORE_PCLK,
168562306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_CORE_MMC_EMBD_I_ACLK,
168662306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_CORE_MMC_EMBD_SDCLKIN,
168762306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_CORE_SSS_I_ACLK,
168862306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_CORE_SSS_I_PCLK,
168962306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_CORE_SYSREG_CORE_PCLK,
169062306a36Sopenharmony_ci};
169162306a36Sopenharmony_ci
169262306a36Sopenharmony_ci/* List of parent clocks for Muxes in CMU_CORE */
169362306a36Sopenharmony_ciPNAME(mout_core_bus_user_p)		= { "oscclk", "dout_core_bus" };
169462306a36Sopenharmony_ciPNAME(mout_core_cci_user_p)		= { "oscclk", "dout_core_cci" };
169562306a36Sopenharmony_ciPNAME(mout_core_mmc_embd_user_p)	= { "oscclk", "dout_core_mmc_embd" };
169662306a36Sopenharmony_ciPNAME(mout_core_sss_user_p)		= { "oscclk", "dout_core_sss" };
169762306a36Sopenharmony_ciPNAME(mout_core_gic_p)			= { "dout_core_busp", "oscclk" };
169862306a36Sopenharmony_ci
169962306a36Sopenharmony_cistatic const struct samsung_mux_clock core_mux_clks[] __initconst = {
170062306a36Sopenharmony_ci	MUX(CLK_MOUT_CORE_BUS_USER, "mout_core_bus_user", mout_core_bus_user_p,
170162306a36Sopenharmony_ci	    PLL_CON0_MUX_CLKCMU_CORE_BUS_USER, 4, 1),
170262306a36Sopenharmony_ci	MUX(CLK_MOUT_CORE_CCI_USER, "mout_core_cci_user", mout_core_cci_user_p,
170362306a36Sopenharmony_ci	    PLL_CON0_MUX_CLKCMU_CORE_CCI_USER, 4, 1),
170462306a36Sopenharmony_ci	MUX_F(CLK_MOUT_CORE_MMC_EMBD_USER, "mout_core_mmc_embd_user",
170562306a36Sopenharmony_ci	      mout_core_mmc_embd_user_p, PLL_CON0_MUX_CLKCMU_CORE_MMC_EMBD_USER,
170662306a36Sopenharmony_ci	      4, 1, CLK_SET_RATE_PARENT, 0),
170762306a36Sopenharmony_ci	MUX(CLK_MOUT_CORE_SSS_USER, "mout_core_sss_user", mout_core_sss_user_p,
170862306a36Sopenharmony_ci	    PLL_CON0_MUX_CLKCMU_CORE_SSS_USER, 4, 1),
170962306a36Sopenharmony_ci	MUX(CLK_MOUT_CORE_GIC, "mout_core_gic", mout_core_gic_p,
171062306a36Sopenharmony_ci	    CLK_CON_MUX_MUX_CLK_CORE_GIC, 0, 1),
171162306a36Sopenharmony_ci};
171262306a36Sopenharmony_ci
171362306a36Sopenharmony_cistatic const struct samsung_div_clock core_div_clks[] __initconst = {
171462306a36Sopenharmony_ci	DIV(CLK_DOUT_CORE_BUSP, "dout_core_busp", "mout_core_bus_user",
171562306a36Sopenharmony_ci	    CLK_CON_DIV_DIV_CLK_CORE_BUSP, 0, 2),
171662306a36Sopenharmony_ci};
171762306a36Sopenharmony_ci
171862306a36Sopenharmony_cistatic const struct samsung_gate_clock core_gate_clks[] __initconst = {
171962306a36Sopenharmony_ci	/* CCI (interconnect) clock must be always running */
172062306a36Sopenharmony_ci	GATE(CLK_GOUT_CCI_ACLK, "gout_cci_aclk", "mout_core_cci_user",
172162306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_CORE_CCI_550_ACLK, 21, CLK_IS_CRITICAL, 0),
172262306a36Sopenharmony_ci	/* GIC (interrupt controller) clock must be always running */
172362306a36Sopenharmony_ci	GATE(CLK_GOUT_GIC_CLK, "gout_gic_clk", "mout_core_gic",
172462306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_CORE_GIC_CLK, 21, CLK_IS_CRITICAL, 0),
172562306a36Sopenharmony_ci	GATE(CLK_GOUT_MMC_EMBD_ACLK, "gout_mmc_embd_aclk", "dout_core_busp",
172662306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_CORE_MMC_EMBD_I_ACLK, 21, 0, 0),
172762306a36Sopenharmony_ci	GATE(CLK_GOUT_MMC_EMBD_SDCLKIN, "gout_mmc_embd_sdclkin",
172862306a36Sopenharmony_ci	     "mout_core_mmc_embd_user", CLK_CON_GAT_GOUT_CORE_MMC_EMBD_SDCLKIN,
172962306a36Sopenharmony_ci	     21, CLK_SET_RATE_PARENT, 0),
173062306a36Sopenharmony_ci	GATE(CLK_GOUT_SSS_ACLK, "gout_sss_aclk", "mout_core_sss_user",
173162306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_CORE_SSS_I_ACLK, 21, 0, 0),
173262306a36Sopenharmony_ci	GATE(CLK_GOUT_SSS_PCLK, "gout_sss_pclk", "dout_core_busp",
173362306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_CORE_SSS_I_PCLK, 21, 0, 0),
173462306a36Sopenharmony_ci	/* TODO: Should be enabled in GPIO driver (or made CLK_IS_CRITICAL) */
173562306a36Sopenharmony_ci	GATE(CLK_GOUT_GPIO_CORE_PCLK, "gout_gpio_core_pclk", "dout_core_busp",
173662306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_CORE_GPIO_CORE_PCLK, 21, CLK_IGNORE_UNUSED, 0),
173762306a36Sopenharmony_ci	GATE(CLK_GOUT_SYSREG_CORE_PCLK, "gout_sysreg_core_pclk",
173862306a36Sopenharmony_ci	     "dout_core_busp",
173962306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_CORE_SYSREG_CORE_PCLK, 21, 0, 0),
174062306a36Sopenharmony_ci};
174162306a36Sopenharmony_ci
174262306a36Sopenharmony_cistatic const struct samsung_cmu_info core_cmu_info __initconst = {
174362306a36Sopenharmony_ci	.mux_clks		= core_mux_clks,
174462306a36Sopenharmony_ci	.nr_mux_clks		= ARRAY_SIZE(core_mux_clks),
174562306a36Sopenharmony_ci	.div_clks		= core_div_clks,
174662306a36Sopenharmony_ci	.nr_div_clks		= ARRAY_SIZE(core_div_clks),
174762306a36Sopenharmony_ci	.gate_clks		= core_gate_clks,
174862306a36Sopenharmony_ci	.nr_gate_clks		= ARRAY_SIZE(core_gate_clks),
174962306a36Sopenharmony_ci	.nr_clk_ids		= CLKS_NR_CORE,
175062306a36Sopenharmony_ci	.clk_regs		= core_clk_regs,
175162306a36Sopenharmony_ci	.nr_clk_regs		= ARRAY_SIZE(core_clk_regs),
175262306a36Sopenharmony_ci	.clk_name		= "dout_core_bus",
175362306a36Sopenharmony_ci};
175462306a36Sopenharmony_ci
175562306a36Sopenharmony_ci/* ---- CMU_DPU ------------------------------------------------------------- */
175662306a36Sopenharmony_ci
175762306a36Sopenharmony_ci/* Register Offset definitions for CMU_DPU (0x13000000) */
175862306a36Sopenharmony_ci#define PLL_CON0_MUX_CLKCMU_DPU_USER		0x0600
175962306a36Sopenharmony_ci#define CLK_CON_DIV_DIV_CLK_DPU_BUSP		0x1800
176062306a36Sopenharmony_ci#define CLK_CON_GAT_CLK_DPU_CMU_DPU_PCLK	0x2004
176162306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_DPU_ACLK_DECON0	0x2010
176262306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_DPU_ACLK_DMA		0x2014
176362306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_DPU_ACLK_DPP		0x2018
176462306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_DPU_PPMU_ACLK		0x2028
176562306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_DPU_PPMU_PCLK		0x202c
176662306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_DPU_SMMU_CLK		0x2038
176762306a36Sopenharmony_ci#define CLK_CON_GAT_GOUT_DPU_SYSREG_PCLK	0x203c
176862306a36Sopenharmony_ci
176962306a36Sopenharmony_cistatic const unsigned long dpu_clk_regs[] __initconst = {
177062306a36Sopenharmony_ci	PLL_CON0_MUX_CLKCMU_DPU_USER,
177162306a36Sopenharmony_ci	CLK_CON_DIV_DIV_CLK_DPU_BUSP,
177262306a36Sopenharmony_ci	CLK_CON_GAT_CLK_DPU_CMU_DPU_PCLK,
177362306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_DPU_ACLK_DECON0,
177462306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_DPU_ACLK_DMA,
177562306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_DPU_ACLK_DPP,
177662306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_DPU_PPMU_ACLK,
177762306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_DPU_PPMU_PCLK,
177862306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_DPU_SMMU_CLK,
177962306a36Sopenharmony_ci	CLK_CON_GAT_GOUT_DPU_SYSREG_PCLK,
178062306a36Sopenharmony_ci};
178162306a36Sopenharmony_ci
178262306a36Sopenharmony_ci/* List of parent clocks for Muxes in CMU_DPU */
178362306a36Sopenharmony_ciPNAME(mout_dpu_user_p)		= { "oscclk", "dout_dpu" };
178462306a36Sopenharmony_ci
178562306a36Sopenharmony_cistatic const struct samsung_mux_clock dpu_mux_clks[] __initconst = {
178662306a36Sopenharmony_ci	MUX(CLK_MOUT_DPU_USER, "mout_dpu_user", mout_dpu_user_p,
178762306a36Sopenharmony_ci	    PLL_CON0_MUX_CLKCMU_DPU_USER, 4, 1),
178862306a36Sopenharmony_ci};
178962306a36Sopenharmony_ci
179062306a36Sopenharmony_cistatic const struct samsung_div_clock dpu_div_clks[] __initconst = {
179162306a36Sopenharmony_ci	DIV(CLK_DOUT_DPU_BUSP, "dout_dpu_busp", "mout_dpu_user",
179262306a36Sopenharmony_ci	    CLK_CON_DIV_DIV_CLK_DPU_BUSP, 0, 3),
179362306a36Sopenharmony_ci};
179462306a36Sopenharmony_ci
179562306a36Sopenharmony_cistatic const struct samsung_gate_clock dpu_gate_clks[] __initconst = {
179662306a36Sopenharmony_ci	/* TODO: Should be enabled in DSIM driver */
179762306a36Sopenharmony_ci	GATE(CLK_GOUT_DPU_CMU_DPU_PCLK, "gout_dpu_cmu_dpu_pclk",
179862306a36Sopenharmony_ci	     "dout_dpu_busp",
179962306a36Sopenharmony_ci	     CLK_CON_GAT_CLK_DPU_CMU_DPU_PCLK, 21, CLK_IGNORE_UNUSED, 0),
180062306a36Sopenharmony_ci	GATE(CLK_GOUT_DPU_DECON0_ACLK, "gout_dpu_decon0_aclk", "mout_dpu_user",
180162306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_DPU_ACLK_DECON0, 21, 0, 0),
180262306a36Sopenharmony_ci	GATE(CLK_GOUT_DPU_DMA_ACLK, "gout_dpu_dma_aclk", "mout_dpu_user",
180362306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_DPU_ACLK_DMA, 21, 0, 0),
180462306a36Sopenharmony_ci	GATE(CLK_GOUT_DPU_DPP_ACLK, "gout_dpu_dpp_aclk", "mout_dpu_user",
180562306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_DPU_ACLK_DPP, 21, 0, 0),
180662306a36Sopenharmony_ci	GATE(CLK_GOUT_DPU_PPMU_ACLK, "gout_dpu_ppmu_aclk", "mout_dpu_user",
180762306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_DPU_PPMU_ACLK, 21, 0, 0),
180862306a36Sopenharmony_ci	GATE(CLK_GOUT_DPU_PPMU_PCLK, "gout_dpu_ppmu_pclk", "dout_dpu_busp",
180962306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_DPU_PPMU_PCLK, 21, 0, 0),
181062306a36Sopenharmony_ci	GATE(CLK_GOUT_DPU_SMMU_CLK, "gout_dpu_smmu_clk", "mout_dpu_user",
181162306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_DPU_SMMU_CLK, 21, 0, 0),
181262306a36Sopenharmony_ci	GATE(CLK_GOUT_DPU_SYSREG_PCLK, "gout_dpu_sysreg_pclk", "dout_dpu_busp",
181362306a36Sopenharmony_ci	     CLK_CON_GAT_GOUT_DPU_SYSREG_PCLK, 21, 0, 0),
181462306a36Sopenharmony_ci};
181562306a36Sopenharmony_ci
181662306a36Sopenharmony_cistatic const struct samsung_cmu_info dpu_cmu_info __initconst = {
181762306a36Sopenharmony_ci	.mux_clks		= dpu_mux_clks,
181862306a36Sopenharmony_ci	.nr_mux_clks		= ARRAY_SIZE(dpu_mux_clks),
181962306a36Sopenharmony_ci	.div_clks		= dpu_div_clks,
182062306a36Sopenharmony_ci	.nr_div_clks		= ARRAY_SIZE(dpu_div_clks),
182162306a36Sopenharmony_ci	.gate_clks		= dpu_gate_clks,
182262306a36Sopenharmony_ci	.nr_gate_clks		= ARRAY_SIZE(dpu_gate_clks),
182362306a36Sopenharmony_ci	.nr_clk_ids		= CLKS_NR_DPU,
182462306a36Sopenharmony_ci	.clk_regs		= dpu_clk_regs,
182562306a36Sopenharmony_ci	.nr_clk_regs		= ARRAY_SIZE(dpu_clk_regs),
182662306a36Sopenharmony_ci	.clk_name		= "dout_dpu",
182762306a36Sopenharmony_ci};
182862306a36Sopenharmony_ci
182962306a36Sopenharmony_ci/* ---- platform_driver ----------------------------------------------------- */
183062306a36Sopenharmony_ci
183162306a36Sopenharmony_cistatic int __init exynos850_cmu_probe(struct platform_device *pdev)
183262306a36Sopenharmony_ci{
183362306a36Sopenharmony_ci	const struct samsung_cmu_info *info;
183462306a36Sopenharmony_ci	struct device *dev = &pdev->dev;
183562306a36Sopenharmony_ci
183662306a36Sopenharmony_ci	info = of_device_get_match_data(dev);
183762306a36Sopenharmony_ci	exynos_arm64_register_cmu(dev, dev->of_node, info);
183862306a36Sopenharmony_ci
183962306a36Sopenharmony_ci	return 0;
184062306a36Sopenharmony_ci}
184162306a36Sopenharmony_ci
184262306a36Sopenharmony_cistatic const struct of_device_id exynos850_cmu_of_match[] = {
184362306a36Sopenharmony_ci	{
184462306a36Sopenharmony_ci		.compatible = "samsung,exynos850-cmu-apm",
184562306a36Sopenharmony_ci		.data = &apm_cmu_info,
184662306a36Sopenharmony_ci	}, {
184762306a36Sopenharmony_ci		.compatible = "samsung,exynos850-cmu-aud",
184862306a36Sopenharmony_ci		.data = &aud_cmu_info,
184962306a36Sopenharmony_ci	}, {
185062306a36Sopenharmony_ci		.compatible = "samsung,exynos850-cmu-cmgp",
185162306a36Sopenharmony_ci		.data = &cmgp_cmu_info,
185262306a36Sopenharmony_ci	}, {
185362306a36Sopenharmony_ci		.compatible = "samsung,exynos850-cmu-g3d",
185462306a36Sopenharmony_ci		.data = &g3d_cmu_info,
185562306a36Sopenharmony_ci	}, {
185662306a36Sopenharmony_ci		.compatible = "samsung,exynos850-cmu-hsi",
185762306a36Sopenharmony_ci		.data = &hsi_cmu_info,
185862306a36Sopenharmony_ci	}, {
185962306a36Sopenharmony_ci		.compatible = "samsung,exynos850-cmu-is",
186062306a36Sopenharmony_ci		.data = &is_cmu_info,
186162306a36Sopenharmony_ci	}, {
186262306a36Sopenharmony_ci		.compatible = "samsung,exynos850-cmu-mfcmscl",
186362306a36Sopenharmony_ci		.data = &mfcmscl_cmu_info,
186462306a36Sopenharmony_ci	}, {
186562306a36Sopenharmony_ci		.compatible = "samsung,exynos850-cmu-core",
186662306a36Sopenharmony_ci		.data = &core_cmu_info,
186762306a36Sopenharmony_ci	}, {
186862306a36Sopenharmony_ci		.compatible = "samsung,exynos850-cmu-dpu",
186962306a36Sopenharmony_ci		.data = &dpu_cmu_info,
187062306a36Sopenharmony_ci	}, {
187162306a36Sopenharmony_ci	},
187262306a36Sopenharmony_ci};
187362306a36Sopenharmony_ci
187462306a36Sopenharmony_cistatic struct platform_driver exynos850_cmu_driver __refdata = {
187562306a36Sopenharmony_ci	.driver	= {
187662306a36Sopenharmony_ci		.name = "exynos850-cmu",
187762306a36Sopenharmony_ci		.of_match_table = exynos850_cmu_of_match,
187862306a36Sopenharmony_ci		.suppress_bind_attrs = true,
187962306a36Sopenharmony_ci	},
188062306a36Sopenharmony_ci	.probe = exynos850_cmu_probe,
188162306a36Sopenharmony_ci};
188262306a36Sopenharmony_ci
188362306a36Sopenharmony_cistatic int __init exynos850_cmu_init(void)
188462306a36Sopenharmony_ci{
188562306a36Sopenharmony_ci	return platform_driver_register(&exynos850_cmu_driver);
188662306a36Sopenharmony_ci}
188762306a36Sopenharmony_cicore_initcall(exynos850_cmu_init);
1888