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