From 375b1f2d8b9a23bb567b409a5cae28d7b3b6dfc4 Mon Sep 17 00:00:00 2001 From: Jeonghoon Jang Date: Fri, 8 Sep 2017 10:06:02 +0900 Subject: [PATCH] [9610] clk: samsung: Added exynos9610 clk driver. Change-Id: I883a7fb07ad763dc593d15fa605786e06c7feea0 Signed-off-by: Jeonghoon Jang --- drivers/clk/samsung/Makefile | 10 +- drivers/clk/samsung/clk-exynos9610.c | 376 +++++++++++++++++++++++++ include/dt-bindings/clock/exynos9610.h | 281 ++++++++++++++++++ 3 files changed, 665 insertions(+), 2 deletions(-) create mode 100644 drivers/clk/samsung/clk-exynos9610.c create mode 100644 include/dt-bindings/clock/exynos9610.h diff --git a/drivers/clk/samsung/Makefile b/drivers/clk/samsung/Makefile index 23835001e8bd..a0180cd5d7bb 100644 --- a/drivers/clk/samsung/Makefile +++ b/drivers/clk/samsung/Makefile @@ -10,11 +10,17 @@ obj-$(CONFIG_SOC_EXYNOS5250) += clk-exynos5250.o obj-$(CONFIG_SOC_EXYNOS5260) += clk-exynos5260.o obj-$(CONFIG_SOC_EXYNOS5410) += clk-exynos5410.o obj-$(CONFIG_SOC_EXYNOS5420) += clk-exynos5420.o -obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynos5433.o obj-$(CONFIG_SOC_EXYNOS5440) += clk-exynos5440.o obj-$(CONFIG_EXYNOS_AUDSS_CLK_CON) += clk-exynos-audss.o -obj-$(CONFIG_ARCH_EXYNOS) += clk-exynos-clkout.o +ifeq ($(CONFIG_COMPOSITE_CLK_SAMSUNG), y) + obj-y += composite.o + obj-$(CONFIG_SOC_EXYNOS9610) += clk-exynos9610.o +else + obj-$(CONFIG_COMMON_CLK) += clk.o clk-pll.o clk-cpu.o +obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynos5433.o obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynos7.o +endif +obj-$(CONFIG_ARCH_EXYNOS) += clk-exynos-clkout.o obj-$(CONFIG_S3C2410_COMMON_CLK)+= clk-s3c2410.o obj-$(CONFIG_S3C2410_COMMON_DCLK)+= clk-s3c2410-dclk.o obj-$(CONFIG_S3C2412_COMMON_CLK)+= clk-s3c2412.o diff --git a/drivers/clk/samsung/clk-exynos9610.c b/drivers/clk/samsung/clk-exynos9610.c new file mode 100644 index 000000000000..05b45d1f7ce9 --- /dev/null +++ b/drivers/clk/samsung/clk-exynos9610.c @@ -0,0 +1,376 @@ +/* + * Copyright (c) 2017 Samsung Electronics Co., Ltd. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Common Clock Framework support for Exynos9610 SoC. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "../../soc/samsung/cal-if/exynos9610/cmucal-vclk.h" +#include "../../soc/samsung/cal-if/exynos9610/cmucal-node.h" +#include "../../soc/samsung/cal-if/exynos9610/cmucal-qch.h" +#include "../../soc/samsung/cal-if/exynos9610/clkout_exynos9610.h" +#include "composite.h" + +static struct samsung_clk_provider *exynos9610_clk_provider; +/* + * list of controller registers to be saved and restored during a + * suspend/resume cycle. + */ +/* fixed rate clocks generated outside the soc */ +struct samsung_fixed_rate exynos9610_fixed_rate_ext_clks[] __initdata = { + FRATE(OSCCLK, "fin_pll", NULL, 0, 26000000), +}; + +/* HWACG VCLK */ +struct init_vclk exynos9610_apm_hwacg_vclks[] __initdata = { + HWACG_VCLK(UMUX_CLKCMU_APM_BUS, MUX_CLKCMU_APM_BUS_USER, "UMUX_CLKCMU_APM_BUS", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_GREBEINTEGRATION_QCH_GREBE, GREBEINTEGRATION_QCH_GREBE, "GATE_GREBEINTEGRATION_QCH_GREBE", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_GREBEINTEGRATION_QCH_DBG, GREBEINTEGRATION_QCH_DBG, "GATE_GREBEINTEGRATION_QCH_DBG", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_INTMEM_QCH, INTMEM_QCH, "GATE_INTMEM_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_MAILBOX_AP2CP_QCH, MAILBOX_AP2CP_QCH, "GATE_MAILBOX_AP2CP_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_MAILBOX_AP2CP_S_QCH, MAILBOX_AP2CP_S_QCH, "GATE_MAILBOX_AP2CP_S_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_MAILBOX_AP2GNSS_QCH, MAILBOX_AP2GNSS_QCH, "GATE_MAILBOX_AP2GNSS_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_MAILBOX_AP2SHUB_QCH, MAILBOX_AP2SHUB_QCH, "GATE_MAILBOX_AP2SHUB_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_MAILBOX_AP2WLBT_QCH, MAILBOX_AP2WLBT_QCH, "GATE_MAILBOX_AP2WLBT_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_MAILBOX_APM2AP_QCH, MAILBOX_APM2AP_QCH, "GATE_MAILBOX_APM2AP_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_MAILBOX_APM2CP_QCH, MAILBOX_APM2CP_QCH, "GATE_MAILBOX_APM2CP_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_MAILBOX_APM2GNSS_QCH, MAILBOX_APM2GNSS_QCH, "GATE_MAILBOX_APM2GNSS_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_MAILBOX_APM2SHUB_QCH, MAILBOX_APM2SHUB_QCH, "GATE_MAILBOX_APM2SHUB_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_MAILBOX_APM2WLBT_QCH, MAILBOX_APM2WLBT_QCH, "GATE_MAILBOX_APM2WLBT_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_MAILBOX_CP2GNSS_QCH, MAILBOX_CP2GNSS_QCH, "GATE_MAILBOX_CP2GNSS_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_MAILBOX_CP2SHUB_QCH, MAILBOX_CP2SHUB_QCH, "GATE_MAILBOX_CP2SHUB_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_MAILBOX_CP2WLBT_QCH, MAILBOX_CP2WLBT_QCH, "GATE_MAILBOX_CP2WLBT_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_MAILBOX_SHUB2GNSS_QCH, MAILBOX_SHUB2GNSS_QCH, "GATE_MAILBOX_SHUB2GNSS_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_MAILBOX_SHUB2WLBT_QCH, MAILBOX_SHUB2WLBT_QCH, "GATE_MAILBOX_SHUB2WLBT_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_MAILBOX_WLBT2ABOX_QCH, MAILBOX_WLBT2ABOX_QCH, "GATE_MAILBOX_WLBT2ABOX_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_MAILBOX_WLBT2GNSS_QCH, MAILBOX_WLBT2GNSS_QCH, "GATE_MAILBOX_WLBT2GNSS_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_PEM_QCH, PEM_QCH, "GATE_PEM_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_SPEEDY_APM_QCH, SPEEDY_APM_QCH, "GATE_SPEEDY_APM_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_SYSREG_APM_QCH, SYSREG_APM_QCH, "GATE_SYSREG_APM_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_WDT_APM_QCH, WDT_APM_QCH, "GATE_WDT_APM_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL), +}; + +struct init_vclk exynos9610_cam_hwacg_vclks[] __initdata = { + HWACG_VCLK(UMUX_CLKCMU_CAM_BUS, MUX_CLKCMU_CAM_BUS_USER, "UMUX_CLKCMU_CAM_BUS", NULL, 0, 0, NULL), + HWACG_VCLK(GATE_IS6P10P0_CAM_QCH_S_CAM_CSIS0, IS6P10P0_CAM_QCH_S_CAM_CSIS0, "GATE_IS6P10P0_CAM_QCH_S_CAM_CSIS0", "UMUX_CLKCMU_CAM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_IS6P10P0_CAM_QCH_S_CAM_CSIS1, IS6P10P0_CAM_QCH_S_CAM_CSIS1, "GATE_IS6P10P0_CAM_QCH_S_CAM_CSIS1", "UMUX_CLKCMU_CAM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_IS6P10P0_CAM_QCH_S_CAM_CSIS2, IS6P10P0_CAM_QCH_S_CAM_CSIS2, "GATE_IS6P10P0_CAM_QCH_S_CAM_CSIS2", "UMUX_CLKCMU_CAM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_IS6P10P0_CAM_QCH_S_CAM_CSIS3, IS6P10P0_CAM_QCH_S_CAM_CSIS3, "GATE_IS6P10P0_CAM_QCH_S_CAM_CSIS3", "UMUX_CLKCMU_CAM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_IS6P10P0_CAM_QCH_S_CAM_3AA, IS6P10P0_CAM_QCH_S_CAM_3AA, "GATE_IS6P10P0_CAM_QCH_S_CAM_3AA", "UMUX_CLKCMU_CAM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_IS6P10P0_CAM_QCH_S_CAM_SMMU, IS6P10P0_CAM_QCH_S_CAM_SMMU, "GATE_IS6P10P0_CAM_QCH_S_CAM_SMMU", "UMUX_CLKCMU_CAM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_IS6P10P0_CAM_QCH_S_CAM_PDP_CORE, IS6P10P0_CAM_QCH_S_CAM_PDP_CORE, "GATE_IS6P10P0_CAM_QCH_S_CAM_PDP_CORE", "UMUX_CLKCMU_CAM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_IS6P10P0_CAM_QCH_S_CAM_PDP_DMA, IS6P10P0_CAM_QCH_S_CAM_PDP_DMA, "GATE_IS6P10P0_CAM_QCH_S_CAM_PDP_DMA", "UMUX_CLKCMU_CAM_BUS", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_IS6P10P0_CAM_QCH_S_CAM_RDMA, IS6P10P0_CAM_QCH_S_CAM_RDMA, "GATE_IS6P10P0_CAM_QCH_S_CAM_RDMA", "UMUX_CLKCMU_CAM_BUS", 0, VCLK_GATE, NULL), +}; + +struct init_vclk exynos9610_cmgp_hwacg_vclks[] __initdata = { + HWACG_VCLK(MUX_CMGP_ADC, MUX_CLK_CMGP_ADC, "MUX_CMGP_ADC", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(MUX_CMGP_I2C, MUX_CLK_CMGP_I2C, "MUX_CMGP_I2C", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(MUX_CMGP_USI00, MUX_CLK_CMGP_USI00, "MUX_CMGP_USI00", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(MUX_CMGP_USI01, MUX_CLK_CMGP_USI01, "MUX_CMGP_USI01", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(MUX_CMGP_USI02, MUX_CLK_CMGP_USI02, "MUX_CMGP_USI02", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(MUX_CMGP_USI03, MUX_CLK_CMGP_USI03, "MUX_CMGP_USI03", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(MUX_CMGP_USI04, MUX_CLK_CMGP_USI04, "MUX_CMGP_USI04", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_ADC_CMGP_QCH_S0, ADC_CMGP_QCH_S0, "GATE_ADC_CMGP_QCH_S0", "MUX_CMGP_ADC", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_ADC_CMGP_QCH_S1, ADC_CMGP_QCH_S1, "GATE_ADC_CMGP_QCH_S1", "MUX_CMGP_ADC", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_ADC_CMGP_QCH_ADC, ADC_CMGP_QCH_ADC, "GATE_ADC_CMGP_QCH_ADC", "MUX_CMGP_ADC", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_I2C_CMGP00_QCH, I2C_CMGP00_QCH, "GATE_I2C_CMGP00_QCH", "MUX_CMGP_I2C", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_I2C_CMGP01_QCH, I2C_CMGP01_QCH, "GATE_I2C_CMGP01_QCH", "MUX_CMGP_I2C", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_I2C_CMGP02_QCH, I2C_CMGP02_QCH, "GATE_I2C_CMGP02_QCH", "MUX_CMGP_I2C", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_I2C_CMGP03_QCH, I2C_CMGP03_QCH, "GATE_I2C_CMGP03_QCH", "MUX_CMGP_I2C", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_I2C_CMGP04_QCH, I2C_CMGP04_QCH, "GATE_I2C_CMGP04_QCH", "MUX_CMGP_I2C", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_USI_CMGP00_QCH, USI_CMGP00_QCH, "GATE_USI_CMGP00_QCH", "MUX_CMGP_USI00", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_USI_CMGP01_QCH, USI_CMGP01_QCH, "GATE_USI_CMGP01_QCH", "MUX_CMGP_USI01", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_USI_CMGP02_QCH, USI_CMGP02_QCH, "GATE_USI_CMGP02_QCH", "MUX_CMGP_USI02", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_USI_CMGP03_QCH, USI_CMGP03_QCH, "GATE_USI_CMGP03_QCH", "MUX_CMGP_USI03", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_USI_CMGP04_QCH, USI_CMGP04_QCH, "GATE_USI_CMGP04_QCH", "MUX_CMGP_USI04", 0, VCLK_GATE, NULL), +}; + +struct init_vclk exynos9610_top_hwacg_vclks[] __initdata = { + HWACG_VCLK(GATE_DFTMUX_TOP_QCH_CLK_CSIS0, DFTMUX_TOP_QCH_CLK_CSIS0, "GATE_DFTMUX_TOP_QCH_CLK_CSIS0", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_DFTMUX_TOP_QCH_CLK_CSIS1, DFTMUX_TOP_QCH_CLK_CSIS1, "GATE_DFTMUX_TOP_QCH_CLK_CSIS1", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_DFTMUX_TOP_QCH_CLK_CSIS2, DFTMUX_TOP_QCH_CLK_CSIS2, "GATE_DFTMUX_TOP_QCH_CLK_CSIS2", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_DFTMUX_TOP_QCH_CLK_CSIS3, DFTMUX_TOP_QCH_CLK_CSIS3, "GATE_DFTMUX_TOP_QCH_CLK_CSIS3", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_OTP_QCH, OTP_QCH, "GATE_OTP_QCH", NULL, 0, VCLK_GATE, NULL), +}; + +struct init_vclk exynos9610_core_hwacg_vclks[] __initdata = { + HWACG_VCLK(MUX_CORE_GIC, MUX_CLK_CORE_GIC, "MUX_CORE_GIC", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_GIC400_AIHWACG_QCH, GIC400_AIHWACG_QCH, "GATE_GIC400_AIHWACG_QCH", "MUX_CORE_GIC", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_PDMA_CORE_QCH, PDMA_CORE_QCH, "GATE_PDMA_CORE_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_PPFW_CORE_MEM0_QCH, PPFW_CORE_MEM0_QCH, "GATE_PPFW_CORE_MEM0_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_PPFW_CORE_MEM1_QCH, PPFW_CORE_MEM1_QCH, "GATE_PPFW_CORE_MEM1_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_PPFW_CORE_PERI_QCH, PPFW_CORE_PERI_QCH, "GATE_PPFW_CORE_PERI_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_SIREX_QCH, SIREX_QCH, "GATE_SIREX_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_SPDMA_CORE_QCH, SPDMA_CORE_QCH, "GATE_SPDMA_CORE_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_TREX_D_CORE_QCH, TREX_D_CORE_QCH, "GATE_TREX_D_CORE_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_TREX_D_NRT_QCH, TREX_D_NRT_QCH, "GATE_TREX_D_NRT_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_TREX_P_CORE_QCH, TREX_P_CORE_QCH, "GATE_TREX_P_CORE_QCH", NULL, 0, VCLK_GATE, NULL), +}; + +struct init_vclk exynos9610_dispaud_hwacg_vclks[] __initdata = { + HWACG_VCLK(MUX_AUD_FM, MUX_CLK_AUD_FM, "MUX_AUD_FM", NULL, 0, 0, NULL), + HWACG_VCLK(UMUX_CLKCMU_DISPAUD_BUS, MUX_CLKCMU_DISPAUD_DISP, "MUX_CLKCMU_DISPAUD_DISP", NULL, 0, 0, NULL), + HWACG_VCLK(GATE_ABOX_QCH_CPU, ABOX_QCH_CPU, "GATE_ABOX_QCH_CPU", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_ABOX_QCH_S_ACLK, ABOX_QCH_S_ACLK, "GATE_ABOX_QCH_S_ACLK", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_ABOX_QCH_S_BCLK0, ABOX_QCH_S_BCLK0, "GATE_ABOX_QCH_S_BCLK0", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_ABOX_QCH_S_BCLK2, ABOX_QCH_S_BCLK2, "GATE_ABOX_QCH_S_BCLK2", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_ABOX_QCH_S_BCLK1, ABOX_QCH_S_BCLK1, "GATE_ABOX_QCH_S_BCLK1", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_ABOX_QCH_FM, ABOX_QCH_FM, "GATE_ABOX_QCH_FM", "MUX_AUD_FM", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_ABOX_QCH_S_BCLK_DSIF, ABOX_QCH_S_BCLK_DSIF, "GATE_ABOX_QCH_S_BCLK_DSIF", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_DPU_QCH_S_DPP, DPU_QCH_S_DPP, "GATE_DPU_QCH_S_DPP", "MUX_CLKCMU_DISPAUD_DISP", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_DPU_QCH_S_DMA, DPU_QCH_S_DMA, "GATE_DPU_QCH_S_DMA", "MUX_CLKCMU_DISPAUD_DISP", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_DPU_QCH_S_DECON, DPU_QCH_S_DECON, "GATE_DPU_QCH_S_DECON", "MUX_CLKCMU_DISPAUD_DISP", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_SMMU_ABOX_QCH, SMMU_ABOX_QCH, "GATE_SMMU_ABOX_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_SMMU_DPU_QCH, SMMU_DPU_QCH, "GATE_SMMU_DPU_QCH", "MUX_CLKCMU_DISPAUD_DISP", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_WDT_AUD_QCH, WDT_AUD_QCH, "GATE_WDT_AUD_QCH", NULL, 0, VCLK_GATE, NULL), +}; + +struct init_vclk exynos9610_fsys_hwacg_vclks[] __initdata = { + HWACG_VCLK(UMUX_CLKCMU_FSYS_BUS, MUX_CLKCMU_FSYS_BUS_USER, "MUX_CLKCMU_FSYS_BUS_USER", NULL, 0, 0, NULL), + HWACG_VCLK(UMUX_CLKCMU_FSYS_MMC_EMBD, MUX_CLKCMU_FSYS_MMC_EMBD_USER, "MUX_CLKCMU_FSYS_MMC_EMBD_USER", NULL, 0, 0, NULL), + HWACG_VCLK(UMUX_CLKCMU_FSYS_MMC_CARD, MUX_CLKCMU_FSYS_MMC_CARD_USER, "MUX_CLKCMU_FSYS_MMC_CARD_USER", NULL, 0, 0, NULL), + HWACG_VCLK(UMUX_CLKCMU_FSYS_UFS_EMBD, MUX_CLKCMU_FSYS_UFS_EMBD_USER, "MUX_CLKCMU_FSYS_UFS_EMBD_USER", NULL, 0, 0, NULL), + HWACG_VCLK(GATE_MMC_CARD_QCH, MMC_CARD_QCH, "GATE_MMC_CARD_QCH", "MUX_CLKCMU_FSYS_MMC_CARD_USER", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_MMC_EMBD_QCH, MMC_EMBD_QCH, "GATE_MMC_EMBD_QCH", "MUX_CLKCMU_FSYS_MMC_EMBD_USER", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_RTIC_QCH, RTIC_QCH, "GATE_RTIC_QCH", "MUX_CLKCMU_FSYS_BUS_USER", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_SSS_QCH, SSS_QCH, "GATE_SSS_QCH", "MUX_CLKCMU_FSYS_BUS_USER", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_UFS_EMBD_QCH_UFS, UFS_EMBD_QCH_UFS, "GATE_UFS_EMBD_QCH_UFS", "MUX_CLKCMU_FSYS_UFS_EMBD_USER", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_UFS_EMBD_QCH_FMP, UFS_EMBD_QCH_FMP, "GATE_UFS_EMBD_QCH_FMP", "MUX_CLKCMU_FSYS_UFS_EMBD_USER", 0, VCLK_GATE, NULL), +}; + +struct init_vclk exynos9610_g2d_hwacg_vclks[] __initdata = { + HWACG_VCLK(UMUX_CLKCMU_G2D_G2D, MUX_CLKCMU_G2D_G2D_USER, "MUX_CLKCMU_G2D_G2D_USER", NULL, 0, 0, NULL), + HWACG_VCLK(UMUX_CLKCMU_G2D_MSCL, MUX_CLKCMU_G2D_MSCL_USER, "MUX_CLKCMU_G2D_MSCL_USER", NULL, 0, 0, NULL), + HWACG_VCLK(GATE_G2D_QCH, G2D_QCH, "GATE_G2D_QCH", "MUX_CLKCMU_G2D_G2D_USER", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_JPEG_QCH, JPEG_QCH, "GATE_JPEG_QCH", "MUX_CLKCMU_G2D_MSCL_USER", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_MSCL_QCH, MSCL_QCH, "GATE_MSCL_QCH", "MUX_CLKCMU_G2D_MSCL_USER", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_SYSMMU_G2D_QCH, SYSMMU_G2D_QCH, "GATE_SYSMMU_G2D_QCH", "MUX_CLKCMU_G2D_G2D_USER", 0, VCLK_GATE, NULL), +}; + +struct init_vclk exynos9610_g3d_hwacg_vclks[] __initdata = { + HWACG_VCLK(GATE_G3D_QCH, G3D_QCH, "GATE_G3D_QCH", NULL, 0, VCLK_GATE, NULL), +}; + +struct init_vclk exynos9610_isp_hwacg_vclks[] __initdata = { + HWACG_VCLK(UMUX_CLKCMU_ISP_BUS, MUX_CLKCMU_ISP_BUS_USER, "MUX_CLKCMU_ISP_BUS_USER", NULL, 0, 0, NULL), + HWACG_VCLK(UMUX_CLKCMU_ISP_GDC, MUX_CLKCMU_ISP_GDC_USER, "MUX_CLKCMU_ISP_GDC_USER", NULL, 0, 0, NULL), + HWACG_VCLK(UMUX_CLKCMU_ISP_VRA, MUX_CLKCMU_ISP_VRA_USER, "MUX_CLKCMU_ISP_VRA_USER", NULL, 0, 0, NULL), + HWACG_VCLK(GATE_IS6P10P0_ISP_QCH_S_ISP_ISP, IS6P10P0_ISP_QCH_S_ISP_ISP, "GATE_IS6P10P0_ISP_QCH_S_ISP_ISP", "MUX_CLKCMU_ISP_BUS_USER", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_IS6P10P0_ISP_QCH_S_ISP_MCSC, IS6P10P0_ISP_QCH_S_ISP_MCSC, "GATE_IS6P10P0_ISP_QCH_S_ISP_MCSC", "MUX_CLKCMU_ISP_BUS_USER", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_IS6P10P0_ISP_QCH_S_ISP_VRA, IS6P10P0_ISP_QCH_S_ISP_VRA, "GATE_IS6P10P0_ISP_QCH_S_ISP_VRA", "MUX_CLKCMU_ISP_VRA_USER", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_IS6P10P0_ISP_QCH_S_ISP_GDC, IS6P10P0_ISP_QCH_S_ISP_GDC, "GATE_IS6P10P0_ISP_QCH_S_ISP_GDC", "MUX_CLKCMU_ISP_GDC_USER", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_IS6P10P0_ISP_QCH_S_ISP_SMMU_ISP0, IS6P10P0_ISP_QCH_S_ISP_SMMU_ISP0, "GATE_IS6P10P0_ISP_QCH_S_ISP_SMMU_ISP0", "MUX_CLKCMU_ISP_BUS_USER", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_IS6P10P0_ISP_QCH_S_ISP_SMMU_ISP1, IS6P10P0_ISP_QCH_S_ISP_SMMU_ISP1, "GATE_IS6P10P0_ISP_QCH_S_ISP_SMMU_ISP1", "MUX_CLKCMU_ISP_BUS_USER", 0, VCLK_GATE, NULL), +}; + +struct init_vclk exynos9610_mfc_hwacg_vclks[] __initdata = { + HWACG_VCLK(UMUX_CLKCMU_MFC_MFC, MUX_CLKCMU_MFC_MFC_USER, "MUX_CLKCMU_MFC_MFC_USER", NULL, 0, 0, NULL), + HWACG_VCLK(UMUX_CLKCMU_MFC_WFD, MUX_CLKCMU_MFC_WFD_USER, "MUX_CLKCMU_MFC_WFD_USER", "MUX_CLKCMU_MFC_MFC_USER", 0, 0, NULL), + HWACG_VCLK(GATE_MFC_QCH, MFC_QCH, "GATE_MFC_QCH", "MUX_CLKCMU_MFC_MFC_USER", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_SYSMMU_MFCD0_QCH, SYSMMU_MFCD0_QCH, "GATE_SYSMMU_MFCD0_QCH", "MUX_CLKCMU_MFC_MFC_USER", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_SYSMMU_MFCD1_QCH, SYSMMU_MFCD1_QCH, "GATE_SYSMMU_MFCD1_QCH", "MUX_CLKCMU_MFC_MFC_USER", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_WFD_QCH, WFD_QCH, "GATE_WFD_QCH", "MUX_CLKCMU_MFC_WFD_USER", 0, VCLK_GATE, NULL), +}; + +struct init_vclk exynos9610_peri_hwacg_vclks[] __initdata = { + HWACG_VCLK(UMUX_CLKCMU_PERI_UART, MUX_CLKCMU_PERI_UART_USER, "UMUX_CLKCMU_PERI_UART", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_CAMI2C_0_QCH, CAMI2C_0_QCH, "GATE_CAMI2C_0_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_CAMI2C_1_QCH, CAMI2C_1_QCH, "GATE_CAMI2C_1_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_CAMI2C_2_QCH, CAMI2C_2_QCH, "GATE_CAMI2C_2_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_CAMI2C_3_QCH, CAMI2C_3_QCH, "GATE_CAMI2C_3_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_I2C_0_QCH, I2C_0_QCH, "GATE_I2C_0_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_I2C_1_QCH, I2C_1_QCH, "GATE_I2C_1_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_I2C_2_QCH, I2C_2_QCH, "GATE_I2C_2_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_I2C_3_QCH, I2C_3_QCH, "GATE_I2C_3_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_I2C_4_QCH, I2C_4_QCH, "GATE_I2C_4_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_I2C_5_QCH, I2C_5_QCH, "GATE_I2C_5_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_I2C_6_QCH, I2C_6_QCH, "GATE_I2C_6_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_MCT_QCH, MCT_QCH, "GATE_MCT_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_OTP_CON_TOP_QCH, OTP_CON_TOP_QCH, "GATE_OTP_CON_TOP_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_PWM_MOTOR_QCH, PWM_MOTOR_QCH, "GATE_PWM_MOTOR_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_SPI_0_QCH, SPI_0_QCH, "GATE_SPI_0_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_SPI_1_QCH, SPI_1_QCH, "GATE_SPI_1_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_SPI_2_QCH, SPI_2_QCH, "GATE_SPI_2_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_UART_QCH, UART_QCH, "GATE_UART_QCH", "UMUX_CLKCMU_PERI_UART", 0, 0, "console-pclk0"), + HWACG_VCLK(GATE_USI00_I2C_QCH, USI00_I2C_QCH, "GATE_USI00_I2C_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_USI00_USI_QCH, USI00_USI_QCH, "GATE_USI00_USI_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_WDT_CLUSTER0_QCH, WDT_CLUSTER0_QCH, "GATE_WDT_CLUSTER0_QCH", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_WDT_CLUSTER1_QCH, WDT_CLUSTER1_QCH, "GATE_WDT_CLUSTER1_QCH", NULL, 0, VCLK_GATE, NULL), +}; + +struct init_vclk exynos9610_shub_hwacg_vclks[] __initdata = { + HWACG_VCLK(UMUX_CLKCMU_SHUB_BUS, MUX_CLKCMU_SHUB_BUS_USER, "MUX_CLKCMU_SHUB_BUS_USER", NULL, 0, 0, NULL), + HWACG_VCLK(MUX_SHUB_I2C, MUX_CLK_SHUB_I2C, "MUX_SHUB_I2C", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(MUX_SHUB_USI00, MUX_CLK_SHUB_USI00, "MUX_SHUB_USI00", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(MUX_SHUB_USI01, MUX_CLK_SHUB_USI01, "MUX_SHUB_USI01", NULL, 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_CM4_SHUB_QCH, CM4_SHUB_QCH, "GATE_CM4_SHUB_QCH", "MUX_CLKCMU_SHUB_BUS_USER", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_I2C_SHUB00_QCH, I2C_SHUB00_QCH, "GATE_I2C_SHUB00_QCH", "MUX_SHUB_I2C", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_PDMA_SHUB_QCH, PDMA_SHUB_QCH, "GATE_PDMA_SHUB_QCH", "MUX_CLKCMU_SHUB_BUS_USER", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_PWM_SHUB_QCH, PWM_SHUB_QCH, "GATE_PWM_SHUB_QCH", "MUX_CLKCMU_SHUB_BUS_USER", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_TIMER_SHUB_QCH, TIMER_SHUB_QCH, "GATE_TIMER_SHUB_QCH", "MUX_CLKCMU_SHUB_BUS_USER", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_USI_SHUB00_QCH, USI_SHUB00_QCH, "GATE_USI_SHUB00_QCH", "MUX_SHUB_USI00", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_WDT_SHUB_QCH, WDT_SHUB_QCH, "GATE_WDT_SHUB_QCH", "MUX_CLKCMU_SHUB_BUS_USER", 0, VCLK_GATE, NULL), +}; + +struct init_vclk exynos9610_usb_hwacg_vclks[] __initdata = { + HWACG_VCLK(UMUX_CLKCMU_USB_USBDRD30, MUX_CLKCMU_USB_USB30DRD, "MUX_CLKCMU_USB_USB30DRD", NULL, 0, 0, NULL), + HWACG_VCLK(UMUX_CLKCMU_USB_DPGTC, MUX_CLKCMU_USB_DPGTC, "MUX_CLKCMU_USB_DPGTC", NULL, 0, 0, NULL), + HWACG_VCLK(GATE_DP_LINK_QCH_DP, DP_LINK_QCH_DP, "GATE_DP_LINK_QCH_DP", "MUX_CLKCMU_USB_DPGTC", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_DP_LINK_QCH_GTC, DP_LINK_QCH_GTC, "GATE_DP_LINK_QCH_GTC", "MUX_CLKCMU_USB_DPGTC", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_USB30DRD_QCH_USB30, USB30DRD_QCH_USB30, "GATE_USB30DRD_QCH_USB30", "MUX_CLKCMU_USB_USB30DRD", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_USB30DRD_QCH_USBPHY_30CTRL_0, USB30DRD_QCH_USBPHY_30CTRL_0, "GATE_USB30DRD_QCH_USBPHY_30CTRL_0", "MUX_CLKCMU_USB_USB30DRD", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_USB30DRD_QCH_USBPHY_30CTRL_1, USB30DRD_QCH_USBPHY_30CTRL_1, "GATE_USB30DRD_QCH_USBPHY_30CTRL_1", "MUX_CLKCMU_USB_USB30DRD", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_USB30DRD_QCH_USBPHY_20CTRL, USB30DRD_QCH_USBPHY_20CTRL, "GATE_USB30DRD_QCH_USBPHY_20CTRL", "MUX_CLKCMU_USB_USB30DRD", 0, VCLK_GATE, NULL), +}; + +struct init_vclk exynos9610_vipx1_hwacg_vclks[] __initdata = { + HWACG_VCLK(UMUX_CLKCMU_VIPX1_BUS, MUX_CLKCMU_VIPX1_BUS_USER, "MUX_CLKCMU_VIPX1_BUS_USER", NULL, 0, 0, NULL), + HWACG_VCLK(GATE_SMMU_D_VIPX1_QCH, SMMU_D_VIPX1_QCH, "GATE_SMMU_D_VIPX1_QCH", "MUX_CLKCMU_VIPX1_BUS_USER", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_VIPX1_QCH, VIPX1_QCH, "GATE_VIPX1_QCH", "MUX_CLKCMU_VIPX1_BUS_USER", 0, VCLK_GATE, NULL), +}; + +struct init_vclk exynos9610_vipx2_hwacg_vclks[] __initdata = { + HWACG_VCLK(UMUX_CLKCMU_VIPX2_BUS, MUX_CLKCMU_VIPX2_BUS_USER, "MUX_CLKCMU_VIPX2_BUS_USER", NULL, 0, 0, NULL), + HWACG_VCLK(GATE_SMMU_D_VIPX2_QCH, SMMU_D_VIPX2_QCH, "GATE_SMMU_D_VIPX2_QCH", "MUX_CLKCMU_VIPX2_BUS_USER", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_VIPX2_QCH, VIPX2_QCH, "GATE_VIPX2_QCH", "MUX_CLKCMU_VIPX2_BUS_USER", 0, VCLK_GATE, NULL), + HWACG_VCLK(GATE_VIPX2_QCH_LOCAL, VIPX2_QCH_LOCAL, "GATE_VIPX2_QCH_LOCAL", "MUX_CLKCMU_VIPX2_BUS_USER", 0, VCLK_GATE, NULL), +}; + +/* Special VCLK */ +struct init_vclk exynos9610_dispaud_vclks[] __initdata = { + VCLK(DOUT_CLK_AUD_ACLK, DIV_CLK_AUD_BUS, "DOUT_CLK_AUD_ACLK", 0, 0, NULL), + VCLK(DOUT_CLK_AUD_AUDIF, DIV_CLK_AUD_AUDIF, "DOUT_CLK_AUD_AUDIF", 0, 0, NULL), + VCLK(DOUT_CLK_AUD_DSIF, DIV_CLK_AUD_DSIF, "DOUT_CLK_AUD_DSIF", 0, 0, NULL), + VCLK(DOUT_CLK_AUD_UAIF0, DIV_CLK_AUD_UAIF0, "DOUT_CLK_AUD_UAIF0", 0, 0, NULL), + VCLK(DOUT_CLK_AUD_UAIF1, DIV_CLK_AUD_UAIF1, "DOUT_CLK_AUD_UAIF1", 0, 0, NULL), + VCLK(DOUT_CLK_AUD_UAIF2, DIV_CLK_AUD_UAIF2, "DOUT_CLK_AUD_UAIF2", 0, 0, NULL), + VCLK(PLL_OUT_AUD, PLL_AUD, "PLL_OUT_AUD", 0, 0, NULL), +}; + +struct init_vclk exynos9610_cmgp_vclks[] __initdata = { + VCLK(CMGP00_USI, DIV_CLK_CMGP_USI00, "CMGP00_USI", 0, 0, NULL), + VCLK(CMGP01_USI, DIV_CLK_CMGP_USI01, "CMGP01_USI", 0, 0, NULL), + VCLK(CMGP02_USI, DIV_CLK_CMGP_USI02, "CMGP02_USI", 0, 0, NULL), + VCLK(CMGP03_USI, DIV_CLK_CMGP_USI03, "CMGP03_USI", 0, 0, NULL), + VCLK(CMGP04_USI, DIV_CLK_CMGP_USI04, "CMGP04_USI", 0, 0, NULL), + VCLK(CMGP_I2C, DIV_CLK_CMGP_I2C, "CMGP_I2C", 0, 0, NULL), + VCLK(CMGP_ADC, DIV_CLK_CMGP_ADC, "CMGP_ADC", 0, 0, NULL), +}; + +struct init_vclk exynos9610_fsys_vclks[] __initdata = { + VCLK(MMC_EMBD, CLKCMU_FSYS_MMC_EMBD, "MMC_EMBD", 0, 0, NULL), + VCLK(MMC_CARD, CLKCMU_FSYS_MMC_CARD, "MMC_CARD", 0, 0, NULL), + VCLK(UFS_EMBD, CLKCMU_FSYS_UFS_EMBD, "UFS_EMBD", 0, 0, NULL), +}; + +struct init_vclk exynos9610_usb_vclks[] __initdata = { + VCLK(USB30DRD, VCLK_CLKCMU_USB_USB30DRD, "USB30DRD", 0, 0, NULL), + VCLK(DP_LINK, VCLK_CLKCMU_USB_DPGTC, "DP_LINK", 0, 0, NULL), +}; + +struct init_vclk exynos9610_peri_vclks[] __initdata = { + VCLK(UART, CLKCMU_PERI_UART, "UART", 0, 0, "console-sclk0"), + VCLK(I2C, DIV_CLK_PERI_I2C, "I2C", 0, 0, NULL), + VCLK(SPI0, DIV_CLK_PERI_SPI0, "SPI0", 0, 0, NULL), + VCLK(SPI1, DIV_CLK_PERI_SPI1, "SPI1", 0, 0, NULL), + VCLK(SPI2, DIV_CLK_PERI_SPI2, "SPI2", 0, 0, NULL), + VCLK(USI_I2C, DIV_CLK_PERI_USI_I2C, "USI_I2C", 0, 0, NULL), + VCLK(USI_USI, DIV_CLK_PERI_USI_USI, "USI_USI", 0, 0, NULL), +}; + +struct init_vclk exynos9610_top_vclks[] __initdata = { + VCLK(CIS_CLK0, CLKCMU_CIS_CLK0, "CIS_CLK0", 0, 0, NULL), + VCLK(CIS_CLK1, CLKCMU_CIS_CLK1, "CIS_CLK1", 0, 0, NULL), + VCLK(CIS_CLK2, CLKCMU_CIS_CLK2, "CIS_CLK2", 0, 0, NULL), + VCLK(CIS_CLK3, CLKCMU_CIS_CLK3, "CIS_CLK3", 0, 0, NULL), +}; + +static struct init_vclk exynos9610_clkout_vclks[] __initdata = { + VCLK(OSC_NFC, VCLK_CLKOUT1, "OSC_NFC", 0, 0, NULL), + VCLK(OSC_AUD, VCLK_CLKOUT0, "OSC_AUD", 0, 0, NULL), +}; + +static __initdata struct of_device_id ext_clk_match[] = { + {.compatible = "samsung,exynos9610-oscclk", .data = (void *)0}, + {}, +}; + +void exynos9610_vclk_init(void) +{ + /* Common clock init */ +} + +/* register exynos9610 clocks */ +void __init exynos9610_clk_init(struct device_node *np) +{ + void __iomem *reg_base; + int ret; + + if (np) { + reg_base = of_iomap(np, 0); + if (!reg_base) + panic("%s: failed to map registers\n", __func__); + } else { + panic("%s: unable to determine soc\n", __func__); + } + + ret = cal_if_init(np); + if (ret) + panic("%s: unable to initialize cal-if\n", __func__); + + exynos9610_clk_provider = samsung_clk_init(np, reg_base, CLK_NR_CLKS); + if (!exynos9610_clk_provider) + panic("%s: unable to allocate context.\n", __func__); + + samsung_register_of_fixed_ext(exynos9610_clk_provider, exynos9610_fixed_rate_ext_clks, + ARRAY_SIZE(exynos9610_fixed_rate_ext_clks), + ext_clk_match); + /* register HWACG vclk */ + samsung_register_vclk(exynos9610_clk_provider, exynos9610_apm_hwacg_vclks, ARRAY_SIZE(exynos9610_apm_hwacg_vclks)); + samsung_register_vclk(exynos9610_clk_provider, exynos9610_cam_hwacg_vclks, ARRAY_SIZE(exynos9610_cam_hwacg_vclks)); + samsung_register_vclk(exynos9610_clk_provider, exynos9610_cmgp_hwacg_vclks, ARRAY_SIZE(exynos9610_cmgp_hwacg_vclks)); + samsung_register_vclk(exynos9610_clk_provider, exynos9610_top_hwacg_vclks, ARRAY_SIZE(exynos9610_top_hwacg_vclks)); + samsung_register_vclk(exynos9610_clk_provider, exynos9610_core_hwacg_vclks, ARRAY_SIZE(exynos9610_core_hwacg_vclks)); + samsung_register_vclk(exynos9610_clk_provider, exynos9610_dispaud_hwacg_vclks, ARRAY_SIZE(exynos9610_dispaud_hwacg_vclks)); + samsung_register_vclk(exynos9610_clk_provider, exynos9610_fsys_hwacg_vclks, ARRAY_SIZE(exynos9610_fsys_hwacg_vclks)); + samsung_register_vclk(exynos9610_clk_provider, exynos9610_g2d_hwacg_vclks, ARRAY_SIZE(exynos9610_g2d_hwacg_vclks)); + samsung_register_vclk(exynos9610_clk_provider, exynos9610_g3d_hwacg_vclks, ARRAY_SIZE(exynos9610_g3d_hwacg_vclks)); + samsung_register_vclk(exynos9610_clk_provider, exynos9610_isp_hwacg_vclks, ARRAY_SIZE(exynos9610_isp_hwacg_vclks)); + samsung_register_vclk(exynos9610_clk_provider, exynos9610_mfc_hwacg_vclks, ARRAY_SIZE(exynos9610_mfc_hwacg_vclks)); + samsung_register_vclk(exynos9610_clk_provider, exynos9610_peri_hwacg_vclks, ARRAY_SIZE(exynos9610_peri_hwacg_vclks)); + samsung_register_vclk(exynos9610_clk_provider, exynos9610_shub_hwacg_vclks, ARRAY_SIZE(exynos9610_shub_hwacg_vclks)); + samsung_register_vclk(exynos9610_clk_provider, exynos9610_usb_hwacg_vclks, ARRAY_SIZE(exynos9610_usb_hwacg_vclks)); + samsung_register_vclk(exynos9610_clk_provider, exynos9610_vipx1_hwacg_vclks, ARRAY_SIZE(exynos9610_vipx1_hwacg_vclks)); + samsung_register_vclk(exynos9610_clk_provider, exynos9610_vipx2_hwacg_vclks, ARRAY_SIZE(exynos9610_vipx2_hwacg_vclks)); + + /* register special vclk */ + samsung_register_vclk(exynos9610_clk_provider, exynos9610_dispaud_vclks, ARRAY_SIZE(exynos9610_dispaud_vclks)); + samsung_register_vclk(exynos9610_clk_provider, exynos9610_cmgp_vclks, ARRAY_SIZE(exynos9610_cmgp_vclks)); + samsung_register_vclk(exynos9610_clk_provider, exynos9610_fsys_vclks, ARRAY_SIZE(exynos9610_fsys_vclks)); + samsung_register_vclk(exynos9610_clk_provider, exynos9610_usb_vclks, ARRAY_SIZE(exynos9610_usb_vclks)); + samsung_register_vclk(exynos9610_clk_provider, exynos9610_peri_vclks, ARRAY_SIZE(exynos9610_peri_vclks)); + samsung_register_vclk(exynos9610_clk_provider, exynos9610_top_vclks, ARRAY_SIZE(exynos9610_top_vclks)); + samsung_register_vclk(exynos9610_clk_provider, exynos9610_clkout_vclks, ARRAY_SIZE(exynos9610_clkout_vclks)); + + clk_register_fixed_factor(NULL, "pwm-clock", "fin_pll", CLK_SET_RATE_PARENT, 1, 1); + + samsung_clk_of_add_provider(np, exynos9610_clk_provider); + + late_time_init = exynos9610_vclk_init; + + pr_info("EXYNOS9610: Clock setup completed\n"); +} + +CLK_OF_DECLARE(exynos9610_clk, "samsung,exynos9610-clock", exynos9610_clk_init); diff --git a/include/dt-bindings/clock/exynos9610.h b/include/dt-bindings/clock/exynos9610.h new file mode 100644 index 000000000000..4d6708232669 --- /dev/null +++ b/include/dt-bindings/clock/exynos9610.h @@ -0,0 +1,281 @@ +/* + * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Device Tree binding constants for Exynos9610 clock controller. +*/ + +#ifndef _DT_BINDINGS_CLOCK_EXYNOS_9610_H +#define _DT_BINDINGS_CLOCK_EXYNOS_9610_H + +#define NONE (0 + 0) +#define OSCCLK (0 + 1) + +/* NUMBER FOR APM DRIVER STARTS FROM 10 */ +#define CLK_APM_BASE (10) +#define UMUX_CLKCMU_APM_BUS (CLK_APM_BASE + 0) +#define GATE_GREBEINTEGRATION_QCH_GREBE (CLK_APM_BASE + 1) +#define GATE_GREBEINTEGRATION_QCH_DBG (CLK_APM_BASE + 2) +#define GATE_INTMEM_QCH (CLK_APM_BASE + 3) +#define GATE_MAILBOX_AP2CP_QCH (CLK_APM_BASE + 4) +#define GATE_MAILBOX_AP2CP_S_QCH (CLK_APM_BASE + 5) +#define GATE_MAILBOX_AP2GNSS_QCH (CLK_APM_BASE + 6) +#define GATE_MAILBOX_AP2SHUB_QCH (CLK_APM_BASE + 7) +#define GATE_MAILBOX_AP2WLBT_QCH (CLK_APM_BASE + 8) +#define GATE_MAILBOX_APM2AP_QCH (CLK_APM_BASE + 9) +#define GATE_MAILBOX_APM2CP_QCH (CLK_APM_BASE + 10) +#define GATE_MAILBOX_APM2GNSS_QCH (CLK_APM_BASE + 11) +#define GATE_MAILBOX_APM2SHUB_QCH (CLK_APM_BASE + 12) +#define GATE_MAILBOX_APM2WLBT_QCH (CLK_APM_BASE + 13) +#define GATE_MAILBOX_CP2GNSS_QCH (CLK_APM_BASE + 14) +#define GATE_MAILBOX_CP2SHUB_QCH (CLK_APM_BASE + 15) +#define GATE_MAILBOX_CP2WLBT_QCH (CLK_APM_BASE + 16) +#define GATE_MAILBOX_SHUB2GNSS_QCH (CLK_APM_BASE + 17) +#define GATE_MAILBOX_SHUB2WLBT_QCH (CLK_APM_BASE + 18) +#define GATE_MAILBOX_WLBT2ABOX_QCH (CLK_APM_BASE + 19) +#define GATE_MAILBOX_WLBT2GNSS_QCH (CLK_APM_BASE + 20) +#define GATE_PEM_QCH (CLK_APM_BASE + 21) +#define GATE_SPEEDY_APM_QCH (CLK_APM_BASE + 22) +#define GATE_SYSREG_APM_QCH (CLK_APM_BASE + 23) +#define GATE_WDT_APM_QCH (CLK_APM_BASE + 24) + +/* NUMBER FOR CAM DRIVER STARTS FROM 40 */ +#define CLK_CAM_BASE (40) +#define UMUX_CLKCMU_CAM_BUS (CLK_CAM_BASE + 0) +#define GATE_IS6P10P0_CAM_QCH_S_CAM_CSIS0 (CLK_CAM_BASE + 1) +#define GATE_IS6P10P0_CAM_QCH_S_CAM_CSIS1 (CLK_CAM_BASE + 2) +#define GATE_IS6P10P0_CAM_QCH_S_CAM_CSIS2 (CLK_CAM_BASE + 3) +#define GATE_IS6P10P0_CAM_QCH_S_CAM_CSIS3 (CLK_CAM_BASE + 4) +#define GATE_IS6P10P0_CAM_QCH_S_CAM_3AA (CLK_CAM_BASE + 5) +#define GATE_IS6P10P0_CAM_QCH_S_CAM_SMMU (CLK_CAM_BASE + 6) +#define GATE_IS6P10P0_CAM_QCH_S_CAM_PDP_CORE (CLK_CAM_BASE + 7) +#define GATE_IS6P10P0_CAM_QCH_S_CAM_PDP_DMA (CLK_CAM_BASE + 8) +#define GATE_IS6P10P0_CAM_QCH_S_CAM_RDMA (CLK_CAM_BASE + 9) + +/* NUMBER FOR CMGP DRIVER STARTS FROM 100 */ +#define CLK_CMGP_BASE (100) +#define MUX_CMGP_ADC (CLK_CMGP_BASE + 0) +#define MUX_CMGP_I2C (CLK_CMGP_BASE + 1) +#define MUX_CMGP_USI00 (CLK_CMGP_BASE + 2) +#define MUX_CMGP_USI01 (CLK_CMGP_BASE + 3) +#define MUX_CMGP_USI02 (CLK_CMGP_BASE + 4) +#define MUX_CMGP_USI03 (CLK_CMGP_BASE + 5) +#define MUX_CMGP_USI04 (CLK_CMGP_BASE + 6) +#define GATE_ADC_CMGP_QCH_S0 (CLK_CMGP_BASE + 7) +#define GATE_ADC_CMGP_QCH_S1 (CLK_CMGP_BASE + 8) +#define GATE_ADC_CMGP_QCH_ADC (CLK_CMGP_BASE + 9) +#define GATE_I2C_CMGP00_QCH (CLK_CMGP_BASE + 10) +#define GATE_I2C_CMGP01_QCH (CLK_CMGP_BASE + 11) +#define GATE_I2C_CMGP02_QCH (CLK_CMGP_BASE + 12) +#define GATE_I2C_CMGP03_QCH (CLK_CMGP_BASE + 13) +#define GATE_I2C_CMGP04_QCH (CLK_CMGP_BASE + 14) +#define GATE_USI_CMGP00_QCH (CLK_CMGP_BASE + 15) +#define GATE_USI_CMGP01_QCH (CLK_CMGP_BASE + 16) +#define GATE_USI_CMGP02_QCH (CLK_CMGP_BASE + 17) +#define GATE_USI_CMGP03_QCH (CLK_CMGP_BASE + 18) +#define GATE_USI_CMGP04_QCH (CLK_CMGP_BASE + 19) +#define CMGP00_USI (CLK_CMGP_BASE + 20) +#define CMGP01_USI (CLK_CMGP_BASE + 21) +#define CMGP02_USI (CLK_CMGP_BASE + 22) +#define CMGP03_USI (CLK_CMGP_BASE + 23) +#define CMGP04_USI (CLK_CMGP_BASE + 24) +#define CMGP_I2C (CLK_CMGP_BASE + 25) +#define CMGP_ADC (CLK_CMGP_BASE + 26) + +/* NUMBER FOR TOP DRIVER STARTS FROM 150 */ +#define CLK_TOP_BASE (150) +#define GATE_DFTMUX_TOP_QCH_CLK_CSIS0 (CLK_TOP_BASE + 0) +#define GATE_DFTMUX_TOP_QCH_CLK_CSIS1 (CLK_TOP_BASE + 1) +#define GATE_DFTMUX_TOP_QCH_CLK_CSIS2 (CLK_TOP_BASE + 2) +#define GATE_DFTMUX_TOP_QCH_CLK_CSIS3 (CLK_TOP_BASE + 3) +#define GATE_OTP_QCH (CLK_TOP_BASE + 4) +#define CIS_CLK0 (CLK_TOP_BASE + 5) +#define CIS_CLK1 (CLK_TOP_BASE + 6) +#define CIS_CLK2 (CLK_TOP_BASE + 7) +#define CIS_CLK3 (CLK_TOP_BASE + 8) + +/* NUMBER FOR CORE DRIVER STARTS FROM 200 */ +#define CLK_CORE_BASE (200) +#define MUX_CORE_GIC (CLK_CORE_BASE + 0) +#define GATE_GIC400_AIHWACG_QCH (CLK_CORE_BASE + 1) +#define GATE_PDMA_CORE_QCH (CLK_CORE_BASE + 2) +#define GATE_PPFW_CORE_MEM0_QCH (CLK_CORE_BASE + 3) +#define GATE_PPFW_CORE_MEM1_QCH (CLK_CORE_BASE + 4) +#define GATE_PPFW_CORE_PERI_QCH (CLK_CORE_BASE + 5) +#define GATE_SIREX_QCH (CLK_CORE_BASE + 6) +#define GATE_SPDMA_CORE_QCH (CLK_CORE_BASE + 7) +#define GATE_TREX_D_CORE_QCH (CLK_CORE_BASE + 8) +#define GATE_TREX_D_NRT_QCH (CLK_CORE_BASE + 9) +#define GATE_TREX_P_CORE_QCH (CLK_CORE_BASE + 10) + +/* NUMBER FOR DISPAUD DRIVER STARTS FROM 250 */ +#define CLK_DISPAUD_BASE (250) +#define MUX_AUD_FM (CLK_DISPAUD_BASE + 0) +#define UMUX_CLKCMU_DISPAUD_BUS (CLK_DISPAUD_BASE + 1) +#define GATE_ABOX_QCH_CPU (CLK_DISPAUD_BASE + 2) +#define GATE_ABOX_QCH_S_ACLK (CLK_DISPAUD_BASE + 3) +#define GATE_ABOX_QCH_S_BCLK0 (CLK_DISPAUD_BASE + 4) +#define GATE_ABOX_QCH_S_BCLK2 (CLK_DISPAUD_BASE + 5) +#define GATE_ABOX_QCH_S_BCLK1 (CLK_DISPAUD_BASE + 6) +#define GATE_ABOX_QCH_FM (CLK_DISPAUD_BASE + 7) +#define GATE_ABOX_QCH_S_BCLK_DSIF (CLK_DISPAUD_BASE + 8) +#define GATE_DPU_QCH_S_DPP (CLK_DISPAUD_BASE + 9) +#define GATE_DPU_QCH_S_DMA (CLK_DISPAUD_BASE + 10) +#define GATE_DPU_QCH_S_DECON (CLK_DISPAUD_BASE + 11) +#define GATE_SMMU_ABOX_QCH (CLK_DISPAUD_BASE + 12) +#define GATE_SMMU_DPU_QCH (CLK_DISPAUD_BASE + 13) +#define GATE_WDT_AUD_QCH (CLK_DISPAUD_BASE + 14) +#define DOUT_CLK_AUD_ACLK (CLK_DISPAUD_BASE + 15) +#define DOUT_CLK_AUD_AUDIF (CLK_DISPAUD_BASE + 16) +#define DOUT_CLK_AUD_DSIF (CLK_DISPAUD_BASE + 17) +#define DOUT_CLK_AUD_UAIF0 (CLK_DISPAUD_BASE + 18) +#define DOUT_CLK_AUD_UAIF1 (CLK_DISPAUD_BASE + 19) +#define DOUT_CLK_AUD_UAIF2 (CLK_DISPAUD_BASE + 20) +#define PLL_OUT_AUD (CLK_DISPAUD_BASE + 21) + +/* NUMBER FOR FSYS DRIVER STARTS FROM 300 */ +#define CLK_FSYS_BASE (300) +#define UMUX_CLKCMU_FSYS_BUS (CLK_FSYS_BASE + 0) +#define UMUX_CLKCMU_FSYS_MMC_EMBD (CLK_FSYS_BASE + 1) +#define UMUX_CLKCMU_FSYS_MMC_CARD (CLK_FSYS_BASE + 2) +#define UMUX_CLKCMU_FSYS_UFS_EMBD (CLK_FSYS_BASE + 3) +#define GATE_MMC_CARD_QCH (CLK_FSYS_BASE + 4) +#define GATE_MMC_EMBD_QCH (CLK_FSYS_BASE + 5) +#define GATE_RTIC_QCH (CLK_FSYS_BASE + 6) +#define GATE_SSS_QCH (CLK_FSYS_BASE + 7) +#define GATE_UFS_EMBD_QCH_UFS (CLK_FSYS_BASE + 8) +#define GATE_UFS_EMBD_QCH_FMP (CLK_FSYS_BASE + 9) +#define MMC_EMBD (CLK_FSYS_BASE + 10) +#define MMC_CARD (CLK_FSYS_BASE + 11) +#define UFS_EMBD (CLK_FSYS_BASE + 12) + +/* NUMBER FOR G2D DRIVER STARTS FROM 350 */ +#define CLK_G2D_BASE (350) +#define UMUX_CLKCMU_G2D_G2D (CLK_G2D_BASE + 0) +#define UMUX_CLKCMU_G2D_MSCL (CLK_G2D_BASE + 1) +#define GATE_G2D_QCH (CLK_G2D_BASE + 2) +#define GATE_JPEG_QCH (CLK_G2D_BASE + 3) +#define GATE_MSCL_QCH (CLK_G2D_BASE + 4) +#define GATE_SYSMMU_G2D_QCH (CLK_G2D_BASE + 5) + +/* NUMBER FOR G3D DRIVER STARTS FROM 400 */ +#define CLK_G3D_BASE (400) +#define GATE_G3D_QCH (CLK_G3D_BASE + 0) + +/* NUMBER FOR ISP DRIVER STARTS FROM 450 */ +#define CLK_ISP_BASE (450) +#define UMUX_CLKCMU_ISP_BUS (CLK_ISP_BASE + 0) +#define UMUX_CLKCMU_ISP_GDC (CLK_ISP_BASE + 1) +#define UMUX_CLKCMU_ISP_VRA (CLK_ISP_BASE + 2) +#define GATE_IS6P10P0_ISP_QCH_S_ISP_ISP (CLK_ISP_BASE + 3) +#define GATE_IS6P10P0_ISP_QCH_S_ISP_MCSC (CLK_ISP_BASE + 4) +#define GATE_IS6P10P0_ISP_QCH_S_ISP_VRA (CLK_ISP_BASE + 5) +#define GATE_IS6P10P0_ISP_QCH_S_ISP_GDC (CLK_ISP_BASE + 6) +#define GATE_IS6P10P0_ISP_QCH_S_ISP_SMMU_ISP0 (CLK_ISP_BASE + 7) +#define GATE_IS6P10P0_ISP_QCH_S_ISP_SMMU_ISP1 (CLK_ISP_BASE + 8) + +/* NUMBER FOR MFC DRIVER STARTS FROM 500 */ +#define CLK_MFC_BASE (500) +#define UMUX_CLKCMU_MFC_MFC (CLK_MFC_BASE + 0) +#define UMUX_CLKCMU_MFC_WFD (CLK_MFC_BASE + 1) +#define GATE_MFC_QCH (CLK_MFC_BASE + 2) +#define GATE_SYSMMU_MFCD0_QCH (CLK_MFC_BASE + 3) +#define GATE_SYSMMU_MFCD1_QCH (CLK_MFC_BASE + 4) +#define GATE_WFD_QCH (CLK_MFC_BASE + 5) + +/* NUMBER FOR PERI DRIVER STARTS FROM 550 */ +#define CLK_PERI_BASE (550) +#define UMUX_CLKCMU_PERI_UART (CLK_PERI_BASE + 0) +#define GATE_CAMI2C_0_QCH (CLK_PERI_BASE + 1) +#define GATE_CAMI2C_1_QCH (CLK_PERI_BASE + 2) +#define GATE_CAMI2C_2_QCH (CLK_PERI_BASE + 3) +#define GATE_CAMI2C_3_QCH (CLK_PERI_BASE + 4) +#define GATE_I2C_0_QCH (CLK_PERI_BASE + 5) +#define GATE_I2C_1_QCH (CLK_PERI_BASE + 6) +#define GATE_I2C_2_QCH (CLK_PERI_BASE + 7) +#define GATE_I2C_3_QCH (CLK_PERI_BASE + 8) +#define GATE_I2C_4_QCH (CLK_PERI_BASE + 9) +#define GATE_I2C_5_QCH (CLK_PERI_BASE + 10) +#define GATE_I2C_6_QCH (CLK_PERI_BASE + 11) +#define GATE_MCT_QCH (CLK_PERI_BASE + 12) +#define GATE_OTP_CON_TOP_QCH (CLK_PERI_BASE + 13) +#define GATE_PWM_MOTOR_QCH (CLK_PERI_BASE + 14) +#define GATE_SPI_0_QCH (CLK_PERI_BASE + 15) +#define GATE_SPI_1_QCH (CLK_PERI_BASE + 16) +#define GATE_SPI_2_QCH (CLK_PERI_BASE + 17) +#define GATE_UART_QCH (CLK_PERI_BASE + 18) +#define GATE_USI00_I2C_QCH (CLK_PERI_BASE + 19) +#define GATE_USI00_USI_QCH (CLK_PERI_BASE + 20) +#define GATE_WDT_CLUSTER0_QCH (CLK_PERI_BASE + 21) +#define GATE_WDT_CLUSTER1_QCH (CLK_PERI_BASE + 22) +#define UART (CLK_PERI_BASE + 23) +#define I2C (CLK_PERI_BASE + 24) +#define SPI0 (CLK_PERI_BASE + 25) +#define SPI1 (CLK_PERI_BASE + 26) +#define SPI2 (CLK_PERI_BASE + 27) +#define USI_I2C (CLK_PERI_BASE + 28) +#define USI_USI (CLK_PERI_BASE + 29) + +/* NUMBER FOR SHUB DRIVER STARTS FROM 600 */ +#define CLK_SHUB_BASE (600) +#define UMUX_CLKCMU_SHUB_BUS (CLK_SHUB_BASE + 0) +#define MUX_SHUB_I2C (CLK_SHUB_BASE + 1) +#define MUX_SHUB_USI00 (CLK_SHUB_BASE + 2) +#define MUX_SHUB_USI01 (CLK_SHUB_BASE + 3) +#define GATE_CM4_SHUB_QCH (CLK_SHUB_BASE + 4) +#define GATE_I2C_SHUB00_QCH (CLK_SHUB_BASE + 5) +#define GATE_PDMA_SHUB_QCH (CLK_SHUB_BASE + 6) +#define GATE_PWM_SHUB_QCH (CLK_SHUB_BASE + 7) +#define GATE_TIMER_SHUB_QCH (CLK_SHUB_BASE + 8) +#define GATE_USI_SHUB00_QCH (CLK_SHUB_BASE + 9) +#define GATE_WDT_SHUB_QCH (CLK_SHUB_BASE + 10) + +/* NUMBER FOR USB DRIVER STARTS FROM 650 */ +#define CLK_USB_BASE (650) +#define UMUX_CLKCMU_USB_USBDRD30 (CLK_USB_BASE + 0) +#define UMUX_CLKCMU_USB_DPGTC (CLK_USB_BASE + 1) +#define GATE_DP_LINK_QCH_DP (CLK_USB_BASE + 2) +#define GATE_DP_LINK_QCH_GTC (CLK_USB_BASE + 3) +#define GATE_USB30DRD_QCH_USB30 (CLK_USB_BASE + 4) +#define GATE_USB30DRD_QCH_USBPHY_30CTRL_0 (CLK_USB_BASE + 5) +#define GATE_USB30DRD_QCH_USBPHY_30CTRL_1 (CLK_USB_BASE + 6) +#define GATE_USB30DRD_QCH_USBPHY_20CTRL (CLK_USB_BASE + 7) +#define USB30DRD (CLK_USB_BASE + 8) +#define DP_LINK (CLK_USB_BASE + 9) + +/* NUMBER FOR VIPX1 DRIVER STARTS FROM 700 */ +#define CLK_VIPX1_BASE (700) +#define UMUX_CLKCMU_VIPX1_BUS (CLK_VIPX1_BASE + 0) +#define GATE_SMMU_D_VIPX1_QCH (CLK_VIPX1_BASE + 1) +#define GATE_VIPX1_QCH (CLK_VIPX1_BASE + 2) + +/* NUMBER FOR VIPX2 DRIVER STARTS FROM 750 */ +#define CLK_VIPX2_BASE (750) +#define UMUX_CLKCMU_VIPX2_BUS (CLK_VIPX2_BASE + 0) +#define GATE_SMMU_D_VIPX2_QCH (CLK_VIPX2_BASE + 1) +#define GATE_VIPX2_QCH (CLK_VIPX2_BASE + 2) +#define GATE_VIPX2_QCH_LOCAL (CLK_VIPX2_BASE + 3) + +/* NUMBER FOR CLKOUT DRIVER STARTS FROM 800 */ +#define CLK_CLKOUT_BASE (800) +#define OSC_NFC (CLK_CLKOUT_BASE + 0) +#define OSC_AUD (CLK_CLKOUT_BASE + 1) + +/* must be greater than maximal clock id */ +#define CLK_NR_CLKS (820 + 1) + +#define ACPM_DVFS_MIF (0x0B040000) +#define ACPM_DVFS_INT (0x0B040001) +#define ACPM_DVFS_CPUCL0 (0x0B040002) +#define ACPM_DVFS_CPUCL1 (0x0B040003) +#define ACPM_DVFS_G3D (0x0B040004) +#define ACPM_DVFS_INTCAM (0x0B040005) +#define ACPM_DVFS_CAM (0x0B040006) +#define ACPM_DVFS_DISP (0x0B040007) +#define ACPM_DVFS_AUD (0x0B040008) +#define ACPM_DVFS_CP (0x0B040009) + +#endif /* _DT_BINDINGS_CLOCK_EXYNOS_9610_H */ -- 2.20.1