1 /*******************************************************************************
2 * @file rsi_pll.h
3 *******************************************************************************
4 * # License
5 * <b>Copyright 2024 Silicon Laboratories Inc. www.silabs.com</b>
6 *******************************************************************************
7 *
8 * SPDX-License-Identifier: Zlib
9 *
10 * The licensor of this software is Silicon Laboratories Inc.
11 *
12 * This software is provided 'as-is', without any express or implied
13 * warranty. In no event will the authors be held liable for any damages
14 * arising from the use of this software.
15 *
16 * Permission is granted to anyone to use this software for any purpose,
17 * including commercial applications, and to alter it and redistribute it
18 * freely, subject to the following restrictions:
19 *
20 * 1. The origin of this software must not be misrepresented; you must not
21 * claim that you wrote the original software. If you use this software
22 * in a product, an acknowledgment in the product documentation would be
23 * appreciated but is not required.
24 * 2. Altered source versions must be plainly marked as such, and must not be
25 * misrepresented as being the original software.
26 * 3. This notice may not be removed or altered from any source distribution.
27 *
28 ******************************************************************************/
29
30 /**
31 * Includes
32 */
33 #ifndef __RSI_PLL_H__
34 #define __RSI_PLL_H__
35
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39
40 #include "rsi_ccp_common.h"
41 #include "rsi_error.h"
42 #include "rsi_ipmu.h"
43 #include "rsi_reg_spi.h"
44
45 #define MISC_CFG_MISC_CTRL (*((uint32_t volatile *)(MISC_CONFIG_BASE + 0x14)))
46
47 typedef void (*cdDelay)(uint32_t delay);
48
49 #define CCI_SYNC_MODE BIT(16) /* Enables CCI_SYNC_MODE */
50 /*M4 Clock configuration base address */
51
52 /*SET Reg 1 SET / CLR*/
53 #define USART1_PCLK_ENABLE BIT(0) /* Enables USART1_PCLK_ENABLE */
54 #define USART1_SCLK_ENABLE BIT(1) /* Enables USART1_SCLK_ENABLE */
55 #define USART2_PCLK_ENABLE BIT(2) /* Enables USART2_PCLK_ENABLE */
56 #define USART2_SCLK_ENABLE BIT(3) /* Enables USART2_SCLK_ENABLE */
57 #if defined(SLI_SI917B0) || defined(SLI_SI915)
58 #define QSPI_2_CLK_ENABLE BIT(4) /* Enables QSPI_CLK_ENABLE */
59 #define QSPI_2_HCLK_ENABLE BIT(5) /* Enables QSPI_HCLK_ENABLE */
60 #define QSPI_2_M4_SOC_SYNC BIT(6) /* Enables QSPI_M4_SOC_SYNC */
61 #define QSPI_2_CLK_ONEHOT_ENABLE BIT(7) /* Enables QSPI_CLK_ONEHOT_ENABLE */
62 #endif
63 #define CT_CLK_ENABLE BIT(9) /* Enables CT_CLK_ENABLE */
64 #define CT_PCLK_ENABLE BIT(10) /* Enables CT_PCLK_ENABLE */
65 #define ICACHE_CLK_ENABLE BIT(11) /* Enables ICACHE_CLK_ENABLE */
66 #define ICACHE_CLK_2X_ENABLE BIT(12) /* Enables ICACHE_CLK_2X_ENABLE */
67 #define RPDMA_HCLK_ENABLE BIT(13) /* Enables RPDMA_HCLK_ENABLE */
68 #define SOC_PLL_SPI_CLK_ENABLE BIT(14) /* Enables SOC_PLL_SPI_CLK_ENABLE */
69 #define IID_CLK_ENABLE BIT(16) /* Enables IID_CLK_ENABLE */
70 #define SDIO_SYS_HCLK_ENABLE BIT(17) /* Enables SDIO_SYS_HCLK_ENABLE */
71 #define CRC_CLK_ENABLE_M4 BIT(18) /* Enables CRC_CLK_ENABLE_M4 */
72 #define M4SS_UM_CLK_STATIC_EN BIT(19) /* Enables M4SS_UM_CLK_STATIC_EN */
73 #define ETH_HCLK_ENABLE BIT(21) /* Enables ETH_HCLK_ENABLE */
74 #define HWRNG_PCLK_ENABLE BIT(22) /* Enables HWRNG_PCLK_ENABLE */
75 #define GNSS_MEM_CLK_ENABLE BIT(23) /* Enables GNSS_MEM_CLK_ENABLE */
76 #define CCI_PCLK_ENABLE BIT(24) /* Enables CCI_PCLK_ENABLE */
77 #define CCI_HCLK_ENABLE BIT(25) /* Enables CCI_HCLK_ENABLE */
78 #define CCI_CLK_ENABLE BIT(26) /* Enables CCI_CLK_ENABLE */
79 #define MASK_HOST_CLK_WAIT_FIX BIT(27) /* Enables MASK_HOST_CLK_WAIT_FIX */
80 #define MASK31_HOST_CLK_CNT BIT(28) /* Enables MASK31_HOST_CLK_CNT */
81 #define SD_MEM_INTF_CLK_ENABLE \
82 BIT(29) /* Static Clock gating Enable for sd_mem_intf clk1'b1 => Clock is enabled1'b0 => Invalid*/
83 #define MASK_HOST_CLK_AVAILABLE_FIX BIT(30) /* Enables MASK_HOST_CLK_AVAILABLE_FIX */
84 #define ULPSS_CLK_ENABLE BIT(31) /* Enables ULPSS_CLK_ENABLE */
85
86 /*SER Reg2 SET / CLR*/
87 #define GEN_SPI_MST1_HCLK_ENABLE BIT(0) /* Enables GEN_SPI_MST1_HCLK_ENABLE */
88 #define CAN1_PCLK_ENABLE BIT(2) /* Enables CAN1_PCLK_ENABLE */
89 #define CAN1_CLK_ENABLE BIT(3) /* Enables CAN1_CLK_ENABLE */
90 #define UDMA_HCLK_ENABLE BIT(6) /* Enables UDMA_HCLK_ENABLE */
91 #define I2C_BUS_CLK_ENABLE BIT(7) /* Enables I2C_1_BUS_CLK_ENABLE */
92 #define I2C_2_BUS_CLK_ENABLE BIT(8) /* Enables I2C_2_BUS_CLK_ENABLE */
93 #define SSI_SLV_PCLK_ENABLE BIT(9) /* Enables SSI_SLV_PCLK_ENABLE */
94 #define SSI_SLV_SCLK_ENABLE BIT(10) /* Enables SSI_SLV_SCLK_ENABLE */
95 #define QSPI_CLK_ENABLE BIT(11) /* Enables QSPI_CLK_ENABLE */
96 #define QSPI_HCLK_ENABLE BIT(12) /* Enables QSPI_HCLK_ENABLE */
97 #define I2SM_SCLK_ENABLE BIT(13) /* Enables I2SM_SCLK_ENABLE */
98 #define I2SM_INTF_SCLK_ENABLE BIT(14) /* Enables I2SM_INTF_SCLK_ENABLE */
99 #define I2SM_PCLK_ENABLE BIT(15) /* Enables I2SM_PCLK_ENABLE */
100 #define QE_PCLK_ENABLE BIT(17) /* Enables QE_PCLK_ENABLE */
101 #define MCPWM_PCLK_ENABLE BIT(18) /* Enables MCPWM_PCLK_ENABLE */
102 #define SGPIO_PCLK_ENABLE BIT(20) /* Enables SGPIO_PCLK_ENABLE */
103 #define EGPIO_PCLK_ENABLE BIT(21) /* Enables EGPIO_PCLK_ENABLE */
104 #define ARM_CLK_ENABLE BIT(22) /* Enables ARM_CLK_ENABLE */
105 #define SSI_MST_PCLK_ENABLE BIT(23) /* Enables SSI_MST_PCLK_ENABLE */
106 #define SSI_MST_SCLK_ENABLE BIT(24) /* Enables SSI_MST_SCLK_ENABLE */
107 #define MEM2_CLK_ENABLE BIT(25) /* Enables MEM2_CLK_ENABLE */
108 #define MEM_CLK_ULP_ENABLE BIT(26) /* Enables MEM_CLK_ULP_ENABLE */
109 #define ROM_CLK_ENABLE BIT(27) /* Enables ROM_CLK_ENABLE */
110 #define PLL_INTF_CLK_ENABLE BIT(28) /* Enables PLL_INTF_CLK_ENABLE */
111 #define SEMAPHORE_CLK_ENABLE BIT(29) /* Enables SEMAPHORE_CLK_ENABLE */
112 #define TOT_CLK_ENABLE BIT(30) /* Enables TOT_CLK_ENABLE */
113 #define RMII_SOFT_RESET BIT(31) /* Enables RMII_SOFT_RESET */
114
115 /*SET Reg 3 SET / CLR*/
116 #define BUS_CLK_ENABLE BIT(0) /* Enables BUS_CLK_ENABLE */
117 #define M4_CORE_CLK_ENABLE BIT(1) /* Enables M4_CORE_CLK_ENABLE */
118 #define CM_BUS_CLK_ENABLE BIT(2) /* Enables CM_BUS_CLK_ENABLE */
119 #define MISC_CONFIG_PCLK_ENABLE BIT(4) /* Enables MISC_CONFIG_PCLK_ENABLE */
120 #define EFUSE_CLK_ENABLE BIT(5) /* Enables EFUSE_CLK_ENABLE */
121 #define ICM_CLK_ENABLE BIT(6) /* Enables ICM_CLK_ENABLE */
122 #define MEM1_CLK_ENABLE BIT(7) /* Enables MEM1_CLK_ENABLE */
123 #define MEM3_CLK_ENABLE BIT(8) /* Enables MEM3_CLK_ENABLE */
124 #define USB_PHY_CLK_IN_ENABLE BIT(12) /* Enables USB_PHY_CLK_IN_ENABLE */
125 #define QSPI_CLK_ONEHOT_ENABLE BIT(13) /* Enables QSPI_CLK_ONEHOT_ENABLE */
126 #define QSPI_M4_SOC_SYNC BIT(14) /* Enables QSPI_M4_SOC_SYNC */
127 #define EGPIO_CLK_ENABLE BIT(16) /* Enables EGPIO_CLK_ENABLE */
128 #define I2C_CLK_ENABLE BIT(17) /* Enables I2C_CLK_ENABLE */
129 #define I2C_2_CLK_ENABLE BIT(18) /* Enables I2C_2_CLK_ENABLE */
130 #define EFUSE_PCLK_ENABLE BIT(19) /* Enables EFUSE_PCLK_ENABLE */
131 #define SGPIO_CLK_ENABLE BIT(20) /* Enables SGPIO_CLK_ENABLE */
132 #define TASS_M4SS_64K_SWITCH_CLK_ENABLE BIT(21) /* Enables TASS_M4SS_64K_SWITCH_CLK_ENABLE */
133 #define TASS_M4SS_128K_SWITCH_CLK_ENABLE BIT(22) /* Enables TASS_M4SS_128K_SWITCH_CLK_ENABLE */
134 #define TASS_M4SS_SDIO_SWITCH_CLK_ENABLE BIT(23) /* Enables TASS_M4SS_SDIO_SWITCH_CLK_ENABLE */
135 #define TASS_M4SS_USB_SWITCH_CLK_ENABLE BIT(24) /* Enables TASS_M4SS_USB_SWITCH_CLK_ENABLE */
136 #define ROM_MISC_STATIC_ENABLE BIT(25) /* Enables ROM_MISC_STATIC_ENABLE */
137 #define M4_SOC_CLK_FOR_OTHER_ENABLE BIT(26) /* Enables M4_SOC_CLK_FOR_OTHER_ENABLE */
138 #define ICACHE_ENABLE BIT(27) /* Enables ICACHE_ENABLE */
139
140 /*DYN_CLK_GATE_DISABLE_REG */
141
142 #define SDIO_SYS_HCLK_DYN_CTRL_DISABLE BIT(0) /* Enables SDIO_SYS_HCLK_DYN_CTRL_DISABLE */
143 #define BUS_CLK_DYN_CTRL_DISABLE BIT(1) /* Enables BUS_CLK_DYN_CTRL_DISABLE */
144 #define GPDMA_HCLK_DYN_CTRL_DISABLE BIT(4) /* Enables GPDMA_HCLK_DYN_CTRL_DISABLE */
145 #define EGPIO_PCLK_DYN_CTRL_DISABLE BIT(5) /* Enables EGPIO_PCLK_DYN_CTRL_DISABLE */
146 #define SGPIO_PCLK_DYN_CTRL_DISABLE BIT(6) /* Enables SGPIO_PCLK_DYN_CTRL_DISABLE */
147 #define TOT_CLK_DYN_CTRL_DISABLE BIT(7) /* Enables TOT_CLK_DYN_CTRL_DISABLE */
148 #define HWRNG_PCLK_DYN_CTRL_DISABLE BIT(8) /* Enables HWRNG_PCLK_DYN_CTRL_DISABLE */
149 #define USART1_SCLK_DYN_CTRL_DISABLE BIT(9) /* Enables USART1_SCLK_DYN_CTRL_DISABLE */
150 #define USART1_PCLK_DYN_CTRL_DISABLE BIT(10) /* Enables USART1_PCLK_DYN_CTRL_DISABLE */
151 #define USART2_SCLK_DYN_CTRL_DISABLE BIT(11) /* Enables USART2_SCLK_DYN_CTRL_DISABLE */
152 #define USART2_PCLK_DYN_CTRL_DISABLE BIT(12) /* Enables USART2_PCLK_DYN_CTRL_DISABLE */
153 #define SSI_SLV_SCLK_DYN_CTRL_DISABLE BIT(15) /* Enables SSI_SLV_SCLK_DYN_CTRL_DISABLE */
154 #define SSI_SLV_PCLK_DYN_CTRL_DISABLE BIT(16) /* Enables SSI_SLV_PCLK_DYN_CTRL_DISABLE */
155 #define I2SM_INTF_SCLK_DYN_CTRL_DISABLE BIT(18) /* Enables I2SM_INTF_SCLK_DYN_CTRL_DISABLE */
156 #define SEMAPHORE_CLK_DYN_CTRL_DISABLE BIT(19) /* Enables SEMAPHORE_CLK_DYN_CTRL_DISABLE */
157 #define ARM_CLK_DYN_CTRL_DISABLE BIT(20) /* Enables ARM_CLK_DYN_CTRL_DISABLE */
158 #define SSI_MST_SCLK_DYN_CTRL_DISABLE BIT(21) /* Enables SSI_MST_SCLK_DYN_CTRL_DISABLE */
159 #define MEM1_CLK_DYN_CTRL_DISABLE BIT(22) /* Enables MEM1_CLK_DYN_CTRL_DISABLE */
160 #define MEM2_CLK_DYN_CTRL_DISABLE BIT(23) /* Enables MEM2_CLK_DYN_CTRL_DISABLE */
161 #define MEM_CLK_ULP_DYN_CTRL_DISABLE BIT(24) /* Enables MEM_CLK_ULP_DYN_CTRL_DISABLE */
162 #define MEM3_CLK_DYN_CTRL_DISABLE BIT(25) /* Enables MEM3_CLK_DYN_CTRL_DISABLE */
163 #define SSI_MST_PCLK_DYN_CTRL_DISABLE BIT(28) /* Enables SSI_MST_PCLK_DYN_CTRL_DISABLE */
164 #define ICACHE_DYN_GATING_DISABLE BIT(29) /* Enables ICACHE_DYN_GATING_DISABLE */
165 #define CCI_PCLK_DYN_CTRL_DISABLE BIT(30) /* Enables CCI_PCLK_DYN_CTRL_DISABLE */
166 #define MISC_CONFIG_PCLK_DYN_CTRL_DISABLE BIT(31) /* Enables MISC_CONFIG_PCLK_DYN_CTRL_DISABLE */
167
168 /*DYN_CLK_GATE_DISABLE_REG2 */
169 #define SOC_PLL_SPI_CLK_DYN_CTRL_DISABLE BIT(0) /* Enables SOC_PLL_SPI_CLK_DYN_CTRL_DISABLE */
170 #define I2C_BUS_DYN_CTRL_DISABLE BIT(1) /* Enables I2C_BUS_DYN_CTRL_DISABLE */
171 #define I2C_2_BUS_CLK_DYN_CTRL_DISABLE BIT(2) /* Enables I2C_2_BUS_CLK_DYN_CTRL_DISABLE */
172 #define CT_PCLK_DYN_CTRL_DISABLE BIT(3) /* Enables SCT_PCLK_DYN_CTRL_DISABLE */
173 #define CAN1_PCLK_DYN_CTRL_DISABLE BIT(4) /* Enables CAN1_PCLK_DYN_CTRL_DISABLE */
174 #define I2SM_PCLK_DYN_CTRL_DISABLE BIT(5) /* Enables I2SM_PCLK_DYN_CTRL_DISABLE */
175 #define EFUSE_CLK_DYN_CTRL_DISABLE BIT(6) /* Enables EFUSE_CLK_DYN_CTRL_DISABLE */
176 #define EFUSE_PCLK_DYN_CTRL_DISABLE BIT(7) /* Enables EFUSE_PCLK_DYN_CTRL_DISABLE */
177 #define PWR_CTRL_CLK_DYN_CTRL_DISABLE BIT(8) /* Enables PWR_CTRL_CLK_DYN_CTRL_DISABLE */
178
179 /*SOC_Pll Clock frequency checks */
180 #define SOC_PLL_MIN_FREQUECY 1000000 /* Minimum frequency for SOC_PLL*/
181 #define SOC_PLL_MAX_FREQUECY 300000000 /* Maximum frequency for SOC_PLL*/
182
183 /*SOC_Pll Clock frequency checks */
184 #define INTF_PLL_MIN_FREQUECY 1000000 /* Minimum frequency for SOC_PLL*/
185 #define INTF_PLL_MAX_FREQUECY 300000000 /* Maximum frequency for SOC_PLL*/
186
187 #define I2S_DCO_FREQ1 73728000 /* i2s_dco_freq1*/
188 #define I2S_DCO_FREQ2 67737600 /* i2s_dco_freq2*/
189
190 /*SOCPLL_MACRO_REG_ACCESS*/
191 #define SOCPLLMACROREG1 0x00 /* Address for SOCPLLMACROREG1 register Access*/
192 #define SOCPLLMACROREG2 0x01 /* Address for SOCPLLMACROREG2 register Access*/
193 #define SOCPLLMACROREG3 0x02 /* Address for SOCPLLMACROREG3 register Access*/
194 #define SOCPLLMACROREG4 0x03 /* Address for SOCPLLMACROREG4 register Access*/
195 #define SOCPLLMACROREG5 0x04 /* Address for SOCPLLMACROREG5 register Access*/
196
197 /*SOCPLLMACROREG*/
198 #define LDO_PROG_SOCPLL (0xE000) /* Mask value for LDO_PROG_SOCPLL*/
199 #define LDO_PROG_INTFPLL (0x1C00) /* Mask value for LDO_PROG_INTFPLL*/
200 #define LDO_PROG_I2SPLL (0x0380) /* Mask value for LDO_PROG_I2SPLL*/
201
202 /* SOC_PLL_REG_ACCESS */
203 #define SOC_PLL_500_CTRL_REG1 0x10 /* Address for SOC_PLL_500_CTRL_REG1 register Access*/
204 #define SOC_PLL_500_CTRL_REG2 0x11 /* Address for SOC_PLL_500_CTRL_REG2 register Access*/
205 #define SOC_PLL_500_CTRL_REG3 0x12 /* Address for SOC_PLL_500_CTRL_REG3 register Access*/
206 #define SOC_PLL_500_CTRL_REG4 0x13 /* Address for SOC_PLL_500_CTRL_REG4 register Access*/
207 #define SOC_PLL_500_CTRL_REG5 0x14 /* Address for SOC_PLL_500_CTRL_REG5 register Access*/
208 #define SOC_PLL_500_CTRL_REG6 0x15 /* Address for SOC_PLL_500_CTRL_REG6 register Access*/
209 #define SOC_PLL_500_CTRL_REG7 0x16 /* Address for SOC_PLL_500_CTRL_REG7 register Access*/
210 #define SOC_PLL_500_CTRL_REG8 0x17 /* Address for SOC_PLL_500_CTRL_REG8 register Access*/
211 #define SOC_PLL_500_CTRL_REG9 0x18 /* Address for SOC_PLL_500_CTRL_REG9 register Access*/
212 #define SOC_PLL_500_CTRL_REG10 0x19 /* Address for SOC_PLL_500_CTRL_REG10 register Access*/
213 #define SOC_PLL_500_CTRL_REG11 0x1A /* Address for SOC_PLL_500_CTRL_REG11 register Access*/
214 #define SOC_PLL_500_CTRL_REG12 0x1B /* Address for SOC_PLL_500_CTRL_REG12 register Access*/
215 #define SOC_PLL_500_CTRL_REG13 0x1C /* Address for SOC_PLL_500_CTRL_REG13 register Access*/
216
217 /* INTF_PLL_REG_ACCESS */
218 #define INTF_PLL_500_CTRL_REG1 0x20 /* Address for INTF_PLL_500_CTRL_REG1 register Access*/
219 #define INTF_PLL_500_CTRL_REG2 0x21 /* Address for INTF_PLL_500_CTRL_REG2 register Access*/
220 #define INTF_PLL_500_CTRL_REG3 0x22 /* Address for INTF_PLL_500_CTRL_REG3 register Access*/
221 #define INTF_PLL_500_CTRL_REG4 0x23 /* Address for INTF_PLL_500_CTRL_REG4 register Access*/
222 #define INTF_PLL_500_CTRL_REG5 0x24 /* Address for INTF_PLL_500_CTRL_REG5 register Access*/
223 #define INTF_PLL_500_CTRL_REG6 0x25 /* Address for INTF_PLL_500_CTRL_REG6 register Access*/
224 #define INTF_PLL_500_CTRL_REG7 0x26 /* Address for INTF_PLL_500_CTRL_REG7 register Access*/
225 #define INTF_PLL_500_CTRL_REG8 0x27 /* Address for INTF_PLL_500_CTRL_REG8 register Access*/
226 #define INTF_PLL_500_CTRL_REG9 0x28 /* Address for INTF_PLL_500_CTRL_REG9 register Access*/
227 #define INTF_PLL_500_CTRL_REG10 0x29 /* Address for INTF_PLL_500_CTRL_REG10 register Access*/
228 #define INTF_PLL_500_CTRL_REG11 0x2A /* Address for INTF_PLL_500_CTRL_REG11 register Access*/
229 #define INTF_PLL_500_CTRL_REG12 0x2B /* Address for INTF_PLL_500_CTRL_REG12 register Access*/
230 #define INTF_PLL_500_CTRL_REG13 0x2C /* Address for INTF_PLL_500_CTRL_REG13 register Access*/
231
232 /* I2S_PLL_REG_ACCESS */
233 #define I2S_PLL_CTRL_REG1 0x30 /* Address for I2S_PLL_CTRL_REG1 register Access*/
234 #define I2S_PLL_CTRL_REG2 0x31 /* Address for I2S_PLL_CTRL_REG2 register Access*/
235 #define I2S_PLL_CTRL_REG3 0x32 /* Address for I2S_PLL_CTRL_REG3 register Access*/
236 #define I2S_PLL_CTRL_REG4 0x33 /* Address for I2S_PLL_CTRL_REG4 register Access*/
237 #define I2S_PLL_CTRL_REG5 0x34 /* Address for I2S_PLL_CTRL_REG5 register Access*/
238 #define I2S_PLL_CTRL_REG6 0x35 /* Address for I2S_PLL_CTRL_REG6 register Access*/
239 #define I2S_PLL_CTRL_REG7 0x36 /* Address for I2S_PLL_CTRL_REG7 register Access*/
240 #define I2S_PLL_CTRL_REG8 0x37 /* Address for I2S_PLL_CTRL_REG8 register Access*/
241 #define I2S_PLL_CTRL_REG9 0x38 /* Address for I2S_PLL_CTRL_REG9 register Access*/
242 #define I2S_PLL_CTRL_REG10 0x39 /* Address for I2S_PLL_CTRL_REG10 register Access*/
243 #define I2S_PLL_CTRL_REG11 0x3A /* Address for I2S_PLL_CTRL_REG11 register Access*/
244 #define I2S_PLL_CTRL_REG12 0x3B /* Address for I2S_PLL_CTRL_REG12 register Access*/
245 #define I2S_PLL_CTRL_REG13 0x3C /* Address for I2S_PLL_CTRL_REG13 register Access*/
246
247 /* AFE_PLL_CTRL_REG_REG_ACCESS */
248 #define AFEPLLCTRLREG1 0x07 /* Address for AFEPLLCTRLREG1 register Access*/
249 #define AFEPLLCTRLREG2 0x08 /* Address for AFEPLLCTRLREG1 register Access*/
250
251 #define MEMS_REF_CLK_ENABLE BIT(6)
252
253 /*SOC_PLL_500_CTRL_REG1/INTF_PLL_500_CTRL_REG1/I2S_PLL_CTRL_REG_1 */
254 #define DCO_FIX_SEL_MASK (0x0003) /* Mask value for DCO_FIX_SEL_MASK*/
255 #define PLL_500_BYPASS BIT(2) /* Enables PLL_500_BYPASS */
256 #define PLL_500_CLK_ENABLE BIT(3) /* Enables PLL_500_CLK_ENABLE */
257 #define PLL_500_PD BIT(4) /* Enables PLL_500_PD */
258 #define PLL_500_RST BIT(5) /* Enables PLL_500_RST */
259 #define PLL_500_M_MASK (0xFFC0) /* Mask value for PLL_500_M_MASK*/
260 /*I2S_PLL_CTRL_REG_1*/
261 #define I2S_PLL_CLK_ENABLE BIT(2) /* Enables I2S_PLL_CLK_ENABLE */
262 #define I2S_PLL_BYPASS BIT(3) /* Enables I2S_PLL_BYPASS */
263
264 /*SOC_PLL_500_CTRL_REG2/INTF_PLL_500_CTRL_REG 2 */
265 #define PLL_500_N_MASK (0x01F8) /* Mask value for PLL_500_N_MASK*/
266 #define PLL_500_P_MASK (0xFE00) /* Mask value for PLL_500_P_MASK*/
267
268 /*I2S_PLL_CTRL_REG_2*/
269 #define N_DIV_MASK (0x00FE) /* Mask value for N_DIV_MASK*/
270 #define P_DIV2_MASK (0x0700) /* Mask value for P_DIV2_MASK*/
271 #define P_DIV1_MASK (0xF800) /* Mask value for P_DIV1_MASK*/
272
273 /*SOC_PLL_500_CTRL_REG3/INTF_PLL_500_CTRL_REG_3/ I2S_PLL_CTRL_REG_3 */
274 #define FCW_F_MASK (0xFFFC) /* Mask value for FCW_F_MASK*/
275
276 /*SOC_PLL_500_CTRL_REG_4/INTF_PLL_500_CTRL_REG_4 */
277 #define LDO_BY_PASS BIT(1) /* Enables LDO_BY_PASS */
278 #define SD_CLK_SEL_MASK (0x000C) /* Mask value for SD_CLK_SEL_MASK*/
279 #define SD_LEN BIT(4) /* Enables SD_LEN */
280 #define FILTER_TYPE BIT(5) /* Enables FILTER_TYPE */
281 #define BETA_MASK (0x07C0) /* Mask value for BETA_MASK*/
282 #define ALPHA_MASK (0xF800) /* Mask value for ALPHA_MASK*/
283 /*SOC_PLL_500_CTRL_REG_5/INTF_PLL_500_CTRL_REG_5/ I2S_PLL_CTRL_REG_5 */
284 #define LOCK_LIMIT_MASK (0x3FFF) /* Mask value for LOCK_LIMIT_MASK*/
285 #define ENABLE_PHASE_LOCK_DETECT BIT(14) /* Enables ENABLE_PHASE_LOCK_DETECT */
286 #define ENABLE_FREQ_LOCK_DETECT BIT(15) /* Enables ENABLE_FREQ_LOCK_DETECT */
287 /*SOC_PLL_500_CTRL_REG_6/INTF_PLL_500_CTRL_REG_6/ I2S_PLL_CTRL_REG_6 */
288 #define RETIMER_COUNT_MASK (0x00F0) /* Mask value for RETIMER_COUNT_MASK*/
289 #define TDC_PWRSAV_COUNT_MASK (0x7F00) /* Mask value for TDC_PWRSAV_COUNT_MASK*/
290 #define TDC_PWRSAV_EN BIT(15) /* Enables TDC_PWRSAV_EN */
291
292 /*SOC_PLL_500_CTRL_REG_7/INTF_PLL_500_CTRL_REG_7/ I2S_PLL_CTRL_REG_7*/
293 #define SPI_INP_RD_EN BIT(4) /* Enables SPI_INP_RD_EN */
294 #define OCW_MANUAL_MASK (0xFFE0) /* Mask value for OCW_MANUAL_MASK */
295 #define DCO_TESTMODE BIT(15) /* Enables DCO_TESTMODE */
296
297 /*SOC_PLL_500_CTRL_REG_8/INTF_PLL_500_CTRL_REG_8/I2S_PLL_CTRL_REG_8 */
298 #define ISOLATION_ENABLE BIT(0) /* Enables ISOLATION_ENABLE */
299 #define BYPASS_ISO_GEN BIT(1) /* Enables BYPASS_ISO_GEN */
300 #define BYPASS_LOCK_FLAG BIT(2) /* Enables BYPASS_LOCK_FLAG */
301 #define BYPASS_PWR_GOOD BIT(3) /* Enables BYPASS_PWR_GOOD */
302 #define LOCK_COUNT_LIMIT_FREQ_MASK (0x00F0) /* Mask value for LOCK_COUNT_LIMIT_FREQ_MASK */
303 #define LOCK_COUNT_LIMIT_PHASE_MASK (0xFF00) /* Mask value for LOCK_COUNT_LIMIT_PHASE_MASK*/
304
305 /*SOC_PLL_500_CTRL_REG_9/INTF_PLL_500_CTRL_REG_9/ I2S_PLL_CTRL_REG_9 */
306 #define MM_COUNT_LIMIT_MASK (0x3FC0) /* Mask value for MM_COUNT_LIMIT_MASK */
307 #define BYPASS_LOCK_PLL BIT(14) /* Enables BYPASS_LOCK_PLL */
308 #define MANUAL_LOCK_ENABLE BIT(15) /* Enables MANUAL_LOCK_ENABLE */
309
310 /*SOC_PLL_500_CTRL_REG_10/INTF_PLL_500_CTRL_REG_10/ I2S_PLL_CTRL_REG_10 */
311 #define CKR_TEST_EN BIT(3) /* Enables CKR_TEST_EN */
312 #define SELOUT_SA_RETIMER BIT(4) /* Enables SELOUT_SA_RETIMER */
313 #define EN_STD_RETIMER BIT(5) /* Enables EN_STD_RETIMER */
314 #define EN_SA_RETIMER BIT(6) /* Enables EN_SA_RETIMER */
315 #define RETIMER_PWRSAV_COUNT2_MASK (0x0780) /* Mask value for RETIMER_PWRSAV_COUNT2_MASK */
316 #define RETIMER_PWRSAV_COUNT1_MASK (0x7800) /* Mask value for RETIMER_PWRSAV_COUNT1_MASK */
317 #define RETIMER_PWRSAV_EN BIT(15) /* Enables RETIMER_PWRSAV_EN */
318
319 /*SOC_PLL_500_CTRL_REG_11/INTF_PLL_500_CTRL_REG_11/ I2S_PLL_CTRL_REG_11 */
320 #define PU_SD_DIV BIT(1) /* Enables PU_SD_DIV */
321 #define PU_POST_DIV BIT(2) /* Enables PU_POST_DIV */
322 #define PU_INP_DIV BIT(3) /* Enables PU_INP_DIV */
323 #define PU_INDO BIT(4) /* Enables PU_INDO */
324 #define PU_RETIMER BIT(5) /* Enables PU_RETIMER */
325 #define PU_TDC BIT(6) /* Enables PU_TDC */
326 #define PU_DCO BIT(7) /* Enables PU_DCO */
327 #define PU_DIGITAL_TOP BIT(8) /* Enables PU_DIGITAL_TOP */
328 #define RESETN_SD_DIV BIT(9) /* Enables RESETN_SD_DIV */
329 #define RESETN_INP_DIV BIT(10) /* Enables RESETN_INP_DIV */
330 #define RESETN_POST_DIV BIT(11) /* Enables RESETN_POST_DIV */
331 #define RESETN_RETIMER BIT(12) /* Enables RESETN_RETIMER */
332 #define RESETN_LOCK_DETECT BIT(13) /* Enables RESETN_LOCK_DETECT */
333 #define RESETN_LOOP BIT(14) /* Enables RESETN_LOOP */
334 #define RESETN_TDC BIT(15) /* Enables RESETN_TDC */
335
336 /*SOC_PLL_500_CTRL_REG_12/INTF_PLL_500_CTRL_REG_12/ I2S_PLL_CTRL_REG_12 */
337 #define DELTF_MASK (0x003E) /* Mask value for DELTF_MASK */
338 #define DELTR_MASK (0x07C0) /* Mask value for DELTR_MASK */
339 #define TV_MASK (0XF800) /* Mask value for TV_MASK */
340
341 /*SOC_PLL_500_CTRL_REG_13/INTF_PLL_500_CTRL_REG_13/ I2S_PLL_CTRL_REG_13*/
342 #define OCW_MASK (0x3FF0) /* Mask value for OCW_MASK */
343 #define LOCK_FLAG_PHASE BIT(14) /* Enables LOCK_FLAG_PHASE */
344 #define LOCK_FLAG_FREQ BIT(15) /* Enables LOCK_FLAG_FREQ */
345
346 /*SOC Clock division factor checks */
347 #define SOC_MAX_CLK_DIVISION_FACTOR 63 /* Maximum division factor value for SOC clock*/
348 #define SOC_MIN_CLK_DIVISION_FACTOR 0 /* Minimum division factor value for SOC clock*/
349
350 /*SDMEM Clock division factor checks */
351 #define SDMEM_MAX_CLK_DIVISION_FACTOR 63 /* Maximum division factor value for SD_MEM clock*/
352 #define SDMEM_MIN_CLK_DIVISION_FACTOR 0 /* Minimum division factor value for SD_MEM clock*/
353
354 /*CT Clock division factor checks */
355 #define CT_MAX_CLK_DIVISION_FACTOR 63 /* Maximum division factor value for CT clock*/
356 #define CT_MIN_CLK_DIVISION_FACTOR 0 /* Minimum division factor value for CT clock*/
357
358 /*I2S Clock division factor checks */
359 #define I2S_MAX_CLK_DIVISION_FACTOR 63 /* Maximum division factor value for I2S clock*/
360 #define I2S_MIN_CLK_DIVISION_FACTOR 0 /* Minimum division factor value for I2S clock*/
361
362 /*USB Clock division factor checks */
363 #define USB_MAX_CLK_DIVISION_FACTOR 3 /* Maximum division factor value for USB clock*/
364 #define USB_MIN_CLK_DIVISION_FACTOR 0 /* Minimum division factor value for USB clock*/
365
366 /*CAN Clock division factor checks */
367 #define CAN_MAX_CLK_DIVISION_FACTOR 255 /* Maximum division factor value for CAN clock*/
368 #define CAN_MIN_CLK_DIVISION_FACTOR 0 /* Minimum division factor value for CAN clock*/
369
370 /*I2S Clock division factor checks */
371 #define MCU_CLKOUT_MAX_CLK_DIVISION_FACTOR 63 /* Maximum division factor value for MCU_CLKOUT clock*/
372 #define MCU_CLKOUT_MIN_CLK_DIVISION_FACTOR 0 /* Minimum division factor value for MCU_CLKOUT clock*/
373 #define MCU_CLKOUT_SEL_MAX 15 /* Maximum Seletion value for MCU_CLKOUT clock source*/
374
375 /*QSPI Clock Division factor checks */
376 #define QSPI_MAX_CLK_DIVISION_FACTOR 63 /* Maximum division factor value for QSPI clock*/
377 #define QSPI_MIN_CLK_DIVISION_FACTOR 0 /* Minimum division factor value for QSPI clock*/
378
379 /*USART Clock Division factor checks */
380 #define USART_MAX_CLK_DIVISION_FACTOR 15 /* Maximum division factor value for USART clock*/
381 #define USART_MIN_CLK_DIVISION_FACTOR 0 /* Minimum division factor value for USART clock*/
382
383 /*SSI Clock Division factor checks */
384 #define SSI_MAX_CLK_DIVISION_FACTOR 15 /* Maximum division factor value for SSI clock*/
385 #define SSI_MIN_CLK_DIVISION_FACTOR 0 /* Minimum division factor value for SSI clock*/
386
387 /*CCI Clock Division factor checks */
388 #define CCI_MAX_CLK_DIVISION_FACTOR 15 /* Maximum division factor value for CCI clock*/
389 #define CCI_MIN_CLK_DIVISION_FACTOR 0 /* Minimum division factor value for CCI clock*/
390
391 /*PLL_INTF Clock Division factor checks */
392 #define PLL_INTF_MAX_CLK_DIVISION_FACTOR 15 /* Maximum division factor value for PLL_INTF clock*/
393 #define PLL_INTF_MIN_CLK_DIVISION_FACTOR 0 /* Minimum division factor value for PLL_INTF clock*/
394
395 /*Sleep Clock selection checks */
396 #define SLP_MAX_SEL 3 /* Maximum Seletion value for Sleep clock source*/
397 #define SLP_MIN_SEL 0 /* Minimum Seletion value for Sleep clock source*/
398
399 #define MAX_SLP_CYCLES 3 /* Maximum Cycles for Sleep clock*/
400 #define MIN_SLP_CYCLES 0 /* Minimum Cycles for Sleep clock*/
401
402 #define MISC_CFG_MISC_CTRL1 (*((uint32_t volatile *)(MISC_CONFIG_BASE + 0x44))) /* address of MISC_CFG_MISC_CTRL1 */
403 #define I2S_MASTER_SLAVE_MODE (1 << 23) /* Sets I2S/I2S PCM master mode */
404
405 #define MCU_ULP_40MHZ_CLK_EN_TRUN_ON_DELAY 10 /* delay to enable the ULP 40MHZ CLK*/
406 #define MCU_ULP_DOUBLER_CLK_EN_TRUN_ON_DELAY 10 /* delay to enable the ULP DOUBLER CLK*/
407 #define MCU_ULP_20MHZ_RING_OSC_CLK_EN_TRUN_ON_DELAY 10 /* delay to enable the ULP 20MHZ_RING_OSC CLK*/
408 #define MCU_ULP_MHZ_RC_CLK_EN_TRUN_ON_DELAY 2 /* delay to enable the ULP MHZ_RC CLK*/
409 #define MCU_ULP_32KHZ_XTAL_CLK_EN_TRUN_ON_DELAY_1 500 /* delay to enable the ULP 32KHZ_XTAL CLK*/
410 #define MCU_ULP_32KHZ_XTAL_CLK_EN_TRUN_ON_DELAY_2 1500 /* delay to enable the ULP 32KHZ_XTAL CLK*/
411 #define MCU_ULP_32KHZ_RO_CLK_EN_TRUN_ON_DELAY 250 /* delay to enable the ULP 32KHZ_RO CLK*/
412 #define MCU_ULP_32KHZ_RC_CLK_EN_TRUN_ON_DELAY 150 /* delay to enable the ULP 32KHZ_RC CLK*/
413
414 /**
415 *@brief Reference clock selection
416 **/
417 typedef enum REF_CLK_ENABLE {
418 MCU_ULP_40MHZ_CLK_EN, /*!< Enables ULP_40MHZ_CLK when it is passed */
419 MCU_ULP_DOUBLER_CLK_EN, /*!< Enables ULP_DOUBLER_CLK when it is passed */
420 MCU_ULP_20MHZ_RING_OSC_CLK_EN, /*!< Enables ULP_20MHZ_RING_OSC_CLK when it is passed */
421 MCU_ULP_MHZ_RC_CLK_EN, /*!< Enables ULP_MHZ_RC_CLK when it is passed */
422 MCU_ULP_32KHZ_XTAL_CLK_EN, /*!< Enables ULP_32KHZ_XTAL_CLK when it is passed */
423 MCU_ULP_32KHZ_RO_CLK_EN, /*!< Enables ULP_32KHZ_RO_CLK when it is passed */
424 MCU_ULP_32KHZ_RC_CLK_EN /*!< Enables ULP_32KHZ_RC_CLK when it is passed */
425 } REF_CLK_ENABLE_T;
426 /**
427 *@brief list of peripherals, particular clock that to be enabled
428 **/
429 typedef enum PERIPHERALS_CLK {
430 USART1_CLK, /*!< Enables or Disables USART1 Peripheral clock when it is passed */
431 USART2_CLK, /*!< Enables or Disables USART2 Master Peripheral clock when it is passed */
432 SSIMST_CLK, /*!< Enables or Disables SSI Master Peripheral clock when it is passed */
433 SSISLAVE_CLK, /*!< Enables or Disables SSI Slave Peripheral clock when it is passed */
434 CT_CLK, /*!< Enables or Disables CT Peripheral clock when it is passed */
435 SD_MEM_CLK, /*!< Enables or Disables SD_MEM Peripheral clock when it is passed */
436 CCI_CLK, /*!< Enables or Disables CCI Peripheral clock when it is passed */
437 QSPI_CLK, /*!< Enables or Disables QSPI Peripheral clock when it is passed */
438 RPDMA_CLK, /*!< Enables or Disables RPDMA Peripheral clock when it is passed */
439 UDMA_CLK, /*!< Enables or Disables UDMA Peripheral clock when it is passed */
440 PWM_CLK, /*!< Enables or Disables PWM Peripheral clock when it is passed */
441 CAN_CLK, /*!< Enables or Disables CAN Peripheral clock when it is passed */
442 GSPI_CLK, /*!< Enables or Disables GSPI Peripheral clock when it is passed */
443 EGPIO_CLK, /*!< Enables or Disables EGPIO Peripheral clock when it is passed */
444 ETHERNET_CLK, /*!< Enables or Disables ETHERNET Peripheral clock when it is passed */
445 MCUCLKOUT_CLK, /*!< Enables or Disables MCUCLKOUT Peripheral clock when it is passed */
446 HWRNG_CLK, /*!< Enables or Disables HWRNG Peripheral clock when it is passed */
447 I2SM_CLK, /*!< Enables or Disables I2SM Peripheral clock when it is passed */
448 #if defined(SLI_SI917B0) || defined(SLI_SI915)
449 QSPI_2_CLK, /*!< Enables or Disables QSPI 2 Peripheral clock when it is passed */
450 #endif
451 } PERIPHERALS_CLK_T;
452
453 /**
454 *@brief PLL selection types
455 **/
456 typedef enum PLL_TYPE {
457 SOC_PLL, /*!<SOC_PLL type selection*/
458 INFT_PLL, /*!<INFT_PLL type selection, maintaining for backward compatibility*/
459 INTF_PLL = INFT_PLL, /*!<INTF_PLL type selection*/
460 I2S_PLL /*!<I2S_PLL type selection*/
461 } PLL_TYPE_T;
462 /**
463 *@brief list of possible values of UART instances
464 **/
465 typedef enum EN_USART {
466 USART1 = 0, /*!<USART1 instance selection*/
467 USART2 = 1, /*!<USART2 instance selection*/
468 } EN_USART_T;
469 /**
470 *@brief list of possible values of I2C instances
471 **/
472 typedef enum EN_I2C {
473 I2C1_INSTAN = 0, /*!<I2C 1 instance selection*/
474 I2C2_INSTAN = 1 /*!<I2C 2 instance selection*/
475 } EN_I2C_T;
476
477 /**
478 *@brief enum values for proccessor and peripheral clk
479 **/
480 typedef enum SRC_TYPE {
481 ULP_PROCESSOR_CLK = 0, /*!< ULP_PROCESSOR_CLK selection*/
482 ULP_PERIPHERAL_CLK = 1 /*!< ULP_PERIPHERAL_CLK selection*/
483
484 } SRC_TYPE_T;
485 /**
486 *@brief M4 SOC input clock sources selection
487 **/
488 typedef enum M4_SOC_CLK_SRC_SEL {
489 M4_ULPREFCLK = 0, /*!< M4_ULPREFCLK selection*/
490 M4_RESERVED = 1, /*!< RESERVED*/
491 M4_SOCPLLCLK = 2, /*!< M4_SOCPLLCLK selection*/
492 M4_MODEMPLLCLK1 = 3, /*!< M4_MODEMPLLCLK1 selection*/
493 M4_INTFPLLCLK = 4, /*!< M4_INTFPLLCLK selection*/
494 M4_SLEEPCLK = 5, /*!< M4_SLEEPCLK selection*/
495 } M4_SOC_CLK_SRC_SEL_T;
496 /**
497 *@brief QSPI Input clock source selection
498 **/
499 typedef enum QSPI_CLK_SRC_SEL {
500 QSPI_ULPREFCLK = 0, /*!< QSPI_ULPREFCLK selection*/
501 QSPI_MODELPLLCLK2 = 1, /*!< QSPI_MODELPLLCLK2 selection*/
502 QSPI_INTFPLLCLK = 2, /*!< QSPI_INTFPLLCLK selection*/
503 QSPI_SOCPLLCLK = 3, /*!< QSPI_SOCPLLCLK selection*/
504 M4_SOCCLKNOSWLSYNCCLKTREEGATED = 4 /*!< M4_SOCCLKNOSWLSYNCCLKTREEGATED selection*/
505 } QSPI_CLK_SRC_SEL_T;
506
507 /**
508 *@brief Clock enable type
509 **/
510 typedef enum CLK_ENABLE {
511 ENABLE_DYN_CLK, /*!< Dynamic clock enable for the peripherals*/
512 ENABLE_STATIC_CLK /*!< Static clock enable for the peripherals*/
513 } CLK_ENABLE_T;
514 /**
515 *@brief USART Input clock source selection
516 **/
517 typedef enum USART_CLK_SRC_SEL {
518 USART_ULPREFCLK = 0, /*!< USART_ULPREFCLK selection*/
519 USART_SOCPLLCLK = 1, /*!< USART_SOCPLLCLK selection*/
520 USART_MODELPLLCLK2 = 2, /*!< USART_MODELPLLCLK2 selection*/
521 USART_INTFPLLCLK = 3, /*!< USART_INTFPLLCLK selection*/
522 M4_SOCCLKFOROTHERCLOCKS = 4, /*!< M4_SOCCLKFOROTHERCLOCKS selection*/
523 } USART_CLK_SRC_SEL_T;
524
525 /**
526 *@brief USART Fractional clock selection
527 **/
528 typedef enum USART_SCLK_FRAC_SEL {
529 USART_FRACTIONAL_DIVIDER, /*!< Fractional Divider selected i.e clk_out = clk_in/ (sclk_div_fac+0.5)*/
530 USART_CLOCK_SWALLOW, /*!< Clock Swallow selected i.e clk_out = clk_in/ sclk_div_fac*/
531 } USART_SCLK_FRAC_SEL_T;
532
533 /**
534 *@brief SSI Input clock source selection
535 **/
536 typedef enum SSI_MST_CLK_SRC_SEL {
537 SSI_ULPREFCLK = 0, /*!< SSI_ULPREFCLK selection*/
538 SSI_SOCPLLCLK = 1, /*!< SSI_SOCPLLCLK selection*/
539 SSI_MODEMPLLCLK1 = 2, /*!< SSI_MODEMPLLCLK1 selection*/
540 SSI_INTFPLLCLK = 3, /*!< SSI_INTFPLLCLK selection*/
541 SSI_MODELPLLCLK2 = 4, /*!< SSI_MODELPLLCLK2 selection*/
542 M4_SOCCLKFOROTHERCLKS = 5, /*!< M4_SOCCLKFOROTHERCLKS selection*/
543 } SSI_MST_CLK_SRC_SEL_T;
544 /**
545 *@brief SD_MEM Input clock source selection
546 **/
547 typedef enum SDMEM_CLK_SRC_SEL {
548 SDMEM_SOCPLLCLK = 0, /*!< SDMEM_SOCPLLCLK selection*/
549 SDMEM_MODEMPLLCLK1 = 1, /*!< SDMEM_MODEMPLLCLK1 selection*/
550 SDMEM_INTFPLLCLK = 2, /*!< SDMEM_INTFPLLCLK selection*/
551 M4_SOCCLKFOROTHERCLKSSDMEM = 3, /*!< M4_SOCCLKFOROTHERCLKSSDMEM selection*/
552 } SDMEM_CLK_SRC_SEL_T;
553 /**
554 *@brief CT Input clock source selection
555 **/
556 /*CT Input clock source selection*/
557 typedef enum CT_CLK_SRC_SEL {
558 CT_ULPREFCLK = 0, /*!< CT_ULPREFCLK selection*/
559 CT_INTFPLLCLK = 1, /*!< CT_INTFPLLCLK selection*/
560 CT_SOCPLLCLK = 2, /*!< CT_SOCPLLCLK selection*/
561 M4_SOCCLKFOROTHERCLKSCT = 3, /*!< M4_SOCCLKFOROTHERCLKSCT selection*/
562 } CT_CLK_SRC_SEL_T;
563 /**
564 *@brief GSPI Input clock source selection
565 **/
566
567 typedef enum GSPI_CLK_SRC_SEL {
568 GSPI_M4_SOC_CLK_FOR_OTHER_CLKS, /*!< GSPI_M4_SOC_CLK_FOR_OTHER_CLKS selection*/
569 GSPI_ULP_REF_CLK, /*!< GSPI_ULP_REF_CLK selection*/
570 GSPI_SOC_PLL_CLK, /*!< GSPI_SOC_PLL_CLK selection*/
571 GSPI_MODEM_PLL_CLK2, /*!< GSPI_MODEM_PLL_CLK2 selection*/
572 GSPI_INTF_PLL_CLK, /*!< GSPI_INTF_PLL_CLK selection*/
573 } GSPI_CLK_SRC_SEL_T;
574 /**
575 *@brief MCU_CLKOUT Input clock source selection
576 **/
577
578 typedef enum MCU_CLKOUT_SRC_SEL {
579 MCUCLKOUT_ULP_MHZ_RC_CLK, /*!< MCUCLKOUT_ULP_MHZ_RC_CLK selection*/
580 MCUCLKOUT_RF_REF_CLK, /*!< MCUCLKOUT_RF_REF_CLK selection*/
581 MCUCLKOUT_MEMS_REF_CLK, /*!< MCUCLKOUT_MEMS_REF_CLK selection*/
582 MCUCLKOUT_ULP_20MHZ_RINGOSC_CLK, /*!< MCUCLKOUT_ULP_20MHZ_RINGOSC_CLK selection*/
583 MCUCLKOUT_ULP_DOUBLER_CLK, /*!< MCUCLKOUT_ULP_DOUBLER_CLK selection*/
584 MCUCLKOUT_ULP_32KHZ_RC_CLK, /*!< MCUCLKOUT_ULP_32KHZ_RC_CLK selection*/
585 MCUCLKOUT_ULP_32KHZ_XTAL_CLK, /*!< MCUCLKOUT_ULP_32KHZ_XTAL_CLK selection*/
586 MCUCLKOUT_ULP_32KHZ_RO_CLK, /*!< MCUCLKOUT_ULP_32KHZ_RO_CLK selection*/
587 MCUCLKOUT_INTF_PLL_CLK, /*!< MCUCLKOUT_INTF_PLL_CLK selection*/
588 MCUCLKOUT_MODEM_PLL_CLK1, /*!< MCUCLKOUT_MODEM_PLL_CLK1 selection*/
589 MCUCLKOUT_MODEM_PLL_CLK2, /*!< MCUCLKOUT_MODEM_PLL_CLK2 selection*/
590 MCUCLKOUT_SOC_PLL_CLK, /*!< MCUCLKOUT_SOC_PLL_CLK selection*/
591 MCUCLKOUT_I2S_PLL_CLK, /*!< MCUCLKOUT_I2S_PLL_CLK selection*/
592 MCUCLKOUT_USB_PLL_CLK, /*!< MCUCLKOUT_USB_PLL_CLK selection*/
593 } MCU_CLKOUT_SRC_SEL_T;
594 /**
595 *@brief Ethernet Input clock source selection
596 **/
597 typedef enum ETHERNET_CLK_SRC_SEL {
598 ETH_INTF_PLL_CLK, /*!< ETH_INTF_PLL_CLK selection*/
599 ETH_SOC_PLL_CLK, /*!< ETH_SOC_PLL_CLK selection*/
600 } ETHERNET_CLK_SRC_SEL_T;
601 /**
602 *@brief USB Input clock source selection
603 **/
604 typedef enum USB_CLK_SRC_SEL {
605 USB_MEMS_REF_CLK = 0, /*!< USB_MEMS_REF_CLK selection*/
606 USB_REFERENCE_CLK = 1, /*!< USB_REFERENCE_CLK selection*/
607 USB_PLL_CLK = 2 /*!< USB_PLL_CLK selection*/
608 } USB_CLK_SRC_SEL_T;
609 /**
610 *@brief Sleep Clk Input clock source selection
611 **/
612 typedef enum SLEEP_CLK_SRC_SEL {
613 SLP_ULP_32KHZ_RC_CLK = 0, /*!< SLP_ULP_32KHZ_RC_CLK selection*/
614 SLP_ULP_32KHZ_XTAL_CLK = 1, /*!< SLP_ULP_32KHZ_XTAL_CLK selection*/
615 SLP_CLK_GATED = 2, /*!< Default Sleep Clk Gated*/
616 SLP_ULP_32KHZ_RO_CLK = 3 /*!< SLP_ULP_32KHZ_RO_CLK selection*/
617 } SLEEP_CLK_SRC_SEL_T;
618 /**
619 *@brief CCI Input clock source selection
620 **/
621 typedef enum CCI_CLK_SRC_SEL {
622 CCI_M4_SOC_CLK_FOR_OTHER_CLKS, /*!< CCI_M4_SOC_CLK_FOR_OTHER_CLKS selection*/
623 CCI_INTF_PLL_CLK, /*!< CCI_INTF_PLL_CLK selection*/
624 CCI_M4_SOC_CLK_NO_SWL_SYNC_CLK_TREE /*!< CCI_M4_SOC_CLK_NO_SWL_SYNC_CLK_TREE selection*/
625 } CCI_CLK_SRC_SEL_T;
626 /**
627 *@brief I2S Input clock source selection
628 **/
629 typedef enum I2S_CLK_SRC_SEL {
630 I2S_PLLCLK = 0, /*!< I2S_PLLCLK selection*/
631 I2S_M4SOCCLKFOROTHERS = 1, /*!< I2S_M4SOCCLKFOROTHERS selection*/
632 } I2S_CLK_SRC_SEL_T;
633
634 /**
635 *@brief M4ss Reference Input clock source selection
636 **/
637 typedef enum M4SS_REF_CLK_SEL {
638 ULP_MHZ_RC_BYP_CLK = 1, /*!< ULP_MHZ_RC_BYP_CLK selection*/
639 ULP_MHZ_RC_CLK = 2, /*!< ULP_MHZ_RC_CLK selection*/
640 EXT_40MHZ_CLK = 3, /*!< EXT_40MHZ_CLK selection*/
641 MEMS_REF_CLK = 4, /*!< MEMS_REF_CLK selection*/
642 ULP_20MHZ_RINGOSC_CLK = 5, /*!< ULP_20MHZ_RINGOSC_CLK selection*/
643 ULP_DOUBLER_CLK = 6, /*!< ULP_DOUBLER_CLK selection*/
644 } M4SS_REF_CLK_SEL_T;
645
646 typedef enum CLK_PRESENT {
647 SOC_PLL_CLK_PRESENT, /*!< SOC CLock present */
648 INTF_PLL_CLK_PRESENT, /*!< INTF PLL clock present */
649 I2S_PLL_CLK_PRESENT, /*!< I2S PLL clock present */
650 MODEM_PLL_CLK_PRESENT, /*!< Modem PLL clock present */
651 } CLK_PRESENT_T;
652
_usdelay(uint32_t delayUs,cdDelay delayCb)653 STATIC INLINE void _usdelay(uint32_t delayUs, cdDelay delayCb)
654 {
655 if (delayCb != NULL) {
656 delayCb(delayUs);
657 }
658 }
659
660 rsi_error_t clk_i2s_pll_clk_set(const M4CLK_Type *pCLK);
661
662 boolean_t clk_check_pll_lock(PLL_TYPE_T pllType);
663
664 rsi_error_t clk_soc_pll_clk_enable(boolean_t clkEnable);
665
666 rsi_error_t clk_soc_pll_set_freq_div(const M4CLK_Type *pCLK,
667 boolean_t clk_en,
668 uint16_t divFactor,
669 uint16_t nFactor,
670 uint16_t mFactor,
671 uint16_t fcwF,
672 uint16_t dcoFixSel,
673 uint16_t ldoProg);
674
675 rsi_error_t clk_soc_pll_clk_set(const M4CLK_Type *pCLK);
676
677 rsi_error_t clk_soc_pll_clk_bypass_enable(boolean_t clkEnable);
678
679 rsi_error_t clk_soc_pll_clk_reset(void);
680
681 rsi_error_t clk_soc_pll_pd_enable(boolean_t en);
682
683 rsi_error_t clk_soc_pll_turn_off(void);
684
685 rsi_error_t clk_soc_pll_turn_on(void);
686
687 rsi_error_t clk_i2s_pll_clk_enable(boolean_t clkEnable);
688
689 rsi_error_t clk_i2s_pll_clk_bypass_enable(boolean_t clkEnable);
690
691 rsi_error_t clk_i2s_pll_pd_enable(boolean_t en);
692
693 rsi_error_t clk_i2s_pll_turn_off(void);
694
695 rsi_error_t clk_i2s_pll_turn_on(void);
696
697 rsi_error_t clk_i2s_pll_set_freq_div(const M4CLK_Type *pCLK,
698 uint16_t u16DivFactor1,
699 uint16_t u16DivFactor2,
700 uint16_t nFactor,
701 uint16_t mFactor,
702 uint16_t fcwF);
703
704 rsi_error_t clk_i2s_pll_clk_reset(void);
705
706 rsi_error_t clk_i2s_pll_clk_set(const M4CLK_Type *pCLK);
707
708 rsi_error_t clk_intf_pll_clk_enable(boolean_t clkEnable);
709
710 rsi_error_t clk_intf_pll_pd_enable(boolean_t en);
711
712 rsi_error_t clk_intf_pll_turn_off(void);
713
714 rsi_error_t clk_intf_pll_set_freq_div(const M4CLK_Type *pCLK,
715 boolean_t clk_en,
716 uint16_t divFactor,
717 uint16_t nFactor,
718 uint16_t mFactor,
719 uint16_t fcwF,
720 uint16_t dcoFixSel,
721 uint16_t ldoProg);
722
723 rsi_error_t clk_intf_pll_clk_bypass_enable(boolean_t clkEnable);
724
725 rsi_error_t clk_intf_pll_turn_on(void);
726
727 rsi_error_t clk_intf_pll_clk_reset(void);
728
729 rsi_error_t clk_intf_pll_clk_set(const M4CLK_Type *pCLK);
730
731 rsi_error_t clk_peripheral_clk_enable1(M4CLK_Type *pCLK, uint32_t flags);
732
733 rsi_error_t clk_peripheral_clk_disable1(M4CLK_Type *pCLK, uint32_t flags);
734
735 rsi_error_t clk_peripheral_clk_enable2(M4CLK_Type *pCLK, uint32_t flags);
736
737 rsi_error_t clk_peripheral_clk_disable2(M4CLK_Type *pCLK, uint32_t flags);
738
739 rsi_error_t clk_peripheral_clk_enable3(M4CLK_Type *pCLK, uint32_t flags);
740
741 rsi_error_t clk_peripheral_clk_disable3(M4CLK_Type *pCLK, uint32_t flags);
742
743 rsi_error_t clk_dynamic_clk_gate_disable(M4CLK_Type *pCLK, uint32_t flags);
744
745 rsi_error_t clk_dynamic_clk_gate_disable2(M4CLK_Type *pCLK, uint32_t flags);
746
747 rsi_error_t clk_dynamic_clk_gate_enable(M4CLK_Type *pCLK, uint32_t flags);
748
749 rsi_error_t clk_dynamic_clk_gate_enable2(M4CLK_Type *pCLK, uint32_t flags);
750
751 rsi_error_t clk_qspi_clk_config(M4CLK_Type *pCLK,
752 QSPI_CLK_SRC_SEL_T clkSource,
753 boolean_t swalloEn,
754 boolean_t OddDivEn,
755 uint32_t divFactor);
756 #if defined(SLI_SI917B0) || defined(SLI_SI915)
757 rsi_error_t clk_qspi_2_clk_config(M4CLK_Type *pCLK,
758 QSPI_CLK_SRC_SEL_T clkSource,
759 boolean_t swalloEn,
760 boolean_t OddDivEn,
761 uint32_t divFactor);
762 #endif
763 rsi_error_t clk_usart_clk_config(M4CLK_Type *pCLK,
764 CLK_ENABLE_T clkType,
765 boolean_t FracDivEn,
766 EN_USART_T enUsart,
767 USART_CLK_SRC_SEL_T clkSource,
768 uint32_t divFactor);
769
770 rsi_error_t clk_ssi_mst_clk_config(M4CLK_Type *pCLK,
771 CLK_ENABLE_T clkType,
772 SSI_MST_CLK_SRC_SEL_T clkSource,
773 uint32_t divFactor);
774
775 rsi_error_t clk_sd_mem_clk_config(M4CLK_Type *pCLK,
776 boolean_t swalloEn,
777 SDMEM_CLK_SRC_SEL_T clkSource,
778 uint32_t divFactor);
779
780 rsi_error_t clk_ct_clk_config(M4CLK_Type *pCLK, CT_CLK_SRC_SEL_T clkSource, uint32_t divFactor, CLK_ENABLE_T clkType);
781
782 rsi_error_t clk_cci_clk_config(M4CLK_Type *pCLK, CCI_CLK_SRC_SEL_T clkSource, uint32_t divFactor, CLK_ENABLE_T clkType);
783
784 rsi_error_t clk_i2s_clk_config(M4CLK_Type *pCLK, I2S_CLK_SRC_SEL_T clkSource, uint32_t divFactor);
785
786 rsi_error_t clk_mcu_clk_cut_config(M4CLK_Type *pCLK, MCU_CLKOUT_SRC_SEL_T clkSource, uint32_t divFactor);
787
788 rsi_error_t clk_can_clk_config(M4CLK_Type *pCLK, uint32_t divFactor, CLK_ENABLE_T clkType);
789
790 rsi_error_t clk_ethernet_clk_config(M4CLK_Type *pCLK,
791 boolean_t swalloEn,
792 ETHERNET_CLK_SRC_SEL_T clkSource,
793 uint32_t divFactor);
794
795 rsi_error_t clk_m4_soc_clk_div(M4CLK_Type *pCLK, uint32_t divFactor);
796
797 rsi_error_t clk_qspi_clk_div(M4CLK_Type *pCLK, boolean_t u8SwallowEn, boolean_t u8OddDivEn, uint32_t divFactor);
798
799 rsi_error_t clk_ct_clk_div(M4CLK_Type *pCLK, uint32_t divFactor);
800
801 rsi_error_t clk_ssi_mst_clk_div(M4CLK_Type *pCLK, uint32_t divFactor);
802
803 rsi_error_t clk_cci_clk_div(M4CLK_Type *pCLK, uint32_t divFactor);
804
805 rsi_error_t clk_i2s_clk_div(M4CLK_Type *pCLK, uint32_t divFactor);
806
807 rsi_error_t clk_sd_mem_clk_div(M4CLK_Type *pCLK, boolean_t u8SwallowEn, uint32_t divFactor);
808
809 rsi_error_t clk_usart_clk_div(M4CLK_Type *pCLK, EN_USART_T enUsart, boolean_t u8FracDivEn, uint32_t divFactor);
810
811 rsi_error_t RSI_CLK_CanClkDiv(M4CLK_Type *pCLK, uint16_t divFactor);
812
813 uint32_t clk_slp_clk_calib_config(M4CLK_Type *pCLK, uint8_t clkCycles);
814
815 rsi_error_t clk_gspi_clk_config(M4CLK_Type *pCLK, GSPI_CLK_SRC_SEL_T clkSel);
816
817 rsi_error_t clk_slp_clk_config(M4CLK_Type *pCLK, SLEEP_CLK_SRC_SEL_T clkSrc);
818
819 rsi_error_t clk_i2c_clk_config(M4CLK_Type *pCLK, boolean_t clkEnable, EN_I2C_T enI2C);
820
821 rsi_error_t clk_xtal_clk_config(uint8_t xtalPin);
822
823 rsi_error_t clk_usb_clk_config(M4CLK_Type *pCLK, USB_CLK_SRC_SEL_T clkSource, uint16_t divFactor);
824
825 rsi_error_t clk_peripheral_clk_enable(M4CLK_Type *pCLK, PERIPHERALS_CLK_T module, CLK_ENABLE_T clkType);
826
827 rsi_error_t clk_peripheral_clk_disable(M4CLK_Type *pCLK, PERIPHERALS_CLK_T module);
828
829 rsi_error_t clk_set_soc_pll_freq(const M4CLK_Type *pCLK, uint32_t socPllFreq, uint32_t pllRefClk);
830
831 rsi_error_t clk_set_intf_pll_freq(const M4CLK_Type *pCLK, uint32_t intfPllFreq, uint32_t pllRefClk);
832
833 rsi_error_t ulpss_enable_ref_clks(REF_CLK_ENABLE_T enable, SRC_TYPE_T srcType, cdDelay delayFn);
834
835 rsi_error_t clk_set_i2s_pll_freq(const M4CLK_Type *pCLK, uint32_t i2sPllFreq, uint32_t fXtal);
836
837 static void _usdelay(uint32_t delayUs, cdDelay delayCb);
838
839 rsi_error_t ulpss_disable_ref_clks(REF_CLK_ENABLE_T clk_type);
840
841 void clk_config_pll_lock(boolean_t manual_lock, boolean_t bypass_manual_lock, uint8_t mm_count_limit);
842
843 void clk_config_pll_ref_clk(uint8_t ref_clk_src);
844 rsi_error_t clk_m4_soc_clk_config(M4CLK_Type *pCLK, M4_SOC_CLK_SRC_SEL_T clkSource, uint32_t divFactor);
845 uint32_t RSI_CLK_CheckPresent(const M4CLK_Type *pCLK, CLK_PRESENT_T clkPresent);
846 rsi_error_t clk_m4ss_ref_clk_config(const M4CLK_Type *pCLK, M4SS_REF_CLK_SEL_T clkSource);
847 rsi_error_t ulpss_disable_ref_clks(REF_CLK_ENABLE_T clk_type);
848
849 /*End of file not truncated*/
850
851 #ifdef __cplusplus
852 }
853 #endif
854 #endif // RSI_PLL_H
855