xref: /OK3568_Linux_fs/u-boot/arch/x86/cpu/quark/smc.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright (C) 2013, Intel Corporation
3*4882a593Smuzhiyun  * Copyright (C) 2015, Bin Meng <bmeng.cn@gmail.com>
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Ported from Intel released Quark UEFI BIOS
6*4882a593Smuzhiyun  * QuarkSocPkg/QuarkNorthCluster/MemoryInit/Pei
7*4882a593Smuzhiyun  *
8*4882a593Smuzhiyun  * SPDX-License-Identifier:	Intel
9*4882a593Smuzhiyun  */
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #ifndef _SMC_H_
12*4882a593Smuzhiyun #define _SMC_H_
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun /* System Memory Controller Register Defines */
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun /* Memory Controller Message Bus Registers Offsets */
17*4882a593Smuzhiyun #define DRP			0x00
18*4882a593Smuzhiyun #define DTR0			0x01
19*4882a593Smuzhiyun #define DTR1			0x02
20*4882a593Smuzhiyun #define DTR2			0x03
21*4882a593Smuzhiyun #define DTR3			0x04
22*4882a593Smuzhiyun #define DTR4			0x05
23*4882a593Smuzhiyun #define DPMC0			0x06
24*4882a593Smuzhiyun #define DPMC1			0x07
25*4882a593Smuzhiyun #define DRFC			0x08
26*4882a593Smuzhiyun #define DSCH			0x09
27*4882a593Smuzhiyun #define DCAL			0x0a
28*4882a593Smuzhiyun #define DRMC			0x0b
29*4882a593Smuzhiyun #define PMSTS			0x0c
30*4882a593Smuzhiyun #define DCO			0x0f
31*4882a593Smuzhiyun #define DSTAT			0x20
32*4882a593Smuzhiyun #define SSKPD0			0x4a
33*4882a593Smuzhiyun #define SSKPD1			0x4b
34*4882a593Smuzhiyun #define DECCCTRL		0x60
35*4882a593Smuzhiyun #define DECCSTAT		0x61
36*4882a593Smuzhiyun #define DECCSBECNT		0x62
37*4882a593Smuzhiyun #define DECCSBECA		0x68
38*4882a593Smuzhiyun #define DECCSBECS		0x69
39*4882a593Smuzhiyun #define DECCDBECA		0x6a
40*4882a593Smuzhiyun #define DECCDBECS		0x6b
41*4882a593Smuzhiyun #define DFUSESTAT		0x70
42*4882a593Smuzhiyun #define SCRMSEED		0x80
43*4882a593Smuzhiyun #define SCRMLO			0x81
44*4882a593Smuzhiyun #define SCRMHI			0x82
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun /* DRP register defines */
47*4882a593Smuzhiyun #define DRP_RKEN0		(1 << 0)
48*4882a593Smuzhiyun #define DRP_RKEN1		(1 << 1)
49*4882a593Smuzhiyun #define DRP_PRI64BSPLITEN	(1 << 13)
50*4882a593Smuzhiyun #define DRP_ADDRMAP_MAP0	(1 << 14)
51*4882a593Smuzhiyun #define DRP_ADDRMAP_MAP1	(1 << 15)
52*4882a593Smuzhiyun #define DRP_ADDRMAP_MASK	0x0000c000
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun /* DTR0 register defines */
55*4882a593Smuzhiyun #define DTR0_DFREQ_MASK		0x00000003
56*4882a593Smuzhiyun #define DTR0_TRP_MASK		0x000000f0
57*4882a593Smuzhiyun #define DTR0_TRCD_MASK		0x00000f00
58*4882a593Smuzhiyun #define DTR0_TCL_MASK		0x00007000
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun /* DTR1 register defines */
61*4882a593Smuzhiyun #define DTR1_TWCL_MASK		0x00000007
62*4882a593Smuzhiyun #define DTR1_TCMD_MASK		0x00000030
63*4882a593Smuzhiyun #define DTR1_TWTP_MASK		0x00000f00
64*4882a593Smuzhiyun #define DTR1_TCCD_12CLK		(1 << 12)
65*4882a593Smuzhiyun #define DTR1_TCCD_18CLK		(1 << 13)
66*4882a593Smuzhiyun #define DTR1_TCCD_MASK		0x00003000
67*4882a593Smuzhiyun #define DTR1_TFAW_MASK		0x000f0000
68*4882a593Smuzhiyun #define DTR1_TRAS_MASK		0x00f00000
69*4882a593Smuzhiyun #define DTR1_TRRD_MASK		0x03000000
70*4882a593Smuzhiyun #define DTR1_TRTP_MASK		0x70000000
71*4882a593Smuzhiyun 
72*4882a593Smuzhiyun /* DTR2 register defines */
73*4882a593Smuzhiyun #define DTR2_TRRDR_MASK		0x00000007
74*4882a593Smuzhiyun #define DTR2_TWWDR_MASK		0x00000700
75*4882a593Smuzhiyun #define DTR2_TRWDR_MASK		0x000f0000
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun /* DTR3 register defines */
78*4882a593Smuzhiyun #define DTR3_TWRDR_MASK		0x00000007
79*4882a593Smuzhiyun #define DTR3_TXXXX_MASK		0x00000070
80*4882a593Smuzhiyun #define DTR3_TRWSR_MASK		0x00000f00
81*4882a593Smuzhiyun #define DTR3_TWRSR_MASK		0x0001e000
82*4882a593Smuzhiyun #define DTR3_TXP_MASK		0x00c00000
83*4882a593Smuzhiyun 
84*4882a593Smuzhiyun /* DTR4 register defines */
85*4882a593Smuzhiyun #define DTR4_WRODTSTRT_MASK	0x00000003
86*4882a593Smuzhiyun #define DTR4_WRODTSTOP_MASK	0x00000070
87*4882a593Smuzhiyun #define DTR4_XXXX1_MASK		0x00000700
88*4882a593Smuzhiyun #define DTR4_XXXX2_MASK		0x00007000
89*4882a593Smuzhiyun #define DTR4_ODTDIS		(1 << 15)
90*4882a593Smuzhiyun #define DTR4_TRGSTRDIS		(1 << 16)
91*4882a593Smuzhiyun 
92*4882a593Smuzhiyun /* DPMC0 register defines */
93*4882a593Smuzhiyun #define DPMC0_PCLSTO_MASK	0x00070000
94*4882a593Smuzhiyun #define DPMC0_PREAPWDEN		(1 << 21)
95*4882a593Smuzhiyun #define DPMC0_DYNSREN		(1 << 23)
96*4882a593Smuzhiyun #define DPMC0_CLKGTDIS		(1 << 24)
97*4882a593Smuzhiyun #define DPMC0_DISPWRDN		(1 << 25)
98*4882a593Smuzhiyun #define DPMC0_ENPHYCLKGATE	(1 << 29)
99*4882a593Smuzhiyun 
100*4882a593Smuzhiyun /* DRFC register defines */
101*4882a593Smuzhiyun #define DRFC_TREFI_MASK		0x00007000
102*4882a593Smuzhiyun #define DRFC_REFDBTCLR		(1 << 21)
103*4882a593Smuzhiyun 
104*4882a593Smuzhiyun /* DSCH register defines */
105*4882a593Smuzhiyun #define DSCH_OOODIS		(1 << 8)
106*4882a593Smuzhiyun #define DSCH_OOOST3DIS		(1 << 9)
107*4882a593Smuzhiyun #define DSCH_NEWBYPDIS		(1 << 12)
108*4882a593Smuzhiyun 
109*4882a593Smuzhiyun /* DCAL register defines */
110*4882a593Smuzhiyun #define DCAL_ZQCINT_MASK	0x00000700
111*4882a593Smuzhiyun #define DCAL_SRXZQCL_MASK	0x00003000
112*4882a593Smuzhiyun 
113*4882a593Smuzhiyun /* DRMC register defines */
114*4882a593Smuzhiyun #define DRMC_CKEMODE		(1 << 4)
115*4882a593Smuzhiyun #define DRMC_ODTMODE		(1 << 12)
116*4882a593Smuzhiyun #define DRMC_COLDWAKE		(1 << 16)
117*4882a593Smuzhiyun 
118*4882a593Smuzhiyun /* PMSTS register defines */
119*4882a593Smuzhiyun #define PMSTS_DISR		(1 << 0)
120*4882a593Smuzhiyun 
121*4882a593Smuzhiyun /* DCO register defines */
122*4882a593Smuzhiyun #define DCO_DRPLOCK		(1 << 0)
123*4882a593Smuzhiyun #define DCO_CPGCLOCK		(1 << 8)
124*4882a593Smuzhiyun #define DCO_PMICTL		(1 << 28)
125*4882a593Smuzhiyun #define DCO_PMIDIS		(1 << 29)
126*4882a593Smuzhiyun #define DCO_IC			(1 << 31)
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun /* DECCCTRL register defines */
129*4882a593Smuzhiyun #define DECCCTRL_SBEEN		(1 << 0)
130*4882a593Smuzhiyun #define DECCCTRL_DBEEN		(1 << 1)
131*4882a593Smuzhiyun #define DECCCTRL_ENCBGEN	(1 << 17)
132*4882a593Smuzhiyun 
133*4882a593Smuzhiyun /* DRAM init command */
134*4882a593Smuzhiyun #define DCMD_MRS1(rnk, dat)	(0 | ((rnk) << 22) | (1 << 3) | ((dat) << 6))
135*4882a593Smuzhiyun #define DCMD_REF(rnk)		(1 | ((rnk) << 22))
136*4882a593Smuzhiyun #define DCMD_PRE(rnk)		(2 | ((rnk) << 22))
137*4882a593Smuzhiyun #define DCMD_PREA(rnk)		(2 | ((rnk) << 22) | (0x400 << 6))
138*4882a593Smuzhiyun #define DCMD_ACT(rnk, row)	(3 | ((rnk) << 22) | ((row) << 6))
139*4882a593Smuzhiyun #define DCMD_WR(rnk, col)	(4 | ((rnk) << 22) | ((col) << 6))
140*4882a593Smuzhiyun #define DCMD_RD(rnk, col)	(5 | ((rnk) << 22) | ((col) << 6))
141*4882a593Smuzhiyun #define DCMD_ZQCS(rnk)		(6 | ((rnk) << 22))
142*4882a593Smuzhiyun #define DCMD_ZQCL(rnk)		(6 | ((rnk) << 22) | (0x400 << 6))
143*4882a593Smuzhiyun #define DCMD_NOP(rnk)		(7 | ((rnk) << 22))
144*4882a593Smuzhiyun 
145*4882a593Smuzhiyun #define DDR3_EMRS1_DIC_40	0
146*4882a593Smuzhiyun #define DDR3_EMRS1_DIC_34	1
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun #define DDR3_EMRS1_RTTNOM_0	0
149*4882a593Smuzhiyun #define DDR3_EMRS1_RTTNOM_60	0x04
150*4882a593Smuzhiyun #define DDR3_EMRS1_RTTNOM_120	0x40
151*4882a593Smuzhiyun #define DDR3_EMRS1_RTTNOM_40	0x44
152*4882a593Smuzhiyun #define DDR3_EMRS1_RTTNOM_20	0x200
153*4882a593Smuzhiyun #define DDR3_EMRS1_RTTNOM_30	0x204
154*4882a593Smuzhiyun 
155*4882a593Smuzhiyun #define DDR3_EMRS2_RTTWR_60	(1 << 9)
156*4882a593Smuzhiyun #define DDR3_EMRS2_RTTWR_120	(1 << 10)
157*4882a593Smuzhiyun 
158*4882a593Smuzhiyun /* BEGIN DDRIO Registers */
159*4882a593Smuzhiyun 
160*4882a593Smuzhiyun /* DDR IOs & COMPs */
161*4882a593Smuzhiyun #define DDRIODQ_BL_OFFSET	0x0800
162*4882a593Smuzhiyun #define DDRIODQ_CH_OFFSET	((NUM_BYTE_LANES / 2) * DDRIODQ_BL_OFFSET)
163*4882a593Smuzhiyun #define DDRIOCCC_CH_OFFSET	0x0800
164*4882a593Smuzhiyun #define DDRCOMP_CH_OFFSET	0x0100
165*4882a593Smuzhiyun 
166*4882a593Smuzhiyun /* CH0-BL01-DQ */
167*4882a593Smuzhiyun #define DQOBSCKEBBCTL		0x0000
168*4882a593Smuzhiyun #define DQDLLTXCTL		0x0004
169*4882a593Smuzhiyun #define DQDLLRXCTL		0x0008
170*4882a593Smuzhiyun #define DQMDLLCTL		0x000c
171*4882a593Smuzhiyun #define B0RXIOBUFCTL		0x0010
172*4882a593Smuzhiyun #define B0VREFCTL		0x0014
173*4882a593Smuzhiyun #define B0RXOFFSET1		0x0018
174*4882a593Smuzhiyun #define B0RXOFFSET0		0x001c
175*4882a593Smuzhiyun #define B1RXIOBUFCTL		0x0020
176*4882a593Smuzhiyun #define B1VREFCTL		0x0024
177*4882a593Smuzhiyun #define B1RXOFFSET1		0x0028
178*4882a593Smuzhiyun #define B1RXOFFSET0		0x002c
179*4882a593Smuzhiyun #define DQDFTCTL		0x0030
180*4882a593Smuzhiyun #define DQTRAINSTS		0x0034
181*4882a593Smuzhiyun #define B1DLLPICODER0		0x0038
182*4882a593Smuzhiyun #define B0DLLPICODER0		0x003c
183*4882a593Smuzhiyun #define B1DLLPICODER1		0x0040
184*4882a593Smuzhiyun #define B0DLLPICODER1		0x0044
185*4882a593Smuzhiyun #define B1DLLPICODER2		0x0048
186*4882a593Smuzhiyun #define B0DLLPICODER2		0x004c
187*4882a593Smuzhiyun #define B1DLLPICODER3		0x0050
188*4882a593Smuzhiyun #define B0DLLPICODER3		0x0054
189*4882a593Smuzhiyun #define B1RXDQSPICODE		0x0058
190*4882a593Smuzhiyun #define B0RXDQSPICODE		0x005c
191*4882a593Smuzhiyun #define B1RXDQPICODER32		0x0060
192*4882a593Smuzhiyun #define B1RXDQPICODER10		0x0064
193*4882a593Smuzhiyun #define B0RXDQPICODER32		0x0068
194*4882a593Smuzhiyun #define B0RXDQPICODER10		0x006c
195*4882a593Smuzhiyun #define B01PTRCTL0		0x0070
196*4882a593Smuzhiyun #define B01PTRCTL1		0x0074
197*4882a593Smuzhiyun #define B01DBCTL0		0x0078
198*4882a593Smuzhiyun #define B01DBCTL1		0x007c
199*4882a593Smuzhiyun #define B0LATCTL0		0x0080
200*4882a593Smuzhiyun #define B1LATCTL0		0x0084
201*4882a593Smuzhiyun #define B01LATCTL1		0x0088
202*4882a593Smuzhiyun #define B0ONDURCTL		0x008c
203*4882a593Smuzhiyun #define B1ONDURCTL		0x0090
204*4882a593Smuzhiyun #define B0OVRCTL		0x0094
205*4882a593Smuzhiyun #define B1OVRCTL		0x0098
206*4882a593Smuzhiyun #define DQCTL			0x009c
207*4882a593Smuzhiyun #define B0RK2RKCHGPTRCTRL	0x00a0
208*4882a593Smuzhiyun #define B1RK2RKCHGPTRCTRL	0x00a4
209*4882a593Smuzhiyun #define DQRK2RKCTL		0x00a8
210*4882a593Smuzhiyun #define DQRK2RKPTRCTL		0x00ac
211*4882a593Smuzhiyun #define B0RK2RKLAT		0x00b0
212*4882a593Smuzhiyun #define B1RK2RKLAT		0x00b4
213*4882a593Smuzhiyun #define DQCLKALIGNREG0		0x00b8
214*4882a593Smuzhiyun #define DQCLKALIGNREG1		0x00bc
215*4882a593Smuzhiyun #define DQCLKALIGNREG2		0x00c0
216*4882a593Smuzhiyun #define DQCLKALIGNSTS0		0x00c4
217*4882a593Smuzhiyun #define DQCLKALIGNSTS1		0x00c8
218*4882a593Smuzhiyun #define DQCLKGATE		0x00cc
219*4882a593Smuzhiyun #define B0COMPSLV1		0x00d0
220*4882a593Smuzhiyun #define B1COMPSLV1		0x00d4
221*4882a593Smuzhiyun #define B0COMPSLV2		0x00d8
222*4882a593Smuzhiyun #define B1COMPSLV2		0x00dc
223*4882a593Smuzhiyun #define B0COMPSLV3		0x00e0
224*4882a593Smuzhiyun #define B1COMPSLV3		0x00e4
225*4882a593Smuzhiyun #define DQVISALANECR0TOP	0x00e8
226*4882a593Smuzhiyun #define DQVISALANECR1TOP	0x00ec
227*4882a593Smuzhiyun #define DQVISACONTROLCRTOP	0x00f0
228*4882a593Smuzhiyun #define DQVISALANECR0BL		0x00f4
229*4882a593Smuzhiyun #define DQVISALANECR1BL		0x00f8
230*4882a593Smuzhiyun #define DQVISACONTROLCRBL	0x00fc
231*4882a593Smuzhiyun #define DQTIMINGCTRL		0x010c
232*4882a593Smuzhiyun 
233*4882a593Smuzhiyun /* CH0-ECC */
234*4882a593Smuzhiyun #define ECCDLLTXCTL		0x2004
235*4882a593Smuzhiyun #define ECCDLLRXCTL		0x2008
236*4882a593Smuzhiyun #define ECCMDLLCTL		0x200c
237*4882a593Smuzhiyun #define ECCB1DLLPICODER0	0x2038
238*4882a593Smuzhiyun #define ECCB1DLLPICODER1	0x2040
239*4882a593Smuzhiyun #define ECCB1DLLPICODER2	0x2048
240*4882a593Smuzhiyun #define ECCB1DLLPICODER3	0x2050
241*4882a593Smuzhiyun #define ECCB01DBCTL0		0x2078
242*4882a593Smuzhiyun #define ECCB01DBCTL1		0x207c
243*4882a593Smuzhiyun #define ECCCLKALIGNREG0		0x20b8
244*4882a593Smuzhiyun #define ECCCLKALIGNREG1		0x20bc
245*4882a593Smuzhiyun #define ECCCLKALIGNREG2		0x20c0
246*4882a593Smuzhiyun 
247*4882a593Smuzhiyun /* CH0-CMD */
248*4882a593Smuzhiyun #define CMDOBSCKEBBCTL		0x4800
249*4882a593Smuzhiyun #define CMDDLLTXCTL		0x4808
250*4882a593Smuzhiyun #define CMDDLLRXCTL		0x480c
251*4882a593Smuzhiyun #define CMDMDLLCTL		0x4810
252*4882a593Smuzhiyun #define CMDRCOMPODT		0x4814
253*4882a593Smuzhiyun #define CMDDLLPICODER0		0x4820
254*4882a593Smuzhiyun #define CMDDLLPICODER1		0x4824
255*4882a593Smuzhiyun #define CMDCFGREG0		0x4840
256*4882a593Smuzhiyun #define CMDPTRREG		0x4844
257*4882a593Smuzhiyun #define CMDCLKALIGNREG0		0x4850
258*4882a593Smuzhiyun #define CMDCLKALIGNREG1		0x4854
259*4882a593Smuzhiyun #define CMDCLKALIGNREG2		0x4858
260*4882a593Smuzhiyun #define CMDPMCONFIG0		0x485c
261*4882a593Smuzhiyun #define CMDPMDLYREG0		0x4860
262*4882a593Smuzhiyun #define CMDPMDLYREG1		0x4864
263*4882a593Smuzhiyun #define CMDPMDLYREG2		0x4868
264*4882a593Smuzhiyun #define CMDPMDLYREG3		0x486c
265*4882a593Smuzhiyun #define CMDPMDLYREG4		0x4870
266*4882a593Smuzhiyun #define CMDCLKALIGNSTS0		0x4874
267*4882a593Smuzhiyun #define CMDCLKALIGNSTS1		0x4878
268*4882a593Smuzhiyun #define CMDPMSTS0		0x487c
269*4882a593Smuzhiyun #define CMDPMSTS1		0x4880
270*4882a593Smuzhiyun #define CMDCOMPSLV		0x4884
271*4882a593Smuzhiyun #define CMDBONUS0		0x488c
272*4882a593Smuzhiyun #define CMDBONUS1		0x4890
273*4882a593Smuzhiyun #define CMDVISALANECR0		0x4894
274*4882a593Smuzhiyun #define CMDVISALANECR1		0x4898
275*4882a593Smuzhiyun #define CMDVISACONTROLCR	0x489c
276*4882a593Smuzhiyun #define CMDCLKGATE		0x48a0
277*4882a593Smuzhiyun #define CMDTIMINGCTRL		0x48a4
278*4882a593Smuzhiyun 
279*4882a593Smuzhiyun /* CH0-CLK-CTL */
280*4882a593Smuzhiyun #define CCOBSCKEBBCTL		0x5800
281*4882a593Smuzhiyun #define CCRCOMPIO		0x5804
282*4882a593Smuzhiyun #define CCDLLTXCTL		0x5808
283*4882a593Smuzhiyun #define CCDLLRXCTL		0x580c
284*4882a593Smuzhiyun #define CCMDLLCTL		0x5810
285*4882a593Smuzhiyun #define CCRCOMPODT		0x5814
286*4882a593Smuzhiyun #define CCDLLPICODER0		0x5820
287*4882a593Smuzhiyun #define CCDLLPICODER1		0x5824
288*4882a593Smuzhiyun #define CCDDR3RESETCTL		0x5830
289*4882a593Smuzhiyun #define CCCFGREG0		0x5838
290*4882a593Smuzhiyun #define CCCFGREG1		0x5840
291*4882a593Smuzhiyun #define CCPTRREG		0x5844
292*4882a593Smuzhiyun #define CCCLKALIGNREG0		0x5850
293*4882a593Smuzhiyun #define CCCLKALIGNREG1		0x5854
294*4882a593Smuzhiyun #define CCCLKALIGNREG2		0x5858
295*4882a593Smuzhiyun #define CCPMCONFIG0		0x585c
296*4882a593Smuzhiyun #define CCPMDLYREG0		0x5860
297*4882a593Smuzhiyun #define CCPMDLYREG1		0x5864
298*4882a593Smuzhiyun #define CCPMDLYREG2		0x5868
299*4882a593Smuzhiyun #define CCPMDLYREG3		0x586c
300*4882a593Smuzhiyun #define CCPMDLYREG4		0x5870
301*4882a593Smuzhiyun #define CCCLKALIGNSTS0		0x5874
302*4882a593Smuzhiyun #define CCCLKALIGNSTS1		0x5878
303*4882a593Smuzhiyun #define CCPMSTS0		0x587c
304*4882a593Smuzhiyun #define CCPMSTS1		0x5880
305*4882a593Smuzhiyun #define CCCOMPSLV1		0x5884
306*4882a593Smuzhiyun #define CCCOMPSLV2		0x5888
307*4882a593Smuzhiyun #define CCCOMPSLV3		0x588c
308*4882a593Smuzhiyun #define CCBONUS0		0x5894
309*4882a593Smuzhiyun #define CCBONUS1		0x5898
310*4882a593Smuzhiyun #define CCVISALANECR0		0x589c
311*4882a593Smuzhiyun #define CCVISALANECR1		0x58a0
312*4882a593Smuzhiyun #define CCVISACONTROLCR		0x58a4
313*4882a593Smuzhiyun #define CCCLKGATE		0x58a8
314*4882a593Smuzhiyun #define CCTIMINGCTL		0x58ac
315*4882a593Smuzhiyun 
316*4882a593Smuzhiyun /* COMP */
317*4882a593Smuzhiyun #define CMPCTRL			0x6800
318*4882a593Smuzhiyun #define SOFTRSTCNTL		0x6804
319*4882a593Smuzhiyun #define MSCNTR			0x6808
320*4882a593Smuzhiyun #define NMSCNTRL		0x680c
321*4882a593Smuzhiyun #define LATCH1CTL		0x6814
322*4882a593Smuzhiyun #define COMPVISALANECR0		0x681c
323*4882a593Smuzhiyun #define COMPVISALANECR1		0x6820
324*4882a593Smuzhiyun #define COMPVISACONTROLCR	0x6824
325*4882a593Smuzhiyun #define COMPBONUS0		0x6830
326*4882a593Smuzhiyun #define TCOCNTCTRL		0x683c
327*4882a593Smuzhiyun #define DQANAODTPUCTL		0x6840
328*4882a593Smuzhiyun #define DQANAODTPDCTL		0x6844
329*4882a593Smuzhiyun #define DQANADRVPUCTL		0x6848
330*4882a593Smuzhiyun #define DQANADRVPDCTL		0x684c
331*4882a593Smuzhiyun #define DQANADLYPUCTL		0x6850
332*4882a593Smuzhiyun #define DQANADLYPDCTL		0x6854
333*4882a593Smuzhiyun #define DQANATCOPUCTL		0x6858
334*4882a593Smuzhiyun #define DQANATCOPDCTL		0x685c
335*4882a593Smuzhiyun #define CMDANADRVPUCTL		0x6868
336*4882a593Smuzhiyun #define CMDANADRVPDCTL		0x686c
337*4882a593Smuzhiyun #define CMDANADLYPUCTL		0x6870
338*4882a593Smuzhiyun #define CMDANADLYPDCTL		0x6874
339*4882a593Smuzhiyun #define CLKANAODTPUCTL		0x6880
340*4882a593Smuzhiyun #define CLKANAODTPDCTL		0x6884
341*4882a593Smuzhiyun #define CLKANADRVPUCTL		0x6888
342*4882a593Smuzhiyun #define CLKANADRVPDCTL		0x688c
343*4882a593Smuzhiyun #define CLKANADLYPUCTL		0x6890
344*4882a593Smuzhiyun #define CLKANADLYPDCTL		0x6894
345*4882a593Smuzhiyun #define CLKANATCOPUCTL		0x6898
346*4882a593Smuzhiyun #define CLKANATCOPDCTL		0x689c
347*4882a593Smuzhiyun #define DQSANAODTPUCTL		0x68a0
348*4882a593Smuzhiyun #define DQSANAODTPDCTL		0x68a4
349*4882a593Smuzhiyun #define DQSANADRVPUCTL		0x68a8
350*4882a593Smuzhiyun #define DQSANADRVPDCTL		0x68ac
351*4882a593Smuzhiyun #define DQSANADLYPUCTL		0x68b0
352*4882a593Smuzhiyun #define DQSANADLYPDCTL		0x68b4
353*4882a593Smuzhiyun #define DQSANATCOPUCTL		0x68b8
354*4882a593Smuzhiyun #define DQSANATCOPDCTL		0x68bc
355*4882a593Smuzhiyun #define CTLANADRVPUCTL		0x68c8
356*4882a593Smuzhiyun #define CTLANADRVPDCTL		0x68cc
357*4882a593Smuzhiyun #define CTLANADLYPUCTL		0x68d0
358*4882a593Smuzhiyun #define CTLANADLYPDCTL		0x68d4
359*4882a593Smuzhiyun #define CHNLBUFSTATIC		0x68f0
360*4882a593Smuzhiyun #define COMPOBSCNTRL		0x68f4
361*4882a593Smuzhiyun #define COMPBUFFDBG0		0x68f8
362*4882a593Smuzhiyun #define COMPBUFFDBG1		0x68fc
363*4882a593Smuzhiyun #define CFGMISCCH0		0x6900
364*4882a593Smuzhiyun #define COMPEN0CH0		0x6904
365*4882a593Smuzhiyun #define COMPEN1CH0		0x6908
366*4882a593Smuzhiyun #define COMPEN2CH0		0x690c
367*4882a593Smuzhiyun #define STATLEGEN0CH0		0x6910
368*4882a593Smuzhiyun #define STATLEGEN1CH0		0x6914
369*4882a593Smuzhiyun #define DQVREFCH0		0x6918
370*4882a593Smuzhiyun #define CMDVREFCH0		0x691c
371*4882a593Smuzhiyun #define CLKVREFCH0		0x6920
372*4882a593Smuzhiyun #define DQSVREFCH0		0x6924
373*4882a593Smuzhiyun #define CTLVREFCH0		0x6928
374*4882a593Smuzhiyun #define TCOVREFCH0		0x692c
375*4882a593Smuzhiyun #define DLYSELCH0		0x6930
376*4882a593Smuzhiyun #define TCODRAMBUFODTCH0	0x6934
377*4882a593Smuzhiyun #define CCBUFODTCH0		0x6938
378*4882a593Smuzhiyun #define RXOFFSETCH0		0x693c
379*4882a593Smuzhiyun #define DQODTPUCTLCH0		0x6940
380*4882a593Smuzhiyun #define DQODTPDCTLCH0		0x6944
381*4882a593Smuzhiyun #define DQDRVPUCTLCH0		0x6948
382*4882a593Smuzhiyun #define DQDRVPDCTLCH0		0x694c
383*4882a593Smuzhiyun #define DQDLYPUCTLCH0		0x6950
384*4882a593Smuzhiyun #define DQDLYPDCTLCH0		0x6954
385*4882a593Smuzhiyun #define DQTCOPUCTLCH0		0x6958
386*4882a593Smuzhiyun #define DQTCOPDCTLCH0		0x695c
387*4882a593Smuzhiyun #define CMDDRVPUCTLCH0		0x6968
388*4882a593Smuzhiyun #define CMDDRVPDCTLCH0		0x696c
389*4882a593Smuzhiyun #define CMDDLYPUCTLCH0		0x6970
390*4882a593Smuzhiyun #define CMDDLYPDCTLCH0		0x6974
391*4882a593Smuzhiyun #define CLKODTPUCTLCH0		0x6980
392*4882a593Smuzhiyun #define CLKODTPDCTLCH0		0x6984
393*4882a593Smuzhiyun #define CLKDRVPUCTLCH0		0x6988
394*4882a593Smuzhiyun #define CLKDRVPDCTLCH0		0x698c
395*4882a593Smuzhiyun #define CLKDLYPUCTLCH0		0x6990
396*4882a593Smuzhiyun #define CLKDLYPDCTLCH0		0x6994
397*4882a593Smuzhiyun #define CLKTCOPUCTLCH0		0x6998
398*4882a593Smuzhiyun #define CLKTCOPDCTLCH0		0x699c
399*4882a593Smuzhiyun #define DQSODTPUCTLCH0		0x69a0
400*4882a593Smuzhiyun #define DQSODTPDCTLCH0		0x69a4
401*4882a593Smuzhiyun #define DQSDRVPUCTLCH0		0x69a8
402*4882a593Smuzhiyun #define DQSDRVPDCTLCH0		0x69ac
403*4882a593Smuzhiyun #define DQSDLYPUCTLCH0		0x69b0
404*4882a593Smuzhiyun #define DQSDLYPDCTLCH0		0x69b4
405*4882a593Smuzhiyun #define DQSTCOPUCTLCH0		0x69b8
406*4882a593Smuzhiyun #define DQSTCOPDCTLCH0		0x69bc
407*4882a593Smuzhiyun #define CTLDRVPUCTLCH0		0x69c8
408*4882a593Smuzhiyun #define CTLDRVPDCTLCH0		0x69cc
409*4882a593Smuzhiyun #define CTLDLYPUCTLCH0		0x69d0
410*4882a593Smuzhiyun #define CTLDLYPDCTLCH0		0x69d4
411*4882a593Smuzhiyun #define FNLUPDTCTLCH0		0x69f0
412*4882a593Smuzhiyun 
413*4882a593Smuzhiyun /* PLL */
414*4882a593Smuzhiyun #define MPLLCTRL0		0x7800
415*4882a593Smuzhiyun #define MPLLCTRL1		0x7808
416*4882a593Smuzhiyun #define MPLLCSR0		0x7810
417*4882a593Smuzhiyun #define MPLLCSR1		0x7814
418*4882a593Smuzhiyun #define MPLLCSR2		0x7820
419*4882a593Smuzhiyun #define MPLLDFT			0x7828
420*4882a593Smuzhiyun #define MPLLMON0CTL		0x7830
421*4882a593Smuzhiyun #define MPLLMON1CTL		0x7838
422*4882a593Smuzhiyun #define MPLLMON2CTL		0x783c
423*4882a593Smuzhiyun #define SFRTRIM			0x7850
424*4882a593Smuzhiyun #define MPLLDFTOUT0		0x7858
425*4882a593Smuzhiyun #define MPLLDFTOUT1		0x785c
426*4882a593Smuzhiyun #define MASTERRSTN		0x7880
427*4882a593Smuzhiyun #define PLLLOCKDEL		0x7884
428*4882a593Smuzhiyun #define SFRDEL			0x7888
429*4882a593Smuzhiyun #define CRUVISALANECR0		0x78f0
430*4882a593Smuzhiyun #define CRUVISALANECR1		0x78f4
431*4882a593Smuzhiyun #define CRUVISACONTROLCR	0x78f8
432*4882a593Smuzhiyun #define IOSFVISALANECR0		0x78fc
433*4882a593Smuzhiyun #define IOSFVISALANECR1		0x7900
434*4882a593Smuzhiyun #define IOSFVISACONTROLCR	0x7904
435*4882a593Smuzhiyun 
436*4882a593Smuzhiyun /* END DDRIO Registers */
437*4882a593Smuzhiyun 
438*4882a593Smuzhiyun /* DRAM Specific Message Bus OpCodes */
439*4882a593Smuzhiyun #define MSG_OP_DRAM_INIT	0x68
440*4882a593Smuzhiyun #define MSG_OP_DRAM_WAKE	0xca
441*4882a593Smuzhiyun 
442*4882a593Smuzhiyun #define SAMPLE_SIZE		6
443*4882a593Smuzhiyun 
444*4882a593Smuzhiyun /* must be less than this number to enable early deadband */
445*4882a593Smuzhiyun #define EARLY_DB		0x12
446*4882a593Smuzhiyun /* must be greater than this number to enable late deadband */
447*4882a593Smuzhiyun #define LATE_DB			0x34
448*4882a593Smuzhiyun 
449*4882a593Smuzhiyun #define CHX_REGS		(11 * 4)
450*4882a593Smuzhiyun #define FULL_CLK		128
451*4882a593Smuzhiyun #define HALF_CLK		64
452*4882a593Smuzhiyun #define QRTR_CLK		32
453*4882a593Smuzhiyun 
454*4882a593Smuzhiyun #define MCEIL(num, den)		((uint8_t)((num + den - 1) / den))
455*4882a593Smuzhiyun #define MMAX(a, b)		((a) > (b) ? (a) : (b))
456*4882a593Smuzhiyun #define DEAD_LOOP()		for (;;);
457*4882a593Smuzhiyun 
458*4882a593Smuzhiyun #define MIN_RDQS_EYE		10	/* in PI Codes */
459*4882a593Smuzhiyun #define MIN_VREF_EYE		10	/* in VREF Codes */
460*4882a593Smuzhiyun /* how many RDQS codes to jump while margining */
461*4882a593Smuzhiyun #define RDQS_STEP		1
462*4882a593Smuzhiyun /* how many VREF codes to jump while margining */
463*4882a593Smuzhiyun #define VREF_STEP		1
464*4882a593Smuzhiyun /* offset into "vref_codes[]" for minimum allowed VREF setting */
465*4882a593Smuzhiyun #define VREF_MIN		0x00
466*4882a593Smuzhiyun /* offset into "vref_codes[]" for maximum allowed VREF setting */
467*4882a593Smuzhiyun #define VREF_MAX		0x3f
468*4882a593Smuzhiyun #define RDQS_MIN		0x00	/* minimum RDQS delay value */
469*4882a593Smuzhiyun #define RDQS_MAX		0x3f	/* maximum RDQS delay value */
470*4882a593Smuzhiyun 
471*4882a593Smuzhiyun /* how many WDQ codes to jump while margining */
472*4882a593Smuzhiyun #define WDQ_STEP		1
473*4882a593Smuzhiyun 
474*4882a593Smuzhiyun enum {
475*4882a593Smuzhiyun 	B,	/* BOTTOM VREF */
476*4882a593Smuzhiyun 	T	/* TOP VREF */
477*4882a593Smuzhiyun };
478*4882a593Smuzhiyun 
479*4882a593Smuzhiyun enum {
480*4882a593Smuzhiyun 	L,	/* LEFT RDQS */
481*4882a593Smuzhiyun 	R	/* RIGHT RDQS */
482*4882a593Smuzhiyun };
483*4882a593Smuzhiyun 
484*4882a593Smuzhiyun /* Memory Options */
485*4882a593Smuzhiyun 
486*4882a593Smuzhiyun /* enable STATIC timing settings for RCVN (BACKUP_MODE) */
487*4882a593Smuzhiyun #undef BACKUP_RCVN
488*4882a593Smuzhiyun /* enable STATIC timing settings for WDQS (BACKUP_MODE) */
489*4882a593Smuzhiyun #undef BACKUP_WDQS
490*4882a593Smuzhiyun /* enable STATIC timing settings for RDQS (BACKUP_MODE) */
491*4882a593Smuzhiyun #undef BACKUP_RDQS
492*4882a593Smuzhiyun /* enable STATIC timing settings for WDQ (BACKUP_MODE) */
493*4882a593Smuzhiyun #undef BACKUP_WDQ
494*4882a593Smuzhiyun /* enable *COMP overrides (BACKUP_MODE) */
495*4882a593Smuzhiyun #undef BACKUP_COMPS
496*4882a593Smuzhiyun /* enable the RD_TRAIN eye check */
497*4882a593Smuzhiyun #undef RX_EYE_CHECK
498*4882a593Smuzhiyun 
499*4882a593Smuzhiyun /* enable Host to Memory Clock Alignment */
500*4882a593Smuzhiyun #define HMC_TEST
501*4882a593Smuzhiyun /* enable multi-rank support via rank2rank sharing */
502*4882a593Smuzhiyun #define R2R_SHARING
503*4882a593Smuzhiyun /* disable signals not used in 16bit mode of DDRIO */
504*4882a593Smuzhiyun #define FORCE_16BIT_DDRIO
505*4882a593Smuzhiyun 
506*4882a593Smuzhiyun #define PLATFORM_ID		1
507*4882a593Smuzhiyun 
508*4882a593Smuzhiyun void clear_self_refresh(struct mrc_params *mrc_params);
509*4882a593Smuzhiyun void prog_ddr_timing_control(struct mrc_params *mrc_params);
510*4882a593Smuzhiyun void prog_decode_before_jedec(struct mrc_params *mrc_params);
511*4882a593Smuzhiyun void perform_ddr_reset(struct mrc_params *mrc_params);
512*4882a593Smuzhiyun void ddrphy_init(struct mrc_params *mrc_params);
513*4882a593Smuzhiyun void perform_jedec_init(struct mrc_params *mrc_params);
514*4882a593Smuzhiyun void set_ddr_init_complete(struct mrc_params *mrc_params);
515*4882a593Smuzhiyun void restore_timings(struct mrc_params *mrc_params);
516*4882a593Smuzhiyun void default_timings(struct mrc_params *mrc_params);
517*4882a593Smuzhiyun void rcvn_cal(struct mrc_params *mrc_params);
518*4882a593Smuzhiyun void wr_level(struct mrc_params *mrc_params);
519*4882a593Smuzhiyun void prog_page_ctrl(struct mrc_params *mrc_params);
520*4882a593Smuzhiyun void rd_train(struct mrc_params *mrc_params);
521*4882a593Smuzhiyun void wr_train(struct mrc_params *mrc_params);
522*4882a593Smuzhiyun void store_timings(struct mrc_params *mrc_params);
523*4882a593Smuzhiyun void enable_scrambling(struct mrc_params *mrc_params);
524*4882a593Smuzhiyun void prog_ddr_control(struct mrc_params *mrc_params);
525*4882a593Smuzhiyun void prog_dra_drb(struct mrc_params *mrc_params);
526*4882a593Smuzhiyun void perform_wake(struct mrc_params *mrc_params);
527*4882a593Smuzhiyun void change_refresh_period(struct mrc_params *mrc_params);
528*4882a593Smuzhiyun void set_auto_refresh(struct mrc_params *mrc_params);
529*4882a593Smuzhiyun void ecc_enable(struct mrc_params *mrc_params);
530*4882a593Smuzhiyun void memory_test(struct mrc_params *mrc_params);
531*4882a593Smuzhiyun void lock_registers(struct mrc_params *mrc_params);
532*4882a593Smuzhiyun 
533*4882a593Smuzhiyun #endif /* _SMC_H_ */
534