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