summaryrefslogtreecommitdiff
path: root/src/soc/mediatek/mt8183/include/soc/spm.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/soc/mediatek/mt8183/include/soc/spm.h')
-rw-r--r--src/soc/mediatek/mt8183/include/soc/spm.h508
1 files changed, 508 insertions, 0 deletions
diff --git a/src/soc/mediatek/mt8183/include/soc/spm.h b/src/soc/mediatek/mt8183/include/soc/spm.h
new file mode 100644
index 0000000000..5e7770eecb
--- /dev/null
+++ b/src/soc/mediatek/mt8183/include/soc/spm.h
@@ -0,0 +1,508 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2018 MediaTek Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef SOC_MEDIATEK_MT8183_SPM_H
+#define SOC_MEDIATEK_MT8183_SPM_H
+
+#include <soc/addressmap.h>
+#include <types.h>
+
+enum {
+ SPM_PROJECT_CODE = 0xb16
+};
+
+enum {
+ DISP_SRAM_PDN_MASK = 0x1 << 8,
+ DISP_SRAM_ACK_MASK = 0x1 << 12,
+ AUDIO_SRAM_PDN_MASK = 0xf << 8,
+ AUDIO_SRAM_ACK_MASK = 0xf << 12,
+};
+
+struct mtk_spm_regs {
+ u32 poweron_config_set;
+ u32 spm_power_on_val0;
+ u32 spm_power_on_val1;
+ u32 spm_clk_con;
+ u32 spm_clk_settle;
+ u32 spm_ap_standby_con;
+ u32 pcm_con0;
+ u32 pcm_con1;
+ u32 pcm_im_ptr;
+ u32 pcm_im_len;
+ u32 pcm_reg_data_ini;
+ u32 pcm_pwr_io_en;
+ u32 pcm_timer_val;
+ u32 pcm_wdt_val;
+ u32 pcm_im_host_rw_ptr;
+ u32 pcm_im_host_rw_dat;
+ u32 pcm_event_vector0;
+ u32 pcm_event_vector1;
+ u32 pcm_event_vector2;
+ u32 pcm_event_vector3;
+ u32 pcm_event_vector4;
+ u32 pcm_event_vector5;
+ u32 pcm_event_vector6;
+ u32 pcm_event_vector7;
+ u32 pcm_event_vector8;
+ u32 pcm_event_vector9;
+ u32 pcm_event_vector10;
+ u32 pcm_event_vector11;
+ u32 pcm_event_vector12;
+ u32 pcm_event_vector13;
+ u32 pcm_event_vector14;
+ u32 pcm_event_vector15;
+ u32 pcm_event_vector_en;
+ u32 reserved1[1];
+ u32 spm_sram_rsv_con;
+ u32 spm_swint;
+ u32 spm_swint_set;
+ u32 spm_swint_clr;
+ u32 spm_scp_mailbox;
+ u32 scp_spm_mailbox;
+ u32 spm_twam_con;
+ u32 spm_twam_window_len;
+ u32 spm_twam_idle_sel;
+ u32 spm_scp_irq;
+ u32 spm_cpu_wakeup_event;
+ u32 spm_irq_mask;
+ u32 spm_src_req;
+ u32 spm_src_mask;
+ u32 spm_src2_mask;
+ u32 spm_wakeup_event_mask;
+ u32 spm_wakeup_event_ext_mask;
+ u32 spm_twam_event_clear;
+ u32 scp_clk_con;
+ u32 pcm_debug_con;
+ u32 ddr_en_dbc_len;
+ u32 ahb_bus_con;
+ u32 spm_src3_mask;
+ u32 ddr_en_emi_dbc_con;
+ u32 md32_clk_con;
+ u32 reserved2[5];
+ u32 pcm_reg0_data;
+ u32 pcm_reg1_data;
+ u32 pcm_reg2_data;
+ u32 pcm_reg3_data;
+ u32 pcm_reg4_data;
+ u32 pcm_reg5_data;
+ u32 pcm_reg6_data;
+ u32 pcm_reg7_data;
+ u32 pcm_reg8_data;
+ u32 pcm_reg9_data;
+ u32 pcm_reg10_data;
+ u32 pcm_reg11_data;
+ u32 pcm_reg12_data;
+ u32 pcm_reg13_data;
+ u32 pcm_reg14_data;
+ u32 pcm_reg15_data;
+ u32 pcm_reg12_mask_b_sta;
+ u32 pcm_reg12_ext_data;
+ u32 pcm_reg12_ext_mask_b_sta;
+ u32 pcm_event_reg_sta;
+ u32 pcm_timer_out;
+ u32 pcm_wdt_out;
+ u32 spm_irq_sta;
+ u32 spm_wakeup_sta;
+ u32 spm_wakeup_ext_sta;
+ u32 spm_wakeup_misc;
+ u32 bus_protect_rdy;
+ u32 bus_protect2_rdy;
+ u32 subsys_idle_sta;
+ u32 cpu_idle_sta;
+ u32 pcm_fsm_sta;
+ u32 src_req_sta;
+ u32 pwr_status;
+ u32 pwr_status_2nd;
+ u32 cpu_pwr_status;
+ u32 cpu_pwr_status_2nd;
+ u32 misc_sta;
+ u32 spm_src_rdy_sta;
+ u32 reserved3[1];
+ u32 dramc_dbg_latch;
+ u32 spm_twam_last_sta0;
+ u32 spm_twam_last_sta1;
+ u32 spm_twam_last_sta2;
+ u32 spm_twam_last_sta3;
+ u32 spm_twam_curr_sta0;
+ u32 spm_twam_curr_sta1;
+ u32 spm_twam_curr_sta2;
+ u32 spm_twam_curr_sta3;
+ u32 spm_twam_timer_out;
+ u32 reserved4[1];
+ u32 spm_dvfs_sta;
+ u32 bus_protect3_rdy;
+ u32 reserved5[4];
+ u32 src_ddren_sta;
+ u32 reserved6[7];
+ u32 mcu_pwr_con;
+ u32 mp0_cputop_pwr_con;
+ u32 mp0_cpu0_pwr_con;
+ u32 mp0_cpu1_pwr_con;
+ u32 mp0_cpu2_pwr_con;
+ u32 mp0_cpu3_pwr_con;
+ u32 mp1_cputop_pwr_con;
+ u32 mp1_cpu0_pwr_con;
+ u32 mp1_cpu1_pwr_con;
+ u32 mp1_cpu2_pwr_con;
+ u32 mp1_cpu3_pwr_con;
+ u32 reserved7[5];
+ u32 mp0_cputop_l2_pdn;
+ u32 mp0_cputop_l2_sleep_b;
+ u32 mp0_cpu0_l1_pdn;
+ u32 mp0_cpu1_l1_pdn;
+ u32 mp0_cpu2_l1_pdn;
+ u32 mp0_cpu3_l1_pdn;
+ u32 mp1_cputop_l2_pdn;
+ u32 mp1_cputop_l2_sleep_b;
+ u32 mp1_cpu0_l1_pdn;
+ u32 mp1_cpu1_l1_pdn;
+ u32 mp1_cpu2_l1_pdn;
+ u32 mp1_cpu3_l1_pdn;
+ u32 reserved8[8];
+ u32 cpu_ext_buck_iso;
+ u32 reserved9[7];
+ u32 dummy1_pwr_con;
+ u32 bypass_spmc;
+ u32 spmc_dormant_enable;
+ u32 armpll_clk_con;
+ u32 spmc_in_ret;
+ u32 reserved10[15];
+ u32 vde_pwr_con;
+ u32 ven_pwr_con;
+ u32 isp_pwr_con;
+ u32 dis_pwr_con;
+ u32 mfg_core1_pwr_con;
+ u32 audio_pwr_con;
+ u32 ifr_pwr_con;
+ u32 dpy_pwr_con;
+ u32 md1_pwr_con;
+ u32 vpu_top_pwr_con;
+ u32 reserved11[1];
+ u32 conn_pwr_con;
+ u32 vpu_core2_pwr_con;
+ u32 mfg_async_pwr_con;
+ u32 mfg_pwr_con;
+ u32 vpu_core0_pwr_con;
+ u32 vpu_core1_pwr_con;
+ u32 cam_pwr_con;
+ u32 mfg_2d_pwr_con;
+ u32 mfg_core0_pwr_con;
+ u32 sysram_con;
+ u32 sysrom_con;
+ u32 sspm_sram_con;
+ u32 scp_sram_con;
+ u32 reserved12[3];
+ u32 ufs_sram_con;
+ u32 reserved13[4];
+ u32 dummy_sram_con;
+ u32 reserved14[3];
+ u32 md_ext_buck_iso_con;
+ u32 md_sram_iso_con;
+ u32 md_extra_pwr_con;
+ u32 reserved15[1];
+ u32 ext_buck_con;
+ u32 reserved16[11];
+ u32 mbist_efuse_repair_ack_sta;
+ u32 reserved17[11];
+ u32 spm_dvfs_con;
+ u32 spm_mdbsi_con;
+ u32 spm_mas_pause_mask_b;
+ u32 spm_mas_pause2_mask_b;
+ u32 spm_bsi_gen;
+ u32 spm_bsi_en_sr;
+ u32 spm_bsi_clk_sr;
+ u32 spm_bsi_d0_sr;
+ u32 spm_bsi_d1_sr;
+ u32 spm_bsi_d2_sr;
+ u32 spm_ap_sema;
+ u32 spm_spm_sema;
+ u32 ap_mdsrc_req;
+ u32 reserved18[1];
+ u32 spm2md_dvfs_con;
+ u32 md2spm_dvfs_con;
+ u32 dramc_dpy_clk_sw_con_rsv;
+ u32 dpy_lp_con;
+ u32 cpu_dvfs_req;
+ u32 spm_pll_con;
+ u32 spm_emi_bw_mode;
+ u32 ap2md_peer_wakeup;
+ u32 ulposc_con;
+ u32 spm2mm_con;
+ u32 dramc_dpy_clk_sw_con_sel;
+ u32 dramc_dpy_clk_sw_con;
+ u32 spm_s1_mode_ch;
+ u32 emi_self_refresh_ch_sta;
+ u32 dramc_dpy_clk_sw_con_sel2;
+ u32 dramc_dpy_clk_sw_con2;
+ u32 dramc_dmyrd_con;
+ u32 spm_drs_con;
+ u32 spm_sema_m0;
+ u32 spm_sema_m1;
+ u32 spm_sema_m2;
+ u32 spm_sema_m3;
+ u32 spm_sema_m4;
+ u32 spm_sema_m5;
+ u32 spm_sema_m6;
+ u32 spm_sema_m7;
+ u32 spm_mas_pause_mm_mask_b;
+ u32 spm_mas_pause_mcu_mask_b;
+ u32 reserved19[1];
+ u32 sram_dreq_ack;
+ u32 sram_dreq_con;
+ u32 sram_dreq_con_set;
+ u32 sram_dreq_con_clr;
+ u32 spm2emi_enter_ulpm;
+ u32 spm_md32_irq;
+ u32 spm2pmcu_int;
+ u32 spm2pmcu_int_set;
+ u32 spm2pmcu_int_clr;
+ u32 spm2pmcu_mailbox_0;
+ u32 spm2pmcu_mailbox_1;
+ u32 spm2pmcu_mailbox_2;
+ u32 spm2pmcu_mailbox_3;
+ u32 pmcu2spm_int;
+ u32 pmcu2spm_int_set;
+ u32 pmcu2spm_int_clr;
+ u32 pmcu2spm_mailbox_0;
+ u32 pmcu2spm_mailbox_1;
+ u32 pmcu2spm_mailbox_2;
+ u32 pmcu2spm_mailbox_3;
+ u32 pmcu2spm_cfg;
+ u32 mp0_cpu0_irq_mask;
+ u32 mp0_cpu1_irq_mask;
+ u32 mp0_cpu2_irq_mask;
+ u32 mp0_cpu3_irq_mask;
+ u32 mp1_cpu0_irq_mask;
+ u32 mp1_cpu1_irq_mask;
+ u32 mp1_cpu2_irq_mask;
+ u32 mp1_cpu3_irq_mask;
+ u32 reserved20[4];
+ u32 mp0_cpu0_wfi_en;
+ u32 mp0_cpu1_wfi_en;
+ u32 mp0_cpu2_wfi_en;
+ u32 mp0_cpu3_wfi_en;
+ u32 mp1_cpu0_wfi_en;
+ u32 mp1_cpu1_wfi_en;
+ u32 mp1_cpu2_wfi_en;
+ u32 mp1_cpu3_wfi_en;
+ u32 reserved21[1];
+ u32 mp0_l2cflush;
+ u32 mp1_l2cflush;
+ u32 reserved22[1];
+ u32 cpu_ptpod2_con;
+ u32 reserved23[3];
+ u32 root_cputop_addr;
+ u32 root_core_addr;
+ u32 reserved24[2];
+ u32 cpu_spare_con;
+ u32 cpu_spare_con_set;
+ u32 cpu_spare_con_clr;
+ u32 reserved25[17];
+ u32 spm2sw_mailbox_0;
+ u32 spm2sw_mailbox_1;
+ u32 spm2sw_mailbox_2;
+ u32 spm2sw_mailbox_3;
+ u32 sw2spm_int;
+ u32 sw2spm_int_set;
+ u32 sw2spm_int_clr;
+ u32 sw2spm_mailbox_0;
+ u32 sw2spm_mailbox_1;
+ u32 sw2spm_mailbox_2;
+ u32 sw2spm_mailbox_3;
+ u32 sw2spm_cfg;
+ u32 spm_sw_flag;
+ u32 spm_sw_debug;
+ u32 spm_sw_rsv_0;
+ u32 spm_sw_rsv_1;
+ u32 spm_sw_rsv_2;
+ u32 spm_sw_rsv_3;
+ u32 spm_sw_rsv_4;
+ u32 spm_sw_rsv_5;
+ u32 spm_rsv_con;
+ u32 spm_rsv_sta;
+ u32 spm_rsv_con1;
+ u32 spm_rsv_sta1;
+ u32 spm_pasr_dpd_0;
+ u32 spm_pasr_dpd_1;
+ u32 spm_pasr_dpd_2;
+ u32 spm_pasr_dpd_3;
+ u32 spm_spare_con;
+ u32 spm_spare_con_set;
+ u32 spm_spare_con_clr;
+ u32 spm_sw_rsv_6;
+ u32 spm_sw_rsv_7;
+ u32 spm_sw_rsv_8;
+ u32 spm_sw_rsv_9;
+ u32 spm_sw_rsv_10;
+ u32 reserved26[7];
+ u32 spm_sw_rsv_18;
+ u32 spm_sw_rsv_19;
+ u32 reserved27[3];
+ u32 dvfsrc_event_mask_con;
+ u32 dvfsrc_event_force_on;
+ u32 dvfsrc_event_sel;
+ u32 spm_dvfs_event_sta;
+ u32 spm_dvfs_event_sta1;
+ u32 spm_dvfs_level;
+ u32 dvfs_abort_sta;
+ u32 dvfs_abort_others_mask;
+ u32 spm_dfs_level;
+ u32 spm_dvs_level;
+ u32 spm_dvfs_misc;
+ u32 reserved28[1];
+ u32 spare_src_req_mask;
+ u32 scp_vcore_level;
+ u32 sc_mm_ck_sel_con;
+ u32 reserved29[9];
+ u32 spare_ack_sta;
+ u32 spare_ack_mask;
+ u32 reserved30[2];
+ u32 spm_dvfs_con1;
+ u32 spm_dvfs_con1_sta;
+ u32 reserved31[2];
+ u32 spm_dvfs_cmd0;
+ u32 spm_dvfs_cmd1;
+ u32 spm_dvfs_cmd2;
+ u32 spm_dvfs_cmd3;
+ u32 spm_dvfs_cmd4;
+ u32 spm_dvfs_cmd5;
+ u32 spm_dvfs_cmd6;
+ u32 spm_dvfs_cmd7;
+ u32 spm_dvfs_cmd8;
+ u32 spm_dvfs_cmd9;
+ u32 spm_dvfs_cmd10;
+ u32 spm_dvfs_cmd11;
+ u32 spm_dvfs_cmd12;
+ u32 spm_dvfs_cmd13;
+ u32 spm_dvfs_cmd14;
+ u32 spm_dvfs_cmd15;
+ u32 reserved32[12];
+ u32 wdt_latch_spare0_fix;
+ u32 wdt_latch_spare1_fix;
+ u32 wdt_latch_spare2_fix;
+ u32 wdt_latch_spare3_fix;
+ u32 spare_ack_in_fix;
+ u32 dcha_latch_rsv0_fix;
+ u32 dchb_latch_rsv0_fix;
+ u32 reserved33[25];
+ u32 pcm_wdt_latch_0;
+ u32 pcm_wdt_latch_1;
+ u32 pcm_wdt_latch_2;
+ u32 pcm_wdt_latch_3;
+ u32 pcm_wdt_latch_4;
+ u32 pcm_wdt_latch_5;
+ u32 pcm_wdt_latch_6;
+ u32 pcm_wdt_latch_7;
+ u32 pcm_wdt_latch_8;
+ u32 pcm_wdt_latch_9;
+ u32 wdt_latch_spare0;
+ u32 wdt_latch_spare1;
+ u32 wdt_latch_spare2;
+ u32 wdt_latch_spare3;
+ u32 pcm_wdt_latch_10;
+ u32 pcm_wdt_latch_11;
+ u32 dcha_gating_latch_0;
+ u32 dcha_gating_latch_1;
+ u32 dcha_gating_latch_2;
+ u32 dcha_gating_latch_3;
+ u32 dcha_gating_latch_4;
+ u32 dcha_gating_latch_5;
+ u32 dcha_gating_latch_6;
+ u32 dcha_gating_latch_7;
+ u32 dchb_gating_latch_0;
+ u32 dchb_gating_latch_1;
+ u32 dchb_gating_latch_2;
+ u32 dchb_gating_latch_3;
+ u32 dchb_gating_latch_4;
+ u32 dchb_gating_latch_5;
+ u32 dchb_gating_latch_6;
+ u32 dchb_gating_latch_7;
+ u32 dcha_latch_rsv0;
+ u32 dchb_latch_rsv0;
+ u32 pcm_wdt_latch_12;
+ u32 pcm_wdt_latch_13;
+ u32 reserved34[12];
+ u32 spm_pc_trace_con;
+ u32 spm_pc_trace_g0;
+ u32 spm_pc_trace_g1;
+ u32 spm_pc_trace_g2;
+ u32 spm_pc_trace_g3;
+ u32 spm_pc_trace_g4;
+ u32 spm_pc_trace_g5;
+ u32 spm_pc_trace_g6;
+ u32 spm_pc_trace_g7;
+ u32 reserved35[7];
+ u32 spm_ack_chk_con;
+ u32 spm_ack_chk_pc;
+ u32 spm_ack_chk_sel;
+ u32 spm_ack_chk_timer;
+ u32 spm_ack_chk_sta;
+ u32 spm_ack_chk_latch;
+ u32 reserved36[2];
+ u32 spm_ack_chk_con2;
+ u32 spm_ack_chk_pc2;
+ u32 spm_ack_chk_sel2;
+ u32 spm_ack_chk_timer2;
+ u32 spm_ack_chk_sta2;
+ u32 spm_ack_chk_latch2;
+ u32 reserved37[2];
+ u32 spm_ack_chk_con3;
+ u32 spm_ack_chk_pc3;
+ u32 spm_ack_chk_sel3;
+ u32 spm_ack_chk_timer3;
+ u32 spm_ack_chk_sta3;
+ u32 spm_ack_chk_latch3;
+ u32 reserved38[2];
+ u32 spm_ack_chk_con4;
+ u32 spm_ack_chk_pc4;
+ u32 spm_ack_chk_sel4;
+ u32 spm_ack_chk_timer4;
+ u32 spm_ack_chk_sta4;
+ u32 spm_ack_chk_latch4;
+};
+
+check_member(mtk_spm_regs, pcm_reg0_data, 0x0100);
+check_member(mtk_spm_regs, src_ddren_sta, 0x01e0);
+check_member(mtk_spm_regs, mcu_pwr_con, 0x0200);
+check_member(mtk_spm_regs, mp0_cputop_l2_pdn, 0x0240);
+check_member(mtk_spm_regs, cpu_ext_buck_iso, 0x0290);
+check_member(mtk_spm_regs, dummy1_pwr_con, 0x02b0);
+check_member(mtk_spm_regs, vde_pwr_con, 0x0300);
+check_member(mtk_spm_regs, ufs_sram_con, 0x036c);
+check_member(mtk_spm_regs, dummy_sram_con, 0x0380);
+check_member(mtk_spm_regs, md_ext_buck_iso_con, 0x0390);
+check_member(mtk_spm_regs, mbist_efuse_repair_ack_sta, 0x03d0);
+check_member(mtk_spm_regs, spm_dvfs_con, 0x0400);
+check_member(mtk_spm_regs, mp0_cpu0_wfi_en, 0x0530);
+check_member(mtk_spm_regs, root_cputop_addr, 0x0570);
+check_member(mtk_spm_regs, cpu_spare_con, 0x0580);
+check_member(mtk_spm_regs, spm2sw_mailbox_0, 0x05d0);
+check_member(mtk_spm_regs, spm_sw_rsv_18, 0x067c);
+check_member(mtk_spm_regs, dvfsrc_event_mask_con, 0x0690);
+check_member(mtk_spm_regs, spare_ack_sta, 0x06f0);
+check_member(mtk_spm_regs, spm_dvfs_con1, 0x0700);
+check_member(mtk_spm_regs, spm_dvfs_cmd0, 0x0710);
+check_member(mtk_spm_regs, wdt_latch_spare0_fix, 0x0780);
+check_member(mtk_spm_regs, pcm_wdt_latch_0, 0x0800);
+check_member(mtk_spm_regs, spm_pc_trace_con, 0x08c0);
+check_member(mtk_spm_regs, spm_ack_chk_con, 0x0900);
+check_member(mtk_spm_regs, spm_ack_chk_con2, 0x0920);
+check_member(mtk_spm_regs, spm_ack_chk_con3, 0x0940);
+check_member(mtk_spm_regs, spm_ack_chk_con4, 0x0960);
+check_member(mtk_spm_regs, spm_ack_chk_latch4, 0x0974);
+
+static struct mtk_spm_regs *const mtk_spm = (void *)SPM_BASE;
+
+#endif /* SOC_MEDIATEK_MT8183_SPM_H */