coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
spm.h File Reference
#include <soc/addressmap.h>
#include <soc/mtcmos.h>
#include <types.h>
Include dependency graph for spm.h:

Go to the source code of this file.

Data Structures

struct  mtk_spm_regs
 
struct  pcm_desc
 
struct  dyna_load_pcm
 

Macros

#define SPM_PROJECT_CODE   0xb16
 
#define SPM_REGWR_CFG_KEY   (SPM_PROJECT_CODE << 16)
 
#define BCLK_CG_EN_LSB   (1U << 0) /* 1b */
 
#define MD_BCLK_CG_EN_LSB   (1U << 1) /* 1b */
 
#define PCM_IM_HOST_W_EN_LSB   (1U << 30) /* 1b */
 
#define PCM_IM_HOST_EN_LSB   (1U << 31) /* 1b */
 
#define SYSCLK0_EN_CTRL_LSB   (1U << 0) /* 2b */
 
#define SYSCLK1_EN_CTRL_LSB   (1U << 2) /* 2b */
 
#define SPM_LOCK_INFRA_DCM_LSB   (1U << 5) /* 1b */
 
#define EXT_SRCCLKEN_MASK   (1U << 6) /* 1b */
 
#define CXO32K_REMOVE_EN_MD1_LSB   (1U << 9) /* 1b */
 
#define CLKSQ1_SEL_CTRL_LSB   (1U << 12) /* 1b */
 
#define SRCLKEN0_EN_LSB   (1U << 13) /* 1b */
 
#define PCM_KICK_L_LSB   (1U << 0) /* 1b */
 
#define IM_KICK_L_LSB   (1U << 1) /* 1b */
 
#define PCM_CK_EN_LSB   (1U << 2) /* 1b */
 
#define EN_IM_SLEEP_DVS_LSB   (1U << 3) /* 1b */
 
#define IM_AUTO_PDN_EN_LSB   (1U << 4) /* 1b */
 
#define PCM_SW_RESET_LSB   (1U << 15) /* 1b */
 
#define IM_SLAVE_LSB   (1U << 0) /* 1b */
 
#define IM_SLEEP_LSB   (1U << 1) /* 1b */
 
#define MIF_APBEN_LSB   (1U << 3) /* 1b */
 
#define IM_PDN_LSB   (1U << 4) /* 1b */
 
#define PCM_TIMER_EN_LSB   (1U << 5) /* 1b */
 
#define IM_NONRP_EN_LSB   (1U << 6) /* 1b */
 
#define DIS_MIF_PROT_LSB   (1U << 7) /* 1b */
 
#define PCM_WDT_EN_LSB   (1U << 8) /* 1b */
 
#define PCM_WDT_WAKE_MODE_LSB   (1U << 9) /* 1b */
 
#define SPM_SRAM_SLEEP_B_LSB   (1U << 10) /* 1b */
 
#define SPM_SRAM_ISOINT_B_LSB   (1U << 11) /* 1b */
 
#define EVENT_LOCK_EN_LSB   (1U << 12) /* 1b */
 
#define SRCCLKEN_FAST_RESP_LSB   (1U << 13) /* 1b */
 
#define SCP_APB_INTERNAL_EN_LSB   (1U << 14) /* 1b */
 
#define PCM_IRQ_ROOT_MASK_LSB   (1U << 3) /* 1b */
 
#define WAKEUP_EVENT_MASK_B_BIT0   (1U << 0) /* 1b */
 
#define SPARE1_DDREN_MASK_B_LSB   (1U << 0) /* 1b */
 
#define SPM_PC_TRACE_OFFSET_LSB   (1U << 0) /* 12b */
 
#define SPM_PC_TRACE_OFFSET   (1U << 3) /* 1b */
 
#define SPM_PC_TRACE_HW_EN_LSB   (1U << 16) /* 1b */
 
#define SPARE_ACK_MASK_B_BIT0   (1U << 0) /* 1b */
 
#define SPARE_ACK_MASK_B_BIT1   (1U << 1) /* 1b */
 
#define CONN_DDR_EN_DBC_LEN   (0x00000154 << 20)
 
#define IFR_SRAMROM_ROM_PDN   (0x0000003f)
 
#define IM_STATE   (0x4 << 7)
 
#define IM_STATE_MASK   (0x7 << 7)
 
#define MD_DDR_EN_0_DBC_LEN   (0x00000154)
 
#define MD_DDR_EN_1_DBC_LEN   (0x00000154 << 10)
 
#define PCM_FSM_STA_DEF   (0x00108490)
 
#define PCM_FSM_STA_MASK   (0x7FFFFF)
 
