1  /*
2   * Copyright (c) 2017-2022, STMicroelectronics - All Rights Reserved
3   *
4   * SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
5   */
6  
7  #ifndef STM32MP1_DDR_REGS_H
8  #define STM32MP1_DDR_REGS_H
9  
10  #include <drivers/st/stm32mp_ddrctrl_regs.h>
11  #include <lib/utils_def.h>
12  
13  /* DDR Physical Interface Control (DDRPHYC) registers*/
14  struct stm32mp_ddrphy {
15  	uint32_t ridr;		/* 0x00 R Revision Identification */
16  	uint32_t pir;		/* 0x04 R/W PHY Initialization */
17  	uint32_t pgcr;		/* 0x08 R/W PHY General Configuration */
18  	uint32_t pgsr;		/* 0x0C PHY General Status */
19  	uint32_t dllgcr;	/* 0x10 R/W DLL General Control */
20  	uint32_t acdllcr;	/* 0x14 R/W AC DLL Control */
21  	uint32_t ptr0;		/* 0x18 R/W PHY Timing 0 */
22  	uint32_t ptr1;		/* 0x1C R/W PHY Timing 1 */
23  	uint32_t ptr2;		/* 0x20 R/W PHY Timing 2 */
24  	uint32_t aciocr;	/* 0x24 AC I/O Configuration */
25  	uint32_t dxccr;		/* 0x28 DATX8 Common Configuration */
26  	uint32_t dsgcr;		/* 0x2C DDR System General Configuration */
27  	uint32_t dcr;		/* 0x30 DRAM Configuration */
28  	uint32_t dtpr0;		/* 0x34 DRAM Timing Parameters0 */
29  	uint32_t dtpr1;		/* 0x38 DRAM Timing Parameters1 */
30  	uint32_t dtpr2;		/* 0x3C DRAM Timing Parameters2 */
31  	uint32_t mr0;		/* 0x40 Mode 0 */
32  	uint32_t mr1;		/* 0x44 Mode 1 */
33  	uint32_t mr2;		/* 0x48 Mode 2 */
34  	uint32_t mr3;		/* 0x4C Mode 3 */
35  	uint32_t odtcr;		/* 0x50 ODT Configuration */
36  	uint32_t dtar;		/* 0x54 data training address */
37  	uint32_t dtdr0;		/* 0x58 */
38  	uint32_t dtdr1;		/* 0x5c */
39  	uint8_t res1[0x0c0 - 0x060];	/* 0x60 */
40  	uint32_t dcuar;		/* 0xc0 Address */
41  	uint32_t dcudr;		/* 0xc4 DCU Data */
42  	uint32_t dcurr;		/* 0xc8 DCU Run */
43  	uint32_t dculr;		/* 0xcc DCU Loop */
44  	uint32_t dcugcr;	/* 0xd0 DCU General Configuration */
45  	uint32_t dcutpr;	/* 0xd4 DCU Timing Parameters */
46  	uint32_t dcusr0;	/* 0xd8 DCU Status 0 */
47  	uint32_t dcusr1;	/* 0xdc DCU Status 1 */
48  	uint8_t res2[0x100 - 0xe0];	/* 0xe0 */
49  	uint32_t bistrr;	/* 0x100 BIST Run */
50  	uint32_t bistmskr0;	/* 0x104 BIST Mask 0 */
51  	uint32_t bistmskr1;	/* 0x108 BIST Mask 0 */
52  	uint32_t bistwcr;	/* 0x10c BIST Word Count */
53  	uint32_t bistlsr;	/* 0x110 BIST LFSR Seed */
54  	uint32_t bistar0;	/* 0x114 BIST Address 0 */
55  	uint32_t bistar1;	/* 0x118 BIST Address 1 */
56  	uint32_t bistar2;	/* 0x11c BIST Address 2 */
57  	uint32_t bistupdr;	/* 0x120 BIST User Data Pattern */
58  	uint32_t bistgsr;	/* 0x124 BIST General Status */
59  	uint32_t bistwer;	/* 0x128 BIST Word Error */
60  	uint32_t bistber0;	/* 0x12c BIST Bit Error 0 */
61  	uint32_t bistber1;	/* 0x130 BIST Bit Error 1 */
62  	uint32_t bistber2;	/* 0x134 BIST Bit Error 2 */
63  	uint32_t bistwcsr;	/* 0x138 BIST Word Count Status */
64  	uint32_t bistfwr0;	/* 0x13c BIST Fail Word 0 */
65  	uint32_t bistfwr1;	/* 0x140 BIST Fail Word 1 */
66  	uint8_t res3[0x178 - 0x144];	/* 0x144 */
67  	uint32_t gpr0;		/* 0x178 General Purpose 0 (GPR0) */
68  	uint32_t gpr1;		/* 0x17C General Purpose 1 (GPR1) */
69  	uint32_t zq0cr0;	/* 0x180 zq 0 control 0 */
70  	uint32_t zq0cr1;	/* 0x184 zq 0 control 1 */
71  	uint32_t zq0sr0;	/* 0x188 zq 0 status 0 */
72  	uint32_t zq0sr1;	/* 0x18C zq 0 status 1 */
73  	uint8_t res4[0x1C0 - 0x190];	/* 0x190 */
74  	uint32_t dx0gcr;	/* 0x1c0 Byte lane 0 General Configuration */
75  	uint32_t dx0gsr0;	/* 0x1c4 Byte lane 0 General Status 0 */
76  	uint32_t dx0gsr1;	/* 0x1c8 Byte lane 0 General Status 1 */
77  	uint32_t dx0dllcr;	/* 0x1cc Byte lane 0 DLL Control */
78  	uint32_t dx0dqtr;	/* 0x1d0 Byte lane 0 DQ Timing */
79  	uint32_t dx0dqstr;	/* 0x1d4 Byte lane 0 DQS Timing */
80  	uint8_t res5[0x200 - 0x1d8];	/* 0x1d8 */
81  	uint32_t dx1gcr;	/* 0x200 Byte lane 1 General Configuration */
82  	uint32_t dx1gsr0;	/* 0x204 Byte lane 1 General Status 0 */
83  	uint32_t dx1gsr1;	/* 0x208 Byte lane 1 General Status 1 */
84  	uint32_t dx1dllcr;	/* 0x20c Byte lane 1 DLL Control */
85  	uint32_t dx1dqtr;	/* 0x210 Byte lane 1 DQ Timing */
86  	uint32_t dx1dqstr;	/* 0x214 Byte lane 1 QS Timing */
87  	uint8_t res6[0x240 - 0x218];	/* 0x218 */
88  #if STM32MP_DDR_32BIT_INTERFACE
89  	uint32_t dx2gcr;	/* 0x240 Byte lane 2 General Configuration */
90  	uint32_t dx2gsr0;	/* 0x244 Byte lane 2 General Status 0 */
91  	uint32_t dx2gsr1;	/* 0x248 Byte lane 2 General Status 1 */
92  	uint32_t dx2dllcr;	/* 0x24c Byte lane 2 DLL Control */
93  	uint32_t dx2dqtr;	/* 0x250 Byte lane 2 DQ Timing */
94  	uint32_t dx2dqstr;	/* 0x254 Byte lane 2 QS Timing */
95  	uint8_t res7[0x280 - 0x258];	/* 0x258 */
96  	uint32_t dx3gcr;	/* 0x280 Byte lane 3 General Configuration */
97  	uint32_t dx3gsr0;	/* 0x284 Byte lane 3 General Status 0 */
98  	uint32_t dx3gsr1;	/* 0x288 Byte lane 3 General Status 1 */
99  	uint32_t dx3dllcr;	/* 0x28c Byte lane 3 DLL Control */
100  	uint32_t dx3dqtr;	/* 0x290 Byte lane 3 DQ Timing */
101  	uint32_t dx3dqstr;	/* 0x294 Byte lane 3 QS Timing */
102  #endif
103  } __packed;
104  
105  /* DDR PHY registers offsets */
106  #define DDRPHYC_PIR				0x004
107  #define DDRPHYC_PGCR				0x008
108  #define DDRPHYC_PGSR				0x00C
109  #define DDRPHYC_DLLGCR				0x010
110  #define DDRPHYC_ACDLLCR				0x014
111  #define DDRPHYC_PTR0				0x018
112  #define DDRPHYC_ACIOCR				0x024
113  #define DDRPHYC_DXCCR				0x028
114  #define DDRPHYC_DSGCR				0x02C
115  #define DDRPHYC_ZQ0CR0				0x180
116  #define DDRPHYC_DX0GCR				0x1C0
117  #define DDRPHYC_DX0DLLCR			0x1CC
118  #define DDRPHYC_DX1GCR				0x200
119  #define DDRPHYC_DX1DLLCR			0x20C
120  #if STM32MP_DDR_32BIT_INTERFACE
121  #define DDRPHYC_DX2GCR				0x240
122  #define DDRPHYC_DX2DLLCR			0x24C
123  #define DDRPHYC_DX3GCR				0x280
124  #define DDRPHYC_DX3DLLCR			0x28C
125  #endif
126  
127  /* DDR PHY Register fields */
128  #define DDRPHYC_PIR_INIT			BIT(0)
129  #define DDRPHYC_PIR_DLLSRST			BIT(1)
130  #define DDRPHYC_PIR_DLLLOCK			BIT(2)
131  #define DDRPHYC_PIR_ZCAL			BIT(3)
132  #define DDRPHYC_PIR_ITMSRST			BIT(4)
133  #define DDRPHYC_PIR_DRAMRST			BIT(5)
134  #define DDRPHYC_PIR_DRAMINIT			BIT(6)
135  #define DDRPHYC_PIR_QSTRN			BIT(7)
136  #define DDRPHYC_PIR_RVTRN			BIT(8)
137  #define DDRPHYC_PIR_ICPC			BIT(16)
138  #define DDRPHYC_PIR_ZCALBYP			BIT(30)
139  #define DDRPHYC_PIR_INITSTEPS_MASK		GENMASK(31, 7)
140  
141  #define DDRPHYC_PGCR_DFTCMP			BIT(2)
142  #define DDRPHYC_PGCR_PDDISDX			BIT(24)
143  #define DDRPHYC_PGCR_RFSHDT_MASK		GENMASK(28, 25)
144  
145  #define DDRPHYC_PGSR_IDONE			BIT(0)
146  #define DDRPHYC_PGSR_DTERR			BIT(5)
147  #define DDRPHYC_PGSR_DTIERR			BIT(6)
148  #define DDRPHYC_PGSR_DFTERR			BIT(7)
149  #define DDRPHYC_PGSR_RVERR			BIT(8)
150  #define DDRPHYC_PGSR_RVEIRR			BIT(9)
151  
152  #define DDRPHYC_DLLGCR_BPS200			BIT(23)
153  
154  #define DDRPHYC_ACDLLCR_DLLSRST			BIT(30)
155  #define DDRPHYC_ACDLLCR_DLLDIS			BIT(31)
156  
157  #define DDRPHYC_PTR0_TDLLSRST_OFFSET		0
158  #define DDRPHYC_PTR0_TDLLSRST_MASK		GENMASK(5, 0)
159  #define DDRPHYC_PTR0_TDLLLOCK_OFFSET		6
160  #define DDRPHYC_PTR0_TDLLLOCK_MASK		GENMASK(17, 6)
161  #define DDRPHYC_PTR0_TITMSRST_OFFSET		18
162  #define DDRPHYC_PTR0_TITMSRST_MASK		GENMASK(21, 18)
163  
164  #define DDRPHYC_ACIOCR_ACPDD			BIT(3)
165  #define DDRPHYC_ACIOCR_ACPDR			BIT(4)
166  #define DDRPHYC_ACIOCR_CKPDD_MASK		GENMASK(10, 8)
167  #define DDRPHYC_ACIOCR_CKPDD_0			BIT(8)
168  #define DDRPHYC_ACIOCR_CKPDR_MASK		GENMASK(13, 11)
169  #define DDRPHYC_ACIOCR_CKPDR_0			BIT(11)
170  #define DDRPHYC_ACIOCR_CSPDD_MASK		GENMASK(21, 18)
171  #define DDRPHYC_ACIOCR_CSPDD_0			BIT(18)
172  #define DDRPHYC_ACIOCR_RSTPDD			BIT(27)
173  #define DDRPHYC_ACIOCR_RSTPDR			BIT(28)
174  
175  #define DDRPHYC_DXCCR_DXPDD			BIT(2)
176  #define DDRPHYC_DXCCR_DXPDR			BIT(3)
177  
178  #define DDRPHYC_DSGCR_CKEPDD_MASK		GENMASK(19, 16)
179  #define DDRPHYC_DSGCR_CKEPDD_0			BIT(16)
180  #define DDRPHYC_DSGCR_ODTPDD_MASK		GENMASK(23, 20)
181  #define DDRPHYC_DSGCR_ODTPDD_0			BIT(20)
182  #define DDRPHYC_DSGCR_NL2PD			BIT(24)
183  
184  #define DDRPHYC_ZQ0CRN_ZDATA_MASK		GENMASK(27, 0)
185  #define DDRPHYC_ZQ0CRN_ZDATA_SHIFT		0
186  #define DDRPHYC_ZQ0CRN_ZDEN			BIT(28)
187  #define DDRPHYC_ZQ0CRN_ZQPD			BIT(31)
188  
189  #define DDRPHYC_DXNGCR_DXEN			BIT(0)
190  
191  #define DDRPHYC_DXNDLLCR_DLLSRST		BIT(30)
192  #define DDRPHYC_DXNDLLCR_DLLDIS			BIT(31)
193  #define DDRPHYC_DXNDLLCR_SDPHASE_MASK		GENMASK(17, 14)
194  #define DDRPHYC_DXNDLLCR_SDPHASE_SHIFT		14
195  
196  #endif /* STM32MP1_DDR_REGS_H */
197