xref: /rk3399_ARM-atf/plat/mediatek/drivers/spm/mt8188/mt_spm_cond.h (revision 236c0bf0c49fe48d98e72cf9e31d43cb9034310a)
1f299efbeSJames Liao /*
2f299efbeSJames Liao  * Copyright (c) 2023, MediaTek Inc. All rights reserved.
3f299efbeSJames Liao  *
4f299efbeSJames Liao  * SPDX-License-Identifier: BSD-3-Clause
5f299efbeSJames Liao  */
6f299efbeSJames Liao 
7f299efbeSJames Liao #ifndef MT_SPM_COND_H
8f299efbeSJames Liao #define MT_SPM_COND_H
9f299efbeSJames Liao 
10f299efbeSJames Liao #include <lpm/mt_lp_rm.h>
11f299efbeSJames Liao 
12f299efbeSJames Liao enum plat_spm_cond {
13f299efbeSJames Liao 	PLAT_SPM_COND_MTCMOS1 = 0,
14f299efbeSJames Liao 	PLAT_SPM_COND_MTCMOS2,
15f299efbeSJames Liao 	PLAT_SPM_COND_CG_INFRA_0,
16f299efbeSJames Liao 	PLAT_SPM_COND_CG_INFRA_1,
17f299efbeSJames Liao 	PLAT_SPM_COND_CG_INFRA_2,
18f299efbeSJames Liao 	PLAT_SPM_COND_CG_INFRA_3,
19f299efbeSJames Liao 	PLAT_SPM_COND_CG_INFRA_4,
20f299efbeSJames Liao 	PLAT_SPM_COND_CG_PERI_0,
21f299efbeSJames Liao 	PLAT_SPM_COND_CG_VPPSYS0_0,
22f299efbeSJames Liao 	PLAT_SPM_COND_CG_VPPSYS0_1,
23f299efbeSJames Liao 	PLAT_SPM_COND_CG_VPPSYS1_0,
24f299efbeSJames Liao 	PLAT_SPM_COND_CG_VPPSYS1_1,
25f299efbeSJames Liao 	PLAT_SPM_COND_CG_VDOSYS0_0,
26f299efbeSJames Liao 	PLAT_SPM_COND_CG_VDOSYS0_1,
27f299efbeSJames Liao 	PLAT_SPM_COND_CG_VDOSYS1_0,
28f299efbeSJames Liao 	PLAT_SPM_COND_CG_VDOSYS1_1,
29f299efbeSJames Liao 	PLAT_SPM_COND_CG_VDOSYS1_2,
30f299efbeSJames Liao 	PLAT_SPM_COND_MAX,
31f299efbeSJames Liao };
32f299efbeSJames Liao 
33f299efbeSJames Liao /* For PLL id >= PLAT_SPM_COND_PLL_MAX is not checked in idle condition  */
34f299efbeSJames Liao enum plat_spm_cond_pll {
35f299efbeSJames Liao 	PLAT_SPM_COND_PLL_UNIVPLL = 0,
36f299efbeSJames Liao 	PLAT_SPM_COND_PLL_MFGPLL,
37f299efbeSJames Liao 	PLAT_SPM_COND_PLL_MSDCPLL,
38f299efbeSJames Liao 	PLAT_SPM_COND_PLL_TVDPLL1,
39f299efbeSJames Liao 	PLAT_SPM_COND_PLL_TVDPLL2,
40f299efbeSJames Liao 	PLAT_SPM_COND_PLL_MMPLL,
41f299efbeSJames Liao 	PLAT_SPM_COND_PLL_ETHPLL,
42f299efbeSJames Liao 	PLAT_SPM_COND_PLL_IMGPLL,
43f299efbeSJames Liao 	PLAT_SPM_COND_PLL_APLL1,
44f299efbeSJames Liao 	PLAT_SPM_COND_PLL_APLL2,
45f299efbeSJames Liao 	PLAT_SPM_COND_PLL_APLL3,
46f299efbeSJames Liao 	PLAT_SPM_COND_PLL_APLL4,
47f299efbeSJames Liao 	PLAT_SPM_COND_PLL_APLL5,
48f299efbeSJames Liao 	PLAT_SPM_COND_PLL_MAX,
49f299efbeSJames Liao };
50f299efbeSJames Liao 
51f299efbeSJames Liao #define PLL_BIT_MFGPLL	BIT(PLAT_SPM_COND_PLL_MFGPLL)
52f299efbeSJames Liao #define PLL_BIT_MMPLL	BIT(PLAT_SPM_COND_PLL_MMPLL)
53f299efbeSJames Liao #define PLL_BIT_UNIVPLL	BIT(PLAT_SPM_COND_PLL_UNIVPLL)
54f299efbeSJames Liao #define PLL_BIT_MSDCPLL	BIT(PLAT_SPM_COND_PLL_MSDCPLL)
55f299efbeSJames Liao #define PLL_BIT_TVDPLL1	BIT(PLAT_SPM_COND_PLL_TVDPLL1)
56f299efbeSJames Liao #define PLL_BIT_TVDPLL2	BIT(PLAT_SPM_COND_PLL_TVDPLL2)
57f299efbeSJames Liao #define PLL_BIT_ETHPLL	BIT(PLAT_SPM_COND_PLL_ETHPLL)
58f299efbeSJames Liao #define PLL_BIT_IMGPLL	BIT(PLAT_SPM_COND_PLL_IMGPLL)
59f299efbeSJames Liao #define PLL_BIT_APLL1	BIT(PLAT_SPM_COND_PLL_APLL1)
60f299efbeSJames Liao #define PLL_BIT_APLL2	BIT(PLAT_SPM_COND_PLL_APLL2)
61f299efbeSJames Liao #define PLL_BIT_APLL3   BIT(PLAT_SPM_COND_PLL_APLL3)
62f299efbeSJames Liao #define PLL_BIT_APLL4	BIT(PLAT_SPM_COND_PLL_APLL4)
63f299efbeSJames Liao #define PLL_BIT_APLL5	BIT(PLAT_SPM_COND_PLL_APLL5)
64f299efbeSJames Liao 
65f299efbeSJames Liao /*
66f299efbeSJames Liao  * Definition about SPM_COND_CHECK_BLOCKED
67f299efbeSJames Liao  * bit[00:16]: cg blocking index
68f299efbeSJames Liao  * bit[17:29]: pll blocking index
69f299efbeSJames Liao  * bit[30]: pll blocking information
70f299efbeSJames Liao  * bit[31]: idle condition check fail
71f299efbeSJames Liao  */
72f299efbeSJames Liao #define SPM_COND_BLOCKED_CG_IDX		(0)
73f299efbeSJames Liao #define SPM_COND_BLOCKED_PLL_IDX	(17)
74f299efbeSJames Liao #define SPM_COND_CHECK_BLOCKED_PLL	BIT(30)
75f299efbeSJames Liao #define SPM_COND_CHECK_FAIL		BIT(31)
76f299efbeSJames Liao 
77f299efbeSJames Liao struct mt_spm_cond_tables {
78*f85b34b1SJason Chen 	char *name;
79f299efbeSJames Liao 	unsigned int table_cg[PLAT_SPM_COND_MAX];
80f299efbeSJames Liao 	unsigned int table_pll;
81f299efbeSJames Liao 	unsigned int table_all_pll;
82f299efbeSJames Liao 	void *priv;
83f299efbeSJames Liao };
84f299efbeSJames Liao 
85*f85b34b1SJason Chen unsigned int mt_spm_cond_check(int state_id,
86*f85b34b1SJason Chen 			       const struct mt_spm_cond_tables *src,
87f299efbeSJames Liao 			       const struct mt_spm_cond_tables *dest,
88f299efbeSJames Liao 			       struct mt_spm_cond_tables *res);
89f299efbeSJames Liao unsigned int mt_spm_dump_all_pll(const struct mt_spm_cond_tables *src,
90f299efbeSJames Liao 				 const struct mt_spm_cond_tables *dest,
91f299efbeSJames Liao 				 struct mt_spm_cond_tables *res);
92b0208c73SLiju-Clr Chen int mt_spm_cond_update(struct mt_resource_constraint **con, unsigned int num,
93b0208c73SLiju-Clr Chen 		       int stateid, void *priv);
94f299efbeSJames Liao 
95f299efbeSJames Liao #endif
96