#define POWER_ON_VAL1_DEF   (0x00015800)
 
#define SPM_CORE_TIMEOUT   (5000)
 
#define SPM_MAS_PAUSE_MASK_B_VAL   (0xFFFFFFFF)
 
#define SPM_MAS_PAUSE2_MASK_B_VAL   (0xFFFFFFFF)
 
#define SPM_PCM_REG1_DATA_CHECK   (0x1)
 
#define SPM_PCM_REG15_DATA_CHECK   (0x0)
 
#define SPM_WAKEUP_EVENT_MASK_DEF   (0xF0F92218)
 
#define SYSCLK1_EN_CTRL   (0x3 << 2)
 
#define SYSCLK1_SRC_MASK_B   (0x10 << 23)
 
#define ISRM_TWAM   (1U << 2)
 
#define ISRM_PCM_RETURN   (1U << 3)
 
#define ISRM_RET_IRQ_AUX   (0x3FF00)
 
#define ISRM_ALL_EXC_TWAM   (ISRM_RET_IRQ_AUX)
 
#define ISRM_ALL   (ISRM_ALL_EXC_TWAM | ISRM_TWAM)
 
#define ISRS_TWAM   (1U << 2)
 
#define ISRS_PCM_RETURN   (1U << 3)
 
#define ISRS_SW_INT0   (1U << 4)
 
#define ISRC_TWAM   (ISRS_TWAM)
 
#define ISRC_ALL_EXC_TWAM   (ISRS_PCM_RETURN)
 
#define ISRC_ALL   (ISRC_ALL_EXC_TWAM | ISRC_TWAM)
 
#define PCM_PWRIO_EN_R0   (1U << 0)
 
#define PCM_PWRIO_EN_R7   (1U << 7)
 
#define PCM_RF_SYNC_R0   (1U << 16)
 
#define PCM_RF_SYNC_R6   (1U << 22)
 
#define PCM_RF_SYNC_R7   (1U << 23)
 
#define PCM_SW_INT_ALL   (0x3FF)
 
#define PCM_EVENT_VECTOR_NUM   16
 

Enumerations

enum  {
  DISP_PWR_STA_MASK = 0x1 << 3 , DISP_SRAM_PDN_MASK = 0x1 << 8 , DISP_SRAM_ACK_MASK = 0x1 << 12 , AUDIO_PWR_STA_MASK = 0x1 << 24 ,
  AUDIO_SRAM_PDN_MASK = 0xf << 8 , AUDIO_SRAM_ACK_MASK = 0xf << 12
}
 
enum  dyna_load_pcm_index { DYNA_LOAD_PCM_SUSPEND_LP4_3733 = 0 , DYNA_LOAD_PCM_SUSPEND_LP4_3200 , DYNA_LOAD_PCM_MAX }
 

Functions

 check_member (mtk_spm_regs, spm_ack_chk_latch4, 0x0974)
 
int spm_init (void)
 

Variables

static struct mtk_spm_regs *const mtk_spm = (void *)SPM_BASE
 
static const struct power_domain_data disp []
 
static const struct power_domain_data audio []
 

Macro Definition Documentation

◆ BCLK_CG_EN_LSB

#define BCLK_CG_EN_LSB   (1U << 0) /* 1b */

Definition at line 15 of file spm.h.

◆ CLKSQ1_SEL_CTRL_LSB

#define CLKSQ1_SEL_CTRL_LSB   (1U << 12) /* 1b */

Definition at line 26 of file spm.h.

◆ CONN_DDR_EN_DBC_LEN

#define CONN_DDR_EN_DBC_LEN   (0x00000154 << 20)

Definition at line 74 of file spm.h.

◆ CXO32K_REMOVE_EN_MD1_LSB

#define CXO32K_REMOVE_EN_MD1_LSB   (1U << 9) /* 1b */

Definition at line 25 of file spm.h.

◆ DIS_MIF_PROT_LSB

#define DIS_MIF_PROT_LSB   (1U << 7) /* 1b */

Definition at line 44 of file spm.h.

◆ EN_IM_SLEEP_DVS_LSB

#define EN_IM_SLEEP_DVS_LSB   (1U << 3) /* 1b */

Definition at line 33 of file spm.h.

◆ EVENT_LOCK_EN_LSB

#define EVENT_LOCK_EN_LSB   (1U << 12) /* 1b */

Definition at line 49 of file spm.h.

◆ EXT_SRCCLKEN_MASK

#define EXT_SRCCLKEN_MASK   (1U << 6) /* 1b */

Definition at line 24 of file spm.h.

◆ IFR_SRAMROM_ROM_PDN

