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