1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun * Copyright (c) 2015-2020, NVIDIA CORPORATION. All rights reserved.
4*4882a593Smuzhiyun */
5*4882a593Smuzhiyun
6*4882a593Smuzhiyun #ifndef TEGRA210_EMC_H
7*4882a593Smuzhiyun #define TEGRA210_EMC_H
8*4882a593Smuzhiyun
9*4882a593Smuzhiyun #include <linux/clk.h>
10*4882a593Smuzhiyun #include <linux/clk/tegra.h>
11*4882a593Smuzhiyun #include <linux/io.h>
12*4882a593Smuzhiyun #include <linux/platform_device.h>
13*4882a593Smuzhiyun
14*4882a593Smuzhiyun #define DVFS_FGCG_HIGH_SPEED_THRESHOLD 1000
15*4882a593Smuzhiyun #define IOBRICK_DCC_THRESHOLD 2400
16*4882a593Smuzhiyun #define DVFS_FGCG_MID_SPEED_THRESHOLD 600
17*4882a593Smuzhiyun
18*4882a593Smuzhiyun #define EMC_STATUS_UPDATE_TIMEOUT 1000
19*4882a593Smuzhiyun
20*4882a593Smuzhiyun /* register definitions */
21*4882a593Smuzhiyun #define EMC_INTSTATUS 0x0
22*4882a593Smuzhiyun #define EMC_INTSTATUS_CLKCHANGE_COMPLETE BIT(4)
23*4882a593Smuzhiyun #define EMC_DBG 0x8
24*4882a593Smuzhiyun #define EMC_DBG_WRITE_MUX_ACTIVE BIT(1)
25*4882a593Smuzhiyun #define EMC_DBG_WRITE_ACTIVE_ONLY BIT(30)
26*4882a593Smuzhiyun #define EMC_CFG 0xc
27*4882a593Smuzhiyun #define EMC_CFG_DRAM_CLKSTOP_PD BIT(31)
28*4882a593Smuzhiyun #define EMC_CFG_DRAM_CLKSTOP_SR BIT(30)
29*4882a593Smuzhiyun #define EMC_CFG_DRAM_ACPD BIT(29)
30*4882a593Smuzhiyun #define EMC_CFG_DYN_SELF_REF BIT(28)
31*4882a593Smuzhiyun #define EMC_PIN 0x24
32*4882a593Smuzhiyun #define EMC_PIN_PIN_CKE BIT(0)
33*4882a593Smuzhiyun #define EMC_PIN_PIN_CKEB BIT(1)
34*4882a593Smuzhiyun #define EMC_PIN_PIN_CKE_PER_DEV BIT(2)
35*4882a593Smuzhiyun #define EMC_TIMING_CONTROL 0x28
36*4882a593Smuzhiyun #define EMC_RC 0x2c
37*4882a593Smuzhiyun #define EMC_RFC 0x30
38*4882a593Smuzhiyun #define EMC_RAS 0x34
39*4882a593Smuzhiyun #define EMC_RP 0x38
40*4882a593Smuzhiyun #define EMC_R2W 0x3c
41*4882a593Smuzhiyun #define EMC_W2R 0x40
42*4882a593Smuzhiyun #define EMC_R2P 0x44
43*4882a593Smuzhiyun #define EMC_W2P 0x48
44*4882a593Smuzhiyun #define EMC_RD_RCD 0x4c
45*4882a593Smuzhiyun #define EMC_WR_RCD 0x50
46*4882a593Smuzhiyun #define EMC_RRD 0x54
47*4882a593Smuzhiyun #define EMC_REXT 0x58
48*4882a593Smuzhiyun #define EMC_WDV 0x5c
49*4882a593Smuzhiyun #define EMC_QUSE 0x60
50*4882a593Smuzhiyun #define EMC_QRST 0x64
51*4882a593Smuzhiyun #define EMC_QSAFE 0x68
52*4882a593Smuzhiyun #define EMC_RDV 0x6c
53*4882a593Smuzhiyun #define EMC_REFRESH 0x70
54*4882a593Smuzhiyun #define EMC_BURST_REFRESH_NUM 0x74
55*4882a593Smuzhiyun #define EMC_PDEX2WR 0x78
56*4882a593Smuzhiyun #define EMC_PDEX2RD 0x7c
57*4882a593Smuzhiyun #define EMC_PCHG2PDEN 0x80
58*4882a593Smuzhiyun #define EMC_ACT2PDEN 0x84
59*4882a593Smuzhiyun #define EMC_AR2PDEN 0x88
60*4882a593Smuzhiyun #define EMC_RW2PDEN 0x8c
61*4882a593Smuzhiyun #define EMC_TXSR 0x90
62*4882a593Smuzhiyun #define EMC_TCKE 0x94
63*4882a593Smuzhiyun #define EMC_TFAW 0x98
64*4882a593Smuzhiyun #define EMC_TRPAB 0x9c
65*4882a593Smuzhiyun #define EMC_TCLKSTABLE 0xa0
66*4882a593Smuzhiyun #define EMC_TCLKSTOP 0xa4
67*4882a593Smuzhiyun #define EMC_TREFBW 0xa8
68*4882a593Smuzhiyun #define EMC_TPPD 0xac
69*4882a593Smuzhiyun #define EMC_ODT_WRITE 0xb0
70*4882a593Smuzhiyun #define EMC_PDEX2MRR 0xb4
71*4882a593Smuzhiyun #define EMC_WEXT 0xb8
72*4882a593Smuzhiyun #define EMC_RFC_SLR 0xc0
73*4882a593Smuzhiyun #define EMC_MRS_WAIT_CNT2 0xc4
74*4882a593Smuzhiyun #define EMC_MRS_WAIT_CNT2_MRS_EXT2_WAIT_CNT_SHIFT 16
75*4882a593Smuzhiyun #define EMC_MRS_WAIT_CNT2_MRS_EXT1_WAIT_CNT_SHIFT 0
76*4882a593Smuzhiyun #define EMC_MRS_WAIT_CNT 0xc8
77*4882a593Smuzhiyun #define EMC_MRS_WAIT_CNT_SHORT_WAIT_SHIFT 0
78*4882a593Smuzhiyun #define EMC_MRS_WAIT_CNT_SHORT_WAIT_MASK \
79*4882a593Smuzhiyun (0x3FF << EMC_MRS_WAIT_CNT_SHORT_WAIT_SHIFT)
80*4882a593Smuzhiyun
81*4882a593Smuzhiyun #define EMC_MRS 0xcc
82*4882a593Smuzhiyun #define EMC_EMRS 0xd0
83*4882a593Smuzhiyun #define EMC_EMRS_USE_EMRS_LONG_CNT BIT(26)
84*4882a593Smuzhiyun #define EMC_REF 0xd4
85*4882a593Smuzhiyun #define EMC_REF_REF_CMD BIT(0)
86*4882a593Smuzhiyun #define EMC_SELF_REF 0xe0
87*4882a593Smuzhiyun #define EMC_MRW 0xe8
88*4882a593Smuzhiyun #define EMC_MRW_MRW_OP_SHIFT 0
89*4882a593Smuzhiyun #define EMC_MRW_MRW_OP_MASK \
90*4882a593Smuzhiyun (0xff << EMC_MRW_MRW_OP_SHIFT)
91*4882a593Smuzhiyun #define EMC_MRW_MRW_MA_SHIFT 16
92*4882a593Smuzhiyun #define EMC_MRW_USE_MRW_EXT_CNT 27
93*4882a593Smuzhiyun #define EMC_MRW_MRW_DEV_SELECTN_SHIFT 30
94*4882a593Smuzhiyun
95*4882a593Smuzhiyun #define EMC_MRR 0xec
96*4882a593Smuzhiyun #define EMC_MRR_DEV_SEL_SHIFT 30
97*4882a593Smuzhiyun #define EMC_MRR_DEV_SEL_MASK 0x3
98*4882a593Smuzhiyun #define EMC_MRR_MA_SHIFT 16
99*4882a593Smuzhiyun #define EMC_MRR_MA_MASK 0xff
100*4882a593Smuzhiyun #define EMC_MRR_DATA_SHIFT 0
101*4882a593Smuzhiyun #define EMC_MRR_DATA_MASK 0xffff
102*4882a593Smuzhiyun
103*4882a593Smuzhiyun #define EMC_FBIO_SPARE 0x100
104*4882a593Smuzhiyun #define EMC_FBIO_CFG5 0x104
105*4882a593Smuzhiyun #define EMC_FBIO_CFG5_DRAM_TYPE_SHIFT 0
106*4882a593Smuzhiyun #define EMC_FBIO_CFG5_DRAM_TYPE_MASK \
107*4882a593Smuzhiyun (0x3 << EMC_FBIO_CFG5_DRAM_TYPE_SHIFT)
108*4882a593Smuzhiyun #define EMC_FBIO_CFG5_CMD_TX_DIS BIT(8)
109*4882a593Smuzhiyun
110*4882a593Smuzhiyun #define EMC_PDEX2CKE 0x118
111*4882a593Smuzhiyun #define EMC_CKE2PDEN 0x11c
112*4882a593Smuzhiyun #define EMC_MPC 0x128
113*4882a593Smuzhiyun #define EMC_EMRS2 0x12c
114*4882a593Smuzhiyun #define EMC_EMRS2_USE_EMRS2_LONG_CNT BIT(26)
115*4882a593Smuzhiyun #define EMC_MRW2 0x134
116*4882a593Smuzhiyun #define EMC_MRW3 0x138
117*4882a593Smuzhiyun #define EMC_MRW4 0x13c
118*4882a593Smuzhiyun #define EMC_R2R 0x144
119*4882a593Smuzhiyun #define EMC_EINPUT 0x14c
120*4882a593Smuzhiyun #define EMC_EINPUT_DURATION 0x150
121*4882a593Smuzhiyun #define EMC_PUTERM_EXTRA 0x154
122*4882a593Smuzhiyun #define EMC_TCKESR 0x158
123*4882a593Smuzhiyun #define EMC_TPD 0x15c
124*4882a593Smuzhiyun #define EMC_AUTO_CAL_CONFIG 0x2a4
125*4882a593Smuzhiyun #define EMC_AUTO_CAL_CONFIG_AUTO_CAL_COMPUTE_START BIT(0)
126*4882a593Smuzhiyun #define EMC_AUTO_CAL_CONFIG_AUTO_CAL_MEASURE_STALL BIT(9)
127*4882a593Smuzhiyun #define EMC_AUTO_CAL_CONFIG_AUTO_CAL_UPDATE_STALL BIT(10)
128*4882a593Smuzhiyun #define EMC_AUTO_CAL_CONFIG_AUTO_CAL_ENABLE BIT(29)
129*4882a593Smuzhiyun #define EMC_AUTO_CAL_CONFIG_AUTO_CAL_START BIT(31)
130*4882a593Smuzhiyun #define EMC_EMC_STATUS 0x2b4
131*4882a593Smuzhiyun #define EMC_EMC_STATUS_MRR_DIVLD BIT(20)
132*4882a593Smuzhiyun #define EMC_EMC_STATUS_TIMING_UPDATE_STALLED BIT(23)
133*4882a593Smuzhiyun #define EMC_EMC_STATUS_DRAM_IN_POWERDOWN_SHIFT 4
134*4882a593Smuzhiyun #define EMC_EMC_STATUS_DRAM_IN_POWERDOWN_MASK \
135*4882a593Smuzhiyun (0x3 << EMC_EMC_STATUS_DRAM_IN_POWERDOWN_SHIFT)
136*4882a593Smuzhiyun #define EMC_EMC_STATUS_DRAM_IN_SELF_REFRESH_SHIFT 8
137*4882a593Smuzhiyun #define EMC_EMC_STATUS_DRAM_IN_SELF_REFRESH_MASK \
138*4882a593Smuzhiyun (0x3 << EMC_EMC_STATUS_DRAM_IN_SELF_REFRESH_SHIFT)
139*4882a593Smuzhiyun
140*4882a593Smuzhiyun #define EMC_CFG_2 0x2b8
141*4882a593Smuzhiyun #define EMC_CFG_DIG_DLL 0x2bc
142*4882a593Smuzhiyun #define EMC_CFG_DIG_DLL_CFG_DLL_EN BIT(0)
143*4882a593Smuzhiyun #define EMC_CFG_DIG_DLL_CFG_DLL_STALL_ALL_UNTIL_LOCK BIT(1)
144*4882a593Smuzhiyun #define EMC_CFG_DIG_DLL_CFG_DLL_STALL_ALL_TRAFFIC BIT(3)
145*4882a593Smuzhiyun #define EMC_CFG_DIG_DLL_CFG_DLL_STALL_RW_UNTIL_LOCK BIT(4)
146*4882a593Smuzhiyun #define EMC_CFG_DIG_DLL_CFG_DLL_MODE_SHIFT 6
147*4882a593Smuzhiyun #define EMC_CFG_DIG_DLL_CFG_DLL_MODE_MASK \
148*4882a593Smuzhiyun (0x3 << EMC_CFG_DIG_DLL_CFG_DLL_MODE_SHIFT)
149*4882a593Smuzhiyun #define EMC_CFG_DIG_DLL_CFG_DLL_LOCK_LIMIT_SHIFT 8
150*4882a593Smuzhiyun #define EMC_CFG_DIG_DLL_CFG_DLL_LOCK_LIMIT_MASK \
151*4882a593Smuzhiyun (0x7 << EMC_CFG_DIG_DLL_CFG_DLL_LOCK_LIMIT_SHIFT)
152*4882a593Smuzhiyun
153*4882a593Smuzhiyun #define EMC_CFG_DIG_DLL_PERIOD 0x2c0
154*4882a593Smuzhiyun #define EMC_DIG_DLL_STATUS 0x2c4
155*4882a593Smuzhiyun #define EMC_DIG_DLL_STATUS_DLL_LOCK BIT(15)
156*4882a593Smuzhiyun #define EMC_DIG_DLL_STATUS_DLL_PRIV_UPDATED BIT(17)
157*4882a593Smuzhiyun #define EMC_DIG_DLL_STATUS_DLL_OUT_SHIFT 0
158*4882a593Smuzhiyun #define EMC_DIG_DLL_STATUS_DLL_OUT_MASK \
159*4882a593Smuzhiyun (0x7ff << EMC_DIG_DLL_STATUS_DLL_OUT_SHIFT)
160*4882a593Smuzhiyun
161*4882a593Smuzhiyun #define EMC_CFG_DIG_DLL_1 0x2c8
162*4882a593Smuzhiyun #define EMC_RDV_MASK 0x2cc
163*4882a593Smuzhiyun #define EMC_WDV_MASK 0x2d0
164*4882a593Smuzhiyun #define EMC_RDV_EARLY_MASK 0x2d4
165*4882a593Smuzhiyun #define EMC_RDV_EARLY 0x2d8
166*4882a593Smuzhiyun #define EMC_AUTO_CAL_CONFIG8 0x2dc
167*4882a593Smuzhiyun #define EMC_ZCAL_INTERVAL 0x2e0
168*4882a593Smuzhiyun #define EMC_ZCAL_WAIT_CNT 0x2e4
169*4882a593Smuzhiyun #define EMC_ZCAL_WAIT_CNT_ZCAL_WAIT_CNT_MASK 0x7ff
170*4882a593Smuzhiyun #define EMC_ZCAL_WAIT_CNT_ZCAL_WAIT_CNT_SHIFT 0
171*4882a593Smuzhiyun
172*4882a593Smuzhiyun #define EMC_ZQ_CAL 0x2ec
173*4882a593Smuzhiyun #define EMC_ZQ_CAL_DEV_SEL_SHIFT 30
174*4882a593Smuzhiyun #define EMC_ZQ_CAL_LONG BIT(4)
175*4882a593Smuzhiyun #define EMC_ZQ_CAL_ZQ_LATCH_CMD BIT(1)
176*4882a593Smuzhiyun #define EMC_ZQ_CAL_ZQ_CAL_CMD BIT(0)
177*4882a593Smuzhiyun #define EMC_FDPD_CTRL_DQ 0x310
178*4882a593Smuzhiyun #define EMC_FDPD_CTRL_CMD 0x314
179*4882a593Smuzhiyun #define EMC_PMACRO_CMD_BRICK_CTRL_FDPD 0x318
180*4882a593Smuzhiyun #define EMC_PMACRO_DATA_BRICK_CTRL_FDPD 0x31c
181*4882a593Smuzhiyun #define EMC_PMACRO_BRICK_CTRL_RFU1 0x330
182*4882a593Smuzhiyun #define EMC_PMACRO_BRICK_CTRL_RFU2 0x334
183*4882a593Smuzhiyun #define EMC_TR_TIMING_0 0x3b4
184*4882a593Smuzhiyun #define EMC_TR_CTRL_1 0x3bc
185*4882a593Smuzhiyun #define EMC_TR_RDV 0x3c4
186*4882a593Smuzhiyun #define EMC_STALL_THEN_EXE_AFTER_CLKCHANGE 0x3cc
187*4882a593Smuzhiyun #define EMC_SEL_DPD_CTRL 0x3d8
188*4882a593Smuzhiyun #define EMC_SEL_DPD_CTRL_DATA_SEL_DPD_EN BIT(8)
189*4882a593Smuzhiyun #define EMC_SEL_DPD_CTRL_ODT_SEL_DPD_EN BIT(5)
190*4882a593Smuzhiyun #define EMC_SEL_DPD_CTRL_RESET_SEL_DPD_EN BIT(4)
191*4882a593Smuzhiyun #define EMC_SEL_DPD_CTRL_CA_SEL_DPD_EN BIT(3)
192*4882a593Smuzhiyun #define EMC_SEL_DPD_CTRL_CLK_SEL_DPD_EN BIT(2)
193*4882a593Smuzhiyun #define EMC_PRE_REFRESH_REQ_CNT 0x3dc
194*4882a593Smuzhiyun #define EMC_DYN_SELF_REF_CONTROL 0x3e0
195*4882a593Smuzhiyun #define EMC_TXSRDLL 0x3e4
196*4882a593Smuzhiyun #define EMC_CCFIFO_ADDR 0x3e8
197*4882a593Smuzhiyun #define EMC_CCFIFO_ADDR_STALL_BY_1 (1 << 31)
198*4882a593Smuzhiyun #define EMC_CCFIFO_ADDR_STALL(x) (((x) & 0x7fff) << 16)
199*4882a593Smuzhiyun #define EMC_CCFIFO_ADDR_OFFSET(x) ((x) & 0xffff)
200*4882a593Smuzhiyun #define EMC_CCFIFO_DATA 0x3ec
201*4882a593Smuzhiyun #define EMC_TR_QPOP 0x3f4
202*4882a593Smuzhiyun #define EMC_TR_RDV_MASK 0x3f8
203*4882a593Smuzhiyun #define EMC_TR_QSAFE 0x3fc
204*4882a593Smuzhiyun #define EMC_TR_QRST 0x400
205*4882a593Smuzhiyun #define EMC_ISSUE_QRST 0x428
206*4882a593Smuzhiyun #define EMC_AUTO_CAL_CONFIG2 0x458
207*4882a593Smuzhiyun #define EMC_AUTO_CAL_CONFIG3 0x45c
208*4882a593Smuzhiyun #define EMC_TR_DVFS 0x460
209*4882a593Smuzhiyun #define EMC_AUTO_CAL_CHANNEL 0x464
210*4882a593Smuzhiyun #define EMC_IBDLY 0x468
211*4882a593Smuzhiyun #define EMC_OBDLY 0x46c
212*4882a593Smuzhiyun #define EMC_TXDSRVTTGEN 0x480
213*4882a593Smuzhiyun #define EMC_WE_DURATION 0x48c
214*4882a593Smuzhiyun #define EMC_WS_DURATION 0x490
215*4882a593Smuzhiyun #define EMC_WEV 0x494
216*4882a593Smuzhiyun #define EMC_WSV 0x498
217*4882a593Smuzhiyun #define EMC_CFG_3 0x49c
218*4882a593Smuzhiyun #define EMC_MRW6 0x4a4
219*4882a593Smuzhiyun #define EMC_MRW7 0x4a8
220*4882a593Smuzhiyun #define EMC_MRW8 0x4ac
221*4882a593Smuzhiyun #define EMC_MRW9 0x4b0
222*4882a593Smuzhiyun #define EMC_MRW10 0x4b4
223*4882a593Smuzhiyun #define EMC_MRW11 0x4b8
224*4882a593Smuzhiyun #define EMC_MRW12 0x4bc
225*4882a593Smuzhiyun #define EMC_MRW13 0x4c0
226*4882a593Smuzhiyun #define EMC_MRW14 0x4c4
227*4882a593Smuzhiyun #define EMC_MRW15 0x4d0
228*4882a593Smuzhiyun #define EMC_CFG_SYNC 0x4d4
229*4882a593Smuzhiyun #define EMC_FDPD_CTRL_CMD_NO_RAMP 0x4d8
230*4882a593Smuzhiyun #define EMC_FDPD_CTRL_CMD_NO_RAMP_CMD_DPD_NO_RAMP_ENABLE BIT(0)
231*4882a593Smuzhiyun #define EMC_WDV_CHK 0x4e0
232*4882a593Smuzhiyun #define EMC_CFG_PIPE_2 0x554
233*4882a593Smuzhiyun #define EMC_CFG_PIPE_CLK 0x558
234*4882a593Smuzhiyun #define EMC_CFG_PIPE_CLK_CLK_ALWAYS_ON BIT(0)
235*4882a593Smuzhiyun #define EMC_CFG_PIPE_1 0x55c
236*4882a593Smuzhiyun #define EMC_CFG_PIPE 0x560
237*4882a593Smuzhiyun #define EMC_QPOP 0x564
238*4882a593Smuzhiyun #define EMC_QUSE_WIDTH 0x568
239*4882a593Smuzhiyun #define EMC_PUTERM_WIDTH 0x56c
240*4882a593Smuzhiyun #define EMC_AUTO_CAL_CONFIG7 0x574
241*4882a593Smuzhiyun #define EMC_REFCTRL2 0x580
242*4882a593Smuzhiyun #define EMC_FBIO_CFG7 0x584
243*4882a593Smuzhiyun #define EMC_FBIO_CFG7_CH0_ENABLE BIT(1)
244*4882a593Smuzhiyun #define EMC_FBIO_CFG7_CH1_ENABLE BIT(2)
245*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_0 0x588
246*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_0_RANK0_BYTE7_DATA_BRLSHFT_SHIFT 21
247*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_0_RANK0_BYTE7_DATA_BRLSHFT_MASK \
248*4882a593Smuzhiyun (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE7_DATA_BRLSHFT_SHIFT)
249*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_0_RANK0_BYTE6_DATA_BRLSHFT_SHIFT 18
250*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_0_RANK0_BYTE6_DATA_BRLSHFT_MASK \
251*4882a593Smuzhiyun (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE6_DATA_BRLSHFT_SHIFT)
252*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_0_RANK0_BYTE5_DATA_BRLSHFT_SHIFT 15
253*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_0_RANK0_BYTE5_DATA_BRLSHFT_MASK \
254*4882a593Smuzhiyun (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE5_DATA_BRLSHFT_SHIFT)
255*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_0_RANK0_BYTE4_DATA_BRLSHFT_SHIFT 12
256*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_0_RANK0_BYTE4_DATA_BRLSHFT_MASK \
257*4882a593Smuzhiyun (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE4_DATA_BRLSHFT_SHIFT)
258*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_0_RANK0_BYTE3_DATA_BRLSHFT_SHIFT 9
259*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_0_RANK0_BYTE3_DATA_BRLSHFT_MASK \
260*4882a593Smuzhiyun (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE3_DATA_BRLSHFT_SHIFT)
261*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_0_RANK0_BYTE2_DATA_BRLSHFT_SHIFT 6
262*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_0_RANK0_BYTE2_DATA_BRLSHFT_MASK \
263*4882a593Smuzhiyun (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE2_DATA_BRLSHFT_SHIFT)
264*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_0_RANK0_BYTE1_DATA_BRLSHFT_SHIFT 3
265*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_0_RANK0_BYTE1_DATA_BRLSHFT_MASK \
266*4882a593Smuzhiyun (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE1_DATA_BRLSHFT_SHIFT)
267*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_0_RANK0_BYTE0_DATA_BRLSHFT_SHIFT 0
268*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_0_RANK0_BYTE0_DATA_BRLSHFT_MASK \
269*4882a593Smuzhiyun (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE0_DATA_BRLSHFT_SHIFT)
270*4882a593Smuzhiyun
271*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_1 0x58c
272*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_1_RANK1_BYTE7_DATA_BRLSHFT_SHIFT 21
273*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_1_RANK1_BYTE7_DATA_BRLSHFT_MASK \
274*4882a593Smuzhiyun (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE7_DATA_BRLSHFT_SHIFT)
275*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_1_RANK1_BYTE6_DATA_BRLSHFT_SHIFT 18
276*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_1_RANK1_BYTE6_DATA_BRLSHFT_MASK \
277*4882a593Smuzhiyun (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE6_DATA_BRLSHFT_SHIFT)
278*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_1_RANK1_BYTE5_DATA_BRLSHFT_SHIFT 15
279*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_1_RANK1_BYTE5_DATA_BRLSHFT_MASK \
280*4882a593Smuzhiyun (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE5_DATA_BRLSHFT_SHIFT)
281*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_1_RANK1_BYTE4_DATA_BRLSHFT_SHIFT 12
282*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_1_RANK1_BYTE4_DATA_BRLSHFT_MASK \
283*4882a593Smuzhiyun (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE4_DATA_BRLSHFT_SHIFT)
284*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_1_RANK1_BYTE3_DATA_BRLSHFT_SHIFT 9
285*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_1_RANK1_BYTE3_DATA_BRLSHFT_MASK \
286*4882a593Smuzhiyun (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE3_DATA_BRLSHFT_SHIFT)
287*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_1_RANK1_BYTE2_DATA_BRLSHFT_SHIFT 6
288*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_1_RANK1_BYTE2_DATA_BRLSHFT_MASK \
289*4882a593Smuzhiyun (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE2_DATA_BRLSHFT_SHIFT)
290*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_1_RANK1_BYTE1_DATA_BRLSHFT_SHIFT 3
291*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_1_RANK1_BYTE1_DATA_BRLSHFT_MASK \
292*4882a593Smuzhiyun (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE1_DATA_BRLSHFT_SHIFT)
293*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_1_RANK1_BYTE0_DATA_BRLSHFT_SHIFT 0
294*4882a593Smuzhiyun #define EMC_DATA_BRLSHFT_1_RANK1_BYTE0_DATA_BRLSHFT_MASK \
295*4882a593Smuzhiyun (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE0_DATA_BRLSHFT_SHIFT)
296*4882a593Smuzhiyun
297*4882a593Smuzhiyun #define EMC_RFCPB 0x590
298*4882a593Smuzhiyun #define EMC_DQS_BRLSHFT_0 0x594
299*4882a593Smuzhiyun #define EMC_DQS_BRLSHFT_1 0x598
300*4882a593Smuzhiyun #define EMC_CMD_BRLSHFT_0 0x59c
301*4882a593Smuzhiyun #define EMC_CMD_BRLSHFT_1 0x5a0
302*4882a593Smuzhiyun #define EMC_CMD_BRLSHFT_2 0x5a4
303*4882a593Smuzhiyun #define EMC_CMD_BRLSHFT_3 0x5a8
304*4882a593Smuzhiyun #define EMC_QUSE_BRLSHFT_0 0x5ac
305*4882a593Smuzhiyun #define EMC_AUTO_CAL_CONFIG4 0x5b0
306*4882a593Smuzhiyun #define EMC_AUTO_CAL_CONFIG5 0x5b4
307*4882a593Smuzhiyun #define EMC_QUSE_BRLSHFT_1 0x5b8
308*4882a593Smuzhiyun #define EMC_QUSE_BRLSHFT_2 0x5bc
309*4882a593Smuzhiyun #define EMC_CCDMW 0x5c0
310*4882a593Smuzhiyun #define EMC_QUSE_BRLSHFT_3 0x5c4
311*4882a593Smuzhiyun #define EMC_AUTO_CAL_CONFIG6 0x5cc
312*4882a593Smuzhiyun #define EMC_DLL_CFG_0 0x5e4
313*4882a593Smuzhiyun #define EMC_DLL_CFG_1 0x5e8
314*4882a593Smuzhiyun #define EMC_DLL_CFG_1_DDLLCAL_CTRL_START_TRIM_SHIFT 10
315*4882a593Smuzhiyun #define EMC_DLL_CFG_1_DDLLCAL_CTRL_START_TRIM_MASK \
316*4882a593Smuzhiyun (0x7ff << EMC_DLL_CFG_1_DDLLCAL_CTRL_START_TRIM_SHIFT)
317*4882a593Smuzhiyun
318*4882a593Smuzhiyun #define EMC_CONFIG_SAMPLE_DELAY 0x5f0
319*4882a593Smuzhiyun #define EMC_CFG_UPDATE 0x5f4
320*4882a593Smuzhiyun #define EMC_CFG_UPDATE_UPDATE_DLL_IN_UPDATE_SHIFT 9
321*4882a593Smuzhiyun #define EMC_CFG_UPDATE_UPDATE_DLL_IN_UPDATE_MASK \
322*4882a593Smuzhiyun (0x3 << EMC_CFG_UPDATE_UPDATE_DLL_IN_UPDATE_SHIFT)
323*4882a593Smuzhiyun
324*4882a593Smuzhiyun #define EMC_PMACRO_QUSE_DDLL_RANK0_0 0x600
325*4882a593Smuzhiyun #define EMC_PMACRO_QUSE_DDLL_RANK0_1 0x604
326*4882a593Smuzhiyun #define EMC_PMACRO_QUSE_DDLL_RANK0_2 0x608
327*4882a593Smuzhiyun #define EMC_PMACRO_QUSE_DDLL_RANK0_3 0x60c
328*4882a593Smuzhiyun #define EMC_PMACRO_QUSE_DDLL_RANK0_4 0x610
329*4882a593Smuzhiyun #define EMC_PMACRO_QUSE_DDLL_RANK0_5 0x614
330*4882a593Smuzhiyun #define EMC_PMACRO_QUSE_DDLL_RANK1_0 0x620
331*4882a593Smuzhiyun #define EMC_PMACRO_QUSE_DDLL_RANK1_1 0x624
332*4882a593Smuzhiyun #define EMC_PMACRO_QUSE_DDLL_RANK1_2 0x628
333*4882a593Smuzhiyun #define EMC_PMACRO_QUSE_DDLL_RANK1_3 0x62c
334*4882a593Smuzhiyun #define EMC_PMACRO_QUSE_DDLL_RANK1_4 0x630
335*4882a593Smuzhiyun #define EMC_PMACRO_QUSE_DDLL_RANK1_5 0x634
336*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0 0x640
337*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE1_SHIFT \
338*4882a593Smuzhiyun 16
339*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE1_MASK \
340*4882a593Smuzhiyun (0x3ff << \
341*4882a593Smuzhiyun EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE1_SHIFT)
342*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE0_SHIFT \
343*4882a593Smuzhiyun 0
344*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE0_MASK \
345*4882a593Smuzhiyun (0x3ff << \
346*4882a593Smuzhiyun EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE0_SHIFT)
347*4882a593Smuzhiyun
348*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1 0x644
349*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE3_SHIFT \
350*4882a593Smuzhiyun 16
351*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE3_MASK \
352*4882a593Smuzhiyun (0x3ff << \
353*4882a593Smuzhiyun EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE3_SHIFT)
354*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE2_SHIFT \
355*4882a593Smuzhiyun 0
356*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE2_MASK \
357*4882a593Smuzhiyun (0x3ff << \
358*4882a593Smuzhiyun EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE2_SHIFT)
359*4882a593Smuzhiyun
360*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2 0x648
361*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE5_SHIFT \
362*4882a593Smuzhiyun 16
363*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE5_MASK \
364*4882a593Smuzhiyun (0x3ff << \
365*4882a593Smuzhiyun EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE5_SHIFT)
366*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE4_SHIFT \
367*4882a593Smuzhiyun 0
368*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE4_MASK \
369*4882a593Smuzhiyun (0x3ff << \
370*4882a593Smuzhiyun EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE4_SHIFT)
371*4882a593Smuzhiyun
372*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3 0x64c
373*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE7_SHIFT \
374*4882a593Smuzhiyun 16
375*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE7_MASK \
376*4882a593Smuzhiyun (0x3ff << \
377*4882a593Smuzhiyun EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE7_SHIFT)
378*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE6_SHIFT \
379*4882a593Smuzhiyun 0
380*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE6_MASK \
381*4882a593Smuzhiyun (0x3ff << \
382*4882a593Smuzhiyun EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE6_SHIFT)
383*4882a593Smuzhiyun
384*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_4 0x650
385*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_5 0x654
386*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0 0x660
387*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE1_SHIFT \
388*4882a593Smuzhiyun 16
389*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE1_MASK \
390*4882a593Smuzhiyun (0x3ff << \
391*4882a593Smuzhiyun EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE1_SHIFT)
392*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE0_SHIFT \
393*4882a593Smuzhiyun 0
394*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE0_MASK \
395*4882a593Smuzhiyun (0x3ff << \
396*4882a593Smuzhiyun EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE0_SHIFT)
397*4882a593Smuzhiyun
398*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1 0x664
399*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE3_SHIFT \
400*4882a593Smuzhiyun 16
401*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE3_MASK \
402*4882a593Smuzhiyun (0x3ff << \
403*4882a593Smuzhiyun EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE3_SHIFT)
404*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE2_SHIFT \
405*4882a593Smuzhiyun 0
406*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE2_MASK \
407*4882a593Smuzhiyun (0x3ff << \
408*4882a593Smuzhiyun EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE2_SHIFT)
409*4882a593Smuzhiyun
410*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2 0x668
411*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE5_SHIFT \
412*4882a593Smuzhiyun 16
413*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE5_MASK \
414*4882a593Smuzhiyun (0x3ff << \
415*4882a593Smuzhiyun EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE5_SHIFT)
416*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE4_SHIFT \
417*4882a593Smuzhiyun 0
418*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE4_MASK \
419*4882a593Smuzhiyun (0x3ff << \
420*4882a593Smuzhiyun EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE4_SHIFT)
421*4882a593Smuzhiyun
422*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3 0x66c
423*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE7_SHIFT \
424*4882a593Smuzhiyun 16
425*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE7_MASK \
426*4882a593Smuzhiyun (0x3ff << \
427*4882a593Smuzhiyun EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE7_SHIFT)
428*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE6_SHIFT \
429*4882a593Smuzhiyun 0
430*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE6_MASK \
431*4882a593Smuzhiyun (0x3ff << \
432*4882a593Smuzhiyun EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE6_SHIFT)
433*4882a593Smuzhiyun
434*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_4 0x670
435*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_5 0x674
436*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_0 0x680
437*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_1 0x684
438*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_2 0x688
439*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_3 0x68c
440*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_4 0x690
441*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_5 0x694
442*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_0 0x6a0
443*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_1 0x6a4
444*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_2 0x6a8
445*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_3 0x6ac
446*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_4 0x6b0
447*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_5 0x6b4
448*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_0 0x6c0
449*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_1 0x6c4
450*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_2 0x6c8
451*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_3 0x6cc
452*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_0 0x6e0
453*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_1 0x6e4
454*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_2 0x6e8
455*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_3 0x6ec
456*4882a593Smuzhiyun #define EMC_PMACRO_TX_PWRD_0 0x720
457*4882a593Smuzhiyun #define EMC_PMACRO_TX_PWRD_1 0x724
458*4882a593Smuzhiyun #define EMC_PMACRO_TX_PWRD_2 0x728
459*4882a593Smuzhiyun #define EMC_PMACRO_TX_PWRD_3 0x72c
460*4882a593Smuzhiyun #define EMC_PMACRO_TX_PWRD_4 0x730
461*4882a593Smuzhiyun #define EMC_PMACRO_TX_PWRD_5 0x734
462*4882a593Smuzhiyun #define EMC_PMACRO_TX_SEL_CLK_SRC_0 0x740
463*4882a593Smuzhiyun #define EMC_PMACRO_TX_SEL_CLK_SRC_1 0x744
464*4882a593Smuzhiyun #define EMC_PMACRO_TX_SEL_CLK_SRC_3 0x74c
465*4882a593Smuzhiyun #define EMC_PMACRO_TX_SEL_CLK_SRC_2 0x748
466*4882a593Smuzhiyun #define EMC_PMACRO_TX_SEL_CLK_SRC_4 0x750
467*4882a593Smuzhiyun #define EMC_PMACRO_TX_SEL_CLK_SRC_5 0x754
468*4882a593Smuzhiyun #define EMC_PMACRO_DDLL_BYPASS 0x760
469*4882a593Smuzhiyun #define EMC_PMACRO_DDLL_PWRD_0 0x770
470*4882a593Smuzhiyun #define EMC_PMACRO_DDLL_PWRD_1 0x774
471*4882a593Smuzhiyun #define EMC_PMACRO_DDLL_PWRD_2 0x778
472*4882a593Smuzhiyun #define EMC_PMACRO_CMD_CTRL_0 0x780
473*4882a593Smuzhiyun #define EMC_PMACRO_CMD_CTRL_1 0x784
474*4882a593Smuzhiyun #define EMC_PMACRO_CMD_CTRL_2 0x788
475*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_0 0x800
476*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_1 0x804
477*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_2 0x808
478*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_3 0x80c
479*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_0 0x810
480*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_1 0x814
481*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_2 0x818
482*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_3 0x81c
483*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_0 0x820
484*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_1 0x824
485*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_2 0x828
486*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_3 0x82c
487*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_0 0x830
488*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_1 0x834
489*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_2 0x838
490*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_3 0x83c
491*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_0 0x840
492*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_1 0x844
493*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_2 0x848
494*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_3 0x84c
495*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_0 0x850
496*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_1 0x854
497*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_2 0x858
498*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_3 0x85c
499*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_0 0x860
500*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_1 0x864
501*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_2 0x868
502*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_3 0x86c
503*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_0 0x870
504*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_1 0x874
505*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_2 0x878
506*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_3 0x87c
507*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_0 0x880
508*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_1 0x884
509*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_2 0x888
510*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_3 0x88c
511*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_0 0x890
512*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_1 0x894
513*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_2 0x898
514*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_3 0x89c
515*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_0 0x8a0
516*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_1 0x8a4
517*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_2 0x8a8
518*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_3 0x8ac
519*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_0 0x8b0
520*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_1 0x8b4
521*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_2 0x8b8
522*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_3 0x8bc
523*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_0 0x900
524*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_1 0x904
525*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_2 0x908
526*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_3 0x90c
527*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_0 0x910
528*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_1 0x914
529*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_2 0x918
530*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_3 0x91c
531*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_0 0x920
532*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_1 0x924
533*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_2 0x928
534*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_3 0x92c
535*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_0 0x930
536*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_1 0x934
537*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_2 0x938
538*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_3 0x93c
539*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_0 0x940
540*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_1 0x944
541*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_2 0x948
542*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_3 0x94c
543*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_0 0x950
544*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_1 0x954
545*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_2 0x958
546*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_3 0x95c
547*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_0 0x960
548*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_1 0x964
549*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_2 0x968
550*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_3 0x96c
551*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_0 0x970
552*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_1 0x974
553*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_2 0x978
554*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_3 0x97c
555*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_0 0x980
556*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_1 0x984
557*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_2 0x988
558*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_3 0x98c
559*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_0 0x990
560*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_1 0x994
561*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_2 0x998
562*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_3 0x99c
563*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_0 0x9a0
564*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_1 0x9a4
565*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_2 0x9a8
566*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_3 0x9ac
567*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_0 0x9b0
568*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_1 0x9b4
569*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_2 0x9b8
570*4882a593Smuzhiyun #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_3 0x9bc
571*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE0_0 0xa00
572*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE0_1 0xa04
573*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE0_2 0xa08
574*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE1_0 0xa10
575*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE1_1 0xa14
576*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE1_2 0xa18
577*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE2_0 0xa20
578*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE2_1 0xa24
579*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE2_2 0xa28
580*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE3_0 0xa30
581*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE3_1 0xa34
582*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE3_2 0xa38
583*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE4_0 0xa40
584*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE4_1 0xa44
585*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE4_2 0xa48
586*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE5_0 0xa50
587*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE5_1 0xa54
588*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE5_2 0xa58
589*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE6_0 0xa60
590*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE6_1 0xa64
591*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE6_2 0xa68
592*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE7_0 0xa70
593*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE7_1 0xa74
594*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE7_2 0xa78
595*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE0_0 0xb00
596*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE0_1 0xb04
597*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE0_2 0xb08
598*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE1_0 0xb10
599*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE1_1 0xb14
600*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE1_2 0xb18
601*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE2_0 0xb20
602*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE2_1 0xb24
603*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE2_2 0xb28
604*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE3_0 0xb30
605*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE3_1 0xb34
606*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE3_2 0xb38
607*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE4_0 0xb40
608*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE4_1 0xb44
609*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE4_2 0xb48
610*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE5_0 0xb50
611*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE5_1 0xb54
612*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE5_2 0xb58
613*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE6_0 0xb60
614*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE6_1 0xb64
615*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE6_2 0xb68
616*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE7_0 0xb70
617*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE7_1 0xb74
618*4882a593Smuzhiyun #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE7_2 0xb78
619*4882a593Smuzhiyun #define EMC_PMACRO_IB_VREF_DQ_0 0xbe0
620*4882a593Smuzhiyun #define EMC_PMACRO_IB_VREF_DQ_1 0xbe4
621*4882a593Smuzhiyun #define EMC_PMACRO_IB_VREF_DQS_0 0xbf0
622*4882a593Smuzhiyun #define EMC_PMACRO_IB_VREF_DQS_1 0xbf4
623*4882a593Smuzhiyun #define EMC_PMACRO_DDLL_LONG_CMD_0 0xc00
624*4882a593Smuzhiyun #define EMC_PMACRO_DDLL_LONG_CMD_1 0xc04
625*4882a593Smuzhiyun #define EMC_PMACRO_DDLL_LONG_CMD_2 0xc08
626*4882a593Smuzhiyun #define EMC_PMACRO_DDLL_LONG_CMD_3 0xc0c
627*4882a593Smuzhiyun #define EMC_PMACRO_DDLL_LONG_CMD_4 0xc10
628*4882a593Smuzhiyun #define EMC_PMACRO_DDLL_LONG_CMD_5 0xc14
629*4882a593Smuzhiyun #define EMC_PMACRO_DDLL_SHORT_CMD_0 0xc20
630*4882a593Smuzhiyun #define EMC_PMACRO_DDLL_SHORT_CMD_1 0xc24
631*4882a593Smuzhiyun #define EMC_PMACRO_DDLL_SHORT_CMD_2 0xc28
632*4882a593Smuzhiyun #define EMC_PMACRO_CFG_PM_GLOBAL_0 0xc30
633*4882a593Smuzhiyun #define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE0 BIT(16)
634*4882a593Smuzhiyun #define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE1 BIT(17)
635*4882a593Smuzhiyun #define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE2 BIT(18)
636*4882a593Smuzhiyun #define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE3 BIT(19)
637*4882a593Smuzhiyun #define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE4 BIT(20)
638*4882a593Smuzhiyun #define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE5 BIT(21)
639*4882a593Smuzhiyun #define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE6 BIT(22)
640*4882a593Smuzhiyun #define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE7 BIT(23)
641*4882a593Smuzhiyun #define EMC_PMACRO_VTTGEN_CTRL_0 0xc34
642*4882a593Smuzhiyun #define EMC_PMACRO_VTTGEN_CTRL_1 0xc38
643*4882a593Smuzhiyun #define EMC_PMACRO_BG_BIAS_CTRL_0 0xc3c
644*4882a593Smuzhiyun #define EMC_PMACRO_BG_BIAS_CTRL_0_BG_E_PWRD BIT(0)
645*4882a593Smuzhiyun #define EMC_PMACRO_BG_BIAS_CTRL_0_BGLP_E_PWRD BIT(2)
646*4882a593Smuzhiyun #define EMC_PMACRO_PAD_CFG_CTRL 0xc40
647*4882a593Smuzhiyun #define EMC_PMACRO_ZCTRL 0xc44
648*4882a593Smuzhiyun #define EMC_PMACRO_CMD_PAD_RX_CTRL 0xc50
649*4882a593Smuzhiyun #define EMC_PMACRO_DATA_PAD_RX_CTRL 0xc54
650*4882a593Smuzhiyun #define EMC_PMACRO_CMD_RX_TERM_MODE 0xc58
651*4882a593Smuzhiyun #define EMC_PMACRO_DATA_RX_TERM_MODE 0xc5c
652*4882a593Smuzhiyun #define EMC_PMACRO_CMD_PAD_TX_CTRL 0xc60
653*4882a593Smuzhiyun #define EMC_PMACRO_CMD_PAD_TX_CTRL_CMD_DQ_TX_E_DCC BIT(1)
654*4882a593Smuzhiyun #define EMC_PMACRO_CMD_PAD_TX_CTRL_CMD_DQSP_TX_E_DCC BIT(9)
655*4882a593Smuzhiyun #define EMC_PMACRO_CMD_PAD_TX_CTRL_CMD_DQSN_TX_E_DCC BIT(16)
656*4882a593Smuzhiyun #define EMC_PMACRO_CMD_PAD_TX_CTRL_CMD_CMD_TX_E_DCC BIT(24)
657*4882a593Smuzhiyun #define EMC_PMACRO_CMD_PAD_TX_CTRL_CMD_DQ_TX_DRVFORCEON BIT(26)
658*4882a593Smuzhiyun
659*4882a593Smuzhiyun #define EMC_PMACRO_DATA_PAD_TX_CTRL 0xc64
660*4882a593Smuzhiyun #define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_DQ_E_IVREF BIT(0)
661*4882a593Smuzhiyun #define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_DQ_TX_E_DCC BIT(1)
662*4882a593Smuzhiyun #define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_DQS_E_IVREF BIT(8)
663*4882a593Smuzhiyun #define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_DQSP_TX_E_DCC BIT(9)
664*4882a593Smuzhiyun #define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_DQSN_TX_E_DCC BIT(16)
665*4882a593Smuzhiyun #define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_CMD_TX_E_DCC BIT(24)
666*4882a593Smuzhiyun
667*4882a593Smuzhiyun #define EMC_PMACRO_COMMON_PAD_TX_CTRL 0xc68
668*4882a593Smuzhiyun #define EMC_PMACRO_AUTOCAL_CFG_COMMON 0xc78
669*4882a593Smuzhiyun #define EMC_PMACRO_AUTOCAL_CFG_COMMON_E_CAL_BYPASS_DVFS BIT(16)
670*4882a593Smuzhiyun #define EMC_PMACRO_VTTGEN_CTRL_2 0xcf0
671*4882a593Smuzhiyun #define EMC_PMACRO_IB_RXRT 0xcf4
672*4882a593Smuzhiyun #define EMC_PMACRO_TRAINING_CTRL_0 0xcf8
673*4882a593Smuzhiyun #define EMC_PMACRO_TRAINING_CTRL_0_CH0_TRAINING_E_WRPTR BIT(3)
674*4882a593Smuzhiyun #define EMC_PMACRO_TRAINING_CTRL_1 0xcfc
675*4882a593Smuzhiyun #define EMC_PMACRO_TRAINING_CTRL_1_CH1_TRAINING_E_WRPTR BIT(3)
676*4882a593Smuzhiyun #define EMC_TRAINING_CTRL 0xe04
677*4882a593Smuzhiyun #define EMC_TRAINING_QUSE_CORS_CTRL 0xe0c
678*4882a593Smuzhiyun #define EMC_TRAINING_QUSE_FINE_CTRL 0xe10
679*4882a593Smuzhiyun #define EMC_TRAINING_QUSE_CTRL_MISC 0xe14
680*4882a593Smuzhiyun #define EMC_TRAINING_WRITE_FINE_CTRL 0xe18
681*4882a593Smuzhiyun #define EMC_TRAINING_WRITE_CTRL_MISC 0xe1c
682*4882a593Smuzhiyun #define EMC_TRAINING_WRITE_VREF_CTRL 0xe20
683*4882a593Smuzhiyun #define EMC_TRAINING_READ_FINE_CTRL 0xe24
684*4882a593Smuzhiyun #define EMC_TRAINING_READ_CTRL_MISC 0xe28
685*4882a593Smuzhiyun #define EMC_TRAINING_READ_VREF_CTRL 0xe2c
686*4882a593Smuzhiyun #define EMC_TRAINING_CA_FINE_CTRL 0xe30
687*4882a593Smuzhiyun #define EMC_TRAINING_CA_CTRL_MISC 0xe34
688*4882a593Smuzhiyun #define EMC_TRAINING_CA_CTRL_MISC1 0xe38
689*4882a593Smuzhiyun #define EMC_TRAINING_CA_VREF_CTRL 0xe3c
690*4882a593Smuzhiyun #define EMC_TRAINING_SETTLE 0xe44
691*4882a593Smuzhiyun #define EMC_TRAINING_MPC 0xe5c
692*4882a593Smuzhiyun #define EMC_TRAINING_VREF_SETTLE 0xe6c
693*4882a593Smuzhiyun #define EMC_TRAINING_QUSE_VREF_CTRL 0xed0
694*4882a593Smuzhiyun #define EMC_TRAINING_OPT_DQS_IB_VREF_RANK0 0xed4
695*4882a593Smuzhiyun #define EMC_TRAINING_OPT_DQS_IB_VREF_RANK1 0xed8
696*4882a593Smuzhiyun
697*4882a593Smuzhiyun #define EMC_COPY_TABLE_PARAM_PERIODIC_FIELDS BIT(0)
698*4882a593Smuzhiyun #define EMC_COPY_TABLE_PARAM_TRIM_REGS BIT(1)
699*4882a593Smuzhiyun
700*4882a593Smuzhiyun enum burst_regs_list {
701*4882a593Smuzhiyun EMC_RP_INDEX = 6,
702*4882a593Smuzhiyun EMC_R2P_INDEX = 9,
703*4882a593Smuzhiyun EMC_W2P_INDEX,
704*4882a593Smuzhiyun EMC_MRW6_INDEX = 31,
705*4882a593Smuzhiyun EMC_REFRESH_INDEX = 41,
706*4882a593Smuzhiyun EMC_PRE_REFRESH_REQ_CNT_INDEX = 43,
707*4882a593Smuzhiyun EMC_TRPAB_INDEX = 59,
708*4882a593Smuzhiyun EMC_MRW7_INDEX = 62,
709*4882a593Smuzhiyun EMC_FBIO_CFG5_INDEX = 65,
710*4882a593Smuzhiyun EMC_FBIO_CFG7_INDEX,
711*4882a593Smuzhiyun EMC_CFG_DIG_DLL_INDEX,
712*4882a593Smuzhiyun EMC_ZCAL_INTERVAL_INDEX = 139,
713*4882a593Smuzhiyun EMC_ZCAL_WAIT_CNT_INDEX,
714*4882a593Smuzhiyun EMC_MRS_WAIT_CNT_INDEX = 141,
715*4882a593Smuzhiyun EMC_DLL_CFG_0_INDEX = 144,
716*4882a593Smuzhiyun EMC_PMACRO_AUTOCAL_CFG_COMMON_INDEX = 146,
717*4882a593Smuzhiyun EMC_CFG_INDEX = 148,
718*4882a593Smuzhiyun EMC_DYN_SELF_REF_CONTROL_INDEX = 150,
719*4882a593Smuzhiyun EMC_PMACRO_CMD_PAD_TX_CTRL_INDEX = 161,
720*4882a593Smuzhiyun EMC_PMACRO_DATA_PAD_TX_CTRL_INDEX,
721*4882a593Smuzhiyun EMC_PMACRO_COMMON_PAD_TX_CTRL_INDEX,
722*4882a593Smuzhiyun EMC_PMACRO_BRICK_CTRL_RFU1_INDEX = 167,
723*4882a593Smuzhiyun EMC_PMACRO_BG_BIAS_CTRL_0_INDEX = 171,
724*4882a593Smuzhiyun EMC_MRW14_INDEX = 199,
725*4882a593Smuzhiyun EMC_MRW15_INDEX = 220,
726*4882a593Smuzhiyun };
727*4882a593Smuzhiyun
728*4882a593Smuzhiyun enum trim_regs_list {
729*4882a593Smuzhiyun EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_INDEX = 60,
730*4882a593Smuzhiyun EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_INDEX,
731*4882a593Smuzhiyun EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_INDEX,
732*4882a593Smuzhiyun EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_INDEX,
733*4882a593Smuzhiyun EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_4_INDEX,
734*4882a593Smuzhiyun EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_5_INDEX,
735*4882a593Smuzhiyun EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_INDEX,
736*4882a593Smuzhiyun EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_INDEX,
737*4882a593Smuzhiyun EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_INDEX,
738*4882a593Smuzhiyun EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_INDEX,
739*4882a593Smuzhiyun };
740*4882a593Smuzhiyun
741*4882a593Smuzhiyun enum burst_mc_regs_list {
742*4882a593Smuzhiyun MC_EMEM_ARB_MISC0_INDEX = 20,
743*4882a593Smuzhiyun };
744*4882a593Smuzhiyun
745*4882a593Smuzhiyun enum {
746*4882a593Smuzhiyun T_RP,
747*4882a593Smuzhiyun T_FC_LPDDR4,
748*4882a593Smuzhiyun T_RFC,
749*4882a593Smuzhiyun T_PDEX,
750*4882a593Smuzhiyun RL,
751*4882a593Smuzhiyun };
752*4882a593Smuzhiyun
753*4882a593Smuzhiyun enum {
754*4882a593Smuzhiyun AUTO_PD = 0,
755*4882a593Smuzhiyun MAN_SR = 2,
756*4882a593Smuzhiyun };
757*4882a593Smuzhiyun
758*4882a593Smuzhiyun enum {
759*4882a593Smuzhiyun ASSEMBLY = 0,
760*4882a593Smuzhiyun ACTIVE,
761*4882a593Smuzhiyun };
762*4882a593Smuzhiyun
763*4882a593Smuzhiyun enum {
764*4882a593Smuzhiyun C0D0U0,
765*4882a593Smuzhiyun C0D0U1,
766*4882a593Smuzhiyun C0D1U0,
767*4882a593Smuzhiyun C0D1U1,
768*4882a593Smuzhiyun C1D0U0,
769*4882a593Smuzhiyun C1D0U1,
770*4882a593Smuzhiyun C1D1U0,
771*4882a593Smuzhiyun C1D1U1,
772*4882a593Smuzhiyun DRAM_CLKTREE_NUM,
773*4882a593Smuzhiyun };
774*4882a593Smuzhiyun
775*4882a593Smuzhiyun #define VREF_REGS_PER_CHANNEL_SIZE 4
776*4882a593Smuzhiyun #define DRAM_TIMINGS_NUM 5
777*4882a593Smuzhiyun #define BURST_REGS_PER_CHANNEL_SIZE 8
778*4882a593Smuzhiyun #define TRIM_REGS_PER_CHANNEL_SIZE 10
779*4882a593Smuzhiyun #define PTFV_ARRAY_SIZE 12
780*4882a593Smuzhiyun #define SAVE_RESTORE_MOD_REGS_SIZE 12
781*4882a593Smuzhiyun #define TRAINING_MOD_REGS_SIZE 20
782*4882a593Smuzhiyun #define BURST_UP_DOWN_REGS_SIZE 24
783*4882a593Smuzhiyun #define BURST_MC_REGS_SIZE 33
784*4882a593Smuzhiyun #define TRIM_REGS_SIZE 138
785*4882a593Smuzhiyun #define BURST_REGS_SIZE 221
786*4882a593Smuzhiyun
787*4882a593Smuzhiyun struct tegra210_emc_per_channel_regs {
788*4882a593Smuzhiyun u16 bank;
789*4882a593Smuzhiyun u16 offset;
790*4882a593Smuzhiyun };
791*4882a593Smuzhiyun
792*4882a593Smuzhiyun struct tegra210_emc_table_register_offsets {
793*4882a593Smuzhiyun u16 burst[BURST_REGS_SIZE];
794*4882a593Smuzhiyun u16 trim[TRIM_REGS_SIZE];
795*4882a593Smuzhiyun u16 burst_mc[BURST_MC_REGS_SIZE];
796*4882a593Smuzhiyun u16 la_scale[BURST_UP_DOWN_REGS_SIZE];
797*4882a593Smuzhiyun struct tegra210_emc_per_channel_regs burst_per_channel[BURST_REGS_PER_CHANNEL_SIZE];
798*4882a593Smuzhiyun struct tegra210_emc_per_channel_regs trim_per_channel[TRIM_REGS_PER_CHANNEL_SIZE];
799*4882a593Smuzhiyun struct tegra210_emc_per_channel_regs vref_per_channel[VREF_REGS_PER_CHANNEL_SIZE];
800*4882a593Smuzhiyun };
801*4882a593Smuzhiyun
802*4882a593Smuzhiyun struct tegra210_emc_timing {
803*4882a593Smuzhiyun u32 revision;
804*4882a593Smuzhiyun const char dvfs_ver[60];
805*4882a593Smuzhiyun u32 rate;
806*4882a593Smuzhiyun u32 min_volt;
807*4882a593Smuzhiyun u32 gpu_min_volt;
808*4882a593Smuzhiyun const char clock_src[32];
809*4882a593Smuzhiyun u32 clk_src_emc;
810*4882a593Smuzhiyun u32 needs_training;
811*4882a593Smuzhiyun u32 training_pattern;
812*4882a593Smuzhiyun u32 trained;
813*4882a593Smuzhiyun
814*4882a593Smuzhiyun u32 periodic_training;
815*4882a593Smuzhiyun u32 trained_dram_clktree[DRAM_CLKTREE_NUM];
816*4882a593Smuzhiyun u32 current_dram_clktree[DRAM_CLKTREE_NUM];
817*4882a593Smuzhiyun u32 run_clocks;
818*4882a593Smuzhiyun u32 tree_margin;
819*4882a593Smuzhiyun
820*4882a593Smuzhiyun u32 num_burst;
821*4882a593Smuzhiyun u32 num_burst_per_ch;
822*4882a593Smuzhiyun u32 num_trim;
823*4882a593Smuzhiyun u32 num_trim_per_ch;
824*4882a593Smuzhiyun u32 num_mc_regs;
825*4882a593Smuzhiyun u32 num_up_down;
826*4882a593Smuzhiyun u32 vref_num;
827*4882a593Smuzhiyun u32 training_mod_num;
828*4882a593Smuzhiyun u32 dram_timing_num;
829*4882a593Smuzhiyun
830*4882a593Smuzhiyun u32 ptfv_list[PTFV_ARRAY_SIZE];
831*4882a593Smuzhiyun
832*4882a593Smuzhiyun u32 burst_regs[BURST_REGS_SIZE];
833*4882a593Smuzhiyun u32 burst_reg_per_ch[BURST_REGS_PER_CHANNEL_SIZE];
834*4882a593Smuzhiyun u32 shadow_regs_ca_train[BURST_REGS_SIZE];
835*4882a593Smuzhiyun u32 shadow_regs_quse_train[BURST_REGS_SIZE];
836*4882a593Smuzhiyun u32 shadow_regs_rdwr_train[BURST_REGS_SIZE];
837*4882a593Smuzhiyun
838*4882a593Smuzhiyun u32 trim_regs[TRIM_REGS_SIZE];
839*4882a593Smuzhiyun u32 trim_perch_regs[TRIM_REGS_PER_CHANNEL_SIZE];
840*4882a593Smuzhiyun
841*4882a593Smuzhiyun u32 vref_perch_regs[VREF_REGS_PER_CHANNEL_SIZE];
842*4882a593Smuzhiyun
843*4882a593Smuzhiyun u32 dram_timings[DRAM_TIMINGS_NUM];
844*4882a593Smuzhiyun u32 training_mod_regs[TRAINING_MOD_REGS_SIZE];
845*4882a593Smuzhiyun u32 save_restore_mod_regs[SAVE_RESTORE_MOD_REGS_SIZE];
846*4882a593Smuzhiyun u32 burst_mc_regs[BURST_MC_REGS_SIZE];
847*4882a593Smuzhiyun u32 la_scale_regs[BURST_UP_DOWN_REGS_SIZE];
848*4882a593Smuzhiyun
849*4882a593Smuzhiyun u32 min_mrs_wait;
850*4882a593Smuzhiyun u32 emc_mrw;
851*4882a593Smuzhiyun u32 emc_mrw2;
852*4882a593Smuzhiyun u32 emc_mrw3;
853*4882a593Smuzhiyun u32 emc_mrw4;
854*4882a593Smuzhiyun u32 emc_mrw9;
855*4882a593Smuzhiyun u32 emc_mrs;
856*4882a593Smuzhiyun u32 emc_emrs;
857*4882a593Smuzhiyun u32 emc_emrs2;
858*4882a593Smuzhiyun u32 emc_auto_cal_config;
859*4882a593Smuzhiyun u32 emc_auto_cal_config2;
860*4882a593Smuzhiyun u32 emc_auto_cal_config3;
861*4882a593Smuzhiyun u32 emc_auto_cal_config4;
862*4882a593Smuzhiyun u32 emc_auto_cal_config5;
863*4882a593Smuzhiyun u32 emc_auto_cal_config6;
864*4882a593Smuzhiyun u32 emc_auto_cal_config7;
865*4882a593Smuzhiyun u32 emc_auto_cal_config8;
866*4882a593Smuzhiyun u32 emc_cfg_2;
867*4882a593Smuzhiyun u32 emc_sel_dpd_ctrl;
868*4882a593Smuzhiyun u32 emc_fdpd_ctrl_cmd_no_ramp;
869*4882a593Smuzhiyun u32 dll_clk_src;
870*4882a593Smuzhiyun u32 clk_out_enb_x_0_clk_enb_emc_dll;
871*4882a593Smuzhiyun u32 latency;
872*4882a593Smuzhiyun };
873*4882a593Smuzhiyun
874*4882a593Smuzhiyun enum tegra210_emc_refresh {
875*4882a593Smuzhiyun TEGRA210_EMC_REFRESH_NOMINAL = 0,
876*4882a593Smuzhiyun TEGRA210_EMC_REFRESH_2X,
877*4882a593Smuzhiyun TEGRA210_EMC_REFRESH_4X,
878*4882a593Smuzhiyun TEGRA210_EMC_REFRESH_THROTTLE, /* 4x Refresh + derating. */
879*4882a593Smuzhiyun };
880*4882a593Smuzhiyun
881*4882a593Smuzhiyun #define DRAM_TYPE_DDR3 0
882*4882a593Smuzhiyun #define DRAM_TYPE_LPDDR4 1
883*4882a593Smuzhiyun #define DRAM_TYPE_LPDDR2 2
884*4882a593Smuzhiyun #define DRAM_TYPE_DDR2 3
885*4882a593Smuzhiyun
886*4882a593Smuzhiyun struct tegra210_emc {
887*4882a593Smuzhiyun struct tegra_mc *mc;
888*4882a593Smuzhiyun struct device *dev;
889*4882a593Smuzhiyun struct clk *clk;
890*4882a593Smuzhiyun
891*4882a593Smuzhiyun /* nominal EMC frequency table */
892*4882a593Smuzhiyun struct tegra210_emc_timing *nominal;
893*4882a593Smuzhiyun /* derated EMC frequency table */
894*4882a593Smuzhiyun struct tegra210_emc_timing *derated;
895*4882a593Smuzhiyun
896*4882a593Smuzhiyun /* currently selected table (nominal or derated) */
897*4882a593Smuzhiyun struct tegra210_emc_timing *timings;
898*4882a593Smuzhiyun unsigned int num_timings;
899*4882a593Smuzhiyun
900*4882a593Smuzhiyun const struct tegra210_emc_table_register_offsets *offsets;
901*4882a593Smuzhiyun
902*4882a593Smuzhiyun const struct tegra210_emc_sequence *sequence;
903*4882a593Smuzhiyun spinlock_t lock;
904*4882a593Smuzhiyun
905*4882a593Smuzhiyun void __iomem *regs, *channel[2];
906*4882a593Smuzhiyun unsigned int num_channels;
907*4882a593Smuzhiyun unsigned int num_devices;
908*4882a593Smuzhiyun unsigned int dram_type;
909*4882a593Smuzhiyun
910*4882a593Smuzhiyun struct tegra210_emc_timing *last;
911*4882a593Smuzhiyun struct tegra210_emc_timing *next;
912*4882a593Smuzhiyun
913*4882a593Smuzhiyun unsigned int training_interval;
914*4882a593Smuzhiyun struct timer_list training;
915*4882a593Smuzhiyun
916*4882a593Smuzhiyun enum tegra210_emc_refresh refresh;
917*4882a593Smuzhiyun unsigned int refresh_poll_interval;
918*4882a593Smuzhiyun struct timer_list refresh_timer;
919*4882a593Smuzhiyun unsigned int temperature;
920*4882a593Smuzhiyun atomic_t refresh_poll;
921*4882a593Smuzhiyun
922*4882a593Smuzhiyun ktime_t clkchange_time;
923*4882a593Smuzhiyun int clkchange_delay;
924*4882a593Smuzhiyun
925*4882a593Smuzhiyun unsigned long resume_rate;
926*4882a593Smuzhiyun
927*4882a593Smuzhiyun struct {
928*4882a593Smuzhiyun struct dentry *root;
929*4882a593Smuzhiyun unsigned long min_rate;
930*4882a593Smuzhiyun unsigned long max_rate;
931*4882a593Smuzhiyun unsigned int temperature;
932*4882a593Smuzhiyun } debugfs;
933*4882a593Smuzhiyun
934*4882a593Smuzhiyun struct tegra210_clk_emc_provider provider;
935*4882a593Smuzhiyun };
936*4882a593Smuzhiyun
937*4882a593Smuzhiyun struct tegra210_emc_sequence {
938*4882a593Smuzhiyun u8 revision;
939*4882a593Smuzhiyun void (*set_clock)(struct tegra210_emc *emc, u32 clksrc);
940*4882a593Smuzhiyun u32 (*periodic_compensation)(struct tegra210_emc *emc);
941*4882a593Smuzhiyun };
942*4882a593Smuzhiyun
emc_writel(struct tegra210_emc * emc,u32 value,unsigned int offset)943*4882a593Smuzhiyun static inline void emc_writel(struct tegra210_emc *emc, u32 value,
944*4882a593Smuzhiyun unsigned int offset)
945*4882a593Smuzhiyun {
946*4882a593Smuzhiyun writel_relaxed(value, emc->regs + offset);
947*4882a593Smuzhiyun }
948*4882a593Smuzhiyun
emc_readl(struct tegra210_emc * emc,unsigned int offset)949*4882a593Smuzhiyun static inline u32 emc_readl(struct tegra210_emc *emc, unsigned int offset)
950*4882a593Smuzhiyun {
951*4882a593Smuzhiyun return readl_relaxed(emc->regs + offset);
952*4882a593Smuzhiyun }
953*4882a593Smuzhiyun
emc_channel_writel(struct tegra210_emc * emc,unsigned int channel,u32 value,unsigned int offset)954*4882a593Smuzhiyun static inline void emc_channel_writel(struct tegra210_emc *emc,
955*4882a593Smuzhiyun unsigned int channel,
956*4882a593Smuzhiyun u32 value, unsigned int offset)
957*4882a593Smuzhiyun {
958*4882a593Smuzhiyun writel_relaxed(value, emc->channel[channel] + offset);
959*4882a593Smuzhiyun }
960*4882a593Smuzhiyun
emc_channel_readl(struct tegra210_emc * emc,unsigned int channel,unsigned int offset)961*4882a593Smuzhiyun static inline u32 emc_channel_readl(struct tegra210_emc *emc,
962*4882a593Smuzhiyun unsigned int channel, unsigned int offset)
963*4882a593Smuzhiyun {
964*4882a593Smuzhiyun return readl_relaxed(emc->channel[channel] + offset);
965*4882a593Smuzhiyun }
966*4882a593Smuzhiyun
ccfifo_writel(struct tegra210_emc * emc,u32 value,unsigned int offset,u32 delay)967*4882a593Smuzhiyun static inline void ccfifo_writel(struct tegra210_emc *emc, u32 value,
968*4882a593Smuzhiyun unsigned int offset, u32 delay)
969*4882a593Smuzhiyun {
970*4882a593Smuzhiyun writel_relaxed(value, emc->regs + EMC_CCFIFO_DATA);
971*4882a593Smuzhiyun
972*4882a593Smuzhiyun value = EMC_CCFIFO_ADDR_STALL_BY_1 | EMC_CCFIFO_ADDR_STALL(delay) |
973*4882a593Smuzhiyun EMC_CCFIFO_ADDR_OFFSET(offset);
974*4882a593Smuzhiyun writel_relaxed(value, emc->regs + EMC_CCFIFO_ADDR);
975*4882a593Smuzhiyun }
976*4882a593Smuzhiyun
div_o3(u32 a,u32 b)977*4882a593Smuzhiyun static inline u32 div_o3(u32 a, u32 b)
978*4882a593Smuzhiyun {
979*4882a593Smuzhiyun u32 result = a / b;
980*4882a593Smuzhiyun
981*4882a593Smuzhiyun if ((b * result) < a)
982*4882a593Smuzhiyun return result + 1;
983*4882a593Smuzhiyun
984*4882a593Smuzhiyun return result;
985*4882a593Smuzhiyun }
986*4882a593Smuzhiyun
987*4882a593Smuzhiyun /* from tegra210-emc-r21021.c */
988*4882a593Smuzhiyun extern const struct tegra210_emc_sequence tegra210_emc_r21021;
989*4882a593Smuzhiyun
990*4882a593Smuzhiyun int tegra210_emc_set_refresh(struct tegra210_emc *emc,
991*4882a593Smuzhiyun enum tegra210_emc_refresh refresh);
992*4882a593Smuzhiyun u32 tegra210_emc_mrr_read(struct tegra210_emc *emc, unsigned int chip,
993*4882a593Smuzhiyun unsigned int address);
994*4882a593Smuzhiyun void tegra210_emc_do_clock_change(struct tegra210_emc *emc, u32 clksrc);
995*4882a593Smuzhiyun void tegra210_emc_set_shadow_bypass(struct tegra210_emc *emc, int set);
996*4882a593Smuzhiyun void tegra210_emc_timing_update(struct tegra210_emc *emc);
997*4882a593Smuzhiyun u32 tegra210_emc_get_dll_state(struct tegra210_emc_timing *next);
998*4882a593Smuzhiyun struct tegra210_emc_timing *tegra210_emc_find_timing(struct tegra210_emc *emc,
999*4882a593Smuzhiyun unsigned long rate);
1000*4882a593Smuzhiyun void tegra210_emc_adjust_timing(struct tegra210_emc *emc,
1001*4882a593Smuzhiyun struct tegra210_emc_timing *timing);
1002*4882a593Smuzhiyun int tegra210_emc_wait_for_update(struct tegra210_emc *emc, unsigned int channel,
1003*4882a593Smuzhiyun unsigned int offset, u32 bit_mask, bool state);
1004*4882a593Smuzhiyun unsigned long tegra210_emc_actual_osc_clocks(u32 in);
1005*4882a593Smuzhiyun u32 tegra210_emc_compensate(struct tegra210_emc_timing *next, u32 offset);
1006*4882a593Smuzhiyun void tegra210_emc_dll_disable(struct tegra210_emc *emc);
1007*4882a593Smuzhiyun void tegra210_emc_dll_enable(struct tegra210_emc *emc);
1008*4882a593Smuzhiyun u32 tegra210_emc_dll_prelock(struct tegra210_emc *emc, u32 clksrc);
1009*4882a593Smuzhiyun u32 tegra210_emc_dvfs_power_ramp_down(struct tegra210_emc *emc, u32 clk,
1010*4882a593Smuzhiyun bool flip_backward);
1011*4882a593Smuzhiyun u32 tegra210_emc_dvfs_power_ramp_up(struct tegra210_emc *emc, u32 clk,
1012*4882a593Smuzhiyun bool flip_backward);
1013*4882a593Smuzhiyun void tegra210_emc_reset_dram_clktree_values(struct tegra210_emc_timing *timing);
1014*4882a593Smuzhiyun void tegra210_emc_start_periodic_compensation(struct tegra210_emc *emc);
1015*4882a593Smuzhiyun
1016*4882a593Smuzhiyun #endif
1017