xref: /rk3399_ARM-atf/include/drivers/st/stm32mp2_ddr.h (revision eaaf26e3e6ac347cbfda00b6ba7d327e715d68f0)
1*79629b1aSNicolas Le Bayon /*
2*79629b1aSNicolas Le Bayon  * Copyright (C) 2021-2024, STMicroelectronics - All Rights Reserved
3*79629b1aSNicolas Le Bayon  *
4*79629b1aSNicolas Le Bayon  * SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
5*79629b1aSNicolas Le Bayon  */
6*79629b1aSNicolas Le Bayon 
7*79629b1aSNicolas Le Bayon #ifndef STM32MP2_DDR_H
8*79629b1aSNicolas Le Bayon #define STM32MP2_DDR_H
9*79629b1aSNicolas Le Bayon 
10*79629b1aSNicolas Le Bayon #include <stdbool.h>
11*79629b1aSNicolas Le Bayon 
12*79629b1aSNicolas Le Bayon #include <ddrphy_phyinit_struct.h>
13*79629b1aSNicolas Le Bayon 
14*79629b1aSNicolas Le Bayon #include <drivers/st/stm32mp_ddr.h>
15*79629b1aSNicolas Le Bayon 
16*79629b1aSNicolas Le Bayon struct stm32mp2_ddrctrl_reg {
17*79629b1aSNicolas Le Bayon 	uint32_t mstr;
18*79629b1aSNicolas Le Bayon 	uint32_t mrctrl0;
19*79629b1aSNicolas Le Bayon 	uint32_t mrctrl1;
20*79629b1aSNicolas Le Bayon 	uint32_t mrctrl2;
21*79629b1aSNicolas Le Bayon 	uint32_t derateen;
22*79629b1aSNicolas Le Bayon 	uint32_t derateint;
23*79629b1aSNicolas Le Bayon 	uint32_t deratectl;
24*79629b1aSNicolas Le Bayon 	uint32_t pwrctl;
25*79629b1aSNicolas Le Bayon 	uint32_t pwrtmg;
26*79629b1aSNicolas Le Bayon 	uint32_t hwlpctl;
27*79629b1aSNicolas Le Bayon 	uint32_t rfshctl0;
28*79629b1aSNicolas Le Bayon 	uint32_t rfshctl1;
29*79629b1aSNicolas Le Bayon 	uint32_t rfshctl3;
30*79629b1aSNicolas Le Bayon 	uint32_t crcparctl0;
31*79629b1aSNicolas Le Bayon 	uint32_t crcparctl1;
32*79629b1aSNicolas Le Bayon 	uint32_t init0;
33*79629b1aSNicolas Le Bayon 	uint32_t init1;
34*79629b1aSNicolas Le Bayon 	uint32_t init2;
35*79629b1aSNicolas Le Bayon 	uint32_t init3;
36*79629b1aSNicolas Le Bayon 	uint32_t init4;
37*79629b1aSNicolas Le Bayon 	uint32_t init5;
38*79629b1aSNicolas Le Bayon 	uint32_t init6;
39*79629b1aSNicolas Le Bayon 	uint32_t init7;
40*79629b1aSNicolas Le Bayon 	uint32_t dimmctl;
41*79629b1aSNicolas Le Bayon 	uint32_t rankctl;
42*79629b1aSNicolas Le Bayon 	uint32_t rankctl1;
43*79629b1aSNicolas Le Bayon 	uint32_t zqctl0;
44*79629b1aSNicolas Le Bayon 	uint32_t zqctl1;
45*79629b1aSNicolas Le Bayon 	uint32_t zqctl2;
46*79629b1aSNicolas Le Bayon 	uint32_t dfitmg0;
47*79629b1aSNicolas Le Bayon 	uint32_t dfitmg1;
48*79629b1aSNicolas Le Bayon 	uint32_t dfilpcfg0;
49*79629b1aSNicolas Le Bayon 	uint32_t dfilpcfg1;
50*79629b1aSNicolas Le Bayon 	uint32_t dfiupd0;
51*79629b1aSNicolas Le Bayon 	uint32_t dfiupd1;
52*79629b1aSNicolas Le Bayon 	uint32_t dfiupd2;
53*79629b1aSNicolas Le Bayon 	uint32_t dfimisc;
54*79629b1aSNicolas Le Bayon 	uint32_t dfitmg2;
55*79629b1aSNicolas Le Bayon 	uint32_t dfitmg3;
56*79629b1aSNicolas Le Bayon 	uint32_t dbictl;
57*79629b1aSNicolas Le Bayon 	uint32_t dfiphymstr;
58*79629b1aSNicolas Le Bayon 	uint32_t dbg0;
59*79629b1aSNicolas Le Bayon 	uint32_t dbg1;
60*79629b1aSNicolas Le Bayon 	uint32_t dbgcmd;
61*79629b1aSNicolas Le Bayon 	uint32_t swctl;
62*79629b1aSNicolas Le Bayon 	uint32_t swctlstatic;
63*79629b1aSNicolas Le Bayon 	uint32_t poisoncfg;
64*79629b1aSNicolas Le Bayon 	uint32_t pccfg;
65*79629b1aSNicolas Le Bayon };
66*79629b1aSNicolas Le Bayon 
67*79629b1aSNicolas Le Bayon struct stm32mp2_ddrctrl_timing {
68*79629b1aSNicolas Le Bayon 	uint32_t rfshtmg;
69*79629b1aSNicolas Le Bayon 	uint32_t rfshtmg1;
70*79629b1aSNicolas Le Bayon 	uint32_t dramtmg0;
71*79629b1aSNicolas Le Bayon 	uint32_t dramtmg1;
72*79629b1aSNicolas Le Bayon 	uint32_t dramtmg2;
73*79629b1aSNicolas Le Bayon 	uint32_t dramtmg3;
74*79629b1aSNicolas Le Bayon 	uint32_t dramtmg4;
75*79629b1aSNicolas Le Bayon 	uint32_t dramtmg5;
76*79629b1aSNicolas Le Bayon 	uint32_t dramtmg6;
77*79629b1aSNicolas Le Bayon 	uint32_t dramtmg7;
78*79629b1aSNicolas Le Bayon 	uint32_t dramtmg8;
79*79629b1aSNicolas Le Bayon 	uint32_t dramtmg9;
80*79629b1aSNicolas Le Bayon 	uint32_t dramtmg10;
81*79629b1aSNicolas Le Bayon 	uint32_t dramtmg11;
82*79629b1aSNicolas Le Bayon 	uint32_t dramtmg12;
83*79629b1aSNicolas Le Bayon 	uint32_t dramtmg13;
84*79629b1aSNicolas Le Bayon 	uint32_t dramtmg14;
85*79629b1aSNicolas Le Bayon 	uint32_t dramtmg15;
86*79629b1aSNicolas Le Bayon 	uint32_t odtcfg;
87*79629b1aSNicolas Le Bayon 	uint32_t odtmap;
88*79629b1aSNicolas Le Bayon };
89*79629b1aSNicolas Le Bayon 
90*79629b1aSNicolas Le Bayon struct stm32mp2_ddrctrl_map {
91*79629b1aSNicolas Le Bayon 	uint32_t addrmap0;
92*79629b1aSNicolas Le Bayon 	uint32_t addrmap1;
93*79629b1aSNicolas Le Bayon 	uint32_t addrmap2;
94*79629b1aSNicolas Le Bayon 	uint32_t addrmap3;
95*79629b1aSNicolas Le Bayon 	uint32_t addrmap4;
96*79629b1aSNicolas Le Bayon 	uint32_t addrmap5;
97*79629b1aSNicolas Le Bayon 	uint32_t addrmap6;
98*79629b1aSNicolas Le Bayon 	uint32_t addrmap7;
99*79629b1aSNicolas Le Bayon 	uint32_t addrmap8;
100*79629b1aSNicolas Le Bayon 	uint32_t addrmap9;
101*79629b1aSNicolas Le Bayon 	uint32_t addrmap10;
102*79629b1aSNicolas Le Bayon 	uint32_t addrmap11;
103*79629b1aSNicolas Le Bayon };
104*79629b1aSNicolas Le Bayon 
105*79629b1aSNicolas Le Bayon struct stm32mp2_ddrctrl_perf {
106*79629b1aSNicolas Le Bayon 	uint32_t sched;
107*79629b1aSNicolas Le Bayon 	uint32_t sched1;
108*79629b1aSNicolas Le Bayon 	uint32_t perfhpr1;
109*79629b1aSNicolas Le Bayon 	uint32_t perflpr1;
110*79629b1aSNicolas Le Bayon 	uint32_t perfwr1;
111*79629b1aSNicolas Le Bayon 	uint32_t sched3;
112*79629b1aSNicolas Le Bayon 	uint32_t sched4;
113*79629b1aSNicolas Le Bayon 	uint32_t pcfgr_0;
114*79629b1aSNicolas Le Bayon 	uint32_t pcfgw_0;
115*79629b1aSNicolas Le Bayon 	uint32_t pctrl_0;
116*79629b1aSNicolas Le Bayon 	uint32_t pcfgqos0_0;
117*79629b1aSNicolas Le Bayon 	uint32_t pcfgqos1_0;
118*79629b1aSNicolas Le Bayon 	uint32_t pcfgwqos0_0;
119*79629b1aSNicolas Le Bayon 	uint32_t pcfgwqos1_0;
120*79629b1aSNicolas Le Bayon #if STM32MP_DDR_DUAL_AXI_PORT
121*79629b1aSNicolas Le Bayon 	uint32_t pcfgr_1;
122*79629b1aSNicolas Le Bayon 	uint32_t pcfgw_1;
123*79629b1aSNicolas Le Bayon 	uint32_t pctrl_1;
124*79629b1aSNicolas Le Bayon 	uint32_t pcfgqos0_1;
125*79629b1aSNicolas Le Bayon 	uint32_t pcfgqos1_1;
126*79629b1aSNicolas Le Bayon 	uint32_t pcfgwqos0_1;
127*79629b1aSNicolas Le Bayon 	uint32_t pcfgwqos1_1;
128*79629b1aSNicolas Le Bayon #endif /* STM32MP_DDR_DUAL_AXI_PORT */
129*79629b1aSNicolas Le Bayon };
130*79629b1aSNicolas Le Bayon 
131*79629b1aSNicolas Le Bayon struct stm32mp_ddr_config {
132*79629b1aSNicolas Le Bayon 	struct stm32mp_ddr_info info;
133*79629b1aSNicolas Le Bayon 	struct stm32mp2_ddrctrl_reg c_reg;
134*79629b1aSNicolas Le Bayon 	struct stm32mp2_ddrctrl_timing c_timing;
135*79629b1aSNicolas Le Bayon 	struct stm32mp2_ddrctrl_map c_map;
136*79629b1aSNicolas Le Bayon 	struct stm32mp2_ddrctrl_perf c_perf;
137*79629b1aSNicolas Le Bayon 	bool self_refresh;
138*79629b1aSNicolas Le Bayon 	uint32_t zdata;
139*79629b1aSNicolas Le Bayon 	struct user_input_basic uib;
140*79629b1aSNicolas Le Bayon 	struct user_input_advanced uia;
141*79629b1aSNicolas Le Bayon 	struct user_input_mode_register uim;
142*79629b1aSNicolas Le Bayon 	struct user_input_swizzle uis;
143*79629b1aSNicolas Le Bayon };
144*79629b1aSNicolas Le Bayon 
145*79629b1aSNicolas Le Bayon void stm32mp2_ddr_init(struct stm32mp_ddr_priv *priv, struct stm32mp_ddr_config *config);
146*79629b1aSNicolas Le Bayon 
147*79629b1aSNicolas Le Bayon #endif /* STM32MP2_DDR_H */
148