coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
spm.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 /*
4  * This file is created based on MT8186 Functional Specification
5  * Chapter number: 3.5
6  */
7 
8 #include <assert.h>
9 #include <console/console.h>
10 #include <delay.h>
11 #include <soc/mcu_common.h>
12 #include <soc/spm.h>
13 #include <soc/spm_common.h>
14 #include <soc/symbols.h>
15 #include <timer.h>
16 
17 #define SPM_SYSTEM_BASE_OFFSET 0x40000000
18 
19 static const struct pwr_ctrl spm_init_ctrl = {
20  /* For SPM, this flag is not auto-gen. */
24 
25  /* Auto-gen Start */
26 
27  /* SPM_AP_STANDBY_CON */
28  .reg_wfi_op = 0,
29  .reg_wfi_type = 0,
30  .reg_mp0_cputop_idle_mask = 0,
31  .reg_mp1_cputop_idle_mask = 0,
32  .reg_mcusys_idle_mask = 0,
33  .reg_md_apsrc_1_sel = 0,
34  .reg_md_apsrc_0_sel = 0,
35  .reg_conn_apsrc_sel = 0,
36 
37  /* SPM_SRC6_MASK */
38  .reg_ccif_event_infra_req_mask_b = 0xFFFF,
39  .reg_ccif_event_apsrc_req_mask_b = 0xFFFF,
40 
41  /* SPM_SRC_REQ */
42  .reg_spm_apsrc_req = 0,
43  .reg_spm_f26m_req = 0,
44  .reg_spm_infra_req = 0,
45  .reg_spm_vrf18_req = 0,
46  .reg_spm_ddren_req = 0,
47  .reg_spm_dvfs_req = 0,
48  .reg_spm_sw_mailbox_req = 0,
49  .reg_spm_sspm_mailbox_req = 0,
50  .reg_spm_adsp_mailbox_req = 0,
51  .reg_spm_scp_mailbox_req = 0,
52 
53  /* SPM_SRC_MASK */
54  .reg_md_0_srcclkena_mask_b = 1,
55  .reg_md_0_infra_req_mask_b = 1,
56  .reg_md_0_apsrc_req_mask_b = 1,
57  .reg_md_0_vrf18_req_mask_b = 1,
58  .reg_md_0_ddren_req_mask_b = 1,
59  .reg_md_1_srcclkena_mask_b = 0,
60  .reg_md_1_infra_req_mask_b = 0,
61  .reg_md_1_apsrc_req_mask_b = 0,
62  .reg_md_1_vrf18_req_mask_b = 0,
63  .reg_md_1_ddren_req_mask_b = 0,
64  .reg_conn_srcclkena_mask_b = 1,
65  .reg_conn_srcclkenb_mask_b = 0,
66  .reg_conn_infra_req_mask_b = 1,
67  .reg_conn_apsrc_req_mask_b = 1,
68  .reg_conn_vrf18_req_mask_b = 1,
69  .reg_conn_ddren_req_mask_b = 1,
70  .reg_conn_vfe28_mask_b = 0,
71  .reg_srcclkeni_srcclkena_mask_b = 1,
72  .reg_srcclkeni_infra_req_mask_b = 1,
73  .reg_infrasys_apsrc_req_mask_b = 0,
74  .reg_infrasys_ddren_req_mask_b = 1,
75  .reg_sspm_srcclkena_mask_b = 1,
76  .reg_sspm_infra_req_mask_b = 1,
77  .reg_sspm_apsrc_req_mask_b = 1,
78  .reg_sspm_vrf18_req_mask_b = 1,
79  .reg_sspm_ddren_req_mask_b = 1,
80 
81  /* SPM_SRC2_MASK */
82  .reg_scp_srcclkena_mask_b = 1,
83  .reg_scp_infra_req_mask_b = 1,
84  .reg_scp_apsrc_req_mask_b = 1,
85  .reg_scp_vrf18_req_mask_b = 1,
86  .reg_scp_ddren_req_mask_b = 1,
87  .reg_audio_dsp_srcclkena_mask_b = 1,
88  .reg_audio_dsp_infra_req_mask_b = 1,
89  .reg_audio_dsp_apsrc_req_mask_b = 1,
90  .reg_audio_dsp_vrf18_req_mask_b = 1,
91  .reg_audio_dsp_ddren_req_mask_b = 1,
92  .reg_ufs_srcclkena_mask_b = 1,
93  .reg_ufs_infra_req_mask_b = 1,
94  .reg_ufs_apsrc_req_mask_b = 1,
95  .reg_ufs_vrf18_req_mask_b = 1,
96  .reg_ufs_ddren_req_mask_b = 1,
97  .reg_disp0_apsrc_req_mask_b = 1,
98  .reg_disp0_ddren_req_mask_b = 1,
99  .reg_disp1_apsrc_req_mask_b = 1,
100  .reg_disp1_ddren_req_mask_b = 1,
101  .reg_gce_infra_req_mask_b = 1,
102  .reg_gce_apsrc_req_mask_b = 1,
103  .reg_gce_vrf18_req_mask_b = 1,
104  .reg_gce_ddren_req_mask_b = 1,
105  .reg_apu_srcclkena_mask_b = 0,
106  .reg_apu_infra_req_mask_b = 0,
107  .reg_apu_apsrc_req_mask_b = 0,
108  .reg_apu_vrf18_req_mask_b = 0,
109  .reg_apu_ddren_req_mask_b = 0,
110  .reg_cg_check_srcclkena_mask_b = 0,
111  .reg_cg_check_apsrc_req_mask_b = 0,
112  .reg_cg_check_vrf18_req_mask_b = 0,
113  .reg_cg_check_ddren_req_mask_b = 0,
114 
115  /* SPM_SRC3_MASK */
116  .reg_dvfsrc_event_trigger_mask_b = 1,
117  .reg_sw2spm_wakeup_mask_b = 0,
118  .reg_adsp2spm_wakeup_mask_b = 0,
119  .reg_sspm2spm_wakeup_mask_b = 0,
120  .reg_scp2spm_wakeup_mask_b = 0,
121  .reg_csyspwrup_ack_mask = 1,
122  .reg_spm_reserved_srcclkena_mask_b = 0,
123  .reg_spm_reserved_infra_req_mask_b = 0,
124  .reg_spm_reserved_apsrc_req_mask_b = 0,
125  .reg_spm_reserved_vrf18_req_mask_b = 0,
126  .reg_spm_reserved_ddren_req_mask_b = 0,
127  .reg_mcupm_srcclkena_mask_b = 1,
128  .reg_mcupm_infra_req_mask_b = 1,
129  .reg_mcupm_apsrc_req_mask_b = 1,
130  .reg_mcupm_vrf18_req_mask_b = 1,
131  .reg_mcupm_ddren_req_mask_b = 1,
132  .reg_msdc0_srcclkena_mask_b = 1,
133  .reg_msdc0_infra_req_mask_b = 1,
134  .reg_msdc0_apsrc_req_mask_b = 1,
135  .reg_msdc0_vrf18_req_mask_b = 1,
136  .reg_msdc0_ddren_req_mask_b = 1,
137  .reg_msdc1_srcclkena_mask_b = 1,
138  .reg_msdc1_infra_req_mask_b = 1,
139  .reg_msdc1_apsrc_req_mask_b = 1,
140  .reg_msdc1_vrf18_req_mask_b = 1,
141  .reg_msdc1_ddren_req_mask_b = 1,
142 
143  /* SPM_SRC4_MASK */
144  .reg_ccif_event_srcclkena_mask_b = 0x3FF,
145  .reg_bak_psri_srcclkena_mask_b = 0,
146  .reg_bak_psri_infra_req_mask_b = 0,
147  .reg_bak_psri_apsrc_req_mask_b = 0,
148  .reg_bak_psri_vrf18_req_mask_b = 0,
149  .reg_bak_psri_ddren_req_mask_b = 0,
150  .reg_dramc_md32_infra_req_mask_b = 1,
151  .reg_dramc_md32_vrf18_req_mask_b = 0,
152  .reg_conn_srcclkenb2pwrap_mask_b = 0,
153  .reg_dramc_md32_apsrc_req_mask_b = 0,
154 
155  /* SPM_SRC5_MASK */
156  .reg_mcusys_merge_apsrc_req_mask_b = 0x14,
157  .reg_mcusys_merge_ddren_req_mask_b = 0x14,
158  .reg_afe_srcclkena_mask_b = 0,
159  .reg_afe_infra_req_mask_b = 0,
160  .reg_afe_apsrc_req_mask_b = 0,
161  .reg_afe_vrf18_req_mask_b = 0,
162  .reg_afe_ddren_req_mask_b = 0,
163  .reg_msdc2_srcclkena_mask_b = 0,
164  .reg_msdc2_infra_req_mask_b = 0,
165  .reg_msdc2_apsrc_req_mask_b = 0,
166  .reg_msdc2_vrf18_req_mask_b = 0,
167  .reg_msdc2_ddren_req_mask_b = 0,
168 
169  /* SPM_WAKEUP_EVENT_MASK */
170  .reg_wakeup_event_mask = 0xEFFFFFFF,
171 
172  /* SPM_WAKEUP_EVENT_EXT_MASK */
173  .reg_ext_wakeup_event_mask = 0xFFFFFFFF,
174 
175  /* SPM_SRC7_MASK */
176  .reg_pcie_srcclkena_mask_b = 0,
177  .reg_pcie_infra_req_mask_b = 0,
178  .reg_pcie_apsrc_req_mask_b = 0,
179  .reg_pcie_vrf18_req_mask_b = 0,
180  .reg_pcie_ddren_req_mask_b = 0,
181  .reg_dpmaif_srcclkena_mask_b = 1,
182  .reg_dpmaif_infra_req_mask_b = 1,
183  .reg_dpmaif_apsrc_req_mask_b = 1,
184  .reg_dpmaif_vrf18_req_mask_b = 1,
185  .reg_dpmaif_ddren_req_mask_b = 1,
186 
187  /* Auto-gen End */
188 };
189 
190 static void spm_set_power_control(const struct pwr_ctrl *pwrctrl)
191 {
192  /* Auto-gen Start */
193 
194  /* SPM_AP_STANDBY_CON */
196  ((pwrctrl->reg_wfi_op & 0x1) << 0) |
197  ((pwrctrl->reg_wfi_type & 0x1) << 1) |
198  ((pwrctrl->reg_mp0_cputop_idle_mask & 0x1) << 2) |
199  ((pwrctrl->reg_mp1_cputop_idle_mask & 0x1) << 3) |
200  ((pwrctrl->reg_mcusys_idle_mask & 0x1) << 4) |
201  ((pwrctrl->reg_md_apsrc_1_sel & 0x1) << 25) |
202  ((pwrctrl->reg_md_apsrc_0_sel & 0x1) << 26) |
203  ((pwrctrl->reg_conn_apsrc_sel & 0x1) << 29));
204 
205  /* SPM_SRC6_MASK */
207  ((pwrctrl->reg_ccif_event_infra_req_mask_b & 0xffff) << 0) |
208  ((pwrctrl->reg_ccif_event_apsrc_req_mask_b & 0xffff) << 16));
209 
210  /* SPM_SRC_REQ */
212  ((pwrctrl->reg_spm_apsrc_req & 0x1) << 0) |
213  ((pwrctrl->reg_spm_f26m_req & 0x1) << 1) |
214  ((pwrctrl->reg_spm_infra_req & 0x1) << 3) |
215  ((pwrctrl->reg_spm_vrf18_req & 0x1) << 4) |
216  ((pwrctrl->reg_spm_ddren_req & 0x1) << 7) |
217  ((pwrctrl->reg_spm_dvfs_req & 0x1) << 8) |
218  ((pwrctrl->reg_spm_sw_mailbox_req & 0x1) << 9) |
219  ((pwrctrl->reg_spm_sspm_mailbox_req & 0x1) << 10) |
220  ((pwrctrl->reg_spm_adsp_mailbox_req & 0x1) << 11) |
221  ((pwrctrl->reg_spm_scp_mailbox_req & 0x1) << 12));
222 
223  /* SPM_SRC_MASK */
225  ((pwrctrl->reg_md_0_srcclkena_mask_b & 0x1) << 0) |
226  ((pwrctrl->reg_md_0_infra_req_mask_b & 0x1) << 1) |
227  ((pwrctrl->reg_md_0_apsrc_req_mask_b & 0x1) << 2) |
228  ((pwrctrl->reg_md_0_vrf18_req_mask_b & 0x1) << 3) |
229  ((pwrctrl->reg_md_0_ddren_req_mask_b & 0x1) << 4) |
230  ((pwrctrl->reg_md_1_srcclkena_mask_b & 0x1) << 5) |
231  ((pwrctrl->reg_md_1_infra_req_mask_b & 0x1) << 6) |
232  ((pwrctrl->reg_md_1_apsrc_req_mask_b & 0x1) << 7) |
233  ((pwrctrl->reg_md_1_vrf18_req_mask_b & 0x1) << 8) |
234  ((pwrctrl->reg_md_1_ddren_req_mask_b & 0x1) << 9) |
235  ((pwrctrl->reg_conn_srcclkena_mask_b & 0x1) << 10) |
236  ((pwrctrl->reg_conn_srcclkenb_mask_b & 0x1) << 11) |
237  ((pwrctrl->reg_conn_infra_req_mask_b & 0x1) << 12) |
238  ((pwrctrl->reg_conn_apsrc_req_mask_b & 0x1) << 13) |
239  ((pwrctrl->reg_conn_vrf18_req_mask_b & 0x1) << 14) |
240  ((pwrctrl->reg_conn_ddren_req_mask_b & 0x1) << 15) |
241  ((pwrctrl->reg_conn_vfe28_mask_b & 0x1) << 16) |
242  ((pwrctrl->reg_srcclkeni_srcclkena_mask_b & 0x7) << 17) |
243  ((pwrctrl->reg_srcclkeni_infra_req_mask_b & 0x7) << 20) |
244  ((pwrctrl->reg_infrasys_apsrc_req_mask_b & 0x1) << 25) |
245  ((pwrctrl->reg_infrasys_ddren_req_mask_b & 0x1) << 26) |
246  ((pwrctrl->reg_sspm_srcclkena_mask_b & 0x1) << 27) |
247  ((pwrctrl->reg_sspm_infra_req_mask_b & 0x1) << 28) |
248  ((pwrctrl->reg_sspm_apsrc_req_mask_b & 0x1) << 29) |
249  ((pwrctrl->reg_sspm_vrf18_req_mask_b & 0x1) << 30) |
250  ((pwrctrl->reg_sspm_ddren_req_mask_b & 0x1) << 31));
251 
252  /* SPM_SRC2_MASK */
254  ((pwrctrl->reg_scp_srcclkena_mask_b & 0x1) << 0) |
255  ((pwrctrl->reg_scp_infra_req_mask_b & 0x1) << 1) |
256  ((pwrctrl->reg_scp_apsrc_req_mask_b & 0x1) << 2) |
257  ((pwrctrl->reg_scp_vrf18_req_mask_b & 0x1) << 3) |
258  ((pwrctrl->reg_scp_ddren_req_mask_b & 0x1) << 4) |
259  ((pwrctrl->reg_audio_dsp_srcclkena_mask_b & 0x1) << 5) |
260  ((pwrctrl->reg_audio_dsp_infra_req_mask_b & 0x1) << 6) |
261  ((pwrctrl->reg_audio_dsp_apsrc_req_mask_b & 0x1) << 7) |
262  ((pwrctrl->reg_audio_dsp_vrf18_req_mask_b & 0x1) << 8) |
263  ((pwrctrl->reg_audio_dsp_ddren_req_mask_b & 0x1) << 9) |
264  ((pwrctrl->reg_ufs_srcclkena_mask_b & 0x1) << 10) |
265  ((pwrctrl->reg_ufs_infra_req_mask_b & 0x1) << 11) |
266  ((pwrctrl->reg_ufs_apsrc_req_mask_b & 0x1) << 12) |
267  ((pwrctrl->reg_ufs_vrf18_req_mask_b & 0x1) << 13) |
268  ((pwrctrl->reg_ufs_ddren_req_mask_b & 0x1) << 14) |
269  ((pwrctrl->reg_disp0_apsrc_req_mask_b & 0x1) << 15) |
270  ((pwrctrl->reg_disp0_ddren_req_mask_b & 0x1) << 16) |
271  ((pwrctrl->reg_disp1_apsrc_req_mask_b & 0x1) << 17) |
272  ((pwrctrl->reg_disp1_ddren_req_mask_b & 0x1) << 18) |
273  ((pwrctrl->reg_gce_infra_req_mask_b & 0x1) << 19) |
274  ((pwrctrl->reg_gce_apsrc_req_mask_b & 0x1) << 20) |
275  ((pwrctrl->reg_gce_vrf18_req_mask_b & 0x1) << 21) |
276  ((pwrctrl->reg_gce_ddren_req_mask_b & 0x1) << 22) |
277  ((pwrctrl->reg_apu_srcclkena_mask_b & 0x1) << 23) |
278  ((pwrctrl->reg_apu_infra_req_mask_b & 0x1) << 24) |
279  ((pwrctrl->reg_apu_apsrc_req_mask_b & 0x1) << 25) |
280  ((pwrctrl->reg_apu_vrf18_req_mask_b & 0x1) << 26) |
281  ((pwrctrl->reg_apu_ddren_req_mask_b & 0x1) << 27) |
282  ((pwrctrl->reg_cg_check_srcclkena_mask_b & 0x1) << 28) |
283  ((pwrctrl->reg_cg_check_apsrc_req_mask_b & 0x1) << 29) |
284  ((pwrctrl->reg_cg_check_vrf18_req_mask_b & 0x1) << 30) |
285  ((pwrctrl->reg_cg_check_ddren_req_mask_b & 0x1) << 31));
286 
287  /* SPM_SRC3_MASK */
289  ((pwrctrl->reg_dvfsrc_event_trigger_mask_b & 0x1) << 0) |
290  ((pwrctrl->reg_sw2spm_wakeup_mask_b & 0xf) << 1) |
291  ((pwrctrl->reg_adsp2spm_wakeup_mask_b & 0x1) << 5) |
292  ((pwrctrl->reg_sspm2spm_wakeup_mask_b & 0xf) << 6) |
293  ((pwrctrl->reg_scp2spm_wakeup_mask_b & 0x1) << 10) |
294  ((pwrctrl->reg_csyspwrup_ack_mask & 0x1) << 11) |
295  ((pwrctrl->reg_spm_reserved_srcclkena_mask_b & 0x1) << 12) |
296  ((pwrctrl->reg_spm_reserved_infra_req_mask_b & 0x1) << 13) |
297  ((pwrctrl->reg_spm_reserved_apsrc_req_mask_b & 0x1) << 14) |
298  ((pwrctrl->reg_spm_reserved_vrf18_req_mask_b & 0x1) << 15) |
299  ((pwrctrl->reg_spm_reserved_ddren_req_mask_b & 0x1) << 16) |
300  ((pwrctrl->reg_mcupm_srcclkena_mask_b & 0x1) << 17) |
301  ((pwrctrl->reg_mcupm_infra_req_mask_b & 0x1) << 18) |
302  ((pwrctrl->reg_mcupm_apsrc_req_mask_b & 0x1) << 19) |
303  ((pwrctrl->reg_mcupm_vrf18_req_mask_b & 0x1) << 20) |
304  ((pwrctrl->reg_mcupm_ddren_req_mask_b & 0x1) << 21) |
305  ((pwrctrl->reg_msdc0_srcclkena_mask_b & 0x1) << 22) |
306  ((pwrctrl->reg_msdc0_infra_req_mask_b & 0x1) << 23) |
307  ((pwrctrl->reg_msdc0_apsrc_req_mask_b & 0x1) << 24) |
308  ((pwrctrl->reg_msdc0_vrf18_req_mask_b & 0x1) << 25) |
309  ((pwrctrl->reg_msdc0_ddren_req_mask_b & 0x1) << 26) |
310  ((pwrctrl->reg_msdc1_srcclkena_mask_b & 0x1) << 27) |
311  ((pwrctrl->reg_msdc1_infra_req_mask_b & 0x1) << 28) |
312  ((pwrctrl->reg_msdc1_apsrc_req_mask_b & 0x1) << 29) |
313  ((pwrctrl->reg_msdc1_vrf18_req_mask_b & 0x1) << 30) |
314  ((pwrctrl->reg_msdc1_ddren_req_mask_b & 0x1) << 31));
315 
316  /* SPM_SRC4_MASK */
318  ((pwrctrl->reg_ccif_event_srcclkena_mask_b & 0xffff) << 0) |
319  ((pwrctrl->reg_bak_psri_srcclkena_mask_b & 0x1) << 16) |
320  ((pwrctrl->reg_bak_psri_infra_req_mask_b & 0x1) << 17) |
321  ((pwrctrl->reg_bak_psri_apsrc_req_mask_b & 0x1) << 18) |
322  ((pwrctrl->reg_bak_psri_vrf18_req_mask_b & 0x1) << 19) |
323  ((pwrctrl->reg_bak_psri_ddren_req_mask_b & 0x1) << 20) |
324  ((pwrctrl->reg_dramc_md32_infra_req_mask_b & 0x3) << 21) |
325  ((pwrctrl->reg_dramc_md32_vrf18_req_mask_b & 0x3) << 23) |
326  ((pwrctrl->reg_conn_srcclkenb2pwrap_mask_b & 0x1) << 25) |
327  ((pwrctrl->reg_dramc_md32_apsrc_req_mask_b & 0x3) << 26));
328 
329  /* SPM_SRC5_MASK */
331  ((pwrctrl->reg_mcusys_merge_apsrc_req_mask_b & 0x1ff) << 0) |
332  ((pwrctrl->reg_mcusys_merge_ddren_req_mask_b & 0x1ff) << 9) |
333  ((pwrctrl->reg_afe_srcclkena_mask_b & 0x1) << 18) |
334  ((pwrctrl->reg_afe_infra_req_mask_b & 0x1) << 19) |
335  ((pwrctrl->reg_afe_apsrc_req_mask_b & 0x1) << 20) |
336  ((pwrctrl->reg_afe_vrf18_req_mask_b & 0x1) << 21) |
337  ((pwrctrl->reg_afe_ddren_req_mask_b & 0x1) << 22) |
338  ((pwrctrl->reg_msdc2_srcclkena_mask_b & 0x1) << 23) |
339  ((pwrctrl->reg_msdc2_infra_req_mask_b & 0x1) << 24) |
340  ((pwrctrl->reg_msdc2_apsrc_req_mask_b & 0x1) << 25) |
341  ((pwrctrl->reg_msdc2_vrf18_req_mask_b & 0x1) << 26) |
342  ((pwrctrl->reg_msdc2_ddren_req_mask_b & 0x1) << 27));
343 
344  /* SPM_WAKEUP_EVENT_MASK */
346  ((pwrctrl->reg_wakeup_event_mask & 0xffffffff) << 0));
347 
348  /* SPM_WAKEUP_EVENT_EXT_MASK */
350  ((pwrctrl->reg_ext_wakeup_event_mask & 0xffffffff) << 0));
351 
352  /* SPM_SRC7_MASK */
354  ((pwrctrl->reg_pcie_srcclkena_mask_b & 0x1) << 0) |
355  ((pwrctrl->reg_pcie_infra_req_mask_b & 0x1) << 1) |
356  ((pwrctrl->reg_pcie_apsrc_req_mask_b & 0x1) << 2) |
357  ((pwrctrl->reg_pcie_vrf18_req_mask_b & 0x1) << 3) |
358  ((pwrctrl->reg_pcie_ddren_req_mask_b & 0x1) << 4) |
359  ((pwrctrl->reg_dpmaif_srcclkena_mask_b & 0x1) << 5) |
360  ((pwrctrl->reg_dpmaif_infra_req_mask_b & 0x1) << 6) |
361  ((pwrctrl->reg_dpmaif_apsrc_req_mask_b & 0x1) << 7) |
362  ((pwrctrl->reg_dpmaif_vrf18_req_mask_b & 0x1) << 8) |
363  ((pwrctrl->reg_dpmaif_ddren_req_mask_b & 0x1) << 9));
364  /* Auto-gen End */
365 
366  /* Disable unused optional components */
367  write32(&mtk_spm->nna_pwr_con, BIT(1) | BIT(4) | BIT(8));
368 }
369 
370 static void spm_hw_s1_state_monitor(int en)
371 {
372  if (en)
375  SPM_ACK_CHK_3_CON_EN_0, 1,
376  SPM_ACK_CHK_3_CON_EN_1, 1);
377  else
379  SPM_ACK_CHK_3_CON_HW_MODE_TRIG_0, 1,
380  SPM_ACK_CHK_3_CON_HW_MODE_TRIG_1, 1,
382  SPM_ACK_CHK_3_CON_EN_0, 0,
383  SPM_ACK_CHK_3_CON_EN_1, 0);
384 }
385 
386 static void spm_register_init(void)
387 {
388  /* Enable register control */
391 
392  /* Init power control register */
395 
396  /* Reset PCM */
403 
404  /* Initial SPM CLK control register */
407 
408  /* Clean wakeup event raw status */
410 
411  /* Clean ISR status */
415 
416  /* Init r7 with POWER_ON_VAL1 */
421 
422  /* DDR EN de-bounce length to 5us */
424 
425  /* Configure ARMPLL Control Mode for MCDI */
427 
428  /* Init for SPM Resource ACK */
433 
434  /* Enable Side-Band */
439 
440  /* Init VCORE DVFS Status */
446 
449 
451 }
452 
453 static void spm_extern_initialize(void)
454 {
456  INFRA_AO_RES_CTRL_MASK_EMI_IDLE, 1,
457  INFRA_AO_RES_CTRL_MASK_MPU_IDLE, 1);
458 }
459 
460 static void spm_set_sysclk_settle(void)
461 {
463 }
464 
465 static void spm_code_swapping(void)
466 {
467  u32 mask;
468 
475 }
476 
477 static void spm_reset_and_init_pcm(void)
478 {
479  bool first_load_fw = true;
480 
481  /* Check whether the SPM FW is running */
483  first_load_fw = false;
484 
485  if (!first_load_fw) {
487  /* Backup PCM r0 -> SPM_POWER_ON_VAL0 before reset PCM */
490  }
491 
492  /* Disable r0 and r7 to control power */
494 
495  /* Disable pcm timer after leaving FW */
498 
499  /* Reset PCM */
503 
504  /* Init PCM_CON1 (disable PCM timer but keep PCM WDT setting) */
507 }
508 
509 static void spm_kick_im_to_fetch(const struct dyna_load_pcm *pcm)
510 {
511  uintptr_t ptr;
512  u32 dmem_words;
513  u32 pmem_words;
514  u32 total_words;
515  u32 pmem_start;
516  u32 dmem_start;
517 
518  ptr = (uintptr_t)pcm->buf + SPM_SYSTEM_BASE_OFFSET;
519  pmem_words = pcm->desc.pmem_words;
520  total_words = pcm->desc.total_words;
521  dmem_words = total_words - pmem_words;
522  pmem_start = pcm->desc.pmem_start;
523  dmem_start = pcm->desc.dmem_start;
524 
525  printk(BIOS_DEBUG, "%s: ptr = %#lx, pmem/dmem words = %#x/%#x\n",
526  __func__, (long)ptr, pmem_words, dmem_words);
527 
528  /* DMA needs 16-byte aligned source data. */
529  assert(ptr % 16 == 0);
530 
531  write32((void *)MD32PCM_DMA0_SRC, ptr);
532  write32((void *)MD32PCM_DMA0_DST, pmem_start);
533  write32((void *)MD32PCM_DMA0_WPPT, pmem_words);
534  write32((void *)MD32PCM_DMA0_WPTO, dmem_start);
535  write32((void *)MD32PCM_DMA0_COUNT, total_words);
538 
540 }
541 
542 static void spm_init_pcm_register(void)
543 {
544  /* Init r0 with POWER_ON_VAL0 */
549 
550  /* Init r7 with POWER_ON_VAL1 */
555 }
556 
557 static void spm_set_wakeup_event(const struct pwr_ctrl *pwrctrl)
558 {
559  u32 val, mask;
560 
561  /* Toggle event counter clear */
564 
565  /* Toggle for reset SYS TIMER start point */
568 
569  if (pwrctrl->timer_val_cust == 0)
570  val = pwrctrl->timer_val ? pwrctrl->timer_val : PCM_TIMER_MAX;
571  else
572  val = pwrctrl->timer_val_cust;
573 
575 
577 
578  /* Unmask AP wakeup source */
579  if (pwrctrl->wake_src_cust == 0)
580  mask = pwrctrl->wake_src;
581  else
582  mask = pwrctrl->wake_src_cust;
583 
584  if (pwrctrl->reg_csyspwrup_ack_mask)
585  mask &= ~R12_CSYSPWREQ_B;
587 
588  /* Unmask SPM ISR */
590 
591  /* Toggle event counter clear */
593 
594  /* Toggle for reset SYS TIMER start point */
597 }
598 
599 static void spm_set_pcm_flags(const struct pwr_ctrl *pwrctrl)
600 {
601  u32 pcm_flags = pwrctrl->pcm_flags, pcm_flags1 = pwrctrl->pcm_flags1;
602 
603  /* Set PCM flags and data */
604  if (pwrctrl->pcm_flags_cust_clr != 0)
605  pcm_flags &= ~pwrctrl->pcm_flags_cust_clr;
606  if (pwrctrl->pcm_flags_cust_set != 0)
607  pcm_flags |= pwrctrl->pcm_flags_cust_set;
608  if (pwrctrl->pcm_flags1_cust_clr != 0)
609  pcm_flags1 &= ~pwrctrl->pcm_flags1_cust_clr;
610  if (pwrctrl->pcm_flags1_cust_set != 0)
611  pcm_flags1 |= pwrctrl->pcm_flags1_cust_set;
612 
617 }
618 
619 static void spm_kick_pcm_to_run(const struct pwr_ctrl *pwrctrl)
620 {
621  /* Waiting for loading SPMFW done*/
622  while (read32((void *)MD32PCM_DMA0_RLCT) != 0x0)
623  ;
624 
625  /* Init register to match PCM expectation */
629 
630  spm_set_pcm_flags(pwrctrl);
631 
632  /* Kick PCM to run (only toggle PCM_KICK) */
634 
635  /* Reset md32pcm */
638 
639  /* Waiting for SPM init done */
641 }
642 
643 static void reset_spm(struct mtk_mcu *mcu)
644 {
645  struct dyna_load_pcm *pcm = (struct dyna_load_pcm *)mcu->priv;
646 
647  spm_parse_firmware(mcu);
654 }
655 
656 static struct mtk_mcu spm = {
657  .firmware_name = CONFIG_SPM_FIRMWARE,
658  .reset = reset_spm,
659 };
660 
661 int spm_init(void)
662 {
663  struct dyna_load_pcm pcm;
664  struct stopwatch sw;
665 
666  stopwatch_init(&sw);
667 
672 
673  spm.load_buffer = _dram_dma;
674  spm.buffer_size = REGION_SIZE(dram_dma);
675  spm.priv = (void *)&pcm;
676 
677  if (mtk_init_mcu(&spm)) {
678  printk(BIOS_ERR, "SPM: %s: failed in mtk_init_mcu\n", __func__);
679  return -1;
680  }
681 
682  printk(BIOS_INFO, "SPM: %s done in %ld msecs, spm pc = %#x\n",
683  __func__, stopwatch_duration_msecs(&sw),
685 
686  return 0;
687 }
static void write32(void *addr, uint32_t val)
Definition: mmio.h:40
static uint32_t read32(const void *addr)
Definition: mmio.h:22
#define assert(statement)
Definition: assert.h:74
void spm_parse_firmware(struct mtk_mcu *mcu)
Definition: spm.c:12
#define printk(level,...)
Definition: stdlib.h:16
#define BIT(nr)
Definition: ec_commands.h:45
#define setbits32(addr, set)
Definition: mmio.h:21
#define SET32_BITFIELDS(addr,...)
Definition: mmio.h:201
#define clrsetbits32(addr, clear, set)
Definition: mmio.h:16
#define REGION_SIZE(name)
Definition: symbols.h:10
static void stopwatch_init(struct stopwatch *sw)
Definition: timer.h:117
static long stopwatch_duration_msecs(struct stopwatch *sw)
Definition: timer.h:182
#define BIOS_INFO
BIOS_INFO - Expected events.
Definition: loglevel.h:113
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
Definition: loglevel.h:128
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
Definition: loglevel.h:72
int mtk_init_mcu(struct mtk_mcu *mcu)
Definition: mcu.c:10
static struct mtk_spm_regs *const mtk_spm
Definition: spm.h:154
#define PCM_CK_EN_LSB
Definition: spm.h:32
#define ISRM_RET_IRQ_AUX
Definition: spm.h:98
#define SPM_WAKEUP_EVENT_MASK_DEF
Definition: spm.h:88
#define ISRM_ALL
Definition: spm.h:100
#define PCM_SW_RESET_LSB
Definition: spm.h:35
#define PCM_SW_INT_ALL
Definition: spm.h:118
#define BCLK_CG_EN_LSB
Definition: spm.h:15
#define SPM_REGWR_CFG_KEY
Definition: spm.h:12
#define PCM_RF_SYNC_R0
Definition: spm.h:113
#define PCM_RF_SYNC_R7
Definition: spm.h:115
#define POWER_ON_VAL1_DEF
Definition: spm.h:82
#define ISRC_ALL
Definition: spm.h:108
int spm_init(void)
Definition: spm.c:298
#define REG_DDREN_DBC_EN_LSB
Definition: spm.h:49
#define SPM_FLAG_DISABLE_VCORE_DVS
Definition: spm.h:92
#define REG_MD32_APB_INTERNAL_EN_LSB
Definition: spm.h:47
#define MD32PCM_DMA0_DST
Definition: spm.h:29
#define SPM_ACK_CHK_3_SEL_HW_S1
Definition: spm.h:80
#define R12_CSYSPWREQ_B
Definition: spm.h:88
#define ARMPLL_CLK_SEL_DEF
Definition: spm.h:69
#define RG_PCM_WDT_WAKE_LSB
Definition: spm.h:85
#define MD32PCM_CFGREG_SW_RSTN
Definition: spm.h:27
#define MD32PCM_DMA0_START_VAL
Definition: spm.h:40
#define SPM_RESOURCE_ACK_CON0_DEF
Definition: spm.h:70
#define MD32PCM_DMA0_START
Definition: spm.h:34
#define AP_PLL_CON3
Definition: spm.h:22
#define SCP_CFG0_DEF
Definition: spm.h:76
#define SPM_INIT_DONE_US
Definition: spm.h:16
#define MD32PCM_DMA0_RLCT
Definition: spm.h:35
#define SPM_BUS_PROTECT2_MASK_B_DEF
Definition: spm.h:90
#define MD32PCM_DMA0_WPPT
Definition: spm.h:30
#define MD32PCM_DMA0_CON_VAL
Definition: spm.h:39
#define SPM_ACK_CHK_3_HW_S1_CNT
Definition: spm.h:81
#define SCP_CFG1_DEF
Definition: spm.h:77
#define MD32PCM_DMA0_SRC
Definition: spm.h:28
#define APMIX_CON3_DEF
Definition: spm.h:74
#define SPM_FLAG_DISABLE_VCORE_DFS
Definition: spm.h:93
#define DDREN_DBC_EN_VAL
Definition: spm.h:68
#define SPM_RESOURCE_ACK_CON2_DEF
Definition: spm.h:72
#define MD32PCM_CFGREG_SW_RSTN_RUN
Definition: spm.h:38
#define PCM_TIMER_MAX
Definition: spm.h:99
#define SPM_RESOURCE_ACK_CON1_DEF
Definition: spm.h:71
#define SPM_RESOURCE_ACK_CON3_DEF
Definition: spm.h:73
#define MD32PCM_DMA0_WPTO
Definition: spm.h:31
#define REG_SPM_EVENT_COUNTER_CLR_LSB
Definition: spm.h:87
#define SPM_WAKEUP_EVENT_MASK_BIT0
Definition: spm.h:83
#define SPM_SYSCLK_SETTLE
Definition: spm.h:82
#define SPM_BUS_PROTECT_MASK_B_DEF
Definition: spm.h:89
#define RG_PCM_TIMER_EN_LSB
Definition: spm.h:84
#define AP_PLL_CON4
Definition: spm.h:23
#define CLK_SCP_CFG_0
Definition: spm.h:18
#define RG_AHBMIF_APBEN_LSB
Definition: spm.h:46
#define CLK_SCP_CFG_1
Definition: spm.h:19
#define SPM_DVS_DFS_LEVEL_DEF
Definition: spm.h:79
#define SPM_FLAG_RUN_COMMON_SCENARIO
Definition: spm.h:94
#define MD32PCM_DMA0_COUNT
Definition: spm.h:32
#define APMIX_CON4_DEF
Definition: spm.h:75
#define MD32PCM_DMA0_CON
Definition: spm.h:33
#define SPM_DVFS_LEVEL_DEF
Definition: spm.h:78
static void spm_hw_s1_state_monitor(int en)
Definition: spm.c:370
static void spm_code_swapping(void)
Definition: spm.c:465
static void spm_set_wakeup_event(const struct pwr_ctrl *pwrctrl)
Definition: spm.c:557
static void spm_extern_initialize(void)
Definition: spm.c:453
static void reset_spm(struct mtk_mcu *mcu)
Definition: spm.c:643
static void spm_set_pcm_flags(const struct pwr_ctrl *pwrctrl)
Definition: spm.c:599
static void spm_kick_im_to_fetch(const struct dyna_load_pcm *pcm)
Definition: spm.c:509
static void spm_kick_pcm_to_run(const struct pwr_ctrl *pwrctrl)
Definition: spm.c:619
static void spm_init_pcm_register(void)
Definition: spm.c:542
static void spm_reset_and_init_pcm(void)
Definition: spm.c:477
static void spm_set_sysclk_settle(void)
Definition: spm.c:460
static void spm_register_init(void)
Definition: spm.c:386
static void spm_set_power_control(const struct pwr_ctrl *pwrctrl)
Definition: spm.c:190
static struct mtk_mcu spm
Definition: spm.c:656
#define SPM_SYSTEM_BASE_OFFSET
Definition: spm.c:17
static const struct pwr_ctrl spm_init_ctrl
Definition: spm.c:19
#define SYS_TIMER_START_EN_LSB
Definition: spm.h:51
#define SPM_DVFSRC_ENABLE_LSB
Definition: spm.h:43
#define SPM_DVFS_FORCE_ENABLE_LSB
Definition: spm.h:42
#define MD32PCM_CFGREG_SW_RSTN_RESET
Definition: spm.h:54
#define REG_SYSCLK1_SRC_MD2_SRCCLKENA
Definition: spm.h:18
#define SPM_ACK_CHK_3_CON_CLR_ALL
Definition: spm.h:65
static const int mask[4]
Definition: gpio.c:308
uint32_t u32
Definition: stdint.h:51
unsigned long uintptr_t
Definition: stdint.h:21
u32 * buf
Definition: spm.h:578
struct pcm_desc desc
Definition: spm.h:579
size_t buffer_size
Definition: mcu_common.h:11
const char * firmware_name
Definition: mcu_common.h:7
void * priv
Definition: mcu_common.h:12
void * load_buffer
Definition: mcu_common.h:10
uint32_t armpll_clk_sel
Definition: spm.h:269
u32 spm_clk_settle
Definition: spm.h:136
u32 spm_cpu_wakeup_event
Definition: spm.h:161
uint32_t nna_pwr_con
Definition: spm.h:353
u32 pcm_con1
Definition: spm.h:71
uint32_t spm_bus_protect_mask_b
Definition: spm.h:361
u32 pcm_pwr_io_en
Definition: spm.h:82
uint32_t spm_resource_ack_con2
Definition: spm.h:193
uint32_t spm_resource_ack_con1
Definition: spm.h:192
uint32_t spm_src6_mask
Definition: spm.h:162
u32 spm_power_on_val1
Definition: spm.h:134
uint32_t spm_bus_protect2_mask_b
Definition: spm.h:363
u32 spm_irq_mask
Definition: spm.h:162
u32 spm_swint_clr
Definition: spm.h:154
uint32_t spm_dvs_dfs_level
Definition: spm.h:422
u32 spm_src_req
Definition: spm.h:163
uint32_t spm_src4_mask
Definition: spm.h:181
u32 pcm_reg_data_ini
Definition: spm.h:74
u32 spm_wakeup_event_ext_mask
Definition: spm.h:167
u32 spm_src3_mask
Definition: spm.h:173
u32 spm_irq_sta
Definition: spm.h:199
u32 spm_sw_rsv_7
Definition: spm.h:428
uint32_t spm_src5_mask
Definition: spm.h:182
uint32_t sys_timer_con
Definition: spm.h:615
u32 spm_sw_rsv_8
Definition: spm.h:429
u32 spm_clk_con
Definition: spm.h:135
u32 spm_power_on_val0
Definition: spm.h:133
uint32_t spm_ack_chk_timer_3
Definition: spm.h:609
uint32_t spm_src7_mask
Definition: spm.h:185
u32 pcm_timer_val
Definition: spm.h:83
uint32_t spm_resource_ack_con0
Definition: spm.h:191
uint32_t spm_sw_flag_1
Definition: spm.h:427
uint32_t md32pcm_pc
Definition: spm.h:231
uint32_t spm_sw_flag_0
Definition: spm.h:425
u32 spm_src_mask
Definition: spm.h:164
uint32_t ddren_dbc_con
Definition: spm.h:189
u32 spm_wakeup_event_mask
Definition: spm.h:166
u32 poweron_config_set
Definition: spm.h:24
u32 spm_dvfs_misc
Definition: spm.h:446
u32 spm_dvfs_level
Definition: spm.h:441
uint32_t spm_ack_chk_sel_3
Definition: spm.h:608
uint32_t spm_resource_ack_con3
Definition: spm.h:194
u32 spm_src2_mask
Definition: spm.h:165
u32 spm_ap_standby_con
Definition: spm.h:137
uint32_t spm_ack_chk_con_3
Definition: spm.h:606
u32 pcm_con0
Definition: spm.h:70
u32 pcm_reg0_data
Definition: spm.h:177
uint32_t dmem_start
Definition: spm.h:850
uint32_t total_words
Definition: spm.h:848
uint32_t pmem_words
Definition: spm.h:847
uint32_t pmem_start
Definition: spm.h:849
Definition: spm.h:654
uint8_t reg_md_1_infra_req_mask_b
Definition: spm.h:707
uint8_t reg_sspm_apsrc_req_mask_b
Definition: spm.h:724
uint8_t reg_dpmaif_srcclkena_mask_b
Definition: spm.h:828
uint8_t reg_conn_vfe28_mask_b
Definition: spm.h:717
uint8_t reg_bak_psri_apsrc_req_mask_b
Definition: spm.h:794
uint8_t reg_gce_ddren_req_mask_b
Definition: spm.h:751
uint8_t reg_msdc1_infra_req_mask_b
Definition: spm.h:785
uint8_t reg_apu_vrf18_req_mask_b
Definition: spm.h:755
uint8_t reg_apu_infra_req_mask_b
Definition: spm.h:753
uint8_t reg_spm_reserved_apsrc_req_mask_b
Definition: spm.h:771
uint8_t reg_scp_ddren_req_mask_b
Definition: spm.h:733
uint32_t wake_src
Definition: spm.h:668
uint8_t reg_ufs_infra_req_mask_b
Definition: spm.h:740
uint8_t reg_md_1_ddren_req_mask_b
Definition: spm.h:710
uint8_t reg_disp0_ddren_req_mask_b
Definition: spm.h:745
uint8_t reg_msdc0_vrf18_req_mask_b
Definition: spm.h:782
uint8_t reg_ufs_srcclkena_mask_b
Definition: spm.h:739
uint8_t reg_conn_ddren_req_mask_b
Definition: spm.h:716
uint8_t reg_pcie_ddren_req_mask_b
Definition: spm.h:827
uint32_t pcm_flags
Definition: spm.h:656
uint8_t reg_audio_dsp_ddren_req_mask_b
Definition: spm.h:738
uint8_t reg_msdc2_srcclkena_mask_b
Definition: spm.h:810
uint8_t reg_gce_vrf18_req_mask_b
Definition: spm.h:750
uint8_t reg_disp0_apsrc_req_mask_b
Definition: spm.h:744
uint8_t reg_wfi_op
Definition: spm.h:675
uint8_t reg_cg_check_vrf18_req_mask_b
Definition: spm.h:759
uint8_t reg_disp1_apsrc_req_mask_b
Definition: spm.h:746
uint8_t reg_ufs_apsrc_req_mask_b
Definition: spm.h:741
uint32_t wake_src_cust
Definition: spm.h:669
uint8_t reg_dramc_md32_vrf18_req_mask_b
Definition: spm.h:798
uint8_t reg_sspm2spm_wakeup_mask_b
Definition: spm.h:766
uint8_t reg_spm_reserved_infra_req_mask_b
Definition: spm.h:770
uint8_t reg_md_0_ddren_req_mask_b
Definition: spm.h:705
uint8_t reg_srcclkeni_srcclkena_mask_b
Definition: spm.h:718
uint8_t reg_infrasys_ddren_req_mask_b
Definition: spm.h:721
uint8_t reg_scp_infra_req_mask_b
Definition: spm.h:730
uint8_t reg_msdc0_srcclkena_mask_b
Definition: spm.h:779
uint32_t pcm_flags_cust_set
Definition: spm.h:658
uint8_t reg_msdc2_apsrc_req_mask_b
Definition: spm.h:812
uint8_t reg_sspm_infra_req_mask_b
Definition: spm.h:723
uint8_t reg_afe_srcclkena_mask_b
Definition: spm.h:805
uint8_t reg_pcie_vrf18_req_mask_b
Definition: spm.h:826
uint8_t reg_audio_dsp_apsrc_req_mask_b
Definition: spm.h:736
uint32_t pcm_flags1
Definition: spm.h:660
uint8_t reg_spm_vrf18_req
Definition: spm.h:692
uint8_t reg_spm_reserved_srcclkena_mask_b
Definition: spm.h:769
uint8_t reg_msdc2_vrf18_req_mask_b
Definition: spm.h:813
uint8_t reg_bak_psri_ddren_req_mask_b
Definition: spm.h:796
uint8_t reg_gce_infra_req_mask_b
Definition: spm.h:748
uint8_t reg_msdc0_infra_req_mask_b
Definition: spm.h:780
uint8_t reg_conn_srcclkenb_mask_b
Definition: spm.h:712
uint8_t reg_md_0_infra_req_mask_b
Definition: spm.h:702
uint8_t reg_conn_srcclkenb2pwrap_mask_b
Definition: spm.h:799
uint32_t reg_wakeup_event_mask
Definition: spm.h:817
uint8_t reg_afe_infra_req_mask_b
Definition: spm.h:806
uint8_t reg_disp1_ddren_req_mask_b
Definition: spm.h:747
uint8_t reg_md_0_apsrc_req_mask_b
Definition: spm.h:703
uint8_t reg_dpmaif_apsrc_req_mask_b
Definition: spm.h:830
uint8_t reg_scp_vrf18_req_mask_b
Definition: spm.h:732
uint8_t reg_dramc_md32_infra_req_mask_b
Definition: spm.h:797
uint8_t reg_sw2spm_wakeup_mask_b
Definition: spm.h:764
uint32_t reg_ccif_event_apsrc_req_mask_b
Definition: spm.h:686
uint8_t reg_apu_srcclkena_mask_b
Definition: spm.h:752
uint8_t reg_md_apsrc_1_sel
Definition: spm.h:680
uint8_t reg_md_1_vrf18_req_mask_b
Definition: spm.h:709
uint8_t reg_msdc2_infra_req_mask_b
Definition: spm.h:811
uint8_t reg_spm_reserved_ddren_req_mask_b
Definition: spm.h:773
uint8_t reg_mcupm_vrf18_req_mask_b
Definition: spm.h:777
uint32_t reg_ccif_event_infra_req_mask_b
Definition: spm.h:685
uint8_t reg_bak_psri_vrf18_req_mask_b
Definition: spm.h:795
uint8_t reg_apu_apsrc_req_mask_b
Definition: spm.h:754
uint8_t reg_spm_ddren_req
Definition: spm.h:693
uint8_t reg_scp2spm_wakeup_mask_b
Definition: spm.h:767
uint32_t pcm_flags_cust_clr
Definition: spm.h:659
uint8_t reg_spm_dvfs_req
Definition: spm.h:694
uint8_t reg_conn_apsrc_sel
Definition: spm.h:682
uint8_t reg_spm_adsp_mailbox_req
Definition: spm.h:697
uint8_t reg_mcupm_apsrc_req_mask_b
Definition: spm.h:776
uint8_t reg_audio_dsp_infra_req_mask_b
Definition: spm.h:735
uint8_t reg_dpmaif_infra_req_mask_b
Definition: spm.h:829
uint8_t reg_wfi_type
Definition: spm.h:676
uint8_t reg_afe_ddren_req_mask_b
Definition: spm.h:809
uint8_t reg_infrasys_apsrc_req_mask_b
Definition: spm.h:720
uint8_t reg_md_0_srcclkena_mask_b
Definition: spm.h:701
uint8_t reg_mp1_cputop_idle_mask
Definition: spm.h:678
uint8_t reg_conn_srcclkena_mask_b
Definition: spm.h:711
uint8_t reg_audio_dsp_vrf18_req_mask_b
Definition: spm.h:737
uint8_t reg_md_1_apsrc_req_mask_b
Definition: spm.h:708
uint8_t reg_bak_psri_srcclkena_mask_b
Definition: spm.h:792
uint8_t reg_msdc2_ddren_req_mask_b
Definition: spm.h:814
uint8_t reg_msdc1_vrf18_req_mask_b
Definition: spm.h:787
uint8_t reg_cg_check_srcclkena_mask_b
Definition: spm.h:757
uint8_t reg_msdc1_apsrc_req_mask_b
Definition: spm.h:786
uint8_t reg_md_apsrc_0_sel
Definition: spm.h:681
uint8_t reg_gce_apsrc_req_mask_b
Definition: spm.h:749
uint8_t reg_mcusys_idle_mask
Definition: spm.h:679
uint8_t reg_spm_sspm_mailbox_req
Definition: spm.h:696
uint8_t reg_mcupm_infra_req_mask_b
Definition: spm.h:775
uint8_t reg_sspm_ddren_req_mask_b
Definition: spm.h:726
uint8_t reg_dpmaif_vrf18_req_mask_b
Definition: spm.h:831
uint32_t reg_mcusys_merge_ddren_req_mask_b
Definition: spm.h:804
uint8_t reg_spm_reserved_vrf18_req_mask_b
Definition: spm.h:772
uint8_t reg_scp_apsrc_req_mask_b
Definition: spm.h:731
uint8_t reg_pcie_apsrc_req_mask_b
Definition: spm.h:825
uint8_t reg_conn_apsrc_req_mask_b
Definition: spm.h:714
uint8_t reg_cg_check_apsrc_req_mask_b
Definition: spm.h:758
uint8_t reg_mcupm_srcclkena_mask_b
Definition: spm.h:774
uint8_t reg_sspm_vrf18_req_mask_b
Definition: spm.h:725
uint8_t reg_ufs_vrf18_req_mask_b
Definition: spm.h:742
uint8_t reg_cg_check_ddren_req_mask_b
Definition: spm.h:760
uint8_t reg_conn_infra_req_mask_b
Definition: spm.h:713
uint32_t pcm_flags1_cust_set
Definition: spm.h:662
uint8_t reg_msdc0_ddren_req_mask_b
Definition: spm.h:783
uint8_t reg_dramc_md32_apsrc_req_mask_b
Definition: spm.h:800
uint32_t reg_mcusys_merge_apsrc_req_mask_b
Definition: spm.h:803
uint32_t timer_val
Definition: spm.h:664
uint32_t timer_val_cust
Definition: spm.h:665
uint32_t pcm_flags1_cust_clr
Definition: spm.h:663
uint8_t reg_afe_apsrc_req_mask_b
Definition: spm.h:807
uint8_t reg_pcie_srcclkena_mask_b
Definition: spm.h:823
uint8_t reg_msdc1_srcclkena_mask_b
Definition: spm.h:784
uint8_t reg_conn_vrf18_req_mask_b
Definition: spm.h:715
uint8_t reg_csyspwrup_ack_mask
Definition: spm.h:768
uint8_t reg_pcie_infra_req_mask_b
Definition: spm.h:824
uint8_t reg_srcclkeni_infra_req_mask_b
Definition: spm.h:719
uint8_t reg_afe_vrf18_req_mask_b
Definition: spm.h:808
uint8_t reg_sspm_srcclkena_mask_b
Definition: spm.h:722
uint32_t reg_ext_wakeup_event_mask
Definition: spm.h:820
uint8_t reg_msdc0_apsrc_req_mask_b
Definition: spm.h:781
uint8_t reg_msdc1_ddren_req_mask_b
Definition: spm.h:788
uint8_t reg_spm_f26m_req
Definition: spm.h:690
uint8_t reg_scp_srcclkena_mask_b
Definition: spm.h:729
uint8_t reg_bak_psri_infra_req_mask_b
Definition: spm.h:793
uint8_t reg_md_1_srcclkena_mask_b
Definition: spm.h:706
uint8_t reg_spm_sw_mailbox_req
Definition: spm.h:695
uint8_t reg_spm_infra_req
Definition: spm.h:691
uint8_t reg_spm_apsrc_req
Definition: spm.h:689
uint8_t reg_dvfsrc_event_trigger_mask_b
Definition: spm.h:763
uint8_t reg_adsp2spm_wakeup_mask_b
Definition: spm.h:765
uint8_t reg_md_0_vrf18_req_mask_b
Definition: spm.h:704
uint8_t reg_apu_ddren_req_mask_b
Definition: spm.h:756
uint8_t reg_audio_dsp_srcclkena_mask_b
Definition: spm.h:734
uint32_t reg_ccif_event_srcclkena_mask_b
Definition: spm.h:791
uint8_t reg_dpmaif_ddren_req_mask_b
Definition: spm.h:832
uint8_t reg_spm_scp_mailbox_req
Definition: spm.h:698
uint8_t reg_mp0_cputop_idle_mask
Definition: spm.h:677
uint8_t reg_mcupm_ddren_req_mask_b
Definition: spm.h:778
uint8_t reg_ufs_ddren_req_mask_b
Definition: spm.h:743
u8 val
Definition: sys.c:300
void udelay(uint32_t us)
Definition: udelay.c:15