1*97835a6fSskrll /* $NetBSD: imx6_clk.c,v 1.8 2024/09/01 08:08:24 skrll Exp $ */ 28644267aSskrll 38644267aSskrll /*- 48644267aSskrll * Copyright (c) 2019 Genetec Corporation. All rights reserved. 58644267aSskrll * Written by Hashimoto Kenichi for Genetec Corporation. 68644267aSskrll * 78644267aSskrll * Redistribution and use in source and binary forms, with or without 88644267aSskrll * modification, are permitted provided that the following conditions 98644267aSskrll * are met: 108644267aSskrll * 1. Redistributions of source code must retain the above copyright 118644267aSskrll * notice, this list of conditions and the following disclaimer. 128644267aSskrll * 2. Redistributions in binary form must reproduce the above copyright 138644267aSskrll * notice, this list of conditions and the following disclaimer in the 148644267aSskrll * documentation and/or other materials provided with the distribution. 158644267aSskrll * 168644267aSskrll * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 178644267aSskrll * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 188644267aSskrll * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 198644267aSskrll * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 208644267aSskrll * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 218644267aSskrll * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 228644267aSskrll * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 238644267aSskrll * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 248644267aSskrll * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 258644267aSskrll * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 268644267aSskrll * SUCH DAMAGE. 278644267aSskrll */ 288644267aSskrll 298644267aSskrll #include <sys/cdefs.h> 30*97835a6fSskrll __KERNEL_RCSID(0, "$NetBSD: imx6_clk.c,v 1.8 2024/09/01 08:08:24 skrll Exp $"); 318644267aSskrll 328644267aSskrll #include "opt_fdt.h" 338644267aSskrll 348644267aSskrll #include <sys/types.h> 358644267aSskrll #include <sys/time.h> 368644267aSskrll #include <sys/bus.h> 378644267aSskrll #include <sys/device.h> 388644267aSskrll #include <sys/sysctl.h> 398644267aSskrll #include <sys/cpufreq.h> 408644267aSskrll #include <sys/kmem.h> 418644267aSskrll #include <sys/param.h> 428644267aSskrll 433e5af17bSbouyer #include <arm/nxp/imx6_ccmreg.h> 448644267aSskrll #include <arm/nxp/imx6_ccmvar.h> 458644267aSskrll 468644267aSskrll #include <dev/clk/clk_backend.h> 478644267aSskrll #include <dev/fdt/fdtvar.h> 488644267aSskrll 493e5af17bSbouyer /* Clock IDs - should match dt-bindings/clock/imx6qdl-clock.h */ 503e5af17bSbouyer #define IMX6QCLK_DUMMY 0 513e5af17bSbouyer #define IMX6QCLK_CKIL 1 523e5af17bSbouyer #define IMX6QCLK_CKIH 2 533e5af17bSbouyer #define IMX6QCLK_OSC 3 543e5af17bSbouyer #define IMX6QCLK_PLL2_PFD0_352M 4 553e5af17bSbouyer #define IMX6QCLK_PLL2_PFD1_594M 5 563e5af17bSbouyer #define IMX6QCLK_PLL2_PFD2_396M 6 573e5af17bSbouyer #define IMX6QCLK_PLL3_PFD0_720M 7 583e5af17bSbouyer #define IMX6QCLK_PLL3_PFD1_540M 8 593e5af17bSbouyer #define IMX6QCLK_PLL3_PFD2_508M 9 603e5af17bSbouyer #define IMX6QCLK_PLL3_PFD3_454M 10 613e5af17bSbouyer #define IMX6QCLK_PLL2_198M 11 623e5af17bSbouyer #define IMX6QCLK_PLL3_120M 12 633e5af17bSbouyer #define IMX6QCLK_PLL3_80M 13 643e5af17bSbouyer #define IMX6QCLK_PLL3_60M 14 653e5af17bSbouyer #define IMX6QCLK_TWD 15 663e5af17bSbouyer #define IMX6QCLK_STEP 16 673e5af17bSbouyer #define IMX6QCLK_PLL1_SW 17 683e5af17bSbouyer #define IMX6QCLK_PERIPH_PRE 18 693e5af17bSbouyer #define IMX6QCLK_PERIPH2_PRE 19 703e5af17bSbouyer #define IMX6QCLK_PERIPH_CLK2_SEL 20 713e5af17bSbouyer #define IMX6QCLK_PERIPH2_CLK2_SEL 21 723e5af17bSbouyer #define IMX6QCLK_AXI_SEL 22 733e5af17bSbouyer #define IMX6QCLK_ESAI_SEL 23 743e5af17bSbouyer #define IMX6QCLK_ASRC_SEL 24 753e5af17bSbouyer #define IMX6QCLK_SPDIF_SEL 25 763e5af17bSbouyer #define IMX6QCLK_GPU2D_AXI 26 773e5af17bSbouyer #define IMX6QCLK_GPU3D_AXI 27 783e5af17bSbouyer #define IMX6QCLK_GPU2D_CORE_SEL 28 793e5af17bSbouyer #define IMX6QCLK_GPU3D_CORE_SEL 29 803e5af17bSbouyer #define IMX6QCLK_GPU3D_SHADER_SEL 30 813e5af17bSbouyer #define IMX6QCLK_IPU1_SEL 31 823e5af17bSbouyer #define IMX6QCLK_IPU2_SEL 32 833e5af17bSbouyer #define IMX6QCLK_LDB_DI0_SEL 33 843e5af17bSbouyer #define IMX6QCLK_LDB_DI1_SEL 34 853e5af17bSbouyer #define IMX6QCLK_IPU1_DI0_PRE_SEL 35 863e5af17bSbouyer #define IMX6QCLK_IPU1_DI1_PRE_SEL 36 873e5af17bSbouyer #define IMX6QCLK_IPU2_DI0_PRE_SEL 37 883e5af17bSbouyer #define IMX6QCLK_IPU2_DI1_PRE_SEL 38 893e5af17bSbouyer #define IMX6QCLK_IPU1_DI0_SEL 39 903e5af17bSbouyer #define IMX6QCLK_IPU1_DI1_SEL 40 913e5af17bSbouyer #define IMX6QCLK_IPU2_DI0_SEL 41 923e5af17bSbouyer #define IMX6QCLK_IPU2_DI1_SEL 42 933e5af17bSbouyer #define IMX6QCLK_HSI_TX_SEL 43 943e5af17bSbouyer #define IMX6QCLK_PCIE_AXI_SEL 44 953e5af17bSbouyer #define IMX6QCLK_SSI1_SEL 45 963e5af17bSbouyer #define IMX6QCLK_SSI2_SEL 46 973e5af17bSbouyer #define IMX6QCLK_SSI3_SEL 47 983e5af17bSbouyer #define IMX6QCLK_USDHC1_SEL 48 993e5af17bSbouyer #define IMX6QCLK_USDHC2_SEL 49 1003e5af17bSbouyer #define IMX6QCLK_USDHC3_SEL 50 1013e5af17bSbouyer #define IMX6QCLK_USDHC4_SEL 51 1023e5af17bSbouyer #define IMX6QCLK_ENFC_SEL 52 1033e5af17bSbouyer #define IMX6QCLK_EIM_SEL 53 1043e5af17bSbouyer #define IMX6QCLK_EIM_SLOW_SEL 54 1053e5af17bSbouyer #define IMX6QCLK_VDO_AXI_SEL 55 1063e5af17bSbouyer #define IMX6QCLK_VPU_AXI_SEL 56 1073e5af17bSbouyer #define IMX6QCLK_CKO1_SEL 57 1083e5af17bSbouyer #define IMX6QCLK_PERIPH 58 1093e5af17bSbouyer #define IMX6QCLK_PERIPH2 59 1103e5af17bSbouyer #define IMX6QCLK_PERIPH_CLK2 60 1113e5af17bSbouyer #define IMX6QCLK_PERIPH2_CLK2 61 1123e5af17bSbouyer #define IMX6QCLK_IPG 62 1133e5af17bSbouyer #define IMX6QCLK_IPG_PER 63 1143e5af17bSbouyer #define IMX6QCLK_ESAI_PRED 64 1153e5af17bSbouyer #define IMX6QCLK_ESAI_PODF 65 1163e5af17bSbouyer #define IMX6QCLK_ASRC_PRED 66 1173e5af17bSbouyer #define IMX6QCLK_ASRC_PODF 67 1183e5af17bSbouyer #define IMX6QCLK_SPDIF_PRED 68 1193e5af17bSbouyer #define IMX6QCLK_SPDIF_PODF 69 1203e5af17bSbouyer #define IMX6QCLK_CAN_ROOT 70 1213e5af17bSbouyer #define IMX6QCLK_ECSPI_ROOT 71 1223e5af17bSbouyer #define IMX6QCLK_GPU2D_CORE_PODF 72 1233e5af17bSbouyer #define IMX6QCLK_GPU3D_CORE_PODF 73 1243e5af17bSbouyer #define IMX6QCLK_GPU3D_SHADER 74 1253e5af17bSbouyer #define IMX6QCLK_IPU1_PODF 75 1263e5af17bSbouyer #define IMX6QCLK_IPU2_PODF 76 1273e5af17bSbouyer #define IMX6QCLK_LDB_DI0_PODF 77 1283e5af17bSbouyer #define IMX6QCLK_LDB_DI1_PODF 78 1293e5af17bSbouyer #define IMX6QCLK_IPU1_DI0_PRE 79 1303e5af17bSbouyer #define IMX6QCLK_IPU1_DI1_PRE 80 1313e5af17bSbouyer #define IMX6QCLK_IPU2_DI0_PRE 81 1323e5af17bSbouyer #define IMX6QCLK_IPU2_DI1_PRE 82 1333e5af17bSbouyer #define IMX6QCLK_HSI_TX_PODF 83 1343e5af17bSbouyer #define IMX6QCLK_SSI1_PRED 84 1353e5af17bSbouyer #define IMX6QCLK_SSI1_PODF 85 1363e5af17bSbouyer #define IMX6QCLK_SSI2_PRED 86 1373e5af17bSbouyer #define IMX6QCLK_SSI2_PODF 87 1383e5af17bSbouyer #define IMX6QCLK_SSI3_PRED 88 1393e5af17bSbouyer #define IMX6QCLK_SSI3_PODF 89 1403e5af17bSbouyer #define IMX6QCLK_UART_SERIAL_PODF 90 1413e5af17bSbouyer #define IMX6QCLK_USDHC1_PODF 91 1423e5af17bSbouyer #define IMX6QCLK_USDHC2_PODF 92 1433e5af17bSbouyer #define IMX6QCLK_USDHC3_PODF 93 1443e5af17bSbouyer #define IMX6QCLK_USDHC4_PODF 94 1453e5af17bSbouyer #define IMX6QCLK_ENFC_PRED 95 1463e5af17bSbouyer #define IMX6QCLK_ENFC_PODF 96 1473e5af17bSbouyer #define IMX6QCLK_EIM_PODF 97 1483e5af17bSbouyer #define IMX6QCLK_EIM_SLOW_PODF 98 1493e5af17bSbouyer #define IMX6QCLK_VPU_AXI_PODF 99 1503e5af17bSbouyer #define IMX6QCLK_CKO1_PODF 100 1513e5af17bSbouyer #define IMX6QCLK_AXI 101 1523e5af17bSbouyer #define IMX6QCLK_MMDC_CH0_AXI_PODF 102 1533e5af17bSbouyer #define IMX6QCLK_MMDC_CH1_AXI_PODF 103 1543e5af17bSbouyer #define IMX6QCLK_ARM 104 1553e5af17bSbouyer #define IMX6QCLK_AHB 105 1563e5af17bSbouyer #define IMX6QCLK_APBH_DMA 106 1573e5af17bSbouyer #define IMX6QCLK_ASRC 107 1583e5af17bSbouyer #define IMX6QCLK_CAN1_IPG 108 1593e5af17bSbouyer #define IMX6QCLK_CAN1_SERIAL 109 1603e5af17bSbouyer #define IMX6QCLK_CAN2_IPG 110 1613e5af17bSbouyer #define IMX6QCLK_CAN2_SERIAL 111 1623e5af17bSbouyer #define IMX6QCLK_ECSPI1 112 1633e5af17bSbouyer #define IMX6QCLK_ECSPI2 113 1643e5af17bSbouyer #define IMX6QCLK_ECSPI3 114 1653e5af17bSbouyer #define IMX6QCLK_ECSPI4 115 1663e5af17bSbouyer #define IMX6QCLK_ECSPI5 116 /* i.MX6Q */ 1673e5af17bSbouyer #define IMX6QCLK_I2C4 116 /* i.MX6DL */ 1683e5af17bSbouyer #define IMX6QCLK_ENET 117 1693e5af17bSbouyer #define IMX6QCLK_ESAI_EXTAL 118 1703e5af17bSbouyer #define IMX6QCLK_GPT_IPG 119 1713e5af17bSbouyer #define IMX6QCLK_GPT_IPG_PER 120 1723e5af17bSbouyer #define IMX6QCLK_GPU2D_CORE 121 1733e5af17bSbouyer #define IMX6QCLK_GPU3D_CORE 122 1743e5af17bSbouyer #define IMX6QCLK_HDMI_IAHB 123 1753e5af17bSbouyer #define IMX6QCLK_HDMI_ISFR 124 1763e5af17bSbouyer #define IMX6QCLK_I2C1 125 1773e5af17bSbouyer #define IMX6QCLK_I2C2 126 1783e5af17bSbouyer #define IMX6QCLK_I2C3 127 1793e5af17bSbouyer #define IMX6QCLK_IIM 128 1803e5af17bSbouyer #define IMX6QCLK_ENFC 129 1813e5af17bSbouyer #define IMX6QCLK_IPU1 130 1823e5af17bSbouyer #define IMX6QCLK_IPU1_DI0 131 1833e5af17bSbouyer #define IMX6QCLK_IPU1_DI1 132 1843e5af17bSbouyer #define IMX6QCLK_IPU2 133 1853e5af17bSbouyer #define IMX6QCLK_IPU2_DI0 134 1863e5af17bSbouyer #define IMX6QCLK_LDB_DI0 135 1873e5af17bSbouyer #define IMX6QCLK_LDB_DI1 136 1883e5af17bSbouyer #define IMX6QCLK_IPU2_DI1 137 1893e5af17bSbouyer #define IMX6QCLK_HSI_TX 138 1903e5af17bSbouyer #define IMX6QCLK_MLB 139 1913e5af17bSbouyer #define IMX6QCLK_MMDC_CH0_AXI 140 1923e5af17bSbouyer #define IMX6QCLK_MMDC_CH1_AXI 141 1933e5af17bSbouyer #define IMX6QCLK_OCRAM 142 1943e5af17bSbouyer #define IMX6QCLK_OPENVG_AXI 143 1953e5af17bSbouyer #define IMX6QCLK_PCIE_AXI 144 1963e5af17bSbouyer #define IMX6QCLK_PWM1 145 1973e5af17bSbouyer #define IMX6QCLK_PWM2 146 1983e5af17bSbouyer #define IMX6QCLK_PWM3 147 1993e5af17bSbouyer #define IMX6QCLK_PWM4 148 2003e5af17bSbouyer #define IMX6QCLK_PER1_BCH 149 2013e5af17bSbouyer #define IMX6QCLK_GPMI_BCH_APB 150 2023e5af17bSbouyer #define IMX6QCLK_GPMI_BCH 151 2033e5af17bSbouyer #define IMX6QCLK_GPMI_IO 152 2043e5af17bSbouyer #define IMX6QCLK_GPMI_APB 153 2053e5af17bSbouyer #define IMX6QCLK_SATA 154 2063e5af17bSbouyer #define IMX6QCLK_SDMA 155 2073e5af17bSbouyer #define IMX6QCLK_SPBA 156 2083e5af17bSbouyer #define IMX6QCLK_SSI1 157 2093e5af17bSbouyer #define IMX6QCLK_SSI2 158 2103e5af17bSbouyer #define IMX6QCLK_SSI3 159 2113e5af17bSbouyer #define IMX6QCLK_UART_IPG 160 2123e5af17bSbouyer #define IMX6QCLK_UART_SERIAL 161 2133e5af17bSbouyer #define IMX6QCLK_USBOH3 162 2143e5af17bSbouyer #define IMX6QCLK_USDHC1 163 2153e5af17bSbouyer #define IMX6QCLK_USDHC2 164 2163e5af17bSbouyer #define IMX6QCLK_USDHC3 165 2173e5af17bSbouyer #define IMX6QCLK_USDHC4 166 2183e5af17bSbouyer #define IMX6QCLK_VDO_AXI 167 2193e5af17bSbouyer #define IMX6QCLK_VPU_AXI 168 2203e5af17bSbouyer #define IMX6QCLK_CKO1 169 2213e5af17bSbouyer #define IMX6QCLK_PLL1_SYS 170 2223e5af17bSbouyer #define IMX6QCLK_PLL2_BUS 171 2233e5af17bSbouyer #define IMX6QCLK_PLL3_USB_OTG 172 2243e5af17bSbouyer #define IMX6QCLK_PLL4_AUDIO 173 2253e5af17bSbouyer #define IMX6QCLK_PLL5_VIDEO 174 2263e5af17bSbouyer #define IMX6QCLK_PLL8_MLB 175 2273e5af17bSbouyer #define IMX6QCLK_PLL7_USB_HOST 176 2283e5af17bSbouyer #define IMX6QCLK_PLL6_ENET 177 2293e5af17bSbouyer #define IMX6QCLK_SSI1_IPG 178 2303e5af17bSbouyer #define IMX6QCLK_SSI2_IPG 179 2313e5af17bSbouyer #define IMX6QCLK_SSI3_IPG 180 2323e5af17bSbouyer #define IMX6QCLK_ROM 181 2333e5af17bSbouyer #define IMX6QCLK_USBPHY1 182 2343e5af17bSbouyer #define IMX6QCLK_USBPHY2 183 2353e5af17bSbouyer #define IMX6QCLK_LDB_DI0_DIV_3_5 184 2363e5af17bSbouyer #define IMX6QCLK_LDB_DI1_DIV_3_5 185 2373e5af17bSbouyer #define IMX6QCLK_SATA_REF 186 2383e5af17bSbouyer #define IMX6QCLK_SATA_REF_100M 187 2393e5af17bSbouyer #define IMX6QCLK_PCIE_REF 188 2403e5af17bSbouyer #define IMX6QCLK_PCIE_REF_125M 189 2413e5af17bSbouyer #define IMX6QCLK_ENET_REF 190 2423e5af17bSbouyer #define IMX6QCLK_USBPHY1_GATE 191 2433e5af17bSbouyer #define IMX6QCLK_USBPHY2_GATE 192 2443e5af17bSbouyer #define IMX6QCLK_PLL4_POST_DIV 193 2453e5af17bSbouyer #define IMX6QCLK_PLL5_POST_DIV 194 2463e5af17bSbouyer #define IMX6QCLK_PLL5_VIDEO_DIV 195 2473e5af17bSbouyer #define IMX6QCLK_EIM_SLOW 196 2483e5af17bSbouyer #define IMX6QCLK_SPDIF 197 2493e5af17bSbouyer #define IMX6QCLK_CKO2_SEL 198 2503e5af17bSbouyer #define IMX6QCLK_CKO2_PODF 199 2513e5af17bSbouyer #define IMX6QCLK_CKO2 200 2523e5af17bSbouyer #define IMX6QCLK_CKO 201 2533e5af17bSbouyer #define IMX6QCLK_VDOA 202 2543e5af17bSbouyer #define IMX6QCLK_PLL4_AUDIO_DIV 203 2553e5af17bSbouyer #define IMX6QCLK_LVDS1_SEL 204 2563e5af17bSbouyer #define IMX6QCLK_LVDS2_SEL 205 2573e5af17bSbouyer #define IMX6QCLK_LVDS1_GATE 206 2583e5af17bSbouyer #define IMX6QCLK_LVDS2_GATE 207 2593e5af17bSbouyer #define IMX6QCLK_ESAI_IPG 208 2603e5af17bSbouyer #define IMX6QCLK_ESAI_MEM 209 2613e5af17bSbouyer #define IMX6QCLK_ASRC_IPG 210 2623e5af17bSbouyer #define IMX6QCLK_ASRC_MEM 211 2633e5af17bSbouyer #define IMX6QCLK_LVDS1_IN 212 2643e5af17bSbouyer #define IMX6QCLK_LVDS2_IN 213 2653e5af17bSbouyer #define IMX6QCLK_ANACLK1 214 2663e5af17bSbouyer #define IMX6QCLK_ANACLK2 215 2673e5af17bSbouyer #define IMX6QCLK_PLL1_BYPASS_SRC 216 2683e5af17bSbouyer #define IMX6QCLK_PLL2_BYPASS_SRC 217 2693e5af17bSbouyer #define IMX6QCLK_PLL3_BYPASS_SRC 218 2703e5af17bSbouyer #define IMX6QCLK_PLL4_BYPASS_SRC 219 2713e5af17bSbouyer #define IMX6QCLK_PLL5_BYPASS_SRC 220 2723e5af17bSbouyer #define IMX6QCLK_PLL6_BYPASS_SRC 221 2733e5af17bSbouyer #define IMX6QCLK_PLL7_BYPASS_SRC 222 2743e5af17bSbouyer #define IMX6QCLK_PLL1 223 2753e5af17bSbouyer #define IMX6QCLK_PLL2 224 2763e5af17bSbouyer #define IMX6QCLK_PLL3 225 2773e5af17bSbouyer #define IMX6QCLK_PLL4 226 2783e5af17bSbouyer #define IMX6QCLK_PLL5 227 2793e5af17bSbouyer #define IMX6QCLK_PLL6 228 2803e5af17bSbouyer #define IMX6QCLK_PLL7 229 2813e5af17bSbouyer #define IMX6QCLK_PLL1_BYPASS 230 2823e5af17bSbouyer #define IMX6QCLK_PLL2_BYPASS 231 2833e5af17bSbouyer #define IMX6QCLK_PLL3_BYPASS 232 2843e5af17bSbouyer #define IMX6QCLK_PLL4_BYPASS 233 2853e5af17bSbouyer #define IMX6QCLK_PLL5_BYPASS 234 2863e5af17bSbouyer #define IMX6QCLK_PLL6_BYPASS 235 2873e5af17bSbouyer #define IMX6QCLK_PLL7_BYPASS 236 2883e5af17bSbouyer #define IMX6QCLK_GPT_3M 237 2893e5af17bSbouyer #define IMX6QCLK_VIDEO_27M 238 2903e5af17bSbouyer #define IMX6QCLK_MIPI_CORE_CFG 239 2913e5af17bSbouyer #define IMX6QCLK_MIPI_IPG 240 2923e5af17bSbouyer #define IMX6QCLK_CAAM_MEM 241 2933e5af17bSbouyer #define IMX6QCLK_CAAM_ACLK 242 2943e5af17bSbouyer #define IMX6QCLK_CAAM_IPG 243 2953e5af17bSbouyer #define IMX6QCLK_SPDIF_GCLK 244 2963e5af17bSbouyer #define IMX6QCLK_UART_SEL 245 2973e5af17bSbouyer #define IMX6QCLK_IPG_PER_SEL 246 2983e5af17bSbouyer #define IMX6QCLK_ECSPI_SEL 247 2993e5af17bSbouyer #define IMX6QCLK_CAN_SEL 248 3003e5af17bSbouyer #define IMX6QCLK_MMDC_CH1_AXI_CG 249 3013e5af17bSbouyer #define IMX6QCLK_PRE0 250 3023e5af17bSbouyer #define IMX6QCLK_PRE1 251 3033e5af17bSbouyer #define IMX6QCLK_PRE2 252 3043e5af17bSbouyer #define IMX6QCLK_PRE3 253 3053e5af17bSbouyer #define IMX6QCLK_PRG0_AXI 254 3063e5af17bSbouyer #define IMX6QCLK_PRG1_AXI 255 3073e5af17bSbouyer #define IMX6QCLK_PRG0_APB 256 3083e5af17bSbouyer #define IMX6QCLK_PRG1_APB 257 3093e5af17bSbouyer #define IMX6QCLK_PRE_AXI 258 3103e5af17bSbouyer #define IMX6QCLK_MLB_SEL 259 3113e5af17bSbouyer #define IMX6QCLK_MLB_PODF 260 3123e5af17bSbouyer #define IMX6QCLK_END 261 3133e5af17bSbouyer /* Clock Parents Tables */ 3143e5af17bSbouyer static const char *step_p[] = { 3153e5af17bSbouyer "osc", 3163e5af17bSbouyer "pll2_pfd2_396m" 3173e5af17bSbouyer }; 3188644267aSskrll 3193e5af17bSbouyer static const char *pll1_sw_p[] = { 3203e5af17bSbouyer "pll1_sys", 3213e5af17bSbouyer "step" 3223e5af17bSbouyer }; 3233e5af17bSbouyer 3243e5af17bSbouyer static const char *periph_pre_p[] = { 3253e5af17bSbouyer "pll2_bus", 3263e5af17bSbouyer "pll2_pfd2_396m", 3273e5af17bSbouyer "pll2_pfd0_352m", 3283e5af17bSbouyer "pll2_198m" 3293e5af17bSbouyer }; 3303e5af17bSbouyer 3313e5af17bSbouyer static const char *periph_clk2_p[] = { 3323e5af17bSbouyer "pll3_usb_otg", 3333e5af17bSbouyer "osc", 3343e5af17bSbouyer "osc", 3353e5af17bSbouyer "dummy" 3363e5af17bSbouyer }; 3373e5af17bSbouyer 3383e5af17bSbouyer static const char *periph2_clk2_p[] = { 3393e5af17bSbouyer "pll3_usb_otg", 3403e5af17bSbouyer "pll2_bus" 3413e5af17bSbouyer }; 3423e5af17bSbouyer 3433e5af17bSbouyer static const char *axi_p[] = { 3443e5af17bSbouyer "periph", 3453e5af17bSbouyer "pll2_pfd2_396m", 3463e5af17bSbouyer "periph", 3473e5af17bSbouyer "pll3_pfd1_540m" 3483e5af17bSbouyer }; 3493e5af17bSbouyer 3503e5af17bSbouyer static const char *audio_p[] = { 3513e5af17bSbouyer "pll4_audio_div", 3523e5af17bSbouyer "pll3_pfd2_508m", 3533e5af17bSbouyer "pll3_pfd3_454m", 3543e5af17bSbouyer "pll3_usb_otg" 3553e5af17bSbouyer }; 3563e5af17bSbouyer 3573e5af17bSbouyer static const char *gpu2d_core_p[] = { 3583e5af17bSbouyer "axi", 3593e5af17bSbouyer "pll3_usb_otg", 3603e5af17bSbouyer "pll2_pfd0_352m", 3613e5af17bSbouyer "pll2_pfd2_396m" 3623e5af17bSbouyer }; 3633e5af17bSbouyer 3643e5af17bSbouyer static const char *gpu3d_core_p[] = { 3653e5af17bSbouyer "mmdc_ch0_axi", 3663e5af17bSbouyer "pll3_usb_otg", 3673e5af17bSbouyer "pll2_pfd1_594m", 3683e5af17bSbouyer "pll2_pfd2_396m" 3693e5af17bSbouyer }; 3703e5af17bSbouyer 3713e5af17bSbouyer static const char *gpu3d_shader_p[] = { 3723e5af17bSbouyer "mmdc_ch0_axi", 3733e5af17bSbouyer "pll3_usb_otg", 3743e5af17bSbouyer "pll2_pfd1_594m", 3753e5af17bSbouyer "pll3_pfd0_720m" 3763e5af17bSbouyer }; 3773e5af17bSbouyer 3783e5af17bSbouyer static const char *ipu_p[] = { 3793e5af17bSbouyer "mmdc_ch0_axi", 3803e5af17bSbouyer "pll2_pfd2_396m", 3813e5af17bSbouyer "pll3_120m", 3823e5af17bSbouyer "pll3_pfd1_540m" 3833e5af17bSbouyer }; 3843e5af17bSbouyer 3853e5af17bSbouyer static const char *pll_bypass_src_p[] = { 3863e5af17bSbouyer "osc", 3873e5af17bSbouyer "lvds1_in", 3883e5af17bSbouyer "lvds2_in", 3893e5af17bSbouyer "dummy" 3903e5af17bSbouyer }; 3913e5af17bSbouyer 3923e5af17bSbouyer static const char *pll1_bypass_p[] = { 3933e5af17bSbouyer "pll1", 3943e5af17bSbouyer "pll1_bypass_src" 3953e5af17bSbouyer }; 3963e5af17bSbouyer 3973e5af17bSbouyer static const char *pll2_bypass_p[] = { 3983e5af17bSbouyer "pll2", 3993e5af17bSbouyer "pll2_bypass_src" 4003e5af17bSbouyer }; 4013e5af17bSbouyer 4023e5af17bSbouyer static const char *pll3_bypass_p[] = { 4033e5af17bSbouyer "pll3", 4043e5af17bSbouyer "pll3_bypass_src" 4053e5af17bSbouyer }; 4063e5af17bSbouyer 4073e5af17bSbouyer static const char *pll4_bypass_p[] = { 4083e5af17bSbouyer "pll4", 4093e5af17bSbouyer "pll4_bypass_src" 4103e5af17bSbouyer }; 4113e5af17bSbouyer 4123e5af17bSbouyer static const char *pll5_bypass_p[] = { 4133e5af17bSbouyer "pll5", 4143e5af17bSbouyer "pll5_bypass_src" 4153e5af17bSbouyer }; 4163e5af17bSbouyer 4173e5af17bSbouyer static const char *pll6_bypass_p[] = { 4183e5af17bSbouyer "pll6", 4193e5af17bSbouyer "pll6_bypass_src" 4203e5af17bSbouyer }; 4213e5af17bSbouyer 4223e5af17bSbouyer static const char *pll7_bypass_p[] = { 4233e5af17bSbouyer "pll7", 4243e5af17bSbouyer "pll7_bypass_src" 4253e5af17bSbouyer }; 4263e5af17bSbouyer 4273e5af17bSbouyer static const char *ipu_di_pre_p[] = { 4283e5af17bSbouyer "mmdc_ch0_axi", 4293e5af17bSbouyer "pll3_usb_otg", 4303e5af17bSbouyer "pll5_video_div", 4313e5af17bSbouyer "pll2_pfd0_352m", 4323e5af17bSbouyer "pll2_pfd2_396m", 4333e5af17bSbouyer "pll3_pfd1_540m" 4343e5af17bSbouyer }; 4353e5af17bSbouyer 4363e5af17bSbouyer static const char *ipu1_di0_p[] = { 4373e5af17bSbouyer "ipu1_di0_pre", 4383e5af17bSbouyer "dummy", 4393e5af17bSbouyer "dummy", 4403e5af17bSbouyer "ldb_di0", 4413e5af17bSbouyer "ldb_di1" 4423e5af17bSbouyer }; 4433e5af17bSbouyer 4443e5af17bSbouyer static const char *ipu1_di1_p[] = { 4453e5af17bSbouyer "ipu1_di1_pre", 4463e5af17bSbouyer "dummy", 4473e5af17bSbouyer "dummy", 4483e5af17bSbouyer "ldb_di0", 4493e5af17bSbouyer "ldb_di1" 4503e5af17bSbouyer }; 4513e5af17bSbouyer 4523e5af17bSbouyer static const char *ipu2_di0_p[] = { 4533e5af17bSbouyer "ipu2_di0_pre", 4543e5af17bSbouyer "dummy", 4553e5af17bSbouyer "dummy", 4563e5af17bSbouyer "ldb_di0", 4573e5af17bSbouyer "ldb_di1" 4583e5af17bSbouyer }; 4593e5af17bSbouyer 4603e5af17bSbouyer static const char *ipu2_di1_p[] = { 4613e5af17bSbouyer "ipu2_di1_pre", 4623e5af17bSbouyer "dummy", 4633e5af17bSbouyer "dummy", 4643e5af17bSbouyer "ldb_di0", 4653e5af17bSbouyer "ldb_di1" 4663e5af17bSbouyer }; 4673e5af17bSbouyer 4683e5af17bSbouyer static const char *ldb_di_p[] = { 4693e5af17bSbouyer "pll5_video_div", 4703e5af17bSbouyer "pll2_pfd0_352m", 4713e5af17bSbouyer "pll2_pfd2_396m", 4723e5af17bSbouyer "mmdc_ch1_axi", 4733e5af17bSbouyer "pll3_usb_otg" 4743e5af17bSbouyer }; 4753e5af17bSbouyer 4763e5af17bSbouyer static const char *periph_p[] = { 4773e5af17bSbouyer "periph_pre", 4783e5af17bSbouyer "periph_clk2" 4793e5af17bSbouyer }; 4803e5af17bSbouyer 4813e5af17bSbouyer static const char *periph2_p[] = { 4823e5af17bSbouyer "periph2_pre", 4833e5af17bSbouyer "periph2_clk2" 4843e5af17bSbouyer }; 4853e5af17bSbouyer 4863e5af17bSbouyer static const char *vdo_axi_p[] = { 4873e5af17bSbouyer "axi", 4883e5af17bSbouyer "ahb" 4893e5af17bSbouyer }; 4903e5af17bSbouyer 4913e5af17bSbouyer static const char *vpu_axi_p[] = { 4923e5af17bSbouyer "axi", 4933e5af17bSbouyer "pll2_pfd2_396m", 4943e5af17bSbouyer "pll2_pfd0_352m" 4953e5af17bSbouyer }; 4963e5af17bSbouyer 4973e5af17bSbouyer static const char *cko1_p[] = { 4983e5af17bSbouyer "pll3_usb_otg", 4993e5af17bSbouyer "pll2_bus", 5003e5af17bSbouyer "pll1_sys", 5013e5af17bSbouyer "pll5_video_div", 5023e5af17bSbouyer "dummy", 5033e5af17bSbouyer "axi", 5043e5af17bSbouyer "enfc", 5053e5af17bSbouyer "ipu1_di0", 5063e5af17bSbouyer "ipu1_di1", 5073e5af17bSbouyer "ipu2_di0", 5083e5af17bSbouyer "ipu2_di1", 5093e5af17bSbouyer "ahb", 5103e5af17bSbouyer "ipg", 5113e5af17bSbouyer "ipg_per", 5123e5af17bSbouyer "ckil", 5133e5af17bSbouyer "pll4_audio_div" 5143e5af17bSbouyer }; 5153e5af17bSbouyer 5163e5af17bSbouyer static const char *cko2_p[] = { 5173e5af17bSbouyer "mmdc_ch0_axi", 5183e5af17bSbouyer "mmdc_ch1_axi", 5193e5af17bSbouyer "usdhc4", 5203e5af17bSbouyer "usdhc1", 5213e5af17bSbouyer "gpu2d_axi", 5223e5af17bSbouyer "dummy", 5233e5af17bSbouyer "ecspi_root", 5243e5af17bSbouyer "gpu3d_axi", 5253e5af17bSbouyer "usdhc3", 5263e5af17bSbouyer "dummy", 5273e5af17bSbouyer "arm", 5283e5af17bSbouyer "ipu1", 5293e5af17bSbouyer "ipu2", 5303e5af17bSbouyer "vdo_axi", 5313e5af17bSbouyer "osc", 5323e5af17bSbouyer "gpu2d_core", 5333e5af17bSbouyer "gpu3d_core", 5343e5af17bSbouyer "usdhc2", 5353e5af17bSbouyer "ssi1", 5363e5af17bSbouyer "ssi2", 5373e5af17bSbouyer "ssi3", 5383e5af17bSbouyer "gpu3d_shader", 5393e5af17bSbouyer "vpu_axi", 5403e5af17bSbouyer "can_root", 5413e5af17bSbouyer "ldb_di0", 5423e5af17bSbouyer "ldb_di1", 5433e5af17bSbouyer "esai_extal", 5443e5af17bSbouyer "eim_slow", 5453e5af17bSbouyer "uart_serial", 5463e5af17bSbouyer "spdif", 5473e5af17bSbouyer "asrc", 5483e5af17bSbouyer "hsi_tx" 5493e5af17bSbouyer }; 5503e5af17bSbouyer 5513e5af17bSbouyer static const char *cko_p[] = { 5523e5af17bSbouyer "cko1", 5533e5af17bSbouyer "cko2" 5543e5af17bSbouyer }; 5553e5af17bSbouyer 5563e5af17bSbouyer static const char *hsi_tx_p[] = { 5573e5af17bSbouyer "pll3_120m", 5583e5af17bSbouyer "pll2_pfd2_396m" 5593e5af17bSbouyer }; 5603e5af17bSbouyer 5613e5af17bSbouyer static const char *pcie_axi_p[] = { 5623e5af17bSbouyer "axi", 5633e5af17bSbouyer "ahb" 5643e5af17bSbouyer }; 5653e5af17bSbouyer 5663e5af17bSbouyer static const char *ssi_p[] = { 5673e5af17bSbouyer "pll3_pfd2_508m", 5683e5af17bSbouyer "pll3_pfd3_454m", 5693e5af17bSbouyer "pll4_audio_div" 5703e5af17bSbouyer }; 5713e5af17bSbouyer 5723e5af17bSbouyer static const char *usdhc_p[] = { 5733e5af17bSbouyer "pll2_pfd2_396m", 5743e5af17bSbouyer "pll2_pfd0_352m" 5753e5af17bSbouyer }; 5763e5af17bSbouyer 5773e5af17bSbouyer static const char *eim_p[] = { 5783e5af17bSbouyer "pll2_pfd2_396m", 5793e5af17bSbouyer "pll3_usb_otg", 5803e5af17bSbouyer "axi", 5813e5af17bSbouyer "pll2_pfd0_352m" 5823e5af17bSbouyer }; 5833e5af17bSbouyer 5843e5af17bSbouyer static const char *eim_slow_p[] = { 5853e5af17bSbouyer "axi", 5863e5af17bSbouyer "pll3_usb_otg", 5873e5af17bSbouyer "pll2_pfd2_396m", 5883e5af17bSbouyer "pll2_pfd0_352m" 5893e5af17bSbouyer }; 5903e5af17bSbouyer 5913e5af17bSbouyer static const char *enfc_p[] = { 5923e5af17bSbouyer "pll2_pfd0_352m", 5933e5af17bSbouyer "pll2_bus", 5943e5af17bSbouyer "pll3_usb_otg", 5953e5af17bSbouyer "pll2_pfd2_396m" 5963e5af17bSbouyer }; 5973e5af17bSbouyer 5983e5af17bSbouyer static const char *lvds_p[] = { 5993e5af17bSbouyer "dummy", 6003e5af17bSbouyer "dummy", 6013e5af17bSbouyer "dummy", 6023e5af17bSbouyer "dummy", 6033e5af17bSbouyer "dummy", 6043e5af17bSbouyer "dummy", 6053e5af17bSbouyer "pll4_audio", 6063e5af17bSbouyer "pll5_video", 6073e5af17bSbouyer "pll8_mlb", 6083e5af17bSbouyer "enet_ref", 6093e5af17bSbouyer "pcie_ref_125m", 6103e5af17bSbouyer "sata_ref_100m" 6113e5af17bSbouyer }; 6123e5af17bSbouyer 6133e5af17bSbouyer /* DT clock ID to clock name mappings */ 6143e5af17bSbouyer static struct imx_clock_id { 6153e5af17bSbouyer u_int id; 6163e5af17bSbouyer const char *name; 6173e5af17bSbouyer } imx6q_clock_ids[] = { 6183e5af17bSbouyer { IMX6QCLK_DUMMY, "dummy" }, 6193e5af17bSbouyer { IMX6QCLK_CKIL, "ckil" }, 620*97835a6fSskrll { IMX6QCLK_CKIH, "ckih1" }, 6213e5af17bSbouyer { IMX6QCLK_OSC, "osc" }, 6223e5af17bSbouyer { IMX6QCLK_PLL2_PFD0_352M, "pll2_pfd0_352m" }, 6233e5af17bSbouyer { IMX6QCLK_PLL2_PFD1_594M, "pll2_pfd1_594m" }, 6243e5af17bSbouyer { IMX6QCLK_PLL2_PFD2_396M, "pll2_pfd2_396m" }, 6253e5af17bSbouyer { IMX6QCLK_PLL3_PFD0_720M, "pll3_pfd0_720m" }, 6263e5af17bSbouyer { IMX6QCLK_PLL3_PFD1_540M, "pll3_pfd1_540m" }, 6273e5af17bSbouyer { IMX6QCLK_PLL3_PFD2_508M, "pll3_pfd2_508m" }, 6283e5af17bSbouyer { IMX6QCLK_PLL3_PFD3_454M, "pll3_pfd3_454m" }, 6293e5af17bSbouyer { IMX6QCLK_PLL2_198M, "pll2_198m" }, 6303e5af17bSbouyer { IMX6QCLK_PLL3_120M, "pll3_120m" }, 6313e5af17bSbouyer { IMX6QCLK_PLL3_80M, "pll3_80m" }, 6323e5af17bSbouyer { IMX6QCLK_PLL3_60M, "pll3_60m" }, 6333e5af17bSbouyer { IMX6QCLK_TWD, "twd" }, 6343e5af17bSbouyer { IMX6QCLK_STEP, "step" }, 6353e5af17bSbouyer { IMX6QCLK_PLL1_SW, "pll1_sw" }, 6363e5af17bSbouyer { IMX6QCLK_PERIPH_PRE, "periph_pre" }, 6373e5af17bSbouyer { IMX6QCLK_PERIPH2_PRE, "periph2_pre" }, 6383e5af17bSbouyer { IMX6QCLK_PERIPH_CLK2_SEL, "periph_clk2_sel" }, 6393e5af17bSbouyer { IMX6QCLK_PERIPH2_CLK2_SEL, "periph2_clk2_sel" }, 6403e5af17bSbouyer { IMX6QCLK_AXI_SEL, "axi_sel" }, 6413e5af17bSbouyer { IMX6QCLK_ESAI_SEL, "esai_sel" }, 6423e5af17bSbouyer { IMX6QCLK_ASRC_SEL, "asrc_sel" }, 6433e5af17bSbouyer { IMX6QCLK_SPDIF_SEL, "spdif_sel" }, 6443e5af17bSbouyer { IMX6QCLK_GPU2D_AXI, "gpu2d_axi" }, 6453e5af17bSbouyer { IMX6QCLK_GPU3D_AXI, "gpu3d_axi" }, 6463e5af17bSbouyer { IMX6QCLK_GPU2D_CORE_SEL, "gpu2d_core_sel" }, 6473e5af17bSbouyer { IMX6QCLK_GPU3D_CORE_SEL, "gpu3d_core_sel" }, 6483e5af17bSbouyer { IMX6QCLK_GPU3D_SHADER_SEL, "gpu3d_shader_sel" }, 6493e5af17bSbouyer { IMX6QCLK_IPU1_SEL, "ipu1_sel" }, 6503e5af17bSbouyer { IMX6QCLK_IPU2_SEL, "ipu2_sel" }, 6513e5af17bSbouyer { IMX6QCLK_LDB_DI0_SEL, "ldb_di0_sel" }, 6523e5af17bSbouyer { IMX6QCLK_LDB_DI1_SEL, "ldb_di1_sel" }, 6533e5af17bSbouyer { IMX6QCLK_IPU1_DI0_PRE_SEL, "ipu1_di0_pre_sel" }, 6543e5af17bSbouyer { IMX6QCLK_IPU1_DI1_PRE_SEL, "ipu1_di1_pre_sel" }, 6553e5af17bSbouyer { IMX6QCLK_IPU2_DI0_PRE_SEL, "ipu2_di0_pre_sel" }, 6563e5af17bSbouyer { IMX6QCLK_IPU2_DI1_PRE_SEL, "ipu2_di1_pre_sel" }, 6573e5af17bSbouyer { IMX6QCLK_IPU1_DI0_SEL, "ipu1_di0_sel" }, 6583e5af17bSbouyer { IMX6QCLK_IPU1_DI1_SEL, "ipu1_di1_sel" }, 6593e5af17bSbouyer { IMX6QCLK_IPU2_DI0_SEL, "ipu2_di0_sel" }, 6603e5af17bSbouyer { IMX6QCLK_IPU2_DI1_SEL, "ipu2_di1_sel" }, 6613e5af17bSbouyer { IMX6QCLK_HSI_TX_SEL, "hsi_tx_sel" }, 6623e5af17bSbouyer { IMX6QCLK_PCIE_AXI_SEL, "pcie_axi_sel" }, 6633e5af17bSbouyer { IMX6QCLK_SSI1_SEL, "ssi1_sel" }, 6643e5af17bSbouyer { IMX6QCLK_SSI2_SEL, "ssi2_sel" }, 6653e5af17bSbouyer { IMX6QCLK_SSI3_SEL, "ssi3_sel" }, 6663e5af17bSbouyer { IMX6QCLK_USDHC1_SEL, "usdhc1_sel" }, 6673e5af17bSbouyer { IMX6QCLK_USDHC2_SEL, "usdhc2_sel" }, 6683e5af17bSbouyer { IMX6QCLK_USDHC3_SEL, "usdhc3_sel" }, 6693e5af17bSbouyer { IMX6QCLK_USDHC4_SEL, "usdhc4_sel" }, 6703e5af17bSbouyer { IMX6QCLK_ENFC_SEL, "enfc_sel" }, 6713e5af17bSbouyer { IMX6QCLK_EIM_SEL, "eim_sel" }, 6723e5af17bSbouyer { IMX6QCLK_EIM_SLOW_SEL, "eim_slow_sel" }, 6733e5af17bSbouyer { IMX6QCLK_VDO_AXI_SEL, "vdo_axi_sel" }, 6743e5af17bSbouyer { IMX6QCLK_VPU_AXI_SEL, "vpu_axi_sel" }, 6753e5af17bSbouyer { IMX6QCLK_CKO1_SEL, "cko1_sel" }, 6763e5af17bSbouyer { IMX6QCLK_PERIPH, "periph" }, 6773e5af17bSbouyer { IMX6QCLK_PERIPH2, "periph2" }, 6783e5af17bSbouyer { IMX6QCLK_PERIPH_CLK2, "periph_clk2" }, 6793e5af17bSbouyer { IMX6QCLK_PERIPH2_CLK2, "periph2_clk2" }, 6803e5af17bSbouyer { IMX6QCLK_IPG, "ipg" }, 6813e5af17bSbouyer { IMX6QCLK_IPG_PER, "ipg_per" }, 6823e5af17bSbouyer { IMX6QCLK_ESAI_PRED, "esai_pred" }, 6833e5af17bSbouyer { IMX6QCLK_ESAI_PODF, "esai_podf" }, 6843e5af17bSbouyer { IMX6QCLK_ASRC_PRED, "asrc_pred" }, 6853e5af17bSbouyer { IMX6QCLK_ASRC_PODF, "asrc_podf" }, 6863e5af17bSbouyer { IMX6QCLK_SPDIF_PRED, "spdif_pred" }, 6873e5af17bSbouyer { IMX6QCLK_SPDIF_PODF, "spdif_podf" }, 6883e5af17bSbouyer { IMX6QCLK_CAN_ROOT, "can_root" }, 6893e5af17bSbouyer { IMX6QCLK_ECSPI_ROOT, "ecspi_root" }, 6903e5af17bSbouyer { IMX6QCLK_GPU2D_CORE_PODF, "gpu2d_core_podf" }, 6913e5af17bSbouyer { IMX6QCLK_GPU3D_CORE_PODF, "gpu3d_core_podf" }, 6923e5af17bSbouyer { IMX6QCLK_GPU3D_SHADER, "gpu3d_shader" }, 6933e5af17bSbouyer { IMX6QCLK_IPU1_PODF, "ipu1_podf" }, 6943e5af17bSbouyer { IMX6QCLK_IPU2_PODF, "ipu2_podf" }, 6953e5af17bSbouyer { IMX6QCLK_LDB_DI0_PODF, "ldb_di0_podf" }, 6963e5af17bSbouyer { IMX6QCLK_LDB_DI1_PODF, "ldb_di1_podf" }, 6973e5af17bSbouyer { IMX6QCLK_IPU1_DI0_PRE, "ipu1_di0_pre" }, 6983e5af17bSbouyer { IMX6QCLK_IPU1_DI1_PRE, "ipu1_di1_pre" }, 6993e5af17bSbouyer { IMX6QCLK_IPU2_DI0_PRE, "ipu2_di0_pre" }, 7003e5af17bSbouyer { IMX6QCLK_IPU2_DI1_PRE, "ipu2_di1_pre" }, 7013e5af17bSbouyer { IMX6QCLK_HSI_TX_PODF, "hsi_tx_podf" }, 7023e5af17bSbouyer { IMX6QCLK_SSI1_PRED, "ssi1_pred" }, 7033e5af17bSbouyer { IMX6QCLK_SSI1_PODF, "ssi1_podf" }, 7043e5af17bSbouyer { IMX6QCLK_SSI2_PRED, "ssi2_pred" }, 7053e5af17bSbouyer { IMX6QCLK_SSI2_PODF, "ssi2_podf" }, 7063e5af17bSbouyer { IMX6QCLK_SSI3_PRED, "ssi3_pred" }, 7073e5af17bSbouyer { IMX6QCLK_SSI3_PODF, "ssi3_podf" }, 7083e5af17bSbouyer { IMX6QCLK_UART_SERIAL_PODF, "uart_serial_podf" }, 7093e5af17bSbouyer { IMX6QCLK_USDHC1_PODF, "usdhc1_podf" }, 7103e5af17bSbouyer { IMX6QCLK_USDHC2_PODF, "usdhc2_podf" }, 7113e5af17bSbouyer { IMX6QCLK_USDHC3_PODF, "usdhc3_podf" }, 7123e5af17bSbouyer { IMX6QCLK_USDHC4_PODF, "usdhc4_podf" }, 7133e5af17bSbouyer { IMX6QCLK_ENFC_PRED, "enfc_pred" }, 7143e5af17bSbouyer { IMX6QCLK_ENFC_PODF, "enfc_podf" }, 7153e5af17bSbouyer { IMX6QCLK_EIM_PODF, "eim_podf" }, 7163e5af17bSbouyer { IMX6QCLK_EIM_SLOW_PODF, "eim_slow_podf" }, 7173e5af17bSbouyer { IMX6QCLK_VPU_AXI_PODF, "vpu_axi_podf" }, 7183e5af17bSbouyer { IMX6QCLK_CKO1_PODF, "cko1_podf" }, 7193e5af17bSbouyer { IMX6QCLK_AXI, "axi" }, 7203e5af17bSbouyer { IMX6QCLK_MMDC_CH0_AXI_PODF, "mmdc_ch0_axi_podf" }, 7213e5af17bSbouyer { IMX6QCLK_MMDC_CH1_AXI_PODF, "mmdc_ch1_axi_podf" }, 7223e5af17bSbouyer { IMX6QCLK_ARM, "arm" }, 7233e5af17bSbouyer { IMX6QCLK_AHB, "ahb" }, 7243e5af17bSbouyer { IMX6QCLK_APBH_DMA, "apbh_dma" }, 7253e5af17bSbouyer { IMX6QCLK_ASRC, "asrc" }, 7263e5af17bSbouyer { IMX6QCLK_CAN1_IPG, "can1_ipg" }, 7273e5af17bSbouyer { IMX6QCLK_CAN1_SERIAL, "can1_serial" }, 7283e5af17bSbouyer { IMX6QCLK_CAN2_IPG, "can2_ipg" }, 7293e5af17bSbouyer { IMX6QCLK_CAN2_SERIAL, "can2_serial" }, 7303e5af17bSbouyer { IMX6QCLK_ECSPI1, "ecspi1" }, 7313e5af17bSbouyer { IMX6QCLK_ECSPI2, "ecspi2" }, 7323e5af17bSbouyer { IMX6QCLK_ECSPI3, "ecspi3" }, 7333e5af17bSbouyer { IMX6QCLK_ECSPI4, "ecspi4" }, 7343e5af17bSbouyer { IMX6QCLK_ECSPI5, "ecspi5" }, 7353e5af17bSbouyer { IMX6QCLK_ENET, "enet" }, 7363e5af17bSbouyer { IMX6QCLK_ESAI_EXTAL, "esai_extal" }, 7373e5af17bSbouyer { IMX6QCLK_GPT_IPG, "gpt_ipg" }, 7383e5af17bSbouyer { IMX6QCLK_GPT_IPG_PER, "gpt_ipg_per" }, 7393e5af17bSbouyer { IMX6QCLK_GPU2D_CORE, "gpu2d_core" }, 7403e5af17bSbouyer { IMX6QCLK_GPU3D_CORE, "gpu3d_core" }, 7413e5af17bSbouyer { IMX6QCLK_HDMI_IAHB, "hdmi_iahb" }, 7423e5af17bSbouyer { IMX6QCLK_HDMI_ISFR, "hdmi_isfr" }, 7433e5af17bSbouyer { IMX6QCLK_I2C1, "i2c1" }, 7443e5af17bSbouyer { IMX6QCLK_I2C2, "i2c2" }, 7453e5af17bSbouyer { IMX6QCLK_I2C3, "i2c3" }, 7463e5af17bSbouyer { IMX6QCLK_IIM, "iim" }, 7473e5af17bSbouyer { IMX6QCLK_ENFC, "enfc" }, 7483e5af17bSbouyer { IMX6QCLK_IPU1, "ipu1" }, 7493e5af17bSbouyer { IMX6QCLK_IPU1_DI0, "ipu1_di0" }, 7503e5af17bSbouyer { IMX6QCLK_IPU1_DI1, "ipu1_di1" }, 7513e5af17bSbouyer { IMX6QCLK_IPU2, "ipu2" }, 7523e5af17bSbouyer { IMX6QCLK_IPU2_DI0, "ipu2_di0" }, 7533e5af17bSbouyer { IMX6QCLK_LDB_DI0, "ldb_di0" }, 7543e5af17bSbouyer { IMX6QCLK_LDB_DI1, "ldb_di1" }, 7553e5af17bSbouyer { IMX6QCLK_IPU2_DI1, "ipu2_di1" }, 7563e5af17bSbouyer { IMX6QCLK_HSI_TX, "hsi_tx" }, 7573e5af17bSbouyer { IMX6QCLK_MLB, "mlb" }, 7583e5af17bSbouyer { IMX6QCLK_MMDC_CH0_AXI, "mmdc_ch0_axi" }, 7593e5af17bSbouyer { IMX6QCLK_MMDC_CH1_AXI, "mmdc_ch1_axi" }, 7603e5af17bSbouyer { IMX6QCLK_OCRAM, "ocram" }, 7613e5af17bSbouyer { IMX6QCLK_OPENVG_AXI, "openvg_axi" }, 7623e5af17bSbouyer { IMX6QCLK_PCIE_AXI, "pcie_axi" }, 7633e5af17bSbouyer { IMX6QCLK_PWM1, "pwm1" }, 7643e5af17bSbouyer { IMX6QCLK_PWM2, "pwm2" }, 7653e5af17bSbouyer { IMX6QCLK_PWM3, "pwm3" }, 7663e5af17bSbouyer { IMX6QCLK_PWM4, "pwm4" }, 7673e5af17bSbouyer { IMX6QCLK_PER1_BCH, "per1_bch" }, 7683e5af17bSbouyer { IMX6QCLK_GPMI_BCH_APB, "gpmi_bch_apb" }, 7693e5af17bSbouyer { IMX6QCLK_GPMI_BCH, "gpmi_bch" }, 7703e5af17bSbouyer { IMX6QCLK_GPMI_IO, "gpmi_io" }, 7713e5af17bSbouyer { IMX6QCLK_GPMI_APB, "gpmi_apb" }, 7723e5af17bSbouyer { IMX6QCLK_SATA, "sata" }, 7733e5af17bSbouyer { IMX6QCLK_SDMA, "sdma" }, 7743e5af17bSbouyer { IMX6QCLK_SPBA, "spba" }, 7753e5af17bSbouyer { IMX6QCLK_SSI1, "ssi1" }, 7763e5af17bSbouyer { IMX6QCLK_SSI2, "ssi2" }, 7773e5af17bSbouyer { IMX6QCLK_SSI3, "ssi3" }, 7783e5af17bSbouyer { IMX6QCLK_UART_IPG, "uart_ipg" }, 7793e5af17bSbouyer { IMX6QCLK_UART_SERIAL, "uart_serial" }, 7803e5af17bSbouyer { IMX6QCLK_USBOH3, "usboh3" }, 7813e5af17bSbouyer { IMX6QCLK_USDHC1, "usdhc1" }, 7823e5af17bSbouyer { IMX6QCLK_USDHC2, "usdhc2" }, 7833e5af17bSbouyer { IMX6QCLK_USDHC3, "usdhc3" }, 7843e5af17bSbouyer { IMX6QCLK_USDHC4, "usdhc4" }, 7853e5af17bSbouyer { IMX6QCLK_VDO_AXI, "vdo_axi" }, 7863e5af17bSbouyer { IMX6QCLK_VPU_AXI, "vpu_axi" }, 7873e5af17bSbouyer { IMX6QCLK_CKO1, "cko1" }, 7883e5af17bSbouyer { IMX6QCLK_PLL1_SYS, "pll1_sys" }, 7893e5af17bSbouyer { IMX6QCLK_PLL2_BUS, "pll2_bus" }, 7903e5af17bSbouyer { IMX6QCLK_PLL3_USB_OTG, "pll3_usb_otg" }, 7913e5af17bSbouyer { IMX6QCLK_PLL4_AUDIO, "pll4_audio" }, 7923e5af17bSbouyer { IMX6QCLK_PLL5_VIDEO, "pll5_video" }, 7933e5af17bSbouyer { IMX6QCLK_PLL8_MLB, "pll8_mlb" }, 7943e5af17bSbouyer { IMX6QCLK_PLL7_USB_HOST, "pll7_usb_host" }, 7953e5af17bSbouyer { IMX6QCLK_PLL6_ENET, "pll6_enet" }, 7963e5af17bSbouyer { IMX6QCLK_SSI1_IPG, "ssi1_ipg" }, 7973e5af17bSbouyer { IMX6QCLK_SSI2_IPG, "ssi2_ipg" }, 7983e5af17bSbouyer { IMX6QCLK_SSI3_IPG, "ssi3_ipg" }, 7993e5af17bSbouyer { IMX6QCLK_ROM, "rom" }, 8003e5af17bSbouyer { IMX6QCLK_USBPHY1, "usbphy1" }, 8013e5af17bSbouyer { IMX6QCLK_USBPHY2, "usbphy2" }, 8023e5af17bSbouyer { IMX6QCLK_LDB_DI0_DIV_3_5, "ldb_di0_div_3_5" }, 8033e5af17bSbouyer { IMX6QCLK_LDB_DI1_DIV_3_5, "ldb_di1_div_3_5" }, 8043e5af17bSbouyer { IMX6QCLK_SATA_REF, "sata_ref" }, 8053e5af17bSbouyer { IMX6QCLK_SATA_REF_100M, "sata_ref_100m" }, 8063e5af17bSbouyer { IMX6QCLK_PCIE_REF, "pcie_ref" }, 8073e5af17bSbouyer { IMX6QCLK_PCIE_REF_125M, "pcie_ref_125m" }, 8083e5af17bSbouyer { IMX6QCLK_ENET_REF, "enet_ref" }, 8093e5af17bSbouyer { IMX6QCLK_USBPHY1_GATE, "usbphy1_gate" }, 8103e5af17bSbouyer { IMX6QCLK_USBPHY2_GATE, "usbphy2_gate" }, 8113e5af17bSbouyer { IMX6QCLK_PLL4_POST_DIV, "pll4_post_div" }, 8123e5af17bSbouyer { IMX6QCLK_PLL5_POST_DIV, "pll5_post_div" }, 8133e5af17bSbouyer { IMX6QCLK_PLL5_VIDEO_DIV, "pll5_video_div" }, 8143e5af17bSbouyer { IMX6QCLK_EIM_SLOW, "eim_slow" }, 8153e5af17bSbouyer { IMX6QCLK_SPDIF, "spdif" }, 8163e5af17bSbouyer { IMX6QCLK_CKO2_SEL, "cko2_sel" }, 8173e5af17bSbouyer { IMX6QCLK_CKO2_PODF, "cko2_podf" }, 8183e5af17bSbouyer { IMX6QCLK_CKO2, "cko2" }, 8193e5af17bSbouyer { IMX6QCLK_CKO, "cko" }, 8203e5af17bSbouyer { IMX6QCLK_VDOA, "vdoa" }, 8213e5af17bSbouyer { IMX6QCLK_PLL4_AUDIO_DIV, "pll4_audio_div" }, 8223e5af17bSbouyer { IMX6QCLK_LVDS1_SEL, "lvds1_sel" }, 8233e5af17bSbouyer { IMX6QCLK_LVDS2_SEL, "lvds2_sel" }, 8243e5af17bSbouyer { IMX6QCLK_LVDS1_GATE, "lvds1_gate" }, 8253e5af17bSbouyer { IMX6QCLK_LVDS2_GATE, "lvds2_gate" }, 8263e5af17bSbouyer { IMX6QCLK_ESAI_IPG, "esai_ipg" }, 8273e5af17bSbouyer { IMX6QCLK_ESAI_MEM, "esai_mem" }, 8283e5af17bSbouyer { IMX6QCLK_ASRC_IPG, "asrc_ipg" }, 8293e5af17bSbouyer { IMX6QCLK_ASRC_MEM, "asrc_mem" }, 8303e5af17bSbouyer { IMX6QCLK_LVDS1_IN, "lvds1_in" }, 8313e5af17bSbouyer { IMX6QCLK_LVDS2_IN, "lvds2_in" }, 8323e5af17bSbouyer { IMX6QCLK_ANACLK1, "anaclk1" }, 8333e5af17bSbouyer { IMX6QCLK_ANACLK2, "anaclk2" }, 8343e5af17bSbouyer { IMX6QCLK_PLL1_BYPASS_SRC, "pll1_bypass_src" }, 8353e5af17bSbouyer { IMX6QCLK_PLL2_BYPASS_SRC, "pll2_bypass_src" }, 8363e5af17bSbouyer { IMX6QCLK_PLL3_BYPASS_SRC, "pll3_bypass_src" }, 8373e5af17bSbouyer { IMX6QCLK_PLL4_BYPASS_SRC, "pll4_bypass_src" }, 8383e5af17bSbouyer { IMX6QCLK_PLL5_BYPASS_SRC, "pll5_bypass_src" }, 8393e5af17bSbouyer { IMX6QCLK_PLL6_BYPASS_SRC, "pll6_bypass_src" }, 8403e5af17bSbouyer { IMX6QCLK_PLL7_BYPASS_SRC, "pll7_bypass_src" }, 8413e5af17bSbouyer { IMX6QCLK_PLL1, "pll1" }, 8423e5af17bSbouyer { IMX6QCLK_PLL2, "pll2" }, 8433e5af17bSbouyer { IMX6QCLK_PLL3, "pll3" }, 8443e5af17bSbouyer { IMX6QCLK_PLL4, "pll4" }, 8453e5af17bSbouyer { IMX6QCLK_PLL5, "pll5" }, 8463e5af17bSbouyer { IMX6QCLK_PLL6, "pll6" }, 8473e5af17bSbouyer { IMX6QCLK_PLL7, "pll7" }, 8483e5af17bSbouyer { IMX6QCLK_PLL1_BYPASS, "pll1_bypass" }, 8493e5af17bSbouyer { IMX6QCLK_PLL2_BYPASS, "pll2_bypass" }, 8503e5af17bSbouyer { IMX6QCLK_PLL3_BYPASS, "pll3_bypass" }, 8513e5af17bSbouyer { IMX6QCLK_PLL4_BYPASS, "pll4_bypass" }, 8523e5af17bSbouyer { IMX6QCLK_PLL5_BYPASS, "pll5_bypass" }, 8533e5af17bSbouyer { IMX6QCLK_PLL6_BYPASS, "pll6_bypass" }, 8543e5af17bSbouyer { IMX6QCLK_PLL7_BYPASS, "pll7_bypass" }, 8553e5af17bSbouyer { IMX6QCLK_GPT_3M, "gpt_3m" }, 8563e5af17bSbouyer { IMX6QCLK_VIDEO_27M, "video_27m" }, 8573e5af17bSbouyer { IMX6QCLK_MIPI_CORE_CFG, "mipi_core_cfg" }, 8583e5af17bSbouyer { IMX6QCLK_MIPI_IPG, "mipi_ipg" }, 8593e5af17bSbouyer { IMX6QCLK_CAAM_MEM, "caam_mem" }, 8603e5af17bSbouyer { IMX6QCLK_CAAM_ACLK, "caam_aclk" }, 8613e5af17bSbouyer { IMX6QCLK_CAAM_IPG, "caam_ipg" }, 8623e5af17bSbouyer { IMX6QCLK_SPDIF_GCLK, "spdif_gclk" }, 8633e5af17bSbouyer { IMX6QCLK_UART_SEL, "uart_sel" }, 8643e5af17bSbouyer { IMX6QCLK_IPG_PER_SEL, "ipg_per_sel" }, 8653e5af17bSbouyer { IMX6QCLK_ECSPI_SEL, "ecspi_sel" }, 8663e5af17bSbouyer { IMX6QCLK_CAN_SEL, "can_sel" }, 8673e5af17bSbouyer { IMX6QCLK_MMDC_CH1_AXI_CG, "mmdc_ch1_axi_cg" }, 8683e5af17bSbouyer { IMX6QCLK_PRE0, "pre0" }, 8693e5af17bSbouyer { IMX6QCLK_PRE1, "pre1" }, 8703e5af17bSbouyer { IMX6QCLK_PRE2, "pre2" }, 8713e5af17bSbouyer { IMX6QCLK_PRE3, "pre3" }, 8723e5af17bSbouyer { IMX6QCLK_PRG0_AXI, "prg0_axi" }, 8733e5af17bSbouyer { IMX6QCLK_PRG1_AXI, "prg1_axi" }, 8743e5af17bSbouyer { IMX6QCLK_PRG0_APB, "prg0_apb" }, 8753e5af17bSbouyer { IMX6QCLK_PRG1_APB, "prg1_apb" }, 8763e5af17bSbouyer { IMX6QCLK_PRE_AXI, "pre_axi" }, 8773e5af17bSbouyer { IMX6QCLK_MLB_SEL, "mlb_sel" }, 8783e5af17bSbouyer { IMX6QCLK_MLB_PODF, "mlb_podf" }, 8793e5af17bSbouyer { IMX6QCLK_END, "end" }, 8803e5af17bSbouyer }; 8813e5af17bSbouyer 8823e5af17bSbouyer /* Clock Divider Tables */ 8833e5af17bSbouyer static const int enet_ref_tbl[] = { 20, 10, 5, 4, 0 }; 8843e5af17bSbouyer static const int post_div_tbl[] = { 4, 2, 1, 0 }; 8853e5af17bSbouyer static const int audiovideo_div_tbl[] = { 1, 2, 1, 4, 0 }; 8863e5af17bSbouyer 8873e5af17bSbouyer static struct imx6_clk imx6q_clks[] = { 8883e5af17bSbouyer CLK_FIXED("dummy", 0), 8893e5af17bSbouyer 8903e5af17bSbouyer CLK_FIXED("ckil", IMX6_CKIL_FREQ), 891*97835a6fSskrll CLK_FIXED("ckih1", IMX6_CKIH_FREQ), 8923e5af17bSbouyer CLK_FIXED("osc", IMX6_OSC_FREQ), 8933e5af17bSbouyer CLK_FIXED("anaclk1", IMX6_ANACLK1_FREQ), 8943e5af17bSbouyer CLK_FIXED("anaclk2", IMX6_ANACLK2_FREQ), 8953e5af17bSbouyer 8963e5af17bSbouyer CLK_FIXED_FACTOR("sata_ref", "pll6_enet", 5, 1), 8973e5af17bSbouyer CLK_FIXED_FACTOR("pcie_ref", "pll6_enet", 4, 1), 8983e5af17bSbouyer CLK_FIXED_FACTOR("pll2_198m", "pll2_pfd2_396m", 2, 1), 8993e5af17bSbouyer CLK_FIXED_FACTOR("pll3_120m", "pll3_usb_otg", 4, 1), 9003e5af17bSbouyer CLK_FIXED_FACTOR("pll3_80m", "pll3_usb_otg", 6, 1), 9013e5af17bSbouyer CLK_FIXED_FACTOR("pll3_60m", "pll3_usb_otg", 8, 1), 9023e5af17bSbouyer CLK_FIXED_FACTOR("twd", "arm", 2, 1), 9033e5af17bSbouyer CLK_FIXED_FACTOR("gpt_3m", "osc", 8, 1), 9043e5af17bSbouyer CLK_FIXED_FACTOR("video_27m", "pll3_pfd1_540m", 20, 1), 9053e5af17bSbouyer CLK_FIXED_FACTOR("gpu2d_axi", "mmdc_ch0_axi_podf", 1, 1), 9063e5af17bSbouyer CLK_FIXED_FACTOR("gpu3d_axi", "mmdc_ch0_axi_podf", 1, 1), 9073e5af17bSbouyer CLK_FIXED_FACTOR("ldb_di0_div_3_5", "ldb_di0_sel", 7, 2), 9083e5af17bSbouyer CLK_FIXED_FACTOR("ldb_di1_div_3_5", "ldb_di1_sel", 7, 2), 9093e5af17bSbouyer 9103e5af17bSbouyer CLK_PFD("pll2_pfd0_352m", "pll2_bus", PFD_528, 0), 9113e5af17bSbouyer CLK_PFD("pll2_pfd1_594m", "pll2_bus", PFD_528, 1), 9123e5af17bSbouyer CLK_PFD("pll2_pfd2_396m", "pll2_bus", PFD_528, 2), 9133e5af17bSbouyer CLK_PFD("pll3_pfd0_720m", "pll3_usb_otg", PFD_480, 0), 9143e5af17bSbouyer CLK_PFD("pll3_pfd1_540m", "pll3_usb_otg", PFD_480, 1), 9153e5af17bSbouyer CLK_PFD("pll3_pfd2_508m", "pll3_usb_otg", PFD_480, 2), 9163e5af17bSbouyer CLK_PFD("pll3_pfd3_454m", "pll3_usb_otg", PFD_480, 3), 9173e5af17bSbouyer 9183e5af17bSbouyer CLK_PLL("pll1", "osc", SYS, PLL_ARM, DIV_SELECT, POWERDOWN, 0), 9193e5af17bSbouyer CLK_PLL("pll2", "osc", GENERIC, PLL_SYS, DIV_SELECT, POWERDOWN, 0), 9203e5af17bSbouyer CLK_PLL("pll3", "osc", USB, PLL_USB1, DIV_SELECT, POWER, 0), 9213e5af17bSbouyer CLK_PLL("pll4", "osc", AUDIO_VIDEO, PLL_AUDIO, DIV_SELECT, POWERDOWN, 0), 9223e5af17bSbouyer CLK_PLL("pll5", "osc", AUDIO_VIDEO, PLL_VIDEO, DIV_SELECT, POWERDOWN, 0), 9233e5af17bSbouyer CLK_PLL("pll6", "osc", ENET, PLL_ENET, DIV_SELECT, POWERDOWN, 500000000), 9243e5af17bSbouyer CLK_PLL("pll7", "osc", USB, PLL_USB2, DIV_SELECT, POWER, 0), 9253e5af17bSbouyer 9263e5af17bSbouyer CLK_DIV("periph_clk2", "periph_clk2_sel", CBCDR, PERIPH_CLK2_PODF), 9273e5af17bSbouyer CLK_DIV("periph2_clk2", "periph2_clk2_sel", CBCDR, PERIPH2_CLK2_PODF), 9283e5af17bSbouyer CLK_DIV("ipg", "ahb", CBCDR, IPG_PODF), 9293e5af17bSbouyer CLK_DIV("esai_pred", "esai_sel", CS1CDR, ESAI_CLK_PRED), 9303e5af17bSbouyer CLK_DIV("esai_podf", "esai_pred", CS1CDR, ESAI_CLK_PODF), 9313e5af17bSbouyer CLK_DIV("asrc_pred", "asrc_sel", CDCDR, SPDIF1_CLK_PRED), 9323e5af17bSbouyer CLK_DIV("asrc_podf", "asrc_pred", CDCDR, SPDIF1_CLK_PODF), 9333e5af17bSbouyer CLK_DIV("spdif_pred", "spdif_sel", CDCDR, SPDIF0_CLK_PRED), 9343e5af17bSbouyer CLK_DIV("spdif_podf", "spdif_pred", CDCDR, SPDIF0_CLK_PODF), 9353e5af17bSbouyer CLK_DIV("ecspi_root", "pll3_60m", CSCDR2, ECSPI_CLK_PODF), 9363e5af17bSbouyer CLK_DIV("can_root", "pll3_60m", CSCMR2, CAN_CLK_PODF), 9373e5af17bSbouyer CLK_DIV("uart_serial_podf", "pll3_80m", CSCDR1, UART_CLK_PODF), 9383e5af17bSbouyer CLK_DIV("gpu2d_core_podf", "gpu2d_core_sel", CBCMR, GPU2D_CORE_CLK_PODF), 9393e5af17bSbouyer CLK_DIV("gpu3d_core_podf", "gpu3d_core_sel", CBCMR, GPU3D_CORE_PODF), 9403e5af17bSbouyer CLK_DIV("gpu3d_shader", "gpu3d_shader_sel", CBCMR, GPU3D_SHADER_PODF), 9413e5af17bSbouyer CLK_DIV("ipu1_podf", "ipu1_sel", CSCDR3, IPU1_HSP_PODF), 9423e5af17bSbouyer CLK_DIV("ipu2_podf", "ipu2_sel", CSCDR3, IPU2_HSP_PODF), 9433e5af17bSbouyer CLK_DIV("ldb_di0_podf", "ldb_di0_div_3_5", CSCMR2, LDB_DI0_IPU_DIV), 9443e5af17bSbouyer CLK_DIV("ldb_di1_podf", "ldb_di1_div_3_5", CSCMR2, LDB_DI1_IPU_DIV), 9453e5af17bSbouyer CLK_DIV("ipu1_di0_pre", "ipu1_di0_pre_sel", CHSCCDR, IPU1_DI0_PODF), 9463e5af17bSbouyer CLK_DIV("ipu1_di1_pre", "ipu1_di1_pre_sel", CHSCCDR, IPU1_DI1_PODF), 9473e5af17bSbouyer CLK_DIV("ipu2_di0_pre", "ipu2_di0_pre_sel", CSCDR2, IPU2_DI0_PODF), 9483e5af17bSbouyer CLK_DIV("ipu2_di1_pre", "ipu2_di1_pre_sel", CSCDR2, IPU2_DI1_PODF), 9493e5af17bSbouyer CLK_DIV("hsi_tx_podf", "hsi_tx_sel", CDCDR, HSI_TX_PODF), 9503e5af17bSbouyer CLK_DIV("ssi1_pred", "ssi1_sel", CS1CDR, SSI1_CLK_PRED), 9513e5af17bSbouyer CLK_DIV("ssi1_podf", "ssi1_pred", CS1CDR, SSI1_CLK_PODF), 9523e5af17bSbouyer CLK_DIV("ssi2_pred", "ssi2_sel", CS2CDR, SSI2_CLK_PRED), 9533e5af17bSbouyer CLK_DIV("ssi2_podf", "ssi2_pred", CS2CDR, SSI2_CLK_PODF), 9543e5af17bSbouyer CLK_DIV("ssi3_pred", "ssi3_sel", CS1CDR, SSI3_CLK_PRED), 9553e5af17bSbouyer CLK_DIV("ssi3_podf", "ssi3_pred", CS1CDR, SSI3_CLK_PODF), 9563e5af17bSbouyer CLK_DIV("usdhc1_podf", "usdhc1_sel", CSCDR1, USDHC1_PODF), 9573e5af17bSbouyer CLK_DIV("usdhc2_podf", "usdhc2_sel", CSCDR1, USDHC2_PODF), 9583e5af17bSbouyer CLK_DIV("usdhc3_podf", "usdhc3_sel", CSCDR1, USDHC3_PODF), 9593e5af17bSbouyer CLK_DIV("usdhc4_podf", "usdhc4_sel", CSCDR1, USDHC4_PODF), 9603e5af17bSbouyer CLK_DIV("enfc_pred", "enfc_sel", CS2CDR, ENFC_CLK_PRED), 9613e5af17bSbouyer CLK_DIV("enfc_podf", "enfc_pred", CS2CDR, ENFC_CLK_PODF), 9623e5af17bSbouyer CLK_DIV("vpu_axi_podf", "vpu_axi_sel", CSCDR1, VPU_AXI_PODF), 9633e5af17bSbouyer CLK_DIV("cko1_podf", "cko1_sel", CCOSR, CLKO1_DIV), 9643e5af17bSbouyer CLK_DIV("cko2_podf", "cko2_sel", CCOSR, CLKO2_DIV), 9653e5af17bSbouyer CLK_DIV("ipg_per", "ipg", CSCMR1, PERCLK_PODF), 9663e5af17bSbouyer CLK_DIV("eim_podf", "eim_sel", CSCMR1, ACLK_PODF), 9673e5af17bSbouyer CLK_DIV("eim_slow_podf", "eim_slow_sel", CSCMR1, ACLK_EIM_SLOW_PODF), 9683e5af17bSbouyer 9693e5af17bSbouyer CLK_DIV_BUSY("axi", "axi_sel", CBCDR, AXI_PODF, CDHIPR, AXI_PODF_BUSY), 9703e5af17bSbouyer CLK_DIV_BUSY("mmdc_ch0_axi_podf", "periph", CBCDR, MMDC_CH0_AXI_PODF, CDHIPR, MMDC_CH0_PODF_BUSY), 9713e5af17bSbouyer CLK_DIV_BUSY("mmdc_ch1_axi_podf", "periph2", CBCDR, MMDC_CH1_AXI_PODF, CDHIPR, MMDC_CH1_PODF_BUSY), 9723e5af17bSbouyer CLK_DIV_BUSY("arm", "pll1_sw", CACRR, ARM_PODF, CDHIPR, ARM_PODF_BUSY), 9733e5af17bSbouyer CLK_DIV_BUSY("ahb", "periph", CBCDR, AHB_PODF, CDHIPR, AHB_PODF_BUSY), 9743e5af17bSbouyer 9753e5af17bSbouyer CLK_DIV_TABLE("pll4_post_div", "pll4_audio", PLL_AUDIO, POST_DIV_SELECT, post_div_tbl), 9763e5af17bSbouyer CLK_DIV_TABLE("pll4_audio_div", "pll4_post_div", MISC2, AUDIO_DIV_LSB, audiovideo_div_tbl), 9773e5af17bSbouyer CLK_DIV_TABLE("pll5_post_div", "pll5_video", PLL_VIDEO, POST_DIV_SELECT, post_div_tbl), 9783e5af17bSbouyer CLK_DIV_TABLE("pll5_video_div", "pll5_post_div", MISC2, VIDEO_DIV, audiovideo_div_tbl), 9793e5af17bSbouyer CLK_DIV_TABLE("enet_ref", "pll6_enet", PLL_ENET, DIV_SELECT, enet_ref_tbl), 9803e5af17bSbouyer 9813e5af17bSbouyer CLK_MUX("step", step_p, CCM, CCSR, STEP_SEL), 9823e5af17bSbouyer CLK_MUX("pll1_sw", pll1_sw_p, CCM, CCSR, PLL1_SW_CLK_SEL), 9833e5af17bSbouyer CLK_MUX("periph_pre", periph_pre_p, CCM, CBCMR, PRE_PERIPH_CLK_SEL), 9843e5af17bSbouyer CLK_MUX("periph2_pre", periph_pre_p, CCM, CBCMR, PRE_PERIPH2_CLK_SEL), 9853e5af17bSbouyer CLK_MUX("periph_clk2_sel", periph_clk2_p, CCM,CBCMR, PERIPH_CLK2_SEL), 9863e5af17bSbouyer CLK_MUX("periph2_clk2_sel", periph2_clk2_p, CCM,CBCMR, PERIPH2_CLK2_SEL), 9873e5af17bSbouyer CLK_MUX("axi_sel", axi_p, CCM, CBCDR, AXI_SEL), 9883e5af17bSbouyer CLK_MUX("asrc_sel", audio_p, CCM, CDCDR, SPDIF1_CLK_SEL), 9893e5af17bSbouyer CLK_MUX("spdif_sel", audio_p, CCM, CDCDR, SPDIF0_CLK_SEL), 9903e5af17bSbouyer CLK_MUX("gpu2d_core_sel", gpu2d_core_p, CCM, CBCMR, GPU2D_CLK_SEL), 9913e5af17bSbouyer CLK_MUX("gpu3d_core_sel", gpu3d_core_p, CCM, CBCMR, GPU3D_CORE_CLK_SEL), 9923e5af17bSbouyer CLK_MUX("gpu3d_shader_sel", gpu3d_shader_p, CCM,CBCMR, GPU3D_SHADER_CLK_SEL), 9933e5af17bSbouyer CLK_MUX("esai_sel", audio_p, CCM, CSCMR2, ESAI_CLK_SEL), 9943e5af17bSbouyer CLK_MUX("ipu1_sel", ipu_p, CCM, CSCDR3, IPU1_HSP_CLK_SEL), 9953e5af17bSbouyer CLK_MUX("ipu2_sel", ipu_p, CCM, CSCDR3, IPU2_HSP_CLK_SEL), 9963e5af17bSbouyer CLK_MUX("ipu1_di0_pre_sel", ipu_di_pre_p, CCM, CHSCCDR, IPU1_DI0_PRE_CLK_SEL), 9973e5af17bSbouyer CLK_MUX("ipu1_di1_pre_sel", ipu_di_pre_p, CCM, CHSCCDR, IPU1_DI1_PRE_CLK_SEL), 9983e5af17bSbouyer CLK_MUX("ipu2_di0_pre_sel", ipu_di_pre_p, CCM, CSCDR2, IPU2_DI0_PRE_CLK_SEL), 9993e5af17bSbouyer CLK_MUX("ipu2_di1_pre_sel", ipu_di_pre_p, CCM, CSCDR2, IPU2_DI1_PRE_CLK_SEL), 10003e5af17bSbouyer CLK_MUX("ipu1_di0_sel", ipu1_di0_p, CCM, CHSCCDR, IPU1_DI0_CLK_SEL), 10013e5af17bSbouyer CLK_MUX("ipu1_di1_sel", ipu1_di1_p, CCM, CHSCCDR, IPU1_DI1_CLK_SEL), 10023e5af17bSbouyer CLK_MUX("ipu2_di0_sel", ipu2_di0_p, CCM, CSCDR2, IPU2_DI0_CLK_SEL), 10033e5af17bSbouyer CLK_MUX("ipu2_di1_sel", ipu2_di1_p, CCM, CSCDR2, IPU2_DI1_CLK_SEL), 10043e5af17bSbouyer CLK_MUX("ldb_di0_sel", ldb_di_p, CCM, CS2CDR, LDB_DI0_CLK_SEL), 10053e5af17bSbouyer CLK_MUX("ldb_di1_sel", ldb_di_p, CCM, CS2CDR, LDB_DI1_CLK_SEL), 10063e5af17bSbouyer CLK_MUX("vdo_axi_sel", vdo_axi_p, CCM, CBCMR, VDOAXI_CLK_SEL), 10073e5af17bSbouyer CLK_MUX("vpu_axi_sel", vpu_axi_p, CCM, CBCMR, VPU_AXI_CLK_SEL), 10083e5af17bSbouyer CLK_MUX("cko1_sel", cko1_p, CCM, CCOSR, CLKO1_SEL), 10093e5af17bSbouyer CLK_MUX("cko2_sel", cko2_p, CCM, CCOSR, CLKO2_SEL), 10103e5af17bSbouyer CLK_MUX("cko", cko_p, CCM, CCOSR, CLK_OUT_SEL), 10113e5af17bSbouyer CLK_MUX("hsi_tx_sel", hsi_tx_p, CCM, CDCDR, HSI_TX_CLK_SEL), 10123e5af17bSbouyer CLK_MUX("pcie_axi_sel", pcie_axi_p, CCM, CBCMR, PCIE_AXI_CLK_SEL), 10133e5af17bSbouyer CLK_MUX("ssi1_sel", ssi_p, CCM, CSCMR1, SSI1_CLK_SEL), 10143e5af17bSbouyer CLK_MUX("ssi2_sel", ssi_p, CCM, CSCMR1, SSI2_CLK_SEL), 10153e5af17bSbouyer CLK_MUX("ssi3_sel", ssi_p, CCM, CSCMR1, SSI3_CLK_SEL), 10163e5af17bSbouyer CLK_MUX("usdhc1_sel", usdhc_p, CCM, CSCMR1, USDHC1_CLK_SEL), 10173e5af17bSbouyer CLK_MUX("usdhc2_sel", usdhc_p, CCM, CSCMR1, USDHC2_CLK_SEL), 10183e5af17bSbouyer CLK_MUX("usdhc3_sel", usdhc_p, CCM, CSCMR1, USDHC3_CLK_SEL), 10193e5af17bSbouyer CLK_MUX("usdhc4_sel", usdhc_p, CCM, CSCMR1, USDHC4_CLK_SEL), 10203e5af17bSbouyer CLK_MUX("eim_sel", eim_p, CCM, CSCMR1, ACLK_SEL), 10213e5af17bSbouyer CLK_MUX("eim_slow_sel", eim_slow_p, CCM, CSCMR1, ACLK_EIM_SLOW_SEL), 10223e5af17bSbouyer CLK_MUX("enfc_sel", enfc_p, CCM, CS2CDR, ENFC_CLK_SEL), 10233e5af17bSbouyer 10243e5af17bSbouyer CLK_MUX("pll1_bypass_src", pll_bypass_src_p, CCM_ANALOG, PLL_ARM, BYPASS_CLK_SRC), 10253e5af17bSbouyer CLK_MUX("pll2_bypass_src", pll_bypass_src_p, CCM_ANALOG, PLL_SYS, BYPASS_CLK_SRC), 10263e5af17bSbouyer CLK_MUX("pll3_bypass_src", pll_bypass_src_p, CCM_ANALOG, PLL_USB1, BYPASS_CLK_SRC), 10273e5af17bSbouyer CLK_MUX("pll4_bypass_src", pll_bypass_src_p, CCM_ANALOG, PLL_AUDIO, BYPASS_CLK_SRC), 10283e5af17bSbouyer CLK_MUX("pll5_bypass_src", pll_bypass_src_p, CCM_ANALOG, PLL_VIDEO, BYPASS_CLK_SRC), 10293e5af17bSbouyer CLK_MUX("pll6_bypass_src", pll_bypass_src_p, CCM_ANALOG, PLL_ENET, BYPASS_CLK_SRC), 10303e5af17bSbouyer CLK_MUX("pll7_bypass_src", pll_bypass_src_p, CCM_ANALOG, PLL_USB2, BYPASS_CLK_SRC), 10313e5af17bSbouyer CLK_MUX("pll1_bypass", pll1_bypass_p, CCM_ANALOG, PLL_ARM, BYPASS), 10323e5af17bSbouyer CLK_MUX("pll2_bypass", pll2_bypass_p, CCM_ANALOG, PLL_SYS, BYPASS), 10333e5af17bSbouyer CLK_MUX("pll3_bypass", pll3_bypass_p, CCM_ANALOG, PLL_USB1, BYPASS), 10343e5af17bSbouyer CLK_MUX("pll4_bypass", pll4_bypass_p, CCM_ANALOG, PLL_AUDIO, BYPASS), 10353e5af17bSbouyer CLK_MUX("pll5_bypass", pll5_bypass_p, CCM_ANALOG, PLL_VIDEO, BYPASS), 10363e5af17bSbouyer CLK_MUX("pll6_bypass", pll6_bypass_p, CCM_ANALOG, PLL_ENET, BYPASS), 10373e5af17bSbouyer CLK_MUX("pll7_bypass", pll7_bypass_p, CCM_ANALOG, PLL_USB2, BYPASS), 10383e5af17bSbouyer 10393e5af17bSbouyer CLK_MUX("lvds1_sel", lvds_p, CCM_ANALOG, MISC1, LVDS_CLK1_SRC), 10403e5af17bSbouyer CLK_MUX("lvds2_sel", lvds_p, CCM_ANALOG, MISC1, LVDS_CLK2_SRC), 10413e5af17bSbouyer 10423e5af17bSbouyer CLK_MUX_BUSY("periph", periph_p, CBCDR, PERIPH_CLK_SEL, CDHIPR, PERIPH_CLK_SEL_BUSY), 10433e5af17bSbouyer CLK_MUX_BUSY("periph2", periph2_p, CBCDR, PERIPH2_CLK_SEL, CDHIPR, PERIPH2_CLK_SEL_BUSY), 10443e5af17bSbouyer 10453e5af17bSbouyer CLK_GATE("apbh_dma", "usdhc3", CCM, CCGR0, APBHDMA_HCLK_ENABLE), 10463e5af17bSbouyer CLK_GATE("asrc", "asrc_podf", CCM, CCGR0, ASRC_CLK_ENABLE), 10473e5af17bSbouyer CLK_GATE("asrc_ipg", "ahb", CCM, CCGR0, ASRC_CLK_ENABLE), 10483e5af17bSbouyer CLK_GATE("asrc_mem", "ahb", CCM, CCGR0, ASRC_CLK_ENABLE), 10493e5af17bSbouyer CLK_GATE("caam_mem", "ahb", CCM, CCGR0, CAAM_SECURE_MEM_CLK_ENABLE), 10503e5af17bSbouyer CLK_GATE("caam_aclk", "ahb", CCM, CCGR0, CAAM_WRAPPER_ACLK_ENABLE), 10513e5af17bSbouyer CLK_GATE("caam_ipg", "ipg", CCM, CCGR0, CAAM_WRAPPER_IPG_ENABLE), 10523e5af17bSbouyer CLK_GATE("can1_ipg", "ipg", CCM, CCGR0, CAN1_CLK_ENABLE), 10533e5af17bSbouyer CLK_GATE("can1_serial", "can_root", CCM, CCGR0, CAN1_SERIAL_CLK_ENABLE), 10543e5af17bSbouyer CLK_GATE("can2_ipg", "ipg", CCM, CCGR0, CAN2_CLK_ENABLE), 10553e5af17bSbouyer CLK_GATE("can2_serial", "can_root", CCM, CCGR0, CAN2_SERIAL_CLK_ENABLE), 10563e5af17bSbouyer CLK_GATE("ecspi1", "ecspi_root", CCM, CCGR1, ECSPI1_CLK_ENABLE), 10573e5af17bSbouyer CLK_GATE("ecspi2", "ecspi_root", CCM, CCGR1, ECSPI2_CLK_ENABLE), 10583e5af17bSbouyer CLK_GATE("ecspi3", "ecspi_root", CCM, CCGR1, ECSPI3_CLK_ENABLE), 10593e5af17bSbouyer CLK_GATE("ecspi4", "ecspi_root", CCM, CCGR1, ECSPI4_CLK_ENABLE), 10603e5af17bSbouyer CLK_GATE("ecspi5", "ecspi_root", CCM, CCGR1, ECSPI5_CLK_ENABLE), 10613e5af17bSbouyer CLK_GATE("enet", "ipg", CCM, CCGR1, ENET_CLK_ENABLE), 10623e5af17bSbouyer CLK_GATE("esai_extal", "esai_podf", CCM, CCGR1, ESAI_CLK_ENABLE), 10633e5af17bSbouyer CLK_GATE("esai_ipg", "ahb", CCM, CCGR1, ESAI_CLK_ENABLE), 10643e5af17bSbouyer CLK_GATE("esai_mem", "ahb", CCM, CCGR1, ESAI_CLK_ENABLE), 10653e5af17bSbouyer CLK_GATE("gpt_ipg", "ipg", CCM, CCGR1, GPT_CLK_ENABLE), 10663e5af17bSbouyer CLK_GATE("gpt_ipg_per", "ipg_per", CCM, CCGR1, GPT_SERIAL_CLK_ENABLE), 10673e5af17bSbouyer CLK_GATE("gpu2d_core", "gpu2d_core_podf", CCM, CCGR1, GPU2D_CLK_ENABLE), 10683e5af17bSbouyer CLK_GATE("gpu3d_core", "gpu3d_core_podf", CCM, CCGR1, GPU3D_CLK_ENABLE), 10693e5af17bSbouyer CLK_GATE("hdmi_iahb", "ahb", CCM, CCGR2, HDMI_TX_IAHBCLK_ENABLE), 10703e5af17bSbouyer CLK_GATE("hdmi_isfr", "video_27m", CCM, CCGR2, HDMI_TX_ISFRCLK_ENABLE), 10713e5af17bSbouyer CLK_GATE("i2c1", "ipg_per", CCM, CCGR2, I2C1_SERIAL_CLK_ENABLE), 10723e5af17bSbouyer CLK_GATE("i2c2", "ipg_per", CCM, CCGR2, I2C2_SERIAL_CLK_ENABLE), 10733e5af17bSbouyer CLK_GATE("i2c3", "ipg_per", CCM, CCGR2, I2C3_SERIAL_CLK_ENABLE), 10743e5af17bSbouyer CLK_GATE("iim", "ipg", CCM, CCGR2, IIM_CLK_ENABLE), 10753e5af17bSbouyer CLK_GATE("enfc", "enfc_podf", CCM, CCGR2, IOMUX_IPT_CLK_IO_CLK_ENABLE), 10763e5af17bSbouyer CLK_GATE("vdoa", "vdo_axi", CCM, CCGR2, IPSYNC_VDOA_IPG_CLK_ENABLE), 10773e5af17bSbouyer CLK_GATE("ipu1", "ipu1_podf", CCM, CCGR3, IPU1_IPU_CLK_ENABLE), 10783e5af17bSbouyer CLK_GATE("ipu1_di0", "ipu1_di0_sel", CCM, CCGR3, IPU1_IPU_DI0_CLK_ENABLE), 10793e5af17bSbouyer CLK_GATE("ipu1_di1", "ipu1_di1_sel", CCM, CCGR3, IPU1_IPU_DI1_CLK_ENABLE), 10803e5af17bSbouyer CLK_GATE("ipu2", "ipu2_podf", CCM, CCGR3, IPU2_IPU_CLK_ENABLE), 10813e5af17bSbouyer CLK_GATE("ipu2_di0", "ipu2_di0_sel", CCM, CCGR3, IPU2_IPU_DI0_CLK_ENABLE), 10823e5af17bSbouyer CLK_GATE("ldb_di0", "ldb_di0_podf", CCM, CCGR3, LDB_DI0_CLK_ENABLE), 10833e5af17bSbouyer CLK_GATE("ldb_di1", "ldb_di1_podf", CCM, CCGR3, LDB_DI1_CLK_ENABLE), 10843e5af17bSbouyer CLK_GATE("ipu2_di1", "ipu2_di1_sel", CCM, CCGR3, IPU2_IPU_DI1_CLK_ENABLE), 10853e5af17bSbouyer CLK_GATE("hsi_tx", "hsi_tx_podf", CCM, CCGR3, MIPI_CORE_CFG_CLK_ENABLE), 10863e5af17bSbouyer CLK_GATE("mipi_core_cfg", "video_27m", CCM, CCGR3, MIPI_CORE_CFG_CLK_ENABLE), 10873e5af17bSbouyer CLK_GATE("mipi_ipg", "ipg", CCM, CCGR3, MIPI_CORE_CFG_CLK_ENABLE), 10883e5af17bSbouyer CLK_GATE("mlb", "axi", CCM, CCGR3, MLB_CLK_ENABLE), 10893e5af17bSbouyer CLK_GATE("mmdc_ch0_axi", "mmdc_ch0_axi_podf", CCM, CCGR3, MMDC_CORE_ACLK_FAST_CORE_P0_ENABLE), 10903e5af17bSbouyer CLK_GATE("mmdc_ch1_axi", "mmdc_ch1_axi_podf", CCM, CCGR3, MMDC_CORE_ACLK_FAST_CORE_P1_ENABLE), 10913e5af17bSbouyer CLK_GATE("ocram", "ahb", CCM, CCGR3, OCRAM_CLK_ENABLE), 10923e5af17bSbouyer CLK_GATE("openvg_axi", "axi", CCM, CCGR3, OPENVGAXICLK_CLK_ROOT_ENABLE), 10933e5af17bSbouyer CLK_GATE("pcie_axi", "pcie_axi_sel", CCM, CCGR4, PCIE_ROOT_ENABLE), 10943e5af17bSbouyer CLK_GATE("per1_bch", "usdhc3", CCM, CCGR4, PL301_MX6QPER1_BCHCLK_ENABLE), 10953e5af17bSbouyer CLK_GATE("pwm1", "ipg_per", CCM, CCGR4, PWM1_CLK_ENABLE), 10963e5af17bSbouyer CLK_GATE("pwm2", "ipg_per", CCM, CCGR4, PWM2_CLK_ENABLE), 10973e5af17bSbouyer CLK_GATE("pwm3", "ipg_per", CCM, CCGR4, PWM3_CLK_ENABLE), 10983e5af17bSbouyer CLK_GATE("pwm4", "ipg_per", CCM, CCGR4, PWM4_CLK_ENABLE), 10993e5af17bSbouyer CLK_GATE("gpmi_bch_apb", "usdhc3", CCM, CCGR4, RAWNAND_U_BCH_INPUT_APB_CLK_ENABLE), 11003e5af17bSbouyer CLK_GATE("gpmi_bch", "usdhc4", CCM, CCGR4, RAWNAND_U_GPMI_BCH_INPUT_BCH_CLK_ENABLE), 11013e5af17bSbouyer CLK_GATE("gpmi_io", "enfc", CCM, CCGR4, RAWNAND_U_GPMI_BCH_INPUT_GPMI_IO_CLK_ENABLE), 11023e5af17bSbouyer CLK_GATE("gpmi_apb", "usdhc3", CCM, CCGR4, RAWNAND_U_GPMI_INPUT_APB_CLK_ENABLE), 11033e5af17bSbouyer CLK_GATE("rom", "ahb", CCM, CCGR5, ROM_CLK_ENABLE), 11043e5af17bSbouyer CLK_GATE("sata", "ahb", CCM, CCGR5, SATA_CLK_ENABLE), 11053e5af17bSbouyer CLK_GATE("sdma", "ahb", CCM, CCGR5, SDMA_CLK_ENABLE), 11063e5af17bSbouyer CLK_GATE("spba", "ipg", CCM, CCGR5, SPBA_CLK_ENABLE), 11073e5af17bSbouyer CLK_GATE("spdif", "spdif_podf", CCM, CCGR5, SPDIF_CLK_ENABLE), 11083e5af17bSbouyer CLK_GATE("spdif_gclk", "ipg", CCM, CCGR5, SPDIF_CLK_ENABLE), 11093e5af17bSbouyer CLK_GATE("ssi1_ipg", "ipg", CCM, CCGR5, SSI1_CLK_ENABLE), 11103e5af17bSbouyer CLK_GATE("ssi2_ipg", "ipg", CCM, CCGR5, SSI2_CLK_ENABLE), 11113e5af17bSbouyer CLK_GATE("ssi3_ipg", "ipg", CCM, CCGR5, SSI3_CLK_ENABLE), 11123e5af17bSbouyer CLK_GATE("ssi1", "ssi1_podf", CCM, CCGR5, SSI1_CLK_ENABLE), 11133e5af17bSbouyer CLK_GATE("ssi2", "ssi2_podf", CCM, CCGR5, SSI2_CLK_ENABLE), 11143e5af17bSbouyer CLK_GATE("ssi3", "ssi3_podf", CCM, CCGR5, SSI3_CLK_ENABLE), 11153e5af17bSbouyer CLK_GATE("uart_ipg", "ipg", CCM, CCGR5, UART_CLK_ENABLE), 11163e5af17bSbouyer CLK_GATE("uart_serial", "uart_serial_podf", CCM, CCGR5, UART_SERIAL_CLK_ENABLE), 11173e5af17bSbouyer CLK_GATE("usboh3", "ipg", CCM, CCGR6, USBOH3_CLK_ENABLE), 11183e5af17bSbouyer CLK_GATE("usdhc1", "usdhc1_podf", CCM, CCGR6, USDHC1_CLK_ENABLE), 11193e5af17bSbouyer CLK_GATE("usdhc2", "usdhc2_podf", CCM, CCGR6, USDHC2_CLK_ENABLE), 11203e5af17bSbouyer CLK_GATE("usdhc3", "usdhc3_podf", CCM, CCGR6, USDHC3_CLK_ENABLE), 11213e5af17bSbouyer CLK_GATE("usdhc4", "usdhc4_podf", CCM, CCGR6, USDHC4_CLK_ENABLE), 11223e5af17bSbouyer CLK_GATE("eim_slow", "eim_slow_podf", CCM, CCGR6, EIM_SLOW_CLK_ENABLE), 11233e5af17bSbouyer CLK_GATE("vdo_axi", "vdo_axi_sel", CCM, CCGR6, VDOAXICLK_CLK_ENABLE), 11243e5af17bSbouyer CLK_GATE("vpu_axi", "vpu_axi_podf", CCM, CCGR6, VPU_CLK_ENABLE), 11253e5af17bSbouyer CLK_GATE("cko1", "cko1_podf", CCM, CCOSR, CLKO1_EN), 11263e5af17bSbouyer CLK_GATE("cko2", "cko2_podf", CCM, CCOSR, CLKO2_EN), 11273e5af17bSbouyer 11283e5af17bSbouyer CLK_GATE("sata_ref_100m", "sata_ref", CCM_ANALOG, PLL_ENET, ENABLE_100M), 11293e5af17bSbouyer CLK_GATE("pcie_ref_125m", "pcie_ref", CCM_ANALOG, PLL_ENET, ENABLE_125M), 11303e5af17bSbouyer 11313e5af17bSbouyer CLK_GATE("pll1_sys", "pll1_bypass", CCM_ANALOG, PLL_ARM, ENABLE), 11323e5af17bSbouyer CLK_GATE("pll2_bus", "pll2_bypass", CCM_ANALOG, PLL_SYS, ENABLE), 11333e5af17bSbouyer CLK_GATE("pll3_usb_otg", "pll3_bypass", CCM_ANALOG, PLL_USB1, ENABLE), 11343e5af17bSbouyer CLK_GATE("pll4_audio", "pll4_bypass", CCM_ANALOG, PLL_AUDIO, ENABLE), 11353e5af17bSbouyer CLK_GATE("pll5_video", "pll5_bypass", CCM_ANALOG, PLL_VIDEO, ENABLE), 11363e5af17bSbouyer CLK_GATE("pll6_enet", "pll6_bypass", CCM_ANALOG, PLL_ENET, ENABLE), 11373e5af17bSbouyer CLK_GATE("pll7_usb_host", "pll7_bypass", CCM_ANALOG, PLL_USB2, ENABLE), 11383e5af17bSbouyer 11393e5af17bSbouyer CLK_GATE("usbphy1", "pll3_usb_otg", CCM_ANALOG, PLL_USB1, RESERVED), 11403e5af17bSbouyer CLK_GATE("usbphy2", "pll7_usb_host", CCM_ANALOG, PLL_USB2, RESERVED), 11413e5af17bSbouyer 11423e5af17bSbouyer CLK_GATE_EXCLUSIVE("lvds1_gate", "lvds1_sel", CCM_ANALOG, MISC1, LVDS_CLK1_OBEN, LVDS_CLK1_IBEN), 11433e5af17bSbouyer CLK_GATE_EXCLUSIVE("lvds2_gate", "lvds2_sel", CCM_ANALOG, MISC1, LVDS_CLK2_OBEN, LVDS_CLK2_IBEN), 11443e5af17bSbouyer CLK_GATE_EXCLUSIVE("lvds1_in", "anaclk1", CCM_ANALOG, MISC1, LVDS_CLK1_IBEN, LVDS_CLK1_OBEN), 11453e5af17bSbouyer CLK_GATE_EXCLUSIVE("lvds2_in", "anaclk2", CCM_ANALOG, MISC1, LVDS_CLK2_IBEN, LVDS_CLK2_OBEN), 11463e5af17bSbouyer }; 11473e5af17bSbouyer 11485fd4005dSbouyer struct imxccm_init_parent imxccm6q_init_parents[] = { 11495fd4005dSbouyer { "pll1_bypass", "pll1" }, 11505fd4005dSbouyer { "pll2_bypass", "pll2" }, 11515fd4005dSbouyer { "pll3_bypass", "pll3" }, 11525fd4005dSbouyer { "pll4_bypass", "pll4" }, 11535fd4005dSbouyer { "pll5_bypass", "pll5" }, 11545fd4005dSbouyer { "pll6_bypass", "pll6" }, 11555fd4005dSbouyer { "pll7_bypass", "pll7" }, 11565fd4005dSbouyer { "lvds1_sel", "sata_ref_100m" }, 11575fd4005dSbouyer { 0 }, 11585fd4005dSbouyer }; 11595fd4005dSbouyer 11605fd4005dSbouyer 11613e5af17bSbouyer static struct imx6_clk * 11623e5af17bSbouyer imx6q_clk_find_by_id(struct imx6ccm_softc *sc, u_int clock_id) 11633e5af17bSbouyer { 11643e5af17bSbouyer for (int n = 0; n < __arraycount(imx6q_clock_ids); n++) { 11653e5af17bSbouyer if (imx6q_clock_ids[n].id == clock_id) { 11663e5af17bSbouyer const char *name = imx6q_clock_ids[n].name; 11673e5af17bSbouyer return imx6_clk_find(sc, name); 11683e5af17bSbouyer } 11693e5af17bSbouyer } 11703e5af17bSbouyer 11713e5af17bSbouyer return NULL; 11723e5af17bSbouyer } 11733e5af17bSbouyer 11743e5af17bSbouyer static struct clk * 11753e5af17bSbouyer imx6q_get_clock_by_id(struct imx6ccm_softc *sc, u_int clock_id) 11763e5af17bSbouyer { 11773e5af17bSbouyer struct imx6_clk *iclk; 11783e5af17bSbouyer iclk = imx6q_clk_find_by_id(sc, clock_id); 11793e5af17bSbouyer 11803e5af17bSbouyer if (iclk == NULL) 11813e5af17bSbouyer return NULL; 11823e5af17bSbouyer 11833e5af17bSbouyer return &iclk->base; 11843e5af17bSbouyer } 11853e5af17bSbouyer 11863e5af17bSbouyer static struct clk *imx6q_clk_decode(device_t, int, const void *, size_t); 11873e5af17bSbouyer 11883e5af17bSbouyer static const struct fdtbus_clock_controller_func imx6q_ccm_fdtclock_funcs = { 11893e5af17bSbouyer .decode = imx6q_clk_decode 11908644267aSskrll }; 11918644267aSskrll 11928644267aSskrll static struct clk * 11933e5af17bSbouyer imx6q_clk_decode(device_t dev, int cc_phandle, const void *data, size_t len) 11948644267aSskrll { 11958644267aSskrll struct clk *clk; 11963e5af17bSbouyer struct imx6ccm_softc *sc = device_private(dev); 11978644267aSskrll 11988644267aSskrll /* #clock-cells should be 1 */ 11998644267aSskrll if (len != 4) 12008644267aSskrll return NULL; 12018644267aSskrll 12028644267aSskrll const u_int clock_id = be32dec(data); 12038644267aSskrll 12043e5af17bSbouyer clk = imx6q_get_clock_by_id(sc, clock_id); 12058644267aSskrll if (clk) 12068644267aSskrll return clk; 12078644267aSskrll 12088644267aSskrll return NULL; 12098644267aSskrll } 12108644267aSskrll 12118644267aSskrll static void 12123e5af17bSbouyer imx6q_clk_fixed_from_fdt(struct imx6ccm_softc *sc, const char *name) 12138644267aSskrll { 12143e5af17bSbouyer struct imx6_clk *iclk = (struct imx6_clk *)imx6_get_clock(sc, name); 12158644267aSskrll 12163e5af17bSbouyer KASSERTMSG((iclk != NULL), "failed to find clock %s", name); 12178644267aSskrll 12188644267aSskrll char *path = kmem_asprintf("/clocks/%s", name); 12198644267aSskrll int phandle = OF_finddevice(path); 12203e5af17bSbouyer KASSERTMSG((phandle >= 0), "failed to find device %s", path); 12218644267aSskrll kmem_free(path, strlen(path) + 1); 12228644267aSskrll 12238644267aSskrll if (of_getprop_uint32(phandle, "clock-frequency", &iclk->clk.fixed.rate) != 0) 12248644267aSskrll iclk->clk.fixed.rate = 0; 12258644267aSskrll } 12268644267aSskrll 12273e5af17bSbouyer static int imx6qccm_match(device_t, cfdata_t, void *); 12283e5af17bSbouyer static void imx6qccm_attach(device_t, device_t, void *); 12298644267aSskrll 12308644267aSskrll CFATTACH_DECL_NEW(imx6ccm, sizeof(struct imx6ccm_softc), 12313e5af17bSbouyer imx6qccm_match, imx6qccm_attach, NULL, NULL); 12328644267aSskrll 12336e54367aSthorpej static const struct device_compatible_entry compat_data[] = { 12346e54367aSthorpej { .compat = "fsl,imx6q-ccm" }, 12356e54367aSthorpej DEVICE_COMPAT_EOL 12366e54367aSthorpej }; 12376e54367aSthorpej 12388644267aSskrll static int 12393e5af17bSbouyer imx6qccm_match(device_t parent, cfdata_t cfdata, void *aux) 12408644267aSskrll { 12418644267aSskrll struct fdt_attach_args * const faa = aux; 12428644267aSskrll 12436e54367aSthorpej return of_compatible_match(faa->faa_phandle, compat_data); 12448644267aSskrll } 12458644267aSskrll 12468644267aSskrll static void 12473e5af17bSbouyer imx6qccm_attach(device_t parent, device_t self, void *aux) 12488644267aSskrll { 12498644267aSskrll struct imx6ccm_softc * const sc = device_private(self); 12508644267aSskrll struct fdt_attach_args * const faa = aux; 12518644267aSskrll bus_addr_t addr; 12528644267aSskrll bus_size_t size; 12538644267aSskrll 12548644267aSskrll if (fdtbus_get_reg(faa->faa_phandle, 0, &addr, &size) != 0) { 12558644267aSskrll aprint_error(": couldn't get registers\n"); 12568644267aSskrll return; 12578644267aSskrll } 12588644267aSskrll 12598644267aSskrll sc->sc_dev = self; 12608644267aSskrll sc->sc_iot = faa->faa_bst; 12618644267aSskrll 12628644267aSskrll if (bus_space_map(sc->sc_iot, addr, size, 0, &sc->sc_ioh)) { 12638644267aSskrll aprint_error(": can't map ccm registers\n"); 12648644267aSskrll return; 12658644267aSskrll } 12668644267aSskrll 1267*97835a6fSskrll int phandle = OF_finddevice("/soc/bus/anatop"); 12683e5af17bSbouyer 12693e5af17bSbouyer if (phandle == -1) { 12703e5af17bSbouyer aprint_error(": can't find anatop device\n"); 12713e5af17bSbouyer return; 12723e5af17bSbouyer } 12733e5af17bSbouyer 12743e5af17bSbouyer if (fdtbus_get_reg(phandle, 0, &addr, &size) != 0) { 12753e5af17bSbouyer aprint_error(": can't get anatop registers\n"); 12763e5af17bSbouyer return; 12773e5af17bSbouyer } 12783e5af17bSbouyer 12798644267aSskrll 12808644267aSskrll if (bus_space_map(sc->sc_iot, addr, size, 0, &sc->sc_ioh_analog)) { 12818644267aSskrll aprint_error(": can't map anatop registers\n"); 12828644267aSskrll return; 12838644267aSskrll } 12848644267aSskrll 12858644267aSskrll aprint_naive("\n"); 12868644267aSskrll aprint_normal(": Clock Control Module\n"); 12878644267aSskrll 12885fd4005dSbouyer imx6ccm_attach_common(self, &imx6q_clks[0], __arraycount(imx6q_clks), 12895fd4005dSbouyer imxccm6q_init_parents); 1290035957a9Sskrll 12913e5af17bSbouyer imx6q_clk_fixed_from_fdt(sc, "ckil"); 1292*97835a6fSskrll imx6q_clk_fixed_from_fdt(sc, "ckih1"); 12933e5af17bSbouyer imx6q_clk_fixed_from_fdt(sc, "osc"); 12948644267aSskrll 12958644267aSskrll fdtbus_register_clock_controller(self, faa->faa_phandle, 12963e5af17bSbouyer &imx6q_ccm_fdtclock_funcs); 12978644267aSskrll } 1298