#define IFR_SRAMROM_ROM_PDN   (0x0000003f)

Definition at line 75 of file spm.h.

◆ IM_AUTO_PDN_EN_LSB

#define IM_AUTO_PDN_EN_LSB   (1U << 4) /* 1b */

Definition at line 34 of file spm.h.

◆ IM_KICK_L_LSB

#define IM_KICK_L_LSB   (1U << 1) /* 1b */

Definition at line 31 of file spm.h.

◆ IM_NONRP_EN_LSB

#define IM_NONRP_EN_LSB   (1U << 6) /* 1b */

Definition at line 43 of file spm.h.

◆ IM_PDN_LSB

#define IM_PDN_LSB   (1U << 4) /* 1b */

Definition at line 41 of file spm.h.

◆ IM_SLAVE_LSB

#define IM_SLAVE_LSB   (1U << 0) /* 1b */

Definition at line 38 of file spm.h.

◆ IM_SLEEP_LSB

#define IM_SLEEP_LSB   (1U << 1) /* 1b */

Definition at line 39 of file spm.h.

◆ IM_STATE

#define IM_STATE   (0x4 << 7)

Definition at line 76 of file spm.h.

◆ IM_STATE_MASK

#define IM_STATE_MASK   (0x7 << 7)

Definition at line 77 of file spm.h.

◆ ISRC_ALL

#define ISRC_ALL   (ISRC_ALL_EXC_TWAM | ISRC_TWAM)

Definition at line 108 of file spm.h.

◆ ISRC_ALL_EXC_TWAM

#define ISRC_ALL_EXC_TWAM   (ISRS_PCM_RETURN)

Definition at line 107 of file spm.h.

◆ ISRC_TWAM

#define ISRC_TWAM   (ISRS_TWAM)

Definition at line 106 of file spm.h.

◆ ISRM_ALL

#define ISRM_ALL   (ISRM_ALL_EXC_TWAM | ISRM_TWAM)

Definition at line 100 of file spm.h.

◆ ISRM_ALL_EXC_TWAM

#define ISRM_ALL_EXC_TWAM   (ISRM_RET_IRQ_AUX)

Definition at line 99 of file spm.h.

◆ ISRM_PCM_RETURN

#define ISRM_PCM_RETURN   (1U << 3)

Definition at line 97 of file spm.h.

◆ ISRM_RET_IRQ_AUX

#define ISRM_RET_IRQ_AUX   (0x3FF00)

Definition at line 98 of file spm.h.

◆ ISRM_TWAM

#define ISRM_TWAM   (1U << 2)

Definition at line 96 of file spm.h.

◆ ISRS_PCM_RETURN

#define ISRS_PCM_RETURN   (1U << 3)

Definition at line 104 of file spm.h.

◆ ISRS_SW_INT0

#define ISRS_SW_INT0   (1U << 4)

Definition at line 105 of file spm.h.

◆ ISRS_TWAM

#define ISRS_TWAM   (1U << 2)

Definition at line 103 of file spm.h.

◆ MD_BCLK_CG_EN_LSB

#define MD_BCLK_CG_EN_LSB   (1U << 1) /* 1b */

Definition at line 16 of file spm.h.

◆ MD_DDR_EN_0_DBC_LEN

#define MD_DDR_EN_0_DBC_LEN   (0x00000154)

Definition at line 78 of file spm.h.

◆ MD_DDR_EN_1_DBC_LEN

#define MD_DDR_EN_1_DBC_LEN   (0x00000154 << 10)

Definition at line 79 of file spm.h.

◆ MIF_APBEN_LSB

#define MIF_APBEN_LSB   (1U << 3) /* 1b */

Definition at line 40 of file spm.h.

◆ PCM_CK_EN_LSB

#define PCM_CK_EN_LSB   (1U << 2) /* 1b */

Definition at line 32 of file spm.h.

◆ PCM_EVENT_VECTOR_NUM

#define PCM_EVENT_VECTOR_NUM   16

Definition at line 129 of file spm.h.

◆ PCM_FSM_STA_DEF

#define PCM_FSM_STA_DEF   (0x00108490)

Definition at line 80 of file spm.h.

◆ PCM_FSM_STA_MASK

#define PCM_FSM_STA_MASK   (0x7FFFFF)

Definition at line 81 of file spm.h.

◆ PCM_IM_HOST_EN_LSB

#define PCM_IM_HOST_EN_LSB   (1U << 31) /* 1b */

Definition at line 18 of file spm.h.

◆ PCM_IM_HOST_W_EN_LSB

#define PCM_IM_HOST_W_EN_LSB   (1U << 30) /* 1b */

