Home | History | Annotate | Line # | Download | only in nxp
      1  1.4   skrll /*	$NetBSD: imx6sx_clk.c,v 1.4 2024/09/01 07:55:27 skrll Exp $	*/
      2  1.1  bouyer 
      3  1.1  bouyer /*-
      4  1.1  bouyer  * Copyright (c) 2019 Genetec Corporation.  All rights reserved.
      5  1.1  bouyer  * Written by Hashimoto Kenichi for Genetec Corporation.
      6  1.1  bouyer  *
      7  1.1  bouyer  * Redistribution and use in source and binary forms, with or without
      8  1.1  bouyer  * modification, are permitted provided that the following conditions
      9  1.1  bouyer  * are met:
     10  1.1  bouyer  * 1. Redistributions of source code must retain the above copyright
     11  1.1  bouyer  *    notice, this list of conditions and the following disclaimer.
     12  1.1  bouyer  * 2. Redistributions in binary form must reproduce the above copyright
     13  1.1  bouyer  *    notice, this list of conditions and the following disclaimer in the
     14  1.1  bouyer  *    documentation and/or other materials provided with the distribution.
     15  1.1  bouyer  *
     16  1.1  bouyer  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     17  1.1  bouyer  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     18  1.1  bouyer  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     19  1.1  bouyer  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     20  1.1  bouyer  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
     21  1.1  bouyer  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     22  1.1  bouyer  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
     23  1.1  bouyer  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     24  1.1  bouyer  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     25  1.1  bouyer  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     26  1.1  bouyer  * SUCH DAMAGE.
     27  1.1  bouyer  */
     28  1.1  bouyer 
     29  1.1  bouyer #include <sys/cdefs.h>
     30  1.4   skrll __KERNEL_RCSID(0, "$NetBSD: imx6sx_clk.c,v 1.4 2024/09/01 07:55:27 skrll Exp $");
     31  1.1  bouyer 
     32  1.1  bouyer #include "opt_fdt.h"
     33  1.1  bouyer 
     34  1.1  bouyer #include <sys/types.h>
     35  1.1  bouyer #include <sys/time.h>
     36  1.1  bouyer #include <sys/bus.h>
     37  1.1  bouyer #include <sys/device.h>
     38  1.1  bouyer #include <sys/sysctl.h>
     39  1.1  bouyer #include <sys/cpufreq.h>
     40  1.1  bouyer #include <sys/kmem.h>
     41  1.1  bouyer #include <sys/param.h>
     42  1.1  bouyer 
     43  1.1  bouyer #include <arm/nxp/imx6_ccmreg.h>
     44  1.1  bouyer #include <arm/nxp/imx6_ccmvar.h>
     45  1.1  bouyer 
     46  1.1  bouyer #include <dev/clk/clk_backend.h>
     47  1.1  bouyer #include <dev/fdt/fdtvar.h>
     48  1.1  bouyer 
     49  1.1  bouyer /* Clock IDs - should match dt-bindings/clock/imx6sx-clock.h */
     50  1.1  bouyer 
     51  1.1  bouyer #define IMX6SXCLK_DUMMY				0
     52  1.1  bouyer #define IMX6SXCLK_CKIL				1
     53  1.1  bouyer #define IMX6SXCLK_CKIH				2
     54  1.1  bouyer #define IMX6SXCLK_OSC				3
     55  1.1  bouyer #define IMX6SXCLK_PLL1_SYS			4
     56  1.1  bouyer #define IMX6SXCLK_PLL2_BUS			5
     57  1.1  bouyer #define IMX6SXCLK_PLL3_USB_OTG			6
     58  1.1  bouyer #define IMX6SXCLK_PLL4_AUDIO			7
     59  1.1  bouyer #define IMX6SXCLK_PLL5_VIDEO			8
     60  1.1  bouyer #define IMX6SXCLK_PLL6_ENET			9
     61  1.1  bouyer #define IMX6SXCLK_PLL7_USB_HOST			10
     62  1.1  bouyer #define IMX6SXCLK_USBPHY1			11
     63  1.1  bouyer #define IMX6SXCLK_USBPHY2			12
     64  1.1  bouyer #define IMX6SXCLK_USBPHY1_GATE			13
     65  1.1  bouyer #define IMX6SXCLK_USBPHY2_GATE			14
     66  1.1  bouyer #define IMX6SXCLK_PCIE_REF			15
     67  1.1  bouyer #define IMX6SXCLK_PCIE_REF_125M			16
     68  1.1  bouyer #define IMX6SXCLK_ENET_REF			17
     69  1.1  bouyer #define IMX6SXCLK_PLL2_PFD0			18
     70  1.1  bouyer #define IMX6SXCLK_PLL2_PFD1			19
     71  1.1  bouyer #define IMX6SXCLK_PLL2_PFD2			20
     72  1.1  bouyer #define IMX6SXCLK_PLL2_PFD3			21
     73  1.1  bouyer #define IMX6SXCLK_PLL3_PFD0			22
     74  1.1  bouyer #define IMX6SXCLK_PLL3_PFD1			23
     75  1.1  bouyer #define IMX6SXCLK_PLL3_PFD2			24
     76  1.1  bouyer #define IMX6SXCLK_PLL3_PFD3			25
     77  1.1  bouyer #define IMX6SXCLK_PLL2_198M			26
     78  1.1  bouyer #define IMX6SXCLK_PLL3_120M			27
     79  1.1  bouyer #define IMX6SXCLK_PLL3_80M			28
     80  1.1  bouyer #define IMX6SXCLK_PLL3_60M			29
     81  1.1  bouyer #define IMX6SXCLK_TWD				30
     82  1.1  bouyer #define IMX6SXCLK_PLL4_POST_DIV			31
     83  1.1  bouyer #define IMX6SXCLK_PLL4_AUDIO_DIV		32
     84  1.1  bouyer #define IMX6SXCLK_PLL5_POST_DIV			33
     85  1.1  bouyer #define IMX6SXCLK_PLL5_VIDEO_DIV		34
     86  1.1  bouyer #define IMX6SXCLK_STEP				35
     87  1.1  bouyer #define IMX6SXCLK_PLL1_SW			36
     88  1.1  bouyer #define IMX6SXCLK_OCRAM_SEL			37
     89  1.1  bouyer #define IMX6SXCLK_PERIPH_PRE			38
     90  1.1  bouyer #define IMX6SXCLK_PERIPH2_PRE			39
     91  1.1  bouyer #define IMX6SXCLK_PERIPH_CLK2_SEL		40
     92  1.1  bouyer #define IMX6SXCLK_PERIPH2_CLK2_SEL		41
     93  1.1  bouyer #define IMX6SXCLK_PCIE_AXI_SEL			42
     94  1.1  bouyer #define IMX6SXCLK_GPU_AXI_SEL			43
     95  1.1  bouyer #define IMX6SXCLK_GPU_CORE_SEL			44
     96  1.1  bouyer #define IMX6SXCLK_EIM_SLOW_SEL			45
     97  1.1  bouyer #define IMX6SXCLK_USDHC1_SEL			46
     98  1.1  bouyer #define IMX6SXCLK_USDHC2_SEL			47
     99  1.1  bouyer #define IMX6SXCLK_USDHC3_SEL			48
    100  1.1  bouyer #define IMX6SXCLK_USDHC4_SEL			49
    101  1.1  bouyer #define IMX6SXCLK_SSI1_SEL			50
    102  1.1  bouyer #define IMX6SXCLK_SSI2_SEL			51
    103  1.1  bouyer #define IMX6SXCLK_SSI3_SEL			52
    104  1.1  bouyer #define IMX6SXCLK_QSPI1_SEL			53
    105  1.1  bouyer #define IMX6SXCLK_PERCLK_SEL			54
    106  1.1  bouyer #define IMX6SXCLK_VID_SEL			55
    107  1.1  bouyer #define IMX6SXCLK_ESAI_SEL			56
    108  1.1  bouyer #define IMX6SXCLK_LDB_DI0_DIV_SEL		57
    109  1.1  bouyer #define IMX6SXCLK_LDB_DI1_DIV_SEL		58
    110  1.1  bouyer #define IMX6SXCLK_CAN_SEL			59
    111  1.1  bouyer #define IMX6SXCLK_UART_SEL			60
    112  1.1  bouyer #define IMX6SXCLK_QSPI2_SEL			61
    113  1.1  bouyer #define IMX6SXCLK_LDB_DI1_SEL			62
    114  1.1  bouyer #define IMX6SXCLK_LDB_DI0_SEL			63
    115  1.1  bouyer #define IMX6SXCLK_SPDIF_SEL			64
    116  1.1  bouyer #define IMX6SXCLK_AUDIO_SEL			65
    117  1.1  bouyer #define IMX6SXCLK_ENET_PRE_SEL			66
    118  1.1  bouyer #define IMX6SXCLK_ENET_SEL			67
    119  1.1  bouyer #define IMX6SXCLK_M4_PRE_SEL			68
    120  1.1  bouyer #define IMX6SXCLK_M4_SEL			69
    121  1.1  bouyer #define IMX6SXCLK_ECSPI_SEL			70
    122  1.1  bouyer #define IMX6SXCLK_LCDIF1_PRE_SEL		71
    123  1.1  bouyer #define IMX6SXCLK_LCDIF2_PRE_SEL		72
    124  1.1  bouyer #define IMX6SXCLK_LCDIF1_SEL			73
    125  1.1  bouyer #define IMX6SXCLK_LCDIF2_SEL			74
    126  1.1  bouyer #define IMX6SXCLK_DISPLAY_SEL			75
    127  1.1  bouyer #define IMX6SXCLK_CSI_SEL			76
    128  1.1  bouyer #define IMX6SXCLK_CKO1_SEL			77
    129  1.1  bouyer #define IMX6SXCLK_CKO2_SEL			78
    130  1.1  bouyer #define IMX6SXCLK_CKO				79
    131  1.1  bouyer #define IMX6SXCLK_PERIPH_CLK2			80
    132  1.1  bouyer #define IMX6SXCLK_PERIPH2_CLK2			81
    133  1.1  bouyer #define IMX6SXCLK_IPG				82
    134  1.1  bouyer #define IMX6SXCLK_GPU_CORE_PODF			83
    135  1.1  bouyer #define IMX6SXCLK_GPU_AXI_PODF			84
    136  1.1  bouyer #define IMX6SXCLK_LCDIF1_PODF			85
    137  1.1  bouyer #define IMX6SXCLK_QSPI1_PODF			86
    138  1.1  bouyer #define IMX6SXCLK_EIM_SLOW_PODF			87
    139  1.1  bouyer #define IMX6SXCLK_LCDIF2_PODF			88
    140  1.1  bouyer #define IMX6SXCLK_PERCLK			89
    141  1.1  bouyer #define IMX6SXCLK_VID_PODF			90
    142  1.1  bouyer #define IMX6SXCLK_CAN_PODF			91
    143  1.1  bouyer #define IMX6SXCLK_USDHC1_PODF			92
    144  1.1  bouyer #define IMX6SXCLK_USDHC2_PODF			93
    145  1.1  bouyer #define IMX6SXCLK_USDHC3_PODF			94
    146  1.1  bouyer #define IMX6SXCLK_USDHC4_PODF			95
    147  1.1  bouyer #define IMX6SXCLK_UART_PODF			96
    148  1.1  bouyer #define IMX6SXCLK_ESAI_PRED			97
    149  1.1  bouyer #define IMX6SXCLK_ESAI_PODF			98
    150  1.1  bouyer #define IMX6SXCLK_SSI3_PRED			99
    151  1.1  bouyer #define IMX6SXCLK_SSI3_PODF			100
    152  1.1  bouyer #define IMX6SXCLK_SSI1_PRED			101
    153  1.1  bouyer #define IMX6SXCLK_SSI1_PODF			102
    154  1.1  bouyer #define IMX6SXCLK_QSPI2_PRED			103
    155  1.1  bouyer #define IMX6SXCLK_QSPI2_PODF			104
    156  1.1  bouyer #define IMX6SXCLK_SSI2_PRED			105
    157  1.1  bouyer #define IMX6SXCLK_SSI2_PODF			106
    158  1.1  bouyer #define IMX6SXCLK_SPDIF_PRED			107
    159  1.1  bouyer #define IMX6SXCLK_SPDIF_PODF			108
    160  1.1  bouyer #define IMX6SXCLK_AUDIO_PRED			109
    161  1.1  bouyer #define IMX6SXCLK_AUDIO_PODF			110
    162  1.1  bouyer #define IMX6SXCLK_ENET_PODF			111
    163  1.1  bouyer #define IMX6SXCLK_M4_PODF			112
    164  1.1  bouyer #define IMX6SXCLK_ECSPI_PODF			113
    165  1.1  bouyer #define IMX6SXCLK_LCDIF1_PRED			114
    166  1.1  bouyer #define IMX6SXCLK_LCDIF2_PRED			115
    167  1.1  bouyer #define IMX6SXCLK_DISPLAY_PODF			116
    168  1.1  bouyer #define IMX6SXCLK_CSI_PODF			117
    169  1.1  bouyer #define IMX6SXCLK_LDB_DI0_DIV_3_5		118
    170  1.1  bouyer #define IMX6SXCLK_LDB_DI0_DIV_7			119
    171  1.1  bouyer #define IMX6SXCLK_LDB_DI1_DIV_3_5		120
    172  1.1  bouyer #define IMX6SXCLK_LDB_DI1_DIV_7			121
    173  1.1  bouyer #define IMX6SXCLK_CKO1_PODF			122
    174  1.1  bouyer #define IMX6SXCLK_CKO2_PODF			123
    175  1.1  bouyer #define IMX6SXCLK_PERIPH			124
    176  1.1  bouyer #define IMX6SXCLK_PERIPH2			125
    177  1.1  bouyer #define IMX6SXCLK_OCRAM				126
    178  1.1  bouyer #define IMX6SXCLK_AHB				127
    179  1.1  bouyer #define IMX6SXCLK_MMDC_PODF			128
    180  1.1  bouyer #define IMX6SXCLK_ARM				129
    181  1.1  bouyer #define IMX6SXCLK_AIPS_TZ1			130
    182  1.1  bouyer #define IMX6SXCLK_AIPS_TZ2			131
    183  1.1  bouyer #define IMX6SXCLK_APBH_DMA			132
    184  1.1  bouyer #define IMX6SXCLK_ASRC_GATE			133
    185  1.1  bouyer #define IMX6SXCLK_CAAM_MEM			134
    186  1.1  bouyer #define IMX6SXCLK_CAAM_ACLK			135
    187  1.1  bouyer #define IMX6SXCLK_CAAM_IPG			136
    188  1.1  bouyer #define IMX6SXCLK_CAN1_IPG			137
    189  1.1  bouyer #define IMX6SXCLK_CAN1_SERIAL			138
    190  1.1  bouyer #define IMX6SXCLK_CAN2_IPG			139
    191  1.1  bouyer #define IMX6SXCLK_CAN2_SERIAL			140
    192  1.1  bouyer #define IMX6SXCLK_CPU_DEBUG			141
    193  1.1  bouyer #define IMX6SXCLK_DCIC1				142
    194  1.1  bouyer #define IMX6SXCLK_DCIC2				143
    195  1.1  bouyer #define IMX6SXCLK_AIPS_TZ3			144
    196  1.1  bouyer #define IMX6SXCLK_ECSPI1			145
    197  1.1  bouyer #define IMX6SXCLK_ECSPI2			146
    198  1.1  bouyer #define IMX6SXCLK_ECSPI3			147
    199  1.1  bouyer #define IMX6SXCLK_ECSPI4			148
    200  1.1  bouyer #define IMX6SXCLK_ECSPI5			149
    201  1.1  bouyer #define IMX6SXCLK_EPIT1				150
    202  1.1  bouyer #define IMX6SXCLK_EPIT2				151
    203  1.1  bouyer #define IMX6SXCLK_ESAI_EXTAL			152
    204  1.1  bouyer #define IMX6SXCLK_WAKEUP			153
    205  1.1  bouyer #define IMX6SXCLK_GPT_BUS			154
    206  1.1  bouyer #define IMX6SXCLK_GPT_SERIAL			155
    207  1.1  bouyer #define IMX6SXCLK_GPU				156
    208  1.1  bouyer #define IMX6SXCLK_OCRAM_S			157
    209  1.1  bouyer #define IMX6SXCLK_CANFD				158
    210  1.1  bouyer #define IMX6SXCLK_CSI				159
    211  1.1  bouyer #define IMX6SXCLK_I2C1				160
    212  1.1  bouyer #define IMX6SXCLK_I2C2				161
    213  1.1  bouyer #define IMX6SXCLK_I2C3				162
    214  1.1  bouyer #define IMX6SXCLK_OCOTP				163
    215  1.1  bouyer #define IMX6SXCLK_IOMUXC			164
    216  1.1  bouyer #define IMX6SXCLK_IPMUX1			165
    217  1.1  bouyer #define IMX6SXCLK_IPMUX2			166
    218  1.1  bouyer #define IMX6SXCLK_IPMUX3			167
    219  1.1  bouyer #define IMX6SXCLK_TZASC1			168
    220  1.1  bouyer #define IMX6SXCLK_LCDIF_APB			169
    221  1.1  bouyer #define IMX6SXCLK_PXP_AXI			170
    222  1.1  bouyer #define IMX6SXCLK_M4				171
    223  1.1  bouyer #define IMX6SXCLK_ENET				172
    224  1.1  bouyer #define IMX6SXCLK_DISPLAY_AXI			173
    225  1.1  bouyer #define IMX6SXCLK_LCDIF2_PIX			174
    226  1.1  bouyer #define IMX6SXCLK_LCDIF1_PIX			175
    227  1.1  bouyer #define IMX6SXCLK_LDB_DI0			176
    228  1.1  bouyer #define IMX6SXCLK_QSPI1				177
    229  1.1  bouyer #define IMX6SXCLK_MLB				178
    230  1.1  bouyer #define IMX6SXCLK_MMDC_P0_FAST			179
    231  1.1  bouyer #define IMX6SXCLK_MMDC_P0_IPG			180
    232  1.1  bouyer #define IMX6SXCLK_AXI				181
    233  1.1  bouyer #define IMX6SXCLK_PCIE_AXI			182
    234  1.1  bouyer #define IMX6SXCLK_QSPI2				183
    235  1.1  bouyer #define IMX6SXCLK_PER1_BCH			184
    236  1.1  bouyer #define IMX6SXCLK_PER2_MAIN			185
    237  1.1  bouyer #define IMX6SXCLK_PWM1				186
    238  1.1  bouyer #define IMX6SXCLK_PWM2				187
    239  1.1  bouyer #define IMX6SXCLK_PWM3				188
    240  1.1  bouyer #define IMX6SXCLK_PWM4				189
    241  1.1  bouyer #define IMX6SXCLK_GPMI_BCH_APB			190
    242  1.1  bouyer #define IMX6SXCLK_GPMI_BCH			191
    243  1.1  bouyer #define IMX6SXCLK_GPMI_IO			192
    244  1.1  bouyer #define IMX6SXCLK_GPMI_APB			193
    245  1.1  bouyer #define IMX6SXCLK_ROM				194
    246  1.1  bouyer #define IMX6SXCLK_SDMA				195
    247  1.1  bouyer #define IMX6SXCLK_SPBA				196
    248  1.1  bouyer #define IMX6SXCLK_SPDIF				197
    249  1.1  bouyer #define IMX6SXCLK_SSI1_IPG			198
    250  1.1  bouyer #define IMX6SXCLK_SSI2_IPG			199
    251  1.1  bouyer #define IMX6SXCLK_SSI3_IPG			200
    252  1.1  bouyer #define IMX6SXCLK_SSI1				201
    253  1.1  bouyer #define IMX6SXCLK_SSI2				202
    254  1.1  bouyer #define IMX6SXCLK_SSI3				203
    255  1.1  bouyer #define IMX6SXCLK_UART_IPG			204
    256  1.1  bouyer #define IMX6SXCLK_UART_SERIAL			205
    257  1.1  bouyer #define IMX6SXCLK_SAI1				206
    258  1.1  bouyer #define IMX6SXCLK_SAI2				207
    259  1.1  bouyer #define IMX6SXCLK_USBOH3			208
    260  1.1  bouyer #define IMX6SXCLK_USDHC1			209
    261  1.1  bouyer #define IMX6SXCLK_USDHC2			210
    262  1.1  bouyer #define IMX6SXCLK_USDHC3			211
    263  1.1  bouyer #define IMX6SXCLK_USDHC4			212
    264  1.1  bouyer #define IMX6SXCLK_EIM_SLOW			213
    265  1.1  bouyer #define IMX6SXCLK_PWM8				214
    266  1.1  bouyer #define IMX6SXCLK_VADC				215
    267  1.1  bouyer #define IMX6SXCLK_GIS				216
    268  1.1  bouyer #define IMX6SXCLK_I2C4				217
    269  1.1  bouyer #define IMX6SXCLK_PWM5				218
    270  1.1  bouyer #define IMX6SXCLK_PWM6				219
    271  1.1  bouyer #define IMX6SXCLK_PWM7				220
    272  1.1  bouyer #define IMX6SXCLK_CKO1				221
    273  1.1  bouyer #define IMX6SXCLK_CKO2				222
    274  1.1  bouyer #define IMX6SXCLK_IPP_DI0			223
    275  1.1  bouyer #define IMX6SXCLK_IPP_DI1			224
    276  1.1  bouyer #define IMX6SXCLK_ENET_AHB			225
    277  1.1  bouyer #define IMX6SXCLK_OCRAM_PODF			226
    278  1.1  bouyer #define IMX6SXCLK_GPT_3M			227
    279  1.1  bouyer #define IMX6SXCLK_ENET_PTP			228
    280  1.1  bouyer #define IMX6SXCLK_ENET_PTP_REF			229
    281  1.1  bouyer #define IMX6SXCLK_ENET2_REF			230
    282  1.1  bouyer #define IMX6SXCLK_ENET2_REF_125M		231
    283  1.1  bouyer #define IMX6SXCLK_AUDIO				232
    284  1.1  bouyer #define IMX6SXCLK_LVDS1_SEL			233
    285  1.1  bouyer #define IMX6SXCLK_LVDS1_OUT			234
    286  1.1  bouyer #define IMX6SXCLK_ASRC_IPG			235
    287  1.1  bouyer #define IMX6SXCLK_ASRC_MEM			236
    288  1.1  bouyer #define IMX6SXCLK_SAI1_IPG			237
    289  1.1  bouyer #define IMX6SXCLK_SAI2_IPG			238
    290  1.1  bouyer #define IMX6SXCLK_ESAI_IPG			239
    291  1.1  bouyer #define IMX6SXCLK_ESAI_MEM			240
    292  1.1  bouyer #define IMX6SXCLK_LVDS1_IN			241
    293  1.1  bouyer #define IMX6SXCLK_ANACLK1			242
    294  1.1  bouyer #define IMX6SXCLK_PLL1_BYPASS_SRC		243
    295  1.1  bouyer #define IMX6SXCLK_PLL2_BYPASS_SRC		244
    296  1.1  bouyer #define IMX6SXCLK_PLL3_BYPASS_SRC		245
    297  1.1  bouyer #define IMX6SXCLK_PLL4_BYPASS_SRC		246
    298  1.1  bouyer #define IMX6SXCLK_PLL5_BYPASS_SRC		247
    299  1.1  bouyer #define IMX6SXCLK_PLL6_BYPASS_SRC		248
    300  1.1  bouyer #define IMX6SXCLK_PLL7_BYPASS_SRC		249
    301  1.1  bouyer #define IMX6SXCLK_PLL1				250
    302  1.1  bouyer #define IMX6SXCLK_PLL2				251
    303  1.1  bouyer #define IMX6SXCLK_PLL3				252
    304  1.1  bouyer #define IMX6SXCLK_PLL4				253
    305  1.1  bouyer #define IMX6SXCLK_PLL5				254
    306  1.1  bouyer #define IMX6SXCLK_PLL6				255
    307  1.1  bouyer #define IMX6SXCLK_PLL7				256
    308  1.1  bouyer #define IMX6SXCLK_PLL1_BYPASS			257
    309  1.1  bouyer #define IMX6SXCLK_PLL2_BYPASS			258
    310  1.1  bouyer #define IMX6SXCLK_PLL3_BYPASS			259
    311  1.1  bouyer #define IMX6SXCLK_PLL4_BYPASS			260
    312  1.1  bouyer #define IMX6SXCLK_PLL5_BYPASS			261
    313  1.1  bouyer #define IMX6SXCLK_PLL6_BYPASS			262
    314  1.1  bouyer #define IMX6SXCLK_PLL7_BYPASS			263
    315  1.1  bouyer #define IMX6SXCLK_SPDIF_GCLK			264
    316  1.1  bouyer #define IMX6SXCLK_LVDS2_SEL			265
    317  1.1  bouyer #define IMX6SXCLK_LVDS2_OUT			266
    318  1.1  bouyer #define IMX6SXCLK_LVDS2_IN			267
    319  1.1  bouyer #define IMX6SXCLK_ANACLK2			268
    320  1.1  bouyer #define IMX6SXCLK_MMDC_P1_IPG			269
    321  1.1  bouyer #define IMX6SXCLK_END				270
    322  1.1  bouyer 
    323  1.1  bouyer /* Clock Parents Tables */
    324  1.1  bouyer static const char *step_p[] = {
    325  1.1  bouyer 	"osc",
    326  1.1  bouyer 	"pll2_pfd2_396m"
    327  1.1  bouyer };
    328  1.1  bouyer 
    329  1.1  bouyer static const char *pll1_sw_p[] = {
    330  1.1  bouyer 	"pll1_sys",
    331  1.1  bouyer 	"step"
    332  1.1  bouyer };
    333  1.1  bouyer 
    334  1.1  bouyer static const char *periph_pre_p[] = {
    335  1.1  bouyer 	"pll2_bus",
    336  1.1  bouyer 	"pll2_pfd2_396m",
    337  1.1  bouyer 	"pll2_pfd0_352m",
    338  1.1  bouyer 	"pll2_198m"
    339  1.1  bouyer };
    340  1.1  bouyer 
    341  1.1  bouyer static const char *periph2_pre_p[] = {
    342  1.1  bouyer 	"pll2_bus",
    343  1.1  bouyer 	"pll2_pfd2_396m",
    344  1.1  bouyer 	"pll2_pfd0_352m",
    345  1.1  bouyer 	"pll4_audio_div"
    346  1.1  bouyer };
    347  1.1  bouyer 
    348  1.1  bouyer static const char *periph_clk2_p[] = {
    349  1.1  bouyer 	"pll3_usb_otg",
    350  1.1  bouyer 	"osc",
    351  1.1  bouyer 	"osc"
    352  1.1  bouyer };
    353  1.1  bouyer 
    354  1.1  bouyer static const char *periph2_clk2_p[] = {
    355  1.1  bouyer 	"pll3_usb_otg",
    356  1.1  bouyer 	"pll2_bus"
    357  1.1  bouyer };
    358  1.1  bouyer 
    359  1.1  bouyer static const char *audio_p[] = {
    360  1.1  bouyer 	"pll4_audio_div",
    361  1.1  bouyer 	"pll3_pfd2_508m",
    362  1.1  bouyer 	"pll5_video_div",
    363  1.1  bouyer 	"pll3_usb_otg"
    364  1.1  bouyer };
    365  1.1  bouyer 
    366  1.1  bouyer static const char *gpu_axi_p[] = {
    367  1.1  bouyer 	"pll2_pfd2_396m",
    368  1.1  bouyer 	"pll3_pfd0_720m",
    369  1.1  bouyer 	"pll3_pfd1_540m",
    370  1.1  bouyer 	"pll2_bus"
    371  1.1  bouyer };
    372  1.1  bouyer 
    373  1.1  bouyer static const char *gpu_core_p[] = {
    374  1.1  bouyer 	"pll3_pfd1_540m",
    375  1.1  bouyer 	"pll3_pfd0_720m",
    376  1.1  bouyer 	"pll2_bus",
    377  1.1  bouyer 	"pll2_pfd2_396m"
    378  1.1  bouyer };
    379  1.1  bouyer 
    380  1.1  bouyer static const char *ldb_di0_div_p[] = {
    381  1.1  bouyer 	"ldb_di0_div_3_5",
    382  1.1  bouyer 	"ldb_di0_div_7",
    383  1.1  bouyer };
    384  1.1  bouyer 
    385  1.1  bouyer static const char *ldb_di1_div_p[] = {
    386  1.1  bouyer 	"ldb_di1_div_3_5",
    387  1.1  bouyer 	"ldb_di1_div_7",
    388  1.1  bouyer };
    389  1.1  bouyer 
    390  1.1  bouyer static const char *ldb_di0_p[] = {
    391  1.1  bouyer 	"pll5_video_div",
    392  1.1  bouyer 	"pll2_pfd0_352m",
    393  1.1  bouyer 	"pll2_pfd2_396m",
    394  1.1  bouyer 	"pll2_pfd3_594m",
    395  1.1  bouyer 	"pll2_pfd1_594m",
    396  1.1  bouyer 	"pll3_pfd3_454m",
    397  1.1  bouyer };
    398  1.1  bouyer 
    399  1.1  bouyer static const char *ldb_di1_p[] = {
    400  1.1  bouyer 	"pll3_usb_otg",
    401  1.1  bouyer 	"pll2_pfd0_352m",
    402  1.1  bouyer 	"pll2_pfd2_396m",
    403  1.1  bouyer 	"pll2_bus",
    404  1.1  bouyer 	"pll3_pfd3_454m",
    405  1.1  bouyer 	"pll3_pfd2_508m",
    406  1.1  bouyer };
    407  1.1  bouyer 
    408  1.1  bouyer static const char *pll_bypass_src_p[] = {
    409  1.1  bouyer 	"osc",
    410  1.1  bouyer 	"lvds1_in",
    411  1.1  bouyer 	"lvds2_in",
    412  1.1  bouyer 	"dummy"
    413  1.1  bouyer };
    414  1.1  bouyer 
    415  1.1  bouyer static const char *pll1_bypass_p[] = {
    416  1.1  bouyer 	"pll1",
    417  1.1  bouyer 	"pll1_bypass_src"
    418  1.1  bouyer };
    419  1.1  bouyer 
    420  1.1  bouyer static const char *pll2_bypass_p[] = {
    421  1.1  bouyer 	"pll2",
    422  1.1  bouyer 	"pll2_bypass_src"
    423  1.1  bouyer };
    424  1.1  bouyer 
    425  1.1  bouyer static const char *pll3_bypass_p[] = {
    426  1.1  bouyer 	"pll3",
    427  1.1  bouyer 	"pll3_bypass_src"
    428  1.1  bouyer };
    429  1.1  bouyer 
    430  1.1  bouyer static const char *pll4_bypass_p[] = {
    431  1.1  bouyer 	"pll4",
    432  1.1  bouyer 	"pll4_bypass_src"
    433  1.1  bouyer };
    434  1.1  bouyer 
    435  1.1  bouyer static const char *pll5_bypass_p[] = {
    436  1.1  bouyer 	"pll5",
    437  1.1  bouyer 	"pll5_bypass_src"
    438  1.1  bouyer };
    439  1.1  bouyer 
    440  1.1  bouyer static const char *pll6_bypass_p[] = {
    441  1.1  bouyer 	"pll6",
    442  1.1  bouyer 	"pll6_bypass_src"
    443  1.1  bouyer };
    444  1.1  bouyer 
    445  1.1  bouyer static const char *pll7_bypass_p[] = {
    446  1.1  bouyer 	"pll7",
    447  1.1  bouyer 	"pll7_bypass_src"
    448  1.1  bouyer };
    449  1.1  bouyer 
    450  1.1  bouyer static const char *periph_p[] = {
    451  1.1  bouyer 	"periph_pre",
    452  1.1  bouyer 	"periph_clk2"
    453  1.1  bouyer };
    454  1.1  bouyer 
    455  1.1  bouyer static const char *periph2_p[] = {
    456  1.1  bouyer 	"periph2_pre",
    457  1.1  bouyer 	"periph2_clk2"
    458  1.1  bouyer };
    459  1.1  bouyer 
    460  1.1  bouyer static const char *ocram_p[] = {
    461  1.1  bouyer 	"periph",
    462  1.1  bouyer 	"pll2_pfd2_396m",
    463  1.1  bouyer 	"periph",
    464  1.1  bouyer 	"pll3_pfd1_540m",
    465  1.1  bouyer };
    466  1.1  bouyer 
    467  1.1  bouyer static const char *cko1_p[] = {
    468  1.1  bouyer 	"dummy",
    469  1.1  bouyer 	"dummy",
    470  1.1  bouyer 	"dummy",
    471  1.1  bouyer 	"dummy",
    472  1.1  bouyer 	"vadc",
    473  1.1  bouyer 	"ocram",
    474  1.1  bouyer 	"qspi2",
    475  1.1  bouyer 	"m4",
    476  1.1  bouyer 	"enet_ahb",
    477  1.1  bouyer 	"lcdif2_pix",
    478  1.1  bouyer 	"lcdif1_pix",
    479  1.1  bouyer 	"ahb",
    480  1.1  bouyer 	"ipg",
    481  1.1  bouyer 	"perclk",
    482  1.1  bouyer 	"ckil",
    483  1.1  bouyer 	"pll4_audio_div",
    484  1.1  bouyer };
    485  1.1  bouyer 
    486  1.1  bouyer static const char *cko2_p[] = {
    487  1.1  bouyer 	"dummy",
    488  1.1  bouyer 	"mmdc_p0_fast",
    489  1.1  bouyer 	"usdhc4",
    490  1.1  bouyer 	"usdhc1",
    491  1.1  bouyer 	"dummy",
    492  1.1  bouyer 	"wrck",
    493  1.1  bouyer 	"ecspi_root",
    494  1.1  bouyer 	"dummy",
    495  1.1  bouyer 	"usdhc3",
    496  1.1  bouyer 	"pcie",
    497  1.1  bouyer 	"arm",
    498  1.1  bouyer 	"csi_core",
    499  1.1  bouyer 	"display_axi",
    500  1.1  bouyer 	"dummy",
    501  1.1  bouyer 	"osc",
    502  1.1  bouyer 	"dummy",
    503  1.1  bouyer 	"dummy",
    504  1.1  bouyer 	"usdhc2",
    505  1.1  bouyer 	"ssi1",
    506  1.1  bouyer 	"ssi2",
    507  1.1  bouyer 	"ssi3",
    508  1.1  bouyer 	"gpu_axi_podf",
    509  1.1  bouyer 	"dummy",
    510  1.1  bouyer 	"can_podf",
    511  1.1  bouyer 	"lvds1_out",
    512  1.1  bouyer 	"qspi1",
    513  1.1  bouyer 	"esai_extal",
    514  1.1  bouyer 	"eim_slow",
    515  1.1  bouyer 	"uart_serial",
    516  1.1  bouyer 	"spdif",
    517  1.1  bouyer 	"audio",
    518  1.1  bouyer 	"dummy",
    519  1.1  bouyer 	};
    520  1.1  bouyer 
    521  1.1  bouyer static const char *cko_p[] = {
    522  1.1  bouyer 	"cko1",
    523  1.1  bouyer 	"cko2"
    524  1.1  bouyer };
    525  1.1  bouyer 
    526  1.1  bouyer static const char *pcie_axi_p[] = {
    527  1.1  bouyer 	"ocram",
    528  1.1  bouyer 	"ahb"
    529  1.1  bouyer };
    530  1.1  bouyer 
    531  1.1  bouyer static const char *ssi_p[] = {
    532  1.1  bouyer 	"pll3_pfd2_508m",
    533  1.1  bouyer 	"pll5_video_div",
    534  1.1  bouyer 	"pll4_audio_div"
    535  1.1  bouyer };
    536  1.1  bouyer 
    537  1.1  bouyer static const char *qspi1_p[] = {
    538  1.1  bouyer 	"pll3_usb_otg",
    539  1.1  bouyer 	"pll2_pfd0_352m",
    540  1.1  bouyer 	"pll2_pfd2_396m",
    541  1.1  bouyer 	"pll2_bus",
    542  1.1  bouyer 	"pll3_pfd3_454m",
    543  1.1  bouyer 	"pll3_pfd2_508m",
    544  1.1  bouyer };
    545  1.1  bouyer 
    546  1.1  bouyer static const char *perclk_p[] = {
    547  1.1  bouyer 	"ipg",
    548  1.1  bouyer 	"osc"
    549  1.1  bouyer };
    550  1.1  bouyer 
    551  1.1  bouyer static const char *usdhc_p[] = {
    552  1.1  bouyer 	"pll2_pfd2_396m",
    553  1.1  bouyer 	"pll2_pfd0_352m"
    554  1.1  bouyer };
    555  1.1  bouyer 
    556  1.1  bouyer static const char *vid_p[] = {
    557  1.1  bouyer 	"pll3_pfd1_540m",
    558  1.1  bouyer 	"pll3_usb_otg",
    559  1.1  bouyer 	"pll3_pfd3_454m",
    560  1.1  bouyer 	"pll4_audio_div",
    561  1.1  bouyer 	"pll5_video_div",
    562  1.1  bouyer };
    563  1.1  bouyer 
    564  1.1  bouyer static const char *can_p[] = {
    565  1.1  bouyer 	"pll3_60m",
    566  1.1  bouyer 	"osc",
    567  1.1  bouyer 	"pll3_80m",
    568  1.1  bouyer 	"dummy",
    569  1.1  bouyer };
    570  1.1  bouyer 
    571  1.1  bouyer static const char *uart_p[] = {
    572  1.1  bouyer 	"pll3_80m",
    573  1.1  bouyer 	"osc",
    574  1.1  bouyer };
    575  1.1  bouyer 
    576  1.1  bouyer static const char *qspi2_p[] = {
    577  1.1  bouyer 	"pll2_pfd0_352m",
    578  1.1  bouyer 	"pll2_bus",
    579  1.1  bouyer 	"pll3_usb_otg",
    580  1.1  bouyer 	"pll2_pfd2_396m",
    581  1.1  bouyer 	"pll3_pfd3_454m",
    582  1.1  bouyer 	"dummy",
    583  1.1  bouyer 	"dummy",
    584  1.1  bouyer 	"dummy",
    585  1.1  bouyer };
    586  1.1  bouyer 
    587  1.1  bouyer static const char *enet_pre_p[] = {
    588  1.1  bouyer 	"pll2_bus",
    589  1.1  bouyer 	"pll3_usb_otg",
    590  1.1  bouyer 	"pll5_video_div",
    591  1.1  bouyer 	"pll2_pfd0_352m",
    592  1.1  bouyer 	"pll2_pfd2_396m",
    593  1.1  bouyer 	"pll3_pfd2_508m",
    594  1.1  bouyer };
    595  1.1  bouyer 
    596  1.1  bouyer static const char *enet_p[] = {
    597  1.1  bouyer 	"enet_podf",
    598  1.1  bouyer 	"ipp_di0",
    599  1.1  bouyer 	"ipp_di1",
    600  1.1  bouyer 	"ldb_di0",
    601  1.1  bouyer 	"ldb_di1",
    602  1.1  bouyer };
    603  1.1  bouyer 
    604  1.1  bouyer static const char *m4_pre_p[] = {
    605  1.1  bouyer 	"pll2_bus",
    606  1.1  bouyer 	"pll3_usb_otg",
    607  1.1  bouyer 	"osc",
    608  1.1  bouyer 	"pll2_pfd0_352m",
    609  1.1  bouyer 	"pll2_pfd2_396m",
    610  1.1  bouyer 	"pll3_pfd3_454m",
    611  1.1  bouyer };
    612  1.1  bouyer 
    613  1.1  bouyer static const char *m4_p[] = {
    614  1.1  bouyer 	"m4_pre_sel",
    615  1.1  bouyer 	"ipp_di0",
    616  1.1  bouyer 	"ipp_di1",
    617  1.1  bouyer 	"ldb_di0",
    618  1.1  bouyer 	"ldb_di1",
    619  1.1  bouyer };
    620  1.1  bouyer 
    621  1.1  bouyer static const char *eim_slow_p[] = {
    622  1.1  bouyer 	"ocram",
    623  1.1  bouyer 	"pll3_usb_otg",
    624  1.1  bouyer 	"pll2_pfd2_396m",
    625  1.1  bouyer 	"pll2_pfd0_352m"
    626  1.1  bouyer };
    627  1.1  bouyer 
    628  1.1  bouyer static const char *ecspi_p[] = {
    629  1.1  bouyer 	"pll3_60m",
    630  1.1  bouyer 	"osc",
    631  1.1  bouyer };
    632  1.1  bouyer 
    633  1.1  bouyer static const char *lcdif1_pre_p[] = {
    634  1.1  bouyer 	"pll2_bus",
    635  1.1  bouyer 	"pll3_pfd3_454m",
    636  1.1  bouyer 	"pll5_video_div",
    637  1.1  bouyer 	"pll2_pfd0_352m",
    638  1.1  bouyer 	"pll2_pfd1_594m",
    639  1.1  bouyer 	"pll3_pfd1_540m",
    640  1.1  bouyer };
    641  1.1  bouyer 
    642  1.1  bouyer static const char *lcdif1_p[] = {
    643  1.1  bouyer 	"lcdif1_podf",
    644  1.1  bouyer 	"ipp_di0",
    645  1.1  bouyer 	"ipp_di1",
    646  1.1  bouyer 	"ldb_di0",
    647  1.1  bouyer 	"ldb_di1",
    648  1.1  bouyer };
    649  1.1  bouyer 
    650  1.1  bouyer static const char *lcdif2_pre_p[] = {
    651  1.1  bouyer 	"pll2_bus",
    652  1.1  bouyer 	"pll3_pfd3_454m",
    653  1.1  bouyer 	"pll5_video_div",
    654  1.1  bouyer 	"pll2_pfd0_352m",
    655  1.1  bouyer 	"pll2_pfd3_594m",
    656  1.1  bouyer 	"pll3_pfd1_540m",
    657  1.1  bouyer };
    658  1.1  bouyer 
    659  1.1  bouyer static const char *lcdif2_p[] = {
    660  1.1  bouyer 	"lcdif2_podf",
    661  1.1  bouyer 	"ipp_di0",
    662  1.1  bouyer 	"ipp_di1",
    663  1.1  bouyer 	"ldb_di0",
    664  1.1  bouyer 	"ldb_di1",
    665  1.1  bouyer };
    666  1.1  bouyer 
    667  1.1  bouyer static const char *display_p[] = {
    668  1.1  bouyer 	"pll2_bus",
    669  1.1  bouyer 	"pll2_pfd2_396m",
    670  1.1  bouyer 	"pll3_usb_otg",
    671  1.1  bouyer 	"pll3_pfd1_540m",
    672  1.1  bouyer };
    673  1.1  bouyer 
    674  1.1  bouyer static const char *csi_p[] = {
    675  1.1  bouyer 	"osc",
    676  1.1  bouyer 	"pll2_pfd2_396m",
    677  1.1  bouyer 	"pll3_120m",
    678  1.1  bouyer 	"pll3_pfd1_540m",
    679  1.1  bouyer };
    680  1.1  bouyer 
    681  1.1  bouyer static const char *lvds_p[] = {
    682  1.1  bouyer 	"arm",
    683  1.1  bouyer 	"pll1_sys",
    684  1.1  bouyer 	"dummy",
    685  1.1  bouyer 	"dummy",
    686  1.1  bouyer 	"dummy",
    687  1.1  bouyer 	"dummy",
    688  1.1  bouyer 	"dummy",
    689  1.1  bouyer 	"pll5_video_div",
    690  1.1  bouyer 	"dummy",
    691  1.1  bouyer 	"dummy",
    692  1.1  bouyer 	"pcie_ref_125m",
    693  1.1  bouyer 	"dummy",
    694  1.1  bouyer 	"usbphy1",
    695  1.1  bouyer 	"usbphy2",
    696  1.1  bouyer };
    697  1.1  bouyer 
    698  1.1  bouyer /* DT clock ID to clock name mappings */
    699  1.1  bouyer static struct imx_clock_id {
    700  1.1  bouyer 	u_int		id;
    701  1.1  bouyer 	const char	*name;
    702  1.1  bouyer } imx6sx_clock_ids[] = {
    703  1.1  bouyer 	{ IMX6SXCLK_DUMMY,		"dummy" },
    704  1.1  bouyer 	{ IMX6SXCLK_CKIL,		"ckil" },
    705  1.1  bouyer 	{ IMX6SXCLK_OSC,		"osc" },
    706  1.1  bouyer 	{ IMX6SXCLK_PLL1_SYS,		"pll1_sys" },
    707  1.1  bouyer 	{ IMX6SXCLK_PLL2_BUS,		"pll2_bus" },
    708  1.1  bouyer 	{ IMX6SXCLK_PLL3_USB_OTG,	"pll3_usb_otg" },
    709  1.1  bouyer 	{ IMX6SXCLK_PLL4_AUDIO,		"pll4_audio" },
    710  1.1  bouyer 	{ IMX6SXCLK_PLL5_VIDEO,		"pll5_video" },
    711  1.1  bouyer 	{ IMX6SXCLK_PLL6_ENET,		"pll6_enet" },
    712  1.1  bouyer 	{ IMX6SXCLK_PLL7_USB_HOST,	"pll7_usb_host" },
    713  1.1  bouyer 	{ IMX6SXCLK_USBPHY1,		"usbphy1" },
    714  1.1  bouyer 	{ IMX6SXCLK_USBPHY2,		"usbphy2" },
    715  1.1  bouyer 	{ IMX6SXCLK_USBPHY1_GATE,	"usbphy1_gate" },
    716  1.1  bouyer 	{ IMX6SXCLK_USBPHY2_GATE,	"usbphy2_gate" },
    717  1.1  bouyer 	{ IMX6SXCLK_PCIE_REF,		"pcie_ref" },
    718  1.1  bouyer 	{ IMX6SXCLK_PCIE_REF_125M,	"pcie_ref_125m" },
    719  1.1  bouyer 	{ IMX6SXCLK_PLL2_PFD0,		"pll2_pfd0_352m" },
    720  1.1  bouyer 	{ IMX6SXCLK_PLL2_PFD1,		"pll2_pfd1_594m" },
    721  1.1  bouyer 	{ IMX6SXCLK_PLL2_PFD2,		"pll2_pfd2_396m" },
    722  1.1  bouyer 	{ IMX6SXCLK_PLL2_PFD3,		"pll2_pfd3_594m" },
    723  1.1  bouyer 	{ IMX6SXCLK_PLL3_PFD0,		"pll3_pfd0_720m" },
    724  1.1  bouyer 	{ IMX6SXCLK_PLL3_PFD1,		"pll3_pfd1_540m" },
    725  1.1  bouyer 	{ IMX6SXCLK_PLL3_PFD2,		"pll3_pfd2_508m" },
    726  1.1  bouyer 	{ IMX6SXCLK_PLL3_PFD3,		"pll3_pfd3_454m" },
    727  1.1  bouyer 	{ IMX6SXCLK_PLL2_198M,		"pll2_198m" },
    728  1.1  bouyer 	{ IMX6SXCLK_PLL3_120M,		"pll3_120m" },
    729  1.1  bouyer 	{ IMX6SXCLK_PLL3_80M,		"pll3_80m" },
    730  1.1  bouyer 	{ IMX6SXCLK_PLL3_60M,		"pll3_60m" },
    731  1.1  bouyer 	{ IMX6SXCLK_TWD,		"twd" },
    732  1.1  bouyer 	{ IMX6SXCLK_PLL4_POST_DIV,	"pll4_post_div" },
    733  1.1  bouyer 	{ IMX6SXCLK_PLL4_AUDIO_DIV,	"pll4_audio_div" },
    734  1.1  bouyer 	{ IMX6SXCLK_PLL5_POST_DIV,	"pll5_post_div" },
    735  1.1  bouyer 	{ IMX6SXCLK_PLL5_VIDEO_DIV,	"pll5_video_div" },
    736  1.1  bouyer 	{ IMX6SXCLK_STEP,		"step" },
    737  1.1  bouyer 	{ IMX6SXCLK_PLL1_SW,		"pll1_sw" },
    738  1.1  bouyer 	{ IMX6SXCLK_OCRAM_SEL,		"ocram_sel" },
    739  1.1  bouyer 	{ IMX6SXCLK_PERIPH_PRE,		"periph_pre" },
    740  1.1  bouyer 	{ IMX6SXCLK_PERIPH2_PRE,	"periph2_pre" },
    741  1.1  bouyer 	{ IMX6SXCLK_PERIPH_CLK2_SEL,	"periph_clk2_sel" },
    742  1.1  bouyer 	{ IMX6SXCLK_PERIPH2_CLK2_SEL,	"periph2_clk2_sel" },
    743  1.1  bouyer 	{ IMX6SXCLK_PCIE_AXI_SEL,	"pcie_axi_sel" },
    744  1.1  bouyer 	{ IMX6SXCLK_GPU_AXI_SEL,	"gpu_axi_sel" },
    745  1.1  bouyer 	{ IMX6SXCLK_GPU_CORE_SEL,	"gpu_core_sel" },
    746  1.1  bouyer 	{ IMX6SXCLK_EIM_SLOW_SEL,	"eim_slow_sel" },
    747  1.1  bouyer 	{ IMX6SXCLK_USDHC1_SEL,		"usdhc1_sel" },
    748  1.1  bouyer 	{ IMX6SXCLK_USDHC2_SEL,		"usdhc2_sel" },
    749  1.1  bouyer 	{ IMX6SXCLK_USDHC3_SEL,		"usdhc3_sel" },
    750  1.1  bouyer 	{ IMX6SXCLK_USDHC4_SEL,		"usdhc4_sel" },
    751  1.1  bouyer 	{ IMX6SXCLK_SSI1_SEL,		"ssi1_sel" },
    752  1.1  bouyer 	{ IMX6SXCLK_SSI2_SEL,		"ssi2_sel" },
    753  1.1  bouyer 	{ IMX6SXCLK_SSI3_SEL,		"ssi3_sel" },
    754  1.1  bouyer 	{ IMX6SXCLK_QSPI1_SEL,		"qspi1_sel" },
    755  1.1  bouyer 	{ IMX6SXCLK_PERCLK_SEL,		"perclk_sel" },
    756  1.1  bouyer 	{ IMX6SXCLK_VID_SEL,		"vid_sel" },
    757  1.1  bouyer 	{ IMX6SXCLK_ESAI_SEL,		"esai_sel" },
    758  1.1  bouyer 	{ IMX6SXCLK_LDB_DI0_DIV_SEL,	"ldb_di0_div_sel" },
    759  1.1  bouyer 	{ IMX6SXCLK_LDB_DI1_DIV_SEL,	"ldb_di1_div_sel" },
    760  1.1  bouyer 	{ IMX6SXCLK_CAN_SEL,		"can_sel" },
    761  1.1  bouyer 	{ IMX6SXCLK_UART_SEL,		"uart_sel" },
    762  1.1  bouyer 	{ IMX6SXCLK_QSPI2_SEL,		"qspi2_sel" },
    763  1.1  bouyer 	{ IMX6SXCLK_LDB_DI0_SEL,	"ldb_di0_sel" },
    764  1.1  bouyer 	{ IMX6SXCLK_LDB_DI1_SEL,	"ldb_di1_sel" },
    765  1.1  bouyer 	{ IMX6SXCLK_SPDIF_SEL,		"spdif_sel" },
    766  1.1  bouyer 	{ IMX6SXCLK_AUDIO_SEL,		"audio_sel" },
    767  1.1  bouyer 	{ IMX6SXCLK_ENET_PRE_SEL,	"enet_pre_sel" },
    768  1.1  bouyer 	{ IMX6SXCLK_ENET_SEL,		"enet_sel" },
    769  1.1  bouyer 	{ IMX6SXCLK_M4_PRE_SEL,		"m4_pre_sel" },
    770  1.1  bouyer 	{ IMX6SXCLK_M4_SEL,		"m4_sel" },
    771  1.1  bouyer 	{ IMX6SXCLK_ECSPI_SEL,		"ecspi_sel" },
    772  1.1  bouyer 	{ IMX6SXCLK_LCDIF1_PRE_SEL,	"lcdif1_pre_sel" },
    773  1.1  bouyer 	{ IMX6SXCLK_LCDIF2_PRE_SEL,	"lcdif2_pre_sel" },
    774  1.1  bouyer 	{ IMX6SXCLK_LCDIF1_SEL,		"lcdif1_sel" },
    775  1.1  bouyer 	{ IMX6SXCLK_LCDIF2_SEL,		"lcdif2_sel" },
    776  1.1  bouyer 	{ IMX6SXCLK_DISPLAY_SEL,	"display_sel" },
    777  1.1  bouyer 	{ IMX6SXCLK_CSI_SEL,		"csi_sel" },
    778  1.1  bouyer 	{ IMX6SXCLK_CKO1_SEL,		"cko1_sel" },
    779  1.1  bouyer 	{ IMX6SXCLK_CKO2_SEL,		"cko2_sel" },
    780  1.1  bouyer 	{ IMX6SXCLK_CKO,		"cko" },
    781  1.1  bouyer 	{ IMX6SXCLK_PERIPH_CLK2,	"periph_clk2" },
    782  1.1  bouyer 	{ IMX6SXCLK_PERIPH2_CLK2,	"periph2_clk2" },
    783  1.1  bouyer 	{ IMX6SXCLK_IPG,		"ipg" },
    784  1.1  bouyer 	{ IMX6SXCLK_GPU_CORE_PODF,	"gpu_core_podf" },
    785  1.1  bouyer 	{ IMX6SXCLK_GPU_AXI_PODF,	"gpu_axi_podf" },
    786  1.1  bouyer 	{ IMX6SXCLK_LCDIF1_PODF,	"lcdif1_podf" },
    787  1.1  bouyer 	{ IMX6SXCLK_QSPI1_PODF,		"qspi1_podf" },
    788  1.1  bouyer 	{ IMX6SXCLK_EIM_SLOW_PODF,	"eim_slow_podf" },
    789  1.1  bouyer 	{ IMX6SXCLK_LCDIF2_PODF,	"lcdif2_podf" },
    790  1.1  bouyer 	{ IMX6SXCLK_PERCLK,		"perclk" },
    791  1.1  bouyer 	{ IMX6SXCLK_VID_PODF,		"vid_podf" },
    792  1.1  bouyer 	{ IMX6SXCLK_CAN_PODF,		"can_podf" },
    793  1.1  bouyer 	{ IMX6SXCLK_USDHC1_PODF,	"usdhc1_podf" },
    794  1.1  bouyer 	{ IMX6SXCLK_USDHC2_PODF,	"usdhc2_podf" },
    795  1.1  bouyer 	{ IMX6SXCLK_USDHC3_PODF,	"usdhc3_podf" },
    796  1.1  bouyer 	{ IMX6SXCLK_USDHC4_PODF,	"usdhc4_podf" },
    797  1.1  bouyer 	{ IMX6SXCLK_UART_PODF,		"uart_podf" },
    798  1.1  bouyer 	{ IMX6SXCLK_ESAI_PRED,		"esai_pred" },
    799  1.1  bouyer 	{ IMX6SXCLK_ESAI_PODF,		"esai_podf" },
    800  1.1  bouyer 	{ IMX6SXCLK_SSI3_PRED,		"ssi3_pred" },
    801  1.1  bouyer 	{ IMX6SXCLK_SSI3_PODF,		"ssi3_podf" },
    802  1.1  bouyer 	{ IMX6SXCLK_SSI1_PRED,		"ssi1_pred" },
    803  1.1  bouyer 	{ IMX6SXCLK_SSI1_PODF,		"ssi1_podf" },
    804  1.1  bouyer 	{ IMX6SXCLK_QSPI2_PRED,		"qspi2_pred" },
    805  1.1  bouyer 	{ IMX6SXCLK_QSPI2_PODF,		"qspi2_podf" },
    806  1.1  bouyer 	{ IMX6SXCLK_SSI2_PRED,		"ssi2_pred" },
    807  1.1  bouyer 	{ IMX6SXCLK_SSI2_PODF,		"ssi2_podf" },
    808  1.1  bouyer 	{ IMX6SXCLK_SPDIF_PRED,		"spdif_pred" },
    809  1.1  bouyer 	{ IMX6SXCLK_SPDIF_PODF,		"spdif_podf" },
    810  1.1  bouyer 	{ IMX6SXCLK_AUDIO_PRED,		"audio_pred" },
    811  1.1  bouyer 	{ IMX6SXCLK_AUDIO_PODF,		"audio_podf" },
    812  1.1  bouyer 	{ IMX6SXCLK_ENET_PODF,		"enet_podf" },
    813  1.1  bouyer 	{ IMX6SXCLK_M4_PODF,		"m4_podf" },
    814  1.1  bouyer 	{ IMX6SXCLK_ECSPI_PODF,		"ecspi_podf" },
    815  1.1  bouyer 	{ IMX6SXCLK_LCDIF1_PRED,	"lcdif1_pred" },
    816  1.1  bouyer 	{ IMX6SXCLK_LCDIF2_PRED,	"lcdif2_pred" },
    817  1.1  bouyer 	{ IMX6SXCLK_DISPLAY_PODF,	"display_podf" },
    818  1.1  bouyer 	{ IMX6SXCLK_CSI_PODF,		"csi_podf" },
    819  1.1  bouyer 	{ IMX6SXCLK_LDB_DI0_DIV_3_5,	"ldb_di0_div_3_5" },
    820  1.1  bouyer 	{ IMX6SXCLK_LDB_DI0_DIV_7,	"ldb_di0_div_7" },
    821  1.1  bouyer 	{ IMX6SXCLK_LDB_DI1_DIV_3_5,	"ldb_di1_div_3_5" },
    822  1.1  bouyer 	{ IMX6SXCLK_LDB_DI1_DIV_7,	"ldb_di1_div_7" },
    823  1.1  bouyer 	{ IMX6SXCLK_CKO1_PODF,		"cko1_podf" },
    824  1.1  bouyer 	{ IMX6SXCLK_CKO2_PODF,		"cko2_podf" },
    825  1.1  bouyer 	{ IMX6SXCLK_PERIPH,		"periph" },
    826  1.1  bouyer 	{ IMX6SXCLK_PERIPH2,		"periph2" },
    827  1.1  bouyer 	{ IMX6SXCLK_OCRAM,		"ocram" },
    828  1.1  bouyer 	{ IMX6SXCLK_AHB,		"ahb" },
    829  1.1  bouyer 	{ IMX6SXCLK_MMDC_PODF,		"mmdc_podf" },
    830  1.1  bouyer 	{ IMX6SXCLK_ARM,		"arm" },
    831  1.1  bouyer 	{ IMX6SXCLK_AIPS_TZ1,		"aips_tz1" },
    832  1.1  bouyer 	{ IMX6SXCLK_AIPS_TZ2,		"aips_tz2" },
    833  1.1  bouyer 	{ IMX6SXCLK_APBH_DMA,		"apbh_dma" },
    834  1.1  bouyer 	{ IMX6SXCLK_CAAM_MEM,		"caam_mem" },
    835  1.1  bouyer 	{ IMX6SXCLK_CAAM_ACLK,		"caam_aclk" },
    836  1.1  bouyer 	{ IMX6SXCLK_CAAM_IPG,		"caam_ipg" },
    837  1.1  bouyer 	{ IMX6SXCLK_CAN1_IPG,		"can1_ipg" },
    838  1.1  bouyer 	{ IMX6SXCLK_CAN1_SERIAL,	"can1_serial" },
    839  1.1  bouyer 	{ IMX6SXCLK_CAN2_IPG,		"can2_ipg" },
    840  1.1  bouyer 	{ IMX6SXCLK_CAN2_SERIAL,	"can2_serial" },
    841  1.1  bouyer 	{ IMX6SXCLK_DCIC1,		"dcic1" },
    842  1.1  bouyer 	{ IMX6SXCLK_DCIC2,		"dcic2" },
    843  1.1  bouyer 	{ IMX6SXCLK_AIPS_TZ3,		"aips_tz3" },
    844  1.1  bouyer 	{ IMX6SXCLK_ECSPI1,		"ecspi1" },
    845  1.1  bouyer 	{ IMX6SXCLK_ECSPI2,		"ecspi2" },
    846  1.1  bouyer 	{ IMX6SXCLK_ECSPI3,		"ecspi3" },
    847  1.1  bouyer 	{ IMX6SXCLK_ECSPI4,		"ecspi4" },
    848  1.1  bouyer 	{ IMX6SXCLK_ECSPI5,		"ecspi5" },
    849  1.1  bouyer 	{ IMX6SXCLK_EPIT1,		"epit1" },
    850  1.1  bouyer 	{ IMX6SXCLK_EPIT2,		"epit2" },
    851  1.1  bouyer 	{ IMX6SXCLK_ESAI_EXTAL,		"esai_extal" },
    852  1.1  bouyer 	{ IMX6SXCLK_WAKEUP,		"wakeup" },
    853  1.1  bouyer 	{ IMX6SXCLK_GPT_BUS,		"gpt_bus" },
    854  1.1  bouyer 	{ IMX6SXCLK_GPT_SERIAL,		"gpt_serial" },
    855  1.1  bouyer 	{ IMX6SXCLK_GPU,		"gpu" },
    856  1.1  bouyer 	{ IMX6SXCLK_OCRAM_S,		"ocram_s" },
    857  1.1  bouyer 	{ IMX6SXCLK_CANFD,		"canfd" },
    858  1.1  bouyer 	{ IMX6SXCLK_CSI,		"csi" },
    859  1.1  bouyer 	{ IMX6SXCLK_I2C1,		"i2c1" },
    860  1.1  bouyer 	{ IMX6SXCLK_I2C2,		"i2c2" },
    861  1.1  bouyer 	{ IMX6SXCLK_I2C3,		"i2c3" },
    862  1.1  bouyer 	{ IMX6SXCLK_OCOTP,		"ocotp" },
    863  1.1  bouyer 	{ IMX6SXCLK_IOMUXC,		"iomuxc" },
    864  1.1  bouyer 	{ IMX6SXCLK_IPMUX1,		"ipmux1" },
    865  1.1  bouyer 	{ IMX6SXCLK_IPMUX2,		"ipmux2" },
    866  1.1  bouyer 	{ IMX6SXCLK_IPMUX3,		"ipmux3" },
    867  1.1  bouyer 	{ IMX6SXCLK_TZASC1,		"tzasc1" },
    868  1.1  bouyer 	{ IMX6SXCLK_LCDIF_APB,		"lcdif_apb" },
    869  1.1  bouyer 	{ IMX6SXCLK_PXP_AXI,		"pxp_axi" },
    870  1.1  bouyer 	{ IMX6SXCLK_M4,			"m4" },
    871  1.1  bouyer 	{ IMX6SXCLK_ENET,		"enet" },
    872  1.1  bouyer 	{ IMX6SXCLK_DISPLAY_AXI,	"display_axi" },
    873  1.1  bouyer 	{ IMX6SXCLK_LCDIF2_PIX,		"lcdif2_pix" },
    874  1.1  bouyer 	{ IMX6SXCLK_LCDIF1_PIX,		"lcdif1_pix" },
    875  1.1  bouyer 	{ IMX6SXCLK_LDB_DI0,		"ldb_di0" },
    876  1.1  bouyer 	{ IMX6SXCLK_QSPI1,		"qspi1" },
    877  1.1  bouyer 	{ IMX6SXCLK_MLB,		"mlb" },
    878  1.1  bouyer 	{ IMX6SXCLK_MMDC_P0_FAST,	"mmdc_p0_fast" },
    879  1.1  bouyer 	{ IMX6SXCLK_MMDC_P0_IPG,	"mmdc_p0_ipg" },
    880  1.1  bouyer 	{ IMX6SXCLK_PCIE_AXI,		"pcie_axi" },
    881  1.1  bouyer 	{ IMX6SXCLK_QSPI2,		"qspi2" },
    882  1.1  bouyer 	{ IMX6SXCLK_PER1_BCH,		"per1_bch" },
    883  1.1  bouyer 	{ IMX6SXCLK_PER2_MAIN,		"per2_main" },
    884  1.1  bouyer 	{ IMX6SXCLK_PWM1,		"pwm1" },
    885  1.1  bouyer 	{ IMX6SXCLK_PWM2,		"pwm2" },
    886  1.1  bouyer 	{ IMX6SXCLK_PWM3,		"pwm3" },
    887  1.1  bouyer 	{ IMX6SXCLK_PWM4,		"pwm4" },
    888  1.1  bouyer 	{ IMX6SXCLK_GPMI_BCH_APB,	"gpmi_bch_apb" },
    889  1.1  bouyer 	{ IMX6SXCLK_GPMI_BCH,		"gpmi_bch" },
    890  1.1  bouyer 	{ IMX6SXCLK_GPMI_IO,		"gpmi_io" },
    891  1.1  bouyer 	{ IMX6SXCLK_GPMI_APB,		"gpmi_apb" },
    892  1.1  bouyer 	{ IMX6SXCLK_ROM,		"rom" },
    893  1.1  bouyer 	{ IMX6SXCLK_SDMA,		"sdma" },
    894  1.1  bouyer 	{ IMX6SXCLK_SPBA,		"spba" },
    895  1.1  bouyer 	{ IMX6SXCLK_SPDIF,		"spdif" },
    896  1.1  bouyer 	{ IMX6SXCLK_SSI1_IPG,		"ssi1_ipg" },
    897  1.1  bouyer 	{ IMX6SXCLK_SSI2_IPG,		"ssi2_ipg" },
    898  1.1  bouyer 	{ IMX6SXCLK_SSI3_IPG,		"ssi3_ipg" },
    899  1.1  bouyer 	{ IMX6SXCLK_SSI1,		"ssi1" },
    900  1.1  bouyer 	{ IMX6SXCLK_SSI2,		"ssi2" },
    901  1.1  bouyer 	{ IMX6SXCLK_SSI3,		"ssi3" },
    902  1.1  bouyer 	{ IMX6SXCLK_UART_IPG,		"uart_ipg" },
    903  1.1  bouyer 	{ IMX6SXCLK_UART_SERIAL,	"uart_serial" },
    904  1.1  bouyer 	{ IMX6SXCLK_SAI1,		"sai1" },
    905  1.1  bouyer 	{ IMX6SXCLK_SAI2,		"sai2" },
    906  1.1  bouyer 	{ IMX6SXCLK_USBOH3,		"usboh3" },
    907  1.1  bouyer 	{ IMX6SXCLK_USDHC1,		"usdhc1" },
    908  1.1  bouyer 	{ IMX6SXCLK_USDHC2,		"usdhc2" },
    909  1.1  bouyer 	{ IMX6SXCLK_USDHC3,		"usdhc3" },
    910  1.1  bouyer 	{ IMX6SXCLK_USDHC4,		"usdhc4" },
    911  1.1  bouyer 	{ IMX6SXCLK_EIM_SLOW,		"eim_slow" },
    912  1.1  bouyer 	{ IMX6SXCLK_PWM8,		"pwm8" },
    913  1.1  bouyer 	{ IMX6SXCLK_VADC,		"vadc" },
    914  1.1  bouyer 	{ IMX6SXCLK_GIS,		"gis" },
    915  1.1  bouyer 	{ IMX6SXCLK_I2C4,		"i2c4" },
    916  1.1  bouyer 	{ IMX6SXCLK_PWM5,		"pwm5" },
    917  1.1  bouyer 	{ IMX6SXCLK_PWM6,		"pwm6" },
    918  1.1  bouyer 	{ IMX6SXCLK_PWM7,		"pwm7" },
    919  1.1  bouyer 	{ IMX6SXCLK_CKO1,		"cko1" },
    920  1.1  bouyer 	{ IMX6SXCLK_CKO2,		"cko2" },
    921  1.1  bouyer 	{ IMX6SXCLK_IPP_DI0,		"ipp_di0" },
    922  1.1  bouyer 	{ IMX6SXCLK_IPP_DI1,		"ipp_di1" },
    923  1.1  bouyer 	{ IMX6SXCLK_ENET_AHB,		"enet_ahb" },
    924  1.1  bouyer 	{ IMX6SXCLK_OCRAM_PODF,		"ocram_podf" },
    925  1.1  bouyer 	{ IMX6SXCLK_GPT_3M,		"gpt_3m" },
    926  1.1  bouyer 	{ IMX6SXCLK_ENET_PTP,		"enet_ptp_25m" },
    927  1.1  bouyer 	{ IMX6SXCLK_ENET_PTP_REF,	"enet_ptp_ref" },
    928  1.1  bouyer 	{ IMX6SXCLK_ENET2_REF,		"enet2_ref" },
    929  1.1  bouyer 	{ IMX6SXCLK_ENET2_REF_125M,	"enet2_ref_125m" },
    930  1.1  bouyer 	{ IMX6SXCLK_AUDIO,		"audio" },
    931  1.1  bouyer 	{ IMX6SXCLK_LVDS1_SEL,		"lvds1_sel" },
    932  1.1  bouyer 	{ IMX6SXCLK_LVDS1_OUT,		"lvds1_out" },
    933  1.1  bouyer 	{ IMX6SXCLK_ASRC_IPG,		"asrc_ipg" },
    934  1.1  bouyer 	{ IMX6SXCLK_ASRC_MEM,		"asrc_mem" },
    935  1.1  bouyer 	{ IMX6SXCLK_SAI1_IPG,		"sai1_ipg" },
    936  1.1  bouyer 	{ IMX6SXCLK_SAI2_IPG,		"sai2_ipg" },
    937  1.1  bouyer 	{ IMX6SXCLK_ESAI_IPG,		"esai_ipg" },
    938  1.1  bouyer 	{ IMX6SXCLK_ESAI_MEM,		"esai_mem" },
    939  1.1  bouyer 	{ IMX6SXCLK_LVDS1_IN,		"lvds1_in" },
    940  1.1  bouyer 	{ IMX6SXCLK_ANACLK1,		"anaclk1" },
    941  1.1  bouyer 	{ IMX6SXCLK_PLL1_BYPASS_SRC,	"pll1_bypass_src" },
    942  1.1  bouyer 	{ IMX6SXCLK_PLL2_BYPASS_SRC,	"pll2_bypass_src" },
    943  1.1  bouyer 	{ IMX6SXCLK_PLL3_BYPASS_SRC,	"pll3_bypass_src" },
    944  1.1  bouyer 	{ IMX6SXCLK_PLL4_BYPASS_SRC,	"pll4_bypass_src" },
    945  1.1  bouyer 	{ IMX6SXCLK_PLL5_BYPASS_SRC,	"pll5_bypass_src" },
    946  1.1  bouyer 	{ IMX6SXCLK_PLL6_BYPASS_SRC,	"pll6_bypass_src" },
    947  1.1  bouyer 	{ IMX6SXCLK_PLL7_BYPASS_SRC,	"pll7_bypass_src" },
    948  1.1  bouyer 	{ IMX6SXCLK_PLL1,		"pll1" },
    949  1.1  bouyer 	{ IMX6SXCLK_PLL2,		"pll2" },
    950  1.1  bouyer 	{ IMX6SXCLK_PLL3,		"pll3" },
    951  1.1  bouyer 	{ IMX6SXCLK_PLL4,		"pll4" },
    952  1.1  bouyer 	{ IMX6SXCLK_PLL5,		"pll5" },
    953  1.1  bouyer 	{ IMX6SXCLK_PLL6,		"pll6" },
    954  1.1  bouyer 	{ IMX6SXCLK_PLL7,		"pll7" },
    955  1.1  bouyer 	{ IMX6SXCLK_PLL1_BYPASS,	"pll1_bypass" },
    956  1.1  bouyer 	{ IMX6SXCLK_PLL2_BYPASS,	"pll2_bypass" },
    957  1.1  bouyer 	{ IMX6SXCLK_PLL3_BYPASS,	"pll3_bypass" },
    958  1.1  bouyer 	{ IMX6SXCLK_PLL4_BYPASS,	"pll4_bypass" },
    959  1.1  bouyer 	{ IMX6SXCLK_PLL5_BYPASS,	"pll5_bypass" },
    960  1.1  bouyer 	{ IMX6SXCLK_PLL6_BYPASS,	"pll6_bypass" },
    961  1.1  bouyer 	{ IMX6SXCLK_PLL7_BYPASS,	"pll7_bypass" },
    962  1.1  bouyer 	{ IMX6SXCLK_SPDIF_GCLK,		"spdif_gclk" },
    963  1.1  bouyer 	{ IMX6SXCLK_LVDS2_SEL,		"lvds2_sel" },
    964  1.1  bouyer 	{ IMX6SXCLK_LVDS2_OUT,		"lvds2_out" },
    965  1.1  bouyer 	{ IMX6SXCLK_LVDS2_IN,		"lvds2_in" },
    966  1.1  bouyer 	{ IMX6SXCLK_ANACLK2,		"anaclk2" },
    967  1.1  bouyer 	{ IMX6SXCLK_MMDC_P1_IPG,	"mmdc_p1_ipg" },
    968  1.1  bouyer 	{ IMX6SXCLK_END,		"end" },
    969  1.1  bouyer };
    970  1.1  bouyer 
    971  1.1  bouyer /* Clock Divider Tables */
    972  1.1  bouyer static const int enet_ref_tbl[] = { 20, 10, 5, 4, 0 };
    973  1.1  bouyer static const int post_div_tbl[] = { 4, 2, 1, 0 };
    974  1.1  bouyer static const int audiovideo_div_tbl[] = { 1, 2, 1, 4, 0 };
    975  1.1  bouyer 
    976  1.1  bouyer static struct imx6_clk imx6sx_clks[] = {
    977  1.1  bouyer 	CLK_FIXED("dummy", 0),
    978  1.1  bouyer 	CLK_FIXED("ckil", IMX6_CKIL_FREQ),
    979  1.1  bouyer 	CLK_FIXED("osc", IMX6_OSC_FREQ),
    980  1.4   skrll 	CLK_FIXED("ipp_di0", IMX6_OSC_FREQ),
    981  1.4   skrll 	CLK_FIXED("ipp_di1", IMX6_OSC_FREQ),
    982  1.1  bouyer 	CLK_FIXED("anaclk1", IMX6_ANACLK1_FREQ),
    983  1.1  bouyer 	CLK_FIXED("anaclk2", IMX6_ANACLK2_FREQ),
    984  1.3  bouyer 
    985  1.1  bouyer 	CLK_FIXED_FACTOR("pcie_ref", "pll6_enet", 5, 1),
    986  1.1  bouyer 	CLK_FIXED_FACTOR("pll2_198m", "pll2_pfd2_396m", 2, 1),
    987  1.1  bouyer 	CLK_FIXED_FACTOR("pll3_120m", "pll3_usb_otg", 4, 1),
    988  1.1  bouyer 	CLK_FIXED_FACTOR("pll3_80m", "pll3_usb_otg", 6, 1),
    989  1.1  bouyer 	CLK_FIXED_FACTOR("pll3_60m", "pll3_usb_otg", 8, 1),
    990  1.1  bouyer 	CLK_FIXED_FACTOR("twd", "arm", 2, 1),
    991  1.1  bouyer 	CLK_FIXED_FACTOR("gpt_3m", "osc", 8, 1),
    992  1.1  bouyer 	CLK_FIXED_FACTOR("ldb_di0_div_3_5", "ldb_di0_sel", 7, 2),
    993  1.1  bouyer 	CLK_FIXED_FACTOR("ldb_di0_div_7", "ldb_di0_sel", 7, 1),
    994  1.1  bouyer 	CLK_FIXED_FACTOR("ldb_di1_div_3_5", "ldb_di1_sel", 7, 2),
    995  1.1  bouyer 	CLK_FIXED_FACTOR("ldb_di1_div_7", "ldb_di1_sel", 7, 1),
    996  1.1  bouyer 	CLK_FIXED_FACTOR("enet_ptp_ref", "pll6_enet", 20, 1),
    997  1.3  bouyer 
    998  1.1  bouyer 	CLK_PFD("pll2_pfd0_352m", "pll2_bus", PFD_528, 0),
    999  1.1  bouyer 	CLK_PFD("pll2_pfd1_594m", "pll2_bus", PFD_528, 1),
   1000  1.1  bouyer 	CLK_PFD("pll2_pfd2_396m", "pll2_bus", PFD_528, 2),
   1001  1.1  bouyer 	CLK_PFD("pll2_pfd3_594m", "pll2_bus", PFD_528, 3),
   1002  1.1  bouyer 	CLK_PFD("pll3_pfd0_720m", "pll3_usb_otg", PFD_480, 0),
   1003  1.1  bouyer 	CLK_PFD("pll3_pfd1_540m", "pll3_usb_otg", PFD_480, 1),
   1004  1.1  bouyer 	CLK_PFD("pll3_pfd2_508m", "pll3_usb_otg", PFD_480, 2),
   1005  1.1  bouyer 	CLK_PFD("pll3_pfd3_454m", "pll3_usb_otg", PFD_480, 3),
   1006  1.3  bouyer 
   1007  1.1  bouyer 	CLK_PLL("pll1", "osc", SYS, PLL_ARM, DIV_SELECT, POWERDOWN, 0),
   1008  1.1  bouyer 	CLK_PLL("pll2", "osc", GENERIC, PLL_SYS, DIV_SELECT, POWERDOWN, 0),
   1009  1.1  bouyer 	CLK_PLL("pll3", "osc", USB, PLL_USB1, DIV_SELECT, POWER, 0),
   1010  1.1  bouyer 	CLK_PLL("pll4", "osc", AUDIO_VIDEO, PLL_AUDIO, DIV_SELECT, POWERDOWN, 0),
   1011  1.1  bouyer 	CLK_PLL("pll5", "osc", AUDIO_VIDEO, PLL_VIDEO, DIV_SELECT, POWERDOWN, 0),
   1012  1.1  bouyer 	CLK_PLL("pll6", "osc", ENET, PLL_ENET, DIV_SELECT, POWERDOWN, 500000000),
   1013  1.1  bouyer 	CLK_PLL("pll7", "osc", USB, PLL_USB2, DIV_SELECT, POWER, 0),
   1014  1.3  bouyer 
   1015  1.1  bouyer 	CLK_DIV("periph_clk2", "periph_clk2_sel", CBCDR, PERIPH_CLK2_PODF),
   1016  1.1  bouyer 	CLK_DIV("periph2_clk2", "periph2_clk2_sel", CBCDR, PERIPH2_CLK2_PODF),
   1017  1.1  bouyer 	CLK_DIV_BUSY("ocram_podf", "ocram_sel", CBCDR, AXI_PODF, CDHIPR, AXI_PODF_BUSY),
   1018  1.1  bouyer 	CLK_DIV("ipg", "ahb", CBCDR, IPG_PODF),
   1019  1.1  bouyer 	CLK_DIV("gpu_core_podf", "gpu_core_sel", CBCMR, GPU3D_SHADER_PODF),
   1020  1.1  bouyer 	CLK_DIV("gpu_axi_podf", "gpu_axi_sel", CBCMR, GPU3D_CORE_PODF),
   1021  1.1  bouyer 	CLK_DIV("lcdif1_podf", "lcdif1_pred", CBCMR, GPU2D_CORE_CLK_PODF),
   1022  1.1  bouyer 	CLK_DIV("esai_pred", "esai_sel", CS1CDR, ESAI_CLK_PRED),
   1023  1.1  bouyer 	CLK_DIV("esai_podf", "esai_pred", CS1CDR, ESAI_CLK_PODF),
   1024  1.1  bouyer 	CLK_DIV("spdif_pred", "spdif_sel", CDCDR, SPDIF0_CLK_PRED),
   1025  1.1  bouyer 	CLK_DIV("spdif_podf", "spdif_pred", CDCDR, SPDIF0_CLK_PODF),
   1026  1.1  bouyer 	CLK_DIV("audio_pred", "audio_sel", CDCDR, SPDIF1_CLK_PRED),
   1027  1.1  bouyer 	CLK_DIV("audio_podf", "audio_pred", CDCDR, SPDIF1_CLK_PODF),
   1028  1.1  bouyer 	CLK_DIV("vid_podf", "vid_sel", CSCMR2, VID_CLK_PODF),
   1029  1.1  bouyer 	CLK_DIV("can_podf", "can_sel", CSCMR2, CAN_CLK_PODF),
   1030  1.1  bouyer 	CLK_DIV("display_podf", "display_sel", CSCDR3, IPU2_HSP_PODF),
   1031  1.1  bouyer 	CLK_DIV("csi_podf", "csi_sel", CSCDR3, IPU1_HSP_PODF),
   1032  1.1  bouyer 	CLK_DIV("enet_podf", "enet_pre_sel", CHSCCDR, IPU1_DI1_PODF),
   1033  1.1  bouyer 	CLK_DIV("m4_podf", "m4_sel", CHSCCDR, IPU1_DI0_PODF),
   1034  1.1  bouyer 	CLK_DIV("ecspi_podf", "ecspi_sel", CSCDR2, ECSPI_CLK_PODF),
   1035  1.1  bouyer 	CLK_DIV("lcdif1_pred", "lcdif1_pre_sel", CSCDR2, IPU2_DI1_PODF),
   1036  1.1  bouyer 	CLK_DIV("lcdif2_pred", "lcdif2_pre_sel", CSCDR2, IPU2_DI0_PODF),
   1037  1.1  bouyer 	CLK_DIV("ssi1_pred", "ssi1_sel", CS1CDR, SSI1_CLK_PRED),
   1038  1.1  bouyer 	CLK_DIV("ssi1_podf", "ssi1_pred", CS1CDR, SSI1_CLK_PODF),
   1039  1.1  bouyer 	CLK_DIV("ssi2_pred", "ssi2_sel", CS2CDR, SSI2_CLK_PRED),
   1040  1.1  bouyer 	CLK_DIV("ssi2_podf", "ssi2_pred", CS2CDR, SSI2_CLK_PODF),
   1041  1.1  bouyer 	CLK_DIV("ssi3_pred", "ssi3_sel", CS1CDR, SSI3_CLK_PRED),
   1042  1.1  bouyer 	CLK_DIV("ssi3_podf", "ssi3_pred", CS1CDR, SSI3_CLK_PODF),
   1043  1.1  bouyer 	CLK_DIV("usdhc1_podf", "usdhc1_sel", CSCDR1, USDHC1_PODF),
   1044  1.1  bouyer 	CLK_DIV("usdhc2_podf", "usdhc2_sel", CSCDR1, USDHC2_PODF),
   1045  1.1  bouyer 	CLK_DIV("usdhc3_podf", "usdhc3_sel", CSCDR1, USDHC3_PODF),
   1046  1.1  bouyer 	CLK_DIV("usdhc4_podf", "usdhc4_sel", CSCDR1, USDHC4_PODF),
   1047  1.1  bouyer 	CLK_DIV("uart_podf", "uart_sel", CSCDR1, UART_CLK_PODF),
   1048  1.1  bouyer 	CLK_DIV("qspi2_pred", "qspi2_sel", CS2CDR, ENFC_CLK_PRED),
   1049  1.1  bouyer 	CLK_DIV("qspi2_podf", "qspi2_pred", CS2CDR, ENFC_CLK_PODF),
   1050  1.1  bouyer 	CLK_DIV("cko1_podf", "cko1_sel", CCOSR, CLKO1_DIV),
   1051  1.1  bouyer 	CLK_DIV("cko2_podf", "cko2_sel", CCOSR, CLKO2_DIV),
   1052  1.1  bouyer 	CLK_DIV("qspi1_podf", "qspi1_sel", CSCMR1, QSPI1_PODF),
   1053  1.1  bouyer 	CLK_DIV("eim_slow_podf", "eim_slow_sel", CSCMR1, ACLK_EIM_SLOW_PODF),
   1054  1.1  bouyer 	CLK_DIV("lcdif2_podf", "lcdif2_pred", CSCMR1, ACLK_PODF),
   1055  1.1  bouyer 	CLK_DIV("perclk", "perclk_sel", CSCMR1, PERCLK_PODF),
   1056  1.3  bouyer 
   1057  1.1  bouyer 	CLK_DIV_BUSY("arm", "pll1_sw", CACRR, ARM_PODF, CDHIPR, ARM_PODF_BUSY),
   1058  1.1  bouyer 	CLK_DIV_BUSY("ahb", "periph", CBCDR, AHB_PODF, CDHIPR, AHB_PODF_BUSY),
   1059  1.1  bouyer 	CLK_DIV_BUSY("mmdc_podf", "periph2", CBCDR, MMDC_CH1_AXI_PODF, CDHIPR, MMDC_CH1_PODF_BUSY),
   1060  1.3  bouyer 
   1061  1.1  bouyer 	CLK_DIV_TABLE("pll4_post_div", "pll4_audio", PLL_AUDIO, POST_DIV_SELECT, post_div_tbl),
   1062  1.1  bouyer 	CLK_DIV_TABLE("pll4_audio_div", "pll4_post_div", MISC2, AUDIO_DIV_LSB, audiovideo_div_tbl),
   1063  1.1  bouyer 	CLK_DIV_TABLE("pll5_post_div", "pll5_video", PLL_VIDEO, POST_DIV_SELECT, post_div_tbl),
   1064  1.1  bouyer 	CLK_DIV_TABLE("pll5_video_div", "pll5_post_div", MISC2, VIDEO_DIV, audiovideo_div_tbl),
   1065  1.1  bouyer 	CLK_DIV_TABLE("enet_ref", "pll6_enet", PLL_ENET, DIV_SELECT, enet_ref_tbl),
   1066  1.1  bouyer 	CLK_DIV_TABLE("enet2_ref", "pll6_enet", PLL_ENET, DIV2_SELECT, enet_ref_tbl),
   1067  1.3  bouyer 
   1068  1.1  bouyer 	CLK_MUX("step", step_p, CCM, CCSR, STEP_SEL),
   1069  1.1  bouyer 	CLK_MUX("pll1_sw", pll1_sw_p, CCM, CCSR, PLL1_SW_CLK_SEL),
   1070  1.1  bouyer 	CLK_MUX("ocram_sel", ocram_p, CCM, CBCDR, AXI_SEL),
   1071  1.1  bouyer 	CLK_MUX("periph_pre", periph_pre_p, CCM, CBCMR, PRE_PERIPH_CLK_SEL),
   1072  1.1  bouyer 	CLK_MUX("periph2_pre", periph2_pre_p, CCM, CBCMR, PRE_PERIPH2_CLK_SEL),
   1073  1.1  bouyer 	CLK_MUX("periph_clk2_sel", periph_clk2_p, CCM,CBCMR, PERIPH_CLK2_SEL),
   1074  1.1  bouyer 	CLK_MUX("periph2_clk2_sel", periph2_clk2_p, CCM,CBCMR, PERIPH2_CLK2_SEL),
   1075  1.1  bouyer 	CLK_MUX("spdif_sel", audio_p, CCM, CDCDR, SPDIF0_CLK_SEL),
   1076  1.1  bouyer 	CLK_MUX("audio_sel", audio_p, CCM, CDCDR, SPDIF1_CLK_SEL),
   1077  1.1  bouyer 	CLK_MUX("vid_sel", vid_p, CCM, CSCMR2, VID_CLK_SEL),
   1078  1.1  bouyer 	CLK_MUX("esai_sel", audio_p, CCM, CSCMR2, ESAI_CLK_SEL),
   1079  1.1  bouyer 	CLK_MUX("ldb_di0_div_sel", ldb_di0_div_p, CCM, CSCMR2, LDB_DI0_IPU_DIV),
   1080  1.1  bouyer 	CLK_MUX("ldb_di1_div_sel", ldb_di1_div_p, CCM, CSCMR2, LDB_DI1_IPU_DIV),
   1081  1.1  bouyer 	CLK_MUX("can_sel", can_p, CCM, CSCMR2, CAN_CLK_SEL),
   1082  1.1  bouyer 	CLK_MUX("uart_sel", uart_p, CCM, CSCDR1, UART_CLK_SEL),
   1083  1.1  bouyer 	CLK_MUX("enet_pre_sel", enet_pre_p, CCM, CHSCCDR, ENET_PRE_CLK_SEL),
   1084  1.1  bouyer 	CLK_MUX("enet_sel", enet_p, CCM, CHSCCDR, ENET_CLK_SEL),
   1085  1.1  bouyer 	CLK_MUX("m4_pre_sel", m4_pre_p, CCM, CHSCCDR, M4_PRE_CLK_SEL),
   1086  1.1  bouyer 	CLK_MUX("m4_sel", m4_p, CCM, CHSCCDR, M4_CLK_SEL),
   1087  1.1  bouyer 	CLK_MUX("ecspi_sel", ecspi_p, CCM, CSCDR2, ECSPI_SEL),
   1088  1.1  bouyer 	CLK_MUX("lcdif1_sel", lcdif1_p, CCM, CSCDR2, IPU2_DI1_CLK_SEL),
   1089  1.1  bouyer 	CLK_MUX("lcdif1_pre_sel", lcdif1_pre_p, CCM, CSCDR2, IPU2_DI1_PRE_CLK_SEL),
   1090  1.1  bouyer 	CLK_MUX("lcdif1_sel", lcdif1_p, CCM, CSCDR2, IPU2_DI1_CLK_SEL),
   1091  1.1  bouyer 	CLK_MUX("lcdif2_pre_sel", lcdif2_pre_p, CCM, CSCDR2, IPU2_DI0_PRE_CLK_SEL),
   1092  1.1  bouyer 	CLK_MUX("lcdif2_sel", lcdif2_p, CCM, CSCDR2, IPU2_DI0_CLK_SEL),
   1093  1.1  bouyer 	CLK_MUX("display_sel", display_p, CCM, CSCDR3, IPU2_HSP_CLK_SEL),
   1094  1.1  bouyer 	CLK_MUX("csi_sel", csi_p, CCM, CSCDR3, IPU1_HSP_CLK_SEL),
   1095  1.1  bouyer 	CLK_MUX("qspi2_sel", qspi2_p, CCM, CS2CDR, QSPI2_CLK_SEL),
   1096  1.1  bouyer 	CLK_MUX("ldb_di0_sel", ldb_di0_p, CCM, CS2CDR, LDB_DI0_CLK_SEL),
   1097  1.1  bouyer 	CLK_MUX("ldb_di1_sel", ldb_di1_p, CCM, CS2CDR, LDB_DI1_CLK_SEL),
   1098  1.1  bouyer 	CLK_MUX("cko1_sel", cko1_p, CCM, CCOSR, CLKO1_SEL),
   1099  1.1  bouyer 	CLK_MUX("cko2_sel", cko2_p, CCM, CCOSR, CLKO2_SEL),
   1100  1.1  bouyer 	CLK_MUX("cko", cko_p, CCM, CCOSR, CLK_OUT_SEL),
   1101  1.1  bouyer 	CLK_MUX("pcie_axi_sel", pcie_axi_p, CCM, CBCMR, PCIE_AXI_CLK_SEL),
   1102  1.1  bouyer 	CLK_MUX("gpu_axi_sel", gpu_axi_p, CCM, CBCMR, GPU3D_SHADER_CLK_SEL),
   1103  1.1  bouyer 	CLK_MUX("gpu_core_sel", gpu_core_p, CCM, CBCMR, GPU3D_CORE_CLK_SEL),
   1104  1.1  bouyer 	CLK_MUX("ssi1_sel", ssi_p, CCM, CSCMR1, SSI1_CLK_SEL),
   1105  1.1  bouyer 	CLK_MUX("ssi2_sel", ssi_p, CCM, CSCMR1, SSI2_CLK_SEL),
   1106  1.1  bouyer 	CLK_MUX("ssi3_sel", ssi_p, CCM, CSCMR1, SSI3_CLK_SEL),
   1107  1.1  bouyer 	CLK_MUX("usdhc1_sel", usdhc_p, CCM, CSCMR1, USDHC1_CLK_SEL),
   1108  1.1  bouyer 	CLK_MUX("usdhc2_sel", usdhc_p, CCM, CSCMR1, USDHC2_CLK_SEL),
   1109  1.1  bouyer 	CLK_MUX("usdhc3_sel", usdhc_p, CCM, CSCMR1, USDHC3_CLK_SEL),
   1110  1.1  bouyer 	CLK_MUX("usdhc4_sel", usdhc_p, CCM, CSCMR1, USDHC4_CLK_SEL),
   1111  1.1  bouyer 	CLK_MUX("qspi1_sel", qspi1_p, CCM, CSCMR1, QSOI1_SEL),
   1112  1.1  bouyer 	CLK_MUX("perclk_sel", perclk_p, CCM, CSCMR1, PERCLK_SEL),
   1113  1.1  bouyer 	CLK_MUX("eim_slow_sel", eim_slow_p, CCM, CSCMR1, ACLK_EIM_SLOW_SEL),
   1114  1.1  bouyer 	CLK_MUX("pll1_bypass_src", pll_bypass_src_p, CCM_ANALOG, PLL_ARM, BYPASS_CLK_SRC_6SX),
   1115  1.1  bouyer 	CLK_MUX("pll2_bypass_src", pll_bypass_src_p, CCM_ANALOG, PLL_SYS, BYPASS_CLK_SRC_6SX),
   1116  1.1  bouyer 	CLK_MUX("pll3_bypass_src", pll_bypass_src_p, CCM_ANALOG, PLL_USB1, BYPASS_CLK_SRC_6SX),
   1117  1.1  bouyer 	CLK_MUX("pll4_bypass_src", pll_bypass_src_p, CCM_ANALOG, PLL_AUDIO, BYPASS_CLK_SRC_6SX),
   1118  1.1  bouyer 	CLK_MUX("pll5_bypass_src", pll_bypass_src_p, CCM_ANALOG, PLL_VIDEO, BYPASS_CLK_SRC_6SX),
   1119  1.1  bouyer 	CLK_MUX("pll6_bypass_src", pll_bypass_src_p, CCM_ANALOG, PLL_ENET, BYPASS_CLK_SRC_6SX),
   1120  1.1  bouyer 	CLK_MUX("pll7_bypass_src", pll_bypass_src_p, CCM_ANALOG, PLL_USB2, BYPASS_CLK_SRC_6SX),
   1121  1.1  bouyer 	CLK_MUX("pll1_bypass", pll1_bypass_p, CCM_ANALOG, PLL_ARM, BYPASS),
   1122  1.1  bouyer 	CLK_MUX("pll2_bypass", pll2_bypass_p, CCM_ANALOG, PLL_SYS, BYPASS),
   1123  1.1  bouyer 	CLK_MUX("pll3_bypass", pll3_bypass_p, CCM_ANALOG, PLL_USB1, BYPASS),
   1124  1.1  bouyer 	CLK_MUX("pll4_bypass", pll4_bypass_p, CCM_ANALOG, PLL_AUDIO, BYPASS),
   1125  1.1  bouyer 	CLK_MUX("pll5_bypass", pll5_bypass_p, CCM_ANALOG, PLL_VIDEO, BYPASS),
   1126  1.1  bouyer 	CLK_MUX("pll6_bypass", pll6_bypass_p, CCM_ANALOG, PLL_ENET, BYPASS),
   1127  1.1  bouyer 	CLK_MUX("pll7_bypass", pll7_bypass_p, CCM_ANALOG, PLL_USB2, BYPASS),
   1128  1.1  bouyer 
   1129  1.1  bouyer 	CLK_MUX("lvds1_sel", lvds_p, CCM_ANALOG, MISC1, LVDS_CLK1_SRC),
   1130  1.1  bouyer 	CLK_MUX("lvds2_sel", lvds_p, CCM_ANALOG, MISC1, LVDS_CLK2_SRC),
   1131  1.3  bouyer 
   1132  1.1  bouyer 	CLK_MUX_BUSY("periph", periph_p, CBCDR, PERIPH_CLK_SEL, CDHIPR, PERIPH_CLK_SEL_BUSY),
   1133  1.1  bouyer 	CLK_MUX_BUSY("periph2", periph2_p, CBCDR, PERIPH2_CLK_SEL, CDHIPR, PERIPH2_CLK_SEL_BUSY),
   1134  1.3  bouyer 
   1135  1.1  bouyer 	CLK_GATE("aips_tz1", "ahb", CCM, CCGR0, AIPS_TZ1_CLK_ENABLE),
   1136  1.1  bouyer 	CLK_GATE("aips_tz2", "ahb", CCM, CCGR0, AIPS_TZ2_CLK_ENABLE),
   1137  1.1  bouyer 	CLK_GATE("apbh_dma", "usdhc3", CCM, CCGR0, APBHDMA_HCLK_ENABLE),
   1138  1.1  bouyer 	CLK_GATE("asrc_ipg", "ahb", CCM, CCGR0, ASRC_CLK_ENABLE),
   1139  1.1  bouyer 	CLK_GATE("asrc_mem", "ahb", CCM, CCGR0, ASRC_CLK_ENABLE),
   1140  1.1  bouyer 	CLK_GATE("caam_mem", "ahb", CCM, CCGR0, CAAM_SECURE_MEM_CLK_ENABLE),
   1141  1.1  bouyer 	CLK_GATE("caam_aclk", "ahb", CCM, CCGR0, CAAM_WRAPPER_ACLK_ENABLE),
   1142  1.1  bouyer 	CLK_GATE("caam_ipg", "ipg", CCM, CCGR0, CAAM_WRAPPER_IPG_ENABLE),
   1143  1.1  bouyer 	CLK_GATE("can1_ipg", "ipg", CCM, CCGR0, CAN1_CLK_ENABLE),
   1144  1.1  bouyer 	CLK_GATE("can1_serial", "can_podf", CCM, CCGR0, CAN1_SERIAL_CLK_ENABLE),
   1145  1.1  bouyer 	CLK_GATE("can2_ipg", "ipg", CCM, CCGR0, CAN2_CLK_ENABLE),
   1146  1.1  bouyer 	CLK_GATE("can2_serial", "can_podf", CCM, CCGR0, CAN2_SERIAL_CLK_ENABLE),
   1147  1.1  bouyer 	CLK_GATE("dcic1", "display_podf", CCM, CCGR0, DCIC1_CLK_ENABLE),
   1148  1.1  bouyer 	CLK_GATE("dcic2", "display_podf", CCM, CCGR0, DCIC2_CLK_ENABLE),
   1149  1.1  bouyer 	CLK_GATE("aips_tz3", "ahb", CCM, CCGR0, TZ3_CLK_ENABLE),
   1150  1.1  bouyer 	CLK_GATE("ecspi1", "ecspi_podf", CCM, CCGR1, ECSPI1_CLK_ENABLE),
   1151  1.1  bouyer 	CLK_GATE("ecspi2", "ecspi_podf", CCM, CCGR1, ECSPI2_CLK_ENABLE),
   1152  1.1  bouyer 	CLK_GATE("ecspi3", "ecspi_podf", CCM, CCGR1, ECSPI3_CLK_ENABLE),
   1153  1.1  bouyer 	CLK_GATE("ecspi4", "ecspi_podf", CCM, CCGR1, ECSPI4_CLK_ENABLE),
   1154  1.1  bouyer 	CLK_GATE("ecspi5", "ecspi_podf", CCM, CCGR1, ECSPI5_CLK_ENABLE),
   1155  1.1  bouyer 	CLK_GATE("epit1", "perclk", CCM, CCGR1, EPIT1_CLK_ENABLE),
   1156  1.1  bouyer 	CLK_GATE("epit2", "perclk", CCM, CCGR1, EPIT2_CLK_ENABLE),
   1157  1.1  bouyer 	CLK_GATE("esai_extal", "esai_podf", CCM, CCGR1, ESAI_CLK_ENABLE),
   1158  1.1  bouyer 	CLK_GATE("esai_ipg", "ahb", CCM, CCGR1, ESAI_CLK_ENABLE),
   1159  1.1  bouyer 	CLK_GATE("esai_mem", "ahb", CCM, CCGR1, ESAI_CLK_ENABLE),
   1160  1.1  bouyer 	CLK_GATE("wakeup", "ipg", CCM, CCGR1, WAKEUP_CLK_ENABLE),
   1161  1.1  bouyer 	CLK_GATE("gpt_bus", "perclk", CCM, CCGR1, GPT_CLK_ENABLE),
   1162  1.1  bouyer 	CLK_GATE("gpt_serial", "perclk", CCM, CCGR1, GPT_SERIAL_CLK_ENABLE),
   1163  1.1  bouyer 	CLK_GATE("gpu", "gpu_core_podf", CCM, CCGR1, GPU3D_CLK_ENABLE),
   1164  1.1  bouyer 	CLK_GATE("ocram_s", "ahb", CCM, CCGR1, OCRAM_CLK_ENABLE),
   1165  1.1  bouyer 	CLK_GATE("canfd", "can_podf", CCM, CCGR1, CANFD_CLK_ENABLE),
   1166  1.1  bouyer 	CLK_GATE("csi", "csi_podf", CCM, CCGR2, CSI_CLK_ENABLE),
   1167  1.1  bouyer 	CLK_GATE("i2c1", "perclk", CCM, CCGR2, I2C1_SERIAL_CLK_ENABLE),
   1168  1.1  bouyer 	CLK_GATE("i2c2", "perclk", CCM, CCGR2, I2C2_SERIAL_CLK_ENABLE),
   1169  1.1  bouyer 	CLK_GATE("i2c3", "perclk", CCM, CCGR2, I2C3_SERIAL_CLK_ENABLE),
   1170  1.1  bouyer 	CLK_GATE("ocotp", "ipg", CCM, CCGR2, IIM_CLK_ENABLE),
   1171  1.1  bouyer 	CLK_GATE("iomuxc", "lcdif1_podf", CCM, CCGR2, IOMUX_IPT_CLK_IO_CLK_ENABLE),
   1172  1.1  bouyer 	CLK_GATE("ipmux1", "ahb", CCM, CCGR2, IPMUX1_CLK_ENABLE),
   1173  1.1  bouyer 	CLK_GATE("ipmux2", "ahb", CCM, CCGR2, IPMUX2_CLK_ENABLE),
   1174  1.1  bouyer 	CLK_GATE("ipmux3", "ahb", CCM, CCGR2, IPMUX3_CLK_ENABLE),
   1175  1.1  bouyer 	CLK_GATE("tzasc1", "mmdc_podf", CCM, CCGR2, IPSYNC_IP2APB_TZASC1_IPG_CLK_ENABLE),
   1176  1.1  bouyer 	CLK_GATE("lcdif_apb", "display_podf", CCM, CCGR2, LCDIF_APB_CLK_ENABLE),
   1177  1.1  bouyer 	CLK_GATE("pxp_axi", "display_podf", CCM, CCGR2, PXP_AXI_CLK_ENABLE),
   1178  1.1  bouyer 	CLK_GATE("enet", "ipg", CCM, CCGR3, IPU1_IPU_DI1_CLK_ENABLE),
   1179  1.1  bouyer 	CLK_GATE("enet_ahb", "enet_sel", CCM, CCGR3, IPU1_IPU_DI1_CLK_ENABLE),
   1180  1.1  bouyer 	CLK_GATE("m4", "m4_podf", CCM, CCGR3, IPU1_IPU_DI0_CLK_ENABLE),
   1181  1.1  bouyer 	CLK_GATE("display_axi", "display_podf", CCM, CCGR3, IPU2_IPU_CLK_ENABLE),
   1182  1.1  bouyer 	CLK_GATE("lcdif2_pix", "lcdif2_sel", CCM, CCGR3, IPU2_IPU_DI0_CLK_ENABLE),
   1183  1.1  bouyer 	CLK_GATE("lcdif1_pix", "lcdif1_sel", CCM, CCGR3, IPU2_IPU_DI1_CLK_ENABLE),
   1184  1.1  bouyer 	CLK_GATE("ldb_di0", "ldb_di0_div_sel", CCM, CCGR3, LDB_DI0_CLK_ENABLE),
   1185  1.1  bouyer 	CLK_GATE("qspi1", "qspi1_podf", CCM, CCGR3, LDB_DI1_CLK_ENABLE),
   1186  1.1  bouyer 	CLK_GATE("mlb", "ahb", CCM, CCGR3, MLB_CLK_ENABLE),
   1187  1.1  bouyer 	CLK_GATE("mmdc_p0_fast", "mmdc_podf", CCM, CCGR3, MMDC_CORE_ACLK_FAST_CORE_P0_ENABLE),
   1188  1.1  bouyer 	CLK_GATE("mmdc_p0_ipg", "ipg", CCM, CCGR3, MMDC_CORE_IPG_CLK_P0_ENABLE),
   1189  1.1  bouyer 	CLK_GATE("mmdc_p1_ipg", "ipg", CCM, CCGR3, MMDC_P1_IPG_CLK_ENABLE),
   1190  1.1  bouyer 	CLK_GATE("ocram", "ahb", CCM, CCGR3, OCRAM_CLK_ENABLE),
   1191  1.1  bouyer 	CLK_GATE("pcie_axi", "display_podf", CCM, CCGR4, PCIE_ROOT_ENABLE),
   1192  1.1  bouyer 	CLK_GATE("qspi2", "qspi2_podf", CCM, CCGR4, QSPI2_ENABLE),
   1193  1.1  bouyer 	CLK_GATE("per1_bch", "usdhc3", CCM, CCGR4, PL301_MX6QPER1_BCHCLK_ENABLE),
   1194  1.1  bouyer 	CLK_GATE("per2_main", "ahb", CCM, CCGR4, PL301_MX6QPER2_MAINCLK_ENABLE),
   1195  1.1  bouyer 	CLK_GATE("pwm1", "perclk", CCM, CCGR4, PWM1_CLK_ENABLE),
   1196  1.1  bouyer 	CLK_GATE("pwm2", "perclk", CCM, CCGR4, PWM2_CLK_ENABLE),
   1197  1.1  bouyer 	CLK_GATE("pwm3", "perclk", CCM, CCGR4, PWM3_CLK_ENABLE),
   1198  1.1  bouyer 	CLK_GATE("pwm4", "perclk", CCM, CCGR4, PWM4_CLK_ENABLE),
   1199  1.1  bouyer 	CLK_GATE("gpmi_bch_apb", "usdhc3", CCM, CCGR4, RAWNAND_U_BCH_INPUT_APB_CLK_ENABLE),
   1200  1.1  bouyer 	CLK_GATE("gpmi_bch", "usdhc4", CCM, CCGR4, RAWNAND_U_GPMI_BCH_INPUT_BCH_CLK_ENABLE),
   1201  1.1  bouyer 	CLK_GATE("gpmi_io", "qspi2_podf", CCM, CCGR4, RAWNAND_U_GPMI_BCH_INPUT_GPMI_IO_CLK_ENABLE),
   1202  1.1  bouyer 	CLK_GATE("gpmi_apb", "usdhc3", CCM, CCGR4, RAWNAND_U_GPMI_INPUT_APB_CLK_ENABLE),
   1203  1.1  bouyer 	CLK_GATE("rom", "ahb", CCM, CCGR5, ROM_CLK_ENABLE),
   1204  1.1  bouyer 	CLK_GATE("sdma", "ahb", CCM, CCGR5, SDMA_CLK_ENABLE),
   1205  1.1  bouyer 	CLK_GATE("spba", "ipg", CCM, CCGR5, SPBA_CLK_ENABLE),
   1206  1.1  bouyer 	CLK_GATE("audio", "audio_podf", CCM, CCGR5, SPDIF_CLK_ENABLE),
   1207  1.1  bouyer 	CLK_GATE("spdif", "spdif_podf", CCM, CCGR5, SPDIF_CLK_ENABLE),
   1208  1.1  bouyer 	CLK_GATE("spdif_gclk", "ipg", CCM, CCGR5, SPDIF_CLK_ENABLE),
   1209  1.1  bouyer 	CLK_GATE("ssi1_ipg", "ipg", CCM, CCGR5, SSI1_CLK_ENABLE),
   1210  1.1  bouyer 	CLK_GATE("ssi2_ipg", "ipg", CCM, CCGR5, SSI2_CLK_ENABLE),
   1211  1.1  bouyer 	CLK_GATE("ssi3_ipg", "ipg", CCM, CCGR5, SSI3_CLK_ENABLE),
   1212  1.1  bouyer 	CLK_GATE("ssi1", "ssi1_podf", CCM, CCGR5, SSI1_CLK_ENABLE),
   1213  1.1  bouyer 	CLK_GATE("ssi2", "ssi2_podf", CCM, CCGR5, SSI2_CLK_ENABLE),
   1214  1.1  bouyer 	CLK_GATE("ssi3", "ssi3_podf", CCM, CCGR5, SSI3_CLK_ENABLE),
   1215  1.1  bouyer 	CLK_GATE("uart_ipg", "ipg", CCM, CCGR5, UART_CLK_ENABLE),
   1216  1.1  bouyer 	CLK_GATE("uart_serial", "uart_podf", CCM, CCGR5, UART_SERIAL_CLK_ENABLE),
   1217  1.1  bouyer 	CLK_GATE("sai1", "ssi1_podf", CCM, CCGR5, SAI1_ENABLE),
   1218  1.1  bouyer 	CLK_GATE("sai2", "ssi2_podf", CCM, CCGR5, SAI2_ENABLE),
   1219  1.1  bouyer 	CLK_GATE("sai1_ipg", "ipg", CCM, CCGR5, SAI1_ENABLE),
   1220  1.1  bouyer 	CLK_GATE("sai2_ipg", "ipg", CCM, CCGR5, SAI2_ENABLE),
   1221  1.1  bouyer 	CLK_GATE("usboh3", "ipg", CCM, CCGR6, USBOH3_CLK_ENABLE),
   1222  1.1  bouyer 	CLK_GATE("usdhc1", "usdhc1_podf", CCM, CCGR6, USDHC1_CLK_ENABLE),
   1223  1.1  bouyer 	CLK_GATE("usdhc2", "usdhc2_podf", CCM, CCGR6, USDHC2_CLK_ENABLE),
   1224  1.1  bouyer 	CLK_GATE("usdhc3", "usdhc3_podf", CCM, CCGR6, USDHC3_CLK_ENABLE),
   1225  1.1  bouyer 	CLK_GATE("usdhc4", "usdhc4_podf", CCM, CCGR6, USDHC4_CLK_ENABLE),
   1226  1.1  bouyer 	CLK_GATE("eim_slow", "eim_slow_podf", CCM, CCGR6, EIM_SLOW_CLK_ENABLE),
   1227  1.1  bouyer 	CLK_GATE("pwm8", "perclk", CCM, CCGR6, PWM8_CLK_ENABLE),
   1228  1.1  bouyer 	CLK_GATE("vadc", "vid_podf", CCM, CCGR6, VADC_CLK_ENABLE),
   1229  1.1  bouyer 	CLK_GATE("gis", "display_podf", CCM, CCGR6, GIS_CLK_ENABLE),
   1230  1.2  bouyer 	CLK_GATE("i2c4", "perclk", CCM, CCGR6, I2CS4_CLK_ENABLE),
   1231  1.1  bouyer 	CLK_GATE("pwm5", "perclk", CCM, CCGR6, PWM5_CLK_ENABLE),
   1232  1.1  bouyer 	CLK_GATE("pwm6", "perclk", CCM, CCGR6, PWM6_CLK_ENABLE),
   1233  1.1  bouyer 	CLK_GATE("pwm7", "perclk", CCM, CCGR6, PWM7_CLK_ENABLE),
   1234  1.1  bouyer 	CLK_GATE("cko1", "cko1_podf", CCM, CCOSR, CLKO1_EN),
   1235  1.1  bouyer 	CLK_GATE("cko2", "cko2_podf", CCM, CCOSR, CLKO2_EN),
   1236  1.1  bouyer 	CLK_GATE("enet_ptp_25m", "enet_ptp_ref", CCM_ANALOG, PLL_ENET, ENET_25M_REF_EN),
   1237  1.1  bouyer 	CLK_GATE("enet2_ref_125m", "enet2_ref", CCM_ANALOG, PLL_ENET, ENABLE_100M),
   1238  1.1  bouyer 	CLK_GATE("pcie_ref_125m", "pcie_ref", CCM_ANALOG, PLL_ENET, ENABLE_125M),
   1239  1.1  bouyer 	CLK_GATE("pll1_sys", "pll1_bypass", CCM_ANALOG, PLL_ARM, ENABLE),
   1240  1.1  bouyer 	CLK_GATE("pll2_bus", "pll2_bypass", CCM_ANALOG, PLL_SYS, ENABLE),
   1241  1.1  bouyer 	CLK_GATE("pll3_usb_otg", "pll3_bypass", CCM_ANALOG, PLL_USB1, ENABLE),
   1242  1.1  bouyer 	CLK_GATE("pll4_audio", "pll4_bypass", CCM_ANALOG, PLL_AUDIO, ENABLE),
   1243  1.1  bouyer 	CLK_GATE("pll5_video", "pll5_bypass", CCM_ANALOG, PLL_VIDEO, ENABLE),
   1244  1.1  bouyer 	CLK_GATE("pll6_enet", "pll6_bypass", CCM_ANALOG, PLL_ENET, ENABLE),
   1245  1.1  bouyer 	CLK_GATE("pll7_usb_host", "pll7_bypass", CCM_ANALOG, PLL_USB2, ENABLE),
   1246  1.1  bouyer 
   1247  1.1  bouyer 	CLK_GATE("usbphy1", "pll3_usb_otg", CCM_ANALOG, PLL_USB1, RESERVED),
   1248  1.1  bouyer 	CLK_GATE("usbphy2", "pll7_usb_host", CCM_ANALOG, PLL_USB2, RESERVED),
   1249  1.1  bouyer 	CLK_GATE("usbphy1_gate", "dummy", CCM_ANALOG, PLL_USB2, EN_USB_CLK),
   1250  1.1  bouyer 	CLK_GATE("usbphy2_gate", "dummy", CCM_ANALOG, PLL_USB2, EN_USB_CLK),
   1251  1.3  bouyer 
   1252  1.1  bouyer 	CLK_GATE_EXCLUSIVE("lvds2_out", "lvds2_sel", CCM_ANALOG, MISC1, LVDS_CLK2_OBEN, LVDS_CLK2_IBEN),
   1253  1.1  bouyer 	CLK_GATE_EXCLUSIVE("lvds2_in", "anaclk2", CCM_ANALOG, MISC1, LVDS_CLK2_IBEN, LVDS_CLK2_OBEN),
   1254  1.1  bouyer 	CLK_GATE_EXCLUSIVE("lvds1_in", "anaclk1", CCM_ANALOG, MISC1, LVDS_CLK1_IBEN, LVDS_CLK1_OBEN),
   1255  1.1  bouyer };
   1256  1.1  bouyer 
   1257  1.1  bouyer struct imxccm_init_parent imx6sxccm_init_parents[] = {
   1258  1.1  bouyer 	{ "pll1_bypass",        "pll1" },
   1259  1.1  bouyer 	{ "pll2_bypass",        "pll2" },
   1260  1.1  bouyer 	{ "pll3_bypass",        "pll3" },
   1261  1.1  bouyer 	{ "pll4_bypass",        "pll4" },
   1262  1.1  bouyer 	{ "pll5_bypass",        "pll5" },
   1263  1.1  bouyer 	{ "pll6_bypass",        "pll6" },
   1264  1.1  bouyer 	{ "pll7_bypass",        "pll7" },
   1265  1.1  bouyer 	{ "lvds1_sel",          "pcie_ref_125m" },
   1266  1.1  bouyer 	{ 0 },
   1267  1.1  bouyer };
   1268  1.1  bouyer 
   1269  1.1  bouyer static struct imx6_clk *
   1270  1.1  bouyer imx6sx_clk_find_by_id(struct imx6ccm_softc *sc, u_int clock_id)
   1271  1.1  bouyer {
   1272  1.1  bouyer 	for (int n = 0; n < __arraycount(imx6sx_clock_ids); n++) {
   1273  1.1  bouyer 		if (imx6sx_clock_ids[n].id == clock_id) {
   1274  1.1  bouyer 			const char *name = imx6sx_clock_ids[n].name;
   1275  1.1  bouyer 			return imx6_clk_find(sc, name);
   1276  1.1  bouyer 		}
   1277  1.1  bouyer 	}
   1278  1.1  bouyer 
   1279  1.1  bouyer 	return NULL;
   1280  1.1  bouyer }
   1281  1.1  bouyer 
   1282  1.1  bouyer static struct clk *
   1283  1.1  bouyer imx6sx_get_clock_by_id(struct imx6ccm_softc *sc, u_int clock_id)
   1284  1.1  bouyer {
   1285  1.1  bouyer 	struct imx6_clk *iclk;
   1286  1.1  bouyer 	iclk = imx6sx_clk_find_by_id(sc, clock_id);
   1287  1.1  bouyer 
   1288  1.1  bouyer 	if (iclk == NULL)
   1289  1.1  bouyer 		return NULL;
   1290  1.1  bouyer 
   1291  1.1  bouyer 	return &iclk->base;
   1292  1.1  bouyer }
   1293  1.1  bouyer 
   1294  1.1  bouyer static struct clk *imx6sx_clk_decode(device_t, int, const void *, size_t);
   1295  1.1  bouyer 
   1296  1.1  bouyer static const struct fdtbus_clock_controller_func imx6sx_ccm_fdtclock_funcs = {
   1297  1.1  bouyer 	.decode = imx6sx_clk_decode
   1298  1.1  bouyer };
   1299  1.1  bouyer 
   1300  1.1  bouyer static struct clk *
   1301  1.1  bouyer imx6sx_clk_decode(device_t dev, int cc_phandle, const void *data, size_t len)
   1302  1.1  bouyer {
   1303  1.1  bouyer 	struct clk *clk;
   1304  1.1  bouyer 	struct imx6ccm_softc *sc = device_private(dev);
   1305  1.1  bouyer 
   1306  1.1  bouyer 	/* #clock-cells should be 1 */
   1307  1.1  bouyer 	if (len != 4)
   1308  1.1  bouyer 		return NULL;
   1309  1.1  bouyer 
   1310  1.1  bouyer 	const u_int clock_id = be32dec(data);
   1311  1.1  bouyer 
   1312  1.1  bouyer 	clk = imx6sx_get_clock_by_id(sc, clock_id);
   1313  1.1  bouyer 	if (clk)
   1314  1.1  bouyer 		return clk;
   1315  1.1  bouyer 
   1316  1.1  bouyer 	return NULL;
   1317  1.1  bouyer }
   1318  1.1  bouyer 
   1319  1.1  bouyer static void
   1320  1.1  bouyer imx6sx_clk_fixed_from_fdt(struct imx6ccm_softc *sc, const char *name)
   1321  1.1  bouyer {
   1322  1.1  bouyer 	struct imx6_clk *iclk = (struct imx6_clk *)imx6_get_clock(sc, name);
   1323  1.1  bouyer 
   1324  1.1  bouyer 	KASSERTMSG((iclk != NULL), "failed to find clock %s", name);
   1325  1.1  bouyer 
   1326  1.1  bouyer 	char *path = kmem_asprintf("/clock-%s", name);
   1327  1.1  bouyer 	/* in device tree path, '_' are remplaced by '-' */
   1328  1.1  bouyer 	for (char *p = path; *p != '\0'; p++) {
   1329  1.1  bouyer 		if (*p == '_')
   1330  1.1  bouyer 			*p = '-';
   1331  1.1  bouyer 	}
   1332  1.1  bouyer 	int phandle = OF_finddevice(path);
   1333  1.1  bouyer 	KASSERTMSG((phandle >= 0), "failed to find device %s", path);
   1334  1.1  bouyer 	kmem_free(path, strlen(path) + 1);
   1335  1.1  bouyer 
   1336  1.1  bouyer 	if (of_getprop_uint32(phandle, "clock-frequency", &iclk->clk.fixed.rate) != 0)
   1337  1.1  bouyer 		iclk->clk.fixed.rate = 0;
   1338  1.1  bouyer }
   1339  1.1  bouyer 
   1340  1.1  bouyer static int imx6sxccm_match(device_t, cfdata_t, void *);
   1341  1.1  bouyer static void imx6sxccm_attach(device_t, device_t, void *);
   1342  1.1  bouyer 
   1343  1.1  bouyer CFATTACH_DECL_NEW(imx6sxccm, sizeof(struct imx6ccm_softc),
   1344  1.1  bouyer     imx6sxccm_match, imx6sxccm_attach, NULL, NULL);
   1345  1.1  bouyer 
   1346  1.1  bouyer static const struct device_compatible_entry compat_data[] = {
   1347  1.1  bouyer 	{ .compat = "fsl,imx6sx-ccm" },
   1348  1.1  bouyer 	DEVICE_COMPAT_EOL
   1349  1.1  bouyer };
   1350  1.1  bouyer 
   1351  1.1  bouyer static int
   1352  1.1  bouyer imx6sxccm_match(device_t parent, cfdata_t cfdata, void *aux)
   1353  1.1  bouyer {
   1354  1.1  bouyer 	struct fdt_attach_args * const faa = aux;
   1355  1.1  bouyer 
   1356  1.1  bouyer 	return of_compatible_match(faa->faa_phandle, compat_data);
   1357  1.1  bouyer }
   1358  1.1  bouyer 
   1359  1.1  bouyer static void
   1360  1.1  bouyer imx6sxccm_attach(device_t parent, device_t self, void *aux)
   1361  1.1  bouyer {
   1362  1.1  bouyer 	struct imx6ccm_softc * const sc = device_private(self);
   1363  1.1  bouyer 	struct fdt_attach_args * const faa = aux;
   1364  1.1  bouyer 	bus_addr_t addr;
   1365  1.1  bouyer 	bus_size_t size;
   1366  1.1  bouyer 
   1367  1.1  bouyer 	if (fdtbus_get_reg(faa->faa_phandle, 0, &addr, &size) != 0) {
   1368  1.1  bouyer 		aprint_error(": couldn't get registers\n");
   1369  1.1  bouyer 		return;
   1370  1.1  bouyer 	}
   1371  1.1  bouyer 
   1372  1.1  bouyer 	sc->sc_dev = self;
   1373  1.1  bouyer 	sc->sc_iot = faa->faa_bst;
   1374  1.1  bouyer 
   1375  1.1  bouyer 	if (bus_space_map(sc->sc_iot, addr, size, 0, &sc->sc_ioh)) {
   1376  1.1  bouyer 		aprint_error(": can't map ccm registers\n");
   1377  1.1  bouyer 		return;
   1378  1.1  bouyer 	}
   1379  1.1  bouyer 
   1380  1.1  bouyer 	int phandle = of_find_bycompat(OF_finddevice("/"), "fsl,imx6sx-anatop");
   1381  1.1  bouyer 
   1382  1.1  bouyer 	if (phandle == -1) {
   1383  1.1  bouyer 		aprint_error(": can't find anatop device\n");
   1384  1.1  bouyer 		return;
   1385  1.1  bouyer 	}
   1386  1.1  bouyer 
   1387  1.1  bouyer 	if (fdtbus_get_reg(phandle, 0, &addr, &size) != 0) {
   1388  1.1  bouyer 		aprint_error(": can't get anatop registers\n");
   1389  1.1  bouyer 		return;
   1390  1.1  bouyer 	}
   1391  1.4   skrll 
   1392  1.4   skrll 
   1393  1.1  bouyer 	if (bus_space_map(sc->sc_iot, addr, size, 0, &sc->sc_ioh_analog)) {
   1394  1.1  bouyer 		aprint_error(": can't map anatop registers\n");
   1395  1.1  bouyer 		return;
   1396  1.1  bouyer 	}
   1397  1.1  bouyer 
   1398  1.1  bouyer 	aprint_naive("\n");
   1399  1.1  bouyer 	aprint_normal(": Clock Control Module\n");
   1400  1.1  bouyer 
   1401  1.1  bouyer 	imx6ccm_attach_common(self, &imx6sx_clks[0], __arraycount(imx6sx_clks),
   1402  1.1  bouyer 	    imx6sxccm_init_parents);
   1403  1.1  bouyer 
   1404  1.1  bouyer 	imx6sx_clk_fixed_from_fdt(sc, "ckil");
   1405  1.1  bouyer 	imx6sx_clk_fixed_from_fdt(sc, "osc");
   1406  1.1  bouyer 	imx6sx_clk_fixed_from_fdt(sc, "ipp_di0");
   1407  1.1  bouyer 	imx6sx_clk_fixed_from_fdt(sc, "ipp_di1");
   1408  1.1  bouyer 	imx6sx_clk_fixed_from_fdt(sc, "anaclk1");
   1409  1.1  bouyer 	imx6sx_clk_fixed_from_fdt(sc, "anaclk2");
   1410  1.1  bouyer 
   1411  1.1  bouyer 	fdtbus_register_clock_controller(self, faa->faa_phandle,
   1412  1.1  bouyer 	    &imx6sx_ccm_fdtclock_funcs);
   1413  1.1  bouyer }
   1414