xref: /rk3399_ARM-atf/plat/mediatek/drivers/apusys/mt8196/apusys_power.h (revision 999503d285475f8920111f3fd760312ddf1d5b5b)
1*0781f780SKarl Li /*
2*0781f780SKarl Li  * Copyright (c) 2024, MediaTek Inc. All rights reserved.
3*0781f780SKarl Li  *
4*0781f780SKarl Li  * SPDX-License-Identifier: BSD-3-Clause
5*0781f780SKarl Li  */
6*0781f780SKarl Li 
7*0781f780SKarl Li #ifndef APUSYS_POWER_H
8*0781f780SKarl Li #define APUSYS_POWER_H
9*0781f780SKarl Li 
10*0781f780SKarl Li #include <platform_def.h>
11*0781f780SKarl Li 
12*0781f780SKarl Li #define CFG_APU_ARDCM_ENABLE	(0)
13*0781f780SKarl Li #define CFG_CTL_RPC_BY_CE	(1)
14*0781f780SKarl Li 
15*0781f780SKarl Li #define APUPLL0_DEFAULT_FREQ	(800)
16*0781f780SKarl Li #define APUPLL1_DEFAULT_FREQ	(960)
17*0781f780SKarl Li #define APUPLL2_DEFAULT_FREQ	(1200)
18*0781f780SKarl Li #define APUPLL3_DEFAULT_FREQ	(1230)
19*0781f780SKarl Li 
20*0781f780SKarl Li enum t_acx_id {
21*0781f780SKarl Li 	D_ACX0 = 0,
22*0781f780SKarl Li 	ACX0,
23*0781f780SKarl Li 	ACX1,
24*0781f780SKarl Li 	ACX2,
25*0781f780SKarl Li 	CLUSTER_NUM,
26*0781f780SKarl Li 	RCX,
27*0781f780SKarl Li };
28*0781f780SKarl Li 
29*0781f780SKarl Li enum rcx_ao_range {
30*0781f780SKarl Li 	RCX_AO_BEGIN = 0,
31*0781f780SKarl Li 	PLL_ENTRY_BEGIN = 0,
32*0781f780SKarl Li 	PLL_ENTRY_END = 27,
33*0781f780SKarl Li 	ACC_ENTRY_BEGIN = 28,
34*0781f780SKarl Li 	ACC_ENTRY_END = 37,
35*0781f780SKarl Li 	RCX_AO_END = 37,
36*0781f780SKarl Li };
37*0781f780SKarl Li 
38*0781f780SKarl Li #define SYS_VLP			(0x000000)
39*0781f780SKarl Li #define SYS_SPM			(0x000000)
40*0781f780SKarl Li #define APU_RCX			(0x020000)
41*0781f780SKarl Li #define APU_RCX_DLA		(0x040000)
42*0781f780SKarl Li #define APU_ARE			(0x0a0000)
43*0781f780SKarl Li #define APU_ARE_REG		(0x0b0000)
44*0781f780SKarl Li #define APU_VCORE		(0x0e0000)
45*0781f780SKarl Li #define APU_MD32_MBOX		(0x0e1000)
46*0781f780SKarl Li #define APU_RPC			(0x0f0000)
47*0781f780SKarl Li #define APU_PCU			(0x0f1000)
48*0781f780SKarl Li #define APU_AO_CTL		(0x0f2000)
49*0781f780SKarl Li #define APU_ACC			(0x0f3000)
50*0781f780SKarl Li #define APU_PLL			(0x0f6000)
51*0781f780SKarl Li #define APU_RPCTOP_MDLA		(0x0F7400)
52*0781f780SKarl Li #define APU_ACX0		(0x100000)
53*0781f780SKarl Li #define APU_ACX0_RPC_LITE	(0x140000)
54*0781f780SKarl Li #define APU_ACX1		(0x200000)
55*0781f780SKarl Li #define APU_ACX1_RPC_LITE	(0x240000)
56*0781f780SKarl Li #define APU_ACX2		(0x300000)
57*0781f780SKarl Li #define APU_ACX2_RPC_LITE	(0x340000)
58*0781f780SKarl Li 
59*0781f780SKarl Li /* APU GRP offset define */
60*0781f780SKarl Li #define APU_GRP_0_BASE		(0x0000)
61*0781f780SKarl Li #define APU_GRP_1_BASE		(0x0400)
62*0781f780SKarl Li #define APU_GRP_2_BASE		(0x0800)
63*0781f780SKarl Li #define APU_GRP_3_BASE		(0x0C00)
64*0781f780SKarl Li 
65*0781f780SKarl Li #define MDLA_PLL_BASE		APU_GRP_0_BASE
66*0781f780SKarl Li #define MVPU_PLL_BASE		APU_GRP_1_BASE
67*0781f780SKarl Li #define MNOC_PLL_BASE		APU_GRP_2_BASE
68*0781f780SKarl Li #define UP_PLL_BASE		APU_GRP_3_BASE
69*0781f780SKarl Li 
70*0781f780SKarl Li #define MDLA_ACC_BASE		APU_GRP_0_BASE
71*0781f780SKarl Li #define MVPU_ACC_BASE		APU_GRP_1_BASE
72*0781f780SKarl Li #define MNOC_ACC_BASE		APU_GRP_2_BASE
73*0781f780SKarl Li #define UP_ACC_BASE		APU_GRP_3_BASE
74*0781f780SKarl Li 
75*0781f780SKarl Li /* RPC / RPC_LITE control */
76*0781f780SKarl Li #define APU_RPC_SW_TYPE0_OFF	(0x200)
77*0781f780SKarl Li #define APU_RPC_SW_TYPE1_OFF	(0x204)
78*0781f780SKarl Li #define APU_RPC_SW_TYPE2_OFF	(0x208)
79*0781f780SKarl Li #define APU_RPC_SW_TYPE3_OFF	(0x20C)
80*0781f780SKarl Li #define APU_RPC_SW_TYPE4_OFF	(0x210)
81*0781f780SKarl Li #define SW_TYPE_MVPU_MDLA_RV	BIT(0)
82*0781f780SKarl Li #define CE_ENABLE		BIT(10)
83*0781f780SKarl Li #define BUCK_PROT_SEL		BIT(20)
84*0781f780SKarl Li #define RPC_TYPE_INIT_VAL	(0x18)
85*0781f780SKarl Li #define TOP_SEL_VAL		(0xB2)
86*0781f780SKarl Li #define RPC_TOP_SEL_VAL		(0xB800D50F)
87*0781f780SKarl Li 
88*0781f780SKarl Li #define APUSYS_AO_CTL		(APUSYS_BASE + APU_AO_CTL)
89*0781f780SKarl Li #define APUSYS_RPC		(APUSYS_BASE + APU_RPC)
90*0781f780SKarl Li #define APUSYS_ACC		(APUSYS_BASE + APU_ACC)
91*0781f780SKarl Li #define APUSYS_PLL		(APUSYS_BASE + APU_PLL)
92*0781f780SKarl Li #define APUSYS_PCU		(APUSYS_BASE + APU_PCU)
93*0781f780SKarl Li 
94*0781f780SKarl Li /* ARE control */
95*0781f780SKarl Li #define ARE_VCORE_EN		BIT(20)
96*0781f780SKarl Li #define ARE_RCX_AO_EN		BIT(21)
97*0781f780SKarl Li #define ARE_VCORE_OFF		(20)
98*0781f780SKarl Li #define ARE_CONF_START		(0x04)
99*0781f780SKarl Li #define ARE_CONF_END		(0x6C)
100*0781f780SKarl Li #define ARE_REG_SIZE		(4)
101*0781f780SKarl Li 
102*0781f780SKarl Li /* ACC offset */
103*0781f780SKarl Li #define APU_ACC_CONFG_SET0	(0x000)
104*0781f780SKarl Li #define APU_ACC_CONFG_CLR0	(0x010)
105*0781f780SKarl Li #define APU_ACC_AUTO_CTRL_SET0	(0x084)
106*0781f780SKarl Li #define APU_ARDCM_CTRL0		(0x100)
107*0781f780SKarl Li #define APU_ARDCM_CTRL1		(0x104)
108*0781f780SKarl Li 
109*0781f780SKarl Li /* ACC control */
110*0781f780SKarl Li #define APU_ARDCM_CTRL0_VAL_0	(0x00000016)
111*0781f780SKarl Li #define APU_ARDCM_CTRL0_VAL_1	(0x00000036)
112*0781f780SKarl Li #define APU_ARDCM_CTRL1_VAL_0	(0x00001006)
113*0781f780SKarl Li #define APU_ARDCM_CTRL1_VAL_1	(0x07F0F006)
114*0781f780SKarl Li #define CGEN_SOC		BIT(2)
115*0781f780SKarl Li #define CLK_REQ_SW_EN		BIT(8)
116*0781f780SKarl Li #define HW_CTRL_EN		BIT(15)
117*0781f780SKarl Li 
118*0781f780SKarl Li /* APU PLL1C offset */
119*0781f780SKarl Li #define RG_PLLGP_LVR_REFSEL	(0x204)
120*0781f780SKarl Li #define PLL1C_PLL1_CON1		(0x20C)
121*0781f780SKarl Li #define PLL1CPLL_FHCTL_HP_EN	(0x300)
122*0781f780SKarl Li #define PLL1CPLL_FHCTL_CLK_CON	(0x308)
123*0781f780SKarl Li #define PLL1CPLL_FHCTL_RST_CON	(0x30C)
124*0781f780SKarl Li #define PLL1CPLL_FHCTL0_CFG	(0x314)
125*0781f780SKarl Li #define PLL1CPLL_FHCTL0_DDS	(0x31C)
126*0781f780SKarl Li 
127*0781f780SKarl Li /* PLL control */
128*0781f780SKarl Li #define RG_PLLGP_LVR_REFSEL_VAL	(0x3)
129*0781f780SKarl Li #define FHCTL_CTRL		(0x1)
130*0781f780SKarl Li #define FHCTL_NO_RESET		(0x1)
131*0781f780SKarl Li #define FHCTL_CLKEN		(0x1)
132*0781f780SKarl Li #define FHCTL_HOPPING_EN	BIT(0)
133*0781f780SKarl Li #define FHCTL_SFSTR0_EN		BIT(2)
134*0781f780SKarl Li #define RG_PLL_SDM_PCW_CHG_OFF	(31)
135*0781f780SKarl Li #define RG_PLL_POSDIV_OFF	(24)
136*0781f780SKarl Li #define FHCTL0_PLL_TGL_ORG	(31)
137*0781f780SKarl Li 
138*0781f780SKarl Li /* RPC offset define */
139*0781f780SKarl Li #define APU_RPC_TOP_SEL		(0x0004)
140*0781f780SKarl Li #define APU_RPC_TOP_SEL_1	(0x0018)
141*0781f780SKarl Li #define APU_RPC_HW_CON		(0x001C)
142*0781f780SKarl Li #define APU_RPC_STATUS_1	(0x0034)
143*0781f780SKarl Li #define APU_RPC_INTF_PWR_RDY	(0x0044)
144*0781f780SKarl Li 
145*0781f780SKarl Li /* RPC control */
146*0781f780SKarl Li #define SRAM_AOC_LHENB_SET	BIT(4)
147*0781f780SKarl Li #define	SRAM_AOC_ISO_SET	BIT(6)
148*0781f780SKarl Li #define SRAM_AOC_ISO_CLR	BIT(7)
149*0781f780SKarl Li #define PLL_AOC_ISO_EN_SET	BIT(8)
150*0781f780SKarl Li #define PLL_AOC_ISO_EN_CLR	BIT(9)
151*0781f780SKarl Li #define BUCK_ELS_EN_SET		BIT(10)
152*0781f780SKarl Li #define BUCK_ELS_EN_CLR		BIT(11)
153*0781f780SKarl Li #define BUCK_AO_RST_B_SET	BIT(12)
154*0781f780SKarl Li #define BUCK_AO_RST_B_CLR	BIT(13)
155*0781f780SKarl Li #define BUCK_PROT_REQ_SET	BIT(14)
156*0781f780SKarl Li #define BUCK_PROT_REQ_CLR	BIT(15)
157*0781f780SKarl Li 
158*0781f780SKarl Li /* mt6373_vbuck2 */
159*0781f780SKarl Li #define MT6373_SLAVE_ID				(0x5)
160*0781f780SKarl Li #define MT6373_RG_BUCK_VBUCK2_SET		(0x241)
161*0781f780SKarl Li #define MT6373_RG_BUCK_VBUCK2_CLR		(0x242)
162*0781f780SKarl Li #define MT6373_RG_BUCK_VBUCK2_EN_SHIFT		(2)
163*0781f780SKarl Li #define MT6373_RG_BUCK_VBUCK2_VOSEL_ADDR	(0x24e)
164*0781f780SKarl Li 
165*0781f780SKarl Li /* PCU initial data */
166*0781f780SKarl Li #define APU_PCUTOP_CTRL_SET		(0x0)
167*0781f780SKarl Li #define APU_PCU_BUCK_STEP_SEL		(0x0030)
168*0781f780SKarl Li #define APU_PCU_BUCK_ON_DAT0_L		(0x0080)
169*0781f780SKarl Li #define APU_PCU_BUCK_ON_DAT0_H		(0x0084)
170*0781f780SKarl Li #define APU_PCU_BUCK_ON_DAT1_L		(0x0088)
171*0781f780SKarl Li #define APU_PCU_BUCK_ON_DAT1_H		(0x008C)
172*0781f780SKarl Li #define APU_PCU_BUCK_OFF_DAT0_L		(0x00A0)
173*0781f780SKarl Li #define APU_PCU_BUCK_OFF_DAT0_H		(0x00A4)
174*0781f780SKarl Li #define APU_PCU_BUCK_ON_SLE0		(0x00C0)
175*0781f780SKarl Li #define APU_PCU_BUCK_ON_SLE1		(0x00C4)
176*0781f780SKarl Li #define VAPU_BUCK_ON_SETTLE_TIME	(0x00C8)
177*0781f780SKarl Li #define APU_PCU_PMIC_TAR_BUF1		(0x0190)
178*0781f780SKarl Li #define APU_PCU_PMIC_TAR_BUF2		(0x0194)
179*0781f780SKarl Li #define APU_PCU_PMIC_CMD		(0x0184)
180*0781f780SKarl Li #define APU_PCU_PMIC_IRQ		(0x0180)
181*0781f780SKarl Li 
182*0781f780SKarl Li /* PCU control */
183*0781f780SKarl Li #define PMIC_CMD_IRQ			BIT(0)
184*0781f780SKarl Li #define PMIC_IRQ_EN			BIT(2)
185*0781f780SKarl Li #define AUTO_BUCK_EN			BIT(3)
186*0781f780SKarl Li #define PMIC_PMIFID_OFF			(3)
187*0781f780SKarl Li #define PMIC_SLVID_OFF			(4)
188*0781f780SKarl Li #define PCU_CMD_OP_W			(0x7)
189*0781f780SKarl Li #define PMIC_OFF_ADDR_OFF		(16)
190*0781f780SKarl Li #define PMIC_CMD_EN			(0x1)
191*0781f780SKarl Li #define BUCK_STEP_SEL_VAL		(0x13)
192*0781f780SKarl Li #define PCU_BUCK_OFF_CMD		(0x7)
193*0781f780SKarl Li 
194*0781f780SKarl Li /* sram_core: mt6363_vbuck4 */
195*0781f780SKarl Li #define MT6363_RG_BUCK_VBUCK4_VOSEL_ADDR	(0x250)
196*0781f780SKarl Li 
197*0781f780SKarl Li /* sub_pmic */
198*0781f780SKarl Li #define BUCK_VAPU_PMIC_ID		MT6373_SLAVE_ID
199*0781f780SKarl Li #define BUCK_VAPU_PMIC_REG_VOSEL_ADDR	MT6373_RG_BUCK_VBUCK2_VOSEL_ADDR
200*0781f780SKarl Li #define BUCK_VAPU_PMIC_REG_EN_SET_ADDR	MT6373_RG_BUCK_VBUCK2_SET
201*0781f780SKarl Li #define BUCK_VAPU_PMIC_REG_EN_CLR_ADDR	MT6373_RG_BUCK_VBUCK2_CLR
202*0781f780SKarl Li #define BUCK_VAPU_PMIC_REG_EN_SHIFT	MT6373_RG_BUCK_VBUCK2_EN_SHIFT
203*0781f780SKarl Li 
204*0781f780SKarl Li /* vlp offset define */
205*0781f780SKarl Li #define APUSYS_AO_SRAM_CONFIG		(0x70)
206*0781f780SKarl Li #define APUSYS_AO_SRAM_SET		(0x74)
207*0781f780SKarl Li #define APUSYS_AO_SRAM_CLR		(0x78)
208*0781f780SKarl Li 
209*0781f780SKarl Li #define APUSYS_AO_SRAM_EN		(0x1)
210*0781f780SKarl Li 
211*0781f780SKarl Li #define ARE_ENTRIES(x, y)		((((y) - (x)) + 1) * 2)
212*0781f780SKarl Li #define ARE_ENTRY(x)			(((x) * 2) + 36)
213*0781f780SKarl Li #define ARE_RCX_AO_CONFIG		(0x0014)
214*0781f780SKarl Li #define ARE_RCX_AO_CONFIG_HIGH_OFF	(16)
215*0781f780SKarl Li 
216*0781f780SKarl Li #define APU_ACE_HW_FLAG_DIS		(APUSYS_CE_BASE + 0x05D4)
217*0781f780SKarl Li #define APU_ACE_DIS_FLAG_VAL		(0xffff7ff8)
218*0781f780SKarl Li 
219*0781f780SKarl Li #define OUT_CLK_FREQ_MIN		(1500)
220*0781f780SKarl Li #define DDS_SHIFT			(14)
221*0781f780SKarl Li #define BASIC_CLK_FREQ			(26)
222*0781f780SKarl Li 
223*0781f780SKarl Li int apusys_power_init(void);
224*0781f780SKarl Li 
225*0781f780SKarl Li #endif /* APUSYS_POWER_H */
226