Definition at line 17 of file spm.h.

◆ PCM_IRQ_ROOT_MASK_LSB

#define PCM_IRQ_ROOT_MASK_LSB   (1U << 3) /* 1b */

Definition at line 54 of file spm.h.

◆ PCM_KICK_L_LSB

#define PCM_KICK_L_LSB   (1U << 0) /* 1b */

Definition at line 30 of file spm.h.

◆ PCM_PWRIO_EN_R0

#define PCM_PWRIO_EN_R0   (1U << 0)

Definition at line 111 of file spm.h.

◆ PCM_PWRIO_EN_R7

#define PCM_PWRIO_EN_R7   (1U << 7)

Definition at line 112 of file spm.h.

◆ PCM_RF_SYNC_R0

#define PCM_RF_SYNC_R0   (1U << 16)

Definition at line 113 of file spm.h.

◆ PCM_RF_SYNC_R6

#define PCM_RF_SYNC_R6   (1U << 22)

Definition at line 114 of file spm.h.

◆ PCM_RF_SYNC_R7

#define PCM_RF_SYNC_R7   (1U << 23)

Definition at line 115 of file spm.h.

◆ PCM_SW_INT_ALL

#define PCM_SW_INT_ALL   (0x3FF)

Definition at line 118 of file spm.h.

◆ PCM_SW_RESET_LSB

#define PCM_SW_RESET_LSB   (1U << 15) /* 1b */

Definition at line 35 of file spm.h.

◆ PCM_TIMER_EN_LSB

#define PCM_TIMER_EN_LSB   (1U << 5) /* 1b */

Definition at line 42 of file spm.h.

◆ PCM_WDT_EN_LSB

#define PCM_WDT_EN_LSB   (1U << 8) /* 1b */

Definition at line 45 of file spm.h.

◆ PCM_WDT_WAKE_MODE_LSB

#define PCM_WDT_WAKE_MODE_LSB   (1U << 9) /* 1b */

Definition at line 46 of file spm.h.

◆ POWER_ON_VAL1_DEF

#define POWER_ON_VAL1_DEF   (0x00015800)

Definition at line 82 of file spm.h.

◆ SCP_APB_INTERNAL_EN_LSB

#define SCP_APB_INTERNAL_EN_LSB   (1U << 14) /* 1b */

Definition at line 51 of file spm.h.

◆ SPARE1_DDREN_MASK_B_LSB

#define SPARE1_DDREN_MASK_B_LSB   (1U << 0) /* 1b */

Definition at line 60 of file spm.h.

◆ SPARE_ACK_MASK_B_BIT0

#define SPARE_ACK_MASK_B_BIT0   (1U << 0) /* 1b */

Definition at line 68 of file spm.h.

◆ SPARE_ACK_MASK_B_BIT1

#define SPARE_ACK_MASK_B_BIT1   (1U << 1) /* 1b */

Definition at line 69 of file spm.h.

◆ SPM_CORE_TIMEOUT

#define SPM_CORE_TIMEOUT   (5000)

Definition at line 83 of file spm.h.

◆ SPM_LOCK_INFRA_DCM_LSB

#define SPM_LOCK_INFRA_DCM_LSB   (1U << 5) /* 1b */

Definition at line 23 of file spm.h.

◆ SPM_MAS_PAUSE2_MASK_B_VAL

#define SPM_MAS_PAUSE2_MASK_B_VAL   (0xFFFFFFFF)

Definition at line 85 of file spm.h.

◆ SPM_MAS_PAUSE_MASK_B_VAL

#define SPM_MAS_PAUSE_MASK_B_VAL   (0xFFFFFFFF)

Definition at line 84 of file spm.h.

◆ SPM_PC_TRACE_HW_EN_LSB

#define SPM_PC_TRACE_HW_EN_LSB   (1U << 16) /* 1b */

Definition at line 65 of file spm.h.

◆ SPM_PC_TRACE_OFFSET

#define SPM_PC_TRACE_OFFSET   (1U << 3) /* 1b */

Definition at line 64 of file spm.h.

◆ SPM_PC_TRACE_OFFSET_LSB

#define SPM_PC_TRACE_OFFSET_LSB   (1U << 0) /* 12b */

Definition at line 63 of file spm.h.

◆ SPM_PCM_REG15_DATA_CHECK

#define SPM_PCM_REG15_DATA_CHECK   (0x0)

Definition at line 87 of file spm.h.

◆ SPM_PCM_REG1_DATA_CHECK

#define SPM_PCM_REG1_DATA_CHECK   (0x1)

Definition at line 86 of file spm.h.

