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