1 /*
2 * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7 // The LL layer for ESP32-H2 PMU register operations
8
9 #pragma once
10
11 #include <stdlib.h>
12 #include <stdbool.h>
13 #include "soc/soc.h"
14 #include "esp_attr.h"
15 #include "hal/assert.h"
16 #include "soc/pmu_struct.h"
17 #include "hal/pmu_types.h"
18 #include "hal/misc.h"
19
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23
24 /**
25 * @brief Set the power domain that needs to be powered down in the digital power
26 *
27 * @param hw Beginning address of the peripheral registers.
28 * @param mode The pmu mode
29 * @param flag Digital power domain flag
30 *
31 * @return None
32 */
pmu_ll_hp_set_dig_power(pmu_dev_t * hw,pmu_hp_mode_t mode,uint32_t flag)33 FORCE_INLINE_ATTR void pmu_ll_hp_set_dig_power(pmu_dev_t *hw, pmu_hp_mode_t mode, uint32_t flag)
34 {
35 hw->hp_sys[mode].dig_power.val = flag;
36 }
37
pmu_ll_hp_set_icg_func(pmu_dev_t * hw,pmu_hp_mode_t mode,uint32_t icg_func)38 FORCE_INLINE_ATTR void pmu_ll_hp_set_icg_func(pmu_dev_t *hw, pmu_hp_mode_t mode, uint32_t icg_func)
39 {
40 hw->hp_sys[mode].icg_func = icg_func;
41 }
42
pmu_ll_hp_set_icg_apb(pmu_dev_t * hw,pmu_hp_mode_t mode,uint32_t bitmap)43 FORCE_INLINE_ATTR void pmu_ll_hp_set_icg_apb(pmu_dev_t *hw, pmu_hp_mode_t mode, uint32_t bitmap)
44 {
45 hw->hp_sys[mode].icg_apb = bitmap;
46 }
47
pmu_ll_hp_set_icg_modem(pmu_dev_t * hw,pmu_hp_mode_t mode,uint32_t code)48 FORCE_INLINE_ATTR void pmu_ll_hp_set_icg_modem(pmu_dev_t *hw, pmu_hp_mode_t mode, uint32_t code)
49 {
50 hw->hp_sys[mode].icg_modem.code = code;
51 }
52
pmu_ll_hp_set_uart_wakeup_enable(pmu_dev_t * hw,pmu_hp_mode_t mode,bool wakeup_en)53 FORCE_INLINE_ATTR void pmu_ll_hp_set_uart_wakeup_enable(pmu_dev_t *hw, pmu_hp_mode_t mode, bool wakeup_en)
54 {
55 hw->hp_sys[mode].syscntl.uart_wakeup_en = wakeup_en;
56 }
57
pmu_ll_hp_set_hold_all_lp_pad(pmu_dev_t * hw,pmu_hp_mode_t mode,bool hold_all)58 FORCE_INLINE_ATTR void pmu_ll_hp_set_hold_all_lp_pad(pmu_dev_t *hw, pmu_hp_mode_t mode, bool hold_all)
59 {
60 hw->hp_sys[mode].syscntl.lp_pad_hold_all = hold_all;
61 }
62
pmu_ll_hp_set_hold_all_hp_pad(pmu_dev_t * hw,pmu_hp_mode_t mode,bool hold_all)63 FORCE_INLINE_ATTR void pmu_ll_hp_set_hold_all_hp_pad(pmu_dev_t *hw, pmu_hp_mode_t mode, bool hold_all)
64 {
65 hw->hp_sys[mode].syscntl.hp_pad_hold_all = hold_all;
66 }
67
pmu_ll_hp_set_dig_pad_slp_sel(pmu_dev_t * hw,pmu_hp_mode_t mode,bool slp_sel)68 FORCE_INLINE_ATTR void pmu_ll_hp_set_dig_pad_slp_sel(pmu_dev_t *hw, pmu_hp_mode_t mode, bool slp_sel)
69 {
70 hw->hp_sys[mode].syscntl.dig_pad_slp_sel = slp_sel;
71 }
72
pmu_ll_hp_set_pause_watchdog(pmu_dev_t * hw,pmu_hp_mode_t mode,bool pause_wdt)73 FORCE_INLINE_ATTR void pmu_ll_hp_set_pause_watchdog(pmu_dev_t *hw, pmu_hp_mode_t mode, bool pause_wdt)
74 {
75 hw->hp_sys[mode].syscntl.dig_pause_wdt = pause_wdt;
76 }
77
pmu_ll_hp_set_cpu_stall(pmu_dev_t * hw,pmu_hp_mode_t mode,bool cpu_stall)78 FORCE_INLINE_ATTR void pmu_ll_hp_set_cpu_stall(pmu_dev_t *hw, pmu_hp_mode_t mode, bool cpu_stall)
79 {
80 hw->hp_sys[mode].syscntl.dig_cpu_stall = cpu_stall;
81 }
82
83 /**
84 * @brief Set the power domain that needs to be powered down in the clock power
85 *
86 * @param hw Beginning address of the peripheral registers.
87 * @param mode The pmu mode
88 * @param flag Clock power domain flag
89 *
90 * @return None
91 */
pmu_ll_hp_set_clk_power(pmu_dev_t * hw,pmu_hp_mode_t mode,uint32_t xpd_flag)92 FORCE_INLINE_ATTR void pmu_ll_hp_set_clk_power(pmu_dev_t *hw, pmu_hp_mode_t mode, uint32_t xpd_flag)
93 {
94 hw->hp_sys[mode].clk_power.val = xpd_flag;
95 }
96
pmu_ll_hp_set_bias_xpd(pmu_dev_t * hw,pmu_hp_mode_t mode,bool xpd_bias)97 FORCE_INLINE_ATTR void pmu_ll_hp_set_bias_xpd(pmu_dev_t *hw, pmu_hp_mode_t mode, bool xpd_bias)
98 {
99 hw->hp_sys[mode].bias.xpd_bias = xpd_bias;
100 }
101
pmu_ll_hp_set_trx_xpd(pmu_dev_t * hw,pmu_hp_mode_t mode,bool xpd_trx)102 FORCE_INLINE_ATTR void pmu_ll_hp_set_trx_xpd(pmu_dev_t *hw, pmu_hp_mode_t mode, bool xpd_trx)
103 {
104 hw->hp_sys[mode].bias.xpd_trx = xpd_trx;
105 }
106
pmu_ll_hp_set_xtal_xpd(pmu_dev_t * hw,pmu_hp_mode_t mode,bool xpd_xtal)107 FORCE_INLINE_ATTR void pmu_ll_hp_set_xtal_xpd(pmu_dev_t *hw, pmu_hp_mode_t mode, bool xpd_xtal)
108 {
109 hw->hp_sys[mode].xtal.xpd_xtal = xpd_xtal;
110 }
111
pmu_ll_hp_set_current_power_off(pmu_dev_t * hw,pmu_hp_mode_t mode,bool off)112 FORCE_INLINE_ATTR void pmu_ll_hp_set_current_power_off(pmu_dev_t *hw, pmu_hp_mode_t mode, bool off)
113 {
114 hw->hp_sys[mode].bias.pd_cur = off;
115 }
116
pmu_ll_hp_set_bias_sleep_enable(pmu_dev_t * hw,pmu_hp_mode_t mode,bool en)117 FORCE_INLINE_ATTR void pmu_ll_hp_set_bias_sleep_enable(pmu_dev_t *hw, pmu_hp_mode_t mode, bool en)
118 {
119 hw->hp_sys[mode].bias.bias_sleep = en;
120 }
121
pmu_ll_hp_set_retention_param(pmu_dev_t * hw,pmu_hp_mode_t mode,uint32_t param)122 FORCE_INLINE_ATTR void pmu_ll_hp_set_retention_param(pmu_dev_t *hw, pmu_hp_mode_t mode, uint32_t param)
123 {
124 hw->hp_sys[mode].backup.val = param;
125 }
126
pmu_ll_hp_set_sleep_to_active_backup_enable(pmu_dev_t * hw)127 FORCE_INLINE_ATTR void pmu_ll_hp_set_sleep_to_active_backup_enable(pmu_dev_t *hw)
128 {
129 hw->hp_sys[PMU_MODE_HP_ACTIVE].backup.hp_sleep2active_backup_en = 1;
130 }
131
pmu_ll_hp_set_sleep_to_active_backup_disable(pmu_dev_t * hw)132 FORCE_INLINE_ATTR void pmu_ll_hp_set_sleep_to_active_backup_disable(pmu_dev_t *hw)
133 {
134 hw->hp_sys[PMU_MODE_HP_ACTIVE].backup.hp_sleep2active_backup_en = 0;
135 }
136
pmu_ll_hp_set_active_to_sleep_backup_enable(pmu_dev_t * hw)137 FORCE_INLINE_ATTR void pmu_ll_hp_set_active_to_sleep_backup_enable(pmu_dev_t *hw)
138 {
139 hw->hp_sys[PMU_MODE_HP_SLEEP].backup.hp_active2sleep_backup_en = 1;
140 }
141
pmu_ll_hp_set_active_to_sleep_backup_disable(pmu_dev_t * hw)142 FORCE_INLINE_ATTR void pmu_ll_hp_set_active_to_sleep_backup_disable(pmu_dev_t *hw)
143 {
144 hw->hp_sys[PMU_MODE_HP_SLEEP].backup.hp_active2sleep_backup_en = 0;
145 }
146
pmu_ll_hp_set_backup_icg_func(pmu_dev_t * hw,pmu_hp_mode_t mode,uint32_t icg_func)147 FORCE_INLINE_ATTR void pmu_ll_hp_set_backup_icg_func(pmu_dev_t *hw, pmu_hp_mode_t mode, uint32_t icg_func)
148 {
149 hw->hp_sys[mode].backup_clk = icg_func;
150 }
151
pmu_ll_hp_set_sysclk_nodiv(pmu_dev_t * hw,pmu_hp_mode_t mode,bool sysclk_nodiv)152 FORCE_INLINE_ATTR void pmu_ll_hp_set_sysclk_nodiv(pmu_dev_t *hw, pmu_hp_mode_t mode, bool sysclk_nodiv)
153 {
154 hw->hp_sys[mode].sysclk.dig_sysclk_nodiv = sysclk_nodiv;
155 }
156
pmu_ll_hp_set_icg_sysclk_enable(pmu_dev_t * hw,pmu_hp_mode_t mode,bool icg_sysclk_en)157 FORCE_INLINE_ATTR void pmu_ll_hp_set_icg_sysclk_enable(pmu_dev_t *hw, pmu_hp_mode_t mode, bool icg_sysclk_en)
158 {
159 hw->hp_sys[mode].sysclk.icg_sysclk_en = icg_sysclk_en;
160 }
161
pmu_ll_hp_set_sysclk_slp_sel(pmu_dev_t * hw,pmu_hp_mode_t mode,bool slp_sel)162 FORCE_INLINE_ATTR void pmu_ll_hp_set_sysclk_slp_sel(pmu_dev_t *hw, pmu_hp_mode_t mode, bool slp_sel)
163 {
164 hw->hp_sys[mode].sysclk.sysclk_slp_sel = slp_sel;
165 }
166
pmu_ll_hp_set_icg_sysclk_slp_sel(pmu_dev_t * hw,pmu_hp_mode_t mode,bool slp_sel)167 FORCE_INLINE_ATTR void pmu_ll_hp_set_icg_sysclk_slp_sel(pmu_dev_t *hw, pmu_hp_mode_t mode, bool slp_sel)
168 {
169 hw->hp_sys[mode].sysclk.icg_slp_sel = slp_sel;
170 }
171
pmu_ll_hp_set_dig_sysclk(pmu_dev_t * hw,pmu_hp_mode_t mode,uint32_t sysclk_sel)172 FORCE_INLINE_ATTR void pmu_ll_hp_set_dig_sysclk(pmu_dev_t *hw, pmu_hp_mode_t mode, uint32_t sysclk_sel)
173 {
174 hw->hp_sys[mode].sysclk.dig_sysclk_sel = sysclk_sel;
175 }
176
pmu_ll_hp_set_regulator_sleep_logic_xpd(pmu_dev_t * hw,pmu_hp_mode_t mode,bool slp_xpd)177 FORCE_INLINE_ATTR void pmu_ll_hp_set_regulator_sleep_logic_xpd(pmu_dev_t *hw, pmu_hp_mode_t mode, bool slp_xpd)
178 {
179 hw->hp_sys[mode].regulator0.slp_logic_xpd = slp_xpd;
180 }
181
pmu_ll_hp_set_regulator_sleep_memory_xpd(pmu_dev_t * hw,pmu_hp_mode_t mode,bool slp_xpd)182 FORCE_INLINE_ATTR void pmu_ll_hp_set_regulator_sleep_memory_xpd(pmu_dev_t *hw, pmu_hp_mode_t mode, bool slp_xpd)
183 {
184 hw->hp_sys[mode].regulator0.slp_mem_xpd = slp_xpd;
185 }
186
pmu_ll_hp_set_regulator_xpd(pmu_dev_t * hw,pmu_hp_mode_t mode,bool xpd)187 FORCE_INLINE_ATTR void pmu_ll_hp_set_regulator_xpd(pmu_dev_t *hw, pmu_hp_mode_t mode, bool xpd)
188 {
189 hw->hp_sys[mode].regulator0.xpd = xpd;
190 }
191
pmu_ll_hp_set_regulator_sleep_logic_dbias(pmu_dev_t * hw,pmu_hp_mode_t mode,uint32_t slp_dbias)192 FORCE_INLINE_ATTR void pmu_ll_hp_set_regulator_sleep_logic_dbias(pmu_dev_t *hw, pmu_hp_mode_t mode, uint32_t slp_dbias)
193 {
194 hw->hp_sys[mode].regulator0.slp_logic_dbias = slp_dbias;
195 }
196
pmu_ll_hp_set_regulator_sleep_memory_dbias(pmu_dev_t * hw,pmu_hp_mode_t mode,uint32_t slp_dbias)197 FORCE_INLINE_ATTR void pmu_ll_hp_set_regulator_sleep_memory_dbias(pmu_dev_t *hw, pmu_hp_mode_t mode, uint32_t slp_dbias)
198 {
199 hw->hp_sys[mode].regulator0.slp_mem_dbias = slp_dbias;
200 }
201
pmu_ll_hp_set_regulator_dbias(pmu_dev_t * hw,pmu_hp_mode_t mode,uint32_t dbias)202 FORCE_INLINE_ATTR void pmu_ll_hp_set_regulator_dbias(pmu_dev_t *hw, pmu_hp_mode_t mode, uint32_t dbias)
203 {
204 hw->hp_sys[mode].regulator0.dbias = dbias;
205 }
206
pmu_ll_hp_set_regulator_driver_bar(pmu_dev_t * hw,pmu_hp_mode_t mode,uint32_t drv_b)207 FORCE_INLINE_ATTR void pmu_ll_hp_set_regulator_driver_bar(pmu_dev_t *hw, pmu_hp_mode_t mode, uint32_t drv_b)
208 {
209 hw->hp_sys[mode].regulator1.drv_b = drv_b;
210 }
211
pmu_ll_lp_set_regulator_slp_xpd(pmu_dev_t * hw,pmu_lp_mode_t mode,bool slp_xpd)212 FORCE_INLINE_ATTR void pmu_ll_lp_set_regulator_slp_xpd(pmu_dev_t *hw, pmu_lp_mode_t mode, bool slp_xpd)
213 {
214 hw->lp_sys[mode].regulator0.slp_xpd = slp_xpd;
215 }
216
pmu_ll_lp_set_regulator_xpd(pmu_dev_t * hw,pmu_lp_mode_t mode,bool xpd)217 FORCE_INLINE_ATTR void pmu_ll_lp_set_regulator_xpd(pmu_dev_t *hw, pmu_lp_mode_t mode, bool xpd)
218 {
219 hw->lp_sys[mode].regulator0.xpd = xpd;
220 }
221
pmu_ll_lp_set_regulator_sleep_dbias(pmu_dev_t * hw,pmu_lp_mode_t mode,uint32_t slp_dbias)222 FORCE_INLINE_ATTR void pmu_ll_lp_set_regulator_sleep_dbias(pmu_dev_t *hw, pmu_lp_mode_t mode, uint32_t slp_dbias)
223 {
224 hw->lp_sys[mode].regulator0.slp_dbias = slp_dbias;
225 }
226
pmu_ll_lp_set_regulator_dbias(pmu_dev_t * hw,pmu_lp_mode_t mode,uint32_t dbias)227 FORCE_INLINE_ATTR void pmu_ll_lp_set_regulator_dbias(pmu_dev_t *hw, pmu_lp_mode_t mode, uint32_t dbias)
228 {
229 hw->lp_sys[mode].regulator0.dbias = dbias;
230 }
231
pmu_ll_lp_set_regulator_driver_bar(pmu_dev_t * hw,pmu_lp_mode_t mode,uint32_t drv_b)232 FORCE_INLINE_ATTR void pmu_ll_lp_set_regulator_driver_bar(pmu_dev_t *hw, pmu_lp_mode_t mode, uint32_t drv_b)
233 {
234 hw->lp_sys[mode].regulator1.drv_b = drv_b;
235 }
236
pmu_ll_lp_set_xtal_xpd(pmu_dev_t * hw,pmu_lp_mode_t mode,bool slp_xpd)237 FORCE_INLINE_ATTR void pmu_ll_lp_set_xtal_xpd(pmu_dev_t *hw, pmu_lp_mode_t mode, bool slp_xpd)
238 {
239 HAL_ASSERT(mode == PMU_MODE_LP_SLEEP);
240 hw->lp_sys[mode].xtal.xpd_xtal = slp_xpd;
241 }
242
pmu_ll_lp_set_dig_power(pmu_dev_t * hw,pmu_lp_mode_t mode,uint32_t flag)243 FORCE_INLINE_ATTR void pmu_ll_lp_set_dig_power(pmu_dev_t *hw, pmu_lp_mode_t mode, uint32_t flag)
244 {
245 hw->lp_sys[mode].dig_power.val = flag;
246 }
247
pmu_ll_lp_set_clk_power(pmu_dev_t * hw,pmu_lp_mode_t mode,uint32_t xpd_flag)248 FORCE_INLINE_ATTR void pmu_ll_lp_set_clk_power(pmu_dev_t *hw, pmu_lp_mode_t mode, uint32_t xpd_flag)
249 {
250 hw->lp_sys[mode].clk_power.val = xpd_flag;
251 }
252
pmu_ll_lp_get_clk_power(pmu_dev_t * hw,pmu_lp_mode_t mode)253 FORCE_INLINE_ATTR uint32_t pmu_ll_lp_get_clk_power(pmu_dev_t *hw, pmu_lp_mode_t mode)
254 {
255 return hw->lp_sys[mode].clk_power.val;
256 }
257
pmu_ll_lp_set_bias_xpd(pmu_dev_t * hw,pmu_lp_mode_t mode,bool xpd_bias)258 FORCE_INLINE_ATTR void pmu_ll_lp_set_bias_xpd(pmu_dev_t *hw, pmu_lp_mode_t mode, bool xpd_bias)
259 {
260 HAL_ASSERT(mode == PMU_MODE_LP_SLEEP);
261 hw->lp_sys[mode].bias.xpd_bias = xpd_bias;
262 }
263
pmu_ll_lp_set_current_power_off(pmu_dev_t * hw,pmu_lp_mode_t mode,bool off)264 FORCE_INLINE_ATTR void pmu_ll_lp_set_current_power_off(pmu_dev_t *hw, pmu_lp_mode_t mode, bool off)
265 {
266 HAL_ASSERT(mode == PMU_MODE_LP_SLEEP);
267 hw->lp_sys[mode].bias.pd_cur = off;
268 }
269
pmu_ll_lp_set_bias_sleep_enable(pmu_dev_t * hw,pmu_lp_mode_t mode,bool en)270 FORCE_INLINE_ATTR void pmu_ll_lp_set_bias_sleep_enable(pmu_dev_t *hw, pmu_lp_mode_t mode, bool en)
271 {
272 HAL_ASSERT(mode == PMU_MODE_LP_SLEEP);
273 hw->lp_sys[mode].bias.bias_sleep = en;
274 }
275
pmu_ll_imm_set_clk_power(pmu_dev_t * hw,uint32_t flag)276 FORCE_INLINE_ATTR void pmu_ll_imm_set_clk_power(pmu_dev_t *hw, uint32_t flag)
277 {
278 hw->imm.clk_power.val = flag;
279 }
280
pmu_ll_imm_set_icg_slp_sel(pmu_dev_t * hw,bool slp_sel)281 FORCE_INLINE_ATTR void pmu_ll_imm_set_icg_slp_sel(pmu_dev_t *hw, bool slp_sel)
282 {
283 if (slp_sel) {
284 hw->imm.sleep_sysclk.tie_high_icg_slp_sel = 1;
285 } else {
286 hw->imm.sleep_sysclk.tie_low_icg_slp_sel = 1;
287 }
288 }
289
pmu_ll_imm_update_dig_sysclk_sel(pmu_dev_t * hw,bool update)290 FORCE_INLINE_ATTR void pmu_ll_imm_update_dig_sysclk_sel(pmu_dev_t *hw, bool update)
291 {
292 hw->imm.sleep_sysclk.update_dig_sysclk_sel = update;
293 }
294
pmu_ll_imm_update_dig_icg_switch(pmu_dev_t * hw,bool update)295 FORCE_INLINE_ATTR void pmu_ll_imm_update_dig_icg_switch(pmu_dev_t *hw, bool update)
296 {
297 hw->imm.sleep_sysclk.update_dig_icg_switch = update;
298 }
299
pmu_ll_imm_update_dig_icg_func(pmu_dev_t * hw,bool icg_func_update)300 FORCE_INLINE_ATTR void pmu_ll_imm_update_dig_icg_func(pmu_dev_t *hw, bool icg_func_update)
301 {
302 hw->imm.hp_func_icg.update_dig_icg_func_en = icg_func_update;
303 }
304
pmu_ll_imm_update_dig_icg_apb(pmu_dev_t * hw,bool icg_apb_update)305 FORCE_INLINE_ATTR void pmu_ll_imm_update_dig_icg_apb(pmu_dev_t *hw, bool icg_apb_update)
306 {
307 hw->imm.hp_apb_icg.update_dig_icg_apb_en = icg_apb_update;
308 }
309
pmu_ll_imm_update_dig_icg_modem_code(pmu_dev_t * hw,bool icg_modem_update)310 FORCE_INLINE_ATTR void pmu_ll_imm_update_dig_icg_modem_code(pmu_dev_t *hw, bool icg_modem_update)
311 {
312 hw->imm.modem_icg.update_dig_icg_modem_en = icg_modem_update;
313 }
314
pmu_ll_imm_set_lp_rootclk_sel(pmu_dev_t * hw,bool rootclk_sel)315 FORCE_INLINE_ATTR void pmu_ll_imm_set_lp_rootclk_sel(pmu_dev_t *hw, bool rootclk_sel)
316 {
317 if (rootclk_sel) {
318 hw->imm.lp_icg.tie_high_lp_rootclk_sel = 1;
319 } else {
320 hw->imm.lp_icg.tie_low_lp_rootclk_sel = 1;
321 }
322 }
323
pmu_ll_imm_set_hp_pad_hold_all(pmu_dev_t * hw,bool hold_all)324 FORCE_INLINE_ATTR void pmu_ll_imm_set_hp_pad_hold_all(pmu_dev_t *hw, bool hold_all)
325 {
326 if (hold_all) {
327 hw->imm.pad_hold_all.tie_high_hp_pad_hold_all = 1;
328 } else {
329 hw->imm.pad_hold_all.tie_low_hp_pad_hold_all = 1;
330 }
331 }
332
pmu_ll_imm_set_lp_pad_hold_all(pmu_dev_t * hw,bool hold_all)333 FORCE_INLINE_ATTR void pmu_ll_imm_set_lp_pad_hold_all(pmu_dev_t *hw, bool hold_all)
334 {
335 if (hold_all) {
336 hw->imm.pad_hold_all.tie_high_lp_pad_hold_all = 1;
337 } else {
338 hw->imm.pad_hold_all.tie_low_lp_pad_hold_all = 1;
339 }
340 }
341
pmu_ll_hp_set_power_force_reset(pmu_dev_t * hw,pmu_hp_power_domain_t domain,bool rst)342 FORCE_INLINE_ATTR void pmu_ll_hp_set_power_force_reset(pmu_dev_t *hw, pmu_hp_power_domain_t domain, bool rst)
343 {
344 hw->power.hp_pd[domain].force_reset = rst;
345 }
346
pmu_ll_hp_set_power_force_isolate(pmu_dev_t * hw,pmu_hp_power_domain_t domain,bool iso)347 FORCE_INLINE_ATTR void pmu_ll_hp_set_power_force_isolate(pmu_dev_t *hw, pmu_hp_power_domain_t domain, bool iso)
348 {
349 hw->power.hp_pd[domain].force_iso = iso;
350 }
351
pmu_ll_hp_set_power_force_power_up(pmu_dev_t * hw,pmu_hp_power_domain_t domain,bool fpu)352 FORCE_INLINE_ATTR void pmu_ll_hp_set_power_force_power_up(pmu_dev_t *hw, pmu_hp_power_domain_t domain, bool fpu)
353 {
354 hw->power.hp_pd[domain].force_pu = fpu;
355 }
356
pmu_ll_hp_set_power_force_no_reset(pmu_dev_t * hw,pmu_hp_power_domain_t domain,bool no_rst)357 FORCE_INLINE_ATTR void pmu_ll_hp_set_power_force_no_reset(pmu_dev_t *hw, pmu_hp_power_domain_t domain, bool no_rst)
358 {
359 hw->power.hp_pd[domain].force_no_reset = no_rst;
360 }
361
pmu_ll_hp_set_power_force_no_isolate(pmu_dev_t * hw,pmu_hp_power_domain_t domain,bool no_iso)362 FORCE_INLINE_ATTR void pmu_ll_hp_set_power_force_no_isolate(pmu_dev_t *hw, pmu_hp_power_domain_t domain, bool no_iso)
363 {
364 hw->power.hp_pd[domain].force_no_iso = no_iso;
365 }
366
pmu_ll_hp_set_power_force_power_down(pmu_dev_t * hw,pmu_hp_power_domain_t domain,bool fpd)367 FORCE_INLINE_ATTR void pmu_ll_hp_set_power_force_power_down(pmu_dev_t *hw, pmu_hp_power_domain_t domain, bool fpd)
368 {
369 hw->power.hp_pd[domain].force_pd = fpd;
370 }
371
pmu_ll_lp_set_power_force_reset(pmu_dev_t * hw,bool rst)372 FORCE_INLINE_ATTR void pmu_ll_lp_set_power_force_reset(pmu_dev_t *hw, bool rst)
373 {
374 hw->power.lp_peri.force_reset = rst;
375 }
376
pmu_ll_lp_set_power_force_isolate(pmu_dev_t * hw,bool iso)377 FORCE_INLINE_ATTR void pmu_ll_lp_set_power_force_isolate(pmu_dev_t *hw, bool iso)
378 {
379 hw->power.lp_peri.force_iso = iso;
380 }
381
pmu_ll_lp_set_power_force_power_up(pmu_dev_t * hw,bool fpu)382 FORCE_INLINE_ATTR void pmu_ll_lp_set_power_force_power_up(pmu_dev_t *hw, bool fpu)
383 {
384 hw->power.lp_peri.force_pu = fpu;
385 }
386
pmu_ll_lp_set_power_force_no_reset(pmu_dev_t * hw,bool no_rst)387 FORCE_INLINE_ATTR void pmu_ll_lp_set_power_force_no_reset(pmu_dev_t *hw, bool no_rst)
388 {
389 hw->power.lp_peri.force_no_reset = no_rst;
390 }
391
pmu_ll_lp_set_power_force_no_isolate(pmu_dev_t * hw,bool no_iso)392 FORCE_INLINE_ATTR void pmu_ll_lp_set_power_force_no_isolate(pmu_dev_t *hw, bool no_iso)
393 {
394 hw->power.lp_peri.force_no_iso = no_iso;
395 }
396
pmu_ll_lp_set_power_force_power_down(pmu_dev_t * hw,bool fpd)397 FORCE_INLINE_ATTR void pmu_ll_lp_set_power_force_power_down(pmu_dev_t *hw, bool fpd)
398 {
399 hw->power.lp_peri.force_pd = fpd;
400 }
401
pmu_ll_hp_set_memory_isolate(pmu_dev_t * hw,uint32_t iso)402 FORCE_INLINE_ATTR void pmu_ll_hp_set_memory_isolate(pmu_dev_t *hw, uint32_t iso)
403 {
404 hw->power.mem_cntl.force_hp_mem_iso = iso;
405 }
406
pmu_ll_hp_set_memory_power_down(pmu_dev_t * hw,uint32_t fpd)407 FORCE_INLINE_ATTR void pmu_ll_hp_set_memory_power_down(pmu_dev_t *hw, uint32_t fpd)
408 {
409 hw->power.mem_cntl.force_hp_mem_pd = fpd;
410 }
411
pmu_ll_hp_set_memory_no_isolate(pmu_dev_t * hw,uint32_t no_iso)412 FORCE_INLINE_ATTR void pmu_ll_hp_set_memory_no_isolate(pmu_dev_t *hw, uint32_t no_iso)
413 {
414 hw->power.mem_cntl.force_hp_mem_no_iso = no_iso;
415 }
416
pmu_ll_hp_set_memory_power_up(pmu_dev_t * hw,uint32_t fpu)417 FORCE_INLINE_ATTR void pmu_ll_hp_set_memory_power_up(pmu_dev_t *hw, uint32_t fpu)
418 {
419 hw->power.mem_cntl.force_hp_mem_pu = fpu;
420 }
421
pmu_ll_hp_set_sleep_enable(pmu_dev_t * hw)422 FORCE_INLINE_ATTR void pmu_ll_hp_set_sleep_enable(pmu_dev_t *hw)
423 {
424 hw->wakeup.cntl0.sleep_req = 1;
425 }
426
pmu_ll_hp_set_reject_enable(pmu_dev_t * hw,uint32_t reject)427 FORCE_INLINE_ATTR void pmu_ll_hp_set_reject_enable(pmu_dev_t *hw, uint32_t reject)
428 {
429 hw->wakeup.cntl1.sleep_reject_ena = reject;
430 hw->wakeup.cntl1.slp_reject_en = 1;
431 }
432
pmu_ll_hp_set_reject_disable(pmu_dev_t * hw)433 FORCE_INLINE_ATTR void pmu_ll_hp_set_reject_disable(pmu_dev_t *hw)
434 {
435 hw->wakeup.cntl1.slp_reject_en = 0;
436 }
437
pmu_ll_hp_set_wakeup_enable(pmu_dev_t * hw,uint32_t wakeup)438 FORCE_INLINE_ATTR void pmu_ll_hp_set_wakeup_enable(pmu_dev_t *hw, uint32_t wakeup)
439 {
440 hw->wakeup.cntl2 = wakeup;
441 }
442
pmu_ll_hp_set_sleep_protect_mode(pmu_dev_t * hw,int mode)443 FORCE_INLINE_ATTR void pmu_ll_hp_set_sleep_protect_mode(pmu_dev_t *hw, int mode)
444 {
445 hw->wakeup.cntl3.sleep_prt_sel = mode;
446 }
447
pmu_ll_hp_set_min_sleep_cycle(pmu_dev_t * hw,uint32_t cycle)448 FORCE_INLINE_ATTR void pmu_ll_hp_set_min_sleep_cycle(pmu_dev_t *hw, uint32_t cycle)
449 {
450 HAL_FORCE_MODIFY_U32_REG_FIELD(hw->wakeup.cntl3, hp_min_slp_val, cycle);
451 }
452
pmu_ll_hp_clear_reject_cause(pmu_dev_t * hw)453 FORCE_INLINE_ATTR void pmu_ll_hp_clear_reject_cause(pmu_dev_t *hw)
454 {
455 hw->wakeup.cntl4.slp_reject_cause_clr = 1;
456 }
457
pmu_ll_hp_is_sleep_wakeup(pmu_dev_t * hw)458 FORCE_INLINE_ATTR bool pmu_ll_hp_is_sleep_wakeup(pmu_dev_t *hw)
459 {
460 return (hw->hp_ext.int_raw.wakeup == 1);
461 }
462
pmu_ll_hp_is_sleep_reject(pmu_dev_t * hw)463 FORCE_INLINE_ATTR bool pmu_ll_hp_is_sleep_reject(pmu_dev_t *hw)
464 {
465 return (hw->hp_ext.int_raw.reject == 1);
466 }
467
pmu_ll_hp_clear_wakeup_intr_status(pmu_dev_t * hw)468 FORCE_INLINE_ATTR void pmu_ll_hp_clear_wakeup_intr_status(pmu_dev_t *hw)
469 {
470 hw->hp_ext.int_clr.wakeup = 1;
471 }
472
pmu_ll_hp_clear_reject_intr_status(pmu_dev_t * hw)473 FORCE_INLINE_ATTR void pmu_ll_hp_clear_reject_intr_status(pmu_dev_t *hw)
474 {
475 hw->hp_ext.int_clr.reject = 1;
476 }
477
pmu_ll_hp_get_wakeup_cause(pmu_dev_t * hw)478 FORCE_INLINE_ATTR uint32_t pmu_ll_hp_get_wakeup_cause(pmu_dev_t *hw)
479 {
480 return hw->wakeup.status0;
481 }
482
pmu_ll_hp_get_reject_cause(pmu_dev_t * hw)483 FORCE_INLINE_ATTR uint32_t pmu_ll_hp_get_reject_cause(pmu_dev_t *hw)
484 {
485 return hw->wakeup.status1;
486 }
487
pmu_ll_lp_set_min_sleep_cycle(pmu_dev_t * hw,uint32_t slow_clk_cycle)488 FORCE_INLINE_ATTR void pmu_ll_lp_set_min_sleep_cycle(pmu_dev_t *hw, uint32_t slow_clk_cycle)
489 {
490 HAL_FORCE_MODIFY_U32_REG_FIELD(hw->wakeup.cntl3, lp_min_slp_val, slow_clk_cycle);
491 }
492
pmu_ll_hp_set_modify_icg_cntl_wait_cycle(pmu_dev_t * hw,uint32_t cycle)493 FORCE_INLINE_ATTR void pmu_ll_hp_set_modify_icg_cntl_wait_cycle(pmu_dev_t *hw, uint32_t cycle)
494 {
495 HAL_FORCE_MODIFY_U32_REG_FIELD(hw->hp_ext.clk_cntl, modify_icg_cntl_wait, cycle);
496 }
497
pmu_ll_hp_get_modify_icg_cntl_wait_cycle(pmu_dev_t * hw)498 FORCE_INLINE_ATTR uint32_t pmu_ll_hp_get_modify_icg_cntl_wait_cycle(pmu_dev_t *hw)
499 {
500 return HAL_FORCE_READ_U32_REG_FIELD(hw->hp_ext.clk_cntl, modify_icg_cntl_wait);
501 }
502
pmu_ll_hp_set_switch_icg_cntl_wait_cycle(pmu_dev_t * hw,uint32_t cycle)503 FORCE_INLINE_ATTR void pmu_ll_hp_set_switch_icg_cntl_wait_cycle(pmu_dev_t *hw, uint32_t cycle)
504 {
505 HAL_FORCE_MODIFY_U32_REG_FIELD(hw->hp_ext.clk_cntl, switch_icg_cntl_wait, cycle);
506 }
507
pmu_ll_hp_get_switch_icg_cntl_wait_cycle(pmu_dev_t * hw)508 FORCE_INLINE_ATTR uint32_t pmu_ll_hp_get_switch_icg_cntl_wait_cycle(pmu_dev_t *hw)
509 {
510 return HAL_FORCE_READ_U32_REG_FIELD(hw->hp_ext.clk_cntl, switch_icg_cntl_wait);
511 }
512
pmu_ll_hp_set_digital_power_down_wait_cycle(pmu_dev_t * hw,uint32_t cycle)513 FORCE_INLINE_ATTR void pmu_ll_hp_set_digital_power_down_wait_cycle(pmu_dev_t *hw, uint32_t cycle)
514 {
515 hw->power.wait_timer0.powerdown_timer = cycle;
516 }
517
pmu_ll_hp_get_digital_power_down_wait_cycle(pmu_dev_t * hw)518 FORCE_INLINE_ATTR uint32_t pmu_ll_hp_get_digital_power_down_wait_cycle(pmu_dev_t *hw)
519 {
520 return hw->power.wait_timer0.powerdown_timer;
521 }
522
pmu_ll_lp_set_digital_power_down_wait_cycle(pmu_dev_t * hw,uint32_t cycle)523 FORCE_INLINE_ATTR void pmu_ll_lp_set_digital_power_down_wait_cycle(pmu_dev_t *hw, uint32_t cycle)
524 {
525 hw->power.wait_timer1.powerdown_timer = cycle;
526 }
527
pmu_ll_lp_get_digital_power_down_wait_cycle(pmu_dev_t * hw)528 FORCE_INLINE_ATTR uint32_t pmu_ll_lp_get_digital_power_down_wait_cycle(pmu_dev_t *hw)
529 {
530 return hw->power.wait_timer1.powerdown_timer;
531 }
532
pmu_ll_lp_set_analog_wait_target_cycle(pmu_dev_t * hw,uint32_t slow_clk_cycle)533 FORCE_INLINE_ATTR void pmu_ll_lp_set_analog_wait_target_cycle(pmu_dev_t *hw, uint32_t slow_clk_cycle)
534 {
535 HAL_FORCE_MODIFY_U32_REG_FIELD(hw->wakeup.cntl5, lp_ana_wait_target, slow_clk_cycle);
536 }
537
pmu_ll_lp_get_analog_wait_target_cycle(pmu_dev_t * hw)538 FORCE_INLINE_ATTR uint32_t pmu_ll_lp_get_analog_wait_target_cycle(pmu_dev_t *hw)
539 {
540 return HAL_FORCE_READ_U32_REG_FIELD(hw->wakeup.cntl5, lp_ana_wait_target);
541 }
542
pmu_ll_set_xtal_stable_wait_cycle(pmu_dev_t * hw,uint32_t cycle)543 FORCE_INLINE_ATTR void pmu_ll_set_xtal_stable_wait_cycle(pmu_dev_t *hw, uint32_t cycle)
544 {
545 HAL_FORCE_MODIFY_U32_REG_FIELD(hw->power.clk_wait, wait_xtal_stable, cycle);
546 }
547
pmu_ll_get_xtal_stable_wait_cycle(pmu_dev_t * hw)548 FORCE_INLINE_ATTR uint32_t pmu_ll_get_xtal_stable_wait_cycle(pmu_dev_t *hw)
549 {
550 return HAL_FORCE_READ_U32_REG_FIELD(hw->power.clk_wait, wait_xtal_stable);
551 }
552
pmu_ll_set_pll_stable_wait_cycle(pmu_dev_t * hw,uint32_t cycle)553 FORCE_INLINE_ATTR void pmu_ll_set_pll_stable_wait_cycle(pmu_dev_t *hw, uint32_t cycle)
554 {
555 HAL_FORCE_MODIFY_U32_REG_FIELD(hw->power.clk_wait, wait_pll_stable, cycle);
556 }
557
pmu_ll_get_pll_stable_wait_cycle(pmu_dev_t * hw)558 FORCE_INLINE_ATTR uint32_t pmu_ll_get_pll_stable_wait_cycle(pmu_dev_t *hw)
559 {
560 return HAL_FORCE_READ_U32_REG_FIELD(hw->power.clk_wait, wait_pll_stable);
561 }
562
pmu_ll_lp_set_digital_power_supply_wait_cycle(pmu_dev_t * hw,uint32_t cycle)563 FORCE_INLINE_ATTR void pmu_ll_lp_set_digital_power_supply_wait_cycle(pmu_dev_t *hw, uint32_t cycle)
564 {
565 hw->power.wait_timer1.wait_timer = cycle;
566 }
567
pmu_ll_lp_get_digital_power_supply_wait_cycle(pmu_dev_t * hw)568 FORCE_INLINE_ATTR uint32_t pmu_ll_lp_get_digital_power_supply_wait_cycle(pmu_dev_t *hw)
569 {
570 return hw->power.wait_timer1.wait_timer;
571 }
572
pmu_ll_lp_set_digital_power_up_wait_cycle(pmu_dev_t * hw,uint32_t cycle)573 FORCE_INLINE_ATTR void pmu_ll_lp_set_digital_power_up_wait_cycle(pmu_dev_t *hw, uint32_t cycle)
574 {
575 hw->power.wait_timer1.powerup_timer = cycle;
576 }
577
pmu_ll_lp_get_digital_power_up_wait_cycle(pmu_dev_t * hw)578 FORCE_INLINE_ATTR uint32_t pmu_ll_lp_get_digital_power_up_wait_cycle(pmu_dev_t *hw)
579 {
580 return hw->power.wait_timer1.powerup_timer;
581 }
582
pmu_ll_hp_set_analog_wait_target_cycle(pmu_dev_t * hw,uint32_t cycle)583 FORCE_INLINE_ATTR void pmu_ll_hp_set_analog_wait_target_cycle(pmu_dev_t *hw, uint32_t cycle)
584 {
585 HAL_FORCE_MODIFY_U32_REG_FIELD(hw->wakeup.cntl7, ana_wait_target, cycle);
586 }
587
pmu_ll_hp_get_analog_wait_target_cycle(pmu_dev_t * hw)588 FORCE_INLINE_ATTR uint32_t pmu_ll_hp_get_analog_wait_target_cycle(pmu_dev_t *hw)
589 {
590 return HAL_FORCE_READ_U32_REG_FIELD(hw->wakeup.cntl7, ana_wait_target);
591 }
592
pmu_ll_hp_set_digital_power_supply_wait_cycle(pmu_dev_t * hw,uint32_t cycle)593 FORCE_INLINE_ATTR void pmu_ll_hp_set_digital_power_supply_wait_cycle(pmu_dev_t *hw, uint32_t cycle)
594 {
595 hw->power.wait_timer0.wait_timer = cycle;
596 }
597
pmu_ll_hp_get_digital_power_supply_wait_cycle(pmu_dev_t * hw)598 FORCE_INLINE_ATTR uint32_t pmu_ll_hp_get_digital_power_supply_wait_cycle(pmu_dev_t *hw)
599 {
600 return hw->power.wait_timer0.wait_timer;
601 }
602
pmu_ll_hp_set_digital_power_up_wait_cycle(pmu_dev_t * hw,uint32_t cycle)603 FORCE_INLINE_ATTR void pmu_ll_hp_set_digital_power_up_wait_cycle(pmu_dev_t *hw, uint32_t cycle)
604 {
605 hw->power.wait_timer0.powerup_timer = cycle;
606 }
607
pmu_ll_hp_get_digital_power_up_wait_cycle(pmu_dev_t * hw)608 FORCE_INLINE_ATTR uint32_t pmu_ll_hp_get_digital_power_up_wait_cycle(pmu_dev_t *hw)
609 {
610 return hw->power.wait_timer0.powerup_timer;
611 }
612
613 #ifdef __cplusplus
614 }
615 #endif
616