◆ SPM_PROJECT_CODE

#define SPM_PROJECT_CODE   0xb16

Definition at line 11 of file spm.h.

◆ SPM_REGWR_CFG_KEY

#define SPM_REGWR_CFG_KEY   (SPM_PROJECT_CODE << 16)

Definition at line 12 of file spm.h.

◆ SPM_SRAM_ISOINT_B_LSB

#define SPM_SRAM_ISOINT_B_LSB   (1U << 11) /* 1b */

Definition at line 48 of file spm.h.

◆ SPM_SRAM_SLEEP_B_LSB

#define SPM_SRAM_SLEEP_B_LSB   (1U << 10) /* 1b */

Definition at line 47 of file spm.h.

◆ SPM_WAKEUP_EVENT_MASK_DEF

#define SPM_WAKEUP_EVENT_MASK_DEF   (0xF0F92218)

Definition at line 88 of file spm.h.

◆ SRCCLKEN_FAST_RESP_LSB

#define SRCCLKEN_FAST_RESP_LSB   (1U << 13) /* 1b */

Definition at line 50 of file spm.h.

◆ SRCLKEN0_EN_LSB

#define SRCLKEN0_EN_LSB   (1U << 13) /* 1b */

Definition at line 27 of file spm.h.

◆ SYSCLK0_EN_CTRL_LSB

#define SYSCLK0_EN_CTRL_LSB   (1U << 0) /* 2b */

Definition at line 21 of file spm.h.

◆ SYSCLK1_EN_CTRL

#define SYSCLK1_EN_CTRL   (0x3 << 2)

Definition at line 89 of file spm.h.

◆ SYSCLK1_EN_CTRL_LSB

#define SYSCLK1_EN_CTRL_LSB   (1U << 2) /* 2b */

Definition at line 22 of file spm.h.

◆ SYSCLK1_SRC_MASK_B

#define SYSCLK1_SRC_MASK_B   (0x10 << 23)

Definition at line 90 of file spm.h.

◆ WAKEUP_EVENT_MASK_B_BIT0

#define WAKEUP_EVENT_MASK_B_BIT0   (1U << 0) /* 1b */

Definition at line 57 of file spm.h.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
DISP_PWR_STA_MASK 
DISP_SRAM_PDN_MASK 
DISP_SRAM_ACK_MASK 
AUDIO_PWR_STA_MASK 
AUDIO_SRAM_PDN_MASK 
AUDIO_SRAM_ACK_MASK 

Definition at line 120 of file spm.h.

◆ dyna_load_pcm_index

Enumerator
DYNA_LOAD_PCM_SUSPEND_LP4_3733 
DYNA_LOAD_PCM_SUSPEND_LP4_3200 
DYNA_LOAD_PCM_MAX 

Definition at line 562 of file spm.h.

Function Documentation

◆ check_member()

check_member ( mtk_spm_regs  ,
spm_ack_chk_latch4  ,
0x0974   
)

◆ spm_init()

Variable Documentation

◆ audio

const struct power_domain_data audio[]
static
Initial value:
= {
{
.pwr_con = &mtk_spm->audio_pwr_con,
.pwr_sta_mask = AUDIO_PWR_STA_MASK,
.sram_pdn_mask = AUDIO_SRAM_PDN_MASK,
.sram_ack_mask = AUDIO_SRAM_ACK_MASK,
},
}
@ AUDIO_SRAM_ACK_MASK
Definition: spm.h:20
@ AUDIO_PWR_STA_MASK
Definition: spm.h:18
@ AUDIO_SRAM_PDN_MASK
Definition: spm.h:19
static struct mtk_spm_regs *const mtk_spm
Definition: spm.h:560
u32 audio_pwr_con
Definition: spm.h:60

Definition at line 582 of file spm.h.

◆ disp

const struct power_domain_data disp[]
static
Initial value:
= {
{
.pwr_con = &mtk_spm->dis_pwr_con,
.pwr_sta_mask = DISP_PWR_STA_MASK,
.sram_pdn_mask = DISP_SRAM_PDN_MASK,
.sram_ack_mask = DISP_SRAM_ACK_MASK,
},
}
@ DISP_SRAM_ACK_MASK
Definition: spm.h:17
@ DISP_PWR_STA_MASK
Definition: spm.h:15
@ DISP_SRAM_PDN_MASK
Definition: spm.h:16
u32 dis_pwr_con
Definition: spm.h:44

Definition at line 582 of file spm.h.

◆ mtk_spm

struct mtk_spm_regs* const mtk_spm = (void *)SPM_BASE
static

Definition at line 560 of file spm.h.