19#if CONFIG_E3 || CONFIG_D3
20#define SDRV_SMC_ASYNC_INT_USB (236 + 16)
21#define SDRV_SMC_ASYNC_INT_IOC (237 + 16)
22#define SDRV_SMC_ASYNC_INT_VIC1_SF_GPIO (238 + 16)
23#define SDRV_SMC_ASYNC_INT_VIC1_AP_GPIO (239 + 16)
24#define SDRV_SMC_ASYNC_INT_VIC2A_SF_GPIO (240 + 16)
25#define SDRV_SMC_ASYNC_INT_VIC2A_AP_GPIO (241 + 16)
26#define SDRV_SMC_ASYNC_INT_VIC2B_SF_GPIO (242 + 16)
27#define SDRV_SMC_ASYNC_INT_VIC2B_AP_GPIO (243 + 16)
28#define SDRV_SMC_ASYNC_INT_VIC3A_SF_GPIO (244 + 16)
29#define SDRV_SMC_ASYNC_INT_VIC3A_AP_GPIO (245 + 16)
30#define SDRV_SMC_ASYNC_INT_VIC3B_SF_GPIO (246 + 16)
31#define SDRV_SMC_ASYNC_INT_VIC3B_AP_GPIO (247 + 16)
33#define SDRV_SF_CKGEN_PCG_NUM 334
34#define SDRV_SF_CKGEN_BCG_NUM 15
35#define SDRV_SF_CKGEN_CCG_NUM 5
39#if CONFIG_E3L || CONFIG_D3L
40#define SDRV_SMC_ASYNC_INT_USB (163 + 16)
41#define SDRV_SMC_ASYNC_INT_IOC (164 + 16)
42#define SDRV_SMC_ASYNC_INT_VIC1_SF_GPIO (165 + 16)
44#define SDRV_SF_CKGEN_PCG_NUM 207
45#define SDRV_SF_CKGEN_BCG_NUM 8
46#define SDRV_SF_CKGEN_CCG_NUM 1
50#define RAM_LP_PG_EN 0x4u
51#define RAM_LP_RET1N 0x2u
52#define RAM_LP_RET2N 0x1u
54#define SDRV_SMC_CHIP_ENABLE (RAM_LP_RET1N | RAM_LP_RET2N)
55#define SDRV_SMC_SELECTIVE_PRECHARGE (RAM_LP_RET2N)
56#define SDRV_SMC_RETENTION_1 (RAM_LP_PG_EN | RAM_LP_RET2N)
57#define SDRV_SMC_RETENTION_2 (RAM_LP_PG_EN | RAM_LP_RET1N)
58#define SDRV_SMC_POWER_DOWN (RAM_LP_PG_EN | RAM_LP_RET1N | RAM_LP_RET2N)
64#define SDRV_SMC_IGNORE_AP (0x1u)
66#define SDRV_SMC_AP_LP_ALIGN_SAF (0x2u)
68#define SDRV_SMC_AP_WK_ALIGN_SAF (0x4u)
70#define SDRV_SMC_SWM_RUN (0x0u)
71#define SDRV_SMC_SWM_SLP (0x1u)
72#define SDRV_SMC_SWM_HIB (0x2u)
73#define SDRV_SMC_SWM_RTC (0x3u)
119#if CONFIG_E3 || CONFIG_D3
148#if CONFIG_E3L || CONFIG_D3L
157 SDRV_SMC_POWER_SWITCH_SF_BOOT = 2,
158 SDRV_SMC_POWER_SWITCH_AP_MIX = 3,
166 SDRV_SMC_RAM_SF_BOOT = 2,
167 SDRV_SMC_RAM_AP_MIX = 3,
336 uint32_t iso_en, uint32_t pg, uint32_t po, uint32_t iso_dis);
380 bool lp_trans_req, uint32_t irq_mask_dly,
bool ill_trans_wkup_en);
774 uint32_t iso_en, uint32_t pg, uint32_t po, uint32_t iso_dis);
814 bool lp_trans_req, uint32_t irq_mask_dly,
bool ill_trans_wkup_en);
SemiDrive driver common header file.
@ SDRV_STATUS_GROUP_SMC
Definition: sdrv_common.h:52
int32_t status_t
Type used for all status and error return values.
Definition: sdrv_common.h:82
#define SDRV_ERROR_STATUS(group, code)
Construct a status code value from a group and code number. All the error statuses are negetive numbe...
Definition: sdrv_common.h:17
struct sdrv_smc_soc_timeout sdrv_smc_soc_timeout_t
Definition for SOC SWM timeout setting.
status_t sdrv_smc_ap_domain_handshake(bool enable)
Config SMC whether handshake with AP domain.
status_t sdrv_smc_ctrl_soc_wakeup_control_config(sdrv_smc_t *smc_ctrl, sdrv_smc_soc_wakeup_ctrl_t *config)
Set soc wakeup control setting.
uint32_t sdrv_smc_ctrl_illegal_status_monitor(sdrv_smc_t *smc_ctrl)
Get SMC illegal transition event monitor status.
uint32_t sdrv_smc_ctrl_timeout_status_monitor(sdrv_smc_t *smc_ctrl)
Get SMC timeout event monitor status.
status_t sdrv_smc_pre_divider_config(uint16_t div_32k, uint8_t div_24m)
Set pre-divider number for 24M and 32K clock.
status_t sdrv_smc_ctrl_set_primary_core(sdrv_smc_t *smc_ctrl, sdrv_smc_domain_e domain, sdrv_smc_core_e id)
Set primary core id for a power domain.
status_t sdrv_smc_ctrl_global_control_config(sdrv_smc_t *smc_ctrl, sdrv_smc_global_control_t *config)
Config Safety/AP domain global control setting.
status_t sdrv_smc_ctrl_smc_misc_config(sdrv_smc_t *smc_ctrl, bool lpbk_force_check_en, bool permission_err_en)
Config SMC misc.
status_t sdrv_smc_all_interrupt_monitor_clear(void)
Clear all interrupt monitor register status.
status_t sdrv_smc_clear_core_wakeup_ack(void)
Clear all core wakeup acknowledge.
enum sdrv_smc_ram sdrv_smc_ram_e
On chip RAMs that have low power modes controlled by SMC.
struct sdrv_smc_soc_wakeup_ctrl sdrv_smc_soc_wakeup_ctrl_t
Definition for soc wakeup timeout control setting.
status_t sdrv_smc_ctrl_core_wakeup_irq_config(sdrv_smc_t *smc_ctrl, uint32_t err_wkup, uint32_t bk_wkup)
Set wakeup core irq enable or disable.
status_t sdrv_smc_ctrl_domain_misc_config(sdrv_smc_t *smc_ctrl, sdrv_smc_domain_e domain, bool lp_trans_req, uint32_t irq_mask_dly, bool ill_trans_wkup_en)
Config SMC Saf or AP domain misc.
sdrv_smc_mode
SMC power modes.
Definition: sdrv_smc.h:97
@ SDRV_SMC_HIBERNATE
Definition: sdrv_smc.h:116
@ SDRV_SMC_SLEEP
Definition: sdrv_smc.h:106
status_t sdrv_smc_rc24m_hibernate_enable(bool enable)
Configure RC oscillator state in hibernate mode.
status_t sdrv_smc_record_interrupt_monitor_status(void)
This function record monitor interrupt status when exit WFI.
uint32_t sdrv_smc_debug_monitor(sdrv_smc_debug_mux_e dbg_mux)
Debug for SMC status.
sdrv_smc_ram
On chip RAMs that have low power modes controlled by SMC.
Definition: sdrv_smc.h:137
@ SDRV_SMC_RAM_SX
Definition: sdrv_smc.h:140
@ SDRV_SMC_RAM_SP
Definition: sdrv_smc.h:139
@ SDRV_SMC_RAM_GAMA1
Definition: sdrv_smc.h:141
@ SDRV_SMC_RAM_AP
Definition: sdrv_smc.h:143
@ SDRV_SMC_RAM_DISP
Definition: sdrv_smc.h:144
@ SDRV_SMC_RAM_SF_MISC
Definition: sdrv_smc.h:142
@ SDRV_SMC_RAM_SF
Definition: sdrv_smc.h:138
sdrv_smc_error
SMC status error code.
Definition: sdrv_smc.h:78
@ SDRV_SMC_CONFIG_TYPE_WRONG
Definition: sdrv_smc.h:79
@ SDRV_SMC_CONFIG_NOT_SUPPORT
Definition: sdrv_smc.h:80
status_t sdrv_smc_power_switch_config(sdrv_smc_power_switch_e power_switch, sdrv_smc_mode_e mode, bool power_down_enable)
Control power switchs in low power mode.
uint32_t sdrv_smc_timeout_status_monitor(void)
Get SMC timeout event monitor status.
uint32_t sdrv_smc_illegal_status_monitor(void)
Get SMC illegal transition event monitor status.
status_t sdrv_smc_ctrl_power_switch_delay_config(sdrv_smc_t *smc_ctrl, sdrv_smc_power_switch_e power_switch, uint32_t iso_en, uint32_t pg, uint32_t po, uint32_t iso_dis)
Config Power switch in low power delay control.
status_t sdrv_smc_ctrl_rc24m_hibernate_enable(sdrv_smc_t *smc_ctrl, bool enable)
Configure RC oscillator state in hibernate mode.
enum sdrv_smc_power_switch sdrv_smc_power_switch_e
Power switches.
status_t sdrv_smc_ctrl_wakeup_interrupt_enable(sdrv_smc_t *smc_ctrl, sdrv_smc_core_e core, uint32_t irq_num)
Enable wakeup interrupt for specific core.
status_t sdrv_smc_trigger_software_handshake(sdrv_smc_handshake_e handshake, uint32_t smc_swm)
Software trigger SMC handshake with other module.
status_t sdrv_smc_soc_swm_timeout_config(sdrv_smc_soc_timeout_t *config)
Set soc swm timeout setting.
status_t sdrv_smc_ctrl_trigger_software_ram_lowpower(sdrv_smc_t *smc_ctrl, sdrv_smc_ram_e ram, uint32_t ram_mode)
Software trigger SMC control core ram power down in run mode.
bool sdrv_smc_software_power_switch_gate_status(sdrv_smc_power_switch_e power_switch)
Get power switch software power gate status.
status_t sdrv_smc_domain_timeout_config(sdrv_smc_domain_e domain, sdrv_smc_domain_timeout_t *config)
Config SMC Saf or AP domain timeout setting.
status_t sdrv_smc_ctrl_ap_domain_config(sdrv_smc_t *smc_ctrl, uint32_t ap_bitmap)
AP domain smc config.
status_t sdrv_smc_ctrl_lowpower_enable(sdrv_smc_t *smc_ctrl, sdrv_smc_domain_e domain, bool enable)
Enable or disable low power for specific domain.
status_t sdrv_smc_set_core_wakeup_ack(uint32_t ack)
Set core wakeup acknowledge.
status_t sdrv_smc_ctrl_wakeup_interrupt_disable(sdrv_smc_t *smc_ctrl, sdrv_smc_core_e core, uint32_t irq_num)
Disable wakeup interrupt for specific core.
status_t sdrv_smc_wakeup_interrupt_enable(sdrv_smc_core_e core, uint32_t irq_num)
Enable wakeup interrupt for specific core.
sdrv_smc_debug_mux
SMC debug mux sel.
Definition: sdrv_smc.h:196
@ SDRV_SMC_DBG_HK_PMU
Definition: sdrv_smc.h:199
@ SDRV_SMC_DBG_HK_SAF
Definition: sdrv_smc.h:197
@ SDRV_SMC_DBG_HK_AP
Definition: sdrv_smc.h:198
status_t sdrv_smc_soc_wakeup_control_config(sdrv_smc_soc_wakeup_ctrl_t *config)
Set soc wakeup control setting.
status_t sdrv_smc_ctrl_clear_core_wakeup_irq_status(sdrv_smc_t *smc_ctrl, uint32_t clr)
Clear wakeup core irq status.
bool sdrv_smc_ctrl_software_power_switch_gate_status(sdrv_smc_t *smc_ctrl, sdrv_smc_power_switch_e power_switch)
Get power switch software power gate status.
struct sdrv_smc_global_control sdrv_smc_global_control_t
Definition for SMC global control setting.
sdrv_smc_handshake
SMC handshake signals with other on chip modules.
Definition: sdrv_smc.h:174
@ SDRV_SMC_HK_PMU
Definition: sdrv_smc.h:179
@ SDRV_SMC_HK_SAF_RSTGEN
Definition: sdrv_smc.h:178
@ SDRV_SMC_HK_AP_CKGEN
Definition: sdrv_smc.h:175
@ SDRV_SMC_HK_AP_RSTGEN
Definition: sdrv_smc.h:176
@ SDRV_SMC_HK_SAF_CKGEN
Definition: sdrv_smc.h:177
struct sdrv_smc_domain_timeout sdrv_smc_domain_timeout_t
Definition for domain timeout setting.
uint32_t sdrv_smc_ctrl_get_core_wakeup_irq_status(sdrv_smc_t *smc_ctrl)
Get wakeup core irq status.
bool sdrv_smc_interrupt_monitor_status(sdrv_smc_core_e core, uint32_t irq_num)
Get specific core interrupt status in interrupt monitor register.
status_t sdrv_smc_clear_core_wakeup_irq_status(uint32_t clr)
Clear wakeup core irq status.
status_t sdrv_smc_ctrl_pre_divider_config(sdrv_smc_t *smc_ctrl, uint16_t div_32k, uint8_t div_24m)
Set pre-divider number for 24M and 32K clock.
struct sdrv_smc sdrv_smc_t
System work mode controller instance.
status_t sdrv_smc_ctrl_ap_domain_handshake(sdrv_smc_t *smc_ctrl, bool enable)
Config SMC whether handshake with AP domain.
status_t sdrv_smc_ctrl_domain_timeout_config(sdrv_smc_t *smc_ctrl, sdrv_smc_domain_e domain, sdrv_smc_domain_timeout_t *config)
Config SMC Saf or AP domain tiemout setting.
status_t sdrv_smc_trigger_software_ram_lowpower(sdrv_smc_ram_e ram, uint32_t ram_mode)
Software trigger SMC control core ram power down in run mode.
status_t sdrv_smc_ctrl_power_switch_config(sdrv_smc_t *smc_ctrl, sdrv_smc_power_switch_e power_switch, sdrv_smc_mode_e mode, bool power_down_enable)
Control power switchs in low power mode.
enum sdrv_smc_domain sdrv_smc_domain_e
SMC domains.
status_t sdrv_smc_ctrl_soc_misc_config(sdrv_smc_t *smc_ctrl, bool ill_trans_wkup_en)
Config SOC misc.
status_t sdrv_smc_ctrl_soc_swm_timeout_config(sdrv_smc_t *smc_ctrl, sdrv_smc_soc_timeout_t *config)
Set soc swm timeout setting.
status_t sdrv_smc_ctrl_set_core_wakeup_ack(sdrv_smc_t *smc_ctrl, uint32_t ack)
Set core wakeup acknowledge.
enum sdrv_smc_handshake sdrv_smc_handshake_e
SMC handshake signals with other on chip modules.
status_t sdrv_smc_ctrl_clear_interrupt_monitor_status(sdrv_smc_t *smc_ctrl, sdrv_smc_core_e core, uint32_t irq_num)
Clear specific core interrupt status in interrupt monitor register.
status_t sdrv_smc_ap_domain_config(uint32_t ap_bitmap)
AP domain smc config.
status_t sdrv_smc_global_control_config(sdrv_smc_global_control_t *config)
Config Safety/AP domain global control setting.
uint32_t sdrv_smc_get_core_wakeup_irq_status(void)
Get wakeup core irq status.
status_t sdrv_smc_soc_misc_config(bool ill_trans_wkup_en)
Config SOC misc.
status_t sdrv_smc_set_lowpower_mode(sdrv_smc_domain_e domain, sdrv_smc_mode_e mode)
Set low power mode for specific domain.
status_t sdrv_smc_ctrl_ram_lowpower_config(sdrv_smc_t *smc_ctrl, sdrv_smc_ram_e ram, sdrv_smc_mode_e mode, uint32_t ram_mode)
Configure low power modes for core RAM.
status_t sdrv_smc_lowpower_enable(sdrv_smc_domain_e domain, bool enable)
Enable or disable low power for specific domain.
status_t sdrv_smc_clear_interrupt_monitor_status(sdrv_smc_core_e core, uint32_t irq_num)
Clear specific core interrupt status in interrupt monitor register.
enum sdrv_smc_debug_mux sdrv_smc_debug_mux_e
SMC debug mux sel.
status_t sdrv_smc_ctrl_record_interrupt_monitor_status(sdrv_smc_t *smc_ctrl)
This function record monitor interrupt status when exit WFI.
status_t sdrv_smc_ctrl_set_lowpower_mode(sdrv_smc_t *smc_ctrl, sdrv_smc_domain_e domain, sdrv_smc_mode_e mode)
Set low power mode for specific domain.
status_t sdrv_smc_clear_timeout_illegal_status(void)
Clear SMC timeout and illegal transition error status.
status_t sdrv_smc_ram_lowpower_config(sdrv_smc_ram_e ram, sdrv_smc_mode_e mode, uint32_t ram_mode)
Configure low power modes for core RAM.
uint32_t sdrv_smc_ctrl_debug_monitor(sdrv_smc_t *smc_ctrl, sdrv_smc_debug_mux_e dbg_mux)
Debug for SMC status.
sdrv_smc_power_switch
Power switches.
Definition: sdrv_smc.h:126
@ SDRV_SMC_POWER_SWITCH_AP_DISP
Definition: sdrv_smc.h:131
@ SDRV_SMC_POWER_SWITCH_SF
Definition: sdrv_smc.h:127
@ SDRV_SMC_POWER_SWITCH_SP
Definition: sdrv_smc.h:128
@ SDRV_SMC_POWER_SWITCH_SX
Definition: sdrv_smc.h:129
@ SDRV_SMC_POWER_SWITCH_GAMA1
Definition: sdrv_smc.h:130
status_t sdrv_smc_ctrl_clear_core_wakeup_ack(sdrv_smc_t *smc_ctrl)
Clear all core wakeup acknowledge.
uint32_t sdrv_smc_status_monitor(void)
Get SWM status monitor register.
status_t sdrv_smc_ctrl_trigger_software_handshake(sdrv_smc_t *smc_ctrl, sdrv_smc_handshake_e handshake, uint32_t smc_swm)
Software trigger SMC handshake with other module.
status_t sdrv_smc_domain_misc_config(sdrv_smc_domain_e domain, bool lp_trans_req, uint32_t irq_mask_dly, bool ill_trans_wkup_en)
Config SMC Saf or AP domain misc.
status_t sdrv_smc_core_wakeup_irq_config(uint32_t err_wkup, uint32_t bk_wkup)
Set wakeup core irq enable or disable.
status_t sdrv_smc_trigger_software_power_switch(sdrv_smc_power_switch_e power_switch, bool power_down_enable)
Software trigger SMC control power switch in run mode.
status_t sdrv_smc_ctrl_all_interrupt_monitor_clear(sdrv_smc_t *smc_ctrl)
Clear all interrupt monitor register status.
status_t sdrv_smc_ctrl_clear_timeout_illegal_status(sdrv_smc_t *smc_ctrl)
Clear SMC timeout and illegal transition error status.
status_t sdrv_smc_ctrl_trigger_software_power_switch(sdrv_smc_t *smc_ctrl, sdrv_smc_power_switch_e power_switch, bool power_down_enable)
Software trigger SMC control power switch in run mode.
status_t sdrv_smc_power_switch_delay_config(sdrv_smc_power_switch_e power_switch, uint32_t iso_en, uint32_t pg, uint32_t po, uint32_t iso_dis)
Config Power switch in low power delay control.
status_t sdrv_smc_all_wakeup_interrupt_disable(void)
Mask all interrupt for SMC.
sdrv_smc_core
CPU cores managed by SMC.
Definition: sdrv_smc.h:185
@ SDRV_SMC_CORE_SP0
Definition: sdrv_smc.h:187
@ SDRV_SMC_CORE_SP1
Definition: sdrv_smc.h:188
@ SDRV_SMC_CORE_SX1
Definition: sdrv_smc.h:190
@ SDRV_SMC_CORE_SF
Definition: sdrv_smc.h:186
@ SDRV_SMC_CORE_SX0
Definition: sdrv_smc.h:189
status_t sdrv_smc_set_primary_core(sdrv_smc_domain_e domain, sdrv_smc_core_e id)
Set primary core id for a power domain.
enum sdrv_smc_core sdrv_smc_core_e
CPU cores managed by SMC.
uint32_t sdrv_smc_ctrl_status_monitor(sdrv_smc_t *smc_ctrl)
Get SWM status monitor register.
sdrv_smc_domain
SMC domains.
Definition: sdrv_smc.h:89
@ SDRV_SMC_SAF
Definition: sdrv_smc.h:90
@ SDRV_SMC_AP
Definition: sdrv_smc.h:91
status_t sdrv_smc_ctrl_all_wakeup_interrupt_disable(sdrv_smc_t *smc_ctrl)
Mask all interrupt for SMC.
enum sdrv_smc_mode sdrv_smc_mode_e
SMC power modes.
status_t sdrv_smc_wakeup_interrupt_disable(sdrv_smc_core_e core, uint32_t irq_num)
Disable wakeup interrupt for specific core.
status_t sdrv_smc_smc_misc_config(bool lpbk_force_check_en, bool permission_err_en)
Config SMC misc.
bool sdrv_smc_ctrl_interrupt_monitor_status(sdrv_smc_t *smc_ctrl, sdrv_smc_core_e core, uint32_t irq_num)
Get specific core interrupt status in interrupt monitor register.
Definition for domain timeout setting.
Definition: sdrv_smc.h:205
bool wkup_en
Definition: sdrv_smc.h:206
bool wdt_en
Definition: sdrv_smc.h:207
uint8_t rstgen_hk
Definition: sdrv_smc.h:209
uint8_t ckgen_hk
Definition: sdrv_smc.h:208
uint8_t mode_req_trans
Definition: sdrv_smc.h:210
Definition for SMC global control setting.
Definition: sdrv_smc.h:240
bool wkup_align_saf_en
Definition: sdrv_smc.h:245
bool lp_align_saf_en
Definition: sdrv_smc.h:244
sdrv_smc_core_e ap_pri_core
Definition: sdrv_smc.h:242
sdrv_smc_core_e saf_pri_core
Definition: sdrv_smc.h:241
bool ap_off_en
Definition: sdrv_smc.h:243
Definition for SOC SWM timeout setting.
Definition: sdrv_smc.h:216
bool wkup_en
Definition: sdrv_smc.h:217
bool wdt_en
Definition: sdrv_smc.h:218
uint8_t pmu_hk
Definition: sdrv_smc.h:219
Definition for soc wakeup timeout control setting.
Definition: sdrv_smc.h:225
uint8_t wkup_done_src_sel
Definition: sdrv_smc.h:231
uint16_t wkup_ack_val
Definition: sdrv_smc.h:233
uint16_t soc_run_val
Definition: sdrv_smc.h:234
bool lp2wkup_wdt_en
Definition: sdrv_smc.h:227
uint16_t lp2wkup_val
Definition: sdrv_smc.h:228
bool wkup_wdt_en
Definition: sdrv_smc.h:230
bool lp2wkup_tout_wkup_en
Definition: sdrv_smc.h:226
System work mode controller instance.
Definition: sdrv_smc.h:251
uint32_t group_irq_status[8]
Definition: sdrv_smc.h:256
paddr_t base
Definition: sdrv_smc.h:252
uint32_t core_irq_status[5]
Definition: sdrv_smc.h:255