1 /*
2  * Copyright (c) 2023, MediaTek Inc. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #include <common/debug.h>
8 #include <lib/mmio.h>
9 #include "mt_spm_notifier.h"
10 #include "mt_spm_sspm_intc.h"
11 #include <platform_def.h>
12 
13 #define MT_SPM_SSPM_MBOX_OFF(x)	(SSPM_MBOX_3_BASE + x)
14 #define MT_SPM_MBOX(slot)	MT_SPM_SSPM_MBOX_OFF((slot << 2UL))
15 
16 /* LOOKUP SSPM_MBOX_SPM_LP1 */
17 #define SSPM_MBOX_SPM_LP_LOOKUP1	MT_SPM_MBOX(0)
18 /* LOOKUP SSPM_MBOX_SPM_LP2 */
19 #define SSPM_MBOX_SPM_LP_LOOKUP2	MT_SPM_MBOX(1)
20 
21 #define SSPM_MBOX_SPM_LP1		MT_SPM_MBOX(2)
22 #define SSPM_MBOX_SPM_LP2		MT_SPM_MBOX(3)
23 
mt_spm_sspm_notify_u32(int type,unsigned int val)24 int mt_spm_sspm_notify_u32(int type, unsigned int val)
25 {
26 	switch (type) {
27 	case MT_SPM_NOTIFY_LP_ENTER:
28 		mmio_write_32(SSPM_MBOX_SPM_LP1, val);
29 		DO_SPM_SSPM_LP_SUSPEND();
30 		break;
31 	case MT_SPM_NOTIFY_LP_LEAVE:
32 		mmio_write_32(SSPM_MBOX_SPM_LP1, val);
33 		DO_SPM_SSPM_LP_RESUME();
34 		break;
35 	default:
36 		panic();
37 		break;
38 	}
39 	return 0;
40 }
41