xref: /arm-trusted-firmware/include/drivers/nxp/ddr/fsl-mmdc/fsl_mmdc.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright 2021 NXP
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  *
6*91f16700Schasinglulu  */
7*91f16700Schasinglulu 
8*91f16700Schasinglulu #ifndef FSL_MMDC_H
9*91f16700Schasinglulu #define FSL_MMDC_H
10*91f16700Schasinglulu 
11*91f16700Schasinglulu /* PHY Write Leveling Configuration and Error Status Register (MPWLGCR) */
12*91f16700Schasinglulu #define MPWLGCR_HW_WL_EN		(1 << 0)
13*91f16700Schasinglulu 
14*91f16700Schasinglulu /* PHY Pre-defined Compare and CA delay-line Configuration (MPPDCMPR2) */
15*91f16700Schasinglulu #define MPPDCMPR2_MPR_COMPARE_EN	(1 << 0)
16*91f16700Schasinglulu 
17*91f16700Schasinglulu 
18*91f16700Schasinglulu /* MMDC PHY Read DQS gating control register 0 (MPDGCTRL0) */
19*91f16700Schasinglulu #define AUTO_RD_DQS_GATING_CALIBRATION_EN	(1 << 28)
20*91f16700Schasinglulu 
21*91f16700Schasinglulu /* MMDC PHY Read Delay HW Calibration Control Register (MPRDDLHWCTL) */
22*91f16700Schasinglulu #define MPRDDLHWCTL_AUTO_RD_CALIBRATION_EN	(1 << 4)
23*91f16700Schasinglulu 
24*91f16700Schasinglulu /* MMDC Core Power Saving Control and Status Register (MMDC_MAPSR) */
25*91f16700Schasinglulu #define MMDC_MAPSR_PWR_SAV_CTRL_STAT	0x00001067
26*91f16700Schasinglulu 
27*91f16700Schasinglulu /* MMDC Core Refresh Control Register (MMDC_MDREF) */
28*91f16700Schasinglulu #define MDREF_START_REFRESH	(1 << 0)
29*91f16700Schasinglulu 
30*91f16700Schasinglulu /* MMDC Core Special Command Register (MDSCR) */
31*91f16700Schasinglulu #define CMD_ADDR_MSB_MR_OP(x)	(x << 24)
32*91f16700Schasinglulu #define CMD_ADDR_LSB_MR_ADDR(x)	(x << 16)
33*91f16700Schasinglulu #define MDSCR_DISABLE_CFG_REQ	(0 << 15)
34*91f16700Schasinglulu #define MDSCR_ENABLE_CON_REQ	(1 << 15)
35*91f16700Schasinglulu #define MDSCR_CON_ACK		(1 << 14)
36*91f16700Schasinglulu #define MDSCR_WL_EN		(1 << 9)
37*91f16700Schasinglulu #define	CMD_NORMAL		(0 << 4)
38*91f16700Schasinglulu #define	CMD_PRECHARGE		(1 << 4)
39*91f16700Schasinglulu #define	CMD_AUTO_REFRESH	(2 << 4)
40*91f16700Schasinglulu #define	CMD_LOAD_MODE_REG	(3 << 4)
41*91f16700Schasinglulu #define	CMD_ZQ_CALIBRATION	(4 << 4)
42*91f16700Schasinglulu #define	CMD_PRECHARGE_BANK_OPEN	(5 << 4)
43*91f16700Schasinglulu #define	CMD_MRR			(6 << 4)
44*91f16700Schasinglulu #define CMD_BANK_ADDR_0		0x0
45*91f16700Schasinglulu #define CMD_BANK_ADDR_1		0x1
46*91f16700Schasinglulu #define CMD_BANK_ADDR_2		0x2
47*91f16700Schasinglulu #define CMD_BANK_ADDR_3		0x3
48*91f16700Schasinglulu #define CMD_BANK_ADDR_4		0x4
49*91f16700Schasinglulu #define CMD_BANK_ADDR_5		0x5
50*91f16700Schasinglulu #define CMD_BANK_ADDR_6		0x6
51*91f16700Schasinglulu #define CMD_BANK_ADDR_7		0x7
52*91f16700Schasinglulu 
53*91f16700Schasinglulu /* MMDC Core Control Register (MDCTL) */
54*91f16700Schasinglulu #define MDCTL_SDE0		(U(1) << 31)
55*91f16700Schasinglulu #define MDCTL_SDE1		(1 << 30)
56*91f16700Schasinglulu 
57*91f16700Schasinglulu /* MMDC PHY ZQ HW control register (MMDC_MPZQHWCTRL) */
58*91f16700Schasinglulu #define MPZQHWCTRL_ZQ_HW_FORCE	(1 << 16)
59*91f16700Schasinglulu 
60*91f16700Schasinglulu /* MMDC PHY Measure Unit Register (MMDC_MPMUR0) */
61*91f16700Schasinglulu #define MMDC_MPMUR0_FRC_MSR	(1 << 11)
62*91f16700Schasinglulu 
63*91f16700Schasinglulu /* MMDC PHY Read delay-lines Configuration Register (MMDC_MPRDDLCTL) */
64*91f16700Schasinglulu /* default 64 for a quarter cycle delay */
65*91f16700Schasinglulu #define MMDC_MPRDDLCTL_DEFAULT_DELAY	0x40404040
66*91f16700Schasinglulu 
67*91f16700Schasinglulu /* MMDC Registers */
68*91f16700Schasinglulu struct mmdc_regs {
69*91f16700Schasinglulu 	unsigned int mdctl;
70*91f16700Schasinglulu 	unsigned int mdpdc;
71*91f16700Schasinglulu 	unsigned int mdotc;
72*91f16700Schasinglulu 	unsigned int mdcfg0;
73*91f16700Schasinglulu 	unsigned int mdcfg1;
74*91f16700Schasinglulu 	unsigned int mdcfg2;
75*91f16700Schasinglulu 	unsigned int mdmisc;
76*91f16700Schasinglulu 	unsigned int mdscr;
77*91f16700Schasinglulu 	unsigned int mdref;
78*91f16700Schasinglulu 	unsigned int res1[2];
79*91f16700Schasinglulu 	unsigned int mdrwd;
80*91f16700Schasinglulu 	unsigned int mdor;
81*91f16700Schasinglulu 	unsigned int mdmrr;
82*91f16700Schasinglulu 	unsigned int mdcfg3lp;
83*91f16700Schasinglulu 	unsigned int mdmr4;
84*91f16700Schasinglulu 	unsigned int mdasp;
85*91f16700Schasinglulu 	unsigned int res2[239];
86*91f16700Schasinglulu 	unsigned int maarcr;
87*91f16700Schasinglulu 	unsigned int mapsr;
88*91f16700Schasinglulu 	unsigned int maexidr0;
89*91f16700Schasinglulu 	unsigned int maexidr1;
90*91f16700Schasinglulu 	unsigned int madpcr0;
91*91f16700Schasinglulu 	unsigned int madpcr1;
92*91f16700Schasinglulu 	unsigned int madpsr0;
93*91f16700Schasinglulu 	unsigned int madpsr1;
94*91f16700Schasinglulu 	unsigned int madpsr2;
95*91f16700Schasinglulu 	unsigned int madpsr3;
96*91f16700Schasinglulu 	unsigned int madpsr4;
97*91f16700Schasinglulu 	unsigned int madpsr5;
98*91f16700Schasinglulu 	unsigned int masbs0;
99*91f16700Schasinglulu 	unsigned int masbs1;
100*91f16700Schasinglulu 	unsigned int res3[2];
101*91f16700Schasinglulu 	unsigned int magenp;
102*91f16700Schasinglulu 	unsigned int res4[239];
103*91f16700Schasinglulu 	unsigned int mpzqhwctrl;
104*91f16700Schasinglulu 	unsigned int mpzqswctrl;
105*91f16700Schasinglulu 	unsigned int mpwlgcr;
106*91f16700Schasinglulu 	unsigned int mpwldectrl0;
107*91f16700Schasinglulu 	unsigned int mpwldectrl1;
108*91f16700Schasinglulu 	unsigned int mpwldlst;
109*91f16700Schasinglulu 	unsigned int mpodtctrl;
110*91f16700Schasinglulu 	unsigned int mprddqby0dl;
111*91f16700Schasinglulu 	unsigned int mprddqby1dl;
112*91f16700Schasinglulu 	unsigned int mprddqby2dl;
113*91f16700Schasinglulu 	unsigned int mprddqby3dl;
114*91f16700Schasinglulu 	unsigned int mpwrdqby0dl;
115*91f16700Schasinglulu 	unsigned int mpwrdqby1dl;
116*91f16700Schasinglulu 	unsigned int mpwrdqby2dl;
117*91f16700Schasinglulu 	unsigned int mpwrdqby3dl;
118*91f16700Schasinglulu 	unsigned int mpdgctrl0;
119*91f16700Schasinglulu 	unsigned int mpdgctrl1;
120*91f16700Schasinglulu 	unsigned int mpdgdlst0;
121*91f16700Schasinglulu 	unsigned int mprddlctl;
122*91f16700Schasinglulu 	unsigned int mprddlst;
123*91f16700Schasinglulu 	unsigned int mpwrdlctl;
124*91f16700Schasinglulu 	unsigned int mpwrdlst;
125*91f16700Schasinglulu 	unsigned int mpsdctrl;
126*91f16700Schasinglulu 	unsigned int mpzqlp2ctl;
127*91f16700Schasinglulu 	unsigned int mprddlhwctl;
128*91f16700Schasinglulu 	unsigned int mpwrdlhwctl;
129*91f16700Schasinglulu 	unsigned int mprddlhwst0;
130*91f16700Schasinglulu 	unsigned int mprddlhwst1;
131*91f16700Schasinglulu 	unsigned int mpwrdlhwst0;
132*91f16700Schasinglulu 	unsigned int mpwrdlhwst1;
133*91f16700Schasinglulu 	unsigned int mpwlhwerr;
134*91f16700Schasinglulu 	unsigned int mpdghwst0;
135*91f16700Schasinglulu 	unsigned int mpdghwst1;
136*91f16700Schasinglulu 	unsigned int mpdghwst2;
137*91f16700Schasinglulu 	unsigned int mpdghwst3;
138*91f16700Schasinglulu 	unsigned int mppdcmpr1;
139*91f16700Schasinglulu 	unsigned int mppdcmpr2;
140*91f16700Schasinglulu 	unsigned int mpswdar0;
141*91f16700Schasinglulu 	unsigned int mpswdrdr0;
142*91f16700Schasinglulu 	unsigned int mpswdrdr1;
143*91f16700Schasinglulu 	unsigned int mpswdrdr2;
144*91f16700Schasinglulu 	unsigned int mpswdrdr3;
145*91f16700Schasinglulu 	unsigned int mpswdrdr4;
146*91f16700Schasinglulu 	unsigned int mpswdrdr5;
147*91f16700Schasinglulu 	unsigned int mpswdrdr6;
148*91f16700Schasinglulu 	unsigned int mpswdrdr7;
149*91f16700Schasinglulu 	unsigned int mpmur0;
150*91f16700Schasinglulu 	unsigned int mpwrcadl;
151*91f16700Schasinglulu 	unsigned int mpdccr;
152*91f16700Schasinglulu };
153*91f16700Schasinglulu 
154*91f16700Schasinglulu struct fsl_mmdc_info {
155*91f16700Schasinglulu 	unsigned int mdctl;
156*91f16700Schasinglulu 	unsigned int mdpdc;
157*91f16700Schasinglulu 	unsigned int mdotc;
158*91f16700Schasinglulu 	unsigned int mdcfg0;
159*91f16700Schasinglulu 	unsigned int mdcfg1;
160*91f16700Schasinglulu 	unsigned int mdcfg2;
161*91f16700Schasinglulu 	unsigned int mdmisc;
162*91f16700Schasinglulu 	unsigned int mdref;
163*91f16700Schasinglulu 	unsigned int mdrwd;
164*91f16700Schasinglulu 	unsigned int mdor;
165*91f16700Schasinglulu 	unsigned int mdasp;
166*91f16700Schasinglulu 	unsigned int mpodtctrl;
167*91f16700Schasinglulu 	unsigned int mpzqhwctrl;
168*91f16700Schasinglulu 	unsigned int mprddlctl;
169*91f16700Schasinglulu };
170*91f16700Schasinglulu 
171*91f16700Schasinglulu void mmdc_init(const struct fsl_mmdc_info *priv, uintptr_t nxp_ddr_addr);
172*91f16700Schasinglulu 
173*91f16700Schasinglulu #endif /* FSL_MMDC_H */
174