1*7bebc4b0SAdrian Alonso /* 2*7bebc4b0SAdrian Alonso * Copyright (C) 2015 Freescale Semiconductor, Inc. 3*7bebc4b0SAdrian Alonso * 4*7bebc4b0SAdrian Alonso * Author: 5*7bebc4b0SAdrian Alonso * Peng Fan <Peng.Fan@freescale.com> 6*7bebc4b0SAdrian Alonso * 7*7bebc4b0SAdrian Alonso * SPDX-License-Identifier: GPL-2.0+ 8*7bebc4b0SAdrian Alonso */ 9*7bebc4b0SAdrian Alonso 10*7bebc4b0SAdrian Alonso #ifndef _ASM_ARCH_CLOCK_H 11*7bebc4b0SAdrian Alonso #define _ASM_ARCH_CLOCK_H 12*7bebc4b0SAdrian Alonso 13*7bebc4b0SAdrian Alonso #include <common.h> 14*7bebc4b0SAdrian Alonso #include <asm/arch/crm_regs.h> 15*7bebc4b0SAdrian Alonso 16*7bebc4b0SAdrian Alonso #ifdef CONFIG_SYS_MX7_HCLK 17*7bebc4b0SAdrian Alonso #define MXC_HCLK CONFIG_SYS_MX7_HCLK 18*7bebc4b0SAdrian Alonso #else 19*7bebc4b0SAdrian Alonso #define MXC_HCLK 24000000 20*7bebc4b0SAdrian Alonso #endif 21*7bebc4b0SAdrian Alonso 22*7bebc4b0SAdrian Alonso #ifdef CONFIG_SYS_MX7_CLK32 23*7bebc4b0SAdrian Alonso #define MXC_CLK32 CONFIG_SYS_MX7_CLK32 24*7bebc4b0SAdrian Alonso #else 25*7bebc4b0SAdrian Alonso #define MXC_CLK32 32768 26*7bebc4b0SAdrian Alonso #endif 27*7bebc4b0SAdrian Alonso 28*7bebc4b0SAdrian Alonso /* Mainly for compatible to imx common code. */ 29*7bebc4b0SAdrian Alonso enum mxc_clock { 30*7bebc4b0SAdrian Alonso MXC_ARM_CLK = 0, 31*7bebc4b0SAdrian Alonso MXC_AHB_CLK, 32*7bebc4b0SAdrian Alonso MXC_IPG_CLK, 33*7bebc4b0SAdrian Alonso MXC_UART_CLK, 34*7bebc4b0SAdrian Alonso MXC_CSPI_CLK, 35*7bebc4b0SAdrian Alonso MXC_AXI_CLK, 36*7bebc4b0SAdrian Alonso MXC_DDR_CLK, 37*7bebc4b0SAdrian Alonso MXC_ESDHC_CLK, 38*7bebc4b0SAdrian Alonso MXC_ESDHC2_CLK, 39*7bebc4b0SAdrian Alonso MXC_ESDHC3_CLK, 40*7bebc4b0SAdrian Alonso MXC_I2C_CLK, 41*7bebc4b0SAdrian Alonso }; 42*7bebc4b0SAdrian Alonso 43*7bebc4b0SAdrian Alonso /* PLL supported by i.mx7d */ 44*7bebc4b0SAdrian Alonso enum pll_clocks { 45*7bebc4b0SAdrian Alonso PLL_CORE, /* Core PLL */ 46*7bebc4b0SAdrian Alonso PLL_SYS, /* System PLL*/ 47*7bebc4b0SAdrian Alonso PLL_ENET, /* Enet PLL */ 48*7bebc4b0SAdrian Alonso PLL_AUDIO, /* Audio PLL */ 49*7bebc4b0SAdrian Alonso PLL_VIDEO, /* Video PLL*/ 50*7bebc4b0SAdrian Alonso PLL_DDR, /* Dram PLL */ 51*7bebc4b0SAdrian Alonso PLL_USB, /* USB PLL, fixed at 480MHZ */ 52*7bebc4b0SAdrian Alonso }; 53*7bebc4b0SAdrian Alonso 54*7bebc4b0SAdrian Alonso /* clk src for clock root gen */ 55*7bebc4b0SAdrian Alonso enum clk_root_src { 56*7bebc4b0SAdrian Alonso OSC_24M_CLK, 57*7bebc4b0SAdrian Alonso 58*7bebc4b0SAdrian Alonso PLL_ARM_MAIN_800M_CLK, 59*7bebc4b0SAdrian Alonso 60*7bebc4b0SAdrian Alonso PLL_SYS_MAIN_480M_CLK, 61*7bebc4b0SAdrian Alonso PLL_SYS_MAIN_240M_CLK, 62*7bebc4b0SAdrian Alonso PLL_SYS_MAIN_120M_CLK, 63*7bebc4b0SAdrian Alonso PLL_SYS_PFD0_392M_CLK, 64*7bebc4b0SAdrian Alonso PLL_SYS_PFD0_196M_CLK, 65*7bebc4b0SAdrian Alonso PLL_SYS_PFD1_332M_CLK, 66*7bebc4b0SAdrian Alonso PLL_SYS_PFD1_166M_CLK, 67*7bebc4b0SAdrian Alonso PLL_SYS_PFD2_270M_CLK, 68*7bebc4b0SAdrian Alonso PLL_SYS_PFD2_135M_CLK, 69*7bebc4b0SAdrian Alonso PLL_SYS_PFD3_CLK, 70*7bebc4b0SAdrian Alonso PLL_SYS_PFD4_CLK, 71*7bebc4b0SAdrian Alonso PLL_SYS_PFD5_CLK, 72*7bebc4b0SAdrian Alonso PLL_SYS_PFD6_CLK, 73*7bebc4b0SAdrian Alonso PLL_SYS_PFD7_CLK, 74*7bebc4b0SAdrian Alonso 75*7bebc4b0SAdrian Alonso PLL_ENET_MAIN_500M_CLK, 76*7bebc4b0SAdrian Alonso PLL_ENET_MAIN_250M_CLK, 77*7bebc4b0SAdrian Alonso PLL_ENET_MAIN_125M_CLK, 78*7bebc4b0SAdrian Alonso PLL_ENET_MAIN_100M_CLK, 79*7bebc4b0SAdrian Alonso PLL_ENET_MAIN_50M_CLK, 80*7bebc4b0SAdrian Alonso PLL_ENET_MAIN_40M_CLK, 81*7bebc4b0SAdrian Alonso PLL_ENET_MAIN_25M_CLK, 82*7bebc4b0SAdrian Alonso 83*7bebc4b0SAdrian Alonso PLL_DRAM_MAIN_1066M_CLK, 84*7bebc4b0SAdrian Alonso PLL_DRAM_MAIN_533M_CLK, 85*7bebc4b0SAdrian Alonso 86*7bebc4b0SAdrian Alonso PLL_AUDIO_MAIN_CLK, 87*7bebc4b0SAdrian Alonso PLL_VIDEO_MAIN_CLK, 88*7bebc4b0SAdrian Alonso 89*7bebc4b0SAdrian Alonso PLL_USB_MAIN_480M_CLK, /* fixed at 480MHZ */ 90*7bebc4b0SAdrian Alonso 91*7bebc4b0SAdrian Alonso EXT_CLK_1, 92*7bebc4b0SAdrian Alonso EXT_CLK_2, 93*7bebc4b0SAdrian Alonso EXT_CLK_3, 94*7bebc4b0SAdrian Alonso EXT_CLK_4, 95*7bebc4b0SAdrian Alonso 96*7bebc4b0SAdrian Alonso REF_1M_CLK, 97*7bebc4b0SAdrian Alonso OSC_32K_CLK, 98*7bebc4b0SAdrian Alonso }; 99*7bebc4b0SAdrian Alonso 100*7bebc4b0SAdrian Alonso /* 101*7bebc4b0SAdrian Alonso * Clock root index 102*7bebc4b0SAdrian Alonso */ 103*7bebc4b0SAdrian Alonso enum clk_root_index { 104*7bebc4b0SAdrian Alonso ARM_A7_CLK_ROOT = 0, 105*7bebc4b0SAdrian Alonso ARM_M4_CLK_ROOT = 1, 106*7bebc4b0SAdrian Alonso ARM_M0_CLK_ROOT = 2, 107*7bebc4b0SAdrian Alonso MAIN_AXI_CLK_ROOT = 16, 108*7bebc4b0SAdrian Alonso DISP_AXI_CLK_ROOT = 17, 109*7bebc4b0SAdrian Alonso ENET_AXI_CLK_ROOT = 18, 110*7bebc4b0SAdrian Alonso NAND_USDHC_BUS_CLK_ROOT = 19, 111*7bebc4b0SAdrian Alonso AHB_CLK_ROOT = 32, 112*7bebc4b0SAdrian Alonso DRAM_PHYM_CLK_ROOT = 48, 113*7bebc4b0SAdrian Alonso DRAM_CLK_ROOT = 49, 114*7bebc4b0SAdrian Alonso DRAM_PHYM_ALT_CLK_ROOT = 64, 115*7bebc4b0SAdrian Alonso DRAM_ALT_CLK_ROOT = 65, 116*7bebc4b0SAdrian Alonso USB_HSIC_CLK_ROOT = 66, 117*7bebc4b0SAdrian Alonso PCIE_CTRL_CLK_ROOT = 67, 118*7bebc4b0SAdrian Alonso PCIE_PHY_CLK_ROOT = 68, 119*7bebc4b0SAdrian Alonso EPDC_PIXEL_CLK_ROOT = 69, 120*7bebc4b0SAdrian Alonso LCDIF_PIXEL_CLK_ROOT = 70, 121*7bebc4b0SAdrian Alonso MIPI_DSI_EXTSER_CLK_ROOT = 71, 122*7bebc4b0SAdrian Alonso MIPI_CSI_WARP_CLK_ROOT = 72, 123*7bebc4b0SAdrian Alonso MIPI_DPHY_REF_CLK_ROOT = 73, 124*7bebc4b0SAdrian Alonso SAI1_CLK_ROOT = 74, 125*7bebc4b0SAdrian Alonso SAI2_CLK_ROOT = 75, 126*7bebc4b0SAdrian Alonso SAI3_CLK_ROOT = 76, 127*7bebc4b0SAdrian Alonso SPDIF_CLK_ROOT = 77, 128*7bebc4b0SAdrian Alonso ENET1_REF_CLK_ROOT = 78, 129*7bebc4b0SAdrian Alonso ENET1_TIME_CLK_ROOT = 79, 130*7bebc4b0SAdrian Alonso ENET2_REF_CLK_ROOT = 80, 131*7bebc4b0SAdrian Alonso ENET2_TIME_CLK_ROOT = 81, 132*7bebc4b0SAdrian Alonso ENET_PHY_REF_CLK_ROOT = 82, 133*7bebc4b0SAdrian Alonso EIM_CLK_ROOT = 83, 134*7bebc4b0SAdrian Alonso NAND_CLK_ROOT = 84, 135*7bebc4b0SAdrian Alonso QSPI_CLK_ROOT = 85, 136*7bebc4b0SAdrian Alonso USDHC1_CLK_ROOT = 86, 137*7bebc4b0SAdrian Alonso USDHC2_CLK_ROOT = 87, 138*7bebc4b0SAdrian Alonso USDHC3_CLK_ROOT = 88, 139*7bebc4b0SAdrian Alonso CAN1_CLK_ROOT = 89, 140*7bebc4b0SAdrian Alonso CAN2_CLK_ROOT = 90, 141*7bebc4b0SAdrian Alonso I2C1_CLK_ROOT = 91, 142*7bebc4b0SAdrian Alonso I2C2_CLK_ROOT = 92, 143*7bebc4b0SAdrian Alonso I2C3_CLK_ROOT = 93, 144*7bebc4b0SAdrian Alonso I2C4_CLK_ROOT = 94, 145*7bebc4b0SAdrian Alonso UART1_CLK_ROOT = 95, 146*7bebc4b0SAdrian Alonso UART2_CLK_ROOT = 96, 147*7bebc4b0SAdrian Alonso UART3_CLK_ROOT = 97, 148*7bebc4b0SAdrian Alonso UART4_CLK_ROOT = 98, 149*7bebc4b0SAdrian Alonso UART5_CLK_ROOT = 99, 150*7bebc4b0SAdrian Alonso UART6_CLK_ROOT = 100, 151*7bebc4b0SAdrian Alonso UART7_CLK_ROOT = 101, 152*7bebc4b0SAdrian Alonso ECSPI1_CLK_ROOT = 102, 153*7bebc4b0SAdrian Alonso ECSPI2_CLK_ROOT = 103, 154*7bebc4b0SAdrian Alonso ECSPI3_CLK_ROOT = 104, 155*7bebc4b0SAdrian Alonso ECSPI4_CLK_ROOT = 105, 156*7bebc4b0SAdrian Alonso PWM1_CLK_ROOT = 106, 157*7bebc4b0SAdrian Alonso PWM2_CLK_ROOT = 107, 158*7bebc4b0SAdrian Alonso PWM3_CLK_ROOT = 108, 159*7bebc4b0SAdrian Alonso PWM4_CLK_ROOT = 109, 160*7bebc4b0SAdrian Alonso FLEXTIMER1_CLK_ROOT = 110, 161*7bebc4b0SAdrian Alonso FLEXTIMER2_CLK_ROOT = 111, 162*7bebc4b0SAdrian Alonso SIM1_CLK_ROOT = 112, 163*7bebc4b0SAdrian Alonso SIM2_CLK_ROOT = 113, 164*7bebc4b0SAdrian Alonso GPT1_CLK_ROOT = 114, 165*7bebc4b0SAdrian Alonso GPT2_CLK_ROOT = 115, 166*7bebc4b0SAdrian Alonso GPT3_CLK_ROOT = 116, 167*7bebc4b0SAdrian Alonso GPT4_CLK_ROOT = 117, 168*7bebc4b0SAdrian Alonso TRACE_CLK_ROOT = 118, 169*7bebc4b0SAdrian Alonso WDOG_CLK_ROOT = 119, 170*7bebc4b0SAdrian Alonso CSI_MCLK_CLK_ROOT = 120, 171*7bebc4b0SAdrian Alonso AUDIO_MCLK_CLK_ROOT = 121, 172*7bebc4b0SAdrian Alonso WRCLK_CLK_ROOT = 122, 173*7bebc4b0SAdrian Alonso IPP_DO_CLKO1 = 123, 174*7bebc4b0SAdrian Alonso IPP_DO_CLKO2 = 124, 175*7bebc4b0SAdrian Alonso 176*7bebc4b0SAdrian Alonso CLK_ROOT_MAX, 177*7bebc4b0SAdrian Alonso }; 178*7bebc4b0SAdrian Alonso 179*7bebc4b0SAdrian Alonso struct clk_root_setting { 180*7bebc4b0SAdrian Alonso enum clk_root_index root; 181*7bebc4b0SAdrian Alonso u32 setting; 182*7bebc4b0SAdrian Alonso }; 183*7bebc4b0SAdrian Alonso 184*7bebc4b0SAdrian Alonso /* 185*7bebc4b0SAdrian Alonso * CCGR mapping 186*7bebc4b0SAdrian Alonso */ 187*7bebc4b0SAdrian Alonso enum clk_ccgr_index { 188*7bebc4b0SAdrian Alonso CCGR_CPU = 0, 189*7bebc4b0SAdrian Alonso CCGR_M4 = 1, 190*7bebc4b0SAdrian Alonso CCGR_SIM_MAIN = 4, 191*7bebc4b0SAdrian Alonso CCGR_SIM_DISPLAY = 5, 192*7bebc4b0SAdrian Alonso CCGR_SIM_ENET = 6, 193*7bebc4b0SAdrian Alonso CCGR_SIM_M = 7, 194*7bebc4b0SAdrian Alonso CCGR_SIM_S = 8, 195*7bebc4b0SAdrian Alonso CCGR_SIM_WAKEUP = 9, 196*7bebc4b0SAdrian Alonso CCGR_IPMUX1 = 10, 197*7bebc4b0SAdrian Alonso CCGR_IPMUX2 = 11, 198*7bebc4b0SAdrian Alonso CCGR_IPMUX3 = 12, 199*7bebc4b0SAdrian Alonso CCGR_ROM = 16, 200*7bebc4b0SAdrian Alonso CCGR_OCRAM = 17, 201*7bebc4b0SAdrian Alonso CCGR_OCRAM_S = 18, 202*7bebc4b0SAdrian Alonso CCGR_DRAM = 19, 203*7bebc4b0SAdrian Alonso CCGR_RAWNAND = 20, 204*7bebc4b0SAdrian Alonso CCGR_QSPI = 21, 205*7bebc4b0SAdrian Alonso CCGR_WEIM = 22, 206*7bebc4b0SAdrian Alonso CCGR_ADC = 32, 207*7bebc4b0SAdrian Alonso CCGR_ANATOP = 33, 208*7bebc4b0SAdrian Alonso CCGR_SCTR = 34, 209*7bebc4b0SAdrian Alonso CCGR_OCOTP = 35, 210*7bebc4b0SAdrian Alonso CCGR_CAAM = 36, 211*7bebc4b0SAdrian Alonso CCGR_SNVS = 37, 212*7bebc4b0SAdrian Alonso CCGR_RDC = 38, 213*7bebc4b0SAdrian Alonso CCGR_MU = 39, 214*7bebc4b0SAdrian Alonso CCGR_HS = 40, 215*7bebc4b0SAdrian Alonso CCGR_DVFS = 41, 216*7bebc4b0SAdrian Alonso CCGR_QOS = 42, 217*7bebc4b0SAdrian Alonso CCGR_QOS_DISPMIX = 43, 218*7bebc4b0SAdrian Alonso CCGR_QOS_MEGAMIX = 44, 219*7bebc4b0SAdrian Alonso CCGR_CSU = 45, 220*7bebc4b0SAdrian Alonso CCGR_DBGMON = 46, 221*7bebc4b0SAdrian Alonso CCGR_DEBUG = 47, 222*7bebc4b0SAdrian Alonso CCGR_TRACE = 48, 223*7bebc4b0SAdrian Alonso CCGR_SEC_DEBUG = 49, 224*7bebc4b0SAdrian Alonso CCGR_SEMA1 = 64, 225*7bebc4b0SAdrian Alonso CCGR_SEMA2 = 65, 226*7bebc4b0SAdrian Alonso CCGR_PERFMON1 = 68, 227*7bebc4b0SAdrian Alonso CCGR_PERFMON2 = 69, 228*7bebc4b0SAdrian Alonso CCGR_SDMA = 72, 229*7bebc4b0SAdrian Alonso CCGR_CSI = 73, 230*7bebc4b0SAdrian Alonso CCGR_EPDC = 74, 231*7bebc4b0SAdrian Alonso CCGR_LCDIF = 75, 232*7bebc4b0SAdrian Alonso CCGR_PXP = 76, 233*7bebc4b0SAdrian Alonso CCGR_PCIE = 96, 234*7bebc4b0SAdrian Alonso CCGR_MIPI_CSI = 100, 235*7bebc4b0SAdrian Alonso CCGR_MIPI_DSI = 101, 236*7bebc4b0SAdrian Alonso CCGR_MIPI_MEM_PHY = 102, 237*7bebc4b0SAdrian Alonso CCGR_USB_CTRL = 104, 238*7bebc4b0SAdrian Alonso CCGR_USB_HSIC = 105, 239*7bebc4b0SAdrian Alonso CCGR_USB_PHY1 = 106, 240*7bebc4b0SAdrian Alonso CCGR_USB_PHY2 = 107, 241*7bebc4b0SAdrian Alonso CCGR_USDHC1 = 108, 242*7bebc4b0SAdrian Alonso CCGR_USDHC2 = 109, 243*7bebc4b0SAdrian Alonso CCGR_USDHC3 = 110, 244*7bebc4b0SAdrian Alonso CCGR_ENET1 = 112, 245*7bebc4b0SAdrian Alonso CCGR_ENET2 = 113, 246*7bebc4b0SAdrian Alonso CCGR_CAN1 = 116, 247*7bebc4b0SAdrian Alonso CCGR_CAN2 = 117, 248*7bebc4b0SAdrian Alonso CCGR_ECSPI1 = 120, 249*7bebc4b0SAdrian Alonso CCGR_ECSPI2 = 121, 250*7bebc4b0SAdrian Alonso CCGR_ECSPI3 = 122, 251*7bebc4b0SAdrian Alonso CCGR_ECSPI4 = 123, 252*7bebc4b0SAdrian Alonso CCGR_GPT1 = 124, 253*7bebc4b0SAdrian Alonso CCGR_GPT2 = 125, 254*7bebc4b0SAdrian Alonso CCGR_GPT3 = 126, 255*7bebc4b0SAdrian Alonso CCGR_GPT4 = 127, 256*7bebc4b0SAdrian Alonso CCGR_FTM1 = 128, 257*7bebc4b0SAdrian Alonso CCGR_FTM2 = 129, 258*7bebc4b0SAdrian Alonso CCGR_PWM1 = 132, 259*7bebc4b0SAdrian Alonso CCGR_PWM2 = 133, 260*7bebc4b0SAdrian Alonso CCGR_PWM3 = 134, 261*7bebc4b0SAdrian Alonso CCGR_PWM4 = 135, 262*7bebc4b0SAdrian Alonso CCGR_I2C1 = 136, 263*7bebc4b0SAdrian Alonso CCGR_I2C2 = 137, 264*7bebc4b0SAdrian Alonso CCGR_I2C3 = 138, 265*7bebc4b0SAdrian Alonso CCGR_I2C4 = 139, 266*7bebc4b0SAdrian Alonso CCGR_SAI1 = 140, 267*7bebc4b0SAdrian Alonso CCGR_SAI2 = 141, 268*7bebc4b0SAdrian Alonso CCGR_SAI3 = 142, 269*7bebc4b0SAdrian Alonso CCGR_SIM1 = 144, 270*7bebc4b0SAdrian Alonso CCGR_SIM2 = 145, 271*7bebc4b0SAdrian Alonso CCGR_UART1 = 148, 272*7bebc4b0SAdrian Alonso CCGR_UART2 = 149, 273*7bebc4b0SAdrian Alonso CCGR_UART3 = 150, 274*7bebc4b0SAdrian Alonso CCGR_UART4 = 151, 275*7bebc4b0SAdrian Alonso CCGR_UART5 = 152, 276*7bebc4b0SAdrian Alonso CCGR_UART6 = 153, 277*7bebc4b0SAdrian Alonso CCGR_UART7 = 154, 278*7bebc4b0SAdrian Alonso CCGR_WDOG1 = 156, 279*7bebc4b0SAdrian Alonso CCGR_WDOG2 = 157, 280*7bebc4b0SAdrian Alonso CCGR_WDOG3 = 158, 281*7bebc4b0SAdrian Alonso CCGR_WDOG4 = 159, 282*7bebc4b0SAdrian Alonso CCGR_GPIO1 = 160, 283*7bebc4b0SAdrian Alonso CCGR_GPIO2 = 161, 284*7bebc4b0SAdrian Alonso CCGR_GPIO3 = 162, 285*7bebc4b0SAdrian Alonso CCGR_GPIO4 = 163, 286*7bebc4b0SAdrian Alonso CCGR_GPIO5 = 164, 287*7bebc4b0SAdrian Alonso CCGR_GPIO6 = 165, 288*7bebc4b0SAdrian Alonso CCGR_GPIO7 = 166, 289*7bebc4b0SAdrian Alonso CCGR_IOMUX = 168, 290*7bebc4b0SAdrian Alonso CCGR_IOMUX_LPSR = 169, 291*7bebc4b0SAdrian Alonso CCGR_KPP = 170, 292*7bebc4b0SAdrian Alonso 293*7bebc4b0SAdrian Alonso CCGR_SKIP, 294*7bebc4b0SAdrian Alonso CCGR_MAX, 295*7bebc4b0SAdrian Alonso }; 296*7bebc4b0SAdrian Alonso 297*7bebc4b0SAdrian Alonso /* Clock root channel */ 298*7bebc4b0SAdrian Alonso enum clk_root_type { 299*7bebc4b0SAdrian Alonso CCM_CORE_CHANNEL, 300*7bebc4b0SAdrian Alonso CCM_BUS_CHANNEL, 301*7bebc4b0SAdrian Alonso CCM_AHB_CHANNEL, 302*7bebc4b0SAdrian Alonso CCM_DRAM_PHYM_CHANNEL, 303*7bebc4b0SAdrian Alonso CCM_DRAM_CHANNEL, 304*7bebc4b0SAdrian Alonso CCM_IP_CHANNEL, 305*7bebc4b0SAdrian Alonso }; 306*7bebc4b0SAdrian Alonso 307*7bebc4b0SAdrian Alonso #include <asm/arch/clock_slice.h> 308*7bebc4b0SAdrian Alonso 309*7bebc4b0SAdrian Alonso /* 310*7bebc4b0SAdrian Alonso * entry: the clock root index 311*7bebc4b0SAdrian Alonso * type: ccm channel 312*7bebc4b0SAdrian Alonso * src_mux: each entry corresponding to the clock src, detailed info in CCM RM 313*7bebc4b0SAdrian Alonso */ 314*7bebc4b0SAdrian Alonso struct clk_root_map { 315*7bebc4b0SAdrian Alonso enum clk_root_index entry; 316*7bebc4b0SAdrian Alonso enum clk_root_type type; 317*7bebc4b0SAdrian Alonso uint8_t src_mux[8]; 318*7bebc4b0SAdrian Alonso }; 319*7bebc4b0SAdrian Alonso 320*7bebc4b0SAdrian Alonso enum enet_freq { 321*7bebc4b0SAdrian Alonso ENET_25MHz, 322*7bebc4b0SAdrian Alonso ENET_50MHz, 323*7bebc4b0SAdrian Alonso ENET_125MHz, 324*7bebc4b0SAdrian Alonso }; 325*7bebc4b0SAdrian Alonso 326*7bebc4b0SAdrian Alonso u32 get_root_clk(enum clk_root_index clock_id); 327*7bebc4b0SAdrian Alonso u32 mxc_get_clock(enum mxc_clock clk); 328*7bebc4b0SAdrian Alonso u32 imx_get_uartclk(void); 329*7bebc4b0SAdrian Alonso u32 imx_get_fecclk(void); 330*7bebc4b0SAdrian Alonso void clock_init(void); 331*7bebc4b0SAdrian Alonso #ifdef CONFIG_SYS_I2C_MXC 332*7bebc4b0SAdrian Alonso int enable_i2c_clk(unsigned char enable, unsigned i2c_num); 333*7bebc4b0SAdrian Alonso #endif 334*7bebc4b0SAdrian Alonso #ifdef CONFIG_FEC_MXC 335*7bebc4b0SAdrian Alonso int set_clk_enet(enum enet_freq type); 336*7bebc4b0SAdrian Alonso #endif 337*7bebc4b0SAdrian Alonso int set_clk_qspi(void); 338*7bebc4b0SAdrian Alonso int set_clk_nand(void); 339*7bebc4b0SAdrian Alonso #ifdef CONFIG_MXC_OCOTP 340*7bebc4b0SAdrian Alonso void enable_ocotp_clk(unsigned char enable); 341*7bebc4b0SAdrian Alonso #endif 342*7bebc4b0SAdrian Alonso void enable_usboh3_clk(unsigned char enable); 343*7bebc4b0SAdrian Alonso #ifdef CONFIG_SECURE_BOOT 344*7bebc4b0SAdrian Alonso void hab_caam_clock_enable(unsigned char enable); 345*7bebc4b0SAdrian Alonso #endif 346*7bebc4b0SAdrian Alonso void mxs_set_lcdclk(uint32_t base_addr, uint32_t freq); 347*7bebc4b0SAdrian Alonso void enable_thermal_clk(void); 348*7bebc4b0SAdrian Alonso #endif 349