xref: /rk3399_ARM-atf/plat/mediatek/drivers/spm/mt8188/mt_spm_constraint.h (revision 79c262327aa8ccc1ae5a0ee7f7ead3bf5ce8e022)
1*45d50759SJames Liao /*
2*45d50759SJames Liao  * Copyright (c) 2023, MediaTek Inc. All rights reserved.
3*45d50759SJames Liao  *
4*45d50759SJames Liao  * SPDX-License-Identifier: BSD-3-Clause
5*45d50759SJames Liao  */
6*45d50759SJames Liao 
7*45d50759SJames Liao #ifndef MT_SPM_CONSTRAINT_H
8*45d50759SJames Liao #define MT_SPM_CONSTRAINT_H
9*45d50759SJames Liao 
10*45d50759SJames Liao #include <lpm/mt_lp_rm.h>
11*45d50759SJames Liao 
12*45d50759SJames Liao #define MT_RM_CONSTRAINT_ALLOW_CPU_BUCK_OFF	BIT(0)
13*45d50759SJames Liao #define MT_RM_CONSTRAINT_ALLOW_DRAM_S0		BIT(1)
14*45d50759SJames Liao #define MT_RM_CONSTRAINT_ALLOW_DRAM_S1		BIT(2)
15*45d50759SJames Liao #define MT_RM_CONSTRAINT_ALLOW_VCORE_LP		BIT(3)
16*45d50759SJames Liao #define MT_RM_CONSTRAINT_ALLOW_INFRA_PDN	BIT(4)
17*45d50759SJames Liao #define MT_RM_CONSTRAINT_ALLOW_BUS26M_OFF	BIT(5)
18*45d50759SJames Liao #define MT_RM_CONSTRAINT_ALLOW_AP_SUSPEND	BIT(6)
19*45d50759SJames Liao #define MT_RM_CONSTRAINT_ALLOW_BBLPM		BIT(7)
20*45d50759SJames Liao #define MT_RM_CONSTRAINT_ALLOW_XO_UFS		BIT(8)
21*45d50759SJames Liao #define MT_RM_CONSTRAINT_ALLOW_GPS_STATE	BIT(9)
22*45d50759SJames Liao #define MT_RM_CONSTRAINT_ALLOW_LVTS_STATE	BIT(10)
23*45d50759SJames Liao 
24*45d50759SJames Liao enum mt_spm_rm_rc_type {
25*45d50759SJames Liao 	MT_RM_CONSTRAINT_ID_BUS26M,
26*45d50759SJames Liao 	MT_RM_CONSTRAINT_ID_SYSPLL,
27*45d50759SJames Liao 	MT_RM_CONSTRAINT_ID_DRAM,
28*45d50759SJames Liao 	MT_RM_CONSTRAINT_ID_CPU_BUCK_LDO,
29*45d50759SJames Liao 	MT_RM_CONSTRAINT_ID_ALL,
30*45d50759SJames Liao };
31*45d50759SJames Liao 
32*45d50759SJames Liao #define MT_SPM_RC_INVALID		(0x0)
33*45d50759SJames Liao #define MT_SPM_RC_VALID_SW		BIT(0)
34*45d50759SJames Liao #define MT_SPM_RC_VALID_FW		BIT(1)
35*45d50759SJames Liao #define MT_SPM_RC_VALID_RESIDNECY	BIT(2)
36*45d50759SJames Liao #define MT_SPM_RC_VALID_COND_CHECK	BIT(3)
37*45d50759SJames Liao #define MT_SPM_RC_VALID_COND_LATCH	BIT(4)
38*45d50759SJames Liao #define MT_SPM_RC_VALID_UFS_H8		BIT(5)
39*45d50759SJames Liao #define MT_SPM_RC_VALID_FLIGHTMODE	BIT(6)
40*45d50759SJames Liao #define MT_SPM_RC_VALID_XSOC_BBLPM	BIT(7)
41*45d50759SJames Liao #define MT_SPM_RC_VALID_TRACE_EVENT	BIT(8)
42*45d50759SJames Liao #define MT_SPM_RC_VALID_TRACE_TIME	BIT(9)
43*45d50759SJames Liao 
44*45d50759SJames Liao /* MT_RM_CONSTRAINT_SW_VALID | MT_RM_CONSTRAINT_FW_VALID */
45*45d50759SJames Liao #define MT_SPM_RC_VALID	(MT_SPM_RC_VALID_SW)
46*45d50759SJames Liao 
47*45d50759SJames Liao #define IS_MT_RM_RC_READY(status)	((status & MT_SPM_RC_VALID) == MT_SPM_RC_VALID)
48*45d50759SJames Liao 
49*45d50759SJames Liao struct constraint_status {
50*45d50759SJames Liao 	uint16_t id;
51*45d50759SJames Liao 	uint16_t is_valid;
52*45d50759SJames Liao 	uint32_t is_cond_block;
53*45d50759SJames Liao 	uint32_t enter_cnt;
54*45d50759SJames Liao 	uint32_t all_pll_dump;
55*45d50759SJames Liao 	uint64_t residency;
56*45d50759SJames Liao 	struct mt_spm_cond_tables *cond_res;
57*45d50759SJames Liao };
58*45d50759SJames Liao 
59*45d50759SJames Liao enum constraint_status_update_type {
60*45d50759SJames Liao 	CONSTRAINT_UPDATE_VALID,
61*45d50759SJames Liao 	CONSTRAINT_UPDATE_COND_CHECK,
62*45d50759SJames Liao 	CONSTRAINT_RESIDNECY,
63*45d50759SJames Liao };
64*45d50759SJames Liao 
65*45d50759SJames Liao enum constraint_status_get_type {
66*45d50759SJames Liao 	CONSTRAINT_GET_VALID = 0xD0000000,
67*45d50759SJames Liao 	CONSTRAINT_GET_ENTER_CNT,
68*45d50759SJames Liao 	CONSTRAINT_GET_RESIDENCY,
69*45d50759SJames Liao 	CONSTRAINT_GET_COND_EN,
70*45d50759SJames Liao 	CONSTRAINT_COND_BLOCK,
71*45d50759SJames Liao 	CONSTRAINT_GET_COND_BLOCK_LATCH,
72*45d50759SJames Liao 	CONSTRAINT_GET_COND_BLOCK_DETAIL,
73*45d50759SJames Liao 	CONSTRAINT_GET_RESIDNECY,
74*45d50759SJames Liao };
75*45d50759SJames Liao 
76*45d50759SJames Liao struct rc_common_state {
77*45d50759SJames Liao 	unsigned int id;
78*45d50759SJames Liao 	unsigned int act;
79*45d50759SJames Liao 	unsigned int type;
80*45d50759SJames Liao 	void *value;
81*45d50759SJames Liao };
82*45d50759SJames Liao 
83*45d50759SJames Liao #define MT_SPM_RC_BBLPM_MODE	(MT_SPM_RC_VALID_UFS_H8 | \
84*45d50759SJames Liao 				 MT_SPM_RC_VALID_FLIGHTMODE | \
85*45d50759SJames Liao 				 MT_SPM_RC_VALID_XSOC_BBLPM)
86*45d50759SJames Liao 
87*45d50759SJames Liao #define IS_MT_SPM_RC_BBLPM_MODE(st) ((st & (MT_SPM_RC_BBLPM_MODE)) == MT_SPM_RC_BBLPM_MODE)
88*45d50759SJames Liao 
89*45d50759SJames Liao #endif /* MT_SPM_CONSTRAINT_H */
90