![]() |
coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
|
#include <assert.h>
#include <console/console.h>
#include <delay.h>
#include <device/mmio.h>
#include <soc/mcu_common.h>
#include <soc/spm.h>
#include <soc/spm_common.h>
#include <soc/symbols.h>
#include <timer.h>
Go to the source code of this file.
Macros | |
#define | SPM_SYSTEM_BASE_OFFSET 0x40000000 |
Functions | |
static void | spm_set_power_control (const struct pwr_ctrl *pwrctrl) |
static void | spm_register_init (void) |
static void | spm_set_sysclk_settle (void) |
static void | spm_code_swapping (void) |
static void | spm_reset_and_init_pcm (void) |
static void | spm_kick_im_to_fetch (const struct dyna_load_pcm *pcm) |
static void | spm_init_pcm_register (void) |
static void | spm_set_wakeup_event (const struct pwr_ctrl *pwrctrl) |
static void | spm_set_pcm_flags (const struct pwr_ctrl *pwrctrl) |
static void | spm_kick_pcm_to_run (const struct pwr_ctrl *pwrctrl) |
static void | reset_spm (struct mtk_mcu *mcu) |
int | spm_init (void) |
Variables | |
static const struct pwr_ctrl | spm_init_ctrl |
static struct mtk_mcu | spm |
Definition at line 671 of file spm.c.
References mtk_mcu::priv, spm_init_ctrl, spm_init_pcm_register(), spm_kick_im_to_fetch(), spm_kick_pcm_to_run(), spm_parse_firmware(), spm_reset_and_init_pcm(), and spm_set_wakeup_event().
Definition at line 486 of file spm.c.
References mask, mtk_spm, read32(), mtk_spm_regs::spm_cpu_wakeup_event, mtk_spm_regs::spm_wakeup_event_mask, SPM_WAKEUP_EVENT_MASK_BIT0, and write32().
Referenced by spm_reset_and_init_pcm().
int spm_init | ( | void | ) |
Definition at line 688 of file spm.c.
References BIOS_DEBUG, BIOS_ERR, BIOS_INFO, mtk_mcu::buffer_size, CONFIG, dyna_load_pcm::desc, DYNA_LOAD_PCM_SUSPEND_LP4_3200, DYNA_LOAD_PCM_SUSPEND_LP4_3733, mtk_mcu::load_buffer, mtk_spm_regs::md32pcm_pc, mtk_init_mcu(), mtk_spm, printk, mtk_mcu::priv, read32(), REGION_SIZE, spm, spm_init_ctrl, spm_init_event_vector(), spm_init_pcm_register(), spm_kick_im_to_fetch(), spm_kick_pcm_to_run(), spm_load_firmware(), spm_register_init(), spm_reset_and_init_pcm(), spm_set_power_control(), spm_set_sysclk_settle(), stopwatch_duration_msecs(), and stopwatch_init().
Referenced by mainboard_init().
Definition at line 566 of file spm.c.
References mtk_spm, mtk_spm_regs::pcm_pwr_io_en, mtk_spm_regs::pcm_reg_data_ini, PCM_RF_SYNC_R0, PCM_RF_SYNC_R7, read32(), mtk_spm_regs::spm_power_on_val0, mtk_spm_regs::spm_power_on_val1, and write32().
Referenced by reset_spm().
|
static |
Definition at line 533 of file spm.c.
References assert, BIOS_DEBUG, dyna_load_pcm::buf, dyna_load_pcm::desc, pcm_desc::dmem_start, mtk_spm_regs::md32pcm_dma0_con, MD32PCM_DMA0_CON_VAL, mtk_spm_regs::md32pcm_dma0_count, mtk_spm_regs::md32pcm_dma0_dst, mtk_spm_regs::md32pcm_dma0_src, mtk_spm_regs::md32pcm_dma0_start, MD32PCM_DMA0_START_VAL, mtk_spm_regs::md32pcm_dma0_wppt, mtk_spm_regs::md32pcm_dma0_wpto, mtk_spm, PCM_CK_EN_LSB, mtk_spm_regs::pcm_con0, pcm_desc::pmem_start, pcm_desc::pmem_words, printk, setbits32, SPM_REGWR_CFG_KEY, SPM_SYSTEM_BASE_OFFSET, pcm_desc::total_words, and write32().
Referenced by reset_spm().
Definition at line 646 of file spm.c.
References mtk_spm_regs::md32pcm_cfgreg_sw_rstn, MD32PCM_CFGREG_SW_RSTN_RESET, mtk_spm_regs::md32pcm_dma0_rlct, mtk_spm, PCM_CK_EN_LSB, mtk_spm_regs::pcm_con0, mtk_spm_regs::pcm_reg_data_ini, read32(), SET32_BITFIELDS, setbits32, mtk_spm_regs::spm_bus_protect2_mask_b, SPM_BUS_PROTECT2_MASK_B_DEF, mtk_spm_regs::spm_bus_protect_mask_b, SPM_BUS_PROTECT_MASK_B_DEF, SPM_INIT_DONE_US, SPM_REGWR_CFG_KEY, spm_set_pcm_flags(), udelay(), and write32().
Referenced by reset_spm().
Definition at line 426 of file spm.c.
References mtk_spm_regs::armpll_clk_sel, ARMPLL_CLK_SEL_DEF, BCLK_CG_EN_LSB, ISRC_ALL, ISRM_ALL, mtk_spm, PCM_CK_EN_LSB, mtk_spm_regs::pcm_con0, mtk_spm_regs::pcm_con1, mtk_spm_regs::pcm_pwr_io_en, mtk_spm_regs::pcm_reg_data_ini, PCM_RF_SYNC_R7, PCM_SW_INT_ALL, PCM_SW_RESET_LSB, POWER_ON_VAL1_DEF, mtk_spm_regs::poweron_config_set, read32(), REG_EVENT_LOCK_EN_LSB, REG_MD32_APB_INTERNAL_EN_LSB, REG_SPM_SRAM_ISOINT_B_LSB, REG_SYSCLK1_SRC_MD2_SRCCLKENA, RG_AHBMIF_APBEN_LSB, SET32_BITFIELDS, mtk_spm_regs::spm_clk_con, SPM_DVFS_FORCE_ENABLE_LSB, mtk_spm_regs::spm_dvfs_level, SPM_DVFS_LEVEL_DEF, mtk_spm_regs::spm_dvfs_misc, SPM_DVFSRC_ENABLE_LSB, mtk_spm_regs::spm_dvs_dfs_level, SPM_DVS_DFS_LEVEL_DEF, mtk_spm_regs::spm_irq_mask, mtk_spm_regs::spm_irq_sta, mtk_spm_regs::spm_power_on_val1, SPM_REGWR_CFG_KEY, mtk_spm_regs::spm_resource_ack_con0, SPM_RESOURCE_ACK_CON0_DEF, mtk_spm_regs::spm_resource_ack_con1, SPM_RESOURCE_ACK_CON1_DEF, mtk_spm_regs::spm_resource_ack_con2, SPM_RESOURCE_ACK_CON2_DEF, mtk_spm_regs::spm_resource_ack_con3, SPM_RESOURCE_ACK_CON3_DEF, mtk_spm_regs::spm_swint_clr, mtk_spm_regs::spm_wakeup_event_mask, SPM_WAKEUP_EVENT_MASK_DEF, and write32().
Referenced by spm_init().
Definition at line 498 of file spm.c.
References clrsetbits32, mtk_spm_regs::md32pcm_cfgreg_sw_rstn, MD32PCM_CFGREG_SW_RSTN_RUN, mtk_spm, PCM_CK_EN_LSB, mtk_spm_regs::pcm_con0, mtk_spm_regs::pcm_con1, mtk_spm_regs::pcm_pwr_io_en, mtk_spm_regs::pcm_reg0_data, PCM_SW_RESET_LSB, read32(), REG_EVENT_LOCK_EN_LSB, REG_MD32_APB_INTERNAL_EN_LSB, REG_SPM_SRAM_ISOINT_B_LSB, RG_AHBMIF_APBEN_LSB, RG_PCM_TIMER_EN_LSB, RG_PCM_WDT_WAKE_LSB, spm_code_swapping(), mtk_spm_regs::spm_power_on_val0, SPM_REGWR_CFG_KEY, and write32().
Referenced by reset_spm().
Definition at line 626 of file spm.c.
References mtk_spm, pwr_ctrl::pcm_flags, pwr_ctrl::pcm_flags1, pwr_ctrl::pcm_flags1_cust_clr, pwr_ctrl::pcm_flags1_cust_set, pwr_ctrl::pcm_flags_cust_clr, pwr_ctrl::pcm_flags_cust_set, mtk_spm_regs::spm_sw_flag_0, mtk_spm_regs::spm_sw_flag_1, mtk_spm_regs::spm_sw_rsv_7, mtk_spm_regs::spm_sw_rsv_8, and write32().
Referenced by spm_kick_pcm_to_run().
Definition at line 287 of file spm.c.
References mtk_spm, pwr_ctrl::reg_apu_apsrc_req_mask_b, pwr_ctrl::reg_apu_ddr_en_mask_b, pwr_ctrl::reg_apu_infra_req_mask_b, pwr_ctrl::reg_apu_srcclkena_mask_b, pwr_ctrl::reg_apu_vrf18_req_mask_b, pwr_ctrl::reg_audio_dsp_apsrc_req_mask_b, pwr_ctrl::reg_audio_dsp_ddr_en_mask_b, pwr_ctrl::reg_audio_dsp_infra_req_mask_b, pwr_ctrl::reg_audio_dsp_srcclkena_mask_b, pwr_ctrl::reg_audio_dsp_vrf18_req_mask_b, pwr_ctrl::reg_bak_psri_apsrc_req_mask_b, pwr_ctrl::reg_bak_psri_ddr_en_mask_b, pwr_ctrl::reg_bak_psri_infra_req_mask_b, pwr_ctrl::reg_bak_psri_srcclkena_mask_b, pwr_ctrl::reg_bak_psri_vrf18_req_mask_b, pwr_ctrl::reg_conn_apsrc_sel, pwr_ctrl::reg_cpueb_apsrc_req_mask_b, pwr_ctrl::reg_cpueb_ddr_en_mask_b, pwr_ctrl::reg_cpueb_infra_req_mask_b, pwr_ctrl::reg_cpueb_srcclkena_mask_b, pwr_ctrl::reg_cpueb_vrf18_req_mask_b, pwr_ctrl::reg_disp0_ddr_en_mask_b, pwr_ctrl::reg_disp1_apsrc_req_mask_b, pwr_ctrl::reg_disp1_ddr_en_mask_b, pwr_ctrl::reg_disp2_apsrc_req_mask_b, pwr_ctrl::reg_disp2_ddr_en_mask_b, pwr_ctrl::reg_disp3_apsrc_req_mask_b, pwr_ctrl::reg_disp3_ddr_en_mask_b, pwr_ctrl::reg_ext_wakeup_event_mask, pwr_ctrl::reg_gce0_apsrc_req_mask_b, pwr_ctrl::reg_gce0_ddr_en_mask_b, pwr_ctrl::reg_gce0_infra_req_mask_b, pwr_ctrl::reg_gce0_vrf18_req_mask_b, pwr_ctrl::reg_gce1_apsrc_req_mask_b, pwr_ctrl::reg_gce1_ddr_en_mask_b, pwr_ctrl::reg_gce1_infra_req_mask_b, pwr_ctrl::reg_gce1_vrf18_req_mask_b, pwr_ctrl::reg_infrasys_apsrc_req_mask_b, pwr_ctrl::reg_infrasys_ddr_en_mask_b, pwr_ctrl::reg_mcusys_idle_mask, pwr_ctrl::reg_md_apsrc_0_sel, pwr_ctrl::reg_md_apsrc_1_sel, pwr_ctrl::reg_mp0_cputop_idle_mask, pwr_ctrl::reg_mp1_cputop_idle_mask, pwr_ctrl::reg_msdc0_apsrc_req_mask_b, pwr_ctrl::reg_msdc0_ddr_en_mask_b, pwr_ctrl::reg_msdc0_infra_req_mask_b, pwr_ctrl::reg_msdc0_srcclkena_mask_b, pwr_ctrl::reg_msdc0_vrf18_req_mask_b, pwr_ctrl::reg_msdc1_apsrc_req_mask_b, pwr_ctrl::reg_msdc1_ddr_en_mask_b, pwr_ctrl::reg_msdc1_infra_req_mask_b, pwr_ctrl::reg_msdc1_srcclkena_mask_b, pwr_ctrl::reg_msdc1_vrf18_req_mask_b, pwr_ctrl::reg_msdc2_apsrc_req_mask_b, pwr_ctrl::reg_msdc2_ddr_en_mask_b, pwr_ctrl::reg_msdc2_infra_req_mask_b, pwr_ctrl::reg_msdc2_srcclkena_mask_b, pwr_ctrl::reg_msdc2_vrf18_req_mask_b, pwr_ctrl::reg_pextp_p0_apsrc_req_mask_b, pwr_ctrl::reg_pextp_p0_ddr_en_mask_b, pwr_ctrl::reg_pextp_p0_infra_req_mask_b, pwr_ctrl::reg_pextp_p0_srcclkena_mask_b, pwr_ctrl::reg_pextp_p0_vrf18_req_mask_b, pwr_ctrl::reg_pextp_p1_apsrc_req_mask_b, pwr_ctrl::reg_pextp_p1_ddr_en_mask_b, pwr_ctrl::reg_pextp_p1_infra_req_mask_b, pwr_ctrl::reg_pextp_p1_srcclkena_mask_b, pwr_ctrl::reg_pextp_p1_vrf18_req_mask_b, pwr_ctrl::reg_scp_apsrc_req_mask_b, pwr_ctrl::reg_scp_ddr_en_mask_b, pwr_ctrl::reg_scp_infra_req_mask_b, pwr_ctrl::reg_scp_srcclkena_mask_b, pwr_ctrl::reg_scp_vrf18_req_mask_b, pwr_ctrl::reg_spm_adsp_mailbox_req, pwr_ctrl::reg_spm_apsrc_req, pwr_ctrl::reg_spm_apsrc_req_reserved_mask_b, pwr_ctrl::reg_spm_ddr_en_req, pwr_ctrl::reg_spm_ddr_en_reserved_mask_b, pwr_ctrl::reg_spm_dvfs_req, pwr_ctrl::reg_spm_f26m_req, pwr_ctrl::reg_spm_infra_req, pwr_ctrl::reg_spm_infra_req_reserved_mask_b, pwr_ctrl::reg_spm_scp_mailbox_req, pwr_ctrl::reg_spm_srcclkena_reserved_mask_b, pwr_ctrl::reg_spm_sspm_mailbox_req, pwr_ctrl::reg_spm_sw_mailbox_req, pwr_ctrl::reg_spm_vrf18_req, pwr_ctrl::reg_spm_vrf18_req_reserved_mask_b, pwr_ctrl::reg_sspm_apsrc_req_0_mask_b, pwr_ctrl::reg_sspm_ddr_en_0_mask_b, pwr_ctrl::reg_sspm_infra_req_0_mask_b, pwr_ctrl::reg_sspm_srcclkena_0_mask_b, pwr_ctrl::reg_sspm_vrf18_req_0_mask_b, pwr_ctrl::reg_ufs_apsrc_req_mask_b, pwr_ctrl::reg_ufs_ddr_en_mask_b, pwr_ctrl::reg_ufs_infra_req_mask_b, pwr_ctrl::reg_ufs_srcclkena_mask_b, pwr_ctrl::reg_ufs_vrf18_req_mask_b, pwr_ctrl::reg_usb_apsrc_req_mask_b, pwr_ctrl::reg_usb_ddr_en_mask_b, pwr_ctrl::reg_usb_infra_req_mask_b, pwr_ctrl::reg_usb_srcclkena_mask_b, pwr_ctrl::reg_usb_vrf18_req_mask_b, pwr_ctrl::reg_wakeup_event_mask, pwr_ctrl::reg_wfi_op, pwr_ctrl::reg_wfi_type, mtk_spm_regs::spm_ap_standby_con, mtk_spm_regs::spm_src2_mask, mtk_spm_regs::spm_src3_mask, mtk_spm_regs::spm_src4_mask, mtk_spm_regs::spm_src_mask, mtk_spm_regs::spm_src_req, mtk_spm_regs::spm_wakeup_event_ext_mask, mtk_spm_regs::spm_wakeup_event_mask, and write32().
Referenced by spm_init().
Definition at line 481 of file spm.c.
References mtk_spm, mtk_spm_regs::spm_clk_settle, SPM_SYSCLK_SETTLE, and write32().
Referenced by spm_init().
Definition at line 581 of file spm.c.
References clrsetbits32, mask, mtk_spm, mtk_spm_regs::pcm_con1, PCM_TIMER_MAX, mtk_spm_regs::pcm_timer_val, RG_PCM_TIMER_EN_LSB, SET32_BITFIELDS, setbits32, SPM_EVENT_COUNTER_CLR_LSB, mtk_spm_regs::spm_irq_mask, SPM_REGWR_CFG_KEY, mtk_spm_regs::spm_wakeup_event_mask, mtk_spm_regs::sys_timer_con, SYS_TIMER_START_EN_LSB, pwr_ctrl::timer_val, pwr_ctrl::timer_val_cust, val, pwr_ctrl::wake_src, pwr_ctrl::wake_src_cust, and write32().
Referenced by reset_spm().
|
static |
|
static |
Definition at line 1 of file spm.c.
Referenced by reset_spm(), and spm_init().