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