Home | History | Annotate | Line # | Download | only in nxp
imx6_ccmvar.h revision 1.1.2.2
      1  1.1.2.2  thorpej /*	$NetBSD: imx6_ccmvar.h,v 1.1.2.2 2021/01/03 16:34:52 thorpej Exp $	*/
      2  1.1.2.2  thorpej /*
      3  1.1.2.2  thorpej  * Copyright (c) 2012,2019  Genetec Corporation.  All rights reserved.
      4  1.1.2.2  thorpej  * Written by Hashimoto Kenichi for Genetec Corporation.
      5  1.1.2.2  thorpej  *
      6  1.1.2.2  thorpej  * Redistribution and use in source and binary forms, with or without
      7  1.1.2.2  thorpej  * modification, are permitted provided that the following conditions
      8  1.1.2.2  thorpej  * are met:
      9  1.1.2.2  thorpej  * 1. Redistributions of source code must retain the above copyright
     10  1.1.2.2  thorpej  *    notice, this list of conditions and the following disclaimer.
     11  1.1.2.2  thorpej  * 2. Redistributions in binary form must reproduce the above copyright
     12  1.1.2.2  thorpej  *    notice, this list of conditions and the following disclaimer in the
     13  1.1.2.2  thorpej  *    documentation and/or other materials provided with the distribution.
     14  1.1.2.2  thorpej  *
     15  1.1.2.2  thorpej  * THIS SOFTWARE IS PROVIDED BY GENETEC CORPORATION ``AS IS'' AND
     16  1.1.2.2  thorpej  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     17  1.1.2.2  thorpej  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     18  1.1.2.2  thorpej  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL GENETEC CORPORATION
     19  1.1.2.2  thorpej  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     20  1.1.2.2  thorpej  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     21  1.1.2.2  thorpej  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     22  1.1.2.2  thorpej  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     23  1.1.2.2  thorpej  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     24  1.1.2.2  thorpej  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     25  1.1.2.2  thorpej  * POSSIBILITY OF SUCH DAMAGE.
     26  1.1.2.2  thorpej  */
     27  1.1.2.2  thorpej 
     28  1.1.2.2  thorpej #ifndef	_ARM_NXP_IMX6_CCMVAR_H_
     29  1.1.2.2  thorpej #define	_ARM_NXP_IMX6_CCMVAR_H_
     30  1.1.2.2  thorpej 
     31  1.1.2.2  thorpej #include <dev/clk/clk.h>
     32  1.1.2.2  thorpej #include <dev/clk/clk_backend.h>
     33  1.1.2.2  thorpej 
     34  1.1.2.2  thorpej struct imx6ccm_softc {
     35  1.1.2.2  thorpej 	device_t sc_dev;
     36  1.1.2.2  thorpej 	bus_space_tag_t sc_iot;
     37  1.1.2.2  thorpej 	bus_space_handle_t sc_ioh;
     38  1.1.2.2  thorpej 	bus_space_handle_t sc_ioh_analog;
     39  1.1.2.2  thorpej 
     40  1.1.2.2  thorpej 	struct clk_domain sc_clkdom;
     41  1.1.2.2  thorpej };
     42  1.1.2.2  thorpej 
     43  1.1.2.2  thorpej void imx6ccm_attach_common(device_t);
     44  1.1.2.2  thorpej 
     45  1.1.2.2  thorpej struct clk *imx6_get_clock(const char *);
     46  1.1.2.2  thorpej struct clk *imx6_get_clock_by_id(u_int);
     47  1.1.2.2  thorpej 
     48  1.1.2.2  thorpej /* Clock IDs */
     49  1.1.2.2  thorpej #define IMX6CLK_DUMMY			0
     50  1.1.2.2  thorpej #define IMX6CLK_CKIL			1
     51  1.1.2.2  thorpej #define IMX6CLK_CKIH			2
     52  1.1.2.2  thorpej #define IMX6CLK_OSC			3
     53  1.1.2.2  thorpej #define IMX6CLK_PLL2_PFD0_352M		4
     54  1.1.2.2  thorpej #define IMX6CLK_PLL2_PFD1_594M		5
     55  1.1.2.2  thorpej #define IMX6CLK_PLL2_PFD2_396M		6
     56  1.1.2.2  thorpej #define IMX6CLK_PLL3_PFD0_720M		7
     57  1.1.2.2  thorpej #define IMX6CLK_PLL3_PFD1_540M		8
     58  1.1.2.2  thorpej #define IMX6CLK_PLL3_PFD2_508M		9
     59  1.1.2.2  thorpej #define IMX6CLK_PLL3_PFD3_454M		10
     60  1.1.2.2  thorpej #define IMX6CLK_PLL2_198M		11
     61  1.1.2.2  thorpej #define IMX6CLK_PLL3_120M		12
     62  1.1.2.2  thorpej #define IMX6CLK_PLL3_80M		13
     63  1.1.2.2  thorpej #define IMX6CLK_PLL3_60M		14
     64  1.1.2.2  thorpej #define IMX6CLK_TWD			15
     65  1.1.2.2  thorpej #define IMX6CLK_STEP			16
     66  1.1.2.2  thorpej #define IMX6CLK_PLL1_SW			17
     67  1.1.2.2  thorpej #define IMX6CLK_PERIPH_PRE		18
     68  1.1.2.2  thorpej #define IMX6CLK_PERIPH2_PRE		19
     69  1.1.2.2  thorpej #define IMX6CLK_PERIPH_CLK2_SEL		20
     70  1.1.2.2  thorpej #define IMX6CLK_PERIPH2_CLK2_SEL	21
     71  1.1.2.2  thorpej #define IMX6CLK_AXI_SEL			22
     72  1.1.2.2  thorpej #define IMX6CLK_ESAI_SEL		23
     73  1.1.2.2  thorpej #define IMX6CLK_ASRC_SEL		24
     74  1.1.2.2  thorpej #define IMX6CLK_SPDIF_SEL		25
     75  1.1.2.2  thorpej #define IMX6CLK_GPU2D_AXI		26
     76  1.1.2.2  thorpej #define IMX6CLK_GPU3D_AXI		27
     77  1.1.2.2  thorpej #define IMX6CLK_GPU2D_CORE_SEL		28
     78  1.1.2.2  thorpej #define IMX6CLK_GPU3D_CORE_SEL		29
     79  1.1.2.2  thorpej #define IMX6CLK_GPU3D_SHADER_SEL	30
     80  1.1.2.2  thorpej #define IMX6CLK_IPU1_SEL		31
     81  1.1.2.2  thorpej #define IMX6CLK_IPU2_SEL		32
     82  1.1.2.2  thorpej #define IMX6CLK_LDB_DI0_SEL		33
     83  1.1.2.2  thorpej #define IMX6CLK_LDB_DI1_SEL		34
     84  1.1.2.2  thorpej #define IMX6CLK_IPU1_DI0_PRE_SEL	35
     85  1.1.2.2  thorpej #define IMX6CLK_IPU1_DI1_PRE_SEL	36
     86  1.1.2.2  thorpej #define IMX6CLK_IPU2_DI0_PRE_SEL	37
     87  1.1.2.2  thorpej #define IMX6CLK_IPU2_DI1_PRE_SEL	38
     88  1.1.2.2  thorpej #define IMX6CLK_IPU1_DI0_SEL		39
     89  1.1.2.2  thorpej #define IMX6CLK_IPU1_DI1_SEL		40
     90  1.1.2.2  thorpej #define IMX6CLK_IPU2_DI0_SEL		41
     91  1.1.2.2  thorpej #define IMX6CLK_IPU2_DI1_SEL		42
     92  1.1.2.2  thorpej #define IMX6CLK_HSI_TX_SEL		43
     93  1.1.2.2  thorpej #define IMX6CLK_PCIE_AXI_SEL		44
     94  1.1.2.2  thorpej #define IMX6CLK_SSI1_SEL		45
     95  1.1.2.2  thorpej #define IMX6CLK_SSI2_SEL		46
     96  1.1.2.2  thorpej #define IMX6CLK_SSI3_SEL		47
     97  1.1.2.2  thorpej #define IMX6CLK_USDHC1_SEL		48
     98  1.1.2.2  thorpej #define IMX6CLK_USDHC2_SEL		49
     99  1.1.2.2  thorpej #define IMX6CLK_USDHC3_SEL		50
    100  1.1.2.2  thorpej #define IMX6CLK_USDHC4_SEL		51
    101  1.1.2.2  thorpej #define IMX6CLK_ENFC_SEL		52
    102  1.1.2.2  thorpej #define IMX6CLK_EIM_SEL			53
    103  1.1.2.2  thorpej #define IMX6CLK_EIM_SLOW_SEL		54
    104  1.1.2.2  thorpej #define IMX6CLK_VDO_AXI_SEL		55
    105  1.1.2.2  thorpej #define IMX6CLK_VPU_AXI_SEL		56
    106  1.1.2.2  thorpej #define IMX6CLK_CKO1_SEL		57
    107  1.1.2.2  thorpej #define IMX6CLK_PERIPH			58
    108  1.1.2.2  thorpej #define IMX6CLK_PERIPH2			59
    109  1.1.2.2  thorpej #define IMX6CLK_PERIPH_CLK2		60
    110  1.1.2.2  thorpej #define IMX6CLK_PERIPH2_CLK2		61
    111  1.1.2.2  thorpej #define IMX6CLK_IPG			62
    112  1.1.2.2  thorpej #define IMX6CLK_IPG_PER			63
    113  1.1.2.2  thorpej #define IMX6CLK_ESAI_PRED		64
    114  1.1.2.2  thorpej #define IMX6CLK_ESAI_PODF		65
    115  1.1.2.2  thorpej #define IMX6CLK_ASRC_PRED		66
    116  1.1.2.2  thorpej #define IMX6CLK_ASRC_PODF		67
    117  1.1.2.2  thorpej #define IMX6CLK_SPDIF_PRED		68
    118  1.1.2.2  thorpej #define IMX6CLK_SPDIF_PODF		69
    119  1.1.2.2  thorpej #define IMX6CLK_CAN_ROOT		70
    120  1.1.2.2  thorpej #define IMX6CLK_ECSPI_ROOT		71
    121  1.1.2.2  thorpej #define IMX6CLK_GPU2D_CORE_PODF		72
    122  1.1.2.2  thorpej #define IMX6CLK_GPU3D_CORE_PODF		73
    123  1.1.2.2  thorpej #define IMX6CLK_GPU3D_SHADER		74
    124  1.1.2.2  thorpej #define IMX6CLK_IPU1_PODF		75
    125  1.1.2.2  thorpej #define IMX6CLK_IPU2_PODF		76
    126  1.1.2.2  thorpej #define IMX6CLK_LDB_DI0_PODF		77
    127  1.1.2.2  thorpej #define IMX6CLK_LDB_DI1_PODF		78
    128  1.1.2.2  thorpej #define IMX6CLK_IPU1_DI0_PRE		79
    129  1.1.2.2  thorpej #define IMX6CLK_IPU1_DI1_PRE		80
    130  1.1.2.2  thorpej #define IMX6CLK_IPU2_DI0_PRE		81
    131  1.1.2.2  thorpej #define IMX6CLK_IPU2_DI1_PRE		82
    132  1.1.2.2  thorpej #define IMX6CLK_HSI_TX_PODF		83
    133  1.1.2.2  thorpej #define IMX6CLK_SSI1_PRED		84
    134  1.1.2.2  thorpej #define IMX6CLK_SSI1_PODF		85
    135  1.1.2.2  thorpej #define IMX6CLK_SSI2_PRED		86
    136  1.1.2.2  thorpej #define IMX6CLK_SSI2_PODF		87
    137  1.1.2.2  thorpej #define IMX6CLK_SSI3_PRED		88
    138  1.1.2.2  thorpej #define IMX6CLK_SSI3_PODF		89
    139  1.1.2.2  thorpej #define IMX6CLK_UART_SERIAL_PODF	90
    140  1.1.2.2  thorpej #define IMX6CLK_USDHC1_PODF		91
    141  1.1.2.2  thorpej #define IMX6CLK_USDHC2_PODF		92
    142  1.1.2.2  thorpej #define IMX6CLK_USDHC3_PODF		93
    143  1.1.2.2  thorpej #define IMX6CLK_USDHC4_PODF		94
    144  1.1.2.2  thorpej #define IMX6CLK_ENFC_PRED		95
    145  1.1.2.2  thorpej #define IMX6CLK_ENFC_PODF		96
    146  1.1.2.2  thorpej #define IMX6CLK_EIM_PODF		97
    147  1.1.2.2  thorpej #define IMX6CLK_EIM_SLOW_PODF		98
    148  1.1.2.2  thorpej #define IMX6CLK_VPU_AXI_PODF		99
    149  1.1.2.2  thorpej #define IMX6CLK_CKO1_PODF		100
    150  1.1.2.2  thorpej #define IMX6CLK_AXI			101
    151  1.1.2.2  thorpej #define IMX6CLK_MMDC_CH0_AXI_PODF	102
    152  1.1.2.2  thorpej #define IMX6CLK_MMDC_CH1_AXI_PODF	103
    153  1.1.2.2  thorpej #define IMX6CLK_ARM			104
    154  1.1.2.2  thorpej #define IMX6CLK_AHB			105
    155  1.1.2.2  thorpej #define IMX6CLK_APBH_DMA		106
    156  1.1.2.2  thorpej #define IMX6CLK_ASRC			107
    157  1.1.2.2  thorpej #define IMX6CLK_CAN1_IPG		108
    158  1.1.2.2  thorpej #define IMX6CLK_CAN1_SERIAL		109
    159  1.1.2.2  thorpej #define IMX6CLK_CAN2_IPG		110
    160  1.1.2.2  thorpej #define IMX6CLK_CAN2_SERIAL		111
    161  1.1.2.2  thorpej #define IMX6CLK_ECSPI1			112
    162  1.1.2.2  thorpej #define IMX6CLK_ECSPI2			113
    163  1.1.2.2  thorpej #define IMX6CLK_ECSPI3			114
    164  1.1.2.2  thorpej #define IMX6CLK_ECSPI4			115
    165  1.1.2.2  thorpej #define IMX6CLK_ECSPI5			116	/* i.MX6Q */
    166  1.1.2.2  thorpej #define IMX6CLK_I2C4			116	/* i.MX6DL */
    167  1.1.2.2  thorpej #define IMX6CLK_ENET			117
    168  1.1.2.2  thorpej #define IMX6CLK_ESAI_EXTAL		118
    169  1.1.2.2  thorpej #define IMX6CLK_GPT_IPG			119
    170  1.1.2.2  thorpej #define IMX6CLK_GPT_IPG_PER		120
    171  1.1.2.2  thorpej #define IMX6CLK_GPU2D_CORE		121
    172  1.1.2.2  thorpej #define IMX6CLK_GPU3D_CORE		122
    173  1.1.2.2  thorpej #define IMX6CLK_HDMI_IAHB		123
    174  1.1.2.2  thorpej #define IMX6CLK_HDMI_ISFR		124
    175  1.1.2.2  thorpej #define IMX6CLK_I2C1			125
    176  1.1.2.2  thorpej #define IMX6CLK_I2C2			126
    177  1.1.2.2  thorpej #define IMX6CLK_I2C3			127
    178  1.1.2.2  thorpej #define IMX6CLK_IIM			128
    179  1.1.2.2  thorpej #define IMX6CLK_ENFC			129
    180  1.1.2.2  thorpej #define IMX6CLK_IPU1			130
    181  1.1.2.2  thorpej #define IMX6CLK_IPU1_DI0		131
    182  1.1.2.2  thorpej #define IMX6CLK_IPU1_DI1		132
    183  1.1.2.2  thorpej #define IMX6CLK_IPU2			133
    184  1.1.2.2  thorpej #define IMX6CLK_IPU2_DI0		134
    185  1.1.2.2  thorpej #define IMX6CLK_LDB_DI0			135
    186  1.1.2.2  thorpej #define IMX6CLK_LDB_DI1			136
    187  1.1.2.2  thorpej #define IMX6CLK_IPU2_DI1		137
    188  1.1.2.2  thorpej #define IMX6CLK_HSI_TX			138
    189  1.1.2.2  thorpej #define IMX6CLK_MLB			139
    190  1.1.2.2  thorpej #define IMX6CLK_MMDC_CH0_AXI		140
    191  1.1.2.2  thorpej #define IMX6CLK_MMDC_CH1_AXI		141
    192  1.1.2.2  thorpej #define IMX6CLK_OCRAM			142
    193  1.1.2.2  thorpej #define IMX6CLK_OPENVG_AXI		143
    194  1.1.2.2  thorpej #define IMX6CLK_PCIE_AXI		144
    195  1.1.2.2  thorpej #define IMX6CLK_PWM1			145
    196  1.1.2.2  thorpej #define IMX6CLK_PWM2			146
    197  1.1.2.2  thorpej #define IMX6CLK_PWM3			147
    198  1.1.2.2  thorpej #define IMX6CLK_PWM4			148
    199  1.1.2.2  thorpej #define IMX6CLK_PER1_BCH		149
    200  1.1.2.2  thorpej #define IMX6CLK_GPMI_BCH_APB		150
    201  1.1.2.2  thorpej #define IMX6CLK_GPMI_BCH		151
    202  1.1.2.2  thorpej #define IMX6CLK_GPMI_IO			152
    203  1.1.2.2  thorpej #define IMX6CLK_GPMI_APB		153
    204  1.1.2.2  thorpej #define IMX6CLK_SATA			154
    205  1.1.2.2  thorpej #define IMX6CLK_SDMA			155
    206  1.1.2.2  thorpej #define IMX6CLK_SPBA			156
    207  1.1.2.2  thorpej #define IMX6CLK_SSI1			157
    208  1.1.2.2  thorpej #define IMX6CLK_SSI2			158
    209  1.1.2.2  thorpej #define IMX6CLK_SSI3			159
    210  1.1.2.2  thorpej #define IMX6CLK_UART_IPG		160
    211  1.1.2.2  thorpej #define IMX6CLK_UART_SERIAL		161
    212  1.1.2.2  thorpej #define IMX6CLK_USBOH3			162
    213  1.1.2.2  thorpej #define IMX6CLK_USDHC1			163
    214  1.1.2.2  thorpej #define IMX6CLK_USDHC2			164
    215  1.1.2.2  thorpej #define IMX6CLK_USDHC3			165
    216  1.1.2.2  thorpej #define IMX6CLK_USDHC4			166
    217  1.1.2.2  thorpej #define IMX6CLK_VDO_AXI			167
    218  1.1.2.2  thorpej #define IMX6CLK_VPU_AXI			168
    219  1.1.2.2  thorpej #define IMX6CLK_CKO1			169
    220  1.1.2.2  thorpej #define IMX6CLK_PLL1_SYS		170
    221  1.1.2.2  thorpej #define IMX6CLK_PLL2_BUS		171
    222  1.1.2.2  thorpej #define IMX6CLK_PLL3_USB_OTG		172
    223  1.1.2.2  thorpej #define IMX6CLK_PLL4_AUDIO		173
    224  1.1.2.2  thorpej #define IMX6CLK_PLL5_VIDEO		174
    225  1.1.2.2  thorpej #define IMX6CLK_PLL8_MLB		175
    226  1.1.2.2  thorpej #define IMX6CLK_PLL7_USB_HOST		176
    227  1.1.2.2  thorpej #define IMX6CLK_PLL6_ENET		177
    228  1.1.2.2  thorpej #define IMX6CLK_SSI1_IPG		178
    229  1.1.2.2  thorpej #define IMX6CLK_SSI2_IPG		179
    230  1.1.2.2  thorpej #define IMX6CLK_SSI3_IPG		180
    231  1.1.2.2  thorpej #define IMX6CLK_ROM			181
    232  1.1.2.2  thorpej #define IMX6CLK_USBPHY1			182
    233  1.1.2.2  thorpej #define IMX6CLK_USBPHY2			183
    234  1.1.2.2  thorpej #define IMX6CLK_LDB_DI0_DIV_3_5		184
    235  1.1.2.2  thorpej #define IMX6CLK_LDB_DI1_DIV_3_5		185
    236  1.1.2.2  thorpej #define IMX6CLK_SATA_REF		186
    237  1.1.2.2  thorpej #define IMX6CLK_SATA_REF_100M		187
    238  1.1.2.2  thorpej #define IMX6CLK_PCIE_REF		188
    239  1.1.2.2  thorpej #define IMX6CLK_PCIE_REF_125M		189
    240  1.1.2.2  thorpej #define IMX6CLK_ENET_REF		190
    241  1.1.2.2  thorpej #define IMX6CLK_USBPHY1_GATE		191
    242  1.1.2.2  thorpej #define IMX6CLK_USBPHY2_GATE		192
    243  1.1.2.2  thorpej #define IMX6CLK_PLL4_POST_DIV		193
    244  1.1.2.2  thorpej #define IMX6CLK_PLL5_POST_DIV		194
    245  1.1.2.2  thorpej #define IMX6CLK_PLL5_VIDEO_DIV		195
    246  1.1.2.2  thorpej #define IMX6CLK_EIM_SLOW		196
    247  1.1.2.2  thorpej #define IMX6CLK_SPDIF			197
    248  1.1.2.2  thorpej #define IMX6CLK_CKO2_SEL		198
    249  1.1.2.2  thorpej #define IMX6CLK_CKO2_PODF		199
    250  1.1.2.2  thorpej #define IMX6CLK_CKO2			200
    251  1.1.2.2  thorpej #define IMX6CLK_CKO			201
    252  1.1.2.2  thorpej #define IMX6CLK_VDOA			202
    253  1.1.2.2  thorpej #define IMX6CLK_PLL4_AUDIO_DIV		203
    254  1.1.2.2  thorpej #define IMX6CLK_LVDS1_SEL		204
    255  1.1.2.2  thorpej #define IMX6CLK_LVDS2_SEL		205
    256  1.1.2.2  thorpej #define IMX6CLK_LVDS1_GATE		206
    257  1.1.2.2  thorpej #define IMX6CLK_LVDS2_GATE		207
    258  1.1.2.2  thorpej #define IMX6CLK_ESAI_IPG		208
    259  1.1.2.2  thorpej #define IMX6CLK_ESAI_MEM		209
    260  1.1.2.2  thorpej #define IMX6CLK_ASRC_IPG		210
    261  1.1.2.2  thorpej #define IMX6CLK_ASRC_MEM		211
    262  1.1.2.2  thorpej #define IMX6CLK_LVDS1_IN		212
    263  1.1.2.2  thorpej #define IMX6CLK_LVDS2_IN		213
    264  1.1.2.2  thorpej #define IMX6CLK_ANACLK1			214
    265  1.1.2.2  thorpej #define IMX6CLK_ANACLK2			215
    266  1.1.2.2  thorpej #define IMX6CLK_PLL1_BYPASS_SRC		216
    267  1.1.2.2  thorpej #define IMX6CLK_PLL2_BYPASS_SRC		217
    268  1.1.2.2  thorpej #define IMX6CLK_PLL3_BYPASS_SRC		218
    269  1.1.2.2  thorpej #define IMX6CLK_PLL4_BYPASS_SRC		219
    270  1.1.2.2  thorpej #define IMX6CLK_PLL5_BYPASS_SRC		220
    271  1.1.2.2  thorpej #define IMX6CLK_PLL6_BYPASS_SRC		221
    272  1.1.2.2  thorpej #define IMX6CLK_PLL7_BYPASS_SRC		222
    273  1.1.2.2  thorpej #define IMX6CLK_PLL1			223
    274  1.1.2.2  thorpej #define IMX6CLK_PLL2			224
    275  1.1.2.2  thorpej #define IMX6CLK_PLL3			225
    276  1.1.2.2  thorpej #define IMX6CLK_PLL4			226
    277  1.1.2.2  thorpej #define IMX6CLK_PLL5			227
    278  1.1.2.2  thorpej #define IMX6CLK_PLL6			228
    279  1.1.2.2  thorpej #define IMX6CLK_PLL7			229
    280  1.1.2.2  thorpej #define IMX6CLK_PLL1_BYPASS		230
    281  1.1.2.2  thorpej #define IMX6CLK_PLL2_BYPASS		231
    282  1.1.2.2  thorpej #define IMX6CLK_PLL3_BYPASS		232
    283  1.1.2.2  thorpej #define IMX6CLK_PLL4_BYPASS		233
    284  1.1.2.2  thorpej #define IMX6CLK_PLL5_BYPASS		234
    285  1.1.2.2  thorpej #define IMX6CLK_PLL6_BYPASS		235
    286  1.1.2.2  thorpej #define IMX6CLK_PLL7_BYPASS		236
    287  1.1.2.2  thorpej #define IMX6CLK_GPT_3M			237
    288  1.1.2.2  thorpej #define IMX6CLK_VIDEO_27M		238
    289  1.1.2.2  thorpej #define IMX6CLK_MIPI_CORE_CFG		239
    290  1.1.2.2  thorpej #define IMX6CLK_MIPI_IPG		240
    291  1.1.2.2  thorpej #define IMX6CLK_CAAM_MEM		241
    292  1.1.2.2  thorpej #define IMX6CLK_CAAM_ACLK		242
    293  1.1.2.2  thorpej #define IMX6CLK_CAAM_IPG		243
    294  1.1.2.2  thorpej #define IMX6CLK_SPDIF_GCLK		244
    295  1.1.2.2  thorpej #define IMX6CLK_UART_SEL		245
    296  1.1.2.2  thorpej #define IMX6CLK_IPG_PER_SEL		246
    297  1.1.2.2  thorpej #define IMX6CLK_ECSPI_SEL		247
    298  1.1.2.2  thorpej #define IMX6CLK_CAN_SEL			248
    299  1.1.2.2  thorpej #define IMX6CLK_MMDC_CH1_AXI_CG		249
    300  1.1.2.2  thorpej #define IMX6CLK_PRE0			250
    301  1.1.2.2  thorpej #define IMX6CLK_PRE1			251
    302  1.1.2.2  thorpej #define IMX6CLK_PRE2			252
    303  1.1.2.2  thorpej #define IMX6CLK_PRE3			253
    304  1.1.2.2  thorpej #define IMX6CLK_PRG0_AXI		254
    305  1.1.2.2  thorpej #define IMX6CLK_PRG1_AXI		255
    306  1.1.2.2  thorpej #define IMX6CLK_PRG0_APB		256
    307  1.1.2.2  thorpej #define IMX6CLK_PRG1_APB		257
    308  1.1.2.2  thorpej #define IMX6CLK_PRE_AXI			258
    309  1.1.2.2  thorpej #define IMX6CLK_MLB_SEL			259
    310  1.1.2.2  thorpej #define IMX6CLK_MLB_PODF		260
    311  1.1.2.2  thorpej #define IMX6CLK_END			261
    312  1.1.2.2  thorpej 
    313  1.1.2.2  thorpej enum imx6_clk_type {
    314  1.1.2.2  thorpej 	IMX6_CLK_FIXED,
    315  1.1.2.2  thorpej 	IMX6_CLK_FIXED_FACTOR,
    316  1.1.2.2  thorpej 	IMX6_CLK_PLL,
    317  1.1.2.2  thorpej 	IMX6_CLK_MUX,
    318  1.1.2.2  thorpej 	IMX6_CLK_GATE,
    319  1.1.2.2  thorpej 	IMX6_CLK_PFD,
    320  1.1.2.2  thorpej 	IMX6_CLK_DIV,
    321  1.1.2.2  thorpej };
    322  1.1.2.2  thorpej 
    323  1.1.2.2  thorpej enum imx6_clk_reg {
    324  1.1.2.2  thorpej 	IMX6_CLK_REG_CCM,
    325  1.1.2.2  thorpej 	IMX6_CLK_REG_CCM_ANALOG,
    326  1.1.2.2  thorpej };
    327  1.1.2.2  thorpej 
    328  1.1.2.2  thorpej enum imx6_clk_pll_type {
    329  1.1.2.2  thorpej 	IMX6_CLK_PLL_GENERIC,
    330  1.1.2.2  thorpej 	IMX6_CLK_PLL_SYS,
    331  1.1.2.2  thorpej 	IMX6_CLK_PLL_USB,
    332  1.1.2.2  thorpej 	IMX6_CLK_PLL_AUDIO_VIDEO,
    333  1.1.2.2  thorpej 	IMX6_CLK_PLL_ENET,
    334  1.1.2.2  thorpej };
    335  1.1.2.2  thorpej 
    336  1.1.2.2  thorpej enum imx6_clk_div_type {
    337  1.1.2.2  thorpej 	IMX6_CLK_DIV_NORMAL,
    338  1.1.2.2  thorpej 	IMX6_CLK_DIV_BUSY,
    339  1.1.2.2  thorpej 	IMX6_CLK_DIV_TABLE,
    340  1.1.2.2  thorpej };
    341  1.1.2.2  thorpej 
    342  1.1.2.2  thorpej enum imx6_clk_mux_type {
    343  1.1.2.2  thorpej 	IMX6_CLK_MUX_NORMAL,
    344  1.1.2.2  thorpej 	IMX6_CLK_MUX_BUSY,
    345  1.1.2.2  thorpej };
    346  1.1.2.2  thorpej 
    347  1.1.2.2  thorpej struct imx6_clk_fixed {
    348  1.1.2.2  thorpej 	u_int rate;
    349  1.1.2.2  thorpej };
    350  1.1.2.2  thorpej 
    351  1.1.2.2  thorpej struct imx6_clk_fixed_factor {
    352  1.1.2.2  thorpej 	u_int div;
    353  1.1.2.2  thorpej 	u_int mult;
    354  1.1.2.2  thorpej };
    355  1.1.2.2  thorpej 
    356  1.1.2.2  thorpej struct imx6_clk_pfd {
    357  1.1.2.2  thorpej 	uint32_t reg;
    358  1.1.2.2  thorpej 	int index;
    359  1.1.2.2  thorpej };
    360  1.1.2.2  thorpej 
    361  1.1.2.2  thorpej struct imx6_clk_pll {
    362  1.1.2.2  thorpej 	enum imx6_clk_pll_type type;
    363  1.1.2.2  thorpej 	uint32_t reg;
    364  1.1.2.2  thorpej 	uint32_t mask;
    365  1.1.2.2  thorpej 	uint32_t powerdown;
    366  1.1.2.2  thorpej 	unsigned long ref;
    367  1.1.2.2  thorpej };
    368  1.1.2.2  thorpej 
    369  1.1.2.2  thorpej struct imx6_clk_div {
    370  1.1.2.2  thorpej 	enum imx6_clk_div_type type;
    371  1.1.2.2  thorpej 	enum imx6_clk_reg base;
    372  1.1.2.2  thorpej 	uint32_t reg;
    373  1.1.2.2  thorpej 	uint32_t mask;
    374  1.1.2.2  thorpej 	uint32_t busy_reg;
    375  1.1.2.2  thorpej 	uint32_t busy_mask;
    376  1.1.2.2  thorpej 	const int *tbl;
    377  1.1.2.2  thorpej };
    378  1.1.2.2  thorpej 
    379  1.1.2.2  thorpej struct imx6_clk_mux {
    380  1.1.2.2  thorpej 	enum imx6_clk_mux_type type;
    381  1.1.2.2  thorpej 	enum imx6_clk_reg base;
    382  1.1.2.2  thorpej 	uint32_t reg;
    383  1.1.2.2  thorpej 	uint32_t mask;
    384  1.1.2.2  thorpej 	const char **parents;
    385  1.1.2.2  thorpej 	u_int nparents;
    386  1.1.2.2  thorpej 	uint32_t busy_reg;
    387  1.1.2.2  thorpej 	uint32_t busy_mask;
    388  1.1.2.2  thorpej };
    389  1.1.2.2  thorpej 
    390  1.1.2.2  thorpej struct imx6_clk_gate {
    391  1.1.2.2  thorpej 	enum imx6_clk_reg base;
    392  1.1.2.2  thorpej 	uint32_t reg;
    393  1.1.2.2  thorpej 	uint32_t mask;
    394  1.1.2.2  thorpej 	uint32_t exclusive_mask;
    395  1.1.2.2  thorpej };
    396  1.1.2.2  thorpej 
    397  1.1.2.2  thorpej struct imx6_clk {
    398  1.1.2.2  thorpej 	struct clk base;		/* must be first */
    399  1.1.2.2  thorpej 
    400  1.1.2.2  thorpej 	const char *parent;
    401  1.1.2.2  thorpej 	u_int refcnt;
    402  1.1.2.2  thorpej 
    403  1.1.2.2  thorpej 	enum imx6_clk_type type;
    404  1.1.2.2  thorpej 	union {
    405  1.1.2.2  thorpej 		struct imx6_clk_fixed fixed;
    406  1.1.2.2  thorpej 		struct imx6_clk_fixed_factor fixed_factor;
    407  1.1.2.2  thorpej 		struct imx6_clk_pfd pfd;
    408  1.1.2.2  thorpej 		struct imx6_clk_pll pll;
    409  1.1.2.2  thorpej 		struct imx6_clk_div div;
    410  1.1.2.2  thorpej 		struct imx6_clk_mux mux;
    411  1.1.2.2  thorpej 		struct imx6_clk_gate gate;
    412  1.1.2.2  thorpej 	} clk;
    413  1.1.2.2  thorpej };
    414  1.1.2.2  thorpej 
    415  1.1.2.2  thorpej #define CLK_FIXED(_name, _rate) {				\
    416  1.1.2.2  thorpej 	.base = { .name = (_name) },				\
    417  1.1.2.2  thorpej 	.type = IMX6_CLK_FIXED,					\
    418  1.1.2.2  thorpej 	.clk = {						\
    419  1.1.2.2  thorpej 		.fixed = {					\
    420  1.1.2.2  thorpej 			.rate = (_rate),			\
    421  1.1.2.2  thorpej 		}						\
    422  1.1.2.2  thorpej 	}							\
    423  1.1.2.2  thorpej }
    424  1.1.2.2  thorpej 
    425  1.1.2.2  thorpej #define CLK_FIXED_FACTOR(_name, _parent, _div, _mult) {		\
    426  1.1.2.2  thorpej 	.base = { .name = (_name) },				\
    427  1.1.2.2  thorpej 	.type = IMX6_CLK_FIXED_FACTOR,				\
    428  1.1.2.2  thorpej 	.parent = (_parent),					\
    429  1.1.2.2  thorpej 	.clk = {						\
    430  1.1.2.2  thorpej 		.fixed_factor = {				\
    431  1.1.2.2  thorpej 			.div = (_div),				\
    432  1.1.2.2  thorpej 			.mult = (_mult),			\
    433  1.1.2.2  thorpej 		}						\
    434  1.1.2.2  thorpej 	}							\
    435  1.1.2.2  thorpej }
    436  1.1.2.2  thorpej 
    437  1.1.2.2  thorpej #define CLK_PFD(_name, _parent, _reg, _index) {			\
    438  1.1.2.2  thorpej 	.base = { .name = (_name) },				\
    439  1.1.2.2  thorpej 	.type = IMX6_CLK_PFD,					\
    440  1.1.2.2  thorpej 	.parent = (_parent),					\
    441  1.1.2.2  thorpej 	.clk = {						\
    442  1.1.2.2  thorpej 		.pfd = {					\
    443  1.1.2.2  thorpej 			.reg = (CCM_ANALOG_##_reg),		\
    444  1.1.2.2  thorpej 			.index = (_index),			\
    445  1.1.2.2  thorpej 		}						\
    446  1.1.2.2  thorpej 	}							\
    447  1.1.2.2  thorpej }
    448  1.1.2.2  thorpej 
    449  1.1.2.2  thorpej #define CLK_PLL(_name, _parent, _type, _reg, _mask, _powerdown, _ref) { \
    450  1.1.2.2  thorpej 	.base = { .name = (_name) },				\
    451  1.1.2.2  thorpej 	.type = IMX6_CLK_PLL,					\
    452  1.1.2.2  thorpej 	.parent = (_parent),					\
    453  1.1.2.2  thorpej 	.clk = {						\
    454  1.1.2.2  thorpej 		.pll = {					\
    455  1.1.2.2  thorpej 			.type = (IMX6_CLK_PLL_##_type),		\
    456  1.1.2.2  thorpej 			.reg = (CCM_ANALOG_##_reg),		\
    457  1.1.2.2  thorpej 			.mask = (CCM_ANALOG_##_reg##_##_mask),	\
    458  1.1.2.2  thorpej 			.powerdown = (CCM_ANALOG_##_reg##_##_powerdown), \
    459  1.1.2.2  thorpej 			.ref = (_ref),				\
    460  1.1.2.2  thorpej 		}						\
    461  1.1.2.2  thorpej 	}							\
    462  1.1.2.2  thorpej }
    463  1.1.2.2  thorpej 
    464  1.1.2.2  thorpej #define CLK_DIV(_name, _parent, _reg, _mask) {			\
    465  1.1.2.2  thorpej 	.base = { .name = (_name) },				\
    466  1.1.2.2  thorpej 	.type = IMX6_CLK_DIV,					\
    467  1.1.2.2  thorpej 	.parent = (_parent),					\
    468  1.1.2.2  thorpej 	.clk = {						\
    469  1.1.2.2  thorpej 		.div = {					\
    470  1.1.2.2  thorpej 			.type = (IMX6_CLK_DIV_NORMAL),		\
    471  1.1.2.2  thorpej 			.base = (IMX6_CLK_REG_CCM),		\
    472  1.1.2.2  thorpej 			.reg = (CCM_##_reg),			\
    473  1.1.2.2  thorpej 			.mask = (CCM_##_reg##_##_mask),		\
    474  1.1.2.2  thorpej 		}						\
    475  1.1.2.2  thorpej 	}							\
    476  1.1.2.2  thorpej }
    477  1.1.2.2  thorpej 
    478  1.1.2.2  thorpej #define CLK_DIV_BUSY(_name, _parent, _reg, _mask, _busy_reg, _busy_mask) { \
    479  1.1.2.2  thorpej 	.base = { .name = (_name) },				\
    480  1.1.2.2  thorpej 	.type = IMX6_CLK_DIV,					\
    481  1.1.2.2  thorpej 	.parent = (_parent),					\
    482  1.1.2.2  thorpej 	.clk = {						\
    483  1.1.2.2  thorpej 		.div = {					\
    484  1.1.2.2  thorpej 			.type = (IMX6_CLK_DIV_BUSY),		\
    485  1.1.2.2  thorpej 			.base = (IMX6_CLK_REG_CCM),		\
    486  1.1.2.2  thorpej 			.reg = (CCM_##_reg),			\
    487  1.1.2.2  thorpej 			.mask = (CCM_##_reg##_##_mask),	\
    488  1.1.2.2  thorpej 			.busy_reg = (CCM_##_busy_reg),		\
    489  1.1.2.2  thorpej 			.busy_mask = (CCM_##_busy_reg##_##_busy_mask) \
    490  1.1.2.2  thorpej 		}						\
    491  1.1.2.2  thorpej 	}							\
    492  1.1.2.2  thorpej }
    493  1.1.2.2  thorpej 
    494  1.1.2.2  thorpej #define CLK_DIV_TABLE(_name, _parent, _reg, _mask, _tbl) {	\
    495  1.1.2.2  thorpej 	.base = { .name = (_name) },				\
    496  1.1.2.2  thorpej 	.type = IMX6_CLK_DIV,					\
    497  1.1.2.2  thorpej 	.parent = (_parent),					\
    498  1.1.2.2  thorpej 	.clk = {						\
    499  1.1.2.2  thorpej 		.div = {					\
    500  1.1.2.2  thorpej 			.type = (IMX6_CLK_DIV_TABLE),		\
    501  1.1.2.2  thorpej 			.base = (IMX6_CLK_REG_CCM_ANALOG),	\
    502  1.1.2.2  thorpej 			.reg = (CCM_ANALOG_##_reg),		\
    503  1.1.2.2  thorpej 			.mask = (CCM_ANALOG_##_reg##_##_mask),	\
    504  1.1.2.2  thorpej 			.tbl = (_tbl)				\
    505  1.1.2.2  thorpej 		}						\
    506  1.1.2.2  thorpej 	}							\
    507  1.1.2.2  thorpej }
    508  1.1.2.2  thorpej 
    509  1.1.2.2  thorpej #define CLK_MUX(_name, _parents, _base, _reg, _mask) {		\
    510  1.1.2.2  thorpej 	.base = { .name = (_name), .flags = CLK_SET_RATE_PARENT }, \
    511  1.1.2.2  thorpej 	.type = IMX6_CLK_MUX,					\
    512  1.1.2.2  thorpej 	.clk = {						\
    513  1.1.2.2  thorpej 		.mux = {					\
    514  1.1.2.2  thorpej 			.type = (IMX6_CLK_MUX_NORMAL),		\
    515  1.1.2.2  thorpej 			.base = (IMX6_CLK_REG_##_base),		\
    516  1.1.2.2  thorpej 			.reg = (_base##_##_reg),		\
    517  1.1.2.2  thorpej 			.mask = (_base##_##_reg##_##_mask),	\
    518  1.1.2.2  thorpej 			.parents = (_parents),			\
    519  1.1.2.2  thorpej 			.nparents = __arraycount(_parents)	\
    520  1.1.2.2  thorpej 		}						\
    521  1.1.2.2  thorpej 	}							\
    522  1.1.2.2  thorpej }
    523  1.1.2.2  thorpej 
    524  1.1.2.2  thorpej #define CLK_MUX_BUSY(_name, _parents, _reg, _mask, _busy_reg, _busy_mask) { \
    525  1.1.2.2  thorpej 	.base = { .name = (_name), .flags = CLK_SET_RATE_PARENT }, \
    526  1.1.2.2  thorpej 	.type = IMX6_CLK_MUX,					\
    527  1.1.2.2  thorpej 	.clk = {						\
    528  1.1.2.2  thorpej 		.mux = {					\
    529  1.1.2.2  thorpej 			.type = (IMX6_CLK_MUX_BUSY),		\
    530  1.1.2.2  thorpej 			.base = (IMX6_CLK_REG_CCM),		\
    531  1.1.2.2  thorpej 			.reg = (CCM_##_reg),			\
    532  1.1.2.2  thorpej 			.mask = (CCM_##_reg##_##_mask),		\
    533  1.1.2.2  thorpej 			.parents = (_parents),			\
    534  1.1.2.2  thorpej 			.nparents = __arraycount(_parents),	\
    535  1.1.2.2  thorpej 			.busy_reg = (CCM_##_busy_reg),		\
    536  1.1.2.2  thorpej 			.busy_mask = (CCM_##_busy_reg##_##_busy_mask) \
    537  1.1.2.2  thorpej 		}						\
    538  1.1.2.2  thorpej 	}							\
    539  1.1.2.2  thorpej }
    540  1.1.2.2  thorpej 
    541  1.1.2.2  thorpej #define CLK_GATE(_name, _parent, _base, _reg, _mask) {		\
    542  1.1.2.2  thorpej 	.base = { .name = (_name), .flags = CLK_SET_RATE_PARENT }, \
    543  1.1.2.2  thorpej 	.type = IMX6_CLK_GATE,					\
    544  1.1.2.2  thorpej 	.parent = (_parent),					\
    545  1.1.2.2  thorpej 	.clk = {						\
    546  1.1.2.2  thorpej 		.gate = {					\
    547  1.1.2.2  thorpej 			.base = (IMX6_CLK_REG_##_base),		\
    548  1.1.2.2  thorpej 			.reg = (_base##_##_reg),		\
    549  1.1.2.2  thorpej 			.mask = (_base##_##_reg##_##_mask),	\
    550  1.1.2.2  thorpej 			.exclusive_mask = 0			\
    551  1.1.2.2  thorpej 		}						\
    552  1.1.2.2  thorpej 	}							\
    553  1.1.2.2  thorpej }
    554  1.1.2.2  thorpej 
    555  1.1.2.2  thorpej #define CLK_GATE_EXCLUSIVE(_name, _parent, _base, _reg, _mask, _exclusive_mask) {  \
    556  1.1.2.2  thorpej 	.base = { .name = (_name), .flags = CLK_SET_RATE_PARENT }, \
    557  1.1.2.2  thorpej 	.type = IMX6_CLK_GATE,					\
    558  1.1.2.2  thorpej 	.parent = (_parent),					\
    559  1.1.2.2  thorpej 	.clk = {						\
    560  1.1.2.2  thorpej 		.gate = {					\
    561  1.1.2.2  thorpej 			.base = (IMX6_CLK_REG_##_base),		\
    562  1.1.2.2  thorpej 			.reg = (_base##_##_reg),		\
    563  1.1.2.2  thorpej 			.mask = (_base##_##_reg##_##_mask),     \
    564  1.1.2.2  thorpej 			.exclusive_mask = (_base##_##_reg##_##_exclusive_mask) \
    565  1.1.2.2  thorpej 		}						\
    566  1.1.2.2  thorpej 	}							\
    567  1.1.2.2  thorpej }
    568  1.1.2.2  thorpej 
    569  1.1.2.2  thorpej #endif	/* _ARM_NXP_IMX6_CCMVAR_H_ */
    570